############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.41A/W32 EVALUATION 11/Mar/2008 12:15:00 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\mod_src\natasha with id3 # # tag(20.02.08)\main.c # # Command line = "D:\Pasha\elf\mod_src\natasha with id3 # # tag(20.02.08)\main.c" -D NEWSGOLD -D ELKA -D # # UIN_WRITE --preprocess "D:\Pasha\elf\mod_src\natasha # # with id3 tag(20.02.08)\Release_ELKA\List\" -lC # # "D:\Pasha\elf\mod_src\natasha with id3 # # tag(20.02.08)\Release_ELKA\List\" -o # # "D:\Pasha\elf\mod_src\natasha with id3 # # tag(20.02.08)\Release_ELKA\Obj\" -s9 --no_unroll # # --cpu_mode arm --endian little --cpu ARM926EJ-S # # --stack_align 4 --interwork -e --fpu None # # --dlib_config "D:\Pasha\ARM_Embedded_Workbench\Embed # # ded Workbench 4.0 Evaluation\ARM\LIB\dl5tpainl8n.h" # # -I "D:\Pasha\ARM_Embedded_Workbench\Embedded # # Workbench 4.0 Evaluation\ARM\INC\" # # --inline_threshold=2 # # List file = D:\Pasha\elf\mod_src\natasha with id3 # # tag(20.02.08)\Release_ELKA\List\main.lst # # Object file = D:\Pasha\elf\mod_src\natasha with id3 # # tag(20.02.08)\Release_ELKA\Obj\main.r79 # # # # # ############################################################################## D:\Pasha\elf\mod_src\natasha with id3 tag(20.02.08)\main.c 1 #include "../inc/swilib.h" 2 #include "../inc/cfg_items.h" 3 #include "../inc/pnglist.h" 4 //#include "NatICQ.h" 5 #include "rect_patcher.h" 6 #include "naticq.h" 7 #include "history.h" 8 #include "conf_loader.h" 9 #include "mainmenu.h" 10 #include "main.h" 11 #include "language.h" 12 #include "../inc/xtask_ipc.h" 13 #include "smiles.h" 14 #include "naticq_ipc.h" 15 #include "status_change.h" 16 #include "strings.h" 17 //#include "string_util_int.h" 18 #include "manage_cl.h" 19 #include "cl_work.h" 20 #include "select_smile.h" 21 #include "revision.h" 22 #include "print.h" 23 #ifdef NEWSGOLD 24 #include "player_tags.h" 25 #endif 26 #include "swilib2.h" 27 28 #ifndef NEWSGOLD 29 #define SEND_TIMER 30 #endif 31 extern int DEVELOP_IF; 32 33 extern const unsigned int Vibra_cc; 34 #ifdef ELKA 35 #pragma swi_number=54 36 __swi __arm void SLI_SetState(unsigned char state); 37 #endif 38 39 #define IN_TICKS(sec) (sec * TMR_SECOND) 40 extern int janis; 41 extern const unsigned int date_X; 42 extern const unsigned int date_Y; 43 extern const unsigned int unread_X; 44 extern const unsigned int unread_Y; 45 extern const int show_xstatus; 46 extern const char fontpath[64]; 47 #ifdef EVILFOX 48 int fonto=1; 49 int space=1; 50 #else 51 extern const unsigned int fonto; 52 extern const unsigned int spaco1; 53 extern const unsigned int spaco2; 54 extern int *XStatusesIconArray; 55 #endif 56 int align=0; 57 //int space=1; 58 void *canvasdata; 59 //#ifdef ELKA 60 int paused_height; 61 //#endif 62 //char lielims[128]; 63 extern const unsigned int AUTO_ENGADE; 64 char talk_sound[128]; 65 int uins; 66 //char m_1[]="unofficial! private use only"; 67 //char m_2[]="mod by (c)Evilfox 315384924"; 68 char unread_msg_info[64]; 69 extern const int Is_Unread_On; 70 #ifdef NEWSGOLD 71 extern char teast2[256]; 72 #endif 73 74 #ifdef ELKA 75 char last_msg_buffer[4048]; 76 #endif 77 ///////////////////////////////////////////////auto ping//////////////////// 78 GBSTMR mytmr3; 79 static void PingToServer2(void) 80 { 81 TPKT *p; 82 p=malloc(sizeof(PKT)+sizeof(TTime)); 83 GetDateTime(NULL,(TTime *)p->data); 84 p->pkt.uin=0; 85 p->pkt.type=T_ECHO; 86 p->pkt.data_len=sizeof(TTime); 87 SUBPROC((void *)SendAnswer,0,p); 88 } 89 90 int Is_PING_On; 91 \ In segment CODE, align 4, keep-with-next 92 void Pinger2() 93 { 94 if(Is_PING_On) \ Pinger2: \ 00000000 ........ LDR R0,??DataTable33 ;; S_ICONS \ 00000004 70402DE9 PUSH {R4-R6,LR} \ 00000008 ........ LDR R5,??DataTable1 ;; Pinger2 \ 0000000C A410A0E3 MOV R1,#+164 \ 00000010 4C1D81E3 ORR R1,R1,#0x1300 \ 00000014 004081E0 ADD R4,R1,R0 \ 00000018 A80090E5 LDR R0,[R0, #+168] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1500000A BEQ ??Pinger2_0 95 { 96 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 97 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} 98 } 99 else 100 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 101 } \ 0000008C 7080BDE8 POP {R4-R6,PC} ;; return 102 //////////////////////////////////////auto ping///////////////////////////// 103 extern volatile int total_smiles; 104 extern volatile int total_xstatuses; 105 extern volatile int xstatuses_load; 106 extern volatile int pictures_max; 107 extern volatile int pictures_loaded; 108 #ifdef ELKA 109 int Is_SLI_On; 110 /* 111 #pragma swi_number=0x221 112 __swi __arm int SetCpuClockLow(); 113 114 #pragma swi_number=0x222 115 __swi __arm int SetCpuClockTempHi(); 116 */ 117 #endif 118 int Is_SMARTCPU_On; 119 int Is_INC_On; 120 int Is_ILU_On; 121 122 int Is_Double_Vibra_On; 123 int total_unread; 124 int total_unread2; 125 #ifdef ELKA 126 //extern \ In segment DATA_C, align 4, align-sorted 127 const int SLI_TYPE=1; \ SLI_TYPE: \ 00000000 01000000 DC32 1 128 #endif 129 char PINGO[256]; 130 //extern const int VIBRA_TYPE; 131 //unsigned int SLI_STATUS; 132 #ifdef ELKA 133 extern const unsigned int SLI_time; 134 extern const unsigned int SLI_time2; 135 #endif 136 #define USE_MLMENU 137 138 #define TMR_SECOND 216 139 140 //IPC 141 const char ipc_my_name[32]=IPC_NATICQ_NAME; 142 const char ipc_xtask_name[]=IPC_XTASK_NAME; 143 const char ipc_test_name[]="test"; 144 IPC_REQ gipc; 145 146 147 char elf_path[256]; 148 int maincsm_id; 149 int maingui_id; 150 \ In segment CODE, align 4, keep-with-next 151 void SMART_REDRAW(void) 152 { \ SMART_REDRAW: \ 00000000 10402DE9 PUSH {R4,LR} 153 int f; 154 LockSched(); \ 00000004 460100EF SWI +326 155 f=IsGuiOnTop(maingui_id); \ 00000008 1C009FE5 LDR R0,??SMART_REDRAW_0 ;; S_ICONS + 204 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 350100EF SWI +309 \ 00000014 0040A0E1 MOV R4,R0 156 UnlockSched(); \ 00000018 470100EF SWI +327 157 if (f) REDRAW(); \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} \ 00000024 720100EF SWI +370 158 } \ 00000028 1080BDE8 POP {R4,PC} ;; return \ ??SMART_REDRAW_0: \ 0000002C ........ DC32 S_ICONS + 204 159 160 //По 10 секунд 161 #ifdef EVILFOX 162 #define ACTIVE_TIME 30 163 #else 164 #define ACTIVE_TIME 360 165 #endif 166 167 //Максимальное количество сообщений в логе 168 #ifdef EVILFOX 169 #define MAXLOGMSG (10) 170 #else 171 #define MAXLOGMSG (20) 172 #endif 173 174 // Строковые описания статусов 175 176 const char S_OFFLINE[]="Offline"; 177 const char S_INVISIBLE[]="Invisible"; 178 const char S_AWAY[]="Away"; 179 const char S_NA[]="N/A"; 180 const char S_OCCUPIED[]="Occupied"; 181 const char S_DND[]="DND"; 182 const char S_ONLINE[]="Online"; 183 const char S_FFC[]="FFC"; 184 185 volatile int SENDMSGCOUNT; 186 187 int IsActiveUp=0; 188 189 int Is_Vibra_Enabled; 190 int Is_Id3tag_Enabled; 191 unsigned int Is_Sounds_Enabled; 192 int Is_Show_Offline; 193 int Is_Show_Groups; 194 195 int S_ICONS[TOTAL_ICONS+1]; 196 197 #define EOP -10 198 int CurrentStatus; 199 #ifdef NEWSGOLD 200 extern int CurrentXStatus; 201 #else 202 int CurrentXStatus; 203 #endif 204 205 WSHDR *ews; 206 207 extern const unsigned int UIN; 208 extern const char PASS[]; 209 210 static const char * const icons_names[TOTAL_ICONS]= 211 { 212 "offline.png", 213 "invisible.png", 214 "away.png", 215 "na.png", 216 "occupied.png", 217 "dnd.png", 218 "depression.png", 219 "evil.png", 220 "home.png", 221 "lunch.png", 222 "work.png", 223 "online.png", 224 "ffc.png", 225 "message.png", 226 "unknown.png", 227 "groupon.png", 228 "groupoff.png", 229 "null.png", 230 "addcont.png", 231 "head.png", 232 "logo.png", 233 "ping.png", 234 "settings.png", 235 "vis1.png", 236 "vis2.png", 237 "vis3.png", 238 "vis4.png", 239 "vis5.png" 240 }; 241 242 extern const char ICON_PATH[]; 243 244 ////=================================away_msg============== 245 #pragma swi_number=0x0C5 246 __swi __arm int IsIdleUiOnTop(); 247 248 //#ifdef EVILFOX 249 int msg_away_timer=0; 250 extern const char away_msg2[64]; 251 char *inp_away_msg2; 252 char away_msg[264]; 253 char away_msg_time[64]; \ In segment DATA_Z, align 4, align-sorted 254 char away_msg_time2[64]; \ away_msg_time2: \ 00000000 DS8 64 255 char away_msg_time_dace[16]; 256 char tim_zone[16]; 257 extern const int time_zone; \ In segment DATA_Z, align 4, align-sorted 258 int timeh; \ timeh: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 259 int timemin; \ timemin: \ 00000000 DS8 4 260 int away_m; 261 int status_rem; 262 int change_back_status; 263 GBSTMR away_tmr; 264 extern const int Auto_Status; 265 int CurrentPrivateStatus; 266 extern const int SendIsInviz; \ In segment CODE, align 4, keep-with-next 267 void away_timer() 268 { 269 if(msg_away_timer==AUTO_ENGADE) \ away_timer: \ 00000000 ........ LDR R1,??DataTable3 ;; AUTO_ENGADE \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 ........ LDR R4,??DataTable33 ;; S_ICONS \ 0000000C 08D04DE2 SUB SP,SP,#+8 \ 00000010 E00094E5 LDR R0,[R4, #+224] \ 00000014 001091E5 LDR R1,[R1, #+0] \ 00000018 010050E1 CMP R0,R1 \ 0000001C 2700001A BNE ??away_timer_0 270 { 271 if((CurrentPrivateStatus==1) && (SendIsInviz==0)) goto next;//Если в инвизе и не отправлять если в инвизе \ 00000020 F40094E5 LDR R0,[R4, #+244] \ 00000024 010050E3 CMP R0,#+1 \ 00000028 0300001A BNE ??away_timer_1 \ 0000002C C4009FE5 LDR R0,??away_timer_2 ;; SendIsInviz \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 2000000A BEQ ??away_timer_0 272 TTime tt; 273 // TDate d; 274 GetDateTime(NULL,&tt); 275 //#ifdef EVILFOX 276 sprintf(away_msg_time_dace, "%02d:%02d", tt.hour, tt.min); \ ??away_timer_1: \ 0000003C B8509FE5 LDR R5,??away_timer_2+0x4 ;; `?` \ 00000040 0D10A0E1 MOV R1,SP \ 00000044 0000A0E3 MOV R0,#+0 \ 00000048 B40000EF SWI +180 \ 0000004C 0130DDE5 LDRB R3,[SP, #+1] \ 00000050 0020DDE5 LDRB R2,[SP, #+0] \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 FC00A0E3 MOV R0,#+252 \ 0000005C 540D80E3 ORR R0,R0,#0x1500 \ 00000060 040080E0 ADD R0,R0,R4 \ 00000064 160000EF SWI +22 277 //#endif 278 sprintf(away_msg_time, "(отсутствую примерно с %02d:%02d (%s) )", tt.hour, tt.min, tim_zone); \ 00000068 0C00A0E3 MOV R0,#+12 \ 0000006C 580D80E3 ORR R0,R0,#0x1600 \ 00000070 040080E0 ADD R0,R0,R4 \ 00000074 01002DE9 PUSH {R0} \ 00000078 0530DDE5 LDRB R3,[SP, #+5] \ 0000007C 0420DDE5 LDRB R2,[SP, #+4] \ 00000080 0C1085E2 ADD R1,R5,#+12 \ 00000084 BC00A0E3 MOV R0,#+188 \ 00000088 540D80E3 ORR R0,R0,#0x1500 \ 0000008C 040080E0 ADD R0,R0,R4 \ 00000090 160000EF SWI +22 279 away_m=1; 280 if(CurrentStatus!=2) \ 00000094 340194E5 LDR R0,[R4, #+308] \ 00000098 0150A0E3 MOV R5,#+1 \ 0000009C E85084E5 STR R5,[R4, #+232] \ 000000A0 020050E3 CMP R0,#+2 \ 000000A4 04D08DE2 ADD SP,SP,#+4 \ 000000A8 0400000A BEQ ??away_timer_0 281 { 282 status_rem=CurrentStatus; \ 000000AC EC0084E5 STR R0,[R4, #+236] 283 CurrentStatus=2; \ 000000B0 0200A0E3 MOV R0,#+2 \ 000000B4 340184E5 STR R0,[R4, #+308] 284 set_my_status(); \ 000000B8 ........ BL set_my_status 285 // SUBPROC((void*)WriteDefSettings); 286 change_back_status=1; \ 000000BC F05084E5 STR R5,[R4, #+240] 287 } 288 } 289 next: 290 if(Auto_Status) \ ??away_timer_0: \ 000000C0 ........ LDR R0,??DataTable5 ;; Auto_Status 291 msg_away_timer++; 292 GBS_StartTimerProc(&away_tmr, 216*5, away_timer); \ 000000C4 34209FE5 LDR R2,??away_timer_2+0x8 ;; away_timer \ 000000C8 000090E5 LDR R0,[R0, #+0] \ 000000CC 3810A0E3 MOV R1,#+56 \ 000000D0 000050E3 CMP R0,#+0 \ 000000D4 E0009415 LDRNE R0,[R4, #+224] \ 000000D8 401E81E3 ORR R1,R1,#0x400 \ 000000DC 01008012 ADDNE R0,R0,#+1 \ 000000E0 E0008415 STRNE R0,[R4, #+224] \ 000000E4 1C00A0E3 MOV R0,#+28 \ 000000E8 580D80E3 ORR R0,R0,#0x1600 \ 000000EC 040080E0 ADD R0,R0,R4 \ 000000F0 4D0000EF SWI +77 293 } \ 000000F4 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??away_timer_2: \ 000000F8 ........ DC32 SendIsInviz \ 000000FC ........ DC32 `?` \ 00000100 ........ DC32 away_timer 294 //#endif \ In segment CODE, align 4, keep-with-next 295 void init_time_zone() 296 { 297 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 + 5644 \ 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 298 { 299 case 0: 300 sprintf(tim_zone, "GMT -12:00"); 301 break; 302 case 1: 303 sprintf(tim_zone, "GMT -11:00"); \ ??init_time_zone_2: \ 0000004C 0C1081E2 ADD R1,R1,#+12 \ 00000050 160000EF SWI +22 \ 00000054 0080BDE8 POP {PC} 304 break; 305 case 2: 306 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} 307 break; 308 case 3: 309 sprintf(tim_zone, "GMT -09:00"); \ ??init_time_zone_5: \ 00000064 241081E2 ADD R1,R1,#+36 \ 00000068 FBFFFFEA B ??init_time_zone_4 310 break; 311 case 4: 312 sprintf(tim_zone, "GMT -08:00"); \ ??init_time_zone_6: \ 0000006C 301081E2 ADD R1,R1,#+48 \ 00000070 F9FFFFEA B ??init_time_zone_4 313 break; 314 case 5: 315 sprintf(tim_zone, "GMT -07:00"); \ ??init_time_zone_7: \ 00000074 3C1081E2 ADD R1,R1,#+60 \ 00000078 F7FFFFEA B ??init_time_zone_4 316 break; 317 case 6: 318 sprintf(tim_zone, "GMT -06:00"); \ ??init_time_zone_8: \ 0000007C 481081E2 ADD R1,R1,#+72 \ 00000080 F5FFFFEA B ??init_time_zone_4 319 break; 320 case 7: 321 sprintf(tim_zone, "GMT -05:00"); \ ??init_time_zone_9: \ 00000084 541081E2 ADD R1,R1,#+84 \ 00000088 F3FFFFEA B ??init_time_zone_4 322 break; 323 case 8: 324 sprintf(tim_zone, "GMT -04:00"); \ ??init_time_zone_10: \ 0000008C 601081E2 ADD R1,R1,#+96 \ 00000090 F1FFFFEA B ??init_time_zone_4 325 break; 326 case 9: 327 sprintf(tim_zone, "GMT -03:30"); \ ??init_time_zone_11: \ 00000094 6C1081E2 ADD R1,R1,#+108 \ 00000098 EFFFFFEA B ??init_time_zone_4 328 break; 329 case 10: 330 sprintf(tim_zone, "GMT -03:00"); \ ??init_time_zone_12: \ 0000009C 781081E2 ADD R1,R1,#+120 \ 000000A0 EDFFFFEA B ??init_time_zone_4 331 break; 332 case 11: 333 sprintf(tim_zone, "GMT -02:00"); \ ??init_time_zone_13: \ 000000A4 841081E2 ADD R1,R1,#+132 \ 000000A8 EBFFFFEA B ??init_time_zone_4 334 break; 335 case 12: 336 sprintf(tim_zone, "GMT -01:00"); \ ??init_time_zone_14: \ 000000AC 901081E2 ADD R1,R1,#+144 \ 000000B0 E9FFFFEA B ??init_time_zone_4 337 break; 338 case 13: 339 sprintf(tim_zone, "GMT 00:00"); \ ??init_time_zone_15: \ 000000B4 9C1081E2 ADD R1,R1,#+156 \ 000000B8 E7FFFFEA B ??init_time_zone_4 340 break; 341 case 14: 342 sprintf(tim_zone, "GMT +01:00"); \ ??init_time_zone_16: \ 000000BC A81081E2 ADD R1,R1,#+168 \ 000000C0 E5FFFFEA B ??init_time_zone_4 343 break; 344 case 15: 345 sprintf(tim_zone, "GMT +02:00"); \ ??init_time_zone_17: \ 000000C4 B41081E2 ADD R1,R1,#+180 \ 000000C8 E3FFFFEA B ??init_time_zone_4 346 break; 347 case 16: 348 sprintf(tim_zone, "GMT +03:00"); \ ??init_time_zone_18: \ 000000CC C01081E2 ADD R1,R1,#+192 \ 000000D0 E1FFFFEA B ??init_time_zone_4 349 break; 350 case 17: 351 sprintf(tim_zone, "GMT +03:30"); \ ??init_time_zone_19: \ 000000D4 CC1081E2 ADD R1,R1,#+204 \ 000000D8 DFFFFFEA B ??init_time_zone_4 352 break; 353 case 18: 354 sprintf(tim_zone, "GMT +04:00"); \ ??init_time_zone_20: \ 000000DC D81081E2 ADD R1,R1,#+216 \ 000000E0 DDFFFFEA B ??init_time_zone_4 355 break; 356 case 19: 357 sprintf(tim_zone, "GMT +04:30"); \ ??init_time_zone_21: \ 000000E4 E41081E2 ADD R1,R1,#+228 \ 000000E8 DBFFFFEA B ??init_time_zone_4 358 break; 359 case 20: 360 sprintf(tim_zone, "GMT +05:00"); \ ??init_time_zone_22: \ 000000EC F01081E2 ADD R1,R1,#+240 \ 000000F0 D9FFFFEA B ??init_time_zone_4 361 break; 362 case 21: 363 sprintf(tim_zone, "GMT +05:30"); \ ??init_time_zone_23: \ 000000F4 FC1081E2 ADD R1,R1,#+252 \ 000000F8 D7FFFFEA B ??init_time_zone_4 364 break; 365 case 22: 366 sprintf(tim_zone, "GMT +05:45"); \ ??init_time_zone_24: \ 000000FC 421F81E2 ADD R1,R1,#+264 \ 00000100 D5FFFFEA B ??init_time_zone_4 367 break; 368 case 23: 369 sprintf(tim_zone, "GMT +06:00"); \ ??init_time_zone_25: \ 00000104 451F81E2 ADD R1,R1,#+276 \ 00000108 D3FFFFEA B ??init_time_zone_4 370 break; 371 case 24: 372 sprintf(tim_zone, "GMT +06:30"); \ ??init_time_zone_26: \ 0000010C 481F81E2 ADD R1,R1,#+288 \ 00000110 D1FFFFEA B ??init_time_zone_4 373 break; 374 case 25: 375 sprintf(tim_zone, "GMT +07:00"); \ ??init_time_zone_27: \ 00000114 601F81E2 ADD R1,R1,#+384 \ 00000118 CFFFFFEA B ??init_time_zone_4 376 break; 377 case 26: 378 sprintf(tim_zone, "GMT +08:00"); \ ??init_time_zone_28: \ 0000011C 4B1F81E2 ADD R1,R1,#+300 \ 00000120 CDFFFFEA B ??init_time_zone_4 379 break; 380 case 27: 381 sprintf(tim_zone, "GMT +09:00"); \ ??init_time_zone_29: \ 00000124 4E1F81E2 ADD R1,R1,#+312 \ 00000128 CBFFFFEA B ??init_time_zone_4 382 break; 383 case 28: 384 sprintf(tim_zone, "GMT +09:30"); \ ??init_time_zone_30: \ 0000012C 511F81E2 ADD R1,R1,#+324 \ 00000130 C9FFFFEA B ??init_time_zone_4 385 break; 386 case 29: 387 sprintf(tim_zone, "GMT +10:00"); \ ??init_time_zone_31: \ 00000134 541F81E2 ADD R1,R1,#+336 \ 00000138 C7FFFFEA B ??init_time_zone_4 388 break; 389 case 30: 390 sprintf(tim_zone, "GMT +11:00"); \ ??init_time_zone_32: \ 0000013C 571F81E2 ADD R1,R1,#+348 \ 00000140 C5FFFFEA B ??init_time_zone_4 391 break; 392 case 31: 393 sprintf(tim_zone, "GMT +12:00"); \ ??init_time_zone_33: \ 00000144 5A1F81E2 ADD R1,R1,#+360 \ 00000148 C3FFFFEA B ??init_time_zone_4 394 break; 395 case 32: 396 sprintf(tim_zone, "GMT +13:00"); \ ??init_time_zone_34: \ 0000014C 5D1F81E2 ADD R1,R1,#+372 \ 00000150 160000EF SWI +22 397 break; 398 } 399 } \ ??init_time_zone_35: \ 00000154 0080BDE8 POP {PC} ;; return \ ??init_time_zone_1: \ 00000158 ........ DC32 time_zone \ 0000015C ........ DC32 S_ICONS + 5644 \ 00000160 ........ DC32 `?` 400 401 //=================================away_msg=============== 402 //////////////////////////////////////////tozhe dlja auto ping/////////////// 403 \ In segment CODE, align 4, keep-with-next 404 void Draw(void *canv) 405 { 406 #ifdef EVILFOX 407 PrintField(date_X,date_Y, PINGO, align, fonto, space); 408 #else 409 PrintField(date_X,date_Y, PINGO, align, fonto, spaco1); \ Draw: \ 00000000 ........ LDR R1,??DataTable19 ;; spaco1 \ 00000004 ........ LDR R0,??DataTable33 ;; S_ICONS \ 00000008 00402DE9 PUSH {LR} \ 0000000C 001091E5 LDR R1,[R1, #+0] \ 00000010 02002DE9 PUSH {R1} \ 00000014 ........ LDR R1,??DataTable20 ;; fonto \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 02002DE9 PUSH {R1} \ 00000020 983090E5 LDR R3,[R0, #+152] \ 00000024 B410A0E3 MOV R1,#+180 \ 00000028 4C1D81E3 ORR R1,R1,#0x1300 \ 0000002C 002081E0 ADD R2,R1,R0 \ 00000030 10009FE5 LDR R0,??Draw_0 ;; date_Y \ 00000034 001090E5 LDR R1,[R0, #+0] \ 00000038 0C009FE5 LDR R0,??Draw_0+0x4 ;; date_X \ 0000003C 000090E5 LDR R0,[R0, #+0] \ 00000040 ........ _BLF PrintField,??PrintField??rA 410 #endif 411 } \ 00000044 0380BDE8 POP {R0,R1,PC} ;; return \ ??Draw_0: \ 00000048 ........ DC32 date_Y \ 0000004C ........ DC32 date_X 412 //////////////////////////////////////////tozhe dlja auto ping/////////////// 413 GBSTMR mytmr; 414 GBSTMR mytmr2; 415 volatile int vibra_count; 416 #ifdef ELKA 417 void SLI_Off(void); 418 #endif 419 void start_vibra2(void); 420 //////////////////////////reminder timer///////////////////////// \ In segment CODE, align 4, keep-with-next 421 void Remind_Timer2() 422 { \ Remind_Timer2: \ 00000000 10402DE9 PUSH {R4,LR} 423 if (total_unread) \ 00000004 ........ LDR R4,??DataTable33 ;; S_ICONS \ 00000008 C00094E5 LDR R0,[R4, #+192] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} 424 { 425 vibra_count=Vibra_cc; \ 00000014 24009FE5 LDR R0,??Remind_Timer2_0 ;; Vibra_cc \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C F80084E5 STR R0,[R4, #+248] 426 start_vibra2(); \ 00000020 ........ BL start_vibra2 427 GBS_StartTimerProc(&mytmr2, 6480, Remind_Timer2); \ 00000024 ........ LDR R2,??DataTable11 ;; Remind_Timer2 \ 00000028 5010A0E3 MOV R1,#+80 \ 0000002C 641D81E3 ORR R1,R1,#0x1900 \ 00000030 C50F41E2 SUB R0,R1,#+788 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 4D0000EF SWI +77 428 } 429 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return \ ??Remind_Timer2_0: \ 00000040 ........ DC32 Vibra_cc 430 \ In segment CODE, align 4, keep-with-next 431 void Reminder_timer() 432 { 433 GBS_StartTimerProc(&mytmr2, 6480, Remind_Timer2); \ Reminder_timer: \ 00000000 ........ LDR R2,??DataTable11 ;; Remind_Timer2 \ 00000004 10009FE5 LDR R0,??Reminder_timer_0 ;; S_ICONS + 5692 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 5010A0E3 MOV R1,#+80 \ 00000010 641D81E3 ORR R1,R1,#0x1900 \ 00000014 4D0000EF SWI +77 434 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??Reminder_timer_0: \ 0000001C ........ DC32 S_ICONS + 5692 435 //////////////////////////reminder timer///////////////////////// 436 437 //////////////////////////uptime////////////////////////// 438 int Is_UPTIME_On; 439 //int bubins; 440 int xstatus_old; 441 int minimum_xstatus; 442 int maximum; 443 //int UPTIME; 444 extern const unsigned int date_X2; 445 extern const unsigned int date_Y2; 446 \ In segment CODE, align 4, keep-with-next 447 void xstatuse() 448 { 449 maximum++; \ xstatuse: \ 00000000 ........ LDR R0,??DataTable33 ;; S_ICONS \ 00000004 081190E5 LDR R1,[R0, #+264] 450 if(maximum==60) \ 00000008 042190E5 LDR R2,[R0, #+260] \ 0000000C 011081E2 ADD R1,R1,#+1 \ 00000010 3C0051E3 CMP R1,#+60 451 { 452 maximum=0; \ 00000014 0010A003 MOVEQ R1,#+0 453 minimum_xstatus++; \ 00000018 01208202 ADDEQ R2,R2,#+1 \ 0000001C 081180E5 STR R1,[R0, #+264] 454 } 455 if(minimum_xstatus==60) \ 00000020 3C0052E3 CMP R2,#+60 \ 00000024 0300001A BNE ??xstatuse_0 456 { 457 minimum_xstatus=0; 458 xstatus_old++; \ 00000028 001190E5 LDR R1,[R0, #+256] \ 0000002C 0020A0E3 MOV R2,#+0 \ 00000030 011081E2 ADD R1,R1,#+1 \ 00000034 001180E5 STR R1,[R0, #+256] \ ??xstatuse_0: \ 00000038 042180E5 STR R2,[R0, #+260] 459 } 460 } \ 0000003C 1EFF2FE1 BX LR ;; return 461 462 GBSTMR mytmr4; 463 #ifdef NEWSGOLD 464 GBSTMR tracktmr; 465 int tracktimer; 466 #endif 467 extern const int Pause_Time; 468 \ In segment CODE, align 4, keep-with-next 469 void x_zstatus() 470 { \ x_zstatus: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 471 if(connect_state==3) \ 00000004 ........ LDR R4,??DataTable33 ;; S_ICONS \ 00000008 84609FE5 LDR R6,??x_zstatus_0 ;; x_zstatus \ 0000000C 4C00A0E3 MOV R0,#+76 \ 00000010 580D80E3 ORR R0,R0,#0x1600 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 440194E5 LDR R0,[R4, #+324] \ 0000001C 0070A0E3 MOV R7,#+0 \ 00000020 030050E3 CMP R0,#+3 \ 00000024 0F00001A BNE ??x_zstatus_1 472 { 473 xstatuse(); \ 00000028 ........ BL xstatuse 474 #ifdef NEWSGOLD 475 if (tracktimer>=10)/*&&(_GetPlayStatus()!=1))*/ \ 0000002C 0C0194E5 LDR R0,[R4, #+268] \ 00000030 0A0050E3 CMP R0,#+10 \ 00000034 070000BA BLT ??x_zstatus_2 476 { 477 GBS_StartTimerProc(&tracktmr, 216*5, GetTags); \ 00000038 ........ LDR R2,??DataTable14 ;; GetTags \ 0000003C 3810A0E3 MOV R1,#+56 \ 00000040 401E81E3 ORR R1,R1,#0x400 \ 00000044 5C00A0E3 MOV R0,#+92 \ 00000048 580D80E3 ORR R0,R0,#0x1600 \ 0000004C 040080E0 ADD R0,R0,R4 \ 00000050 4D0000EF SWI +77 478 tracktimer=0; \ 00000054 0C7184E5 STR R7,[R4, #+268] 479 } 480 tracktimer++; \ ??x_zstatus_2: \ 00000058 0C0194E5 LDR R0,[R4, #+268] \ 0000005C 010080E2 ADD R0,R0,#+1 \ 00000060 0C0184E5 STR R0,[R4, #+268] 481 #endif 482 GBS_StartTimerProc(&mytmr4, 216, x_zstatus); \ 00000064 050000EA B ??x_zstatus_3 483 } 484 else 485 { 486 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 487 { 488 xstatus_old=0; \ 00000074 00718405 STREQ R7,[R4, #+256] 489 minimum_xstatus=0; \ 00000078 04718405 STREQ R7,[R4, #+260] 490 maximum=0; \ 0000007C 08718405 STREQ R7,[R4, #+264] 491 } 492 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 493 } 494 } \ 00000090 F080BDE8 POP {R4-R7,PC} ;; return \ ??x_zstatus_0: \ 00000094 ........ DC32 x_zstatus \ 00000098 ........ DC32 Pause_Time 495 496 char hah[128]; 497 \ In segment CODE, align 4, keep-with-next 498 void Draw2(void *canv) 499 { 500 if(connect_state==3) \ Draw2: \ 00000000 80109FE5 LDR R1,??Draw2_0 ;; `?` \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 ........ LDR R4,??DataTable33 ;; S_ICONS \ 0000000C 6C00A0E3 MOV R0,#+108 \ 00000010 580D80E3 ORR R0,R0,#0x1600 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 440194E5 LDR R0,[R4, #+324] \ 0000001C 030050E3 CMP R0,#+3 \ 00000020 0700001A BNE ??Draw2_1 501 { 502 sprintf(hah,"online: %02d:%02d:%02d", xstatus_old, minimum_xstatus, maximum); \ 00000024 080194E5 LDR R0,[R4, #+264] \ 00000028 01002DE9 PUSH {R0} \ 0000002C 043194E5 LDR R3,[R4, #+260] \ 00000030 002194E5 LDR R2,[R4, #+256] \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 160000EF SWI +22 \ 0000003C 04D08DE2 ADD SP,SP,#+4 \ 00000040 020000EA B ??Draw2_2 503 } 504 else 505 sprintf(hah,"Offline"); \ ??Draw2_1: \ 00000044 181081E2 ADD R1,R1,#+24 \ 00000048 0500A0E1 MOV R0,R5 \ 0000004C 160000EF SWI +22 506 #ifdef EVILFOX 507 PrintField(date_X2,date_Y2, hah, align, fonto, space); 508 #else 509 PrintField(date_X2,date_Y2, hah, align, fonto, spaco1); \ ??Draw2_2: \ 00000050 ........ LDR R0,??DataTable19 ;; spaco1 \ 00000054 0520A0E1 MOV R2,R5 \ 00000058 000090E5 LDR R0,[R0, #+0] \ 0000005C 01002DE9 PUSH {R0} \ 00000060 ........ LDR R0,??DataTable20 ;; fonto \ 00000064 000090E5 LDR R0,[R0, #+0] \ 00000068 01002DE9 PUSH {R0} \ 0000006C 983094E5 LDR R3,[R4, #+152] \ 00000070 14009FE5 LDR R0,??Draw2_0+0x4 ;; date_Y2 \ 00000074 001090E5 LDR R1,[R0, #+0] \ 00000078 10009FE5 LDR R0,??Draw2_0+0x8 ;; date_X2 \ 0000007C 000090E5 LDR R0,[R0, #+0] \ 00000080 ........ _BLF PrintField,??PrintField??rA 510 #endif 511 } \ 00000084 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??Draw2_0: \ 00000088 ........ DC32 `?` \ 0000008C ........ DC32 date_Y2 \ 00000090 ........ DC32 date_X2 512 513 //-------------------------------------------// 514 515 extern const unsigned int auto_x; 516 extern const unsigned int auto_y; 517 int automsg=0; 518 \ In segment CODE, align 4, keep-with-next 519 void DrawAutoMSG(void *canv) 520 { \ DrawAutoMSG: \ 00000000 30402DE9 PUSH {R4,R5,LR} 521 if(automsg) \ 00000004 ........ LDR R4,??DataTable33 ;; S_ICONS \ 00000008 100194E5 LDR R0,[R4, #+272] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 3080BD08 POPEQ {R4,R5,PC} 522 { 523 sprintf(hah,"Away from [%s]",away_msg_time_dace); \ 00000014 54109FE5 LDR R1,??DrawAutoMSG_0 ;; `?` \ 00000018 6C00A0E3 MOV R0,#+108 \ 0000001C 580D80E3 ORR R0,R0,#0x1600 \ 00000020 045080E0 ADD R5,R0,R4 \ 00000024 700040E2 SUB R0,R0,#+112 \ 00000028 042080E0 ADD R2,R0,R4 \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 160000EF SWI +22 524 PrintField(auto_x,auto_y, hah, align, fonto, spaco1); \ 00000034 ........ LDR R0,??DataTable19 ;; spaco1 \ 00000038 0520A0E1 MOV R2,R5 \ 0000003C 000090E5 LDR R0,[R0, #+0] \ 00000040 01002DE9 PUSH {R0} \ 00000044 ........ LDR R0,??DataTable20 ;; fonto \ 00000048 000090E5 LDR R0,[R0, #+0] \ 0000004C 01002DE9 PUSH {R0} \ 00000050 983094E5 LDR R3,[R4, #+152] \ 00000054 18009FE5 LDR R0,??DrawAutoMSG_0+0x4 ;; auto_y \ 00000058 001090E5 LDR R1,[R0, #+0] \ 0000005C 14009FE5 LDR R0,??DrawAutoMSG_0+0x8 ;; auto_x \ 00000060 000090E5 LDR R0,[R0, #+0] \ 00000064 ........ _BLF PrintField,??PrintField??rA \ 00000068 08D08DE2 ADD SP,SP,#+8 525 } 526 } \ 0000006C 3080BDE8 POP {R4,R5,PC} ;; return \ ??DrawAutoMSG_0: \ 00000070 ........ DC32 `?` \ 00000074 ........ DC32 auto_y \ 00000078 ........ DC32 auto_x 527 528 //-------------------------------Input away msg------------------------------// 529 530 531 int input_awaymsg_id; 532 533 const HEADER_DESC input_awaymsg_hdr={0,0,131,21,NULL,(int)"Input away msg",LGP_NULL}; 534 void UpdateCLheader(void); 535 int inp_away_m=0; \ In segment CODE, align 4, keep-with-next 536 int input_awaymsg_onkey(GUI *data, GUI_MSG *msg) 537 { \ input_awaymsg_onkey: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 \ 00000008 0070A0E1 MOV R7,R0 \ 0000000C 0140A0E1 MOV R4,R1 538 WSHDR *ws=AllocWS(64); 539 if (msg->keys==0x0FFF || msg->keys==VOL_DOWN_BUTTON)//0xFFF \ 00000010 ........ LDR R6,??DataTable33 ;; S_ICONS \ 00000014 4000A0E3 MOV R0,#+64 \ 00000018 250100EF SWI +293 \ 0000001C F200D4E1 LDRSH R0,[R4, #+2] \ 00000020 0050A0E3 MOV R5,#+0 \ 00000024 FF10A0E3 MOV R1,#+255 \ 00000028 F01E81E3 ORR R1,R1,#0xF00 \ 0000002C 010050E1 CMP R0,R1 \ 00000030 0E005013 CMPNE R0,#+14 \ 00000034 3300001A BNE ??input_awaymsg_onkey_0 540 { 541 EDITCONTROL ec; 542 char *s; 543 ExtractEditControl(data,2,&ec); \ 00000038 0D20A0E1 MOV R2,SP \ 0000003C 0210A0E3 MOV R1,#+2 \ 00000040 0700A0E1 MOV R0,R7 \ 00000044 690100EF SWI +361 544 ws=ec.pWS; 545 inp_away_msg2=malloc(ec.maxlen); \ 00000048 F801DDE1 LDRSH R0,[SP, #+24] \ 0000004C 28809DE5 LDR R8,[SP, #+40] 546 // ws_2str(ws,inp_away_msg2,ec.maxlen); 547 int i=0; 548 for(i=0;iwsbody[0];i++) \ 00000050 0090A0E3 MOV R9,#+0 \ 00000054 140000EF SWI +20 \ 00000058 E40086E5 STR R0,[R6, #+228] \ 0000005C 050000EA B ??input_awaymsg_onkey_1 549 *(inp_away_msg2+i)=char16to8(ws->wsbody[i+1]); \ ??input_awaymsg_onkey_2: \ 00000060 890080E0 ADD R0,R0,R9, LSL #+1 \ 00000064 B200D0E1 LDRH R0,[R0, #+2] \ 00000068 ........ _BLF char16to8,??char16to8??rA \ 0000006C E41096E5 LDR R1,[R6, #+228] \ 00000070 0100C9E7 STRB R0,[R9, +R1] \ 00000074 019089E2 ADD R9,R9,#+1 \ ??input_awaymsg_onkey_1: \ 00000078 000098E5 LDR R0,[R8, #+0] \ 0000007C B010D0E1 LDRH R1,[R0, #+0] \ 00000080 010059E1 CMP R9,R1 \ 00000084 F5FFFFBA BLT ??input_awaymsg_onkey_2 550 *(inp_away_msg2+i++)=0; \ 00000088 E40096E5 LDR R0,[R6, #+228] 551 552 ExtractEditControl(data,4,&ec); \ 0000008C 0D20A0E1 MOV R2,SP \ 00000090 0050C9E7 STRB R5,[R9, +R0] \ 00000094 0410A0E3 MOV R1,#+4 \ 00000098 0700A0E1 MOV R0,R7 \ 0000009C 690100EF SWI +361 553 ws=ec.pWS; 554 s=malloc(ec.maxlen); \ 000000A0 F801DDE1 LDRSH R0,[SP, #+24] \ 000000A4 28709DE5 LDR R7,[SP, #+40] 555 for(i=0;iwsbody[0];i++) \ 000000A8 0090A0E3 MOV R9,#+0 \ 000000AC 140000EF SWI +20 \ 000000B0 0080A0E1 MOV R8,R0 \ 000000B4 08A0A0E1 MOV R10,R8 \ 000000B8 040000EA B ??input_awaymsg_onkey_3 556 *(s+i)=char16to8(ws->wsbody[i+1]); \ ??input_awaymsg_onkey_4: \ 000000BC 890080E0 ADD R0,R0,R9, LSL #+1 \ 000000C0 B200D0E1 LDRH R0,[R0, #+2] \ 000000C4 019089E2 ADD R9,R9,#+1 \ 000000C8 ........ _BLF char16to8,??char16to8??rA \ 000000CC ........ STRB R0,[R10], #+1 \ ??input_awaymsg_onkey_3: \ 000000D0 000097E5 LDR R0,[R7, #+0] \ 000000D4 B010D0E1 LDRH R1,[R0, #+0] \ 000000D8 010059E1 CMP R9,R1 \ 000000DC F6FFFFBA BLT ??input_awaymsg_onkey_4 557 *(s+i++)=0; \ 000000E0 0850C9E7 STRB R5,[R9, +R8] 558 strcat(inp_away_msg2,s); \ 000000E4 E40096E5 LDR R0,[R6, #+228] \ 000000E8 0810A0E1 MOV R1,R8 \ 000000EC 170000EF SWI +23 559 inp_away_m=1; \ 000000F0 0100A0E3 MOV R0,#+1 \ 000000F4 180186E5 STR R0,[R6, #+280] 560 561 UpdateCLheader(); \ 000000F8 ........ BL UpdateCLheader 562 GeneralFunc_flag1(input_awaymsg_id,1); \ 000000FC 140196E5 LDR R0,[R6, #+276] \ 00000100 0110A0E3 MOV R1,#+1 \ 00000104 3D0100EF SWI +317 563 } 564 if(msg->keys==LEFT_SOFT || msg->keys==RED_BUTTON) \ ??input_awaymsg_onkey_0: \ 00000108 F200D4E1 LDRSH R0,[R4, #+2] \ 0000010C 010050E3 CMP R0,#+1 \ 00000110 0C005013 CMPNE R0,#+12 \ 00000114 0300001A BNE ??input_awaymsg_onkey_5 565 { 566 msg_away_timer=0; \ 00000118 E05086E5 STR R5,[R6, #+224] 567 away_m=0; \ 0000011C E85086E5 STR R5,[R6, #+232] 568 automsg=0; \ 00000120 105186E5 STR R5,[R6, #+272] 569 UpdateCLheader(); \ 00000124 ........ BL UpdateCLheader 570 } 571 return(0); \ ??input_awaymsg_onkey_5: \ 00000128 0000A0E3 MOV R0,#+0 \ 0000012C 2CD08DE2 ADD SP,SP,#+44 \ 00000130 F087BDE8 POP {R4-R10,PC} ;; return 572 } 573 \ In segment CODE, align 4, keep-with-next 574 void input_awaymsg_ghook(GUI *gui, int cmd) 575 { \ input_awaymsg_ghook: \ 00000000 00402DE9 PUSH {LR} 576 static SOFTKEY_DESC sk={0x0FFF,0x0000,(int)"Сохранить"}; 577 if (cmd==7) \ 00000004 070051E3 CMP R1,#+7 \ 00000008 0300001A BNE ??input_awaymsg_ghook_0 578 { 579 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} 580 } 581 if(cmd==0xA) \ ??input_awaymsg_ghook_0: \ 0000001C 0A0051E3 CMP R1,#+10 \ 00000020 0100001A BNE ??input_awaymsg_ghook_2 582 { 583 DisableIDLETMR(); // Отключаем таймер выхода по таймауту \ 00000024 7F0100EF SWI +383 \ 00000028 0080BDE8 POP {PC} 584 } 585 if (cmd==0x0C) \ ??input_awaymsg_ghook_2: \ 0000002C 0C0051E3 CMP R1,#+12 \ 00000030 0080BD18 POPNE {PC} 586 { 587 EDIT_SetCursorPos(gui,1); \ 00000034 0110A0E3 MOV R1,#+1 \ 00000038 D40100EF SWI +468 588 } 589 if(cmd==0x03){} 590 } \ 0000003C 0080BDE8 POP {PC} ;; return \ ??input_awaymsg_ghook_1: \ 00000040 ........ DC32 ??sk 591 \ In segment CODE, align 4, keep-with-next 592 void input_awaymsg_locret(void){} \ input_awaymsg_locret: \ 00000000 1EFF2FE1 BX LR ;; return 593 594 SOFTKEY_DESC input_awaymsg_sk[]= 595 { 596 {0x0018,0x0000,(int)"Лев"}, 597 {0x0001,0x0000,(int)"Прав"}, 598 {0x003D,0x0000,(int)LGP_DOIT_PIC} 599 }; 600 601 SOFTKEYSTAB input_awaymsg_skt= 602 { 603 input_awaymsg_sk,0 604 }; 605 606 const INPUTDIA_DESC input_awaymsg_desc= 607 { 608 1, 609 input_awaymsg_onkey, 610 input_awaymsg_ghook, 611 (void *)input_awaymsg_locret, 612 0, 613 &input_awaymsg_skt, 614 {0,NULL,NULL,NULL}, 615 FONT_SMALL, 616 100, 617 101, 618 0, 619 0x00000000, 620 0x40000000 621 }; 622 \ In segment CODE, align 4, keep-with-next 623 void InputAwayMsg() 624 { \ InputAwayMsg: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 625 WSHDR *wss=AllocWS(256); 626 void *ma=malloc_adr(); 627 void *eq=AllocEQueue(ma, mfree_adr()); 628 EDITCONTROL ec; 629 PrepareEditControl(&ec); 630 wsprintf(wss,"%t","Сообщение:\n"); \ 00000004 CC519FE5 LDR R5,??InputAwayMsg_0+0x4 ;; input_awaymsg_desc \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 0000000C 400FA0E3 MOV R0,#+256 \ 00000010 250100EF SWI +293 \ 00000014 0060A0E1 MOV R6,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 0040A0E1 MOV R4,R0 \ 00000034 0D00A0E1 MOV R0,SP \ 00000038 640100EF SWI +356 \ 0000003C 648F8FE2 ADR R8,??InputAwayMsg_0 ;; "%t" \ 00000040 4C2085E2 ADD R2,R5,#+76 \ 00000044 0810A0E1 MOV R1,R8 \ 00000048 0600A0E1 MOV R0,R6 \ 0000004C 240100EF SWI +292 631 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,12); \ 00000050 0C00A0E3 MOV R0,#+12 \ 00000054 01002DE9 PUSH {R0} \ 00000058 0630A0E1 MOV R3,R6 \ 0000005C 0020A0E3 MOV R2,#+0 \ 00000060 0110A0E3 MOV R1,#+1 \ 00000064 04008DE2 ADD R0,SP,#+4 \ 00000068 650100EF SWI +357 632 AddEditControlToEditQend(eq,&ec,ma); \ 0000006C 0720A0E1 MOV R2,R7 \ 00000070 04108DE2 ADD R1,SP,#+4 \ 00000074 0400A0E1 MOV R0,R4 \ 00000078 660100EF SWI +358 633 634 PrepareEditControl(&ec); \ 0000007C 04008DE2 ADD R0,SP,#+4 \ 00000080 640100EF SWI +356 635 // wsprintf(ec.pWS,"%t",away_msg2); 636 CutWSTR(wss,0); \ 00000084 0010A0E3 MOV R1,#+0 \ 00000088 0600A0E1 MOV R0,R6 \ 0000008C 260100EF SWI +294 637 ascii2ws(wss,away_msg2); \ 00000090 ........ LDR R1,??DataTable22 ;; away_msg2 \ 00000094 0600A0E1 MOV R0,R6 \ 00000098 ........ _BLF ascii2ws,??ascii2ws??rA 638 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_SET_CURSOR_END,wss,255); \ 0000009C FF00A0E3 MOV R0,#+255 \ 000000A0 01002DE9 PUSH {R0} \ 000000A4 0630A0E1 MOV R3,R6 \ 000000A8 8020A0E3 MOV R2,#+128 \ 000000AC 0310A0E3 MOV R1,#+3 \ 000000B0 08008DE2 ADD R0,SP,#+8 \ 000000B4 650100EF SWI +357 639 AddEditControlToEditQend(eq,&ec,ma); \ 000000B8 0720A0E1 MOV R2,R7 \ 000000BC 08108DE2 ADD R1,SP,#+8 \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 660100EF SWI +358 640 641 PrepareEditControl(&ec); \ 000000C8 08008DE2 ADD R0,SP,#+8 \ 000000CC 640100EF SWI +356 642 wsprintf(wss,"%t","Сообщение 2:\n\n"); \ 000000D0 582085E2 ADD R2,R5,#+88 \ 000000D4 0810A0E1 MOV R1,R8 \ 000000D8 0600A0E1 MOV R0,R6 \ 000000DC 240100EF SWI +292 643 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,12); \ 000000E0 0C00A0E3 MOV R0,#+12 \ 000000E4 01002DE9 PUSH {R0} \ 000000E8 0630A0E1 MOV R3,R6 \ 000000EC 0020A0E3 MOV R2,#+0 \ 000000F0 0110A0E3 MOV R1,#+1 \ 000000F4 0C008DE2 ADD R0,SP,#+12 \ 000000F8 650100EF SWI +357 644 AddEditControlToEditQend(eq,&ec,ma); \ 000000FC 0720A0E1 MOV R2,R7 \ 00000100 0C108DE2 ADD R1,SP,#+12 \ 00000104 0400A0E1 MOV R0,R4 \ 00000108 660100EF SWI +358 645 646 PrepareEditControl(&ec); \ 0000010C 0C008DE2 ADD R0,SP,#+12 \ 00000110 640100EF SWI +356 647 //CutWSTR(wss,0); 648 ascii2ws(wss,"когда смогу отвечу:)"); \ 00000114 681085E2 ADD R1,R5,#+104 \ 00000118 0600A0E1 MOV R0,R6 \ 0000011C ........ _BLF ascii2ws,??ascii2ws??rA 649 // ascii2ws(wss,away_msg2); 650 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_SET_CURSOR_END,wss,255); \ 00000120 FF00A0E3 MOV R0,#+255 \ 00000124 01002DE9 PUSH {R0} \ 00000128 0630A0E1 MOV R3,R6 \ 0000012C 8020A0E3 MOV R2,#+128 \ 00000130 0310A0E3 MOV R1,#+3 \ 00000134 10008DE2 ADD R0,SP,#+16 \ 00000138 650100EF SWI +357 651 AddEditControlToEditQend(eq,&ec,ma); \ 0000013C 0720A0E1 MOV R2,R7 \ 00000140 10108DE2 ADD R1,SP,#+16 \ 00000144 0400A0E1 MOV R0,R4 \ 00000148 660100EF SWI +358 652 653 patch_header(&input_awaymsg_hdr); \ 0000014C 0060A0E3 MOV R6,#+0 \ 00000150 B863C5E1 STRH R6,[R5, #+56] \ 00000154 1800A0E3 MOV R0,#+24 \ 00000158 BA03C5E1 STRH R0,[R5, #+58] \ 0000015C 888100EF SWI +33160 \ 00000160 010040E2 SUB R0,R0,#+1 \ 00000164 BC03C5E1 STRH R0,[R5, #+60] \ 00000168 8A8100EF SWI +33162 \ 0000016C 170080E2 ADD R0,R0,#+23 \ 00000170 BE03C5E1 STRH R0,[R5, #+62] 654 patch_input(&input_awaymsg_desc); \ 00000174 B861C5E1 STRH R6,[R5, #+24] \ 00000178 8A8100EF SWI +33162 \ 0000017C 190080E2 ADD R0,R0,#+25 \ 00000180 BA01C5E1 STRH R0,[R5, #+26] \ 00000184 888100EF SWI +33160 \ 00000188 010040E2 SUB R0,R0,#+1 \ 0000018C BC01C5E1 STRH R0,[R5, #+28] \ 00000190 898100EF SWI +33161 \ 00000194 0060A0E1 MOV R6,R0 \ 00000198 8B8100EF SWI +33163 \ 0000019C 000046E0 SUB R0,R6,R0 \ 000001A0 010040E2 SUB R0,R0,#+1 \ 000001A4 BE01C5E1 STRH R0,[R5, #+30] 655 656 input_awaymsg_id=CreateInputTextDialog(&input_awaymsg_desc,&input_awaymsg_hdr,eq,1,0);//создаем диалоговое окно \ 000001A8 0000A0E3 MOV R0,#+0 \ 000001AC 01002DE9 PUSH {R0} \ 000001B0 0130A0E3 MOV R3,#+1 \ 000001B4 0420A0E1 MOV R2,R4 \ 000001B8 381085E2 ADD R1,R5,#+56 \ 000001BC 0500A0E1 MOV R0,R5 \ 000001C0 670100EF SWI +359 \ 000001C4 10109FE5 LDR R1,??InputAwayMsg_0+0x8 ;; S_ICONS + 276 \ 000001C8 000081E5 STR R0,[R1, #+0] 657 } \ 000001CC 40D08DE2 ADD SP,SP,#+64 \ 000001D0 F081BDE8 POP {R4-R8,PC} ;; return \ ??InputAwayMsg_0: \ 000001D4 25740000 DC8 "%t",+0 \ 000001D8 ........ DC32 input_awaymsg_desc \ 000001DC ........ DC32 S_ICONS + 276 658 659 //////////////////////////uptime////////////////////////// 660 #ifdef ELKA \ In segment CODE, align 4, keep-with-next 661 void SLI_On() 662 { \ SLI_On: \ 00000000 10402DE9 PUSH {R4,LR} 663 // SLI_STATUS=0; 664 if(Is_SLI_On) \ 00000004 ........ LDR R4,??DataTable33 ;; S_ICONS \ 00000008 AC0094E5 LDR R0,[R4, #+172] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0100000A BEQ ??SLI_On_0 665 SLI_SetState(1); \ 00000014 0100A0E3 MOV R0,#+1 \ 00000018 360000EF SWI +54 666 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 2C00A0E3 MOV R0,#+44 \ 00000028 580D80E3 ORR R0,R0,#0x1600 \ 0000002C 040080E0 ADD R0,R0,R4 \ 00000030 4D0000EF SWI +77 667 } \ 00000034 1080BDE8 POP {R4,PC} ;; return \ ??SLI_On_1: \ 00000038 ........ DC32 SLI_Off 668 \ In segment CODE, align 4, keep-with-next 669 void SLI_Off() 670 { \ SLI_Off: \ 00000000 00402DE9 PUSH {LR} 671 SLI_SetState(2); \ 00000004 0200A0E3 MOV R0,#+2 \ 00000008 360000EF SWI +54 672 if(total_unread) \ 0000000C ........ LDR R0,??DataTable33 ;; S_ICONS \ 00000010 C01090E5 LDR R1,[R0, #+192] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0600000A BEQ ??SLI_Off_0 673 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 2C30A0E3 MOV R3,#+44 \ 00000028 583D83E3 ORR R3,R3,#0x1600 \ 0000002C 000083E0 ADD R0,R3,R0 \ 00000030 4D0000EF SWI +77 \ 00000034 0080BDE8 POP {PC} 674 else 675 // SLI_STATUS=1; 676 SLI_SetState(0); \ ??SLI_Off_0: \ 00000038 0000A0E3 MOV R0,#+0 \ 0000003C 360000EF SWI +54 677 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??SLI_Off_1: \ 00000044 ........ DC32 SLI_On 678 \ In segment CODE, align 4, keep-with-next 679 void SLI_check() 680 { 681 if (total_unread) \ SLI_check: \ 00000000 14009FE5 LDR R0,??SLI_check_0 ;; S_ICONS + 192 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0080BD08 POPEQ {PC} 682 SLI_On(); \ 00000014 ........ BL SLI_On 683 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??SLI_check_0: \ 0000001C ........ DC32 S_ICONS + 192 684 \ In segment CODE, align 4, keep-with-next 685 void SLI_Timer() 686 { 687 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 + 5676 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 0610A0E3 MOV R1,#+6 \ 00000010 401F81E3 ORR R1,R1,#0x100 \ 00000014 4D0000EF SWI +77 688 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??SLI_Timer_0: \ 0000001C ........ DC32 SLI_check \ 00000020 ........ DC32 S_ICONS + 5676 689 #endif 690 \ In segment CODE, align 4, keep-with-next 691 void setup_ICONS(void) 692 { \ setup_ICONS: \ 00000000 70402DE9 PUSH {R4-R6,LR} 693 int i=0; \ 00000004 ........ LDR R4,??DataTable26 ;; S_ICONS \ 00000008 34509FE5 LDR R5,??setup_ICONS_0 ;; icons_names \ 0000000C 1C60A0E3 MOV R6,#+28 694 do 695 { 696 if (!S_ICONS[i]) S_ICONS[i]=(int)MakeGlobalString(ICON_PATH,'\\',icons_names[i]); \ ??setup_ICONS_1: \ 00000010 000094E5 LDR R0,[R4, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0400001A BNE ??setup_ICONS_2 \ 0000001C 24009FE5 LDR R0,??setup_ICONS_0+0x4 ;; ICON_PATH \ 00000020 002095E5 LDR R2,[R5, #+0] \ 00000024 5C10A0E3 MOV R1,#+92 \ 00000028 ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 0000002C 000084E5 STR R0,[R4, #+0] 697 i++; 698 } 699 while(i>2,stop_vibra); \ 0000004C 3610A0E3 MOV R1,#+54 \ 00000050 000000EA B ??start_vibra_2 961 else 962 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra); \ ??start_vibra_1: \ 00000054 6C10A0E3 MOV R1,#+108 \ ??start_vibra_2: \ 00000058 4D0000EF SWI +77 963 } 964 } \ 0000005C 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra_0: \ 00000060 ........ DC32 stop_vibra 965 \ In segment CODE, align 4, keep-with-next 966 void stop_vibra(void) 967 { \ stop_vibra: \ 00000000 00402DE9 PUSH {LR} 968 extern const int VIBR_TYPE; 969 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 970 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable54 ;; S_ICONS \ 00000010 F81090E5 LDR R1,[R0, #+248] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 F81080E5 STR R1,[R0, #+248] \ 0000001C 0080BD08 POPEQ {PC} 971 { 972 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra_0 ;; start_vibra \ 00000024 FC10A0E3 MOV R1,#+252 \ 00000028 5C1D81E3 ORR R1,R1,#0x1700 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable43 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra_1 973 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra_2 974 else 975 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra); \ ??stop_vibra_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra_2: \ 0000004C 4D0000EF SWI +77 976 } 977 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra_0: \ 00000054 ........ DC32 start_vibra 978 \ In segment CODE, align 4, keep-with-next 979 void start_vibra2(void) 980 { 981 extern const int VIBR_TYPE; 982 void stop_vibra2(void); 983 // if ((Is_Vibra_Enabled)&&(!IsCalling())) 984 // SLI_On(); 985 // else 986 // SLI_Off(); 987 extern const unsigned int vibraPower; 988 SetVibration(vibraPower); \ start_vibra2: \ 00000000 ........ LDR R0,??DataTable40 ;; vibraPower \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 7C0000EF SWI +124 989 if(VIBR_TYPE) \ 00000010 ........ LDR R1,??DataTable43 ;; VIBR_TYPE \ 00000014 18009FE5 LDR R0,??start_vibra2_0 ;; S_ICONS + 6140 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 14209FE5 LDR R2,??start_vibra2_0+0x4 ;; stop_vibra2 \ 00000020 000051E3 CMP R1,#+0 990 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>2,stop_vibra2); \ 00000024 3610A013 MOVNE R1,#+54 991 else 992 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra2); \ 00000028 6C10A003 MOVEQ R1,#+108 \ 0000002C 4D0000EF SWI +77 993 } \ 00000030 0080BDE8 POP {PC} ;; return \ ??start_vibra2_0: \ 00000034 ........ DC32 S_ICONS + 6140 \ 00000038 ........ DC32 stop_vibra2 994 \ In segment CODE, align 4, keep-with-next 995 void stop_vibra2(void) 996 { \ stop_vibra2: \ 00000000 00402DE9 PUSH {LR} 997 extern const int VIBR_TYPE; 998 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 999 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable54 ;; S_ICONS \ 00000010 F81090E5 LDR R1,[R0, #+248] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 F81080E5 STR R1,[R0, #+248] \ 0000001C 0080BD08 POPEQ {PC} 1000 { 1001 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra2_0 ;; start_vibra2 \ 00000024 FC10A0E3 MOV R1,#+252 \ 00000028 5C1D81E3 ORR R1,R1,#0x1700 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable43 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra2_1 1002 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra2); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra2_2 1003 else 1004 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra2); \ ??stop_vibra2_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra2_2: \ 0000004C 4D0000EF SWI +77 1005 } 1006 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra2_0: \ 00000054 ........ DC32 start_vibra2 1007 \ In segment CODE, align 4, keep-with-next 1008 void ChangeVibra(void) 1009 { 1010 if (!(Is_Vibra_Enabled=!(Is_Vibra_Enabled))) \ ChangeVibra: \ 00000000 ........ LDR R0,??DataTable54 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 241190E5 LDR R1,[R0, #+292] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 1C109FE5 LDR R1,??ChangeVibra_0 ;; `?` \ 00000008 4BDF4DE2 SUB SP,SP,#+300 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ BL FreeTemplates \ 00000014 70119FE5 LDR R1,??LoadTemplates_0+0x4 ;; TEMPLATES_PATH \ 00000018 2C008DE2 ADD R0,SP,#+44 \ 0000001C 1A0000EF SWI +26 \ 00000020 2C008DE2 ADD R0,SP,#+44 \ 00000024 1B0000EF SWI +27 \ 00000028 0070A0E1 MOV R7,R0 \ 0000002C 2C008DE2 ADD R0,SP,#+44 \ 00000030 005087E0 ADD R5,R7,R0 \ 00000034 0420A0E1 MOV R2,R4 \ 00000038 0610A0E1 MOV R1,R6 \ 0000003C 0500A0E1 MOV R0,R5 \ 00000040 160000EF SWI +22 1054 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 1055 if ((fsize=stat.size)<=0) goto L1; \ 00000060 08709DE5 LDR R7,[SP, #+8] \ 00000064 010057E3 CMP R7,#+1 \ 00000068 070000BA BLT ??LoadTemplates_1 1056 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 1057 { 1058 L1: 1059 strcpy(fn+i,"\\0.txt"); \ ??LoadTemplates_1: \ 0000008C 081086E2 ADD R1,R6,#+8 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 1A0000EF SWI +26 1060 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 1061 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 1062 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 1063 } 1064 if (f==-1) return 0; \ ??LoadTemplates_2: \ 000000E0 040058E1 CMP R8,R4 \ 000000E4 F1FFFF0A BEQ ??LoadTemplates_4 1065 p=templates_chars=malloc(fsize+1); \ 000000E8 ........ LDR R4,??DataTable54 ;; S_ICONS \ 000000EC 010087E2 ADD R0,R7,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 380184E5 STR R0,[R4, #+312] \ 000000F8 0060A0E1 MOV R6,R0 1066 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] 1067 fclose(f,&ul); \ 00000118 0D10A0E1 MOV R1,SP \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 0D0000EF SWI +13 1068 i=0; \ 00000124 0070A0E3 MOV R7,#+0 1069 pp=p; \ 00000128 0680A0E1 MOV R8,R6 \ 0000012C 020000EA B ??LoadTemplates_6 1070 for(;;) 1071 { 1072 c=*p; 1073 if (c<32) 1074 { 1075 if (pp&&(pp!=p)) 1076 { 1077 templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 1078 templates_lines[i++]=pp; 1079 } 1080 pp=NULL; 1081 if (!c) break; 1082 *p=0; 1083 } 1084 else 1085 { 1086 if (pp==NULL) pp=p; \ ??LoadTemplates_7: \ 00000130 000058E3 CMP R8,#+0 \ 00000134 0680A001 MOVEQ R8,R6 1087 } 1088 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 3C0194E5 LDR R0,[R4, #+316] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 3C0184E5 STR R0,[R4, #+316] \ 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 1089 } 1090 return i; \ 00000178 0700A001 MOVEQ R0,R7 \ 0000017C CCFFFF0A BEQ ??LoadTemplates_5 \ 00000180 0050C6E5 STRB R5,[R6, #+0] \ 00000184 EBFFFFEA B ??LoadTemplates_8 \ ??LoadTemplates_0: \ 00000188 ........ DC32 `?` \ 0000018C ........ DC32 TEMPLATES_PATH 1091 } 1092 1093 1094 //=================================================================== 1095 1096 typedef struct 1097 { 1098 CSM_RAM csm; 1099 int gui_id; 1100 }MAIN_CSM; 1101 1102 typedef struct 1103 { 1104 GUI gui; 1105 WSHDR *ws1; 1106 WSHDR *ws2; 1107 int i1; 1108 }MAIN_GUI; 1109 1110 1111 1112 int RXstate=EOP; //-sizeof(RXpkt)..-1 - receive header, 0..RXpkt.data_len - receive data 1113 \ In segment DATA_Z, align 4, align-sorted 1114 TPKT RXbuf; \ RXbuf: \ 00000000 DS8 16392 \ In segment DATA_Z, align 4, align-sorted 1115 TPKT TXbuf; \ TXbuf: \ 00000000 DS8 16392 1116 1117 int connect_state=0; 1118 1119 int sock=-1; 1120 1121 volatile unsigned long TOTALRECEIVED; 1122 volatile unsigned long TOTALSENDED; 1123 volatile unsigned long ALLTOTALRECEIVED; //by BoBa 10.07 1124 volatile unsigned long ALLTOTALSENDED; 1125 1126 volatile int sendq_l=0; //Длинна очереди для send 1127 volatile void *sendq_p=NULL; //указатель очереди 1128 1129 volatile int is_gprs_online=1; 1130 1131 GBSTMR reconnect_tmr; 1132 1133 extern void kill_data(void *p,void (*func_p)(void *)); 1134 \ In segment CODE, align 4, keep-with-next 1135 void ElfKiller(void) 1136 { \ ElfKiller: \ 00000000 00402DE9 PUSH {LR} 1137 // if(SLI_TYPE) 1138 // GBS_StopTimer(&mytmr); 1139 // if(Is_Double_Vibra_On) 1140 // GBS_StopTimer(&mytmr2); 1141 // GBS_StopTimer(&mytmr3); 1142 // GBS_StopTimer(&mytmr4); 1143 // DoChangeWall2(); 1144 FontPathFree(); \ 00000004 ........ _BLF FontPathFree,??FontPathFree??rA 1145 extern void *ELF_BEGIN; 1146 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 1147 } 1148 /* 1149 void ElfKiller2(void) 1150 { 1151 extern void *ELF_BEGIN; 1152 kill_data(&ELF_BEGIN,(void (*)(void *))mfree_adr()); 1153 } 1154 */ 1155 //=============================================================================================== 1156 /*#pragma inline 1157 void patch_rect(RECT*rc,int x,int y, int x2, int y2) 1158 { 1159 rc->x=x; 1160 rc->y=y; 1161 rc->x2=x2; 1162 rc->y2=y2; 1163 } 1164 1165 #pragma inline 1166 void patch_header(const HEADER_DESC* head) 1167 { 1168 ((HEADER_DESC*)head)->rc.x=0; 1169 ((HEADER_DESC*)head)->rc.y=YDISP; 1170 ((HEADER_DESC*)head)->rc.x2=ScreenW()-1; 1171 ((HEADER_DESC*)head)->rc.y2=HeaderH()+YDISP-1; 1172 } 1173 #pragma inline 1174 void patch_input(const INPUTDIA_DESC* inp) 1175 { 1176 ((INPUTDIA_DESC*)inp)->rc.x=0; 1177 ((INPUTDIA_DESC*)inp)->rc.y=HeaderH()+1+YDISP; 1178 ((INPUTDIA_DESC*)inp)->rc.x2=ScreenW()-1; 1179 ((INPUTDIA_DESC*)inp)->rc.y2=ScreenH()-SoftkeyH()-1; 1180 }*/ 1181 //=============================================================================================== 1182 1183 volatile CLIST *cltop; 1184 1185 volatile unsigned int GROUP_CACHE; //Текущая группа для добавления 1186 1187 volatile int contactlist_menu_id; 1188 1189 GBSTMR tmr_active; 1190 1191 volatile int edchat_id; 1192 1193 //Применяется для добавления сообщений 1194 //CLIST *edcontact; 1195 //void *edgui_data; 1196 1197 static int prev_clmenu_itemcount; 1198 1199 char clm_hdr_text[48]; 1200 static const char def_clm_hdr_text[] = LG_CLTITLE; 1201 static const char key_clm_hdr_text[] = LG_CLT9INP; 1202 1203 static const HEADER_DESC contactlist_menuhdr = {0, 0, 0, 0, S_ICONS+ICON_HEAD, (int)clm_hdr_text, LGP_NULL}; 1204 static const int menusoftkeys[] = {0,1,2}; 1205 static const SOFTKEY_DESC menu_sk[] = 1206 { 1207 {0x0018, 0x0000, (int)LG_OPTIONS}, 1208 {0x0001, 0x0000, (int)LG_CLOSE}, 1209 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 1210 }; 1211 1212 char clmenu_sk_r[16]; 1213 static const char def_clmenu_sk_r[] = LG_CLOSE; 1214 static const char key_clmenu_sk_r[] = LG_CLEAR; 1215 1216 static const SOFTKEY_DESC clmenu_sk[]= 1217 { 1218 {0x0018, 0x0000, (int)LG_OPTIONS}, 1219 {0x0001, 0x0000, (int)clmenu_sk_r}, 1220 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 1221 }; 1222 1223 const SOFTKEYSTAB menu_skt = 1224 { 1225 menu_sk, 0 1226 }; 1227 1228 static const SOFTKEYSTAB clmenu_skt = 1229 { 1230 clmenu_sk, 0 1231 }; 1232 1233 void contactlist_menu_ghook(void *data, int cmd); 1234 int contactlist_menu_onkey(void *data, GUI_MSG *msg); 1235 void contactlist_menu_iconhndl(void *data, int curitem, void *unk); 1236 1237 #ifdef USE_MLMENU 1238 static const ML_MENU_DESC contactlist_menu= 1239 { 1240 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 1241 menusoftkeys, 1242 &clmenu_skt, 1243 0x11, //+0x400 1244 contactlist_menu_iconhndl, 1245 NULL, //Items 1246 NULL, //Procs 1247 0, //n 1248 1 //Добавочных строк 1249 }; 1250 #else 1251 static const MENU_DESC contactlist_menu= 1252 { 1253 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 1254 menusoftkeys, 1255 &clmenu_skt, 1256 0x11, //+0x400 1257 contactlist_menu_iconhndl, 1258 NULL, //Items 1259 NULL, //Procs 1260 0 //n 1261 }; 1262 #endif 1263 1264 //GBSTMR tmr_ping; 1265 int tenseconds_to_ping; 1266 \ In segment CODE, align 4, keep-with-next 1267 LOGQ *NewLOGQ(const char *s) 1268 { \ NewLOGQ: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1269 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 1270 zeromem(p,sizeof(LOGQ)); \ 00000018 6010A0E3 MOV R1,#+96 \ 0000001C 1D0100EF SWI +285 1271 strcpy(p->text,s); \ 00000020 0410A0E1 MOV R1,R4 \ 00000024 600085E2 ADD R0,R5,#+96 \ 00000028 1A0000EF SWI +26 1272 return p; \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 3080BDE8 POP {R4,R5,PC} ;; return 1273 } 1274 \ In segment CODE, align 4, keep-with-next 1275 LOGQ *LastLOGQ(LOGQ **pp) 1276 { 1277 LOGQ *q=*pp; \ LastLOGQ: \ 00000000 000090E5 LDR R0,[R0, #+0] 1278 if (q) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 1EFF2F01 BXEQ LR \ 0000000C 000000EA B ??LastLOGQ_0 1279 { 1280 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 1281 } 1282 return(q); \ 00000020 1EFF2FE1 BX LR ;; return 1283 } 1284 1285 //Уничтожить лог \ In segment CODE, align 4, keep-with-next 1286 void FreeLOGQ(LOGQ **pp) 1287 { \ FreeLOGQ: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0010A0E1 MOV R1,R0 1288 LOGQ *p=*pp; \ 00000008 000091E5 LDR R0,[R1, #+0] 1289 *pp=NULL; //Сразу обрежем \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 002081E5 STR R2,[R1, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 1080BD08 POPEQ {R4,PC} 1290 while(p) 1291 { 1292 LOGQ *np=p->next; \ ??FreeLOGQ_0: \ 0000001C 004090E5 LDR R4,[R0, #+0] 1293 mfree(p); \ 00000020 150000EF SWI +21 1294 p=np; \ 00000024 0400B0E1 MOVS R0,R4 1295 } \ 00000028 FBFFFF1A BNE ??FreeLOGQ_0 1296 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 1297 1298 //Удалить элемент из лога \ In segment CODE, align 4, keep-with-next 1299 void RemoveLOGQ(LOGQ **queue, LOGQ *p) 1300 { \ RemoveLOGQ: \ 00000000 00402DE9 PUSH {LR} 1301 LOGQ *q=(LOGQ *)queue; \ 00000004 000000EA B ??RemoveLOGQ_0 1302 LOGQ *qp; 1303 while(qp=q->next) 1304 { 1305 if (qp==p) 1306 { 1307 q->next=p->next; 1308 break; 1309 } 1310 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] 1311 } 1312 mfree(p); //Если элемент вообще не в логе \ ??RemoveLOGQ_2: \ 00000028 0100A0E1 MOV R0,R1 \ 0000002C 150000EF SWI +21 1313 } \ 00000030 0080BDE8 POP {PC} ;; return 1314 1315 //Добавить элемент в лог \ In segment CODE, align 4, keep-with-next 1316 int AddLOGQ(LOGQ **queue, LOGQ *p) 1317 { 1318 LOGQ *q=(LOGQ *)queue; 1319 LOGQ *qp; 1320 int i=0; \ AddLOGQ: \ 00000000 0020A0E3 MOV R2,#+0 \ 00000004 000000EA B ??AddLOGQ_0 1321 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 1322 p->next=NULL; \ 0000001C 003081E5 STR R3,[R1, #+0] 1323 q->next=p; \ 00000020 001080E5 STR R1,[R0, #+0] 1324 return(i+1); //Теперь всего в логе элементов \ 00000024 0200A0E1 MOV R0,R2 \ 00000028 1EFF2FE1 BX LR ;; return 1325 } 1326 \ In segment CODE, align 4, keep-with-next 1327 char *GetLastXTextLOGQ(CLIST *t) 1328 { 1329 LOGQ *p = t->log; \ GetLastXTextLOGQ: \ 00000000 741090E5 LDR R1,[R0, #+116] 1330 char *s = 0; \ 00000004 0000A0E3 MOV R0,#+0 1331 if(!p) return 0; \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 0500001A BNE ??GetLastXTextLOGQ_0 \ 00000010 1EFF2FE1 BX LR 1332 while(p->next) 1333 { 1334 if((p->type&0x0F)==3) \ ??GetLastXTextLOGQ_1: \ 00000014 0C3091E5 LDR R3,[R1, #+12] \ 00000018 0F3003E2 AND R3,R3,#0xF \ 0000001C 030053E3 CMP R3,#+3 1335 s = p->text; \ 00000020 60008102 ADDEQ R0,R1,#+96 1336 p = p->next; \ 00000024 0210A0E1 MOV R1,R2 1337 } \ ??GetLastXTextLOGQ_0: \ 00000028 002091E5 LDR R2,[R1, #+0] \ 0000002C 000052E3 CMP R2,#+0 \ 00000030 F7FFFF1A BNE ??GetLastXTextLOGQ_1 1338 if((p->type&0x0F)==3) \ 00000034 0C2091E5 LDR R2,[R1, #+12] \ 00000038 0F2002E2 AND R2,R2,#0xF \ 0000003C 030052E3 CMP R2,#+3 1339 s = p->text; \ 00000040 60008102 ADDEQ R0,R1,#+96 1340 return s; \ 00000044 1EFF2FE1 BX LR ;; return 1341 } 1342 \ In segment CODE, align 4, keep-with-next 1343 int GetIconIndex(CLIST *t) 1344 { 1345 unsigned short s; 1346 if (t) \ GetIconIndex: \ 00000000 000050E3 CMP R0,#+0 \ 00000004 3400000A BEQ ??GetIconIndex_0 1347 { 1348 s=t->state; 1349 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 1350 if (t->isunread) \ 0000001C 640090E5 LDR R0,[R0, #+100] \ 00000020 000050E3 CMP R0,#+0 1351 return(IS_MSG); \ 00000024 0D00A013 MOVNE R0,#+13 \ 00000028 1EFF2F11 BXNE LR 1352 else 1353 { 1354 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 1355 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 1356 if ((s&0xF000)==0x3000) return (IS_EVIL); \ 0000004C C00D52E3 CMP R2,#+12288 \ 00000050 0700A003 MOVEQ R0,#+7 \ 00000054 1EFF2F01 BXEQ LR 1357 if ((s&0xF000)==0x4000) return (IS_DEPRESSION); \ 00000058 400C52E3 CMP R2,#+16384 \ 0000005C 0600A003 MOVEQ R0,#+6 \ 00000060 1EFF2F01 BXEQ LR 1358 if ((s&0xF000)==0x5000) return (IS_HOME); \ 00000064 500C52E3 CMP R2,#+20480 \ 00000068 0800A003 MOVEQ R0,#+8 \ 0000006C 1EFF2F01 BXEQ LR 1359 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 1360 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 1361 if (s & 0x0001) return(IS_AWAY); \ ??GetIconIndex_1: \ 00000090 010011E3 TST R1,#0x1 \ 00000094 0200A013 MOVNE R0,#+2 \ 00000098 1EFF2F11 BXNE LR 1362 if (s & 0x0005) return(IS_NA); \ 0000009C 050011E3 TST R1,#0x5 \ 000000A0 0300A013 MOVNE R0,#+3 \ 000000A4 1EFF2F11 BXNE LR 1363 if (s & 0x0011) return(IS_OCCUPIED); \ 000000A8 110011E3 TST R1,#0x11 \ 000000AC 0400A013 MOVNE R0,#+4 \ 000000B0 1EFF2F11 BXNE LR 1364 if (s & 0x0013) return(IS_DND); \ 000000B4 130011E3 TST R1,#0x13 \ 000000B8 0500A013 MOVNE R0,#+5 \ 000000BC 1EFF2F11 BXNE LR 1365 if (s & 0x0002) return(IS_FFC); \ 000000C0 020011E3 TST R1,#0x2 \ 000000C4 EFFFFF1A BNE ??GetIconIndex_2 1366 if (s & 0x0100) return(IS_INVISIBLE); \ 000000C8 400F11E3 TST R1,#0x100 \ 000000CC 0100A013 MOVNE R0,#+1 \ 000000D0 1EFF2F11 BXNE LR 1367 } 1368 } 1369 else 1370 { 1371 return(IS_UNKNOWN); 1372 } 1373 return(IS_ONLINE); \ 000000D4 0B00A0E3 MOV R0,#+11 \ 000000D8 1EFF2FE1 BX LR \ ??GetIconIndex_0: \ 000000DC 0E00A0E3 MOV R0,#+14 \ 000000E0 1EFF2FE1 BX LR ;; return 1374 } 1375 \ In segment CODE, align 4, keep-with-next 1376 LOGQ *FindContactLOGQByAck(TPKT *p) 1377 { \ FindContactLOGQByAck: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1378 CLIST *t; 1379 LockSched(); \ 00000008 460100EF SWI +326 1380 t=FindContactByUin(p->pkt.uin); \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000014 0050A0E1 MOV R5,R0 1381 UnlockSched(); \ 00000018 470100EF SWI +327 1382 unsigned int id=*((unsigned short*)(p->data)); \ 0000001C B840D4E1 LDRH R4,[R4, #+8] 1383 LOGQ *q; 1384 if (!t) return NULL; \ 00000020 000055E3 CMP R5,#+0 \ 00000024 0000A003 MOVEQ R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 1385 LockSched(); \ 0000002C 460100EF SWI +326 1386 q=t->log; \ 00000030 745095E5 LDR R5,[R5, #+116] \ 00000034 000000EA B ??FindContactLOGQByAck_0 1387 while(q) 1388 { 1389 if (q->ID==id) break; 1390 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 1391 } 1392 UnlockSched(); \ 0000004C 470100EF SWI +327 1393 return q; \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 3080BDE8 POP {R4,R5,PC} ;; return 1394 } 1395 1396 extern const int TIME_OR_MSG; 1397 char ContactT9Key[32]; 1398 int kopa_online; 1399 int kopa_kontaktu; 1400 \ In segment CODE, align 4, keep-with-next 1401 void UpdateCLheader(void) 1402 { \ UpdateCLheader: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 1403 if (strlen(ContactT9Key)) \ 00000004 ........ LDR R4,??DataTable54 ;; S_ICONS \ 00000008 A4729FE5 LDR R7,??UpdateCLheader_0 ;; key_clmenu_sk_r \ 0000000C 08D04DE2 SUB SP,SP,#+8 \ 00000010 5C00A0E3 MOV R0,#+92 \ 00000014 600D80E3 ORR R0,R0,#0x1800 \ 00000018 045080E0 ADD R5,R0,R4 \ 0000001C 300040E2 SUB R0,R0,#+48 \ 00000020 046080E0 ADD R6,R0,R4 \ 00000024 BD8FA0E3 MOV R8,#+756 \ 00000028 040088E0 ADD R0,R8,R4 \ 0000002C 1B0000EF SWI +27 \ 00000030 000050E3 CMP R0,#+0 \ 00000034 0900000A BEQ ??UpdateCLheader_1 1404 { 1405 strcpy(clm_hdr_text,key_clm_hdr_text); \ 00000038 6A1F87E2 ADD R1,R7,#+424 \ 0000003C 0600A0E1 MOV R0,R6 \ 00000040 1A0000EF SWI +26 1406 strcat(clm_hdr_text,ContactT9Key); \ 00000044 041088E0 ADD R1,R8,R4 \ 00000048 0600A0E1 MOV R0,R6 \ 0000004C 170000EF SWI +23 1407 strcpy(clmenu_sk_r,key_clmenu_sk_r); \ 00000050 0710A0E1 MOV R1,R7 \ 00000054 0500A0E1 MOV R0,R5 \ 00000058 1A0000EF SWI +26 \ 0000005C F383BDE8 POP {R0,R1,R4-R9,PC} 1408 } 1409 else 1410 { 1411 switch(TIME_OR_MSG) \ ??UpdateCLheader_1: \ 00000060 ........ LDR R2,??DataTable49 ;; TIME_OR_MSG \ 00000064 C00094E5 LDR R0,[R4, #+192] \ 00000068 002092E5 LDR R2,[R2, #+0] \ 0000006C C41094E5 LDR R1,[R4, #+196] \ 00000070 678FA0E3 MOV R8,#+412 \ 00000074 000052E3 CMP R2,#+0 \ 00000078 0400000A BEQ ??UpdateCLheader_2 \ 0000007C 012052E2 SUBS R2,R2,#+1 \ 00000080 0E00000A BEQ ??UpdateCLheader_3 \ 00000084 012052E2 SUBS R2,R2,#+1 \ 00000088 1100000A BEQ ??UpdateCLheader_4 \ 0000008C 840000EA B ??UpdateCLheader_5 1412 { 1413 case 0: 1414 { 1415 TTime the; 1416 GetDateTime(NULL,&the); \ ??UpdateCLheader_2: \ 00000090 0D10A0E1 MOV R1,SP \ 00000094 0000A0E3 MOV R0,#+0 \ 00000098 B40000EF SWI +180 1417 sprintf(clm_hdr_text, "%s(%02d:%02d)",def_clm_hdr_text,the.hour,the.min); \ 0000009C 0100DDE5 LDRB R0,[SP, #+1] \ 000000A0 072088E0 ADD R2,R8,R7 \ 000000A4 041087E2 ADD R1,R7,#+4 \ 000000A8 01002DE9 PUSH {R0} \ 000000AC 0430DDE5 LDRB R3,[SP, #+4] \ ??UpdateCLheader_6: \ 000000B0 0600A0E1 MOV R0,R6 \ 000000B4 160000EF SWI +22 \ 000000B8 04D08DE2 ADD SP,SP,#+4 \ 000000BC 780000EA B ??UpdateCLheader_5 1418 } 1419 break; 1420 case 1: 1421 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,total_unread,total_unread2); \ ??UpdateCLheader_3: \ 000000C0 02002DE9 PUSH {R1} \ 000000C4 0030A0E1 MOV R3,R0 \ 000000C8 072088E0 ADD R2,R8,R7 \ 000000CC 141087E2 ADD R1,R7,#+20 \ 000000D0 F6FFFFEA B ??UpdateCLheader_6 1422 break; 1423 case 2: 1424 //sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,kopa_kontaktu,kopa_online); 1425 if(CurrentPrivateStatus==1 && automsg && Is_Vibra_Enabled && Is_Sounds_Enabled) \ ??UpdateCLheader_4: \ 000000D4 842194E5 LDR R2,[R4, #+388] \ 000000D8 803194E5 LDR R3,[R4, #+384] \ 000000DC 28C194E5 LDR R12,[R4, #+296] \ 000000E0 24E194E5 LDR LR,[R4, #+292] \ 000000E4 109194E5 LDR R9,[R4, #+272] \ 000000E8 F44094E5 LDR R4,[R4, #+244] \ 000000EC 010054E3 CMP R4,#+1 \ 000000F0 0C00001A BNE ??UpdateCLheader_7 \ 000000F4 000059E3 CMP R9,#+0 \ 000000F8 0A00000A BEQ ??UpdateCLheader_7 \ 000000FC 00005EE3 CMP LR,#+0 \ 00000100 1200000A BEQ ??UpdateCLheader_8 \ 00000104 02002DE9 PUSH {R1} \ 00000108 01002DE9 PUSH {R0} \ 0000010C 00005CE3 CMP R12,#+0 \ 00000110 40108702 ADDEQ R1,R7,#+64 1426 sprintf(clm_hdr_text, "[%d/%d] [%d/%d] [A][I][V][S]",kopa_kontaktu,kopa_online,total_unread,total_unread2); \ 00000114 20108712 ADDNE R1,R7,#+32 \ ??UpdateCLheader_9: \ 00000118 0600A0E1 MOV R0,R6 \ 0000011C 160000EF SWI +22 \ 00000120 08D08DE2 ADD SP,SP,#+8 \ 00000124 5E0000EA B ??UpdateCLheader_5 1427 else 1428 if(CurrentPrivateStatus==1 && automsg && Is_Vibra_Enabled) 1429 sprintf(clm_hdr_text, "[%d/%d] [%d/%d] [A][I][V]",kopa_kontaktu,kopa_online,total_unread,total_unread2); 1430 else 1431 if(Is_Vibra_Enabled && Is_Sounds_Enabled && automsg ) \ ??UpdateCLheader_7: \ 00000128 00005EE3 CMP LR,#+0 \ 0000012C 00005C13 CMPNE R12,#+0 \ 00000130 00005913 CMPNE R9,#+0 \ 00000134 0300000A BEQ ??UpdateCLheader_10 1432 sprintf(clm_hdr_text, "[%d/%d] [%d/%d] [A][V][S]",kopa_kontaktu,kopa_online,total_unread,total_unread2); \ 00000138 02002DE9 PUSH {R1} \ 0000013C 01002DE9 PUSH {R0} \ 00000140 5C1087E2 ADD R1,R7,#+92 \ ??UpdateCLheader_11: \ 00000144 F3FFFFEA B ??UpdateCLheader_9 1433 else 1434 if(CurrentPrivateStatus==1 && Is_Sounds_Enabled && automsg ) \ ??UpdateCLheader_10: \ 00000148 010054E3 CMP R4,#+1 \ 0000014C 0D00001A BNE ??UpdateCLheader_12 \ ??UpdateCLheader_8: \ 00000150 00005CE3 CMP R12,#+0 \ 00000154 0B00000A BEQ ??UpdateCLheader_12 \ 00000158 000059E3 CMP R9,#+0 \ 0000015C 0300000A BEQ ??UpdateCLheader_13 1435 sprintf(clm_hdr_text, "[%d/%d] [%d/%d] [A][I][S]",kopa_kontaktu,kopa_online,total_unread,total_unread2); \ 00000160 02002DE9 PUSH {R1} \ 00000164 01002DE9 PUSH {R0} \ 00000168 781087E2 ADD R1,R7,#+120 \ 0000016C E9FFFFEA B ??UpdateCLheader_9 \ ??UpdateCLheader_13: \ 00000170 00005EE3 CMP LR,#+0 \ 00000174 0300000A BEQ ??UpdateCLheader_12 1436 else 1437 if(CurrentPrivateStatus==1 && Is_Sounds_Enabled && Is_Vibra_Enabled) 1438 sprintf(clm_hdr_text, "[%d/%d] [%d/%d] [I][V][S]",kopa_kontaktu,kopa_online,total_unread,total_unread2); \ 00000178 02002DE9 PUSH {R1} \ 0000017C 01002DE9 PUSH {R0} \ 00000180 941087E2 ADD R1,R7,#+148 \ 00000184 E3FFFFEA B ??UpdateCLheader_9 1439 else 1440 if(Is_Vibra_Enabled && Is_Sounds_Enabled) \ ??UpdateCLheader_12: \ 00000188 00005EE3 CMP LR,#+0 \ 0000018C 00005C13 CMPNE R12,#+0 \ 00000190 0300000A BEQ ??UpdateCLheader_14 1441 sprintf(clm_hdr_text, "[%d/%d] [%d/%d] [V][S]",kopa_kontaktu,kopa_online,total_unread,total_unread2); \ 00000194 02002DE9 PUSH {R1} \ 00000198 01002DE9 PUSH {R0} \ 0000019C B01087E2 ADD R1,R7,#+176 \ 000001A0 DCFFFFEA B ??UpdateCLheader_9 1442 else 1443 if(CurrentPrivateStatus==1 && Is_Sounds_Enabled) \ ??UpdateCLheader_14: \ 000001A4 010054E3 CMP R4,#+1 \ 000001A8 0E00001A BNE ??UpdateCLheader_15 \ 000001AC 00005CE3 CMP R12,#+0 \ 000001B0 0600000A BEQ ??UpdateCLheader_16 1444 sprintf(clm_hdr_text, "[%d/%d] [%d/%d] [I][S]",kopa_kontaktu,kopa_online,total_unread,total_unread2); \ 000001B4 02002DE9 PUSH {R1} \ 000001B8 01002DE9 PUSH {R0} \ 000001BC C81087E2 ADD R1,R7,#+200 \ 000001C0 0600A0E1 MOV R0,R6 \ 000001C4 160000EF SWI +22 \ 000001C8 08D08DE2 ADD SP,SP,#+8 \ 000001CC 340000EA B ??UpdateCLheader_5 \ ??UpdateCLheader_16: \ 000001D0 00005EE3 CMP LR,#+0 \ 000001D4 0300000A BEQ ??UpdateCLheader_15 1445 else 1446 if(CurrentPrivateStatus==1 && Is_Vibra_Enabled) 1447 sprintf(clm_hdr_text, "[%d/%d] [%d/%d] [I][V]",kopa_kontaktu,kopa_online,total_unread,total_unread2); \ 000001D8 02002DE9 PUSH {R1} \ 000001DC 01002DE9 PUSH {R0} \ 000001E0 E01087E2 ADD R1,R7,#+224 \ 000001E4 CBFFFFEA B ??UpdateCLheader_9 1448 else 1449 if(Is_Vibra_Enabled && automsg) \ ??UpdateCLheader_15: \ 000001E8 00005EE3 CMP LR,#+0 \ 000001EC 00005913 CMPNE R9,#+0 \ 000001F0 0300000A BEQ ??UpdateCLheader_17 1450 sprintf(clm_hdr_text, "[%d/%d] [%d/%d] [A][V]",kopa_kontaktu,kopa_online,total_unread,total_unread2); \ 000001F4 02002DE9 PUSH {R1} \ 000001F8 01002DE9 PUSH {R0} \ 000001FC F81087E2 ADD R1,R7,#+248 \ 00000200 C4FFFFEA B ??UpdateCLheader_9 1451 else 1452 if(CurrentPrivateStatus==1 && automsg) \ ??UpdateCLheader_17: \ 00000204 010054E3 CMP R4,#+1 \ 00000208 0500001A BNE ??UpdateCLheader_18 \ 0000020C 000059E3 CMP R9,#+0 \ 00000210 0300000A BEQ ??UpdateCLheader_18 1453 sprintf(clm_hdr_text, "[%d/%d] [%d/%d] [A][I]",kopa_kontaktu,kopa_online,total_unread,total_unread2); \ 00000214 02002DE9 PUSH {R1} \ 00000218 01002DE9 PUSH {R0} \ 0000021C 441F87E2 ADD R1,R7,#+272 \ 00000220 BCFFFFEA B ??UpdateCLheader_9 1454 else 1455 if(automsg) \ ??UpdateCLheader_18: \ 00000224 000059E3 CMP R9,#+0 \ 00000228 0400000A BEQ ??UpdateCLheader_19 1456 sprintf(clm_hdr_text, "%s[%d/%d] [%d/%d] [A]",def_clm_hdr_text,kopa_kontaktu,kopa_online,total_unread,total_unread2); \ 0000022C 02002DE9 PUSH {R1} \ 00000230 01002DE9 PUSH {R0} \ 00000234 08002DE9 PUSH {R3} \ 00000238 4A1F87E2 ADD R1,R7,#+296 \ 0000023C 130000EA B ??UpdateCLheader_20 1457 else 1458 if(CurrentPrivateStatus==1) \ ??UpdateCLheader_19: \ 00000240 010054E3 CMP R4,#+1 \ 00000244 0400001A BNE ??UpdateCLheader_21 1459 sprintf(clm_hdr_text, "%s[%d/%d] [%d/%d] [I]",def_clm_hdr_text,kopa_kontaktu,kopa_online,total_unread,total_unread2); \ 00000248 02002DE9 PUSH {R1} \ 0000024C 01002DE9 PUSH {R0} \ 00000250 08002DE9 PUSH {R3} \ 00000254 501F87E2 ADD R1,R7,#+320 \ 00000258 0C0000EA B ??UpdateCLheader_20 1460 else 1461 if(Is_Vibra_Enabled) \ ??UpdateCLheader_21: \ 0000025C 00005EE3 CMP LR,#+0 \ 00000260 0400000A BEQ ??UpdateCLheader_22 1462 sprintf(clm_hdr_text, "%s[%d/%d] [%d/%d] [V]",def_clm_hdr_text,kopa_kontaktu,kopa_online,total_unread,total_unread2); \ 00000264 02002DE9 PUSH {R1} \ 00000268 01002DE9 PUSH {R0} \ 0000026C 08002DE9 PUSH {R3} \ 00000270 561F87E2 ADD R1,R7,#+344 \ 00000274 050000EA B ??UpdateCLheader_20 1463 else 1464 if(Is_Sounds_Enabled) \ ??UpdateCLheader_22: \ 00000278 02002DE9 PUSH {R1} \ 0000027C 01002DE9 PUSH {R0} \ 00000280 08002DE9 PUSH {R3} \ 00000284 00005CE3 CMP R12,#+0 1465 sprintf(clm_hdr_text, "%s[%d/%d] [%d/%d] [S]",def_clm_hdr_text,kopa_kontaktu,kopa_online,total_unread,total_unread2); \ 00000288 5C1F8712 ADDNE R1,R7,#+368 1466 else 1467 sprintf(clm_hdr_text, "%s[%d/%d] [%d/%d]",def_clm_hdr_text,kopa_kontaktu,kopa_online,total_unread,total_unread2); \ 0000028C 621F8702 ADDEQ R1,R7,#+392 \ ??UpdateCLheader_20: \ 00000290 0230A0E1 MOV R3,R2 \ 00000294 072088E0 ADD R2,R8,R7 \ 00000298 0600A0E1 MOV R0,R6 \ 0000029C 160000EF SWI +22 \ 000002A0 0CD08DE2 ADD SP,SP,#+12 1468 break; 1469 } 1470 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ ??UpdateCLheader_5: \ 000002A4 6D1F87E2 ADD R1,R7,#+436 \ 000002A8 0500A0E1 MOV R0,R5 \ 000002AC 1A0000EF SWI +26 1471 } 1472 } \ 000002B0 F383BDE8 POP {R0,R1,R4-R9,PC} ;; return \ ??UpdateCLheader_0: \ 000002B4 ........ DC32 key_clmenu_sk_r 1473 \ In segment CODE, align 4, keep-with-next 1474 void ClearContactT9Key(void) 1475 { 1476 zeromem(ContactT9Key,sizeof(ContactT9Key)); \ ClearContactT9Key: \ 00000000 0C009FE5 LDR R0,??ClearContactT9Key_0 ;; S_ICONS + 756 \ 00000004 00402DE9 PUSH {LR} \ 00000008 2010A0E3 MOV R1,#+32 \ 0000000C 1D0100EF SWI +285 1477 } \ 00000010 0080BDE8 POP {PC} ;; return \ ??ClearContactT9Key_0: \ 00000014 ........ DC32 S_ICONS + 756 1478 \ In segment CODE, align 4, keep-with-next 1479 void AddContactT9Key(int chr) 1480 { \ AddContactT9Key: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1481 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R5,??DataTable54 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C BD0F85E2 ADD R0,R5,#+756 \ 00000010 1B0000EF SWI +27 1482 if (l<(sizeof(ContactT9Key)-1)) \ 00000014 1F0050E3 CMP R0,#+31 1483 { 1484 ContactT9Key[l]=chr; \ 00000018 05008030 ADDCC R0,R0,R5 \ 0000001C F442C035 STRBCC R4,[R0, #+756] 1485 } 1486 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 1487 \ In segment CODE, align 4, keep-with-next 1488 void BackSpaceContactT9(void) 1489 { \ BackSpaceContactT9: \ 00000000 10402DE9 PUSH {R4,LR} 1490 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R4,??DataTable54 ;; S_ICONS \ 00000008 BD0F84E2 ADD R0,R4,#+756 \ 0000000C 1B0000EF SWI +27 1491 if (l) \ 00000010 000050E3 CMP R0,#+0 1492 { 1493 l--; 1494 ContactT9Key[l]=0; \ 00000014 04008010 ADDNE R0,R0,R4 \ 00000018 0010A013 MOVNE R1,#+0 \ 0000001C F312C015 STRBNE R1,[R0, #+755] 1495 } 1496 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 1497 \ In segment CODE, align 4, keep-with-next 1498 void create_contactlist_menu(void) 1499 { \ create_contactlist_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 1500 int i; 1501 i=CountContacts(); 1502 prev_clmenu_itemcount=i; \ 00000004 ........ LDR R5,??DataTable54 ;; S_ICONS 1503 UpdateCLheader(); 1504 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 784185E5 STR R4,[R5, #+376] \ 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] 1505 #ifdef USE_MLMENU 1506 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 700185E5 STR R0,[R5, #+368] 1507 #else 1508 contactlist_menu_id=CreateMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i,0,0); 1509 #endif 1510 } \ 00000064 7380BDE8 POP {R0,R1,R4-R6,PC} ;; return \ ??create_contactlist_menu_0: \ 00000068 ........ DC32 contactlist_menuhdr 1511 \ In segment CODE, align 4, keep-with-next 1512 void contactlist_menu_ghook(void *data, int cmd) 1513 { \ contactlist_menu_ghook: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0140A0E1 MOV R4,R1 1514 PNGTOP_DESC *pltop=PNG_TOP(); \ 00000008 B98100EF SWI +33209 1515 if (cmd==9) \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 090054E3 CMP R4,#+9 1516 { 1517 pltop->dyn_pltop=NULL; \ 00000014 08108005 STREQ R1,[R0, #+8] \ 00000018 1080BD08 POPEQ {R4,PC} 1518 } 1519 if (cmd==0x0A) \ 0000001C 0A0054E3 CMP R4,#+10 \ 00000020 1080BD18 POPNE {R4,PC} 1520 { 1521 silenthide=0; \ 00000024 14209FE5 LDR R2,??contactlist_menu_ghook_0 ;; S_ICONS + 284 \ 00000028 001082E5 STR R1,[R2, #+0] 1522 pltop->dyn_pltop=XStatusesImgList; \ 0000002C ........ LDR R1,??DataTable53 ;; XStatusesImgList \ 00000030 001091E5 LDR R1,[R1, #+0] \ 00000034 081080E5 STR R1,[R0, #+8] 1523 DisableIDLETMR(); \ 00000038 7F0100EF SWI +383 1524 } 1525 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return \ ??contactlist_menu_ghook_0: \ 00000040 ........ DC32 S_ICONS + 284 1526 \ In segment CODE, align 4, keep-with-next 1527 void RecountMenu(CLIST *req) 1528 { \ RecountMenu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 1529 int i; 1530 int j; 1531 void *data; 1532 UpdateCLheader(); 1533 if (!contactlist_menu_id) return; //Нечего считать \ 00000004 ........ LDR R5,??DataTable54 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C ........ BL UpdateCLheader \ 00000010 700195E5 LDR R0,[R5, #+368] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 7080BD08 POPEQ {R4-R6,PC} 1534 data=FindGUIbyId(contactlist_menu_id,NULL); \ 0000001C 700195E5 LDR R0,[R5, #+368] \ 00000020 0010A0E3 MOV R1,#+0 \ 00000024 090200EF SWI +521 \ 00000028 0060A0E1 MOV R6,R0 1535 if (req==NULL) \ 0000002C 000054E3 CMP R4,#+0 \ 00000030 0200000A BEQ ??RecountMenu_0 1536 { 1537 j=0; 1538 } 1539 else 1540 { 1541 j=FindContactByContact(req); \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 ........ _BLF FindContactByContact,??FindContactByContact??rA \ 0000003C 0040A0E1 MOV R4,R0 1542 } 1543 i=CountContacts(); \ ??RecountMenu_0: \ 00000040 ........ _BLF CountContacts,??CountContacts??rA 1544 if (j>=i) j=i-1; 1545 if (j<0) j=0; 1546 if (i!=prev_clmenu_itemcount) \ 00000044 781195E5 LDR R1,[R5, #+376] \ 00000048 000054E1 CMP R4,R0 \ 0000004C 014040A2 SUBGE R4,R0,#+1 \ 00000050 000054E3 CMP R4,#+0 \ 00000054 0040A043 MOVMI R4,#+0 \ 00000058 010050E1 CMP R0,R1 \ 0000005C 0300000A BEQ ??RecountMenu_1 1547 { 1548 prev_clmenu_itemcount=i; \ 00000060 780185E5 STR R0,[R5, #+376] 1549 Menu_SetItemCountDyn(data,i); \ 00000064 0010A0E1 MOV R1,R0 \ 00000068 0600A0E1 MOV R0,R6 \ 0000006C E60100EF SWI +486 1550 } 1551 SetCursorToMenuItem(data,j); \ ??RecountMenu_1: \ 00000070 0410A0E1 MOV R1,R4 \ 00000074 0600A0E1 MOV R0,R6 \ 00000078 C40100EF SWI +452 1552 if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); \ 0000007C 700195E5 LDR R0,[R5, #+368] \ 00000080 350100EF SWI +309 \ 00000084 000050E3 CMP R0,#+0 \ 00000088 7080BD08 POPEQ {R4-R6,PC} \ 0000008C 960100EF SWI +406 \ 00000090 7080BDE8 POP {R4-R6,PC} ;; return 1553 } 1554 1555 char hostbuf2[128]; 1556 int main_d; 1557 extern void SetPrivateStatus(int status); \ In segment CODE, align 4, keep-with-next 1558 int contactlist_menu_onkey(void *data, GUI_MSG *msg) 1559 { \ contactlist_menu_onkey: \ 00000000 F24F2DE9 PUSH {R1,R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 1560 CLIST *t; 1561 int i; 1562 i=GetCurMenuItem(data); \ 00000008 8F0100EF SWI +399 1563 t=FindContactByN(i); \ 0000000C ........ _BLF FindContactByN,??FindContactByN??rA \ 00000010 0080A0E1 MOV R8,R0 1564 if (msg->keys==0x18) \ 00000014 04009DE5 LDR R0,[SP, #+4] \ 00000018 F200D0E1 LDRSH R0,[R0, #+2] \ 0000001C 180050E3 CMP R0,#+24 \ 00000020 0100001A BNE ??contactlist_menu_onkey_1 1565 { 1566 ShowMainMenu(); \ 00000024 ........ _BLF ShowMainMenu,??ShowMainMenu??rA 1567 return(-1); \ 00000028 250000EA B ??contactlist_menu_onkey_2 1568 } 1569 if (msg->keys==0x3D) \ ??contactlist_menu_onkey_1: \ 0000002C ........ LDR R6,??DataTable68 ;; S_ICONS \ 00000030 BD5FA0E3 MOV R5,#+756 \ 00000034 3D0050E3 CMP R0,#+61 \ 00000038 2300001A BNE ??contactlist_menu_onkey_3 1570 { 1571 if (t) \ 0000003C 000058E3 CMP R8,#+0 \ 00000040 2A00000A BEQ ??contactlist_menu_onkey_4 1572 { 1573 if (t->isgroup) \ 00000044 080098E5 LDR R0,[R8, #+8] \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0600000A BEQ ??contactlist_menu_onkey_5 1574 { 1575 t->state^=0xFFFF; \ 00000050 B405D8E1 LDRH R0,[R8, #+84] \ 00000054 FF10A0E3 MOV R1,#+255 \ 00000058 FF1C81E3 ORR R1,R1,#0xFF00 \ 0000005C 000021E0 EOR R0,R1,R0 \ 00000060 B405C8E1 STRH R0,[R8, #+84] 1576 RecountMenu(t); \ 00000064 0800A0E1 MOV R0,R8 \ 00000068 1F0000EA B ??contactlist_menu_onkey_6 1577 return(-1); 1578 } 1579 if (strlen(ContactT9Key)) \ ??contactlist_menu_onkey_5: \ 0000006C 060085E0 ADD R0,R5,R6 \ 00000070 1B0000EF SWI +27 \ 00000074 000050E3 CMP R0,#+0 \ 00000078 0400000A BEQ ??contactlist_menu_onkey_7 1580 { 1581 ClearContactT9Key(); \ 0000007C 2010A0E3 MOV R1,#+32 \ 00000080 060085E0 ADD R0,R5,R6 \ 00000084 1D0100EF SWI +285 1582 RecountMenu(NULL); \ 00000088 0000A0E3 MOV R0,#+0 \ 0000008C ........ BL RecountMenu 1583 } 1584 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<keys==1) \ ??contactlist_menu_onkey_3: \ 000000CC 010050E3 CMP R0,#+1 \ 000000D0 0800001A BNE ??contactlist_menu_onkey_9 1590 { 1591 if (strlen(ContactT9Key)) \ 000000D4 060085E0 ADD R0,R5,R6 \ 000000D8 1B0000EF SWI +27 \ 000000DC 000050E3 CMP R0,#+0 \ 000000E0 0400000A BEQ ??contactlist_menu_onkey_9 1592 { 1593 BackSpaceContactT9(); \ 000000E4 ........ BL BackSpaceContactT9 1594 RecountMenu(NULL); \ 000000E8 0000A0E3 MOV R0,#+0 \ ??contactlist_menu_onkey_6: \ 000000EC ........ BL RecountMenu 1595 return(-1); \ ??contactlist_menu_onkey_4: \ 000000F0 0000E0E3 MVN R0,#+0 \ 000000F4 F68FBDE8 POP {R1,R2,R4-R11,PC} 1596 } 1597 } 1598 if (msg->gbsmsg->msg==KEY_DOWN) \ ??contactlist_menu_onkey_9: \ 000000F8 04009DE5 LDR R0,[SP, #+4] \ 000000FC ........ LDR R7,??DataTable62 ;; `?gbsmsg->submess; \ 00000120 08A090E5 LDR R10,[R0, #+8] 1601 if ((key>='0')&&(key<='9')) \ 00000124 30005AE3 CMP R10,#+48 \ 00000128 060000BA BLT ??contactlist_menu_onkey_11 \ 0000012C 3A005AE3 CMP R10,#+58 \ 00000130 1A0000AA BGE ??contactlist_menu_onkey_12 1602 { 1603 AddContactT9Key(key); \ 00000134 0A00A0E1 MOV R0,R10 \ 00000138 ........ BL AddContactT9Key 1604 RecountMenu(NULL); \ 0000013C 0000A0E3 MOV R0,#+0 \ 00000140 ........ BL RecountMenu \ 00000144 4B0000EA B ??contactlist_menu_onkey_13 1605 return(-1); 1606 } 1607 #ifdef ELKA 1608 if (key==VOL_UP_BUTTON) \ ??contactlist_menu_onkey_11: \ 00000148 0D005AE3 CMP R10,#+13 \ 0000014C 1300001A BNE ??contactlist_menu_onkey_12 1609 //#else 1610 // if (key=='#') 1611 //#endif 1612 { 1613 char *small_info=malloc(256); \ 00000150 400FA0E3 MOV R0,#+256 \ 00000154 140000EF SWI +20 \ 00000158 00B0A0E1 MOV R11,R0 1614 // sprintf(hah,"online: %02d:%02d:%02d", xstatus_old, minimum_xstatus, maximum); 1615 sprintf(small_info, "Online time:\n" 1616 "%02d:%02d:%02d\n" 1617 "Server:\n" 1618 "%s" 1619 , xstatus_old, minimum_xstatus, maximum, hostbuf2); \ 0000015C 6C00A0E3 MOV R0,#+108 \ 00000160 600D80E3 ORR R0,R0,#0x1800 \ 00000164 060080E0 ADD R0,R0,R6 \ 00000168 01002DE9 PUSH {R0} \ 0000016C 080196E5 LDR R0,[R6, #+264] \ 00000170 241087E2 ADD R1,R7,#+36 \ 00000174 01002DE9 PUSH {R0} \ 00000178 043196E5 LDR R3,[R6, #+260] \ 0000017C 002196E5 LDR R2,[R6, #+256] \ 00000180 0B00A0E1 MOV R0,R11 \ 00000184 160000EF SWI +22 1620 ShowMSG(1,(int)small_info); \ 00000188 0B10A0E1 MOV R1,R11 \ 0000018C 0100A0E3 MOV R0,#+1 \ 00000190 480100EF SWI +328 1621 mfree(small_info); \ 00000194 0B00A0E1 MOV R0,R11 \ 00000198 150000EF SWI +21 \ 0000019C 08D08DE2 ADD SP,SP,#+8 1622 } 1623 if(msg->gbsmsg->submess==VOL_DOWN_BUTTON) \ ??contactlist_menu_onkey_12: \ 000001A0 04009DE5 LDR R0,[SP, #+4] \ 000001A4 040090E5 LDR R0,[R0, #+4] \ 000001A8 080090E5 LDR R0,[R0, #+8] \ 000001AC 0E0050E3 CMP R0,#+14 \ 000001B0 1300001A BNE ??contactlist_menu_onkey_14 1624 { 1625 if(!automsg) \ 000001B4 100196E5 LDR R0,[R6, #+272] \ 000001B8 000050E3 CMP R0,#+0 \ 000001BC 0B00001A BNE ??contactlist_menu_onkey_15 1626 { 1627 automsg=!automsg; \ 000001C0 104186E5 STR R4,[R6, #+272] 1628 GBS_StopTimer(&away_tmr); \ 000001C4 1C00A0E3 MOV R0,#+28 \ 000001C8 580D80E3 ORR R0,R0,#0x1600 \ 000001CC 060080E0 ADD R0,R0,R6 \ 000001D0 440100EF SWI +324 1629 msg_away_timer=AUTO_ENGADE; \ 000001D4 ........ LDR R0,??DataTable58 ;; AUTO_ENGADE \ 000001D8 000090E5 LDR R0,[R0, #+0] \ 000001DC E00086E5 STR R0,[R6, #+224] 1630 away_timer(); \ 000001E0 ........ BL away_timer 1631 main_d=1; \ 000001E4 884186E5 STR R4,[R6, #+392] 1632 // ShowMSG(1,(int)"Автоответчик включен!"); 1633 InputAwayMsg(); \ 000001E8 ........ BL InputAwayMsg \ 000001EC 020000EA B ??contactlist_menu_onkey_16 1634 } 1635 else 1636 { 1637 msg_away_timer=0; \ ??contactlist_menu_onkey_15: \ 000001F0 E09086E5 STR R9,[R6, #+224] 1638 away_m=0; \ 000001F4 E89086E5 STR R9,[R6, #+232] 1639 automsg=!automsg; \ 000001F8 109186E5 STR R9,[R6, #+272] 1640 // ShowMSG(1,(int)"Автоответчик выключен!"); 1641 } 1642 UpdateCLheader(); \ ??contactlist_menu_onkey_16: \ 000001FC ........ BL UpdateCLheader 1643 RefreshGUI(); \ 00000200 960100EF SWI +406 1644 } 1645 #endif 1646 if (key==GREEN_BUTTON) \ ??contactlist_menu_onkey_14: \ 00000204 0B005AE3 CMP R10,#+11 \ 00000208 0700001A BNE ??contactlist_menu_onkey_17 1647 { 1648 #ifdef EVILFOX 1649 while(t=(CLIST *)(t->next)) 1650 { 1651 if (t->isunread) goto doit; 1652 } 1653 t=(CLIST *)(&cltop); 1654 while(t=(CLIST *)(t->next)) 1655 { 1656 if (t->isunread) goto doit; 1657 } 1658 t=(CLIST *)(&cltop); 1659 while(t=(CLIST *)(t->next)) 1660 { 1661 if (t->isgroup) 1662 { 1663 if(!t->state) 1664 t->state^=0xFFFF; 1665 } 1666 } 1667 goto doit2; 1668 doit: 1669 { 1670 CLIST *g=FindGroupByID(t->group); 1671 if (g) 1672 { 1673 if (g->state) 1674 { 1675 g->state=0; 1676 } 1677 } 1678 } 1679 doit2: 1680 RecountMenu(t); 1681 #else 1682 IsActiveUp=!IsActiveUp; \ 0000020C D40096E5 LDR R0,[R6, #+212] \ 00000210 000050E3 CMP R0,#+0 \ 00000214 0040A013 MOVNE R4,#+0 \ 00000218 D44086E5 STR R4,[R6, #+212] 1683 RecountMenu(NULL); \ 0000021C 0000A0E3 MOV R0,#+0 \ 00000220 ........ BL RecountMenu 1684 #endif 1685 return(-1); \ 00000224 0900E0E1 MVN R0,R9 \ 00000228 F68FBDE8 POP {R1,R2,R4-R11,PC} 1686 } 1687 if (key==LEFT_BUTTON) \ ??contactlist_menu_onkey_17: \ 0000022C 3D005AE3 CMP R10,#+61 \ 00000230 1500000A BEQ ??contactlist_menu_onkey_18 1688 { 1689 #ifdef EVILFOX 1690 IsActiveUp=!IsActiveUp; 1691 RecountMenu(NULL); 1692 #else 1693 while(t=(CLIST *)(t->next)) 1694 { 1695 if (t->isunread) goto doit; 1696 } 1697 t=(CLIST *)(&cltop); 1698 while(t=(CLIST *)(t->next)) 1699 { 1700 if (t->isunread) goto doit; 1701 } 1702 doit: 1703 { 1704 CLIST *g=FindGroupByID(t->group); 1705 if (g) 1706 { 1707 if (g->state) 1708 { 1709 g->state=0; 1710 } 1711 } 1712 } 1713 RecountMenu(t); 1714 #endif 1715 return(-1); 1716 } 1717 if (key=='*') \ 00000234 2A005AE3 CMP R10,#+42 \ 00000238 2A00000A BEQ ??contactlist_menu_onkey_19 1718 { 1719 while(t=(CLIST *)(t->next)) 1720 { 1721 if (t->just_now) goto doit3; 1722 } 1723 t=(CLIST *)(&cltop); 1724 while(t=(CLIST *)(t->next)) 1725 { 1726 if (t->just_now) goto doit3; 1727 } 1728 return(-1); 1729 doit3: 1730 { 1731 CLIST *g=FindGroupByID(t->group); 1732 if (g) 1733 { 1734 if (g->state) 1735 { 1736 g->state=0; 1737 } 1738 } 1739 } 1740 RecountMenu(t); 1741 return(-1); 1742 } 1743 if (key=='#') \ 0000023C 23005AE3 CMP R10,#+35 \ 00000240 3600000A BEQ ??contactlist_menu_onkey_20 1744 { 1745 while(t=(CLIST *)(t->next)) 1746 { 1747 if (t->isactive) goto doit4; 1748 } 1749 t=(CLIST *)(&cltop); 1750 while(t=(CLIST *)(t->next)) 1751 { 1752 if (t->isactive) goto doit4; 1753 } 1754 return(-1); 1755 doit4: 1756 { 1757 CLIST *g=FindGroupByID(t->group); 1758 if (g) 1759 { 1760 if (g->state) 1761 { 1762 g->state=0; 1763 } 1764 } 1765 } 1766 RecountMenu(t); 1767 return(-1); 1768 } 1769 if (key==RIGHT_BUTTON) \ 00000244 3E005AE3 CMP R10,#+62 \ 00000248 3F00001A BNE ??contactlist_menu_onkey_10 1770 { 1771 //Послать запрос текста XStatus 1772 if (t) \ 0000024C 000058E3 CMP R8,#+0 \ 00000250 3D00000A BEQ ??contactlist_menu_onkey_10 1773 { 1774 if (!t->isgroup) \ 00000254 080098E5 LDR R0,[R8, #+8] \ 00000258 000050E3 CMP R0,#+0 \ 0000025C 3A00001A BNE ??contactlist_menu_onkey_10 1775 { 1776 FreeXText(t); \ 00000260 0800A0E1 MOV R0,R8 \ 00000264 ........ _BLF FreeXText,??FreeXText??rA 1777 t->req_xtext=0; \ 00000268 8C9088E5 STR R9,[R8, #+140] 1778 RequestXText(t->uin); \ 0000026C 0C0098E5 LDR R0,[R8, #+12] \ 00000270 ........ BL RequestXText 1779 RefreshGUI(); \ 00000274 960100EF SWI +406 1780 return(-1); \ ??contactlist_menu_onkey_13: \ 00000278 000064E2 RSB R0,R4,#+0 \ 0000027C F68FBDE8 POP {R1,R2,R4-R11,PC} 1781 } 1782 } 1783 } \ ??contactlist_menu_onkey_21: \ 00000280 640098E5 LDR R0,[R8, #+100] \ 00000284 000050E3 CMP R0,#+0 \ 00000288 0900001A BNE ??contactlist_menu_onkey_22 \ ??contactlist_menu_onkey_18: \ 0000028C 008098E5 LDR R8,[R8, #+0] \ 00000290 000058E3 CMP R8,#+0 \ 00000294 F9FFFF1A BNE ??contactlist_menu_onkey_21 \ 00000298 5A8F86E2 ADD R8,R6,#+360 \ ??contactlist_menu_onkey_23: \ 0000029C 008098E5 LDR R8,[R8, #+0] \ 000002A0 000058E3 CMP R8,#+0 \ 000002A4 0200000A BEQ ??contactlist_menu_onkey_22 \ 000002A8 640098E5 LDR R0,[R8, #+100] \ 000002AC 000050E3 CMP R0,#+0 \ 000002B0 F9FFFF0A BEQ ??contactlist_menu_onkey_23 \ ??contactlist_menu_onkey_22: \ 000002B4 100098E5 LDR R0,[R8, #+16] \ 000002B8 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 000002BC 000050E3 CMP R0,#+0 \ 000002C0 B415D011 LDRHNE R1,[R0, #+84] \ 000002C4 00005113 CMPNE R1,#+0 \ 000002C8 B495C011 STRHNE R9,[R0, #+84] \ 000002CC 0800A0E1 MOV R0,R8 \ 000002D0 ........ BL RecountMenu \ 000002D4 000064E2 RSB R0,R4,#+0 \ 000002D8 F68FBDE8 POP {R1,R2,R4-R11,PC} \ ??contactlist_menu_onkey_24: \ 000002DC 5C0098E5 LDR R0,[R8, #+92] \ 000002E0 000050E3 CMP R0,#+0 \ 000002E4 F2FFFF1A BNE ??contactlist_menu_onkey_22 \ ??contactlist_menu_onkey_19: \ 000002E8 008098E5 LDR R8,[R8, #+0] \ 000002EC 000058E3 CMP R8,#+0 \ 000002F0 F9FFFF1A BNE ??contactlist_menu_onkey_24 \ 000002F4 5A8F86E2 ADD R8,R6,#+360 \ ??contactlist_menu_onkey_25: \ 000002F8 008098E5 LDR R8,[R8, #+0] \ 000002FC 000058E3 CMP R8,#+0 \ 00000300 7AFFFF0A BEQ ??contactlist_menu_onkey_4 \ 00000304 5C0098E5 LDR R0,[R8, #+92] \ 00000308 000050E3 CMP R0,#+0 \ 0000030C F9FFFF0A BEQ ??contactlist_menu_onkey_25 \ 00000310 E7FFFFEA B ??contactlist_menu_onkey_22 \ ??contactlist_menu_onkey_26: \ 00000314 800098E5 LDR R0,[R8, #+128] \ 00000318 000050E3 CMP R0,#+0 \ 0000031C E4FFFF1A BNE ??contactlist_menu_onkey_22 \ ??contactlist_menu_onkey_20: \ 00000320 008098E5 LDR R8,[R8, #+0] \ 00000324 000058E3 CMP R8,#+0 \ 00000328 F9FFFF1A BNE ??contactlist_menu_onkey_26 \ 0000032C 5A8F86E2 ADD R8,R6,#+360 \ ??contactlist_menu_onkey_27: \ 00000330 008098E5 LDR R8,[R8, #+0] \ 00000334 000058E3 CMP R8,#+0 \ 00000338 6CFFFF0A BEQ ??contactlist_menu_onkey_4 \ 0000033C 800098E5 LDR R0,[R8, #+128] \ 00000340 000050E3 CMP R0,#+0 \ 00000344 F9FFFF0A BEQ ??contactlist_menu_onkey_27 \ 00000348 D9FFFFEA B ??contactlist_menu_onkey_22 1784 } 1785 if (msg->gbsmsg->msg==LONG_PRESS) \ ??contactlist_menu_onkey_10: \ 0000034C 04009DE5 LDR R0,[SP, #+4] \ 00000350 652F84E3 ORR R2,R4,#0x194 \ 00000354 040090E5 LDR R0,[R0, #+4] \ 00000358 041090E5 LDR R1,[R0, #+4] \ 0000035C 020051E1 CMP R1,R2 \ 00000360 8B00001A BNE ??contactlist_menu_onkey_28 1786 { 1787 if (msg->gbsmsg->submess=='#') \ 00000364 081090E5 LDR R1,[R0, #+8] \ 00000368 0980A0E3 MOV R8,#+9 \ 0000036C 428C88E3 ORR R8,R8,#0x4200 \ 00000370 B0A0A0E3 MOV R10,#+176 \ 00000374 DEAC8AE3 ORR R10,R10,#0xDE00 \ 00000378 94BF85E2 ADD R11,R5,#+592 \ 0000037C 230051E3 CMP R1,#+35 \ 00000380 1400001A BNE ??contactlist_menu_onkey_29 1788 { 1789 ClearContactT9Key(); \ 00000384 2010A0E3 MOV R1,#+32 \ 00000388 060085E0 ADD R0,R5,R6 \ 0000038C 1D0100EF SWI +285 1790 RecountMenu(NULL); \ 00000390 0000A0E3 MOV R0,#+0 \ 00000394 ........ BL RecountMenu 1791 gipc.name_to=ipc_xtask_name; \ 00000398 07008BE0 ADD R0,R11,R7 \ 0000039C 740086E5 STR R0,[R6, #+116] 1792 gipc.name_from=ipc_my_name; \ 000003A0 8C0F85E2 ADD R0,R5,#+560 \ 000003A4 070080E0 ADD R0,R0,R7 \ 000003A8 780086E5 STR R0,[R6, #+120] 1793 gipc.data=0; \ 000003AC 7C9086E5 STR R9,[R6, #+124] 1794 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 000003B0 743086E2 ADD R3,R6,#+116 \ 000003B4 0420A0E1 MOV R2,R4 \ 000003B8 0A10A0E1 MOV R1,R10 \ 000003BC 0800A0E1 MOV R0,R8 \ 000003C0 000100EF SWI +256 1795 if (IsUnlocked()) \ 000003C4 430000EF SWI +67 \ 000003C8 000050E3 CMP R0,#+0 \ 000003CC 47FFFF0A BEQ ??contactlist_menu_onkey_4 1796 { 1797 KbdLock(); \ 000003D0 A90000EF SWI +169 \ 000003D4 3AFFFFEA B ??contactlist_menu_onkey_2 1798 } 1799 return(-1); 1800 } 1801 if (msg->gbsmsg->submess=='*') \ ??contactlist_menu_onkey_29: \ 000003D8 2A0051E3 CMP R1,#+42 \ 000003DC 1000001A BNE ??contactlist_menu_onkey_30 1802 { 1803 ClearContactT9Key(); \ 000003E0 2010A0E3 MOV R1,#+32 \ 000003E4 060085E0 ADD R0,R5,R6 \ 000003E8 1D0100EF SWI +285 1804 RecountMenu(NULL); \ 000003EC 0000A0E3 MOV R0,#+0 \ 000003F0 ........ BL RecountMenu 1805 silenthide=1; \ 000003F4 1C4186E5 STR R4,[R6, #+284] 1806 gipc.name_to=ipc_xtask_name; \ 000003F8 07008BE0 ADD R0,R11,R7 \ 000003FC 740086E5 STR R0,[R6, #+116] 1807 gipc.name_from=ipc_my_name; \ 00000400 8C0F85E2 ADD R0,R5,#+560 \ 00000404 070080E0 ADD R0,R0,R7 \ 00000408 780086E5 STR R0,[R6, #+120] 1808 gipc.data=0; \ 0000040C 7C9086E5 STR R9,[R6, #+124] 1809 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 00000410 743086E2 ADD R3,R6,#+116 \ 00000414 0420A0E1 MOV R2,R4 \ 00000418 0A10A0E1 MOV R1,R10 \ 0000041C 0800A0E1 MOV R0,R8 \ 00000420 000100EF SWI +256 1810 } 1811 switch(msg->gbsmsg->submess) \ ??contactlist_menu_onkey_30: \ 00000424 04009DE5 LDR R0,[SP, #+4] \ 00000428 6C819FE5 LDR R8,??contactlist_menu_onkey_31 ;; WriteDefSettings \ 0000042C 040090E5 LDR R0,[R0, #+4] \ 00000430 080090E5 LDR R0,[R0, #+8] \ 00000434 310040E2 SUB R0,R0,#+49 \ 00000438 040050E3 CMP R0,#+4 \ 0000043C 4700008A BHI ??contactlist_menu_onkey_32 \ 00000440 011F8FE2 ADR R1,??contactlist_menu_onkey_0 \ 00000444 0010D1E7 LDRB R1,[R1, R0] \ 00000448 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??contactlist_menu_onkey_0: \ 0000044C 010E1C28 DC8 +1,+14,+28,+40 \ 00000450 36000000 DC8 +54,+0,+0,+0 1812 { 1813 case '1': 1814 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??contactlist_menu_onkey_33: \ 00000454 280196E5 LDR R0,[R6, #+296] \ 00000458 000050E3 CMP R0,#+0 \ 0000045C 0040A013 MOVNE R4,#+0 \ 00000460 284186E5 STR R4,[R6, #+296] 1815 if(Is_Sounds_Enabled) \ 00000464 000054E3 CMP R4,#+0 1816 ShowMSG(1,(int)"Sound 0n"); \ 00000468 4C108712 ADDNE R1,R7,#+76 1817 else 1818 ShowMSG(1,(int)"Sound Off"); \ 0000046C 58108702 ADDEQ R1,R7,#+88 \ 00000470 0100A0E3 MOV R0,#+1 \ 00000474 480100EF SWI +328 1819 SUBPROC((void*)WriteDefSettings); \ 00000478 0800A0E1 MOV R0,R8 \ 0000047C 710100EF SWI +369 1820 RefreshGUI(); \ 00000480 960100EF SWI +406 \ 00000484 350000EA B ??contactlist_menu_onkey_32 1821 break; 1822 case '2': 1823 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??contactlist_menu_onkey_34: \ 00000488 240196E5 LDR R0,[R6, #+292] \ 0000048C 000050E3 CMP R0,#+0 \ 00000490 0040A013 MOVNE R4,#+0 \ 00000494 244186E5 STR R4,[R6, #+292] 1824 SUBPROC((void*)WriteDefSettings); \ 00000498 0800A0E1 MOV R0,R8 \ 0000049C 710100EF SWI +369 1825 RefreshGUI(); \ 000004A0 960100EF SWI +406 1826 if(Is_Vibra_Enabled) \ 000004A4 240196E5 LDR R0,[R6, #+292] \ 000004A8 000050E3 CMP R0,#+0 \ 000004AC 70108702 ADDEQ R1,R7,#+112 1827 ShowMSG(1,(int)"Vibra On"); \ 000004B0 64108712 ADDNE R1,R7,#+100 \ ??contactlist_menu_onkey_35: \ 000004B4 0100A0E3 MOV R0,#+1 \ ??contactlist_menu_onkey_36: \ 000004B8 480100EF SWI +328 \ 000004BC 270000EA B ??contactlist_menu_onkey_32 1828 else 1829 ShowMSG(1,(int)"Vibra Off"); 1830 break; 1831 case '3': 1832 if(CurrentPrivateStatus!=1) \ ??contactlist_menu_onkey_37: \ 000004C0 F40096E5 LDR R0,[R6, #+244] \ 000004C4 010050E3 CMP R0,#+1 \ 000004C8 0400000A BEQ ??contactlist_menu_onkey_38 1833 { 1834 SetPrivateStatus(1);//Инвиз \ 000004CC 0100A0E3 MOV R0,#+1 \ 000004D0 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 1835 ShowMSG(1,(int)"Инвиз включен"); \ 000004D4 7C1087E2 ADD R1,R7,#+124 \ 000004D8 0400A0E1 MOV R0,R4 \ ??contactlist_menu_onkey_39: \ 000004DC F5FFFFEA B ??contactlist_menu_onkey_36 1836 } 1837 else 1838 { 1839 SetPrivateStatus(3);//Инвиз \ ??contactlist_menu_onkey_38: \ 000004E0 0300A0E3 MOV R0,#+3 \ 000004E4 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 1840 ShowMSG(1,(int)"Инвиз выключен"); \ 000004E8 8C1087E2 ADD R1,R7,#+140 \ 000004EC F0FFFFEA B ??contactlist_menu_onkey_35 1841 } 1842 break; 1843 case '4': 1844 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??contactlist_menu_onkey_40: \ 000004F0 BC0096E5 LDR R0,[R6, #+188] \ 000004F4 000050E3 CMP R0,#+0 \ 000004F8 0040A013 MOVNE R4,#+0 \ 000004FC BC4086E5 STR R4,[R6, #+188] 1845 SUBPROC((void*)WriteDefSettings); \ 00000500 0800A0E1 MOV R0,R8 \ 00000504 710100EF SWI +369 1846 RefreshGUI(); \ 00000508 960100EF SWI +406 1847 if(Is_Double_Vibra_On) \ 0000050C BC0096E5 LDR R0,[R6, #+188] \ 00000510 000050E3 CMP R0,#+0 1848 ShowMSG(1,(int)"Vibra rem On"); \ 00000514 9C108712 ADDNE R1,R7,#+156 \ 00000518 0100A013 MOVNE R0,#+1 \ 0000051C E5FFFF1A BNE ??contactlist_menu_onkey_36 1849 else 1850 ShowMSG(1,(int)"Vibra rem Off"); \ 00000520 AC1087E2 ADD R1,R7,#+172 \ 00000524 E2FFFFEA B ??contactlist_menu_onkey_35 1851 break; 1852 case '5': 1853 if(DEVELOP_IF!=1) DEVELOP_IF=1; \ ??contactlist_menu_onkey_41: \ 00000528 ........ LDR R0,??DataTable59 ;; DEVELOP_IF \ 0000052C 001090E5 LDR R1,[R0, #+0] \ 00000530 010051E3 CMP R1,#+1 \ 00000534 0110A013 MOVNE R1,#+1 1854 else DEVELOP_IF=3; \ 00000538 0310A003 MOVEQ R1,#+3 \ 0000053C 001080E5 STR R1,[R0, #+0] 1855 if(DEVELOP_IF==1) \ 00000540 010051E3 CMP R1,#+1 1856 ShowMSG(1,(int)"Popup always"); \ 00000544 BC108702 ADDEQ R1,R7,#+188 1857 else 1858 ShowMSG(1,(int)"Popup after unlock"); \ 00000548 CC108712 ADDNE R1,R7,#+204 \ 0000054C 0100A0E3 MOV R0,#+1 \ 00000550 480100EF SWI +328 1859 SaveConfigData(successed_config_filename); \ 00000554 ........ LDR R0,??DataTable60 ;; successed_config_filename \ 00000558 000090E5 LDR R0,[R0, #+0] \ 0000055C ........ _BLF SaveConfigData,??SaveConfigData??rA 1860 break; 1861 1862 } 1863 int key=msg->gbsmsg->submess; \ ??contactlist_menu_onkey_32: \ 00000560 04009DE5 LDR R0,[SP, #+4] \ 00000564 040090E5 LDR R0,[R0, #+4] \ 00000568 080090E5 LDR R0,[R0, #+8] 1864 if ((key>='1')&&(key<='4')) \ 0000056C 310050E3 CMP R0,#+49 \ 00000570 070000BA BLT ??contactlist_menu_onkey_28 \ 00000574 350050E3 CMP R0,#+53 \ 00000578 050000AA BGE ??contactlist_menu_onkey_28 1865 { 1866 ClearContactT9Key(); \ 0000057C 2010A0E3 MOV R1,#+32 \ 00000580 060085E0 ADD R0,R5,R6 \ 00000584 1D0100EF SWI +285 1867 UpdateCLheader(); \ 00000588 ........ BL UpdateCLheader 1868 RecountMenu(NULL); \ 0000058C 0000A0E3 MOV R0,#+0 \ 00000590 ........ BL RecountMenu 1869 } 1870 } 1871 return(0); \ ??contactlist_menu_onkey_28: \ 00000594 0000A0E3 MOV R0,#+0 \ 00000598 F68FBDE8 POP {R1,R2,R4-R11,PC} ;; return \ ??contactlist_menu_onkey_31: \ 0000059C ........ DC32 WriteDefSettings 1872 } 1873 \ In segment CODE, align 4, keep-with-next 1874 void GetOnTotalContact(int group_id,int *_onlinetotal) 1875 { 1876 CLIST *t; 1877 t=(CLIST *)&cltop; \ GetOnTotalContact: \ 00000000 ........ LDR R2,??DataTable61 ;; S_ICONS + 360 \ 00000004 30002DE9 PUSH {R4,R5} 1878 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 1879 while((t=t->next)) 1880 { 1881 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 1882 { 1883 total++; 1884 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 1885 } 1886 } \ ??GetOnTotalContact_0: \ 00000040 002092E5 LDR R2,[R2, #+0] \ 00000044 000052E3 CMP R2,#+0 \ 00000048 F3FFFF1A BNE ??GetOnTotalContact_1 1887 _onlinetotal[0]=online; \ 0000004C 003081E5 STR R3,[R1, #+0] 1888 _onlinetotal[1]=total; \ 00000050 04C081E5 STR R12,[R1, #+4] 1889 } \ 00000054 3000BDE8 POP {R4,R5} \ 00000058 1EFF2FE1 BX LR ;; return 1890 1891 \ In segment CODE, align 4, keep-with-next 1892 void contactlist_menu_iconhndl(void *data, int curitem, void *unk) 1893 { \ contactlist_menu_iconhndl: \ 00000000 F24F2DE9 PUSH {R1,R4-R11,LR} \ 00000004 9CDF4DE2 SUB SP,SP,#+624 1894 CLIST *t; 1895 #ifdef USE_MLMENU 1896 void *item=AllocMLMenuItem(data); 1897 #else 1898 void *item=AllocMenuItem(data); 1899 #endif 1900 int icon; 1901 1902 WSHDR *ws2; 1903 #ifdef USE_MLMENU 1904 WSHDR *ws4; 1905 #endif 1906 WSHDR ws1loc, *ws1; 1907 unsigned short num[128]; 1908 ws1=CreateLocalWS(&ws1loc,num,128); 1909 #ifdef USE_MLMENU 1910 WSHDR ws3loc, *ws3; 1911 unsigned short num3[128]; 1912 ws3=CreateLocalWS(&ws3loc,num3,128); 1913 char s[64]; 1914 #endif 1915 t=FindContactByN(curitem); 1916 if (t) \ 00000008 ........ LDR R10,??DataTable62 ;; `?just_now) \ 00000060 5C0099E5 LDR R0,[R9, #+92] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 0C00000A BEQ ??contactlist_menu_iconhndl_2 1922 { 1923 char *test=malloc(64); \ 0000006C 4000A0E3 MOV R0,#+64 \ 00000070 140000EF SWI +20 \ 00000074 00B0A0E1 MOV R11,R0 1924 sprintf(test, ">> %s <<", t->name); \ 00000078 142089E2 ADD R2,R9,#+20 \ 0000007C E0108AE2 ADD R1,R10,#+224 \ 00000080 160000EF SWI +22 1925 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 1926 mfree(test); \ 00000094 0B00A0E1 MOV R0,R11 \ 00000098 150000EF SWI +21 \ 0000009C 030000EA B ??contactlist_menu_iconhndl_3 1927 } 1928 else 1929 wsprintf(ws1,percent_t,t->name); \ ??contactlist_menu_iconhndl_2: \ 000000A0 142089E2 ADD R2,R9,#+20 \ 000000A4 18108AE2 ADD R1,R10,#+24 \ 000000A8 0600A0E1 MOV R0,R6 \ 000000AC 240100EF SWI +292 1930 if (t->just_now) \ ??contactlist_menu_iconhndl_3: \ 000000B0 5C0099E5 LDR R0,[R9, #+92] \ 000000B4 08B0A0E3 MOV R11,#+8 \ 000000B8 E0BC8BE3 ORR R11,R11,#0xE000 \ 000000BC 000050E3 CMP R0,#+0 1931 { 1932 wsInsertChar(ws1,0x0004,1); \ 000000C0 0120A013 MOVNE R2,#+1 \ 000000C4 0410A013 MOVNE R1,#+4 \ 000000C8 0400001A BNE ??contactlist_menu_iconhndl_4 1933 wsInsertChar(ws1,0xE008,1); 1934 } 1935 else 1936 if (t->isactive) \ 000000CC 800099E5 LDR R0,[R9, #+128] \ 000000D0 000050E3 CMP R0,#+0 \ 000000D4 0700000A BEQ ??contactlist_menu_iconhndl_5 1937 { 1938 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 1939 wsInsertChar(ws1,0xE008,1); \ 000000E8 0120A0E3 MOV R2,#+1 \ 000000EC 0B10A0E1 MOV R1,R11 \ 000000F0 0600A0E1 MOV R0,R6 \ 000000F4 1D0000EF SWI +29 1940 } 1941 #ifdef USE_MLMENU 1942 if (t->xtext && t->xtext[0]!=0) \ ??contactlist_menu_iconhndl_5: \ 000000F8 880099E5 LDR R0,[R9, #+136] \ 000000FC 000050E3 CMP R0,#+0 \ 00000100 0000D015 LDRBNE R0,[R0, #+0] \ 00000104 00005013 CMPNE R0,#+0 \ 00000108 0F00000A BEQ ??contactlist_menu_iconhndl_6 1943 { 1944 int i; 1945 zeromem(s,64); \ 0000010C 4010A0E3 MOV R1,#+64 \ 00000110 820F8DE2 ADD R0,SP,#+520 \ 00000114 1D0100EF SWI +285 1946 i=t->xtext[0]; \ 00000118 880099E5 LDR R0,[R9, #+136] \ 0000011C 0020D0E5 LDRB R2,[R0, #+0] 1947 if (i>63) i=63; 1948 strncpy(s,t->xtext+1,i); \ 00000120 011080E2 ADD R1,R0,#+1 \ 00000124 820F8DE2 ADD R0,SP,#+520 \ 00000128 400052E3 CMP R2,#+64 \ 0000012C 3F20A0A3 MOVGE R2,#+63 \ 00000130 160100EF SWI +278 1949 wsprintf(ws3,"%c%t",0xE012,s); \ 00000134 823F8DE2 ADD R3,SP,#+520 \ 00000138 0A208BE2 ADD R2,R11,#+10 \ 0000013C EC108AE2 ADD R1,R10,#+236 \ 00000140 0700A0E1 MOV R0,R7 \ 00000144 240100EF SWI +292 \ 00000148 030000EA B ??contactlist_menu_iconhndl_7 1950 } 1951 else 1952 wsprintf(ws3,percent_d,t->uin); \ ??contactlist_menu_iconhndl_6: \ 0000014C 0C2099E5 LDR R2,[R9, #+12] \ 00000150 1B108AE2 ADD R1,R10,#+27 \ 00000154 0700A0E1 MOV R0,R7 \ 00000158 240100EF SWI +292 1953 if ((t->xstatexstate)) \ ??contactlist_menu_iconhndl_7: \ 0000015C B605D9E1 LDRH R0,[R9, #+86] \ 00000160 ........ LDR R2,??DataTable63 ;; total_xstatuses \ 00000164 0010A0E1 MOV R1,R0 \ 00000168 002092E5 LDR R2,[R2, #+0] \ 0000016C 020051E1 CMP R1,R2 \ 00000170 1C0000AA BGE ??contactlist_menu_iconhndl_8 \ 00000174 000050E3 CMP R0,#+0 \ 00000178 1A00000A BEQ ??contactlist_menu_iconhndl_8 1954 { 1955 wsInsertChar(ws3,FIRST_UCS2_BITMAP+t->xstate,1); \ 0000017C 0120A0E3 MOV R2,#+1 \ 00000180 2A00A0E3 MOV R0,#+42 \ 00000184 E10C80E3 ORR R0,R0,#0xE100 \ 00000188 011080E0 ADD R1,R0,R1 \ 0000018C 0700A0E1 MOV R0,R7 \ 00000190 1D0000EF SWI +29 \ 00000194 130000EA B ??contactlist_menu_iconhndl_8 1956 } 1957 #endif 1958 } 1959 else 1960 { 1961 int onlinetotal[2]; 1962 GetOnTotalContact(t->group,onlinetotal); \ ??contactlist_menu_iconhndl_1: \ 00000198 100099E5 LDR R0,[R9, #+16] \ 0000019C 0D10A0E1 MOV R1,SP \ 000001A0 ........ BL GetOnTotalContact 1963 #ifdef USE_MLMENU 1964 wsprintf(ws1,percent_t,t->name); \ 000001A4 142089E2 ADD R2,R9,#+20 \ 000001A8 18108AE2 ADD R1,R10,#+24 \ 000001AC 0600A0E1 MOV R0,R6 \ 000001B0 240100EF SWI +292 1965 wsprintf(ws3,"(%d/%d)",onlinetotal[0],onlinetotal[1]); \ 000001B4 04309DE5 LDR R3,[SP, #+4] \ 000001B8 00209DE5 LDR R2,[SP, #+0] \ 000001BC F4108AE2 ADD R1,R10,#+244 \ 000001C0 0700A0E1 MOV R0,R7 \ 000001C4 240100EF SWI +292 1966 #else 1967 wsprintf(ws1,"%t%c%c(%d/%d)",t->name,0xE01D,0xE012,onlinetotal[0],onlinetotal[1]); 1968 #endif 1969 if (t->state) icon++; //Модификация иконки группы \ 000001C8 B405D9E1 LDRH R0,[R9, #+84] \ 000001CC 000050E3 CMP R0,#+0 \ 000001D0 0400000A BEQ ??contactlist_menu_iconhndl_8 \ 000001D4 018088E2 ADD R8,R8,#+1 \ 000001D8 020000EA B ??contactlist_menu_iconhndl_8 1970 } 1971 } 1972 else 1973 { 1974 wsprintf(ws1, LG_CLERROR); \ ??contactlist_menu_iconhndl_0: \ 000001DC FC108AE2 ADD R1,R10,#+252 \ 000001E0 0600A0E1 MOV R0,R6 \ 000001E4 240100EF SWI +292 1975 } 1976 ws2=AllocMenuWS(data,ws1->wsbody[0]); \ ??contactlist_menu_iconhndl_8: \ 000001E8 000096E5 LDR R0,[R6, #+0] \ 000001EC B010D0E1 LDRH R1,[R0, #+0] \ 000001F0 0400A0E1 MOV R0,R4 \ 000001F4 980100EF SWI +408 \ 000001F8 0090A0E1 MOV R9,R0 1977 wstrcpy(ws2,ws1); \ 000001FC 0610A0E1 MOV R1,R6 \ 00000200 1F0100EF SWI +287 1978 1979 SetMenuItemIconArray(data, item, S_ICONS+icon); \ 00000204 ........ LDR R0,??DataTable64 ;; S_ICONS \ 00000208 0510A0E1 MOV R1,R5 \ 0000020C 082180E0 ADD R2,R0,R8, LSL #+2 \ 00000210 0400A0E1 MOV R0,R4 \ 00000214 990100EF SWI +409 1980 #ifdef USE_MLMENU 1981 ws4=AllocMenuWS(data,ws3->wsbody[0]); \ 00000218 000097E5 LDR R0,[R7, #+0] \ 0000021C B010D0E1 LDRH R1,[R0, #+0] \ 00000220 0400A0E1 MOV R0,R4 \ 00000224 980100EF SWI +408 \ 00000228 0060A0E1 MOV R6,R0 1982 wstrcpy(ws4,ws3); \ 0000022C 0710A0E1 MOV R1,R7 \ 00000230 1F0100EF SWI +287 1983 SetMLMenuItemText(data, item, ws2, ws4, curitem); \ 00000234 70029DE5 LDR R0,[SP, #+624] \ 00000238 0630A0E1 MOV R3,R6 \ 0000023C 01002DE9 PUSH {R0} \ 00000240 0920A0E1 MOV R2,R9 \ 00000244 0510A0E1 MOV R1,R5 \ 00000248 0400A0E1 MOV R0,R4 \ 0000024C 180200EF SWI +536 1984 #else 1985 SetMenuItemText(data, item, ws2, curitem); 1986 #endif 1987 } \ 00000250 9EDF8DE2 ADD SP,SP,#+632 \ 00000254 F08FBDE8 POP {R4-R11,PC} ;; return 1988 1989 //=============================================================================================== 1990 int DNR_ID=0; 1991 int DNR_TRIES=3; 1992 1993 extern const char NATICQ_HOST[]; 1994 extern const unsigned int NATICQ_PORT; 1995 int host_counter = 0; 1996 1997 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 1998 const char *GetHost(int cnt, const char *str, char *buf) 1999 { 2000 const char *tmp = str, *begin, *end; \ GetHost: \ 00000000 0130A0E1 MOV R3,R1 2001 if(cnt) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0E00001A BNE ??GetHost_0 2002 { 2003 for(;cnt;cnt--) 2004 { 2005 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); 2006 if(!*str) str = tmp; 2007 for(;(*str==';' || *str==' ' || *str=='\x0D' || *str=='\x0A') && *str; str++); 2008 if(!*str) str = tmp; 2009 } 2010 } 2011 tmp = buf; \ ??GetHost_1: \ 0000000C 0200A0E1 MOV R0,R2 2012 begin = str; \ 00000010 0130A0E1 MOV R3,R1 \ 00000014 1B0000EA B ??GetHost_2 \ ??GetHost_3: \ 00000018 011081E2 ADD R1,R1,#+1 \ ??GetHost_4: \ 0000001C 00C0D1E5 LDRB R12,[R1, #+0] \ 00000020 3B005CE3 CMP R12,#+59 \ 00000024 20005C13 CMPNE R12,#+32 \ 00000028 0D005C13 CMPNE R12,#+13 \ 0000002C 0A005C13 CMPNE R12,#+10 \ 00000030 0100001A BNE ??GetHost_5 \ 00000034 00005CE3 CMP R12,#+0 \ 00000038 F6FFFF1A BNE ??GetHost_3 \ ??GetHost_5: \ 0000003C 00005CE3 CMP R12,#+0 \ 00000040 0310A001 MOVEQ R1,R3 \ 00000044 010040E2 SUB R0,R0,#+1 \ ??GetHost_0: \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0100001A BNE ??GetHost_6 \ 00000050 EDFFFFEA B ??GetHost_1 \ ??GetHost_7: \ 00000054 011081E2 ADD R1,R1,#+1 \ ??GetHost_6: \ 00000058 00C0D1E5 LDRB R12,[R1, #+0] \ 0000005C 3B005CE3 CMP R12,#+59 \ 00000060 20005C13 CMPNE R12,#+32 \ 00000064 0D005C13 CMPNE R12,#+13 \ 00000068 0A005C13 CMPNE R12,#+10 \ 0000006C 00005C13 CMPNE R12,#+0 \ 00000070 F7FFFF1A BNE ??GetHost_7 \ 00000074 00005CE3 CMP R12,#+0 \ 00000078 E7FFFF1A BNE ??GetHost_4 \ 0000007C 0310A0E1 MOV R1,R3 \ 00000080 E5FFFFEA B ??GetHost_4 2013 for(;*str!=';' && *str!=':' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetHost_8: \ 00000084 011081E2 ADD R1,R1,#+1 \ ??GetHost_2: \ 00000088 00C0D1E5 LDRB R12,[R1, #+0] \ 0000008C 3B005CE3 CMP R12,#+59 \ 00000090 3A005C13 CMPNE R12,#+58 \ 00000094 20005C13 CMPNE R12,#+32 \ 00000098 0D005C13 CMPNE R12,#+13 \ 0000009C 0A005C13 CMPNE R12,#+10 \ 000000A0 00005C13 CMPNE R12,#+0 \ 000000A4 F6FFFF1A BNE ??GetHost_8 2014 end = str; 2015 for(;begin0x2F && attr[k]<0x3A) {ret=ret*10+attr[k]-0x30;} else { if ( attr[k]=='-') {neg=-1;} else {return(ret*neg);}} \ ??atoi_1: \ 00000010 3A0053E3 CMP R3,#+58 \ 00000014 0800002A BCS ??atoi_2 \ 00000018 9C3121E0 MLA R1,R12,R1,R3 \ 0000001C 301041E2 SUB R1,R1,#+48 \ ??atoi_3: \ 00000020 010080E2 ADD R0,R0,#+1 \ ??atoi_0: \ 00000024 0030D0E5 LDRB R3,[R0, #+0] \ 00000028 300053E3 CMP R3,#+48 \ 0000002C F7FFFF2A BCS ??atoi_1 \ 00000030 2D0053E3 CMP R3,#+45 \ 00000034 0020E003 MVNEQ R2,#+0 \ 00000038 F8FFFF0A BEQ ??atoi_3 \ ??atoi_2: \ 0000003C 920100E0 MUL R0,R2,R1 \ 00000040 1EFF2FE1 BX LR ;; return 2027 } 2028 } 2029 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 2030 int GetPort(int cnt, const char *str) 2031 { \ GetPort: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 2032 const char *tmp = str; \ 00000008 0130A0E1 MOV R3,R1 2033 char numbuf[6], numcnt = 0; \ 0000000C 00C0A0E3 MOV R12,#+0 \ 00000010 0020A0E3 MOV R2,#+0 2034 if(cnt) \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0C00001A BNE ??GetPort_0 \ 0000001C 1B0000EA B ??GetPort_1 2035 { 2036 for(;cnt;cnt--) 2037 { 2038 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); 2039 if(!*str) str = tmp; 2040 for(;(*str==';' || *str==' ' || *str=='\x0D' || *str=='\x0A') && *str; str++); \ ??GetPort_2: \ 00000020 011081E2 ADD R1,R1,#+1 \ ??GetPort_3: \ 00000024 0040D1E5 LDRB R4,[R1, #+0] \ 00000028 3B0054E3 CMP R4,#+59 \ 0000002C 20005413 CMPNE R4,#+32 \ 00000030 0D005413 CMPNE R4,#+13 \ 00000034 0A005413 CMPNE R4,#+10 \ 00000038 0100001A BNE ??GetPort_4 \ 0000003C 000054E3 CMP R4,#+0 \ 00000040 F6FFFF1A BNE ??GetPort_2 2041 if(!*str) str = tmp; \ ??GetPort_4: \ 00000044 000054E3 CMP R4,#+0 \ 00000048 0310A001 MOVEQ R1,R3 \ 0000004C 010040E2 SUB R0,R0,#+1 \ ??GetPort_0: \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0100001A BNE ??GetPort_5 \ 00000058 0C0000EA B ??GetPort_1 \ ??GetPort_6: \ 0000005C 011081E2 ADD R1,R1,#+1 \ ??GetPort_5: \ 00000060 0040D1E5 LDRB R4,[R1, #+0] \ 00000064 3B0054E3 CMP R4,#+59 \ 00000068 20005413 CMPNE R4,#+32 \ 0000006C 0D005413 CMPNE R4,#+13 \ 00000070 0A005413 CMPNE R4,#+10 \ 00000074 00005413 CMPNE R4,#+0 \ 00000078 F7FFFF1A BNE ??GetPort_6 \ 0000007C 000054E3 CMP R4,#+0 \ 00000080 E7FFFF1A BNE ??GetPort_3 \ 00000084 0310A0E1 MOV R1,R3 \ 00000088 E5FFFFEA B ??GetPort_3 2042 } 2043 } 2044 for(;*str!=';' && *str!=':' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetPort_7: \ 0000008C 011081E2 ADD R1,R1,#+1 \ ??GetPort_1: \ 00000090 0000D1E5 LDRB R0,[R1, #+0] \ 00000094 3B0050E3 CMP R0,#+59 \ 00000098 3A005013 CMPNE R0,#+58 \ 0000009C 20005013 CMPNE R0,#+32 \ 000000A0 0D005013 CMPNE R0,#+13 \ 000000A4 0A005013 CMPNE R0,#+10 \ 000000A8 00005013 CMPNE R0,#+0 \ 000000AC F6FFFF1A BNE ??GetPort_7 2045 if(*str!=':') return NATICQ_PORT; \ 000000B0 ........ LDRB R0,[R1], #+1 \ 000000B4 3A0050E3 CMP R0,#+58 \ 000000B8 50009F15 LDRNE R0,??GetPort_8 ;; NATICQ_PORT \ 000000BC 00009015 LDRNE R0,[R0, #+0] \ 000000C0 1680BD18 POPNE {R1,R2,R4,PC} 2046 str++; 2047 numbuf[5] = 0; \ 000000C4 05C0CDE5 STRB R12,[SP, #+5] \ 000000C8 0D30A0E1 MOV R3,SP \ 000000CC 030000EA B ??GetPort_9 2048 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str && numcnt<5; numbuf[numcnt] = *str, str++, numcnt++); \ ??GetPort_10: \ 000000D0 ........ LDRB R4,[R1], #+1 \ 000000D4 0340C2E7 STRB R4,[R2, +R3] \ 000000D8 012082E2 ADD R2,R2,#+1 \ 000000DC FF2002E2 AND R2,R2,#0xFF \ ??GetPort_9: \ 000000E0 0000D1E5 LDRB R0,[R1, #+0] \ 000000E4 3B0050E3 CMP R0,#+59 \ 000000E8 20005013 CMPNE R0,#+32 \ 000000EC 0D005013 CMPNE R0,#+13 \ 000000F0 0A005013 CMPNE R0,#+10 \ 000000F4 00005013 CMPNE R0,#+0 \ 000000F8 0100000A BEQ ??GetPort_11 \ 000000FC 050052E3 CMP R2,#+5 \ 00000100 F2FFFF3A BCC ??GetPort_10 2049 return atoi(numbuf); \ ??GetPort_11: \ 00000104 0D00A0E1 MOV R0,SP \ 00000108 ........ BL atoi \ 0000010C 1680BDE8 POP {R1,R2,R4,PC} ;; return \ ??GetPort_8: \ 00000110 ........ DC32 NATICQ_PORT 2050 2051 } 2052 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 2053 int GetHostsCount(const char *str) 2054 { 2055 char cnt = 1; \ GetHostsCount: \ 00000000 0110A0E3 MOV R1,#+1 \ 00000004 000000EA B ??GetHostsCount_0 2056 for(;cnt;cnt++) 2057 { 2058 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 2059 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 2060 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 2061 if(!*str) return cnt; \ ??GetHostsCount_5: \ 0000005C 000052E3 CMP R2,#+0 \ 00000060 F2FFFF0A BEQ ??GetHostsCount_3 2062 } \ 00000064 011081E2 ADD R1,R1,#+1 \ 00000068 FF1011E2 ANDS R1,R1,#0xFF \ 0000006C E6FFFF1A BNE ??GetHostsCount_0 2063 return 0; \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 1EFF2FE1 BX LR ;; return 2064 } 2065 //--------------------------------------------------------------------------- 2066 \ In segment CODE, align 4, keep-with-next 2067 void create_connect(void) 2068 { \ create_connect: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2069 // static int host_counter = 0; 2070 char hostbuf[128], buf[128]; 2071 int hostport; 2072 int ***p_res=NULL; 2073 void do_reconnect(void); 2074 SOCK_ADDR sa; 2075 //Устанавливаем соединение 2076 connect_state = 0; \ 00000004 ........ LDR R5,??DataTable68 ;; S_ICONS 2077 int err; 2078 unsigned int ip; 2079 GBS_DelTimer(&reconnect_tmr); 2080 if (!IsGPRSEnabled()) \ 00000008 B0829FE5 LDR R8,??create_connect_0+0x4 ;; `?` \ 0000000C 45DF4DE2 SUB SP,SP,#+276 \ 00000010 0040A0E3 MOV R4,#+0 \ 00000014 00408DE5 STR R4,[SP, #+0] \ 00000018 444185E5 STR R4,[R5, #+324] \ 0000001C 0C00A0E3 MOV R0,#+12 \ 00000020 600D80E3 ORR R0,R0,#0x1800 \ 00000024 056080E0 ADD R6,R0,R5 \ 00000028 0600A0E1 MOV R0,R6 \ 0000002C 8C0100EF SWI +396 \ 00000030 EC00A0E3 MOV R0,#+236 \ 00000034 580D80E3 ORR R0,R0,#0x1600 \ 00000038 057080E0 ADD R7,R0,R5 \ 0000003C A70000EF SWI +167 \ 00000040 000050E3 CMP R0,#+0 \ 00000044 0400001A BNE ??create_connect_1 2081 { 2082 is_gprs_online=0; \ 00000048 644185E5 STR R4,[R5, #+356] 2083 strcpy(logmsg,LG_GRWAITFORGPRS); \ 0000004C 0810A0E1 MOV R1,R8 \ 00000050 0700A0E1 MOV R0,R7 \ 00000054 1A0000EF SWI +26 2084 SMART_REDRAW(); \ 00000058 6D0000EA B ??create_connect_2 2085 return; 2086 } 2087 DNR_ID=0; 2088 *socklasterr()=0; 2089 if(host_counter > GetHostsCount(NATICQ_HOST)) host_counter = 0; \ ??create_connect_1: \ 0000005C 60929FE5 LDR R9,??create_connect_0+0x8 ;; NATICQ_HOST 2090 GetHost(host_counter, NATICQ_HOST, hostbuf); 2091 hostport = GetPort(host_counter, NATICQ_HOST); 2092 host_counter++; 2093 2094 sprintf(buf, "Connect to %s:%d", hostbuf, hostport); 2095 strcpy(hostbuf2, hostbuf); 2096 strcpy(logmsg,buf); 2097 SMART_REDRAW(); 2098 2099 ip=str2ip(hostbuf); \ 00000060 ........ LDR R11,??DataTable66 ;; do_reconnect \ 00000064 8C4185E5 STR R4,[R5, #+396] \ 00000068 7C8100EF SWI +33148 \ 0000006C 004080E5 STR R4,[R0, #+0] \ 00000070 0900A0E1 MOV R0,R9 \ 00000074 ........ BL GetHostsCount \ 00000078 941195E5 LDR R1,[R5, #+404] \ 0000007C 14208DE2 ADD R2,SP,#+20 \ 00000080 010050E1 CMP R0,R1 \ 00000084 944185B5 STRLT R4,[R5, #+404] \ 00000088 940195E5 LDR R0,[R5, #+404] \ 0000008C 0910A0E1 MOV R1,R9 \ 00000090 ........ BL GetHost \ 00000094 940195E5 LDR R0,[R5, #+404] \ 00000098 0910A0E1 MOV R1,R9 \ 0000009C ........ BL GetPort \ 000000A0 0090A0E1 MOV R9,R0 \ 000000A4 940195E5 LDR R0,[R5, #+404] \ 000000A8 0930A0E1 MOV R3,R9 \ 000000AC 010080E2 ADD R0,R0,#+1 \ 000000B0 940185E5 STR R0,[R5, #+404] \ 000000B4 14208DE2 ADD R2,SP,#+20 \ 000000B8 181088E2 ADD R1,R8,#+24 \ 000000BC 94008DE2 ADD R0,SP,#+148 \ 000000C0 160000EF SWI +22 \ 000000C4 14108DE2 ADD R1,SP,#+20 \ 000000C8 6C00A0E3 MOV R0,#+108 \ 000000CC 600D80E3 ORR R0,R0,#0x1800 \ 000000D0 050080E0 ADD R0,R0,R5 \ 000000D4 1A0000EF SWI +26 \ 000000D8 94108DE2 ADD R1,SP,#+148 \ 000000DC 0700A0E1 MOV R0,R7 \ 000000E0 1A0000EF SWI +26 \ 000000E4 ........ BL SMART_REDRAW \ 000000E8 14008DE2 ADD R0,SP,#+20 \ 000000EC B70100EF SWI +439 \ 000000F0 40A0A0E3 MOV R10,#+64 \ 000000F4 65AC8AE3 ORR R10,R10,#0x6500 \ 000000F8 010070E3 CMN R0,#+1 \ 000000FC 0500000A BEQ ??create_connect_3 2100 if (ip!=0xFFFFFFFF) 2101 { 2102 sa.ip=ip; \ 00000100 08008DE5 STR R0,[SP, #+8] 2103 strcat(logmsg,"\nConnect by IP!"); \ 00000104 2C1088E2 ADD R1,R8,#+44 \ 00000108 0700A0E1 MOV R0,R7 \ 0000010C 170000EF SWI +23 2104 SMART_REDRAW(); \ 00000110 ........ BL SMART_REDRAW 2105 goto L_CONNECT; \ 00000114 280000EA B ??create_connect_4 2106 } \ ??create_connect_3: \ 00000118 671F8FE2 ADR R1,??create_connect_0 ;; "\n" \ 0000011C 0700A0E1 MOV R0,R7 2107 strcat(logmsg,"\n"); \ 00000120 170000EF SWI +23 2108 strcat(logmsg,LG_GRSENDDNR); \ 00000124 3C1088E2 ADD R1,R8,#+60 \ 00000128 0700A0E1 MOV R0,R7 \ 0000012C 170000EF SWI +23 2109 SMART_REDRAW(); \ 00000130 ........ BL SMART_REDRAW 2110 err=async_gethostbyname(hostbuf,&p_res,&DNR_ID); //03461351 3<70<19<81 \ 00000134 632F85E2 ADD R2,R5,#+396 \ 00000138 0D10A0E1 MOV R1,SP \ 0000013C 14008DE2 ADD R0,SP,#+20 \ 00000140 B60100EF SWI +438 \ 00000144 0030B0E1 MOVS R3,R0 2111 if (err) \ 00000148 0500000A BEQ ??create_connect_5 2112 { 2113 if ((err==0xC9)||(err==0xD6)) \ 0000014C C90053E3 CMP R3,#+201 \ 00000150 D6005313 CMPNE R3,#+214 \ 00000154 3100001A BNE ??create_connect_6 2114 { 2115 if (DNR_ID) \ 00000158 8C0195E5 LDR R0,[R5, #+396] \ 0000015C 000050E3 CMP R0,#+0 \ 00000160 5300001A BNE ??create_connect_7 2116 { 2117 return; //Ждем готовности DNR 2118 } 2119 } 2120 else 2121 { 2122 snprintf(logmsg,255,LG_GRDNRERROR,err); 2123 SMART_REDRAW(); 2124 #ifdef EVILFOX 2125 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*10,do_reconnect); 2126 #else 2127 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*120,do_reconnect); 2128 #endif 2129 return; 2130 } 2131 } 2132 if (p_res) \ ??create_connect_5: \ 00000164 00009DE5 LDR R0,[SP, #+0] \ 00000168 000050E3 CMP R0,#+0 \ 0000016C 4800000A BEQ ??create_connect_8 2133 { 2134 if (p_res[3]) \ 00000170 0C0090E5 LDR R0,[R0, #+12] \ 00000174 000050E3 CMP R0,#+0 \ 00000178 4D00000A BEQ ??create_connect_7 2135 { 2136 strcpy(logmsg,buf); \ 0000017C 94108DE2 ADD R1,SP,#+148 \ 00000180 0700A0E1 MOV R0,R7 \ 00000184 1A0000EF SWI +26 2137 strcat(logmsg,"\n"); \ 00000188 4B1F8FE2 ADR R1,??create_connect_0 ;; "\n" \ 0000018C 0700A0E1 MOV R0,R7 \ 00000190 170000EF SWI +23 2138 strcat(logmsg,LG_GRDNROK); \ 00000194 581088E2 ADD R1,R8,#+88 \ 00000198 0700A0E1 MOV R0,R7 \ 0000019C 170000EF SWI +23 2139 SMART_REDRAW(); \ 000001A0 ........ BL SMART_REDRAW 2140 DNR_TRIES=0; \ 000001A4 904185E5 STR R4,[R5, #+400] 2141 sa.ip=p_res[3][0][0]; \ 000001A8 00109DE5 LDR R1,[SP, #+0] \ 000001AC 0C1091E5 LDR R1,[R1, #+12] \ 000001B0 001091E5 LDR R1,[R1, #+0] \ 000001B4 001091E5 LDR R1,[R1, #+0] \ 000001B8 08108DE5 STR R1,[SP, #+8] 2142 L_CONNECT: 2143 sock=socket(1,1,0); \ ??create_connect_4: \ 000001BC 0020A0E3 MOV R2,#+0 \ 000001C0 0110A0E3 MOV R1,#+1 \ 000001C4 0100A0E1 MOV R0,R1 \ 000001C8 730100EF SWI +371 \ 000001CC 480185E5 STR R0,[R5, #+328] 2144 if (sock!=-1) \ 000001D0 010070E3 CMN R0,#+1 \ 000001D4 2500000A BEQ ??create_connect_9 2145 { 2146 sa.family=1; \ 000001D8 0170A0E3 MOV R7,#+1 \ 000001DC B470CDE1 STRH R7,[SP, #+4] 2147 sa.port=htons(hostport); \ 000001E0 0908A0E1 MOV R0,R9, LSL #+16 \ 000001E4 2008A0E1 MOV R0,R0, LSR #+16 \ 000001E8 7A0100EF SWI +378 \ 000001EC B600CDE1 STRH R0,[SP, #+6] 2148 // sa.ip=htonl(IP_ADDR(82,207,89,182)); 2149 if (connect(sock,&sa,sizeof(sa))!=-1) \ 000001F0 480195E5 LDR R0,[R5, #+328] \ 000001F4 1020A0E3 MOV R2,#+16 \ 000001F8 04108DE2 ADD R1,SP,#+4 \ 000001FC 740100EF SWI +372 \ 00000200 010070E3 CMN R0,#+1 \ 00000204 0F00000A BEQ ??create_connect_10 2150 { 2151 connect_state=1; \ 00000208 447185E5 STR R7,[R5, #+324] 2152 TOTALRECEIVED=0; \ 0000020C 4C4185E5 STR R4,[R5, #+332] 2153 TOTALSENDED=0; \ 00000210 504185E5 STR R4,[R5, #+336] 2154 SMART_REDRAW(); \ ??create_connect_2: \ 00000214 ........ BL SMART_REDRAW \ ??create_connect_11: \ 00000218 45DF8DE2 ADD SP,SP,#+276 \ 0000021C F08FBDE8 POP {R4-R11,PC} 2155 } \ ??create_connect_6: \ 00000220 482088E2 ADD R2,R8,#+72 \ 00000224 FF10A0E3 MOV R1,#+255 \ 00000228 0700A0E1 MOV R0,R7 \ 0000022C 1B0100EF SWI +283 \ 00000230 ........ BL SMART_REDRAW \ ??create_connect_12: \ 00000234 0B20A0E1 MOV R2,R11 \ 00000238 0A10A0E1 MOV R1,R10 \ 0000023C 0600A0E1 MOV R0,R6 \ 00000240 4D0000EF SWI +77 \ 00000244 F3FFFFEA B ??create_connect_11 2156 else 2157 { 2158 closesocket(sock); \ ??create_connect_10: \ 00000248 480195E5 LDR R0,[R5, #+328] \ 0000024C 760100EF SWI +374 2159 sock=-1; \ 00000250 0400E0E1 MVN R0,R4 \ 00000254 480185E5 STR R0,[R5, #+328] 2160 LockSched(); \ 00000258 460100EF SWI +326 2161 ShowMSG(1,(int)LG_MSGCANTCONN); \ 0000025C 701088E2 ADD R1,R8,#+112 \ 00000260 0100A0E3 MOV R0,#+1 \ 00000264 480100EF SWI +328 2162 UnlockSched(); \ 00000268 470100EF SWI +327 2163 #ifdef EVILFOX 2164 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*10,do_reconnect); 2165 #else 2166 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*120,do_reconnect); \ 0000026C F0FFFFEA B ??create_connect_12 2167 #endif 2168 } 2169 } 2170 else 2171 { 2172 LockSched(); \ ??create_connect_9: \ 00000270 460100EF SWI +326 2173 ShowMSG(1,(int)LG_MSGCANTCRSC); \ 00000274 8C1088E2 ADD R1,R8,#+140 \ 00000278 0100A0E3 MOV R0,#+1 \ 0000027C 480100EF SWI +328 2174 UnlockSched(); \ 00000280 470100EF SWI +327 2175 //Не осилили создания сокета, закрываем GPRS-сессию 2176 GPRS_OnOff(0,1); \ 00000284 0110A0E3 MOV R1,#+1 \ 00000288 0000A0E3 MOV R0,#+0 \ 0000028C 8E0100EF SWI +398 \ 00000290 E0FFFFEA B ??create_connect_11 2177 } 2178 } 2179 } 2180 else 2181 { 2182 DNR_TRIES--; \ ??create_connect_8: \ 00000294 900195E5 LDR R0,[R5, #+400] \ 00000298 010040E2 SUB R0,R0,#+1 \ 0000029C 900185E5 STR R0,[R5, #+400] 2183 LockSched(); \ 000002A0 460100EF SWI +326 2184 ShowMSG(1,(int)LG_MSGHOSTNFND); \ 000002A4 B81088E2 ADD R1,R8,#+184 \ 000002A8 0100A0E3 MOV R0,#+1 \ 000002AC 480100EF SWI +328 2185 UnlockSched(); \ 000002B0 470100EF SWI +327 \ ??create_connect_7: \ 000002B4 45DF8DE2 ADD SP,SP,#+276 ;; stack cleaning \ 000002B8 F08FBDE8 POP {R4-R11,PC} ;; return \ ??create_connect_0: \ 000002BC 0A000000 DC8 "\n",+0,+0 \ 000002C0 ........ DC32 `?` \ 000002C4 ........ DC32 NATICQ_HOST 2186 } 2187 } 2188 2189 #ifdef SEND_TIMER 2190 GBSTMR send_tmr; 2191 #endif 2192 \ In segment CODE, align 4, keep-with-next 2193 void ClearSendQ(void) 2194 { \ ClearSendQ: \ 00000000 10402DE9 PUSH {R4,LR} 2195 mfree((void *)sendq_p); \ 00000004 ........ LDR R4,??DataTable68 ;; S_ICONS \ 00000008 600194E5 LDR R0,[R4, #+352] \ 0000000C 150000EF SWI +21 2196 sendq_p=NULL; \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 600184E5 STR R0,[R4, #+352] 2197 sendq_l=NULL; \ 00000018 5C0184E5 STR R0,[R4, #+348] 2198 #ifdef SEND_TIMER 2199 GBS_DelTimer(&send_tmr); 2200 #endif 2201 } \ 0000001C 1080BDE8 POP {R4,PC} ;; return 2202 \ In segment CODE, align 4, keep-with-next 2203 void end_socket(void) 2204 { \ end_socket: \ 00000000 10402DE9 PUSH {R4,LR} 2205 if (sock>=0) \ 00000004 ........ LDR R4,??DataTable68 ;; S_ICONS \ 00000008 480194E5 LDR R0,[R4, #+328] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD48 POPMI {R4,PC} 2206 { 2207 shutdown(sock,2); \ 00000014 0210A0E3 MOV R1,#+2 \ 00000018 770100EF SWI +375 2208 closesocket(sock); \ 0000001C 480194E5 LDR R0,[R4, #+328] \ 00000020 760100EF SWI +374 2209 } 2210 #ifdef SEND_TIMER 2211 GBS_DelTimer(&send_tmr); 2212 #endif 2213 } \ 00000024 1080BDE8 POP {R4,PC} ;; return 2214 2215 #ifdef SEND_TIMER 2216 static void resend(void) 2217 { 2218 void SendAnswer(int dummy, TPKT *p); 2219 SUBPROC((void*)SendAnswer,0,0); 2220 } 2221 #endif 2222 \ In segment CODE, align 4, keep-with-next 2223 void SendAnswer(int dummy, TPKT *p) 2224 { \ SendAnswer: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 2225 int i; 2226 int j; 2227 if (connect_state<2) \ 00000004 ........ LDR R4,??DataTable79 ;; S_ICONS \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C 440194E5 LDR R0,[R4, #+324] \ 00000010 020050E3 CMP R0,#+2 \ 00000014 020000AA BGE ??SendAnswer_0 2228 { 2229 mfree(p); \ 00000018 0600A0E1 MOV R0,R6 \ 0000001C 150000EF SWI +21 2230 return; \ 00000020 F083BDE8 POP {R4-R9,PC} 2231 } 2232 if (p) \ ??SendAnswer_0: \ 00000024 000056E3 CMP R6,#+0 \ 00000028 2600000A BEQ ??SendAnswer_1 2233 { 2234 j=sizeof(PKT)+p->pkt.data_len; //Размер пакета \ 0000002C B600D6E1 LDRH R0,[R6, #+6] \ 00000030 085080E2 ADD R5,R0,#+8 2235 TOTALSENDED+=j; \ 00000034 500194E5 LDR R0,[R4, #+336] \ 00000038 000085E0 ADD R0,R5,R0 \ 0000003C 500184E5 STR R0,[R4, #+336] 2236 ALLTOTALSENDED+=j; //by BoBa 10.07 \ 00000040 580194E5 LDR R0,[R4, #+344] \ 00000044 000085E0 ADD R0,R5,R0 \ 00000048 580184E5 STR R0,[R4, #+344] 2237 //Проверяем, не надо ли добавить в очередь 2238 if (sendq_p) \ 0000004C 600194E5 LDR R0,[R4, #+352] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0F00000A BEQ ??SendAnswer_2 2239 { 2240 //Есть очередь, добавляем в нее 2241 sendq_p=realloc((void *)sendq_p,sendq_l+j); \ 00000058 5C1194E5 LDR R1,[R4, #+348] \ 0000005C 011085E0 ADD R1,R5,R1 \ 00000060 BA0000EF SWI +186 \ 00000064 600184E5 STR R0,[R4, #+352] 2242 memcpy((char *)sendq_p+sendq_l,p,j); \ 00000068 5C0194E5 LDR R0,[R4, #+348] \ 0000006C 603194E5 LDR R3,[R4, #+352] \ 00000070 0520A0E1 MOV R2,R5 \ 00000074 0610A0E1 MOV R1,R6 \ 00000078 030080E0 ADD R0,R0,R3 \ 0000007C 1E0100EF SWI +286 2243 mfree(p); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 150000EF SWI +21 2244 sendq_l+=j; \ 00000088 5C0194E5 LDR R0,[R4, #+348] \ 0000008C 000085E0 ADD R0,R5,R0 \ 00000090 5C0184E5 STR R0,[R4, #+348] 2245 return; \ 00000094 F083BDE8 POP {R4-R9,PC} 2246 } 2247 sendq_p=p; \ ??SendAnswer_2: \ 00000098 606184E5 STR R6,[R4, #+352] 2248 sendq_l=j; \ 0000009C 5C5184E5 STR R5,[R4, #+348] \ 000000A0 080000EA B ??SendAnswer_1 2249 } 2250 //Отправляем уже существующее в очереди 2251 while((i=sendq_l)!=0) 2252 { 2253 if (i>0x400) i=0x400; 2254 j=send(sock,(void *)sendq_p,i,0); 2255 snprintf(logmsg,255,"send res %d",j); 2256 SMART_REDRAW(); 2257 if (j<0) 2258 { 2259 j=*socklasterr(); 2260 if ((j==0xC9)||(j==0xD6)) 2261 { 2262 //Передали что хотели 2263 strcpy(logmsg,"Send delayed..."); 2264 return; //Видимо, надо ждать сообщения ENIP_BUFFER_FREE 2265 } 2266 else 2267 { 2268 //Ошибка 2269 LockSched(); 2270 ShowMSG(1,(int)"Send error!"); 2271 UnlockSched(); 2272 end_socket(); 2273 return; 2274 } 2275 } 2276 memcpy((void *)sendq_p,(char *)sendq_p+j,sendq_l-=j); //Удалили переданное \ ??SendAnswer_3: \ 000000A4 5C0194E5 LDR R0,[R4, #+348] \ 000000A8 052040E0 SUB R2,R0,R5 \ 000000AC 5C2184E5 STR R2,[R4, #+348] \ 000000B0 600194E5 LDR R0,[R4, #+352] \ 000000B4 001085E0 ADD R1,R5,R0 \ 000000B8 1E0100EF SWI +286 2277 if (j` \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 400E80E3 ORR R0,R0,#0x400 \ 000000E8 000057E1 CMP R7,R0 \ 000000EC 480194E5 LDR R0,[R4, #+328] \ 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 EC00A0E3 MOV R0,#+236 \ 00000108 580D80E3 ORR R0,R0,#0x1600 \ 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} 2286 } 2287 mfree((void *)sendq_p); \ ??SendAnswer_4: \ 00000170 0100A0E1 MOV R0,R1 \ 00000174 150000EF SWI +21 2288 sendq_p=NULL; \ 00000178 606184E5 STR R6,[R4, #+352] 2289 } \ 0000017C F083BDE8 POP {R4-R9,PC} ;; return \ ??SendAnswer_5: \ 00000180 ........ DC32 `?` 2290 \ In segment CODE, align 4, keep-with-next 2291 void send_login(int dummy, TPKT *p) 2292 { 2293 connect_state=2; 2294 char rev[16]; 2295 //Кто будет менять в этом месте идентификатор клиента, буду банить на уровне сервера!!! 2296 //А Вова будет банить на форуме! 2297 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,??DataTable79 ;; S_ICONS \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 0200A0E3 MOV R0,#+2 \ 0000001C 440186E5 STR R0,[R6, #+324] \ 00000020 3530A0E3 MOV R3,#+53 \ 00000024 703E83E3 ORR R3,R3,#0x700 \ 00000028 0910A0E3 MOV R1,#+9 \ 0000002C 0D00A0E1 MOV R0,SP \ 00000030 1B0100EF SWI +283 2298 2299 TPKT *p2=malloc(sizeof(PKT)+8); \ 00000034 1000A0E3 MOV R0,#+16 \ 00000038 140000EF SWI +20 \ 0000003C 0070A0E1 MOV R7,R0 2300 p2->pkt.uin=UIN; \ 00000040 ........ LDR R0,??DataTable72 ;; UIN 2301 p2->pkt.type=T_SETCLIENT_ID; 2302 p2->pkt.data_len=8; 2303 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 2304 SendAnswer(0,p2); \ 0000006C 0710A0E1 MOV R1,R7 \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 ........ BL SendAnswer 2305 SendAnswer(dummy,p); \ 00000078 0510A0E1 MOV R1,R5 \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 ........ BL SendAnswer 2306 RXstate=-(int)sizeof(PKT); \ 00000084 0700E0E3 MVN R0,#+7 \ 00000088 400186E5 STR R0,[R6, #+320] 2307 } \ 0000008C FF80BDE8 POP {R0-R7,PC} ;; return \ ??send_login_0: \ 00000090 ........ DC32 `?` 2308 \ In segment CODE, align 4, keep-with-next 2309 void do_ping(void) 2310 { \ do_ping: \ 00000000 00402DE9 PUSH {LR} 2311 TPKT *pingp=malloc(sizeof(PKT)); \ 00000004 0800A0E3 MOV R0,#+8 \ 00000008 140000EF SWI +20 2312 pingp->pkt.uin=UIN; \ 0000000C ........ LDR R1,??DataTable72 ;; UIN \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 2313 pingp->pkt.type=0; \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C B410C0E1 STRH R1,[R0, #+4] 2314 pingp->pkt.data_len=0; \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2315 SendAnswer(0,pingp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 0040BDE8 POP {LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 2316 } 2317 \ In segment CODE, align 4, keep-with-next 2318 void SendMSGACK(int i) 2319 { \ SendMSGACK: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 2320 TPKT *ackp=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 2321 ackp->pkt.uin=i; \ 00000010 004080E5 STR R4,[R0, #+0] 2322 ackp->pkt.type=T_MSGACK; \ 00000014 1710A0E3 MOV R1,#+23 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2323 ackp->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2324 SendAnswer(0,ackp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 1040BDE8 POP {R4,LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 2325 } 2326 \ In segment CODE, align 4, keep-with-next 2327 void RequestXText(unsigned int uin) 2328 { \ RequestXText: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 2329 TPKT *p=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 2330 p->pkt.uin=uin; \ 00000010 004080E5 STR R4,[R0, #+0] 2331 p->pkt.type=T_XTEXT_REQ; \ 00000014 1810A0E3 MOV R1,#+24 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2332 p->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2333 SUBPROC((void *)SendAnswer,0,p); \ 00000024 0020A0E1 MOV R2,R0 \ 00000028 ........ LDR R0,??DataTable73 ;; SendAnswer \ 0000002C 710100EF SWI +369 2334 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 2335 2336 extern int main2_count; 2337 //#ifdef EVILFOX 2338 //#else 2339 extern const char ignor_list[256]; 2340 //#endif 2341 char I_UIN[9]; 2342 \ In segment CODE, align 4, keep-with-next 2343 void get_answer(void) 2344 { \ get_answer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2345 void *p; 2346 int i=RXstate; \ 00000004 ........ LDR R5,??DataTable79 ;; S_ICONS \ 00000008 1CD04DE2 SUB SP,SP,#+28 \ 0000000C 40DE4DE2 SUB SP,SP,#+1024 2347 int j; 2348 int n; 2349 char rb[1024]; 2350 char *rp=rb; 2351 if (connect_state<2) return; \ 00000010 440195E5 LDR R0,[R5, #+324] \ 00000014 408195E5 LDR R8,[R5, #+320] \ 00000018 1C108DE2 ADD R1,SP,#+28 \ 0000001C 00108DE5 STR R1,[SP, #+0] \ 00000020 020050E3 CMP R0,#+2 \ 00000024 3C0100BA BLT ??get_answer_1 \ 00000028 0A0078E3 CMN R8,#+10 \ 0000002C 3A01000A BEQ ??get_answer_1 2352 if (i==EOP) return; 2353 j=recv(sock,rb,sizeof(rb),0); \ 00000030 480195E5 LDR R0,[R5, #+328] \ 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 2354 while(j>0) 2355 { 2356 if (i<0) 2357 { 2358 //Принимаем заголовок 2359 n=-i; //Требуемое количество байт 2360 if (j=0) 2367 { 2368 //Принимаем тельце ;) 2369 n=RXbuf.pkt.data_len; //Всего в тельце 2370 if (n>16383) 2371 { 2372 //Слишком много 2373 strcpy(logmsg,LG_GRBADPACKET); 2374 end_socket(); 2375 RXstate=EOP; 2376 return; 2377 } 2378 n-=i; //Количество требуемых байт (общая длинна тельца-текущая позиция) 2379 if (n>0) 2380 { 2381 if (jhour*3600+pt->min*60+pt->sec; 2524 s1-=s2; 2525 if (s1<0) s1+=86400; 2526 snprintf(logmsg,255,"Ping %d-%d seconds!",s1,s1+1); 2527 sprintf(PINGO, "Ping: %dsec",s1); 2528 LockSched(); 2529 if (janis==1) 2530 { 2531 ShowMSG(1,(int)logmsg); 2532 janis=0; 2533 } 2534 UnlockSched(); 2535 } 2536 break; 2537 case T_LASTPRIVACY: 2538 n=i+sizeof(PKT); \ ??get_answer_3: \ 00000050 0040A0E1 MOV R4,R0 2539 p=malloc(n); \ ??get_answer_4: \ 00000054 140000EF SWI +20 \ 00000058 00B0A0E1 MOV R11,R0 2540 memcpy(p,&RXbuf,n); \ 0000005C 0420A0E1 MOV R2,R4 \ ??get_answer_5: \ 00000060 0710A0E1 MOV R1,R7 \ 00000064 1E0100EF SWI +286 2541 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); \ 00000068 480195E5 LDR R0,[R5, #+328] \ 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 2542 break; 2543 } 2544 i=-(int)sizeof(PKT); //А может еще есть данные \ ??get_answer_7: \ 00000088 0780E0E3 MVN R8,#+7 \ ??get_answer_2: \ 0000008C 010056E3 CMP R6,#+1 \ 00000090 200100BA BLT ??get_answer_8 \ 00000094 90749FE5 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 EC00A0E3 MOV R0,#+236 \ 000000E4 580D80E3 ORR R0,R0,#0x1600 \ 000000E8 05A080E0 ADD R10,R0,R5 \ 000000EC 400C54E3 CMP R4,#+16384 \ 000000F0 080000BA BLT ??get_answer_11 \ 000000F4 34149FE5 LDR R1,??get_answer_9+0x8 ;; `?text_l) \ 0000002C 0060A0E3 MOV R6,#+0 \ 00000030 0800A0E1 MOV R0,R8 \ 00000034 1B0000EF SWI +27 \ 00000038 000059E1 CMP R9,R0 \ 0000003C 0900003A BCC ??AddToMain_0 2588 { 2589 /* 2590 char *du=malloc(text_l); 2591 strncpy(du,si,text_l); 2592 sprintf(de,"%s%s",du,"..."); 2593 mfree(du); 2594 } 2595 */ 2596 while(text_l!=0) 2597 { 2598 de[iz]=si[iz]; 2599 iz++; 2600 text_l--; 2601 } 2602 de[iz]='.'; 2603 iz++; 2604 de[iz]='.'; 2605 iz++; 2606 de[iz]='.'; 2607 iz++; 2608 de[iz]='\0'; 2609 } 2610 else 2611 strcpy(de, si); \ 00000040 0810A0E1 MOV R1,R8 \ 00000044 0500A0E1 MOV R0,R5 \ 00000048 1A0000EF SWI +26 2612 iz=0; \ ??AddToMain_1: \ 0000004C 0070A0E3 MOV R7,#+0 \ 00000050 0580A0E1 MOV R8,R5 \ 00000054 130000EA B ??AddToMain_2 \ ??AddToMain_3: \ 00000058 0810D7E7 LDRB R1,[R7, +R8] \ 0000005C 019049E2 SUB R9,R9,#+1 \ 00000060 0510C7E7 STRB R1,[R7, +R5] \ 00000064 0070A0E1 MOV R7,R0 \ ??AddToMain_0: \ 00000068 010087E2 ADD R0,R7,#+1 \ 0000006C 000059E3 CMP R9,#+0 \ 00000070 F8FFFF1A BNE ??AddToMain_3 \ 00000074 2E10A0E3 MOV R1,#+46 \ 00000078 0510C7E7 STRB R1,[R7, +R5] \ 0000007C 0510C0E7 STRB R1,[R0, +R5] \ 00000080 017080E2 ADD R7,R0,#+1 \ 00000084 0510C7E7 STRB R1,[R7, +R5] \ 00000088 050087E0 ADD R0,R7,R5 \ 0000008C 0160C0E5 STRB R6,[R0, #+1] \ 00000090 EDFFFFEA B ??AddToMain_1 2613 while(strlen(de)!=iz) 2614 { 2615 // if(d[i]==0x2A) d[i]=0x20; 2616 // if(d[i]==0x27) d[i]=0x20; 2617 // if(d[i]==0x22) d[i]=0x20; 2618 // if(d[i]==0x26) d[i]=0x20; 2619 // if(d[i]==0x3D) d[i]=0x20; 2620 // if(d[i]==0x3C) d[i]=0x20; 2621 // if(d[i]==0x3E) d[i]=0x20; 2622 // if(d[i]==0x7B) d[i]=0x20; 2623 // if(d[i]==0x7D) d[i]=0x20; 2624 // if(d[i]==0x5B) d[i]=0x20; 2625 // if(d[i]==0x5D) d[i]=0x20; 2626 // if(d[i]==0x23) d[i]=0x20; 2627 // if(d[i]==0x2F) d[i]=0x20; 2628 // if(d[i]==0x5C) d[i]=0x20; 2629 // if(d[i]==0x7E) d[i]=0x20; 2630 // if(d[i]==0x5E) d[i]=0x20; 2631 // if(d[i]==0xAC) d[i]=0x20; 2632 // if(d[i]==0xA3) d[i]=0x20; 2633 // if(d[i]==0x24) d[i]=0x20; 2634 // if(d[i]==0xA5) d[i]=0x20; 2635 if(de[iz]==0x0D) de[iz]=0x20; 2636 if(de[iz]==0x0A) de[iz]=0x20; \ ??AddToMain_4: \ 00000094 0A0050E3 CMP R0,#+10 \ 00000098 0000001A BNE ??AddToMain_5 \ ??AddToMain_6: \ 0000009C 0010C8E5 STRB R1,[R8, #+0] 2637 iz++; \ ??AddToMain_5: \ 000000A0 017087E2 ADD R7,R7,#+1 \ 000000A4 018088E2 ADD R8,R8,#+1 \ ??AddToMain_2: \ 000000A8 0500A0E1 MOV R0,R5 \ 000000AC 1B0000EF SWI +27 \ 000000B0 070050E1 CMP R0,R7 \ 000000B4 0400000A BEQ ??AddToMain_7 \ 000000B8 0000D8E5 LDRB R0,[R8, #+0] \ 000000BC 2010A0E3 MOV R1,#+32 \ 000000C0 0D0050E3 CMP R0,#+13 \ 000000C4 F2FFFF1A BNE ??AddToMain_4 \ 000000C8 F3FFFFEA B ??AddToMain_6 2638 } 2639 de[iz]='\0'; 2640 if(main_count==0) sprintf(a_txt, "%s: %s", nameu,de); \ ??AddToMain_7: \ 000000CC ........ LDR R8,??DataTable76 ;; main_count \ 000000D0 0560C7E7 STRB R6,[R7, +R5] \ 000000D4 ........ LDR R6,??DataTable79 ;; S_ICONS \ 000000D8 44719FE5 LDR R7,??AddToMain_8 ;; `?` \ 000000DC F810A0E3 MOV R1,#+248 \ 000000E0 601D81E3 ORR R1,R1,#0x1800 \ 000000E4 061081E0 ADD R1,R1,R6 \ 000000E8 04108DE5 STR R1,[SP, #+4] \ 000000EC 000098E5 LDR R0,[R8, #+0] \ 000000F0 000050E3 CMP R0,#+0 \ 000000F4 0400001A BNE ??AddToMain_9 \ 000000F8 04009DE5 LDR R0,[SP, #+4] \ 000000FC 0530A0E1 MOV R3,R5 \ 00000100 0420A0E1 MOV R2,R4 \ 00000104 0710A0E1 MOV R1,R7 \ 00000108 160000EF SWI +22 2641 if(main_count==1) sprintf(s_txt, "%s: %s", nameu,de); \ ??AddToMain_9: \ 0000010C 2810A0E3 MOV R1,#+40 \ 00000110 641D81E3 ORR R1,R1,#0x1900 \ 00000114 061081E0 ADD R1,R1,R6 \ 00000118 00108DE5 STR R1,[SP, #+0] \ 0000011C 000098E5 LDR R0,[R8, #+0] \ 00000120 010050E3 CMP R0,#+1 \ 00000124 0400001A BNE ??AddToMain_10 \ 00000128 00009DE5 LDR R0,[SP, #+0] \ 0000012C 0530A0E1 MOV R3,R5 \ 00000130 0420A0E1 MOV R2,R4 \ 00000134 0710A0E1 MOV R1,R7 \ 00000138 160000EF SWI +22 2642 if(main_count==2) sprintf(d_txt, "%s: %s", nameu,de); \ ??AddToMain_10: \ 0000013C 5800A0E3 MOV R0,#+88 \ 00000140 640D80E3 ORR R0,R0,#0x1900 \ 00000144 069080E0 ADD R9,R0,R6 \ 00000148 000098E5 LDR R0,[R8, #+0] \ 0000014C 020050E3 CMP R0,#+2 \ 00000150 0400001A BNE ??AddToMain_11 \ 00000154 0530A0E1 MOV R3,R5 \ 00000158 0420A0E1 MOV R2,R4 \ 0000015C 0710A0E1 MOV R1,R7 \ 00000160 0900A0E1 MOV R0,R9 \ 00000164 160000EF SWI +22 2643 if(main_count==3) sprintf(f_txt, "%s: %s", nameu,de); \ ??AddToMain_11: \ 00000168 8800A0E3 MOV R0,#+136 \ 0000016C 640D80E3 ORR R0,R0,#0x1900 \ 00000170 06A080E0 ADD R10,R0,R6 \ 00000174 000098E5 LDR R0,[R8, #+0] \ 00000178 030050E3 CMP R0,#+3 \ 0000017C 0400001A BNE ??AddToMain_12 \ 00000180 0530A0E1 MOV R3,R5 \ 00000184 0420A0E1 MOV R2,R4 \ 00000188 0710A0E1 MOV R1,R7 \ 0000018C 0A00A0E1 MOV R0,R10 \ 00000190 160000EF SWI +22 2644 if(main_count==4) sprintf(g_txt, "%s: %s", nameu,de); \ ??AddToMain_12: \ 00000194 B800A0E3 MOV R0,#+184 \ 00000198 640D80E3 ORR R0,R0,#0x1900 \ 0000019C 06B080E0 ADD R11,R0,R6 \ 000001A0 000098E5 LDR R0,[R8, #+0] \ 000001A4 040050E3 CMP R0,#+4 \ 000001A8 0400001A BNE ??AddToMain_13 \ 000001AC 0530A0E1 MOV R3,R5 \ 000001B0 0420A0E1 MOV R2,R4 \ 000001B4 0710A0E1 MOV R1,R7 \ 000001B8 0B00A0E1 MOV R0,R11 \ 000001BC 160000EF SWI +22 2645 if(main_count>4) \ ??AddToMain_13: \ 000001C0 000098E5 LDR R0,[R8, #+0] \ 000001C4 050050E3 CMP R0,#+5 \ 000001C8 100000BA BLT ??AddToMain_14 2646 { 2647 strcpy(a_txt, s_txt); \ 000001CC 00109DE5 LDR R1,[SP, #+0] \ 000001D0 04009DE5 LDR R0,[SP, #+4] \ 000001D4 1A0000EF SWI +26 2648 strcpy(s_txt, d_txt); \ 000001D8 00009DE5 LDR R0,[SP, #+0] \ 000001DC 0910A0E1 MOV R1,R9 \ 000001E0 1A0000EF SWI +26 2649 strcpy(d_txt, f_txt); \ 000001E4 0A10A0E1 MOV R1,R10 \ 000001E8 0900A0E1 MOV R0,R9 \ 000001EC 1A0000EF SWI +26 2650 strcpy(f_txt, g_txt); \ 000001F0 0B10A0E1 MOV R1,R11 \ 000001F4 0A00A0E1 MOV R0,R10 \ 000001F8 1A0000EF SWI +26 2651 sprintf(g_txt, "%s: %s", nameu,de); \ 000001FC 0530A0E1 MOV R3,R5 \ 00000200 0420A0E1 MOV R2,R4 \ 00000204 0710A0E1 MOV R1,R7 \ 00000208 0B00A0E1 MOV R0,R11 \ 0000020C 160000EF SWI +22 2652 } 2653 mfree(de); \ ??AddToMain_14: \ 00000210 0500A0E1 MOV R0,R5 \ 00000214 150000EF SWI +21 2654 main_d=1; \ 00000218 0100A0E3 MOV R0,#+1 \ 0000021C 880186E5 STR R0,[R6, #+392] 2655 } \ 00000220 F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??AddToMain_8: \ 00000224 ........ DC32 `?` 2656 //======================add to main info================ 2657 int NEW_MSG; 2658 \ In segment CODE, align 4, keep-with-next 2659 void AddStringToLog(CLIST *t, int code, char *s, const char *name, unsigned int IDforACK) 2660 { \ AddStringToLog: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 90D04DE2 SUB SP,SP,#+144 \ 00000008 AC809DE5 LDR R8,[SP, #+172] \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0150A0E1 MOV R5,R1 \ 00000014 0270A0E1 MOV R7,R2 \ 00000018 0360A0E1 MOV R6,R3 2661 char hs[128], *lastX; 2662 TTime tt; 2663 TDate d; 2664 GetDateTime(&d,&tt); \ 0000001C 0D10A0E1 MOV R1,SP \ 00000020 08008DE2 ADD R0,SP,#+8 \ 00000024 B40000EF SWI +180 2665 int i; 2666 2667 // if(code == 3 && !LOG_XTXT) return; //Нl нуcно nоodrн?nь cennnrnуn 2668 if (code==3 && NOT_LOG_SAME_XTXT) \ 00000028 030055E3 CMP R5,#+3 \ 0000002C 1600001A BNE ??AddStringToLog_0 \ 00000030 F0019FE5 LDR R0,??AddStringToLog_1 ;; NOT_LOG_SAME_XTXT \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 1200000A BEQ ??AddStringToLog_0 2669 { 2670 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<` \ 00000090 0600A0E1 MOV R0,R6 \ 00000094 01002DE9 PUSH {R0} \ 00000098 1000DDE5 LDRB R0,[SP, #+16] \ 0000009C 0920A0E1 MOV R2,R9 \ 000000A0 7F10A0E3 MOV R1,#+127 \ 000000A4 01002DE9 PUSH {R0} \ 000000A8 1500DDE5 LDRB R0,[SP, #+21] \ 000000AC 01002DE9 PUSH {R0} \ 000000B0 0D00DDE5 LDRB R0,[SP, #+13] \ 000000B4 01002DE9 PUSH {R0} \ 000000B8 1030DDE5 LDRB R3,[SP, #+16] \ 000000BC 20008DE2 ADD R0,SP,#+32 \ 000000C0 1B0100EF SWI +283 2677 if(code != 3 || LOG_XTXT) //Нуcно nоodrн?nь cennnrnуn \ 000000C4 030055E3 CMP R5,#+3 \ 000000C8 10D08DE2 ADD SP,SP,#+16 \ 000000CC 0300001A BNE ??AddStringToLog_4 \ 000000D0 58019FE5 LDR R0,??AddStringToLog_1+0x8 ;; LOG_XTXT \ 000000D4 000090E5 LDR R0,[R0, #+0] \ 000000D8 000050E3 CMP R0,#+0 \ 000000DC 0400000A BEQ ??AddStringToLog_5 2678 Add2History(t, hs, s, code); // Зrdcnь ocnnоdc \ ??AddStringToLog_4: \ 000000E0 0530A0E1 MOV R3,R5 \ 000000E4 0720A0E1 MOV R2,R7 \ 000000E8 10108DE2 ADD R1,SP,#+16 \ 000000EC 0400A0E1 MOV R0,R4 \ 000000F0 ........ _BLF Add2History,??Add2History??rA 2679 // ShowMSG(1,(int)t); 2680 // ShowMSG(1,(int)s); // Запись хистори 2681 LOGQ *p=NewLOGQ(s); \ ??AddStringToLog_5: \ 000000F4 0700A0E1 MOV R0,R7 \ 000000F8 ........ BL NewLOGQ \ 000000FC 0070A0E1 MOV R7,R0 2682 snprintf(p->hdr,79,"%02d:%02d %02d-%02d %s:",tt.hour,tt.min,d.day,d.month,name); \ 00000100 40002DE9 PUSH {R6} \ 00000104 1000DDE5 LDRB R0,[SP, #+16] \ 00000108 1C2089E2 ADD R2,R9,#+28 \ 0000010C 4F10A0E3 MOV R1,#+79 \ 00000110 01002DE9 PUSH {R0} \ 00000114 1500DDE5 LDRB R0,[SP, #+21] \ 00000118 01002DE9 PUSH {R0} \ 0000011C 0D00DDE5 LDRB R0,[SP, #+13] \ 00000120 01002DE9 PUSH {R0} \ 00000124 1030DDE5 LDRB R3,[SP, #+16] \ 00000128 100087E2 ADD R0,R7,#+16 \ 0000012C 1B0100EF SWI +283 2683 p->type=code; \ 00000130 0C5087E5 STR R5,[R7, #+12] 2684 p->ID=IDforACK; //0-32767 \ 00000134 088087E5 STR R8,[R7, #+8] 2685 i=AddLOGQ(&t->log,p); \ 00000138 0710A0E1 MOV R1,R7 \ 0000013C 740084E2 ADD R0,R4,#+116 \ 00000140 ........ BL AddLOGQ \ 00000144 0060A0E1 MOV R6,R0 \ 00000148 150056E3 CMP R6,#+21 \ 0000014C 10D08DE2 ADD SP,SP,#+16 \ 00000150 090000BA BLT ??AddStringToLog_6 2686 while(i>MAXLOGMSG) 2687 { 2688 if (t->log==t->last_log) t->last_log=t->last_log->next; \ ??AddStringToLog_7: \ 00000154 7C0094E5 LDR R0,[R4, #+124] \ 00000158 741094E5 LDR R1,[R4, #+116] 2689 RemoveLOGQ(&t->log,t->log); 2690 i--; \ 0000015C 016046E2 SUB R6,R6,#+1 \ 00000160 000051E1 CMP R1,R0 \ 00000164 00009005 LDREQ R0,[R0, #+0] \ 00000168 7C008405 STREQ R0,[R4, #+124] \ 0000016C 740084E2 ADD R0,R4,#+116 \ 00000170 ........ BL RemoveLOGQ 2691 } \ 00000174 150056E3 CMP R6,#+21 \ 00000178 F5FFFFAA BGE ??AddStringToLog_7 2692 t->msg_count=i; \ ??AddStringToLog_6: \ 0000017C 846084E5 STR R6,[R4, #+132] 2693 if (!t->last_log) t->last_log=p; \ 00000180 7C0094E5 LDR R0,[R4, #+124] 2694 if (code==3) \ 00000184 ........ LDR R6,??DataTable79 ;; S_ICONS \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 7C708405 STREQ R7,[R4, #+124] \ 00000190 030055E3 CMP R5,#+3 \ 00000194 0D00001A BNE ??AddStringToLog_8 2695 { 2696 if (edchat_id) \ 00000198 740196E5 LDR R0,[R6, #+372] \ 0000019C 000050E3 CMP R0,#+0 \ 000001A0 1C00000A BEQ ??AddStringToLog_9 2697 { 2698 void *data=FindGUIbyId(edchat_id,NULL); \ 000001A4 740196E5 LDR R0,[R6, #+372] \ 000001A8 0010A0E3 MOV R1,#+0 \ 000001AC 090200EF SWI +521 2699 if (data) \ 000001B0 000050E3 CMP R0,#+0 \ 000001B4 1700000A BEQ ??AddStringToLog_9 2700 { 2701 EDCHAT_STRUCT *ed_struct; 2702 ed_struct=EDIT_GetUserPointer(data); \ 000001B8 DF0100EF SWI +479 2703 if (ed_struct) \ 000001BC 000050E3 CMP R0,#+0 \ 000001C0 1400000A BEQ ??AddStringToLog_9 2704 { 2705 if (ed_struct->ed_contact==t) \ 000001C4 000090E5 LDR R0,[R0, #+0] \ 000001C8 040050E1 CMP R0,R4 \ 000001CC 1100001A BNE ??AddStringToLog_9 2706 { 2707 goto L_INC; 2708 } 2709 } 2710 } 2711 } 2712 goto L_NOINC; 2713 } 2714 L_INC: 2715 if (!t->isunread) total_unread++; \ ??AddStringToLog_8: \ 000001D0 640094E5 LDR R0,[R4, #+100] \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 C0009605 LDREQ R0,[R6, #+192] \ 000001DC 01008002 ADDEQ R0,R0,#+1 \ 000001E0 C0008605 STREQ R0,[R6, #+192] 2716 if(NEW_MSG==1) \ 000001E4 980196E5 LDR R0,[R6, #+408] \ 000001E8 010050E3 CMP R0,#+1 \ 000001EC 0700001A BNE ??AddStringToLog_10 2717 { 2718 t->unread_msg++; \ 000001F0 680094E5 LDR R0,[R4, #+104] \ 000001F4 010080E2 ADD R0,R0,#+1 \ 000001F8 680084E5 STR R0,[R4, #+104] 2719 total_unread2++; \ 000001FC C40096E5 LDR R0,[R6, #+196] \ 00000200 010080E2 ADD R0,R0,#+1 \ 00000204 C40086E5 STR R0,[R6, #+196] 2720 NEW_MSG=0; \ 00000208 0000A0E3 MOV R0,#+0 \ 0000020C 980186E5 STR R0,[R6, #+408] 2721 } 2722 t->isunread=1; \ ??AddStringToLog_10: \ 00000210 0100A0E3 MOV R0,#+1 \ 00000214 640084E5 STR R0,[R4, #+100] 2723 L_NOINC: 2724 ChangeContactPos(t); \ ??AddStringToLog_9: \ 00000218 0400A0E1 MOV R0,R4 \ 0000021C ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2725 } \ ??AddStringToLog_3: \ 00000220 90D08DE2 ADD SP,SP,#+144 ;; stack cleaning \ 00000224 F083BDE8 POP {R4-R9,PC} ;; return \ ??AddStringToLog_1: \ 00000228 ........ DC32 NOT_LOG_SAME_XTXT \ 0000022C ........ DC32 `?` \ 00000230 ........ DC32 LOG_XTXT 2726 2727 void ParseAnswer(WSHDR *ws, const char *s); 2728 2729 int time_to_stop_t9; 2730 \ In segment CODE, align 4, keep-with-next 2731 void ParseXStatusText(WSHDR *ws, const char *s, int color) 2732 { \ ParseXStatusText: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 2733 int c; 2734 int flag=0; \ 00000010 0070A0E3 MOV R7,#+0 2735 CutWSTR(ws,0); \ 00000014 0010A0E3 MOV R1,#+0 \ 00000018 260100EF SWI +294 2736 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} 2737 wsAppendChar(ws,0xE008); \ 0000002C 0810A0E3 MOV R1,#+8 \ 00000030 E01C81E3 ORR R1,R1,#0xE000 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 1C0000EF SWI +28 2738 wsAppendChar(ws,color); \ 0000003C 0610A0E1 MOV R1,R6 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1C0000EF SWI +28 2739 wsAppendChar(ws,0xE013); \ 00000048 1310A0E3 MOV R1,#+19 \ 0000004C E01C81E3 ORR R1,R1,#0xE000 \ 00000050 0A0000EA B ??ParseXStatusText_0 2740 while((c=*s++)) 2741 { 2742 if (c==13) \ ??ParseXStatusText_1: \ 00000054 0D0050E3 CMP R0,#+13 2743 { 2744 if (!flag) \ 00000058 00005703 CMPEQ R7,#+0 \ 0000005C 0500001A BNE ??ParseXStatusText_2 2745 { 2746 flag=1; \ 00000060 0170A0E3 MOV R7,#+1 2747 wsAppendChar(ws,0xE012); \ 00000064 1210A0E3 MOV R1,#+18 \ 00000068 E01C81E3 ORR R1,R1,#0xE000 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 1C0000EF SWI +28 2748 c=' '; \ 00000074 2000A0E3 MOV R0,#+32 2749 } 2750 } 2751 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 2752 } \ 00000088 ........ LDRB R0,[R5], #+1 \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 EFFFFF1A BNE ??ParseXStatusText_1 \ 00000094 F080BDE8 POP {R4-R7,PC} ;; return 2753 } 2754 //Добавление итемов в чат при получении нового сообщения \ In segment CODE, align 4, keep-with-next 2755 void AddMsgToChat(void *data) 2756 { \ AddMsgToChat: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 40D04DE2 SUB SP,SP,#+64 2757 LOGQ *p; 2758 EDITCONTROL ec; 2759 EDITC_OPTIONS ec_options; 2760 EDCHAT_STRUCT *ed_struct; 2761 int j; 2762 int color, font, type; 2763 int zc; 2764 if (!data) return; \ 00000008 000050E3 CMP R0,#+0 \ 0000000C C900000A BEQ ??AddMsgToChat_0 2765 ed_struct=EDIT_GetUserPointer(data); \ 00000010 DF0100EF SWI +479 \ 00000014 0060B0E1 MOVS R6,R0 2766 if (!ed_struct) return; \ 00000018 C600000A BEQ ??AddMsgToChat_0 2767 if (!ed_struct->ed_contact->isunread) return; \ 0000001C 000096E5 LDR R0,[R6, #+0] \ 00000020 641090E5 LDR R1,[R0, #+100] \ 00000024 000051E3 CMP R1,#+0 \ 00000028 C200000A BEQ ??AddMsgToChat_0 2768 2769 p=ed_struct->ed_contact->last_log; \ 0000002C 7C7090E5 LDR R7,[R0, #+124] 2770 if (p) \ 00000030 ........ LDR R8,??DataTable112 ;; S_ICONS \ 00000034 000057E3 CMP R7,#+0 \ 00000038 A800000A BEQ ??AddMsgToChat_1 2771 { 2772 while(p) 2773 { 2774 font = ED_H_FONT_SIZE; 2775 if ((zc=p->acked&3)) \ ??AddMsgToChat_2: \ 0000003C ........ LDR R2,??DataTable81 ;; ED_X_FONT_SIZE \ 00000040 ........ LDR R0,??DataTable102 ;; ED_H_FONT_SIZE \ 00000044 002092E5 LDR R2,[R2, #+0] \ 00000048 ........ LDR R1,??DataTable83 ;; 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,??DataTable84 ;; O_ED_X_FONT_SIZE \ 00000060 030010E2 ANDS R0,R0,#0x3 \ 00000064 009091E5 LDR R9,[R1, #+0] \ 00000068 ........ LDR R1,??DataTable85 ;; O_X_COLOR \ 0000006C 005091E5 LDR R5,[R1, #+0] \ 00000070 ........ LDR R1,??DataTable100 ;; I_COLOR \ 00000074 00B091E5 LDR R11,[R1, #+0] \ 00000078 0300000A BEQ ??AddMsgToChat_3 2776 { 2777 if (zc==1) \ 0000007C 010050E3 CMP R0,#+1 \ 00000080 1E00001A BNE ??AddMsgToChat_4 2778 color=ACK_COLOR; //Зеленый \ 00000084 ........ LDR R0,??DataTable96 ;; ACK_COLOR \ 00000088 1B0000EA B ??AddMsgToChat_5 2779 else 2780 color=I_COLOR; 2781 //#endif 2782 } 2783 else 2784 { 2785 if (p->ID==0xFFFFFFFF) \ ??AddMsgToChat_3: \ 0000008C 080097E5 LDR R0,[R7, #+8] \ 00000090 010070E3 CMN R0,#+1 \ 00000094 1700001A BNE ??AddMsgToChat_6 2786 { 2787 type = p->type&0x0F; \ 00000098 0C0097E5 LDR R0,[R7, #+12] \ 0000009C 0F1000E2 AND R1,R0,#0xF 2788 if(p->type&0x10) \ 000000A0 100010E3 TST R0,#0x10 \ 000000A4 0B00000A BEQ ??AddMsgToChat_7 2789 { 2790 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 000000A8 010051E3 CMP R1,#+1 \ 000000AC ........ LDREQ R0,??DataTable98 ;; 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,??DataTable97 ;; O_TO_COLOR \ ??AddMsgToChat_8: \ 000000C8 00B090E5 LDR R11,[R0, #+0] \ 000000CC ........ LDR R0,??DataTable103 ;; O_ED_H_FONT_SIZE \ 000000D0 00A090E5 LDR R10,[R0, #+0] \ 000000D4 090000EA B ??AddMsgToChat_4 2791 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 2792 } 2793 else 2794 { 2795 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,??DataTable99 ;; TO_COLOR \ 000000F4 000000EA B ??AddMsgToChat_5 2796 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 2797 } 2798 } 2799 else 2800 color=UNACK_COLOR; //????? \ ??AddMsgToChat_6: \ 000000F8 ........ LDR R0,??DataTable101 ;; UNACK_COLOR \ ??AddMsgToChat_5: \ 000000FC 00B090E5 LDR R11,[R0, #+0] 2801 } 2802 PrepareEditControl(&ec); \ ??AddMsgToChat_4: \ 00000100 14008DE2 ADD R0,SP,#+20 \ 00000104 640100EF SWI +356 2803 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 2804 { 2805 ascii2ws(ews,p->hdr); \ 00000118 DC0098E5 LDR R0,[R8, #+220] \ 0000011C 101087E2 ADD R1,R7,#+16 \ 00000120 ........ _BLF ascii2ws,??ascii2ws??rA 2806 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000124 DC3098E5 LDR R3,[R8, #+220] \ 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 2807 } 2808 else 2809 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??AddMsgToChat_9: \ 0000013C 0000A0E3 MOV R0,#+0 \ 00000140 01002DE9 PUSH {R0} \ 00000144 DC3098E5 LDR R3,[R8, #+220] \ 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 2810 PrepareEditCOptions(&ec_options); \ 0000015C 04008DE2 ADD R0,SP,#+4 \ 00000160 C80100EF SWI +456 2811 SetPenColorToEditCOptions(&ec_options,color); \ 00000164 0B10A0E1 MOV R1,R11 \ 00000168 04008DE2 ADD R0,SP,#+4 \ 0000016C CC0100EF SWI +460 2812 SetFontToEditCOptions(&ec_options,font); \ 00000170 0A10A0E1 MOV R1,R10 \ 00000174 04008DE2 ADD R0,SP,#+4 \ 00000178 CA0100EF SWI +458 2813 CopyOptionsToEditControl(&ec,&ec_options); \ 0000017C 04108DE2 ADD R1,SP,#+4 \ 00000180 14008DE2 ADD R0,SP,#+20 \ 00000184 CE0100EF SWI +462 2814 //AddEditControlToEditQend(eq,&ec,ma); 2815 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 2816 ed_struct->ed_answer++; \ 0000019C 080096E5 LDR R0,[R6, #+8] \ 000001A0 010080E2 ADD R0,R0,#+1 \ 000001A4 080086E5 STR R0,[R6, #+8] 2817 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 2818 { 2819 ParseAnswer(ews,p->text); \ 000001B8 DC0098E5 LDR R0,[R8, #+220] \ 000001BC 601087E2 ADD R1,R7,#+96 \ 000001C0 ........ BL ParseAnswer \ 000001C4 050000EA B ??AddMsgToChat_12 2820 } 2821 else 2822 { 2823 ParseXStatusText(ews, p->text, (p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_11: \ 000001C8 100010E3 TST R0,#0x10 \ 000001CC DC0098E5 LDR R0,[R8, #+220] \ 000001D0 0520A011 MOVNE R2,R5 \ 000001D4 0420A001 MOVEQ R2,R4 \ 000001D8 601087E2 ADD R1,R7,#+96 \ 000001DC ........ BL ParseXStatusText 2824 } 2825 PrepareEditControl(&ec); \ ??AddMsgToChat_12: \ 000001E0 14008DE2 ADD R0,SP,#+20 \ 000001E4 640100EF SWI +356 2826 ConstructEditControl(&ec, 2827 ECT_NORMAL_TEXT, 2828 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 2829 ews,ews->wsbody[0]); \ 000001E8 DC3098E5 LDR R3,[R8, #+220] \ 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 2830 PrepareEditCOptions(&ec_options); \ 00000214 08008DE2 ADD R0,SP,#+8 \ 00000218 C80100EF SWI +456 2831 //#ifdef M75 2832 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 2833 { 2834 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000230 100010E3 TST R0,#0x10 \ 00000234 ........ LDRNE R0,??DataTable93 ;; O_ED_FONT_SIZE \ 00000238 ........ LDREQ R0,??DataTable94 ;; ED_FONT_SIZE \ 0000023C 001090E5 LDR R1,[R0, #+0] \ 00000240 080000EA B ??AddMsgToChat_14 2835 } 2836 else 2837 { 2838 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 2839 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 2840 } 2841 //#else 2842 // SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 2843 //#endif 2844 CopyOptionsToEditControl(&ec,&ec_options); \ 00000270 04108DE2 ADD R1,SP,#+4 \ 00000274 14008DE2 ADD R0,SP,#+20 \ 00000278 CE0100EF SWI +462 2845 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 2846 ed_struct->ed_answer++; \ 00000290 080096E5 LDR R0,[R6, #+8] \ 00000294 010080E2 ADD R0,R0,#+1 \ 00000298 080086E5 STR R0,[R6, #+8] 2847 p=p->next; \ 0000029C 007097E5 LDR R7,[R7, #+0] 2848 } \ 000002A0 000057E3 CMP R7,#+0 \ 000002A4 64FFFF1A BNE ??AddMsgToChat_2 2849 j=((ed_struct->ed_contact->msg_count+1)*2); //Ожидаемый ed_answer \ 000002A8 001096E5 LDR R1,[R6, #+0] \ 000002AC 841091E5 LDR R1,[R1, #+132] \ 000002B0 011081E2 ADD R1,R1,#+1 \ 000002B4 8140A0E1 LSL R4,R1,#+1 \ 000002B8 000054E1 CMP R4,R0 \ 000002BC 070000AA BGE ??AddMsgToChat_1 2850 while(jed_answer) 2851 { 2852 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??AddMsgToChat_15: \ 000002C0 040096E5 LDR R0,[R6, #+4] \ 000002C4 0110A0E3 MOV R1,#+1 \ 000002C8 D10100EF SWI +465 2853 ed_struct->ed_answer--; \ 000002CC 080096E5 LDR R0,[R6, #+8] \ 000002D0 010040E2 SUB R0,R0,#+1 \ 000002D4 080086E5 STR R0,[R6, #+8] 2854 } \ 000002D8 000054E1 CMP R4,R0 \ 000002DC F7FFFFBA BLT ??AddMsgToChat_15 2855 } 2856 ed_struct->ed_contact->last_log=NULL; \ ??AddMsgToChat_1: \ 000002E0 000096E5 LDR R0,[R6, #+0] \ 000002E4 0040A0E3 MOV R4,#+0 \ 000002E8 7C4080E5 STR R4,[R0, #+124] 2857 if (IsGuiOnTop(edchat_id)) \ 000002EC 740198E5 LDR R0,[R8, #+372] \ 000002F0 350100EF SWI +309 \ 000002F4 000050E3 CMP R0,#+0 \ 000002F8 0300000A BEQ ??AddMsgToChat_16 2858 { 2859 total_unread--; \ 000002FC C00098E5 LDR R0,[R8, #+192] \ 00000300 010040E2 SUB R0,R0,#+1 \ 00000304 C00088E5 STR R0,[R8, #+192] \ 00000308 020000EA B ??AddMsgToChat_17 2860 } 2861 else 2862 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] 2863 ed_struct->ed_contact->isunread=0; \ ??AddMsgToChat_17: \ 00000318 000096E5 LDR R0,[R6, #+0] \ 0000031C 644080E5 STR R4,[R0, #+100] 2864 total_unread2=total_unread2-ed_struct->ed_contact->unread_msg; \ 00000320 C41098E5 LDR R1,[R8, #+196] \ 00000324 682090E5 LDR R2,[R0, #+104] \ 00000328 021041E0 SUB R1,R1,R2 \ 0000032C C41088E5 STR R1,[R8, #+196] 2865 ed_struct->ed_contact->unread_msg=0; \ 00000330 684080E5 STR R4,[R0, #+104] 2866 ChangeContactPos(ed_struct->ed_contact); \ 00000334 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2867 // EDIT_SetFocus(data,ed_struct->ed_answer); 2868 } \ ??AddMsgToChat_0: \ 00000338 44D08DE2 ADD SP,SP,#+68 ;; stack cleaning \ 0000033C F08FBDE8 POP {R4-R11,PC} ;; return 2869 2870 //Рисуем подтверждения непосредственно \ In segment CODE, align 4, keep-with-next 2871 void DrawAck(void *data) 2872 { \ DrawAck: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 2873 LOGQ *p; 2874 EDITCONTROL ec; 2875 EDITC_OPTIONS ec_options; 2876 EDCHAT_STRUCT *ed_struct; 2877 int j; 2878 int color; 2879 int dorefresh=0; \ 0000000C 0070A0E3 MOV R7,#+0 2880 if (!data) return; \ 00000010 4C00000A BEQ ??DrawAck_0 2881 ed_struct=EDIT_GetUserPointer(data); \ 00000014 DF0100EF SWI +479 2882 if (!ed_struct) return; \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 4900000A BEQ ??DrawAck_0 2883 p=ed_struct->ed_contact->log; \ 00000020 001090E5 LDR R1,[R0, #+0] 2884 j=ed_struct->ed_answer; 2885 j-=(ed_struct->ed_contact->msg_count*2)+1; //Номер собственно хедера верхнего итема \ 00000024 080090E5 LDR R0,[R0, #+8] \ 00000028 745091E5 LDR R5,[R1, #+116] \ 0000002C 841091E5 LDR R1,[R1, #+132] \ 00000030 810040E0 SUB R0,R0,R1, LSL #+1 \ 00000034 016040E2 SUB R6,R0,#+1 \ 00000038 0F0000EA B ??DrawAck_1 2886 while(p) 2887 { 2888 if (j>=1) //Пока возможно лишнее 2889 { 2890 if (!(p->acked&4)) 2891 { 2892 ExtractEditControl(data,j,&ec); 2893 PrepareEditCOptions(&ec_options); 2894 if (p->acked) 2895 { 2896 if (p->acked==1) 2897 color=ACK_COLOR; //Зеленый 2898 else 2899 color=I_COLOR; 2900 } 2901 else 2902 { 2903 if (p->ID==0xFFFFFFFF) 2904 color=(p->type&0x10)?(((p->type&0x0F)==1)?O_I_COLOR:O_TO_COLOR):(((p->type&0x0F)==1)?I_COLOR:TO_COLOR); 2905 else 2906 color=UNACK_COLOR; //Серый 2907 } 2908 SetPenColorToEditCOptions(&ec_options,color/*p->type==1?I_COLOR:TO_COLOR*/); 2909 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_H_FONT_SIZE:ED_H_FONT_SIZE); \ ??DrawAck_2: \ 0000003C 001090E5 LDR R1,[R0, #+0] \ 00000040 0D00A0E1 MOV R0,SP \ 00000044 CA0100EF SWI +458 2910 CopyOptionsToEditControl(&ec,&ec_options); \ 00000048 0D10A0E1 MOV R1,SP \ 0000004C 10008DE2 ADD R0,SP,#+16 \ 00000050 CE0100EF SWI +462 2911 StoreEditControl(data,j,&ec); \ 00000054 10208DE2 ADD R2,SP,#+16 \ 00000058 0610A0E1 MOV R1,R6 \ 0000005C 0400A0E1 MOV R0,R4 \ 00000060 6A0100EF SWI +362 2912 p->acked|=4; //Обработали \ 00000064 040095E5 LDR R0,[R5, #+4] 2913 dorefresh=1; \ 00000068 0170A0E3 MOV R7,#+1 \ 0000006C 040080E3 ORR R0,R0,#0x4 \ 00000070 040085E5 STR R0,[R5, #+4] 2914 } 2915 } 2916 j+=2; 2917 p=p->next; \ ??DrawAck_3: \ 00000074 005095E5 LDR R5,[R5, #+0] \ 00000078 026086E2 ADD R6,R6,#+2 \ ??DrawAck_1: \ 0000007C 000055E3 CMP R5,#+0 \ 00000080 2900000A BEQ ??DrawAck_4 \ 00000084 010056E3 CMP R6,#+1 \ 00000088 F9FFFFBA BLT ??DrawAck_3 \ 0000008C 040095E5 LDR R0,[R5, #+4] \ 00000090 040010E3 TST R0,#0x4 \ 00000094 F6FFFF1A BNE ??DrawAck_3 \ 00000098 10208DE2 ADD R2,SP,#+16 \ 0000009C 0610A0E1 MOV R1,R6 \ 000000A0 0400A0E1 MOV R0,R4 \ 000000A4 690100EF SWI +361 \ 000000A8 0D00A0E1 MOV R0,SP \ 000000AC C80100EF SWI +456 \ 000000B0 040095E5 LDR R0,[R5, #+4] \ 000000B4 000050E3 CMP R0,#+0 \ 000000B8 0300000A BEQ ??DrawAck_5 \ 000000BC 010050E3 CMP R0,#+1 \ 000000C0 ........ LDRNE R0,??DataTable100 ;; I_COLOR \ 000000C4 ........ LDREQ R0,??DataTable96 ;; ACK_COLOR \ 000000C8 0F0000EA B ??DrawAck_6 \ ??DrawAck_5: \ 000000CC 080095E5 LDR R0,[R5, #+8] \ 000000D0 010070E3 CMN R0,#+1 \ 000000D4 0B00001A BNE ??DrawAck_7 \ 000000D8 0C0095E5 LDR R0,[R5, #+12] \ 000000DC 100010E3 TST R0,#0x10 \ 000000E0 0F0000E2 AND R0,R0,#0xF \ 000000E4 0300000A BEQ ??DrawAck_8 \ 000000E8 010050E3 CMP R0,#+1 \ 000000EC ........ LDRNE R0,??DataTable97 ;; O_TO_COLOR \ 000000F0 ........ LDREQ R0,??DataTable98 ;; O_I_COLOR \ 000000F4 040000EA B ??DrawAck_6 \ ??DrawAck_8: \ 000000F8 010050E3 CMP R0,#+1 \ 000000FC ........ LDRNE R0,??DataTable99 ;; TO_COLOR \ 00000100 ........ LDREQ R0,??DataTable100 ;; I_COLOR \ 00000104 000000EA B ??DrawAck_6 \ ??DrawAck_7: \ 00000108 ........ LDR R0,??DataTable101 ;; UNACK_COLOR \ ??DrawAck_6: \ 0000010C 001090E5 LDR R1,[R0, #+0] \ 00000110 0D00A0E1 MOV R0,SP \ 00000114 CC0100EF SWI +460 \ 00000118 0C0095E5 LDR R0,[R5, #+12] \ 0000011C 100010E3 TST R0,#0x10 \ 00000120 ........ LDREQ R0,??DataTable102 ;; ED_H_FONT_SIZE \ 00000124 ........ LDRNE R0,??DataTable103 ;; O_ED_H_FONT_SIZE \ 00000128 C3FFFFEA B ??DrawAck_2 2918 } 2919 if (IsGuiOnTop(edchat_id)&&dorefresh) RefreshGUI(); \ ??DrawAck_4: \ 0000012C 1C009FE5 LDR R0,??DrawAck_9 ;; S_ICONS + 372 \ 00000130 000090E5 LDR R0,[R0, #+0] \ 00000134 350100EF SWI +309 \ 00000138 000050E3 CMP R0,#+0 \ 0000013C 00005713 CMPNE R7,#+0 \ 00000140 0000000A BEQ ??DrawAck_0 \ 00000144 960100EF SWI +406 \ ??DrawAck_0: \ 00000148 3CD08DE2 ADD SP,SP,#+60 ;; stack cleaning \ 0000014C F080BDE8 POP {R4-R7,PC} ;; return \ ??DrawAck_9: \ 00000150 ........ DC32 S_ICONS + 372 2920 } 2921 \ In segment CODE, align 4, keep-with-next 2922 void ask_my_info(void) 2923 { 2924 /* TPKT *p; 2925 CLIST *t; 2926 p=malloc(sizeof(PKT)); 2927 p->pkt.uin=UIN; 2928 p->pkt.type=T_REQINFOSHORT; 2929 p->pkt.data_len=0; 2930 // AddStringToLog(t,0x01,"Request info...",I_str); 2931 SUBPROC((void *)SendAnswer,0,p);*/ 2932 } \ ask_my_info: \ 00000000 1EFF2FE1 BX LR ;; return 2933 \ In segment CODE, align 4, keep-with-next 2934 void set_my_status(void) 2935 { \ set_my_status: \ 00000000 00402DE9 PUSH {LR} 2936 TPKT *p; 2937 p=malloc(sizeof(PKT)+1); \ 00000004 0900A0E3 MOV R0,#+9 \ 00000008 140000EF SWI +20 2938 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 001080E5 STR R1,[R0, #+0] 2939 p->pkt.type=T_MY_STATUS_CH; // Тип пакета: изменение статуса \ 00000014 0F10A0E3 MOV R1,#+15 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2940 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000001C 0110A0E3 MOV R1,#+1 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2941 p->data[0]=CurrentStatus; \ 00000024 18109FE5 LDR R1,??set_my_status_0 ;; S_ICONS + 308 2942 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,??DataTable115 ;; SendAnswer \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 710100EF SWI +369 2943 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??set_my_status_0: \ 00000044 ........ DC32 S_ICONS + 308 2944 2945 extern int Send0; 2946 \ In segment CODE, align 4, keep-with-next 2947 void set_my_xstatus(void) 2948 { \ set_my_xstatus: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2949 #ifdef NEWSGOLD 2950 if(Is_Id3tag_Enabled) \ 00000004 ........ LDR R4,??DataTable115 ;; SendAnswer \ 00000008 ........ LDR R10,??DataTable112 ;; S_ICONS \ 0000000C ........ LDR R8,??DataTable107 ;; CurrentXStatus \ 00000010 0CD04DE2 SUB SP,SP,#+12 \ 00000014 D8009AE5 LDR R0,[R10, #+216] \ 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 2951 { 2952 if(CurrentXStatus!=11) \ 00000030 000098E5 LDR R0,[R8, #+0] \ 00000034 0B0050E3 CMP R0,#+11 \ 00000038 7200000A BEQ ??set_my_xstatus_1 2953 { 2954 #endif 2955 TPKT *p; 2956 char *s1; 2957 char *s2; 2958 int l1; 2959 int l2; 2960 p=malloc(sizeof(PKT)+1); \ 0000003C 0900A0E3 MOV R0,#+9 \ 00000040 140000EF SWI +20 \ 00000044 00A0A0E1 MOV R10,R0 2961 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 00000048 00908AE5 STR R9,[R10, #+0] 2962 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 0000004C B470CAE1 STRH R7,[R10, #+4] 2963 p->pkt.data_len=1; // Длина пакета: 1 байт \ 00000050 B660CAE1 STRH R6,[R10, #+6] 2964 p->data[0]=CurrentXStatus; \ 00000054 000098E5 LDR R0,[R8, #+0] 2965 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 2966 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 2967 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 2968 if ((!s1)||(!s2)) return; \ 0000009C 000056E3 CMP R6,#+0 \ 000000A0 00005713 CMPNE R7,#+0 \ 000000A4 F78FBD08 POPEQ {R0-R2,R4-R11,PC} 2969 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 2970 p->pkt.uin=0; \ 000000C0 00908AE5 STR R9,[R10, #+0] 2971 p->pkt.type=T_XTEXT_SET; \ 000000C4 B450CAE1 STRH R5,[R10, #+4] 2972 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] 2973 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 2974 p->data[l1]=0; \ 000000EC 00009DE5 LDR R0,[SP, #+0] 2975 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 2976 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} 2977 #ifdef NEWSGOLD 2978 } 2979 else 2980 { 2981 tracktimer=0; 2982 GetTags(); 2983 } 2984 } 2985 else 2986 { 2987 TPKT *p; 2988 char *s1; 2989 char *s2; 2990 int l1; 2991 int l2; 2992 p=malloc(sizeof(PKT)+1); \ ??set_my_xstatus_0: \ 00000124 0900A0E3 MOV R0,#+9 \ 00000128 140000EF SWI +20 \ 0000012C 00B0A0E1 MOV R11,R0 2993 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 00000130 00908BE5 STR R9,[R11, #+0] 2994 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 00000134 B470CBE1 STRH R7,[R11, #+4] 2995 p->pkt.data_len=1; // Длина пакета: 1 байт \ 00000138 B660CBE1 STRH R6,[R11, #+6] 2996 p->data[0]=CurrentXStatus; \ 0000013C 000098E5 LDR R0,[R8, #+0] 2997 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 2998 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 2999 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 3000 if ((!s1)||(!s2)) return; \ 00000184 000056E3 CMP R6,#+0 \ 00000188 00005713 CMPNE R7,#+0 \ 0000018C F78FBD08 POPEQ {R0-R2,R4-R11,PC} 3001 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 3002 p->pkt.uin=0; \ 000001A8 00908BE5 STR R9,[R11, #+0] 3003 p->pkt.type=T_XTEXT_SET; \ 000001AC B450CBE1 STRH R5,[R11, #+4] 3004 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] 3005 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 3006 p->data[l1]=0; \ 000001D4 00009DE5 LDR R0,[SP, #+0] 3007 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 3008 SUBPROC((void *)SendAnswer,0,p); \ 000001F8 0B20A0E1 MOV R2,R11 \ 000001FC 0010A0E3 MOV R1,#+0 \ 00000200 0400A0E1 MOV R0,R4 \ 00000204 710100EF SWI +369 3009 tracktimer=0; \ ??set_my_xstatus_1: \ 00000208 0C918AE5 STR R9,[R10, #+268] 3010 GetTags(); \ 0000020C ........ _BLF GetTags,??GetTags??rA \ 00000210 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return 3011 } 3012 #endif 3013 } 3014 #ifdef NEWSGOLD 3015 extern const char playing[13]; 3016 \ In segment CODE, align 4, keep-with-next 3017 void set_my_xstatus2(void) 3018 { \ set_my_xstatus2: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 3019 TPKT *p; 3020 // char *s1; 3021 // char *s2; 3022 int l1; 3023 int l2; 3024 p=malloc(sizeof(PKT)+1); 3025 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 3026 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 3027 p->pkt.data_len=1; // Длина пакета: 1 байт 3028 p->data[0]=11; 3029 SUBPROC((void *)SendAnswer,0,p); \ 00000004 ........ LDR R6,??DataTable115 ;; SendAnswer 3030 // char *s1; 3031 char *sk2=malloc(256); 3032 // strcpy(s1, playing); 3033 // s1="Now playing:"; 3034 strcpy(sk2,teast2); 3035 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 3036 l2=strlen(sk2); \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 1B0000EF SWI +27 \ 00000074 00A0A0E1 MOV R10,R0 3037 if ((!playing)||(!sk2)) return; \ 00000078 000057E3 CMP R7,#+0 \ 0000007C F187BD08 POPEQ {R0,R4-R10,PC} 3038 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 3039 p->pkt.uin=0; \ 00000090 005084E5 STR R5,[R4, #+0] 3040 p->pkt.type=T_XTEXT_SET; \ 00000094 1A00A0E3 MOV R0,#+26 \ 00000098 B400C4E1 STRH R0,[R4, #+4] 3041 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] 3042 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 3043 p->data[l1]=0; \ 000000B8 040089E0 ADD R0,R9,R4 \ 000000BC 0850C0E5 STRB R5,[R0, #+8] 3044 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 3045 mfree(sk2); \ 000000D0 0700A0E1 MOV R0,R7 \ 000000D4 150000EF SWI +21 3046 SUBPROC((void *)SendAnswer,0,p); \ 000000D8 0420A0E1 MOV R2,R4 \ 000000DC 0010A0E3 MOV R1,#+0 \ 000000E0 0600A0E1 MOV R0,R6 \ 000000E4 710100EF SWI +369 3047 // mfree(s1); 3048 // mfree(s2); 3049 } \ 000000E8 F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??set_my_xstatus2_0: \ 000000EC ........ DC32 playing \ 000000F0 ........ DC32 teast2 3050 #endif \ In segment CODE, align 4, keep-with-next 3051 void to_develop(void) 3052 { 3053 if (silenthide) return; \ to_develop: \ 00000000 ........ LDR R0,??DataTable112 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 1C1190E5 LDR R1,[R0, #+284] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD18 POPNE {PC} 3054 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable114 ;; `?ed_contact==t) \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 040050E1 CMP R0,R4 \ 0000003C 7080BD18 POPNE {R4-R6,PC} 3071 { 3072 if (EDIT_IsBusy(data)) \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 1C0200EF SWI +540 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0400000A BEQ ??ReqAddMsgToChat_0 3073 { 3074 t->req_add=1; \ 00000050 0100A0E3 MOV R0,#+1 \ 00000054 6C0084E5 STR R0,[R4, #+108] 3075 #ifdef EVILFOX 3076 time_to_stop_t9=2; 3077 #else 3078 time_to_stop_t9=3; \ 00000058 0300A0E3 MOV R0,#+3 \ 0000005C 9C0185E5 STR R0,[R5, #+412] \ 00000060 7080BDE8 POP {R4-R6,PC} 3079 #endif 3080 } 3081 else 3082 { 3083 AddMsgToChat(data); \ ??ReqAddMsgToChat_0: \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 ........ BL AddMsgToChat 3084 DirectRedrawGUI_ID(edchat_id); \ 0000006C 740195E5 LDR R0,[R5, #+372] \ 00000070 400100EF SWI +320 3085 } 3086 } 3087 } 3088 } 3089 } 3090 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 3091 3092 GBSTMR develop; 3093 \ In segment CODE, align 4, keep-with-next 3094 void begin_to_develop() 3095 { \ begin_to_develop: \ 00000000 00402DE9 PUSH {LR} 3096 if(IsUnlocked()) \ 00000004 430000EF SWI +67 \ 00000008 000050E3 CMP R0,#+0 \ 0000000C 0100000A BEQ ??begin_to_develop_0 3097 to_develop(); \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ B to_develop ;; tailcall 3098 else 3099 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 + 6632 \ 00000020 6410A0E3 MOV R1,#+100 \ 00000024 4D0000EF SWI +77 3100 } \ 00000028 0080BDE8 POP {PC} ;; return \ ??begin_to_develop_1: \ 0000002C ........ DC32 begin_to_develop \ 00000030 ........ DC32 S_ICONS + 6632 3101 ////=================================comand lists 3102 int comanda; 3103 #ifdef EVILFOX 3104 #else 3105 char requests1[]="Sending online time..."; 3106 char requests2[]="Sending msg info..."; 3107 char requests3[]="Sending battery info..."; 3108 char requests4[]="Sending mod info..."; 3109 extern const int show_send_info; 3110 #endif 3111 char requests6[]="Sending offline info..."; 3112 extern const char away_msg4[24]; 3113 //#ifdef EVILFOX 3114 extern const unsigned int AUTOBOT_UIN; 3115 int autobot; 3116 //extern const 3117 char mod_info[266]; 3118 //char mod_info[]="mod based on revision 1845, mod date: 25.01.08 at 15:59! download from: http://evilfox.wab.ru/plus/naticq_mod_25.01.08_fix2.zip"; 3119 //#else 3120 //char mod_info[256];//="mod based on revision 1845, mod date: 20.02.08 at 17:11"; 3121 //#endif 3122 /* 3123 #ifdef NEWSGOLD 3124 unsigned char *addr = (unsigned char *)0xA003E410; 3125 #else 3126 unsigned char *addr = (unsigned char *)0xA000065C; 3127 #endif 3128 */ 3129 const char ipc_game_name[]="Combats"; 3130 IPC_REQ game_gipc; 3131 #define IPC_GAME_DATA 24 3132 \ In segment CODE, align 4, keep-with-next 3133 void AutobotInit() 3134 { 3135 if(autobot==1) \ AutobotInit: \ 00000000 ........ LDR R0,??DataTable112 ;; S_ICONS \ 00000004 38109FE5 LDR R1,??AutobotInit_0 ;; `?` \ 00000008 00402DE9 PUSH {LR} \ 0000000C A42190E5 LDR R2,[R0, #+420] \ 00000010 010052E3 CMP R2,#+1 \ 00000014 0400001A BNE ??AutobotInit_1 3136 { 3137 autobot=0; \ 00000018 0020A0E3 MOV R2,#+0 \ 0000001C A42180E5 STR R2,[R0, #+420] 3138 ShowMSG(1,(int)"Autobot Off"); \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 480100EF SWI +328 \ 00000028 0080BDE8 POP {PC} 3139 } 3140 else 3141 { 3142 autobot=1; \ ??AutobotInit_1: \ 0000002C 0120A0E3 MOV R2,#+1 \ 00000030 A42180E5 STR R2,[R0, #+420] 3143 ShowMSG(1,(int)"Autobot On"); \ 00000034 0C1081E2 ADD R1,R1,#+12 \ 00000038 0100A0E3 MOV R0,#+1 \ 0000003C 480100EF SWI +328 3144 } 3145 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??AutobotInit_0: \ 00000044 ........ DC32 `?` 3146 \ In segment CODE, align 4, keep-with-next 3147 void CheckComand(char *txt, CLIST *t, char *ddd) 3148 { \ CheckComand: \ 00000000 F44F2DE9 PUSH {R2,R4-R11,LR} 3149 comanda=1; \ 00000004 ........ LDR R5,??DataTable120 ;; S_ICONS 3150 sprintf(mod_info,"mod by Evilfox based on revision 1845, mod date: %s at %s && optimize by kluchnik from kluchnik :-D :-P",__DATE__,__TIME__); \ 00000008 ........ LDR R6,??DataTable114 ;; `?pkt.uin=t->uin; \ 00000114 0C0094E5 LDR R0,[R4, #+12] \ 00000118 00008AE5 STR R0,[R10, #+0] 3168 p->pkt.type=T_SENDMSG; \ 0000011C B480CAE1 STRH R8,[R10, #+4] 3169 p->pkt.data_len=strlen(hah); \ 00000120 0B00A0E1 MOV R0,R11 \ 00000124 1B0000EF SWI +27 \ 00000128 B600CAE1 STRH R0,[R10, #+6] 3170 strcpy(p->data,hah); \ 0000012C 0B10A0E1 MOV R1,R11 \ 00000130 08008AE2 ADD R0,R10,#+8 \ 00000134 1A0000EF SWI +26 3171 #ifdef EVILFOX 3172 SENDMSGCOUNT++; 3173 #else 3174 if(show_send_info) \ 00000138 60069FE5 LDR R0,??CheckComand_2+0x4 ;; show_send_info \ 0000013C 000090E5 LDR R0,[R0, #+0] \ 00000140 08D08DE2 ADD SP,SP,#+8 \ 00000144 000050E3 CMP R0,#+0 \ 00000148 D00095E5 LDR R0,[R5, #+208] \ 0000014C 010080E2 ADD R0,R0,#+1 \ 00000150 D00085E5 STR R0,[R5, #+208] \ 00000154 0900000A BEQ ??CheckComand_3 3175 AddStringToLog(t,0x01,requests1,I_str,(++SENDMSGCOUNT)&0x7FFF); \ 00000158 000009E0 AND R0,R9,R0 \ 0000015C 01002DE9 PUSH {R0} \ 00000160 1F3086E2 ADD R3,R6,#+31 \ 00000164 0110A0E3 MOV R1,#+1 \ 00000168 F800A0E3 MOV R0,#+248 \ 0000016C 640D80E3 ORR R0,R0,#0x1900 \ 00000170 052080E0 ADD R2,R0,R5 \ 00000174 0400A0E1 MOV R0,R4 \ 00000178 ........ BL AddStringToLog \ 0000017C 04D08DE2 ADD SP,SP,#+4 3176 else 3177 SENDMSGCOUNT++; 3178 #endif 3179 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_3: \ 00000180 0A20A0E1 MOV R2,R10 \ 00000184 0010A0E3 MOV R1,#+0 \ 00000188 0700A0E1 MOV R0,R7 \ 0000018C 710100EF SWI +369 3180 return; \ 00000190 F78FBDE8 POP {R0-R2,R4-R11,PC} 3181 } 3182 if(!strcmp(txt, "GET_MSG_INFO")) \ ??CheckComand_1: \ 00000194 941F86E2 ADD R1,R6,#+592 \ 00000198 0A00A0E1 MOV R0,R10 \ 0000019C 190000EF SWI +25 \ 000001A0 000050E3 CMP R0,#+0 \ 000001A4 2500001A BNE ??CheckComand_4 3183 { 3184 comanda=0; \ 000001A8 A0B185E5 STR R11,[R5, #+416] 3185 TPKT *p; 3186 char *send_txt=malloc(64); \ 000001AC 4000A0E3 MOV R0,#+64 \ 000001B0 140000EF SWI +20 \ 000001B4 00A0A0E1 MOV R10,R0 3187 sprintf(send_txt, "Отправлено сообщений: %d \n" 3188 "Принято сообщений: %d" 3189 , main2_count, main_count); \ 000001B8 ........ LDR R0,??DataTable116 ;; main_count \ 000001BC 881F86E2 ADD R1,R6,#+544 \ 000001C0 003090E5 LDR R3,[R0, #+0] \ 000001C4 ........ LDR R0,??DataTable117 ;; main2_count \ 000001C8 002090E5 LDR R2,[R0, #+0] \ 000001CC 0A00A0E1 MOV R0,R10 \ 000001D0 160000EF SWI +22 3190 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000001D4 0A00A0E1 MOV R0,R10 \ 000001D8 1B0000EF SWI +27 \ 000001DC 090080E2 ADD R0,R0,#+9 \ 000001E0 140000EF SWI +20 \ 000001E4 00B0A0E1 MOV R11,R0 3191 p->pkt.uin=t->uin; \ 000001E8 0C0094E5 LDR R0,[R4, #+12] \ 000001EC 00008BE5 STR R0,[R11, #+0] 3192 p->pkt.type=T_SENDMSG; \ 000001F0 B480CBE1 STRH R8,[R11, #+4] 3193 p->pkt.data_len=strlen(send_txt); \ 000001F4 0A00A0E1 MOV R0,R10 \ 000001F8 1B0000EF SWI +27 \ 000001FC B600CBE1 STRH R0,[R11, #+6] 3194 strcpy(p->data,send_txt); \ 00000200 0A10A0E1 MOV R1,R10 \ 00000204 08008BE2 ADD R0,R11,#+8 \ 00000208 1A0000EF SWI +26 3195 #ifdef EVILFOX 3196 SENDMSGCOUNT++; 3197 #else 3198 if(show_send_info) \ 0000020C 8C059FE5 LDR R0,??CheckComand_2+0x4 ;; show_send_info \ 00000210 000090E5 LDR R0,[R0, #+0] \ 00000214 000050E3 CMP R0,#+0 \ 00000218 D00095E5 LDR R0,[R5, #+208] \ 0000021C 010080E2 ADD R0,R0,#+1 \ 00000220 D00085E5 STR R0,[R5, #+208] \ 00000224 2F00000A BEQ ??CheckComand_5 3199 AddStringToLog(t,0x01,requests2,I_str,(++SENDMSGCOUNT)&0x7FFF); \ 00000228 000009E0 AND R0,R9,R0 \ 0000022C 01002DE9 PUSH {R0} \ 00000230 1F3086E2 ADD R3,R6,#+31 \ 00000234 0110A0E3 MOV R1,#+1 \ 00000238 1000A0E3 MOV R0,#+16 \ 0000023C 240000EA B ??CheckComand_6 3200 else 3201 SENDMSGCOUNT++; 3202 #endif 3203 SUBPROC((void *)SendAnswer,0,p); 3204 mfree(send_txt); 3205 return; 3206 } 3207 if(!strcmp(txt, "GET_MOD_INFO")) \ ??CheckComand_4: \ 00000240 981F86E2 ADD R1,R6,#+608 \ 00000244 0A00A0E1 MOV R0,R10 \ 00000248 190000EF SWI +25 \ 0000024C 000050E3 CMP R0,#+0 \ 00000250 2B00001A BNE ??CheckComand_7 3208 { 3209 comanda=0; \ 00000254 A0B185E5 STR R11,[R5, #+416] 3210 TPKT *p; 3211 char *send_txt=malloc(256); \ 00000258 400FA0E3 MOV R0,#+256 \ 0000025C 140000EF SWI +20 3212 #ifdef EVILFOX 3213 // sprintf(I_UIN, "uin%d", t->uin); 3214 strcpy(I_UIN, t->name); 3215 if(strstr(ignor_list,I_UIN)==0) 3216 { 3217 strcpy(send_txt, mod_info); 3218 } 3219 else 3220 strcpy(send_txt, "sorry! you are not autorized to see this info"); 3221 #else 3222 strcpy(send_txt, mod_info); \ 00000260 04109DE5 LDR R1,[SP, #+4] \ 00000264 00A0A0E1 MOV R10,R0 \ 00000268 1A0000EF SWI +26 3223 #endif 3224 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 0000026C 0A00A0E1 MOV R0,R10 \ 00000270 1B0000EF SWI +27 \ 00000274 090080E2 ADD R0,R0,#+9 \ 00000278 140000EF SWI +20 \ 0000027C 00B0A0E1 MOV R11,R0 3225 p->pkt.uin=t->uin; \ 00000280 0C0094E5 LDR R0,[R4, #+12] \ 00000284 00008BE5 STR R0,[R11, #+0] 3226 p->pkt.type=T_SENDMSG; \ 00000288 B480CBE1 STRH R8,[R11, #+4] 3227 p->pkt.data_len=strlen(send_txt); \ 0000028C 0A00A0E1 MOV R0,R10 \ 00000290 1B0000EF SWI +27 \ 00000294 B600CBE1 STRH R0,[R11, #+6] 3228 strcpy(p->data,send_txt); \ 00000298 0A10A0E1 MOV R1,R10 \ 0000029C 08008BE2 ADD R0,R11,#+8 \ 000002A0 1A0000EF SWI +26 3229 #ifdef EVILFOX 3230 SENDMSGCOUNT++; 3231 #else 3232 if(show_send_info) \ 000002A4 F4049FE5 LDR R0,??CheckComand_2+0x4 ;; show_send_info \ 000002A8 000090E5 LDR R0,[R0, #+0] \ 000002AC 000050E3 CMP R0,#+0 \ 000002B0 D00095E5 LDR R0,[R5, #+208] \ 000002B4 010080E2 ADD R0,R0,#+1 \ 000002B8 D00085E5 STR R0,[R5, #+208] \ 000002BC 0900000A BEQ ??CheckComand_5 3233 AddStringToLog(t,0x01,requests4,I_str,(++SENDMSGCOUNT)&0x7FFF); \ 000002C0 000009E0 AND R0,R9,R0 \ 000002C4 01002DE9 PUSH {R0} \ 000002C8 1F3086E2 ADD R3,R6,#+31 \ 000002CC 0110A0E3 MOV R1,#+1 \ 000002D0 3C00A0E3 MOV R0,#+60 \ ??CheckComand_6: \ 000002D4 680D80E3 ORR R0,R0,#0x1A00 \ 000002D8 052080E0 ADD R2,R0,R5 \ 000002DC 0400A0E1 MOV R0,R4 \ 000002E0 ........ BL AddStringToLog \ 000002E4 04D08DE2 ADD SP,SP,#+4 3234 else 3235 SENDMSGCOUNT++; 3236 #endif 3237 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_5: \ 000002E8 0B20A0E1 MOV R2,R11 \ 000002EC 0010A0E3 MOV R1,#+0 \ 000002F0 0700A0E1 MOV R0,R7 \ 000002F4 710100EF SWI +369 3238 mfree(send_txt); \ 000002F8 0A00A0E1 MOV R0,R10 \ 000002FC 150000EF SWI +21 3239 return; \ 00000300 F78FBDE8 POP {R0-R2,R4-R11,PC} 3240 } 3241 if(!strcmp(txt, "GET_BAT_INFO")) \ ??CheckComand_7: \ 00000304 A21F86E2 ADD R1,R6,#+648 \ 00000308 0A00A0E1 MOV R0,R10 \ 0000030C 190000EF SWI +25 \ 00000310 000050E3 CMP R0,#+0 \ 00000314 2100001A BNE ??CheckComand_8 3242 { 3243 comanda=0; \ 00000318 A0B185E5 STR R11,[R5, #+416] 3244 TPKT *p; 3245 int bat; 3246 bat=*RamCap(); \ 0000031C C88000EF SWI +32968 \ 00000320 B0B0D0E1 LDRH R11,[R0, #+0] 3247 char *send_txt=malloc(64); \ 00000324 4000A0E3 MOV R0,#+64 \ 00000328 140000EF SWI +20 \ 0000032C 00A0A0E1 MOV R10,R0 3248 sprintf(send_txt, "battery: %d percents", bat); \ 00000330 0B20A0E1 MOV R2,R11 \ 00000334 9C1F86E2 ADD R1,R6,#+624 \ 00000338 160000EF SWI +22 3249 p=malloc(sizeof(PKT)+21+1); \ 0000033C 1E00A0E3 MOV R0,#+30 \ 00000340 140000EF SWI +20 \ 00000344 00B0A0E1 MOV R11,R0 3250 p->pkt.uin=t->uin; \ 00000348 0C0094E5 LDR R0,[R4, #+12] \ 0000034C 00008BE5 STR R0,[R11, #+0] 3251 p->pkt.type=T_SENDMSG; \ 00000350 B480CBE1 STRH R8,[R11, #+4] 3252 p->pkt.data_len=strlen(send_txt); \ 00000354 0A00A0E1 MOV R0,R10 \ 00000358 1B0000EF SWI +27 \ 0000035C B600CBE1 STRH R0,[R11, #+6] 3253 strcpy(p->data,send_txt); \ 00000360 0A10A0E1 MOV R1,R10 \ 00000364 08008BE2 ADD R0,R11,#+8 \ 00000368 1A0000EF SWI +26 3254 #ifdef EVILFOX 3255 SENDMSGCOUNT++; 3256 #else 3257 if(show_send_info) \ 0000036C 2C049FE5 LDR R0,??CheckComand_2+0x4 ;; show_send_info \ 00000370 000090E5 LDR R0,[R0, #+0] \ 00000374 000050E3 CMP R0,#+0 \ 00000378 D00095E5 LDR R0,[R5, #+208] \ 0000037C 010080E2 ADD R0,R0,#+1 \ 00000380 D00085E5 STR R0,[R5, #+208] \ 00000384 D7FFFF0A BEQ ??CheckComand_5 3258 AddStringToLog(t,0x01,requests3,I_str,(++SENDMSGCOUNT)&0x7FFF); \ 00000388 000009E0 AND R0,R9,R0 \ 0000038C 01002DE9 PUSH {R0} \ 00000390 1F3086E2 ADD R3,R6,#+31 \ 00000394 0110A0E3 MOV R1,#+1 \ 00000398 2400A0E3 MOV R0,#+36 \ 0000039C CCFFFFEA B ??CheckComand_6 3259 else 3260 SENDMSGCOUNT++; 3261 #endif 3262 SUBPROC((void *)SendAnswer,0,p); 3263 mfree(send_txt); 3264 return; 3265 } 3266 if(away_m==1) \ ??CheckComand_8: \ 000003A0 B400A0E3 MOV R0,#+180 \ 000003A4 500D80E3 ORR R0,R0,#0x1400 \ 000003A8 05A080E0 ADD R10,R0,R5 \ 000003AC E80095E5 LDR R0,[R5, #+232] \ 000003B0 010050E3 CMP R0,#+1 \ 000003B4 3300001A BNE ??CheckComand_9 3267 { 3268 comanda=1; 3269 TPKT *p; 3270 if(inp_away_m)//Если ввели текст то выводим его,иначе из конфига \ 000003B8 183195E5 LDR R3,[R5, #+280] \ 000003BC E0239FE5 LDR R2,??CheckComand_2+0x8 ;; away_msg4 \ 000003C0 A00185E5 STR R0,[R5, #+416] \ 000003C4 BC00A0E3 MOV R0,#+188 \ 000003C8 540D80E3 ORR R0,R0,#0x1500 \ 000003CC 051080E0 ADD R1,R0,R5 \ 000003D0 02002DE9 PUSH {R1} \ 000003D4 000053E3 CMP R3,#+0 3271 sprintf(away_msg, "Автоответчик: %s %s! %s %s", away_msg4, ddd, inp_away_msg2, away_msg_time); \ 000003D8 E4109515 LDRNE R1,[R5, #+228] \ 000003DC A60FA0E3 MOV R0,#+664 3272 else 3273 sprintf(away_msg, "Автоответчик: %s %s! %s %s", away_msg4, ddd, away_msg2, away_msg_time); \ 000003E0 ........ LDREQ R1,??DataTable118 ;; away_msg2 \ 000003E4 02002DE9 PUSH {R1} \ 000003E8 10309DE5 LDR R3,[SP, #+16] \ 000003EC 061080E0 ADD R1,R0,R6 \ 000003F0 0A00A0E1 MOV R0,R10 \ 000003F4 160000EF SWI +22 \ 000003F8 08D08DE2 ADD SP,SP,#+8 3274 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 000003FC 0A00A0E1 MOV R0,R10 \ 00000400 1B0000EF SWI +27 \ 00000404 090080E2 ADD R0,R0,#+9 \ 00000408 140000EF SWI +20 \ 0000040C 00B0A0E1 MOV R11,R0 3275 p->pkt.uin=t->uin; \ 00000410 0C0094E5 LDR R0,[R4, #+12] \ 00000414 00008BE5 STR R0,[R11, #+0] 3276 p->pkt.type=T_SENDMSG; \ 00000418 B480CBE1 STRH R8,[R11, #+4] 3277 p->pkt.data_len=strlen(away_msg); \ 0000041C 0A00A0E1 MOV R0,R10 \ 00000420 1B0000EF SWI +27 \ 00000424 B600CBE1 STRH R0,[R11, #+6] 3278 strcpy(p->data,away_msg); \ 00000428 0A10A0E1 MOV R1,R10 \ 0000042C 08008BE2 ADD R0,R11,#+8 \ 00000430 1A0000EF SWI +26 3279 #ifdef EVILFOX 3280 SENDMSGCOUNT++; 3281 #else 3282 if(show_send_info) \ 00000434 64039FE5 LDR R0,??CheckComand_2+0x4 ;; show_send_info \ 00000438 000090E5 LDR R0,[R0, #+0] \ 0000043C 000050E3 CMP R0,#+0 \ 00000440 D00095E5 LDR R0,[R5, #+208] \ 00000444 010080E2 ADD R0,R0,#+1 \ 00000448 D00085E5 STR R0,[R5, #+208] \ 0000044C 0900000A BEQ ??CheckComand_10 3283 AddStringToLog(t,0x01,requests6,I_str,(++SENDMSGCOUNT)&0x7FFF); \ 00000450 000009E0 AND R0,R9,R0 \ 00000454 01002DE9 PUSH {R0} \ 00000458 1F3086E2 ADD R3,R6,#+31 \ 0000045C 0110A0E3 MOV R1,#+1 \ 00000460 5000A0E3 MOV R0,#+80 \ 00000464 680D80E3 ORR R0,R0,#0x1A00 \ 00000468 052080E0 ADD R2,R0,R5 \ 0000046C 0400A0E1 MOV R0,R4 \ 00000470 ........ BL AddStringToLog \ 00000474 04D08DE2 ADD SP,SP,#+4 3284 else 3285 SENDMSGCOUNT++; 3286 #endif 3287 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_10: \ 00000478 0B20A0E1 MOV R2,R11 \ 0000047C 0010A0E3 MOV R1,#+0 \ 00000480 0700A0E1 MOV R0,R7 \ 00000484 710100EF SWI +369 \ ??CheckComand_9: \ 00000488 18139FE5 LDR R1,??CheckComand_2+0xC ;; AUTOBOT_UIN \ 0000048C 0C0094E5 LDR R0,[R4, #+12] \ 00000490 001091E5 LDR R1,[R1, #+0] \ 00000494 010050E1 CMP R0,R1 \ 00000498 5D00001A BNE ??CheckComand_11 \ 0000049C A40195E5 LDR R0,[R5, #+420] \ 000004A0 000050E3 CMP R0,#+0 \ 000004A4 5A00000A BEQ ??CheckComand_11 3288 } 3289 //#ifdef EVILFOX 3290 if((t->uin==AUTOBOT_UIN)&&(autobot)) 3291 { 3292 TPKT *p; 3293 if(t->bot_msg==0) sprintf(away_msg, "Привет"); \ 000004A8 580094E5 LDR R0,[R4, #+88] \ 000004AC 000050E3 CMP R0,#+0 \ 000004B0 0400001A BNE ??CheckComand_12 \ 000004B4 1C00A0E3 MOV R0,#+28 \ 000004B8 500E80E3 ORR R0,R0,#0x500 \ 000004BC 061080E0 ADD R1,R0,R6 \ 000004C0 0A00A0E1 MOV R0,R10 \ 000004C4 160000EF SWI +22 3294 if(t->bot_msg==1) sprintf(away_msg, "думаешь?!"); \ ??CheckComand_12: \ 000004C8 580094E5 LDR R0,[R4, #+88] \ 000004CC 010050E3 CMP R0,#+1 \ 000004D0 0200001A BNE ??CheckComand_13 \ 000004D4 AD1F86E2 ADD R1,R6,#+692 \ 000004D8 0A00A0E1 MOV R0,R10 \ 000004DC 160000EF SWI +22 3295 if(t->bot_msg==2) sprintf(away_msg, "да что ты говоришь"); \ ??CheckComand_13: \ 000004E0 580094E5 LDR R0,[R4, #+88] \ 000004E4 020050E3 CMP R0,#+2 \ 000004E8 0200001A BNE ??CheckComand_14 \ 000004EC B01F86E2 ADD R1,R6,#+704 \ 000004F0 0A00A0E1 MOV R0,R10 \ 000004F4 160000EF SWI +22 3296 if(t->bot_msg==3) sprintf(away_msg, "странно"); \ ??CheckComand_14: \ 000004F8 580094E5 LDR R0,[R4, #+88] \ 000004FC 030050E3 CMP R0,#+3 \ 00000500 0200001A BNE ??CheckComand_15 \ 00000504 B51F86E2 ADD R1,R6,#+724 \ 00000508 0A00A0E1 MOV R0,R10 \ 0000050C 160000EF SWI +22 3297 if(t->bot_msg==4) sprintf(away_msg, "ты так думаешь?"); \ ??CheckComand_15: \ 00000510 580094E5 LDR R0,[R4, #+88] \ 00000514 040050E3 CMP R0,#+4 \ 00000518 0200001A BNE ??CheckComand_16 \ 0000051C B71F86E2 ADD R1,R6,#+732 \ 00000520 0A00A0E1 MOV R0,R10 \ 00000524 160000EF SWI +22 3298 if(t->bot_msg==5) sprintf(away_msg, "может быть"); \ ??CheckComand_16: \ 00000528 580094E5 LDR R0,[R4, #+88] \ 0000052C 050050E3 CMP R0,#+5 \ 00000530 0200001A BNE ??CheckComand_17 \ 00000534 BB1F86E2 ADD R1,R6,#+748 \ 00000538 0A00A0E1 MOV R0,R10 \ 0000053C 160000EF SWI +22 3299 if(t->bot_msg==6) sprintf(away_msg, "да нахрен"); \ ??CheckComand_17: \ 00000540 580094E5 LDR R0,[R4, #+88] \ 00000544 060050E3 CMP R0,#+6 \ 00000548 0200001A BNE ??CheckComand_18 \ 0000054C BE1F86E2 ADD R1,R6,#+760 \ 00000550 0A00A0E1 MOV R0,R10 \ 00000554 160000EF SWI +22 3300 if(t->bot_msg==7) sprintf(away_msg, "конечна"); \ ??CheckComand_18: \ 00000558 580094E5 LDR R0,[R4, #+88] \ 0000055C 070050E3 CMP R0,#+7 \ 00000560 0200001A BNE ??CheckComand_19 \ 00000564 C11F86E2 ADD R1,R6,#+772 \ 00000568 0A00A0E1 MOV R0,R10 \ 0000056C 160000EF SWI +22 3301 if(t->bot_msg==8) sprintf(away_msg, "почему нет"); \ ??CheckComand_19: \ 00000570 580094E5 LDR R0,[R4, #+88] \ 00000574 080050E3 CMP R0,#+8 \ 00000578 0200001A BNE ??CheckComand_20 \ 0000057C C31F86E2 ADD R1,R6,#+780 \ 00000580 0A00A0E1 MOV R0,R10 \ 00000584 160000EF SWI +22 3302 t->bot_msg++; \ ??CheckComand_20: \ 00000588 580094E5 LDR R0,[R4, #+88] \ 0000058C 010080E2 ADD R0,R0,#+1 \ 00000590 580084E5 STR R0,[R4, #+88] 3303 if(t->bot_msg==9) \ 00000594 090050E3 CMP R0,#+9 3304 t->bot_msg=1; \ 00000598 0100A003 MOVEQ R0,#+1 \ 0000059C 58008405 STREQ R0,[R4, #+88] 3305 // strcpy(away_msg, c); 3306 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 000005A0 0A00A0E1 MOV R0,R10 \ 000005A4 1B0000EF SWI +27 \ 000005A8 090080E2 ADD R0,R0,#+9 \ 000005AC 140000EF SWI +20 \ 000005B0 00B0A0E1 MOV R11,R0 3307 p->pkt.uin=t->uin; \ 000005B4 0C0094E5 LDR R0,[R4, #+12] \ 000005B8 00008BE5 STR R0,[R11, #+0] 3308 p->pkt.type=T_SENDMSG; \ 000005BC B480CBE1 STRH R8,[R11, #+4] 3309 p->pkt.data_len=strlen(away_msg); \ 000005C0 0A00A0E1 MOV R0,R10 \ 000005C4 1B0000EF SWI +27 \ 000005C8 B600CBE1 STRH R0,[R11, #+6] 3310 strcpy(p->data,away_msg); \ 000005CC 0A10A0E1 MOV R1,R10 \ 000005D0 08008BE2 ADD R0,R11,#+8 \ 000005D4 1A0000EF SWI +26 3311 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF); \ 000005D8 D00095E5 LDR R0,[R5, #+208] \ 000005DC 1F3086E2 ADD R3,R6,#+31 \ 000005E0 010080E2 ADD R0,R0,#+1 \ 000005E4 D00085E5 STR R0,[R5, #+208] \ 000005E8 000009E0 AND R0,R9,R0 \ 000005EC 01002DE9 PUSH {R0} \ 000005F0 0A20A0E1 MOV R2,R10 \ 000005F4 0110A0E3 MOV R1,#+1 \ 000005F8 0400A0E1 MOV R0,R4 \ 000005FC ........ BL AddStringToLog 3312 SUBPROC((void *)SendAnswer,0,p); \ 00000600 0B20A0E1 MOV R2,R11 \ 00000604 0010A0E3 MOV R1,#+0 \ 00000608 0700A0E1 MOV R0,R7 \ 0000060C 710100EF SWI +369 \ 00000610 04D08DE2 ADD SP,SP,#+4 3313 } 3314 extern const int autobot_kel; 3315 if((t->uin==334492880)&&(autobot_kel)) \ ??CheckComand_11: \ 00000614 0C0094E5 LDR R0,[R4, #+12] \ 00000618 8C119FE5 LDR R1,??CheckComand_2+0x10 ;; 0x13eff4d0 \ 0000061C 010050E1 CMP R0,R1 \ 00000620 F78FBD18 POPNE {R0-R2,R4-R11,PC} \ 00000624 84019FE5 LDR R0,??CheckComand_2+0x14 ;; autobot_kel \ 00000628 000090E5 LDR R0,[R0, #+0] \ 0000062C 000050E3 CMP R0,#+0 \ 00000630 F78FBD08 POPEQ {R0-R2,R4-R11,PC} 3316 { 3317 TPKT *p; 3318 //if(t->bot_msg==0) sprintf(away_msg, "Привет"); 3319 if(t->bot_msg==0) sprintf(away_msg, "думаешь?!"); \ 00000634 580094E5 LDR R0,[R4, #+88] \ 00000638 000050E3 CMP R0,#+0 \ 0000063C 0200001A BNE ??CheckComand_21 \ 00000640 AD1F86E2 ADD R1,R6,#+692 \ 00000644 0A00A0E1 MOV R0,R10 \ 00000648 160000EF SWI +22 3320 if(t->bot_msg==1) sprintf(away_msg, "да что ты говоришь"); \ ??CheckComand_21: \ 0000064C 580094E5 LDR R0,[R4, #+88] \ 00000650 010050E3 CMP R0,#+1 \ 00000654 0200001A BNE ??CheckComand_22 \ 00000658 B01F86E2 ADD R1,R6,#+704 \ 0000065C 0A00A0E1 MOV R0,R10 \ 00000660 160000EF SWI +22 3321 if(t->bot_msg==2) sprintf(away_msg, "странно"); \ ??CheckComand_22: \ 00000664 580094E5 LDR R0,[R4, #+88] \ 00000668 020050E3 CMP R0,#+2 \ 0000066C 0200001A BNE ??CheckComand_23 \ 00000670 B51F86E2 ADD R1,R6,#+724 \ 00000674 0A00A0E1 MOV R0,R10 \ 00000678 160000EF SWI +22 3322 if(t->bot_msg==3) sprintf(away_msg, "угу"); \ ??CheckComand_23: \ 0000067C 580094E5 LDR R0,[R4, #+88] \ 00000680 030050E3 CMP R0,#+3 \ 00000684 0200001A BNE ??CheckComand_24 \ 00000688 431F8FE2 ADR R1,??CheckComand_2 ;; "угу" \ 0000068C 0A00A0E1 MOV R0,R10 \ 00000690 160000EF SWI +22 3323 if(t->bot_msg==4) sprintf(away_msg, "Не еби мозг!"); \ ??CheckComand_24: \ 00000694 580094E5 LDR R0,[R4, #+88] \ 00000698 040050E3 CMP R0,#+4 \ 0000069C 0200001A BNE ??CheckComand_25 \ 000006A0 C61F86E2 ADD R1,R6,#+792 \ 000006A4 0A00A0E1 MOV R0,R10 \ 000006A8 160000EF SWI +22 3324 if(t->bot_msg==5) sprintf(away_msg, "иди на хуй!!"); \ ??CheckComand_25: \ 000006AC 580094E5 LDR R0,[R4, #+88] \ 000006B0 050050E3 CMP R0,#+5 \ 000006B4 0200001A BNE ??CheckComand_26 \ 000006B8 CA1F86E2 ADD R1,R6,#+808 \ 000006BC 0A00A0E1 MOV R0,R10 \ 000006C0 160000EF SWI +22 3325 if(t->bot_msg==6) sprintf(away_msg, "сука"); \ ??CheckComand_26: \ 000006C4 580094E5 LDR R0,[R4, #+88] \ 000006C8 060050E3 CMP R0,#+6 \ 000006CC 0200001A BNE ??CheckComand_27 \ 000006D0 CE1F86E2 ADD R1,R6,#+824 \ 000006D4 0A00A0E1 MOV R0,R10 \ 000006D8 160000EF SWI +22 3326 if(t->bot_msg==7) sprintf(away_msg, "заебал"); \ ??CheckComand_27: \ 000006DC 580094E5 LDR R0,[R4, #+88] \ 000006E0 070050E3 CMP R0,#+7 \ 000006E4 0200001A BNE ??CheckComand_28 \ 000006E8 D01F86E2 ADD R1,R6,#+832 \ 000006EC 0A00A0E1 MOV R0,R10 \ 000006F0 160000EF SWI +22 3327 if(t->bot_msg==8) sprintf(away_msg, "отъебись!!!!!гад!!*FUCK_YOU*"); \ ??CheckComand_28: \ 000006F4 580094E5 LDR R0,[R4, #+88] \ 000006F8 080050E3 CMP R0,#+8 \ 000006FC 0200001A BNE ??CheckComand_29 \ 00000700 D21F86E2 ADD R1,R6,#+840 \ 00000704 0A00A0E1 MOV R0,R10 \ 00000708 160000EF SWI +22 3328 t->bot_msg++; \ ??CheckComand_29: \ 0000070C 580094E5 LDR R0,[R4, #+88] \ 00000710 010080E2 ADD R0,R0,#+1 \ 00000714 580084E5 STR R0,[R4, #+88] 3329 if(t->bot_msg==9) \ 00000718 090050E3 CMP R0,#+9 3330 t->bot_msg=1; \ 0000071C 0100A003 MOVEQ R0,#+1 \ 00000720 58008405 STREQ R0,[R4, #+88] 3331 // strcpy(away_msg, c); 3332 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 00000724 0A00A0E1 MOV R0,R10 \ 00000728 1B0000EF SWI +27 \ 0000072C 090080E2 ADD R0,R0,#+9 \ 00000730 140000EF SWI +20 \ 00000734 00B0A0E1 MOV R11,R0 3333 p->pkt.uin=t->uin; \ 00000738 0C0094E5 LDR R0,[R4, #+12] \ 0000073C 00008BE5 STR R0,[R11, #+0] 3334 p->pkt.type=T_SENDMSG; \ 00000740 B480CBE1 STRH R8,[R11, #+4] 3335 p->pkt.data_len=strlen(away_msg); \ 00000744 0A00A0E1 MOV R0,R10 \ 00000748 1B0000EF SWI +27 \ 0000074C B600CBE1 STRH R0,[R11, #+6] 3336 strcpy(p->data,away_msg); \ 00000750 0A10A0E1 MOV R1,R10 \ 00000754 08008BE2 ADD R0,R11,#+8 \ 00000758 1A0000EF SWI +26 3337 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF); \ 0000075C D00095E5 LDR R0,[R5, #+208] \ 00000760 1F3086E2 ADD R3,R6,#+31 \ 00000764 010080E2 ADD R0,R0,#+1 \ 00000768 D00085E5 STR R0,[R5, #+208] \ 0000076C 000009E0 AND R0,R9,R0 \ 00000770 01002DE9 PUSH {R0} \ 00000774 0A20A0E1 MOV R2,R10 \ 00000778 0110A0E3 MOV R1,#+1 \ 0000077C 0400A0E1 MOV R0,R4 \ 00000780 ........ BL AddStringToLog 3338 SUBPROC((void *)SendAnswer,0,p); \ 00000784 0B20A0E1 MOV R2,R11 \ 00000788 0010A0E3 MOV R1,#+0 \ 0000078C 0700A0E1 MOV R0,R7 \ 00000790 710100EF SWI +369 \ 00000794 04D08DE2 ADD SP,SP,#+4 \ 00000798 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return \ ??CheckComand_2: \ 0000079C F3E3F300 DC8 "угу" \ 000007A0 ........ DC32 show_send_info \ 000007A4 ........ DC32 away_msg4 \ 000007A8 ........ DC32 AUTOBOT_UIN \ 000007AC D0F4EF13 DC32 0x13eff4d0 \ 000007B0 ........ DC32 autobot_kel 3339 } 3340 3341 //#endif 3342 } 3343 //===========================komand list end 3344 \ In segment DATA_Z, align 4, align-sorted 3345 char INC_Nick[32]; \ INC_Nick: \ 00000000 DS8 32 3346 char show_nick[32]; 3347 int INC_show; 3348 #ifdef ELKA 3349 int font =9; 3350 #else 3351 int font= 4; 3352 #endif 3353 const char color[4]={255,255,255,100}; 3354 \ In segment CODE, align 4, keep-with-next 3355 void show_pp_sender() 3356 { \ show_pp_sender: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 3357 if(INC_show>0) \ 00000004 ........ LDR R4,??DataTable120 ;; S_ICONS \ 00000008 A80194E5 LDR R0,[R4, #+424] \ 0000000C 010050E3 CMP R0,#+1 \ 00000010 F081BDB8 POPLT {R4-R8,PC} 3358 { 3359 WSHDR *ws=AllocWS(256); \ 00000014 400FA0E3 MOV R0,#+256 \ 00000018 250100EF SWI +293 \ 0000001C 0050A0E1 MOV R5,R0 3360 ascii2ws(ws,show_nick); \ 00000020 7400A0E3 MOV R0,#+116 \ 00000024 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000028 041080E0 ADD R1,R0,R4 \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 ........ _BLF ascii2ws,??ascii2ws??rA 3361 DrawRectangle(0,0,Get_WS_width(ws,font)+2,GetFontYSIZE(font)+2,0,GetPaletteAdrByColorIndex(1),GetPaletteAdrByColorIndex(1)); \ 00000034 0100A0E3 MOV R0,#+1 \ 00000038 2E0100EF SWI +302 \ 0000003C 0060A0E1 MOV R6,R0 \ 00000040 0100A0E3 MOV R0,#+1 \ 00000044 2E0100EF SWI +302 \ 00000048 0070A0E1 MOV R7,R0 \ 0000004C AC0194E5 LDR R0,[R4, #+428] \ 00000050 C50100EF SWI +453 \ 00000054 AC1194E5 LDR R1,[R4, #+428] \ 00000058 0080A0E1 MOV R8,R0 \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 080200EF SWI +520 \ 00000064 40002DE9 PUSH {R6} \ 00000068 80002DE9 PUSH {R7} \ 0000006C 0010A0E3 MOV R1,#+0 \ 00000070 02002DE9 PUSH {R1} \ 00000074 023088E2 ADD R3,R8,#+2 \ 00000078 022080E2 ADD R2,R0,#+2 \ 0000007C 0000A0E3 MOV R0,#+0 \ 00000080 B40100EF SWI +436 3362 DrawString(ws,1,1,1+Get_WS_width(ws,font)+2,1+GetFontYSIZE(font),font,0,( char*) color,GetPaletteAdrByColorIndex(23)); \ 00000084 1700A0E3 MOV R0,#+23 \ 00000088 2E0100EF SWI +302 \ 0000008C 0060A0E1 MOV R6,R0 \ 00000090 AC0194E5 LDR R0,[R4, #+428] \ 00000094 C50100EF SWI +453 \ 00000098 AC1194E5 LDR R1,[R4, #+428] \ 0000009C 0070A0E1 MOV R7,R0 \ 000000A0 0500A0E1 MOV R0,R5 \ 000000A4 080200EF SWI +520 \ 000000A8 64109FE5 LDR R1,??show_pp_sender_0 ;; color \ 000000AC 40002DE9 PUSH {R6} \ 000000B0 02002DE9 PUSH {R1} \ 000000B4 033080E2 ADD R3,R0,#+3 \ 000000B8 0120A0E3 MOV R2,#+1 \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 0010A0E3 MOV R1,#+0 \ 000000C4 02002DE9 PUSH {R1} \ 000000C8 AC1194E5 LDR R1,[R4, #+428] \ 000000CC 02002DE9 PUSH {R1} \ 000000D0 011087E2 ADD R1,R7,#+1 \ 000000D4 02002DE9 PUSH {R1} \ 000000D8 0210A0E1 MOV R1,R2 \ 000000DC 4C0100EF SWI +332 3363 FreeWS(ws); \ 000000E0 0500A0E1 MOV R0,R5 \ 000000E4 290100EF SWI +297 3364 INC_show--; \ 000000E8 A80194E5 LDR R0,[R4, #+424] 3365 GBS_StartTimerProc(&develop, 10, show_pp_sender); \ 000000EC 24209FE5 LDR R2,??show_pp_sender_0+0x4 ;; show_pp_sender \ 000000F0 010040E2 SUB R0,R0,#+1 \ 000000F4 A80184E5 STR R0,[R4, #+424] \ 000000F8 0A10A0E3 MOV R1,#+10 \ 000000FC E800A0E3 MOV R0,#+232 \ 00000100 640D80E3 ORR R0,R0,#0x1900 \ 00000104 040080E0 ADD R0,R0,R4 \ 00000108 4D0000EF SWI +77 \ 0000010C 20D08DE2 ADD SP,SP,#+32 3366 } 3367 } \ 00000110 F081BDE8 POP {R4-R8,PC} ;; return \ ??show_pp_sender_0: \ 00000114 ........ DC32 color \ 00000118 ........ DC32 show_pp_sender 3368 3369 extern const int SHOW_ACTIVE; 3370 \ In segment CODE, align 4, keep-with-next 3371 void Get_Online_total() 3372 { 3373 CLIST *t; 3374 kopa_online=0; \ Get_Online_total: \ 00000000 ........ LDR R0,??DataTable120 ;; S_ICONS \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 801180E5 STR R1,[R0, #+384] 3375 kopa_kontaktu=0; \ 0000000C 841180E5 STR R1,[R0, #+388] 3376 t=(CLIST *)(&cltop); \ 00000010 5A1F80E2 ADD R1,R0,#+360 \ 00000014 FF30A0E3 MOV R3,#+255 \ 00000018 FF3C83E3 ORR R3,R3,#0xFF00 \ 0000001C 0A0000EA B ??Get_Online_total_0 3377 while(t=(CLIST *)(t->next)) 3378 { 3379 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 3380 { 3381 kopa_online++; \ 0000002C 802190E5 LDR R2,[R0, #+384] \ 00000030 012082E2 ADD R2,R2,#+1 \ 00000034 802180E5 STR R2,[R0, #+384] 3382 if (t->state!=65535) kopa_kontaktu++; \ 00000038 B425D1E1 LDRH R2,[R1, #+84] \ 0000003C 030052E1 CMP R2,R3 \ 00000040 84219015 LDRNE R2,[R0, #+388] \ 00000044 01208212 ADDNE R2,R2,#+1 \ 00000048 84218015 STRNE R2,[R0, #+388] 3383 } 3384 } \ ??Get_Online_total_0: \ 0000004C 001091E5 LDR R1,[R1, #+0] \ 00000050 000051E3 CMP R1,#+0 \ 00000054 F1FFFF1A BNE ??Get_Online_total_1 3385 } \ 00000058 1EFF2FE1 BX LR ;; return 3386 \ In segment CODE, align 4, keep-with-next 3387 ProcessPacket(TPKT *p) 3388 { \ ProcessPacket: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 4CDF4DE2 SUB SP,SP,#+304 3389 extern const int VIBR_TYPE, VIBR_ON_CONNECT; 3390 CLIST *t; 3391 LOGQ *q; 3392 char s[256]; 3393 switch(p->pkt.type) \ 00000008 ........ LDR R5,??DataTable134 ;; `?pkt.uin) \ ??ProcessPacket_3: \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 1100000A BEQ ??ProcessPacket_4 3401 { 3402 if ((t=FindContactByUin(p->pkt.uin))) \ 00000090 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000094 0090B0E1 MOVS R9,R0 \ 00000098 0A00000A BEQ ??ProcessPacket_5 3403 { 3404 // t->state=0xFFFF; 3405 strncpy(t->name,p->data,63); \ 0000009C 3F20A0E3 MOV R2,#+63 \ 000000A0 081084E2 ADD R1,R4,#+8 \ 000000A4 140089E2 ADD R0,R9,#+20 \ 000000A8 160100EF SWI +278 3406 t->group=GROUP_CACHE; \ 000000AC 6C0197E5 LDR R0,[R7, #+364] \ 000000B0 100089E5 STR R0,[R9, #+16] 3407 ChangeContactPos(t); \ ??ProcessPacket_6: \ 000000B4 0900A0E1 MOV R0,R9 \ 000000B8 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3408 RecountMenu(t); \ 000000BC 0900A0E1 MOV R0,R9 \ ??ProcessPacket_7: \ 000000C0 ........ BL RecountMenu \ 000000C4 E50100EA B ??ProcessPacket_1 3409 } 3410 else 3411 { 3412 RecountMenu(AddContact(p->pkt.uin,p->data)); \ ??ProcessPacket_5: \ 000000C8 000094E5 LDR R0,[R4, #+0] \ 000000CC 081084E2 ADD R1,R4,#+8 \ 000000D0 ........ _BLF AddContact,??AddContact??rA \ 000000D4 F9FFFFEA B ??ProcessPacket_7 3413 } 3414 } 3415 else 3416 { 3417 if(VIBR_ON_CONNECT) \ ??ProcessPacket_4: \ 000000D8 ........ LDR R0,??DataTable123 ;; VIBR_ON_CONNECT \ 000000DC 000090E5 LDR R0,[R0, #+0] \ 000000E0 000050E3 CMP R0,#+0 \ 000000E4 0100000A BEQ ??ProcessPacket_8 3418 { 3419 vibra_count=1; \ 000000E8 F86087E5 STR R6,[R7, #+248] 3420 start_vibra(); \ 000000EC ........ BL start_vibra 3421 } 3422 GROUP_CACHE=0; \ ??ProcessPacket_8: \ 000000F0 6C8187E5 STR R8,[R7, #+364] 3423 ask_my_info(); 3424 if (contactlist_menu_id) \ 000000F4 700197E5 LDR R0,[R7, #+368] \ 000000F8 000050E3 CMP R0,#+0 \ 000000FC 0100000A BEQ ??ProcessPacket_9 3425 { 3426 RecountMenu(NULL); \ 00000100 0000A0E3 MOV R0,#+0 \ ??ProcessPacket_10: \ 00000104 EDFFFFEA B ??ProcessPacket_7 3427 } 3428 else 3429 create_contactlist_menu(); \ ??ProcessPacket_9: \ 00000108 ........ BL create_contactlist_menu \ 0000010C D30100EA B ??ProcessPacket_1 3430 } 3431 break; 3432 case T_GROUPID: 3433 if (t=FindGroupByID(GROUP_CACHE=p->pkt.uin)) \ ??ProcessPacket_11: \ 00000110 6C0187E5 STR R0,[R7, #+364] \ 00000114 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000118 0090B0E1 MOVS R9,R0 \ 0000011C 0400000A BEQ ??ProcessPacket_12 3434 { 3435 strncpy(t->name,p->data,63); \ 00000120 3F20A0E3 MOV R2,#+63 \ 00000124 081084E2 ADD R1,R4,#+8 \ 00000128 140089E2 ADD R0,R9,#+20 \ 0000012C 160100EF SWI +278 3436 ChangeContactPos(t); \ 00000130 DFFFFFEA B ??ProcessPacket_6 3437 RecountMenu(t); 3438 } 3439 else 3440 { 3441 RecountMenu(AddGroup(p->pkt.uin,p->data)); \ ??ProcessPacket_12: \ 00000134 000094E5 LDR R0,[R4, #+0] \ 00000138 081084E2 ADD R1,R4,#+8 \ 0000013C ........ _BLF AddGroup,??AddGroup??rA \ 00000140 DEFFFFEA B ??ProcessPacket_7 3442 } 3443 break; 3444 case T_GROUPFOLLOW: 3445 GROUP_CACHE=p->pkt.uin; \ ??ProcessPacket_13: \ 00000144 6C0187E5 STR R0,[R7, #+364] \ 00000148 C40100EA B ??ProcessPacket_1 3446 break; 3447 case T_STATUSCHANGE: 3448 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_14: \ 0000014C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000150 0090B0E1 MOVS R9,R0 3449 if (t) \ 00000154 6B00000A BEQ ??ProcessPacket_15 3450 { 3451 int i=t->state; \ 00000158 B415D9E1 LDRH R1,[R9, #+84] 3452 CLIST *oldt=NULL; \ 0000015C 00A0A0E3 MOV R10,#+0 \ 00000160 00108DE5 STR R1,[SP, #+0] \ 00000164 0A00D4E5 LDRB R0,[R4, #+10] \ 00000168 B615D9E1 LDRH R1,[R9, #+86] \ 0000016C 000051E1 CMP R1,R0 \ 00000170 1D00000A BEQ ??ProcessPacket_16 3453 if (t->xstate!=p->data[2]) // Если картинка икс статуса сменилась 3454 { 3455 t->xstate=p->data[2]; \ 00000174 B605C9E1 STRH R0,[R9, #+86] 3456 FreeXText(t); \ 00000178 0900A0E1 MOV R0,R9 \ 0000017C ........ _BLF FreeXText,??FreeXText??rA 3457 if (t->xstate && ENA_AUTO_XTXT) // Если установлен икс статус и можно запрашивать по смене икс статуса :) \ 00000180 B605D9E1 LDRH R0,[R9, #+86] \ 00000184 000050E3 CMP R0,#+0 \ 00000188 1600000A BEQ ??ProcessPacket_17 \ 0000018C E0069FE5 LDR R0,??ProcessPacket_18+0x4 ;; ENA_AUTO_XTXT \ 00000190 000090E5 LDR R0,[R0, #+0] \ 00000194 000050E3 CMP R0,#+0 \ 00000198 1200000A BEQ ??ProcessPacket_17 3458 { 3459 t->req_xtext=1; \ 0000019C 8C6089E5 STR R6,[R9, #+140] 3460 if (edchat_id) // Если открыт чат \ 000001A0 740197E5 LDR R0,[R7, #+372] \ 000001A4 000050E3 CMP R0,#+0 \ 000001A8 0F00000A BEQ ??ProcessPacket_16 3461 { 3462 void *data=FindGUIbyId(edchat_id,NULL); \ 000001AC 740197E5 LDR R0,[R7, #+372] \ 000001B0 0010A0E3 MOV R1,#+0 \ 000001B4 090200EF SWI +521 3463 if (data) \ 000001B8 000050E3 CMP R0,#+0 \ 000001BC 0A00000A BEQ ??ProcessPacket_16 3464 { 3465 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 000001C0 DF0100EF SWI +479 3466 if (ed_struct) \ 000001C4 000050E3 CMP R0,#+0 \ 000001C8 0700000A BEQ ??ProcessPacket_16 3467 { 3468 if (ed_struct->ed_contact==t) // Если наш чат то запрашиваем текст статуса \ 000001CC 000090E5 LDR R0,[R0, #+0] \ 000001D0 090050E1 CMP R0,R9 \ 000001D4 0400001A BNE ??ProcessPacket_16 3469 { 3470 t->req_xtext=0; \ 000001D8 8C8089E5 STR R8,[R9, #+140] 3471 RequestXText(t->uin); \ 000001DC 0C0099E5 LDR R0,[R9, #+12] \ 000001E0 ........ BL RequestXText \ 000001E4 000000EA B ??ProcessPacket_16 3472 } 3473 } 3474 } 3475 } 3476 } 3477 else // Если икс статус не установлен то на всякий случай снимаем флаг получения текста 3478 { 3479 t->req_xtext=0; \ ??ProcessPacket_17: \ 000001E8 8C8089E5 STR R8,[R9, #+140] 3480 } 3481 } 3482 if (contactlist_menu_id) \ ??ProcessPacket_16: \ 000001EC 700197E5 LDR R0,[R7, #+368] \ 000001F0 000050E3 CMP R0,#+0 \ 000001F4 0500000A BEQ ??ProcessPacket_19 3483 { 3484 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 000001F8 700197E5 LDR R0,[R7, #+368] \ 000001FC 0010A0E3 MOV R1,#+0 \ 00000200 090200EF SWI +521 \ 00000204 8F0100EF SWI +399 \ 00000208 ........ _BLF FindContactByN,??FindContactByN??rA \ 0000020C 00A0A0E1 MOV R10,R0 3485 } 3486 if(t->state==65535) t->change=1; \ ??ProcessPacket_19: \ 00000210 B405D9E1 LDRH R0,[R9, #+84] \ 00000214 FFB0A0E3 MOV R11,#+255 \ 00000218 FFBC8BE3 ORR R11,R11,#0xFF00 \ 0000021C 0B0050E1 CMP R0,R11 \ 00000220 60608905 STREQ R6,[R9, #+96] 3487 t->state=*((unsigned short *)(p->data)); \ 00000224 B800D4E1 LDRH R0,[R4, #+8] \ 00000228 B405C9E1 STRH R0,[R9, #+84] 3488 if((t->state!=65535)&&(t->change==1)) \ 0000022C 0B0050E1 CMP R0,R11 \ 00000230 0400000A BEQ ??ProcessPacket_20 \ 00000234 600099E5 LDR R0,[R9, #+96] \ 00000238 010050E3 CMP R0,#+1 3489 { 3490 t->just_now=2; \ 0000023C 0200A003 MOVEQ R0,#+2 \ 00000240 5C008905 STREQ R0,[R9, #+92] 3491 t->change=0; \ 00000244 60808905 STREQ R8,[R9, #+96] 3492 } 3493 LogStatusChange(t); \ ??ProcessPacket_20: \ 00000248 0900A0E1 MOV R0,R9 \ 0000024C ........ _BLF LogStatusChange,??LogStatusChange??rA 3494 ChangeContactPos(t); \ 00000250 0900A0E1 MOV R0,R9 \ 00000254 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3495 RecountMenu(oldt); \ 00000258 0A00A0E1 MOV R0,R10 \ 0000025C ........ BL RecountMenu 3496 if ((t->state!=0xFFFF)&&(i==0xFFFF))//Звук \ 00000260 B405D9E1 LDRH R0,[R9, #+84] \ 00000264 0B0050E1 CMP R0,R11 \ 00000268 1A00000A BEQ ??ProcessPacket_21 \ 0000026C 00109DE5 LDR R1,[SP, #+0] \ 00000270 0B0051E1 CMP R1,R11 \ 00000274 1700001A BNE ??ProcessPacket_21 3497 { 3498 #ifdef EVILFOX 3499 if(!extended_sounds) 3500 { 3501 Play(sndGlobal); 3502 } 3503 else 3504 { 3505 uins=t->uin; 3506 sprintf(talk_sound, "%s%d.wav", sndGlobal2, uins); 3507 Play(talk_sound); 3508 } 3509 #else 3510 if(!extended_sounds) \ 00000278 ........ LDR R0,??DataTable124 ;; extended_sounds \ 0000027C F4659FE5 LDR R6,??ProcessPacket_18+0x8 ;; sndGlobal \ 00000280 000090E5 LDR R0,[R0, #+0] \ 00000284 000050E3 CMP R0,#+0 3511 { 3512 Play(sndGlobal); \ 00000288 0600A001 MOVEQ R0,R6 \ 0000028C 1700000A BEQ ??ProcessPacket_22 3513 } 3514 else 3515 { 3516 FSTATS stat; 3517 int fsize; 3518 unsigned int ul = 0; 3519 uins=t->uin; 3520 sprintf(talk_sound, "%s%d.wav", sndGlobal2, uins); \ 00000290 E4259FE5 LDR R2,??ProcessPacket_18+0xC ;; sndGlobal2 \ 00000294 04808DE5 STR R8,[SP, #+4] \ 00000298 0C0099E5 LDR R0,[R9, #+12] \ 0000029C C58FA0E3 MOV R8,#+788 \ 000002A0 A40087E5 STR R0,[R7, #+164] \ 000002A4 0030A0E1 MOV R3,R0 \ 000002A8 4E1F85E2 ADD R1,R5,#+312 \ 000002AC 070088E0 ADD R0,R8,R7 \ 000002B0 160000EF SWI +22 3521 GetFileStats(talk_sound,&stat,&ul); \ 000002B4 04208DE2 ADD R2,SP,#+4 \ 000002B8 421F8DE2 ADD R1,SP,#+264 \ 000002BC 070088E0 ADD R0,R8,R7 \ 000002C0 840000EF SWI +132 3522 fsize=stat.size; 3523 if(fsize>0) \ 000002C4 0C019DE5 LDR R0,[SP, #+268] \ 000002C8 010050E3 CMP R0,#+1 \ 000002CC 0600A0B1 MOVLT R0,R6 3524 Play(talk_sound); \ 000002D0 070088A0 ADDGE R0,R8,R7 \ 000002D4 050000EA B ??ProcessPacket_22 3525 else 3526 Play(sndGlobal); 3527 } 3528 #endif 3529 } 3530 if ((i!=0xFFFF)&&(t->state==0xFFFF))//Звук \ ??ProcessPacket_21: \ 000002D8 00109DE5 LDR R1,[SP, #+0] \ 000002DC 0B0051E1 CMP R1,R11 \ 000002E0 0300000A BEQ ??ProcessPacket_23 \ 000002E4 0B0050E1 CMP R0,R11 \ 000002E8 0100001A BNE ??ProcessPacket_23 3531 { 3532 Play(sndSrvMsg); \ 000002EC 8C059FE5 LDR R0,??ProcessPacket_18+0x10 ;; sndSrvMsg \ ??ProcessPacket_22: \ 000002F0 ........ BL Play 3533 } 3534 if(TIME_OR_MSG==2) \ ??ProcessPacket_23: \ 000002F4 ........ LDR R0,??DataTable125 ;; TIME_OR_MSG \ 000002F8 000090E5 LDR R0,[R0, #+0] \ 000002FC 020050E3 CMP R0,#+2 \ 00000300 0000001A BNE ??ProcessPacket_15 3535 Get_Online_total(); \ 00000304 ........ BL Get_Online_total 3536 } 3537 if (edchat_id) \ ??ProcessPacket_15: \ 00000308 740197E5 LDR R0,[R7, #+372] \ 0000030C 000050E3 CMP R0,#+0 \ 00000310 5201000A BEQ ??ProcessPacket_1 3538 { 3539 void *data=FindGUIbyId(edchat_id,NULL); \ 00000314 740197E5 LDR R0,[R7, #+372] \ 00000318 0010A0E3 MOV R1,#+0 \ 0000031C 090200EF SWI +521 3540 { 3541 EDCHAT_STRUCT *ed_struct; 3542 ed_struct=EDIT_GetUserPointer(data); \ 00000320 DF0100EF SWI +479 3543 if (ed_struct) \ 00000324 000050E3 CMP R0,#+0 \ 00000328 4C01000A BEQ ??ProcessPacket_1 3544 { 3545 if (ed_struct->ed_contact==t) \ 0000032C 000090E5 LDR R0,[R0, #+0] \ 00000330 090050E1 CMP R0,R9 \ 00000334 4901001A BNE ??ProcessPacket_1 3546 { 3547 DirectRedrawGUI_ID(edchat_id); \ 00000338 740197E5 LDR R0,[R7, #+372] \ 0000033C 400100EF SWI +320 \ 00000340 460100EA B ??ProcessPacket_1 3548 } 3549 } 3550 } 3551 } 3552 break; 3553 case T_RECVMSG: 3554 NEW_MSG=1; \ ??ProcessPacket_24: \ 00000344 986187E5 STR R6,[R7, #+408] 3555 t=FindContactByUin(p->pkt.uin); \ 00000348 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 0000034C 0090B0E1 MOVS R9,R0 3556 if (!t) \ 00000350 0700001A BNE ??ProcessPacket_25 3557 { 3558 sprintf(s,percent_d,p->pkt.uin); \ 00000354 002094E5 LDR R2,[R4, #+0] \ 00000358 1B1085E2 ADD R1,R5,#+27 \ 0000035C 08008DE2 ADD R0,SP,#+8 \ 00000360 160000EF SWI +22 3559 t=AddContact(p->pkt.uin,s); \ 00000364 000094E5 LDR R0,[R4, #+0] \ 00000368 08108DE2 ADD R1,SP,#+8 \ 0000036C ........ _BLF AddContact,??AddContact??rA \ 00000370 0090A0E1 MOV R9,R0 3560 } 3561 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<isactive=ACTIVE_TIME; \ 000003AC 5A0FA013 MOVNE R0,#+360 \ 000003B0 80008915 STRNE R0,[R9, #+128] 3564 // ChangeContactPos(t); 3565 if(VIBR_TYPE) \ 000003B4 ........ LDR R0,??DataTable128 ;; VIBR_TYPE \ 000003B8 000090E5 LDR R0,[R0, #+0] \ 000003BC 000050E3 CMP R0,#+0 3566 vibra_count=2; \ 000003C0 0200A013 MOVNE R0,#+2 \ 000003C4 F8008715 STRNE R0,[R7, #+248] 3567 else 3568 vibra_count=1; \ 000003C8 F8608705 STREQ R6,[R7, #+248] 3569 start_vibra(); \ 000003CC ........ BL start_vibra 3570 #ifdef ELKA 3571 if(SLI_TYPE) 3572 SLI_Timer(); \ 000003D0 ........ BL SLI_Timer 3573 #endif 3574 if(Is_Double_Vibra_On) \ 000003D4 BC0097E5 LDR R0,[R7, #+188] \ 000003D8 000050E3 CMP R0,#+0 \ 000003DC 0000000A BEQ ??ProcessPacket_27 3575 Reminder_timer(); \ 000003E0 ........ BL Reminder_timer 3576 if (Is_ILU_On) \ ??ProcessPacket_27: \ 000003E4 B80097E5 LDR R0,[R7, #+184] \ 000003E8 000050E3 CMP R0,#+0 \ 000003EC 0800000A BEQ ??ProcessPacket_28 3577 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 000003F0 8C049FE5 LDR R0,??ProcessPacket_18+0x14 ;; ILL_RECV_FADE \ 000003F4 003090E5 LDR R3,[R0, #+0] \ 000003F8 88049FE5 LDR R0,??ProcessPacket_18+0x18 ;; ILL_RECV_TMR \ 000003FC 002090E5 LDR R2,[R0, #+0] \ 00000400 84049FE5 LDR R0,??ProcessPacket_18+0x1C ;; ILL_KEYS_RECV \ 00000404 001090E5 LDR R1,[R0, #+0] \ 00000408 80049FE5 LDR R0,??ProcessPacket_18+0x20 ;; ILL_DISP_RECV \ 0000040C 000090E5 LDR R0,[R0, #+0] \ 00000410 ........ BL IlluminationOn 3578 if (t->name[0]=='#') \ ??ProcessPacket_28: \ 00000414 1400D9E5 LDRB R0,[R9, #+20] \ 00000418 230050E3 CMP R0,#+35 \ 0000041C 1500001A BNE ??ProcessPacket_29 3579 { 3580 //Если это конференция, патчим имя 3581 char *s=strchr(p->data,'>'); \ 00000420 3E10A0E3 MOV R1,#+62 \ 00000424 080084E2 ADD R0,R4,#+8 \ 00000428 180000EF SWI +24 3582 //Если нашли символ > и после него пробел и ник короче 16 символов 3583 if (s) \ 0000042C 000050E3 CMP R0,#+0 \ 00000430 1000000A BEQ ??ProcessPacket_29 3584 { 3585 if ((s[1]==' ')&&((s-p->data)<16)) \ 00000434 0110D0E5 LDRB R1,[R0, #+1] \ 00000438 200051E3 CMP R1,#+32 \ 0000043C 0D00001A BNE ??ProcessPacket_29 \ 00000440 081084E2 ADD R1,R4,#+8 \ 00000444 011040E0 SUB R1,R0,R1 \ 00000448 100051E3 CMP R1,#+16 \ 0000044C 090000AA BGE ??ProcessPacket_29 3586 { 3587 *s=0; //Режем строку \ 00000450 0080C0E5 STRB R8,[R0, #+0] 3588 AddStringToLog(t,0x02,s+2,p->data,0xFFFFFFFF); //Добавляем имя из текста сообщения \ 00000454 001066E2 RSB R1,R6,#+0 \ 00000458 02002DE9 PUSH {R1} \ 0000045C 083084E2 ADD R3,R4,#+8 \ 00000460 022080E2 ADD R2,R0,#+2 \ 00000464 0900A0E1 MOV R0,R9 \ 00000468 0210A0E3 MOV R1,#+2 \ 0000046C ........ BL AddStringToLog 3589 goto L1; \ 00000470 04D08DE2 ADD SP,SP,#+4 \ 00000474 2B0000EA B ??ProcessPacket_30 3590 } 3591 } 3592 } 3593 //=============================================tas bus jautri 3594 comanda=1; \ ??ProcessPacket_29: \ 00000478 A06187E5 STR R6,[R7, #+416] 3595 // if(UIN!=t->uin) 3596 CheckComand(p->data, t, t->name); \ 0000047C 142089E2 ADD R2,R9,#+20 \ 00000480 0910A0E1 MOV R1,R9 \ 00000484 080084E2 ADD R0,R4,#+8 \ 00000488 ........ BL CheckComand 3597 if(comanda==1) \ 0000048C A00197E5 LDR R0,[R7, #+416] \ 00000490 010050E3 CMP R0,#+1 \ 00000494 2300001A BNE ??ProcessPacket_30 3598 { 3599 AddStringToLog(t,0x02,p->data,t->name,0xFFFFFFFF); \ 00000498 000066E2 RSB R0,R6,#+0 \ 0000049C 01002DE9 PUSH {R0} \ 000004A0 143089E2 ADD R3,R9,#+20 \ 000004A4 082084E2 ADD R2,R4,#+8 \ 000004A8 0210A0E3 MOV R1,#+2 \ 000004AC 0900A0E1 MOV R0,R9 \ 000004B0 ........ BL AddStringToLog 3600 main_count++; \ 000004B4 ........ LDR R0,??DataTable129 ;; main_count \ 000004B8 001090E5 LDR R1,[R0, #+0] \ 000004BC 011081E2 ADD R1,R1,#+1 \ 000004C0 001080E5 STR R1,[R0, #+0] 3601 if(Is_INC_On) \ 000004C4 B40097E5 LDR R0,[R7, #+180] \ 000004C8 04D08DE2 ADD SP,SP,#+4 \ 000004CC 000050E3 CMP R0,#+0 \ 000004D0 0E00000A BEQ ??ProcessPacket_31 3602 { 3603 strcpy(show_nick, t->name); \ 000004D4 141089E2 ADD R1,R9,#+20 \ 000004D8 7400A0E3 MOV R0,#+116 \ 000004DC 6C0D80E3 ORR R0,R0,#0x1B00 \ 000004E0 070080E0 ADD R0,R0,R7 \ 000004E4 1A0000EF SWI +26 3604 if(!IsIdleUiOnTop()) \ 000004E8 C50000EF SWI +197 \ 000004EC 000050E3 CMP R0,#+0 \ 000004F0 0600001A BNE ??ProcessPacket_31 3605 { 3606 // int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; 3607 // char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; 3608 /*if (memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8)) 3609 { 3610 INC_show=15; 3611 show_pp_sender(); 3612 }*/ 3613 if(IsNoJava()) \ 000004F4 0F50A0E3 MOV R5,#+15 \ 000004F8 E80100EF SWI +488 \ 000004FC 000050E3 CMP R0,#+0 \ 00000500 0000001A BNE ??ProcessPacket_32 3614 { 3615 INC_show=15; 3616 show_pp_sender(); 3617 } 3618 else 3619 { 3620 extern void DrawScreenShot(); 3621 DrawScreenShot(); \ 00000504 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 3622 INC_show=15; \ ??ProcessPacket_32: \ 00000508 A85187E5 STR R5,[R7, #+424] 3623 show_pp_sender(); \ 0000050C ........ BL show_pp_sender 3624 } 3625 #ifdef EVILFOX 3626 #else 3627 // else 3628 // ShowMSG(1,(int)show_nick); 3629 #endif 3630 } 3631 } 3632 if(Is_SMARTCPU_On) \ ??ProcessPacket_31: \ 00000510 B00097E5 LDR R0,[R7, #+176] \ 00000514 000050E3 CMP R0,#+0 \ 00000518 0200000A BEQ ??ProcessPacket_30 3633 AddToMain(t->name,p->data); \ 0000051C 081084E2 ADD R1,R4,#+8 \ 00000520 140089E2 ADD R0,R9,#+20 \ 00000524 ........ BL AddToMain 3634 } 3635 // if((Is_SMARTCPU_On)&&(comanda==1)) 3636 // AddToMain(t->name,p->data); 3637 L1: 3638 //Разворачиваем группу, в которой пришло сообщение 3639 { 3640 CLIST *g=FindGroupByID(t->group); \ ??ProcessPacket_30: \ 00000528 100099E5 LDR R0,[R9, #+16] \ 0000052C ........ _BLF FindGroupByID,??FindGroupByID??rA 3641 if (g) \ 00000530 000050E3 CMP R0,#+0 3642 { 3643 if (g->state) \ 00000534 B415D011 LDRHNE R1,[R0, #+84] \ 00000538 00005113 CMPNE R1,#+0 3644 { 3645 g->state=0; \ 0000053C B485C011 STRHNE R8,[R0, #+84] 3646 } 3647 } 3648 } 3649 // if(comanda==1) 3650 // { 3651 ReqAddMsgToChat(t); \ 00000540 0900A0E1 MOV R0,R9 \ 00000544 ........ BL ReqAddMsgToChat 3652 RecountMenu(t); \ 00000548 0900A0E1 MOV R0,R9 \ 0000054C ........ BL RecountMenu 3653 switch (DEVELOP_IF) \ 00000550 ........ LDR R0,??DataTable130 ;; DEVELOP_IF \ 00000554 000090E5 LDR R0,[R0, #+0] \ 00000558 000050E3 CMP R0,#+0 \ 0000055C 0400000A BEQ ??ProcessPacket_33 \ 00000560 010050E2 SUBS R0,R0,#+1 \ 00000564 0B00000A BEQ ??ProcessPacket_34 \ 00000568 020050E2 SUBS R0,R0,#+2 \ 0000056C 1300000A BEQ ??ProcessPacket_35 \ 00000570 BA0000EA B ??ProcessPacket_1 3654 { 3655 case 0: 3656 #ifdef EVILFOX 3657 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) GBS_StartTimerProc(&develop, 216*2, to_develop); 3658 #else 3659 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) to_develop(); \ ??ProcessPacket_33: \ 00000574 068100EF SWI +33030 \ 00000578 080090E5 LDR R0,[R0, #+8] \ 0000057C C81097E5 LDR R1,[R7, #+200] \ 00000580 0C0090E5 LDR R0,[R0, #+12] \ 00000584 0C0090E5 LDR R0,[R0, #+12] \ 00000588 010050E1 CMP R0,R1 \ ??ProcessPacket_36: \ 0000058C B300000A BEQ ??ProcessPacket_1 \ 00000590 ........ BL to_develop \ 00000594 B10000EA B ??ProcessPacket_1 3660 #endif 3661 break; 3662 case 1: 3663 #ifdef EVILFOX 3664 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) GBS_StartTimerProc(&develop, 216*2, to_develop); 3665 #else 3666 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) to_develop(); \ ??ProcessPacket_34: \ 00000598 068100EF SWI +33030 \ 0000059C 080090E5 LDR R0,[R0, #+8] \ 000005A0 C81097E5 LDR R1,[R7, #+200] \ 000005A4 0C0090E5 LDR R0,[R0, #+12] \ 000005A8 0C0090E5 LDR R0,[R0, #+12] \ 000005AC 010050E1 CMP R0,R1 \ 000005B0 AA00000A BEQ ??ProcessPacket_1 \ 000005B4 430000EF SWI +67 \ 000005B8 000050E3 CMP R0,#+0 \ 000005BC F2FFFFEA B ??ProcessPacket_36 3667 #endif 3668 break; 3669 case 2: 3670 break; 3671 case 3: 3672 GBS_DelTimer(&develop); \ ??ProcessPacket_35: \ 000005C0 E800A0E3 MOV R0,#+232 \ 000005C4 640D80E3 ORR R0,R0,#0x1900 \ 000005C8 070080E0 ADD R0,R0,R7 \ 000005CC 8C0100EF SWI +396 3673 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(!IsUnlocked())) begin_to_develop(); \ 000005D0 068100EF SWI +33030 \ 000005D4 080090E5 LDR R0,[R0, #+8] \ 000005D8 C81097E5 LDR R1,[R7, #+200] \ 000005DC 0C0090E5 LDR R0,[R0, #+12] \ 000005E0 0C0090E5 LDR R0,[R0, #+12] \ 000005E4 010050E1 CMP R0,R1 \ 000005E8 9C00000A BEQ ??ProcessPacket_1 \ 000005EC 430000EF SWI +67 \ 000005F0 000050E3 CMP R0,#+0 \ 000005F4 9900001A BNE ??ProcessPacket_1 \ 000005F8 ........ BL begin_to_develop \ 000005FC 970000EA B ??ProcessPacket_1 3674 break; 3675 } 3676 // } 3677 break; 3678 case T_SRV_ACK: 3679 case T_CLIENT_ACK: 3680 q=FindContactLOGQByAck(p); \ ??ProcessPacket_37: \ 00000600 0400A0E1 MOV R0,R4 \ 00000604 ........ BL FindContactLOGQByAck \ 00000608 0050B0E1 MOVS R5,R0 3681 if (q&&(p->pkt.type==T_SRV_ACK)) \ 0000060C 9300000A BEQ ??ProcessPacket_1 \ 00000610 B400D4E1 LDRH R0,[R4, #+4] \ 00000614 100050E3 CMP R0,#+16 \ 00000618 0B00001A BNE ??ProcessPacket_38 3682 { 3683 if (Is_ILU_On) \ 0000061C B80097E5 LDR R0,[R7, #+184] \ 00000620 000050E3 CMP R0,#+0 \ 00000624 0B00000A BEQ ??ProcessPacket_39 3684 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); \ 00000628 54029FE5 LDR R0,??ProcessPacket_18+0x14 ;; ILL_RECV_FADE \ 0000062C 003090E5 LDR R3,[R0, #+0] \ 00000630 5C029FE5 LDR R0,??ProcessPacket_18+0x24 ;; ILL_SEND_TMR \ 00000634 002090E5 LDR R2,[R0, #+0] \ 00000638 58029FE5 LDR R0,??ProcessPacket_18+0x28 ;; ILL_KEYS_SEND \ 0000063C 001090E5 LDR R1,[R0, #+0] \ 00000640 54029FE5 LDR R0,??ProcessPacket_18+0x2C ;; ILL_DISP_SEND \ 00000644 000090E5 LDR R0,[R0, #+0] \ 00000648 ........ BL IlluminationOn 3685 }//Illumination by BoBa 19.04.2007 3686 /* if (( 3687 IsGuiOnTop(contactlist_menu_id)|| 3688 IsGuiOnTop(edchat_id) 3689 )&&(q)) 3690 { 3691 DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 3692 GetPaletteAdrByColorIndex(0), 3693 GetPaletteAdrByColorIndex(p->pkt.type==T_SRV_ACK?3:4)); 3694 }*/ 3695 if (q) 3696 { 3697 q->acked=p->pkt.type==T_SRV_ACK?1:2; \ ??ProcessPacket_38: \ 0000064C B400D4E1 LDRH R0,[R4, #+4] \ 00000650 100050E3 CMP R0,#+16 \ 00000654 0100001A BNE ??ProcessPacket_40 \ ??ProcessPacket_39: \ 00000658 0100A0E3 MOV R0,#+1 \ 0000065C 000000EA B ??ProcessPacket_41 \ ??ProcessPacket_40: \ 00000660 0200A0E3 MOV R0,#+2 \ ??ProcessPacket_41: \ 00000664 040085E5 STR R0,[R5, #+4] 3698 t=FindContactByUin(p->pkt.uin); \ 00000668 000094E5 LDR R0,[R4, #+0] \ 0000066C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000670 0090A0E1 MOV R9,R0 3699 if (edchat_id) \ 00000674 740197E5 LDR R0,[R7, #+372] \ 00000678 000050E3 CMP R0,#+0 \ 0000067C 7700000A BEQ ??ProcessPacket_1 3700 { 3701 void *data=FindGUIbyId(edchat_id,NULL); \ 00000680 740197E5 LDR R0,[R7, #+372] \ 00000684 0010A0E3 MOV R1,#+0 \ 00000688 090200EF SWI +521 \ 0000068C 0050B0E1 MOVS R5,R0 3702 if (data) \ 00000690 7200000A BEQ ??ProcessPacket_1 3703 { 3704 EDCHAT_STRUCT *ed_struct; 3705 ed_struct=EDIT_GetUserPointer(data); \ 00000694 DF0100EF SWI +479 3706 if (ed_struct) \ 00000698 000050E3 CMP R0,#+0 \ 0000069C 6F00000A BEQ ??ProcessPacket_1 3707 { 3708 if (ed_struct->ed_contact==t) \ 000006A0 000090E5 LDR R0,[R0, #+0] \ 000006A4 090050E1 CMP R0,R9 \ 000006A8 6C00001A BNE ??ProcessPacket_1 3709 { 3710 if (EDIT_IsBusy(data)) \ 000006AC 0500A0E1 MOV R0,R5 \ 000006B0 1C0200EF SWI +540 \ 000006B4 000050E3 CMP R0,#+0 \ 000006B8 0300000A BEQ ??ProcessPacket_42 3711 { 3712 t->req_drawack=1; \ 000006BC 706089E5 STR R6,[R9, #+112] 3713 #ifdef EVILFOX 3714 time_to_stop_t9=2; 3715 #else 3716 time_to_stop_t9=3; \ 000006C0 0300A0E3 MOV R0,#+3 \ 000006C4 9C0187E5 STR R0,[R7, #+412] \ 000006C8 640000EA B ??ProcessPacket_1 3717 #endif 3718 } 3719 else 3720 DrawAck(data); \ ??ProcessPacket_42: \ 000006CC 0500A0E1 MOV R0,R5 \ 000006D0 ........ BL DrawAck \ 000006D4 610000EA B ??ProcessPacket_1 3721 } 3722 } 3723 } 3724 } 3725 } 3726 break; 3727 case T_XTEXT_ACK: 3728 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_43: \ 000006D8 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000006DC 0090B0E1 MOVS R9,R0 3729 if (t) \ 000006E0 5E00000A BEQ ??ProcessPacket_1 3730 { 3731 int i; 3732 int j; 3733 FreeXText(t); \ 000006E4 ........ _BLF FreeXText,??FreeXText??rA 3734 i=p->pkt.data_len; \ 000006E8 B660D4E1 LDRH R6,[R4, #+6] 3735 memcpy(t->xtext=malloc(i),p->data,i); \ 000006EC 0600A0E1 MOV R0,R6 \ 000006F0 140000EF SWI +20 \ 000006F4 880089E5 STR R0,[R9, #+136] \ 000006F8 0620A0E1 MOV R2,R6 \ 000006FC 081084E2 ADD R1,R4,#+8 \ 00000700 1E0100EF SWI +286 3736 zeromem(s,256); \ 00000704 401FA0E3 MOV R1,#+256 \ 00000708 08008DE2 ADD R0,SP,#+8 \ 0000070C 1D0100EF SWI +285 3737 strcpy(s,t->name); \ 00000710 141089E2 ADD R1,R9,#+20 \ 00000714 08008DE2 ADD R0,SP,#+8 \ 00000718 1A0000EF SWI +26 3738 strcat(s,":\n"); \ 0000071C 531F8FE2 ADR R1,??ProcessPacket_18 ;; ":\n" \ 00000720 08008DE2 ADD R0,SP,#+8 \ 00000724 170000EF SWI +23 3739 i=strlen(s); \ 00000728 08008DE2 ADD R0,SP,#+8 \ 0000072C 1B0000EF SWI +27 3740 j=p->data[0]; \ 00000730 0860D4E5 LDRB R6,[R4, #+8] \ 00000734 0070A0E1 MOV R7,R0 3741 if (j>(255-i)) j=255-i; \ 00000738 FF0067E2 RSB R0,R7,#+255 \ 0000073C 060050E1 CMP R0,R6 \ 00000740 0060A0B1 MOVLT R6,R0 3742 strncpy(s+i,p->data+1,j); \ 00000744 0620A0E1 MOV R2,R6 \ 00000748 091084E2 ADD R1,R4,#+9 \ 0000074C 08008DE2 ADD R0,SP,#+8 \ 00000750 000087E0 ADD R0,R7,R0 \ 00000754 160100EF SWI +278 3743 i+=j; \ 00000758 070086E0 ADD R0,R6,R7 3744 if (i<255) \ 0000075C FF0050E3 CMP R0,#+255 \ 00000760 100000AA BGE ??ProcessPacket_44 3745 { 3746 s[i]='\n'; \ 00000764 08108DE2 ADD R1,SP,#+8 \ 00000768 0A20A0E3 MOV R2,#+10 \ 0000076C 0120C0E7 STRB R2,[R0, +R1] 3747 i++; \ 00000770 0810D4E5 LDRB R1,[R4, #+8] \ 00000774 B620D4E1 LDRH R2,[R4, #+6] \ 00000778 010080E2 ADD R0,R0,#+1 3748 j=p->pkt.data_len-p->data[0]-1; 3749 if (j>(255-i)) j=255-i; 3750 strncpy(s+i,p->data+p->data[0]+1,j); \ 0000077C 08308DE2 ADD R3,SP,#+8 \ 00000780 012042E0 SUB R2,R2,R1 \ 00000784 016042E2 SUB R6,R2,#+1 \ 00000788 FF2060E2 RSB R2,R0,#+255 \ 0000078C 060052E1 CMP R2,R6 \ 00000790 0260A0B1 MOVLT R6,R2 \ 00000794 0620A0E1 MOV R2,R6 \ 00000798 041081E0 ADD R1,R1,R4 \ 0000079C 091081E2 ADD R1,R1,#+9 \ 000007A0 030080E0 ADD R0,R0,R3 \ 000007A4 160100EF SWI +278 3751 } 3752 // if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); 3753 /* 3754 #ifdef EVILFOX 3755 #else 3756 if (!edchat_id) ShowMSG(0,(int)s); // Только если редактор не наверху 3757 #endif 3758 */ 3759 zeromem(s,256); \ ??ProcessPacket_44: \ 000007A8 401FA0E3 MOV R1,#+256 \ 000007AC 08008DE2 ADD R0,SP,#+8 \ 000007B0 1D0100EF SWI +285 3760 i=0; 3761 j=p->data[0]; \ 000007B4 0860D4E5 LDRB R6,[R4, #+8] 3762 if (j>(255-i)) j=255-i; 3763 strncpy(s,p->data+1,j); \ 000007B8 091084E2 ADD R1,R4,#+9 \ 000007BC 08008DE2 ADD R0,SP,#+8 \ 000007C0 400F56E3 CMP R6,#+256 \ 000007C4 FF60A0A3 MOVGE R6,#+255 \ 000007C8 0620A0E1 MOV R2,R6 \ 000007CC 160100EF SWI +278 3764 i+=j; 3765 if (i<255) \ 000007D0 FF0056E3 CMP R6,#+255 \ 000007D4 100000AA BGE ??ProcessPacket_45 3766 { 3767 s[i++]=13; \ 000007D8 08108DE2 ADD R1,SP,#+8 \ 000007DC 0D20A0E3 MOV R2,#+13 \ 000007E0 0120C6E7 STRB R2,[R6, +R1] \ 000007E4 0810D4E5 LDRB R1,[R4, #+8] \ 000007E8 B620D4E1 LDRH R2,[R4, #+6] \ 000007EC 010086E2 ADD R0,R6,#+1 3768 j=p->pkt.data_len-p->data[0]-1; 3769 if (j>(255-i)) j=255-i; 3770 strncpy(s+i,p->data+p->data[0]+1,j); \ 000007F0 08308DE2 ADD R3,SP,#+8 \ 000007F4 012042E0 SUB R2,R2,R1 \ 000007F8 016042E2 SUB R6,R2,#+1 \ 000007FC FF2060E2 RSB R2,R0,#+255 \ 00000800 060052E1 CMP R2,R6 \ 00000804 0260A0B1 MOVLT R6,R2 \ 00000808 0620A0E1 MOV R2,R6 \ 0000080C 041081E0 ADD R1,R1,R4 \ 00000810 091081E2 ADD R1,R1,#+9 \ 00000814 030080E0 ADD R0,R0,R3 \ 00000818 160100EF SWI +278 3771 } 3772 AddStringToLog(t,0x03,s,x_status_change,0xFFFFFFFF); \ ??ProcessPacket_45: \ 0000081C 0800E0E1 MVN R0,R8 \ 00000820 01002DE9 PUSH {R0} \ 00000824 0C208DE2 ADD R2,SP,#+12 \ 00000828 0310A0E3 MOV R1,#+3 \ 0000082C 4C00A0E3 MOV R0,#+76 \ 00000830 500E80E3 ORR R0,R0,#0x500 \ 00000834 053080E0 ADD R3,R0,R5 \ 00000838 0900A0E1 MOV R0,R9 \ 0000083C ........ BL AddStringToLog 3773 ReqAddMsgToChat(t); \ 00000840 0900A0E1 MOV R0,R9 \ 00000844 ........ BL ReqAddMsgToChat 3774 RecountMenu(t); \ 00000848 0900A0E1 MOV R0,R9 \ 0000084C ........ BL RecountMenu \ 00000850 04D08DE2 ADD SP,SP,#+4 \ 00000854 010000EA B ??ProcessPacket_1 3775 } 3776 break; 3777 case T_LASTPRIVACY: 3778 CurrentPrivateStatus=p->data[0]; \ ??ProcessPacket_46: \ 00000858 0800D4E5 LDRB R0,[R4, #+8] \ 0000085C F40087E5 STR R0,[R7, #+244] 3779 break; 3780 } 3781 mfree(p); \ ??ProcessPacket_1: \ 00000860 0400A0E1 MOV R0,R4 \ 00000864 150000EF SWI +21 3782 } \ 00000868 4CDF8DE2 ADD SP,SP,#+304 \ 0000086C F08FBDE8 POP {R4-R11,PC} ;; return \ ??ProcessPacket_18: \ 00000870 3A0A0000 DC8 ":\n",+0 \ 00000874 ........ DC32 ENA_AUTO_XTXT \ 00000878 ........ DC32 sndGlobal \ 0000087C ........ DC32 sndGlobal2 \ 00000880 ........ DC32 sndSrvMsg \ 00000884 ........ DC32 ILL_RECV_FADE \ 00000888 ........ DC32 ILL_RECV_TMR \ 0000088C ........ DC32 ILL_KEYS_RECV \ 00000890 ........ DC32 ILL_DISP_RECV \ 00000894 ........ DC32 ILL_SEND_TMR \ 00000898 ........ DC32 ILL_KEYS_SEND \ 0000089C ........ DC32 ILL_DISP_SEND 3783 3784 3785 IPC_REQ tmr_gipc; \ In segment CODE, align 4, keep-with-next 3786 void process_active_timer(void) 3787 { \ process_active_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} 3788 if (connect_state>2) \ 00000004 ........ LDR R5,??DataTable140 ;; S_ICONS \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C 440195E5 LDR R0,[R5, #+324] \ 00000010 030050E3 CMP R0,#+3 \ 00000014 070000BA BLT ??process_active_timer_0 3789 { 3790 if (++tenseconds_to_ping>12) \ 00000018 7C0195E5 LDR R0,[R5, #+380] \ 0000001C 010080E2 ADD R0,R0,#+1 \ 00000020 7C0185E5 STR R0,[R5, #+380] \ 00000024 0D0050E3 CMP R0,#+13 \ 00000028 020000BA BLT ??process_active_timer_0 3791 { 3792 tenseconds_to_ping=0; 3793 SUBPROC((void *)do_ping); \ 0000002C 5C009FE5 LDR R0,??process_active_timer_1 ;; do_ping \ 00000030 7C4185E5 STR R4,[R5, #+380] \ 00000034 710100EF SWI +369 3794 } 3795 } 3796 tmr_gipc.name_to=ipc_my_name; \ ??process_active_timer_0: \ 00000038 ........ LDR R1,??DataTable134 ;; `?ws1,LG_GRSTATESTRING,connect_state,RXstate,RX,TX,sendq_l,logmsg); \ 00000008 ........ LDR R7,??DataTable134 ;; `?ws1,"\nLoaded %d smiles",total_smiles); \ 000001B8 002090E5 LDR R2,[R0, #+0] \ 000001BC 340094E5 LDR R0,[R4, #+52] \ 000001C0 E81F87E2 ADD R1,R7,#+928 \ 000001C4 160200EF SWI +534 3832 } 3833 if (xstatuses_load) \ ??method0_2: \ 000001C8 70019FE5 LDR R0,??method0_0+0xC ;; xstatuses_load \ 000001CC 000090E5 LDR R0,[R0, #+0] \ 000001D0 000050E3 CMP R0,#+0 \ 000001D4 0400000A BEQ ??method0_1 3834 { 3835 wstrcatprintf(data->ws1,"\nLoaded %d xstatus",total_xstatuses); \ 000001D8 ........ LDR R0,??DataTable136 ;; total_xstatuses \ 000001DC ED1F87E2 ADD R1,R7,#+948 \ 000001E0 002090E5 LDR R2,[R0, #+0] \ 000001E4 340094E5 LDR R0,[R4, #+52] \ 000001E8 160200EF SWI +534 3836 } 3837 } 3838 3839 DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 3840 FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ ??method0_1: \ 000001EC 1700A0E3 MOV R0,#+23 \ 000001F0 2E0100EF SWI +302 \ 000001F4 0090A0E1 MOV R9,R0 \ 000001F8 0000A0E3 MOV R0,#+0 \ 000001FC 2E0100EF SWI +302 \ 00000200 00A0A0E1 MOV R10,R0 \ 00000204 0500A0E3 MOV R0,#+5 \ 00000208 C50100EF SWI +453 \ 0000020C 04109DE5 LDR R1,[SP, #+4] \ 00000210 00022DE9 PUSH {R9} \ 00000214 048041E2 SUB R8,R1,#+4 \ 00000218 00042DE9 PUSH {R10} \ 0000021C 0010A0E3 MOV R1,#+0 \ 00000220 02002DE9 PUSH {R1} \ 00000224 04B045E2 SUB R11,R5,#+4 \ 00000228 00004BE0 SUB R0,R11,R0 \ 0000022C 0830A0E1 MOV R3,R8 \ 00000230 0810A0E3 MOV R1,#+8 \ 00000234 02002DE9 PUSH {R1} \ 00000238 01002DE9 PUSH {R0} \ 0000023C 340094E5 LDR R0,[R4, #+52] \ 00000240 1B20A0E3 MOV R2,#+27 \ 00000244 0310A0E3 MOV R1,#+3 \ 00000248 4C0100EF SWI +332 3841 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 0000024C 380094E5 LDR R0,[R4, #+56] \ 00000250 F22F87E2 ADD R2,R7,#+968 \ 00000254 181087E2 ADD R1,R7,#+24 \ 00000258 240100EF SWI +292 3842 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 3843 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 0000025C 1700A0E3 MOV R0,#+23 \ 00000260 2E0100EF SWI +302 \ 00000264 0050A0E1 MOV R5,R0 \ 00000268 0000A0E3 MOV R0,#+0 \ 0000026C 2E0100EF SWI +302 \ 00000270 0090A0E1 MOV R9,R0 \ 00000274 0500A0E3 MOV R0,#+5 \ 00000278 C50100EF SWI +453 \ 0000027C 18109DE5 LDR R1,[SP, #+24] \ 00000280 20002DE9 PUSH {R5} \ 00000284 C1A0A0E1 ASR R10,R1,#+1 \ 00000288 00022DE9 PUSH {R9} \ 0000028C 0410A0E3 MOV R1,#+4 \ 00000290 02002DE9 PUSH {R1} \ 00000294 0830A0E1 MOV R3,R8 \ 00000298 00204BE0 SUB R2,R11,R0 \ 0000029C 0510A0E3 MOV R1,#+5 \ 000002A0 02002DE9 PUSH {R1} \ 000002A4 0B10A0E1 MOV R1,R11 \ 000002A8 02002DE9 PUSH {R1} \ 000002AC 380094E5 LDR R0,[R4, #+56] \ 000002B0 0A10A0E1 MOV R1,R10 \ 000002B4 4C0100EF SWI +332 \ 000002B8 28D08DE2 ADD SP,SP,#+40 3844 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ 000002BC 680196E5 LDR R0,[R6, #+360] \ 000002C0 181087E2 ADD R1,R7,#+24 \ 000002C4 000050E3 CMP R0,#+0 \ 000002C8 380094E5 LDR R0,[R4, #+56] \ 000002CC F42F8712 ADDNE R2,R7,#+976 \ 000002D0 1E208702 ADDEQ R2,R7,#+30 \ 000002D4 240100EF SWI +292 3845 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 3846 scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 000002D8 1700A0E3 MOV R0,#+23 \ 000002DC 2E0100EF SWI +302 \ 000002E0 0050A0E1 MOV R5,R0 \ 000002E4 0000A0E3 MOV R0,#+0 \ 000002E8 2E0100EF SWI +302 \ 000002EC 0060A0E1 MOV R6,R0 \ 000002F0 0500A0E3 MOV R0,#+5 \ 000002F4 C50100EF SWI +453 \ 000002F8 20002DE9 PUSH {R5} \ 000002FC 40002DE9 PUSH {R6} \ 00000300 0110A0E3 MOV R1,#+1 \ 00000304 02002DE9 PUSH {R1} \ 00000308 0A30A0E1 MOV R3,R10 \ 0000030C 00204BE0 SUB R2,R11,R0 \ 00000310 0510A0E3 MOV R1,#+5 \ 00000314 02002DE9 PUSH {R1} \ 00000318 0B10A0E1 MOV R1,R11 \ 0000031C 02002DE9 PUSH {R1} \ 00000320 380094E5 LDR R0,[R4, #+56] \ 00000324 0310A0E3 MOV R1,#+3 \ 00000328 4C0100EF SWI +332 3847 /*#ifdef EVILFOX 3848 DrawImg(15,220,(int)"4:\\zbin\\naticq\\img\\smiles_logo.png"); 3849 wsprintf(data->ws2,percent_t,"Mod by Evilfox Gold"); 3850 #else 3851 wsprintf(data->ws2,percent_t,"Mod by Evilfox 1st"); 3852 // wsprintf(data->ws2,percent_t,"Mod by Evilfox for Mr.Google"); 3853 #endif 3854 // wsprintf(data->ws2,percent_t,"Mod by Evilfox for Tolsi"); 3855 #ifdef EVILFOX 3856 DrawString(data->ws2,3,scr_h-8-GetFontYSIZE(FONT_MEDIUM_BOLD)-GetFontYSIZE(FONT_MEDIUM_BOLD), 3857 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 3858 #else 3859 DrawString(data->ws2,3,scr_h-8-GetFontYSIZE(FONT_MEDIUM_BOLD)-GetFontYSIZE(FONT_MEDIUM_BOLD)-GetFontYSIZE(FONT_MEDIUM_BOLD), 3860 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(4),GetPaletteAdrByColorIndex(23)); 3861 #endif*/ 3862 } \ 0000032C 28D08DE2 ADD SP,SP,#+40 \ 00000330 F08FBDE8 POP {R4-R11,PC} ;; return \ ??method0_0: \ 00000334 ........ DC32 pictures_max \ 00000338 ........ DC32 pictures_loaded \ 0000033C ........ DC32 total_smiles \ 00000340 ........ DC32 xstatuses_load 3863 \ In segment CODE, align 4, keep-with-next 3864 void method1(MAIN_GUI *data,void *(*malloc_adr)(int)) 3865 { \ method1: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3866 data->ws1=AllocWS(256); \ 00000008 400FA0E3 MOV R0,#+256 \ 0000000C 250100EF SWI +293 \ 00000010 340084E5 STR R0,[R4, #+52] 3867 data->ws2=AllocWS(256); \ 00000014 400FA0E3 MOV R0,#+256 \ 00000018 250100EF SWI +293 \ 0000001C 380084E5 STR R0,[R4, #+56] 3868 data->gui.state=1; \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 0C00C4E5 STRB R0,[R4, #+12] 3869 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 3870 \ In segment CODE, align 4, keep-with-next 3871 void method2(MAIN_GUI *data,void (*mfree_adr)(void *)) 3872 { \ method2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3873 FreeWS(data->ws1); \ 00000008 340094E5 LDR R0,[R4, #+52] \ 0000000C 290100EF SWI +297 3874 FreeWS(data->ws2); \ 00000010 380094E5 LDR R0,[R4, #+56] \ 00000014 290100EF SWI +297 3875 data->gui.state=0; \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 0C00C4E5 STRB R0,[R4, #+12] 3876 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 3877 \ In segment CODE, align 4, keep-with-next 3878 void method3(MAIN_GUI *data,void *(*malloc_adr)(int),void (*mfree_adr)(void *)) 3879 { \ method3: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3880 DisableIDLETMR(); \ 00000008 7F0100EF SWI +383 3881 data->gui.state=2; \ 0000000C 0200A0E3 MOV R0,#+2 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 3882 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 3883 \ In segment CODE, align 4, keep-with-next 3884 void method4(MAIN_GUI *data,void (*mfree_adr)(void *)) 3885 { 3886 if (data->gui.state!=2) \ method4: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 3887 return; 3888 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 3889 } \ 00000010 1EFF2FE1 BX LR ;; return 3890 \ In segment CODE, align 4, keep-with-next 3891 int method5(MAIN_GUI *data,GUI_MSG *msg) 3892 { \ method5: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0140A0E1 MOV R4,R1 3893 DirectRedrawGUI(); \ 0000000C 3F0100EF SWI +319 3894 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 3895 { 3896 switch(msg->gbsmsg->submess) \ 00000028 ........ LDR R5,??DataTable140 ;; S_ICONS \ 0000002C 080090E5 LDR R0,[R0, #+8] \ 00000030 ........ LDR R4,??DataTable170 ;; create_connect \ 00000034 0C10A0E3 MOV R1,#+12 \ 00000038 601D81E3 ORR R1,R1,#0x1800 \ 0000003C 056081E0 ADD R6,R1,R5 \ 00000040 0370A0E3 MOV R7,#+3 \ 00000044 010050E2 SUBS R0,R0,#+1 \ 00000048 0600000A BEQ ??method5_1 \ 0000004C 030050E2 SUBS R0,R0,#+3 \ 00000050 0A00000A BEQ ??method5_2 \ 00000054 070050E2 SUBS R0,R0,#+7 \ 00000058 0A00000A BEQ ??method5_3 \ 0000005C 250050E2 SUBS R0,R0,#+37 \ 00000060 1000000A BEQ ??method5_4 \ 00000064 030000EA B ??method5_5 3897 { 3898 case LEFT_SOFT: 3899 if (cltop) create_contactlist_menu(); \ ??method5_1: \ 00000068 680195E5 LDR R0,[R5, #+360] \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 F280BD08 POPEQ {R1,R4-R7,PC} \ 00000074 ........ BL create_contactlist_menu \ ??method5_5: \ 00000078 0000A0E3 MOV R0,#+0 \ 0000007C F280BDE8 POP {R1,R4-R7,PC} 3900 // if (cltop) remake_clmenu(); 3901 break; 3902 case RIGHT_SOFT: 3903 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI \ ??method5_2: \ 00000080 0100A0E3 MOV R0,#+1 \ 00000084 F280BDE8 POP {R1,R4-R7,PC} 3904 case GREEN_BUTTON: 3905 disautorecconect=0; \ ??method5_3: \ 00000088 0000A0E3 MOV R0,#+0 \ 0000008C 200185E5 STR R0,[R5, #+288] 3906 if ((connect_state==0)&&(sock==-1)) \ 00000090 440195E5 LDR R0,[R5, #+324] \ 00000094 000050E3 CMP R0,#+0 \ 00000098 48019505 LDREQ R0,[R5, #+328] \ 0000009C 01007003 CMNEQ R0,#+1 \ 000000A0 0700001A BNE ??method5_0 3907 { 3908 GBS_DelTimer(&reconnect_tmr); \ 000000A4 010000EA B ??method5_6 3909 DNR_TRIES=3; 3910 SUBPROC((void *)create_connect); 3911 } 3912 break; 3913 case '0': 3914 SUBPROC((void*)end_socket); \ ??method5_4: \ 000000A8 ........ LDR R0,??DataTable174 ;; end_socket \ 000000AC 710100EF SWI +369 3915 GBS_DelTimer(&reconnect_tmr); \ ??method5_6: \ 000000B0 0600A0E1 MOV R0,R6 \ 000000B4 8C0100EF SWI +396 3916 DNR_TRIES=3; \ 000000B8 907185E5 STR R7,[R5, #+400] 3917 SUBPROC((void *)create_connect); \ 000000BC 0400A0E1 MOV R0,R4 \ 000000C0 710100EF SWI +369 3918 break; 3919 } 3920 } 3921 return(0); \ ??method5_0: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 F280BDE8 POP {R1,R4-R7,PC} ;; return 3922 } 3923 \ In segment CODE, align 4, keep-with-next 3924 int method8(void){return(0);} \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 3925 \ In segment CODE, align 4, keep-with-next 3926 int method9(void){return(0);} \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 3927 3928 const void * const gui_methods[11]={ 3929 (void *)method0, //Redraw 3930 (void *)method1, //Create 3931 (void *)method2, //Close 3932 (void *)method3, //Focus 3933 (void *)method4, //Unfocus 3934 (void *)method5, //OnKey 3935 0, 3936 (void *)kill_data, //method7, //Destroy 3937 (void *)method8, 3938 (void *)method9, 3939 0 3940 }; 3941 3942 extern const int Reset_timer; 3943 \ In segment CODE, align 4, keep-with-next 3944 int my_keyhook(int key, int m) 3945 { \ my_keyhook: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0050A0E1 MOV R5,R0 3946 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 3947 { 3948 if(change_back_status==1) \ 00000018 ........ LDR R4,??DataTable140 ;; S_ICONS \ 0000001C 0060A0E3 MOV R6,#+0 \ 00000020 F00094E5 LDR R0,[R4, #+240] \ 00000024 010050E3 CMP R0,#+1 \ 00000028 0300001A BNE ??my_keyhook_1 3949 { 3950 CurrentStatus=status_rem; \ 0000002C EC0094E5 LDR R0,[R4, #+236] \ 00000030 340184E5 STR R0,[R4, #+308] 3951 set_my_status(); \ 00000034 ........ BL set_my_status 3952 // SUBPROC((void*)WriteDefSettings); 3953 change_back_status=0; \ 00000038 F06084E5 STR R6,[R4, #+240] 3954 } 3955 #ifdef EVILFOX 3956 if ((key==VOL_UP_BUTTON)&&(IsIdleUiOnTop())) 3957 { 3958 if(autobot==1) 3959 { 3960 autobot=0; 3961 ShowMSG(1,(int)"Autobot Off"); 3962 } 3963 else 3964 { 3965 autobot=1; 3966 ShowMSG(1,(int)"Autobot On"); 3967 } 3968 } 3969 #endif 3970 #ifdef ELKA 3971 #ifdef EVILFOX 3972 if ((key==VOL_DOWN_BUTTON)&&(IsIdleUiOnTop())) 3973 #else 3974 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 3975 #endif 3976 { 3977 GBS_StopTimer(&away_tmr); \ 00000050 1C00A0E3 MOV R0,#+28 \ 00000054 580D80E3 ORR R0,R0,#0x1600 \ 00000058 040080E0 ADD R0,R0,R4 \ 0000005C 440100EF SWI +324 3978 msg_away_timer=AUTO_ENGADE; \ 00000060 ........ LDR R0,??DataTable141 ;; AUTO_ENGADE \ 00000064 000090E5 LDR R0,[R0, #+0] \ 00000068 E00084E5 STR R0,[R4, #+224] 3979 away_timer(); \ 0000006C ........ BL away_timer 3980 main_d=1; \ 00000070 0100A0E3 MOV R0,#+1 \ 00000074 880184E5 STR R0,[R4, #+392] \ 00000078 0000A0E3 MOV R0,#+0 \ 0000007C 7080BDE8 POP {R4-R6,PC} 3981 } 3982 else 3983 { 3984 #endif 3985 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} 3986 { 3987 msg_away_timer=0; \ 00000090 E06084E5 STR R6,[R4, #+224] 3988 away_m=0; \ 00000094 E86084E5 STR R6,[R4, #+232] 3989 } 3990 #ifdef ELKA 3991 } 3992 #endif 3993 } 3994 return 0; \ ??my_keyhook_0: \ 00000098 0000A0E3 MOV R0,#+0 \ 0000009C 7080BDE8 POP {R4-R6,PC} ;; return \ ??my_keyhook_3: \ 000000A0 ........ DC32 Reset_timer 3995 } 3996 3997 const RECT Canvas={0,0,0,0}; 3998 \ In segment CODE, align 4, keep-with-next 3999 void maincsm_oncreate(CSM_RAM *data) 4000 { \ maincsm_oncreate: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0050A0E1 MOV R5,R0 4001 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000008 4000A0E3 MOV R0,#+64 4002 MAIN_CSM*csm=(MAIN_CSM*)data; 4003 zeromem(main_gui,sizeof(MAIN_GUI)); 4004 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,??DataTable179 ;; `?gui.canvas=(void *)(&Canvas); \ 00000044 100084E2 ADD R0,R4,#+16 \ 00000048 000086E5 STR R0,[R6, #+0] 4006 // main_gui->gui.flag30=2; 4007 main_gui->gui.methods=(void *)gui_methods; \ 0000004C 6400A0E3 MOV R0,#+100 \ 00000050 500E80E3 ORR R0,R0,#0x500 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 040086E5 STR R0,[R6, #+4] 4008 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 0000005C 158000EF SWI +32789 \ 00000060 200086E5 STR R0,[R6, #+32] 4009 csm->csm.state=0; \ 00000064 107085E5 STR R7,[R5, #+16] 4010 csm->csm.unk1=0; \ 00000068 147085E5 STR R7,[R5, #+20] 4011 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,??DataTable178 ;; S_ICONS \ 0000007C CC0085E5 STR R0,[R5, #+204] 4012 ews=AllocWS(16384); \ 00000080 400CA0E3 MOV R0,#+16384 \ 00000084 250100EF SWI +293 4013 // MutexCreate(&contactlist_mtx); 4014 DNR_TRIES=3; 4015 // SUBPROC((void *)InitSmiles); 4016 // SUBPROC((void *)create_connect); 4017 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000088 ........ LDR R2,??DataTable144 ;; process_active_timer \ 0000008C DC0085E5 STR R0,[R5, #+220] \ 00000090 0300A0E3 MOV R0,#+3 \ 00000094 900185E5 STR R0,[R5, #+400] \ 00000098 871EA0E3 MOV R1,#+2160 \ 0000009C 1C00A0E3 MOV R0,#+28 \ 000000A0 600D80E3 ORR R0,R0,#0x1800 \ 000000A4 050080E0 ADD R0,R0,R5 \ 000000A8 4D0000EF SWI +77 4018 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000000AC ........ LDR R0,??DataTable180 ;; UIN \ 000000B0 1B1084E2 ADD R1,R4,#+27 \ 000000B4 002090E5 LDR R2,[R0, #+0] \ 000000B8 2A00A0E3 MOV R0,#+42 \ 000000BC 500E80E3 ORR R0,R0,#0x500 \ 000000C0 040080E0 ADD R0,R0,R4 \ 000000C4 160000EF SWI +22 4019 gipc.name_to=ipc_my_name; \ 000000C8 2400A0E3 MOV R0,#+36 \ 000000CC 500E80E3 ORR R0,R0,#0x500 \ 000000D0 041080E0 ADD R1,R0,R4 \ 000000D4 741085E5 STR R1,[R5, #+116] 4020 gipc.name_from=ipc_my_name; \ 000000D8 040080E0 ADD R0,R0,R4 \ 000000DC 780085E5 STR R0,[R5, #+120] 4021 gipc.data=(void *)-1; \ 000000E0 0700E0E1 MVN R0,R7 \ 000000E4 7C0085E5 STR R0,[R5, #+124] 4022 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 000000E8 743085E2 ADD R3,R5,#+116 \ 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 4023 /* 4024 InitXStatusesImg(); 4025 //InitSmiles(); Это вызовется из InitXStatusesImg 4026 create_connect(); 4027 silenthide=1; 4028 gipc.name_to=ipc_xtask_name; 4029 gipc.name_from=ipc_my_name; 4030 gipc.data=0; 4031 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); 4032 */ 4033 } \ 00000104 F080BDE8 POP {R4-R7,PC} ;; return 4034 \ In segment CODE, align 4, keep-with-next 4035 void maincsm_onclose(CSM_RAM *csm) 4036 { \ maincsm_onclose: \ 00000000 10402DE9 PUSH {R4,LR} 4037 WriteDefSettings(); 4038 // SaveConfigData(successed_config_filename); 4039 4040 /* 4041 #pragma segment="CONFIG_C" 4042 unsigned int ul; 4043 int f; 4044 extern const CFG_HDR cfghdr0; //first var in CONFIG 4045 void *cfg=(void*)&cfghdr0; 4046 unsigned int len=(int)__segment_end("CONFIG_C")-(int)__segment_begin("CONFIG_C"); 4047 4048 if ((f=fopen("4:\\ZBin\\etc\\NATICQ.bcfg",A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul))==-1){ 4049 f=fopen("0:\\ZBin\\etc\\NATICQ.bcfg",A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul); 4050 } 4051 fwrite(f,cfg,len,&ul); 4052 fclose(f,&ul); 4053 */ 4054 4055 // GBS_DelTimer(&tmr_dorecv); 4056 RemoveKeybMsgHook((void *)my_keyhook); 4057 GBS_DelTimer(&tmr_active); \ 00000004 ........ LDR R4,??DataTable178 ;; S_ICONS \ 00000008 ........ BL WriteDefSettings \ 0000000C ........ LDR R0,??DataTable186 ;; my_keyhook \ 00000010 2D0100EF SWI +301 \ 00000014 1C00A0E3 MOV R0,#+28 \ 00000018 600D80E3 ORR R0,R0,#0x1800 \ 0000001C 040080E0 ADD R0,R0,R4 \ 00000020 8C0100EF SWI +396 4058 GBS_DelTimer(&tmr_vibra); \ 00000024 FC00A0E3 MOV R0,#+252 \ 00000028 5C0D80E3 ORR R0,R0,#0x1700 \ 0000002C 040080E0 ADD R0,R0,R4 \ 00000030 8C0100EF SWI +396 4059 GBS_DelTimer(&reconnect_tmr); \ 00000034 0C00A0E3 MOV R0,#+12 \ 00000038 600D80E3 ORR R0,R0,#0x1800 \ 0000003C 040080E0 ADD R0,R0,R4 \ 00000040 8C0100EF SWI +396 4060 GBS_DelTimer(&tmr_illumination); \ 00000044 EC00A0E3 MOV R0,#+236 \ 00000048 5C0D80E3 ORR R0,R0,#0x1700 \ 0000004C 040080E0 ADD R0,R0,R4 \ 00000050 8C0100EF SWI +396 4061 GBS_DelTimer(&mytmr); \ 00000054 2C00A0E3 MOV R0,#+44 \ 00000058 580D80E3 ORR R0,R0,#0x1600 \ 0000005C 040080E0 ADD R0,R0,R4 \ 00000060 8C0100EF SWI +396 4062 GBS_DelTimer(&mytmr2); \ 00000064 3C00A0E3 MOV R0,#+60 \ 00000068 580D80E3 ORR R0,R0,#0x1600 \ 0000006C 040080E0 ADD R0,R0,R4 \ 00000070 8C0100EF SWI +396 4063 GBS_DelTimer(&mytmr3); \ 00000074 A400A0E3 MOV R0,#+164 \ 00000078 4C0D80E3 ORR R0,R0,#0x1300 \ 0000007C 040080E0 ADD R0,R0,R4 \ 00000080 8C0100EF SWI +396 4064 GBS_DelTimer(&mytmr4); \ 00000084 4C00A0E3 MOV R0,#+76 \ 00000088 580D80E3 ORR R0,R0,#0x1600 \ 0000008C 040080E0 ADD R0,R0,R4 \ 00000090 8C0100EF SWI +396 4065 #ifdef NEWSGOLD 4066 GBS_DelTimer(&tracktmr); \ 00000094 5C00A0E3 MOV R0,#+92 \ 00000098 580D80E3 ORR R0,R0,#0x1600 \ 0000009C 040080E0 ADD R0,R0,R4 \ 000000A0 8C0100EF SWI +396 4067 #endif 4068 GBS_DelTimer(&develop); \ 000000A4 E800A0E3 MOV R0,#+232 \ 000000A8 640D80E3 ORR R0,R0,#0x1900 \ 000000AC 040080E0 ADD R0,R0,R4 \ 000000B0 8C0100EF SWI +396 4069 GBS_DelTimer(&away_tmr); \ 000000B4 1C00A0E3 MOV R0,#+28 \ 000000B8 580D80E3 ORR R0,R0,#0x1600 \ 000000BC 040080E0 ADD R0,R0,R4 \ 000000C0 8C0100EF SWI +396 4070 SetVibration(0); \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 7C0000EF SWI +124 4071 FreeTemplates(); \ 000000CC ........ BL FreeTemplates 4072 FreeCLIST(); \ 000000D0 ........ _BLF FreeCLIST,??FreeCLIST??rA 4073 free_ICONS(); \ 000000D4 ........ BL free_ICONS 4074 // FreeSmiles(); 4075 FreeWS(ews); \ 000000D8 DC0094E5 LDR R0,[R4, #+220] \ 000000DC 290100EF SWI +297 4076 FreeXStatusText(); \ 000000E0 ........ _BLF FreeXStatusText,??FreeXStatusText??rA 4077 // MutexDestroy(&contactlist_mtx); 4078 SUBPROC((void *)FreeSmiles); \ 000000E4 24009FE5 LDR R0,??maincsm_onclose_0 ;; FreeSmiles \ 000000E8 710100EF SWI +369 4079 SUBPROC((void *)FreeXStatusesImg); \ 000000EC 20009FE5 LDR R0,??maincsm_onclose_0+0x4 ;; FreeXStatusesImg \ 000000F0 710100EF SWI +369 4080 SUBPROC((void *)end_socket); \ 000000F4 ........ LDR R0,??DataTable174 ;; end_socket \ 000000F8 710100EF SWI +369 4081 SUBPROC((void *)ClearSendQ); \ 000000FC ........ LDR R0,??DataTable175 ;; ClearSendQ \ 00000100 710100EF SWI +369 4082 SUBPROC((void *)ElfKiller); \ 00000104 ........ LDR R0,??DataTable182 ;; ElfKiller \ 00000108 710100EF SWI +369 4083 } \ 0000010C 1080BDE8 POP {R4,PC} ;; return \ ??maincsm_onclose_0: \ 00000110 ........ DC32 FreeSmiles \ 00000114 ........ DC32 FreeXStatusesImg 4084 \ In segment CODE, align 4, keep-with-next 4085 void do_reconnect(void) 4086 { 4087 if (is_gprs_online) \ do_reconnect: \ 00000000 ........ LDR R0,??DataTable178 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 641190E5 LDR R1,[R0, #+356] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 4088 { 4089 DNR_TRIES=3; \ 00000014 0310A0E3 MOV R1,#+3 \ 00000018 901180E5 STR R1,[R0, #+400] 4090 SUBPROC((void*)create_connect); \ 0000001C ........ LDR R0,??DataTable170 ;; create_connect \ 00000020 710100EF SWI +369 4091 } 4092 } \ 00000024 0080BDE8 POP {PC} ;; return 4093 \ In segment CODE, align 4, keep-with-next 4094 void CheckDoubleRun(void) 4095 { \ CheckDoubleRun: \ 00000000 10402DE9 PUSH {R4,LR} 4096 int csm_id; 4097 if ((csm_id=(int)(gipc.data))!=-1) \ 00000004 ........ LDR R4,??DataTable178 ;; S_ICONS \ 00000008 7C0094E5 LDR R0,[R4, #+124] \ 0000000C 010070E3 CMN R0,#+1 \ 00000010 1500000A BEQ ??CheckDoubleRun_0 4098 { 4099 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable179 ;; `?msg==MSG_IPC) 4132 { 4133 IPC_REQ *ipc; 4134 if ((ipc=(IPC_REQ*)msg->data0)) \ 0000002C 0C8094E5 LDR R8,[R4, #+12] \ 00000030 000058E3 CMP R8,#+0 \ 00000034 7500000A BEQ ??maincsm_onmessage_2 4135 { 4136 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 00000038 000098E5 LDR R0,[R8, #+0] \ 0000003C 2490A0E3 MOV R9,#+36 \ 00000040 509E89E3 ORR R9,R9,#0x500 \ 00000044 071089E0 ADD R1,R9,R7 \ 00000048 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 6E00001A BNE ??maincsm_onmessage_2 4137 { 4138 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 6900008A 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 43000000 DC8 +67,+0,+0,+0 4139 { 4140 case IPC_CHECK_DOUBLERUN: 4141 //Если приняли свое собственное сообщение, значит запускаем чекер 4142 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 9C099FE5 LDR R0,??maincsm_onmessage_5 ;; CheckDoubleRun \ 0000008C 710100EF SWI +369 \ 00000090 5E0000EA B ??maincsm_onmessage_2 4143 else ipc->data=(void *)maincsm_id; \ ??maincsm_onmessage_4: \ 00000094 C80095E5 LDR R0,[R5, #+200] \ 00000098 080088E5 STR R0,[R8, #+8] \ 0000009C 5B0000EA B ??maincsm_onmessage_2 4144 break; 4145 case IPC_SMILE_PROCESSED: 4146 //Только собственные смайлы ;) 4147 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 7C099FE5 LDR R0,??maincsm_onmessage_5+0x4 ;; ProcessNextSmile \ ??maincsm_onmessage_8: \ 000000B0 710100EF SWI +369 4148 SMART_REDRAW(); \ ??maincsm_onmessage_7: \ 000000B4 ........ BL SMART_REDRAW \ 000000B8 540000EA B ??maincsm_onmessage_2 4149 break; 4150 case IPC_XSTATUSIMG_PROCESSED: 4151 //Только собственные иксстатусы ;) 4152 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 64099FE5 LDR R0,??maincsm_onmessage_5+0x8 ;; ProcessNextXStatImg \ 000000CC F7FFFFEA B ??maincsm_onmessage_8 4153 SMART_REDRAW(); 4154 break; 4155 case IPC_GAME: 4156 { 4157 4158 } 4159 break; 4160 case IPC_TENSECONDS: 4161 //Только свое сообщение 4162 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_10: \ 000000D0 071089E0 ADD R1,R9,R7 \ 000000D4 010050E1 CMP R0,R1 \ 000000D8 4C00001A BNE ??maincsm_onmessage_2 4163 { 4164 CLIST *t=(CLIST *)cltop; \ 000000DC 680195E5 LDR R0,[R5, #+360] 4165 int f=0; \ 000000E0 0010A0E3 MOV R1,#+0 \ 000000E4 000050E3 CMP R0,#+0 \ 000000E8 1900000A BEQ ??maincsm_onmessage_11 4166 while(t) 4167 { 4168 if(t->just_now) \ ??maincsm_onmessage_12: \ 000000EC 5C2090E5 LDR R2,[R0, #+92] \ 000000F0 000052E3 CMP R2,#+0 \ 000000F4 0200000A BEQ ??maincsm_onmessage_13 4169 { 4170 if (!(--(t->just_now))) f=1; \ 000000F8 012052E2 SUBS R2,R2,#+1 \ 000000FC 5C2080E5 STR R2,[R0, #+92] \ 00000100 0110A003 MOVEQ R1,#+1 4171 } 4172 if (t->isactive) \ ??maincsm_onmessage_13: \ 00000104 802090E5 LDR R2,[R0, #+128] \ 00000108 000052E3 CMP R2,#+0 \ 0000010C 0200000A BEQ ??maincsm_onmessage_14 4173 { 4174 // char *test=malloc(64); 4175 // sprintf(test, "time %d", t->isactive); 4176 if (!(--(t->isactive))) f=1; //Если дошли до 0 хотя бы один раз - надо перерисовать меню \ 00000110 012052E2 SUBS R2,R2,#+1 \ 00000114 802080E5 STR R2,[R0, #+128] \ 00000118 0110A003 MOVEQ R1,#+1 4177 // ShowMSG(1,(int)test); 4178 // mfree(test); 4179 } 4180 t=(CLIST *)(t->next); \ ??maincsm_onmessage_14: \ 0000011C 000090E5 LDR R0,[R0, #+0] 4181 } \ 00000120 000050E3 CMP R0,#+0 \ 00000124 F0FFFF1A BNE ??maincsm_onmessage_12 4182 if (f) \ 00000128 000051E3 CMP R1,#+0 \ 0000012C 0800000A BEQ ??maincsm_onmessage_11 4183 { 4184 CLIST *oldt=NULL; 4185 if (contactlist_menu_id) \ 00000130 701195E5 LDR R1,[R5, #+368] \ 00000134 000051E3 CMP R1,#+0 \ 00000138 0400000A BEQ ??maincsm_onmessage_15 4186 { 4187 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 0000013C 700195E5 LDR R0,[R5, #+368] \ 00000140 0010A0E3 MOV R1,#+0 \ 00000144 090200EF SWI +521 \ 00000148 8F0100EF SWI +399 \ 0000014C ........ _BLF FindContactByN,??FindContactByN??rA 4188 } 4189 RecountMenu(oldt); \ ??maincsm_onmessage_15: \ 00000150 ........ BL RecountMenu 4190 } 4191 if (time_to_stop_t9) \ ??maincsm_onmessage_11: \ 00000154 9C0195E5 LDR R0,[R5, #+412] \ 00000158 000050E3 CMP R0,#+0 \ 0000015C 2B00000A BEQ ??maincsm_onmessage_2 4192 { 4193 if (!(--time_to_stop_t9)) \ 00000160 010050E2 SUBS R0,R0,#+1 \ 00000164 9C0185E5 STR R0,[R5, #+412] \ 00000168 2800001A BNE ??maincsm_onmessage_2 4194 { 4195 if (IsGuiOnTop(edchat_id)) RefreshGUI(); \ 0000016C 740195E5 LDR R0,[R5, #+372] \ 00000170 350100EF SWI +309 \ 00000174 000050E3 CMP R0,#+0 \ 00000178 2400000A BEQ ??maincsm_onmessage_2 \ 0000017C 960100EF SWI +406 \ 00000180 220000EA B ??maincsm_onmessage_2 4196 } 4197 } 4198 } 4199 break; 4200 case IPC_SENDMSG: ; //IPC_SENDMSG by BoBa 26.06.07 4201 int l=strlen(((IPCMsg *)(ipc->data))->msg); \ ??maincsm_onmessage_16: \ 00000184 080098E5 LDR R0,[R8, #+8] \ 00000188 040090E5 LDR R0,[R0, #+4] \ 0000018C 1B0000EF SWI +27 \ 00000190 0090A0E1 MOV R9,R0 4202 TPKT *msg=malloc(sizeof(PKT)+l+30); \ 00000194 260089E2 ADD R0,R9,#+38 \ 00000198 140000EF SWI +20 \ 0000019C 00A0A0E1 MOV R10,R0 4203 msg->pkt.uin=((IPCMsg *)(ipc->data))->uin; \ 000001A0 080098E5 LDR R0,[R8, #+8] 4204 msg->pkt.type=T_SENDMSG; 4205 msg->pkt.data_len=l; 4206 memcpy(msg->data,((IPCMsg *)(ipc->data))->msg,l); \ 000001A4 0920A0E1 MOV R2,R9 \ 000001A8 000090E5 LDR R0,[R0, #+0] \ 000001AC 00008AE5 STR R0,[R10, #+0] \ 000001B0 0200A0E3 MOV R0,#+2 \ 000001B4 B400CAE1 STRH R0,[R10, #+4] \ 000001B8 B690CAE1 STRH R9,[R10, #+6] \ 000001BC 080098E5 LDR R0,[R8, #+8] \ 000001C0 041090E5 LDR R1,[R0, #+4] \ 000001C4 08008AE2 ADD R0,R10,#+8 \ 000001C8 1E0100EF SWI +286 4207 //slientsend=1; 4208 if(strstr(msg->data,PASS)==0) \ 000001CC 64189FE5 LDR R1,??maincsm_onmessage_5+0xC ;; PASS \ 000001D0 08008AE2 ADD R0,R10,#+8 \ 000001D4 180100EF SWI +280 \ 000001D8 000050E3 CMP R0,#+0 \ 000001DC 0400000A BEQ ??maincsm_onmessage_17 4209 { 4210 SENDMSGCOUNT++; //Номер сообщения 4211 SUBPROC((void *)SendAnswer,0,msg); 4212 } 4213 else 4214 { 4215 msg->pkt.data_len=40; \ 000001E0 2800A0E3 MOV R0,#+40 \ 000001E4 B600CAE1 STRH R0,[R10, #+6] 4216 strcpy(msg->data, "Fuck you hacker! my password sux ur ass"); \ 000001E8 F61F87E2 ADD R1,R7,#+984 \ 000001EC 08008AE2 ADD R0,R10,#+8 \ 000001F0 1A0000EF SWI +26 4217 SENDMSGCOUNT++; //Номер сообщения \ ??maincsm_onmessage_17: \ 000001F4 D00095E5 LDR R0,[R5, #+208] 4218 SUBPROC((void *)SendAnswer,0,msg); \ 000001F8 0A20A0E1 MOV R2,R10 \ 000001FC 010080E2 ADD R0,R0,#+1 \ 00000200 D00085E5 STR R0,[R5, #+208] \ 00000204 ........ LDR R0,??DataTable173 ;; SendAnswer \ 00000208 0010A0E3 MOV R1,#+0 \ 0000020C 710100EF SWI +369 4219 } 4220 break; 4221 } 4222 } 4223 } 4224 } 4225 //Нарисуем иконочку моего статуса 4226 #define idlegui_id (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 4227 CSM_RAM *icsm=FindCSMbyID(CSM_root()->idle_id); \ ??maincsm_onmessage_2: \ 00000210 068100EF SWI +33030 \ 00000214 040090E5 LDR R0,[R0, #+4] \ 00000218 080100EF SWI +264 \ 0000021C 2C0090E5 LDR R0,[R0, #+44] 4228 if (IsGuiOnTop(idlegui_id)/*&&IsUnlocked()*/) //Если IdleGui на самом верху \ 00000220 350100EF SWI +309 \ 00000224 000050E3 CMP R0,#+0 \ 00000228 0901000A BEQ ??maincsm_onmessage_18 4229 { 4230 GUI *igui=GetTopGUI(); 4231 if (igui) //И он существует \ 0000022C 4D0100EF SWI +333 \ 00000230 000050E3 CMP R0,#+0 \ 00000234 0801000A BEQ ??maincsm_onmessage_19 4232 { 4233 //#ifdef ELKA 4234 INC_show=0; \ 00000238 A86185E5 STR R6,[R5, #+424] 4235 //#endif 4236 canvasdata=BuildCanvas(); \ 0000023C F18000EF SWI +33009 \ 00000240 9C0085E5 STR R0,[R5, #+156] 4237 int icn; 4238 if (total_unread) \ 00000244 C00095E5 LDR R0,[R5, #+192] \ 00000248 000050E3 CMP R0,#+0 4239 icn=IS_MSG; \ 0000024C 0D00A013 MOVNE R0,#+13 \ 00000250 0500001A BNE ??maincsm_onmessage_20 4240 else 4241 { 4242 switch(connect_state) \ 00000254 440195E5 LDR R0,[R5, #+324] \ 00000258 000050E3 CMP R0,#+0 \ 0000025C 0200000A BEQ ??maincsm_onmessage_20 \ 00000260 030050E2 SUBS R0,R0,#+3 4243 { 4244 case 0: 4245 icn=IS_OFFLINE; break; 4246 case 3: 4247 icn=CurrentStatus; //IS_ONLINE; \ 00000264 34019505 LDREQ R0,[R5, #+308] 4248 break; 4249 default: 4250 icn=IS_UNKNOWN; break; \ 00000268 0E00A013 MOVNE R0,#+14 4251 } 4252 } 4253 //Тут трохи поменял 4254 // by Rainmaker: Рисуем канву только для иконки и выводим в своих координатах 4255 DrawCanvas(canvasdata,IDLEICON_X,IDLEICON_Y,IDLEICON_X+GetImgWidth((int)S_ICONS[icn])-1, 4256 IDLEICON_Y+GetImgHeight((int)S_ICONS[icn])-1,1); \ ??maincsm_onmessage_20: \ 0000026C 008185E0 ADD R8,R5,R0, LSL #+2 \ 00000270 000098E5 LDR R0,[R8, #+0] \ 00000274 210000EF SWI +33 \ 00000278 0090A0E1 MOV R9,R0 \ 0000027C 000098E5 LDR R0,[R8, #+0] \ 00000280 220000EF SWI +34 \ 00000284 B0179FE5 LDR R1,??maincsm_onmessage_5+0x10 ;; IDLEICON_X \ 00000288 00A091E5 LDR R10,[R1, #+0] \ 0000028C AC179FE5 LDR R1,??maincsm_onmessage_5+0x14 ;; IDLEICON_Y \ 00000290 0A0080E0 ADD R0,R0,R10 \ 00000294 00B091E5 LDR R11,[R1, #+0] \ 00000298 0110A0E3 MOV R1,#+1 \ 0000029C 02002DE9 PUSH {R1} \ 000002A0 013040E2 SUB R3,R0,#+1 \ 000002A4 0B20A0E1 MOV R2,R11 \ 000002A8 0B1089E0 ADD R1,R9,R11 \ 000002AC 011041E2 SUB R1,R1,#+1 \ 000002B0 02002DE9 PUSH {R1} \ 000002B4 9C0095E5 LDR R0,[R5, #+156] \ 000002B8 0A10A0E1 MOV R1,R10 \ 000002BC 250000EF SWI +37 4257 DrawImg(IDLEICON_X,IDLEICON_Y,S_ICONS[icn]); \ 000002C0 002098E5 LDR R2,[R8, #+0] \ 000002C4 0B10A0E1 MOV R1,R11 \ 000002C8 0A00A0E1 MOV R0,R10 \ 000002CC 230000EF SWI +35 4258 if(show_xstatus) \ 000002D0 6C079FE5 LDR R0,??maincsm_onmessage_5+0x18 ;; show_xstatus \ 000002D4 000090E5 LDR R0,[R0, #+0] \ 000002D8 08D08DE2 ADD SP,SP,#+8 \ 000002DC 000050E3 CMP R0,#+0 \ 000002E0 2600000A BEQ ??maincsm_onmessage_21 4259 { 4260 PNGTOP_DESC *pltop=PNG_TOP(); 4261 pltop->dyn_pltop=XStatusesImgList; \ 000002E4 5C879FE5 LDR R8,??maincsm_onmessage_5+0x1C ;; XStatusesIconArray \ 000002E8 B98100EF SWI +33209 \ 000002EC ........ LDR R1,??DataTable158 ;; XStatusesImgList \ 000002F0 001091E5 LDR R1,[R1, #+0] \ 000002F4 081080E5 STR R1,[R0, #+8] \ 000002F8 ........ LDR R0,??DataTable161 ;; CurrentXStatus \ 000002FC 001098E5 LDR R1,[R8, #+0] \ 00000300 000090E5 LDR R0,[R0, #+0] \ 00000304 000191E7 LDR R0,[R1, +R0, LSL #+2] 4262 DrawCanvas(canvasdata,IDLEICON_XX,IDLEICON_YX,IDLEICON_XX+GetImgWidth((int)XStatusesIconArray[CurrentXStatus])-1, 4263 IDLEICON_YX+GetImgHeight((int)XStatusesIconArray[CurrentXStatus])-1,1); \ 00000308 210000EF SWI +33 \ 0000030C 001098E5 LDR R1,[R8, #+0] \ 00000310 0090A0E1 MOV R9,R0 \ 00000314 ........ LDR R0,??DataTable161 ;; CurrentXStatus \ 00000318 000090E5 LDR R0,[R0, #+0] \ 0000031C 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 00000320 220000EF SWI +34 \ 00000324 20179FE5 LDR R1,??maincsm_onmessage_5+0x20 ;; IDLEICON_XX \ 00000328 00A091E5 LDR R10,[R1, #+0] \ 0000032C 1C179FE5 LDR R1,??maincsm_onmessage_5+0x24 ;; IDLEICON_YX \ 00000330 0A0080E0 ADD R0,R0,R10 \ 00000334 00B091E5 LDR R11,[R1, #+0] \ 00000338 0110A0E3 MOV R1,#+1 \ 0000033C 02002DE9 PUSH {R1} \ 00000340 013040E2 SUB R3,R0,#+1 \ 00000344 0B20A0E1 MOV R2,R11 \ 00000348 0B1089E0 ADD R1,R9,R11 \ 0000034C 011041E2 SUB R1,R1,#+1 \ 00000350 02002DE9 PUSH {R1} \ 00000354 9C0095E5 LDR R0,[R5, #+156] \ 00000358 0A10A0E1 MOV R1,R10 \ 0000035C 250000EF SWI +37 4264 DrawImg(IDLEICON_XX,IDLEICON_YX,XStatusesIconArray[CurrentXStatus]); \ 00000360 ........ LDR R0,??DataTable161 ;; CurrentXStatus \ 00000364 001098E5 LDR R1,[R8, #+0] \ 00000368 000090E5 LDR R0,[R0, #+0] \ 0000036C 002191E7 LDR R2,[R1, +R0, LSL #+2] \ 00000370 0B10A0E1 MOV R1,R11 \ 00000374 0A00A0E1 MOV R0,R10 \ 00000378 230000EF SWI +35 \ 0000037C 08D08DE2 ADD SP,SP,#+8 4265 } 4266 #ifdef EVILFOX 4267 DrawImg(IDLEICON_X-1,IDLEICON_Y-8,(int)"4:\\zbin\\naticq\\img\\naticq_ms.png"); 4268 #endif 4269 /* 4270 #ifdef EVILFOX 4271 #else 4272 if(strlen(fontpath)>5) 4273 { 4274 #endif 4275 */ 4276 if (main_d==1) \ ??maincsm_onmessage_21: \ 00000380 880195E5 LDR R0,[R5, #+392] \ 00000384 010050E3 CMP R0,#+1 \ 00000388 8500001A BNE ??maincsm_onmessage_22 4277 { 4278 ClearScreen(); \ 0000038C ........ _BLF ClearScreen,??ClearScreen??rA 4279 if(Is_SMARTCPU_On) \ 00000390 B00095E5 LDR R0,[R5, #+176] \ 00000394 000050E3 CMP R0,#+0 \ 00000398 8000000A BEQ ??maincsm_onmessage_23 4280 { 4281 #ifdef EVILFOX 4282 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, 0); 4283 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, 0); 4284 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, 0); 4285 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, 0); 4286 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, 0); 4287 #else 4288 if(fonto==1) \ 0000039C B0069FE5 LDR R0,??maincsm_onmessage_5+0x28 ;; msg_d_x \ 000003A0 983095E5 LDR R3,[R5, #+152] \ 000003A4 B810A0E3 MOV R1,#+184 \ 000003A8 641D81E3 ORR R1,R1,#0x1900 \ 000003AC 051081E0 ADD R1,R1,R5 \ 000003B0 14108DE5 STR R1,[SP, #+20] \ 000003B4 8810A0E3 MOV R1,#+136 \ 000003B8 641D81E3 ORR R1,R1,#0x1900 \ 000003BC 051081E0 ADD R1,R1,R5 \ 000003C0 10108DE5 STR R1,[SP, #+16] \ 000003C4 5810A0E3 MOV R1,#+88 \ 000003C8 641D81E3 ORR R1,R1,#0x1900 \ 000003CC 051081E0 ADD R1,R1,R5 \ 000003D0 0C108DE5 STR R1,[SP, #+12] \ 000003D4 2810A0E3 MOV R1,#+40 \ 000003D8 641D81E3 ORR R1,R1,#0x1900 \ 000003DC 051081E0 ADD R1,R1,R5 \ 000003E0 08108DE5 STR R1,[SP, #+8] \ 000003E4 008090E5 LDR R8,[R0, #+0] \ 000003E8 68069FE5 LDR R0,??maincsm_onmessage_5+0x2C ;; msg_d_y \ 000003EC 009090E5 LDR R9,[R0, #+0] \ 000003F0 F800A0E3 MOV R0,#+248 \ 000003F4 600D80E3 ORR R0,R0,#0x1800 \ 000003F8 052080E0 ADD R2,R0,R5 \ 000003FC 58069FE5 LDR R0,??maincsm_onmessage_5+0x30 ;; spaco2 \ 00000400 00A090E5 LDR R10,[R0, #+0] \ 00000404 ........ LDR R0,??DataTable184 ;; fonto \ 00000408 00B090E5 LDR R11,[R0, #+0] \ 0000040C 0A00A0E1 MOV R0,R10 \ 00000410 01002DE9 PUSH {R0} \ 00000414 01005BE3 CMP R11,#+1 \ 00000418 2B00001A BNE ??maincsm_onmessage_24 4289 { 4290 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ 0000041C 0100A0E3 MOV R0,#+1 \ 00000420 01002DE9 PUSH {R0} \ 00000424 0910A0E1 MOV R1,R9 \ 00000428 0800A0E1 MOV R0,R8 \ 0000042C ........ _BLF PrintField,??PrintField??rA 4291 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, spaco2); \ 00000430 0A00A0E1 MOV R0,R10 \ 00000434 01002DE9 PUSH {R0} \ 00000438 0100A0E3 MOV R0,#+1 \ 0000043C 01002DE9 PUSH {R0} \ 00000440 983095E5 LDR R3,[R5, #+152] \ 00000444 18209DE5 LDR R2,[SP, #+24] \ 00000448 A00095E5 LDR R0,[R5, #+160] \ 0000044C 091080E0 ADD R1,R0,R9 \ 00000450 0800A0E1 MOV R0,R8 \ 00000454 ........ _BLF PrintField,??PrintField??rA 4292 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, spaco2); \ 00000458 0A00A0E1 MOV R0,R10 \ 0000045C 01002DE9 PUSH {R0} \ 00000460 0100A0E3 MOV R0,#+1 \ 00000464 01002DE9 PUSH {R0} \ 00000468 983095E5 LDR R3,[R5, #+152] \ 0000046C 24209DE5 LDR R2,[SP, #+36] \ 00000470 A00095E5 LDR R0,[R5, #+160] \ 00000474 801089E0 ADD R1,R9,R0, LSL #+1 \ 00000478 0800A0E1 MOV R0,R8 \ 0000047C ........ _BLF PrintField,??PrintField??rA 4293 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, spaco2); \ 00000480 0A00A0E1 MOV R0,R10 \ 00000484 01002DE9 PUSH {R0} \ 00000488 0100A0E3 MOV R0,#+1 \ 0000048C 01002DE9 PUSH {R0} \ 00000490 983095E5 LDR R3,[R5, #+152] \ 00000494 30209DE5 LDR R2,[SP, #+48] \ 00000498 A00095E5 LDR R0,[R5, #+160] \ 0000049C 800080E0 ADD R0,R0,R0, LSL #+1 \ 000004A0 091080E0 ADD R1,R0,R9 \ 000004A4 0800A0E1 MOV R0,R8 \ 000004A8 ........ _BLF PrintField,??PrintField??rA 4294 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, spaco2); \ 000004AC 00042DE9 PUSH {R10} \ 000004B0 0100A0E3 MOV R0,#+1 \ 000004B4 01002DE9 PUSH {R0} \ 000004B8 983095E5 LDR R3,[R5, #+152] \ 000004BC 3C209DE5 LDR R2,[SP, #+60] \ 000004C0 A00095E5 LDR R0,[R5, #+160] \ 000004C4 001189E0 ADD R1,R9,R0, LSL #+2 \ 000004C8 310000EA B ??maincsm_onmessage_25 4295 } 4296 else 4297 { 4298 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ ??maincsm_onmessage_24: \ 000004CC 0B00A0E1 MOV R0,R11 \ 000004D0 01002DE9 PUSH {R0} \ 000004D4 0910A0E1 MOV R1,R9 \ 000004D8 0800A0E1 MOV R0,R8 \ 000004DC ........ _BLF PrintField,??PrintField??rA 4299 PrintField(msg_d_x,msg_d_y+GetFontYSIZE(paused_height)+1, s_txt, align, fonto, spaco2); \ 000004E0 A00095E5 LDR R0,[R5, #+160] \ 000004E4 C50100EF SWI +453 \ 000004E8 0A10A0E1 MOV R1,R10 \ 000004EC 02002DE9 PUSH {R1} \ 000004F0 090080E0 ADD R0,R0,R9 \ 000004F4 0B10A0E1 MOV R1,R11 \ 000004F8 02002DE9 PUSH {R1} \ 000004FC 983095E5 LDR R3,[R5, #+152] \ 00000500 18209DE5 LDR R2,[SP, #+24] \ 00000504 011080E2 ADD R1,R0,#+1 \ 00000508 0800A0E1 MOV R0,R8 \ 0000050C ........ _BLF PrintField,??PrintField??rA 4300 PrintField(msg_d_x,msg_d_y+(2*GetFontYSIZE(paused_height))+2, d_txt, align, fonto, spaco2); \ 00000510 A00095E5 LDR R0,[R5, #+160] \ 00000514 C50100EF SWI +453 \ 00000518 0A10A0E1 MOV R1,R10 \ 0000051C 02002DE9 PUSH {R1} \ 00000520 800089E0 ADD R0,R9,R0, LSL #+1 \ 00000524 0B10A0E1 MOV R1,R11 \ 00000528 02002DE9 PUSH {R1} \ 0000052C 983095E5 LDR R3,[R5, #+152] \ 00000530 24209DE5 LDR R2,[SP, #+36] \ 00000534 021080E2 ADD R1,R0,#+2 \ 00000538 0800A0E1 MOV R0,R8 \ 0000053C ........ _BLF PrintField,??PrintField??rA 4301 PrintField(msg_d_x,msg_d_y+(3*GetFontYSIZE(paused_height))+3, f_txt, align, fonto, spaco2); \ 00000540 A00095E5 LDR R0,[R5, #+160] \ 00000544 C50100EF SWI +453 \ 00000548 0A10A0E1 MOV R1,R10 \ 0000054C 02002DE9 PUSH {R1} \ 00000550 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000554 090080E0 ADD R0,R0,R9 \ 00000558 0B10A0E1 MOV R1,R11 \ 0000055C 02002DE9 PUSH {R1} \ 00000560 983095E5 LDR R3,[R5, #+152] \ 00000564 30209DE5 LDR R2,[SP, #+48] \ 00000568 031080E2 ADD R1,R0,#+3 \ 0000056C 0800A0E1 MOV R0,R8 \ 00000570 ........ _BLF PrintField,??PrintField??rA 4302 PrintField(msg_d_x,msg_d_y+(4*GetFontYSIZE(paused_height))+4, g_txt, align, fonto, spaco2); \ 00000574 A00095E5 LDR R0,[R5, #+160] \ 00000578 C50100EF SWI +453 \ 0000057C 00042DE9 PUSH {R10} \ 00000580 00082DE9 PUSH {R11} \ 00000584 983095E5 LDR R3,[R5, #+152] \ 00000588 3C209DE5 LDR R2,[SP, #+60] \ 0000058C 000189E0 ADD R0,R9,R0, LSL #+2 \ 00000590 041080E2 ADD R1,R0,#+4 \ ??maincsm_onmessage_25: \ 00000594 0800A0E1 MOV R0,R8 \ 00000598 ........ _BLF PrintField,??PrintField??rA \ 0000059C 28D08DE2 ADD SP,SP,#+40 4303 } 4304 #endif 4305 } 4306 main_d=0; \ ??maincsm_onmessage_23: \ 000005A0 886185E5 STR R6,[R5, #+392] 4307 } 4308 if(Is_UPTIME_On) \ ??maincsm_onmessage_22: \ 000005A4 FC0095E5 LDR R0,[R5, #+252] \ 000005A8 000050E3 CMP R0,#+0 \ 000005AC 0100000A BEQ ??maincsm_onmessage_26 4309 Draw2(canvasdata); \ 000005B0 9C0095E5 LDR R0,[R5, #+156] \ 000005B4 ........ BL Draw2 4310 if(Is_PING_On) \ ??maincsm_onmessage_26: \ 000005B8 A80095E5 LDR R0,[R5, #+168] \ 000005BC 000050E3 CMP R0,#+0 \ 000005C0 0100000A BEQ ??maincsm_onmessage_27 4311 Draw(canvasdata); \ 000005C4 9C0095E5 LDR R0,[R5, #+156] \ 000005C8 ........ BL Draw 4312 if(Auto_Status) \ ??maincsm_onmessage_27: \ 000005CC ........ LDR R0,??DataTable163 ;; Auto_Status \ 000005D0 000090E5 LDR R0,[R0, #+0] \ 000005D4 000050E3 CMP R0,#+0 \ 000005D8 0100000A BEQ ??maincsm_onmessage_28 4313 DrawAutoMSG(canvasdata); \ 000005DC 9C0095E5 LDR R0,[R5, #+156] \ 000005E0 ........ BL DrawAutoMSG 4314 if(Is_Unread_On) \ ??maincsm_onmessage_28: \ 000005E4 74049FE5 LDR R0,??maincsm_onmessage_5+0x34 ;; Is_Unread_On \ 000005E8 000090E5 LDR R0,[R0, #+0] \ 000005EC 000050E3 CMP R0,#+0 \ 000005F0 1200000A BEQ ??maincsm_onmessage_29 4315 { 4316 sprintf(unread_msg_info, "Unread: %d", total_unread2); \ 000005F4 C42095E5 LDR R2,[R5, #+196] \ 000005F8 E58FA0E3 MOV R8,#+916 \ 000005FC 401E87E2 ADD R1,R7,#+1024 \ 00000600 050088E0 ADD R0,R8,R5 \ 00000604 160000EF SWI +22 4317 #ifdef EVILFOX 4318 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, space); 4319 #else 4320 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, spaco1); \ 00000608 ........ LDR R0,??DataTable164 ;; spaco1 \ 0000060C 052088E0 ADD R2,R8,R5 \ 00000610 000090E5 LDR R0,[R0, #+0] \ 00000614 01002DE9 PUSH {R0} \ 00000618 ........ LDR R0,??DataTable184 ;; fonto \ 0000061C 000090E5 LDR R0,[R0, #+0] \ 00000620 01002DE9 PUSH {R0} \ 00000624 983095E5 LDR R3,[R5, #+152] \ 00000628 34049FE5 LDR R0,??maincsm_onmessage_5+0x38 ;; unread_Y \ 0000062C 001090E5 LDR R1,[R0, #+0] \ 00000630 30049FE5 LDR R0,??maincsm_onmessage_5+0x3C ;; unread_X \ 00000634 000090E5 LDR R0,[R0, #+0] \ 00000638 ........ _BLF PrintField,??PrintField??rA \ 0000063C 08D08DE2 ADD SP,SP,#+8 4321 #endif 4322 } 4323 /* 4324 #ifdef EVILFOX 4325 #else 4326 } 4327 #endif 4328 */ 4329 #ifdef ELKA 4330 if (total_unread) \ ??maincsm_onmessage_29: \ 00000640 C00095E5 LDR R0,[R5, #+192] \ 00000644 000050E3 CMP R0,#+0 \ 00000648 0300000A BEQ ??maincsm_onmessage_19 4331 SLI_On(); \ 0000064C ........ BL SLI_On \ 00000650 010000EA B ??maincsm_onmessage_19 4332 #endif 4333 } 4334 } 4335 else 4336 { 4337 main_d=1; \ ??maincsm_onmessage_18: \ 00000654 0100A0E3 MOV R0,#+1 \ 00000658 880185E5 STR R0,[R5, #+392] 4338 } 4339 /* 4340 if(INC_show>0) 4341 { 4342 WSHDR *ws=AllocWS(256); 4343 ascii2ws(ws,show_nick); 4344 // wsprintf(ws,show_nick); 4345 DrawRectangle(0,0,Get_WS_width(ws,font)+2,GetFontYSIZE(font)+2,0,GetPaletteAdrByColorIndex(1),GetPaletteAdrByColorIndex(1)); 4346 DrawString(ws,1,1,1+Get_WS_width(ws,font)+2,1+GetFontYSIZE(font),font,0,( char*) color,GetPaletteAdrByColorIndex(23)); 4347 FreeWS(ws); 4348 INC_show--; 4349 } 4350 */ 4351 // } 4352 //#endif 4353 } 4354 if (msg->msg==MSG_RECONFIGURE_REQ) \ ??maincsm_onmessage_19: \ 0000065C 040094E5 LDR R0,[R4, #+4] \ 00000660 AF10A0E3 MOV R1,#+175 \ 00000664 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000668 010050E1 CMP R0,R1 \ 0000066C 2D00001A BNE ??maincsm_onmessage_30 4355 { 4356 extern const char *successed_config_filename; 4357 if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) \ 00000670 ........ LDR R0,??DataTable181 ;; successed_config_filename \ 00000674 0C1094E5 LDR R1,[R4, #+12] \ 00000678 000090E5 LDR R0,[R0, #+0] \ 0000067C ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000680 000050E3 CMP R0,#+0 \ 00000684 2700001A BNE ??maincsm_onmessage_30 4358 { 4359 #ifdef SECOND_NATICQ 4360 ShowMSG(1,(int)"NatICQ 2 config updated!"); 4361 #else 4362 ShowMSG(1,(int)"NatICQ config updated!"); 4363 #endif 4364 InitConfig(); 4365 initTags(); 4366 FontPathFree(); 4367 #ifdef EVILFOX 4368 FontPathInit(fonto,(char *)fontpath, 0); 4369 #else 4370 FontPathInit(fonto,(char *)fontpath, 1); \ 00000688 ........ LDR R8,??DataTable183 ;; fontpath \ 0000068C 0C00A0E3 MOV R0,#+12 \ 00000690 400E80E3 ORR R0,R0,#0x400 \ 00000694 071080E0 ADD R1,R0,R7 \ 00000698 0100A0E3 MOV R0,#+1 \ 0000069C 480100EF SWI +328 \ 000006A0 ........ _BLF InitConfig,??InitConfig??rA \ 000006A4 ........ _BLF initTags,??initTags??rA \ 000006A8 ........ _BLF FontPathFree,??FontPathFree??rA \ 000006AC ........ LDR R0,??DataTable184 ;; fonto \ 000006B0 0120A0E3 MOV R2,#+1 \ 000006B4 00B090E5 LDR R11,[R0, #+0] \ 000006B8 0810A0E1 MOV R1,R8 \ 000006BC 0B00A0E1 MOV R0,R11 \ 000006C0 ........ _BLF FontPathInit,??FontPathInit??rA 4371 #endif 4372 //#ifdef ELKA 4373 if(fonto==1) \ 000006C4 01005BE3 CMP R11,#+1 \ 000006C8 0E00001A BNE ??maincsm_onmessage_31 4374 { 4375 char *heght=malloc(64); \ 000006CC 4000A0E3 MOV R0,#+64 \ 000006D0 140000EF SWI +20 \ 000006D4 0090A0E1 MOV R9,R0 4376 sprintf(heght, "%s2240.png", fontpath); \ 000006D8 0820A0E1 MOV R2,R8 \ 000006DC 2400A0E3 MOV R0,#+36 \ 000006E0 400E80E3 ORR R0,R0,#0x400 \ 000006E4 071080E0 ADD R1,R0,R7 \ 000006E8 0900A0E1 MOV R0,R9 \ 000006EC 160000EF SWI +22 4377 paused_height=GetImgHeight((int)heght); \ 000006F0 0900A0E1 MOV R0,R9 \ 000006F4 210000EF SWI +33 \ 000006F8 A00085E5 STR R0,[R5, #+160] 4378 mfree(heght); \ 000006FC 0900A0E1 MOV R0,R9 \ 00000700 150000EF SWI +21 \ 00000704 010000EA B ??maincsm_onmessage_32 4379 } 4380 else 4381 paused_height=fonto-100; \ ??maincsm_onmessage_31: \ 00000708 64004BE2 SUB R0,R11,#+100 \ 0000070C A00085E5 STR R0,[R5, #+160] 4382 //#endif 4383 free_ICONS(); \ ??maincsm_onmessage_32: \ 00000710 ........ BL free_ICONS 4384 setup_ICONS(); \ 00000714 ........ BL setup_ICONS 4385 ResortCL(); \ 00000718 ........ _BLF ResortCL,??ResortCL??rA 4386 RecountMenu(NULL); \ 0000071C 0000A0E3 MOV R0,#+0 \ 00000720 ........ BL RecountMenu 4387 init_time_zone(); \ 00000724 ........ BL init_time_zone 4388 // InitSmiles(); 4389 } 4390 } 4391 if (msg->msg==MSG_GUI_DESTROYED) \ ??maincsm_onmessage_30: \ 00000728 040094E5 LDR R0,[R4, #+4] \ 0000072C 0E10A0E3 MOV R1,#+14 \ 00000730 641C81E3 ORR R1,R1,#0x6400 \ 00000734 010050E1 CMP R0,R1 \ 00000738 0E00001A BNE ??maincsm_onmessage_33 4392 { 4393 if ((int)msg->data0==csm->gui_id) \ 0000073C 1C109DE5 LDR R1,[SP, #+28] \ 00000740 0C0094E5 LDR R0,[R4, #+12] \ 00000744 281091E5 LDR R1,[R1, #+40] \ 00000748 010050E1 CMP R0,R1 4394 { 4395 csm->csm.state=-3; \ 0000074C 1C009D05 LDREQ R0,[SP, #+28] \ 00000750 0210E003 MVNEQ R1,#+2 \ 00000754 10108005 STREQ R1,[R0, #+16] 4396 } 4397 if ((int)msg->data0==contactlist_menu_id) \ 00000758 0C0094E5 LDR R0,[R4, #+12] \ 0000075C 701195E5 LDR R1,[R5, #+368] \ 00000760 010050E1 CMP R0,R1 4398 { 4399 contactlist_menu_id=0; \ 00000764 70618505 STREQ R6,[R5, #+368] 4400 prev_clmenu_itemcount=0; \ 00000768 78618505 STREQ R6,[R5, #+376] 4401 } 4402 if ((int)msg->data0==edchat_id) \ 0000076C 741195E5 LDR R1,[R5, #+372] \ 00000770 010050E1 CMP R0,R1 4403 { 4404 edchat_id=0; \ 00000774 74618505 STREQ R6,[R5, #+372] 4405 } 4406 } 4407 if (msg->msg==MSG_HELPER_TRANSLATOR) \ ??maincsm_onmessage_33: \ 00000778 040094E5 LDR R0,[R4, #+4] \ 0000077C AE10A0E3 MOV R1,#+174 \ 00000780 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000784 010050E1 CMP R0,R1 \ 00000788 0F00001A BNE ??maincsm_onmessage_34 4408 { 4409 switch((int)msg->data0) \ 0000078C 0C0094E5 LDR R0,[R4, #+12] \ 00000790 101094E5 LDR R1,[R4, #+16] \ 00000794 ........ LDR R9,??DataTable169 ;; do_reconnect \ 00000798 0C20A0E3 MOV R2,#+12 \ 0000079C 602D82E3 ORR R2,R2,#0x1800 \ 000007A0 054082E0 ADD R4,R2,R5 \ 000007A4 482F42E2 SUB R2,R2,#+288 \ 000007A8 058082E0 ADD R8,R2,R5 \ 000007AC 802050E2 SUBS R2,R0,#+128 \ 000007B0 0800000A BEQ ??maincsm_onmessage_35 \ 000007B4 022052E2 SUBS R2,R2,#+2 \ 000007B8 0200000A BEQ ??maincsm_onmessage_36 \ 000007BC 122052E2 SUBS R2,R2,#+18 \ 000007C0 0F00000A BEQ ??maincsm_onmessage_37 \ 000007C4 170000EA B ??maincsm_onmessage_38 4410 { 4411 case LMAN_DISCONNECT_IND: 4412 is_gprs_online=0; \ ??maincsm_onmessage_36: \ 000007C8 646185E5 STR R6,[R5, #+356] 4413 return(1); \ ??maincsm_onmessage_34: \ 000007CC 0100A0E3 MOV R0,#+1 \ 000007D0 20D08DE2 ADD SP,SP,#+32 \ 000007D4 F08FBDE8 POP {R4-R11,PC} ;; return 4414 case LMAN_CONNECT_CNF: 4415 vibra_count=1; \ ??maincsm_onmessage_35: \ 000007D8 0100A0E3 MOV R0,#+1 \ 000007DC F80085E5 STR R0,[R5, #+248] 4416 start_vibra(); \ 000007E0 ........ BL start_vibra 4417 is_gprs_online=1; \ 000007E4 0100A0E3 MOV R0,#+1 \ 000007E8 640185E5 STR R0,[R5, #+356] 4418 strcpy(logmsg,LG_GRGPRSUP); \ 000007EC 431E87E2 ADD R1,R7,#+1072 \ 000007F0 0800A0E1 MOV R0,R8 \ 000007F4 1A0000EF SWI +26 4419 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*10,do_reconnect); \ 000007F8 0920A0E1 MOV R2,R9 \ 000007FC 871EA0E3 MOV R1,#+2160 \ 00000800 840000EA B ??maincsm_onmessage_39 4420 return(1); 4421 case ENIP_DNR_HOST_BY_NAME: 4422 if ((int)msg->data1==DNR_ID) \ ??maincsm_onmessage_37: \ 00000804 8C0195E5 LDR R0,[R5, #+396] \ 00000808 000051E1 CMP R1,R0 \ 0000080C EEFFFF1A BNE ??maincsm_onmessage_34 4423 { 4424 if (DNR_TRIES) SUBPROC((void *)create_connect); \ 00000810 900195E5 LDR R0,[R5, #+400] \ 00000814 000050E3 CMP R0,#+0 \ 00000818 EBFFFF0A BEQ ??maincsm_onmessage_34 \ 0000081C ........ LDR R0,??DataTable170 ;; create_connect \ ??maincsm_onmessage_40: \ 00000820 710100EF SWI +369 4425 } 4426 return(1); \ ??maincsm_onmessage_41: \ 00000824 7D0000EA B ??maincsm_onmessage_42 4427 } 4428 if ((int)msg->data1==sock) \ ??maincsm_onmessage_38: \ 00000828 482195E5 LDR R2,[R5, #+328] \ 0000082C 020051E1 CMP R1,R2 \ 00000830 E5FFFF1A BNE ??maincsm_onmessage_34 4429 { 4430 //Если наш сокет 4431 if ((((unsigned int)msg->data0)>>28)==0xA) \ 00000834 201EA0E1 LSR R1,R0,#+28 \ 00000838 0A0051E3 CMP R1,#+10 \ 0000083C 0200001A BNE ??maincsm_onmessage_43 4432 { 4433 //Принят пакет 4434 ProcessPacket((TPKT *)msg->data0); \ 00000840 ........ BL ProcessPacket 4435 return(0); \ 00000844 0000A0E3 MOV R0,#+0 \ 00000848 750000EA B ??maincsm_onmessage_44 4436 } 4437 switch((int)msg->data0) \ ??maincsm_onmessage_43: \ 0000084C ........ LDR R2,??DataTable171 ;; VIBR_ON_CONNECT \ 00000850 441195E5 LDR R1,[R5, #+324] \ 00000854 00A092E5 LDR R10,[R2, #+0] \ 00000858 8A0040E2 SUB R0,R0,#+138 \ 0000085C 050050E3 CMP R0,#+5 \ 00000860 D9FFFF8A BHI ??maincsm_onmessage_34 \ 00000864 012F8FE2 ADR R2,??maincsm_onmessage_1 \ 00000868 0020D2E7 LDRB R2,[R2, R0] \ 0000086C 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_1: \ 00000870 42423B01 DC8 +66,+66,+59,+1 \ 00000874 4B470000 DC8 +75,+71,+0,+0 4438 { 4439 case ENIP_SOCK_CONNECTED: 4440 if (connect_state==1) \ ??maincsm_onmessage_45: \ 00000878 010051E3 CMP R1,#+1 \ 0000087C 3300001A BNE ??maincsm_onmessage_46 4441 { 4442 if(VIBR_ON_CONNECT) \ 00000880 00005AE3 CMP R10,#+0 4443 vibra_count=2; \ 00000884 0200A013 MOVNE R0,#+2 4444 else 4445 vibra_count=1; \ 00000888 0100A003 MOVEQ R0,#+1 \ 0000088C F80085E5 STR R0,[R5, #+248] 4446 start_vibra(); \ 00000890 ........ BL start_vibra 4447 //Соединение установленно, посылаем пакет login 4448 strcpy(logmsg, LG_GRTRYLOGIN); \ 00000894 4800A0E3 MOV R0,#+72 \ 00000898 400E80E3 ORR R0,R0,#0x400 \ 0000089C 071080E0 ADD R1,R0,R7 \ 000008A0 0800A0E1 MOV R0,R8 \ 000008A4 1A0000EF SWI +26 4449 { 4450 int i=strlen(PASS); \ 000008A8 88019FE5 LDR R0,??maincsm_onmessage_5+0xC ;; PASS \ 000008AC 1B0000EF SWI +27 \ 000008B0 0080A0E1 MOV R8,R0 4451 TPKT *p=malloc(sizeof(PKT)+i); \ 000008B4 080088E2 ADD R0,R8,#+8 \ 000008B8 140000EF SWI +20 4452 p->pkt.uin=UIN; 4453 p->pkt.type=T_REQLOGIN; 4454 p->pkt.data_len=i; 4455 memcpy(p->data,PASS,i); \ 000008BC 74119FE5 LDR R1,??maincsm_onmessage_5+0xC ;; PASS \ 000008C0 0090A0E1 MOV R9,R0 \ 000008C4 ........ LDR R0,??DataTable180 ;; UIN \ 000008C8 0820A0E1 MOV R2,R8 \ 000008CC 004090E5 LDR R4,[R0, #+0] \ 000008D0 0100A0E3 MOV R0,#+1 \ 000008D4 004089E5 STR R4,[R9, #+0] \ 000008D8 B400C9E1 STRH R0,[R9, #+4] \ 000008DC B680C9E1 STRH R8,[R9, #+6] \ 000008E0 080089E2 ADD R0,R9,#+8 \ 000008E4 1E0100EF SWI +286 4456 SUBPROC((void *)send_login,0,p); \ 000008E8 7C019FE5 LDR R0,??maincsm_onmessage_5+0x40 ;; send_login \ 000008EC 0920A0E1 MOV R2,R9 \ 000008F0 0010A0E3 MOV R1,#+0 \ 000008F4 710100EF SWI +369 4457 } 4458 GROUP_CACHE=0; \ 000008F8 6C6185E5 STR R6,[R5, #+364] 4459 SENDMSGCOUNT=0; //Начинаем отсчет \ 000008FC D06085E5 STR R6,[R5, #+208] 4460 if (!FindGroupByID(0)) AddGroup(0,LG_GROUPNOTINLIST); \ 00000900 0600A0E1 MOV R0,R6 \ 00000904 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000908 000050E3 CMP R0,#+0 \ 0000090C 0400001A BNE ??maincsm_onmessage_47 \ 00000910 5800A0E3 MOV R0,#+88 \ 00000914 400E80E3 ORR R0,R0,#0x400 \ 00000918 071080E0 ADD R1,R0,R7 \ 0000091C 0000A0E3 MOV R0,#+0 \ 00000920 ........ _BLF AddGroup,??AddGroup??rA 4461 if (!FindContactByUin(UIN)) AddContact(UIN, LG_CLLOOPBACK); \ ??maincsm_onmessage_47: \ 00000924 0400A0E1 MOV R0,R4 \ 00000928 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 0000092C 000050E3 CMP R0,#+0 \ 00000930 0400001A BNE ??maincsm_onmessage_48 \ 00000934 6400A0E3 MOV R0,#+100 \ 00000938 400E80E3 ORR R0,R0,#0x400 \ 0000093C 071080E0 ADD R1,R0,R7 \ 00000940 0400A0E1 MOV R0,R4 \ 00000944 ........ _BLF AddContact,??AddContact??rA 4462 SMART_REDRAW(); \ ??maincsm_onmessage_48: \ 00000948 ........ BL SMART_REDRAW \ 0000094C 330000EA B ??maincsm_onmessage_42 4463 } 4464 else 4465 { 4466 ShowMSG(1,(int)LG_MSGILLEGMSGCON); \ ??maincsm_onmessage_46: \ 00000950 471E87E2 ADD R1,R7,#+1136 \ ??maincsm_onmessage_49: \ 00000954 0100A0E3 MOV R0,#+1 \ 00000958 480100EF SWI +328 \ 0000095C 2F0000EA B ??maincsm_onmessage_42 4467 } 4468 break; 4469 case ENIP_SOCK_DATA_READ: 4470 if (connect_state>=2) \ ??maincsm_onmessage_50: \ 00000960 020051E3 CMP R1,#+2 4471 { 4472 //Если посылали send 4473 SUBPROC((void *)get_answer); \ 00000964 04019FA5 LDRGE R0,??maincsm_onmessage_5+0x44 ;; get_answer \ 00000968 ACFFFFAA BGE ??maincsm_onmessage_40 4474 //SMART_REDRAW(); 4475 } 4476 else 4477 { 4478 ShowMSG(1,(int)LG_MSGILLEGMSGREA); \ 0000096C 9800A0E3 MOV R0,#+152 \ 00000970 400E80E3 ORR R0,R0,#0x400 \ 00000974 071080E0 ADD R1,R0,R7 \ 00000978 F5FFFFEA B ??maincsm_onmessage_49 4479 } 4480 break; 4481 case ENIP_BUFFER_FREE: 4482 case ENIP_BUFFER_FREE1: 4483 SUBPROC((void *)SendAnswer,0,0); \ ??maincsm_onmessage_51: \ 0000097C ........ LDR R0,??DataTable173 ;; SendAnswer \ 00000980 0020A0E3 MOV R2,#+0 \ 00000984 0210A0E1 MOV R1,R2 \ 00000988 710100EF SWI +369 \ 0000098C 230000EA B ??maincsm_onmessage_42 4484 break; 4485 case ENIP_SOCK_REMOTE_CLOSED: 4486 //Закрыт со стороны сервера 4487 if (connect_state) \ ??maincsm_onmessage_52: \ 00000990 000051E3 CMP R1,#+0 \ 00000994 8CFFFF0A BEQ ??maincsm_onmessage_34 4488 SUBPROC((void *)end_socket); \ 00000998 ........ LDR R0,??DataTable174 ;; end_socket \ 0000099C 9FFFFFEA B ??maincsm_onmessage_40 4489 break; 4490 case ENIP_SOCK_CLOSED: 4491 //strcpy(logmsg, "No connection"); 4492 //Dump not received 4493 /* if (RXstate>(-(int)sizeof(PKT))) 4494 { 4495 unsigned int err; 4496 int f=fopen("4:\\NATICQ.dump",A_ReadWrite+A_Create+A_Truncate+A_BIN,P_READ+P_WRITE,&err); 4497 if (f!=-1) 4498 { 4499 fwrite(f,&RXbuf,RXstate+sizeof(PKT),&err); 4500 fclose(f,&err); 4501 } 4502 }*/ 4503 FillAllOffline(); \ ??maincsm_onmessage_53: \ 000009A0 ........ _BLF FillAllOffline,??FillAllOffline??rA 4504 RecountMenu(NULL); \ 000009A4 0000A0E3 MOV R0,#+0 \ 000009A8 ........ BL RecountMenu 4505 connect_state=0; \ 000009AC 446185E5 STR R6,[R5, #+324] 4506 sock=-1; \ 000009B0 0600E0E1 MVN R0,R6 \ 000009B4 480185E5 STR R0,[R5, #+328] 4507 if(VIBR_ON_CONNECT) \ 000009B8 00005AE3 CMP R10,#+0 4508 vibra_count=4; \ 000009BC 0400A013 MOVNE R0,#+4 4509 else 4510 vibra_count=1; \ 000009C0 0100A003 MOVEQ R0,#+1 \ 000009C4 F80085E5 STR R0,[R5, #+248] 4511 4512 start_vibra(); \ 000009C8 ........ BL start_vibra 4513 if (sendq_p) \ 000009CC 600195E5 LDR R0,[R5, #+352] \ 000009D0 000050E3 CMP R0,#+0 \ 000009D4 0600000A BEQ ??maincsm_onmessage_54 4514 { 4515 snprintf(logmsg,255,"Disconnected, %d bytes not sended!",sendq_l); \ 000009D8 5C3195E5 LDR R3,[R5, #+348] \ 000009DC BC00A0E3 MOV R0,#+188 \ 000009E0 400E80E3 ORR R0,R0,#0x400 \ 000009E4 072080E0 ADD R2,R0,R7 \ 000009E8 FF10A0E3 MOV R1,#+255 \ 000009EC 0800A0E1 MOV R0,R8 \ 000009F0 1B0100EF SWI +283 4516 } 4517 SMART_REDRAW(); \ ??maincsm_onmessage_54: \ 000009F4 ........ BL SMART_REDRAW 4518 SUBPROC((void *)ClearSendQ); \ 000009F8 ........ LDR R0,??DataTable175 ;; ClearSendQ \ 000009FC 710100EF SWI +369 4519 #ifdef EVILFOX 4520 if (!disautorecconect) GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*12,do_reconnect); 4521 #else 4522 if (!disautorecconect) GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*120,do_reconnect); \ 00000A00 200195E5 LDR R0,[R5, #+288] \ 00000A04 000050E3 CMP R0,#+0 \ 00000A08 6FFFFF1A BNE ??maincsm_onmessage_34 \ 00000A0C 0920A0E1 MOV R2,R9 \ 00000A10 4010A0E3 MOV R1,#+64 \ 00000A14 651C81E3 ORR R1,R1,#0x6500 \ ??maincsm_onmessage_39: \ 00000A18 0400A0E1 MOV R0,R4 \ 00000A1C 4D0000EF SWI +77 \ ??maincsm_onmessage_42: \ 00000A20 0100A0E3 MOV R0,#+1 \ ??maincsm_onmessage_44: \ 00000A24 20D08DE2 ADD SP,SP,#+32 \ 00000A28 F08FBDE8 POP {R4-R11,PC} \ ??maincsm_onmessage_5: \ 00000A2C ........ DC32 CheckDoubleRun \ 00000A30 ........ DC32 ProcessNextSmile \ 00000A34 ........ DC32 ProcessNextXStatImg \ 00000A38 ........ DC32 PASS \ 00000A3C ........ DC32 IDLEICON_X \ 00000A40 ........ DC32 IDLEICON_Y \ 00000A44 ........ DC32 show_xstatus \ 00000A48 ........ DC32 XStatusesIconArray \ 00000A4C ........ DC32 IDLEICON_XX \ 00000A50 ........ DC32 IDLEICON_YX \ 00000A54 ........ DC32 msg_d_x \ 00000A58 ........ DC32 msg_d_y \ 00000A5C ........ DC32 spaco2 \ 00000A60 ........ DC32 Is_Unread_On \ 00000A64 ........ DC32 unread_Y \ 00000A68 ........ DC32 unread_X \ 00000A6C ........ DC32 send_login \ 00000A70 ........ DC32 get_answer 4523 #endif 4524 break; 4525 } 4526 } 4527 } 4528 return(1); 4529 } 4530 4531 4532 const int minus11=-11; 4533 \ In segment DATA_Z, align 4, align-sorted 4534 unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 \ In segment DATA_C, align 4, align-sorted \ `?> %s <<" \ 3C3C00 \ 000000E9 000000 DC8 0, 0, 0 \ 000000EC 2563257400 DC8 "%c%t" \ 000000F1 000000 DC8 0, 0, 0 \ 000000F4 2825642F2564 DC8 "(%d/%d)" \ 2900 \ 000000FC EEF8E8E1EAE0 DC8 "\356\370\350\341\352\340" \ 00 \ 00000103 00 DC8 0 \ 00000104 426164207061 DC8 "Bad packet" \ 636B657400 \ 0000010F 00 DC8 0 \ 00000110 534325643A20 DC8 "SC%d: %04X" \ 2530345800 \ 0000011B 00 DC8 0 \ 0000011C 4552523A2025 DC8 "ERR: %s" \ 7300 \ 00000124 75696E256400 DC8 "uin%d" \ 0000012A 0000 DC8 0, 0 \ 0000012C 4D534725643A DC8 "MSG%d: %s" \ 20257300 \ 00000136 0000 DC8 0, 0 \ 00000138 257325642E77 DC8 "%s%d.wav" \ 617600 \ 00000141 000000 DC8 0, 0, 0 \ 00000144 50696E672025 DC8 "Ping %d-%d seconds!" \ 642D25642073 \ 65636F6E6473 \ 2100 \ 00000158 50696E673A20 DC8 "Ping: %dsec" \ 256473656300 \ 00000164 6D6F64206279 DC8 6DH, 6FH, 64H, 20H, 62H, 79H, 20H, 45H \ 2045 \ 0000016C 76696C666F78 DC8 76H, 69H, 6CH, 66H, 6FH, 78H, 20H, 62H \ 2062 \ 00000174 61736564206F DC8 61H, 73H, 65H, 64H, 20H, 6FH, 6EH, 20H \ 6E20 \ 0000017C 726576697369 DC8 72H, 65H, 76H, 69H, 73H, 69H, 6FH, 6EH \ 6F6E \ 00000184 20313834352C DC8 20H, 31H, 38H, 34H, 35H, 2CH, 20H, 6DH \ 206D \ 0000018C 6F6420646174 DC8 6FH, 64H, 20H, 64H, 61H, 74H, 65H, 3AH \ 653A \ 00000194 202573206174 DC8 20H, 25H, 73H, 20H, 61H, 74H, 20H, 25H \ 2025 \ 0000019C 73202626206F DC8 73H, 20H, 26H, 26H, 20H, 6FH, 70H, 74H \ 7074 \ 000001A4 696D697A6520 DC8 69H, 6DH, 69H, 7AH, 65H, 20H, 62H, 79H \ 6279 \ 000001AC 206B6C756368 DC8 20H, 6BH, 6CH, 75H, 63H, 68H, 6EH, 69H \ 6E69 \ 000001B4 6B2066726F6D DC8 6BH, 20H, 66H, 72H, 6FH, 6DH, 20H, 6BH \ 206B \ 000001BC 6C7563686E69 DC8 6CH, 75H, 63H, 68H, 6EH, 69H, 6BH, 20H \ 6B20 \ 000001C4 3A2D44203A2D DC8 3AH, 2DH, 44H, 20H, 3AH, 2DH, 50H, 0 \ 5000 \ 000001CC 4D6172203131 DC8 "Mar 11 2008" \ 203230303800 \ 000001D8 31323A31343A DC8 "12:14:27" \ 323700 \ 000001E1 000000 DC8 0, 0, 0 \ 000001E4 47414D453A00 DC8 "GAME:" \ 000001EA 0000 DC8 0, 0 \ 000001EC 6F6E6C696E65 DC8 "online: %02d:%02d:%02d \012Server: %s" \ 3A2025303264 \ 3A253032643A \ 25303264200A \ 536572766572 \ 3A20257300 \ 0000020F 00 DC8 0 \ 00000210 4745545F4F4E DC8 "GET_ONLINE_TIME" \ 4C494E455F54 \ 494D4500 \ 00000220 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 \ 00000250 4745545F4D53 DC8 "GET_MSG_INFO" \ 475F494E464F \ 00 \ 0000025D 000000 DC8 0, 0, 0 \ 00000260 4745545F4D4F DC8 "GET_MOD_INFO" \ 445F494E464F \ 00 \ 0000026D 000000 DC8 0, 0, 0 \ 00000270 626174746572 DC8 "battery: %d percents" \ 793A20256420 \ 70657263656E \ 747300 \ 00000285 000000 DC8 0, 0, 0 \ 00000288 4745545F4241 DC8 "GET_BAT_INFO" \ 545F494E464F \ 00 \ 00000295 000000 DC8 0, 0, 0 \ 00000298 C0E2F2EEEEF2 DC8 "\300\342\362\356\356\362\342\345\362\367\350\352: %s %s! %s %s" \ E2E5F2F7E8EA \ 3A2025732025 \ 732120257320 \ 257300 \ 000002B3 00 DC8 0 \ 000002B4 E4F3ECE0E5F8 DC8 "\344\363\354\340\345\370\374?!" \ FC3F2100 \ 000002BE 0000 DC8 0, 0 \ 000002C0 E4E020F7F2EE DC8 "\344\340 \367\362\356 \362\373 \343\356\342\356\360\350\370\374" \ 20F2FB20E3EE \ E2EEF0E8F8FC \ 00 \ 000002D3 00 DC8 0 \ 000002D4 F1F2F0E0EDED DC8 "\361\362\360\340\355\355\356" \ EE00 \ 000002DC F2FB20F2E0EA DC8 "\362\373 \362\340\352 \344\363\354\340\345\370\374?" \ 20E4F3ECE0E5 \ F8FC3F00 \ 000002EC ECEEE6E5F220 DC8 "\354\356\346\345\362 \341\373\362\374" \ E1FBF2FC00 \ 000002F7 00 DC8 0 \ 000002F8 E4E020EDE0F5 DC8 "\344\340 \355\340\365\360\345\355" \ F0E5ED00 \ 00000302 0000 DC8 0, 0 \ 00000304 EAEEEDE5F7ED DC8 "\352\356\355\345\367\355\340" \ E000 \ 0000030C EFEEF7E5ECF3 DC8 "\357\356\367\345\354\363 \355\345\362" \ 20EDE5F200 \ 00000317 00 DC8 0 \ 00000318 CDE520E5E1E8 DC8 "\315\345 \345\341\350 \354\356\347\343!" \ 20ECEEE7E321 \ 00 \ 00000325 000000 DC8 0, 0, 0 \ 00000328 E8E4E820EDE0 DC8 "\350\344\350 \355\340 \365\363\351!!" \ 20F5F3E92121 \ 00 \ 00000335 000000 DC8 0, 0, 0 \ 00000338 F1F3EAE000 DC8 "\361\363\352\340" \ 0000033D 000000 DC8 0, 0, 0 \ 00000340 E7E0E5E1E0EB DC8 "\347\340\345\341\340\353" \ 00 \ 00000347 00 DC8 0 \ 00000348 EEF2FAE5E1E8 DC8 "\356\362\372\345\341\350\361\374!!!!!\343\340\344!!*FUCK_YOU*" \ F1FC21212121 \ 21E3E0E42121 \ 2A4655434B5F \ 594F552A00 \ 00000365 000000 DC8 0, 0, 0 \ 00000368 53746174653A DC8 53H, 74H, 61H, 74H, 65H, 3AH, 20H, 25H \ 2025 \ 00000370 642C20525873 DC8 64H, 2CH, 20H, 52H, 58H, 73H, 74H, 61H \ 7461 \ 00000378 74653A202564 DC8 74H, 65H, 3AH, 20H, 25H, 64H, 0AH, 52H \ 0A52 \ 00000380 783A20256462 DC8 78H, 3AH, 20H, 25H, 64H, 62H, 2CH, 20H \ 2C20 \ 00000388 54783A202564 DC8 54H, 78H, 3AH, 20H, 25H, 64H, 62H, 0AH \ 620A \ 00000390 51756575653A DC8 51H, 75H, 65H, 75H, 65H, 3AH, 20H, 25H \ 2025 \ 00000398 64620A257400 DC8 64H, 62H, 0AH, 25H, 74H, 0 \ 0000039E 0000 DC8 0, 0 \ 000003A0 0A4C6F616465 DC8 "\012Loaded %d smiles" \ 642025642073 \ 6D696C657300 \ 000003B2 0000 DC8 0, 0 \ 000003B4 0A4C6F616465 DC8 "\012Loaded %d xstatus" \ 642025642078 \ 737461747573 \ 00 \ 000003C7 00 DC8 0 \ 000003C8 4578697400 DC8 "Exit" \ 000003CD 000000 DC8 0, 0, 0 \ 000003D0 434C69737400 DC8 "CList" \ 000003D6 0000 DC8 0, 0 \ 000003D8 4675636B2079 DC8 "Fuck you hacker! my password sux ur ass" \ 6F7520686163 \ 6B657221206D \ 792070617373 \ 776F72642073 \ 757820757220 \ 61737300 \ 00000400 556E72656164 DC8 "Unread: %d" \ 3A20256400 \ 0000040B 00 DC8 0 \ 0000040C 4E6174494351 DC8 "NatICQ config updated!" \ 20636F6E6669 \ 672075706461 \ 7465642100 \ 00000423 00 DC8 0 \ 00000424 257332323430 DC8 "%s2240.png" \ 2E706E6700 \ 0000042F 00 DC8 0 \ 00000430 475052532075 DC8 "GPRS up, wait 10 sec..." \ 702C20776169 \ 742031302073 \ 65632E2E2E00 \ 00000448 54727920746F DC8 "Try to login..." \ 206C6F67696E \ 2E2E2E00 \ 00000458 CDE520E220F1 DC8 "\315\345 \342 \361\357\350\361\352\345" \ EFE8F1EAE500 \ 00000464 4C6F6F706261 DC8 "Loopback" \ 636B00 \ 0000046D 000000 DC8 0, 0, 0 \ 00000470 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 \ 00000498 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 \ 000004BA 0000 DC8 0, 0 \ 000004BC 446973636F6E DC8 "Disconnected, %d bytes not sended!" \ 6E6563746564 \ 2C2025642062 \ 79746573206E \ 6F742073656E \ 6465642100 \ 000004DF 00 DC8 0 \ 000004E0 4E4154494351 DC8 "NATICQ: %d" \ 3A20256400 \ 000004EB 00 DC8 0 \ 000004EC 50696E67204E DC8 "Ping None" \ 6F6E6500 \ 000004F6 0000 DC8 0, 0 \ 000004F8 C2E2E5E4E8F2 DC8 "\302\342\345\344\350\362\345 UIN/\357\340\360\356\353\374!" \ E52055494E2F \ EFE0F0EEEBFC \ 2100 \ 0000050C 526571756573 DC8 "Request info..." \ 7420696E666F \ 2E2E2E00 \ 0000051C CFF0E8E2E5F2 DC8 "\317\360\350\342\345\362" \ 00 \ 00000523 00 DC8 0 \ ipc_my_name: \ 00000524 4E6174494351 DC8 "NatICQ" \ 00 \ 0000052B 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000053B 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000 \ ipc_xtask_name: \ 00000544 585461736B00 DC8 "XTask" \ 0000054A 0000 DC8 0, 0 \ x_status_change: \ 0000054C 582D53746174 DC8 "X-Status change" \ 757320636861 \ 6E676500 \ ipc_game_name: \ 0000055C 436F6D626174 DC8 "Combats" \ 7300 \ gui_methods: \ 00000564 ............ DC32 method0, method1, method2, method3, method4, method5, 0H \ ............ \ ............ \ ............ \ 00000000 \ 00000580 ............ DC32 kill_data, method8, method9, 0H \ ............ \ 00000000 4535 4536 const struct 4537 { 4538 CSM_DESC maincsm; 4539 WSHDR maincsm_name; 4540 }MAINCSM = \ MAINCSM: \ 00000590 ............ DC32 maincsm_onmessage, maincsm_oncreate, 0, 0, 0, 0, maincsm_onclose \ ....00000000 \ 000000000000 \ 000000000000 \ ........ \ 000005AC 2C0000000100 DC32 44, 1, minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ 0000........ \ ........CCCC \ AA5555AA3333 \ 00000000 \ 000005C8 8B00 DC16 139 \ 000005CA 0000 DC8 0, 0 \ 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, `?`, 2147483647 \ ....FFFFFF7F \ 0000004C D1EEEEE1F9E5 DC8 "\321\356\356\341\371\345\355\350\345:\012" \ EDE8E53A0A00 \ 00000058 D1EEEEE1F9E5 DC8 "\321\356\356\341\371\345\355\350\345 2:\012\012" \ EDE8E520323A \ 0A0A00 \ 00000067 00 DC8 0 \ 00000068 EAEEE3E4E020 DC8 "\352\356\343\344\340 \361\354\356\343\363 \356\362\342\345\367\363:)" \ F1ECEEE3F320 \ EEF2E2E5F7F3 \ 3A2900 \ 0000007D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ def_setting: \ 00000000 25736465665F DC8 "%sdef_settings_%d" \ 73657474696E \ 67735F256400 \ 00000012 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ key_clmenu_sk_r: \ 00000000 3C4300 DC8 "` \ 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 \ color: \ 00000000 FFFFFF64 DC8 255, 255, 255, 100 \ In segment DATA_C, align 4, align-sorted \ minus11: \ 00000000 F5FFFFFF DC32 -11 4541 { 4542 { 4543 maincsm_onmessage, 4544 maincsm_oncreate, 4545 #ifdef NEWSGOLD 4546 0, 4547 0, 4548 0, 4549 0, 4550 #endif 4551 maincsm_onclose, 4552 sizeof(MAIN_CSM), 4553 1, 4554 &minus11 4555 }, 4556 { 4557 maincsm_name_body, 4558 NAMECSM_MAGIC1, 4559 NAMECSM_MAGIC2, 4560 0x0, 4561 139 4562 } 4563 }; 4564 \ In segment CODE, align 4, keep-with-next 4565 void UpdateCSMname(void) 4566 { 4567 wsprintf((WSHDR *)(&MAINCSM.maincsm_name), "NATICQ: %d",UIN); \ UpdateCSMname: \ 00000000 ........ LDR R0,??DataTable179 ;; `?wsbody; \ 00000004 008090E5 LDR R8,[R0, #+0] \ 00000008 0040A0E3 MOV R4,#+0 4642 int wslen=wsbody[0]; \ 0000000C B060D8E1 LDRH R6,[R8, #+0] \ 00000010 0050A0E3 MOV R5,#+0 4643 if (wslen) \ 00000014 000056E3 CMP R6,#+0 \ 00000018 2E00000A BEQ ??ExtractAnswer_0 4644 { 4645 for (int i=0; i=0xE100) \ 00000030 E10C57E3 CMP R7,#+57600 \ 00000034 0A0000BA BLT ??ExtractAnswer_3 4649 { 4650 t=FindSmileByUni(c); \ 00000038 0700A0E1 MOV R0,R7 \ 0000003C ........ _BLF FindSmileByUni,??FindSmileByUni??rA 4651 if (t) \ 00000040 000050E3 CMP R0,#+0 \ 00000044 0600000A BEQ ??ExtractAnswer_3 4652 { 4653 if (t->lines) \ 00000048 080090E5 LDR R0,[R0, #+8] \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 0400000A BEQ ??ExtractAnswer_4 4654 { 4655 len+=strlen(t->lines->text); \ 00000054 0C0080E2 ADD R0,R0,#+12 \ 00000058 1B0000EF SWI +27 \ 0000005C 044080E0 ADD R4,R0,R4 \ 00000060 000000EA B ??ExtractAnswer_4 4656 } 4657 } 4658 else len++; \ ??ExtractAnswer_3: \ 00000064 014084E2 ADD R4,R4,#+1 4659 } 4660 else len++; 4661 } \ ??ExtractAnswer_4: \ 00000068 025085E2 ADD R5,R5,#+2 \ 0000006C 019059E2 SUBS R9,R9,#+1 \ 00000070 EDFFFF1A BNE ??ExtractAnswer_2 4662 4663 msg=malloc(len+1); \ ??ExtractAnswer_1: \ 00000074 010084E2 ADD R0,R4,#+1 \ 00000078 140000EF SWI +20 \ 0000007C 0050A0E1 MOV R5,R0 4664 scur=0; \ 00000080 0090A0E3 MOV R9,#+0 4665 for (int wcur=0; wcur=0xE100) 4670 { 4671 t=FindSmileByUni(c); 4672 if (t) 4673 { 4674 int w; 4675 char *s; 4676 if (t->lines) 4677 { 4678 s=t->lines->text; 4679 while ((w=*s++) && scurnext)) \ FindNextActiveContact: \ ??FindNextActiveContact_0: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0300000A BEQ ??FindNextActiveContact_1 4706 { 4707 if (t->isactive) return t; \ 0000000C 801090E5 LDR R1,[R0, #+128] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 F9FFFF0A BEQ ??FindNextActiveContact_0 \ 00000018 1EFF2FE1 BX LR 4708 } 4709 t=(CLIST *)(&cltop); \ ??FindNextActiveContact_1: \ 0000001C ........ LDR R0,??DataTable188 ;; S_ICONS + 360 \ 00000020 020000EA B ??FindNextActiveContact_2 4710 while(t=(CLIST *)(t->next)) 4711 { 4712 if (t->isactive) return t; \ ??FindNextActiveContact_3: \ 00000024 801090E5 LDR R1,[R0, #+128] \ 00000028 000051E3 CMP R1,#+0 \ 0000002C 1EFF2F11 BXNE LR 4713 } \ ??FindNextActiveContact_2: \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 F9FFFF1A BNE ??FindNextActiveContact_3 4714 return NULL; \ 0000003C 1EFF2FE1 BX LR ;; return 4715 } 4716 \ In segment CODE, align 4, keep-with-next 4717 CLIST *FindPrevActiveContact(CLIST *t) 4718 { 4719 CLIST *cl; 4720 CLIST *cl_active=NULL; 4721 cl=(CLIST *)(&cltop); \ FindPrevActiveContact: \ 00000000 ........ LDR R2,??DataTable188 ;; S_ICONS + 360 \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 020000EA B ??FindPrevActiveContact_0 4722 4723 4724 while(cl=cl->next) 4725 { 4726 if (cl==t) 4727 { 4728 if (cl_active==NULL) break; 4729 else return (cl_active); 4730 } 4731 else 4732 { 4733 if (cl->isactive) cl_active=cl; \ ??FindPrevActiveContact_1: \ 0000000C 803092E5 LDR R3,[R2, #+128] \ 00000010 000053E3 CMP R3,#+0 \ 00000014 0210A011 MOVNE R1,R2 4734 } \ ??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 4735 } 4736 while(t) \ ??FindPrevActiveContact_2: \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 FBFFFF0A BEQ ??FindPrevActiveContact_3 4737 { 4738 if (t->isactive) cl_active=t; \ 00000044 802090E5 LDR R2,[R0, #+128] \ 00000048 000052E3 CMP R2,#+0 \ 0000004C 0010A011 MOVNE R1,R0 4739 t=t->next; \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 F8FFFFEA B ??FindPrevActiveContact_2 4740 } 4741 return cl_active; 4742 } 4743 4744 \ In segment CODE, align 4, keep-with-next 4745 void ed_options_handler(USR_MENU_ITEM *item) 4746 { \ ed_options_handler: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 4747 EDCHAT_STRUCT *ed_struct=item->user_pointer; 4748 CLIST *t; 4749 int i=item->cur_item; 4750 if (item->type==0) \ 00000004 ........ LDR R5,??DataTable199 ;; 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 4751 { 4752 switch(i) \ 00000024 0C0097E5 LDR R0,[R7, #+12] \ 00000028 80119FE5 LDR R1,??ed_options_handler_1 ;; `?ws,LG_MNUEDNEXTACT); 4756 break; 4757 case 1: 4758 ascii2ws(item->ws,LG_MNUEDPREVACT); \ 00000038 10108102 ADDEQ R1,R1,#+16 \ 0000003C 0500000A BEQ ??ed_options_handler_2 4759 break; 4760 default: 4761 i-=2; 4762 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 3C1195E5 LDR R1,[R5, #+316] \ 00000054 061191E7 LDR R1,[R1, +R6, LSL #+2] \ ??ed_options_handler_2: \ 00000058 ........ _BLF ascii2ws,??ascii2ws??rA 4763 break; 4764 } 4765 } 4766 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 4767 { 4768 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 4769 { 4770 case 0: 4771 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 4772 if (t && t!=ed_struct->ed_contact) \ 0000008C 07005411 CMPNE R4,R7 \ 00000090 4400000A BEQ ??ed_options_handler_3 4773 { 4774 GeneralFunc_flag1(edchat_id,1); \ 00000094 740195E5 LDR R0,[R5, #+372] \ 00000098 0110A0E3 MOV R1,#+1 \ 0000009C 3D0100EF SWI +317 4775 CreateEditChat(t); \ 000000A0 0400A0E1 MOV R0,R4 \ 000000A4 ........ BL CreateEditChat \ 000000A8 2CD08DE2 ADD SP,SP,#+44 \ 000000AC F080BDE8 POP {R4-R7,PC} 4776 } 4777 break; 4778 case 1: 4779 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 4780 if (t && t!=ed_struct->ed_contact) 4781 { 4782 GeneralFunc_flag1(edchat_id,1); 4783 CreateEditChat(t); 4784 } 4785 break; 4786 default: 4787 i-=2; 4788 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 4789 { 4790 EDITCONTROL ec; 4791 WSHDR *ed_ws; 4792 int c; 4793 char *p=templates_lines[i]; \ 000000CC 3C0195E5 LDR R0,[R5, #+316] 4794 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 4795 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 4796 wstrcpy(ed_ws,ec.pWS); \ 00000100 28109DE5 LDR R1,[SP, #+40] \ 00000104 0060A0E1 MOV R6,R0 \ 00000108 1F0100EF SWI +287 4797 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 4798 { 4799 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 4800 while(c=*p++) 4801 { 4802 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 4803 } \ ??ed_options_handler_9: \ 00000148 ........ LDRB R0,[R5], #+1 \ 0000014C 000050E3 CMP R0,#+0 \ 00000150 F6FFFF1A BNE ??ed_options_handler_10 4804 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 4805 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 4806 } 4807 else 4808 { 4809 while(c=*p++) 4810 { 4811 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 4812 } \ ??ed_options_handler_8: \ 00000184 ........ LDRB R0,[R5], #+1 \ 00000188 000050E3 CMP R0,#+0 \ 0000018C F8FFFF1A BNE ??ed_options_handler_12 4813 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 4814 } 4815 FreeWS(ed_ws); \ ??ed_options_handler_11: \ 000001A0 0600A0E1 MOV R0,R6 \ 000001A4 290100EF SWI +297 4816 } 4817 break; 4818 } 4819 } 4820 } \ ??ed_options_handler_3: \ 000001A8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000001AC F080BDE8 POP {R4-R7,PC} ;; return \ ??ed_options_handler_1: \ 000001B0 ........ DC32 `?lines; 4837 while(st) 4838 { 4839 if ((ulb&st->mask)==st->key) 4840 { 4841 if (!strncmp(s,st->text,strlen(st->text))) goto L1; 4842 } 4843 st=st->next; 4844 } 4845 t=t->next; 4846 } 4847 L1: 4848 if (t) 4849 { 4850 wchar=t->uni_smile; \ ??ParseAnswer_2: \ 00000044 04909AE5 LDR R9,[R10, #+4] 4851 s+=strlen(st->text); \ 00000048 0C0084E2 ADD R0,R4,#+12 \ 0000004C 1B0000EF SWI +27 \ 00000050 066080E0 ADD R6,R0,R6 4852 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); \ 00000054 0000D6E5 LDRB R0,[R6, #+0] \ 00000058 0110D6E5 LDRB R1,[R6, #+1] \ 0000005C 010480E0 ADD R0,R0,R1, LSL #+8 \ 00000060 0210D6E5 LDRB R1,[R6, #+2] \ 00000064 010880E0 ADD R0,R0,R1, LSL #+16 \ 00000068 0310D6E5 LDRB R1,[R6, #+3] \ 0000006C 018C80E0 ADD R8,R0,R1, LSL #+24 4853 } 4854 else 4855 { 4856 wchar=char8to16(wchar); 4857 s++; 4858 ulb>>=8; 4859 ulb+=s[3]<<24; 4860 } 4861 if (wchar!=10) wsAppendChar(ws,wchar); \ ??ParseAnswer_3: \ 00000070 0A0059E3 CMP R9,#+10 \ 00000074 0200000A BEQ ??ParseAnswer_1 \ 00000078 0910A0E1 MOV R1,R9 \ 0000007C 0500A0E1 MOV R0,R5 \ 00000080 1C0000EF SWI +28 \ ??ParseAnswer_1: \ 00000084 0090D6E5 LDRB R9,[R6, #+0] \ 00000088 000059E3 CMP R9,#+0 \ 0000008C 2F00000A BEQ ??ParseAnswer_4 \ 00000090 07A0A0E1 MOV R10,R7 \ 00000094 220000EA B ??ParseAnswer_5 \ ??ParseAnswer_6: \ 00000098 0B00D4E5 LDRB R0,[R4, #+11] \ 0000009C 0A10D4E5 LDRB R1,[R4, #+10] \ 000000A0 0620D4E5 LDRB R2,[R4, #+6] \ 000000A4 000481E1 ORR R0,R1,R0, LSL #+8 \ 000000A8 0910D4E5 LDRB R1,[R4, #+9] \ 000000AC 000481E1 ORR R0,R1,R0, LSL #+8 \ 000000B0 0810D4E5 LDRB R1,[R4, #+8] \ 000000B4 000481E1 ORR R0,R1,R0, LSL #+8 \ 000000B8 0710D4E5 LDRB R1,[R4, #+7] \ 000000BC 080000E0 AND R0,R0,R8 \ 000000C0 011482E1 ORR R1,R2,R1, LSL #+8 \ 000000C4 0520D4E5 LDRB R2,[R4, #+5] \ 000000C8 011482E1 ORR R1,R2,R1, LSL #+8 \ 000000CC 0420D4E5 LDRB R2,[R4, #+4] \ 000000D0 011482E1 ORR R1,R2,R1, LSL #+8 \ 000000D4 010050E1 CMP R0,R1 \ 000000D8 0700001A BNE ??ParseAnswer_7 \ 000000DC 0C0084E2 ADD R0,R4,#+12 \ 000000E0 1B0000EF SWI +27 \ 000000E4 0020A0E1 MOV R2,R0 \ 000000E8 0C1084E2 ADD R1,R4,#+12 \ 000000EC 0600A0E1 MOV R0,R6 \ 000000F0 150100EF SWI +277 \ 000000F4 000050E3 CMP R0,#+0 \ 000000F8 D1FFFF0A BEQ ??ParseAnswer_2 \ ??ParseAnswer_7: \ 000000FC 0D00A0E1 MOV R0,SP \ 00000100 0410A0E3 MOV R1,#+4 \ ??ParseAnswer_8: \ 00000104 ........ LDRB R2,[R4], #+1 \ 00000108 011051E2 SUBS R1,R1,#+1 \ 0000010C ........ STRB R2,[R0], #+1 \ 00000110 FBFFFF1A BNE ??ParseAnswer_8 \ 00000114 00409DE5 LDR R4,[SP, #+0] \ ??ParseAnswer_9: \ 00000118 000054E3 CMP R4,#+0 \ 0000011C DDFFFF1A BNE ??ParseAnswer_6 \ 00000120 00A09AE5 LDR R10,[R10, #+0] \ ??ParseAnswer_5: \ 00000124 00005AE3 CMP R10,#+0 \ 00000128 08409A15 LDRNE R4,[R10, #+8] \ 0000012C F9FFFF1A BNE ??ParseAnswer_9 \ 00000130 0900A0E1 MOV R0,R9 \ 00000134 ........ _BLF char8to16,??char8to16??rA \ 00000138 0090A0E1 MOV R9,R0 \ 0000013C 016086E2 ADD R6,R6,#+1 \ 00000140 0300D6E5 LDRB R0,[R6, #+3] \ 00000144 000CA0E1 LSL R0,R0,#+24 \ 00000148 288480E0 ADD R8,R0,R8, LSR #+8 \ 0000014C C7FFFFEA B ??ParseAnswer_3 4862 } 4863 i=ws->wsbody[0]; \ ??ParseAnswer_4: \ 00000150 000095E5 LDR R0,[R5, #+0] \ 00000154 B010D0E1 LDRH R1,[R0, #+0] \ 00000158 020051E3 CMP R1,#+2 \ 0000015C F187BDB8 POPLT {R0,R4-R10,PC} 4864 while(i>1) 4865 { 4866 if (ws->wsbody[i--]!=13) break; \ ??ParseAnswer_10: \ 00000160 0120A0E1 MOV R2,R1 \ 00000164 011042E2 SUB R1,R2,#+1 \ 00000168 822080E0 ADD R2,R0,R2, LSL #+1 \ 0000016C B020D2E1 LDRH R2,[R2, #+0] \ 00000170 0D0052E3 CMP R2,#+13 \ 00000174 F187BD18 POPNE {R0,R4-R10,PC} 4867 ws->wsbody[0]=i; \ 00000178 B010C0E1 STRH R1,[R0, #+0] 4868 } \ 0000017C 020051E3 CMP R1,#+2 \ 00000180 F6FFFFAA BGE ??ParseAnswer_10 4869 } \ 00000184 F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??ParseAnswer_0: \ 00000188 ........ DC32 s_top 4870 \ In segment CODE, align 4, keep-with-next 4871 void SaveAnswer(CLIST *cl, WSHDR *ws) 4872 { \ SaveAnswer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0100A0E1 MOV R0,R1 4873 char *p=ExtractAnswer(ws); \ 0000000C ........ BL ExtractAnswer \ 00000010 0050A0E1 MOV R5,R0 4874 mfree(cl->answer); \ 00000014 780094E5 LDR R0,[R4, #+120] \ 00000018 150000EF SWI +21 4875 cl->answer=p; \ 0000001C 785084E5 STR R5,[R4, #+120] 4876 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 4877 \ In segment CODE, align 4, keep-with-next 4878 void recon() 4879 { 4880 SUBPROC((void*)end_socket); \ recon: \ 00000000 ........ LDR R0,??DataTable190 ;; end_socket \ 00000004 10402DE9 PUSH {R4,LR} 4881 GBS_DelTimer(&reconnect_tmr); \ 00000008 ........ LDR R4,??DataTable199 ;; S_ICONS \ 0000000C 710100EF SWI +369 \ 00000010 0C00A0E3 MOV R0,#+12 \ 00000014 600D80E3 ORR R0,R0,#0x1800 \ 00000018 040080E0 ADD R0,R0,R4 \ 0000001C 8C0100EF SWI +396 4882 DNR_TRIES=3; \ 00000020 0300A0E3 MOV R0,#+3 \ 00000024 900184E5 STR R0,[R4, #+400] 4883 SUBPROC((void *)create_connect); \ 00000028 ........ LDR R0,??DataTable192 ;; create_connect \ 0000002C 710100EF SWI +369 4884 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 4885 \ In segment CODE, align 4, keep-with-next 4886 int edchat_onkey(GUI *data, GUI_MSG *msg) 4887 { \ edchat_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 4888 //-1 - do redraw 4889 GBS_DelTimer(&tmr_illumination); \ 00000004 ........ LDR R7,??DataTable199 ;; S_ICONS \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 0000000C 0050A0E1 MOV R5,R0 \ 00000010 0140A0E1 MOV R4,R1 \ 00000014 EC00A0E3 MOV R0,#+236 \ 00000018 5C0D80E3 ORR R0,R0,#0x1700 \ 0000001C 070080E0 ADD R0,R0,R7 \ 00000020 8C0100EF SWI +396 4890 CLIST *t; 4891 TPKT *p; 4892 EDITCONTROL ec; 4893 int len; 4894 char *s; 4895 int l=msg->gbsmsg->submess; \ 00000024 040094E5 LDR R0,[R4, #+4] \ 00000028 088090E5 LDR R8,[R0, #+8] 4896 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 DF0100EF SWI +479 \ 00000034 0060A0E1 MOV R6,R0 4897 4898 if (msg->keys==0xFFF) \ 00000038 F200D4E1 LDRSH R0,[R4, #+2] \ 0000003C FF10A0E3 MOV R1,#+255 \ 00000040 F01E81E3 ORR R1,R1,#0xF00 \ 00000044 010050E1 CMP R0,R1 \ 00000048 0200001A BNE ??edchat_onkey_0 4899 { 4900 void ec_menu(EDCHAT_STRUCT *); 4901 ec_menu(ed_struct); \ 0000004C 0600A0E1 MOV R0,R6 \ 00000050 ........ BL ec_menu 4902 return(-1); \ 00000054 A20000EA B ??edchat_onkey_1 4903 } 4904 if (msg->keys==0xFF0) return (1); \ ??edchat_onkey_0: \ 00000058 FF0E50E3 CMP R0,#+4080 \ 0000005C 0100A003 MOVEQ R0,#+1 \ 00000060 4000000A BEQ ??edchat_onkey_2 \ 00000064 040094E5 LDR R0,[R4, #+4] \ 00000068 9510A0E3 MOV R1,#+149 \ 0000006C 040090E5 LDR R0,[R0, #+4] \ 00000070 401F81E3 ORR R1,R1,#0x100 \ 00000074 010050E1 CMP R0,R1 \ 00000078 2800001A BNE ??edchat_onkey_3 4905 #ifdef EVILFOX 4906 if (msg->gbsmsg->msg==LONG_PRESS) 4907 { 4908 if (l==VOL_DOWN_BUTTON) 4909 { 4910 WSHDR *ws; 4911 ExtractEditControl(data,ed_struct->ed_answer,&ec); 4912 if(wstrlen(ec.pWS)>0) 4913 { 4914 ws=AllocWS(1); 4915 CutWSTR(ws,0); 4916 4917 EDIT_SetFocus(data,ed_struct->ed_answer); 4918 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 4919 4920 FreeWS(ws); 4921 RefreshGUI(); 4922 } 4923 } 4924 if (l==VOL_UP_BUTTON) 4925 { 4926 // WSHDR *ws=AllocWS(strlen(ed_struct->ed_contact->last_msg_buffer)+1); 4927 // ascii2ws(ws,ed_struct->ed_contact->last_msg_buffer); 4928 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); 4929 ascii2ws(ws,last_msg_buffer); 4930 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); 4931 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 4932 FreeWS(ws); 4933 RefreshGUI(); 4934 } 4935 } 4936 #else 4937 void AddSmile(GUI *data); 4938 if (msg->gbsmsg->msg==LONG_PRESS) 4939 { 4940 if(l==RIGHT_BUTTON) \ 0000007C 3E0058E3 CMP R8,#+62 \ 00000080 0200001A BNE ??edchat_onkey_4 4941 { 4942 AddSmile(data); \ 00000084 0500A0E1 MOV R0,R5 \ 00000088 ........ BL AddSmile \ 0000008C 230000EA B ??edchat_onkey_3 4943 } 4944 4945 /* 4946 if (l==RIGHT_BUTTON) 4947 { 4948 if (EDIT_GetFocus(data)==ed_struct->ed_answer) 4949 { 4950 ExtractEditControl(data,ed_struct->ed_answer,&ec); 4951 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) 4952 { 4953 t=FindNextActiveContact(ed_struct->ed_contact); 4954 if (t && t!=ed_struct->ed_contact) 4955 { 4956 CreateEditChat(t); 4957 return(1); 4958 } 4959 } 4960 } 4961 }*/ 4962 /* if (l==LEFT_BUTTON) 4963 { 4964 if (EDIT_GetFocus(data)==ed_struct->ed_answer) 4965 { 4966 ExtractEditControl(data,ed_struct->ed_answer,&ec); 4967 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) 4968 { 4969 t=FindPrevActiveContact(ed_struct->ed_contact); 4970 if (t && t!=ed_struct->ed_contact) 4971 { 4972 CreateEditChat(t); 4973 return(1); 4974 } 4975 } 4976 } 4977 }*/ 4978 #ifdef ELKA 4979 if (l==VOL_DOWN_BUTTON) \ ??edchat_onkey_4: \ 00000090 0E0058E3 CMP R8,#+14 \ 00000094 0F00001A BNE ??edchat_onkey_5 4980 { 4981 WSHDR *ws; 4982 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000098 081096E5 LDR R1,[R6, #+8] \ 0000009C 0D20A0E1 MOV R2,SP \ 000000A0 0500A0E1 MOV R0,R5 \ 000000A4 690100EF SWI +361 4983 if(wstrlen(ec.pWS)>0) \ 000000A8 28009DE5 LDR R0,[SP, #+40] \ 000000AC 230100EF SWI +291 \ 000000B0 010050E3 CMP R0,#+1 \ 000000B4 190000BA BLT ??edchat_onkey_3 4984 { 4985 ws=AllocWS(1); \ 000000B8 0100A0E3 MOV R0,#+1 \ 000000BC 250100EF SWI +293 \ 000000C0 0090A0E1 MOV R9,R0 4986 CutWSTR(ws,0); \ 000000C4 0010A0E3 MOV R1,#+0 \ 000000C8 260100EF SWI +294 4987 4988 EDIT_SetFocus(data,ed_struct->ed_answer); \ 000000CC 081096E5 LDR R1,[R6, #+8] \ 000000D0 0500A0E1 MOV R0,R5 \ 000000D4 0A0000EA B ??edchat_onkey_6 4989 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 4990 4991 FreeWS(ws); 4992 RefreshGUI(); 4993 } 4994 } 4995 if (l==VOL_UP_BUTTON) \ ??edchat_onkey_5: \ 000000D8 0D0058E3 CMP R8,#+13 \ 000000DC 0F00001A BNE ??edchat_onkey_3 4996 { 4997 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); \ 000000E0 F50F87E2 ADD R0,R7,#+980 \ 000000E4 1B0000EF SWI +27 \ 000000E8 010080E2 ADD R0,R0,#+1 \ 000000EC 250100EF SWI +293 \ 000000F0 0090A0E1 MOV R9,R0 4998 ascii2ws(ws,last_msg_buffer); \ 000000F4 F51F87E2 ADD R1,R7,#+980 \ 000000F8 ........ _BLF ascii2ws,??ascii2ws??rA 4999 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); \ 000000FC 081096E5 LDR R1,[R6, #+8] \ 00000100 040096E5 LDR R0,[R6, #+4] \ ??edchat_onkey_6: \ 00000104 9B0100EF SWI +411 5000 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000108 040096E5 LDR R0,[R6, #+4] \ 0000010C 0910A0E1 MOV R1,R9 \ 00000110 810100EF SWI +385 5001 FreeWS(ws); \ 00000114 0900A0E1 MOV R0,R9 \ 00000118 290100EF SWI +297 5002 RefreshGUI(); \ 0000011C 960100EF SWI +406 5003 } 5004 #endif 5005 } 5006 #endif 5007 if (msg->gbsmsg->msg==KEY_DOWN) \ ??edchat_onkey_3: \ 00000120 040094E5 LDR R0,[R4, #+4] \ 00000124 9310A0E3 MOV R1,#+147 \ 00000128 040090E5 LDR R0,[R0, #+4] \ 0000012C 401F81E3 ORR R1,R1,#0x100 \ 00000130 010050E1 CMP R0,R1 \ 00000134 0A00001A BNE ??edchat_onkey_7 5008 { 5009 if ((l>='0')&&(l<='9')) \ 00000138 300058E3 CMP R8,#+48 \ 0000013C 0B0000BA BLT ??edchat_onkey_8 \ 00000140 3A0058E3 CMP R8,#+58 \ 00000144 060000AA BGE ??edchat_onkey_7 5010 { 5011 if (EDIT_GetFocus(data)!=ed_struct->ed_answer) \ 00000148 0500A0E1 MOV R0,R5 \ 0000014C 820100EF SWI +386 \ 00000150 081096E5 LDR R1,[R6, #+8] \ 00000154 010050E1 CMP R0,R1 \ 00000158 0100000A BEQ ??edchat_onkey_7 5012 EDIT_SetFocus(data,ed_struct->ed_answer); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 9B0100EF SWI +411 5013 } 5014 if (l==GREEN_BUTTON) 5015 { 5016 if (connect_state==3) 5017 { 5018 if ((t=ed_struct->ed_contact)) 5019 { 5020 ExtractEditControl(data,ed_struct->ed_answer,&ec); 5021 SaveAnswer(t,ec.pWS); 5022 if ((s=t->answer)) 5023 { 5024 if ((len=strlen(s))) 5025 { 5026 msg_away_timer=0; 5027 away_m=0; 5028 automsg=0; 5029 5030 if(SHOW_ACTIVE) 5031 t->isactive=ACTIVE_TIME; 5032 p=malloc(sizeof(PKT)+len+1); 5033 p->pkt.uin=t->uin; 5034 p->pkt.type=T_SENDMSG; 5035 p->pkt.data_len=len; 5036 strcpy(p->data,s); 5037 /* 5038 #ifdef EVILFOX 5039 strcpy(t->last_msg_buffer, s); 5040 #else 5041 */ 5042 #ifdef ELKA 5043 strcpy(last_msg_buffer, s); 5044 #endif 5045 AddStringToLog(t,0x01,p->data,I_str,(++SENDMSGCOUNT)&0x7FFF); //Номер сообщения 5046 SUBPROC((void *)SendAnswer,0,p); 5047 main2_count++; 5048 mfree(t->answer); 5049 t->answer=NULL; 5050 // request_remake_edchat=1; 5051 EDIT_SetFocus(data,ed_struct->ed_answer); 5052 CutWSTR(ews,0); 5053 EDIT_SetTextToFocused(data,ews); 5054 AddMsgToChat(data); 5055 RecountMenu(t); 5056 return(-1); 5057 } 5058 } 5059 } 5060 } 5061 } 5062 if (l==ENTER_BUTTON) 5063 { 5064 // t=FindNextActiveContact(ed_struct->ed_contact); 5065 // if ((t!=ed_struct->ed_contact) && t) 5066 { 5067 int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 5068 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+2); 5069 return (-1); 5070 } 5071 } 5072 if (l==VOL_UP_BUTTON) 5073 { 5074 int pos; 5075 5076 if ((pos=EDIT_GetFocus(data)-2)>=2) 5077 { 5078 EDIT_SetFocus(data, pos); 5079 EDIT_SetCursorPos(data, 1); 5080 } 5081 return (-1); 5082 } 5083 if (l==VOL_DOWN_BUTTON) 5084 { 5085 int pos; 5086 5087 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 5088 { 5089 EDIT_SetFocus(data, pos); 5090 EDIT_SetCursorPos(data, 1); 5091 } 5092 return (-1); 5093 } 5094 } 5095 return(0); //Do standart keys \ ??edchat_onkey_7: \ 00000164 0000A0E3 MOV R0,#+0 \ ??edchat_onkey_2: \ 00000168 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 0000016C F08FBDE8 POP {R4-R11,PC} ;; return \ ??edchat_onkey_8: \ 00000170 004096E5 LDR R4,[R6, #+0] \ 00000174 0B0058E3 CMP R8,#+11 \ 00000178 4F00001A BNE ??edchat_onkey_9 \ 0000017C 440197E5 LDR R0,[R7, #+324] \ 00000180 030050E3 CMP R0,#+3 \ 00000184 F6FFFF1A BNE ??edchat_onkey_7 \ 00000188 000054E3 CMP R4,#+0 \ 0000018C F4FFFF0A BEQ ??edchat_onkey_7 \ 00000190 081096E5 LDR R1,[R6, #+8] \ 00000194 0D20A0E1 MOV R2,SP \ 00000198 0500A0E1 MOV R0,R5 \ 0000019C 690100EF SWI +361 \ 000001A0 28109DE5 LDR R1,[SP, #+40] \ 000001A4 0400A0E1 MOV R0,R4 \ 000001A8 ........ BL SaveAnswer \ 000001AC 78A094E5 LDR R10,[R4, #+120] \ 000001B0 00005AE3 CMP R10,#+0 \ 000001B4 EAFFFF0A BEQ ??edchat_onkey_7 \ 000001B8 0A00A0E1 MOV R0,R10 \ 000001BC 1B0000EF SWI +27 \ 000001C0 00B0B0E1 MOVS R11,R0 \ 000001C4 E6FFFF0A BEQ ??edchat_onkey_7 \ 000001C8 ........ LDR R0,??DataTable194 ;; SHOW_ACTIVE \ 000001CC 0080A0E3 MOV R8,#+0 \ 000001D0 000090E5 LDR R0,[R0, #+0] \ 000001D4 E08087E5 STR R8,[R7, #+224] \ 000001D8 E88087E5 STR R8,[R7, #+232] \ 000001DC 108187E5 STR R8,[R7, #+272] \ 000001E0 000050E3 CMP R0,#+0 \ 000001E4 5A0FA013 MOVNE R0,#+360 \ 000001E8 80008415 STRNE R0,[R4, #+128] \ 000001EC 09008BE2 ADD R0,R11,#+9 \ 000001F0 140000EF SWI +20 \ 000001F4 0090A0E1 MOV R9,R0 \ 000001F8 0C0094E5 LDR R0,[R4, #+12] \ 000001FC 0A10A0E1 MOV R1,R10 \ 00000200 000089E5 STR R0,[R9, #+0] \ 00000204 0200A0E3 MOV R0,#+2 \ 00000208 B400C9E1 STRH R0,[R9, #+4] \ 0000020C B6B0C9E1 STRH R11,[R9, #+6] \ 00000210 080089E2 ADD R0,R9,#+8 \ 00000214 1A0000EF SWI +26 \ 00000218 0A10A0E1 MOV R1,R10 \ 0000021C F50F87E2 ADD R0,R7,#+980 \ 00000220 1A0000EF SWI +26 \ 00000224 D00097E5 LDR R0,[R7, #+208] \ 00000228 ........ LDR R3,??DataTable221 ;; `?ed_contact)); 5116 ((HEADER_DESC *)&edchat_hdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); 5117 DrawImg(ScreenW()-1-width,1,icon); 5118 #else 5119 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] 5120 width=GetImgWidth(icon); \ 00000044 0400A0E1 MOV R0,R4 \ 00000048 220000EF SWI +34 \ 0000004C 0050A0E1 MOV R5,R0 5121 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 5122 /* DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 5123 GetPaletteAdrByColorIndex(0), 5124 GetPaletteAdrByColorIndex(EDIT_IsBusy(edchat_gui)?3:4));*/ 5125 #endif 5126 } 5127 } 5128 } \ 0000006C 3080BDE8 POP {R4,R5,PC} ;; return 5129 \ In segment CODE, align 4, keep-with-next 5130 void edchat_ghook(GUI *data, int cmd) 5131 { \ edchat_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 5132 5133 static const SOFTKEY_DESC sk={0x0FFF,0x0000,(int)LG_MENU}; 5134 static const SOFTKEY_DESC sk_cancel={0x0FF0,0x0000,(int)LG_CLOSE}; 5135 // static SOFTKEY_DESC sk={0x0018,0x0000,(int)"Menu"}; 5136 int j; 5137 EDITCONTROL ec; 5138 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); 5139 PNGTOP_DESC *pltop=PNG_TOP(); 5140 if (cmd==9) \ 00000004 ........ LDR R4,??DataTable199 ;; 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 5141 { 5142 GBS_DelTimer(&tmr_illumination); //by BoBa 25.06.07 \ 00000030 EC00A0E3 MOV R0,#+236 \ 00000034 5C0D80E3 ORR R0,R0,#0x1700 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 8C0100EF SWI +396 5143 pltop->dyn_pltop=NULL; \ 00000040 086088E5 STR R6,[R8, #+8] \ 00000044 170000EA B ??edchat_ghook_1 5144 } 5145 if (cmd==2) \ ??edchat_ghook_0: \ 00000048 081097E5 LDR R1,[R7, #+8] \ 0000004C 020059E3 CMP R9,#+2 \ 00000050 1600001A BNE ??edchat_ghook_2 5146 { 5147 ed_struct->ed_chatgui=data; \ 00000054 045087E5 STR R5,[R7, #+4] 5148 // edgui_data=data; 5149 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000058 0500A0E1 MOV R0,R5 \ 0000005C 9B0100EF SWI +411 5150 5151 static void *methods[16]; 5152 void **m=GetDataOfItemByID(data,2); \ 00000060 0210A0E3 MOV R1,#+2 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 4F0100EF SWI +335 \ 0000006C 0050B0E1 MOVS R5,R0 5153 if (m) 5154 { 5155 if (m[1]) \ 00000070 04009515 LDRNE R0,[R5, #+4] \ 00000074 00005013 CMPNE R0,#+0 \ 00000078 6500000A BEQ ??edchat_ghook_3 5156 { 5157 memcpy(methods,m[1],sizeof(methods)); \ 0000007C 6D6FA0E3 MOV R6,#+436 \ 00000080 4020A0E3 MOV R2,#+64 \ 00000084 0010A0E1 MOV R1,R0 \ 00000088 040086E0 ADD R0,R6,R4 \ 0000008C 1E0100EF SWI +286 5158 old_ed_redraw=(void (*)(void *))(methods[0]); \ 00000090 040096E7 LDR R0,[R6, +R4] \ 00000094 B00184E5 STR R0,[R4, #+432] 5159 methods[0]=(void *)my_ed_redraw; \ 00000098 7C019FE5 LDR R0,??edchat_ghook_4 ;; my_ed_redraw \ 0000009C 040086E7 STR R0,[R6, +R4] 5160 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} 5161 } 5162 } 5163 } 5164 if (cmd==3) \ ??edchat_ghook_2: \ 000000B0 030059E3 CMP R9,#+3 \ 000000B4 0D00001A BNE ??edchat_ghook_5 5165 { 5166 // if (edgui_data==data) edgui_data=NULL; 5167 if (ed_struct->ed_contact) \ 000000B8 000097E5 LDR R0,[R7, #+0] \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 0500000A BEQ ??edchat_ghook_6 5168 { 5169 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C4 0D20A0E1 MOV R2,SP \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 690100EF SWI +361 5170 SaveAnswer(ed_struct->ed_contact,ec.pWS); \ 000000D0 28109DE5 LDR R1,[SP, #+40] \ 000000D4 000097E5 LDR R0,[R7, #+0] \ 000000D8 ........ BL SaveAnswer 5171 } 5172 RecountMenu(ed_struct->ed_contact); \ ??edchat_ghook_6: \ 000000DC 000097E5 LDR R0,[R7, #+0] \ 000000E0 ........ BL RecountMenu 5173 mfree(ed_struct); \ 000000E4 0700A0E1 MOV R0,R7 \ 000000E8 150000EF SWI +21 \ 000000EC EDFFFFEA B ??edchat_ghook_1 5174 } 5175 if (cmd==0x0A) \ ??edchat_ghook_5: \ 000000F0 0A0059E3 CMP R9,#+10 \ 000000F4 0D00001A BNE ??edchat_ghook_7 5176 { 5177 pltop->dyn_pltop=SmilesImgList; \ 000000F8 20019FE5 LDR R0,??edchat_ghook_4+0x4 ;; SmilesImgList \ 000000FC 000090E5 LDR R0,[R0, #+0] \ 00000100 080088E5 STR R0,[R8, #+8] 5178 DisableIDLETMR(); \ 00000104 7F0100EF SWI +383 5179 total_unread-=ed_struct->requested_decrement_total_unread; \ 00000108 C00094E5 LDR R0,[R4, #+192] \ 0000010C 0C1097E5 LDR R1,[R7, #+12] \ 00000110 010040E0 SUB R0,R0,R1 \ 00000114 C00084E5 STR R0,[R4, #+192] 5180 ed_struct->requested_decrement_total_unread=0; \ 00000118 0C6087E5 STR R6,[R7, #+12] 5181 #ifdef ELKA 5182 if (!total_unread) \ 0000011C C00094E5 LDR R0,[R4, #+192] \ 00000120 000050E3 CMP R0,#+0 \ 00000124 3A00001A BNE ??edchat_ghook_3 5183 { 5184 SLI_Off(); \ 00000128 ........ BL SLI_Off \ 0000012C DDFFFFEA B ??edchat_ghook_1 5185 } 5186 #endif 5187 /* if (request_close_edchat) 5188 { 5189 request_close_edchat=0; 5190 GeneralFunc_flag1(edchat_id,1); 5191 return; 5192 }*/ 5193 } 5194 if (cmd==7) \ ??edchat_ghook_7: \ 00000130 070059E3 CMP R9,#+7 \ 00000134 2700001A BNE ??edchat_ghook_8 5195 { 5196 SetSoftKey(data,&sk,SET_SOFT_KEY_N); \ 00000138 E4809FE5 LDR R8,??edchat_ghook_4+0x8 ;; ??sk_1 \ 0000013C 0020A0E3 MOV R2,#+0 \ 00000140 0810A0E1 MOV R1,R8 \ 00000144 0500A0E1 MOV R0,R5 \ 00000148 680100EF SWI +360 5197 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 0000014C 081097E5 LDR R1,[R7, #+8] \ 00000150 0D20A0E1 MOV R2,SP \ 00000154 0500A0E1 MOV R0,R5 \ 00000158 690100EF SWI +361 5198 if (ec.pWS->wsbody[0]==0) \ 0000015C 28009DE5 LDR R0,[SP, #+40] \ 00000160 000090E5 LDR R0,[R0, #+0] \ 00000164 B000D0E1 LDRH R0,[R0, #+0] \ 00000168 000050E3 CMP R0,#+0 \ 0000016C 0300001A BNE ??edchat_ghook_9 5199 SetSoftKey(data,&sk_cancel,SET_SOFT_KEY_N==0?1:0); \ 00000170 0120A0E3 MOV R2,#+1 \ 00000174 081088E2 ADD R1,R8,#+8 \ 00000178 0500A0E1 MOV R0,R5 \ 0000017C 680100EF SWI +360 5200 if (!EDIT_IsBusy(data)) \ ??edchat_ghook_9: \ 00000180 0500A0E1 MOV R0,R5 \ 00000184 1C0200EF SWI +540 \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 2000001A BNE ??edchat_ghook_3 5201 { 5202 time_to_stop_t9=0; \ 00000190 9C6184E5 STR R6,[R4, #+412] 5203 if (ed_struct->ed_contact->req_add) \ 00000194 000097E5 LDR R0,[R7, #+0] \ 00000198 6C1090E5 LDR R1,[R0, #+108] \ 0000019C 000051E3 CMP R1,#+0 \ 000001A0 0400000A BEQ ??edchat_ghook_10 5204 { 5205 ed_struct->ed_contact->req_add=0; \ 000001A4 6C6080E5 STR R6,[R0, #+108] 5206 AddMsgToChat(data); \ 000001A8 0500A0E1 MOV R0,R5 \ 000001AC ........ BL AddMsgToChat 5207 RecountMenu(ed_struct->ed_contact); \ 000001B0 000097E5 LDR R0,[R7, #+0] \ 000001B4 ........ BL RecountMenu 5208 } 5209 if (ed_struct->ed_contact->req_drawack) \ ??edchat_ghook_10: \ 000001B8 000097E5 LDR R0,[R7, #+0] \ 000001BC 701090E5 LDR R1,[R0, #+112] \ 000001C0 000051E3 CMP R1,#+0 \ 000001C4 1200000A BEQ ??edchat_ghook_3 5210 { 5211 ed_struct->ed_contact->req_drawack=0; \ 000001C8 706080E5 STR R6,[R0, #+112] 5212 DrawAck(data); \ 000001CC 0500A0E1 MOV R0,R5 \ 000001D0 ........ BL DrawAck \ 000001D4 B3FFFFEA B ??edchat_ghook_1 5213 } 5214 } 5215 } 5216 if (cmd==0x0C) \ ??edchat_ghook_8: \ 000001D8 0C0059E3 CMP R9,#+12 \ 000001DC 0C00001A BNE ??edchat_ghook_3 5217 { 5218 j=EDIT_GetFocus(data); \ 000001E0 0500A0E1 MOV R0,R5 \ 000001E4 820100EF SWI +386 \ 000001E8 0040A0E1 MOV R4,R0 5219 if ((EDIT_GetUnFocus(data)ed_answer)) \ 000001EC 0500A0E1 MOV R0,R5 \ 000001F0 830100EF SWI +387 \ 000001F4 040050E1 CMP R0,R4 \ 000001F8 050000AA BGE ??edchat_ghook_3 \ 000001FC 080097E5 LDR R0,[R7, #+8] \ 00000200 000054E1 CMP R4,R0 \ 00000204 0200000A BEQ ??edchat_ghook_3 5220 EDIT_SetCursorPos(data,1); \ 00000208 0110A0E3 MOV R1,#+1 \ 0000020C 0500A0E1 MOV R0,R5 \ 00000210 D40100EF SWI +468 5221 } 5222 } \ ??edchat_ghook_3: \ 00000214 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 00000218 F083BDE8 POP {R4-R9,PC} ;; return \ ??edchat_ghook_4: \ 0000021C ........ DC32 my_ed_redraw \ 00000220 ........ DC32 SmilesImgList \ 00000224 ........ DC32 ??sk_1 \ In segment DATA_C, align 4, align-sorted 5223 5224 5225 5226 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 `?` 5227 { 5228 1, 5229 edchat_onkey, 5230 edchat_ghook, 5231 (void *)edchat_locret, 5232 0, 5233 &menu_skt, 5234 {0,NULL,NULL,NULL}, 5235 FONT_SMALL, 5236 100, 5237 101, 5238 0, 5239 // 0x00000001 - Выровнять по правому краю 5240 // 0x00000002 - Выровнять по центру 5241 // 0x00000004 - Инверсия знакомест 5242 // 0x00000008 - UnderLine 5243 // 0x00000020 - Не переносить слова 5244 // 0x00000200 - bold 5245 0, 5246 // 0x00000002 - ReadOnly 5247 // 0x00000004 - Не двигается курсор 5248 // 0x40000000 - Поменять местами софт-кнопки 5249 0x40000000 5250 }; 5251 \ In segment CODE, align 4, keep-with-next 5252 void CreateEditChat(CLIST *t) 5253 { \ CreateEditChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 5254 extern const int FIRST_LETTER; 5255 void *ma=malloc_adr(); 5256 void *eq; 5257 EDITCONTROL ec; 5258 EDITC_OPTIONS ec_options; 5259 int color, font, type; 5260 int zc; 5261 5262 LOGQ *lp; 5263 int edchat_toitem; 5264 // edcontact=t; 5265 5266 *((int *)(&edchat_hdr.lgp_id))=(int)t->name; \ 00000004 8C649FE5 LDR R6,??CreateEditChat_0 ;; edchat_desc 5267 // *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+GetIconIndex(t); 5268 *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+IS_NULLICON; \ 00000008 ........ LDR R7,??DataTable200 ;; 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] 5269 5270 eq=AllocEQueue(ma,mfree_adr()); \ 0000002C 158000EF SWI +32789 \ 00000030 0010A0E1 MOV R1,R0 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 630100EF SWI +355 5271 5272 /* hist = malloc(256); 5273 if(!GetHistory(hist, 256, t->uin)) 5274 { 5275 ascii2ws(ews,hist); 5276 PrepareEditControl(&ec); 5277 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL|ECF_DISABLE_T9,ews,ews->wsbody[0]); 5278 } 5279 mfree(hist); 5280 5281 AddEditControlToEditQend(eq,&ec,ma); */ 5282 lp=t->log; \ 0000003C 749094E5 LDR R9,[R4, #+116] \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 000059E3 CMP R9,#+0 \ 00000048 9500000A BEQ ??CreateEditChat_1 5283 5284 while(lp) 5285 { 5286 font = ED_H_FONT_SIZE; 5287 if ((zc=lp->acked&3)) \ ??CreateEditChat_2: \ 0000004C ........ LDR R2,??DataTable201 ;; ED_X_FONT_SIZE \ 00000050 ........ LDR R0,??DataTable202 ;; 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,??DataTable203 ;; I_COLOR \ 00000064 1C208DE5 STR R2,[SP, #+28] \ 00000068 ........ LDR R2,??DataTable204 ;; X_COLOR \ 0000006C 030010E2 ANDS R0,R0,#0x3 \ 00000070 002092E5 LDR R2,[R2, #+0] \ 00000074 14208DE5 STR R2,[SP, #+20] \ 00000078 ........ LDR R2,??DataTable205 ;; O_ED_X_FONT_SIZE \ 0000007C 002092E5 LDR R2,[R2, #+0] \ 00000080 18208DE5 STR R2,[SP, #+24] \ 00000084 ........ LDR R2,??DataTable206 ;; 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 5288 { 5289 if (zc==1) \ 00000098 010050E3 CMP R0,#+1 \ 0000009C 1E00001A BNE ??CreateEditChat_4 5290 color=ACK_COLOR; //Зеленый \ 000000A0 ........ LDR R0,??DataTable207 ;; ACK_COLOR \ 000000A4 1B0000EA B ??CreateEditChat_5 5291 else 5292 color=I_COLOR; 5293 } 5294 else 5295 { 5296 if (lp->ID==0xFFFFFFFF) \ ??CreateEditChat_3: \ 000000A8 080099E5 LDR R0,[R9, #+8] \ 000000AC 010070E3 CMN R0,#+1 \ 000000B0 1700001A BNE ??CreateEditChat_6 5297 { 5298 type = lp->type&0x0F; \ 000000B4 0C0099E5 LDR R0,[R9, #+12] \ 000000B8 0F1000E2 AND R1,R0,#0xF 5299 if(lp->type&0x10) \ 000000BC 100010E3 TST R0,#0x10 \ 000000C0 0B00000A BEQ ??CreateEditChat_7 5300 { 5301 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 000000C4 010051E3 CMP R1,#+1 \ 000000C8 ........ LDREQ R0,??DataTable208 ;; 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,??DataTable209 ;; O_TO_COLOR \ ??CreateEditChat_8: \ 000000E4 00B090E5 LDR R11,[R0, #+0] \ 000000E8 ........ LDR R0,??DataTable210 ;; O_ED_H_FONT_SIZE \ 000000EC 00A090E5 LDR R10,[R0, #+0] \ 000000F0 090000EA B ??CreateEditChat_4 5302 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 5303 } 5304 else 5305 { 5306 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,??DataTable211 ;; TO_COLOR \ 00000110 000000EA B ??CreateEditChat_5 5307 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 5308 } 5309 } 5310 else 5311 color=UNACK_COLOR; //????? \ ??CreateEditChat_6: \ 00000114 ........ LDR R0,??DataTable212 ;; UNACK_COLOR \ ??CreateEditChat_5: \ 00000118 00B090E5 LDR R11,[R0, #+0] 5312 } 5313 PrepareEditControl(&ec); \ ??CreateEditChat_4: \ 0000011C 20008DE2 ADD R0,SP,#+32 \ 00000120 640100EF SWI +356 5314 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 5315 { 5316 ascii2ws(ews,lp->hdr); \ 00000134 DC0097E5 LDR R0,[R7, #+220] \ 00000138 101089E2 ADD R1,R9,#+16 \ 0000013C ........ _BLF ascii2ws,??ascii2ws??rA 5317 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000140 DC3097E5 LDR R3,[R7, #+220] \ 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 5318 } 5319 else 5320 { 5321 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??CreateEditChat_9: \ 00000158 0000A0E3 MOV R0,#+0 \ 0000015C 01002DE9 PUSH {R0} \ 00000160 DC3097E5 LDR R3,[R7, #+220] \ 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 5322 } 5323 PrepareEditCOptions(&ec_options); \ 00000178 0D00A0E1 MOV R0,SP \ 0000017C C80100EF SWI +456 5324 SetPenColorToEditCOptions(&ec_options,color); \ 00000180 0B10A0E1 MOV R1,R11 \ 00000184 0D00A0E1 MOV R0,SP \ 00000188 CC0100EF SWI +460 5325 SetFontToEditCOptions(&ec_options,font); \ 0000018C 0A10A0E1 MOV R1,R10 \ 00000190 0D00A0E1 MOV R0,SP \ 00000194 CA0100EF SWI +458 5326 CopyOptionsToEditControl(&ec,&ec_options); \ 00000198 0D10A0E1 MOV R1,SP \ 0000019C 20008DE2 ADD R0,SP,#+32 \ 000001A0 CE0100EF SWI +462 5327 AddEditControlToEditQend(eq,&ec,ma); \ 000001A4 0520A0E1 MOV R2,R5 \ 000001A8 20108DE2 ADD R1,SP,#+32 \ 000001AC 0800A0E1 MOV R0,R8 \ 000001B0 660100EF SWI +358 5328 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 5329 { 5330 ParseAnswer(ews,lp->text); \ 000001C4 DC0097E5 LDR R0,[R7, #+220] \ 000001C8 601089E2 ADD R1,R9,#+96 \ 000001CC ........ BL ParseAnswer \ 000001D0 050000EA B ??CreateEditChat_12 5331 } 5332 else 5333 { 5334 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 DC0097E5 LDR R0,[R7, #+220] \ 000001E0 14209D05 LDREQ R2,[SP, #+20] \ 000001E4 601089E2 ADD R1,R9,#+96 \ 000001E8 ........ BL ParseXStatusText 5335 } 5336 PrepareEditControl(&ec); \ ??CreateEditChat_12: \ 000001EC 20008DE2 ADD R0,SP,#+32 \ 000001F0 640100EF SWI +356 5337 ConstructEditControl(&ec, 5338 ECT_NORMAL_TEXT, 5339 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 5340 ews,ews->wsbody[0]); \ 000001F4 DC3097E5 LDR R3,[R7, #+220] \ 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 5341 PrepareEditCOptions(&ec_options); \ 00000220 04008DE2 ADD R0,SP,#+4 \ 00000224 C80100EF SWI +456 5342 //#ifdef M75 5343 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 5344 { 5345 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 0000023C 100010E3 TST R0,#0x10 \ 00000240 ........ LDRNE R0,??DataTable213 ;; O_ED_FONT_SIZE \ 00000244 ........ LDREQ R0,??DataTable215 ;; ED_FONT_SIZE \ 00000248 001090E5 LDR R1,[R0, #+0] \ 0000024C 080000EA B ??CreateEditChat_14 5346 } 5347 else 5348 { 5349 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 5350 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 5351 } 5352 //#else 5353 // SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 5354 //#endif 5355 CopyOptionsToEditControl(&ec,&ec_options); \ 0000027C 0D10A0E1 MOV R1,SP \ 00000280 20008DE2 ADD R0,SP,#+32 \ 00000284 CE0100EF SWI +462 5356 AddEditControlToEditQend(eq,&ec,ma); \ 00000288 0520A0E1 MOV R2,R5 \ 0000028C 20108DE2 ADD R1,SP,#+32 \ 00000290 0800A0E1 MOV R0,R8 \ 00000294 660100EF SWI +358 5357 lp=lp->next; \ 00000298 009099E5 LDR R9,[R9, #+0] 5358 } \ 0000029C 000059E3 CMP R9,#+0 \ 000002A0 69FFFF1A BNE ??CreateEditChat_2 5359 if (t->isunread) total_unread--; \ ??CreateEditChat_1: \ 000002A4 640094E5 LDR R0,[R4, #+100] 5360 total_unread2=total_unread2-t->unread_msg; 5361 t->unread_msg=0; \ 000002A8 0090A0E3 MOV R9,#+0 \ 000002AC 000050E3 CMP R0,#+0 \ 000002B0 C0009715 LDRNE R0,[R7, #+192] \ 000002B4 01004012 SUBNE R0,R0,#+1 \ 000002B8 C0008715 STRNE R0,[R7, #+192] \ 000002BC C40097E5 LDR R0,[R7, #+196] \ 000002C0 681094E5 LDR R1,[R4, #+104] \ 000002C4 010040E0 SUB R0,R0,R1 \ 000002C8 C40087E5 STR R0,[R7, #+196] \ 000002CC 689084E5 STR R9,[R4, #+104] 5362 t->isunread=0; \ 000002D0 649084E5 STR R9,[R4, #+100] 5363 ChangeContactPos(t); \ 000002D4 0400A0E1 MOV R0,R4 \ 000002D8 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 5364 wsprintf(ews, "-------"); \ 000002DC DC0097E5 LDR R0,[R7, #+220] \ 000002E0 4C1086E2 ADD R1,R6,#+76 \ 000002E4 240100EF SWI +292 5365 PrepareEditControl(&ec); \ 000002E8 20008DE2 ADD R0,SP,#+32 \ 000002EC 640100EF SWI +356 5366 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000002F0 DC3097E5 LDR R3,[R7, #+220] \ 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 5367 PrepareEditCOptions(&ec_options); \ 00000310 04008DE2 ADD R0,SP,#+4 \ 00000314 C80100EF SWI +456 5368 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000318 ........ LDR R0,??DataTable215 ;; ED_FONT_SIZE \ 0000031C 00A090E5 LDR R10,[R0, #+0] \ 00000320 04008DE2 ADD R0,SP,#+4 \ 00000324 0A10A0E1 MOV R1,R10 \ 00000328 CA0100EF SWI +458 5369 CopyOptionsToEditControl(&ec,&ec_options); \ 0000032C 04108DE2 ADD R1,SP,#+4 \ 00000330 24008DE2 ADD R0,SP,#+36 \ 00000334 CE0100EF SWI +462 5370 AddEditControlToEditQend(eq,&ec,ma); \ 00000338 0520A0E1 MOV R2,R5 \ 0000033C 24108DE2 ADD R1,SP,#+36 \ 00000340 0800A0E1 MOV R0,R8 \ 00000344 660100EF SWI +358 5371 5372 if (t->answer) ParseAnswer(ews,t->answer); \ 00000348 781094E5 LDR R1,[R4, #+120] \ 0000034C 04D08DE2 ADD SP,SP,#+4 \ 00000350 000051E3 CMP R1,#+0 \ 00000354 0200000A BEQ ??CreateEditChat_15 \ 00000358 DC0097E5 LDR R0,[R7, #+220] \ 0000035C ........ BL ParseAnswer \ 00000360 020000EA B ??CreateEditChat_16 5373 else CutWSTR(ews,0); \ ??CreateEditChat_15: \ 00000364 DC0097E5 LDR R0,[R7, #+220] \ 00000368 0010A0E3 MOV R1,#+0 \ 0000036C 260100EF SWI +294 5374 PrepareEditControl(&ec); \ ??CreateEditChat_16: \ 00000370 20008DE2 ADD R0,SP,#+32 \ 00000374 640100EF SWI +356 5375 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 DC3097E5 LDR R3,[R7, #+220] \ 00000394 402DA013 MOVNE R2,#+4096 \ 00000398 0020A003 MOVEQ R2,#+0 \ 0000039C 24008DE2 ADD R0,SP,#+36 \ 000003A0 650100EF SWI +357 5376 5377 PrepareEditCOptions(&ec_options); \ 000003A4 04008DE2 ADD R0,SP,#+4 \ 000003A8 C80100EF SWI +456 5378 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 000003AC 0A10A0E1 MOV R1,R10 \ 000003B0 04008DE2 ADD R0,SP,#+4 \ 000003B4 CA0100EF SWI +458 5379 CopyOptionsToEditControl(&ec,&ec_options); \ 000003B8 04108DE2 ADD R1,SP,#+4 \ 000003BC 24008DE2 ADD R0,SP,#+36 \ 000003C0 CE0100EF SWI +462 5380 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 5381 5382 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 5383 { 5384 FreeXText(t); \ 000003E8 0400A0E1 MOV R0,R4 \ 000003EC ........ _BLF FreeXText,??FreeXText??rA 5385 t->req_xtext=0; \ 000003F0 8C9084E5 STR R9,[R4, #+140] 5386 RequestXText(t->uin); \ 000003F4 0C0094E5 LDR R0,[R4, #+12] \ 000003F8 ........ BL RequestXText 5387 } 5388 5389 EDCHAT_STRUCT *ed_struct=malloc(sizeof(EDCHAT_STRUCT)); \ ??CreateEditChat_17: \ 000003FC 1400A0E3 MOV R0,#+20 \ 00000400 140000EF SWI +20 \ 00000404 0050A0E1 MOV R5,R0 5390 ed_struct->ed_contact=t; \ 00000408 004085E5 STR R4,[R5, #+0] 5391 ed_struct->ed_answer=edchat_toitem; \ 0000040C 08A085E5 STR R10,[R5, #+8] 5392 ed_struct->requested_decrement_total_unread=0; \ 00000410 0C9085E5 STR R9,[R5, #+12] 5393 t->req_add=0; \ 00000414 6C9084E5 STR R9,[R4, #+108] 5394 t->last_log=NULL; \ 00000418 7C9084E5 STR R9,[R4, #+124] 5395 5396 // int scr_w=ScreenW(); 5397 // int scr_h=ScreenH(); 5398 // int head_h=HeaderH(); 5399 5400 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] 5401 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] 5402 // edchat_desc.font=ED_FONT_SIZE; 5403 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 740187E5 STR R0,[R7, #+372] 5404 } \ 00000490 50D08DE2 ADD SP,SP,#+80 \ 00000494 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CreateEditChat_0: \ 00000498 ........ DC32 edchat_desc \ 0000049C ........ DC32 FIRST_LETTER 5405 5406 //----------------------------------------------------------------------------- 5407 #define EC_MNU_MAX 8 5408 \ In segment CODE, align 4, keep-with-next 5409 void Quote(GUI *data) 5410 { \ Quote: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 5411 int q_n; 5412 EDITCONTROL ec, ec_hdr; 5413 EDITCONTROL ec_ed; 5414 WSHDR *ed_ws; 5415 WSHDR *ws; 5416 5417 EDCHAT_STRUCT *ed_struct; 5418 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 5419 5420 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 5421 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 5422 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 5423 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 5424 5425 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 5426 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 5427 { 5428 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 5429 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote_1 5430 } 5431 else 5432 CutWSTR(ed_ws,0); \ ??Quote_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 5433 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 5434 { 5435 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 5436 } 5437 else 5438 { 5439 wstrcat(ed_ws,ec.pWS); \ ??Quote_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 5440 } 5441 int ed_pos=0; \ ??Quote_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 5442 do 5443 { 5444 ed_pos++; \ ??Quote_4: \ 000000D0 017080E2 ADD R7,R0,#+1 5445 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 5446 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 5447 } 5448 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 5449 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 5450 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 5451 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 5452 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 5453 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 5454 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 5455 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 5456 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 5457 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 0000017C 040094E5 LDR R0,[R4, #+4] \ 00000180 0610A0E1 MOV R1,R6 \ 00000184 810100EF SWI +385 5458 FreeWS(ws); \ 00000188 0600A0E1 MOV R0,R6 \ 0000018C 290100EF SWI +297 5459 GeneralFuncF1(1); \ 00000190 0100A0E3 MOV R0,#+1 \ 00000194 3B0100EF SWI +315 5460 } \ 00000198 84D08DE2 ADD SP,SP,#+132 \ 0000019C F080BDE8 POP {R4-R7,PC} ;; return 5461 5462 \ In segment CODE, align 4, keep-with-next 5463 void GetShortInfo(GUI *data) 5464 { \ GetShortInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} 5465 EDCHAT_STRUCT *ed_struct; 5466 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 5467 5468 TPKT *p; 5469 CLIST *t; 5470 if ((t=ed_struct->ed_contact)&&(connect_state==3)) \ 0000000C 005094E5 LDR R5,[R4, #+0] \ 00000010 000055E3 CMP R5,#+0 \ 00000014 1F00000A BEQ ??GetShortInfo_0 \ 00000018 ........ LDR R0,??DataTable224 ;; S_ICONS + 324 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 030050E3 CMP R0,#+3 \ 00000024 1B00001A BNE ??GetShortInfo_0 5471 { 5472 p=malloc(sizeof(PKT)); \ 00000028 0800A0E3 MOV R0,#+8 \ 0000002C 140000EF SWI +20 \ 00000030 0060A0E1 MOV R6,R0 5473 p->pkt.uin=t->uin; \ 00000034 0C0095E5 LDR R0,[R5, #+12] 5474 p->pkt.type=T_REQINFOSHORT; 5475 p->pkt.data_len=0; 5476 AddStringToLog(t, 0x01, "Request info...", I_str,0xFFFFFFFF); \ 00000038 0010E0E3 MVN R1,#+0 \ 0000003C 000086E5 STR R0,[R6, #+0] \ 00000040 0B00A0E3 MOV R0,#+11 \ 00000044 B400C6E1 STRH R0,[R6, #+4] \ 00000048 0000A0E3 MOV R0,#+0 \ 0000004C B600C6E1 STRH R0,[R6, #+6] \ 00000050 ........ LDR R0,??DataTable223 ;; `?ed_chatgui); \ 00000074 040094E5 LDR R0,[R4, #+4] \ 00000078 ........ BL AddMsgToChat 5478 RecountMenu(t); \ 0000007C 0500A0E1 MOV R0,R5 \ 00000080 ........ BL RecountMenu 5479 SUBPROC((void *)SendAnswer,0,p); \ 00000084 ........ LDR R0,??DataTable225 ;; SendAnswer \ 00000088 0620A0E1 MOV R2,R6 \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 710100EF SWI +369 \ 00000094 04D08DE2 ADD SP,SP,#+4 5480 } 5481 GeneralFuncF1(1); \ ??GetShortInfo_0: \ 00000098 0100A0E3 MOV R0,#+1 \ 0000009C 3B0100EF SWI +315 5482 } \ 000000A0 7080BDE8 POP {R4-R6,PC} ;; return 5483 5484 void AskNickAndAddContact(EDCHAT_STRUCT *); \ In segment CODE, align 4, keep-with-next 5485 void AddCurContact(GUI *data) 5486 { \ AddCurContact: \ 00000000 00402DE9 PUSH {LR} 5487 EDCHAT_STRUCT *ed_struct; 5488 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 5489 5490 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,??DataTable224 ;; S_ICONS + 324 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0000001A BNE ??AddCurContact_0 \ 00000024 ........ _BLF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA 5491 GeneralFuncF1(1); \ ??AddCurContact_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 3B0100EF SWI +315 5492 } \ 00000030 0080BDE8 POP {PC} ;; return 5493 \ In segment CODE, align 4, keep-with-next 5494 void SendAuthReq(GUI *data) 5495 { \ SendAuthReq: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 14D04DE2 SUB SP,SP,#+20 5496 EDCHAT_STRUCT *ed_struct; 5497 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 5498 5499 TPKT *p; 5500 CLIST *t; 5501 int l; 5502 const char s[]=LG_AUTHREQ; \ 0000000C B0109FE5 LDR R1,??SendAuthReq_0 ;; `?ed_contact)&&(connect_state==3)) \ 00000020 005094E5 LDR R5,[R4, #+0] \ 00000024 000055E3 CMP R5,#+0 \ 00000028 2100000A BEQ ??SendAuthReq_1 \ 0000002C ........ LDR R0,??DataTable224 ;; S_ICONS + 324 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 1D00001A BNE ??SendAuthReq_1 5504 { 5505 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 5506 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 5507 p->pkt.type=T_AUTHREQ; 5508 p->pkt.data_len=l; 5509 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 5510 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF); \ 00000074 ........ LDR R3,??DataTable221 ;; `?ed_chatgui); \ 00000090 040094E5 LDR R0,[R4, #+4] \ 00000094 ........ BL AddMsgToChat 5512 RecountMenu(t); \ 00000098 0500A0E1 MOV R0,R5 \ 0000009C ........ BL RecountMenu 5513 SUBPROC((void *)SendAnswer,0,p); \ 000000A0 ........ LDR R0,??DataTable225 ;; SendAnswer \ 000000A4 0720A0E1 MOV R2,R7 \ 000000A8 0010A0E3 MOV R1,#+0 \ 000000AC 710100EF SWI +369 \ 000000B0 04D08DE2 ADD SP,SP,#+4 5514 } 5515 GeneralFuncF1(1); \ ??SendAuthReq_1: \ 000000B4 0100A0E3 MOV R0,#+1 \ 000000B8 3B0100EF SWI +315 5516 } \ 000000BC 14D08DE2 ADD SP,SP,#+20 \ 000000C0 F080BDE8 POP {R4-R7,PC} ;; return \ ??SendAuthReq_0: \ 000000C4 ........ DC32 `?ed_contact)&&(connect_state==3)) \ 00000020 006094E5 LDR R6,[R4, #+0] \ 00000024 000056E3 CMP R6,#+0 \ 00000028 2100000A BEQ ??SendAuthGrant_0 \ 0000002C ........ LDR R0,??DataTable224 ;; S_ICONS + 324 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 1D00001A BNE ??SendAuthGrant_0 5528 { 5529 p=malloc(sizeof(PKT)+(l=strlen(s))+1); \ 0000003C 0D00A0E1 MOV R0,SP \ 00000040 1B0000EF SWI +27 \ 00000044 0070A0E1 MOV R7,R0 \ 00000048 090087E2 ADD R0,R7,#+9 \ 0000004C 140000EF SWI +20 \ 00000050 0080A0E1 MOV R8,R0 5530 p->pkt.uin=t->uin; \ 00000054 0C0096E5 LDR R0,[R6, #+12] 5531 p->pkt.type=T_AUTHGRANT; 5532 p->pkt.data_len=l; 5533 strcpy(p->data,s); \ 00000058 0D10A0E1 MOV R1,SP \ 0000005C 000088E5 STR R0,[R8, #+0] \ 00000060 0E00A0E3 MOV R0,#+14 \ 00000064 B400C8E1 STRH R0,[R8, #+4] \ 00000068 B670C8E1 STRH R7,[R8, #+6] \ 0000006C 080088E2 ADD R0,R8,#+8 \ 00000070 1A0000EF SWI +26 5534 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF); \ 00000074 0000E0E3 MVN R0,#+0 \ 00000078 01002DE9 PUSH {R0} \ 0000007C 1F3085E2 ADD R3,R5,#+31 \ 00000080 082088E2 ADD R2,R8,#+8 \ 00000084 0110A0E3 MOV R1,#+1 \ 00000088 0600A0E1 MOV R0,R6 \ 0000008C ........ BL AddStringToLog 5535 AddMsgToChat(ed_struct->ed_chatgui); \ 00000090 040094E5 LDR R0,[R4, #+4] \ 00000094 ........ BL AddMsgToChat 5536 RecountMenu(t); \ 00000098 0600A0E1 MOV R0,R6 \ 0000009C ........ BL RecountMenu 5537 SUBPROC((void *)SendAnswer,0,p); \ 000000A0 ........ LDR R0,??DataTable225 ;; SendAnswer \ 000000A4 0820A0E1 MOV R2,R8 \ 000000A8 0010A0E3 MOV R1,#+0 \ 000000AC 710100EF SWI +369 \ 000000B0 04D08DE2 ADD SP,SP,#+4 5538 } 5539 GeneralFuncF1(1); \ ??SendAuthGrant_0: \ 000000B4 0100A0E3 MOV R0,#+1 \ 000000B8 3B0100EF SWI +315 5540 } \ 000000BC FF81BDE8 POP {R0-R8,PC} ;; return 5541 \ In segment CODE, align 4, keep-with-next 5542 void OpenLogfile(GUI *data) 5543 { \ OpenLogfile: \ 00000000 30402DE9 PUSH {R4,R5,LR} 5544 EDCHAT_STRUCT *ed_struct; 5545 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0050A0E1 MOV R5,R0 5546 5547 extern const char HIST_PATH[64]; 5548 #ifdef EVILFOX 5549 #else 5550 extern const int HISTORY_TYPE; 5551 #endif 5552 CLIST *t; 5553 WSHDR *ws=AllocWS(256); \ 0000000C 400FA0E3 MOV R0,#+256 \ 00000010 250100EF SWI +293 \ 00000014 0040A0E1 MOV R4,R0 5554 if ((t=ed_struct->ed_contact)) \ 00000018 000095E5 LDR R0,[R5, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1800000A BEQ ??OpenLogfile_0 5555 { 5556 #ifdef EVILFOX 5557 wsprintf(ws,"%s\\%u\\%s(%d).txt",HIST_PATH,UIN,t->name, t->uin); 5558 #else 5559 #ifdef UIN_WRITE 5560 if (HISTORY_TYPE) \ 00000024 70309FE5 LDR R3,??OpenLogfile_1 ;; HISTORY_TYPE \ 00000028 70109FE5 LDR R1,??OpenLogfile_1+0x4 ;; `?` \ 0000002C 003093E5 LDR R3,[R3, #+0] \ 00000030 6C209FE5 LDR R2,??OpenLogfile_1+0x8 ;; HIST_PATH \ 00000034 000053E3 CMP R3,#+0 \ 00000038 0C3090E5 LDR R3,[R0, #+12] \ 0000003C 08002DE9 PUSH {R3} \ 00000040 0700000A BEQ ??OpenLogfile_2 5561 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,??DataTable226 ;; UIN \ 00000050 003090E5 LDR R3,[R0, #+0] \ 00000054 0400A0E1 MOV R0,R4 \ 00000058 240100EF SWI +292 \ 0000005C 08D08DE2 ADD SP,SP,#+8 \ 00000060 040000EA B ??OpenLogfile_3 5562 else 5563 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 0400A0E1 MOV R0,R4 \ 00000070 240100EF SWI +292 \ 00000074 04D08DE2 ADD SP,SP,#+4 5564 #else 5565 if (HISTORY_TYPE) 5566 wsprintf(ws,"%s\\%u\\%u.txt",HIST_PATH,UIN, t->uin); 5567 else 5568 wsprintf(ws,"%s\\%u.txt",HIST_PATH, t->uin); 5569 #endif 5570 #endif 5571 ExecuteFile(ws,NULL,NULL); \ ??OpenLogfile_3: \ 00000078 0020A0E3 MOV R2,#+0 \ 0000007C 0010A0E3 MOV R1,#+0 \ 00000080 0400A0E1 MOV R0,R4 \ 00000084 940000EF SWI +148 5572 } 5573 FreeWS(ws); \ ??OpenLogfile_0: \ 00000088 0400A0E1 MOV R0,R4 \ 0000008C 290100EF SWI +297 5574 GeneralFuncF1(1); \ 00000090 0100A0E3 MOV R0,#+1 \ 00000094 3B0100EF SWI +315 5575 } \ 00000098 3080BDE8 POP {R4,R5,PC} ;; return \ ??OpenLogfile_1: \ 0000009C ........ DC32 HISTORY_TYPE \ 000000A0 ........ DC32 `?` \ 000000A4 ........ DC32 HIST_PATH 5576 \ In segment CODE, align 4, keep-with-next 5577 void ClearLog(GUI *data/*,void *dummy*/) 5578 { \ ClearLog: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 5579 EDITCONTROL ec; 5580 EDCHAT_STRUCT *ed_struct; 5581 WSHDR *ws; 5582 CLIST *t; 5583 5584 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 5585 5586 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 5587 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 5588 { 5589 ws=AllocWS(1); \ 00000030 0100A0E3 MOV R0,#+1 \ 00000034 250100EF SWI +293 \ 00000038 0050A0E1 MOV R5,R0 5590 CutWSTR(ws,0); \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 260100EF SWI +294 5591 5592 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 5593 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000050 040094E5 LDR R0,[R4, #+4] \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 810100EF SWI +385 5594 5595 FreeWS(ws); \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 290100EF SWI +297 5596 GeneralFuncF1(1); \ 00000064 1C0000EA B ??ClearLog_1 5597 } 5598 else 5599 { 5600 5601 if ((t=ed_struct->ed_contact)) \ ??ClearLog_0: \ 00000068 005094E5 LDR R5,[R4, #+0] \ 0000006C 000055E3 CMP R5,#+0 \ 00000070 1B00000A BEQ ??ClearLog_2 5602 { 5603 if (t->log) \ 00000074 740095E5 LDR R0,[R5, #+116] \ 00000078 0060A0E3 MOV R6,#+0 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 1200000A BEQ ??ClearLog_3 5604 { 5605 FreeLOGQ(&t->log); \ 00000084 740085E2 ADD R0,R5,#+116 \ 00000088 ........ BL FreeLOGQ 5606 t->msg_count=0; \ 0000008C 846085E5 STR R6,[R5, #+132] 5607 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 5608 { 5609 while(ed_struct->ed_answer!=2) 5610 { 5611 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??ClearLog_5: \ 000000AC 040094E5 LDR R0,[R4, #+4] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 D10100EF SWI +465 5612 ed_struct->ed_answer--; \ 000000B8 080094E5 LDR R0,[R4, #+8] \ 000000BC 010040E2 SUB R0,R0,#+1 \ 000000C0 080084E5 STR R0,[R4, #+8] 5613 } \ ??ClearLog_4: \ 000000C4 080094E5 LDR R0,[R4, #+8] \ 000000C8 020050E3 CMP R0,#+2 \ 000000CC F6FFFF1A BNE ??ClearLog_5 5614 } 5615 } 5616 t->isactive=0; //by BoBa 18.06.07 \ ??ClearLog_3: \ 000000D0 806085E5 STR R6,[R5, #+128] 5617 RecountMenu(t); \ 000000D4 0500A0E1 MOV R0,R5 \ 000000D8 ........ BL RecountMenu 5618 GeneralFuncF1(1); \ ??ClearLog_1: \ 000000DC 0100A0E3 MOV R0,#+1 \ 000000E0 3B0100EF SWI +315 5619 } 5620 } 5621 } \ ??ClearLog_2: \ 000000E4 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000E8 7080BDE8 POP {R4-R6,PC} ;; return 5622 \ In segment CODE, align 4, keep-with-next 5623 void ecmenu_ghook(void *data, int cmd) 5624 { \ ecmenu_ghook: \ 00000000 00402DE9 PUSH {LR} 5625 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 5626 { 5627 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 5628 } 5629 } \ 00000010 0080BDE8 POP {PC} ;; return 5630 \ In segment DATA_C, align 4, align-sorted 5631 static const MENUITEM_DESC ecmenu_ITEMS[EC_MNU_MAX]= \ ecmenu_ITEMS: \ 00000000 00000000.... DC32 0H, `?` \ gipc: \ 00000074 DS8 12 \ 00000080 REQUIRE `?` \ game_gipc: \ 00000080 DS8 12 \ 0000008C REQUIRE `?` \ tmr_gipc: \ 0000008C DS8 12 \ 00000098 REQUIRE `?` \ align: \ 00000098 DS8 4 \ 0000009C REQUIRE `?` \ canvasdata: \ 0000009C DS8 4 \ 000000A0 REQUIRE `?` \ paused_height: \ 000000A0 DS8 4 \ 000000A4 REQUIRE `?` \ uins: \ 000000A4 DS8 4 \ 000000A8 REQUIRE `?` \ Is_PING_On: \ 000000A8 DS8 4 \ 000000AC REQUIRE `?` \ Is_SLI_On: \ 000000AC DS8 4 \ 000000B0 REQUIRE `?` \ Is_SMARTCPU_On: \ 000000B0 DS8 4 \ 000000B4 REQUIRE `?` \ Is_INC_On: \ 000000B4 DS8 4 \ 000000B8 REQUIRE `?` \ Is_ILU_On: \ 000000B8 DS8 4 \ 000000BC REQUIRE `?` \ Is_Double_Vibra_On: \ 000000BC DS8 4 \ 000000C0 REQUIRE `?` \ total_unread: \ 000000C0 DS8 4 \ 000000C4 REQUIRE `?` \ total_unread2: \ 000000C4 DS8 4 \ 000000C8 REQUIRE `?` \ maincsm_id: \ 000000C8 DS8 4 \ 000000CC REQUIRE `?` \ maingui_id: \ 000000CC DS8 4 \ 000000D0 REQUIRE `?` \ SENDMSGCOUNT: \ 000000D0 DS8 4 \ 000000D4 REQUIRE `?` \ IsActiveUp: \ 000000D4 DS8 4 \ 000000D8 REQUIRE `?` \ Is_Id3tag_Enabled: \ 000000D8 DS8 4 \ 000000DC REQUIRE `?` \ ews: \ 000000DC DS8 4 \ 000000E0 REQUIRE `?` \ msg_away_timer: \ 000000E0 DS8 4 \ 000000E4 REQUIRE `?` \ inp_away_msg2: \ 000000E4 DS8 4 \ 000000E8 REQUIRE `?` \ away_m: \ 000000E8 DS8 4 \ 000000EC REQUIRE `?` \ status_rem: \ 000000EC DS8 4 \ 000000F0 REQUIRE `?` \ change_back_status: \ 000000F0 DS8 4 \ 000000F4 REQUIRE `?` \ CurrentPrivateStatus: \ 000000F4 DS8 4 \ 000000F8 REQUIRE `?` \ vibra_count: \ 000000F8 DS8 4 \ 000000FC REQUIRE `?` \ Is_UPTIME_On: \ 000000FC DS8 4 \ 00000100 REQUIRE `?` \ xstatus_old: \ 00000100 DS8 4 \ 00000104 REQUIRE `?` \ minimum_xstatus: \ 00000104 DS8 4 \ 00000108 REQUIRE `?` \ maximum: \ 00000108 DS8 4 \ 0000010C REQUIRE `?` \ tracktimer: \ 0000010C DS8 4 \ 00000110 REQUIRE `?` \ automsg: \ 00000110 DS8 4 \ 00000114 REQUIRE `?` \ input_awaymsg_id: \ 00000114 DS8 4 \ 00000118 REQUIRE `?` \ inp_away_m: \ 00000118 DS8 4 \ 0000011C REQUIRE `?` \ silenthide: \ 0000011C DS8 4 \ 00000120 REQUIRE `?` \ disautorecconect: \ 00000120 DS8 4 \ 00000124 REQUIRE `?` \ Is_Vibra_Enabled: \ 00000124 DS8 4 \ 00000128 REQUIRE `?` \ Is_Sounds_Enabled: \ 00000128 DS8 4 \ 0000012C REQUIRE `?` \ Is_Show_Offline: \ 0000012C DS8 4 \ 00000130 REQUIRE `?` \ Is_Show_Groups: \ 00000130 DS8 4 \ 00000134 REQUIRE `?` \ CurrentStatus: \ 00000134 DS8 4 \ 00000138 REQUIRE `?` \ templates_chars: \ 00000138 DS8 4 \ 0000013C REQUIRE `?` \ templates_lines: \ 0000013C DS8 4 \ 00000140 REQUIRE `?` \ RXstate: \ 00000140 DS8 4 \ 00000144 REQUIRE `?` \ connect_state: \ 00000144 DS8 4 \ 00000148 REQUIRE `?` \ sock: \ 00000148 DS8 4 \ 0000014C REQUIRE `?` \ TOTALRECEIVED: \ 0000014C DS8 4 \ 00000150 REQUIRE `?` \ TOTALSENDED: \ 00000150 DS8 4 \ 00000154 REQUIRE `?` \ ALLTOTALRECEIVED: \ 00000154 DS8 4 \ 00000158 REQUIRE `?` \ ALLTOTALSENDED: \ 00000158 DS8 4 \ 0000015C REQUIRE `?` \ sendq_l: \ 0000015C DS8 4 \ 00000160 REQUIRE `?` \ sendq_p: \ 00000160 DS8 4 \ 00000164 REQUIRE `?` \ is_gprs_online: \ 00000164 DS8 4 \ 00000168 REQUIRE `?` \ cltop: \ 00000168 DS8 4 \ 0000016C REQUIRE `?` \ GROUP_CACHE: \ 0000016C DS8 4 \ 00000170 REQUIRE `?` \ contactlist_menu_id: \ 00000170 DS8 4 \ 00000174 REQUIRE `?` \ edchat_id: \ 00000174 DS8 4 \ 00000178 REQUIRE `?` \ 00000178 DS8 4 \ 0000017C REQUIRE `?` \ tenseconds_to_ping: \ 0000017C DS8 4 \ 00000180 REQUIRE `?` \ kopa_online: \ 00000180 DS8 4 \ 00000184 REQUIRE `?` \ kopa_kontaktu: \ 00000184 DS8 4 \ 00000188 REQUIRE `?` \ main_d: \ 00000188 DS8 4 \ 0000018C REQUIRE `?` \ DNR_ID: \ 0000018C DS8 4 \ 00000190 REQUIRE `?` \ DNR_TRIES: \ 00000190 DS8 4 \ 00000194 REQUIRE `?` \ host_counter: \ 00000194 DS8 4 \ 00000198 REQUIRE `?` \ NEW_MSG: \ 00000198 DS8 4 \ 0000019C REQUIRE `?` \ time_to_stop_t9: \ 0000019C DS8 4 \ 000001A0 REQUIRE `?` \ comanda: \ 000001A0 DS8 4 \ 000001A4 REQUIRE `?` \ autobot: \ 000001A4 DS8 4 \ 000001A8 REQUIRE `?` \ INC_show: \ 000001A8 DS8 4 \ 000001AC REQUIRE `?` \ font: \ 000001AC DS8 4 \ 000001B0 REQUIRE `?` \ old_ed_redraw: \ 000001B0 DS8 4 \ 000001B4 REQUIRE `?` \ 000001B4 DS8 64 \ 000001F4 REQUIRE `?` \ elf_path: \ 000001F4 DS8 256 \ 000002F4 REQUIRE `?` \ ContactT9Key: \ 000002F4 DS8 32 \ 00000314 REQUIRE `?` \ talk_sound: \ 00000314 DS8 128 \ 00000394 REQUIRE `?` \ unread_msg_info: \ 00000394 DS8 64 \ 000003D4 REQUIRE `?` \ last_msg_buffer: \ 000003D4 DS8 4048 \ 000013A4 REQUIRE `?` \ mytmr3: \ 000013A4 DS8 16 \ 000013B4 REQUIRE `?` \ PINGO: \ 000013B4 DS8 256 \ 000014B4 REQUIRE `?` \ away_msg: \ 000014B4 DS8 264 \ 000015BC REQUIRE `?` \ away_msg_time: \ 000015BC DS8 64 \ 000015FC REQUIRE `?` \ away_msg_time_dace: \ 000015FC DS8 16 \ 0000160C REQUIRE `?` \ tim_zone: \ 0000160C DS8 16 \ 0000161C REQUIRE `?` \ away_tmr: \ 0000161C DS8 16 \ 0000162C REQUIRE `?` \ mytmr: \ 0000162C DS8 16 \ 0000163C REQUIRE `?` \ mytmr2: \ 0000163C DS8 16 \ 0000164C REQUIRE `?` \ mytmr4: \ 0000164C DS8 16 \ 0000165C REQUIRE `?` \ tracktmr: \ 0000165C DS8 16 \ 0000166C REQUIRE `?` \ hah: \ 0000166C DS8 128 \ 000016EC REQUIRE `?` \ logmsg: \ 000016EC DS8 256 \ 000017EC REQUIRE `?` \ tmr_illumination: \ 000017EC DS8 16 \ 000017FC REQUIRE `?` \ tmr_vibra: \ 000017FC DS8 16 \ 0000180C REQUIRE `?` \ reconnect_tmr: \ 0000180C DS8 16 \ 0000181C REQUIRE `?` \ tmr_active: \ 0000181C DS8 16 \ 0000182C REQUIRE `?` \ clm_hdr_text: \ 0000182C DS8 48 \ 0000185C REQUIRE `?` \ clmenu_sk_r: \ 0000185C DS8 16 \ 0000186C REQUIRE `?` \ hostbuf2: \ 0000186C DS8 128 \ 000018EC REQUIRE `?` \ I_UIN: \ 000018EC DS8 12 \ 000018F8 REQUIRE `?` \ a_txt: \ 000018F8 DS8 48 \ 00001928 REQUIRE `?` \ s_txt: \ 00001928 DS8 48 \ 00001958 REQUIRE `?` \ d_txt: \ 00001958 DS8 48 \ 00001988 REQUIRE `?` \ f_txt: \ 00001988 DS8 48 \ 000019B8 REQUIRE `?` \ g_txt: \ 000019B8 DS8 48 \ 000019E8 REQUIRE `?` \ develop: \ 000019E8 DS8 16 \ 000019F8 REQUIRE `?` \ requests1: \ 000019F8 DS8 24 \ 00001A10 REQUIRE `?` \ requests2: \ 00001A10 DS8 20 \ 00001A24 REQUIRE `?` \ requests3: \ 00001A24 DS8 24 \ 00001A3C REQUIRE `?` \ requests4: \ 00001A3C DS8 20 \ 00001A50 REQUIRE `?` \ requests6: \ 00001A50 DS8 24 \ 00001A68 REQUIRE `?` \ mod_info: \ 00001A68 DS8 268 \ 00001B74 REQUIRE `?` \ show_nick: \ 00001B74 DS8 32 \ 00001B94 REQUIRE `?` 5645 { 5646 Quote, 5647 AddSmile, 5648 GetShortInfo, 5649 AddCurContact, 5650 SendAuthReq, 5651 SendAuthGrant, 5652 OpenLogfile, 5653 ClearLog, 5654 }; 5655 5656 char ecm_contactname[64]; \ ecm_contactname: \ 00001B94 DS8 64 \ 00001BD4 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 `?` 5657 \ In segment DATA_C, align 4, align-sorted 5658 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 5659 5660 static const MENU_DESC ecmenu_STRUCT= 5661 { 5662 8,NULL,ecmenu_ghook,NULL, 5663 menusoftkeys, 5664 &menu_skt, 5665 0, 5666 NULL, 5667 ecmenu_ITEMS, 5668 ecmenu_HNDLS, 5669 EC_MNU_MAX 5670 }; 5671 \ In segment CODE, align 4, keep-with-next 5672 void ec_menu(EDCHAT_STRUCT *ed_struct) 5673 { \ ec_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 24D04DE2 SUB SP,SP,#+36 \ 00000008 0040A0E1 MOV R4,R0 5674 CLIST *t; 5675 int to_remove[EC_MNU_MAX+1]; 5676 int remove=0; 5677 if ((t=ed_struct->ed_contact)) \ 0000000C 001094E5 LDR R1,[R4, #+0] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 4500000A BEQ ??ec_menu_0 5678 { 5679 if (t->name) \ 00000018 ........ LDR R5,??DataTable227 ;; S_ICONS \ 0000001C 9400A0E3 MOV R0,#+148 \ 00000020 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000024 050080E0 ADD R0,R0,R5 \ 00000028 142091E2 ADDS R2,R1,#+20 \ 0000002C 0300000A BEQ ??ec_menu_1 5680 { 5681 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 5682 } 5683 else 5684 { 5685 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 5686 } 5687 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 5688 { 5689 to_remove[++remove]=0; \ 00000064 04108D05 STREQ R1,[SP, #+4] 5690 } 5691 else 5692 { 5693 to_remove[++remove]=1; \ 00000068 0120A013 MOVNE R2,#+1 \ 0000006C 04208D15 STRNE R2,[SP, #+4] 5694 } 5695 5696 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] 5697 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 440195E5 LDR R0,[R5, #+324] \ 00000094 030050E3 CMP R0,#+3 \ 00000098 0D00000A BEQ ??ec_menu_5 5698 { 5699 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] 5700 to_remove[++remove]=3; \ 000000AC 010080E2 ADD R0,R0,#+1 \ 000000B0 0330A0E3 MOV R3,#+3 \ 000000B4 003182E7 STR R3,[R2, +R0, LSL #+2] 5701 to_remove[++remove]=4; \ 000000B8 010080E2 ADD R0,R0,#+1 \ 000000BC 0430A0E3 MOV R3,#+4 \ 000000C0 003182E7 STR R3,[R2, +R0, LSL #+2] 5702 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] 5703 } 5704 5705 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] 5706 to_remove[0]=remove; \ 000000FC 00608DE5 STR R6,[SP, #+0] 5707 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 5708 } 5709 } \ ??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 5710 5711 \ In segment CODE, align 4, keep-with-next 5712 void AskNickAndAddContact(EDCHAT_STRUCT *ed_struct) 5713 { 5714 CreateAddContactGrpDialog(ed_struct->ed_contact); \ AskNickAndAddContact: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 ........ _BF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA ;; tailcall 5715 } 5716 \ In segment CODE, align 4, keep-with-next 5717 void AddSmile(GUI *data) 5718 { \ AddSmile: \ 00000000 00402DE9 PUSH {LR} 5719 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 5720 CreateSmileSelectGUI(ed_struct); \ 00000008 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 5721 GeneralFuncF1(1); \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0100EF SWI +315 5722 } \ 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 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable20: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable22: \ 00000000 ........ DC32 away_msg2 \ In segment CODE, align 4, keep-with-next \ ??DataTable26: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable31: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable32: \ 00000000 ........ DC32 def_setting \ In segment CODE, align 4, keep-with-next \ ??DataTable33: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable34: \ 00000000 ........ DC32 CurrentXStatus \ In segment CODE, align 4, keep-with-next \ ??DataTable40: \ 00000000 ........ DC32 vibraPower \ In segment CODE, align 4, keep-with-next \ ??DataTable43: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable49: \ 00000000 ........ DC32 TIME_OR_MSG \ In segment CODE, align 4, keep-with-next \ ??DataTable53: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable54: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable56: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable58: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable59: \ 00000000 ........ DC32 DEVELOP_IF \ In segment CODE, align 4, keep-with-next \ ??DataTable60: \ 00000000 ........ DC32 successed_config_filename \ In segment CODE, align 4, keep-with-next \ ??DataTable61: \ 00000000 ........ DC32 S_ICONS + 360 \ In segment CODE, align 4, keep-with-next \ ??DataTable62: \ 00000000 ........ DC32 `?`: \ 00000000 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000010 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000020 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000030 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000040 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000050 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000060 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000000000 \ 0000 \ `?`: \ 00000074 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00000080 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 0000008C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00000098 00000000 DC32 0 \ `?`: \ 0000009C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000A4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000A8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000AC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000D4 00000000 DC32 0 \ `?`: \ 000000D8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000DC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000E0 00000000 DC32 0 \ `?`: \ 000000E4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000E8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000EC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000FC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000100 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000104 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000108 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000010C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000110 00000000 DC32 0 \ `?`: \ 00000114 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000118 00000000 DC32 0 \ `?`: \ 0000011C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000120 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000124 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000128 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000012C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000130 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000134 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000138 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000013C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000140 F6FFFFFF DC32 -10 \ `?`: \ 00000144 00000000 DC32 0 \ `?`: \ 00000148 FFFFFFFF DC32 -1 \ `?`: \ 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 DC32 0 \ `?`: \ 00000160 00000000 DC32 0H \ `?`: \ 00000164 01000000 DC32 1 \ `?`: \ 00000168 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000016C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000170 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000174 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000178 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000017C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000180 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000184 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000188 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000018C 00000000 DC32 0 \ `?`: \ 00000190 03000000 DC32 3 \ `?`: \ 00000194 00000000 DC32 0 \ `?`: \ 00000198 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000019C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001A4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001A8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001AC 09000000 DC32 9 \ `?`: \ 000001B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000001F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000204 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000214 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000224 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000234 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000244 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000254 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000264 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000274 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000284 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000294 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000002F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000304 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000314 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000324 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000334 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000344 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000354 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000364 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000374 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000384 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000394 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000003D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000404 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000414 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000424 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000434 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000444 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000454 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000464 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000474 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000484 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000494 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000504 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000514 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000524 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000534 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000544 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000554 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000564 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000574 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000584 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000594 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000604 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000614 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000624 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000634 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000644 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000654 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000664 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000674 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000684 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000694 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000704 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000714 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000724 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000734 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000744 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000754 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000764 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000774 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000784 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000794 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000804 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000814 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000824 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000834 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000844 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000854 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000864 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000874 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000884 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000894 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000904 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000914 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000924 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000934 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000944 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000954 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000964 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000974 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000984 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000994 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ED4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001004 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001014 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001024 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001034 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001044 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001054 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001064 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001074 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001084 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001094 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001104 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001114 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001124 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001134 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001144 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001154 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001164 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001174 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001184 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001194 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001204 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001214 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001224 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001234 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001244 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001254 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001264 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001274 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001284 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001294 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001304 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001314 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001324 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001334 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001344 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001354 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001364 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001374 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001384 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001394 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000013A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000013B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001404 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001414 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001424 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001434 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001444 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001454 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001464 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001474 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001484 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001494 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000014B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001504 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001514 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001524 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001534 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001544 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001554 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001564 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001574 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001584 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001594 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 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, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000160C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000161C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000162C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000163C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000164C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000165C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000166C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000167C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000168C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000169C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000016EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000170C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000171C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000172C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000173C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000174C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000175C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000176C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000177C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000178C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000179C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000017EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000017FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000180C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000181C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000182C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000183C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000184C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000185C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000186C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000187C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000188C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000189C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000018F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001908 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001918 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001928 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001938 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001948 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001958 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001968 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001978 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001988 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001998 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000019B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000019E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000019F8 53656E64696E DC8 "Sending online time..." \ 67206F6E6C69 \ 6E652074696D \ 652E2E2E00 \ 00001A0F 00 DC8 0 \ `?`: \ 00001A10 53656E64696E DC8 "Sending msg info..." \ 67206D736720 \ 696E666F2E2E \ 2E00 \ `?`: \ 00001A24 53656E64696E DC8 "Sending battery info..." \ 672062617474 \ 65727920696E \ 666F2E2E2E00 \ `?`: \ 00001A3C 53656E64696E DC8 "Sending mod info..." \ 67206D6F6420 \ 696E666F2E2E \ 2E00 \ `?`: \ 00001A50 53656E64696E DC8 "Sending offline info..." \ 67206F66666C \ 696E6520696E \ 666F2E2E2E00 \ `?`: \ 00001A68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00001B74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001B94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BC4 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 253032643A25 DC8 "%02d:%02d" \ 30326400 \ 0000000A 0000 DC8 0, 0 \ 0000000C 28EEF2F1F3F2 DC8 "(\356\362\361\363\362\361\362\342\363\376 \357\360\350\354\345\360\355\356 \361 %02d:%02d (%s) )" \ F1F2E2F3FE20 \ EFF0E8ECE5F0 \ EDEE20F12025 \ 3032643A2530 \ 326420282573 \ 29202900 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 474D54202D31 DC8 "GMT -12:00" \ 323A303000 \ 0000000B 00 DC8 0 \ 0000000C 474D54202D31 DC8 "GMT -11:00" \ 313A303000 \ 00000017 00 DC8 0 \ 00000018 474D54202D31 DC8 "GMT -10:00" \ 303A303000 \ 00000023 00 DC8 0 \ 00000024 474D54202D30 DC8 "GMT -09:00" \ 393A303000 \ 0000002F 00 DC8 0 \ 00000030 474D54202D30 DC8 "GMT -08:00" \ 383A303000 \ 0000003B 00 DC8 0 \ 0000003C 474D54202D30 DC8 "GMT -07:00" \ 373A303000 \ 00000047 00 DC8 0 \ 00000048 474D54202D30 DC8 "GMT -06:00" \ 363A303000 \ 00000053 00 DC8 0 \ 00000054 474D54202D30 DC8 "GMT -05:00" \ 353A303000 \ 0000005F 00 DC8 0 \ 00000060 474D54202D30 DC8 "GMT -04:00" \ 343A303000 \ 0000006B 00 DC8 0 \ 0000006C 474D54202D30 DC8 "GMT -03:30" \ 333A333000 \ 00000077 00 DC8 0 \ 00000078 474D54202D30 DC8 "GMT -03:00" \ 333A303000 \ 00000083 00 DC8 0 \ 00000084 474D54202D30 DC8 "GMT -02:00" \ 323A303000 \ 0000008F 00 DC8 0 \ 00000090 474D54202D30 DC8 "GMT -01:00" \ 313A303000 \ 0000009B 00 DC8 0 \ 0000009C 474D54203030 DC8 "GMT 00:00" \ 3A303000 \ 000000A6 0000 DC8 0, 0 \ 000000A8 474D54202B30 DC8 "GMT +01:00" \ 313A303000 \ 000000B3 00 DC8 0 \ 000000B4 474D54202B30 DC8 "GMT +02:00" \ 323A303000 \ 000000BF 00 DC8 0 \ 000000C0 474D54202B30 DC8 "GMT +03:00" \ 333A303000 \ 000000CB 00 DC8 0 \ 000000CC 474D54202B30 DC8 "GMT +03:30" \ 333A333000 \ 000000D7 00 DC8 0 \ 000000D8 474D54202B30 DC8 "GMT +04:00" \ 343A303000 \ 000000E3 00 DC8 0 \ 000000E4 474D54202B30 DC8 "GMT +04:30" \ 343A333000 \ 000000EF 00 DC8 0 \ 000000F0 474D54202B30 DC8 "GMT +05:00" \ 353A303000 \ 000000FB 00 DC8 0 \ 000000FC 474D54202B30 DC8 "GMT +05:30" \ 353A333000 \ 00000107 00 DC8 0 \ 00000108 474D54202B30 DC8 "GMT +05:45" \ 353A343500 \ 00000113 00 DC8 0 \ 00000114 474D54202B30 DC8 "GMT +06:00" \ 363A303000 \ 0000011F 00 DC8 0 \ 00000120 474D54202B30 DC8 "GMT +06:30" \ 363A333000 \ 0000012B 00 DC8 0 \ 0000012C 474D54202B30 DC8 "GMT +08:00" \ 383A303000 \ 00000137 00 DC8 0 \ 00000138 474D54202B30 DC8 "GMT +09:00" \ 393A303000 \ 00000143 00 DC8 0 \ 00000144 474D54202B30 DC8 "GMT +09:30" \ 393A333000 \ 0000014F 00 DC8 0 \ 00000150 474D54202B31 DC8 "GMT +10:00" \ 303A303000 \ 0000015B 00 DC8 0 \ 0000015C 474D54202B31 DC8 "GMT +11:00" \ 313A303000 \ 00000167 00 DC8 0 \ 00000168 474D54202B31 DC8 "GMT +12:00" \ 323A303000 \ 00000173 00 DC8 0 \ 00000174 474D54202B31 DC8 "GMT +13:00" \ 333A303000 \ 0000017F 00 DC8 0 \ 00000180 474D54202B30 DC8 "GMT +07:00" \ 373A303000 \ 0000018B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F6E6C696E65 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 57616974696E DC8 "Waiting for GPRS up..." \ 6720666F7220 \ 475052532075 \ 702E2E2E00 \ 00000017 00 DC8 0 \ 00000018 436F6E6E6563 DC8 "Connect to %s:%d" \ 7420746F2025 \ 733A256400 \ 00000029 000000 DC8 0, 0, 0 \ 0000002C 0A436F6E6E65 DC8 "\012Connect by IP!" \ 637420627920 \ 49502100 \ 0000003C 53656E642044 DC8 "Send DNR..." \ 4E522E2E2E00 \ 00000048 444E52204552 DC8 "DNR ERROR %d!" \ 524F52202564 \ 2100 \ 00000056 0000 DC8 0, 0 \ 00000058 444E52204F6B DC8 "DNR Ok, connecting..." \ 2C20636F6E6E \ 656374696E67 \ 2E2E2E00 \ 0000006E 0000 DC8 0, 0 \ 00000070 CDE5E2EEE7EC DC8 "\315\345\342\356\347\354\356\346\355\356 \357\356\344\352\353\376\367\350\362\374\361\377!" \ EEE6EDEE20EF \ EEE4EAEBFEF7 \ E8F2FCF1FF21 \ 00 \ 00000089 000000 DC8 0, 0, 0 \ 0000008C CDE5E2EEE7EC DC8 "\315\345\342\356\347\354\356\346\355\356 \361\356\347\344\340\362\374 \361\356\352\345\362, \357\345\360\345\347\340\357\363\361\352 GPRS!" \ EEE6EDEE20F1 \ EEE7E4E0F2FC \ 20F1EEEAE5F2 \ 2C20EFE5F0E5 \ E7E0EFF3F1EA \ 204750525321 \ 00 \ 000000B7 00 DC8 0 \ 000000B8 D1E5F0E2E5F0 DC8 "\321\345\360\342\345\360 \355\345 \355\340\351\344\345\355!" \ 20EDE520EDE0 \ E9E4E5ED2100 \ 000000CA 0000 DC8 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 0A00 DC8 "\012" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 73656E642072 DC8 "send res %d" \ 657320256400 \ 0000000C 53656E642064 DC8 "Send delayed..." \ 656C61796564 \ 2E2E2E00 \ 0000001C 53656E642065 DC8 "Send error!" \ 72726F722100 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5369655F2530 DC8 "Sie_%04d" \ 346400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 257300 DC8 "%s" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25733A202573 DC8 "%s: %s" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 253032643A25 DC8 "%02d:%02d %02d-%02d %s:\015\012" \ 303264202530 \ 32642D253032 \ 642025733A0D \ 0A00 \ 0000001A 0000 DC8 0, 0 \ 0000001C 253032643A25 DC8 "%02d:%02d %02d-%02d %s:" \ 303264202530 \ 32642D253032 \ 642025733A00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4175746F626F DC8 "Autobot Off" \ 74204F666600 \ 0000000C 4175746F626F DC8 "Autobot On" \ 74204F6E00 \ 00000017 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ 00000000 F3E3F300 DC8 "\363\343\363" \ In segment DATA_C, align 1, align-sorted \ 00000000 3A0A00 DC8 ":\012" \ 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 CCE5EDFE00 DC8 "\314\345\355\376" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25735C25755C DC8 "%s\\%u\\%s(%d).txt" \ 257328256429 \ 2E74787400 \ 00000011 000000 DC8 0, 0, 0 \ 00000014 25735C257328 DC8 "%s\\%s(%d).txt" \ 2564292E7478 \ 7400 \ 00000022 0000 DC8 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 257500 DC8 "%u" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F66666C696E DC8 "offline.png" \ 652E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 696E76697369 DC8 "invisible.png" \ 626C652E706E \ 6700 \ 0000000E 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 617761792E70 DC8 "away.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6E612E706E67 DC8 "na.png" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F6363757069 DC8 "occupied.png" \ 65642E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 646E642E706E DC8 "dnd.png" \ 6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 646570726573 DC8 "depression.png" \ 73696F6E2E70 \ 6E6700 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6576696C2E70 DC8 "evil.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 686F6D652E70 DC8 "home.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6C756E63682E DC8 "lunch.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 776F726B2E70 DC8 "work.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F6E6C696E65 DC8 "online.png" \ 2E706E6700 \ 0000000B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6666632E706E DC8 "ffc.png" \ 6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6D6573736167 DC8 "message.png" \ 652E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 756E6B6E6F77 DC8 "unknown.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupon.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupoff.png" \ 66662E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 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 73657474696E DC8 "settings.png" \ 67732E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973312E70 DC8 "vis1.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973322E70 DC8 "vis2.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973332E70 DC8 "vis3.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973342E70 DC8 "vis4.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973352E70 DC8 "vis5.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 496E70757420 DC8 "Input away msg" \ 61776179206D \ 736700 \ 0000000F 00 DC8 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 CEEFF6E8E800 DC8 "\316\357\366\350\350" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7E0EAF0FBF2 DC8 "\307\340\352\360\373\362\374" \ FC00 \ In segment DATA_C, align 4, align-sorted \ `? 7124 ? 8 ? 24 ? 8 ? 52 ? 396 ? 32 ? 16 ? 3 ? 16 ? 204 ? 2 ? 40 ? 12 ? 3 ? 8 ? 52 ? 24 ? 4 ? 3 ? 12 ? 8 ? 36 ? 3 ? 12 ? 16 ? 12 ? 8 ? 16 ? 8 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 8 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 16 ? 4 ? 8 ? 8 ? 8 ?