############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 14/Dec/2008 11:37:30 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\main.c # # Command line = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\main.c -D # # NEWSGOLD -D ELKA -D kluchnik -D BCFGGEN # # --preprocess D:\Pasha\elf\_MY_PROJECT_\naticq_mod\kl # # uchnik\List\ -lC D:\Pasha\elf\_MY_PROJECT_\naticq_mo # # d\kluchnik\List\ -o D:\Pasha\elf\_MY_PROJECT_\naticq # # _mod\kluchnik\Obj\ -s9 --no_unroll --cpu_mode arm # # --endian little --cpu ARM926EJ-S --stack_align 4 # # --interwork -e --fpu None --dlib_config # # "D:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\LIB\dl5tpainl8n.h" -I # # "D:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\INC\" --inline_threshold=2 # # List file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\kluchnik\List\m # # ain.lst # # Object file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\kluchnik\Obj\ma # # in.r79 # # # # # ############################################################################## D:\Pasha\elf\_MY_PROJECT_\naticq_mod\main.c 1 #include "../inc/swilib.h" 2 #include "../inc/cfg_items.h" 3 #include "../inc/pnglist.h" 4 #include "configs.h" 5 #include "NatICQ.h" 6 #include "history.h" 7 #include "conf_loader.h" 8 #include "mainmenu.h" 9 #include "main.h" 10 #include "language.h" 11 #include "../inc/xtask_ipc.h" 12 #include "smiles.h" 13 #include "naticq_ipc.h" 14 #include "status_change.h" 15 #include "strings.h" 16 #include "manage_cl.h" 17 #include "cl_work.h" 18 #include "select_smile.h" 19 #include "revision.h" 20 #include "print.h" 21 #ifdef NEWSGOLD 22 #include "screen_save.h" 23 #include "player_tags.h" 24 #endif 25 #include "swilib2.h" 26 #include "rect_patcher.h" \ In segment CODE, align 4, keep-with-next \ __??Code32?? __code __interwork __atpcs void patch_header(HEADER_DESC const *) \ patch_header: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0000A0E3 MOV R0,#+0 \ 0000000C B000C4E1 STRH R0,[R4, #+0] \ 00000010 1800A0E3 MOV R0,#+24 \ 00000014 B200C4E1 STRH R0,[R4, #+2] \ 00000018 888100EF SWI +33160 \ 0000001C 010040E2 SUB R0,R0,#+1 \ 00000020 B400C4E1 STRH R0,[R4, #+4] \ 00000024 8A8100EF SWI +33162 \ 00000028 170080E2 ADD R0,R0,#+23 \ 0000002C B600C4E1 STRH R0,[R4, #+6] \ 00000030 1080BDE8 POP {R4,PC} ;; return 27 #include "addon.h" 28 29 extern int *XStatusesIconArray; 30 31 #ifndef NEWSGOLD 32 #define SEND_TIMER 33 #endif 34 35 #define IN_TICKS(sec) (sec * TMR_SECOND) 36 37 38 //------------- ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ -------------// 39 40 int main_d; 41 int align=0; 42 //int space=1; 43 void *canvasdata; 44 int paused_height; 45 WSHDR *wsBuffer;//мультибуффер 46 47 char talk_sound[128]; 48 int uins; 49 //char m_1[]="unofficial! private use only"; 50 //char m_2[]="mod by (c)Evilfox 315384924"; 51 char unread_msg_info[64]; 52 53 int saver_on; 54 55 #ifdef NEWSGOLD 56 extern char teast2[256]; 57 #endif 58 59 //#ifdef ELKA 60 char last_msg_buffer[4096]; 61 //#endif 62 63 //-------------------------------------------------// 64 65 66 67 //-------------------- AUTOPING -------------------// 68 69 GBSTMR ping_tmr; 70 static void PingToServer2(void) 71 { 72 TPKT *p; 73 p=malloc(sizeof(PKT)+sizeof(TTime)); 74 GetDateTime(NULL,(TTime *)p->data); 75 p->pkt.uin=0; 76 p->pkt.type=T_ECHO; 77 p->pkt.data_len=sizeof(TTime); 78 SUBPROC((void *)SendAnswer,0,p); 79 } 80 81 int Is_PING_On; 82 \ In segment CODE, align 4, keep-with-next 83 void Pinger2() 84 { 85 if(Is_PING_On) \ Pinger2: \ 00000000 ........ LDR R0,??DataTable31 ;; S_ICONS \ 00000004 70402DE9 PUSH {R4-R6,LR} \ 00000008 ........ LDR R5,??DataTable1 ;; Pinger2 \ 0000000C 3010A0E3 MOV R1,#+48 \ 00000010 581D81E3 ORR R1,R1,#0x1600 \ 00000014 004081E0 ADD R4,R1,R0 \ 00000018 740290E5 LDR R0,[R0, #+628] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1500000A BEQ ??Pinger2_0 86 { 87 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 88 GBS_StartTimerProc(&ping_tmr, 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} 89 } 90 else 91 GBS_StartTimerProc(&ping_tmr, 2160, Pinger2); \ ??Pinger2_0: \ 0000007C 0520A0E1 MOV R2,R5 \ 00000080 871EA0E3 MOV R1,#+2160 \ 00000084 0400A0E1 MOV R0,R4 \ 00000088 4D0000EF SWI +77 92 } \ 0000008C 7080BDE8 POP {R4-R6,PC} ;; return 93 94 //-------------------------------------------------// 95 96 97 98 extern volatile int total_smiles; 99 extern volatile int total_xstatuses; 100 extern volatile int xstatuses_load; 101 extern volatile int pictures_max; //2026rev 102 extern volatile int pictures_loaded; //2026rev 103 104 #ifdef ELKA 105 int Is_SLI_On;//мигаем светодиодом 106 #endif 107 108 int Is_SMARTCPU_On;//Вывод сообщений на гэ 109 int Is_INC_On;//Popup message 110 int Is_ILU_On;//Режим подсветки 111 int Is_Double_Vibra_On;//Режим напоминания 112 int total_unread; 113 int total_unread2; 114 115 #ifdef ELKA \ In segment DATA_C, align 4, align-sorted 116 const int SLI_TYPE=1; \ SLI_TYPE: \ 00000000 01000000 DC32 1 117 #endif 118 119 char PINGO[256]; 120 121 #ifdef ELKA 122 extern const unsigned int SLI_time; 123 extern const unsigned int SLI_time2; 124 #endif 125 #define USE_MLMENU 126 127 #define TMR_SECOND 216 128 129 //IPC 130 const char ipc_my_name[32]=IPC_NATICQ_NAME; 131 const char ipc_xtask_name[]=IPC_XTASK_NAME; 132 const char ipc_test_name[]="test"; 133 IPC_REQ gipc; 134 135 136 char elf_path[256]; 137 int maincsm_id; 138 int maingui_id; 139 \ In segment CODE, align 4, keep-with-next 140 void SMART_REDRAW(void) 141 { \ SMART_REDRAW: \ 00000000 10402DE9 PUSH {R4,LR} 142 int f; 143 LockSched(); \ 00000004 460100EF SWI +326 144 f=IsGuiOnTop(maingui_id); \ 00000008 1C009FE5 LDR R0,??SMART_REDRAW_0 ;; S_ICONS + 660 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 350100EF SWI +309 \ 00000014 0040A0E1 MOV R4,R0 145 UnlockSched(); \ 00000018 470100EF SWI +327 146 if (f) REDRAW(); \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} \ 00000024 720100EF SWI +370 147 } \ 00000028 1080BDE8 POP {R4,PC} ;; return \ ??SMART_REDRAW_0: \ 0000002C ........ DC32 S_ICONS + 660 148 149 //По 10 секунд 150 #define ACTIVE_TIME 360 151 152 //Максимальное количество сообщений в логе 153 #define MAXLOGMSG (20) 154 155 // Строковые описания статусов 156 157 const char S_OFFLINE[]="Offline"; 158 const char S_INVISIBLE[]="Invisible"; 159 const char S_AWAY[]="Away"; 160 const char S_NA[]="N/A"; 161 const char S_OCCUPIED[]="Occupied"; 162 const char S_DND[]="DND"; 163 const char S_ONLINE[]="Online"; 164 const char S_FFC[]="FFC"; 165 166 volatile int SENDMSGCOUNT; 167 #ifdef kluchnik 168 int IsActiveUp=1; 169 #else 170 int IsActiveUp=0; 171 #endif 172 int Is_Vibra_Enabled; 173 int Is_Id3tag_Enabled; 174 unsigned int Is_Sounds_Enabled; 175 int Is_Show_Offline; 176 int Is_Show_Groups; 177 178 int S_ICONS[TOTAL_ICONS+1]; 179 180 #define EOP -10 181 int CurrentStatus; 182 int CurrentXStatus; 183 184 WSHDR *ews; 185 186 static const char * const icons_names[TOTAL_ICONS]= 187 { 188 "offline.png", 189 "invisible.png", 190 "away.png", 191 "na.png", 192 "occupied.png", 193 "dnd.png", 194 "depression.png", 195 "evil.png", 196 "home.png", 197 "lunch.png", 198 "work.png", 199 "online.png", 200 "ffc.png", 201 "message.png", 202 "unknown.png", 203 "groupon.png", 204 "groupoff.png", 205 "null.png", 206 "addcont.png", 207 "head.png", 208 "logo.png", 209 "ping.png", 210 "settings.png", 211 "vis1.png", 212 "vis2.png", 213 "vis3.png", 214 "vis4.png", 215 "vis5.png" 216 }; 217 218 219 220 221 //------------------------ SCREEN SAVER TIMER ---------------------------// 222 223 #ifdef NEWSGOLD 224 GBSTMR scrsTmr; 225 int scrsTime; \ In segment CODE, align 4, keep-with-next 226 void ScreenSaverTimer() 227 { 228 if(scrsTime==screenSaverTime) \ ScreenSaverTimer: \ 00000000 68009FE5 LDR R0,??ScreenSaverTimer_0 ;; screenSaverTime \ 00000004 70402DE9 PUSH {R4-R6,LR} \ 00000008 ........ LDR R4,??DataTable31 ;; S_ICONS \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 B41294E5 LDR R1,[R4, #+692] \ 00000014 58609FE5 LDR R6,??ScreenSaverTimer_0+0x4 ;; ScreenSaverTimer \ 00000018 5D5D84E2 ADD R5,R4,#+5952 \ 0000001C 000051E1 CMP R1,R0 \ 00000020 0600001A BNE ??ScreenSaverTimer_1 229 { 230 scrsTime=screenSaverTime;//на всякий случай \ 00000024 B40284E5 STR R0,[R4, #+692] 231 CloseScreensaver(); \ 00000028 9C0000EF SWI +156 232 DrawScreenSaver(); \ 0000002C 200000EF SWI +32 233 GBS_StartTimerProc(&scrsTmr, 216*10, ScreenSaverTimer); \ 00000030 0620A0E1 MOV R2,R6 \ 00000034 871EA0E3 MOV R1,#+2160 \ 00000038 0500A0E1 MOV R0,R5 \ 0000003C 4D0000EF SWI +77 234 } 235 if(isScreenSaverEna) \ ??ScreenSaverTimer_1: \ 00000040 30009FE5 LDR R0,??ScreenSaverTimer_0+0x8 ;; isScreenSaverEna 236 scrsTime++; 237 GBS_StartTimerProc(&scrsTmr, 216*5, ScreenSaverTimer); \ 00000044 0620A0E1 MOV R2,R6 \ 00000048 000090E5 LDR R0,[R0, #+0] \ 0000004C 3810A0E3 MOV R1,#+56 \ 00000050 000050E3 CMP R0,#+0 \ 00000054 B4029415 LDRNE R0,[R4, #+692] \ 00000058 401E81E3 ORR R1,R1,#0x400 \ 0000005C 01008012 ADDNE R0,R0,#+1 \ 00000060 B4028415 STRNE R0,[R4, #+692] \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 4D0000EF SWI +77 238 } \ 0000006C 7080BDE8 POP {R4-R6,PC} ;; return \ ??ScreenSaverTimer_0: \ 00000070 ........ DC32 screenSaverTime \ 00000074 ........ DC32 ScreenSaverTimer \ 00000078 ........ DC32 isScreenSaverEna 239 #endif 240 241 242 //-----------------------------------------------------------------------// 243 244 245 int msg_away_timer=0;//Счетчик для автостатуса 246 char away_msg[264];//Само сообщение для ответа 247 char away_msg_time[64];//Время когда сработал таймер 248 char away_msg_time_dace[16];//время отсутвтвия для вывода на идле 249 //char *inp_away_msg2;//Текст сообщения,если будем писать сами(на долгую 6 или VOL_DOWN_BUTTON),а не брать из конфига 250 char tim_zone[16]; \ In segment DATA_Z, align 4, align-sorted 251 int timeh; \ timeh: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 252 int timemin; \ timemin: \ 00000000 DS8 4 253 int away_m;//состояние автоответчика 254 int status_rem;//Для сохранения текущего статуса 255 int change_back_status;//вернуть предыдущий статус или нет 256 GBSTMR away_tmr; 257 258 259 int Show_XTX;//Показывать хстатус или время он лайн \ In segment CODE, align 4, keep-with-next 260 void FreeXText2(CLIST *t) 261 { \ FreeXText2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 262 if (t->xtext2) { mfree(t->xtext2); t->xtext2=NULL; } \ 00000008 B40094E5 LDR R0,[R4, #+180] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} \ 00000014 150000EF SWI +21 \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C B40084E5 STR R0,[R4, #+180] 263 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 264 \ In segment CODE, align 4, keep-with-next 265 void away_timer()//Таймер автостатуса 266 { \ away_timer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 267 if(msg_away_timer==(AUTO_ENGADE*12)) \ 00000004 ........ LDR R4,??DataTable9 ;; addIconBar \ 00000008 ........ LDR R10,??DataTable28 ;; AUTO_ENGADE \ 0000000C ........ LDR R5,??DataTable31 ;; S_ICONS \ 00000010 74919FE5 LDR R9,??away_timer_0 ;; `?` \ 00000014 0CD04DE2 SUB SP,SP,#+12 \ 00000018 00109AE5 LDR R1,[R10, #+0] \ 0000001C 5800A0E3 MOV R0,#+88 \ 00000020 600D80E3 ORR R0,R0,#0x1800 \ 00000024 056080E0 ADD R6,R0,R5 \ 00000028 500080E2 ADD R0,R0,#+80 \ 0000002C 057080E0 ADD R7,R0,R5 \ 00000030 100040E2 SUB R0,R0,#+16 \ 00000034 058080E0 ADD R8,R0,R5 \ 00000038 B80295E5 LDR R0,[R5, #+696] \ 0000003C 0C20A0E3 MOV R2,#+12 \ 00000040 920101E0 MUL R1,R2,R1 \ 00000044 010050E1 CMP R0,R1 \ 00000048 1E00001A BNE ??away_timer_1 268 { 269 TTime tt; 270 GetDateTime(NULL,&tt); \ 0000004C 0D10A0E1 MOV R1,SP \ 00000050 0000A0E3 MOV R0,#+0 \ 00000054 B40000EF SWI +180 271 sprintf(away_msg_time_dace, "%02d:%02d", tt.hour, tt.min); \ 00000058 0130DDE5 LDRB R3,[SP, #+1] \ 0000005C 0020DDE5 LDRB R2,[SP, #+0] \ 00000060 0910A0E1 MOV R1,R9 \ 00000064 0800A0E1 MOV R0,R8 \ 00000068 160000EF SWI +22 272 sprintf(away_msg_time, "( Отсутствую примерно с %02d:%02d [%s] )", tt.hour, tt.min, tim_zone); \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 01002DE9 PUSH {R0} \ 00000074 0530DDE5 LDRB R3,[SP, #+5] \ 00000078 0420DDE5 LDRB R2,[SP, #+4] \ 0000007C 0C1089E2 ADD R1,R9,#+12 \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 160000EF SWI +22 273 away_m=1; 274 if(CurrentStatus!=2 && CurrentStatus!=isAutoStatusOn) \ 00000088 A80295E5 LDR R0,[R5, #+680] \ 0000008C 01B0A0E3 MOV R11,#+1 \ 00000090 BCB285E5 STR R11,[R5, #+700] \ 00000094 020050E3 CMP R0,#+2 \ 00000098 04D08DE2 ADD SP,SP,#+4 \ 0000009C 0900000A BEQ ??away_timer_1 \ 000000A0 E8109FE5 LDR R1,??away_timer_0+0x4 ;; isAutoStatusOn \ 000000A4 001091E5 LDR R1,[R1, #+0] \ 000000A8 010050E1 CMP R0,R1 \ 000000AC 0500000A BEQ ??away_timer_1 275 { 276 status_rem=CurrentStatus; \ 000000B0 C00285E5 STR R0,[R5, #+704] 277 CurrentStatus=2; \ 000000B4 0200A0E3 MOV R0,#+2 \ 000000B8 A80285E5 STR R0,[R5, #+680] 278 set_my_status(); \ 000000BC ........ BL set_my_status 279 #ifdef NEWSGOLD 280 void SetIconBarHandler(); 281 SetIconBarHandler(); \ 000000C0 B84085E5 STR R4,[R5, #+184] 282 #endif 283 change_back_status=1; \ 000000C4 C4B285E5 STR R11,[R5, #+708] 284 } 285 } 286 287 if( (IsOnNAStatus) && (msg_away_timer==((AUTO_ENGADE*12)+(NAStatusTime*12))) )//Включить переключение на недоступен,в минутах \ ??away_timer_1: \ 000000C8 C4009FE5 LDR R0,??away_timer_0+0x8 ;; IsOnNAStatus \ 000000CC 000090E5 LDR R0,[R0, #+0] \ 000000D0 000050E3 CMP R0,#+0 \ 000000D4 1F00000A BEQ ??away_timer_2 \ 000000D8 B8209FE5 LDR R2,??away_timer_0+0xC ;; NAStatusTime \ 000000DC 00109AE5 LDR R1,[R10, #+0] \ 000000E0 002092E5 LDR R2,[R2, #+0] \ 000000E4 B80295E5 LDR R0,[R5, #+696] \ 000000E8 011082E0 ADD R1,R2,R1 \ 000000EC 0C20A0E3 MOV R2,#+12 \ 000000F0 920101E0 MUL R1,R2,R1 \ 000000F4 010050E1 CMP R0,R1 \ 000000F8 1600001A BNE ??away_timer_2 288 { 289 TTime tt; 290 GetDateTime(NULL,&tt); \ 000000FC 0D10A0E1 MOV R1,SP \ 00000100 0000A0E3 MOV R0,#+0 \ 00000104 B40000EF SWI +180 291 sprintf(away_msg_time_dace, "%02d:%02d", tt.hour, tt.min); \ 00000108 0130DDE5 LDRB R3,[SP, #+1] \ 0000010C 0020DDE5 LDRB R2,[SP, #+0] \ 00000110 0910A0E1 MOV R1,R9 \ 00000114 0800A0E1 MOV R0,R8 \ 00000118 160000EF SWI +22 292 sprintf(away_msg_time, "( Недоступен примерно с %02d:%02d [%s] )", tt.hour, tt.min, tim_zone); \ 0000011C 80002DE9 PUSH {R7} \ 00000120 0530DDE5 LDRB R3,[SP, #+5] \ 00000124 0420DDE5 LDRB R2,[SP, #+4] \ 00000128 381089E2 ADD R1,R9,#+56 \ 0000012C 0600A0E1 MOV R0,R6 \ 00000130 160000EF SWI +22 293 if(CurrentStatus!=3) \ 00000134 A80295E5 LDR R0,[R5, #+680] \ 00000138 04D08DE2 ADD SP,SP,#+4 \ 0000013C 030050E3 CMP R0,#+3 \ 00000140 0400000A BEQ ??away_timer_2 294 { 295 status_rem=CurrentStatus; \ 00000144 C00285E5 STR R0,[R5, #+704] 296 CurrentStatus=3; \ 00000148 0300A0E3 MOV R0,#+3 \ 0000014C A80285E5 STR R0,[R5, #+680] 297 set_my_status(); \ 00000150 ........ BL set_my_status 298 #ifdef NEWSGOLD 299 void SetIconBarHandler(); 300 SetIconBarHandler(); \ 00000154 B84085E5 STR R4,[R5, #+184] 301 #endif 302 } 303 } 304 305 if(Auto_Status) \ ??away_timer_2: \ 00000158 ........ LDR R0,??DataTable7 ;; Auto_Status 306 msg_away_timer++; 307 GBS_StartTimerProc(&away_tmr, 216*5, away_timer); \ 0000015C 38209FE5 LDR R2,??away_timer_0+0x10 ;; away_timer \ 00000160 000090E5 LDR R0,[R0, #+0] \ 00000164 3810A0E3 MOV R1,#+56 \ 00000168 000050E3 CMP R0,#+0 \ 0000016C B8029515 LDRNE R0,[R5, #+696] \ 00000170 401E81E3 ORR R1,R1,#0x400 \ 00000174 01008012 ADDNE R0,R0,#+1 \ 00000178 B8028515 STRNE R0,[R5, #+696] \ 0000017C 520D81E2 ADD R0,R1,#+5248 \ 00000180 050080E0 ADD R0,R0,R5 \ 00000184 4D0000EF SWI +77 308 } \ 00000188 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return \ ??away_timer_0: \ 0000018C ........ DC32 `?` \ 00000190 ........ DC32 isAutoStatusOn \ 00000194 ........ DC32 IsOnNAStatus \ 00000198 ........ DC32 NAStatusTime \ 0000019C ........ DC32 away_timer 309 310 \ In segment CODE, align 4, keep-with-next 311 void init_time_zone() 312 { 313 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 + 6312 \ 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 080A0D10 DC8 +8,+10,+13,+16 \ 0000002C 120E1416 DC8 +18,+14,+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 314 { 315 case 0: 316 sprintf(tim_zone, "GMT -12:00"); \ ??init_time_zone_2: \ 0000004C 541F81E2 ADD R1,R1,#+336 \ 00000050 030000EA B ??init_time_zone_3 317 break; 318 case 1: 319 sprintf(tim_zone, "GMT -11:00"); \ ??init_time_zone_4: \ 00000054 571F81E2 ADD R1,R1,#+348 \ 00000058 160000EF SWI +22 \ 0000005C 0080BDE8 POP {PC} 320 break; 321 case 2: 322 sprintf(tim_zone, "GMT -10:00"); \ ??init_time_zone_5: \ 00000060 5A1F81E2 ADD R1,R1,#+360 \ ??init_time_zone_3: \ 00000064 160000EF SWI +22 \ 00000068 0080BDE8 POP {PC} 323 break; 324 case 3: 325 sprintf(tim_zone, "GMT -09:00"); \ ??init_time_zone_6: \ 0000006C 5D1F81E2 ADD R1,R1,#+372 \ 00000070 FBFFFFEA B ??init_time_zone_3 326 break; 327 case 4: 328 sprintf(tim_zone, "GMT -08:00"); \ ??init_time_zone_7: \ 00000074 601F81E2 ADD R1,R1,#+384 \ 00000078 F9FFFFEA B ??init_time_zone_3 329 break; 330 case 5: 331 sprintf(tim_zone, "GMT -07:00"); 332 break; 333 case 6: 334 sprintf(tim_zone, "GMT -06:00"); \ ??init_time_zone_8: \ 0000007C 0C1081E2 ADD R1,R1,#+12 \ 00000080 F7FFFFEA B ??init_time_zone_3 335 break; 336 case 7: 337 sprintf(tim_zone, "GMT -05:00"); \ ??init_time_zone_9: \ 00000084 181081E2 ADD R1,R1,#+24 \ 00000088 F5FFFFEA B ??init_time_zone_3 338 break; 339 case 8: 340 sprintf(tim_zone, "GMT -04:00"); \ ??init_time_zone_10: \ 0000008C 241081E2 ADD R1,R1,#+36 \ 00000090 F3FFFFEA B ??init_time_zone_3 341 break; 342 case 9: 343 sprintf(tim_zone, "GMT -03:30"); \ ??init_time_zone_11: \ 00000094 301081E2 ADD R1,R1,#+48 \ 00000098 F1FFFFEA B ??init_time_zone_3 344 break; 345 case 10: 346 sprintf(tim_zone, "GMT -03:00"); \ ??init_time_zone_12: \ 0000009C 3C1081E2 ADD R1,R1,#+60 \ 000000A0 EFFFFFEA B ??init_time_zone_3 347 break; 348 case 11: 349 sprintf(tim_zone, "GMT -02:00"); \ ??init_time_zone_13: \ 000000A4 481081E2 ADD R1,R1,#+72 \ 000000A8 EDFFFFEA B ??init_time_zone_3 350 break; 351 case 12: 352 sprintf(tim_zone, "GMT -01:00"); \ ??init_time_zone_14: \ 000000AC 541081E2 ADD R1,R1,#+84 \ 000000B0 EBFFFFEA B ??init_time_zone_3 353 break; 354 case 13: 355 sprintf(tim_zone, "GMT 00:00"); \ ??init_time_zone_15: \ 000000B4 601081E2 ADD R1,R1,#+96 \ 000000B8 E9FFFFEA B ??init_time_zone_3 356 break; 357 case 14: 358 sprintf(tim_zone, "GMT +01:00"); \ ??init_time_zone_16: \ 000000BC 6C1081E2 ADD R1,R1,#+108 \ 000000C0 E7FFFFEA B ??init_time_zone_3 359 break; 360 case 15: 361 sprintf(tim_zone, "GMT +02:00"); \ ??init_time_zone_17: \ 000000C4 781081E2 ADD R1,R1,#+120 \ 000000C8 E5FFFFEA B ??init_time_zone_3 362 break; 363 case 16: 364 sprintf(tim_zone, "GMT +03:00"); \ ??init_time_zone_18: \ 000000CC 841081E2 ADD R1,R1,#+132 \ 000000D0 E3FFFFEA B ??init_time_zone_3 365 break; 366 case 17: 367 sprintf(tim_zone, "GMT +03:30"); \ ??init_time_zone_19: \ 000000D4 901081E2 ADD R1,R1,#+144 \ 000000D8 E1FFFFEA B ??init_time_zone_3 368 break; 369 case 18: 370 sprintf(tim_zone, "GMT +04:00"); \ ??init_time_zone_20: \ 000000DC 9C1081E2 ADD R1,R1,#+156 \ 000000E0 DFFFFFEA B ??init_time_zone_3 371 break; 372 case 19: 373 sprintf(tim_zone, "GMT +04:30"); \ ??init_time_zone_21: \ 000000E4 A81081E2 ADD R1,R1,#+168 \ 000000E8 DDFFFFEA B ??init_time_zone_3 374 break; 375 case 20: 376 sprintf(tim_zone, "GMT +05:00"); \ ??init_time_zone_22: \ 000000EC B41081E2 ADD R1,R1,#+180 \ 000000F0 DBFFFFEA B ??init_time_zone_3 377 break; 378 case 21: 379 sprintf(tim_zone, "GMT +05:30"); \ ??init_time_zone_23: \ 000000F4 C01081E2 ADD R1,R1,#+192 \ 000000F8 D9FFFFEA B ??init_time_zone_3 380 break; 381 case 22: 382 sprintf(tim_zone, "GMT +05:45"); \ ??init_time_zone_24: \ 000000FC CC1081E2 ADD R1,R1,#+204 \ 00000100 D7FFFFEA B ??init_time_zone_3 383 break; 384 case 23: 385 sprintf(tim_zone, "GMT +06:00"); \ ??init_time_zone_25: \ 00000104 D81081E2 ADD R1,R1,#+216 \ 00000108 D5FFFFEA B ??init_time_zone_3 386 break; 387 case 24: 388 sprintf(tim_zone, "GMT +06:30"); \ ??init_time_zone_26: \ 0000010C E41081E2 ADD R1,R1,#+228 \ 00000110 D3FFFFEA B ??init_time_zone_3 389 break; 390 case 25: 391 sprintf(tim_zone, "GMT +07:00"); \ ??init_time_zone_27: \ 00000114 F01081E2 ADD R1,R1,#+240 \ 00000118 D1FFFFEA B ??init_time_zone_3 392 break; 393 case 26: 394 sprintf(tim_zone, "GMT +08:00"); \ ??init_time_zone_28: \ 0000011C FC1081E2 ADD R1,R1,#+252 \ 00000120 CFFFFFEA B ??init_time_zone_3 395 break; 396 case 27: 397 sprintf(tim_zone, "GMT +09:00"); \ ??init_time_zone_29: \ 00000124 421F81E2 ADD R1,R1,#+264 \ 00000128 CDFFFFEA B ??init_time_zone_3 398 break; 399 case 28: 400 sprintf(tim_zone, "GMT +09:30"); \ ??init_time_zone_30: \ 0000012C 451F81E2 ADD R1,R1,#+276 \ 00000130 CBFFFFEA B ??init_time_zone_3 401 break; 402 case 29: 403 sprintf(tim_zone, "GMT +10:00"); \ ??init_time_zone_31: \ 00000134 481F81E2 ADD R1,R1,#+288 \ 00000138 C9FFFFEA B ??init_time_zone_3 404 break; 405 case 30: 406 sprintf(tim_zone, "GMT +11:00"); \ ??init_time_zone_32: \ 0000013C 4B1F81E2 ADD R1,R1,#+300 \ 00000140 C7FFFFEA B ??init_time_zone_3 407 break; 408 case 31: 409 sprintf(tim_zone, "GMT +12:00"); \ ??init_time_zone_33: \ 00000144 4E1F81E2 ADD R1,R1,#+312 \ 00000148 C5FFFFEA B ??init_time_zone_3 410 break; 411 case 32: 412 sprintf(tim_zone, "GMT +13:00"); \ ??init_time_zone_34: \ 0000014C 511F81E2 ADD R1,R1,#+324 \ 00000150 160000EF SWI +22 413 break; 414 } 415 } \ ??init_time_zone_35: \ 00000154 0080BDE8 POP {PC} ;; return \ ??init_time_zone_1: \ 00000158 ........ DC32 time_zone \ 0000015C ........ DC32 S_ICONS + 6312 \ 00000160 ........ DC32 `?` 416 417 418 //------------------------ AUTO CHANGE STATUS ------------------------------// 419 420 void SetIconBarHandler(); 421 GBSTMR autoChangeStatus; 422 #pragma inline 423 static unsigned int GetStatusByIndex(int pos) 424 { 425 switch(pos) 426 { 427 case 1: 428 return IS_ONLINE; 429 case 2: 430 return IS_AWAY; 431 case 3: 432 return IS_NA; 433 case 4: 434 return IS_DND; 435 case 5: 436 return IS_OCCUPIED; 437 case 6: 438 return IS_FFC; 439 case 7: 440 return IS_INVISIBLE; 441 case 8: 442 return IS_DEPRESSION; 443 case 9: 444 return IS_EVIL; 445 case 10: 446 return IS_HOME; 447 case 11: 448 return IS_LUNCH; 449 case 12: 450 return IS_WORK; 451 } 452 return IS_UNKNOWN; 453 } 454 \ In segment CODE, align 4, keep-with-next 455 void AutoChangeStatus_timer()//Таймер автосмены статуса 456 { \ AutoChangeStatus_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 457 TTime tt; 458 GetDateTime(NULL,&tt); \ 00000008 0D10A0E1 MOV R1,SP 459 460 if(status_1!=0 && tt.hour==tm_status_1.hour && tt.min==tm_status_1.min) \ 0000000C ........ LDR R4,??DataTable31 ;; S_ICONS \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 B40000EF SWI +180 \ 00000018 EC039FE5 LDR R0,??AutoChangeStatus_timer_5 ;; status_1 \ 0000001C 0150A0E3 MOV R5,#+1 \ 00000020 000090E5 LDR R0,[R0, #+0] \ 00000024 000050E3 CMP R0,#+0 \ 00000028 2C00000A BEQ ??AutoChangeStatus_timer_6 \ 0000002C DC139FE5 LDR R1,??AutoChangeStatus_timer_5+0x4 ;; tm_status_1 \ 00000030 0020DDE5 LDRB R2,[SP, #+0] \ 00000034 0030D1E5 LDRB R3,[R1, #+0] \ 00000038 030052E1 CMP R2,R3 \ 0000003C 2700001A BNE ??AutoChangeStatus_timer_6 \ 00000040 0120DDE5 LDRB R2,[SP, #+1] \ 00000044 0110D1E5 LDRB R1,[R1, #+1] \ 00000048 010052E1 CMP R2,R1 \ 0000004C 2300001A BNE ??AutoChangeStatus_timer_6 461 { 462 CurrentStatus=GetStatusByIndex(status_1); \ 00000050 010040E2 SUB R0,R0,#+1 \ 00000054 0B0050E3 CMP R0,#+11 \ 00000058 1D00008A BHI ??AutoChangeStatus_timer_7 \ 0000005C 011F8FE2 ADR R1,??AutoChangeStatus_timer_0 \ 00000060 0010D1E7 LDRB R1,[R1, R0] \ 00000064 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??AutoChangeStatus_timer_0: \ 00000068 02040608 DC8 +2,+4,+6,+8 \ 0000006C 0A0C0E10 DC8 +10,+12,+14,+16 \ 00000070 12141618 DC8 +18,+20,+22,+24 \ ??AutoChangeStatus_timer_8: \ 00000074 0B00A0E3 MOV R0,#+11 \ 00000078 160000EA B ??AutoChangeStatus_timer_9 \ ??AutoChangeStatus_timer_10: \ 0000007C 0200A0E3 MOV R0,#+2 \ 00000080 140000EA B ??AutoChangeStatus_timer_9 \ ??AutoChangeStatus_timer_11: \ 00000084 0300A0E3 MOV R0,#+3 \ 00000088 120000EA B ??AutoChangeStatus_timer_9 \ ??AutoChangeStatus_timer_12: \ 0000008C 0500A0E3 MOV R0,#+5 \ 00000090 100000EA B ??AutoChangeStatus_timer_9 \ ??AutoChangeStatus_timer_13: \ 00000094 0400A0E3 MOV R0,#+4 \ 00000098 0E0000EA B ??AutoChangeStatus_timer_9 \ ??AutoChangeStatus_timer_14: \ 0000009C 0C00A0E3 MOV R0,#+12 \ 000000A0 0C0000EA B ??AutoChangeStatus_timer_9 \ ??AutoChangeStatus_timer_15: \ 000000A4 0100A0E3 MOV R0,#+1 \ 000000A8 0A0000EA B ??AutoChangeStatus_timer_9 \ ??AutoChangeStatus_timer_16: \ 000000AC 0600A0E3 MOV R0,#+6 \ 000000B0 080000EA B ??AutoChangeStatus_timer_9 \ ??AutoChangeStatus_timer_17: \ 000000B4 0700A0E3 MOV R0,#+7 \ 000000B8 060000EA B ??AutoChangeStatus_timer_9 \ ??AutoChangeStatus_timer_18: \ 000000BC 0800A0E3 MOV R0,#+8 \ 000000C0 040000EA B ??AutoChangeStatus_timer_9 \ ??AutoChangeStatus_timer_19: \ 000000C4 0900A0E3 MOV R0,#+9 \ 000000C8 020000EA B ??AutoChangeStatus_timer_9 \ ??AutoChangeStatus_timer_20: \ 000000CC 0A00A0E3 MOV R0,#+10 \ 000000D0 000000EA B ??AutoChangeStatus_timer_9 \ ??AutoChangeStatus_timer_7: \ 000000D4 0E00A0E3 MOV R0,#+14 \ ??AutoChangeStatus_timer_9: \ 000000D8 A80284E5 STR R0,[R4, #+680] 463 set_my_status(); \ 000000DC ........ BL set_my_status 464 } 465 466 if(status_2!=0 && tt.hour==tm_status_2.hour && tt.min==tm_status_2.min) \ ??AutoChangeStatus_timer_6: \ 000000E0 2C039FE5 LDR R0,??AutoChangeStatus_timer_5+0x8 ;; status_2 \ 000000E4 000090E5 LDR R0,[R0, #+0] \ 000000E8 000050E3 CMP R0,#+0 \ 000000EC 2C00000A BEQ ??AutoChangeStatus_timer_21 \ 000000F0 20139FE5 LDR R1,??AutoChangeStatus_timer_5+0xC ;; tm_status_2 \ 000000F4 0020DDE5 LDRB R2,[SP, #+0] \ 000000F8 0030D1E5 LDRB R3,[R1, #+0] \ 000000FC 030052E1 CMP R2,R3 \ 00000100 2700001A BNE ??AutoChangeStatus_timer_21 \ 00000104 0120DDE5 LDRB R2,[SP, #+1] \ 00000108 0110D1E5 LDRB R1,[R1, #+1] \ 0000010C 010052E1 CMP R2,R1 \ 00000110 2300001A BNE ??AutoChangeStatus_timer_21 467 { 468 CurrentStatus=GetStatusByIndex(status_2); \ 00000114 010040E2 SUB R0,R0,#+1 \ 00000118 0B0050E3 CMP R0,#+11 \ 0000011C 1D00008A BHI ??AutoChangeStatus_timer_22 \ 00000120 011F8FE2 ADR R1,??AutoChangeStatus_timer_1 \ 00000124 0010D1E7 LDRB R1,[R1, R0] \ 00000128 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??AutoChangeStatus_timer_1: \ 0000012C 02040608 DC8 +2,+4,+6,+8 \ 00000130 0A0C0E10 DC8 +10,+12,+14,+16 \ 00000134 12141618 DC8 +18,+20,+22,+24 \ ??AutoChangeStatus_timer_23: \ 00000138 0B00A0E3 MOV R0,#+11 \ 0000013C 160000EA B ??AutoChangeStatus_timer_24 \ ??AutoChangeStatus_timer_25: \ 00000140 0200A0E3 MOV R0,#+2 \ 00000144 140000EA B ??AutoChangeStatus_timer_24 \ ??AutoChangeStatus_timer_26: \ 00000148 0300A0E3 MOV R0,#+3 \ 0000014C 120000EA B ??AutoChangeStatus_timer_24 \ ??AutoChangeStatus_timer_27: \ 00000150 0500A0E3 MOV R0,#+5 \ 00000154 100000EA B ??AutoChangeStatus_timer_24 \ ??AutoChangeStatus_timer_28: \ 00000158 0400A0E3 MOV R0,#+4 \ 0000015C 0E0000EA B ??AutoChangeStatus_timer_24 \ ??AutoChangeStatus_timer_29: \ 00000160 0C00A0E3 MOV R0,#+12 \ 00000164 0C0000EA B ??AutoChangeStatus_timer_24 \ ??AutoChangeStatus_timer_30: \ 00000168 0100A0E3 MOV R0,#+1 \ 0000016C 0A0000EA B ??AutoChangeStatus_timer_24 \ ??AutoChangeStatus_timer_31: \ 00000170 0600A0E3 MOV R0,#+6 \ 00000174 080000EA B ??AutoChangeStatus_timer_24 \ ??AutoChangeStatus_timer_32: \ 00000178 0700A0E3 MOV R0,#+7 \ 0000017C 060000EA B ??AutoChangeStatus_timer_24 \ ??AutoChangeStatus_timer_33: \ 00000180 0800A0E3 MOV R0,#+8 \ 00000184 040000EA B ??AutoChangeStatus_timer_24 \ ??AutoChangeStatus_timer_34: \ 00000188 0900A0E3 MOV R0,#+9 \ 0000018C 020000EA B ??AutoChangeStatus_timer_24 \ ??AutoChangeStatus_timer_35: \ 00000190 0A00A0E3 MOV R0,#+10 \ 00000194 000000EA B ??AutoChangeStatus_timer_24 \ ??AutoChangeStatus_timer_22: \ 00000198 0E00A0E3 MOV R0,#+14 \ ??AutoChangeStatus_timer_24: \ 0000019C A80284E5 STR R0,[R4, #+680] 469 set_my_status(); \ 000001A0 ........ BL set_my_status 470 } 471 472 if(status_3!=0 && tt.hour==tm_status_3.hour && tt.min==tm_status_3.min) \ ??AutoChangeStatus_timer_21: \ 000001A4 70029FE5 LDR R0,??AutoChangeStatus_timer_5+0x10 ;; status_3 \ 000001A8 000090E5 LDR R0,[R0, #+0] \ 000001AC 000050E3 CMP R0,#+0 \ 000001B0 2C00000A BEQ ??AutoChangeStatus_timer_36 \ 000001B4 64129FE5 LDR R1,??AutoChangeStatus_timer_5+0x14 ;; tm_status_3 \ 000001B8 0020DDE5 LDRB R2,[SP, #+0] \ 000001BC 0030D1E5 LDRB R3,[R1, #+0] \ 000001C0 030052E1 CMP R2,R3 \ 000001C4 2700001A BNE ??AutoChangeStatus_timer_36 \ 000001C8 0120DDE5 LDRB R2,[SP, #+1] \ 000001CC 0110D1E5 LDRB R1,[R1, #+1] \ 000001D0 010052E1 CMP R2,R1 \ 000001D4 2300001A BNE ??AutoChangeStatus_timer_36 473 { 474 CurrentStatus=GetStatusByIndex(status_3); \ 000001D8 010040E2 SUB R0,R0,#+1 \ 000001DC 0B0050E3 CMP R0,#+11 \ 000001E0 1D00008A BHI ??AutoChangeStatus_timer_37 \ 000001E4 011F8FE2 ADR R1,??AutoChangeStatus_timer_2 \ 000001E8 0010D1E7 LDRB R1,[R1, R0] \ 000001EC 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??AutoChangeStatus_timer_2: \ 000001F0 02040608 DC8 +2,+4,+6,+8 \ 000001F4 0A0C0E10 DC8 +10,+12,+14,+16 \ 000001F8 12141618 DC8 +18,+20,+22,+24 \ ??AutoChangeStatus_timer_38: \ 000001FC 0B00A0E3 MOV R0,#+11 \ 00000200 160000EA B ??AutoChangeStatus_timer_39 \ ??AutoChangeStatus_timer_40: \ 00000204 0200A0E3 MOV R0,#+2 \ 00000208 140000EA B ??AutoChangeStatus_timer_39 \ ??AutoChangeStatus_timer_41: \ 0000020C 0300A0E3 MOV R0,#+3 \ 00000210 120000EA B ??AutoChangeStatus_timer_39 \ ??AutoChangeStatus_timer_42: \ 00000214 0500A0E3 MOV R0,#+5 \ 00000218 100000EA B ??AutoChangeStatus_timer_39 \ ??AutoChangeStatus_timer_43: \ 0000021C 0400A0E3 MOV R0,#+4 \ 00000220 0E0000EA B ??AutoChangeStatus_timer_39 \ ??AutoChangeStatus_timer_44: \ 00000224 0C00A0E3 MOV R0,#+12 \ 00000228 0C0000EA B ??AutoChangeStatus_timer_39 \ ??AutoChangeStatus_timer_45: \ 0000022C 0100A0E3 MOV R0,#+1 \ 00000230 0A0000EA B ??AutoChangeStatus_timer_39 \ ??AutoChangeStatus_timer_46: \ 00000234 0600A0E3 MOV R0,#+6 \ 00000238 080000EA B ??AutoChangeStatus_timer_39 \ ??AutoChangeStatus_timer_47: \ 0000023C 0700A0E3 MOV R0,#+7 \ 00000240 060000EA B ??AutoChangeStatus_timer_39 \ ??AutoChangeStatus_timer_48: \ 00000244 0800A0E3 MOV R0,#+8 \ 00000248 040000EA B ??AutoChangeStatus_timer_39 \ ??AutoChangeStatus_timer_49: \ 0000024C 0900A0E3 MOV R0,#+9 \ 00000250 020000EA B ??AutoChangeStatus_timer_39 \ ??AutoChangeStatus_timer_50: \ 00000254 0A00A0E3 MOV R0,#+10 \ 00000258 000000EA B ??AutoChangeStatus_timer_39 \ ??AutoChangeStatus_timer_37: \ 0000025C 0E00A0E3 MOV R0,#+14 \ ??AutoChangeStatus_timer_39: \ 00000260 A80284E5 STR R0,[R4, #+680] 475 set_my_status(); \ 00000264 ........ BL set_my_status 476 } 477 478 if(status_4!=0 && tt.hour==tm_status_4.hour && tt.min==tm_status_4.min) \ ??AutoChangeStatus_timer_36: \ 00000268 B4019FE5 LDR R0,??AutoChangeStatus_timer_5+0x18 ;; status_4 \ 0000026C 000090E5 LDR R0,[R0, #+0] \ 00000270 000050E3 CMP R0,#+0 \ 00000274 2C00000A BEQ ??AutoChangeStatus_timer_51 \ 00000278 A8119FE5 LDR R1,??AutoChangeStatus_timer_5+0x1C ;; tm_status_4 \ 0000027C 0020DDE5 LDRB R2,[SP, #+0] \ 00000280 0030D1E5 LDRB R3,[R1, #+0] \ 00000284 030052E1 CMP R2,R3 \ 00000288 2700001A BNE ??AutoChangeStatus_timer_51 \ 0000028C 0120DDE5 LDRB R2,[SP, #+1] \ 00000290 0110D1E5 LDRB R1,[R1, #+1] \ 00000294 010052E1 CMP R2,R1 \ 00000298 2300001A BNE ??AutoChangeStatus_timer_51 479 { 480 CurrentStatus=GetStatusByIndex(status_4); \ 0000029C 010040E2 SUB R0,R0,#+1 \ 000002A0 0B0050E3 CMP R0,#+11 \ 000002A4 1D00008A BHI ??AutoChangeStatus_timer_52 \ 000002A8 011F8FE2 ADR R1,??AutoChangeStatus_timer_3 \ 000002AC 0010D1E7 LDRB R1,[R1, R0] \ 000002B0 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??AutoChangeStatus_timer_3: \ 000002B4 02040608 DC8 +2,+4,+6,+8 \ 000002B8 0A0C0E10 DC8 +10,+12,+14,+16 \ 000002BC 12141618 DC8 +18,+20,+22,+24 \ ??AutoChangeStatus_timer_53: \ 000002C0 0B00A0E3 MOV R0,#+11 \ 000002C4 160000EA B ??AutoChangeStatus_timer_54 \ ??AutoChangeStatus_timer_55: \ 000002C8 0200A0E3 MOV R0,#+2 \ 000002CC 140000EA B ??AutoChangeStatus_timer_54 \ ??AutoChangeStatus_timer_56: \ 000002D0 0300A0E3 MOV R0,#+3 \ 000002D4 120000EA B ??AutoChangeStatus_timer_54 \ ??AutoChangeStatus_timer_57: \ 000002D8 0500A0E3 MOV R0,#+5 \ 000002DC 100000EA B ??AutoChangeStatus_timer_54 \ ??AutoChangeStatus_timer_58: \ 000002E0 0400A0E3 MOV R0,#+4 \ 000002E4 0E0000EA B ??AutoChangeStatus_timer_54 \ ??AutoChangeStatus_timer_59: \ 000002E8 0C00A0E3 MOV R0,#+12 \ 000002EC 0C0000EA B ??AutoChangeStatus_timer_54 \ ??AutoChangeStatus_timer_60: \ 000002F0 0100A0E3 MOV R0,#+1 \ 000002F4 0A0000EA B ??AutoChangeStatus_timer_54 \ ??AutoChangeStatus_timer_61: \ 000002F8 0600A0E3 MOV R0,#+6 \ 000002FC 080000EA B ??AutoChangeStatus_timer_54 \ ??AutoChangeStatus_timer_62: \ 00000300 0700A0E3 MOV R0,#+7 \ 00000304 060000EA B ??AutoChangeStatus_timer_54 \ ??AutoChangeStatus_timer_63: \ 00000308 0800A0E3 MOV R0,#+8 \ 0000030C 040000EA B ??AutoChangeStatus_timer_54 \ ??AutoChangeStatus_timer_64: \ 00000310 0900A0E3 MOV R0,#+9 \ 00000314 020000EA B ??AutoChangeStatus_timer_54 \ ??AutoChangeStatus_timer_65: \ 00000318 0A00A0E3 MOV R0,#+10 \ 0000031C 000000EA B ??AutoChangeStatus_timer_54 \ ??AutoChangeStatus_timer_52: \ 00000320 0E00A0E3 MOV R0,#+14 \ ??AutoChangeStatus_timer_54: \ 00000324 A80284E5 STR R0,[R4, #+680] 481 set_my_status(); \ 00000328 ........ BL set_my_status 482 } 483 484 if(status_5!=0 && tt.hour==tm_status_5.hour && tt.min==tm_status_5.min) \ ??AutoChangeStatus_timer_51: \ 0000032C F8009FE5 LDR R0,??AutoChangeStatus_timer_5+0x20 ;; status_5 \ 00000330 000090E5 LDR R0,[R0, #+0] \ 00000334 000050E3 CMP R0,#+0 \ 00000338 2A00000A BEQ ??AutoChangeStatus_timer_66 \ 0000033C EC109FE5 LDR R1,??AutoChangeStatus_timer_5+0x24 ;; tm_status_5 \ 00000340 0020DDE5 LDRB R2,[SP, #+0] \ 00000344 0030D1E5 LDRB R3,[R1, #+0] \ 00000348 030052E1 CMP R2,R3 \ 0000034C 2500001A BNE ??AutoChangeStatus_timer_66 \ 00000350 0120DDE5 LDRB R2,[SP, #+1] \ 00000354 0110D1E5 LDRB R1,[R1, #+1] \ 00000358 010052E1 CMP R2,R1 \ 0000035C 2100001A BNE ??AutoChangeStatus_timer_66 485 { 486 CurrentStatus=GetStatusByIndex(status_5); \ 00000360 010040E2 SUB R0,R0,#+1 \ 00000364 0B0050E3 CMP R0,#+11 \ 00000368 1B00008A BHI ??AutoChangeStatus_timer_67 \ 0000036C 011F8FE2 ADR R1,??AutoChangeStatus_timer_4 \ 00000370 0010D1E7 LDRB R1,[R1, R0] \ 00000374 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??AutoChangeStatus_timer_4: \ 00000378 02040608 DC8 +2,+4,+6,+8 \ 0000037C 0A0C190E DC8 +10,+12,+25,+14 \ 00000380 10121416 DC8 +16,+18,+20,+22 \ ??AutoChangeStatus_timer_68: \ 00000384 0B50A0E3 MOV R5,#+11 \ 00000388 140000EA B ??AutoChangeStatus_timer_69 \ ??AutoChangeStatus_timer_70: \ 0000038C 0250A0E3 MOV R5,#+2 \ 00000390 120000EA B ??AutoChangeStatus_timer_69 \ ??AutoChangeStatus_timer_71: \ 00000394 0350A0E3 MOV R5,#+3 \ 00000398 100000EA B ??AutoChangeStatus_timer_69 \ ??AutoChangeStatus_timer_72: \ 0000039C 0550A0E3 MOV R5,#+5 \ 000003A0 0E0000EA B ??AutoChangeStatus_timer_69 \ ??AutoChangeStatus_timer_73: \ 000003A4 0450A0E3 MOV R5,#+4 \ 000003A8 0C0000EA B ??AutoChangeStatus_timer_69 \ ??AutoChangeStatus_timer_74: \ 000003AC 0C50A0E3 MOV R5,#+12 \ 000003B0 0A0000EA B ??AutoChangeStatus_timer_69 \ ??AutoChangeStatus_timer_75: \ 000003B4 0650A0E3 MOV R5,#+6 \ 000003B8 080000EA B ??AutoChangeStatus_timer_69 \ ??AutoChangeStatus_timer_76: \ 000003BC 0750A0E3 MOV R5,#+7 \ 000003C0 060000EA B ??AutoChangeStatus_timer_69 \ ??AutoChangeStatus_timer_77: \ 000003C4 0850A0E3 MOV R5,#+8 \ 000003C8 040000EA B ??AutoChangeStatus_timer_69 \ ??AutoChangeStatus_timer_78: \ 000003CC 0950A0E3 MOV R5,#+9 \ 000003D0 020000EA B ??AutoChangeStatus_timer_69 \ ??AutoChangeStatus_timer_79: \ 000003D4 0A50A0E3 MOV R5,#+10 \ 000003D8 000000EA B ??AutoChangeStatus_timer_69 \ ??AutoChangeStatus_timer_67: \ 000003DC 0E50A0E3 MOV R5,#+14 \ ??AutoChangeStatus_timer_69: \ 000003E0 A85284E5 STR R5,[R4, #+680] 487 set_my_status(); \ 000003E4 ........ BL set_my_status 488 } 489 #ifdef ELKA 490 SetIconBarHandler(); \ ??AutoChangeStatus_timer_66: \ 000003E8 ........ LDR R0,??DataTable9 ;; addIconBar 491 #endif 492 493 GBS_StartTimerProc(&autoChangeStatus, 216*10, AutoChangeStatus_timer); \ 000003EC 40209FE5 LDR R2,??AutoChangeStatus_timer_5+0x28 ;; AutoChangeStatus_timer \ 000003F0 B80084E5 STR R0,[R4, #+184] \ 000003F4 871EA0E3 MOV R1,#+2160 \ 000003F8 C800A0E3 MOV R0,#+200 \ 000003FC 600D80E3 ORR R0,R0,#0x1800 \ 00000400 040080E0 ADD R0,R0,R4 \ 00000404 4D0000EF SWI +77 494 } \ 00000408 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??AutoChangeStatus_timer_5: \ 0000040C ........ DC32 status_1 \ 00000410 ........ DC32 tm_status_1 \ 00000414 ........ DC32 status_2 \ 00000418 ........ DC32 tm_status_2 \ 0000041C ........ DC32 status_3 \ 00000420 ........ DC32 tm_status_3 \ 00000424 ........ DC32 status_4 \ 00000428 ........ DC32 tm_status_4 \ 0000042C ........ DC32 status_5 \ 00000430 ........ DC32 tm_status_5 \ 00000434 ........ DC32 AutoChangeStatus_timer 495 //=================================away_msg=============== 496 //////////////////////////////////////////tozhe dlja auto ping/////////////// 497 \ In segment CODE, align 4, keep-with-next 498 void DrawPing(void *canv) 499 { 500 PrintField(Ping_X,Ping_Y, PINGO, align, fonto, spaco1); \ DrawPing: \ 00000000 ........ LDR R1,??DataTable24 ;; spaco1 \ 00000004 ........ LDR R0,??DataTable31 ;; S_ICONS \ 00000008 00402DE9 PUSH {LR} \ 0000000C 001091E5 LDR R1,[R1, #+0] \ 00000010 592D80E2 ADD R2,R0,#+5696 \ 00000014 02002DE9 PUSH {R1} \ 00000018 ........ LDR R1,??DataTable25 ;; fonto \ 0000001C 001091E5 LDR R1,[R1, #+0] \ 00000020 02002DE9 PUSH {R1} \ 00000024 5C3290E5 LDR R3,[R0, #+604] \ 00000028 10009FE5 LDR R0,??DrawPing_0 ;; Ping_Y \ 0000002C 001090E5 LDR R1,[R0, #+0] \ 00000030 0C009FE5 LDR R0,??DrawPing_0+0x4 ;; Ping_X \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 ........ _BLF PrintField,??PrintField??rA 501 } \ 0000003C 0380BDE8 POP {R0,R1,PC} ;; return \ ??DrawPing_0: \ 00000040 ........ DC32 Ping_Y \ 00000044 ........ DC32 Ping_X 502 503 //////////////////////////////////////////tozhe dlja auto ping/////////////// 504 505 GBSTMR remind_tmr; 506 volatile int vibra_count; 507 #ifdef ELKA 508 void SLI_Off(void); 509 #endif 510 void start_vibra2(void); 511 512 //////////////////////////reminder timer///////////////////////// 513 \ In segment CODE, align 4, keep-with-next 514 void Remind_Timer2() 515 { \ Remind_Timer2: \ 00000000 10402DE9 PUSH {R4,LR} 516 if (total_unread) \ 00000004 ........ LDR R4,??DataTable31 ;; S_ICONS \ 00000008 380394E5 LDR R0,[R4, #+824] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} 517 { 518 vibra_count=Vibra_cc; \ 00000014 24009FE5 LDR R0,??Remind_Timer2_0 ;; Vibra_cc \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C FC0284E5 STR R0,[R4, #+764] 519 start_vibra2(); \ 00000020 ........ BL start_vibra2 520 GBS_StartTimerProc(&remind_tmr, 6480, Remind_Timer2); \ 00000024 ........ LDR R2,??DataTable15 ;; Remind_Timer2 \ 00000028 5010A0E3 MOV R1,#+80 \ 0000002C 641D81E3 ORR R1,R1,#0x1900 \ 00000030 780041E2 SUB R0,R1,#+120 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 4D0000EF SWI +77 521 } 522 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return \ ??Remind_Timer2_0: \ 00000040 ........ DC32 Vibra_cc 523 \ In segment CODE, align 4, keep-with-next 524 void Reminder_timer() 525 { 526 GBS_StartTimerProc(&remind_tmr, 6480, Remind_Timer2); \ Reminder_timer: \ 00000000 ........ LDR R2,??DataTable15 ;; Remind_Timer2 \ 00000004 10009FE5 LDR R0,??Reminder_timer_0 ;; S_ICONS + 6360 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 5010A0E3 MOV R1,#+80 \ 00000010 641D81E3 ORR R1,R1,#0x1900 \ 00000014 4D0000EF SWI +77 527 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??Reminder_timer_0: \ 0000001C ........ DC32 S_ICONS + 6360 528 //////////////////////////reminder timer///////////////////////// 529 530 //////////////////////////uptime////////////////////////// 531 int Is_UPTIME_On; 532 int uptimeHour; 533 int uptimeMin; 534 int uptimeSec; 535 \ In segment CODE, align 4, keep-with-next 536 void UptimeMinHour() 537 { 538 uptimeSec++; \ UptimeMinHour: \ 00000000 ........ LDR R0,??DataTable31 ;; S_ICONS \ 00000004 D81290E5 LDR R1,[R0, #+728] 539 if(uptimeSec==60) \ 00000008 D42290E5 LDR R2,[R0, #+724] \ 0000000C 011081E2 ADD R1,R1,#+1 \ 00000010 3C0051E3 CMP R1,#+60 540 { 541 uptimeSec=0; \ 00000014 0010A003 MOVEQ R1,#+0 542 uptimeMin++; \ 00000018 01208202 ADDEQ R2,R2,#+1 \ 0000001C D81280E5 STR R1,[R0, #+728] 543 } 544 if(uptimeMin==60) \ 00000020 3C0052E3 CMP R2,#+60 \ 00000024 0300001A BNE ??UptimeMinHour_0 545 { 546 uptimeMin=0; 547 uptimeHour++; \ 00000028 D01290E5 LDR R1,[R0, #+720] \ 0000002C 0020A0E3 MOV R2,#+0 \ 00000030 011081E2 ADD R1,R1,#+1 \ 00000034 D01280E5 STR R1,[R0, #+720] \ ??UptimeMinHour_0: \ 00000038 D42280E5 STR R2,[R0, #+724] 548 } 549 } \ 0000003C 1EFF2FE1 BX LR ;; return 550 551 GBSTMR uptime_tmr; 552 #ifdef NEWSGOLD 553 GBSTMR tracktmr; 554 int tracktimer; 555 #endif 556 \ In segment CODE, align 4, keep-with-next 557 void upTime() 558 { \ upTime: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 559 if(connect_state==3) \ 00000004 ........ LDR R4,??DataTable31 ;; S_ICONS \ 00000008 80609FE5 LDR R6,??upTime_0 ;; upTime \ 0000000C E800A0E3 MOV R0,#+232 \ 00000010 600D80E3 ORR R0,R0,#0x1800 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 140394E5 LDR R0,[R4, #+788] \ 0000001C 0070A0E3 MOV R7,#+0 \ 00000020 030050E3 CMP R0,#+3 \ 00000024 0E00001A BNE ??upTime_1 560 { 561 UptimeMinHour(); \ 00000028 ........ BL UptimeMinHour 562 #ifdef NEWSGOLD 563 if (tracktimer>=10)/*&&(_GetPlayStatus()!=1))*/ \ 0000002C DC0294E5 LDR R0,[R4, #+732] \ 00000030 0A0050E3 CMP R0,#+10 \ 00000034 060000BA BLT ??upTime_2 564 { 565 GBS_StartTimerProc(&tracktmr, 216*5, GetTags); \ 00000038 ........ LDR R2,??DataTable18 ;; GetTags \ 0000003C 3810A0E3 MOV R1,#+56 \ 00000040 401E81E3 ORR R1,R1,#0x400 \ 00000044 530D81E2 ADD R0,R1,#+5312 \ 00000048 040080E0 ADD R0,R0,R4 \ 0000004C 4D0000EF SWI +77 566 tracktimer=0; \ 00000050 DC7284E5 STR R7,[R4, #+732] 567 } 568 tracktimer++; \ ??upTime_2: \ 00000054 DC0294E5 LDR R0,[R4, #+732] \ 00000058 010080E2 ADD R0,R0,#+1 \ 0000005C DC0284E5 STR R0,[R4, #+732] 569 #endif 570 GBS_StartTimerProc(&uptime_tmr, 216, upTime); \ 00000060 050000EA B ??upTime_3 571 } 572 else 573 { 574 if(!Pause_Time) \ ??upTime_1: \ 00000064 28009FE5 LDR R0,??upTime_0+0x4 ;; Pause_Time \ 00000068 000090E5 LDR R0,[R0, #+0] \ 0000006C 000050E3 CMP R0,#+0 575 { 576 uptimeHour=0; \ 00000070 D0728405 STREQ R7,[R4, #+720] 577 uptimeMin=0; \ 00000074 D4728405 STREQ R7,[R4, #+724] 578 uptimeSec=0; \ 00000078 D8728405 STREQ R7,[R4, #+728] 579 } 580 GBS_StartTimerProc(&uptime_tmr, 216, upTime); \ ??upTime_3: \ 0000007C 0620A0E1 MOV R2,R6 \ 00000080 D810A0E3 MOV R1,#+216 \ 00000084 0500A0E1 MOV R0,R5 \ 00000088 4D0000EF SWI +77 581 } 582 } \ 0000008C F080BDE8 POP {R4-R7,PC} ;; return \ ??upTime_0: \ 00000090 ........ DC32 upTime \ 00000094 ........ DC32 Pause_Time 583 584 char onlineTime[128]; \ In segment CODE, align 4, keep-with-next 585 void DrawOnlineTime(void *canv) 586 { 587 if(connect_state==3) \ DrawOnlineTime: \ 00000000 80109FE5 LDR R1,??DrawOnlineTime_0 ;; `?` \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 ........ LDR R4,??DataTable31 ;; S_ICONS \ 0000000C 0800A0E3 MOV R0,#+8 \ 00000010 640D80E3 ORR R0,R0,#0x1900 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 140394E5 LDR R0,[R4, #+788] \ 0000001C 030050E3 CMP R0,#+3 \ 00000020 0700001A BNE ??DrawOnlineTime_1 588 { 589 sprintf(onlineTime,"Online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); \ 00000024 D80294E5 LDR R0,[R4, #+728] \ 00000028 01002DE9 PUSH {R0} \ 0000002C D43294E5 LDR R3,[R4, #+724] \ 00000030 D02294E5 LDR R2,[R4, #+720] \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 160000EF SWI +22 \ 0000003C 04D08DE2 ADD SP,SP,#+4 \ 00000040 020000EA B ??DrawOnlineTime_2 590 } 591 else 592 sprintf(onlineTime,"Offline"); \ ??DrawOnlineTime_1: \ 00000044 181081E2 ADD R1,R1,#+24 \ 00000048 0500A0E1 MOV R0,R5 \ 0000004C 160000EF SWI +22 593 PrintField(onlineTime_x,onlineTime_y, onlineTime, align, fonto, spaco1); \ ??DrawOnlineTime_2: \ 00000050 ........ LDR R0,??DataTable24 ;; spaco1 \ 00000054 0520A0E1 MOV R2,R5 \ 00000058 000090E5 LDR R0,[R0, #+0] \ 0000005C 01002DE9 PUSH {R0} \ 00000060 ........ LDR R0,??DataTable25 ;; fonto \ 00000064 000090E5 LDR R0,[R0, #+0] \ 00000068 01002DE9 PUSH {R0} \ 0000006C 5C3294E5 LDR R3,[R4, #+604] \ 00000070 14009FE5 LDR R0,??DrawOnlineTime_0+0x4 ;; onlineTime_y \ 00000074 001090E5 LDR R1,[R0, #+0] \ 00000078 10009FE5 LDR R0,??DrawOnlineTime_0+0x8 ;; onlineTime_x \ 0000007C 000090E5 LDR R0,[R0, #+0] \ 00000080 ........ _BLF PrintField,??PrintField??rA 594 } \ 00000084 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??DrawOnlineTime_0: \ 00000088 ........ DC32 `?` \ 0000008C ........ DC32 onlineTime_y \ 00000090 ........ DC32 onlineTime_x 595 596 597 //---------------------- Вывод времени на идле ---------------------// 598 599 \ In segment CODE, align 4, keep-with-next 600 void DrawAutoMSG(void *canv) 601 { \ DrawAutoMSG: \ 00000000 10402DE9 PUSH {R4,LR} 602 char awayTime[64]; 603 if(away_m && showAwayIdle) \ 00000004 ........ LDR R4,??DataTable31 ;; S_ICONS \ 00000008 40D04DE2 SUB SP,SP,#+64 \ 0000000C BC0294E5 LDR R0,[R4, #+700] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 1700000A BEQ ??DrawAutoMSG_0 \ 00000018 ........ LDR R0,??DataTable23 ;; showAwayIdle \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 1300000A BEQ ??DrawAutoMSG_0 604 { 605 sprintf(awayTime,"Away from [%s]",away_msg_time_dace); \ 00000028 50109FE5 LDR R1,??DrawAutoMSG_1 ;; `?` \ 0000002C 9800A0E3 MOV R0,#+152 \ 00000030 600D80E3 ORR R0,R0,#0x1800 \ 00000034 042080E0 ADD R2,R0,R4 \ 00000038 0D00A0E1 MOV R0,SP \ 0000003C 160000EF SWI +22 606 PrintField(auto_x,auto_y, awayTime, align, fonto, spaco1); \ 00000040 ........ LDR R0,??DataTable24 ;; spaco1 \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 01002DE9 PUSH {R0} \ 0000004C ........ LDR R0,??DataTable25 ;; fonto \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 01002DE9 PUSH {R0} \ 00000058 5C3294E5 LDR R3,[R4, #+604] \ 0000005C 20009FE5 LDR R0,??DrawAutoMSG_1+0x4 ;; auto_y \ 00000060 08208DE2 ADD R2,SP,#+8 \ 00000064 001090E5 LDR R1,[R0, #+0] \ 00000068 18009FE5 LDR R0,??DrawAutoMSG_1+0x8 ;; auto_x \ 0000006C 000090E5 LDR R0,[R0, #+0] \ 00000070 ........ _BLF PrintField,??PrintField??rA \ 00000074 08D08DE2 ADD SP,SP,#+8 607 } 608 } \ ??DrawAutoMSG_0: \ 00000078 40D08DE2 ADD SP,SP,#+64 ;; stack cleaning \ 0000007C 1080BDE8 POP {R4,PC} ;; return \ ??DrawAutoMSG_1: \ 00000080 ........ DC32 `?` \ 00000084 ........ DC32 auto_y \ 00000088 ........ DC32 auto_x 609 610 611 //---------------------------- Input away msg ---------------------------// 612 613 //Вводим сообщение какое хотим,а не то что прописали в конфиге 614 int input_awaymsg_id; 615 616 const HEADER_DESC input_awaymsg_hdr={0,0,131,21,NULL,(int)"Ввод автосообщения",LGP_NULL}; 617 void UpdateCLheader(void); \ In segment CODE, align 4, keep-with-next 618 int input_awaymsg_onkey(GUI *data, GUI_MSG *msg) 619 { \ input_awaymsg_onkey: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 620 WSHDR *ws; 621 if (msg->keys==0x0FFF || msg->keys==VOL_DOWN_BUTTON) \ 00000008 ........ LDR R4,??DataTable31 ;; S_ICONS \ 0000000C 0160A0E1 MOV R6,R1 \ 00000010 F210D6E1 LDRSH R1,[R6, #+2] \ 00000014 0050A0E3 MOV R5,#+0 \ 00000018 FF20A0E3 MOV R2,#+255 \ 0000001C F02E82E3 ORR R2,R2,#0xF00 \ 00000020 020051E1 CMP R1,R2 \ 00000024 0E005113 CMPNE R1,#+14 \ 00000028 2300001A BNE ??input_awaymsg_onkey_0 622 { 623 EDITCONTROL ec; 624 ExtractEditControl(data,2,&ec); 625 ws=ec.pWS; 626 zeromem(awayMsg,256); \ 0000002C ........ LDR R8,??DataTable29 ;; awayMsg \ 00000030 0D20A0E1 MOV R2,SP \ 00000034 0210A0E3 MOV R1,#+2 \ 00000038 690100EF SWI +361 \ 0000003C 28709DE5 LDR R7,[SP, #+40] \ 00000040 401FA0E3 MOV R1,#+256 \ 00000044 0800A0E1 MOV R0,R8 \ 00000048 1D0100EF SWI +285 627 int i=0; 628 for(i=0;iwsbody[0];i++) \ 0000004C 000097E5 LDR R0,[R7, #+0] \ 00000050 0090A0E3 MOV R9,#+0 \ 00000054 B000D0E1 LDRH R0,[R0, #+0] \ 00000058 000050E3 CMP R0,#+0 \ 0000005C 0500001A BNE ??input_awaymsg_onkey_1 \ 00000060 080000EA B ??input_awaymsg_onkey_2 629 awayMsg[i]=char16to8(ws->wsbody[i+1]); \ ??input_awaymsg_onkey_3: \ 00000064 890080E0 ADD R0,R0,R9, LSL #+1 \ 00000068 B200D0E1 LDRH R0,[R0, #+2] \ 0000006C ........ _BLF char16to8,??char16to8??rA \ 00000070 0800C9E7 STRB R0,[R9, +R8] \ 00000074 019089E2 ADD R9,R9,#+1 \ ??input_awaymsg_onkey_1: \ 00000078 000097E5 LDR R0,[R7, #+0] \ 0000007C B010D0E1 LDRH R1,[R0, #+0] \ 00000080 010059E1 CMP R9,R1 \ 00000084 F6FFFFBA BLT ??input_awaymsg_onkey_3 630 awayMsg[i]=0; 631 632 #ifdef kluchnik2 633 char *s; 634 ExtractEditControl(data,4,&ec); 635 ws=ec.pWS; 636 s=malloc(ws->wsbody[0]); 637 *s=0; 638 for(i=0;iwsbody[0];i++) 639 *(s+i)=char16to8(ws->wsbody[i+1]); 640 *(s+i)=0; 641 strcat(awayMsg,s); 642 mfree(s); 643 #endif 644 msg_away_timer=(AUTO_ENGADE*12); \ ??input_awaymsg_onkey_2: \ 00000088 ........ LDR R0,??DataTable28 ;; AUTO_ENGADE \ 0000008C 0850C9E7 STRB R5,[R9, +R8] \ 00000090 000090E5 LDR R0,[R0, #+0] \ 00000094 0C10A0E3 MOV R1,#+12 \ 00000098 910000E0 MUL R0,R1,R0 \ 0000009C B80284E5 STR R0,[R4, #+696] 645 away_m=1; \ 000000A0 0100A0E3 MOV R0,#+1 \ 000000A4 BC0284E5 STR R0,[R4, #+700] 646 away_timer(); \ 000000A8 ........ BL away_timer 647 UpdateCLheader(); \ 000000AC ........ BL UpdateCLheader 648 GeneralFunc_flag1(input_awaymsg_id,1); \ 000000B0 E00294E5 LDR R0,[R4, #+736] \ 000000B4 0110A0E3 MOV R1,#+1 \ 000000B8 3D0100EF SWI +317 649 // GeneralFuncF1(1); 650 } 651 652 if(msg->keys==LEFT_SOFT || msg->keys==RED_BUTTON) \ ??input_awaymsg_onkey_0: \ 000000BC F200D6E1 LDRSH R0,[R6, #+2] \ 000000C0 010050E3 CMP R0,#+1 \ 000000C4 0C005013 CMPNE R0,#+12 \ 000000C8 0900001A BNE ??input_awaymsg_onkey_4 653 { 654 msg_away_timer=0; 655 away_m=0; 656 if(change_back_status) \ 000000CC C40294E5 LDR R0,[R4, #+708] \ 000000D0 B85284E5 STR R5,[R4, #+696] \ 000000D4 BC5284E5 STR R5,[R4, #+700] \ 000000D8 000050E3 CMP R0,#+0 \ 000000DC 0300000A BEQ ??input_awaymsg_onkey_5 657 { 658 CurrentStatus=status_rem; \ 000000E0 C00294E5 LDR R0,[R4, #+704] \ 000000E4 A80284E5 STR R0,[R4, #+680] 659 set_my_status(); \ 000000E8 ........ BL set_my_status 660 change_back_status=0; \ 000000EC C45284E5 STR R5,[R4, #+708] 661 } 662 UpdateCLheader(); \ ??input_awaymsg_onkey_5: \ 000000F0 ........ BL UpdateCLheader 663 } 664 return(0); \ ??input_awaymsg_onkey_4: \ 000000F4 0000A0E3 MOV R0,#+0 \ 000000F8 2CD08DE2 ADD SP,SP,#+44 \ 000000FC F083BDE8 POP {R4-R9,PC} ;; return 665 } 666 \ In segment CODE, align 4, keep-with-next 667 void input_awaymsg_ghook(GUI *gui, int cmd) 668 { \ input_awaymsg_ghook: \ 00000000 00402DE9 PUSH {LR} 669 static SOFTKEY_DESC sk={0x0FFF,0x0000,(int)"Сохранить"}; 670 if (cmd==7) \ 00000004 070051E3 CMP R1,#+7 \ 00000008 0300001A BNE ??input_awaymsg_ghook_0 671 { 672 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} 673 } 674 if(cmd==0xA) \ ??input_awaymsg_ghook_0: \ 0000001C 0A0051E3 CMP R1,#+10 \ 00000020 0100001A BNE ??input_awaymsg_ghook_2 675 { 676 DisableIDLETMR(); // Отключаем таймер выхода по таймауту \ 00000024 7F0100EF SWI +383 \ 00000028 0080BDE8 POP {PC} 677 } 678 if (cmd==0x0C) \ ??input_awaymsg_ghook_2: \ 0000002C 0C0051E3 CMP R1,#+12 \ 00000030 0080BD18 POPNE {PC} 679 { 680 EDIT_SetCursorPos(gui,1); \ 00000034 0110A0E3 MOV R1,#+1 \ 00000038 D40100EF SWI +468 681 } 682 if(cmd==0x03){} 683 } \ 0000003C 0080BDE8 POP {PC} ;; return \ ??input_awaymsg_ghook_1: \ 00000040 ........ DC32 ??sk 684 \ In segment CODE, align 4, keep-with-next 685 void input_awaymsg_locret(void){} \ input_awaymsg_locret: \ 00000000 1EFF2FE1 BX LR ;; return 686 687 SOFTKEY_DESC input_awaymsg_sk[]= 688 { 689 {0x0018,0x0000,(int)"Лев"}, 690 {0x0001,0x0000,(int)"Прав"}, 691 {0x003D,0x0000,(int)LGP_DOIT_PIC} 692 }; 693 694 SOFTKEYSTAB input_awaymsg_skt= 695 { 696 input_awaymsg_sk,0 697 }; 698 699 const INPUTDIA_DESC input_awaymsg_desc= 700 { 701 1, 702 input_awaymsg_onkey, 703 input_awaymsg_ghook, 704 (void *)input_awaymsg_locret, 705 0, 706 &input_awaymsg_skt, 707 {0,NULL,NULL,NULL}, 708 FONT_SMALL, 709 100, 710 101, 711 0, 712 0x00000000, 713 0x40000000 714 }; 715 \ In segment CODE, align 4, keep-with-next 716 void InputAwayMsg() 717 { \ InputAwayMsg: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 718 WSHDR *wss=AllocWS(256); 719 void *ma=malloc_adr(); 720 void *eq=AllocEQueue(ma, mfree_adr()); 721 EDITCONTROL ec; 722 PrepareEditControl(&ec); 723 wsprintf(wss,"%t","Сообщение:\n"); \ 00000004 28519FE5 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 382085E2 ADD R2,R5,#+56 \ 00000040 3A1F8FE2 ADR R1,??InputAwayMsg_0 ;; "%t" \ 00000044 0600A0E1 MOV R0,R6 \ 00000048 240100EF SWI +292 724 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); \ 0000004C 2000A0E3 MOV R0,#+32 \ 00000050 01002DE9 PUSH {R0} \ 00000054 0630A0E1 MOV R3,R6 \ 00000058 0020A0E3 MOV R2,#+0 \ 0000005C 0110A0E3 MOV R1,#+1 \ 00000060 04008DE2 ADD R0,SP,#+4 \ 00000064 650100EF SWI +357 725 AddEditControlToEditQend(eq,&ec,ma); \ 00000068 0720A0E1 MOV R2,R7 \ 0000006C 04108DE2 ADD R1,SP,#+4 \ 00000070 0400A0E1 MOV R0,R4 \ 00000074 660100EF SWI +358 726 727 PrepareEditControl(&ec); \ 00000078 04008DE2 ADD R0,SP,#+4 \ 0000007C 640100EF SWI +356 728 CutWSTR(wss,0); \ 00000080 0010A0E3 MOV R1,#+0 \ 00000084 0600A0E1 MOV R0,R6 \ 00000088 260100EF SWI +294 729 ascii2ws(wss,awayMsg); \ 0000008C ........ LDR R1,??DataTable29 ;; awayMsg \ 00000090 0600A0E1 MOV R0,R6 \ 00000094 ........ _BLF ascii2ws,??ascii2ws??rA 730 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); \ 00000098 FF00A0E3 MOV R0,#+255 \ 0000009C 01002DE9 PUSH {R0} \ 000000A0 0630A0E1 MOV R3,R6 \ 000000A4 4020A0E3 MOV R2,#+64 \ 000000A8 0310A0E3 MOV R1,#+3 \ 000000AC 08008DE2 ADD R0,SP,#+8 \ 000000B0 650100EF SWI +357 731 AddEditControlToEditQend(eq,&ec,ma); \ 000000B4 0720A0E1 MOV R2,R7 \ 000000B8 08108DE2 ADD R1,SP,#+8 \ 000000BC 0400A0E1 MOV R0,R4 \ 000000C0 660100EF SWI +358 732 #ifdef kluchnik2 733 PrepareEditControl(&ec); 734 wsprintf(wss,"%t","Сообщение 2:\n"); 735 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); 736 AddEditControlToEditQend(eq,&ec,ma); 737 738 ascii2ws(wss,"когда смогу отвечу:)"); 739 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); 740 AddEditControlToEditQend(eq,&ec,ma); 741 #endif 742 patch_header(&input_awaymsg_hdr); \ 000000C4 440085E2 ADD R0,R5,#+68 \ 000000C8 ........ _BLF patch_header,??patch_header??rA 743 patch_input(&input_awaymsg_desc); \ 000000CC 0000A0E3 MOV R0,#+0 \ 000000D0 B801C5E1 STRH R0,[R5, #+24] \ 000000D4 8A8100EF SWI +33162 \ 000000D8 190080E2 ADD R0,R0,#+25 \ 000000DC BA01C5E1 STRH R0,[R5, #+26] \ 000000E0 888100EF SWI +33160 \ 000000E4 010040E2 SUB R0,R0,#+1 \ 000000E8 BC01C5E1 STRH R0,[R5, #+28] \ 000000EC 898100EF SWI +33161 \ 000000F0 0060A0E1 MOV R6,R0 \ 000000F4 8B8100EF SWI +33163 \ 000000F8 000046E0 SUB R0,R6,R0 \ 000000FC 010040E2 SUB R0,R0,#+1 \ 00000100 BE01C5E1 STRH R0,[R5, #+30] 744 745 input_awaymsg_id=CreateInputTextDialog(&input_awaymsg_desc,&input_awaymsg_hdr,eq,1,0);//создаем диалоговое окно \ 00000104 0000A0E3 MOV R0,#+0 \ 00000108 01002DE9 PUSH {R0} \ 0000010C 0130A0E3 MOV R3,#+1 \ 00000110 0420A0E1 MOV R2,R4 \ 00000114 441085E2 ADD R1,R5,#+68 \ 00000118 0500A0E1 MOV R0,R5 \ 0000011C 670100EF SWI +359 \ 00000120 10109FE5 LDR R1,??InputAwayMsg_0+0x8 ;; S_ICONS + 736 \ 00000124 000081E5 STR R0,[R1, #+0] 746 } \ 00000128 38D08DE2 ADD SP,SP,#+56 \ 0000012C F080BDE8 POP {R4-R7,PC} ;; return \ ??InputAwayMsg_0: \ 00000130 25740000 DC8 "%t",+0 \ 00000134 ........ DC32 input_awaymsg_desc \ 00000138 ........ DC32 S_ICONS + 736 747 748 749 //////////////////////////uptime////////////////////////// 750 #ifdef ELKA 751 GBSTMR sli_tmr; \ In segment CODE, align 4, keep-with-next 752 void SLI_On() 753 { \ SLI_On: \ 00000000 10402DE9 PUSH {R4,LR} 754 if(Is_SLI_On) \ 00000004 ........ LDR R4,??DataTable31 ;; S_ICONS \ 00000008 780294E5 LDR R0,[R4, #+632] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0100000A BEQ ??SLI_On_0 755 SLI_SetState(1); \ 00000014 0100A0E3 MOV R0,#+1 \ 00000018 360000EF SWI +54 756 GBS_StartTimerProc(&sli_tmr, IN_TICKS(2) / 20, SLI_Off); \ ??SLI_On_0: \ 0000001C 14209FE5 LDR R2,??SLI_On_1 ;; SLI_Off \ 00000020 1510A0E3 MOV R1,#+21 \ 00000024 8800A0E3 MOV R0,#+136 \ 00000028 640D80E3 ORR R0,R0,#0x1900 \ 0000002C 040080E0 ADD R0,R0,R4 \ 00000030 4D0000EF SWI +77 757 } \ 00000034 1080BDE8 POP {R4,PC} ;; return \ ??SLI_On_1: \ 00000038 ........ DC32 SLI_Off 758 \ In segment CODE, align 4, keep-with-next 759 void SLI_Off() 760 { \ SLI_Off: \ 00000000 00402DE9 PUSH {LR} 761 SLI_SetState(2); \ 00000004 0200A0E3 MOV R0,#+2 \ 00000008 360000EF SWI +54 762 if(total_unread) \ 0000000C ........ LDR R0,??DataTable31 ;; S_ICONS \ 00000010 381390E5 LDR R1,[R0, #+824] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0600000A BEQ ??SLI_Off_0 763 GBS_StartTimerProc(&sli_tmr, IN_TICKS(2) / 20, SLI_On); //26*SLI_time2 \ 0000001C 20209FE5 LDR R2,??SLI_Off_1 ;; SLI_On \ 00000020 1510A0E3 MOV R1,#+21 \ 00000024 8830A0E3 MOV R3,#+136 \ 00000028 643D83E3 ORR R3,R3,#0x1900 \ 0000002C 000083E0 ADD R0,R3,R0 \ 00000030 4D0000EF SWI +77 \ 00000034 0080BDE8 POP {PC} 764 else 765 SLI_SetState(0); \ ??SLI_Off_0: \ 00000038 0000A0E3 MOV R0,#+0 \ 0000003C 360000EF SWI +54 766 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??SLI_Off_1: \ 00000044 ........ DC32 SLI_On 767 \ In segment CODE, align 4, keep-with-next 768 void SLI_check() 769 { 770 if (total_unread) \ SLI_check: \ 00000000 14009FE5 LDR R0,??SLI_check_0 ;; S_ICONS + 824 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0080BD08 POPEQ {PC} 771 SLI_On(); \ 00000014 ........ BL SLI_On 772 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??SLI_check_0: \ 0000001C ........ DC32 S_ICONS + 824 773 \ In segment CODE, align 4, keep-with-next 774 void SLI_Timer() 775 { 776 GBS_StartTimerProc(&sli_tmr, 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 + 6536 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 0610A0E3 MOV R1,#+6 \ 00000010 401F81E3 ORR R1,R1,#0x100 \ 00000014 4D0000EF SWI +77 777 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??SLI_Timer_0: \ 0000001C ........ DC32 SLI_check \ 00000020 ........ DC32 S_ICONS + 6536 778 #endif 779 \ In segment CODE, align 4, keep-with-next 780 void setup_ICONS(void) 781 { \ setup_ICONS: \ 00000000 30402DE9 PUSH {R4,R5,LR} 782 int i=0; \ 00000004 ........ LDR R5,??DataTable34 ;; S_ICONS \ 00000008 0040A0E3 MOV R4,#+0 783 do 784 { 785 if (!S_ICONS[i]) S_ICONS[i]=(int)MakeGlobalString(ICON_PATH,'\\',icons_names[i]); \ ??setup_ICONS_0: \ 0000000C 040195E7 LDR R0,[R5, +R4, LSL #+2] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 0500001A BNE ??setup_ICONS_1 \ 00000018 20009FE5 LDR R0,??setup_ICONS_2 ;; icons_names \ 0000001C 5C10A0E3 MOV R1,#+92 \ 00000020 042190E7 LDR R2,[R0, +R4, LSL #+2] \ 00000024 ........ LDR R0,??DataTable33 ;; ICON_PATH \ 00000028 ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 0000002C 040185E7 STR R0,[R5, +R4, LSL #+2] 786 i++; \ ??setup_ICONS_1: \ 00000030 014084E2 ADD R4,R4,#+1 787 } 788 while(i>2,stop_vibra); \ 0000004C 3610A0E3 MOV R1,#+54 \ 00000050 000000EA B ??start_vibra_2 1067 else 1068 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra); \ ??start_vibra_1: \ 00000054 6C10A0E3 MOV R1,#+108 \ ??start_vibra_2: \ 00000058 4D0000EF SWI +77 1069 } 1070 } \ 0000005C 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra_0: \ 00000060 ........ DC32 stop_vibra 1071 \ In segment CODE, align 4, keep-with-next 1072 void stop_vibra(void) 1073 { \ stop_vibra: \ 00000000 00402DE9 PUSH {LR} 1074 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1075 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable59 ;; S_ICONS \ 00000010 FC1290E5 LDR R1,[R0, #+764] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 FC1280E5 STR R1,[R0, #+764] \ 0000001C 0080BD08 POPEQ {PC} 1076 { 1077 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra_0 ;; start_vibra \ 00000024 A810A0E3 MOV R1,#+168 \ 00000028 681D81E3 ORR R1,R1,#0x1A00 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable51 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra_1 1078 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra_2 1079 else 1080 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra); \ ??stop_vibra_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra_2: \ 0000004C 4D0000EF SWI +77 1081 } 1082 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra_0: \ 00000054 ........ DC32 start_vibra 1083 \ In segment CODE, align 4, keep-with-next 1084 void start_vibra2(void) 1085 { 1086 void stop_vibra2(void); 1087 1088 SetVibration(vibraPower); \ start_vibra2: \ 00000000 ........ LDR R0,??DataTable48 ;; vibraPower \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 7C0000EF SWI +124 1089 if(VIBR_TYPE) \ 00000010 ........ LDR R1,??DataTable51 ;; VIBR_TYPE \ 00000014 18009FE5 LDR R0,??start_vibra2_0 ;; S_ICONS + 6824 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 14209FE5 LDR R2,??start_vibra2_0+0x4 ;; stop_vibra2 \ 00000020 000051E3 CMP R1,#+0 1090 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>2,stop_vibra2); \ 00000024 3610A013 MOVNE R1,#+54 1091 else 1092 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra2); \ 00000028 6C10A003 MOVEQ R1,#+108 \ 0000002C 4D0000EF SWI +77 1093 } \ 00000030 0080BDE8 POP {PC} ;; return \ ??start_vibra2_0: \ 00000034 ........ DC32 S_ICONS + 6824 \ 00000038 ........ DC32 stop_vibra2 1094 \ In segment CODE, align 4, keep-with-next 1095 void stop_vibra2(void) 1096 { \ stop_vibra2: \ 00000000 00402DE9 PUSH {LR} 1097 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1098 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable59 ;; S_ICONS \ 00000010 FC1290E5 LDR R1,[R0, #+764] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 FC1280E5 STR R1,[R0, #+764] \ 0000001C 0080BD08 POPEQ {PC} 1099 { 1100 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra2_0 ;; start_vibra2 \ 00000024 A810A0E3 MOV R1,#+168 \ 00000028 681D81E3 ORR R1,R1,#0x1A00 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable51 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra2_1 1101 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra2); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra2_2 1102 else 1103 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra2); \ ??stop_vibra2_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra2_2: \ 0000004C 4D0000EF SWI +77 1104 } 1105 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra2_0: \ 00000054 ........ DC32 start_vibra2 1106 \ In segment CODE, align 4, keep-with-next 1107 void ChangeVibra(void) 1108 { 1109 if (!(Is_Vibra_Enabled=!(Is_Vibra_Enabled))) \ ChangeVibra: \ 00000000 ........ LDR R0,??DataTable59 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 A01290E5 LDR R1,[R0, #+672] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 1C109FE5 LDR R1,??ChangeVibra_0 ;; `?` \ 00000008 4BDF4DE2 SUB SP,SP,#+300 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ BL FreeTemplates \ 00000014 ........ LDR R1,??DataTable61 ;; 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 1151 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 1152 if ((fsize=stat.size)<=0) goto L1; \ 00000060 08709DE5 LDR R7,[SP, #+8] \ 00000064 010057E3 CMP R7,#+1 \ 00000068 070000BA BLT ??LoadTemplates_1 1153 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 1154 { 1155 L1: 1156 strcpy(fn+i,"\\0.txt"); \ ??LoadTemplates_1: \ 0000008C 081086E2 ADD R1,R6,#+8 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 1A0000EF SWI +26 1157 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 1158 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 1159 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 1160 } 1161 if (f==-1) return 0; \ ??LoadTemplates_2: \ 000000E0 040058E1 CMP R8,R4 \ 000000E4 F1FFFF0A BEQ ??LoadTemplates_4 1162 p=templates_chars=malloc(fsize+1); \ 000000E8 ........ LDR R4,??DataTable59 ;; S_ICONS \ 000000EC 010087E2 ADD R0,R7,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 000384E5 STR R0,[R4, #+768] \ 000000F8 0060A0E1 MOV R6,R0 1163 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] 1164 fclose(f,&ul); \ 00000118 0D10A0E1 MOV R1,SP \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 0D0000EF SWI +13 1165 i=0; \ 00000124 0070A0E3 MOV R7,#+0 1166 pp=p; \ 00000128 0680A0E1 MOV R8,R6 \ 0000012C 020000EA B ??LoadTemplates_6 1167 for(;;) 1168 { 1169 c=*p; 1170 if (c<32) 1171 { 1172 if (pp&&(pp!=p)) 1173 { 1174 templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 1175 templates_lines[i++]=pp; 1176 } 1177 pp=NULL; 1178 if (!c) break; 1179 *p=0; 1180 } 1181 else 1182 { 1183 if (pp==NULL) pp=p; \ ??LoadTemplates_7: \ 00000130 000058E3 CMP R8,#+0 \ 00000134 0680A001 MOVEQ R8,R6 1184 } 1185 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 040394E5 LDR R0,[R4, #+772] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 040384E5 STR R0,[R4, #+772] \ 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 1186 } 1187 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 `?` 1188 } 1189 1190 1191 1192 //---------------------- AUTOBOT MESSAGE -------------------------// 1193 1194 1195 #ifdef kluchnik 1196 char *bot_chars; //Собственно файл 1197 char **bot_lines; //Массив указателей на строки 1198 \ In segment CODE, align 4, keep-with-next 1199 void FreeBotMessage(void) 1200 { \ FreeBotMessage: \ 00000000 10402DE9 PUSH {R4,LR} 1201 if (bot_lines) mfree(bot_lines); \ 00000004 ........ LDR R4,??DataTable59 ;; S_ICONS \ 00000008 0C0394E5 LDR R0,[R4, #+780] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0000000A BEQ ??FreeBotMessage_0 \ 00000014 150000EF SWI +21 1202 if (bot_chars) mfree(bot_chars); \ ??FreeBotMessage_0: \ 00000018 080394E5 LDR R0,[R4, #+776] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0100000A BEQ ??FreeBotMessage_1 \ 00000024 150000EF SWI +21 1203 bot_lines=NULL; \ 00000028 0000A0E3 MOV R0,#+0 \ ??FreeBotMessage_1: \ 0000002C 0C0384E5 STR R0,[R4, #+780] 1204 bot_chars=NULL; \ 00000030 080384E5 STR R0,[R4, #+776] 1205 } \ 00000034 1080BDE8 POP {R4,PC} ;; return 1206 \ In segment CODE, align 4, keep-with-next 1207 int LoadBotMessage(unsigned int uin) 1208 { \ LoadBotMessage: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 1209 FSTATS stat; 1210 char fn[256]; 1211 int f; 1212 unsigned int ul; 1213 int i; 1214 int fsize; 1215 char *p; 1216 char *pp; 1217 int c; 1218 FreeBotMessage(); 1219 strcpy(fn,TEMPLATES_PATH); 1220 i=strlen(fn); 1221 sprintf(fn+i,"\\bot_%d.txt",uin); \ 00000004 7C619FE5 LDR R6,??LoadBotMessage_0 ;; `?` \ 00000008 4BDF4DE2 SUB SP,SP,#+300 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ BL FreeBotMessage \ 00000014 ........ LDR R1,??DataTable61 ;; 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 1222 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 ??LoadBotMessage_1 1223 if ((fsize=stat.size)<=0) goto L1; \ 00000060 08709DE5 LDR R7,[SP, #+8] \ 00000064 010057E3 CMP R7,#+1 \ 00000068 070000BA BLT ??LoadBotMessage_1 1224 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 ??LoadBotMessage_2 1225 { 1226 L1: 1227 strcpy(fn+i,"\\bot.txt"); \ ??LoadBotMessage_1: \ 0000008C 0C1086E2 ADD R1,R6,#+12 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 1A0000EF SWI +26 1228 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 ??LoadBotMessage_3 \ ??LoadBotMessage_4: \ 000000B0 0000A0E3 MOV R0,#+0 \ ??LoadBotMessage_5: \ 000000B4 4BDF8DE2 ADD SP,SP,#+300 ;; stack cleaning \ 000000B8 F087BDE8 POP {R4-R10,PC} ;; return 1229 if ((fsize=stat.size)<=0) return 0; \ ??LoadBotMessage_3: \ 000000BC 08709DE5 LDR R7,[SP, #+8] \ 000000C0 010057E3 CMP R7,#+1 \ 000000C4 F9FFFFBA BLT ??LoadBotMessage_4 1230 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 1231 } 1232 if (f==-1) return 0; \ ??LoadBotMessage_2: \ 000000E0 040058E1 CMP R8,R4 \ 000000E4 F1FFFF0A BEQ ??LoadBotMessage_4 1233 p=bot_chars=malloc(fsize+1); \ 000000E8 ........ LDR R4,??DataTable59 ;; S_ICONS \ 000000EC 010087E2 ADD R0,R7,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 080384E5 STR R0,[R4, #+776] \ 000000F8 0060A0E1 MOV R6,R0 1234 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] 1235 fclose(f,&ul); \ 00000118 0D10A0E1 MOV R1,SP \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 0D0000EF SWI +13 1236 i=0; \ 00000124 0070A0E3 MOV R7,#+0 1237 pp=p; \ 00000128 0680A0E1 MOV R8,R6 \ 0000012C 020000EA B ??LoadBotMessage_6 1238 for(;;) 1239 { 1240 c=*p; 1241 if (c<32) 1242 { 1243 if (pp&&(pp!=p)) 1244 { 1245 bot_lines=realloc(bot_lines,(i+1)*sizeof(char *)); 1246 bot_lines[i++]=pp; 1247 } 1248 pp=NULL; 1249 if (!c) break; 1250 *p=0; 1251 } 1252 else 1253 { 1254 if (pp==NULL) pp=p; \ ??LoadBotMessage_7: \ 00000130 000058E3 CMP R8,#+0 \ 00000134 0680A001 MOVEQ R8,R6 1255 } 1256 p++; \ ??LoadBotMessage_8: \ 00000138 016086E2 ADD R6,R6,#+1 \ ??LoadBotMessage_6: \ 0000013C 0090D6E5 LDRB R9,[R6, #+0] \ 00000140 200059E3 CMP R9,#+32 \ 00000144 F9FFFFAA BGE ??LoadBotMessage_7 \ 00000148 000058E3 CMP R8,#+0 \ 0000014C 06005811 CMPNE R8,R6 \ 00000150 0600000A BEQ ??LoadBotMessage_9 \ 00000154 0C0394E5 LDR R0,[R4, #+780] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 0C0384E5 STR R0,[R4, #+780] \ 00000168 078180E7 STR R8,[R0, +R7, LSL #+2] \ 0000016C 0A70A0E1 MOV R7,R10 \ ??LoadBotMessage_9: \ 00000170 0080A0E3 MOV R8,#+0 \ 00000174 000059E3 CMP R9,#+0 1257 } 1258 return i; \ 00000178 0700A001 MOVEQ R0,R7 \ 0000017C CCFFFF0A BEQ ??LoadBotMessage_5 \ 00000180 0050C6E5 STRB R5,[R6, #+0] \ 00000184 EBFFFFEA B ??LoadBotMessage_8 \ ??LoadBotMessage_0: \ 00000188 ........ DC32 `?` 1259 } 1260 #endif 1261 1262 //=================================================================== 1263 1264 typedef struct 1265 { 1266 CSM_RAM csm; 1267 int gui_id; 1268 }MAIN_CSM; 1269 1270 typedef struct 1271 { 1272 GUI gui; 1273 WSHDR *ws1; 1274 WSHDR *ws2; 1275 int i1; 1276 }MAIN_GUI; 1277 1278 1279 1280 int RXstate=EOP; //-sizeof(RXpkt)..-1 - receive header, 0..RXpkt.data_len - receive data 1281 \ In segment DATA_Z, align 4, align-sorted 1282 TPKT RXbuf; \ RXbuf: \ 00000000 DS8 16392 \ In segment DATA_Z, align 4, align-sorted 1283 TPKT TXbuf; \ TXbuf: \ 00000000 DS8 16392 1284 1285 int connect_state=0; 1286 1287 int sock=-1; 1288 1289 volatile unsigned long TOTALRECEIVED; 1290 volatile unsigned long TOTALSENDED; 1291 volatile unsigned long ALLTOTALRECEIVED; //by BoBa 10.07 1292 volatile unsigned long ALLTOTALSENDED; 1293 1294 volatile int sendq_l=0; //Длинна очереди для send 1295 volatile void *sendq_p=NULL; //указатель очереди 1296 1297 volatile int is_gprs_online=1; 1298 1299 GBSTMR reconnect_tmr; 1300 1301 extern void kill_data(void *p,void (*func_p)(void *)); 1302 \ In segment CODE, align 4, keep-with-next 1303 void ElfKiller(void) 1304 { \ ElfKiller: \ 00000000 00402DE9 PUSH {LR} 1305 extern void *ELF_BEGIN; 1306 kill_data(&ELF_BEGIN,(void (*)(void *))mfree_adr()); \ 00000004 158000EF SWI +32789 \ 00000008 0010A0E1 MOV R1,R0 \ 0000000C 04009FE5 LDR R0,??ElfKiller_0 ;; ELF_BEGIN \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ _BF kill_data,??kill_data??rA ;; tailcall \ ??ElfKiller_0: \ 00000018 ........ DC32 ELF_BEGIN 1307 } 1308 1309 int total_unread; 1310 1311 volatile CLIST *cltop; 1312 1313 volatile unsigned int GROUP_CACHE; //Текущая группа для добавления 1314 1315 volatile int contactlist_menu_id; 1316 1317 GBSTMR tmr_active; 1318 1319 volatile int edchat_id; 1320 1321 //Применяется для добавления сообщений 1322 //CLIST *edcontact; 1323 //void *edgui_data; 1324 1325 static int prev_clmenu_itemcount; 1326 1327 char clm_hdr_text[64]; 1328 static const char def_clm_hdr_text[] = LG_CLTITLE; 1329 static const char key_clm_hdr_text[] = LG_CLT9INP; 1330 #ifdef kluchnik 1331 int ICON_HD; 1332 static const HEADER_DESC contactlist_menuhdr = {0, 0, 0, 0, S_ICONS+IS_NULLICON, (int)clm_hdr_text, LGP_NULL}; 1333 #else 1334 static const HEADER_DESC contactlist_menuhdr = {0, 0, 0, 0, S_ICONS+ICON_HEAD, (int)clm_hdr_text, LGP_NULL}; 1335 #endif 1336 1337 static const int menusoftkeys[] = {0,1,2}; 1338 static const SOFTKEY_DESC menu_sk[] = 1339 { 1340 {0x0018, 0x0000, (int)LG_SELECT}, 1341 {0x0001, 0x0000, (int)LG_CLOSE}, 1342 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 1343 }; 1344 1345 char clmenu_sk_r[16]; 1346 static const char def_clmenu_sk_r[] = LG_CLOSE; 1347 static const char key_clmenu_sk_r[] = LG_CLEAR; 1348 1349 static const SOFTKEY_DESC clmenu_sk[]= 1350 { 1351 {0x0018, 0x0000, (int)LG_OPTIONS}, 1352 {0x0001, 0x0000, (int)clmenu_sk_r}, 1353 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 1354 }; 1355 1356 const SOFTKEYSTAB menu_skt = 1357 { 1358 menu_sk, 0 1359 }; 1360 1361 static const SOFTKEYSTAB clmenu_skt = 1362 { 1363 clmenu_sk, 0 1364 }; 1365 1366 void contactlist_menu_ghook(void *data, int cmd); 1367 int contactlist_menu_onkey(void *data, GUI_MSG *msg); 1368 void contactlist_menu_iconhndl(void *data, int curitem, void *unk); 1369 1370 #ifdef USE_MLMENU 1371 static const ML_MENU_DESC contactlist_menu= 1372 { 1373 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 1374 menusoftkeys, 1375 &clmenu_skt, 1376 0x11, //+0x400 1377 contactlist_menu_iconhndl, 1378 NULL, //Items 1379 NULL, //Procs 1380 0, //n 1381 1 //Добавочных строк 1382 }; 1383 #else 1384 static const MENU_DESC contactlist_menu= 1385 { 1386 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 1387 menusoftkeys, 1388 &clmenu_skt, 1389 0x11, //+0x400 1390 contactlist_menu_iconhndl, 1391 NULL, //Items 1392 NULL, //Procs 1393 0 //n 1394 }; 1395 #endif 1396 1397 //GBSTMR tmr_ping; 1398 int tenseconds_to_ping; 1399 \ In segment CODE, align 4, keep-with-next 1400 LOGQ *NewLOGQ(const char *s) 1401 { \ NewLOGQ: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1402 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 1403 zeromem(p,sizeof(LOGQ)); \ 00000018 6010A0E3 MOV R1,#+96 \ 0000001C 1D0100EF SWI +285 1404 strcpy(p->text,s); \ 00000020 0410A0E1 MOV R1,R4 \ 00000024 600085E2 ADD R0,R5,#+96 \ 00000028 1A0000EF SWI +26 1405 return p; \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 3080BDE8 POP {R4,R5,PC} ;; return 1406 } 1407 \ In segment CODE, align 4, keep-with-next 1408 LOGQ *LastLOGQ(LOGQ **pp) 1409 { 1410 LOGQ *q=*pp; \ LastLOGQ: \ 00000000 000090E5 LDR R0,[R0, #+0] 1411 if (q) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 1EFF2F01 BXEQ LR \ 0000000C 000000EA B ??LastLOGQ_0 1412 { 1413 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 1414 } 1415 return(q); \ 00000020 1EFF2FE1 BX LR ;; return 1416 } 1417 1418 //Уничтожить лог \ In segment CODE, align 4, keep-with-next 1419 void FreeLOGQ(LOGQ **pp) 1420 { \ FreeLOGQ: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0010A0E1 MOV R1,R0 1421 LOGQ *p=*pp; \ 00000008 000091E5 LDR R0,[R1, #+0] 1422 *pp=NULL; //Сразу обрежем \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 002081E5 STR R2,[R1, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 1080BD08 POPEQ {R4,PC} 1423 while(p) 1424 { 1425 LOGQ *np=p->next; \ ??FreeLOGQ_0: \ 0000001C 004090E5 LDR R4,[R0, #+0] 1426 mfree(p); \ 00000020 150000EF SWI +21 1427 p=np; \ 00000024 0400B0E1 MOVS R0,R4 1428 } \ 00000028 FBFFFF1A BNE ??FreeLOGQ_0 1429 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 1430 1431 //Удалить элемент из лога \ In segment CODE, align 4, keep-with-next 1432 void RemoveLOGQ(LOGQ **queue, LOGQ *p) 1433 { \ RemoveLOGQ: \ 00000000 00402DE9 PUSH {LR} 1434 LOGQ *q=(LOGQ *)queue; \ 00000004 000000EA B ??RemoveLOGQ_0 1435 LOGQ *qp; 1436 while(qp=q->next) 1437 { 1438 if (qp==p) 1439 { 1440 q->next=p->next; 1441 break; 1442 } 1443 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] 1444 } 1445 mfree(p); //Если элемент вообще не в логе \ ??RemoveLOGQ_2: \ 00000028 0100A0E1 MOV R0,R1 \ 0000002C 150000EF SWI +21 1446 } \ 00000030 0080BDE8 POP {PC} ;; return 1447 1448 //Добавить элемент в лог \ In segment CODE, align 4, keep-with-next 1449 int AddLOGQ(LOGQ **queue, LOGQ *p) 1450 { 1451 LOGQ *q=(LOGQ *)queue; 1452 LOGQ *qp; 1453 int i=0; \ AddLOGQ: \ 00000000 0020A0E3 MOV R2,#+0 \ 00000004 000000EA B ??AddLOGQ_0 1454 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 1455 p->next=NULL; \ 0000001C 003081E5 STR R3,[R1, #+0] 1456 q->next=p; \ 00000020 001080E5 STR R1,[R0, #+0] 1457 return(i+1); //Теперь всего в логе элементов \ 00000024 0200A0E1 MOV R0,R2 \ 00000028 1EFF2FE1 BX LR ;; return 1458 } 1459 \ In segment CODE, align 4, keep-with-next 1460 char *GetLastXTextLOGQ(CLIST *t) 1461 { 1462 LOGQ *p = t->log; \ GetLastXTextLOGQ: \ 00000000 9C1090E5 LDR R1,[R0, #+156] 1463 char *s = 0; \ 00000004 0000A0E3 MOV R0,#+0 1464 if(!p) return 0; \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 0500001A BNE ??GetLastXTextLOGQ_0 \ 00000010 1EFF2FE1 BX LR 1465 while(p->next) 1466 { 1467 if((p->type&0x0F)==3) \ ??GetLastXTextLOGQ_1: \ 00000014 0C3091E5 LDR R3,[R1, #+12] \ 00000018 0F3003E2 AND R3,R3,#0xF \ 0000001C 030053E3 CMP R3,#+3 1468 s = p->text; \ 00000020 60008102 ADDEQ R0,R1,#+96 1469 p = p->next; \ 00000024 0210A0E1 MOV R1,R2 1470 } \ ??GetLastXTextLOGQ_0: \ 00000028 002091E5 LDR R2,[R1, #+0] \ 0000002C 000052E3 CMP R2,#+0 \ 00000030 F7FFFF1A BNE ??GetLastXTextLOGQ_1 1471 if((p->type&0x0F)==3) \ 00000034 0C2091E5 LDR R2,[R1, #+12] \ 00000038 0F2002E2 AND R2,R2,#0xF \ 0000003C 030052E3 CMP R2,#+3 1472 s = p->text; \ 00000040 60008102 ADDEQ R0,R1,#+96 1473 return s; \ 00000044 1EFF2FE1 BX LR ;; return 1474 } 1475 \ In segment CODE, align 4, keep-with-next 1476 int GetIconIndex(CLIST *t) 1477 { 1478 unsigned short s; 1479 if (t) \ GetIconIndex: \ 00000000 000050E3 CMP R0,#+0 \ 00000004 3400000A BEQ ??GetIconIndex_0 1480 { 1481 s=t->state; 1482 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 1483 if (t->isunread) \ 0000001C 8C0090E5 LDR R0,[R0, #+140] \ 00000020 000050E3 CMP R0,#+0 1484 return(IS_MSG); \ 00000024 0D00A013 MOVNE R0,#+13 \ 00000028 1EFF2F11 BXNE LR 1485 else 1486 { 1487 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 1488 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 1489 if ((s&0xF000)==0x3000) return (IS_EVIL); \ 0000004C C00D52E3 CMP R2,#+12288 \ 00000050 0700A003 MOVEQ R0,#+7 \ 00000054 1EFF2F01 BXEQ LR 1490 if ((s&0xF000)==0x4000) return (IS_DEPRESSION); \ 00000058 400C52E3 CMP R2,#+16384 \ 0000005C 0600A003 MOVEQ R0,#+6 \ 00000060 1EFF2F01 BXEQ LR 1491 if ((s&0xF000)==0x5000) return (IS_HOME); \ 00000064 500C52E3 CMP R2,#+20480 \ 00000068 0800A003 MOVEQ R0,#+8 \ 0000006C 1EFF2F01 BXEQ LR 1492 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 1493 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 1494 if (s & 0x0001) return(IS_AWAY); \ ??GetIconIndex_1: \ 00000090 010011E3 TST R1,#0x1 \ 00000094 0200A013 MOVNE R0,#+2 \ 00000098 1EFF2F11 BXNE LR 1495 if (s & 0x0005) return(IS_NA); \ 0000009C 050011E3 TST R1,#0x5 \ 000000A0 0300A013 MOVNE R0,#+3 \ 000000A4 1EFF2F11 BXNE LR 1496 if (s & 0x0011) return(IS_OCCUPIED); \ 000000A8 110011E3 TST R1,#0x11 \ 000000AC 0400A013 MOVNE R0,#+4 \ 000000B0 1EFF2F11 BXNE LR 1497 if (s & 0x0013) return(IS_DND); \ 000000B4 130011E3 TST R1,#0x13 \ 000000B8 0500A013 MOVNE R0,#+5 \ 000000BC 1EFF2F11 BXNE LR 1498 if (s & 0x0002) return(IS_FFC); \ 000000C0 020011E3 TST R1,#0x2 \ 000000C4 EFFFFF1A BNE ??GetIconIndex_2 1499 if (s & 0x0100) return(IS_INVISIBLE); \ 000000C8 400F11E3 TST R1,#0x100 \ 000000CC 0100A013 MOVNE R0,#+1 \ 000000D0 1EFF2F11 BXNE LR 1500 } 1501 } 1502 else 1503 { 1504 return(IS_UNKNOWN); 1505 } 1506 return(IS_ONLINE); \ 000000D4 0B00A0E3 MOV R0,#+11 \ 000000D8 1EFF2FE1 BX LR \ ??GetIconIndex_0: \ 000000DC 0E00A0E3 MOV R0,#+14 \ 000000E0 1EFF2FE1 BX LR ;; return 1507 } 1508 \ In segment CODE, align 4, keep-with-next 1509 LOGQ *FindContactLOGQByAck(TPKT *p) 1510 { \ FindContactLOGQByAck: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1511 CLIST *t; 1512 LockSched(); \ 00000008 460100EF SWI +326 1513 t=FindContactByUin(p->pkt.uin); \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000014 0050A0E1 MOV R5,R0 1514 UnlockSched(); \ 00000018 470100EF SWI +327 1515 unsigned int id=*((unsigned short*)(p->data)); \ 0000001C B840D4E1 LDRH R4,[R4, #+8] 1516 LOGQ *q; 1517 if (!t) return NULL; \ 00000020 000055E3 CMP R5,#+0 \ 00000024 0000A003 MOVEQ R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 1518 LockSched(); \ 0000002C 460100EF SWI +326 1519 q=t->log; \ 00000030 9C5095E5 LDR R5,[R5, #+156] \ 00000034 000000EA B ??FindContactLOGQByAck_0 1520 while(q) 1521 { 1522 if (q->ID==id) break; 1523 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 1524 } 1525 UnlockSched(); \ 0000004C 470100EF SWI +327 1526 return q; \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 3080BDE8 POP {R4,R5,PC} ;; return 1527 } 1528 1529 1530 1531 1532 /*----------------------------- SAVE CONTACT LIST TO FILE --------------------------------*/ 1533 \ In segment CODE, align 4, keep-with-next 1534 void CreateCLFile(void) 1535 { \ CreateCLFile: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 42DF4DE2 SUB SP,SP,#+264 1536 CLIST *t; 1537 t=(CLIST *)(&cltop); \ 00000008 ........ LDR R5,??DataTable60 ;; S_ICONS + 828 1538 char *s=malloc(128); 1539 volatile int hFile_cl; 1540 unsigned int io_error_cl = 0; 1541 char fn[256]; 1542 strcpy(fn,TEMPLATES_PATH); 1543 strcat(fn,"\\local.cl"); \ 0000000C D4609FE5 LDR R6,??CreateCLFile_0 ;; `?` \ 00000010 8000A0E3 MOV R0,#+128 \ 00000014 140000EF SWI +20 \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C 00108DE5 STR R1,[SP, #+0] \ 00000020 ........ LDR R1,??DataTable61 ;; TEMPLATES_PATH \ 00000024 0040A0E1 MOV R4,R0 \ 00000028 08008DE2 ADD R0,SP,#+8 \ 0000002C 1A0000EF SWI +26 \ 00000030 0610A0E1 MOV R1,R6 \ 00000034 08008DE2 ADD R0,SP,#+8 \ 00000038 170000EF SWI +23 1544 unlink(fn,&io_error_cl); \ 0000003C 0D10A0E1 MOV R1,SP \ 00000040 08008DE2 ADD R0,SP,#+8 \ 00000044 6B0100EF SWI +363 1545 hFile_cl = fopen(fn,A_ReadWrite + A_Create + A_Append + A_BIN,P_READ+P_WRITE, &io_error_cl); \ 00000048 0D30A0E1 MOV R3,SP \ 0000004C 602FA0E3 MOV R2,#+384 \ 00000050 0A10A0E3 MOV R1,#+10 \ 00000054 811C81E3 ORR R1,R1,#0x8100 \ 00000058 08008DE2 ADD R0,SP,#+8 \ 0000005C 0A0000EF SWI +10 \ 00000060 04008DE5 STR R0,[SP, #+4] 1546 if(hFile_cl!=-1) \ 00000064 04009DE5 LDR R0,[SP, #+4] \ 00000068 010070E3 CMN R0,#+1 \ 0000006C 1800001A BNE ??CreateCLFile_1 1547 { 1548 while(t=(CLIST *)(t->next)) 1549 { 1550 if(!t->isgroup) 1551 { 1552 sprintf(s, ";%d;%s;;;\r\n", t->uin, t->name); 1553 fwrite(hFile_cl, s, strlen(s), &io_error_cl); 1554 } 1555 } 1556 ShowMSG(2,(int)"Saved local.cl"); 1557 } 1558 else ShowMSG(2,(int)"Can't save local.cl"); \ 00000070 281086E2 ADD R1,R6,#+40 \ ??CreateCLFile_2: \ 00000074 0200A0E3 MOV R0,#+2 \ 00000078 480100EF SWI +328 1559 fclose(hFile_cl, &io_error_cl); \ 0000007C 04009DE5 LDR R0,[SP, #+4] \ 00000080 0D10A0E1 MOV R1,SP \ 00000084 0D0000EF SWI +13 1560 mfree(s); \ 00000088 0400A0E1 MOV R0,R4 \ 0000008C 150000EF SWI +21 1561 } \ 00000090 42DF8DE2 ADD SP,SP,#+264 \ 00000094 7080BDE8 POP {R4-R6,PC} ;; return \ ??CreateCLFile_3: \ 00000098 080095E5 LDR R0,[R5, #+8] \ 0000009C 000050E3 CMP R0,#+0 \ 000000A0 0B00001A BNE ??CreateCLFile_1 \ 000000A4 0C2095E5 LDR R2,[R5, #+12] \ 000000A8 143085E2 ADD R3,R5,#+20 \ 000000AC 0C1086E2 ADD R1,R6,#+12 \ 000000B0 0400A0E1 MOV R0,R4 \ 000000B4 160000EF SWI +22 \ 000000B8 0400A0E1 MOV R0,R4 \ 000000BC 1B0000EF SWI +27 \ 000000C0 0D30A0E1 MOV R3,SP \ 000000C4 0020A0E1 MOV R2,R0 \ 000000C8 04009DE5 LDR R0,[SP, #+4] \ 000000CC 0410A0E1 MOV R1,R4 \ 000000D0 0C0000EF SWI +12 \ ??CreateCLFile_1: \ 000000D4 005095E5 LDR R5,[R5, #+0] \ 000000D8 000055E3 CMP R5,#+0 \ 000000DC EDFFFF1A BNE ??CreateCLFile_3 \ 000000E0 181086E2 ADD R1,R6,#+24 \ 000000E4 E2FFFFEA B ??CreateCLFile_2 \ ??CreateCLFile_0: \ 000000E8 ........ DC32 `?` 1562 1563 /*-----------------------------------------------------------------------------------------*/ 1564 1565 char on_off_buf[128]; 1566 int on_off_timer=0; 1567 char ContactT9Key[32]; 1568 int kopa_online; 1569 int kopa_kontaktu; 1570 char status[64]; 1571 1572 #define nmeth 24 1573 1574 void * gui_methods2[nmeth]; 1575 void * old_redraw; 1576 1577 typedef void (*tredraw)(void *data); 1578 char prozr[]={0x00,0x00,0x00,0x64}; \ In segment CODE, align 4, keep-with-next 1579 void new_redraw(void *data) 1580 { \ new_redraw: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1581 ((tredraw)old_redraw)(data); \ 00000004 ........ LDR R4,??DataTable62 ;; S_ICONS \ 00000008 40D04DE2 SUB SP,SP,#+64 \ 0000000C C41394E5 LDR R1,[R4, #+964] \ 00000010 31FF2FE1 BLX R1 1582 char s[64]; 1583 sprintf(s,"%s\\HEAD.png",ICON_PATH); \ 00000014 ........ LDR R2,??DataTable63 ;; ICON_PATH \ 00000018 C8109FE5 LDR R1,??new_redraw_1 ;; `?` \ 0000001C 0D00A0E1 MOV R0,SP \ 00000020 160000EF SWI +22 1584 int x=GetImgWidth((int)s); \ 00000024 0D00A0E1 MOV R0,SP \ 00000028 220000EF SWI +34 \ 0000002C 0050A0E1 MOV R5,R0 1585 /*#ifdef ELKA 1586 #else 1587 DrawRectangle(0,YDISP,ScreenW()-1,ScreenH()-1,0,prozr,prozr); 1588 #endif*/ 1589 PrintText(x+7,YDISP+2,status,0,fonto,1,1,0,0,ScreenW()-x); \ 00000030 888100EF SWI +33160 \ 00000034 050040E0 SUB R0,R0,R5 \ 00000038 01002DE9 PUSH {R0} \ 0000003C 0030A0E3 MOV R3,#+0 \ 00000040 1A10A0E3 MOV R1,#+26 \ 00000044 0000A0E3 MOV R0,#+0 \ 00000048 01002DE9 PUSH {R0} \ 0000004C 01002DE9 PUSH {R0} \ 00000050 0100A0E3 MOV R0,#+1 \ 00000054 01002DE9 PUSH {R0} \ 00000058 01002DE9 PUSH {R0} \ 0000005C ........ LDR R0,??DataTable64 ;; fonto \ 00000060 000090E5 LDR R0,[R0, #+0] \ 00000064 01002DE9 PUSH {R0} \ 00000068 A800A0E3 MOV R0,#+168 \ 0000006C 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000070 042080E0 ADD R2,R0,R4 \ 00000074 070085E2 ADD R0,R5,#+7 \ 00000078 ........ _BLF PrintText,??PrintText??rA 1590 #ifdef kluchnik 1591 switch(CurrentPrivateStatus) \ 0000007C F80294E5 LDR R0,[R4, #+760] \ 00000080 18D08DE2 ADD SP,SP,#+24 \ 00000084 040050E3 CMP R0,#+4 \ 00000088 0E00008A BHI ??new_redraw_2 \ 0000008C 011F8FE2 ADR R1,??new_redraw_0 \ 00000090 0010D1E7 LDRB R1,[R1, R0] \ 00000094 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??new_redraw_0: \ 00000098 01030507 DC8 +1,+3,+5,+7 \ 0000009C 09000000 DC8 +9,+0,+0,+0 1592 { 1593 case 0: ICON_HD=ICON_ALL_CAN_SEE; break; \ ??new_redraw_3: \ 000000A0 1700A0E3 MOV R0,#+23 \ 000000A4 080000EA B ??new_redraw_4 1594 case 1: ICON_HD=ICON_NOBODY_CAN_SEE; break; \ ??new_redraw_5: \ 000000A8 1B00A0E3 MOV R0,#+27 \ 000000AC 060000EA B ??new_redraw_4 1595 case 2: ICON_HD=ICON_VISLIST_CAN_SEE; break; \ ??new_redraw_6: \ 000000B0 1800A0E3 MOV R0,#+24 \ 000000B4 040000EA B ??new_redraw_4 1596 case 3: ICON_HD=ICON_INVISLIST_CANNOT_SEE; break; \ ??new_redraw_7: \ 000000B8 1900A0E3 MOV R0,#+25 \ 000000BC 020000EA B ??new_redraw_4 1597 case 4: ICON_HD=ICON_CONTACTLIST_CAN_SEE; break; \ ??new_redraw_8: \ 000000C0 1A00A0E3 MOV R0,#+26 \ 000000C4 000000EA B ??new_redraw_4 1598 default : ICON_HD=ICON_HEAD; break; \ ??new_redraw_2: \ 000000C8 1300A0E3 MOV R0,#+19 \ ??new_redraw_4: \ 000000CC 500384E5 STR R0,[R4, #+848] 1599 } 1600 int icon; 1601 icon=*(S_ICONS+ICON_HD); 1602 DrawImg(3,YDISP+3,icon); \ 000000D0 002194E7 LDR R2,[R4, +R0, LSL #+2] \ 000000D4 1B10A0E3 MOV R1,#+27 \ 000000D8 0300A0E3 MOV R0,#+3 \ 000000DC 230000EF SWI +35 1603 #endif 1604 } \ 000000E0 40D08DE2 ADD SP,SP,#+64 \ 000000E4 3080BDE8 POP {R4,R5,PC} ;; return \ ??new_redraw_1: \ 000000E8 ........ DC32 `?` 1605 1606 /* 1607 void (*old_ed_redraw)(void *data); 1608 void my_ed_redraw2(void *data) 1609 { 1610 void *gui; 1611 char s[128]; 1612 sprintf(s,"%s\\HEAD.png",ICON_PATH); 1613 int x=GetImgWidth((int)s); 1614 if (old_ed_redraw) old_ed_redraw(data); 1615 gui=FindGUIbyId(contactlist_menu_id,NULL); 1616 if (gui) 1617 { 1618 ClearScreen(); 1619 // canvasdata=BuildCanvas(); 1620 PrintText(x+7,YDISP+2,status,0,fonto,1,1,0,0,ScreenW()-x); 1621 switch(CurrentPrivateStatus) 1622 { 1623 case 0: ICON_HD=ICON_ALL_CAN_SEE; break; 1624 case 1: ICON_HD=ICON_NOBODY_CAN_SEE; break; 1625 case 2: ICON_HD=ICON_VISLIST_CAN_SEE; break; 1626 case 3: ICON_HD=ICON_INVISLIST_CANNOT_SEE; break; 1627 case 4: ICON_HD=ICON_CONTACTLIST_CAN_SEE; break; 1628 default : ICON_HD=ICON_HEAD; break; 1629 } 1630 int icon, width; 1631 #ifdef NEWSGOLD 1632 icon=*(S_ICONS+ICON_HD); 1633 ((HEADER_DESC *)&contactlist_menuhdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); 1634 DrawImg(ScreenW()-1-width,1,icon); 1635 #else 1636 icon=*(S_ICONS+ICON_HD); 1637 width=GetImgWidth(icon); 1638 DrawImg(2,((HeaderH()-width)>>1)+YDISP,icon); 1639 #endif 1640 1641 } 1642 }*/ 1643 \ In segment CODE, align 4, keep-with-next 1644 void UpdateCLheader(void) 1645 { \ UpdateCLheader: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 1646 if (strlen(ContactT9Key)) \ 00000004 ........ LDR R7,??DataTable89 ;; S_ICONS \ 00000008 ........ LDR R6,??DataTable88 ;; `?` \ 0000000C 84D04DE2 SUB SP,SP,#+132 \ 00000010 1810A0E3 MOV R1,#+24 \ 00000014 6C1D81E3 ORR R1,R1,#0x1B00 \ 00000018 071081E0 ADD R1,R1,R7 \ 0000001C 0C108DE5 STR R1,[SP, #+12] \ 00000020 D800A0E3 MOV R0,#+216 \ 00000024 680D80E3 ORR R0,R0,#0x1A00 \ 00000028 074080E0 ADD R4,R0,R7 \ 0000002C D00080E2 ADD R0,R0,#+208 \ 00000030 075080E0 ADD R5,R0,R7 \ 00000034 558EA0E3 MOV R8,#+1360 \ 00000038 070088E0 ADD R0,R8,R7 \ 0000003C 1B0000EF SWI +27 \ 00000040 000050E3 CMP R0,#+0 \ 00000044 0B00000A BEQ ??UpdateCLheader_1 1647 { 1648 zeromem(status,64); \ 00000048 4010A0E3 MOV R1,#+64 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 1D0100EF SWI +285 1649 strcpy(clm_hdr_text,key_clm_hdr_text); \ 00000054 340048E2 SUB R0,R8,#+52 \ 00000058 061080E0 ADD R1,R0,R6 \ 0000005C 0400A0E1 MOV R0,R4 \ 00000060 1A0000EF SWI +26 1650 strcat(clm_hdr_text,ContactT9Key); \ 00000064 071088E0 ADD R1,R8,R7 \ 00000068 0400A0E1 MOV R0,R4 \ 0000006C 170000EF SWI +23 1651 strcpy(clmenu_sk_r,key_clmenu_sk_r); \ 00000070 3E1086E2 ADD R1,R6,#+62 \ 00000074 2E0100EA B ??UpdateCLheader_2 1652 } 1653 else 1654 { 1655 TTime the; 1656 GetDateTime(NULL,&the); \ ??UpdateCLheader_1: \ 00000078 04108DE2 ADD R1,SP,#+4 \ 0000007C B40000EF SWI +180 1657 char t[64]; 1658 char s[32]; 1659 void Get_Online_total(); 1660 Get_Online_total(); \ 00000080 ........ BL Get_Online_total 1661 zeromem(clm_hdr_text,64); \ 00000084 4010A0E3 MOV R1,#+64 \ 00000088 0400A0E1 MOV R0,R4 \ 0000008C 1D0100EF SWI +285 1662 zeromem(status,64); \ 00000090 4010A0E3 MOV R1,#+64 \ 00000094 0500A0E1 MOV R0,R5 \ 00000098 1D0100EF SWI +285 1663 switch(TIME_OR_MSG) \ 0000009C ........ LDR R1,??DataTable72 ;; TIME_OR_MSG \ 000000A0 510EA0E3 MOV R0,#+1296 \ 000000A4 001091E5 LDR R1,[R1, #+0] \ 000000A8 AD8F8FE2 ADR R8,??UpdateCLheader_3 ;; "[R]" \ 000000AC AD9F8FE2 ADR R9,??UpdateCLheader_3+0x4 ;; "[S]" \ 000000B0 ADAF8FE2 ADR R10,??UpdateCLheader_3+0x8 ;; "[V]" \ 000000B4 ADBF8FE2 ADR R11,??UpdateCLheader_3+0xC ;; "[I]" \ 000000B8 040051E3 CMP R1,#+4 \ 000000BC 1501008A BHI ??UpdateCLheader_4 \ 000000C0 022F8FE2 ADR R2,??UpdateCLheader_0 \ 000000C4 8110A0E1 MOV R1,R1, LSL #+1 \ 000000C8 B12092E1 LDRH R2,[R2, R1] \ 000000CC 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??UpdateCLheader_0: \ 000000D0 02000B001100 DC16 +2,+11,+17,+24 \ 1800 \ 000000D8 8E000000 DC16 +142,+0 1664 { 1665 case 0: 1666 sprintf(clm_hdr_text, "%s(%02d:%02d)",def_clm_hdr_text,the.hour,the.min); \ ??UpdateCLheader_5: \ 000000DC 0510DDE5 LDRB R1,[SP, #+5] \ 000000E0 062080E0 ADD R2,R0,R6 \ 000000E4 02002DE9 PUSH {R1} \ 000000E8 0830DDE5 LDRB R3,[SP, #+8] \ 000000EC 441086E2 ADD R1,R6,#+68 \ ??UpdateCLheader_6: \ 000000F0 0400A0E1 MOV R0,R4 \ ??UpdateCLheader_7: \ 000000F4 160000EF SWI +22 \ 000000F8 04D08DE2 ADD SP,SP,#+4 \ 000000FC 090100EA B ??UpdateCLheader_8 1667 break; 1668 case 1: 1669 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,total_unread,total_unread2); \ ??UpdateCLheader_9: \ 00000100 8C1297E5 LDR R1,[R7, #+652] \ 00000104 062080E0 ADD R2,R0,R6 \ 00000108 02002DE9 PUSH {R1} \ 0000010C 383397E5 LDR R3,[R7, #+824] \ 00000110 541086E2 ADD R1,R6,#+84 \ 00000114 F5FFFFEA B ??UpdateCLheader_6 1670 break; 1671 case 2: 1672 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,kopa_kontaktu,kopa_online); \ ??UpdateCLheader_10: \ 00000118 5C1397E5 LDR R1,[R7, #+860] \ 0000011C 062080E0 ADD R2,R0,R6 \ 00000120 02002DE9 PUSH {R1} \ 00000124 603397E5 LDR R3,[R7, #+864] \ 00000128 0400A0E1 MOV R0,R4 \ 0000012C 541086E2 ADD R1,R6,#+84 \ 00000130 EFFFFFEA B ??UpdateCLheader_7 \ ??UpdateCLheader_11: \ 00000134 0C049FE5 LDR R0,??UpdateCLheader_12+0x4 ;; isShowTime \ 00000138 000090E5 LDR R0,[R0, #+0] \ 0000013C 000050E3 CMP R0,#+0 \ 00000140 0700000A BEQ ??UpdateCLheader_13 1673 break; 1674 case 3: 1675 { 1676 if(isShowTime) { sprintf(t,"[%02d:%02d]",the.hour,the.min); strcat(status,t); } \ 00000144 0530DDE5 LDRB R3,[SP, #+5] \ 00000148 0420DDE5 LDRB R2,[SP, #+4] \ 0000014C 601086E2 ADD R1,R6,#+96 \ 00000150 18008DE2 ADD R0,SP,#+24 \ 00000154 160000EF SWI +22 \ 00000158 18108DE2 ADD R1,SP,#+24 \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 170000EF SWI +23 1677 if(isShowCont) { sprintf(s,"[%d/%d]",kopa_kontaktu,kopa_online); strcat(clm_hdr_text,s); } \ ??UpdateCLheader_13: \ 00000164 E0039FE5 LDR R0,??UpdateCLheader_12+0x8 ;; isShowCont \ 00000168 000090E5 LDR R0,[R0, #+0] \ 0000016C 000050E3 CMP R0,#+0 \ 00000170 0700000A BEQ ??UpdateCLheader_14 \ 00000174 5C3397E5 LDR R3,[R7, #+860] \ 00000178 602397E5 LDR R2,[R7, #+864] \ 0000017C 6C1086E2 ADD R1,R6,#+108 \ 00000180 58008DE2 ADD R0,SP,#+88 \ 00000184 160000EF SWI +22 \ 00000188 58108DE2 ADD R1,SP,#+88 \ 0000018C 0400A0E1 MOV R0,R4 \ 00000190 170000EF SWI +23 1678 if(isShowUnread) { sprintf(s,"[%d/%d]",total_unread,total_unread2); strcat(clm_hdr_text,s); } \ ??UpdateCLheader_14: \ 00000194 B4039FE5 LDR R0,??UpdateCLheader_12+0xC ;; isShowUnread \ 00000198 000090E5 LDR R0,[R0, #+0] \ 0000019C 000050E3 CMP R0,#+0 \ 000001A0 0700000A BEQ ??UpdateCLheader_15 \ 000001A4 8C3297E5 LDR R3,[R7, #+652] \ 000001A8 382397E5 LDR R2,[R7, #+824] \ 000001AC 6C1086E2 ADD R1,R6,#+108 \ 000001B0 58008DE2 ADD R0,SP,#+88 \ 000001B4 160000EF SWI +22 \ 000001B8 58108DE2 ADD R1,SP,#+88 \ 000001BC 0400A0E1 MOV R0,R4 \ 000001C0 170000EF SWI +23 1679 if(isShowTime) strcat(clm_hdr_text,t); \ ??UpdateCLheader_15: \ 000001C4 7C039FE5 LDR R0,??UpdateCLheader_12+0x4 ;; isShowTime \ 000001C8 000090E5 LDR R0,[R0, #+0] \ 000001CC 000050E3 CMP R0,#+0 \ 000001D0 0200000A BEQ ??UpdateCLheader_16 \ 000001D4 18108DE2 ADD R1,SP,#+24 \ 000001D8 0400A0E1 MOV R0,R4 \ 000001DC 170000EF SWI +23 1680 if(away_m && isShowA) strcat(clm_hdr_text,"[A]"); \ ??UpdateCLheader_16: \ 000001E0 BC0297E5 LDR R0,[R7, #+700] \ 000001E4 000050E3 CMP R0,#+0 \ 000001E8 0600000A BEQ ??UpdateCLheader_17 \ 000001EC 60039FE5 LDR R0,??UpdateCLheader_12+0x10 ;; isShowA \ 000001F0 000090E5 LDR R0,[R0, #+0] \ 000001F4 000050E3 CMP R0,#+0 \ 000001F8 0200000A BEQ ??UpdateCLheader_17 \ 000001FC D01F8FE2 ADR R1,??UpdateCLheader_12 ;; "[A]" \ 00000200 0400A0E1 MOV R0,R4 \ 00000204 170000EF SWI +23 1681 if(CurrentPrivateStatus==1 && isShowI) strcat(clm_hdr_text,"[I]") ; \ ??UpdateCLheader_17: \ 00000208 F80297E5 LDR R0,[R7, #+760] \ 0000020C 010050E3 CMP R0,#+1 \ 00000210 0600001A BNE ??UpdateCLheader_18 \ 00000214 3C039FE5 LDR R0,??UpdateCLheader_12+0x14 ;; isShowI \ 00000218 000090E5 LDR R0,[R0, #+0] \ 0000021C 000050E3 CMP R0,#+0 \ 00000220 0200000A BEQ ??UpdateCLheader_18 \ 00000224 0B10A0E1 MOV R1,R11 \ 00000228 0400A0E1 MOV R0,R4 \ 0000022C 170000EF SWI +23 1682 if(Is_Vibra_Enabled && isShowV) strcat(clm_hdr_text,"[V]") ; \ ??UpdateCLheader_18: \ 00000230 A00297E5 LDR R0,[R7, #+672] \ 00000234 000050E3 CMP R0,#+0 \ 00000238 0600000A BEQ ??UpdateCLheader_19 \ 0000023C 18039FE5 LDR R0,??UpdateCLheader_12+0x18 ;; isShowV \ 00000240 000090E5 LDR R0,[R0, #+0] \ 00000244 000050E3 CMP R0,#+0 \ 00000248 0200000A BEQ ??UpdateCLheader_19 \ 0000024C 0A10A0E1 MOV R1,R10 \ 00000250 0400A0E1 MOV R0,R4 \ 00000254 170000EF SWI +23 1683 if(Is_Sounds_Enabled && isShowS) strcat(clm_hdr_text,"[S]") ; \ ??UpdateCLheader_19: \ 00000258 EC0297E5 LDR R0,[R7, #+748] \ 0000025C 000050E3 CMP R0,#+0 \ 00000260 0600000A BEQ ??UpdateCLheader_20 \ 00000264 F4029FE5 LDR R0,??UpdateCLheader_12+0x1C ;; isShowS \ 00000268 000090E5 LDR R0,[R0, #+0] \ 0000026C 000050E3 CMP R0,#+0 \ 00000270 0200000A BEQ ??UpdateCLheader_20 \ 00000274 0910A0E1 MOV R1,R9 \ 00000278 0400A0E1 MOV R0,R4 \ 0000027C 170000EF SWI +23 1684 if(Is_Double_Vibra_On && isShowR) strcat(clm_hdr_text,"[R]") ; \ ??UpdateCLheader_20: \ 00000280 880297E5 LDR R0,[R7, #+648] \ 00000284 000050E3 CMP R0,#+0 \ 00000288 0600000A BEQ ??UpdateCLheader_21 \ 0000028C D0029FE5 LDR R0,??UpdateCLheader_12+0x20 ;; isShowR \ 00000290 000090E5 LDR R0,[R0, #+0] \ 00000294 000050E3 CMP R0,#+0 \ 00000298 0200000A BEQ ??UpdateCLheader_21 \ 0000029C 0810A0E1 MOV R1,R8 \ 000002A0 0400A0E1 MOV R0,R4 \ 000002A4 170000EF SWI +23 1685 if(Show_XTX && isShowTmXs) strcat(clm_hdr_text,"[Xs]"); \ ??UpdateCLheader_21: \ 000002A8 B8029FE5 LDR R0,??UpdateCLheader_12+0x24 ;; isShowTmXs \ 000002AC C81297E5 LDR R1,[R7, #+712] \ 000002B0 000090E5 LDR R0,[R0, #+0] \ 000002B4 000051E3 CMP R1,#+0 \ 000002B8 00005013 CMPNE R0,#+0 \ 000002BC 74108612 ADDNE R1,R6,#+116 \ 000002C0 0200001A BNE ??UpdateCLheader_22 1686 else if(isShowTmXs) strcat(clm_hdr_text,"[Tm]"); \ 000002C4 000050E3 CMP R0,#+0 \ 000002C8 0200000A BEQ ??UpdateCLheader_23 \ 000002CC 7C1086E2 ADD R1,R6,#+124 \ ??UpdateCLheader_22: \ 000002D0 0400A0E1 MOV R0,R4 \ 000002D4 170000EF SWI +23 1687 if(isShowBat) \ ??UpdateCLheader_23: \ 000002D8 8C029FE5 LDR R0,??UpdateCLheader_12+0x28 ;; isShowBat \ 000002DC 000090E5 LDR R0,[R0, #+0] \ 000002E0 000050E3 CMP R0,#+0 \ 000002E4 8F00000A BEQ ??UpdateCLheader_8 1688 { 1689 int bat=*RamCap(); \ 000002E8 C88000EF SWI +32968 \ 000002EC B020D0E1 LDRH R2,[R0, #+0] 1690 char s[4]; 1691 sprintf(s,"[%d%%]",bat); \ 000002F0 841086E2 ADD R1,R6,#+132 \ 000002F4 0D00A0E1 MOV R0,SP \ 000002F8 160000EF SWI +22 1692 strcat(clm_hdr_text,s); \ 000002FC 0D10A0E1 MOV R1,SP \ 00000300 0400A0E1 MOV R0,R4 \ 00000304 170000EF SWI +23 \ 00000308 860000EA B ??UpdateCLheader_8 1693 } 1694 1695 } 1696 break; 1697 case 4://png 1698 { 1699 #ifdef kluchnik 1700 char A_s[]="[A [%s] ]"; \ ??UpdateCLheader_24: \ 0000030C 0C1096E8 LDM R6,{R2,R3,R12} \ 00000310 78008DE2 ADD R0,SP,#+120 \ 00000314 0C1080E8 STM R0,{R2,R3,R12} 1701 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l \ 00000318 241397E5 LDR R1,[R7, #+804] \ 0000031C 10108DE5 STR R1,[SP, #+16] \ 00000320 281397E5 LDR R1,[R7, #+808] \ 00000324 14108DE5 STR R1,[SP, #+20] 1702 if(on_off_timer > 0 && strlen(on_off_buf)!=0) \ 00000328 580397E5 LDR R0,[R7, #+856] \ 0000032C 010050E3 CMP R0,#+1 \ 00000330 0F0000BA BLT ??UpdateCLheader_25 \ 00000334 2810A0E3 MOV R1,#+40 \ 00000338 6C1D81E3 ORR R1,R1,#0x1B00 \ 0000033C 071081E0 ADD R1,R1,R7 \ 00000340 00108DE5 STR R1,[SP, #+0] \ 00000344 0100A0E1 MOV R0,R1 \ 00000348 1B0000EF SWI +27 \ 0000034C 000050E3 CMP R0,#+0 \ 00000350 0700000A BEQ ??UpdateCLheader_25 1703 sprintf(status,on_off_buf); \ 00000354 00109DE5 LDR R1,[SP, #+0] \ 00000358 0500A0E1 MOV R0,R5 \ 0000035C 160000EF SWI +22 \ 00000360 0B0000EA B ??UpdateCLheader_26 \ ??UpdateCLheader_3: \ 00000364 5B525D00 DC8 "[R]" \ 00000368 5B535D00 DC8 "[S]" \ 0000036C 5B565D00 DC8 "[V]" \ 00000370 5B495D00 DC8 "[I]" 1704 else 1705 { 1706 sprintf(status, "[Rx:%db/Tx:%db/Queue:%db]\n",RX,TX,sendq_l); \ ??UpdateCLheader_25: \ 00000374 2C0397E5 LDR R0,[R7, #+812] \ 00000378 8C1086E2 ADD R1,R6,#+140 \ 0000037C 01002DE9 PUSH {R0} \ 00000380 18309DE5 LDR R3,[SP, #+24] \ 00000384 14209DE5 LDR R2,[SP, #+20] \ 00000388 0500A0E1 MOV R0,R5 \ 0000038C 160000EF SWI +22 \ 00000390 04D08DE2 ADD SP,SP,#+4 1707 } 1708 sprintf(t,"[%d/%d] [%d/%d] ",kopa_kontaktu, kopa_online,total_unread,total_unread2); \ ??UpdateCLheader_26: \ 00000394 8C0297E5 LDR R0,[R7, #+652] \ 00000398 A81086E2 ADD R1,R6,#+168 \ 0000039C 01002DE9 PUSH {R0} \ 000003A0 380397E5 LDR R0,[R7, #+824] \ 000003A4 01002DE9 PUSH {R0} \ 000003A8 5C3397E5 LDR R3,[R7, #+860] \ 000003AC 602397E5 LDR R2,[R7, #+864] \ 000003B0 20008DE2 ADD R0,SP,#+32 \ 000003B4 160000EF SWI +22 1709 strcat(status,t); \ 000003B8 20108DE2 ADD R1,SP,#+32 \ 000003BC 0500A0E1 MOV R0,R5 \ 000003C0 170000EF SWI +23 1710 if(away_m && isShowA) { sprintf(t,A_s,away_msg_time_dace); strcat(status,t); } \ 000003C4 BC0297E5 LDR R0,[R7, #+700] \ 000003C8 08D08DE2 ADD SP,SP,#+8 \ 000003CC 000050E3 CMP R0,#+0 \ 000003D0 0C00000A BEQ ??UpdateCLheader_27 \ 000003D4 78019FE5 LDR R0,??UpdateCLheader_12+0x10 ;; isShowA \ 000003D8 000090E5 LDR R0,[R0, #+0] \ 000003DC 000050E3 CMP R0,#+0 \ 000003E0 0800000A BEQ ??UpdateCLheader_27 \ 000003E4 9800A0E3 MOV R0,#+152 \ 000003E8 600D80E3 ORR R0,R0,#0x1800 \ 000003EC 072080E0 ADD R2,R0,R7 \ 000003F0 78108DE2 ADD R1,SP,#+120 \ 000003F4 18008DE2 ADD R0,SP,#+24 \ 000003F8 160000EF SWI +22 \ 000003FC 18108DE2 ADD R1,SP,#+24 \ 00000400 0500A0E1 MOV R0,R5 \ 00000404 170000EF SWI +23 1711 #else 1712 char s[32]; 1713 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l 1714 #ifdef NEWSGOLD 1715 if(on_off_timer>0 && strlen(on_off_buf)!=0) 1716 sprintf(status,on_off_buf); 1717 else 1718 if(ShowTraff) 1719 sprintf(status, "[T:%db/Queue:%db]\n",RX+TX,sendq_l); 1720 #else 1721 if(on_off_timer>0 && strlen(on_off_buf)!=0) 1722 sprintf(status,on_off_buf); 1723 else 1724 if(ShowTraff) 1725 sprintf(status, "[T:%db/Q:%db]\n",RX+TX,sendq_l); 1726 #endif 1727 //sprintf(status, "%s\n",def_clm_hdr_text); 1728 if(isShowTime) { sprintf(t,"[%02d:%02d]",the.hour,the.min); strcat(status,t); } 1729 if(isShowCont) { sprintf(s,"[%d/%d]",kopa_kontaktu,kopa_online); strcat(status,s); } 1730 if(isShowUnread) { sprintf(s,"[%d/%d]",total_unread,total_unread2); strcat(status,s); } 1731 if(away_m && isShowA) { /* sprintf(t,A_s,away_msg_time_dace);*/ strcat(status,"[A]"); } 1732 #endif 1733 1734 if(CurrentPrivateStatus==1 && isShowI) strcat(status,"[I]"); \ ??UpdateCLheader_27: \ 00000408 F80297E5 LDR R0,[R7, #+760] \ 0000040C 010050E3 CMP R0,#+1 \ 00000410 0600001A BNE ??UpdateCLheader_28 \ 00000414 3C019FE5 LDR R0,??UpdateCLheader_12+0x14 ;; isShowI \ 00000418 000090E5 LDR R0,[R0, #+0] \ 0000041C 000050E3 CMP R0,#+0 \ 00000420 0200000A BEQ ??UpdateCLheader_28 \ 00000424 0B10A0E1 MOV R1,R11 \ 00000428 0500A0E1 MOV R0,R5 \ 0000042C 170000EF SWI +23 1735 if(Is_Vibra_Enabled && isShowV) strcat(status,"[V]"); \ ??UpdateCLheader_28: \ 00000430 A00297E5 LDR R0,[R7, #+672] \ 00000434 000050E3 CMP R0,#+0 \ 00000438 0600000A BEQ ??UpdateCLheader_29 \ 0000043C 18019FE5 LDR R0,??UpdateCLheader_12+0x18 ;; isShowV \ 00000440 000090E5 LDR R0,[R0, #+0] \ 00000444 000050E3 CMP R0,#+0 \ 00000448 0200000A BEQ ??UpdateCLheader_29 \ 0000044C 0A10A0E1 MOV R1,R10 \ 00000450 0500A0E1 MOV R0,R5 \ 00000454 170000EF SWI +23 1736 if(Is_Sounds_Enabled && isShowS) strcat(status,"[S]"); \ ??UpdateCLheader_29: \ 00000458 EC0297E5 LDR R0,[R7, #+748] \ 0000045C 000050E3 CMP R0,#+0 \ 00000460 0600000A BEQ ??UpdateCLheader_30 \ 00000464 F4009FE5 LDR R0,??UpdateCLheader_12+0x1C ;; isShowS \ 00000468 000090E5 LDR R0,[R0, #+0] \ 0000046C 000050E3 CMP R0,#+0 \ 00000470 0200000A BEQ ??UpdateCLheader_30 \ 00000474 0910A0E1 MOV R1,R9 \ 00000478 0500A0E1 MOV R0,R5 \ 0000047C 170000EF SWI +23 1737 if(Is_Double_Vibra_On && isShowR) strcat(status,"[R]"); \ ??UpdateCLheader_30: \ 00000480 880297E5 LDR R0,[R7, #+648] \ 00000484 000050E3 CMP R0,#+0 \ 00000488 0600000A BEQ ??UpdateCLheader_31 \ 0000048C D0009FE5 LDR R0,??UpdateCLheader_12+0x20 ;; isShowR \ 00000490 000090E5 LDR R0,[R0, #+0] \ 00000494 000050E3 CMP R0,#+0 \ 00000498 0200000A BEQ ??UpdateCLheader_31 \ 0000049C 0810A0E1 MOV R1,R8 \ 000004A0 0500A0E1 MOV R0,R5 \ 000004A4 170000EF SWI +23 1738 if(Show_XTX && isShowTmXs) strcat(status,"[Xs]"); \ ??UpdateCLheader_31: \ 000004A8 B8009FE5 LDR R0,??UpdateCLheader_12+0x24 ;; isShowTmXs \ 000004AC C81297E5 LDR R1,[R7, #+712] \ 000004B0 000090E5 LDR R0,[R0, #+0] \ 000004B4 000051E3 CMP R1,#+0 \ 000004B8 00005013 CMPNE R0,#+0 \ 000004BC 74108612 ADDNE R1,R6,#+116 \ 000004C0 0200001A BNE ??UpdateCLheader_32 1739 else 1740 if(isShowTmXs) strcat(status,"[Tm]"); \ 000004C4 000050E3 CMP R0,#+0 \ 000004C8 0200000A BEQ ??UpdateCLheader_33 \ 000004CC 7C1086E2 ADD R1,R6,#+124 \ ??UpdateCLheader_32: \ 000004D0 0500A0E1 MOV R0,R5 \ 000004D4 170000EF SWI +23 1741 if(isShowBat) \ ??UpdateCLheader_33: \ 000004D8 8C009FE5 LDR R0,??UpdateCLheader_12+0x28 ;; isShowBat \ 000004DC 000090E5 LDR R0,[R0, #+0] \ 000004E0 000050E3 CMP R0,#+0 \ 000004E4 0700000A BEQ ??UpdateCLheader_34 1742 { 1743 int bat=*RamCap(); \ 000004E8 C88000EF SWI +32968 \ 000004EC B020D0E1 LDRH R2,[R0, #+0] 1744 char s[4]; 1745 sprintf(s,"[%d%%]",bat); \ 000004F0 841086E2 ADD R1,R6,#+132 \ 000004F4 0D00A0E1 MOV R0,SP \ 000004F8 160000EF SWI +22 1746 strcat(status,s); \ 000004FC 0D10A0E1 MOV R1,SP \ 00000500 0500A0E1 MOV R0,R5 \ 00000504 170000EF SWI +23 1747 } 1748 zeromem(clm_hdr_text,64); \ ??UpdateCLheader_34: \ 00000508 4010A0E3 MOV R1,#+64 \ 0000050C 0400A0E1 MOV R0,R4 \ 00000510 1D0100EF SWI +285 \ 00000514 030000EA B ??UpdateCLheader_8 1749 } 1750 break; 1751 default : 1752 sprintf(clm_hdr_text, percent_s,def_clm_hdr_text); \ ??UpdateCLheader_4: \ 00000518 062080E0 ADD R2,R0,R6 \ 0000051C 371086E2 ADD R1,R6,#+55 \ 00000520 0400A0E1 MOV R0,R4 \ 00000524 160000EF SWI +22 1753 break; 1754 } 1755 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ ??UpdateCLheader_8: \ 00000528 2800A0E3 MOV R0,#+40 \ 0000052C 500E80E3 ORR R0,R0,#0x500 \ 00000530 061080E0 ADD R1,R0,R6 \ ??UpdateCLheader_2: \ 00000534 0C009DE5 LDR R0,[SP, #+12] \ 00000538 1A0000EF SWI +26 1756 } 1757 } \ 0000053C 84D08DE2 ADD SP,SP,#+132 \ 00000540 F08FBDE8 POP {R4-R11,PC} ;; return \ ??UpdateCLheader_12: \ 00000544 5B415D00 DC8 "[A]" \ 00000548 ........ DC32 isShowTime \ 0000054C ........ DC32 isShowCont \ 00000550 ........ DC32 isShowUnread \ 00000554 ........ DC32 isShowA \ 00000558 ........ DC32 isShowI \ 0000055C ........ DC32 isShowV \ 00000560 ........ DC32 isShowS \ 00000564 ........ DC32 isShowR \ 00000568 ........ DC32 isShowTmXs \ 0000056C ........ DC32 isShowBat 1758 \ In segment CODE, align 4, keep-with-next 1759 void ClearContactT9Key(void) 1760 { 1761 zeromem(ContactT9Key,sizeof(ContactT9Key)); \ ClearContactT9Key: \ 00000000 0C009FE5 LDR R0,??ClearContactT9Key_0 ;; S_ICONS + 1360 \ 00000004 00402DE9 PUSH {LR} \ 00000008 2010A0E3 MOV R1,#+32 \ 0000000C 1D0100EF SWI +285 1762 } \ 00000010 0080BDE8 POP {PC} ;; return \ ??ClearContactT9Key_0: \ 00000014 ........ DC32 S_ICONS + 1360 1763 \ In segment CODE, align 4, keep-with-next 1764 void AddContactT9Key(int chr) 1765 { \ AddContactT9Key: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1766 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R5,??DataTable89 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 550E85E2 ADD R0,R5,#+1360 \ 00000010 1B0000EF SWI +27 1767 if (l<(sizeof(ContactT9Key)-1)) \ 00000014 1F0050E3 CMP R0,#+31 1768 { 1769 ContactT9Key[l]=chr; \ 00000018 05008030 ADDCC R0,R0,R5 \ 0000001C 5045C035 STRBCC R4,[R0, #+1360] 1770 } 1771 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 1772 \ In segment CODE, align 4, keep-with-next 1773 void BackSpaceContactT9(void) 1774 { \ BackSpaceContactT9: \ 00000000 10402DE9 PUSH {R4,LR} 1775 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R4,??DataTable89 ;; S_ICONS \ 00000008 550E84E2 ADD R0,R4,#+1360 \ 0000000C 1B0000EF SWI +27 1776 if (l) \ 00000010 000050E3 CMP R0,#+0 1777 { 1778 l--; 1779 ContactT9Key[l]=0; \ 00000014 04008010 ADDNE R0,R0,R4 \ 00000018 0010A013 MOVNE R1,#+0 \ 0000001C 4F15C015 STRBNE R1,[R0, #+1359] 1780 } 1781 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 1782 1783 \ In segment CODE, align 4, keep-with-next 1784 void create_contactlist_menu(void) 1785 { \ create_contactlist_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 1786 int i; 1787 i=CountContacts(); 1788 prev_clmenu_itemcount=i; \ 00000004 ........ LDR R5,??DataTable89 ;; S_ICONS 1789 UpdateCLheader(); 1790 patch_header(&contactlist_menuhdr); \ 00000008 38609FE5 LDR R6,??create_contactlist_menu_0 ;; contactlist_menuhdr \ 0000000C ........ _BLF CountContacts,??CountContacts??rA \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 4C4385E5 STR R4,[R5, #+844] \ 00000018 ........ BL UpdateCLheader \ 0000001C 0600A0E1 MOV R0,R6 \ 00000020 ........ _BLF patch_header,??patch_header??rA 1791 #ifdef USE_MLMENU 1792 contactlist_menu_id=CreateMultiLinesMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i); \ 00000024 10002DE9 PUSH {R4} \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 01002DE9 PUSH {R0} \ 00000030 0630A0E1 MOV R3,R6 \ 00000034 142086E2 ADD R2,R6,#+20 \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 170200EF SWI +535 \ 00000040 440385E5 STR R0,[R5, #+836] 1793 #else 1794 contactlist_menu_id=CreateMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i,0,0); 1795 #endif 1796 } \ 00000044 7380BDE8 POP {R0,R1,R4-R6,PC} ;; return \ ??create_contactlist_menu_0: \ 00000048 ........ DC32 contactlist_menuhdr 1797 1798 static int unhooked2=1; 1799 \ In segment CODE, align 4, keep-with-next 1800 void contactlist_menu_ghook(void *data, int cmd) 1801 { \ contactlist_menu_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 1802 PNGTOP_DESC *pltop=PNG_TOP(); 1803 if (cmd==9) 1804 { 1805 pltop->dyn_pltop=NULL; 1806 } 1807 static int unhooked=1; 1808 if( ((unhooked) || (unhooked2)) && (TIME_OR_MSG==4) ) \ 00000004 ........ LDR R8,??DataTable89 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 B98100EF SWI +33209 \ 00000014 0060A0E1 MOV R6,R0 \ 00000018 0070A0E3 MOV R7,#+0 \ 0000001C 090055E3 CMP R5,#+9 \ 00000020 08708605 STREQ R7,[R6, #+8] \ 00000024 CC0398E5 LDR R0,[R8, #+972] \ 00000028 000050E3 CMP R0,#+0 \ 0000002C C8039805 LDREQ R0,[R8, #+968] \ 00000030 00005003 CMPEQ R0,#+0 \ 00000034 1400000A BEQ ??contactlist_menu_ghook_0 \ 00000038 ........ LDR R0,??DataTable72 ;; TIME_OR_MSG \ 0000003C 000090E5 LDR R0,[R0, #+0] \ 00000040 040050E3 CMP R0,#+4 \ 00000044 1000001A BNE ??contactlist_menu_ghook_0 1809 { 1810 if(!(strlen(ContactT9Key))) \ 00000048 550E88E2 ADD R0,R8,#+1360 \ 0000004C 1B0000EF SWI +27 \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0A00001A BNE ??contactlist_menu_ghook_1 1811 { 1812 GUI * gui=(GUI*)data; 1813 memcpy(&gui_methods2,gui->methods,nmeth*4); \ 00000058 041094E5 LDR R1,[R4, #+4] \ 0000005C D99FA0E3 MOV R9,#+868 \ 00000060 6020A0E3 MOV R2,#+96 \ 00000064 080089E0 ADD R0,R9,R8 \ 00000068 1E0100EF SWI +286 1814 gui->methods=&gui_methods2; \ 0000006C 080089E0 ADD R0,R9,R8 \ 00000070 040084E5 STR R0,[R4, #+4] 1815 old_redraw=gui_methods2[0]; \ 00000074 080099E7 LDR R0,[R9, +R8] \ 00000078 C40388E5 STR R0,[R8, #+964] 1816 gui_methods2[0]=(void*)&new_redraw; \ 0000007C 28009FE5 LDR R0,??contactlist_menu_ghook_2 ;; new_redraw \ 00000080 080089E7 STR R0,[R9, +R8] 1817 } 1818 unhooked=0; \ ??contactlist_menu_ghook_1: \ 00000084 CC7388E5 STR R7,[R8, #+972] 1819 unhooked2=0; \ 00000088 C87388E5 STR R7,[R8, #+968] 1820 } 1821 /* 1822 if (cmd==2) 1823 { 1824 static void *methods[16]; 1825 void **m=GetDataOfItemByID(data,2); 1826 if (m) 1827 { 1828 if (m[1]) 1829 { 1830 memcpy(methods,m[1],sizeof(methods)); 1831 old_ed_redraw=(void (*)(void *))(methods[0]); 1832 methods[0]=(void *)my_ed_redraw2; 1833 m[1]=methods; 1834 } 1835 } 1836 }*/ 1837 1838 if (cmd==0x0A) \ ??contactlist_menu_ghook_0: \ 0000008C 0A0055E3 CMP R5,#+10 \ 00000090 F083BD18 POPNE {R4-R9,PC} 1839 { 1840 silenthide=0; 1841 pltop->dyn_pltop=XStatusesImgList; \ 00000094 ........ LDR R0,??DataTable73 ;; XStatusesImgList \ 00000098 E47288E5 STR R7,[R8, #+740] \ 0000009C 000090E5 LDR R0,[R0, #+0] \ 000000A0 080086E5 STR R0,[R6, #+8] 1842 DisableIDLETMR(); \ 000000A4 7F0100EF SWI +383 1843 } 1844 } \ 000000A8 F083BDE8 POP {R4-R9,PC} ;; return \ ??contactlist_menu_ghook_2: \ 000000AC ........ DC32 new_redraw 1845 \ In segment CODE, align 4, keep-with-next 1846 void RecountMenu(CLIST *req, int needfocus) 1847 { \ RecountMenu: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 1848 int i; 1849 int j; 1850 void *data; 1851 UpdateCLheader(); 1852 if (!contactlist_menu_id) return; //Нечего считать \ 00000004 ........ LDR R6,??DataTable89 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 ........ BL UpdateCLheader \ 00000014 440396E5 LDR R0,[R6, #+836] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C F080BD08 POPEQ {R4-R7,PC} 1853 data=FindGUIbyId(contactlist_menu_id,NULL); \ 00000020 440396E5 LDR R0,[R6, #+836] \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 090200EF SWI +521 \ 0000002C 0070A0E1 MOV R7,R0 1854 if (req==NULL) \ 00000030 000054E3 CMP R4,#+0 \ 00000034 0200000A BEQ ??RecountMenu_0 1855 { 1856 j=0; 1857 } 1858 else 1859 { 1860 j=FindContactByContact(req); \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C ........ _BLF FindContactByContact,??FindContactByContact??rA \ 00000040 0040A0E1 MOV R4,R0 1861 } 1862 i=CountContacts(); \ ??RecountMenu_0: \ 00000044 ........ _BLF CountContacts,??CountContacts??rA 1863 if (j>=i) j=i-1; 1864 if (j<0) j=0; 1865 if (i!=prev_clmenu_itemcount) \ 00000048 4C1396E5 LDR R1,[R6, #+844] \ 0000004C 000054E1 CMP R4,R0 \ 00000050 014040A2 SUBGE R4,R0,#+1 \ 00000054 000054E3 CMP R4,#+0 \ 00000058 0040A043 MOVMI R4,#+0 \ 0000005C 010050E1 CMP R0,R1 \ 00000060 0300000A BEQ ??RecountMenu_1 1866 { 1867 prev_clmenu_itemcount=i; \ 00000064 4C0386E5 STR R0,[R6, #+844] 1868 Menu_SetItemCountDyn(data,i); \ 00000068 0010A0E1 MOV R1,R0 \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 E60100EF SWI +486 1869 } 1870 if(needfocus) SetCursorToMenuItem(data,j); //2058 \ ??RecountMenu_1: \ 00000074 000055E3 CMP R5,#+0 \ 00000078 0200000A BEQ ??RecountMenu_2 \ 0000007C 0410A0E1 MOV R1,R4 \ 00000080 0700A0E1 MOV R0,R7 \ 00000084 C40100EF SWI +452 1871 if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); \ ??RecountMenu_2: \ 00000088 440396E5 LDR R0,[R6, #+836] \ 0000008C 350100EF SWI +309 \ 00000090 000050E3 CMP R0,#+0 \ 00000094 F080BD08 POPEQ {R4-R7,PC} \ 00000098 960100EF SWI +406 \ 0000009C F080BDE8 POP {R4-R7,PC} ;; return 1872 } 1873 1874 1875 //-------------------- MANAGE CONTACT MENU --------------------------// 1876 1877 1878 #ifdef kluchnik 1879 #define _MAX 8 1880 #else 1881 #define _MAX 4 1882 #endif 1883 1884 static int uinContact; 1885 \ In segment CODE, align 4, keep-with-next 1886 static void ChangeVibraContact(GUI *data) 1887 { 1888 CLIST *t; 1889 t=FindContactByUin(uinContact); \ ChangeVibraContact: \ 00000000 ........ LDR R0,??DataTable83 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1890 t->isvibra=!(t->isvibra); \ 00000010 681090E5 LDR R1,[R0, #+104] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 681080E5 STR R1,[R0, #+104] 1891 RefreshGUI(); \ 00000024 960100EF SWI +406 1892 } \ 00000028 0080BDE8 POP {PC} ;; return 1893 \ In segment CODE, align 4, keep-with-next 1894 static void ChangeSoundContact(GUI *data) 1895 { 1896 CLIST *t; 1897 t=FindContactByUin(uinContact); \ ChangeSoundContact: \ 00000000 ........ LDR R0,??DataTable83 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1898 t->issound=!(t->issound); \ 00000010 6C1090E5 LDR R1,[R0, #+108] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 6C1080E5 STR R1,[R0, #+108] 1899 RefreshGUI(); \ 00000024 960100EF SWI +406 1900 } \ 00000028 0080BDE8 POP {PC} ;; return 1901 \ In segment CODE, align 4, keep-with-next 1902 static void ChangeAutoMsg(GUI *data) 1903 { 1904 CLIST *t; 1905 t=FindContactByUin(uinContact); \ ChangeAutoMsg: \ 00000000 ........ LDR R0,??DataTable83 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1906 t->isautomsg=!(t->isautomsg); \ 00000010 701090E5 LDR R1,[R0, #+112] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 701080E5 STR R1,[R0, #+112] 1907 RefreshGUI(); \ 00000024 960100EF SWI +406 1908 } \ 00000028 0080BDE8 POP {PC} ;; return 1909 \ In segment CODE, align 4, keep-with-next 1910 static void ChangeShowXstatus(GUI *data) 1911 { 1912 CLIST *t; 1913 t=FindContactByUin(uinContact); \ ChangeShowXstatus: \ 00000000 ........ LDR R0,??DataTable83 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1914 t->isShowXst=!(t->isShowXst); \ 00000010 781090E5 LDR R1,[R0, #+120] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 781080E5 STR R1,[R0, #+120] 1915 RefreshGUI(); \ 00000024 960100EF SWI +406 1916 } \ 00000028 0080BDE8 POP {PC} ;; return 1917 1918 #ifdef kluchnik 1919 \ In segment CODE, align 4, keep-with-next 1920 static void ChangeAccess(GUI *data) 1921 { 1922 CLIST *t; 1923 t=FindContactByUin(uinContact); \ ChangeAccess: \ 00000000 ........ LDR R0,??DataTable83 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1924 t->isaccess=!(t->isaccess); \ 00000010 801090E5 LDR R1,[R0, #+128] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 801080E5 STR R1,[R0, #+128] 1925 RefreshGUI(); \ 00000024 960100EF SWI +406 1926 } \ 00000028 0080BDE8 POP {PC} ;; return 1927 1928 \ In segment CODE, align 4, keep-with-next 1929 static void ChangeAwaySignal(GUI *data) 1930 { 1931 CLIST *t; 1932 t=FindContactByUin(uinContact); \ ChangeAwaySignal: \ 00000000 ........ LDR R0,??DataTable83 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1933 t->automsgcount=automsgcount; \ 00000010 ........ LDR R1,??DataTable81 ;; automsgcount \ 00000014 001091E5 LDR R1,[R1, #+0] \ 00000018 841080E5 STR R1,[R0, #+132] 1934 RefreshGUI(); \ 0000001C 960100EF SWI +406 1935 } \ 00000020 0080BDE8 POP {PC} ;; return 1936 \ In segment CODE, align 4, keep-with-next 1937 static void ChangeAutobot(GUI *data) 1938 { 1939 CLIST *t; 1940 t=FindContactByUin(uinContact); \ ChangeAutobot: \ 00000000 ........ LDR R0,??DataTable83 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1941 t->isautobot=!(t->isautobot); \ 00000010 5C1090E5 LDR R1,[R0, #+92] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 5C1080E5 STR R1,[R0, #+92] 1942 RefreshGUI(); \ 00000024 960100EF SWI +406 1943 } \ 00000028 0080BDE8 POP {PC} ;; return 1944 \ In segment CODE, align 4, keep-with-next 1945 static void ChangeLoadHistory(GUI *data) 1946 { 1947 CLIST *t; 1948 t=FindContactByUin(uinContact); \ ChangeLoadHistory: \ 00000000 ........ LDR R0,??DataTable83 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1949 t->isLoadHistory=!(t->isLoadHistory); \ 00000010 601090E5 LDR R1,[R0, #+96] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 601080E5 STR R1,[R0, #+96] 1950 RefreshGUI(); \ 00000024 960100EF SWI +406 1951 } \ 00000028 0080BDE8 POP {PC} ;; return 1952 #endif 1953 /* 1954 static void RqtXText(GUI *data) 1955 { 1956 void RequestXText(unsigned int uin); 1957 RequestXText(uinContact); 1958 GeneralFuncF1(1); 1959 } 1960 */ \ In segment CODE, align 4, keep-with-next 1961 static void contact_list_ghook(void *data, int cmd) 1962 { \ contact_list_ghook: \ 00000000 00402DE9 PUSH {LR} 1963 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 1964 { 1965 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 1966 } 1967 } \ 00000010 0080BDE8 POP {PC} ;; return 1968 static int icon_array[2]; 1969 1970 static const void *menuproc[_MAX]= 1971 { 1972 (void *)ChangeVibraContact, 1973 (void *)ChangeSoundContact, 1974 (void *)ChangeAutoMsg, 1975 (void *)ChangeShowXstatus, 1976 #ifdef kluchnik 1977 (void *)ChangeAccess, 1978 (void *)ChangeAwaySignal, 1979 (void *)ChangeLoadHistory, 1980 (void *)ChangeAutobot, 1981 #endif 1982 }; 1983 1984 static const char * const menutext[_MAX]= 1985 { 1986 "Вибра", 1987 "Звук", 1988 "Автоответчик", 1989 "Показ.хстатус", 1990 #ifdef kluchnik 1991 "Удаленное управление", 1992 "Синалы автоответчика", 1993 "Загруж.историю", 1994 "Aвтобот" 1995 #endif 1996 }; 1997 \ In segment CODE, align 4, keep-with-next 1998 static int contact_keyhook(void *data, GUI_MSG *msg) 1999 { \ contact_keyhook: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 2000 if ((msg->keys==0x18)||(msg->keys==0x3D)) \ 00000008 F200D1E1 LDRSH R0,[R1, #+2] \ 0000000C 180050E3 CMP R0,#+24 \ 00000010 3D005013 CMPNE R0,#+61 \ 00000014 0900001A BNE ??contact_keyhook_0 2001 { 2002 CLIST *t; 2003 t=FindContactByUin(uinContact); 2004 t->isIndividSet=1; \ 00000018 28509FE5 LDR R5,??contact_keyhook_1 ;; icon_array \ 0000001C 080095E5 LDR R0,[R5, #+8] \ 00000020 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000024 0110A0E3 MOV R1,#+1 \ 00000028 641080E5 STR R1,[R0, #+100] 2005 ((void (*)(void))(menuproc[GetCurMenuItem(data)]))(); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 8F0100EF SWI +399 \ 00000034 000185E0 ADD R0,R5,R0, LSL #+2 \ 00000038 0C0090E5 LDR R0,[R0, #+12] \ 0000003C 30FF2FE1 BLX R0 2006 } 2007 //if(msg->keys==LEFT_BUTTON) GeneralFuncF1(1); 2008 return(0); \ ??contact_keyhook_0: \ 00000040 0000A0E3 MOV R0,#+0 \ 00000044 3080BDE8 POP {R4,R5,PC} ;; return \ ??contact_keyhook_1: \ 00000048 ........ DC32 icon_array 2009 } 2010 \ In segment CODE, align 4, keep-with-next 2011 static void contacthandler(void *data, int curitem, void *unk) 2012 { \ contacthandler: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 2013 WSHDR *ws; 2014 void *item=AllocMenuItem(data); 2015 extern const char percent_t[]; 2016 ws=AllocMenuWS(data,strlen(menutext[curitem])); \ 00000004 ........ LDR R8,??DataTable88 ;; `?` \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 970100EF SWI +407 \ 00000014 0060A0E1 MOV R6,R0 \ 00000018 050188E0 ADD R0,R8,R5, LSL #+2 \ 0000001C 149090E5 LDR R9,[R0, #+20] \ 00000020 0900A0E1 MOV R0,R9 \ 00000024 1B0000EF SWI +27 \ 00000028 0010A0E1 MOV R1,R0 \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 980100EF SWI +408 2017 wsprintf(ws,percent_t,menutext[curitem]); \ 00000034 341088E2 ADD R1,R8,#+52 2018 CLIST *t; 2019 t=FindContactByUin(uinContact); \ 00000038 ........ LDR R8,??DataTable86 ;; icon_array \ 0000003C 0070A0E1 MOV R7,R0 \ 00000040 0920A0E1 MOV R2,R9 \ 00000044 240100EF SWI +292 \ 00000048 080098E5 LDR R0,[R8, #+8] \ 0000004C ........ _BLF FindContactByUin,??FindContactByUin??rA 2020 switch(curitem) \ 00000050 0510A0E1 MOV R1,R5 \ 00000054 070051E3 CMP R1,#+7 \ 00000058 1A00008A BHI ??contacthandler_1 \ 0000005C 012F8FE2 ADR R2,??contacthandler_0 \ 00000060 0120D2E7 LDRB R2,[R2, R1] \ 00000064 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??contacthandler_0: \ 00000068 01030507 DC8 +1,+3,+5,+7 \ 0000006C 090B0D0F DC8 +9,+11,+13,+15 2021 { 2022 case 0: 2023 SetMenuItemIconArray(data,item,icon_array+(t->isvibra?0:1)); \ ??contacthandler_2: \ 00000070 680090E5 LDR R0,[R0, #+104] \ 00000074 0C0000EA B ??contacthandler_3 2024 break; 2025 case 1: 2026 SetMenuItemIconArray(data,item,icon_array+(t->issound?0:1)); \ ??contacthandler_4: \ 00000078 6C0090E5 LDR R0,[R0, #+108] \ 0000007C 0A0000EA B ??contacthandler_3 2027 break; 2028 case 2: 2029 SetMenuItemIconArray(data,item,icon_array+(t->isautomsg?0:1)); \ ??contacthandler_5: \ 00000080 700090E5 LDR R0,[R0, #+112] \ 00000084 080000EA B ??contacthandler_3 2030 break; 2031 case 3: 2032 SetMenuItemIconArray(data,item,icon_array+(t->isShowXst?0:1)); \ ??contacthandler_6: \ 00000088 780090E5 LDR R0,[R0, #+120] \ 0000008C 060000EA B ??contacthandler_3 2033 break; 2034 #ifdef kluchnik 2035 case 4: 2036 SetMenuItemIconArray(data,item,icon_array+(t->isaccess?0:1)); \ ??contacthandler_7: \ 00000090 800090E5 LDR R0,[R0, #+128] \ 00000094 040000EA B ??contacthandler_3 2037 break; 2038 case 5: 2039 SetMenuItemIconArray(data,item,icon_array+(t->automsgcount?0:1)); \ ??contacthandler_8: \ 00000098 840090E5 LDR R0,[R0, #+132] \ 0000009C 020000EA B ??contacthandler_3 2040 break; 2041 case 6: 2042 SetMenuItemIconArray(data,item,icon_array+(t->isLoadHistory?0:1)); \ ??contacthandler_9: \ 000000A0 600090E5 LDR R0,[R0, #+96] \ 000000A4 000000EA B ??contacthandler_3 2043 break; 2044 case 7: 2045 SetMenuItemIconArray(data,item,icon_array+(t->isautobot?0:1)); \ ??contacthandler_10: \ 000000A8 5C0090E5 LDR R0,[R0, #+92] \ ??contacthandler_3: \ 000000AC 0610A0E1 MOV R1,R6 \ 000000B0 000050E3 CMP R0,#+0 \ 000000B4 0000A013 MOVNE R0,#+0 \ 000000B8 0100A003 MOVEQ R0,#+1 \ 000000BC 002188E0 ADD R2,R8,R0, LSL #+2 \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 990100EF SWI +409 2046 break; 2047 #endif 2048 } 2049 SetMenuItemText(data, item, ws, curitem); \ ??contacthandler_1: \ 000000C8 0530A0E1 MOV R3,R5 \ 000000CC 0720A0E1 MOV R2,R7 \ 000000D0 0610A0E1 MOV R1,R6 \ 000000D4 0400A0E1 MOV R0,R4 \ 000000D8 9A0100EF SWI +410 2050 } \ 000000DC F083BDE8 POP {R4-R9,PC} ;; return 2051 2052 char cont_hdr[64]; 2053 static const HEADER_DESC contact_list_HDR={0,0,NULL,NULL,NULL,(int)cont_hdr,LGP_NULL}; 2054 static const int _softkeys[] = {0,1,2}; 2055 2056 static const SOFTKEY_DESC _sk[] = 2057 { 2058 {0x0018, 0x0000, (int)"Выбрать"}, 2059 {0x0001, 0x0000, (int)LG_CLOSE}, 2060 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 2061 }; 2062 2063 const SOFTKEYSTAB _skt = 2064 { 2065 _sk, 0 2066 }; 2067 static const MENU_DESC contact_list_MNU= 2068 { 2069 8,contact_keyhook,contact_list_ghook,NULL, 2070 _softkeys, 2071 &_skt, 2072 0x11, 2073 contacthandler, 2074 NULL, 2075 NULL, 2076 _MAX 2077 }; 2078 2079 \ In segment CODE, align 4, keep-with-next 2080 int CreateContactMenu(CLIST *t) 2081 { \ CreateContactMenu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 2082 uinContact=t->uin; \ 00000004 ........ LDR R5,??DataTable86 ;; icon_array 2083 icon_array[0]=GetPicNByUnicodeSymbol(CBOX_CHECKED); 2084 icon_array[1]=GetPicNByUnicodeSymbol(CBOX_UNCHECKED); 2085 sprintf(cont_hdr,"Меню кoнт. %s",t->name); \ 00000008 74609FE5 LDR R6,??CreateContactMenu_0 ;; `?` \ 0000000C ........ LDR R7,??DataTable89 ;; S_ICONS \ 00000010 04D04DE2 SUB SP,SP,#+4 \ 00000014 0990A0E3 MOV R9,#+9 \ 00000018 429C89E3 ORR R9,R9,#0x4200 \ 0000001C B0A0A0E3 MOV R10,#+176 \ 00000020 DEAC8AE3 ORR R10,R10,#0xDE00 \ 00000024 0040A0E3 MOV R4,#+0 \ 00000028 01B0A0E3 MOV R11,#+1 \ 0000002C 556EA0E3 MOV R6,#+1360 \ 00000030 011041E2 SUB R1,R1,#+1 \ 00000034 0C0051E3 CMP R1,#+12 \ 00000038 F18FBD88 POPHI {R0,R4-R11,PC} \ 0000003C 012F8FE2 ADR R2,??LongPressActionOnChat_0 \ 00000040 0120D2E7 LDRB R2,[R2, R1] \ 00000044 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??LongPressActionOnChat_0: \ 00000048 030F1C28 DC8 +3,+15,+28,+40 \ 0000004C 344E6972 DC8 +52,+78,+105,+114 \ 00000050 768395A9 DC8 +118,+131,+149,+169 \ 00000054 C0000000 DC8 +192,+0,+0,+0 2096 { 2097 case 1: 2098 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??LongPressActionOnChat_1: \ 00000058 EC0297E5 LDR R0,[R7, #+748] \ 0000005C 000050E3 CMP R0,#+0 \ 00000060 00B0A013 MOVNE R11,#+0 \ 00000064 ECB287E5 STR R11,[R7, #+748] 2099 if(Is_Sounds_Enabled) \ 00000068 00005BE3 CMP R11,#+0 2100 ShowMSG(1,(int)"Sound 0n"); \ 0000006C BC108512 ADDNE R1,R5,#+188 2101 else 2102 ShowMSG(1,(int)"Sound Off"); \ 00000070 C8108502 ADDEQ R1,R5,#+200 \ 00000074 0100A0E3 MOV R0,#+1 \ 00000078 480100EF SWI +328 2103 SUBPROC((void*)WriteDefSettings); \ 0000007C 0800A0E1 MOV R0,R8 \ 00000080 710100EF SWI +369 \ 00000084 F18FBDE8 POP {R0,R4-R11,PC} 2104 break; 2105 case 2: 2106 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??LongPressActionOnChat_2: \ 00000088 A00297E5 LDR R0,[R7, #+672] \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 00B0A013 MOVNE R11,#+0 \ 00000094 A0B287E5 STR R11,[R7, #+672] 2107 SUBPROC((void*)WriteDefSettings); \ 00000098 0800A0E1 MOV R0,R8 \ 0000009C 710100EF SWI +369 2108 if(Is_Vibra_Enabled) \ 000000A0 A00297E5 LDR R0,[R7, #+672] \ 000000A4 000050E3 CMP R0,#+0 2109 ShowMSG(1,(int)"Vibra On"); \ 000000A8 D4108512 ADDNE R1,R5,#+212 2110 else 2111 ShowMSG(1,(int)"Vibra Off"); \ 000000AC E0108502 ADDEQ R1,R5,#+224 \ 000000B0 0100A0E3 MOV R0,#+1 \ 000000B4 480100EF SWI +328 \ 000000B8 F18FBDE8 POP {R0,R4-R11,PC} 2112 break; 2113 case 3: 2114 if(CurrentPrivateStatus!=1) \ ??LongPressActionOnChat_3: \ 000000BC F80297E5 LDR R0,[R7, #+760] \ 000000C0 010050E3 CMP R0,#+1 \ 000000C4 0300000A BEQ ??LongPressActionOnChat_4 2115 { 2116 SetPrivateStatus(1);//Инвиз \ 000000C8 0100A0E3 MOV R0,#+1 \ 000000CC ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 2117 ShowMSG(1,(int)"Инвиз включен"); \ 000000D0 EC1085E2 ADD R1,R5,#+236 \ 000000D4 270000EA B ??LongPressActionOnChat_5 2118 } 2119 else 2120 { 2121 SetPrivateStatus(3); \ ??LongPressActionOnChat_4: \ 000000D8 0300A0E3 MOV R0,#+3 \ 000000DC ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 2122 ShowMSG(1,(int)"Инвиз выключен"); \ 000000E0 FC1085E2 ADD R1,R5,#+252 \ 000000E4 0100A0E3 MOV R0,#+1 \ 000000E8 230000EA B ??LongPressActionOnChat_6 2123 } 2124 break; 2125 case 4: 2126 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??LongPressActionOnChat_7: \ 000000EC 880297E5 LDR R0,[R7, #+648] \ 000000F0 000050E3 CMP R0,#+0 \ 000000F4 00B0A013 MOVNE R11,#+0 \ 000000F8 88B287E5 STR R11,[R7, #+648] 2127 SUBPROC((void*)WriteDefSettings); \ 000000FC 0800A0E1 MOV R0,R8 \ 00000100 710100EF SWI +369 2128 if(Is_Double_Vibra_On) \ 00000104 880297E5 LDR R0,[R7, #+648] \ 00000108 000050E3 CMP R0,#+0 \ 0000010C 471F8502 ADDEQ R1,R5,#+284 2129 ShowMSG(1,(int)"Vibra rem On"); \ 00000110 431F8512 ADDNE R1,R5,#+268 \ 00000114 0100A0E3 MOV R0,#+1 \ 00000118 170000EA B ??LongPressActionOnChat_6 2130 else 2131 ShowMSG(1,(int)"Vibra rem Off"); 2132 break; 2133 case 5: 2134 { 2135 CLIST *cl; 2136 cl=(CLIST *)(&cltop); \ ??LongPressActionOnChat_8: \ 0000011C CF8F87E2 ADD R8,R7,#+828 \ 00000120 060000EA B ??LongPressActionOnChat_9 2137 while(cl=(CLIST *)(cl->next)) 2138 { 2139 if(cl->log) \ ??LongPressActionOnChat_10: \ 00000124 9C0098E5 LDR R0,[R8, #+156] \ 00000128 000050E3 CMP R0,#+0 \ 0000012C 0300000A BEQ ??LongPressActionOnChat_9 2140 { 2141 FreeLOGQ(&cl->log); \ 00000130 9C0088E2 ADD R0,R8,#+156 \ 00000134 ........ BL FreeLOGQ 2142 cl->msg_count=0; \ 00000138 AC4088E5 STR R4,[R8, #+172] 2143 cl->isactive=0; \ 0000013C A84088E5 STR R4,[R8, #+168] 2144 } 2145 } \ ??LongPressActionOnChat_9: \ 00000140 008098E5 LDR R8,[R8, #+0] \ 00000144 000058E3 CMP R8,#+0 \ 00000148 F5FFFF1A BNE ??LongPressActionOnChat_10 2146 if(strlen(ContactT9Key)) ClearContactT9Key(); \ 0000014C 070086E0 ADD R0,R6,R7 \ 00000150 1B0000EF SWI +27 \ 00000154 000050E3 CMP R0,#+0 \ 00000158 0200000A BEQ ??LongPressActionOnChat_11 \ 0000015C 2010A0E3 MOV R1,#+32 \ 00000160 070086E0 ADD R0,R6,R7 \ 00000164 1D0100EF SWI +285 2147 RecountMenu(NULL,1); \ ??LongPressActionOnChat_11: \ 00000168 0110A0E3 MOV R1,#+1 \ 0000016C 0400A0E1 MOV R0,R4 \ 00000170 ........ BL RecountMenu 2148 ShowMSG(1,(int)"All chat clear!"); \ 00000174 4B1F85E2 ADD R1,R5,#+300 \ ??LongPressActionOnChat_5: \ 00000178 0B00A0E1 MOV R0,R11 \ ??LongPressActionOnChat_6: \ 0000017C 480100EF SWI +328 \ 00000180 F18FBDE8 POP {R0,R4-R11,PC} 2149 break; 2150 } 2151 case 6: 2152 if(!away_m) \ ??LongPressActionOnChat_12: \ 00000184 BC0297E5 LDR R0,[R7, #+700] \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 0C00001A BNE ??LongPressActionOnChat_13 2153 { 2154 away_m=!away_m; \ 00000190 BCB287E5 STR R11,[R7, #+700] 2155 GBS_StopTimer(&away_tmr); \ 00000194 B800A0E3 MOV R0,#+184 \ 00000198 600D80E3 ORR R0,R0,#0x1800 \ 0000019C 070080E0 ADD R0,R0,R7 \ 000001A0 440100EF SWI +324 2156 msg_away_timer=AUTO_ENGADE*12; \ 000001A4 ........ LDR R0,??DataTable90 ;; AUTO_ENGADE \ 000001A8 0C10A0E3 MOV R1,#+12 \ 000001AC 000090E5 LDR R0,[R0, #+0] \ 000001B0 910000E0 MUL R0,R1,R0 \ 000001B4 B80287E5 STR R0,[R7, #+696] 2157 InputAwayMsg(); \ 000001B8 ........ BL InputAwayMsg \ 000001BC ........ BL UpdateCLheader \ 000001C0 F18FBDE8 POP {R0,R4-R11,PC} 2158 2159 } 2160 else 2161 { 2162 msg_away_timer=0; 2163 away_m=!away_m; 2164 if(change_back_status) \ ??LongPressActionOnChat_13: \ 000001C4 C40297E5 LDR R0,[R7, #+708] \ 000001C8 B84287E5 STR R4,[R7, #+696] \ 000001CC BC4287E5 STR R4,[R7, #+700] \ 000001D0 000050E3 CMP R0,#+0 \ 000001D4 0300000A BEQ ??LongPressActionOnChat_14 2165 { 2166 CurrentStatus=status_rem; \ 000001D8 C00297E5 LDR R0,[R7, #+704] \ 000001DC A80287E5 STR R0,[R7, #+680] 2167 set_my_status(); \ 000001E0 ........ BL set_my_status 2168 change_back_status=0; \ 000001E4 C44287E5 STR R4,[R7, #+708] 2169 } 2170 } 2171 UpdateCLheader(); \ ??LongPressActionOnChat_14: \ 000001E8 ........ BL UpdateCLheader \ 000001EC F18FBDE8 POP {R0,R4-R11,PC} 2172 break; 2173 case 7: 2174 { 2175 Show_XTX=!(Show_XTX); \ ??LongPressActionOnChat_15: \ 000001F0 C80297E5 LDR R0,[R7, #+712] \ 000001F4 000050E3 CMP R0,#+0 \ 000001F8 00B0A013 MOVNE R11,#+0 \ 000001FC C8B287E5 STR R11,[R7, #+712] 2176 if(Show_XTX) \ 00000200 00005BE3 CMP R11,#+0 \ 00000204 551F8502 ADDEQ R1,R5,#+340 2177 ShowMSG(1,(int)"Default show x-status"); \ 00000208 4F1F8512 ADDNE R1,R5,#+316 \ 0000020C 0100A0E3 MOV R0,#+1 \ 00000210 D9FFFFEA B ??LongPressActionOnChat_6 2178 else 2179 ShowMSG(1,(int)"Default show time"); 2180 } 2181 break; 2182 case 8: 2183 { 2184 WSHDR *ws; 2185 ws=AllocWS(150); \ ??LongPressActionOnChat_16: \ 00000214 9600A0E3 MOV R0,#+150 \ 00000218 250100EF SWI +293 2186 str_2ws(ws,suc_config_name,128); \ 0000021C ........ LDR R1,??DataTable91 ;; suc_config_name \ 00000220 020000EA B ??LongPressActionOnChat_17 2187 ExecuteFile(ws,0,0); 2188 FreeWS(ws); 2189 } 2190 break; 2191 case 9: 2192 { 2193 WSHDR *ws; 2194 ws=AllocWS(150); \ ??LongPressActionOnChat_18: \ 00000224 9600A0E3 MOV R0,#+150 \ 00000228 250100EF SWI +293 2195 str_2ws(ws,suc_config_name_mod,128); \ 0000022C ........ LDR R1,??DataTable92 ;; suc_config_name_mod \ ??LongPressActionOnChat_17: \ 00000230 0040A0E1 MOV R4,R0 \ 00000234 8020A0E3 MOV R2,#+128 \ 00000238 6C0100EF SWI +364 2196 ExecuteFile(ws,0,0); \ 0000023C 0020A0E3 MOV R2,#+0 \ 00000240 0010A0E3 MOV R1,#+0 \ 00000244 0400A0E1 MOV R0,R4 \ 00000248 940000EF SWI +148 2197 FreeWS(ws); \ 0000024C 0400A0E1 MOV R0,R4 \ 00000250 290100EF SWI +297 \ 00000254 F18FBDE8 POP {R0,R4-R11,PC} 2198 } 2199 break; 2200 case 10://ping 2201 { 2202 janis=1; \ ??LongPressActionOnChat_19: \ 00000258 ........ LDR R0,??DataTable93 ;; janis \ 0000025C 00B080E5 STR R11,[R0, #+0] 2203 TPKT *p; 2204 p=malloc(sizeof(PKT)+sizeof(TTime)); \ 00000260 1000A0E3 MOV R0,#+16 \ 00000264 140000EF SWI +20 \ 00000268 0050A0E1 MOV R5,R0 2205 GetDateTime(NULL,(TTime *)p->data); \ 0000026C 081085E2 ADD R1,R5,#+8 \ 00000270 0000A0E3 MOV R0,#+0 \ 00000274 B40000EF SWI +180 2206 p->pkt.uin=0; \ 00000278 004085E5 STR R4,[R5, #+0] 2207 p->pkt.type=T_ECHO; \ 0000027C 1200A0E3 MOV R0,#+18 \ 00000280 B400C5E1 STRH R0,[R5, #+4] 2208 p->pkt.data_len=sizeof(TTime); \ 00000284 0800A0E3 MOV R0,#+8 \ 00000288 B600C5E1 STRH R0,[R5, #+6] 2209 SUBPROC((void *)SendAnswer,0,p); \ 0000028C ........ LDR R0,??DataTable94 ;; SendAnswer \ 00000290 0520A0E1 MOV R2,R5 \ 00000294 0410A0E1 MOV R1,R4 \ 00000298 710100EF SWI +369 \ 0000029C F18FBDE8 POP {R0,R4-R11,PC} 2210 } 2211 break; 2212 case 11://go to idle 2213 { 2214 ClearContactT9Key(); \ ??LongPressActionOnChat_20: \ 000002A0 2010A0E3 MOV R1,#+32 \ 000002A4 070086E0 ADD R0,R6,R7 \ 000002A8 1D0100EF SWI +285 2215 RecountMenu(NULL,1); \ 000002AC 0110A0E3 MOV R1,#+1 \ 000002B0 0400A0E1 MOV R0,R4 \ 000002B4 ........ BL RecountMenu 2216 silenthide=1; \ 000002B8 E4B287E5 STR R11,[R7, #+740] 2217 gipc.name_to=ipc_xtask_name; \ 000002BC 580046E2 SUB R0,R6,#+88 \ 000002C0 050080E0 ADD R0,R0,R5 \ 000002C4 BC0087E5 STR R0,[R7, #+188] 2218 gipc.name_from=ipc_my_name; \ 000002C8 780046E2 SUB R0,R6,#+120 \ 000002CC 050080E0 ADD R0,R0,R5 \ 000002D0 C00087E5 STR R0,[R7, #+192] 2219 gipc.data=0; \ 000002D4 C44087E5 STR R4,[R7, #+196] 2220 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 000002D8 BC3087E2 ADD R3,R7,#+188 \ 000002DC 0B20A0E1 MOV R2,R11 \ 000002E0 0A10A0E1 MOV R1,R10 \ 000002E4 0900A0E1 MOV R0,R9 \ 000002E8 000100EF SWI +256 \ 000002EC F18FBDE8 POP {R0,R4-R11,PC} 2221 } 2222 break; 2223 case 12://hide & lock 2224 { 2225 ClearContactT9Key(); \ ??LongPressActionOnChat_21: \ 000002F0 2010A0E3 MOV R1,#+32 \ 000002F4 070086E0 ADD R0,R6,R7 \ 000002F8 1D0100EF SWI +285 2226 RecountMenu(NULL,1); \ 000002FC 0110A0E3 MOV R1,#+1 \ 00000300 0400A0E1 MOV R0,R4 \ 00000304 ........ BL RecountMenu 2227 gipc.name_to=ipc_xtask_name; \ 00000308 580046E2 SUB R0,R6,#+88 \ 0000030C 050080E0 ADD R0,R0,R5 \ 00000310 BC0087E5 STR R0,[R7, #+188] 2228 gipc.name_from=ipc_my_name; \ 00000314 780046E2 SUB R0,R6,#+120 \ 00000318 050080E0 ADD R0,R0,R5 \ 0000031C C00087E5 STR R0,[R7, #+192] 2229 gipc.data=0; \ 00000320 C44087E5 STR R4,[R7, #+196] 2230 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 00000324 BC3087E2 ADD R3,R7,#+188 \ 00000328 0B20A0E1 MOV R2,R11 \ 0000032C 0A10A0E1 MOV R1,R10 \ 00000330 0900A0E1 MOV R0,R9 \ 00000334 000100EF SWI +256 2231 if (IsUnlocked()) \ 00000338 430000EF SWI +67 \ 0000033C 000050E3 CMP R0,#+0 \ 00000340 F18FBD08 POPEQ {R0,R4-R11,PC} 2232 { 2233 KbdLock(); \ 00000344 A90000EF SWI +169 \ 00000348 F18FBDE8 POP {R0,R4-R11,PC} 2234 } 2235 // return(-1); 2236 } 2237 break; 2238 case 13://users menu 2239 { 2240 if(!t->isgroup) \ ??LongPressActionOnChat_22: \ 0000034C 081090E5 LDR R1,[R0, #+8] \ 00000350 000051E3 CMP R1,#+0 \ 00000354 F18FBD18 POPNE {R0,R4-R11,PC} 2241 CreateContactMenu(t); \ 00000358 ........ BL CreateContactMenu 2242 } 2243 break; 2244 }//switch() 2245 } \ ??LongPressActionOnChat_23: \ 0000035C F18FBDE8 POP {R0,R4-R11,PC} ;; return 2246 2247 //{"Без действия","Звук","Вибра","Инвиз","Реж.напоминания","Очистить чаты","Автоответчик","Показ.хстат/время","Конфиг","Конфиг мода","Пинг","Заблокировать","На гэ","Меню юзера"} 2248 \ In segment CODE, align 4, keep-with-next 2249 void LongPressAction(CLIST *t,int key) 2250 { \ LongPressAction: \ 00000000 00402DE9 PUSH {LR} 2251 switch(key) \ 00000004 231041E2 SUB R1,R1,#+35 \ 00000008 1B0051E3 CMP R1,#+27 \ 0000000C 0080BD88 POPHI {PC} \ 00000010 012F8FE2 ADR R2,??LongPressAction_0 \ 00000014 0120D2E7 LDRB R2,[R2, R1] \ 00000018 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??LongPressAction_0: \ 0000001C 20252525 DC8 +32,+37,+37,+37 \ 00000020 2525251E DC8 +37,+37,+37,+30 \ 00000024 25252525 DC8 +37,+37,+37,+37 \ 00000028 2506080C DC8 +37,+6,+8,+12 \ 0000002C 10121416 DC8 +16,+18,+20,+22 \ 00000030 181A1C25 DC8 +24,+26,+28,+37 \ 00000034 25252522 DC8 +37,+37,+37,+34 2252 { 2253 case '0': LongPressActionOnChat(t,longAct_0); break; \ ??LongPressAction_1: \ 00000038 78109FE5 LDR R1,??LongPressAction_2 ;; longAct_0 \ 0000003C 040000EA B ??LongPressAction_3 2254 case '1': LongPressActionOnChat(t,longAct_1); break; \ ??LongPressAction_4: \ 00000040 74109FE5 LDR R1,??LongPressAction_2+0x4 ;; longAct_1 \ 00000044 001091E5 LDR R1,[R1, #+0] \ 00000048 ........ BL LongPressActionOnChat \ 0000004C 0080BDE8 POP {PC} 2255 case '2': LongPressActionOnChat(t,longAct_2); break; \ ??LongPressAction_5: \ 00000050 68109FE5 LDR R1,??LongPressAction_2+0x8 ;; longAct_2 \ ??LongPressAction_3: \ 00000054 001091E5 LDR R1,[R1, #+0] \ 00000058 ........ BL LongPressActionOnChat \ 0000005C 0080BDE8 POP {PC} 2256 case '3': LongPressActionOnChat(t,longAct_3); break; \ ??LongPressAction_6: \ 00000060 5C109FE5 LDR R1,??LongPressAction_2+0xC ;; longAct_3 \ 00000064 FAFFFFEA B ??LongPressAction_3 2257 case '4': LongPressActionOnChat(t,longAct_4); break; \ ??LongPressAction_7: \ 00000068 58109FE5 LDR R1,??LongPressAction_2+0x10 ;; longAct_4 \ 0000006C F8FFFFEA B ??LongPressAction_3 2258 case '5': LongPressActionOnChat(t,longAct_5); break; \ ??LongPressAction_8: \ 00000070 54109FE5 LDR R1,??LongPressAction_2+0x14 ;; longAct_5 \ 00000074 F6FFFFEA B ??LongPressAction_3 2259 case '6': LongPressActionOnChat(t,longAct_6); break; \ ??LongPressAction_9: \ 00000078 50109FE5 LDR R1,??LongPressAction_2+0x18 ;; longAct_6 \ 0000007C F4FFFFEA B ??LongPressAction_3 2260 case '7': LongPressActionOnChat(t,longAct_7); break; \ ??LongPressAction_10: \ 00000080 4C109FE5 LDR R1,??LongPressAction_2+0x1C ;; longAct_7 \ 00000084 F2FFFFEA B ??LongPressAction_3 2261 case '8': LongPressActionOnChat(t,longAct_8); break; \ ??LongPressAction_11: \ 00000088 48109FE5 LDR R1,??LongPressAction_2+0x20 ;; longAct_8 \ 0000008C F0FFFFEA B ??LongPressAction_3 2262 case '9': LongPressActionOnChat(t,longAct_9); break; \ ??LongPressAction_12: \ 00000090 44109FE5 LDR R1,??LongPressAction_2+0x24 ;; longAct_9 \ 00000094 EEFFFFEA B ??LongPressAction_3 2263 case '*': LongPressActionOnChat(t,longAct_10); break; \ ??LongPressAction_13: \ 00000098 40109FE5 LDR R1,??LongPressAction_2+0x28 ;; longAct_10 \ 0000009C ECFFFFEA B ??LongPressAction_3 2264 case '#': LongPressActionOnChat(t,longAct_11); break; \ ??LongPressAction_14: \ 000000A0 3C109FE5 LDR R1,??LongPressAction_2+0x2C ;; longAct_11 \ 000000A4 EAFFFFEA B ??LongPressAction_3 2265 case RIGHT_BUTTON: LongPressActionOnChat(t,longAct_RB); break; \ ??LongPressAction_15: \ 000000A8 38109FE5 LDR R1,??LongPressAction_2+0x30 ;; longAct_RB \ 000000AC 001091E5 LDR R1,[R1, #+0] \ 000000B0 ........ BL LongPressActionOnChat 2266 } 2267 } \ ??LongPressAction_16: \ 000000B4 0080BDE8 POP {PC} ;; return \ ??LongPressAction_2: \ 000000B8 ........ DC32 longAct_0 \ 000000BC ........ DC32 longAct_1 \ 000000C0 ........ DC32 longAct_2 \ 000000C4 ........ DC32 longAct_3 \ 000000C8 ........ DC32 longAct_4 \ 000000CC ........ DC32 longAct_5 \ 000000D0 ........ DC32 longAct_6 \ 000000D4 ........ DC32 longAct_7 \ 000000D8 ........ DC32 longAct_8 \ 000000DC ........ DC32 longAct_9 \ 000000E0 ........ DC32 longAct_10 \ 000000E4 ........ DC32 longAct_11 \ 000000E8 ........ DC32 longAct_RB 2268 2269 char hostbuf2[128]; 2270 \ In segment CODE, align 4, keep-with-next 2271 int contactlist_menu_onkey(void *data, GUI_MSG *msg) 2272 { \ contactlist_menu_onkey: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 2273 #ifdef NEWSGOLD 2274 scrsTime=0; \ 00000004 ........ LDR R7,??DataTable109 ;; S_ICONS \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C 0040A0E3 MOV R4,#+0 \ 00000010 B44287E5 STR R4,[R7, #+692] 2275 #endif 2276 2277 CLIST *t; 2278 int i; 2279 i=GetCurMenuItem(data); \ 00000014 8F0100EF SWI +399 2280 t=FindContactByN(i); \ 00000018 ........ _BLF FindContactByN,??FindContactByN??rA \ 0000001C 0050A0E1 MOV R5,R0 2281 2282 if (msg->keys==0x18) \ 00000020 F200D6E1 LDRSH R0,[R6, #+2] \ 00000024 180050E3 CMP R0,#+24 \ 00000028 0100001A BNE ??contactlist_menu_onkey_0 2283 { 2284 ShowMainMenu(); \ 0000002C ........ _BLF ShowMainMenu,??ShowMainMenu??rA 2285 return(-1); \ 00000030 F50000EA B ??contactlist_menu_onkey_1 2286 } 2287 2288 if (msg->keys==0x3D) \ ??contactlist_menu_onkey_0: \ 00000034 558EA0E3 MOV R8,#+1360 \ 00000038 3D0050E3 CMP R0,#+61 \ 0000003C 2400001A BNE ??contactlist_menu_onkey_2 2289 { 2290 if (t) \ 00000040 000055E3 CMP R5,#+0 \ 00000044 3A00000A BEQ ??contactlist_menu_onkey_3 2291 { 2292 if (t->isgroup) \ 00000048 080095E5 LDR R0,[R5, #+8] \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 0700000A BEQ ??contactlist_menu_onkey_4 2293 { 2294 t->state^=0xFFFF; \ 00000054 B405D5E1 LDRH R0,[R5, #+84] \ 00000058 FF10A0E3 MOV R1,#+255 \ 0000005C FF1C81E3 ORR R1,R1,#0xFF00 \ 00000060 000021E0 EOR R0,R1,R0 \ 00000064 B405C5E1 STRH R0,[R5, #+84] 2295 RecountMenu(t,1); \ ??contactlist_menu_onkey_5: \ 00000068 0110A0E3 MOV R1,#+1 \ 0000006C 0500A0E1 MOV R0,R5 \ 00000070 2E0000EA B ??contactlist_menu_onkey_6 2296 return(-1); 2297 } 2298 if (strlen(ContactT9Key)) \ ??contactlist_menu_onkey_4: \ 00000074 070088E0 ADD R0,R8,R7 \ 00000078 1B0000EF SWI +27 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 0500000A BEQ ??contactlist_menu_onkey_7 2299 { 2300 ClearContactT9Key(); \ 00000084 2010A0E3 MOV R1,#+32 \ 00000088 070088E0 ADD R0,R8,R7 \ 0000008C 1D0100EF SWI +285 2301 RecountMenu(NULL,1); \ 00000090 0110A0E3 MOV R1,#+1 \ 00000094 0000A0E3 MOV R0,#+0 \ 00000098 ........ BL RecountMenu 2302 } 2303 #ifdef kluchnik 2304 if(!t->isactive && HISTORY_BUFFER && (t->isLoadHistory && t->isIndividSet)) GetHistory(t, 64<isactive && HISTORY_BUFFER) GetHistory(t, 64<isactive && HISTORY_BUFFER) GetHistory(t, 64<keys==1) \ ??contactlist_menu_onkey_2: \ 000000D4 010050E3 CMP R0,#+1 \ 000000D8 0500001A BNE ??contactlist_menu_onkey_9 2315 { 2316 if (strlen(ContactT9Key)) \ 000000DC 070088E0 ADD R0,R8,R7 \ 000000E0 1B0000EF SWI +27 \ 000000E4 000050E3 CMP R0,#+0 \ 000000E8 0100000A BEQ ??contactlist_menu_onkey_9 2317 { 2318 BackSpaceContactT9(); \ 000000EC ........ BL BackSpaceContactT9 2319 RecountMenu(NULL,1); \ 000000F0 0C0000EA B ??contactlist_menu_onkey_10 2320 return(-1); 2321 } 2322 } 2323 if (msg->gbsmsg->msg==KEY_DOWN) \ ??contactlist_menu_onkey_9: \ 000000F4 040096E5 LDR R0,[R6, #+4] \ 000000F8 9320A0E3 MOV R2,#+147 \ 000000FC 041090E5 LDR R1,[R0, #+4] \ 00000100 402F82E3 ORR R2,R2,#0x100 \ 00000104 020051E1 CMP R1,R2 \ 00000108 3900001A BNE ??contactlist_menu_onkey_11 2324 { 2325 int key=msg->gbsmsg->submess; \ 0000010C 089090E5 LDR R9,[R0, #+8] 2326 if ((key>='0')&&(key<='9')) \ 00000110 300059E3 CMP R9,#+48 \ 00000114 080000BA BLT ??contactlist_menu_onkey_12 \ 00000118 3A0059E3 CMP R9,#+58 \ 0000011C 0D0000AA BGE ??contactlist_menu_onkey_13 2327 { 2328 AddContactT9Key(key); \ 00000120 0900A0E1 MOV R0,R9 \ 00000124 ........ BL AddContactT9Key 2329 RecountMenu(NULL,1); \ ??contactlist_menu_onkey_10: \ 00000128 0110A0E3 MOV R1,#+1 \ 0000012C 0000A0E3 MOV R0,#+0 \ ??contactlist_menu_onkey_6: \ 00000130 ........ BL RecountMenu 2330 return(-1); \ ??contactlist_menu_onkey_3: \ 00000134 0400E0E1 MVN R0,R4 \ 00000138 F087BDE8 POP {R4-R10,PC} 2331 } 2332 2333 if (key==VOL_UP_BUTTON && isVolUpButton) \ ??contactlist_menu_onkey_12: \ 0000013C 0D0059E3 CMP R9,#+13 \ 00000140 0400001A BNE ??contactlist_menu_onkey_13 \ 00000144 00039FE5 LDR R0,??contactlist_menu_onkey_14 ;; isVolUpButton \ 00000148 000090E5 LDR R0,[R0, #+0] \ 0000014C 000050E3 CMP R0,#+0 \ 00000150 0000000A BEQ ??contactlist_menu_onkey_13 2334 { 2335 #ifdef NEWSGOLD 2336 CreateScreenSelectGUI(); \ 00000154 ........ _BLF CreateScreenSelectGUI,??CreateScreenSelectGUI??rA 2337 #else 2338 char *small_info=malloc(256); 2339 sprintf(small_info, "Время в онлайн:\n" 2340 "%02d:%02d:%02d\n" 2341 "Сервер:\n%s" 2342 ,uptimeHour, uptimeMin, uptimeSec, hostbuf2); 2343 ShowMSG(1,(int)small_info); 2344 mfree(small_info); 2345 #endif 2346 } 2347 2348 if(msg->gbsmsg->submess==VOL_DOWN_BUTTON && isVolDownButton) \ ??contactlist_menu_onkey_13: \ 00000158 040096E5 LDR R0,[R6, #+4] \ 0000015C 01A0A0E3 MOV R10,#+1 \ 00000160 080090E5 LDR R0,[R0, #+8] \ 00000164 0E0050E3 CMP R0,#+14 \ 00000168 1500001A BNE ??contactlist_menu_onkey_15 \ 0000016C DC029FE5 LDR R0,??contactlist_menu_onkey_14+0x4 ;; isVolDownButton \ 00000170 000090E5 LDR R0,[R0, #+0] \ 00000174 000050E3 CMP R0,#+0 \ 00000178 1100000A BEQ ??contactlist_menu_onkey_15 2349 { 2350 if(!away_m) \ 0000017C BC0297E5 LDR R0,[R7, #+700] \ 00000180 000050E3 CMP R0,#+0 \ 00000184 0300001A BNE ??contactlist_menu_onkey_16 2351 { 2352 away_m=!away_m; \ 00000188 BCA287E5 STR R10,[R7, #+700] 2353 /* GBS_StopTimer(&away_tmr); 2354 msg_away_timer=AUTO_ENGADE; 2355 away_timer();*/ 2356 main_d=1; \ 0000018C 58A287E5 STR R10,[R7, #+600] 2357 InputAwayMsg(); \ 00000190 ........ BL InputAwayMsg \ 00000194 080000EA B ??contactlist_menu_onkey_17 2358 } 2359 else 2360 { 2361 msg_away_timer=0; 2362 away_m=!away_m; 2363 if(change_back_status) \ ??contactlist_menu_onkey_16: \ 00000198 C40297E5 LDR R0,[R7, #+708] \ 0000019C B84287E5 STR R4,[R7, #+696] \ 000001A0 BC4287E5 STR R4,[R7, #+700] \ 000001A4 000050E3 CMP R0,#+0 \ 000001A8 0300000A BEQ ??contactlist_menu_onkey_17 2364 { 2365 CurrentStatus=status_rem; \ 000001AC C00297E5 LDR R0,[R7, #+704] \ 000001B0 A80287E5 STR R0,[R7, #+680] 2366 set_my_status(); \ 000001B4 ........ BL set_my_status 2367 change_back_status=0; \ 000001B8 C44287E5 STR R4,[R7, #+708] 2368 } 2369 } 2370 UpdateCLheader(); \ ??contactlist_menu_onkey_17: \ 000001BC ........ BL UpdateCLheader 2371 RefreshGUI(); \ 000001C0 960100EF SWI +406 2372 } 2373 2374 if(key==GREEN_BUTTON) \ ??contactlist_menu_onkey_15: \ 000001C4 0B0059E3 CMP R9,#+11 \ 000001C8 0400001A BNE ??contactlist_menu_onkey_18 2375 { 2376 IsActiveUp=!IsActiveUp; \ 000001CC 9C0297E5 LDR R0,[R7, #+668] \ 000001D0 000050E3 CMP R0,#+0 \ 000001D4 00A0A013 MOVNE R10,#+0 \ 000001D8 9CA287E5 STR R10,[R7, #+668] 2377 RecountMenu(NULL,1); \ 000001DC D1FFFFEA B ??contactlist_menu_onkey_10 2378 return(-1); 2379 } 2380 2381 if(key==LEFT_BUTTON && (CountContacts()>0)) \ ??contactlist_menu_onkey_18: \ 000001E0 3D0059E3 CMP R9,#+61 \ 000001E4 2E00001A BNE ??contactlist_menu_onkey_19 \ 000001E8 ........ _BLF CountContacts,??CountContacts??rA \ 000001EC 010050E3 CMP R0,#+1 \ 000001F0 1A0000AA BGE ??contactlist_menu_onkey_20 2382 { 2383 while(t=(CLIST *)(t->next)) 2384 { 2385 if (t->isunread) goto doit; 2386 } 2387 t=(CLIST *)(&cltop); 2388 while(t=(CLIST *)(t->next)) 2389 { 2390 if (t->isunread) goto doit; 2391 } 2392 if (t && Is_Show_Groups) { 2393 if (!t->isgroup) 2394 t=FindGroupByID(t->group); 2395 if (t && !t->state) { 2396 t->state^=0xFFFF; 2397 goto does; 2398 } 2399 } 2400 doit: 2401 { 2402 CLIST *g=FindGroupByID(t->group); 2403 if (g) 2404 { 2405 if (g->state) 2406 { 2407 g->state=0; 2408 } 2409 } 2410 } 2411 does: 2412 RecountMenu(t,1); 2413 return(-1); 2414 } 2415 2416 if (key=='*' && (CountContacts()>0)) 2417 { 2418 while(t=(CLIST *)(t->next)) 2419 { 2420 if (t->just_now) goto doit3; 2421 } 2422 t=(CLIST *)(&cltop); 2423 while(t=(CLIST *)(t->next)) 2424 { 2425 if (t->just_now) goto doit3; 2426 } 2427 return(-1); 2428 doit3: 2429 { 2430 CLIST *g=FindGroupByID(t->group); 2431 if (g) 2432 { 2433 if (g->state) 2434 { 2435 g->state=0; 2436 } 2437 } 2438 } 2439 RecountMenu(t,1); 2440 return(-1); 2441 } 2442 2443 if (key=='#' && (CountContacts()>0))//Если есть хоть один контакт то выполнять,иначе возможен пикофф 2444 { 2445 if(ActionResh) 2446 { 2447 while(t=(CLIST *)(t->next)) 2448 { 2449 if (t->isactive) goto doit4; 2450 } 2451 t=(CLIST *)(&cltop); 2452 while(t=(CLIST *)(t->next)) 2453 { 2454 if (t->isactive) goto doit4; 2455 } 2456 return(-1); 2457 doit4: 2458 { 2459 CLIST *g=FindGroupByID(t->group); 2460 if (g) 2461 { 2462 if (g->state) 2463 { 2464 g->state=0; 2465 } 2466 } 2467 } 2468 RecountMenu(t,1); 2469 } 2470 else 2471 { 2472 if(t->log && !(t->just_now))//очистить лог 2473 { 2474 FreeLOGQ(&t->log); 2475 t->msg_count=0; 2476 t->isactive=0; 2477 } 2478 2479 if(t->just_now)//если контакт тока зашел,то обнуляем 2480 { 2481 CLIST *tt; 2482 tt=FindContactByUin(t->uin); 2483 tt->just_now=0; 2484 } 2485 2486 if(t->uin==UIN)//если нажали на Loopback, то обнуляем все just_now'ы 2487 { 2488 CLIST *tt; 2489 tt=(CLIST *)(&cltop); 2490 while(tt=(CLIST *)(tt->next)) 2491 { 2492 if(tt->just_now) tt->just_now=0; 2493 } 2494 } 2495 2496 if(strlen(ContactT9Key)) ClearContactT9Key(); 2497 RecountMenu(NULL,0); 2498 } 2499 return(-1); 2500 } 2501 2502 if (key==RIGHT_BUTTON) 2503 { 2504 //Послать запрос текста XStatus 2505 if (t) 2506 { 2507 if (!t->isgroup) 2508 { 2509 FreeXText(t); 2510 t->req_xtext=0; 2511 RequestXText(t->uin); 2512 RefreshGUI(); 2513 return(-1); 2514 } 2515 } 2516 } 2517 } 2518 2519 if (msg->gbsmsg->msg==LONG_PRESS) \ ??contactlist_menu_onkey_11: \ 000001F4 040096E5 LDR R0,[R6, #+4] \ 000001F8 9520A0E3 MOV R2,#+149 \ 000001FC 041090E5 LDR R1,[R0, #+4] \ 00000200 402F82E3 ORR R2,R2,#0x100 \ 00000204 020051E1 CMP R1,R2 \ 00000208 0F00001A BNE ??contactlist_menu_onkey_21 2520 { 2521 /* if (msg->gbsmsg->submess=='#') 2522 { 2523 ClearContactT9Key(); 2524 RecountMenu(NULL,1); 2525 gipc.name_to=ipc_xtask_name; 2526 gipc.name_from=ipc_my_name; 2527 gipc.data=0; 2528 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); 2529 if (IsUnlocked()) 2530 { 2531 KbdLock(); 2532 } 2533 // CreateScreenSelectGUI(); 2534 return(-1); 2535 } 2536 if(msg->gbsmsg->submess=='*') 2537 { 2538 ClearContactT9Key(); 2539 RecountMenu(NULL,1); 2540 silenthide=1; 2541 gipc.name_to=ipc_xtask_name; 2542 gipc.name_from=ipc_my_name; 2543 gipc.data=0; 2544 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); 2545 } 2546 2547 if(msg->gbsmsg->submess==RIGHT_BUTTON) 2548 { 2549 if(!t->isgroup) 2550 CreateContactMenu(t); 2551 }*/ 2552 2553 //-------------------- LONG PRESS ACTION ON CL --------------------// 2554 /* switch(msg->gbsmsg->submess) 2555 { 2556 case '1': 2557 Is_Sounds_Enabled=!(Is_Sounds_Enabled); 2558 if(Is_Sounds_Enabled) 2559 ShowMSG(1,(int)"Sound 0n"); 2560 else 2561 ShowMSG(1,(int)"Sound Off"); 2562 SUBPROC((void*)WriteDefSettings); 2563 break; 2564 case '2': 2565 Is_Vibra_Enabled=!(Is_Vibra_Enabled); 2566 SUBPROC((void*)WriteDefSettings); 2567 if(Is_Vibra_Enabled) 2568 ShowMSG(1,(int)"Vibra On"); 2569 else 2570 ShowMSG(1,(int)"Vibra Off"); 2571 break; 2572 case '3': 2573 if(CurrentPrivateStatus!=1) 2574 { 2575 SetPrivateStatus(1);//Инвиз 2576 ShowMSG(1,(int)"Инвиз включен"); 2577 } 2578 else 2579 { 2580 SetPrivateStatus(3); 2581 ShowMSG(1,(int)"Инвиз выключен"); 2582 } 2583 break; 2584 case '4': 2585 Is_Double_Vibra_On=!(Is_Double_Vibra_On); 2586 SUBPROC((void*)WriteDefSettings); 2587 if(Is_Double_Vibra_On) 2588 ShowMSG(1,(int)"Vibra rem On"); 2589 else 2590 ShowMSG(1,(int)"Vibra rem Off"); 2591 break; 2592 case '5': 2593 { 2594 CLIST *cl; 2595 cl=(CLIST *)(&cltop); 2596 while(cl=(CLIST *)(cl->next)) 2597 { 2598 if(cl->log) 2599 { 2600 FreeLOGQ(&cl->log); 2601 cl->msg_count=0; 2602 cl->isactive=0; 2603 } 2604 } 2605 if(strlen(ContactT9Key)) ClearContactT9Key(); 2606 RecountMenu(NULL,1); 2607 return (-1); 2608 } 2609 case '6': 2610 Is_Show_Offline=!(Is_Show_Offline); 2611 if(Is_Show_Offline) 2612 ShowMSG(1,(int)"Offline on"); 2613 else 2614 ShowMSG(1,(int)"Offline off"); 2615 UpdateCLheader(); 2616 break; 2617 case '7': 2618 { 2619 Show_XTX=!(Show_XTX); 2620 if(Show_XTX) 2621 ShowMSG(1,(int)"Default show x-status"); 2622 else 2623 ShowMSG(1,(int)"Default show time"); 2624 } 2625 break; 2626 case '8': 2627 { 2628 WSHDR *ws; 2629 ws=AllocWS(150); 2630 str_2ws(ws,suc_config_name,128); 2631 ExecuteFile(ws,0,0); 2632 FreeWS(ws); 2633 } 2634 break; 2635 case '9': 2636 { 2637 WSHDR *ws; 2638 ws=AllocWS(150); 2639 str_2ws(ws,suc_config_name_mod,128); 2640 ExecuteFile(ws,0,0); 2641 FreeWS(ws); 2642 } 2643 break; 2644 case '0'://ping 2645 { 2646 janis=1; 2647 TPKT *p; 2648 p=malloc(sizeof(PKT)+sizeof(TTime)); 2649 GetDateTime(NULL,(TTime *)p->data); 2650 p->pkt.uin=0; 2651 p->pkt.type=T_ECHO; 2652 p->pkt.data_len=sizeof(TTime); 2653 SUBPROC((void *)SendAnswer,0,p); 2654 } 2655 break; 2656 } */ 2657 LongPressAction(t,msg->gbsmsg->submess); \ 0000020C 081090E5 LDR R1,[R0, #+8] \ 00000210 0500A0E1 MOV R0,R5 \ 00000214 ........ BL LongPressAction 2658 2659 int key=msg->gbsmsg->submess; \ 00000218 040096E5 LDR R0,[R6, #+4] \ 0000021C 080090E5 LDR R0,[R0, #+8] 2660 if ((key>='0')&&(key<='9')) \ 00000220 300050E3 CMP R0,#+48 \ 00000224 080000BA BLT ??contactlist_menu_onkey_21 \ 00000228 3A0050E3 CMP R0,#+58 \ 0000022C 060000AA BGE ??contactlist_menu_onkey_21 2661 { 2662 ClearContactT9Key(); \ 00000230 2010A0E3 MOV R1,#+32 \ 00000234 070088E0 ADD R0,R8,R7 \ 00000238 1D0100EF SWI +285 2663 UpdateCLheader(); \ 0000023C ........ BL UpdateCLheader 2664 RecountMenu(NULL,1); \ 00000240 0110A0E3 MOV R1,#+1 \ 00000244 0000A0E3 MOV R0,#+0 \ 00000248 ........ BL RecountMenu 2665 } 2666 } 2667 return(0); \ ??contactlist_menu_onkey_21: \ 0000024C 0000A0E3 MOV R0,#+0 \ 00000250 F087BDE8 POP {R4-R10,PC} ;; return \ ??contactlist_menu_onkey_22: \ 00000254 8C0095E5 LDR R0,[R5, #+140] \ 00000258 000050E3 CMP R0,#+0 \ 0000025C 0900001A BNE ??contactlist_menu_onkey_23 \ ??contactlist_menu_onkey_20: \ 00000260 005095E5 LDR R5,[R5, #+0] \ 00000264 000055E3 CMP R5,#+0 \ 00000268 F9FFFF1A BNE ??contactlist_menu_onkey_22 \ 0000026C CF5F87E2 ADD R5,R7,#+828 \ ??contactlist_menu_onkey_24: \ 00000270 005095E5 LDR R5,[R5, #+0] \ 00000274 000055E3 CMP R5,#+0 \ 00000278 0200000A BEQ ??contactlist_menu_onkey_23 \ 0000027C 8C0095E5 LDR R0,[R5, #+140] \ 00000280 000050E3 CMP R0,#+0 \ 00000284 F9FFFF0A BEQ ??contactlist_menu_onkey_24 \ ??contactlist_menu_onkey_23: \ 00000288 100095E5 LDR R0,[R5, #+16] \ 0000028C ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000290 000050E3 CMP R0,#+0 \ 00000294 B415D011 LDRHNE R1,[R0, #+84] \ 00000298 00005113 CMPNE R1,#+0 \ 0000029C B445C011 STRHNE R4,[R0, #+84] \ 000002A0 70FFFFEA B ??contactlist_menu_onkey_5 \ ??contactlist_menu_onkey_19: \ 000002A4 2A0059E3 CMP R9,#+42 \ 000002A8 1100001A BNE ??contactlist_menu_onkey_25 \ 000002AC ........ _BLF CountContacts,??CountContacts??rA \ 000002B0 010050E3 CMP R0,#+1 \ 000002B4 CEFFFFBA BLT ??contactlist_menu_onkey_11 \ 000002B8 020000EA B ??contactlist_menu_onkey_26 \ ??contactlist_menu_onkey_27: \ 000002BC 740095E5 LDR R0,[R5, #+116] \ 000002C0 000050E3 CMP R0,#+0 \ 000002C4 EFFFFF1A BNE ??contactlist_menu_onkey_23 \ ??contactlist_menu_onkey_26: \ 000002C8 005095E5 LDR R5,[R5, #+0] \ 000002CC 000055E3 CMP R5,#+0 \ 000002D0 F9FFFF1A BNE ??contactlist_menu_onkey_27 \ 000002D4 CF5F87E2 ADD R5,R7,#+828 \ ??contactlist_menu_onkey_28: \ 000002D8 005095E5 LDR R5,[R5, #+0] \ 000002DC 000055E3 CMP R5,#+0 \ 000002E0 93FFFF0A BEQ ??contactlist_menu_onkey_3 \ 000002E4 740095E5 LDR R0,[R5, #+116] \ 000002E8 000050E3 CMP R0,#+0 \ 000002EC F9FFFF0A BEQ ??contactlist_menu_onkey_28 \ 000002F0 E4FFFFEA B ??contactlist_menu_onkey_23 \ ??contactlist_menu_onkey_25: \ 000002F4 230059E3 CMP R9,#+35 \ 000002F8 4500001A BNE ??contactlist_menu_onkey_29 \ 000002FC ........ _BLF CountContacts,??CountContacts??rA \ 00000300 010050E3 CMP R0,#+1 \ 00000304 BAFFFFBA BLT ??contactlist_menu_onkey_11 \ 00000308 44019FE5 LDR R0,??contactlist_menu_onkey_14+0x8 ;; ActionResh \ 0000030C 000090E5 LDR R0,[R0, #+0] \ 00000310 000050E3 CMP R0,#+0 \ 00000314 1900001A BNE ??contactlist_menu_onkey_30 \ 00000318 9C0095E5 LDR R0,[R5, #+156] \ 0000031C 000050E3 CMP R0,#+0 \ 00000320 0600000A BEQ ??contactlist_menu_onkey_31 \ 00000324 740095E5 LDR R0,[R5, #+116] \ 00000328 000050E3 CMP R0,#+0 \ 0000032C 0300001A BNE ??contactlist_menu_onkey_31 \ 00000330 9C0085E2 ADD R0,R5,#+156 \ 00000334 ........ BL FreeLOGQ \ 00000338 AC4085E5 STR R4,[R5, #+172] \ 0000033C A84085E5 STR R4,[R5, #+168] \ ??contactlist_menu_onkey_31: \ 00000340 740095E5 LDR R0,[R5, #+116] \ 00000344 000050E3 CMP R0,#+0 \ 00000348 0200000A BEQ ??contactlist_menu_onkey_32 \ 0000034C 0C0095E5 LDR R0,[R5, #+12] \ 00000350 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000354 744080E5 STR R4,[R0, #+116] \ ??contactlist_menu_onkey_32: \ 00000358 ........ LDR R1,??DataTable112 ;; UIN \ 0000035C 0C0095E5 LDR R0,[R5, #+12] \ 00000360 001091E5 LDR R1,[R1, #+0] \ 00000364 010050E1 CMP R0,R1 \ 00000368 1D00001A BNE ??contactlist_menu_onkey_33 \ 0000036C CF0F87E2 ADD R0,R7,#+828 \ 00000370 180000EA B ??contactlist_menu_onkey_34 \ ??contactlist_menu_onkey_35: \ 00000374 A80095E5 LDR R0,[R5, #+168] \ 00000378 000050E3 CMP R0,#+0 \ 0000037C 0900001A BNE ??contactlist_menu_onkey_36 \ ??contactlist_menu_onkey_30: \ 00000380 005095E5 LDR R5,[R5, #+0] \ 00000384 000055E3 CMP R5,#+0 \ 00000388 F9FFFF1A BNE ??contactlist_menu_onkey_35 \ 0000038C CF5F87E2 ADD R5,R7,#+828 \ ??contactlist_menu_onkey_37: \ 00000390 005095E5 LDR R5,[R5, #+0] \ 00000394 000055E3 CMP R5,#+0 \ 00000398 65FFFF0A BEQ ??contactlist_menu_onkey_3 \ 0000039C A80095E5 LDR R0,[R5, #+168] \ 000003A0 000050E3 CMP R0,#+0 \ 000003A4 F9FFFF0A BEQ ??contactlist_menu_onkey_37 \ ??contactlist_menu_onkey_36: \ 000003A8 100095E5 LDR R0,[R5, #+16] \ 000003AC ........ _BLF FindGroupByID,??FindGroupByID??rA \ 000003B0 000050E3 CMP R0,#+0 \ 000003B4 B415D011 LDRHNE R1,[R0, #+84] \ 000003B8 00005113 CMPNE R1,#+0 \ 000003BC B445C011 STRHNE R4,[R0, #+84] \ 000003C0 0110A0E3 MOV R1,#+1 \ 000003C4 0500A0E1 MOV R0,R5 \ 000003C8 0E0000EA B ??contactlist_menu_onkey_38 \ ??contactlist_menu_onkey_39: \ 000003CC 741090E5 LDR R1,[R0, #+116] \ 000003D0 000051E3 CMP R1,#+0 \ 000003D4 74408015 STRNE R4,[R0, #+116] \ ??contactlist_menu_onkey_34: \ 000003D8 000090E5 LDR R0,[R0, #+0] \ 000003DC 000050E3 CMP R0,#+0 \ 000003E0 F9FFFF1A BNE ??contactlist_menu_onkey_39 \ ??contactlist_menu_onkey_33: \ 000003E4 070088E0 ADD R0,R8,R7 \ 000003E8 1B0000EF SWI +27 \ 000003EC 000050E3 CMP R0,#+0 \ 000003F0 0200000A BEQ ??contactlist_menu_onkey_40 \ 000003F4 2010A0E3 MOV R1,#+32 \ 000003F8 070088E0 ADD R0,R8,R7 \ 000003FC 1D0100EF SWI +285 \ ??contactlist_menu_onkey_40: \ 00000400 0010A0E3 MOV R1,#+0 \ 00000404 0100A0E1 MOV R0,R1 \ ??contactlist_menu_onkey_38: \ 00000408 ........ BL RecountMenu \ ??contactlist_menu_onkey_1: \ 0000040C 0400E0E1 MVN R0,R4 \ 00000410 F087BDE8 POP {R4-R10,PC} \ ??contactlist_menu_onkey_29: \ 00000414 3E0059E3 CMP R9,#+62 \ 00000418 75FFFF1A BNE ??contactlist_menu_onkey_11 \ 0000041C 000055E3 CMP R5,#+0 \ 00000420 73FFFF0A BEQ ??contactlist_menu_onkey_11 \ 00000424 080095E5 LDR R0,[R5, #+8] \ 00000428 000050E3 CMP R0,#+0 \ 0000042C 70FFFF1A BNE ??contactlist_menu_onkey_11 \ 00000430 0500A0E1 MOV R0,R5 \ 00000434 ........ _BLF FreeXText,??FreeXText??rA \ 00000438 B84085E5 STR R4,[R5, #+184] \ 0000043C 0C0095E5 LDR R0,[R5, #+12] \ 00000440 ........ BL RequestXText \ 00000444 960100EF SWI +406 \ 00000448 EFFFFFEA B ??contactlist_menu_onkey_1 \ ??contactlist_menu_onkey_14: \ 0000044C ........ DC32 isVolUpButton \ 00000450 ........ DC32 isVolDownButton \ 00000454 ........ DC32 ActionResh 2668 } 2669 \ In segment CODE, align 4, keep-with-next 2670 void GetOnTotalContact(int group_id,int *_onlinetotal) 2671 { 2672 CLIST *t; 2673 t=(CLIST *)&cltop; \ GetOnTotalContact: \ 00000000 ........ LDR R2,??DataTable98 ;; S_ICONS + 828 \ 00000004 30002DE9 PUSH {R4,R5} 2674 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 2675 while((t=t->next)) 2676 { 2677 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 2678 { 2679 total++; 2680 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 2681 } 2682 } \ ??GetOnTotalContact_0: \ 00000040 002092E5 LDR R2,[R2, #+0] \ 00000044 000052E3 CMP R2,#+0 \ 00000048 F3FFFF1A BNE ??GetOnTotalContact_1 2683 _onlinetotal[0]=online; \ 0000004C 003081E5 STR R3,[R1, #+0] 2684 _onlinetotal[1]=total; \ 00000050 04C081E5 STR R12,[R1, #+4] 2685 } \ 00000054 3000BDE8 POP {R4,R5} \ 00000058 1EFF2FE1 BX LR ;; return 2686 2687 \ In segment CODE, align 4, keep-with-next 2688 void contactlist_menu_iconhndl(void *data, int curitem, void *unk) 2689 { \ contactlist_menu_iconhndl: \ 00000000 F24F2DE9 PUSH {R1,R4-R11,LR} \ 00000004 9CDF4DE2 SUB SP,SP,#+624 2690 CLIST *t; 2691 #ifdef USE_MLMENU 2692 void *item=AllocMLMenuItem(data); 2693 #else 2694 void *item=AllocMenuItem(data); 2695 #endif 2696 int icon; 2697 2698 WSHDR *ws2; 2699 #ifdef USE_MLMENU 2700 WSHDR *ws4; 2701 #endif 2702 WSHDR ws1loc, *ws1; 2703 unsigned short num[128]; 2704 ws1=CreateLocalWS(&ws1loc,num,128); 2705 #ifdef USE_MLMENU 2706 WSHDR ws3loc, *ws3; 2707 unsigned short num3[128]; 2708 ws3=CreateLocalWS(&ws3loc,num3,128); 2709 char s[64]; 2710 #endif 2711 t=FindContactByN(curitem); 2712 if (t) \ 00000008 ........ LDR R10,??DataTable104 ;; `?` \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 190200EF SWI +537 \ 00000014 0050A0E1 MOV R5,R0 \ 00000018 8020A0E3 MOV R2,#+128 \ 0000001C 08108DE2 ADD R1,SP,#+8 \ 00000020 920F8DE2 ADD R0,SP,#+584 \ 00000024 270100EF SWI +295 \ 00000028 0060A0E1 MOV R6,R0 \ 0000002C 8020A0E3 MOV R2,#+128 \ 00000030 421F8DE2 ADD R1,SP,#+264 \ 00000034 970F8DE2 ADD R0,SP,#+604 \ 00000038 270100EF SWI +295 \ 0000003C 0070A0E1 MOV R7,R0 \ 00000040 70029DE5 LDR R0,[SP, #+624] \ 00000044 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000048 0080B0E1 MOVS R8,R0 \ 0000004C 7700000A BEQ ??contactlist_menu_iconhndl_0 2713 { 2714 icon=GetIconIndex(t); \ 00000050 ........ BL GetIconIndex \ 00000054 0090A0E1 MOV R9,R0 2715 if (icon!=IS_GROUP) \ 00000058 0F0059E3 CMP R9,#+15 \ 0000005C 6200000A BEQ ??contactlist_menu_iconhndl_1 2716 { 2717 if(t->just_now) \ 00000060 740098E5 LDR R0,[R8, #+116] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 0C00000A BEQ ??contactlist_menu_iconhndl_2 2718 { 2719 char *test=malloc(64); \ 0000006C 4000A0E3 MOV R0,#+64 \ 00000070 140000EF SWI +20 \ 00000074 00B0A0E1 MOV R11,R0 2720 sprintf(test, ">> %s <<", t->name); \ 00000078 142088E2 ADD R2,R8,#+20 \ 0000007C 5A1F8AE2 ADD R1,R10,#+360 \ 00000080 160000EF SWI +22 2721 wsprintf(ws1,percent_t,test); \ 00000084 0B20A0E1 MOV R2,R11 \ 00000088 34108AE2 ADD R1,R10,#+52 \ 0000008C 0600A0E1 MOV R0,R6 \ 00000090 240100EF SWI +292 2722 mfree(test); \ 00000094 0B00A0E1 MOV R0,R11 \ 00000098 150000EF SWI +21 \ 0000009C 030000EA B ??contactlist_menu_iconhndl_3 2723 } 2724 else 2725 wsprintf(ws1,percent_t,t->name); \ ??contactlist_menu_iconhndl_2: \ 000000A0 142088E2 ADD R2,R8,#+20 \ 000000A4 34108AE2 ADD R1,R10,#+52 \ 000000A8 0600A0E1 MOV R0,R6 \ 000000AC 240100EF SWI +292 2726 if (t->just_now) \ ??contactlist_menu_iconhndl_3: \ 000000B0 740098E5 LDR R0,[R8, #+116] \ 000000B4 08B0A0E3 MOV R11,#+8 \ 000000B8 E0BC8BE3 ORR R11,R11,#0xE000 \ 000000BC 000050E3 CMP R0,#+0 2727 { 2728 wsInsertChar(ws1,0x0004,1); \ 000000C0 0120A013 MOVNE R2,#+1 \ 000000C4 0410A013 MOVNE R1,#+4 \ 000000C8 0400001A BNE ??contactlist_menu_iconhndl_4 2729 wsInsertChar(ws1,0xE008,1); 2730 } 2731 else 2732 if (t->isactive) \ 000000CC A80098E5 LDR R0,[R8, #+168] \ 000000D0 000050E3 CMP R0,#+0 \ 000000D4 0700000A BEQ ??contactlist_menu_iconhndl_5 2733 { 2734 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 2735 wsInsertChar(ws1,0xE008,1); \ 000000E8 0120A0E3 MOV R2,#+1 \ 000000EC 0B10A0E1 MOV R1,R11 \ 000000F0 0600A0E1 MOV R0,R6 \ 000000F4 1D0000EF SWI +29 2736 } 2737 2738 #ifdef USE_MLMENU 2739 if ((t->xtext && t->xtext[0]!=0) && (t->isShowXst) && (t->state!=0xFFFF))//Если контакт онлайн и показывать хстату \ ??contactlist_menu_iconhndl_5: \ 000000F8 B00098E5 LDR R0,[R8, #+176] \ 000000FC 0AB08BE2 ADD R11,R11,#+10 \ 00000100 000050E3 CMP R0,#+0 \ 00000104 0000D015 LDRBNE R0,[R0, #+0] \ 00000108 00005013 CMPNE R0,#+0 \ 0000010C 78009815 LDRNE R0,[R8, #+120] \ 00000110 00005013 CMPNE R0,#+0 \ 00000114 1400000A BEQ ??contactlist_menu_iconhndl_6 \ 00000118 B405D8E1 LDRH R0,[R8, #+84] \ 0000011C FF10A0E3 MOV R1,#+255 \ 00000120 FF1C81E3 ORR R1,R1,#0xFF00 \ 00000124 010050E1 CMP R0,R1 \ 00000128 0F00000A BEQ ??contactlist_menu_iconhndl_6 2740 { 2741 int i; 2742 zeromem(s,64); \ 0000012C 4010A0E3 MOV R1,#+64 \ 00000130 820F8DE2 ADD R0,SP,#+520 \ 00000134 1D0100EF SWI +285 2743 i=t->xtext[0]; \ 00000138 B00098E5 LDR R0,[R8, #+176] \ ??contactlist_menu_iconhndl_7: \ 0000013C 0020D0E5 LDRB R2,[R0, #+0] 2744 if (i>63) i=63; 2745 strncpy(s,t->xtext+1,i); \ 00000140 011080E2 ADD R1,R0,#+1 \ 00000144 820F8DE2 ADD R0,SP,#+520 \ 00000148 400052E3 CMP R2,#+64 \ 0000014C 3F20A0A3 MOVGE R2,#+63 \ 00000150 160100EF SWI +278 2746 wsprintf(ws3,"%c%t",0xE012,s); \ 00000154 823F8DE2 ADD R3,SP,#+520 \ 00000158 0B20A0E1 MOV R2,R11 \ 0000015C 5D1F8AE2 ADD R1,R10,#+372 \ 00000160 0700A0E1 MOV R0,R7 \ 00000164 240100EF SWI +292 \ 00000168 110000EA B ??contactlist_menu_iconhndl_8 2747 } 2748 else 2749 if(t->xtext2 && t->xtext2[0]!=0 && isLogStatusChange) \ ??contactlist_menu_iconhndl_6: \ 0000016C B40098E5 LDR R0,[R8, #+180] \ 00000170 000050E3 CMP R0,#+0 \ 00000174 0000D015 LDRBNE R0,[R0, #+0] \ 00000178 00005013 CMPNE R0,#+0 \ 0000017C 0800000A BEQ ??contactlist_menu_iconhndl_9 \ 00000180 ........ LDR R0,??DataTable100 ;; isLogStatusChange \ 00000184 000090E5 LDR R0,[R0, #+0] \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 0400000A BEQ ??contactlist_menu_iconhndl_9 2750 { 2751 int i; 2752 zeromem(s,64); \ 00000190 4010A0E3 MOV R1,#+64 \ 00000194 820F8DE2 ADD R0,SP,#+520 \ 00000198 1D0100EF SWI +285 2753 i=t->xtext2[0]; \ 0000019C B40098E5 LDR R0,[R8, #+180] \ 000001A0 E5FFFFEA B ??contactlist_menu_iconhndl_7 2754 if (i>63) i=63; 2755 strncpy(s,t->xtext2+1,i); 2756 wsprintf(ws3,"%c%t",0xE012,s); 2757 } 2758 else 2759 wsprintf(ws3,percent_d,t->uin); \ ??contactlist_menu_iconhndl_9: \ 000001A4 0C2098E5 LDR R2,[R8, #+12] \ 000001A8 3A108AE2 ADD R1,R10,#+58 \ 000001AC 0700A0E1 MOV R0,R7 \ 000001B0 240100EF SWI +292 2760 if ((t->xstatexstate)) \ ??contactlist_menu_iconhndl_8: \ 000001B4 B605D8E1 LDRH R0,[R8, #+86] \ 000001B8 ........ LDR R2,??DataTable101 ;; total_xstatuses \ 000001BC 0010A0E1 MOV R1,R0 \ 000001C0 002092E5 LDR R2,[R2, #+0] \ 000001C4 020051E1 CMP R1,R2 \ 000001C8 1B0000AA BGE ??contactlist_menu_iconhndl_10 \ 000001CC 000050E3 CMP R0,#+0 \ 000001D0 1900000A BEQ ??contactlist_menu_iconhndl_10 2761 { 2762 wsInsertChar(ws3,FIRST_UCS2_BITMAP+t->xstate,1); \ 000001D4 0120A0E3 MOV R2,#+1 \ 000001D8 460F8BE2 ADD R0,R11,#+280 \ 000001DC 011080E0 ADD R1,R0,R1 \ 000001E0 0700A0E1 MOV R0,R7 \ 000001E4 1D0000EF SWI +29 \ 000001E8 130000EA B ??contactlist_menu_iconhndl_10 2763 } 2764 #endif 2765 } 2766 else 2767 { 2768 int onlinetotal[2]; 2769 GetOnTotalContact(t->group,onlinetotal); \ ??contactlist_menu_iconhndl_1: \ 000001EC 100098E5 LDR R0,[R8, #+16] \ 000001F0 0D10A0E1 MOV R1,SP \ 000001F4 ........ BL GetOnTotalContact 2770 #ifdef USE_MLMENU 2771 wsprintf(ws1,percent_t,t->name); \ 000001F8 142088E2 ADD R2,R8,#+20 \ 000001FC 34108AE2 ADD R1,R10,#+52 \ 00000200 0600A0E1 MOV R0,R6 \ 00000204 240100EF SWI +292 2772 wsprintf(ws3,"(%d/%d)",onlinetotal[0],onlinetotal[1]); \ 00000208 04309DE5 LDR R3,[SP, #+4] \ 0000020C 00209DE5 LDR R2,[SP, #+0] \ 00000210 5F1F8AE2 ADD R1,R10,#+380 \ 00000214 0700A0E1 MOV R0,R7 \ 00000218 240100EF SWI +292 2773 #else 2774 wsprintf(ws1,"%t%c%c(%d/%d)",t->name,0xE01D,0xE012,onlinetotal[0],onlinetotal[1]); 2775 #endif 2776 if (t->state) icon++; //Модификация иконки группы \ 0000021C B405D8E1 LDRH R0,[R8, #+84] \ 00000220 000050E3 CMP R0,#+0 \ 00000224 0400000A BEQ ??contactlist_menu_iconhndl_10 \ 00000228 019089E2 ADD R9,R9,#+1 \ 0000022C 020000EA B ??contactlist_menu_iconhndl_10 2777 } 2778 } 2779 else 2780 { 2781 wsprintf(ws1, LG_CLERROR); \ ??contactlist_menu_iconhndl_0: \ 00000230 611F8AE2 ADD R1,R10,#+388 \ 00000234 0600A0E1 MOV R0,R6 \ 00000238 240100EF SWI +292 2782 } 2783 ws2=AllocMenuWS(data,ws1->wsbody[0]+1); \ ??contactlist_menu_iconhndl_10: \ 0000023C 000096E5 LDR R0,[R6, #+0] \ 00000240 B000D0E1 LDRH R0,[R0, #+0] \ 00000244 011080E2 ADD R1,R0,#+1 \ 00000248 0400A0E1 MOV R0,R4 \ 0000024C 980100EF SWI +408 \ 00000250 0080A0E1 MOV R8,R0 2784 wstrcpy(ws2,ws1); \ 00000254 0610A0E1 MOV R1,R6 \ 00000258 1F0100EF SWI +287 2785 2786 /* 2787 #ifdef kluchnik 2788 if ((t->xstatexstate)) 2789 { 2790 wsInsertChar(ws2,NumXStatusToIconBar+t->xstate,1); 2791 } 2792 #endif 2793 */ 2794 2795 SetMenuItemIconArray(data, item, S_ICONS+icon); \ 0000025C ........ LDR R0,??DataTable102 ;; S_ICONS \ 00000260 0510A0E1 MOV R1,R5 \ 00000264 092180E0 ADD R2,R0,R9, LSL #+2 \ 00000268 0400A0E1 MOV R0,R4 \ 0000026C 990100EF SWI +409 2796 #ifdef USE_MLMENU 2797 ws4=AllocMenuWS(data,ws3->wsbody[0]); \ 00000270 000097E5 LDR R0,[R7, #+0] \ 00000274 B010D0E1 LDRH R1,[R0, #+0] \ 00000278 0400A0E1 MOV R0,R4 \ 0000027C 980100EF SWI +408 \ 00000280 0060A0E1 MOV R6,R0 2798 wstrcpy(ws4,ws3); \ 00000284 0710A0E1 MOV R1,R7 \ 00000288 1F0100EF SWI +287 2799 SetMLMenuItemText(data, item, ws2, ws4, curitem); \ 0000028C 70029DE5 LDR R0,[SP, #+624] \ 00000290 0630A0E1 MOV R3,R6 \ 00000294 01002DE9 PUSH {R0} \ 00000298 0820A0E1 MOV R2,R8 \ 0000029C 0510A0E1 MOV R1,R5 \ 000002A0 0400A0E1 MOV R0,R4 \ 000002A4 180200EF SWI +536 2800 #else 2801 SetMenuItemText(data, item, ws2, curitem); 2802 #endif 2803 } \ 000002A8 9EDF8DE2 ADD SP,SP,#+632 \ 000002AC F08FBDE8 POP {R4-R11,PC} ;; return 2804 2805 //=============================================================================================== 2806 2807 int DNR_ID=0; 2808 int DNR_TRIES=3; 2809 2810 char hostname[128]; //2058 che toka 128? :) 2811 2812 int host_counter = 0; 2813 2814 //--------------------------------------------------------------------------- 2815 \ In segment CODE, align 4, keep-with-next 2816 const char *GetHost(int cnt, const char *str, char *buf) 2817 { 2818 const char *tmp = str, *begin, *end; \ GetHost: \ 00000000 0130A0E1 MOV R3,R1 2819 if(cnt) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0100001A BNE ??GetHost_0 \ 0000000C 180000EA B ??GetHost_1 2820 { 2821 for(;cnt;cnt--) 2822 { 2823 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetHost_2: \ 00000010 011081E2 ADD R1,R1,#+1 \ ??GetHost_0: \ 00000014 00C0D1E5 LDRB R12,[R1, #+0] \ 00000018 3B005CE3 CMP R12,#+59 \ 0000001C 20005C13 CMPNE R12,#+32 \ 00000020 0D005C13 CMPNE R12,#+13 \ 00000024 0A005C13 CMPNE R12,#+10 \ 00000028 00005C13 CMPNE R12,#+0 \ 0000002C F7FFFF1A BNE ??GetHost_2 2824 if(!*str) str = tmp; \ 00000030 00005CE3 CMP R12,#+0 \ 00000034 0200001A BNE ??GetHost_3 \ 00000038 0310A0E1 MOV R1,R3 \ 0000003C 000000EA B ??GetHost_3 2825 for(;(*str==';' || *str==' ' || *str=='\x0D' || *str=='\x0A') && *str; str++); \ ??GetHost_4: \ 00000040 011081E2 ADD R1,R1,#+1 \ ??GetHost_3: \ 00000044 00C0D1E5 LDRB R12,[R1, #+0] \ 00000048 3B005CE3 CMP R12,#+59 \ 0000004C 20005C13 CMPNE R12,#+32 \ 00000050 0D005C13 CMPNE R12,#+13 \ 00000054 0A005C13 CMPNE R12,#+10 \ 00000058 0100001A BNE ??GetHost_5 \ 0000005C 00005CE3 CMP R12,#+0 \ 00000060 F6FFFF1A BNE ??GetHost_4 2826 if(!*str) str = tmp; \ ??GetHost_5: \ 00000064 00005CE3 CMP R12,#+0 \ 00000068 0310A001 MOVEQ R1,R3 2827 } \ 0000006C 010050E2 SUBS R0,R0,#+1 \ 00000070 E7FFFF1A BNE ??GetHost_0 2828 } 2829 tmp = buf; \ ??GetHost_1: \ 00000074 0200A0E1 MOV R0,R2 2830 begin = str; \ 00000078 0130A0E1 MOV R3,R1 \ 0000007C 000000EA B ??GetHost_6 2831 for(;*str!=';' && *str!=':' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetHost_7: \ 00000080 011081E2 ADD R1,R1,#+1 \ ??GetHost_6: \ 00000084 00C0D1E5 LDRB R12,[R1, #+0] \ 00000088 3B005CE3 CMP R12,#+59 \ 0000008C 3A005C13 CMPNE R12,#+58 \ 00000090 20005C13 CMPNE R12,#+32 \ 00000094 0D005C13 CMPNE R12,#+13 \ 00000098 0A005C13 CMPNE R12,#+10 \ 0000009C 00005C13 CMPNE R12,#+0 \ 000000A0 F6FFFF1A BNE ??GetHost_7 2832 end = str; 2833 for(;begin0x2F && attr[k]<0x3A) {ret=ret*10+attr[k]-0x30;} else { if ( attr[k]=='-') {neg=-1;} else {return(ret*neg);}} \ ??atoi_1: \ 00000014 04C0A0E1 MOV R12,R4 \ 00000018 3A005CE3 CMP R12,#+58 \ 0000001C 0600002A BCS ??atoi_2 \ 00000020 0A40A0E3 MOV R4,#+10 \ 00000024 94C121E0 MLA R1,R4,R1,R12 \ 00000028 301041E2 SUB R1,R1,#+48 \ ??atoi_3: \ 0000002C 013083E2 ADD R3,R3,#+1 \ ??atoi_0: \ 00000030 0040D3E7 LDRB R4,[R3, +R0] \ 00000034 300054E3 CMP R4,#+48 \ 00000038 F5FFFF2A BCS ??atoi_1 \ ??atoi_2: \ 0000003C 2D0054E3 CMP R4,#+45 \ 00000040 0020E003 MVNEQ R2,#+0 \ 00000044 F8FFFF0A BEQ ??atoi_3 \ 00000048 1000BDE8 POP {R4} \ 0000004C 920100E0 MUL R0,R2,R1 \ 00000050 1EFF2FE1 BX LR ;; return 2845 } 2846 } 2847 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 2848 int GetPort(int cnt, const char *str) 2849 { \ GetPort: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 2850 const char *tmp = str; \ 00000008 01C0A0E1 MOV R12,R1 2851 char numbuf[6], numcnt = 0; \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 0030A0E3 MOV R3,#+0 2852 if(cnt) \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0100001A BNE ??GetPort_0 \ 0000001C 180000EA B ??GetPort_1 2853 { 2854 for(;cnt;cnt--) 2855 { 2856 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetPort_2: \ 00000020 011081E2 ADD R1,R1,#+1 \ ??GetPort_0: \ 00000024 0040D1E5 LDRB R4,[R1, #+0] \ 00000028 3B0054E3 CMP R4,#+59 \ 0000002C 20005413 CMPNE R4,#+32 \ 00000030 0D005413 CMPNE R4,#+13 \ 00000034 0A005413 CMPNE R4,#+10 \ 00000038 00005413 CMPNE R4,#+0 \ 0000003C F7FFFF1A BNE ??GetPort_2 2857 if(!*str) str = tmp; \ 00000040 000054E3 CMP R4,#+0 \ 00000044 0200001A BNE ??GetPort_3 \ 00000048 0C10A0E1 MOV R1,R12 \ 0000004C 000000EA B ??GetPort_3 2858 for(;(*str==';' || *str==' ' || *str=='\x0D' || *str=='\x0A') && *str; str++); \ ??GetPort_4: \ 00000050 011081E2 ADD R1,R1,#+1 \ ??GetPort_3: \ 00000054 0040D1E5 LDRB R4,[R1, #+0] \ 00000058 3B0054E3 CMP R4,#+59 \ 0000005C 20005413 CMPNE R4,#+32 \ 00000060 0D005413 CMPNE R4,#+13 \ 00000064 0A005413 CMPNE R4,#+10 \ 00000068 0100001A BNE ??GetPort_5 \ 0000006C 000054E3 CMP R4,#+0 \ 00000070 F6FFFF1A BNE ??GetPort_4 2859 if(!*str) str = tmp; \ ??GetPort_5: \ 00000074 000054E3 CMP R4,#+0 \ 00000078 0C10A001 MOVEQ R1,R12 2860 } \ 0000007C 010050E2 SUBS R0,R0,#+1 \ 00000080 E7FFFF1A BNE ??GetPort_0 2861 } 2862 for(;*str!=';' && *str!=':' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetPort_1: \ 00000084 0000D1E5 LDRB R0,[R1, #+0] \ 00000088 3B0050E3 CMP R0,#+59 \ 0000008C 3A005013 CMPNE R0,#+58 \ 00000090 20005013 CMPNE R0,#+32 \ 00000094 0D005013 CMPNE R0,#+13 \ 00000098 0A005013 CMPNE R0,#+10 \ 0000009C 00005013 CMPNE R0,#+0 \ 000000A0 01108112 ADDNE R1,R1,#+1 \ 000000A4 F6FFFF1A BNE ??GetPort_1 2863 if(*str!=':') return NATICQ_PORT; \ 000000A8 ........ LDRB R0,[R1], #+1 \ 000000AC 3A0050E3 CMP R0,#+58 \ 000000B0 58009F15 LDRNE R0,??GetPort_6 ;; NATICQ_PORT \ 000000B4 00009015 LDRNE R0,[R0, #+0] \ 000000B8 1680BD18 POPNE {R1,R2,R4,PC} 2864 str++; 2865 numbuf[5] = 0; \ 000000BC 0520CDE5 STRB R2,[SP, #+5] \ 000000C0 030000EA B ??GetPort_7 2866 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str && numcnt<5; numbuf[numcnt] = *str, str++, numcnt++); \ ??GetPort_8: \ 000000C4 ........ LDRB R4,[R1], #+1 \ 000000C8 013083E2 ADD R3,R3,#+1 \ 000000CC FF3003E2 AND R3,R3,#0xFF \ 000000D0 0040C0E5 STRB R4,[R0, #+0] \ ??GetPort_7: \ 000000D4 0D40A0E1 MOV R4,SP \ 000000D8 040083E0 ADD R0,R3,R4 \ 000000DC 0040D1E5 LDRB R4,[R1, #+0] \ 000000E0 3B0054E3 CMP R4,#+59 \ 000000E4 20005413 CMPNE R4,#+32 \ 000000E8 0D005413 CMPNE R4,#+13 \ 000000EC 0A005413 CMPNE R4,#+10 \ 000000F0 00005413 CMPNE R4,#+0 \ 000000F4 0100000A BEQ ??GetPort_9 \ 000000F8 050053E3 CMP R3,#+5 \ 000000FC F0FFFF3A BCC ??GetPort_8 2867 numbuf[numcnt] = 0; //2058 \ ??GetPort_9: \ 00000100 0020C0E5 STRB R2,[R0, #+0] 2868 return atoi(numbuf); \ 00000104 0D00A0E1 MOV R0,SP \ 00000108 ........ BL atoi \ 0000010C 1680BDE8 POP {R1,R2,R4,PC} ;; return \ ??GetPort_6: \ 00000110 ........ DC32 NATICQ_PORT 2869 2870 } 2871 // 2872 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 2873 int GetHostsCount(const char *str) 2874 { 2875 char cnt = 1; \ GetHostsCount: \ 00000000 0110A0E3 MOV R1,#+1 \ 00000004 000000EA B ??GetHostsCount_0 2876 for(;cnt;cnt++) 2877 { 2878 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 2879 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 2880 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 2881 if(!*str) return cnt; \ ??GetHostsCount_5: \ 0000005C 000052E3 CMP R2,#+0 \ 00000060 F2FFFF0A BEQ ??GetHostsCount_3 2882 } \ 00000064 011081E2 ADD R1,R1,#+1 \ 00000068 FF1011E2 ANDS R1,R1,#0xFF \ 0000006C E6FFFF1A BNE ??GetHostsCount_0 2883 return 0; \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 1EFF2FE1 BX LR ;; return 2884 } 2885 //--------------------------------------------------------------------------- 2886 \ In segment CODE, align 4, keep-with-next 2887 void create_connect(void) 2888 { \ create_connect: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2889 // static int host_counter = 0; 2890 char hostbuf[128], buf[128]; 2891 int hostport; 2892 int ***p_res=NULL; 2893 void do_reconnect(void); 2894 SOCK_ADDR sa; 2895 //Устанавливаем соединение 2896 connect_state = 0; \ 00000004 ........ LDR R5,??DataTable109 ;; S_ICONS 2897 int err; 2898 unsigned int ip; 2899 GBS_DelTimer(&reconnect_tmr); 2900 if (!IsGPRSEnabled()) \ 00000008 ........ LDR R8,??DataTable104 ;; `?` \ 0000000C 45DF4DE2 SUB SP,SP,#+276 \ 00000010 0040A0E3 MOV R4,#+0 \ 00000014 00408DE5 STR R4,[SP, #+0] \ 00000018 144385E5 STR R4,[R5, #+788] \ 0000001C B800A0E3 MOV R0,#+184 \ 00000020 680D80E3 ORR R0,R0,#0x1A00 \ 00000024 056080E0 ADD R6,R0,R5 \ 00000028 0600A0E1 MOV R0,R6 \ 0000002C 8C0100EF SWI +396 \ 00000030 9800A0E3 MOV R0,#+152 \ 00000034 640D80E3 ORR R0,R0,#0x1900 \ 00000038 057080E0 ADD R7,R0,R5 \ 0000003C A70000EF SWI +167 \ 00000040 000050E3 CMP R0,#+0 \ 00000044 0400001A BNE ??create_connect_0 2901 { 2902 is_gprs_online=0; \ 00000048 344385E5 STR R4,[R5, #+820] 2903 strcpy(logmsg,LG_GRWAITFORGPRS); \ 0000004C 631F88E2 ADD R1,R8,#+396 \ 00000050 0700A0E1 MOV R0,R7 \ 00000054 1A0000EF SWI +26 2904 SMART_REDRAW(); \ 00000058 850000EA B ??create_connect_1 2905 return; 2906 } 2907 DNR_ID=0; 2908 *socklasterr()=0; 2909 if(host_counter > GetHostsCount(NATICQ_HOST)-1) host_counter = 0; //2058 \ ??create_connect_0: \ 0000005C 90929FE5 LDR R9,??create_connect_2+0x4 ;; NATICQ_HOST \ 00000060 D04385E5 STR R4,[R5, #+976] \ 00000064 7C8100EF SWI +33148 \ 00000068 004080E5 STR R4,[R0, #+0] \ 0000006C 0900A0E1 MOV R0,R9 \ 00000070 ........ BL GetHostsCount \ 00000074 D81395E5 LDR R1,[R5, #+984] \ 00000078 010040E2 SUB R0,R0,#+1 \ 0000007C 010050E1 CMP R0,R1 \ 00000080 D84385B5 STRLT R4,[R5, #+984] 2910 GetHost(host_counter, NATICQ_HOST, hostbuf); \ 00000084 D80395E5 LDR R0,[R5, #+984] \ 00000088 14208DE2 ADD R2,SP,#+20 \ 0000008C 0910A0E1 MOV R1,R9 \ 00000090 ........ BL GetHost 2911 hostport = GetPort(host_counter, NATICQ_HOST); \ 00000094 D80395E5 LDR R0,[R5, #+984] \ 00000098 0910A0E1 MOV R1,R9 \ 0000009C ........ BL GetPort \ 000000A0 0090A0E1 MOV R9,R0 2912 host_counter++; \ 000000A4 D80395E5 LDR R0,[R5, #+984] 2913 2914 sprintf(hostname, "Connect to %s:%d", hostbuf, hostport); //2058 - stavim hostname, izbavlyaemsya ot buf \ 000000A8 0930A0E1 MOV R3,R9 \ 000000AC 010080E2 ADD R0,R0,#+1 \ 000000B0 D80385E5 STR R0,[R5, #+984] \ 000000B4 14208DE2 ADD R2,SP,#+20 \ 000000B8 691F88E2 ADD R1,R8,#+420 \ 000000BC 6800A0E3 MOV R0,#+104 \ 000000C0 700D80E3 ORR R0,R0,#0x1C00 \ 000000C4 050080E0 ADD R0,R0,R5 \ 000000C8 160000EF SWI +22 2915 //strcpy(hostbuf2, hostbuf); //vyvod host v get_online_time 2916 zeromem(hostbuf2,128); \ 000000CC E800A0E3 MOV R0,#+232 \ 000000D0 6C0D80E3 ORR R0,R0,#0x1B00 \ 000000D4 05A080E0 ADD R10,R0,R5 \ 000000D8 8010A0E3 MOV R1,#+128 \ 000000DC 0A00A0E1 MOV R0,R10 \ 000000E0 1D0100EF SWI +285 2917 sprintf(hostbuf2, percent_s,hostbuf); \ 000000E4 14208DE2 ADD R2,SP,#+20 \ 000000E8 371088E2 ADD R1,R8,#+55 \ 000000EC 0A00A0E1 MOV R0,R10 2918 strcpy(logmsg,buf); 2919 SMART_REDRAW(); 2920 2921 ip=str2ip(hostbuf); \ 000000F0 ........ LDR R10,??DataTable105 ;; do_reconnect \ 000000F4 160000EF SWI +22 \ 000000F8 94108DE2 ADD R1,SP,#+148 \ 000000FC 0700A0E1 MOV R0,R7 \ 00000100 1A0000EF SWI +26 \ 00000104 ........ BL SMART_REDRAW \ 00000108 14008DE2 ADD R0,SP,#+20 \ 0000010C B70100EF SWI +439 \ 00000110 04B0E0E1 MVN R11,R4 \ 00000114 0B0050E1 CMP R0,R11 \ 00000118 0500000A BEQ ??create_connect_3 2922 if (ip!=0xFFFFFFFF) 2923 { 2924 sa.ip=ip; \ 0000011C 08008DE5 STR R0,[SP, #+8] 2925 strcpy(logmsg,"\nConnect by IP!"); //strcat->strcpy \ 00000120 6E1F88E2 ADD R1,R8,#+440 \ 00000124 0700A0E1 MOV R0,R7 \ 00000128 1A0000EF SWI +26 2926 SMART_REDRAW(); \ 0000012C ........ BL SMART_REDRAW 2927 goto L_CONNECT; \ 00000130 390000EA B ??create_connect_4 2928 } \ ??create_connect_3: \ 00000134 6D1F8FE2 ADR R1,??create_connect_2 ;; "\n" \ 00000138 0700A0E1 MOV R0,R7 2929 strcat(logmsg,"\n"); \ 0000013C 170000EF SWI +23 2930 strcpy(logmsg,LG_GRSENDDNR); //strcat->strcpy \ 00000140 721F88E2 ADD R1,R8,#+456 \ 00000144 0700A0E1 MOV R0,R7 \ 00000148 1A0000EF SWI +26 2931 SMART_REDRAW(); \ 0000014C ........ BL SMART_REDRAW 2932 err=async_gethostbyname(hostbuf,&p_res,&DNR_ID); //03461351 3<70<19<81 \ 00000150 F42F85E2 ADD R2,R5,#+976 \ 00000154 0D10A0E1 MOV R1,SP \ 00000158 14008DE2 ADD R0,SP,#+20 \ 0000015C B60100EF SWI +438 \ 00000160 0030B0E1 MOVS R3,R0 2933 if (err) \ 00000164 1600000A BEQ ??create_connect_5 2934 { 2935 if ((err==0xC9)||(err==0xD6)) \ 00000168 C90053E3 CMP R3,#+201 \ 0000016C D6005313 CMPNE R3,#+214 \ 00000170 0600001A BNE ??create_connect_6 2936 { 2937 if (DNR_ID) \ 00000174 D00395E5 LDR R0,[R5, #+976] \ 00000178 000050E3 CMP R0,#+0 \ 0000017C 1000000A BEQ ??create_connect_5 2938 { 2939 host_counter--; \ 00000180 D80395E5 LDR R0,[R5, #+984] \ 00000184 010040E2 SUB R0,R0,#+1 \ 00000188 D80385E5 STR R0,[R5, #+984] 2940 return; //Ждем готовности DNR \ 0000018C 390000EA B ??create_connect_7 2941 } 2942 } 2943 else 2944 { 2945 snprintf(logmsg,255,LG_GRDNRERROR,err); \ ??create_connect_6: \ 00000190 752F88E2 ADD R2,R8,#+468 \ 00000194 FF10A0E3 MOV R1,#+255 \ 00000198 0700A0E1 MOV R0,R7 \ 0000019C 1B0100EF SWI +283 2946 SMART_REDRAW(); \ 000001A0 ........ BL SMART_REDRAW 2947 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ ??create_connect_8: \ 000001A4 ........ LDR R0,??DataTable106 ;; RECONNECT_TIME \ 000001A8 0A20A0E1 MOV R2,R10 \ 000001AC 000090E5 LDR R0,[R0, #+0] \ 000001B0 D830A0E3 MOV R3,#+216 \ 000001B4 930001E0 MUL R1,R3,R0 \ 000001B8 0600A0E1 MOV R0,R6 \ 000001BC 4D0000EF SWI +77 2948 return; \ 000001C0 2C0000EA B ??create_connect_7 2949 } 2950 } 2951 if (p_res) \ ??create_connect_5: \ 000001C4 00009DE5 LDR R0,[SP, #+0] \ 000001C8 000050E3 CMP R0,#+0 \ 000001CC 3D00000A BEQ ??create_connect_9 2952 { 2953 if (p_res[3]) \ 000001D0 0C0090E5 LDR R0,[R0, #+12] \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 4200000A BEQ ??create_connect_10 2954 { 2955 strcpy(logmsg,buf); \ 000001DC 94108DE2 ADD R1,SP,#+148 \ 000001E0 0700A0E1 MOV R0,R7 \ 000001E4 1A0000EF SWI +26 2956 strcat(logmsg,"\n"); \ 000001E8 401F8FE2 ADR R1,??create_connect_2 ;; "\n" \ 000001EC 0700A0E1 MOV R0,R7 \ 000001F0 170000EF SWI +23 2957 strcpy(logmsg,LG_GRDNROK); \ 000001F4 791F88E2 ADD R1,R8,#+484 \ 000001F8 0700A0E1 MOV R0,R7 \ 000001FC 1A0000EF SWI +26 2958 SMART_REDRAW(); \ 00000200 ........ BL SMART_REDRAW 2959 DNR_TRIES=0; \ 00000204 D44385E5 STR R4,[R5, #+980] 2960 sa.ip=p_res[3][0][0]; \ 00000208 00109DE5 LDR R1,[SP, #+0] \ 0000020C 0C1091E5 LDR R1,[R1, #+12] \ 00000210 001091E5 LDR R1,[R1, #+0] \ 00000214 001091E5 LDR R1,[R1, #+0] \ 00000218 08108DE5 STR R1,[SP, #+8] 2961 L_CONNECT: 2962 sock=socket(1,1,0); \ ??create_connect_4: \ 0000021C 0020A0E3 MOV R2,#+0 \ 00000220 0110A0E3 MOV R1,#+1 \ 00000224 0100A0E1 MOV R0,R1 \ 00000228 730100EF SWI +371 \ 0000022C 180385E5 STR R0,[R5, #+792] 2963 if (sock!=-1) \ 00000230 0B0050E1 CMP R0,R11 \ 00000234 1A00000A BEQ ??create_connect_11 2964 { 2965 sa.family=1; \ 00000238 0170A0E3 MOV R7,#+1 \ 0000023C B470CDE1 STRH R7,[SP, #+4] 2966 sa.port=htons(hostport); \ 00000240 0908A0E1 MOV R0,R9, LSL #+16 \ 00000244 2008A0E1 MOV R0,R0, LSR #+16 \ 00000248 7A0100EF SWI +378 \ 0000024C B600CDE1 STRH R0,[SP, #+6] 2967 // sa.ip=htonl(IP_ADDR(82,207,89,182)); 2968 if (connect(sock,&sa,sizeof(sa))!=-1) \ 00000250 180395E5 LDR R0,[R5, #+792] \ 00000254 1020A0E3 MOV R2,#+16 \ 00000258 04108DE2 ADD R1,SP,#+4 \ 0000025C 740100EF SWI +372 \ 00000260 0B0050E1 CMP R0,R11 \ 00000264 0500000A BEQ ??create_connect_12 2969 { 2970 connect_state=1; \ 00000268 147385E5 STR R7,[R5, #+788] 2971 TOTALRECEIVED=0; \ 0000026C 1C4385E5 STR R4,[R5, #+796] 2972 TOTALSENDED=0; \ 00000270 204385E5 STR R4,[R5, #+800] 2973 SMART_REDRAW(); \ ??create_connect_1: \ 00000274 ........ BL SMART_REDRAW \ ??create_connect_7: \ 00000278 45DF8DE2 ADD SP,SP,#+276 \ 0000027C F08FBDE8 POP {R4-R11,PC} 2974 } 2975 else 2976 { 2977 closesocket(sock); \ ??create_connect_12: \ 00000280 180395E5 LDR R0,[R5, #+792] \ 00000284 760100EF SWI +374 2978 sock=-1; \ 00000288 18B385E5 STR R11,[R5, #+792] 2979 LockSched(); \ 0000028C 460100EF SWI +326 2980 ShowMSG(1,(int)LG_MSGCANTCONN); \ 00000290 7F1F88E2 ADD R1,R8,#+508 \ 00000294 0100A0E3 MOV R0,#+1 \ 00000298 480100EF SWI +328 2981 UnlockSched(); \ 0000029C 470100EF SWI +327 2982 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 000002A0 BFFFFFEA B ??create_connect_8 2983 2984 } 2985 } 2986 else 2987 { 2988 LockSched(); \ ??create_connect_11: \ 000002A4 460100EF SWI +326 2989 ShowMSG(1,(int)LG_MSGCANTCRSC); \ 000002A8 861F88E2 ADD R1,R8,#+536 \ 000002AC 0100A0E3 MOV R0,#+1 \ 000002B0 480100EF SWI +328 2990 UnlockSched(); \ 000002B4 470100EF SWI +327 2991 //Не осилили создания сокета, закрываем GPRS-сессию 2992 GPRS_OnOff(0,1); \ 000002B8 0110A0E3 MOV R1,#+1 \ 000002BC 0000A0E3 MOV R0,#+0 \ 000002C0 8E0100EF SWI +398 \ 000002C4 EBFFFFEA B ??create_connect_7 2993 } 2994 } 2995 } 2996 else 2997 { 2998 DNR_TRIES--; \ ??create_connect_9: \ 000002C8 D40395E5 LDR R0,[R5, #+980] \ 000002CC 010040E2 SUB R0,R0,#+1 \ 000002D0 D40385E5 STR R0,[R5, #+980] 2999 LockSched(); \ 000002D4 460100EF SWI +326 3000 ShowMSG(1,(int)LG_MSGHOSTNFND); \ 000002D8 911F88E2 ADD R1,R8,#+580 \ 000002DC 0100A0E3 MOV R0,#+1 \ 000002E0 480100EF SWI +328 3001 UnlockSched(); \ 000002E4 470100EF SWI +327 \ ??create_connect_10: \ 000002E8 45DF8DE2 ADD SP,SP,#+276 ;; stack cleaning \ 000002EC F08FBDE8 POP {R4-R11,PC} ;; return \ ??create_connect_2: \ 000002F0 0A000000 DC8 "\n",+0,+0 \ 000002F4 ........ DC32 NATICQ_HOST 3002 } 3003 } 3004 3005 #ifdef SEND_TIMER 3006 GBSTMR send_tmr; 3007 #endif 3008 \ In segment CODE, align 4, keep-with-next 3009 void ClearSendQ(void) 3010 { \ ClearSendQ: \ 00000000 10402DE9 PUSH {R4,LR} 3011 mfree((void *)sendq_p); \ 00000004 ........ LDR R4,??DataTable109 ;; S_ICONS \ 00000008 300394E5 LDR R0,[R4, #+816] \ 0000000C 150000EF SWI +21 3012 sendq_p=NULL; \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 300384E5 STR R0,[R4, #+816] 3013 sendq_l=NULL; \ 00000018 2C0384E5 STR R0,[R4, #+812] 3014 #ifdef SEND_TIMER 3015 GBS_DelTimer(&send_tmr); 3016 #endif 3017 } \ 0000001C 1080BDE8 POP {R4,PC} ;; return 3018 \ In segment CODE, align 4, keep-with-next 3019 void end_socket(void) 3020 { \ end_socket: \ 00000000 10402DE9 PUSH {R4,LR} 3021 if (sock>=0) \ 00000004 ........ LDR R4,??DataTable109 ;; S_ICONS \ 00000008 180394E5 LDR R0,[R4, #+792] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD48 POPMI {R4,PC} 3022 { 3023 shutdown(sock,2); \ 00000014 0210A0E3 MOV R1,#+2 \ 00000018 770100EF SWI +375 3024 closesocket(sock); \ 0000001C 180394E5 LDR R0,[R4, #+792] \ 00000020 760100EF SWI +374 3025 } 3026 #ifdef SEND_TIMER 3027 GBS_DelTimer(&send_tmr); 3028 #endif 3029 } \ 00000024 1080BDE8 POP {R4,PC} ;; return 3030 3031 #ifdef SEND_TIMER 3032 static void resend(void) 3033 { 3034 void SendAnswer(int dummy, TPKT *p); 3035 SUBPROC((void*)SendAnswer,0,0); 3036 } 3037 #endif 3038 \ In segment CODE, align 4, keep-with-next 3039 void SendAnswer(int dummy, TPKT *p) 3040 { \ SendAnswer: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 3041 int i; 3042 int j; 3043 if (connect_state<2) \ 00000004 ........ LDR R4,??DataTable109 ;; S_ICONS \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C 140394E5 LDR R0,[R4, #+788] \ 00000010 020050E3 CMP R0,#+2 \ 00000014 020000AA BGE ??SendAnswer_0 3044 { 3045 mfree(p); \ 00000018 0600A0E1 MOV R0,R6 \ 0000001C 150000EF SWI +21 3046 return; \ 00000020 F083BDE8 POP {R4-R9,PC} 3047 } 3048 if (p) \ ??SendAnswer_0: \ 00000024 000056E3 CMP R6,#+0 \ 00000028 2600000A BEQ ??SendAnswer_1 3049 { 3050 j=sizeof(PKT)+p->pkt.data_len; //Размер пакета \ 0000002C B600D6E1 LDRH R0,[R6, #+6] \ 00000030 085080E2 ADD R5,R0,#+8 3051 TOTALSENDED+=j; \ 00000034 200394E5 LDR R0,[R4, #+800] \ 00000038 000085E0 ADD R0,R5,R0 \ 0000003C 200384E5 STR R0,[R4, #+800] 3052 ALLTOTALSENDED+=j; //by BoBa 10.07 \ 00000040 280394E5 LDR R0,[R4, #+808] \ 00000044 000085E0 ADD R0,R5,R0 \ 00000048 280384E5 STR R0,[R4, #+808] 3053 //Проверяем, не надо ли добавить в очередь 3054 if (sendq_p) \ 0000004C 300394E5 LDR R0,[R4, #+816] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0F00000A BEQ ??SendAnswer_2 3055 { 3056 //Есть очередь, добавляем в нее 3057 sendq_p=realloc((void *)sendq_p,sendq_l+j); \ 00000058 2C1394E5 LDR R1,[R4, #+812] \ 0000005C 011085E0 ADD R1,R5,R1 \ 00000060 BA0000EF SWI +186 \ 00000064 300384E5 STR R0,[R4, #+816] 3058 memcpy((char *)sendq_p+sendq_l,p,j); \ 00000068 2C0394E5 LDR R0,[R4, #+812] \ 0000006C 303394E5 LDR R3,[R4, #+816] \ 00000070 0520A0E1 MOV R2,R5 \ 00000074 0610A0E1 MOV R1,R6 \ 00000078 030080E0 ADD R0,R0,R3 \ 0000007C 1E0100EF SWI +286 3059 mfree(p); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 150000EF SWI +21 3060 sendq_l+=j; \ 00000088 2C0394E5 LDR R0,[R4, #+812] \ 0000008C 000085E0 ADD R0,R5,R0 \ 00000090 2C0384E5 STR R0,[R4, #+812] 3061 return; \ 00000094 F083BDE8 POP {R4-R9,PC} 3062 } 3063 sendq_p=p; \ ??SendAnswer_2: \ 00000098 306384E5 STR R6,[R4, #+816] 3064 sendq_l=j; \ 0000009C 2C5384E5 STR R5,[R4, #+812] \ 000000A0 080000EA B ??SendAnswer_1 3065 } 3066 //Отправляем уже существующее в очереди 3067 while((i=sendq_l)!=0) 3068 { 3069 if (i>0x400) i=0x400; 3070 j=send(sock,(void *)sendq_p,i,0); 3071 snprintf(logmsg,255,"send res %d",j); 3072 SMART_REDRAW(); 3073 if (j<0) 3074 { 3075 j=*socklasterr(); 3076 if ((j==0xC9)||(j==0xD6)) 3077 { 3078 //Передали что хотели 3079 strcpy(logmsg,"Send delayed..."); 3080 return; //Видимо, надо ждать сообщения ENIP_BUFFER_FREE 3081 } 3082 else 3083 { 3084 //Ошибка 3085 LockSched(); 3086 ShowMSG(1,(int)"Send error!"); 3087 UnlockSched(); 3088 end_socket(); 3089 return; 3090 } 3091 } 3092 memcpy((void *)sendq_p,(char *)sendq_p+j,sendq_l-=j); //Удалили переданное \ ??SendAnswer_3: \ 000000A4 2C0394E5 LDR R0,[R4, #+812] \ 000000A8 052040E0 SUB R2,R0,R5 \ 000000AC 2C2384E5 STR R2,[R4, #+812] \ 000000B0 300394E5 LDR R0,[R4, #+816] \ 000000B4 001085E0 ADD R1,R5,R0 \ 000000B8 1E0100EF SWI +286 3093 if (j` \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 400E80E3 ORR R0,R0,#0x400 \ 000000E8 000057E1 CMP R7,R0 \ 000000EC 180394E5 LDR R0,[R4, #+792] \ 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 9800A0E3 MOV R0,#+152 \ 00000108 640D80E3 ORR R0,R0,#0x1900 \ 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} 3102 } 3103 mfree((void *)sendq_p); \ ??SendAnswer_4: \ 00000170 0100A0E1 MOV R0,R1 \ 00000174 150000EF SWI +21 3104 sendq_p=NULL; \ 00000178 306384E5 STR R6,[R4, #+816] 3105 } \ 0000017C F083BDE8 POP {R4-R9,PC} ;; return \ ??SendAnswer_5: \ 00000180 ........ DC32 `?` 3106 3107 \ In segment CODE, align 4, keep-with-next 3108 void send_login(int dummy, TPKT *p) 3109 { 3110 connect_state=2; 3111 char rev[16]; 3112 //Кто будет менять в этом месте идентификатор клиента, буду банить на уровне сервера!!! 3113 //А Вова будет банить на форуме! 3114 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,??DataTable123 ;; S_ICONS \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 0200A0E3 MOV R0,#+2 \ 0000001C 140386E5 STR R0,[R6, #+788] \ 00000020 0A30A0E3 MOV R3,#+10 \ 00000024 803E83E3 ORR R3,R3,#0x800 \ 00000028 0910A0E3 MOV R1,#+9 \ 0000002C 0D00A0E1 MOV R0,SP \ 00000030 1B0100EF SWI +283 3115 3116 TPKT *p2=malloc(sizeof(PKT)+8); \ 00000034 1000A0E3 MOV R0,#+16 \ 00000038 140000EF SWI +20 \ 0000003C 0070A0E1 MOV R7,R0 3117 p2->pkt.uin=UIN; \ 00000040 ........ LDR R0,??DataTable112 ;; UIN 3118 p2->pkt.type=T_SETCLIENT_ID; 3119 p2->pkt.data_len=8; 3120 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 3121 SendAnswer(0,p2); \ 0000006C 0710A0E1 MOV R1,R7 \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 ........ BL SendAnswer 3122 SendAnswer(dummy,p); \ 00000078 0510A0E1 MOV R1,R5 \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 ........ BL SendAnswer 3123 RXstate=-(int)sizeof(PKT); \ 00000084 0700E0E3 MVN R0,#+7 \ 00000088 100386E5 STR R0,[R6, #+784] 3124 } \ 0000008C FF80BDE8 POP {R0-R7,PC} ;; return \ ??send_login_0: \ 00000090 ........ DC32 `?` 3125 \ In segment CODE, align 4, keep-with-next 3126 void do_ping(void) 3127 { \ do_ping: \ 00000000 00402DE9 PUSH {LR} 3128 TPKT *pingp=malloc(sizeof(PKT)); \ 00000004 0800A0E3 MOV R0,#+8 \ 00000008 140000EF SWI +20 3129 pingp->pkt.uin=UIN; \ 0000000C ........ LDR R1,??DataTable112 ;; UIN \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 3130 pingp->pkt.type=0; \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C B410C0E1 STRH R1,[R0, #+4] 3131 pingp->pkt.data_len=0; \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3132 SendAnswer(0,pingp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 0040BDE8 POP {LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 3133 } 3134 \ In segment CODE, align 4, keep-with-next 3135 void SendMSGACK(int i) 3136 { \ SendMSGACK: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3137 TPKT *ackp=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 3138 ackp->pkt.uin=i; \ 00000010 004080E5 STR R4,[R0, #+0] 3139 ackp->pkt.type=T_MSGACK; \ 00000014 1710A0E3 MOV R1,#+23 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 3140 ackp->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3141 SendAnswer(0,ackp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 1040BDE8 POP {R4,LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 3142 } 3143 \ In segment CODE, align 4, keep-with-next 3144 void RequestXText(unsigned int uin) 3145 { \ RequestXText: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3146 TPKT *p=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 3147 p->pkt.uin=uin; \ 00000010 004080E5 STR R4,[R0, #+0] 3148 p->pkt.type=T_XTEXT_REQ; \ 00000014 1810A0E3 MOV R1,#+24 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 3149 p->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3150 SUBPROC((void *)SendAnswer,0,p); \ 00000024 0020A0E1 MOV R2,R0 \ 00000028 ........ LDR R0,??DataTable113 ;; SendAnswer \ 0000002C 710100EF SWI +369 3151 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 3152 3153 extern int main2_count; 3154 3155 int ping_time; 3156 char I_UIN[9]; 3157 \ In segment CODE, align 4, keep-with-next 3158 void get_answer(void) 3159 { \ get_answer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3160 void *p; 3161 int i=RXstate; \ 00000004 ........ LDR R5,??DataTable123 ;; S_ICONS \ 00000008 1CD04DE2 SUB SP,SP,#+28 \ 0000000C 40DE4DE2 SUB SP,SP,#+1024 3162 int j; 3163 int n; 3164 char rb[1024]; 3165 char *rp=rb; 3166 if (connect_state<2) return; \ 00000010 140395E5 LDR R0,[R5, #+788] \ 00000014 108395E5 LDR R8,[R5, #+784] \ 00000018 1C108DE2 ADD R1,SP,#+28 \ 0000001C 00108DE5 STR R1,[SP, #+0] \ 00000020 020050E3 CMP R0,#+2 \ 00000024 610100BA BLT ??get_answer_1 \ 00000028 0A0078E3 CMN R8,#+10 \ 0000002C 5F01000A BEQ ??get_answer_1 3167 if (i==EOP) return; 3168 j=recv(sock,rb,sizeof(rb),0); \ 00000030 180395E5 LDR R0,[R5, #+792] \ 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 3169 while(j>0) 3170 { 3171 if (i<0) 3172 { 3173 //Принимаем заголовок 3174 n=-i; //Требуемое количество байт 3175 if (j=0) 3182 { 3183 //Принимаем тельце ;) 3184 n=RXbuf.pkt.data_len; //Всего в тельце 3185 if (n>16383) 3186 { 3187 //Слишком много 3188 strcpy(logmsg,LG_GRBADPACKET); 3189 end_socket(); 3190 RXstate=EOP; 3191 return; 3192 } 3193 n-=i; //Количество требуемых байт (общая длинна тельца-текущая позиция) 3194 if (n>0) 3195 { 3196 if (jisIndividSet)//Если индивидуальные натсройки(меню на долгое вправо) 3281 { 3282 if(t->issound) Play(sndMsg);//если звук включен то играем 3283 break; 3284 } 3285 else 3286 if(t->automsgcount < automsgcount && away_m)//если сигналы автоответчика 3287 { 3288 Play(sndMsg); 3289 break; 3290 } 3291 else 3292 if(t->isaccess)//если удаленный доступ ;) 3293 { 3294 if(t->signals) Play(sndMsg); 3295 break; 3296 } 3297 else//в остальный случаях 3298 Play(sndMsg); 3299 } 3300 else 3301 { 3302 uins=RXbuf.pkt.uin; 3303 volatile int hFile_ex; 3304 unsigned int io_error_ex = 0; 3305 sprintf(talk_sound, "%s%d.wav", sndMsg2, uins); 3306 hFile_ex = fopen(talk_sound,A_ReadOnly + A_BIN,P_READ, &io_error_ex); 3307 if(hFile_ex!=-1) 3308 { 3309 fclose(hFile_ex, &io_error_ex); 3310 Play(talk_sound); 3311 } 3312 else 3313 Play(sndMsg); 3314 } 3315 } 3316 break; 3317 case T_SSLRESP: 3318 LockSched(); 3319 ShowMSG(1,(int)RXbuf.data); 3320 UnlockSched(); 3321 break; 3322 case T_SRV_ACK: 3323 if (FindContactLOGQByAck(&RXbuf)) Play(sndMsgSent); 3324 case T_CLIENT_ACK: 3325 p=malloc(sizeof(PKT)+2); 3326 memcpy(p,&RXbuf,sizeof(PKT)+2); 3327 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); 3328 break; 3329 case T_ECHORET: 3330 { 3331 TDate d; 3332 TTime t; 3333 TTime *pt=(TTime *)(RXbuf.data); 3334 int s1; 3335 int s2; 3336 GetDateTime(&d,&t); 3337 s1=t.hour*3600+t.min*60+t.sec; 3338 s2=pt->hour*3600+pt->min*60+pt->sec; 3339 s1-=s2; 3340 if (s1<0) s1+=86400; 3341 snprintf(logmsg,255,"Ping %d-%d seconds!",s1,s1+1); 3342 sprintf(PINGO, "Ping: %d sec",s1); 3343 LockSched(); 3344 if(janis==1) 3345 { 3346 ShowMSG(1,(int)logmsg); 3347 Play(pingsnd); 3348 janis=0; 3349 } 3350 else 3351 { 3352 if(ping_time==0) 3353 { 3354 ping_time=ping_time_config; 3355 Play(pingsnd); 3356 } 3357 else 3358 ping_time--; 3359 } 3360 UnlockSched(); 3361 } 3362 break; 3363 case T_LASTPRIVACY: 3364 n=i+sizeof(PKT); \ ??get_answer_3: \ 00000050 0040A0E1 MOV R4,R0 3365 p=malloc(n); \ ??get_answer_4: \ 00000054 140000EF SWI +20 \ 00000058 00B0A0E1 MOV R11,R0 3366 memcpy(p,&RXbuf,n); \ 0000005C 0420A0E1 MOV R2,R4 \ ??get_answer_5: \ 00000060 0710A0E1 MOV R1,R7 \ 00000064 1E0100EF SWI +286 3367 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); \ 00000068 180395E5 LDR R0,[R5, #+792] \ 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 3368 break; 3369 } 3370 i=-(int)sizeof(PKT); //А может еще есть данные \ ??get_answer_7: \ 00000088 0780E0E3 MVN R8,#+7 \ ??get_answer_2: \ 0000008C 010056E3 CMP R6,#+1 \ 00000090 450100BA BLT ??get_answer_8 \ 00000094 24759FE5 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 9800A0E3 MOV R0,#+152 \ 000000E4 640D80E3 ORR R0,R0,#0x1900 \ 000000E8 05A080E0 ADD R10,R0,R5 \ 000000EC 400C54E3 CMP R4,#+16384 \ 000000F0 080000BA BLT ??get_answer_11 \ 000000F4 C8149FE5 LDR R1,??get_answer_9+0x8 ;; `?` + 600 \ 000000F8 0A00A0E1 MOV R0,R10 \ 000000FC 1A0000EF SWI +26 \ 00000100 ........ BL end_socket \ 00000104 0900E0E3 MVN R0,#+9 \ 00000108 100385E5 STR R0,[R5, #+784] \ 0000010C 1CD08DE2 ADD SP,SP,#+28 \ 00000110 40DE8DE2 ADD SP,SP,#+1024 \ 00000114 F08FBDE8 POP {R4-R11,PC} \ ??get_answer_11: \ 00000118 084044E0 SUB R4,R4,R8 \ 0000011C 010054E3 CMP R4,#+1 \ 00000120 0B0000BA BLT ??get_answer_12 \ 00000124 00109DE5 LDR R1,[SP, #+0] \ 00000128 040056E1 CMP R6,R4 \ 0000012C 0640A0B1 MOVLT R4,R6 \ 00000130 0420A0E1 MOV R2,R4 \ 00000134 070088E0 ADD R0,R8,R7 \ 00000138 080080E2 ADD R0,R0,#+8 \ 0000013C 1E0100EF SWI +286 \ 00000140 00109DE5 LDR R1,[SP, #+0] \ 00000144 088084E0 ADD R8,R4,R8 \ 00000148 046046E0 SUB R6,R6,R4 \ 0000014C 011084E0 ADD R1,R4,R1 \ 00000150 00108DE5 STR R1,[SP, #+0] \ ??get_answer_12: \ 00000154 B600D7E1 LDRH R0,[R7, #+6] \ 00000158 080050E1 CMP R0,R8 \ 0000015C CAFFFF1A BNE ??get_answer_2 \ 00000160 1C1395E5 LDR R1,[R5, #+796] \ 00000164 080088E2 ADD R0,R8,#+8 \ 00000168 011080E0 ADD R1,R0,R1 \ 0000016C 1C1385E5 STR R1,[R5, #+796] \ 00000170 241395E5 LDR R1,[R5, #+804] \ 00000174 0020A0E3 MOV R2,#+0 \ 00000178 011080E0 ADD R1,R0,R1 \ 0000017C 241385E5 STR R1,[R5, #+804] \ 00000180 071088E0 ADD R1,R8,R7 \ 00000184 0820C1E5 STRB R2,[R1, #+8] \ 00000188 B410D7E1 LDRH R1,[R7, #+4] \ 0000018C 094088E2 ADD R4,R8,#+9 \ 00000190 AE80A0E3 MOV R8,#+174 \ 00000194 DE8C88E3 ORR R8,R8,#0xDE00 \ 00000198 031041E2 SUB R1,R1,#+3 \ 0000019C 1C0051E3 CMP R1,#+28 \ 000001A0 B8FFFF8A BHI ??get_answer_7 \ 000001A4 022F8FE2 ADR R2,??get_answer_0 \ 000001A8 8110A0E1 MOV R1,R1, LSL #+1 \ 000001AC F12092E1 LDRSH R2,[R2, R1] \ 000001B0 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??get_answer_0: \ 000001B4 48000E00B4FF DC16 +72,+14,+65460,+65 \ 4100 \ 000001BC 2900B4FF2B00 DC16 +41,+65460,+43,+65460 \ B4FF \ 000001C4 B4FFB4FFAF00 DC16 +65460,+65460,+175,+65460 \ B4FF \ 000001CC B4FFB500BB00 DC16 +65460,+181,+187,+65460 \ B4FF \ 000001D4 C00029002900 DC16 +192,+41,+41,+65460 \ B4FF \ 000001DC B4FFB4FF2900 DC16 +65460,+65460,+41,+65460 \ B4FF \ 000001E4 B4FFB4FFB4FF DC16 +65460,+65460,+65460,+65460 \ B4FF \ 000001EC A6FF0000 DC16 +65446,+0 \ ??get_answer_13: \ 000001F0 0400A0E1 MOV R0,R4 \ 000001F4 140000EF SWI +20 \ 000001F8 00B0A0E1 MOV R11,R0 \ 000001FC 0420A0E1 MOV R2,R4 \ 00000200 0710A0E1 MOV R1,R7 \ 00000204 1E0100EF SWI +286 \ 00000208 180395E5 LDR R0,[R5, #+792] \ 0000020C 0B30A0E1 MOV R3,R11 \ 00000210 01002DE9 PUSH {R0} \ 00000214 0020A0E3 MOV R2,#+0 \ 00000218 0810A0E1 MOV R1,R8 \ 0000021C 0900A0E1 MOV R0,R9 \ 00000220 000100EF SWI +256 \ 00000224 9C039FE5 LDR R0,??get_answer_9+0xC ;; sndStartup \ 00000228 ........ BL Play \ 0000022C 083087E2 ADD R3,R7,#+8 \ 00000230 E12F8FE2 ADR R2,??get_answer_9 ;; "%s" \ 00000234 FF10A0E3 MOV R1,#+255 \ 00000238 0A00A0E1 MOV R0,R10 \ 0000023C 1B0100EF SWI +283 \ 00000240 0300A0E3 MOV R0,#+3 \ 00000244 140385E5 STR R0,[R5, #+788] \ 00000248 D80395E5 LDR R0,[R5, #+984] \ 0000024C 010040E2 SUB R0,R0,#+1 \ 00000250 D80385E5 STR R0,[R5, #+984] \ 00000254 ........ BL SMART_REDRAW \ 00000258 89FFFFEA B ??get_answer_6 \ ??get_answer_14: \ 0000025C 0400A0E1 MOV R0,R4 \ 00000260 7BFFFFEA B ??get_answer_4 \ ??get_answer_15: \ 00000264 0040A0E1 MOV R4,R0 \ 00000268 140000EF SWI +20 \ 0000026C 00B0A0E1 MOV R11,R0 \ 00000270 0420A0E1 MOV R2,R4 \ 00000274 0710A0E1 MOV R1,R7 \ 00000278 1E0100EF SWI +286 \ 0000027C B800D7E1 LDRH R0,[R7, #+8] \ 00000280 44239FE5 LDR R2,??get_answer_9+0x10 ;; `?` + 612 \ 00000284 FF10A0E3 MOV R1,#+255 \ 00000288 01002DE9 PUSH {R0} \ 0000028C 003097E5 LDR R3,[R7, #+0] \ 00000290 0A00A0E1 MOV R0,R10 \ 00000294 1B0100EF SWI +283 \ 00000298 180395E5 LDR R0,[R5, #+792] \ 0000029C 0B30A0E1 MOV R3,R11 \ 000002A0 01002DE9 PUSH {R0} \ 000002A4 0020A0E3 MOV R2,#+0 \ 000002A8 0810A0E1 MOV R1,R8 \ 000002AC 0900A0E1 MOV R0,R9 \ 000002B0 000100EF SWI +256 \ 000002B4 08D08DE2 ADD SP,SP,#+8 \ 000002B8 72FFFFEA B ??get_answer_7 \ ??get_answer_16: \ 000002BC 0C239FE5 LDR R2,??get_answer_9+0x14 ;; `?` + 624 \ 000002C0 083087E2 ADD R3,R7,#+8 \ 000002C4 FF10A0E3 MOV R1,#+255 \ 000002C8 0A00A0E1 MOV R0,R10 \ 000002CC 1B0100EF SWI +283 \ 000002D0 ........ BL SMART_REDRAW \ 000002D4 6BFFFFEA B ??get_answer_7 \ ??get_answer_17: \ 000002D8 0400A0E1 MOV R0,R4 \ 000002DC 140000EF SWI +20 \ 000002E0 00B0A0E1 MOV R11,R0 \ 000002E4 0420A0E1 MOV R2,R4 \ 000002E8 0710A0E1 MOV R1,R7 \ 000002EC 1E0100EF SWI +286 \ 000002F0 08008BE2 ADD R0,R11,#+8 \ 000002F4 030000EA B ??get_answer_18 \ ??get_answer_19: \ 000002F8 030051E3 CMP R1,#+3 \ 000002FC 2010A0B3 MOVLT R1,#+32 \ 00000300 0010C0B5 STRBLT R1,[R0, #+0] \ 00000304 010080E2 ADD R0,R0,#+1 \ ??get_answer_18: \ 00000308 0010D0E5 LDRB R1,[R0, #+0] \ 0000030C 000051E3 CMP R1,#+0 \ 00000310 F8FFFF1A BNE ??get_answer_19 \ 00000314 ........ LDR R0,??DataTable115 ;; addIconBar \ 00000318 002097E5 LDR R2,[R7, #+0] \ 0000031C B0129FE5 LDR R1,??get_answer_9+0x18 ;; `?` + 632 \ 00000320 B80085E5 STR R0,[R5, #+184] \ 00000324 E800A0E3 MOV R0,#+232 \ 00000328 700D80E3 ORR R0,R0,#0x1C00 \ 0000032C 054080E0 ADD R4,R0,R5 \ 00000330 0400A0E1 MOV R0,R4 \ 00000334 160000EF SWI +22 \ 00000338 ........ LDR R0,??DataTable116 ;; ignor_list \ 0000033C 0410A0E1 MOV R1,R4 \ 00000340 180100EF SWI +280 \ 00000344 000050E3 CMP R0,#+0 \ 00000348 4EFFFF1A BNE ??get_answer_7 \ 0000034C 84229FE5 LDR R2,??get_answer_9+0x1C ;; `?` + 640 \ 00000350 84429FE5 LDR R4,??get_answer_9+0x20 ;; sndMsg \ 00000354 080087E2 ADD R0,R7,#+8 \ 00000358 01002DE9 PUSH {R0} \ 0000035C 003097E5 LDR R3,[R7, #+0] \ 00000360 FF10A0E3 MOV R1,#+255 \ 00000364 0A00A0E1 MOV R0,R10 \ 00000368 1B0100EF SWI +283 \ 0000036C 1C0395E5 LDR R0,[R5, #+796] \ 00000370 ........ BL SendMSGACK \ 00000374 180395E5 LDR R0,[R5, #+792] \ 00000378 0B30A0E1 MOV R3,R11 \ 0000037C 01002DE9 PUSH {R0} \ 00000380 0020A0E3 MOV R2,#+0 \ 00000384 0810A0E1 MOV R1,R8 \ 00000388 0900A0E1 MOV R0,R9 \ 0000038C 000100EF SWI +256 \ 00000390 ........ BL SMART_REDRAW \ 00000394 ........ LDR R0,??DataTable117 ;; extended_sounds \ 00000398 000090E5 LDR R0,[R0, #+0] \ 0000039C 08D08DE2 ADD SP,SP,#+8 \ 000003A0 000050E3 CMP R0,#+0 \ 000003A4 000097E5 LDR R0,[R7, #+0] \ 000003A8 1A00001A BNE ??get_answer_20 \ 000003AC ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000003B0 641090E5 LDR R1,[R0, #+100] \ 000003B4 000051E3 CMP R1,#+0 \ 000003B8 0500000A BEQ ??get_answer_21 \ 000003BC 6C0090E5 LDR R0,[R0, #+108] \ 000003C0 000050E3 CMP R0,#+0 \ 000003C4 2FFFFF0A BEQ ??get_answer_7 \ ??get_answer_22: \ 000003C8 0400A0E1 MOV R0,R4 \ ??get_answer_23: \ 000003CC ........ BL Play \ 000003D0 2CFFFFEA B ??get_answer_7 \ ??get_answer_21: \ 000003D4 ........ LDR R2,??DataTable118 ;; automsgcount \ 000003D8 841090E5 LDR R1,[R0, #+132] \ 000003DC 002092E5 LDR R2,[R2, #+0] \ 000003E0 020051E1 CMP R1,R2 \ 000003E4 0200002A BCS ??get_answer_24 \ 000003E8 BC1295E5 LDR R1,[R5, #+700] \ 000003EC 000051E3 CMP R1,#+0 \ 000003F0 F4FFFF1A BNE ??get_answer_22 \ ??get_answer_24: \ 000003F4 801090E5 LDR R1,[R0, #+128] \ 000003F8 000051E3 CMP R1,#+0 \ 000003FC 0300000A BEQ ??get_answer_25 \ 00000400 7C0090E5 LDR R0,[R0, #+124] \ 00000404 000050E3 CMP R0,#+0 \ 00000408 1EFFFF0A BEQ ??get_answer_7 \ 0000040C EDFFFFEA B ??get_answer_22 \ ??get_answer_25: \ 00000410 0400A0E1 MOV R0,R4 \ 00000414 ECFFFFEA B ??get_answer_23 \ ??get_answer_20: \ 00000418 C0219FE5 LDR R2,??get_answer_9+0x24 ;; sndMsg2 \ 0000041C 6C0285E5 STR R0,[R5, #+620] \ 00000420 0010A0E3 MOV R1,#+0 \ 00000424 08108DE5 STR R1,[SP, #+8] \ 00000428 6C3295E5 LDR R3,[R5, #+620] \ 0000042C B0119FE5 LDR R1,??get_answer_9+0x28 ;; `?` + 652 \ 00000430 577EA0E3 MOV R7,#+1392 \ 00000434 050087E0 ADD R0,R7,R5 \ 00000438 160000EF SWI +22 \ 0000043C 08308DE2 ADD R3,SP,#+8 \ 00000440 8020A0E3 MOV R2,#+128 \ 00000444 801CA0E3 MOV R1,#+32768 \ 00000448 050087E0 ADD R0,R7,R5 \ 0000044C 0A0000EF SWI +10 \ 00000450 04008DE5 STR R0,[SP, #+4] \ 00000454 04009DE5 LDR R0,[SP, #+4] \ 00000458 010070E3 CMN R0,#+1 \ 0000045C EBFFFF0A BEQ ??get_answer_25 \ 00000460 04009DE5 LDR R0,[SP, #+4] \ 00000464 08108DE2 ADD R1,SP,#+8 \ 00000468 0D0000EF SWI +13 \ 0000046C 050087E0 ADD R0,R7,R5 \ 00000470 D5FFFFEA B ??get_answer_23 \ ??get_answer_26: \ 00000474 460100EF SWI +326 \ 00000478 081087E2 ADD R1,R7,#+8 \ 0000047C 0100A0E3 MOV R0,#+1 \ 00000480 480100EF SWI +328 \ ??get_answer_27: \ 00000484 470100EF SWI +327 \ 00000488 FEFEFFEA B ??get_answer_7 \ ??get_answer_28: \ 0000048C 0700A0E1 MOV R0,R7 \ 00000490 ........ BL FindContactLOGQByAck \ 00000494 000050E3 CMP R0,#+0 \ 00000498 0100000A BEQ ??get_answer_29 \ 0000049C 44019FE5 LDR R0,??get_answer_9+0x2C ;; sndMsgSent \ 000004A0 ........ BL Play \ ??get_answer_29: \ 000004A4 0A00A0E3 MOV R0,#+10 \ 000004A8 140000EF SWI +20 \ 000004AC 00B0A0E1 MOV R11,R0 \ 000004B0 0A20A0E3 MOV R2,#+10 \ 000004B4 E9FEFFEA B ??get_answer_5 \ ??get_answer_30: \ 000004B8 0C108DE2 ADD R1,SP,#+12 \ 000004BC 14008DE2 ADD R0,SP,#+20 \ 000004C0 B40000EF SWI +180 \ 000004C4 0C00DDE5 LDRB R0,[SP, #+12] \ 000004C8 0D20DDE5 LDRB R2,[SP, #+13] \ 000004CC E11EA0E3 MOV R1,#+3600 \ 000004D0 3C30A0E3 MOV R3,#+60 \ 000004D4 930202E0 MUL R2,R3,R2 \ 000004D8 912020E0 MLA R0,R1,R0,R2 \ 000004DC 0E10DDE5 LDRB R1,[SP, #+14] \ 000004E0 E12EA0E3 MOV R2,#+3600 \ 000004E4 000081E0 ADD R0,R1,R0 \ 000004E8 0810D7E5 LDRB R1,[R7, #+8] \ 000004EC 920101E0 MUL R1,R2,R1 \ 000004F0 F4209FE5 LDR R2,??get_answer_9+0x30 ;; `?` + 664 \ 000004F4 010040E0 SUB R0,R0,R1 \ 000004F8 0910D7E5 LDRB R1,[R7, #+9] \ 000004FC 930101E0 MUL R1,R3,R1 \ 00000500 010040E0 SUB R0,R0,R1 \ 00000504 0A10D7E5 LDRB R1,[R7, #+10] \ 00000508 ........ LDR R7,??DataTable119 ;; janis \ 0000050C 014050E0 SUBS R4,R0,R1 \ 00000510 500BA043 MOVMI R0,#+81920 \ 00000514 460D8043 ORRMI R0,R0,#0x1180 \ 00000518 04408040 ADDMI R4,R0,R4 \ 0000051C 010084E2 ADD R0,R4,#+1 \ 00000520 01002DE9 PUSH {R0} \ 00000524 0430A0E1 MOV R3,R4 \ 00000528 FF10A0E3 MOV R1,#+255 \ 0000052C 0A00A0E1 MOV R0,R10 \ 00000530 1B0100EF SWI +283 \ 00000534 B4109FE5 LDR R1,??get_answer_9+0x34 ;; `?` + 684 \ 00000538 0420A0E1 MOV R2,R4 \ 0000053C B0409FE5 LDR R4,??get_answer_9+0x38 ;; pingsnd \ 00000540 590D85E2 ADD R0,R5,#+5696 \ 00000544 160000EF SWI +22 \ 00000548 460100EF SWI +326 \ 0000054C 000097E5 LDR R0,[R7, #+0] \ 00000550 04D08DE2 ADD SP,SP,#+4 \ 00000554 010050E3 CMP R0,#+1 \ 00000558 0700001A BNE ??get_answer_31 \ 0000055C 0A10A0E1 MOV R1,R10 \ 00000560 0100A0E3 MOV R0,#+1 \ 00000564 480100EF SWI +328 \ 00000568 0400A0E1 MOV R0,R4 \ 0000056C ........ BL Play \ 00000570 0000A0E3 MOV R0,#+0 \ 00000574 000087E5 STR R0,[R7, #+0] \ 00000578 C1FFFFEA B ??get_answer_27 \ ??get_answer_31: \ 0000057C DC0395E5 LDR R0,[R5, #+988] \ 00000580 000050E3 CMP R0,#+0 \ 00000584 0500001A BNE ??get_answer_32 \ 00000588 68009FE5 LDR R0,??get_answer_9+0x3C ;; ping_time_config \ 0000058C 000090E5 LDR R0,[R0, #+0] \ 00000590 DC0385E5 STR R0,[R5, #+988] \ 00000594 0400A0E1 MOV R0,R4 \ 00000598 ........ BL Play \ 0000059C B8FFFFEA B ??get_answer_27 \ ??get_answer_32: \ 000005A0 010040E2 SUB R0,R0,#+1 \ 000005A4 DC0385E5 STR R0,[R5, #+988] \ 000005A8 B5FFFFEA B ??get_answer_27 3371 } 3372 } 3373 } 3374 RXstate=i; \ ??get_answer_8: \ 000005AC 108385E5 STR R8,[R5, #+784] 3375 // GBS_StartTimerProc(&tmr_dorecv,3000,dorecv); 3376 // SMART_REDRAW(); 3377 } \ ??get_answer_1: \ 000005B0 1CD08DE2 ADD SP,SP,#+28 \ 000005B4 40DE8DE2 ADD SP,SP,#+1024 \ 000005B8 F08FBDE8 POP {R4-R11,PC} ;; return \ ??get_answer_9: \ 000005BC 25730000 DC8 "%s",+0 \ 000005C0 ........ DC32 RXbuf \ 000005C4 ........ DC32 `?` + 600 \ 000005C8 ........ DC32 sndStartup \ 000005CC ........ DC32 `?` + 612 \ 000005D0 ........ DC32 `?` + 624 \ 000005D4 ........ DC32 `?` + 632 \ 000005D8 ........ DC32 `?` + 640 \ 000005DC ........ DC32 sndMsg \ 000005E0 ........ DC32 sndMsg2 \ 000005E4 ........ DC32 `?` + 652 \ 000005E8 ........ DC32 sndMsgSent \ 000005EC ........ DC32 `?` + 664 \ 000005F0 ........ DC32 `?` + 684 \ 000005F4 ........ DC32 pingsnd \ 000005F8 ........ DC32 ping_time_config 3378 3379 3380 extern int main_count; 3381 3382 //=====================add to main info==================== 3383 3384 //Сюда я не лез...и че та желания нет...kluchnik ;) 3385 3386 char a_txt[45]; 3387 char s_txt[45]; 3388 char d_txt[45]; 3389 char f_txt[45]; 3390 char g_txt[45]; 3391 unsigned int main_msg_timer2; \ In segment CODE, align 4, keep-with-next 3392 void AddToMain(const char *nameu,char *si) 3393 { \ AddToMain: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0180A0E1 MOV R8,R1 3394 char *de=malloc(64); \ 00000010 4000A0E3 MOV R0,#+64 \ 00000014 140000EF SWI +20 \ 00000018 0050A0E1 MOV R5,R0 3395 int text_l; 3396 int iz; 3397 int name_l; 3398 name_l=0; 3399 text_l=0; 3400 name_l=strlen(nameu); \ 0000001C 0400A0E1 MOV R0,R4 \ 00000020 1B0000EF SWI +27 3401 iz=0; 3402 #ifdef ELKA 3403 text_l=main_lenght-name_l; \ 00000024 04129FE5 LDR R1,??AddToMain_0 ;; main_lenght \ 00000028 0070A0E3 MOV R7,#+0 \ 0000002C 001091E5 LDR R1,[R1, #+0] 3404 #else 3405 text_l=main_lenght-name_l; 3406 #endif 3407 3408 if(strlen(si)>text_l) \ 00000030 0060A0E3 MOV R6,#+0 \ 00000034 009041E0 SUB R9,R1,R0 \ 00000038 0800A0E1 MOV R0,R8 \ 0000003C 1B0000EF SWI +27 \ 00000040 000059E1 CMP R9,R0 \ 00000044 0800003A BCC ??AddToMain_1 3409 { 3410 while(text_l!=0) 3411 { 3412 de[iz]=si[iz]; 3413 iz++; 3414 text_l--; 3415 } 3416 if(use_cutter) 3417 { 3418 de[iz]='.'; 3419 iz++; 3420 de[iz]='.'; 3421 iz++; 3422 de[iz]='.'; 3423 iz++; 3424 } 3425 de[iz]='\0'; 3426 } 3427 else 3428 strcpy(de, si); \ 00000048 0810A0E1 MOV R1,R8 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 1A0000EF SWI +26 3429 iz=0; \ ??AddToMain_2: \ 00000054 0070A0E3 MOV R7,#+0 \ 00000058 1A0000EA B ??AddToMain_3 \ ??AddToMain_4: \ 0000005C 0810D7E7 LDRB R1,[R7, +R8] \ 00000060 019049E2 SUB R9,R9,#+1 \ 00000064 0510C7E7 STRB R1,[R7, +R5] \ 00000068 0070A0E1 MOV R7,R0 \ ??AddToMain_1: \ 0000006C 010087E2 ADD R0,R7,#+1 \ 00000070 000059E3 CMP R9,#+0 \ 00000074 F8FFFF1A BNE ??AddToMain_4 \ 00000078 B4119FE5 LDR R1,??AddToMain_0+0x4 ;; use_cutter \ 0000007C 001091E5 LDR R1,[R1, #+0] \ 00000080 000051E3 CMP R1,#+0 \ 00000084 0500000A BEQ ??AddToMain_5 \ 00000088 2E10A0E3 MOV R1,#+46 \ 0000008C 0510C7E7 STRB R1,[R7, +R5] \ 00000090 0510C0E7 STRB R1,[R0, +R5] \ 00000094 010080E2 ADD R0,R0,#+1 \ 00000098 0510C0E7 STRB R1,[R0, +R5] \ 0000009C 017080E2 ADD R7,R0,#+1 \ ??AddToMain_5: \ 000000A0 0560C7E7 STRB R6,[R7, +R5] \ 000000A4 EAFFFFEA B ??AddToMain_2 3430 while(strlen(de)!=iz) 3431 { 3432 if(de[iz]==0x0D) de[iz]=0x20; \ ??AddToMain_6: \ 000000A8 0510D7E7 LDRB R1,[R7, +R5] \ 000000AC 2000A0E3 MOV R0,#+32 \ 000000B0 0D0051E3 CMP R1,#+13 \ 000000B4 0500C707 STRBEQ R0,[R7, +R5] 3433 if(de[iz]==0x0A) de[iz]=0x20; \ 000000B8 0510D7E7 LDRB R1,[R7, +R5] \ 000000BC 0A0051E3 CMP R1,#+10 \ 000000C0 0500C707 STRBEQ R0,[R7, +R5] 3434 iz++; \ 000000C4 017087E2 ADD R7,R7,#+1 3435 } \ ??AddToMain_3: \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 1B0000EF SWI +27 \ 000000D0 070050E1 CMP R0,R7 \ 000000D4 F3FFFF1A BNE ??AddToMain_6 3436 de[iz]='\0'; 3437 if(main_count==0) sprintf(a_txt, "%s: %s", nameu,de); \ 000000D8 ........ LDR R8,??DataTable120 ;; main_count \ 000000DC 0560C7E7 STRB R6,[R7, +R5] \ 000000E0 ........ LDR R6,??DataTable123 ;; S_ICONS \ 000000E4 4C719FE5 LDR R7,??AddToMain_0+0x8 ;; `?` \ 000000E8 F410A0E3 MOV R1,#+244 \ 000000EC 701D81E3 ORR R1,R1,#0x1C00 \ 000000F0 061081E0 ADD R1,R1,R6 \ 000000F4 04108DE5 STR R1,[SP, #+4] \ 000000F8 000098E5 LDR R0,[R8, #+0] \ 000000FC 000050E3 CMP R0,#+0 \ 00000100 0400001A BNE ??AddToMain_7 \ 00000104 04009DE5 LDR R0,[SP, #+4] \ 00000108 0530A0E1 MOV R3,R5 \ 0000010C 0420A0E1 MOV R2,R4 \ 00000110 0710A0E1 MOV R1,R7 \ 00000114 160000EF SWI +22 3438 if(main_count==1) sprintf(s_txt, "%s: %s", nameu,de); \ ??AddToMain_7: \ 00000118 2410A0E3 MOV R1,#+36 \ 0000011C 741D81E3 ORR R1,R1,#0x1D00 \ 00000120 061081E0 ADD R1,R1,R6 \ 00000124 00108DE5 STR R1,[SP, #+0] \ 00000128 000098E5 LDR R0,[R8, #+0] \ 0000012C 010050E3 CMP R0,#+1 \ 00000130 0400001A BNE ??AddToMain_8 \ 00000134 00009DE5 LDR R0,[SP, #+0] \ 00000138 0530A0E1 MOV R3,R5 \ 0000013C 0420A0E1 MOV R2,R4 \ 00000140 0710A0E1 MOV R1,R7 \ 00000144 160000EF SWI +22 3439 if(main_count==2) sprintf(d_txt, "%s: %s", nameu,de); \ ??AddToMain_8: \ 00000148 5400A0E3 MOV R0,#+84 \ 0000014C 740D80E3 ORR R0,R0,#0x1D00 \ 00000150 069080E0 ADD R9,R0,R6 \ 00000154 000098E5 LDR R0,[R8, #+0] \ 00000158 020050E3 CMP R0,#+2 \ 0000015C 0400001A BNE ??AddToMain_9 \ 00000160 0530A0E1 MOV R3,R5 \ 00000164 0420A0E1 MOV R2,R4 \ 00000168 0710A0E1 MOV R1,R7 \ 0000016C 0900A0E1 MOV R0,R9 \ 00000170 160000EF SWI +22 3440 if(main_count==3) sprintf(f_txt, "%s: %s", nameu,de); \ ??AddToMain_9: \ 00000174 8400A0E3 MOV R0,#+132 \ 00000178 740D80E3 ORR R0,R0,#0x1D00 \ 0000017C 06A080E0 ADD R10,R0,R6 \ 00000180 000098E5 LDR R0,[R8, #+0] \ 00000184 030050E3 CMP R0,#+3 \ 00000188 0400001A BNE ??AddToMain_10 \ 0000018C 0530A0E1 MOV R3,R5 \ 00000190 0420A0E1 MOV R2,R4 \ 00000194 0710A0E1 MOV R1,R7 \ 00000198 0A00A0E1 MOV R0,R10 \ 0000019C 160000EF SWI +22 3441 if(main_count==4) sprintf(g_txt, "%s: %s", nameu,de); \ ??AddToMain_10: \ 000001A0 B400A0E3 MOV R0,#+180 \ 000001A4 740D80E3 ORR R0,R0,#0x1D00 \ 000001A8 06B080E0 ADD R11,R0,R6 \ 000001AC 000098E5 LDR R0,[R8, #+0] \ 000001B0 040050E3 CMP R0,#+4 \ 000001B4 0400001A BNE ??AddToMain_11 \ 000001B8 0530A0E1 MOV R3,R5 \ 000001BC 0420A0E1 MOV R2,R4 \ 000001C0 0710A0E1 MOV R1,R7 \ 000001C4 0B00A0E1 MOV R0,R11 \ 000001C8 160000EF SWI +22 3442 if(main_count>4) \ ??AddToMain_11: \ 000001CC 000098E5 LDR R0,[R8, #+0] \ 000001D0 050050E3 CMP R0,#+5 \ 000001D4 100000BA BLT ??AddToMain_12 3443 { 3444 strcpy(a_txt, s_txt); \ 000001D8 00109DE5 LDR R1,[SP, #+0] \ 000001DC 04009DE5 LDR R0,[SP, #+4] \ 000001E0 1A0000EF SWI +26 3445 strcpy(s_txt, d_txt); \ 000001E4 00009DE5 LDR R0,[SP, #+0] \ 000001E8 0910A0E1 MOV R1,R9 \ 000001EC 1A0000EF SWI +26 3446 strcpy(d_txt, f_txt); \ 000001F0 0A10A0E1 MOV R1,R10 \ 000001F4 0900A0E1 MOV R0,R9 \ 000001F8 1A0000EF SWI +26 3447 strcpy(f_txt, g_txt); \ 000001FC 0B10A0E1 MOV R1,R11 \ 00000200 0A00A0E1 MOV R0,R10 \ 00000204 1A0000EF SWI +26 3448 sprintf(g_txt, "%s: %s", nameu,de); \ 00000208 0530A0E1 MOV R3,R5 \ 0000020C 0420A0E1 MOV R2,R4 \ 00000210 0710A0E1 MOV R1,R7 \ 00000214 0B00A0E1 MOV R0,R11 \ 00000218 160000EF SWI +22 3449 } 3450 mfree(de); \ ??AddToMain_12: \ 0000021C 0500A0E1 MOV R0,R5 \ 00000220 150000EF SWI +21 3451 main_d=1; \ 00000224 0100A0E3 MOV R0,#+1 \ 00000228 580286E5 STR R0,[R6, #+600] 3452 } \ 0000022C F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??AddToMain_0: \ 00000230 ........ DC32 main_lenght \ 00000234 ........ DC32 use_cutter \ 00000238 ........ DC32 `?` 3453 3454 //======================add to main info================ 3455 3456 int NEW_MSG; 3457 \ In segment CODE, align 4, keep-with-next 3458 void AddStringToLog(CLIST *t, int code, char *s, const char *name, unsigned int IDforACK,int flag) 3459 { \ AddStringToLog: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 90D04DE2 SUB SP,SP,#+144 \ 00000008 B0709DE5 LDR R7,[SP, #+176] \ 0000000C B4909DE5 LDR R9,[SP, #+180] \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 0280A0E1 MOV R8,R2 \ 0000001C 0360A0E1 MOV R6,R3 3460 char hs[128], *lastX; 3461 TTime tt; 3462 TDate d; 3463 GetDateTime(&d,&tt); \ 00000020 0D10A0E1 MOV R1,SP \ 00000024 08008DE2 ADD R0,SP,#+8 \ 00000028 B40000EF SWI +180 3464 int i; 3465 3466 // if(code == 3 && !LOG_XTXT) return; //Нl нуcно nоodrн?nь cennnrnуn 3467 if ( code==3 && NOT_LOG_SAME_XTXT ) \ 0000002C 030055E3 CMP R5,#+3 \ 00000030 1600001A BNE ??AddStringToLog_0 \ 00000034 04029FE5 LDR R0,??AddStringToLog_1 ;; NOT_LOG_SAME_XTXT \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 1200000A BEQ ??AddStringToLog_0 3468 { 3469 #ifdef kluchnik 3470 if(!t->isactive && HISTORY_BUFFER && (t->isLoadHistory && t->isIndividSet)) GetHistory(t, 64<isactive && HISTORY_BUFFER) GetHistory(t, 64<isactive && HISTORY_BUFFER) GetHistory(t, 64<` \ 00000094 0600A0E1 MOV R0,R6 \ 00000098 01002DE9 PUSH {R0} \ 0000009C 1000DDE5 LDRB R0,[SP, #+16] \ 000000A0 0A20A0E1 MOV R2,R10 \ 000000A4 7F10A0E3 MOV R1,#+127 \ 000000A8 01002DE9 PUSH {R0} \ 000000AC 1500DDE5 LDRB R0,[SP, #+21] \ 000000B0 01002DE9 PUSH {R0} \ 000000B4 0E00DDE5 LDRB R0,[SP, #+14] \ 000000B8 01002DE9 PUSH {R0} \ 000000BC 1100DDE5 LDRB R0,[SP, #+17] \ 000000C0 01002DE9 PUSH {R0} \ 000000C4 1430DDE5 LDRB R3,[SP, #+20] \ 000000C8 24008DE2 ADD R0,SP,#+36 \ 000000CC 1B0100EF SWI +283 3481 if(code != 3 || ((LOG_XTXT) && (flag)))//Нужно сохранять иксстатус \ 000000D0 030055E3 CMP R5,#+3 \ 000000D4 14D08DE2 ADD SP,SP,#+20 \ 000000D8 0400001A BNE ??AddStringToLog_4 \ 000000DC 64019FE5 LDR R0,??AddStringToLog_1+0x8 ;; LOG_XTXT \ 000000E0 000090E5 LDR R0,[R0, #+0] \ 000000E4 000050E3 CMP R0,#+0 \ 000000E8 00005913 CMPNE R9,#+0 \ 000000EC 0400000A BEQ ??AddStringToLog_5 3482 Add2History(t, hs, s, code); \ ??AddStringToLog_4: \ 000000F0 0530A0E1 MOV R3,R5 \ 000000F4 0820A0E1 MOV R2,R8 \ 000000F8 10108DE2 ADD R1,SP,#+16 \ 000000FC 0400A0E1 MOV R0,R4 \ 00000100 ........ _BLF Add2History,??Add2History??rA 3483 3484 LOGQ *p=NewLOGQ(s); \ ??AddStringToLog_5: \ 00000104 0800A0E1 MOV R0,R8 \ 00000108 ........ BL NewLOGQ \ 0000010C 0080A0E1 MOV R8,R0 3485 snprintf(p->hdr,79,"%02d:%02d:%02d %02d.%02d %s:",tt.hour,tt.min,tt.sec,d.day,d.month,name); \ 00000110 40002DE9 PUSH {R6} \ 00000114 1000DDE5 LDRB R0,[SP, #+16] \ 00000118 20208AE2 ADD R2,R10,#+32 \ 0000011C 4F10A0E3 MOV R1,#+79 \ 00000120 01002DE9 PUSH {R0} \ 00000124 1500DDE5 LDRB R0,[SP, #+21] \ 00000128 01002DE9 PUSH {R0} \ 0000012C 0E00DDE5 LDRB R0,[SP, #+14] \ 00000130 01002DE9 PUSH {R0} \ 00000134 1100DDE5 LDRB R0,[SP, #+17] \ 00000138 01002DE9 PUSH {R0} \ 0000013C 1430DDE5 LDRB R3,[SP, #+20] \ 00000140 100088E2 ADD R0,R8,#+16 \ 00000144 1B0100EF SWI +283 3486 p->type=code; \ 00000148 0C5088E5 STR R5,[R8, #+12] 3487 p->ID=IDforACK; //0-32767 \ 0000014C 087088E5 STR R7,[R8, #+8] 3488 i=AddLOGQ(&t->log,p); \ 00000150 0810A0E1 MOV R1,R8 \ 00000154 9C0084E2 ADD R0,R4,#+156 \ 00000158 ........ BL AddLOGQ \ 0000015C 0060A0E1 MOV R6,R0 \ 00000160 150056E3 CMP R6,#+21 \ 00000164 14D08DE2 ADD SP,SP,#+20 \ 00000168 090000BA BLT ??AddStringToLog_6 3489 while(i>MAXLOGMSG) 3490 { 3491 if (t->log==t->last_log) t->last_log=t->last_log->next; \ ??AddStringToLog_7: \ 0000016C A40094E5 LDR R0,[R4, #+164] \ 00000170 9C1094E5 LDR R1,[R4, #+156] 3492 RemoveLOGQ(&t->log,t->log); 3493 i--; \ 00000174 016046E2 SUB R6,R6,#+1 \ 00000178 000051E1 CMP R1,R0 \ 0000017C 00009005 LDREQ R0,[R0, #+0] \ 00000180 A4008405 STREQ R0,[R4, #+164] \ 00000184 9C0084E2 ADD R0,R4,#+156 \ 00000188 ........ BL RemoveLOGQ 3494 } \ 0000018C 150056E3 CMP R6,#+21 \ 00000190 F5FFFFAA BGE ??AddStringToLog_7 3495 t->msg_count=i; \ ??AddStringToLog_6: \ 00000194 AC6084E5 STR R6,[R4, #+172] 3496 if (!t->last_log) t->last_log=p; \ 00000198 A40094E5 LDR R0,[R4, #+164] 3497 if (code==3) \ 0000019C ........ LDR R6,??DataTable123 ;; S_ICONS \ 000001A0 000050E3 CMP R0,#+0 \ 000001A4 A4808405 STREQ R8,[R4, #+164] \ 000001A8 030055E3 CMP R5,#+3 \ 000001AC 0D00001A BNE ??AddStringToLog_8 3498 { 3499 if (edchat_id) \ 000001B0 480396E5 LDR R0,[R6, #+840] \ 000001B4 000050E3 CMP R0,#+0 \ 000001B8 1C00000A BEQ ??AddStringToLog_9 3500 { 3501 void *data=FindGUIbyId(edchat_id,NULL); \ 000001BC 480396E5 LDR R0,[R6, #+840] \ 000001C0 0010A0E3 MOV R1,#+0 \ 000001C4 090200EF SWI +521 3502 if (data) \ 000001C8 000050E3 CMP R0,#+0 \ 000001CC 1700000A BEQ ??AddStringToLog_9 3503 { 3504 EDCHAT_STRUCT *ed_struct; 3505 ed_struct=EDIT_GetUserPointer(data); \ 000001D0 DF0100EF SWI +479 3506 if (ed_struct) \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 1400000A BEQ ??AddStringToLog_9 3507 { 3508 if (ed_struct->ed_contact==t) \ 000001DC 000090E5 LDR R0,[R0, #+0] \ 000001E0 040050E1 CMP R0,R4 \ 000001E4 1100001A BNE ??AddStringToLog_9 3509 { 3510 goto L_INC; 3511 } 3512 } 3513 } 3514 } 3515 goto L_NOINC; 3516 } 3517 L_INC: 3518 if (!t->isunread) total_unread++; \ ??AddStringToLog_8: \ 000001E8 8C0094E5 LDR R0,[R4, #+140] \ 000001EC 000050E3 CMP R0,#+0 \ 000001F0 38039605 LDREQ R0,[R6, #+824] \ 000001F4 01008002 ADDEQ R0,R0,#+1 \ 000001F8 38038605 STREQ R0,[R6, #+824] 3519 if(NEW_MSG==1) \ 000001FC E40396E5 LDR R0,[R6, #+996] \ 00000200 010050E3 CMP R0,#+1 \ 00000204 0700001A BNE ??AddStringToLog_10 3520 { 3521 t->unread_msg++; \ 00000208 900094E5 LDR R0,[R4, #+144] \ 0000020C 010080E2 ADD R0,R0,#+1 \ 00000210 900084E5 STR R0,[R4, #+144] 3522 total_unread2++; \ 00000214 8C0296E5 LDR R0,[R6, #+652] \ 00000218 010080E2 ADD R0,R0,#+1 \ 0000021C 8C0286E5 STR R0,[R6, #+652] 3523 NEW_MSG=0; \ 00000220 0000A0E3 MOV R0,#+0 \ 00000224 E40386E5 STR R0,[R6, #+996] 3524 } 3525 t->isunread=1; \ ??AddStringToLog_10: \ 00000228 0100A0E3 MOV R0,#+1 \ 0000022C 8C0084E5 STR R0,[R4, #+140] 3526 L_NOINC: 3527 ChangeContactPos(t); \ ??AddStringToLog_9: \ 00000230 0400A0E1 MOV R0,R4 \ 00000234 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3528 } \ ??AddStringToLog_3: \ 00000238 90D08DE2 ADD SP,SP,#+144 ;; stack cleaning \ 0000023C F087BDE8 POP {R4-R10,PC} ;; return \ ??AddStringToLog_1: \ 00000240 ........ DC32 NOT_LOG_SAME_XTXT \ 00000244 ........ DC32 `?` \ 00000248 ........ DC32 LOG_XTXT 3529 3530 void ParseAnswer(WSHDR *ws, const char *s); 3531 3532 int time_to_stop_t9; 3533 \ In segment CODE, align 4, keep-with-next 3534 void ParseXStatusText(WSHDR *ws, const char *s, int color) 3535 { \ ParseXStatusText: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 3536 int c; 3537 int flag=0; \ 00000010 0070A0E3 MOV R7,#+0 3538 CutWSTR(ws,0); \ 00000014 0010A0E3 MOV R1,#+0 \ 00000018 260100EF SWI +294 3539 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} 3540 wsAppendChar(ws,0xE008); \ 0000002C 0810A0E3 MOV R1,#+8 \ 00000030 E01C81E3 ORR R1,R1,#0xE000 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 1C0000EF SWI +28 3541 wsAppendChar(ws,color); \ 0000003C 0610A0E1 MOV R1,R6 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1C0000EF SWI +28 3542 wsAppendChar(ws,0xE013); \ 00000048 1310A0E3 MOV R1,#+19 \ 0000004C E01C81E3 ORR R1,R1,#0xE000 \ 00000050 0A0000EA B ??ParseXStatusText_0 3543 while((c=*s++)) 3544 { 3545 if (c==13) \ ??ParseXStatusText_1: \ 00000054 0D0050E3 CMP R0,#+13 3546 { 3547 if (!flag) \ 00000058 00005703 CMPEQ R7,#+0 \ 0000005C 0500001A BNE ??ParseXStatusText_2 3548 { 3549 flag=1; \ 00000060 0170A0E3 MOV R7,#+1 3550 wsAppendChar(ws,0xE012); \ 00000064 1210A0E3 MOV R1,#+18 \ 00000068 E01C81E3 ORR R1,R1,#0xE000 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 1C0000EF SWI +28 3551 c=' '; \ 00000074 2000A0E3 MOV R0,#+32 3552 } 3553 } 3554 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 3555 } \ 00000088 ........ LDRB R0,[R5], #+1 \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 EFFFFF1A BNE ??ParseXStatusText_1 \ 00000094 F080BDE8 POP {R4-R7,PC} ;; return 3556 } 3557 3558 //Добавление итемов в чат при получении нового сообщения \ In segment CODE, align 4, keep-with-next 3559 void AddMsgToChat(void *data) 3560 { \ AddMsgToChat: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 3561 LOGQ *p; 3562 EDITCONTROL ec; 3563 EDITC_OPTIONS ec_options; 3564 EDCHAT_STRUCT *ed_struct; 3565 int j; 3566 int color, font, type; 3567 int zc; 3568 if (!data) return; \ 00000008 000050E3 CMP R0,#+0 \ 0000000C C400000A BEQ ??AddMsgToChat_0 3569 ed_struct=EDIT_GetUserPointer(data); \ 00000010 DF0100EF SWI +479 \ 00000014 0040B0E1 MOVS R4,R0 3570 if (!ed_struct) return; \ 00000018 C100000A BEQ ??AddMsgToChat_0 3571 if (!ed_struct->ed_contact->isunread) return; \ 0000001C 000094E5 LDR R0,[R4, #+0] \ 00000020 8C1090E5 LDR R1,[R0, #+140] \ 00000024 000051E3 CMP R1,#+0 \ 00000028 BD00000A BEQ ??AddMsgToChat_0 3572 3573 p=ed_struct->ed_contact->last_log; \ 0000002C A45090E5 LDR R5,[R0, #+164] 3574 if (p) \ 00000030 ........ LDR R6,??DataTable160 ;; S_ICONS \ 00000034 ........ LDR R7,??DataTable125 ;; O_ED_X_FONT_SIZE \ 00000038 ........ LDR R8,??DataTable126 ;; X_COLOR \ 0000003C ........ LDR R9,??DataTable127 ;; O_X_COLOR \ 00000040 000055E3 CMP R5,#+0 \ 00000044 A100000A BEQ ??AddMsgToChat_1 3575 { 3576 while(p) 3577 { 3578 font = ED_H_FONT_SIZE; \ ??AddMsgToChat_2: \ 00000048 ........ LDR R0,??DataTable148 ;; ED_H_FONT_SIZE 3579 if ((zc=p->acked&3)) \ 0000004C ........ LDR R1,??DataTable145 ;; I_COLOR \ 00000050 00A090E5 LDR R10,[R0, #+0] \ 00000054 040095E5 LDR R0,[R5, #+4] \ 00000058 00B091E5 LDR R11,[R1, #+0] \ 0000005C 030010E2 ANDS R0,R0,#0x3 \ 00000060 0300000A BEQ ??AddMsgToChat_3 3580 { 3581 if (zc==1) \ 00000064 010050E3 CMP R0,#+1 \ 00000068 1E00001A BNE ??AddMsgToChat_4 3582 color=ACK_COLOR; //Зеленый \ 0000006C ........ LDR R0,??DataTable141 ;; ACK_COLOR \ 00000070 1B0000EA B ??AddMsgToChat_5 3583 else 3584 color=I_COLOR; 3585 } 3586 else 3587 { 3588 if (p->ID==0xFFFFFFFF) \ ??AddMsgToChat_3: \ 00000074 080095E5 LDR R0,[R5, #+8] \ 00000078 010070E3 CMN R0,#+1 \ 0000007C 1700001A BNE ??AddMsgToChat_6 3589 { 3590 type = p->type&0x0F; \ 00000080 0C0095E5 LDR R0,[R5, #+12] \ 00000084 0F1000E2 AND R1,R0,#0xF 3591 if(p->type&0x10) \ 00000088 100010E3 TST R0,#0x10 \ 0000008C 0B00000A BEQ ??AddMsgToChat_7 3592 { 3593 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 00000090 010051E3 CMP R1,#+1 \ 00000094 ........ LDREQ R0,??DataTable143 ;; O_I_COLOR \ 00000098 0400000A BEQ ??AddMsgToChat_8 \ 0000009C 030051E3 CMP R1,#+3 \ 000000A0 00B09905 LDREQ R11,[R9, #+0] \ 000000A4 00A09705 LDREQ R10,[R7, #+0] \ 000000A8 0E00000A BEQ ??AddMsgToChat_4 \ 000000AC ........ LDR R0,??DataTable142 ;; O_TO_COLOR \ ??AddMsgToChat_8: \ 000000B0 00B090E5 LDR R11,[R0, #+0] \ 000000B4 ........ LDR R0,??DataTable147 ;; O_ED_H_FONT_SIZE \ ??AddMsgToChat_9: \ 000000B8 00A090E5 LDR R10,[R0, #+0] \ 000000BC 090000EA B ??AddMsgToChat_4 3594 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 3595 } 3596 else 3597 { 3598 color = (type==1)?I_COLOR:((type==3)?X_COLOR:TO_COLOR); \ ??AddMsgToChat_7: \ 000000C0 010051E3 CMP R1,#+1 \ 000000C4 0700000A BEQ ??AddMsgToChat_4 \ 000000C8 030051E3 CMP R1,#+3 \ 000000CC 00B09805 LDREQ R11,[R8, #+0] \ 000000D0 ........ LDREQ R0,??DataTable139 ;; ED_X_FONT_SIZE \ 000000D4 F7FFFF0A BEQ ??AddMsgToChat_9 \ 000000D8 ........ LDR R0,??DataTable144 ;; TO_COLOR \ 000000DC 000000EA B ??AddMsgToChat_5 3599 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 3600 } 3601 } 3602 else 3603 color=UNACK_COLOR; //????? \ ??AddMsgToChat_6: \ 000000E0 ........ LDR R0,??DataTable146 ;; UNACK_COLOR \ ??AddMsgToChat_5: \ 000000E4 00B090E5 LDR R11,[R0, #+0] 3604 } 3605 PrepareEditControl(&ec); \ ??AddMsgToChat_4: \ 000000E8 10008DE2 ADD R0,SP,#+16 \ 000000EC 640100EF SWI +356 3606 if ((p->type&0x0F)!=3) \ 000000F0 0C0095E5 LDR R0,[R5, #+12] \ 000000F4 0F0000E2 AND R0,R0,#0xF \ 000000F8 030050E3 CMP R0,#+3 \ 000000FC 0800000A BEQ ??AddMsgToChat_10 3607 { 3608 ascii2ws(ews,p->hdr); \ 00000100 B00296E5 LDR R0,[R6, #+688] \ 00000104 101085E2 ADD R1,R5,#+16 \ 00000108 ........ _BLF ascii2ws,??ascii2ws??rA 3609 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 0000010C B03296E5 LDR R3,[R6, #+688] \ 00000110 4020A0E3 MOV R2,#+64 \ 00000114 000093E5 LDR R0,[R3, #+0] \ 00000118 B000D0E1 LDRH R0,[R0, #+0] \ 0000011C 01002DE9 PUSH {R0} \ 00000120 030000EA B ??AddMsgToChat_11 3610 } 3611 else 3612 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??AddMsgToChat_10: \ 00000124 0000A0E3 MOV R0,#+0 \ 00000128 01002DE9 PUSH {R0} \ 0000012C B03296E5 LDR R3,[R6, #+688] \ 00000130 2020A0E3 MOV R2,#+32 \ ??AddMsgToChat_11: \ 00000134 0110A0E3 MOV R1,#+1 \ 00000138 14008DE2 ADD R0,SP,#+20 \ 0000013C 650100EF SWI +357 \ 00000140 04D08DE2 ADD SP,SP,#+4 3613 PrepareEditCOptions(&ec_options); \ 00000144 0D00A0E1 MOV R0,SP \ 00000148 C80100EF SWI +456 3614 SetPenColorToEditCOptions(&ec_options,color); \ 0000014C 0B10A0E1 MOV R1,R11 \ 00000150 0D00A0E1 MOV R0,SP \ 00000154 CC0100EF SWI +460 3615 SetFontToEditCOptions(&ec_options,font); \ 00000158 0A10A0E1 MOV R1,R10 \ 0000015C 0D00A0E1 MOV R0,SP \ 00000160 CA0100EF SWI +458 3616 CopyOptionsToEditControl(&ec,&ec_options); \ 00000164 0D10A0E1 MOV R1,SP \ 00000168 10008DE2 ADD R0,SP,#+16 \ 0000016C CE0100EF SWI +462 3617 //AddEditControlToEditQend(eq,&ec,ma); 3618 EDIT_InsertEditControl(data,ed_struct->ed_answer-1,&ec); \ 00000170 080094E5 LDR R0,[R4, #+8] \ 00000174 10208DE2 ADD R2,SP,#+16 \ 00000178 011040E2 SUB R1,R0,#+1 \ 0000017C 3C009DE5 LDR R0,[SP, #+60] \ 00000180 D20100EF SWI +466 3619 ed_struct->ed_answer++; \ 00000184 080094E5 LDR R0,[R4, #+8] \ 00000188 010080E2 ADD R0,R0,#+1 \ 0000018C 080084E5 STR R0,[R4, #+8] 3620 if ((p->type&0x0F)!=3) \ 00000190 0C0095E5 LDR R0,[R5, #+12] \ 00000194 0F1000E2 AND R1,R0,#0xF \ 00000198 030051E3 CMP R1,#+3 \ 0000019C 0300000A BEQ ??AddMsgToChat_12 3621 { 3622 ParseAnswer(ews,p->text); \ 000001A0 B00296E5 LDR R0,[R6, #+688] \ 000001A4 601085E2 ADD R1,R5,#+96 \ 000001A8 ........ BL ParseAnswer \ 000001AC 050000EA B ??AddMsgToChat_13 3623 } 3624 else 3625 { 3626 ParseXStatusText(ews, p->text, (p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_12: \ 000001B0 100010E3 TST R0,#0x10 \ 000001B4 00209915 LDRNE R2,[R9, #+0] \ 000001B8 B00296E5 LDR R0,[R6, #+688] \ 000001BC 00209805 LDREQ R2,[R8, #+0] \ 000001C0 601085E2 ADD R1,R5,#+96 \ 000001C4 ........ BL ParseXStatusText 3627 } 3628 PrepareEditControl(&ec); \ ??AddMsgToChat_13: \ 000001C8 10008DE2 ADD R0,SP,#+16 \ 000001CC 640100EF SWI +356 3629 ConstructEditControl(&ec, 3630 ECT_NORMAL_TEXT, 3631 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 3632 ews,ews->wsbody[0]); \ 000001D0 B03296E5 LDR R3,[R6, #+688] \ 000001D4 000093E5 LDR R0,[R3, #+0] \ 000001D8 B010D0E1 LDRH R1,[R0, #+0] \ 000001DC 000051E3 CMP R1,#+0 \ 000001E0 0100A0E1 MOV R0,R1 \ 000001E4 01002DE9 PUSH {R0} \ 000001E8 812DA013 MOVNE R2,#+8256 \ 000001EC 2020A003 MOVEQ R2,#+32 \ 000001F0 0310A0E3 MOV R1,#+3 \ 000001F4 14008DE2 ADD R0,SP,#+20 \ 000001F8 650100EF SWI +357 3633 PrepareEditCOptions(&ec_options); \ 000001FC 04008DE2 ADD R0,SP,#+4 \ 00000200 C80100EF SWI +456 3634 //#ifdef M75 3635 if ((p->type&0x0F)!=3) \ 00000204 0C0095E5 LDR R0,[R5, #+12] \ 00000208 04D08DE2 ADD SP,SP,#+4 \ 0000020C 0F1000E2 AND R1,R0,#0xF \ 00000210 030051E3 CMP R1,#+3 \ 00000214 0400000A BEQ ??AddMsgToChat_14 3636 { 3637 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000218 100010E3 TST R0,#0x10 \ 0000021C ........ LDRNE R0,??DataTable137 ;; O_ED_FONT_SIZE \ 00000220 ........ LDREQ R0,??DataTable138 ;; ED_FONT_SIZE \ 00000224 001090E5 LDR R1,[R0, #+0] \ 00000228 090000EA B ??AddMsgToChat_15 3638 } 3639 else 3640 { 3641 SetPenColorToEditCOptions(&ec_options,(p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_14: \ 0000022C 100010E3 TST R0,#0x10 \ 00000230 00109915 LDRNE R1,[R9, #+0] \ 00000234 0D00A0E1 MOV R0,SP \ 00000238 00109805 LDREQ R1,[R8, #+0] \ 0000023C CC0100EF SWI +460 3642 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_X_FONT_SIZE:ED_X_FONT_SIZE); \ 00000240 0C0095E5 LDR R0,[R5, #+12] \ 00000244 100010E3 TST R0,#0x10 \ 00000248 ........ LDREQ R0,??DataTable139 ;; ED_X_FONT_SIZE \ 0000024C 00109715 LDRNE R1,[R7, #+0] \ 00000250 00109005 LDREQ R1,[R0, #+0] \ ??AddMsgToChat_15: \ 00000254 0D00A0E1 MOV R0,SP \ 00000258 CA0100EF SWI +458 3643 } 3644 //#else 3645 // SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 3646 //#endif 3647 CopyOptionsToEditControl(&ec,&ec_options); \ 0000025C 0D10A0E1 MOV R1,SP \ 00000260 10008DE2 ADD R0,SP,#+16 \ 00000264 CE0100EF SWI +462 3648 EDIT_InsertEditControl(data,ed_struct->ed_answer-1,&ec); \ 00000268 080094E5 LDR R0,[R4, #+8] \ 0000026C 10208DE2 ADD R2,SP,#+16 \ 00000270 011040E2 SUB R1,R0,#+1 \ 00000274 3C009DE5 LDR R0,[SP, #+60] \ 00000278 D20100EF SWI +466 3649 ed_struct->ed_answer++; \ 0000027C 080094E5 LDR R0,[R4, #+8] \ 00000280 010080E2 ADD R0,R0,#+1 \ 00000284 080084E5 STR R0,[R4, #+8] 3650 p=p->next; \ 00000288 005095E5 LDR R5,[R5, #+0] 3651 } \ 0000028C 000055E3 CMP R5,#+0 \ 00000290 6CFFFF1A BNE ??AddMsgToChat_2 3652 j=((ed_struct->ed_contact->msg_count+1)*2); //Ожидаемый ed_answer \ 00000294 001094E5 LDR R1,[R4, #+0] \ 00000298 AC1091E5 LDR R1,[R1, #+172] \ 0000029C 011081E2 ADD R1,R1,#+1 \ 000002A0 8150A0E1 LSL R5,R1,#+1 \ 000002A4 000055E1 CMP R5,R0 \ 000002A8 070000AA BGE ??AddMsgToChat_16 3653 while(jed_answer) 3654 { 3655 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??AddMsgToChat_17: \ 000002AC 040094E5 LDR R0,[R4, #+4] \ 000002B0 0110A0E3 MOV R1,#+1 \ 000002B4 D10100EF SWI +465 3656 ed_struct->ed_answer--; \ 000002B8 080094E5 LDR R0,[R4, #+8] \ 000002BC 010040E2 SUB R0,R0,#+1 \ 000002C0 080084E5 STR R0,[R4, #+8] 3657 } \ 000002C4 000055E1 CMP R5,R0 \ 000002C8 F7FFFFBA BLT ??AddMsgToChat_17 3658 } 3659 ed_struct->ed_contact->last_log=NULL; \ ??AddMsgToChat_16: \ 000002CC 0050A0E3 MOV R5,#+0 \ ??AddMsgToChat_1: \ 000002D0 000094E5 LDR R0,[R4, #+0] \ 000002D4 A45080E5 STR R5,[R0, #+164] 3660 if (IsGuiOnTop(edchat_id)) \ 000002D8 480396E5 LDR R0,[R6, #+840] \ 000002DC 350100EF SWI +309 \ 000002E0 000050E3 CMP R0,#+0 \ 000002E4 0300000A BEQ ??AddMsgToChat_18 3661 { 3662 total_unread--; \ 000002E8 380396E5 LDR R0,[R6, #+824] \ 000002EC 010040E2 SUB R0,R0,#+1 \ 000002F0 380386E5 STR R0,[R6, #+824] \ 000002F4 020000EA B ??AddMsgToChat_19 3663 } 3664 else 3665 ed_struct->requested_decrement_total_unread++; \ ??AddMsgToChat_18: \ 000002F8 0C0094E5 LDR R0,[R4, #+12] \ 000002FC 010080E2 ADD R0,R0,#+1 \ 00000300 0C0084E5 STR R0,[R4, #+12] 3666 ed_struct->ed_contact->isunread=0; \ ??AddMsgToChat_19: \ 00000304 000094E5 LDR R0,[R4, #+0] \ 00000308 8C5080E5 STR R5,[R0, #+140] 3667 total_unread2=total_unread2-ed_struct->ed_contact->unread_msg; \ 0000030C 8C1296E5 LDR R1,[R6, #+652] \ 00000310 902090E5 LDR R2,[R0, #+144] \ 00000314 021041E0 SUB R1,R1,R2 \ 00000318 8C1286E5 STR R1,[R6, #+652] 3668 ed_struct->ed_contact->unread_msg=0; \ 0000031C 905080E5 STR R5,[R0, #+144] 3669 ChangeContactPos(ed_struct->ed_contact); \ 00000320 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3670 // EDIT_SetFocus(data,ed_struct->ed_answer); 3671 } \ ??AddMsgToChat_0: \ 00000324 40D08DE2 ADD SP,SP,#+64 ;; stack cleaning \ 00000328 F08FBDE8 POP {R4-R11,PC} ;; return 3672 3673 //Рисуем подтверждения непосредственно \ In segment CODE, align 4, keep-with-next 3674 void DrawAck(void *data) 3675 { \ DrawAck: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 3676 LOGQ *p; 3677 EDITCONTROL ec; 3678 EDITC_OPTIONS ec_options; 3679 EDCHAT_STRUCT *ed_struct; 3680 int j; 3681 int color; 3682 int dorefresh=0; \ 0000000C 0060A0E3 MOV R6,#+0 3683 if (!data) return; \ 00000010 4C00000A BEQ ??DrawAck_0 3684 ed_struct=EDIT_GetUserPointer(data); \ 00000014 DF0100EF SWI +479 3685 if (!ed_struct) return; \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 4900000A BEQ ??DrawAck_0 3686 p=ed_struct->ed_contact->log; \ 00000020 001090E5 LDR R1,[R0, #+0] 3687 j=ed_struct->ed_answer; 3688 j-=(ed_struct->ed_contact->msg_count*2)+1; //Номер собственно хедера верхнего итема \ 00000024 080090E5 LDR R0,[R0, #+8] \ 00000028 9C5091E5 LDR R5,[R1, #+156] \ 0000002C AC1091E5 LDR R1,[R1, #+172] \ 00000030 000055E3 CMP R5,#+0 \ 00000034 810040E0 SUB R0,R0,R1, LSL #+1 \ 00000038 017040E2 SUB R7,R0,#+1 \ 0000003C 3A00000A BEQ ??DrawAck_1 3689 while(p) 3690 { 3691 if (j>=1) //Пока возможно лишнее \ ??DrawAck_2: \ 00000040 010057E3 CMP R7,#+1 \ 00000044 340000BA BLT ??DrawAck_3 3692 { 3693 if (!(p->acked&4)) \ 00000048 040095E5 LDR R0,[R5, #+4] \ 0000004C 040010E3 TST R0,#0x4 \ 00000050 3100001A BNE ??DrawAck_3 3694 { 3695 ExtractEditControl(data,j,&ec); \ 00000054 10208DE2 ADD R2,SP,#+16 \ 00000058 0710A0E1 MOV R1,R7 \ 0000005C 0400A0E1 MOV R0,R4 \ 00000060 690100EF SWI +361 3696 PrepareEditCOptions(&ec_options); \ 00000064 0D00A0E1 MOV R0,SP \ 00000068 C80100EF SWI +456 3697 if (p->acked) \ 0000006C 040095E5 LDR R0,[R5, #+4] \ 00000070 000050E3 CMP R0,#+0 \ 00000074 0300000A BEQ ??DrawAck_4 3698 { 3699 if (p->acked==1) \ 00000078 010050E3 CMP R0,#+1 \ 0000007C ........ LDRNE R0,??DataTable145 ;; I_COLOR 3700 color=ACK_COLOR; //Зеленый \ 00000080 ........ LDREQ R0,??DataTable141 ;; ACK_COLOR \ 00000084 0F0000EA B ??DrawAck_5 3701 else 3702 color=I_COLOR; 3703 } 3704 else 3705 { 3706 if (p->ID==0xFFFFFFFF) \ ??DrawAck_4: \ 00000088 080095E5 LDR R0,[R5, #+8] \ 0000008C 010070E3 CMN R0,#+1 \ 00000090 0B00001A BNE ??DrawAck_6 3707 color=(p->type&0x10)?(((p->type&0x0F)==1)?O_I_COLOR:O_TO_COLOR):(((p->type&0x0F)==1)?I_COLOR:TO_COLOR); \ 00000094 0C0095E5 LDR R0,[R5, #+12] \ 00000098 100010E3 TST R0,#0x10 \ 0000009C 0F0000E2 AND R0,R0,#0xF \ 000000A0 0300000A BEQ ??DrawAck_7 \ 000000A4 010050E3 CMP R0,#+1 \ 000000A8 ........ LDRNE R0,??DataTable142 ;; O_TO_COLOR \ 000000AC ........ LDREQ R0,??DataTable143 ;; O_I_COLOR \ 000000B0 040000EA B ??DrawAck_5 \ ??DrawAck_7: \ 000000B4 010050E3 CMP R0,#+1 \ 000000B8 ........ LDRNE R0,??DataTable144 ;; TO_COLOR \ 000000BC ........ LDREQ R0,??DataTable145 ;; I_COLOR \ 000000C0 000000EA B ??DrawAck_5 3708 else 3709 color=UNACK_COLOR; //Серый \ ??DrawAck_6: \ 000000C4 ........ LDR R0,??DataTable146 ;; UNACK_COLOR 3710 } 3711 SetPenColorToEditCOptions(&ec_options,color/*p->type==1?I_COLOR:TO_COLOR*/); 3712 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_H_FONT_SIZE:ED_H_FONT_SIZE); 3713 CopyOptionsToEditControl(&ec,&ec_options); 3714 StoreEditControl(data,j,&ec); 3715 p->acked|=4; //Обработали 3716 dorefresh=1; \ ??DrawAck_5: \ 000000C8 0160A0E3 MOV R6,#+1 \ 000000CC 001090E5 LDR R1,[R0, #+0] \ 000000D0 0D00A0E1 MOV R0,SP \ 000000D4 CC0100EF SWI +460 \ 000000D8 0C0095E5 LDR R0,[R5, #+12] \ 000000DC 100010E3 TST R0,#0x10 \ 000000E0 ........ LDRNE R0,??DataTable147 ;; O_ED_H_FONT_SIZE \ 000000E4 ........ LDREQ R0,??DataTable148 ;; ED_H_FONT_SIZE \ 000000E8 001090E5 LDR R1,[R0, #+0] \ 000000EC 0D00A0E1 MOV R0,SP \ 000000F0 CA0100EF SWI +458 \ 000000F4 0D10A0E1 MOV R1,SP \ 000000F8 10008DE2 ADD R0,SP,#+16 \ 000000FC CE0100EF SWI +462 \ 00000100 10208DE2 ADD R2,SP,#+16 \ 00000104 0710A0E1 MOV R1,R7 \ 00000108 0400A0E1 MOV R0,R4 \ 0000010C 6A0100EF SWI +362 \ 00000110 040095E5 LDR R0,[R5, #+4] \ 00000114 040080E3 ORR R0,R0,#0x4 \ 00000118 040085E5 STR R0,[R5, #+4] 3717 } 3718 } 3719 j+=2; 3720 p=p->next; \ ??DrawAck_3: \ 0000011C 005095E5 LDR R5,[R5, #+0] \ 00000120 027087E2 ADD R7,R7,#+2 3721 } \ 00000124 000055E3 CMP R5,#+0 \ 00000128 C4FFFF1A BNE ??DrawAck_2 3722 if (IsGuiOnTop(edchat_id)&&dorefresh) RefreshGUI(); \ ??DrawAck_1: \ 0000012C 1C009FE5 LDR R0,??DrawAck_8 ;; S_ICONS + 840 \ 00000130 000090E5 LDR R0,[R0, #+0] \ 00000134 350100EF SWI +309 \ 00000138 000050E3 CMP R0,#+0 \ 0000013C 00005613 CMPNE R6,#+0 \ 00000140 0000000A BEQ ??DrawAck_0 \ 00000144 960100EF SWI +406 \ ??DrawAck_0: \ 00000148 3CD08DE2 ADD SP,SP,#+60 ;; stack cleaning \ 0000014C F080BDE8 POP {R4-R7,PC} ;; return \ ??DrawAck_8: \ 00000150 ........ DC32 S_ICONS + 840 3723 } 3724 \ In segment CODE, align 4, keep-with-next 3725 void ask_my_info(void) 3726 { 3727 /* TPKT *p; 3728 CLIST *t; 3729 p=malloc(sizeof(PKT)); 3730 p->pkt.uin=UIN; 3731 p->pkt.type=T_REQINFOSHORT; 3732 p->pkt.data_len=0; 3733 // AddStringToLog(t,0x01,"Request info...",I_str); 3734 SUBPROC((void *)SendAnswer,0,p);*/ 3735 } \ ask_my_info: \ 00000000 1EFF2FE1 BX LR ;; return 3736 \ In segment CODE, align 4, keep-with-next 3737 void set_my_status(void) 3738 { \ set_my_status: \ 00000000 00402DE9 PUSH {LR} 3739 TPKT *p; 3740 p=malloc(sizeof(PKT)+1); \ 00000004 0900A0E3 MOV R0,#+9 \ 00000008 140000EF SWI +20 3741 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 001080E5 STR R1,[R0, #+0] 3742 p->pkt.type=T_MY_STATUS_CH; // Тип пакета: изменение статуса \ 00000014 0F10A0E3 MOV R1,#+15 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 3743 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000001C 0110A0E3 MOV R1,#+1 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3744 p->data[0]=CurrentStatus; \ 00000024 18109FE5 LDR R1,??set_my_status_0 ;; S_ICONS + 680 3745 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,??DataTable161 ;; SendAnswer \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 710100EF SWI +369 3746 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??set_my_status_0: \ 00000044 ........ DC32 S_ICONS + 680 3747 3748 extern int Send0; 3749 \ In segment CODE, align 4, keep-with-next 3750 void set_my_xstatus(void) 3751 { \ set_my_xstatus: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 3752 #ifdef NEWSGOLD 3753 if(Is_Id3tag_Enabled) \ 00000004 ........ LDR R7,??DataTable160 ;; S_ICONS \ 00000008 ........ LDR R4,??DataTable161 ;; SendAnswer \ 0000000C 0CD04DE2 SUB SP,SP,#+12 \ 00000010 A40297E5 LDR R0,[R7, #+676] \ 00000014 1A50A0E3 MOV R5,#+26 \ 00000018 0190A0E3 MOV R9,#+1 \ 0000001C 16A0A0E3 MOV R10,#+22 \ 00000020 0060A0E3 MOV R6,#+0 \ 00000024 000050E3 CMP R0,#+0 \ 00000028 3C00000A BEQ ??set_my_xstatus_0 3754 { 3755 if(CurrentXStatus!=11) \ 0000002C AC0297E5 LDR R0,[R7, #+684] \ 00000030 0B0050E3 CMP R0,#+11 \ 00000034 7200000A BEQ ??set_my_xstatus_1 3756 { 3757 #endif 3758 TPKT *p; 3759 char *s1; 3760 char *s2; 3761 int l1; 3762 int l2; 3763 p=malloc(sizeof(PKT)+1); \ 00000038 0900A0E3 MOV R0,#+9 \ 0000003C 140000EF SWI +20 \ 00000040 0080A0E1 MOV R8,R0 3764 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 00000044 006088E5 STR R6,[R8, #+0] 3765 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 00000048 B4A0C8E1 STRH R10,[R8, #+4] 3766 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000004C B690C8E1 STRH R9,[R8, #+6] 3767 p->data[0]=CurrentXStatus; \ 00000050 AC0297E5 LDR R0,[R7, #+684] 3768 SUBPROC((void *)SendAnswer,0,p); \ 00000054 0820A0E1 MOV R2,R8 \ 00000058 0800C8E5 STRB R0,[R8, #+8] \ 0000005C 0010A0E3 MOV R1,#+0 \ 00000060 0400A0E1 MOV R0,R4 \ 00000064 710100EF SWI +369 3769 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 00000068 AC0297E5 LDR R0,[R7, #+684] \ 0000006C 0D10A0E1 MOV R1,SP \ 00000070 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000074 010080E2 ADD R0,R0,#+1 \ 00000078 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 0000007C 0090A0E1 MOV R9,R0 3770 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000080 AC0297E5 LDR R0,[R7, #+684] \ 00000084 04108DE2 ADD R1,SP,#+4 \ 00000088 800080E0 ADD R0,R0,R0, LSL #+1 \ 0000008C 020080E2 ADD R0,R0,#+2 \ 00000090 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000094 0070A0E1 MOV R7,R0 3771 if ((!s1)||(!s2)) return; \ 00000098 000059E3 CMP R9,#+0 \ 0000009C 00005713 CMPNE R7,#+0 \ 000000A0 F787BD08 POPEQ {R0-R2,R4-R10,PC} 3772 p=malloc(sizeof(PKT)+l1+l2+1); \ 000000A4 00009DE5 LDR R0,[SP, #+0] \ 000000A8 04109DE5 LDR R1,[SP, #+4] \ 000000AC 000081E0 ADD R0,R1,R0 \ 000000B0 090080E2 ADD R0,R0,#+9 \ 000000B4 140000EF SWI +20 \ 000000B8 0080A0E1 MOV R8,R0 3773 p->pkt.uin=0; \ 000000BC 006088E5 STR R6,[R8, #+0] 3774 p->pkt.type=T_XTEXT_SET; \ 000000C0 B450C8E1 STRH R5,[R8, #+4] 3775 p->pkt.data_len=l1+l2+1; \ 000000C4 00009DE5 LDR R0,[SP, #+0] \ 000000C8 04109DE5 LDR R1,[SP, #+4] \ 000000CC 000081E0 ADD R0,R1,R0 \ 000000D0 010080E2 ADD R0,R0,#+1 \ 000000D4 B600C8E1 STRH R0,[R8, #+6] 3776 strncpy(p->data+0,s1,l1); \ 000000D8 00209DE5 LDR R2,[SP, #+0] \ 000000DC 0910A0E1 MOV R1,R9 \ 000000E0 080088E2 ADD R0,R8,#+8 \ 000000E4 160100EF SWI +278 3777 p->data[l1]=0; \ 000000E8 00009DE5 LDR R0,[SP, #+0] 3778 strncpy(p->data+l1+1,s2,l2); \ 000000EC 0710A0E1 MOV R1,R7 \ 000000F0 080080E0 ADD R0,R0,R8 \ 000000F4 0860C0E5 STRB R6,[R0, #+8] \ 000000F8 00009DE5 LDR R0,[SP, #+0] \ 000000FC 04209DE5 LDR R2,[SP, #+4] \ 00000100 080080E0 ADD R0,R0,R8 \ 00000104 090080E2 ADD R0,R0,#+9 \ 00000108 160100EF SWI +278 3779 SUBPROC((void *)SendAnswer,0,p); \ 0000010C 0820A0E1 MOV R2,R8 \ 00000110 0010A0E3 MOV R1,#+0 \ 00000114 0400A0E1 MOV R0,R4 \ 00000118 710100EF SWI +369 \ 0000011C F787BDE8 POP {R0-R2,R4-R10,PC} 3780 #ifdef NEWSGOLD 3781 } 3782 else 3783 { 3784 tracktimer=0; 3785 GetTags(); 3786 } 3787 } 3788 else 3789 { 3790 TPKT *p; 3791 char *s1; 3792 char *s2; 3793 int l1; 3794 int l2; 3795 p=malloc(sizeof(PKT)+1); \ ??set_my_xstatus_0: \ 00000120 0900A0E3 MOV R0,#+9 \ 00000124 140000EF SWI +20 \ 00000128 0080A0E1 MOV R8,R0 3796 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000012C 006088E5 STR R6,[R8, #+0] 3797 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 00000130 B4A0C8E1 STRH R10,[R8, #+4] 3798 p->pkt.data_len=1; // Длина пакета: 1 байт \ 00000134 B690C8E1 STRH R9,[R8, #+6] 3799 p->data[0]=CurrentXStatus; \ 00000138 AC0297E5 LDR R0,[R7, #+684] 3800 SUBPROC((void *)SendAnswer,0,p); \ 0000013C 0820A0E1 MOV R2,R8 \ 00000140 0800C8E5 STRB R0,[R8, #+8] \ 00000144 0010A0E3 MOV R1,#+0 \ 00000148 0400A0E1 MOV R0,R4 \ 0000014C 710100EF SWI +369 3801 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 00000150 AC0297E5 LDR R0,[R7, #+684] \ 00000154 0D10A0E1 MOV R1,SP \ 00000158 800080E0 ADD R0,R0,R0, LSL #+1 \ 0000015C 010080E2 ADD R0,R0,#+1 \ 00000160 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000164 0090A0E1 MOV R9,R0 3802 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000168 AC0297E5 LDR R0,[R7, #+684] \ 0000016C 04108DE2 ADD R1,SP,#+4 \ 00000170 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000174 020080E2 ADD R0,R0,#+2 \ 00000178 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 0000017C 00A0A0E1 MOV R10,R0 3803 if ((!s1)||(!s2)) return; \ 00000180 000059E3 CMP R9,#+0 \ 00000184 00005A13 CMPNE R10,#+0 \ 00000188 F787BD08 POPEQ {R0-R2,R4-R10,PC} 3804 p=malloc(sizeof(PKT)+l1+l2+1); \ 0000018C 00009DE5 LDR R0,[SP, #+0] \ 00000190 04109DE5 LDR R1,[SP, #+4] \ 00000194 000081E0 ADD R0,R1,R0 \ 00000198 090080E2 ADD R0,R0,#+9 \ 0000019C 140000EF SWI +20 \ 000001A0 0080A0E1 MOV R8,R0 3805 p->pkt.uin=0; \ 000001A4 006088E5 STR R6,[R8, #+0] 3806 p->pkt.type=T_XTEXT_SET; \ 000001A8 B450C8E1 STRH R5,[R8, #+4] 3807 p->pkt.data_len=l1+l2+1; \ 000001AC 00009DE5 LDR R0,[SP, #+0] \ 000001B0 04109DE5 LDR R1,[SP, #+4] \ 000001B4 000081E0 ADD R0,R1,R0 \ 000001B8 010080E2 ADD R0,R0,#+1 \ 000001BC B600C8E1 STRH R0,[R8, #+6] 3808 strncpy(p->data+0,s1,l1); \ 000001C0 00209DE5 LDR R2,[SP, #+0] \ 000001C4 0910A0E1 MOV R1,R9 \ 000001C8 080088E2 ADD R0,R8,#+8 \ 000001CC 160100EF SWI +278 3809 p->data[l1]=0; \ 000001D0 00009DE5 LDR R0,[SP, #+0] 3810 strncpy(p->data+l1+1,s2,l2); \ 000001D4 0A10A0E1 MOV R1,R10 \ 000001D8 080080E0 ADD R0,R0,R8 \ 000001DC 0860C0E5 STRB R6,[R0, #+8] \ 000001E0 00009DE5 LDR R0,[SP, #+0] \ 000001E4 04209DE5 LDR R2,[SP, #+4] \ 000001E8 080080E0 ADD R0,R0,R8 \ 000001EC 090080E2 ADD R0,R0,#+9 \ 000001F0 160100EF SWI +278 3811 SUBPROC((void *)SendAnswer,0,p); \ 000001F4 0820A0E1 MOV R2,R8 \ 000001F8 0010A0E3 MOV R1,#+0 \ 000001FC 0400A0E1 MOV R0,R4 \ 00000200 710100EF SWI +369 3812 tracktimer=0; \ ??set_my_xstatus_1: \ 00000204 DC6287E5 STR R6,[R7, #+732] 3813 GetTags(); \ 00000208 ........ _BLF GetTags,??GetTags??rA \ 0000020C F787BDE8 POP {R0-R2,R4-R10,PC} ;; return 3814 } 3815 #endif 3816 } 3817 3818 #ifdef NEWSGOLD 3819 \ In segment CODE, align 4, keep-with-next 3820 void set_my_xstatus2(void) 3821 { \ set_my_xstatus2: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 3822 TPKT *p; 3823 // char *s1; 3824 // char *s2; 3825 int l1; 3826 int l2; 3827 p=malloc(sizeof(PKT)+1); 3828 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 3829 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 3830 p->pkt.data_len=1; // Длина пакета: 1 байт 3831 p->data[0]=11; 3832 SUBPROC((void *)SendAnswer,0,p); \ 00000004 ........ LDR R6,??DataTable161 ;; SendAnswer 3833 // char *s1; 3834 char *sk2=malloc(256); 3835 // strcpy(s1, playing); 3836 // s1="Now playing:"; 3837 strcpy(sk2,teast2); 3838 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 3839 l2=strlen(sk2); \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 1B0000EF SWI +27 \ 00000074 00A0A0E1 MOV R10,R0 3840 if ((!playing)||(!sk2)) return; \ 00000078 000057E3 CMP R7,#+0 \ 0000007C F187BD08 POPEQ {R0,R4-R10,PC} 3841 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 3842 p->pkt.uin=0; \ 00000090 005084E5 STR R5,[R4, #+0] 3843 p->pkt.type=T_XTEXT_SET; \ 00000094 1A00A0E3 MOV R0,#+26 \ 00000098 B400C4E1 STRH R0,[R4, #+4] 3844 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] 3845 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 3846 p->data[l1]=0; \ 000000B8 040089E0 ADD R0,R9,R4 \ 000000BC 0850C0E5 STRB R5,[R0, #+8] 3847 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 3848 mfree(sk2); \ 000000D0 0700A0E1 MOV R0,R7 \ 000000D4 150000EF SWI +21 3849 SUBPROC((void *)SendAnswer,0,p); \ 000000D8 0420A0E1 MOV R2,R4 \ 000000DC 0010A0E3 MOV R1,#+0 \ 000000E0 0600A0E1 MOV R0,R6 \ 000000E4 710100EF SWI +369 3850 // mfree(s1); 3851 // mfree(s2); 3852 } \ 000000E8 F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??set_my_xstatus2_0: \ 000000EC ........ DC32 playing \ 000000F0 ........ DC32 teast2 3853 #endif \ In segment CODE, align 4, keep-with-next 3854 void to_develop(void) 3855 { 3856 if (silenthide) return; \ to_develop: \ 00000000 ........ LDR R0,??DataTable160 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 E41290E5 LDR R1,[R0, #+740] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD18 POPNE {PC} 3857 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable154 ;; `?` \ 00000018 F820A0E3 MOV R2,#+248 \ 0000001C 402E82E3 ORR R2,R2,#0x400 \ 00000020 012082E0 ADD R2,R2,R1 \ 00000024 BC2080E5 STR R2,[R0, #+188] 3858 gipc.name_from=ipc_my_name; \ 00000028 D820A0E3 MOV R2,#+216 \ 0000002C 402E82E3 ORR R2,R2,#0x400 \ 00000030 011082E0 ADD R1,R2,R1 \ 00000034 C01080E5 STR R1,[R0, #+192] 3859 gipc.data=(void *)maincsm_id; \ 00000038 901290E5 LDR R1,[R0, #+656] 3860 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 0000003C BC3080E2 ADD R3,R0,#+188 \ 00000040 C41080E5 STR R1,[R0, #+196] \ 00000044 0220A0E3 MOV R2,#+2 \ 00000048 B010A0E3 MOV R1,#+176 \ 0000004C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000050 0900A0E3 MOV R0,#+9 \ 00000054 420C80E3 ORR R0,R0,#0x4200 \ 00000058 000100EF SWI +256 3861 } \ 0000005C 0080BDE8 POP {PC} ;; return 3862 \ In segment CODE, align 4, keep-with-next 3863 void ReqAddMsgToChat(CLIST *t) 3864 { \ ReqAddMsgToChat: \ 00000000 70402DE9 PUSH {R4-R6,LR} 3865 if (edchat_id) \ 00000004 ........ LDR R5,??DataTable160 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 480395E5 LDR R0,[R5, #+840] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 7080BD08 POPEQ {R4-R6,PC} 3866 { 3867 void *data=FindGUIbyId(edchat_id,NULL); \ 00000018 480395E5 LDR R0,[R5, #+840] \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 090200EF SWI +521 \ 00000024 0060A0E1 MOV R6,R0 3868 { 3869 EDCHAT_STRUCT *ed_struct; 3870 ed_struct=EDIT_GetUserPointer(data); \ 00000028 DF0100EF SWI +479 3871 if (ed_struct) \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 7080BD08 POPEQ {R4-R6,PC} 3872 { 3873 if (ed_struct->ed_contact==t) \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 040050E1 CMP R0,R4 \ 0000003C 7080BD18 POPNE {R4-R6,PC} 3874 { 3875 if (EDIT_IsBusy(data)) \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 1C0200EF SWI +540 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0400000A BEQ ??ReqAddMsgToChat_0 3876 { 3877 t->req_add=1; \ 00000050 0100A0E3 MOV R0,#+1 \ 00000054 940084E5 STR R0,[R4, #+148] 3878 #ifdef EVILFOX 3879 time_to_stop_t9=2; 3880 #else 3881 time_to_stop_t9=3; \ 00000058 0300A0E3 MOV R0,#+3 \ 0000005C E80385E5 STR R0,[R5, #+1000] \ 00000060 7080BDE8 POP {R4-R6,PC} 3882 #endif 3883 } 3884 else 3885 { 3886 AddMsgToChat(data); \ ??ReqAddMsgToChat_0: \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 ........ BL AddMsgToChat 3887 DirectRedrawGUI_ID(edchat_id); \ 0000006C 480395E5 LDR R0,[R5, #+840] \ 00000070 400100EF SWI +320 3888 } 3889 } 3890 } 3891 } 3892 } 3893 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 3894 3895 GBSTMR develop; 3896 \ In segment CODE, align 4, keep-with-next 3897 void begin_to_develop() 3898 { \ begin_to_develop: \ 00000000 00402DE9 PUSH {LR} 3899 if(IsUnlocked()) \ 00000004 430000EF SWI +67 \ 00000008 000050E3 CMP R0,#+0 \ 0000000C 0100000A BEQ ??begin_to_develop_0 3900 to_develop(); \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ B to_develop ;; tailcall 3901 else 3902 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 + 7652 \ 00000020 6410A0E3 MOV R1,#+100 \ 00000024 4D0000EF SWI +77 3903 } \ 00000028 0080BDE8 POP {PC} ;; return \ ??begin_to_develop_1: \ 0000002C ........ DC32 begin_to_develop \ 00000030 ........ DC32 S_ICONS + 7652 3904 3905 3906 3907 //----------------------------- LOAD COMMANDS -----------------------------// 3908 //Templates 3909 char *cmd_chars; //Собственно файл 3910 char **cmd_lines; //Массив указателей на строки 3911 \ In segment CODE, align 4, keep-with-next 3912 void cmdFree(void) 3913 { \ cmdFree: \ 00000000 10402DE9 PUSH {R4,LR} 3914 if (cmd_lines) mfree(cmd_lines); \ 00000004 ........ LDR R4,??DataTable159 ;; CmdMenuHeader \ 00000008 180094E5 LDR R0,[R4, #+24] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0000000A BEQ ??cmdFree_0 \ 00000014 150000EF SWI +21 3915 if (cmd_chars) mfree(cmd_chars); \ ??cmdFree_0: \ 00000018 140094E5 LDR R0,[R4, #+20] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0100000A BEQ ??cmdFree_1 \ 00000024 150000EF SWI +21 3916 cmd_lines=NULL; \ 00000028 0000A0E3 MOV R0,#+0 \ ??cmdFree_1: \ 0000002C 180084E5 STR R0,[R4, #+24] 3917 cmd_chars=NULL; \ 00000030 140084E5 STR R0,[R4, #+20] 3918 } \ 00000034 1080BDE8 POP {R4,PC} ;; return 3919 \ In segment CODE, align 4, keep-with-next 3920 int LoadCmd() 3921 { \ LoadCmd: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 4BDF4DE2 SUB SP,SP,#+300 3922 FSTATS stat; 3923 char fn[256]; 3924 int f; 3925 unsigned int ul; 3926 int i; 3927 int fsize; 3928 char *p; 3929 char *pp; 3930 int c; 3931 cmdFree(); \ 00000008 ........ BL cmdFree 3932 strcpy(fn,TEMPLATES_PATH); \ 0000000C ........ LDR R1,??DataTable157 ;; TEMPLATES_PATH \ 00000010 04008DE2 ADD R0,SP,#+4 \ 00000014 1A0000EF SWI +26 3933 i=strlen(fn); \ 00000018 04008DE2 ADD R0,SP,#+4 \ 0000001C 1B0000EF SWI +27 3934 sprintf(fn+i,"\\cmd.txt"); \ 00000020 EC109FE5 LDR R1,??LoadCmd_0 ;; `?` \ 00000024 0070A0E1 MOV R7,R0 \ 00000028 04008DE2 ADD R0,SP,#+4 \ 0000002C 000087E0 ADD R0,R7,R0 \ 00000030 160000EF SWI +22 3935 GetFileStats(fn,&stat,&ul); \ 00000034 0D20A0E1 MOV R2,SP \ 00000038 411F8DE2 ADD R1,SP,#+260 \ 0000003C 04008DE2 ADD R0,SP,#+4 \ 00000040 840000EF SWI +132 3936 fsize=stat.size; \ 00000044 08719DE5 LDR R7,[SP, #+264] 3937 f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul); \ 00000048 0D30A0E1 MOV R3,SP \ 0000004C 8020A0E3 MOV R2,#+128 \ 00000050 801CA0E3 MOV R1,#+32768 \ 00000054 04008DE2 ADD R0,SP,#+4 \ 00000058 0A0000EF SWI +10 \ 0000005C 0080A0E1 MOV R8,R0 3938 if (f==-1) return 0; \ 00000060 010078E3 CMN R8,#+1 \ 00000064 0200001A BNE ??LoadCmd_1 \ 00000068 0000A0E3 MOV R0,#+0 \ ??LoadCmd_2: \ 0000006C 4BDF8DE2 ADD SP,SP,#+300 ;; stack cleaning \ 00000070 F087BDE8 POP {R4-R10,PC} ;; return 3939 p=cmd_chars=malloc(fsize+1); \ ??LoadCmd_1: \ 00000074 ........ LDR R4,??DataTable159 ;; CmdMenuHeader \ 00000078 010087E2 ADD R0,R7,#+1 \ 0000007C 140000EF SWI +20 \ 00000080 140084E5 STR R0,[R4, #+20] \ 00000084 0060A0E1 MOV R6,R0 3940 p[fread(f,p,fsize,&ul)]=0; \ 00000088 0050A0E3 MOV R5,#+0 \ 0000008C 0D30A0E1 MOV R3,SP \ 00000090 0720A0E1 MOV R2,R7 \ 00000094 0610A0E1 MOV R1,R6 \ 00000098 0800A0E1 MOV R0,R8 \ 0000009C 0B0000EF SWI +11 \ 000000A0 0650C0E7 STRB R5,[R0, +R6] 3941 fclose(f,&ul); \ 000000A4 0D10A0E1 MOV R1,SP \ 000000A8 0800A0E1 MOV R0,R8 \ 000000AC 0D0000EF SWI +13 3942 i=0; \ 000000B0 0070A0E3 MOV R7,#+0 3943 pp=p; \ 000000B4 0680A0E1 MOV R8,R6 \ 000000B8 020000EA B ??LoadCmd_3 3944 for(;;) 3945 { 3946 c=*p; 3947 if (c<32) 3948 { 3949 if (pp&&(pp!=p)) 3950 { 3951 cmd_lines=realloc(cmd_lines,(i+1)*sizeof(char *)); 3952 cmd_lines[i++]=pp; 3953 } 3954 pp=NULL; 3955 if (!c) break; 3956 *p=0; 3957 } 3958 else 3959 { 3960 if (pp==NULL) pp=p; \ ??LoadCmd_4: \ 000000BC 000058E3 CMP R8,#+0 \ 000000C0 0680A001 MOVEQ R8,R6 3961 } 3962 p++; \ ??LoadCmd_5: \ 000000C4 016086E2 ADD R6,R6,#+1 \ ??LoadCmd_3: \ 000000C8 0090D6E5 LDRB R9,[R6, #+0] \ 000000CC 200059E3 CMP R9,#+32 \ 000000D0 F9FFFFAA BGE ??LoadCmd_4 \ 000000D4 000058E3 CMP R8,#+0 \ 000000D8 06005811 CMPNE R8,R6 \ 000000DC 0600000A BEQ ??LoadCmd_6 \ 000000E0 180094E5 LDR R0,[R4, #+24] \ 000000E4 01A087E2 ADD R10,R7,#+1 \ 000000E8 0A11A0E1 LSL R1,R10,#+2 \ 000000EC BA0000EF SWI +186 \ 000000F0 180084E5 STR R0,[R4, #+24] \ 000000F4 078180E7 STR R8,[R0, +R7, LSL #+2] \ 000000F8 0A70A0E1 MOV R7,R10 \ ??LoadCmd_6: \ 000000FC 0080A0E3 MOV R8,#+0 \ 00000100 000059E3 CMP R9,#+0 3963 } 3964 return i; \ 00000104 0700A001 MOVEQ R0,R7 \ 00000108 D7FFFF0A BEQ ??LoadCmd_2 \ 0000010C 0050C6E5 STRB R5,[R6, #+0] \ 00000110 EBFFFFEA B ??LoadCmd_5 \ ??LoadCmd_0: \ 00000114 ........ DC32 `?` 3965 } 3966 3967 int NumOfItems=0; 3968 HEADER_DESC CmdMenuHeader={NULL,NULL,NULL,NULL,NULL,NULL,LGP_NULL}; 3969 \ In segment CODE, align 4, keep-with-next 3970 void CmdMenuItemHandler(void *data, int curitem, void *unk) 3971 { \ CmdMenuItemHandler: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 3972 void *item=AllocMenuItem(data); \ 0000000C 970100EF SWI +407 \ 00000010 0060A0E1 MOV R6,R0 3973 char *p=cmd_lines[curitem]; \ 00000014 3C009FE5 LDR R0,??CmdMenuItemHandler_0 ;; CmdMenuHeader + 24 \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 057190E7 LDR R7,[R0, +R5, LSL #+2] 3974 WSHDR *ws=AllocMenuWS(data,strlen(p)); \ 00000020 0700A0E1 MOV R0,R7 \ 00000024 1B0000EF SWI +27 \ 00000028 0010A0E1 MOV R1,R0 \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 980100EF SWI +408 \ 00000034 0080A0E1 MOV R8,R0 3975 ascii2ws(ws,p); \ 00000038 0710A0E1 MOV R1,R7 \ 0000003C ........ _BLF ascii2ws,??ascii2ws??rA 3976 SetMenuItemText(data, item, ws, curitem); \ 00000040 0530A0E1 MOV R3,R5 \ 00000044 0820A0E1 MOV R2,R8 \ 00000048 0610A0E1 MOV R1,R6 \ 0000004C 0400A0E1 MOV R0,R4 \ 00000050 9A0100EF SWI +410 3977 } \ 00000054 F081BDE8 POP {R4-R8,PC} ;; return \ ??CmdMenuItemHandler_0: \ 00000058 ........ DC32 CmdMenuHeader + 24 3978 \ In segment CODE, align 4, keep-with-next 3979 void CmdMenuGHook(void *data, int cmd) 3980 { \ CmdMenuGHook: \ 00000000 00402DE9 PUSH {LR} 3981 if (cmd==TI_CMD_FOCUS) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0100001A BNE ??CmdMenuGHook_0 3982 { 3983 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 \ 00000010 0080BDE8 POP {PC} 3984 } 3985 if (cmd==TI_CMD_DESTROY) \ ??CmdMenuGHook_0: \ 00000014 030051E3 CMP R1,#+3 \ 00000018 0080BD18 POPNE {PC} 3986 { 3987 cmdFree(); \ 0000001C 0040BDE8 POP {LR} ;; Pop \ 00000020 ........ B cmdFree ;; tailcall 3988 } 3989 } 3990 \ In segment CODE, align 4, keep-with-next 3991 static int CmdMenuKeyHook(void *data, GUI_MSG *msg) 3992 { \ CmdMenuKeyHook: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 3993 int Selected=GetCurMenuItem(data); \ 0000000C 8F0100EF SWI +399 \ 00000010 0060A0E1 MOV R6,R0 3994 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000014 0400A0E1 MOV R0,R4 \ 00000018 E00100EF SWI +480 \ 0000001C 0040A0E1 MOV R4,R0 3995 if ((msg->keys==0x18)||(msg->keys==0x3D)) \ 00000020 F200D5E1 LDRSH R0,[R5, #+2] \ 00000024 180050E3 CMP R0,#+24 \ 00000028 3D005013 CMPNE R0,#+61 \ 0000002C 1700001A BNE ??CmdMenuKeyHook_0 3996 { 3997 if (NumOfItems) \ 00000030 ........ LDR R0,??DataTable159 ;; CmdMenuHeader \ 00000034 1C1090E5 LDR R1,[R0, #+28] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 1300000A BEQ ??CmdMenuKeyHook_0 3998 { 3999 const char *p=cmd_lines[Selected]; \ 00000040 180090E5 LDR R0,[R0, #+24] \ 00000044 065190E7 LDR R5,[R0, +R6, LSL #+2] 4000 WSHDR *ws; 4001 ws=AllocWS(256); \ 00000048 400FA0E3 MOV R0,#+256 \ 0000004C 250100EF SWI +293 \ 00000050 0060A0E1 MOV R6,R0 4002 wsprintf(ws,p); \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 240100EF SWI +292 4003 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ws); \ 0000005C 040094E5 LDR R0,[R4, #+4] \ 00000060 081094E5 LDR R1,[R4, #+8] \ 00000064 0620A0E1 MOV R2,R6 \ 00000068 DE0100EF SWI +478 4004 EDIT_SetCursorPos(ed_struct->ed_chatgui,wstrlen(ws)+1); \ 0000006C 0600A0E1 MOV R0,R6 \ 00000070 230100EF SWI +291 \ 00000074 011080E2 ADD R1,R0,#+1 \ 00000078 040094E5 LDR R0,[R4, #+4] \ 0000007C D40100EF SWI +468 4005 4006 FreeWS(ws); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 290100EF SWI +297 4007 return(1); \ 00000088 0100A0E3 MOV R0,#+1 \ 0000008C 7080BDE8 POP {R4-R6,PC} 4008 } 4009 } 4010 return(0); \ ??CmdMenuKeyHook_0: \ 00000090 0000A0E3 MOV R0,#+0 \ 00000094 7080BDE8 POP {R4-R6,PC} ;; return 4011 } 4012 4013 const int CmdSoftkeys[]={0,1,2}; 4014 4015 const SOFTKEY_DESC cmd_sk[]= 4016 { 4017 {0x0004,0x0000,(int)""}, 4018 {0x0001,0x0000,(int)LG_CLOSE}, 4019 {0x003D,0x0000,(int)LGP_DOIT_PIC} 4020 }; 4021 const SOFTKEYSTAB cmd_Back_skt= 4022 { 4023 cmd_sk,0 4024 }; 4025 static const MENU_DESC CmdMenuStruct= 4026 { 4027 8,CmdMenuKeyHook,CmdMenuGHook,NULL, 4028 CmdSoftkeys, 4029 &cmd_Back_skt, 4030 0x10, 4031 CmdMenuItemHandler, 4032 NULL, //menuitems, 4033 NULL, //menuprocs, 4034 NULL 4035 }; 4036 \ In segment CODE, align 4, keep-with-next 4037 int DispCmdMenu(void *ed_gui) 4038 { \ DispCmdMenu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 4039 NumOfItems=LoadCmd(); \ 00000004 68509FE5 LDR R5,??DispCmdMenu_0 ;; CmdMenuHeader 4040 if(NumOfItems) \ 00000008 68609FE5 LDR R6,??DispCmdMenu_0+0x4 ;; `?` \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ BL LoadCmd \ 00000014 1C0085E5 STR R0,[R5, #+28] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 0F00000A BEQ ??DispCmdMenu_1 4041 { 4042 *((int *)(&CmdMenuHeader.lgp_id))=(int)"Select command"; \ 00000020 0C6085E5 STR R6,[R5, #+12] 4043 patch_header(&CmdMenuHeader); \ 00000024 0500A0E1 MOV R0,R5 \ 00000028 ........ _BLF patch_header,??patch_header??rA 4044 return CreateMenu(0,0,&CmdMenuStruct,&CmdMenuHeader,0,NumOfItems,ed_gui,0); \ 0000002C 0000A0E3 MOV R0,#+0 \ 00000030 01002DE9 PUSH {R0} \ 00000034 10002DE9 PUSH {R4} \ 00000038 1C0095E5 LDR R0,[R5, #+28] \ 0000003C 0530A0E1 MOV R3,R5 \ 00000040 01002DE9 PUSH {R0} \ 00000044 202086E2 ADD R2,R6,#+32 \ 00000048 0010A0E3 MOV R1,#+0 \ 0000004C 0000A0E3 MOV R0,#+0 \ 00000050 01002DE9 PUSH {R0} \ 00000054 520100EF SWI +338 \ 00000058 10D08DE2 ADD SP,SP,#+16 \ 0000005C 7080BDE8 POP {R4-R6,PC} 4045 } 4046 MsgBoxError(1, (int)"FILE NOT FOUND!"); \ ??DispCmdMenu_1: \ 00000060 101086E2 ADD R1,R6,#+16 \ 00000064 0100A0E3 MOV R0,#+1 \ 00000068 4E0000EF SWI +78 4047 return(0); \ 0000006C 0000A0E3 MOV R0,#+0 \ 00000070 7080BDE8 POP {R4-R6,PC} ;; return \ ??DispCmdMenu_0: \ 00000074 ........ DC32 CmdMenuHeader \ 00000078 ........ DC32 `?` 4048 } 4049 /* 4050 char *GetStatusByIconIndex(int icon) 4051 { 4052 char *stat=malloc(32); 4053 switch(icon) 4054 { 4055 case IS_OFFLINE : sprintf(stat,"Offline"); break; 4056 case IS_INVISIBLE : sprintf(stat,"Invisable"); break; 4057 case IS_AWAY : sprintf(stat,"Away"); break; 4058 case IS_NA : sprintf(stat,"N/A"); break; 4059 case IS_OCCUPIED: sprintf(stat,"Occupied"); break; 4060 case IS_DND : sprintf(stat,"DND"); break; 4061 case IS_DEPRESSION : sprintf(stat,"Depression"); break; 4062 case IS_EVIL : sprintf(stat,"Evil"); break; 4063 case IS_HOME : sprintf(stat,"Home"); break; 4064 case IS_LUNCH : sprintf(stat,"Lunch"); break; 4065 case IS_WORK : sprintf(stat,"Work"); break; 4066 case IS_ONLINE : sprintf(stat,"Online"); break; 4067 case IS_FFC : sprintf(stat,"FFC"); break; 4068 default : sprintf(stat,"Error status"); break; 4069 } 4070 return stat; 4071 } 4072 */ 4073 \ In segment CODE, align 4, keep-with-next 4074 char *GetStatusByIconIndex(int icon) 4075 { \ GetStatusByIconIndex: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 4076 char *stat=malloc(32); \ 00000008 2000A0E3 MOV R0,#+32 \ 0000000C 140000EF SWI +20 4077 switch(icon) \ 00000010 94109FE5 LDR R1,??GetStatusByIconIndex_1+0x4 ;; `?` \ 00000014 0050A0E1 MOV R5,R0 \ 00000018 0C0054E3 CMP R4,#+12 \ 0000001C 1A00008A BHI ??GetStatusByIconIndex_2 \ 00000020 010F8FE2 ADR R0,??GetStatusByIconIndex_0 \ 00000024 0400D0E7 LDRB R0,[R0, R4] \ 00000028 00F18FE0 ADD PC,PC,R0, LSL #+2 \ ??GetStatusByIconIndex_0: \ 0000002C 1A030507 DC8 +26,+3,+5,+7 \ 00000030 090B0D0F DC8 +9,+11,+13,+15 \ 00000034 11131517 DC8 +17,+19,+21,+23 \ 00000038 19000000 DC8 +25,+0,+0,+0 4078 { 4079 case IS_OFFLINE : sprintf(stat,"Отключен"); break; 4080 case IS_INVISIBLE : sprintf(stat,"Невидимый"); break; \ ??GetStatusByIconIndex_3: \ 0000003C 0C1081E2 ADD R1,R1,#+12 \ 00000040 140000EA B ??GetStatusByIconIndex_4 4081 case IS_AWAY : sprintf(stat,"Отсутсвует"); break; \ ??GetStatusByIconIndex_5: \ 00000044 181081E2 ADD R1,R1,#+24 \ 00000048 120000EA B ??GetStatusByIconIndex_4 4082 case IS_NA : sprintf(stat,"Не доступен"); break; \ ??GetStatusByIconIndex_6: \ 0000004C 241081E2 ADD R1,R1,#+36 \ 00000050 100000EA B ??GetStatusByIconIndex_4 4083 case IS_OCCUPIED: sprintf(stat,"Занят"); break; \ ??GetStatusByIconIndex_7: \ 00000054 301081E2 ADD R1,R1,#+48 \ 00000058 0E0000EA B ??GetStatusByIconIndex_4 4084 case IS_DND : sprintf(stat,"Не беспокоить");break; \ ??GetStatusByIconIndex_8: \ 0000005C 381081E2 ADD R1,R1,#+56 \ 00000060 0C0000EA B ??GetStatusByIconIndex_4 4085 case IS_DEPRESSION : sprintf(stat,"Депрессия"); break; \ ??GetStatusByIconIndex_9: \ 00000064 481081E2 ADD R1,R1,#+72 \ 00000068 0A0000EA B ??GetStatusByIconIndex_4 4086 case IS_EVIL : sprintf(stat,"Злой"); break; \ ??GetStatusByIconIndex_10: \ 0000006C 541081E2 ADD R1,R1,#+84 \ 00000070 080000EA B ??GetStatusByIconIndex_4 4087 case IS_HOME : sprintf(stat,"Дома"); break; \ ??GetStatusByIconIndex_11: \ 00000074 5C1081E2 ADD R1,R1,#+92 \ 00000078 060000EA B ??GetStatusByIconIndex_4 4088 case IS_LUNCH : sprintf(stat,"Жру"); break; \ ??GetStatusByIconIndex_12: \ 0000007C 091F8FE2 ADR R1,??GetStatusByIconIndex_1 ;; "Жру" \ 00000080 040000EA B ??GetStatusByIconIndex_4 4089 case IS_WORK : sprintf(stat,"Работа"); break; \ ??GetStatusByIconIndex_13: \ 00000084 641081E2 ADD R1,R1,#+100 \ 00000088 020000EA B ??GetStatusByIconIndex_4 4090 case IS_ONLINE : sprintf(stat,"В сети"); break; \ ??GetStatusByIconIndex_2: \ 0000008C 6C1081E2 ADD R1,R1,#+108 \ 00000090 000000EA B ??GetStatusByIconIndex_4 4091 case IS_FFC : sprintf(stat,"Готов болтать");break; \ ??GetStatusByIconIndex_14: \ 00000094 741081E2 ADD R1,R1,#+116 \ ??GetStatusByIconIndex_4: \ 00000098 0500A0E1 MOV R0,R5 \ 0000009C 160000EF SWI +22 4092 default : sprintf(stat,"В сети"); break; 4093 } 4094 return stat; \ 000000A0 0500A0E1 MOV R0,R5 \ 000000A4 3080BDE8 POP {R4,R5,PC} ;; return \ ??GetStatusByIconIndex_1: \ 000000A8 C6F0F300 DC8 "Жру" \ 000000AC ........ DC32 `?` 4095 } 4096 //----------------------------- CHECK COMMANDS -----------------------------// 4097 4098 4099 int comanda; 4100 4101 char requests1[]="Sending online time..."; 4102 char requests2[]="Sending msg info..."; 4103 char requests3[]="Sending battery info..."; 4104 char requests4[]="Sending mod info..."; 4105 char requests6[]="Sending offline info..."; 4106 char mod_info[264]; 4107 #ifdef NEWSGOLD 4108 #ifdef ELKA 4109 #ifdef ole64//kluchnik 4110 #define PLATFORM "Plяtform from ОлежкО" 4111 #else 4112 #define PLATFORM "Platform: ЁLKA" 4113 #endif 4114 #else 4115 #define PLATFORM "Platform: NEWЫGOLD" 4116 #endif 4117 #else 4118 #define PLATFORM "Platform: ЫGOLD" 4119 #endif 4120 4121 #define ENA_SIGNAL 1 //для команд, активировать сигналы,али нет 4122 #define DIS_SIGNAL 0 4123 4124 4125 \ In segment CODE, align 4, keep-with-next 4126 void SendData(CLIST *t,char *s,int signal,int count) 4127 { \ SendData: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0140A0E1 MOV R4,R1 \ 00000008 0050A0E1 MOV R5,R0 4128 comanda=0; \ 0000000C ........ LDR R0,??DataTable160 ;; S_ICONS \ 00000010 0010A0E3 MOV R1,#+0 \ 00000014 EC1380E5 STR R1,[R0, #+1004] 4129 t->signals=signal; \ 00000018 7C2085E5 STR R2,[R5, #+124] 4130 TPKT *p; 4131 SENDMSGCOUNT+=count; \ 0000001C 981290E5 LDR R1,[R0, #+664] \ 00000020 011083E0 ADD R1,R3,R1 \ 00000024 981280E5 STR R1,[R0, #+664] 4132 p=malloc(sizeof(PKT)+strlen(s)+1); \ 00000028 0400A0E1 MOV R0,R4 \ 0000002C 1B0000EF SWI +27 \ 00000030 090080E2 ADD R0,R0,#+9 \ 00000034 140000EF SWI +20 \ 00000038 0060A0E1 MOV R6,R0 4133 p->pkt.uin=t->uin; \ 0000003C 0C0095E5 LDR R0,[R5, #+12] \ 00000040 000086E5 STR R0,[R6, #+0] 4134 p->pkt.type=T_SENDMSG; \ 00000044 0200A0E3 MOV R0,#+2 \ 00000048 B400C6E1 STRH R0,[R6, #+4] 4135 p->pkt.data_len=strlen(s); \ 0000004C 0400A0E1 MOV R0,R4 \ 00000050 1B0000EF SWI +27 \ 00000054 B600C6E1 STRH R0,[R6, #+6] 4136 strcpy(p->data,s); \ 00000058 0410A0E1 MOV R1,R4 \ 0000005C 080086E2 ADD R0,R6,#+8 \ 00000060 1A0000EF SWI +26 4137 SUBPROC((void *)SendAnswer,0,p); \ 00000064 ........ LDR R0,??DataTable161 ;; SendAnswer \ 00000068 0620A0E1 MOV R2,R6 \ 0000006C 0010A0E3 MOV R1,#+0 \ 00000070 710100EF SWI +369 4138 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 4139 \ In segment DATA_Z, align 4, align-sorted 4140 unsigned int *errornumber; \ errornumber: \ 00000000 DS8 4 4141 \ In segment CODE, align 4, keep-with-next 4142 void CheckComand(char *txt, CLIST *t) 4143 { \ CheckComand: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 4144 comanda=1; \ 00000004 ........ LDR R5,??DataTable176 ;; S_ICONS 4145 #ifdef ole64 4146 sprintf(mod_info,"mod by Evilfox,kluchnik,windes based on revision 2058 from ОлежкО64, mod date: %s at %s ",__DATE__,__TIME__); 4147 #else 4148 sprintf(mod_info,"mod by Evilfox,kluchnik,windes based on revision 2058, mod date: %s at %s ",__DATE__,__TIME__); \ 00000008 F46B9FE5 LDR R6,??CheckComand_0 ;; `?` \ 0000000C 89DF4DE2 SUB SP,SP,#+548 \ 00000010 00B0A0E1 MOV R11,R0 \ 00000014 0140A0E1 MOV R4,R1 \ 00000018 0100A0E3 MOV R0,#+1 \ 0000001C EC0385E5 STR R0,[R5, #+1004] 4149 #endif 4150 // sprintf(mod_info,"mod by %s based on revision 2058, mod date: Apr 21 2008 ",devel); 4151 t->signals=1; 4152 if(!strcmp(txt, "__TEXTINFO") || !strcmp(txt, "__TI")) \ 00000020 ........ LDR R7,??DataTable163 ;; I_str \ 00000024 4C10A0E3 MOV R1,#+76 \ 00000028 781D81E3 ORR R1,R1,#0x1E00 \ 0000002C 051081E0 ADD R1,R1,R5 \ 00000030 0C108DE5 STR R1,[SP, #+12] \ 00000034 0C009DE5 LDR R0,[SP, #+12] \ 00000038 583086E2 ADD R3,R6,#+88 \ 0000003C 4C2086E2 ADD R2,R6,#+76 \ 00000040 0610A0E1 MOV R1,R6 \ 00000044 160000EF SWI +22 \ 00000048 0100A0E3 MOV R0,#+1 \ 0000004C 7C0084E5 STR R0,[R4, #+124] \ 00000050 E810A0E3 MOV R1,#+232 \ 00000054 6C1D81E3 ORR R1,R1,#0x1B00 \ 00000058 051081E0 ADD R1,R1,R5 \ 0000005C 10108DE5 STR R1,[SP, #+16] \ 00000060 0080A0E3 MOV R8,#+0 \ 00000064 6B1F86E2 ADD R1,R6,#+428 \ 00000068 0B00A0E1 MOV R0,R11 \ 0000006C 190000EF SWI +25 \ 00000070 000050E3 CMP R0,#+0 \ 00000074 0400000A BEQ ??CheckComand_1 \ 00000078 6E1F86E2 ADD R1,R6,#+440 \ 0000007C 0B00A0E1 MOV R0,R11 \ 00000080 190000EF SWI +25 \ 00000084 000050E3 CMP R0,#+0 \ 00000088 8400001A BNE ??CheckComand_2 4153 { 4154 char *s=malloc(16384); \ ??CheckComand_1: \ 0000008C 400CA0E3 MOV R0,#+16384 \ 00000090 140000EF SWI +20 \ 00000094 0090A0E1 MOV R9,R0 4155 char pl[256]; 4156 *s=0; \ 00000098 0080C9E5 STRB R8,[R9, #+0] 4157 snprintf(pl,256,"%s model: %s sw: %s\r\n",PLATFORM,Get_Phone_Info(PI_MODEL),Get_Phone_Info(PI_SW_NUMBER)); \ 0000009C 0700A0E3 MOV R0,#+7 \ 000000A0 D50100EF SWI +469 \ 000000A4 00A0A0E1 MOV R10,R0 \ 000000A8 0900A0E3 MOV R0,#+9 \ 000000AC D50100EF SWI +469 \ 000000B0 00042DE9 PUSH {R10} \ 000000B4 01002DE9 PUSH {R0} \ 000000B8 7C3086E2 ADD R3,R6,#+124 \ 000000BC 642086E2 ADD R2,R6,#+100 \ 000000C0 401FA0E3 MOV R1,#+256 \ 000000C4 2C008DE2 ADD R0,SP,#+44 \ 000000C8 1B0100EF SWI +283 4158 strcat(s,pl); \ 000000CC 2C108DE2 ADD R1,SP,#+44 \ 000000D0 0900A0E1 MOV R0,R9 \ 000000D4 170000EF SWI +23 4159 char online[256]; 4160 sprintf(online,"Время в онлайн: %02d:%02d:%02d \r\n" 4161 "Сервер: %s \r\n%s \r\n", uptimeHour, uptimeMin, uptimeSec, hostbuf2,PINGO); \ 000000D8 590D85E2 ADD R0,R5,#+5696 \ 000000DC 01002DE9 PUSH {R0} \ 000000E0 1C009DE5 LDR R0,[SP, #+28] \ 000000E4 8C1086E2 ADD R1,R6,#+140 \ 000000E8 01002DE9 PUSH {R0} \ 000000EC D80295E5 LDR R0,[R5, #+728] \ 000000F0 01002DE9 PUSH {R0} \ 000000F4 D43295E5 LDR R3,[R5, #+724] \ 000000F8 D02295E5 LDR R2,[R5, #+720] \ 000000FC 4E0F8DE2 ADD R0,SP,#+312 \ 00000100 160000EF SWI +22 4162 strcat(s,online); \ 00000104 4E1F8DE2 ADD R1,SP,#+312 \ 00000108 0900A0E1 MOV R0,R9 \ 0000010C 170000EF SWI +23 4163 char *send_txt=malloc(64); \ 00000110 4000A0E3 MOV R0,#+64 \ 00000114 140000EF SWI +20 \ 00000118 00A0A0E1 MOV R10,R0 4164 sprintf(send_txt, "Отправлено сообщений: %d \r\n" 4165 "Принято сообщений: %d \r\n", main2_count, main_count); \ 0000011C ........ LDR R0,??DataTable167 ;; main_count \ 00000120 C01086E2 ADD R1,R6,#+192 \ 00000124 003090E5 LDR R3,[R0, #+0] \ 00000128 ........ LDR R0,??DataTable168 ;; main2_count \ 0000012C 002090E5 LDR R2,[R0, #+0] \ 00000130 0A00A0E1 MOV R0,R10 \ 00000134 160000EF SWI +22 4166 strcat(s,send_txt); \ 00000138 0A10A0E1 MOV R1,R10 \ 0000013C 0900A0E1 MOV R0,R9 \ 00000140 170000EF SWI +23 4167 4168 WSHDR *ws=AllocWS(64); \ 00000144 4000A0E3 MOV R0,#+64 \ 00000148 250100EF SWI +293 \ 0000014C 00B0A0E1 MOV R11,R0 4169 GetProvider(ws,0); \ 00000150 0010A0E3 MOV R1,#+0 \ 00000154 410000EF SWI +65 4170 char prov[16]; 4171 ws_2str(ws,prov,wstrlen(ws)); \ 00000158 0B00A0E1 MOV R0,R11 \ 0000015C 230100EF SWI +291 \ 00000160 0020A0E1 MOV R2,R0 \ 00000164 28108DE2 ADD R1,SP,#+40 \ 00000168 0B00A0E1 MOV R0,R11 \ 0000016C A30000EF SWI +163 4172 sprintf(send_txt, "Оператор: %s \r\n", prov); \ 00000170 28208DE2 ADD R2,SP,#+40 \ 00000174 F41086E2 ADD R1,R6,#+244 \ 00000178 0A00A0E1 MOV R0,R10 \ 0000017C 160000EF SWI +22 4173 FreeWS(ws); \ 00000180 0B00A0E1 MOV R0,R11 \ 00000184 290100EF SWI +297 4174 strcat(s,send_txt); \ 00000188 0A10A0E1 MOV R1,R10 \ 0000018C 0900A0E1 MOV R0,R9 \ 00000190 170000EF SWI +23 4175 4176 int bat; 4177 bat=*RamCap(); \ 00000194 C88000EF SWI +32968 \ 00000198 B020D0E1 LDRH R2,[R0, #+0] 4178 sprintf(send_txt, "Заряд батареи: %d процентов \r\n", bat); \ 0000019C 411F86E2 ADD R1,R6,#+260 \ 000001A0 0A00A0E1 MOV R0,R10 \ 000001A4 160000EF SWI +22 4179 strcat(s,send_txt); \ 000001A8 0A10A0E1 MOV R1,R10 \ 000001AC 0900A0E1 MOV R0,R9 \ 000001B0 170000EF SWI +23 4180 4181 char *status=malloc(256); \ 000001B4 400FA0E3 MOV R0,#+256 \ 000001B8 140000EF SWI +20 \ 000001BC 00B0A0E1 MOV R11,R0 4182 TTime the; 4183 GetDateTime(NULL,&the); \ 000001C0 18108DE2 ADD R1,SP,#+24 \ 000001C4 0800A0E1 MOV R0,R8 \ 000001C8 B40000EF SWI +180 4184 void Get_Online_total(); 4185 Get_Online_total(); \ 000001CC ........ BL Get_Online_total 4186 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l \ 000001D0 242395E5 LDR R2,[R5, #+804] \ 000001D4 283395E5 LDR R3,[R5, #+808] 4187 sprintf(status, "Traffic: Rx : %db Tx : %db Queue: %db \r\nTime: %02d:%02d\r\n" 4188 "Online contact: %d [total: %d] \r\nUnread message: %d/%d ", 4189 RX,TX,sendq_l, 4190 the.hour, the.min, 4191 kopa_kontaktu, kopa_online, 4192 total_unread,total_unread2); \ 000001D8 8C0295E5 LDR R0,[R5, #+652] \ 000001DC 491F86E2 ADD R1,R6,#+292 \ 000001E0 01002DE9 PUSH {R0} \ 000001E4 380395E5 LDR R0,[R5, #+824] \ 000001E8 01002DE9 PUSH {R0} \ 000001EC 5C0395E5 LDR R0,[R5, #+860] \ 000001F0 01002DE9 PUSH {R0} \ 000001F4 600395E5 LDR R0,[R5, #+864] \ 000001F8 01002DE9 PUSH {R0} \ 000001FC 2900DDE5 LDRB R0,[SP, #+41] \ 00000200 01002DE9 PUSH {R0} \ 00000204 2C00DDE5 LDRB R0,[SP, #+44] \ 00000208 01002DE9 PUSH {R0} \ 0000020C 2C0395E5 LDR R0,[R5, #+812] \ 00000210 01002DE9 PUSH {R0} \ 00000214 0B00A0E1 MOV R0,R11 \ 00000218 160000EF SWI +22 \ 0000021C 30D08DE2 ADD SP,SP,#+48 4193 strcat(s,status); \ 00000220 0B10A0E1 MOV R1,R11 \ 00000224 0900A0E1 MOV R0,R9 \ 00000228 170000EF SWI +23 4194 comanda=0; 4195 if(show_send_info) \ 0000022C D4099FE5 LDR R0,??CheckComand_0+0x4 ;; show_send_info \ 00000230 EC8385E5 STR R8,[R5, #+1004] \ 00000234 000090E5 LDR R0,[R0, #+0] \ 00000238 000050E3 CMP R0,#+0 \ 0000023C 980295E5 LDR R0,[R5, #+664] \ 00000240 010080E2 ADD R0,R0,#+1 \ 00000244 980285E5 STR R0,[R5, #+664] \ 00000248 0900000A BEQ ??CheckComand_3 4196 AddStringToLog(t,0x01,"Sending textinfo...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 0000024C 0110A0E3 MOV R1,#+1 \ 00000250 02002DE9 PUSH {R1} \ 00000254 8008A0E1 LSL R0,R0,#+17 \ 00000258 A008A0E1 LSR R0,R0,#+17 \ 0000025C 01002DE9 PUSH {R0} \ 00000260 0730A0E1 MOV R3,R7 \ 00000264 662F86E2 ADD R2,R6,#+408 \ 00000268 0400A0E1 MOV R0,R4 \ 0000026C ........ BL AddStringToLog \ 00000270 08D08DE2 ADD SP,SP,#+8 4197 else 4198 SENDMSGCOUNT++; 4199 SendData(t,s,ENA_SIGNAL,0); \ ??CheckComand_3: \ 00000274 0030A0E3 MOV R3,#+0 \ 00000278 0120A0E3 MOV R2,#+1 \ 0000027C 0910A0E1 MOV R1,R9 \ 00000280 0400A0E1 MOV R0,R4 \ 00000284 ........ BL SendData 4200 mfree(s); \ 00000288 0900A0E1 MOV R0,R9 \ 0000028C 150000EF SWI +21 4201 mfree(send_txt); \ 00000290 0A00A0E1 MOV R0,R10 \ 00000294 150000EF SWI +21 4202 mfree(status); \ 00000298 0B00A0E1 MOV R0,R11 \ 0000029C 6B0100EA B ??CheckComand_4 4203 return; 4204 } 4205 4206 if(!strcmp(txt, "__TIME") || !strcmp(txt, "__T") || !strcmp(txt, "GET_TIME")) \ ??CheckComand_2: \ 000002A0 781F86E2 ADD R1,R6,#+480 \ 000002A4 0B00A0E1 MOV R0,R11 \ 000002A8 190000EF SWI +25 \ 000002AC 000050E3 CMP R0,#+0 \ 000002B0 0900000A BEQ ??CheckComand_5 \ 000002B4 DE1F8FE2 ADR R1,??CheckComand_6 ;; "__T" \ 000002B8 0B00A0E1 MOV R0,R11 \ 000002BC 190000EF SWI +25 \ 000002C0 000050E3 CMP R0,#+0 \ 000002C4 0400000A BEQ ??CheckComand_5 \ 000002C8 7A1F86E2 ADD R1,R6,#+488 \ 000002CC 0B00A0E1 MOV R0,R11 \ 000002D0 190000EF SWI +25 \ 000002D4 000050E3 CMP R0,#+0 \ 000002D8 2300001A BNE ??CheckComand_7 4207 { 4208 char *status=malloc(256); \ ??CheckComand_5: \ 000002DC 400FA0E3 MOV R0,#+256 \ 000002E0 140000EF SWI +20 \ 000002E4 0090A0E1 MOV R9,R0 4209 TTime the; 4210 GetDateTime(NULL,&the); \ 000002E8 04108DE2 ADD R1,SP,#+4 \ 000002EC 0000A0E3 MOV R0,#+0 \ 000002F0 B40000EF SWI +180 4211 sprintf(status, "Time: %02d:%02d",the.hour, the.min); \ 000002F4 0530DDE5 LDRB R3,[SP, #+5] \ 000002F8 0420DDE5 LDRB R2,[SP, #+4] \ 000002FC 701F86E2 ADD R1,R6,#+448 \ 00000300 0900A0E1 MOV R0,R9 \ 00000304 160000EF SWI +22 4212 comanda=0; 4213 if(show_send_info) \ 00000308 F8089FE5 LDR R0,??CheckComand_0+0x4 ;; show_send_info \ 0000030C EC8385E5 STR R8,[R5, #+1004] \ 00000310 000090E5 LDR R0,[R0, #+0] \ 00000314 000050E3 CMP R0,#+0 \ 00000318 980295E5 LDR R0,[R5, #+664] \ 0000031C 010080E2 ADD R0,R0,#+1 \ 00000320 980285E5 STR R0,[R5, #+664] \ 00000324 0900000A BEQ ??CheckComand_8 4214 AddStringToLog(t,0x01,"Sending time...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000328 0110A0E3 MOV R1,#+1 \ 0000032C 02002DE9 PUSH {R1} \ 00000330 8008A0E1 LSL R0,R0,#+17 \ 00000334 A008A0E1 LSR R0,R0,#+17 \ 00000338 01002DE9 PUSH {R0} \ 0000033C 0730A0E1 MOV R3,R7 \ 00000340 742F86E2 ADD R2,R6,#+464 \ 00000344 0400A0E1 MOV R0,R4 \ 00000348 ........ BL AddStringToLog \ 0000034C 08D08DE2 ADD SP,SP,#+8 4215 else 4216 SENDMSGCOUNT++; 4217 SendData(t,status,ENA_SIGNAL,0); \ ??CheckComand_8: \ 00000350 0030A0E3 MOV R3,#+0 \ 00000354 0120A0E3 MOV R2,#+1 \ 00000358 0910A0E1 MOV R1,R9 \ 0000035C 0400A0E1 MOV R0,R4 \ 00000360 ........ BL SendData 4218 mfree(status); \ 00000364 0900A0E1 MOV R0,R9 \ 00000368 380100EA B ??CheckComand_4 4219 return; 4220 } 4221 4222 if(!strcmp(txt, "GET_PLATFORM_INFO") || !strcmp(txt, "__PLATFORM") || !strcmp(txt,"__HW")) \ ??CheckComand_7: \ 0000036C ........ LDR R9,??DataTable166 ;; SendAnswer \ 00000370 02A0A0E3 MOV R10,#+2 \ 00000374 891F86E2 ADD R1,R6,#+548 \ 00000378 0B00A0E1 MOV R0,R11 \ 0000037C 190000EF SWI +25 \ 00000380 000050E3 CMP R0,#+0 \ 00000384 0900000A BEQ ??CheckComand_9 \ 00000388 8E1F86E2 ADD R1,R6,#+568 \ 0000038C 0B00A0E1 MOV R0,R11 \ 00000390 190000EF SWI +25 \ 00000394 000050E3 CMP R0,#+0 \ 00000398 0400000A BEQ ??CheckComand_9 \ 0000039C 911F86E2 ADD R1,R6,#+580 \ 000003A0 0B00A0E1 MOV R0,R11 \ 000003A4 190000EF SWI +25 \ 000003A8 000050E3 CMP R0,#+0 \ 000003AC 3100001A BNE ??CheckComand_10 4223 { 4224 comanda=0; \ ??CheckComand_9: \ 000003B0 EC8385E5 STR R8,[R5, #+1004] 4225 TPKT *p; 4226 char pl[256]; 4227 snprintf(pl,256,"%s model: %s sw: %s",PLATFORM,Get_Phone_Info(PI_MODEL),Get_Phone_Info(PI_SW_NUMBER)); \ 000003B4 0700A0E3 MOV R0,#+7 \ 000003B8 D50100EF SWI +469 \ 000003BC 0080A0E1 MOV R8,R0 \ 000003C0 0900A0E3 MOV R0,#+9 \ 000003C4 D50100EF SWI +469 \ 000003C8 00012DE9 PUSH {R8} \ 000003CC 01002DE9 PUSH {R0} \ 000003D0 7C3086E2 ADD R3,R6,#+124 \ 000003D4 7D2F86E2 ADD R2,R6,#+500 \ 000003D8 401FA0E3 MOV R1,#+256 \ 000003DC 4B0F8DE2 ADD R0,SP,#+300 \ 000003E0 1B0100EF SWI +283 4228 p=malloc(sizeof(PKT)+strlen(pl)+1); \ 000003E4 4B0F8DE2 ADD R0,SP,#+300 \ 000003E8 1B0000EF SWI +27 \ 000003EC 090080E2 ADD R0,R0,#+9 \ 000003F0 140000EF SWI +20 \ 000003F4 0080A0E1 MOV R8,R0 4229 p->pkt.uin=t->uin; \ 000003F8 0C0094E5 LDR R0,[R4, #+12] \ 000003FC 000088E5 STR R0,[R8, #+0] 4230 p->pkt.type=T_SENDMSG; \ 00000400 B4A0C8E1 STRH R10,[R8, #+4] 4231 p->pkt.data_len=strlen(pl); \ 00000404 4B0F8DE2 ADD R0,SP,#+300 \ 00000408 1B0000EF SWI +27 \ 0000040C B600C8E1 STRH R0,[R8, #+6] 4232 strcpy(p->data,pl); \ 00000410 4B1F8DE2 ADD R1,SP,#+300 \ 00000414 080088E2 ADD R0,R8,#+8 \ 00000418 1A0000EF SWI +26 4233 if(show_send_info) \ 0000041C E4079FE5 LDR R0,??CheckComand_0+0x4 ;; show_send_info \ 00000420 000090E5 LDR R0,[R0, #+0] \ 00000424 08D08DE2 ADD SP,SP,#+8 \ 00000428 000050E3 CMP R0,#+0 \ 0000042C 980295E5 LDR R0,[R5, #+664] \ 00000430 010080E2 ADD R0,R0,#+1 \ 00000434 980285E5 STR R0,[R5, #+664] \ 00000438 0900000A BEQ ??CheckComand_11 4234 AddStringToLog(t,0x01,"Sending platform info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 0000043C 0110A0E3 MOV R1,#+1 \ 00000440 02002DE9 PUSH {R1} \ 00000444 8008A0E1 LSL R0,R0,#+17 \ 00000448 A008A0E1 LSR R0,R0,#+17 \ 0000044C 01002DE9 PUSH {R0} \ 00000450 0730A0E1 MOV R3,R7 \ 00000454 822F86E2 ADD R2,R6,#+520 \ 00000458 0400A0E1 MOV R0,R4 \ 0000045C ........ BL AddStringToLog \ 00000460 08D08DE2 ADD SP,SP,#+8 4235 else 4236 SENDMSGCOUNT++; 4237 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_11: \ 00000464 0820A0E1 MOV R2,R8 \ ??CheckComand_12: \ 00000468 0010A0E3 MOV R1,#+0 \ 0000046C 0900A0E1 MOV R0,R9 \ 00000470 710100EF SWI +369 4238 return; \ 00000474 F60000EA B ??CheckComand_13 4239 } 4240 4241 if(!strcmp(txt, "GET_ONLINE_TIME") || !strcmp(txt, "__ONLINE")) \ ??CheckComand_10: \ 00000478 9E1F86E2 ADD R1,R6,#+632 \ 0000047C 0B00A0E1 MOV R0,R11 \ 00000480 190000EF SWI +25 \ 00000484 000050E3 CMP R0,#+0 \ 00000488 0400000A BEQ ??CheckComand_14 \ 0000048C A21F86E2 ADD R1,R6,#+648 \ 00000490 0B00A0E1 MOV R0,R11 \ 00000494 190000EF SWI +25 \ 00000498 000050E3 CMP R0,#+0 \ 0000049C 2D00001A BNE ??CheckComand_15 4242 { 4243 comanda=0; \ ??CheckComand_14: \ 000004A0 EC8385E5 STR R8,[R5, #+1004] 4244 TPKT *p; 4245 char online[256]; 4246 sprintf(online,"Время в онлайн: %02d:%02d:%02d \n" 4247 "Сервер: %s", uptimeHour, uptimeMin, uptimeSec, hostbuf2); \ 000004A4 10009DE5 LDR R0,[SP, #+16] \ 000004A8 931F86E2 ADD R1,R6,#+588 \ 000004AC 01002DE9 PUSH {R0} \ 000004B0 D80295E5 LDR R0,[R5, #+728] \ 000004B4 01002DE9 PUSH {R0} \ 000004B8 D43295E5 LDR R3,[R5, #+724] \ 000004BC D02295E5 LDR R2,[R5, #+720] \ 000004C0 4B0F8DE2 ADD R0,SP,#+300 \ 000004C4 160000EF SWI +22 4248 p=malloc(sizeof(PKT)+strlen(online)+1); \ 000004C8 4B0F8DE2 ADD R0,SP,#+300 \ 000004CC 1B0000EF SWI +27 \ 000004D0 090080E2 ADD R0,R0,#+9 \ 000004D4 140000EF SWI +20 \ 000004D8 0060A0E1 MOV R6,R0 4249 p->pkt.uin=t->uin; \ 000004DC 0C0094E5 LDR R0,[R4, #+12] \ 000004E0 000086E5 STR R0,[R6, #+0] 4250 p->pkt.type=T_SENDMSG; \ 000004E4 B4A0C6E1 STRH R10,[R6, #+4] 4251 p->pkt.data_len=strlen(online); \ 000004E8 4B0F8DE2 ADD R0,SP,#+300 \ 000004EC 1B0000EF SWI +27 \ 000004F0 B600C6E1 STRH R0,[R6, #+6] 4252 strcpy(p->data,online); \ 000004F4 4B1F8DE2 ADD R1,SP,#+300 \ 000004F8 080086E2 ADD R0,R6,#+8 \ 000004FC 1A0000EF SWI +26 4253 if(show_send_info) \ 00000500 00079FE5 LDR R0,??CheckComand_0+0x4 ;; show_send_info \ 00000504 000090E5 LDR R0,[R0, #+0] \ 00000508 08D08DE2 ADD SP,SP,#+8 \ 0000050C 000050E3 CMP R0,#+0 \ 00000510 980295E5 LDR R0,[R5, #+664] \ 00000514 010080E2 ADD R0,R0,#+1 \ 00000518 980285E5 STR R0,[R5, #+664] \ 0000051C 0B00000A BEQ ??CheckComand_16 4254 AddStringToLog(t,0x01,requests1,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000520 0110A0E3 MOV R1,#+1 \ 00000524 02002DE9 PUSH {R1} \ 00000528 8008A0E1 LSL R0,R0,#+17 \ 0000052C A008A0E1 LSR R0,R0,#+17 \ 00000530 01002DE9 PUSH {R0} \ 00000534 0730A0E1 MOV R3,R7 \ 00000538 F400A0E3 MOV R0,#+244 \ 0000053C 740D80E3 ORR R0,R0,#0x1D00 \ 00000540 052080E0 ADD R2,R0,R5 \ 00000544 0400A0E1 MOV R0,R4 \ 00000548 ........ BL AddStringToLog \ 0000054C 08D08DE2 ADD SP,SP,#+8 4255 else 4256 SENDMSGCOUNT++; 4257 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_16: \ 00000550 0620A0E1 MOV R2,R6 \ 00000554 C3FFFFEA B ??CheckComand_12 4258 return; 4259 } 4260 4261 if(!strcmp(txt, "GET_MSG_INFO") || !strcmp(txt, "__MSG")) \ ??CheckComand_15: \ 00000558 B11F86E2 ADD R1,R6,#+708 \ 0000055C 0B00A0E1 MOV R0,R11 \ 00000560 190000EF SWI +25 \ 00000564 000050E3 CMP R0,#+0 \ 00000568 0400000A BEQ ??CheckComand_17 \ 0000056C B51F86E2 ADD R1,R6,#+724 \ 00000570 0B00A0E1 MOV R0,R11 \ 00000574 190000EF SWI +25 \ 00000578 000050E3 CMP R0,#+0 \ 0000057C 2D00001A BNE ??CheckComand_18 4262 { 4263 comanda=0; \ ??CheckComand_17: \ 00000580 EC8385E5 STR R8,[R5, #+1004] 4264 TPKT *p; 4265 char *send_txt=malloc(64); \ 00000584 4000A0E3 MOV R0,#+64 \ 00000588 140000EF SWI +20 \ 0000058C 0080A0E1 MOV R8,R0 4266 sprintf(send_txt, "Отправлено сообщений: %d \n" 4267 "Принято сообщений: %d" 4268 , main2_count, main_count); \ 00000590 ........ LDR R0,??DataTable167 ;; main_count \ 00000594 A51F86E2 ADD R1,R6,#+660 \ 00000598 003090E5 LDR R3,[R0, #+0] \ 0000059C ........ LDR R0,??DataTable168 ;; main2_count \ 000005A0 002090E5 LDR R2,[R0, #+0] \ 000005A4 0800A0E1 MOV R0,R8 \ 000005A8 160000EF SWI +22 4269 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000005AC 0800A0E1 MOV R0,R8 \ 000005B0 1B0000EF SWI +27 \ 000005B4 090080E2 ADD R0,R0,#+9 \ 000005B8 140000EF SWI +20 \ 000005BC 0060A0E1 MOV R6,R0 4270 p->pkt.uin=t->uin; \ 000005C0 0C0094E5 LDR R0,[R4, #+12] \ 000005C4 000086E5 STR R0,[R6, #+0] 4271 p->pkt.type=T_SENDMSG; \ 000005C8 B4A0C6E1 STRH R10,[R6, #+4] 4272 p->pkt.data_len=strlen(send_txt); \ 000005CC 0800A0E1 MOV R0,R8 \ 000005D0 1B0000EF SWI +27 \ 000005D4 B600C6E1 STRH R0,[R6, #+6] 4273 strcpy(p->data,send_txt); \ 000005D8 0810A0E1 MOV R1,R8 \ 000005DC 080086E2 ADD R0,R6,#+8 \ 000005E0 1A0000EF SWI +26 4274 if(show_send_info) \ 000005E4 1C069FE5 LDR R0,??CheckComand_0+0x4 ;; show_send_info \ 000005E8 000090E5 LDR R0,[R0, #+0] \ 000005EC 000050E3 CMP R0,#+0 \ 000005F0 980295E5 LDR R0,[R5, #+664] \ 000005F4 010080E2 ADD R0,R0,#+1 \ 000005F8 980285E5 STR R0,[R5, #+664] \ 000005FC 8E00000A BEQ ??CheckComand_19 4275 AddStringToLog(t,0x01,requests2,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000600 0110A0E3 MOV R1,#+1 \ 00000604 02002DE9 PUSH {R1} \ 00000608 8008A0E1 LSL R0,R0,#+17 \ 0000060C A008A0E1 LSR R0,R0,#+17 \ 00000610 01002DE9 PUSH {R0} \ 00000614 0730A0E1 MOV R3,R7 \ 00000618 0C00A0E3 MOV R0,#+12 \ 0000061C 780D80E3 ORR R0,R0,#0x1E00 \ 00000620 052080E0 ADD R2,R0,R5 \ 00000624 0400A0E1 MOV R0,R4 \ 00000628 ........ BL AddStringToLog \ 0000062C 08D08DE2 ADD SP,SP,#+8 4276 else 4277 SENDMSGCOUNT++; 4278 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_20: \ 00000630 810000EA B ??CheckComand_19 \ ??CheckComand_6: \ 00000634 5F5F5400 DC8 "__T" 4279 mfree(send_txt); 4280 return; 4281 } 4282 4283 //==========================windes commands begin ===================== 4284 4285 if(!strcmp(txt, "GET_PROVIDER") || !strcmp(txt, "__PROVIDER")) \ ??CheckComand_18: \ 00000638 C21F86E2 ADD R1,R6,#+776 \ 0000063C 0B00A0E1 MOV R0,R11 \ 00000640 190000EF SWI +25 \ 00000644 000050E3 CMP R0,#+0 \ 00000648 0400000A BEQ ??CheckComand_21 \ 0000064C C61F86E2 ADD R1,R6,#+792 \ 00000650 0B00A0E1 MOV R0,R11 \ 00000654 190000EF SWI +25 \ 00000658 000050E3 CMP R0,#+0 \ 0000065C 3600001A BNE ??CheckComand_22 4286 { 4287 comanda=0; \ ??CheckComand_21: \ 00000660 EC8385E5 STR R8,[R5, #+1004] 4288 TPKT *p; 4289 4290 WSHDR *ws=AllocWS(32); \ 00000664 2000A0E3 MOV R0,#+32 \ 00000668 250100EF SWI +293 \ 0000066C 0080A0E1 MOV R8,R0 4291 GetProvider(ws,0); \ 00000670 0010A0E3 MOV R1,#+0 \ 00000674 410000EF SWI +65 4292 char prov[16]; 4293 ws_2str(ws,prov,wstrlen(ws)); \ 00000678 0800A0E1 MOV R0,R8 \ 0000067C 230100EF SWI +291 \ 00000680 0020A0E1 MOV R2,R0 \ 00000684 14108DE2 ADD R1,SP,#+20 \ 00000688 0800A0E1 MOV R0,R8 \ 0000068C A30000EF SWI +163 4294 char *send_txt=malloc(32); \ 00000690 2000A0E3 MOV R0,#+32 \ 00000694 140000EF SWI +20 \ 00000698 00B0A0E1 MOV R11,R0 4295 sprintf(send_txt, "Оператор: %s", prov); \ 0000069C 14208DE2 ADD R2,SP,#+20 \ 000006A0 B71F86E2 ADD R1,R6,#+732 \ 000006A4 160000EF SWI +22 4296 FreeWS(ws); \ 000006A8 0800A0E1 MOV R0,R8 \ 000006AC 290100EF SWI +297 4297 4298 p=malloc(sizeof(PKT)+28+1); \ 000006B0 2500A0E3 MOV R0,#+37 \ 000006B4 140000EF SWI +20 \ 000006B8 0080A0E1 MOV R8,R0 4299 p->pkt.uin=t->uin; \ 000006BC 0C0094E5 LDR R0,[R4, #+12] \ 000006C0 000088E5 STR R0,[R8, #+0] 4300 p->pkt.type=T_SENDMSG; \ 000006C4 B4A0C8E1 STRH R10,[R8, #+4] 4301 p->pkt.data_len=strlen(send_txt); \ 000006C8 0B00A0E1 MOV R0,R11 \ 000006CC 1B0000EF SWI +27 \ 000006D0 B600C8E1 STRH R0,[R8, #+6] 4302 strcpy(p->data,send_txt); \ 000006D4 0B10A0E1 MOV R1,R11 \ 000006D8 080088E2 ADD R0,R8,#+8 \ 000006DC 1A0000EF SWI +26 4303 if(show_send_info) \ 000006E0 20059FE5 LDR R0,??CheckComand_0+0x4 ;; show_send_info \ 000006E4 000090E5 LDR R0,[R0, #+0] \ 000006E8 000050E3 CMP R0,#+0 \ 000006EC 980295E5 LDR R0,[R5, #+664] \ 000006F0 010080E2 ADD R0,R0,#+1 \ 000006F4 980285E5 STR R0,[R5, #+664] \ 000006F8 0900000A BEQ ??CheckComand_23 4304 AddStringToLog(t,0x01,"Sending provider name...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000006FC 0110A0E3 MOV R1,#+1 \ 00000700 02002DE9 PUSH {R1} \ 00000704 8008A0E1 LSL R0,R0,#+17 \ 00000708 A008A0E1 LSR R0,R0,#+17 \ 0000070C 01002DE9 PUSH {R0} \ 00000710 0730A0E1 MOV R3,R7 \ 00000714 BB2F86E2 ADD R2,R6,#+748 \ 00000718 0400A0E1 MOV R0,R4 \ 0000071C ........ BL AddStringToLog \ 00000720 08D08DE2 ADD SP,SP,#+8 4305 else 4306 SENDMSGCOUNT++; 4307 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_23: \ 00000724 0820A0E1 MOV R2,R8 \ 00000728 0010A0E3 MOV R1,#+0 \ 0000072C 0900A0E1 MOV R0,R9 \ 00000730 710100EF SWI +369 4308 mfree(send_txt); \ 00000734 0B00A0E1 MOV R0,R11 \ 00000738 440000EA B ??CheckComand_4 4309 return; 4310 } 4311 4312 4313 //----------------------------------------------------------------------- 4314 4315 4316 if(!strcmp(txt, "GET_MOD_INFO") || !strcmp(txt, "__MOD")) \ ??CheckComand_22: \ 0000073C CE1F86E2 ADD R1,R6,#+824 \ 00000740 0B00A0E1 MOV R0,R11 \ 00000744 190000EF SWI +25 \ 00000748 000050E3 CMP R0,#+0 \ 0000074C 0400000A BEQ ??CheckComand_24 \ 00000750 D21F86E2 ADD R1,R6,#+840 \ 00000754 0B00A0E1 MOV R0,R11 \ 00000758 190000EF SWI +25 \ 0000075C 000050E3 CMP R0,#+0 \ 00000760 3D00001A BNE ??CheckComand_25 4317 { 4318 comanda=0; \ ??CheckComand_24: \ 00000764 EC8385E5 STR R8,[R5, #+1004] 4319 TPKT *p; 4320 char *send_txt=malloc(256); \ 00000768 400FA0E3 MOV R0,#+256 \ 0000076C 140000EF SWI +20 \ 00000770 0080A0E1 MOV R8,R0 4321 // sprintf(I_UIN, "uin%d", t->uin); 4322 strcpy(I_UIN, t->name); \ 00000774 E800A0E3 MOV R0,#+232 \ 00000778 700D80E3 ORR R0,R0,#0x1C00 \ 0000077C 05B080E0 ADD R11,R0,R5 \ 00000780 141084E2 ADD R1,R4,#+20 \ 00000784 0B00A0E1 MOV R0,R11 \ 00000788 1A0000EF SWI +26 4323 if(strstr(ignor_list,I_UIN)==0) \ 0000078C ........ LDR R0,??DataTable169 ;; ignor_list \ 00000790 0B10A0E1 MOV R1,R11 \ 00000794 180100EF SWI +280 \ 00000798 000050E3 CMP R0,#+0 4324 { 4325 strcpy(send_txt, mod_info); \ 0000079C 0C109D05 LDREQ R1,[SP, #+12] 4326 } 4327 else 4328 strcpy(send_txt, "***Access denied***"); \ 000007A0 0800A0E1 MOV R0,R8 \ 000007A4 C91F8612 ADDNE R1,R6,#+804 \ 000007A8 1A0000EF SWI +26 4329 4330 strcpy(send_txt, mod_info); \ 000007AC 0C109DE5 LDR R1,[SP, #+12] \ 000007B0 0800A0E1 MOV R0,R8 \ 000007B4 1A0000EF SWI +26 4331 4332 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000007B8 0800A0E1 MOV R0,R8 \ 000007BC 1B0000EF SWI +27 \ 000007C0 090080E2 ADD R0,R0,#+9 \ 000007C4 140000EF SWI +20 \ 000007C8 0060A0E1 MOV R6,R0 4333 p->pkt.uin=t->uin; \ 000007CC 0C0094E5 LDR R0,[R4, #+12] \ 000007D0 000086E5 STR R0,[R6, #+0] 4334 p->pkt.type=T_SENDMSG; \ 000007D4 B4A0C6E1 STRH R10,[R6, #+4] 4335 p->pkt.data_len=strlen(send_txt); \ 000007D8 0800A0E1 MOV R0,R8 \ 000007DC 1B0000EF SWI +27 \ 000007E0 B600C6E1 STRH R0,[R6, #+6] 4336 strcpy(p->data,send_txt); \ 000007E4 0810A0E1 MOV R1,R8 \ 000007E8 080086E2 ADD R0,R6,#+8 \ 000007EC 1A0000EF SWI +26 4337 #ifdef EVILFOX 4338 SENDMSGCOUNT++; 4339 #else 4340 if(show_send_info) \ 000007F0 10049FE5 LDR R0,??CheckComand_0+0x4 ;; show_send_info \ 000007F4 000090E5 LDR R0,[R0, #+0] \ 000007F8 000050E3 CMP R0,#+0 \ 000007FC 980295E5 LDR R0,[R5, #+664] \ 00000800 010080E2 ADD R0,R0,#+1 \ 00000804 980285E5 STR R0,[R5, #+664] \ 00000808 0B00000A BEQ ??CheckComand_19 4341 AddStringToLog(t,0x01,requests4,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 0000080C 0110A0E3 MOV R1,#+1 \ 00000810 02002DE9 PUSH {R1} \ 00000814 8008A0E1 LSL R0,R0,#+17 \ 00000818 A008A0E1 LSR R0,R0,#+17 \ 0000081C 01002DE9 PUSH {R0} \ 00000820 0730A0E1 MOV R3,R7 \ 00000824 3800A0E3 MOV R0,#+56 \ 00000828 780D80E3 ORR R0,R0,#0x1E00 \ 0000082C 052080E0 ADD R2,R0,R5 \ 00000830 0400A0E1 MOV R0,R4 \ 00000834 ........ BL AddStringToLog \ 00000838 08D08DE2 ADD SP,SP,#+8 4342 else 4343 SENDMSGCOUNT++; 4344 #endif 4345 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_19: \ 0000083C 0620A0E1 MOV R2,R6 \ ??CheckComand_26: \ 00000840 0010A0E3 MOV R1,#+0 \ 00000844 0900A0E1 MOV R0,R9 \ 00000848 710100EF SWI +369 4346 mfree(send_txt); \ 0000084C 0800A0E1 MOV R0,R8 \ ??CheckComand_4: \ 00000850 150000EF SWI +21 \ ??CheckComand_13: \ 00000854 89DF8DE2 ADD SP,SP,#+548 \ 00000858 F08FBDE8 POP {R4-R11,PC} 4347 return; 4348 } 4349 4350 if(!strcmp(txt, "GET_BAT_INFO") || !strcmp(txt, "__BAT")) \ ??CheckComand_25: \ 0000085C DB1F86E2 ADD R1,R6,#+876 \ 00000860 0B00A0E1 MOV R0,R11 \ 00000864 190000EF SWI +25 \ 00000868 000050E3 CMP R0,#+0 \ 0000086C 0400000A BEQ ??CheckComand_27 \ 00000870 DF1F86E2 ADD R1,R6,#+892 \ 00000874 0B00A0E1 MOV R0,R11 \ 00000878 190000EF SWI +25 \ 0000087C 000050E3 CMP R0,#+0 \ 00000880 2800001A BNE ??CheckComand_28 4351 { 4352 comanda=0; \ ??CheckComand_27: \ 00000884 EC8385E5 STR R8,[R5, #+1004] 4353 TPKT *p; 4354 int bat; 4355 bat=*RamCap(); \ 00000888 C88000EF SWI +32968 \ 0000088C B0B0D0E1 LDRH R11,[R0, #+0] 4356 char *send_txt=malloc(64); \ 00000890 4000A0E3 MOV R0,#+64 \ 00000894 140000EF SWI +20 \ 00000898 0080A0E1 MOV R8,R0 4357 sprintf(send_txt, "Заряд батареи: %d процентов", bat); \ 0000089C 0B20A0E1 MOV R2,R11 \ 000008A0 D41F86E2 ADD R1,R6,#+848 \ 000008A4 160000EF SWI +22 4358 p=malloc(sizeof(PKT)+28+1); \ 000008A8 2500A0E3 MOV R0,#+37 \ 000008AC 140000EF SWI +20 \ 000008B0 0060A0E1 MOV R6,R0 4359 p->pkt.uin=t->uin; \ 000008B4 0C0094E5 LDR R0,[R4, #+12] \ 000008B8 000086E5 STR R0,[R6, #+0] 4360 p->pkt.type=T_SENDMSG; \ 000008BC B4A0C6E1 STRH R10,[R6, #+4] 4361 p->pkt.data_len=strlen(send_txt); \ 000008C0 0800A0E1 MOV R0,R8 \ 000008C4 1B0000EF SWI +27 \ 000008C8 B600C6E1 STRH R0,[R6, #+6] 4362 strcpy(p->data,send_txt); \ 000008CC 0810A0E1 MOV R1,R8 \ 000008D0 080086E2 ADD R0,R6,#+8 \ 000008D4 1A0000EF SWI +26 4363 #ifdef EVILFOX 4364 SENDMSGCOUNT++; 4365 #else 4366 if(show_send_info) \ 000008D8 28039FE5 LDR R0,??CheckComand_0+0x4 ;; show_send_info \ 000008DC 000090E5 LDR R0,[R0, #+0] \ 000008E0 000050E3 CMP R0,#+0 \ 000008E4 980295E5 LDR R0,[R5, #+664] \ 000008E8 010080E2 ADD R0,R0,#+1 \ 000008EC 980285E5 STR R0,[R5, #+664] \ 000008F0 D1FFFF0A BEQ ??CheckComand_19 4367 AddStringToLog(t,0x01,requests3,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000008F4 0110A0E3 MOV R1,#+1 \ 000008F8 02002DE9 PUSH {R1} \ 000008FC 8008A0E1 LSL R0,R0,#+17 \ 00000900 A008A0E1 LSR R0,R0,#+17 \ 00000904 01002DE9 PUSH {R0} \ 00000908 0730A0E1 MOV R3,R7 \ 0000090C 2000A0E3 MOV R0,#+32 \ 00000910 780D80E3 ORR R0,R0,#0x1E00 \ 00000914 052080E0 ADD R2,R0,R5 \ 00000918 0400A0E1 MOV R0,R4 \ 0000091C ........ BL AddStringToLog \ 00000920 08D08DE2 ADD SP,SP,#+8 4368 else 4369 SENDMSGCOUNT++; 4370 #endif 4371 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_29: \ 00000924 C4FFFFEA B ??CheckComand_19 4372 mfree(send_txt); 4373 return; 4374 } 4375 4376 if((away_m==1 || t->isautomsg) && (t->automsgcount < automsgcount)) \ ??CheckComand_28: \ 00000928 BC1295E5 LDR R1,[R5, #+700] \ 0000092C ........ LDR R2,??DataTable170 ;; automsgcount \ 00000930 700094E5 LDR R0,[R4, #+112] \ 00000934 002092E5 LDR R2,[R2, #+0] \ 00000938 010051E3 CMP R1,#+1 \ 0000093C 0100000A BEQ ??CheckComand_30 \ 00000940 000050E3 CMP R0,#+0 \ 00000944 3900000A BEQ ??CheckComand_31 \ ??CheckComand_30: \ 00000948 843094E5 LDR R3,[R4, #+132] \ 0000094C 020053E1 CMP R3,R2 \ 00000950 3400002A BCS ??CheckComand_32 4377 { 4378 t->automsgcount++; 4379 comanda=1; 4380 TPKT *p; 4381 // sprintf(hah,"online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); 4382 sprintf(away_msg, "Автоответчик: %s %s! %s %s", awayHelloMsg, t->name, awayMsg, away_msg_time); \ 00000954 B0229FE5 LDR R2,??CheckComand_0+0x8 ;; awayHelloMsg \ 00000958 010083E2 ADD R0,R3,#+1 \ 0000095C 840084E5 STR R0,[R4, #+132] \ 00000960 0100A0E3 MOV R0,#+1 \ 00000964 EC0385E5 STR R0,[R5, #+1004] \ 00000968 5000A0E3 MOV R0,#+80 \ 0000096C 5C0D80E3 ORR R0,R0,#0x1700 \ 00000970 058080E0 ADD R8,R0,R5 \ 00000974 420F80E2 ADD R0,R0,#+264 \ 00000978 050080E0 ADD R0,R0,R5 \ 0000097C 01002DE9 PUSH {R0} \ 00000980 ........ LDR R0,??DataTable171 ;; awayMsg \ 00000984 143084E2 ADD R3,R4,#+20 \ 00000988 01002DE9 PUSH {R0} \ 0000098C 0400A0E3 MOV R0,#+4 \ 00000990 400E80E3 ORR R0,R0,#0x400 \ 00000994 061080E0 ADD R1,R0,R6 \ 00000998 0800A0E1 MOV R0,R8 \ 0000099C 160000EF SWI +22 4383 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 000009A0 0800A0E1 MOV R0,R8 \ 000009A4 1B0000EF SWI +27 \ 000009A8 090080E2 ADD R0,R0,#+9 \ 000009AC 140000EF SWI +20 \ 000009B0 0060A0E1 MOV R6,R0 4384 p->pkt.uin=t->uin; \ 000009B4 0C0094E5 LDR R0,[R4, #+12] \ 000009B8 000086E5 STR R0,[R6, #+0] 4385 p->pkt.type=T_SENDMSG; \ 000009BC B4A0C6E1 STRH R10,[R6, #+4] 4386 p->pkt.data_len=strlen(away_msg); \ 000009C0 0800A0E1 MOV R0,R8 \ 000009C4 1B0000EF SWI +27 \ 000009C8 B600C6E1 STRH R0,[R6, #+6] 4387 strcpy(p->data,away_msg); \ 000009CC 0810A0E1 MOV R1,R8 \ 000009D0 080086E2 ADD R0,R6,#+8 \ 000009D4 1A0000EF SWI +26 4388 if(show_send_info) \ 000009D8 28029FE5 LDR R0,??CheckComand_0+0x4 ;; show_send_info \ 000009DC 000090E5 LDR R0,[R0, #+0] \ 000009E0 08D08DE2 ADD SP,SP,#+8 \ 000009E4 000050E3 CMP R0,#+0 \ 000009E8 980295E5 LDR R0,[R5, #+664] \ 000009EC 010080E2 ADD R0,R0,#+1 \ 000009F0 980285E5 STR R0,[R5, #+664] \ 000009F4 0900000A BEQ ??CheckComand_33 4389 #ifdef kluchnik 4390 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000009F8 0110A0E3 MOV R1,#+1 \ 000009FC 02002DE9 PUSH {R1} \ 00000A00 8008A0E1 LSL R0,R0,#+17 \ 00000A04 A008A0E1 LSR R0,R0,#+17 \ 00000A08 01002DE9 PUSH {R0} \ 00000A0C 0730A0E1 MOV R3,R7 \ 00000A10 0820A0E1 MOV R2,R8 \ 00000A14 0400A0E1 MOV R0,R4 \ 00000A18 ........ BL AddStringToLog \ 00000A1C 08D08DE2 ADD SP,SP,#+8 4391 #else 4392 AddStringToLog(t,0x01,requests6,I_str,(++SENDMSGCOUNT)&0x7FFF,1); 4393 #endif 4394 else 4395 SENDMSGCOUNT++; 4396 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_33: \ 00000A20 0620A0E1 MOV R2,R6 \ 00000A24 8FFEFFEA B ??CheckComand_12 4397 return; 4398 } 4399 #ifdef kluchnik 4400 else 4401 if((away_m==1 || t->isautomsg) && (t->uin==438532198)){ t->automsgcount=0;/* t->awaysignal=1;*/ return; } \ ??CheckComand_32: \ 00000A28 010051E3 CMP R1,#+1 \ 00000A2C 0100000A BEQ ??CheckComand_34 \ ??CheckComand_31: \ 00000A30 000050E3 CMP R0,#+0 \ 00000A34 0600000A BEQ ??CheckComand_35 \ ??CheckComand_34: \ 00000A38 0C3094E5 LDR R3,[R4, #+12] \ 00000A3C ........ LDR R12,??DataTable172 ;; 0x1a237866 \ 00000A40 0C0053E1 CMP R3,R12 \ 00000A44 84808405 STREQ R8,[R4, #+132] \ 00000A48 6B00000A BEQ ??CheckComand_36 4402 /* else 4403 if((away_m==1 || t->isautomsg) && (t->automsgcount<=(automsgcount+3)) ) 4404 { 4405 t->awaysignal=0; 4406 t->automsgcount++; 4407 sprintf(away_msg,"Бля,ну русским ж языком написали,НЕТУ МЕНЯ!!!че по сто сообщений слать?тем более если тебе делать нех..."); 4408 if(show_send_info) 4409 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF,1); 4410 else 4411 SENDMSGCOUNT++; 4412 SendData(t,away_msg,ENA_SIGNAL,0); 4413 return; 4414 }*/ 4415 #endif 4416 else 4417 if(away_m==1 || t->isautomsg) \ 00000A4C 010051E3 CMP R1,#+1 \ 00000A50 0100000A BEQ ??CheckComand_37 \ ??CheckComand_35: \ 00000A54 000050E3 CMP R0,#+0 \ 00000A58 0100000A BEQ ??CheckComand_38 4418 { 4419 t->automsgcount=automsgcount; \ ??CheckComand_37: \ 00000A5C 842084E5 STR R2,[R4, #+132] 4420 return; \ 00000A60 7BFFFFEA B ??CheckComand_13 4421 } 4422 4423 4424 //---------------------------------------------------------------------------// 4425 4426 4427 if(!strcmp(txt, "GET_URL_INFO") || !strcmp(txt, "__URL"))// by kluchnik 26.03.08 \ ??CheckComand_38: \ 00000A64 F91F86E2 ADD R1,R6,#+996 \ 00000A68 0B00A0E1 MOV R0,R11 \ 00000A6C 190000EF SWI +25 \ 00000A70 000050E3 CMP R0,#+0 \ 00000A74 0400000A BEQ ??CheckComand_39 \ 00000A78 FD1F86E2 ADD R1,R6,#+1012 \ 00000A7C 0B00A0E1 MOV R0,R11 \ 00000A80 190000EF SWI +25 \ 00000A84 000050E3 CMP R0,#+0 \ 00000A88 2A00001A BNE ??CheckComand_40 4428 { 4429 comanda=0; \ ??CheckComand_39: \ 00000A8C EC8385E5 STR R8,[R5, #+1004] 4430 TPKT *p; 4431 4432 char *send_txt=malloc(256); \ 00000A90 400FA0E3 MOV R0,#+256 \ 00000A94 140000EF SWI +20 \ 00000A98 0080A0E1 MOV R8,R0 4433 sprintf(send_txt,"revision 2058, mod date: %s at %s ", 4434 "http://kluchnik.jino-net.ru/naticqmod/",__DATE__,__TIME__); \ 00000A9C 580086E2 ADD R0,R6,#+88 \ 00000AA0 01002DE9 PUSH {R0} \ 00000AA4 4C3086E2 ADD R3,R6,#+76 \ 00000AA8 EA2F86E2 ADD R2,R6,#+936 \ 00000AAC E11F86E2 ADD R1,R6,#+900 \ 00000AB0 0800A0E1 MOV R0,R8 \ 00000AB4 160000EF SWI +22 4435 4436 p=malloc(sizeof(PKT)+256); \ 00000AB8 420FA0E3 MOV R0,#+264 \ 00000ABC 140000EF SWI +20 \ 00000AC0 00B0A0E1 MOV R11,R0 4437 p->pkt.uin=t->uin; \ 00000AC4 0C0094E5 LDR R0,[R4, #+12] \ 00000AC8 00008BE5 STR R0,[R11, #+0] 4438 p->pkt.type=T_SENDMSG; \ 00000ACC B4A0CBE1 STRH R10,[R11, #+4] 4439 p->pkt.data_len=strlen(send_txt); \ 00000AD0 0800A0E1 MOV R0,R8 \ 00000AD4 1B0000EF SWI +27 \ 00000AD8 B600CBE1 STRH R0,[R11, #+6] 4440 strcpy(p->data,send_txt); \ 00000ADC 0810A0E1 MOV R1,R8 \ 00000AE0 08008BE2 ADD R0,R11,#+8 \ 00000AE4 1A0000EF SWI +26 4441 if(show_send_info) \ 00000AE8 18019FE5 LDR R0,??CheckComand_0+0x4 ;; show_send_info \ 00000AEC 000090E5 LDR R0,[R0, #+0] \ 00000AF0 04D08DE2 ADD SP,SP,#+4 \ 00000AF4 000050E3 CMP R0,#+0 \ 00000AF8 980295E5 LDR R0,[R5, #+664] \ 00000AFC 010080E2 ADD R0,R0,#+1 \ 00000B00 980285E5 STR R0,[R5, #+664] \ 00000B04 0900000A BEQ ??CheckComand_41 4442 AddStringToLog(t,0x01,"Sending url info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000B08 0110A0E3 MOV R1,#+1 \ 00000B0C 02002DE9 PUSH {R1} \ 00000B10 8008A0E1 LSL R0,R0,#+17 \ 00000B14 A008A0E1 LSR R0,R0,#+17 \ 00000B18 01002DE9 PUSH {R0} \ 00000B1C 0730A0E1 MOV R3,R7 \ 00000B20 F42F86E2 ADD R2,R6,#+976 \ 00000B24 0400A0E1 MOV R0,R4 \ 00000B28 ........ BL AddStringToLog \ 00000B2C 08D08DE2 ADD SP,SP,#+8 4443 else 4444 SENDMSGCOUNT++; 4445 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_41: \ 00000B30 0B20A0E1 MOV R2,R11 \ 00000B34 41FFFFEA B ??CheckComand_26 4446 mfree(send_txt); 4447 return; 4448 } 4449 4450 #ifdef kluchnik // не доступно для всех,потому что имхо,будет еще большая перегрузка серверов!!!а оно нам надо? 4451 if(t->isautobot) \ ??CheckComand_40: \ 00000B38 5C0094E5 LDR R0,[R4, #+92] \ 00000B3C 000050E3 CMP R0,#+0 \ 00000B40 2A00000A BEQ ??CheckComand_42 4452 { 4453 TPKT *p; 4454 int i=LoadBotMessage(t->uin); \ 00000B44 0C0094E5 LDR R0,[R4, #+12] \ 00000B48 ........ BL LoadBotMessage 4455 if(i==0) return;//если нет никаких файлов то просто возвращаемся \ 00000B4C 000050E3 CMP R0,#+0 \ 00000B50 2900000A BEQ ??CheckComand_36 4456 char *pp=bot_lines[t->bot_msg]; \ 00000B54 581094E5 LDR R1,[R4, #+88] \ 00000B58 0C2395E5 LDR R2,[R5, #+780] \ 00000B5C 017192E7 LDR R7,[R2, +R1, LSL #+2] 4457 t->bot_msg++; \ 00000B60 011081E2 ADD R1,R1,#+1 \ 00000B64 581084E5 STR R1,[R4, #+88] 4458 if(t->bot_msg==i) \ 00000B68 000051E1 CMP R1,R0 4459 t->bot_msg=0; \ 00000B6C 58808405 STREQ R8,[R4, #+88] 4460 p=malloc(sizeof(PKT)+strlen(pp)+1); \ 00000B70 0700A0E1 MOV R0,R7 \ 00000B74 1B0000EF SWI +27 \ 00000B78 090080E2 ADD R0,R0,#+9 \ 00000B7C 140000EF SWI +20 \ 00000B80 0080A0E1 MOV R8,R0 4461 p->pkt.uin=t->uin; \ 00000B84 0C0094E5 LDR R0,[R4, #+12] \ 00000B88 000088E5 STR R0,[R8, #+0] 4462 p->pkt.type=T_SENDMSG; \ 00000B8C B4A0C8E1 STRH R10,[R8, #+4] 4463 p->pkt.data_len=strlen(pp); \ 00000B90 0700A0E1 MOV R0,R7 \ 00000B94 1B0000EF SWI +27 \ 00000B98 B600C8E1 STRH R0,[R8, #+6] 4464 strcpy(p->data,pp); \ 00000B9C 0710A0E1 MOV R1,R7 \ 00000BA0 080088E2 ADD R0,R8,#+8 \ 00000BA4 1A0000EF SWI +26 4465 AddStringToLog(t,0x01,pp,"Autobot",(++SENDMSGCOUNT)&0x7FFF,1); \ 00000BA8 980295E5 LDR R0,[R5, #+664] \ 00000BAC 0110A0E3 MOV R1,#+1 \ 00000BB0 010080E2 ADD R0,R0,#+1 \ 00000BB4 980285E5 STR R0,[R5, #+664] \ 00000BB8 02002DE9 PUSH {R1} \ 00000BBC 8008A0E1 LSL R0,R0,#+17 \ 00000BC0 A008A0E1 LSR R0,R0,#+17 \ 00000BC4 01002DE9 PUSH {R0} \ 00000BC8 FF3F86E2 ADD R3,R6,#+1020 \ 00000BCC 0720A0E1 MOV R2,R7 \ 00000BD0 0400A0E1 MOV R0,R4 \ 00000BD4 ........ BL AddStringToLog 4466 SUBPROC((void *)SendAnswer,0,p); \ 00000BD8 0820A0E1 MOV R2,R8 \ 00000BDC 0010A0E3 MOV R1,#+0 \ 00000BE0 0900A0E1 MOV R0,R9 \ 00000BE4 710100EF SWI +369 4467 return; \ 00000BE8 08D08DE2 ADD SP,SP,#+8 \ 00000BEC 18FFFFEA B ??CheckComand_13 4468 } 4469 #endif 4470 4471 CheckComand2(txt,t); \ ??CheckComand_42: \ 00000BF0 0410A0E1 MOV R1,R4 \ 00000BF4 0B00A0E1 MOV R0,R11 \ 00000BF8 ........ _BLF CheckComand2,??CheckComand2??rA 4472 } \ ??CheckComand_36: \ 00000BFC 89DF8DE2 ADD SP,SP,#+548 ;; stack cleaning \ 00000C00 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CheckComand_0: \ 00000C04 ........ DC32 `?` \ 00000C08 ........ DC32 show_send_info \ 00000C0C ........ DC32 awayHelloMsg 4473 4474 //------------- Попап месаже для подключившегося контакта -----------// 4475 \ In segment DATA_Z, align 4, align-sorted 4476 char INC_Nick[32]; \ INC_Nick: \ 00000000 DS8 32 4477 char show_nick[32]; 4478 int INC_show; 4479 4480 char onContact[64]; 4481 int INC_show2; 4482 GBSTMR incs2; 4483 extern void DrawScreenShot(); 4484 \ In segment CODE, align 4, keep-with-next 4485 void show_on_contact() 4486 { \ show_on_contact: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 4487 if(INC_show2>0) \ 00000004 ........ LDR R4,??DataTable176 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C F40394E5 LDR R0,[R4, #+1012] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 4E0000BA BLT ??show_on_contact_0 4488 { 4489 WSHDR *ws=AllocWS(64); \ 00000018 4000A0E3 MOV R0,#+64 \ 0000001C 250100EF SWI +293 \ 00000020 0050A0E1 MOV R5,R0 4490 ascii2ws(ws,onContact); \ 00000024 7400A0E3 MOV R0,#+116 \ 00000028 7C0D80E3 ORR R0,R0,#0x1F00 \ 0000002C 041080E0 ADD R1,R0,R4 \ 00000030 0500A0E1 MOV R0,R5 \ 00000034 ........ _BLF ascii2ws,??ascii2ws??rA 4491 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; \ 00000038 068100EF SWI +33030 \ 0000003C 080090E5 LDR R0,[R0, #+8] 4492 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 00000040 14219FE5 LDR R2,??show_on_contact_1 ;; `?` \ 00000044 0C0090E5 LDR R0,[R0, #+12] \ 00000048 480092E8 LDM R2,{R3,R6} \ 0000004C 080090E5 LDR R0,[R0, #+8] \ 00000050 0D10A0E1 MOV R1,SP \ 00000054 040090E5 LDR R0,[R0, #+4] \ 00000058 480081E8 STM R1,{R3,R6} \ 0000005C 010040E2 SUB R0,R0,#+1 4493 if(!(memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8))) \ 00000060 0820A0E3 MOV R2,#+8 \ 00000064 1C0100EF SWI +284 \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 0300001A BNE ??show_on_contact_2 4494 { 4495 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 4496 INC_show2-=2; \ 00000074 F40394E5 LDR R0,[R4, #+1012] \ 00000078 020040E2 SUB R0,R0,#+2 \ 0000007C 010000EA B ??show_on_contact_3 4497 } 4498 else 4499 INC_show2--; \ ??show_on_contact_2: \ 00000080 F40394E5 LDR R0,[R4, #+1012] \ 00000084 010040E2 SUB R0,R0,#+1 4500 DrawRectangle(0,0,Get_WS_width(ws,PopupFont)+2,GetFontYSIZE(PopupFont)+2,0,PopupBGCl,PopupBGCl); \ ??show_on_contact_3: \ 00000088 ........ LDR R6,??DataTable177 ;; PopupFont \ 0000008C F40384E5 STR R0,[R4, #+1012] \ 00000090 000096E5 LDR R0,[R6, #+0] \ 00000094 C50100EF SWI +453 \ 00000098 001096E5 LDR R1,[R6, #+0] \ 0000009C 0070A0E1 MOV R7,R0 \ 000000A0 0500A0E1 MOV R0,R5 \ 000000A4 080200EF SWI +520 \ 000000A8 ........ LDR R1,??DataTable179 ;; PopupBGCl \ 000000AC 023087E2 ADD R3,R7,#+2 \ 000000B0 0120A0E1 MOV R2,R1 \ 000000B4 04002DE9 PUSH {R2} \ 000000B8 02002DE9 PUSH {R1} \ 000000BC 0010A0E3 MOV R1,#+0 \ 000000C0 02002DE9 PUSH {R1} \ 000000C4 022080E2 ADD R2,R0,#+2 \ 000000C8 0000A0E3 MOV R0,#+0 \ 000000CC B40100EF SWI +436 4501 DrawString(ws,1,1,1+Get_WS_width(ws,PopupFont)+2,1+GetFontYSIZE(PopupFont),PopupFont,0,PopupOnlineCl,GetPaletteAdrByColorIndex(23)); \ 000000D0 1700A0E3 MOV R0,#+23 \ 000000D4 2E0100EF SWI +302 \ 000000D8 0080A0E1 MOV R8,R0 \ 000000DC 000096E5 LDR R0,[R6, #+0] \ 000000E0 C50100EF SWI +453 \ 000000E4 001096E5 LDR R1,[R6, #+0] \ 000000E8 0070A0E1 MOV R7,R0 \ 000000EC 0500A0E1 MOV R0,R5 \ 000000F0 080200EF SWI +520 \ 000000F4 64109FE5 LDR R1,??show_on_contact_1+0x4 ;; PopupOnlineCl \ 000000F8 00012DE9 PUSH {R8} \ 000000FC 02002DE9 PUSH {R1} \ 00000100 033080E2 ADD R3,R0,#+3 \ 00000104 0120A0E3 MOV R2,#+1 \ 00000108 0500A0E1 MOV R0,R5 \ 0000010C 0010A0E3 MOV R1,#+0 \ 00000110 02002DE9 PUSH {R1} \ 00000114 001096E5 LDR R1,[R6, #+0] \ 00000118 02002DE9 PUSH {R1} \ 0000011C 011087E2 ADD R1,R7,#+1 \ 00000120 02002DE9 PUSH {R1} \ 00000124 0210A0E1 MOV R1,R2 \ 00000128 4C0100EF SWI +332 4502 FreeWS(ws); \ 0000012C 0500A0E1 MOV R0,R5 \ 00000130 290100EF SWI +297 4503 GBS_StartTimerProc(&incs2, 15, show_on_contact); \ 00000134 28209FE5 LDR R2,??show_on_contact_1+0x8 ;; show_on_contact \ 00000138 0F10A0E3 MOV R1,#+15 \ 0000013C B400A0E3 MOV R0,#+180 \ 00000140 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000144 040080E0 ADD R0,R0,R4 \ 00000148 4D0000EF SWI +77 \ 0000014C 20D08DE2 ADD SP,SP,#+32 \ 00000150 F381BDE8 POP {R0,R1,R4-R8,PC} 4504 } 4505 else 4506 RefreshGUI(); \ ??show_on_contact_0: \ 00000154 960100EF SWI +406 4507 } \ 00000158 F381BDE8 POP {R0,R1,R4-R8,PC} ;; return \ ??show_on_contact_1: \ 0000015C ........ DC32 `?` \ 00000160 ........ DC32 PopupOnlineCl \ 00000164 ........ DC32 show_on_contact 4508 4509 4510 //---------------------------- popup message ---------------------------// 4511 4512 \ In segment CODE, align 4, keep-with-next 4513 void show_pp_sender() 4514 { \ show_pp_sender: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 4515 if(INC_show>0) \ 00000004 ........ LDR R4,??DataTable176 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C F00394E5 LDR R0,[R4, #+1008] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 F38FBDB8 POPLT {R0,R1,R4-R11,PC} 4516 { 4517 WSHDR *ws=AllocWS(256); \ 00000018 400FA0E3 MOV R0,#+256 \ 0000001C 250100EF SWI +293 \ 00000020 0050A0E1 MOV R5,R0 4518 ascii2ws(ws,show_nick); \ 00000024 5400A0E3 MOV R0,#+84 \ 00000028 7C0D80E3 ORR R0,R0,#0x1F00 \ 0000002C 041080E0 ADD R1,R0,R4 \ 00000030 0500A0E1 MOV R0,R5 \ 00000034 ........ _BLF ascii2ws,??ascii2ws??rA 4519 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; \ 00000038 068100EF SWI +33030 \ 0000003C 080090E5 LDR R0,[R0, #+8] 4520 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 00000040 5C219FE5 LDR R2,??show_pp_sender_0 ;; `?_1` \ 00000044 0C0090E5 LDR R0,[R0, #+12] \ 00000048 480092E8 LDM R2,{R3,R6} \ 0000004C 080090E5 LDR R0,[R0, #+8] \ 00000050 0D10A0E1 MOV R1,SP \ 00000054 040090E5 LDR R0,[R0, #+4] \ 00000058 480081E8 STM R1,{R3,R6} \ 0000005C 010040E2 SUB R0,R0,#+1 4521 if(!(memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8))) \ 00000060 0820A0E3 MOV R2,#+8 \ 00000064 1C0100EF SWI +284 \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 0300001A BNE ??show_pp_sender_1 4522 { 4523 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 4524 INC_show-=2; \ 00000074 F00394E5 LDR R0,[R4, #+1008] \ 00000078 020040E2 SUB R0,R0,#+2 \ 0000007C 010000EA B ??show_pp_sender_2 4525 } 4526 else 4527 INC_show--; \ ??show_pp_sender_1: \ 00000080 F00394E5 LDR R0,[R4, #+1008] \ 00000084 010040E2 SUB R0,R0,#+1 4528 #ifdef NEWSGOLD 4529 DrawRectangle(0,0,Get_WS_width(ws,PopupFont)+4+GetImgWidth(NumStatusToIconBar + IS_MSG),GetFontYSIZE(PopupFont)+4,0,PopupBGCl,PopupBGCl); \ ??show_pp_sender_2: \ 00000088 ........ LDR R6,??DataTable177 ;; PopupFont \ 0000008C ........ LDR R11,??DataTable178 ;; NumStatusToIconBar \ 00000090 F00384E5 STR R0,[R4, #+1008] \ 00000094 000096E5 LDR R0,[R6, #+0] \ 00000098 C50100EF SWI +453 \ 0000009C 001096E5 LDR R1,[R6, #+0] \ 000000A0 0070A0E1 MOV R7,R0 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 080200EF SWI +520 \ 000000AC 0080A0E1 MOV R8,R0 \ 000000B0 00009BE5 LDR R0,[R11, #+0] \ 000000B4 0D0080E2 ADD R0,R0,#+13 \ 000000B8 220000EF SWI +34 \ 000000BC ........ LDR R1,??DataTable179 ;; PopupBGCl \ 000000C0 043087E2 ADD R3,R7,#+4 \ 000000C4 0120A0E1 MOV R2,R1 \ 000000C8 04002DE9 PUSH {R2} \ 000000CC 02002DE9 PUSH {R1} \ 000000D0 080080E0 ADD R0,R0,R8 \ 000000D4 042080E2 ADD R2,R0,#+4 \ 000000D8 0000A0E3 MOV R0,#+0 \ 000000DC 0010A0E3 MOV R1,#+0 \ 000000E0 02002DE9 PUSH {R1} \ 000000E4 B40100EF SWI +436 4530 DrawImg(2,2,NumStatusToIconBar + IS_MSG);//GetImgWidth((int)S_ICONS[icn] \ 000000E8 00009BE5 LDR R0,[R11, #+0] \ 000000EC 0210A0E3 MOV R1,#+2 \ 000000F0 0D2080E2 ADD R2,R0,#+13 \ 000000F4 0100A0E1 MOV R0,R1 \ 000000F8 230000EF SWI +35 4531 DrawString(ws,GetImgWidth(NumStatusToIconBar + IS_MSG)+4,1,GetImgWidth(NumStatusToIconBar + IS_MSG)+Get_WS_width(ws,PopupFont)+4,1+GetFontYSIZE(PopupFont),PopupFont,0,PopupMsgCl,GetPaletteAdrByColorIndex(23)); \ 000000FC 1700A0E3 MOV R0,#+23 \ 00000100 2E0100EF SWI +302 \ 00000104 0070A0E1 MOV R7,R0 \ 00000108 000096E5 LDR R0,[R6, #+0] \ 0000010C C50100EF SWI +453 \ 00000110 0080A0E1 MOV R8,R0 \ 00000114 00009BE5 LDR R0,[R11, #+0] \ 00000118 0D0080E2 ADD R0,R0,#+13 \ 0000011C 220000EF SWI +34 \ 00000120 001096E5 LDR R1,[R6, #+0] \ 00000124 0090A0E1 MOV R9,R0 \ 00000128 0500A0E1 MOV R0,R5 \ 0000012C 080200EF SWI +520 \ 00000130 00A0A0E1 MOV R10,R0 \ 00000134 00009BE5 LDR R0,[R11, #+0] \ 00000138 0D0080E2 ADD R0,R0,#+13 \ 0000013C 220000EF SWI +34 \ 00000140 60109FE5 LDR R1,??show_pp_sender_0+0x4 ;; PopupMsgCl \ 00000144 80002DE9 PUSH {R7} \ 00000148 02002DE9 PUSH {R1} \ 0000014C 0120A0E3 MOV R2,#+1 \ 00000150 0010A0E3 MOV R1,#+0 \ 00000154 02002DE9 PUSH {R1} \ 00000158 001096E5 LDR R1,[R6, #+0] \ 0000015C 02002DE9 PUSH {R1} \ 00000160 011088E2 ADD R1,R8,#+1 \ 00000164 02002DE9 PUSH {R1} \ 00000168 09108AE0 ADD R1,R10,R9 \ 0000016C 043081E2 ADD R3,R1,#+4 \ 00000170 041080E2 ADD R1,R0,#+4 \ 00000174 0500A0E1 MOV R0,R5 \ 00000178 4C0100EF SWI +332 4532 #else 4533 DrawRectangle(0,0,Get_WS_width(ws,PopupFont)+2,GetFontYSIZE(PopupFont)+2,0,PopupBGCl,PopupBGCl); 4534 DrawString(ws,1,1,1+Get_WS_width(ws,PopupFont)+2,1+GetFontYSIZE(PopupFont),PopupFont,0,PopupMsgCl,GetPaletteAdrByColorIndex(23)); 4535 #endif 4536 FreeWS(ws); \ 0000017C 0500A0E1 MOV R0,R5 \ 00000180 290100EF SWI +297 4537 GBS_StartTimerProc(&develop, 10, show_pp_sender); \ 00000184 20209FE5 LDR R2,??show_pp_sender_0+0x8 ;; show_pp_sender \ 00000188 0A10A0E3 MOV R1,#+10 \ 0000018C E400A0E3 MOV R0,#+228 \ 00000190 740D80E3 ORR R0,R0,#0x1D00 \ 00000194 040080E0 ADD R0,R0,R4 \ 00000198 4D0000EF SWI +77 \ 0000019C 20D08DE2 ADD SP,SP,#+32 4538 } 4539 } \ 000001A0 F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??show_pp_sender_0: \ 000001A4 ........ DC32 `?_1` \ 000001A8 ........ DC32 PopupMsgCl \ 000001AC ........ DC32 show_pp_sender 4540 4541 4542 //----------------------------------------------------------------------------------------// 4543 4544 \ In segment CODE, align 4, keep-with-next 4545 void Get_Online_total() 4546 { 4547 CLIST *t; 4548 kopa_online=0; \ Get_Online_total: \ 00000000 ........ LDR R0,??DataTable199 ;; S_ICONS \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 5C1380E5 STR R1,[R0, #+860] 4549 kopa_kontaktu=0; \ 0000000C 601380E5 STR R1,[R0, #+864] 4550 t=(CLIST *)(&cltop); \ 00000010 CF1F80E2 ADD R1,R0,#+828 \ 00000014 FF30A0E3 MOV R3,#+255 \ 00000018 FF3C83E3 ORR R3,R3,#0xFF00 \ 0000001C 0A0000EA B ??Get_Online_total_0 4551 while(t=(CLIST *)(t->next)) 4552 { 4553 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 4554 { 4555 kopa_online++; \ 0000002C 5C2390E5 LDR R2,[R0, #+860] \ 00000030 012082E2 ADD R2,R2,#+1 \ 00000034 5C2380E5 STR R2,[R0, #+860] 4556 if (t->state!=65535) kopa_kontaktu++; \ 00000038 B425D1E1 LDRH R2,[R1, #+84] \ 0000003C 030052E1 CMP R2,R3 \ 00000040 60239015 LDRNE R2,[R0, #+864] \ 00000044 01208212 ADDNE R2,R2,#+1 \ 00000048 60238015 STRNE R2,[R0, #+864] 4557 } 4558 } \ ??Get_Online_total_0: \ 0000004C 001091E5 LDR R1,[R1, #+0] \ 00000050 000051E3 CMP R1,#+0 \ 00000054 F1FFFF1A BNE ??Get_Online_total_1 4559 } \ 00000058 1EFF2FE1 BX LR ;; return 4560 4561 4562 //-------------------------------------------------------------------------------------------// 4563 4564 \ In segment CODE, align 4, keep-with-next 4565 void SetIndividStatus()//set to all contact to default vibra, sound and other by kluchnik 04.04.08 4566 { 4567 CLIST *t; 4568 t=(CLIST *)(&cltop); \ SetIndividStatus: \ 00000000 ........ LDR R0,??DataTable199 ;; S_ICONS \ 00000004 CF1F80E2 ADD R1,R0,#+828 \ 00000008 0C0000EA B ??SetIndividStatus_0 4569 while(t=(CLIST *)(t->next)) 4570 { 4571 if (!t->isgroup) \ ??SetIndividStatus_1: \ 0000000C 082091E5 LDR R2,[R1, #+8] \ 00000010 000052E3 CMP R2,#+0 \ 00000014 0900001A BNE ??SetIndividStatus_0 4572 { 4573 t->isvibra=1; \ 00000018 0120A0E3 MOV R2,#+1 \ 0000001C 682081E5 STR R2,[R1, #+104] 4574 t->issound=1; \ 00000020 6C2081E5 STR R2,[R1, #+108] 4575 t->isShowXst=Show_XTX; \ 00000024 C83290E5 LDR R3,[R0, #+712] \ 00000028 783081E5 STR R3,[R1, #+120] 4576 #ifdef kluchnik 4577 t->isLoadHistory=1; \ 0000002C 602081E5 STR R2,[R1, #+96] 4578 #endif 4579 t->signals=1; \ 00000030 7C2081E5 STR R2,[R1, #+124] 4580 t->isaccess=1; \ 00000034 802081E5 STR R2,[R1, #+128] 4581 4582 t->automsgcount=0; \ 00000038 0020A0E3 MOV R2,#+0 \ 0000003C 842081E5 STR R2,[R1, #+132] 4583 } 4584 } \ ??SetIndividStatus_0: \ 00000040 001091E5 LDR R1,[R1, #+0] \ 00000044 000051E3 CMP R1,#+0 \ 00000048 EFFFFF1A BNE ??SetIndividStatus_1 4585 } \ 0000004C 1EFF2FE1 BX LR ;; return 4586 4587 //-------------------------------------------------------------------------------------------// 4588 4589 \ In segment CODE, align 4, keep-with-next 4590 ProcessPacket(TPKT *p) 4591 { \ ProcessPacket: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 4EDF4DE2 SUB SP,SP,#+312 4592 CLIST *t; 4593 LOGQ *q; 4594 char s[256]; 4595 switch(p->pkt.type) \ 00000008 2CAB9FE5 LDR R10,??ProcessPacket_1+0x4 ;; ILL_RECV_FADE \ 0000000C ........ LDR R5,??DataTable201 ;; `?` \ 00000010 ........ LDR R7,??DataTable199 ;; S_ICONS \ 00000014 0040A0E1 MOV R4,R0 \ 00000018 B410D4E1 LDRH R1,[R4, #+4] \ 0000001C 000094E5 LDR R0,[R4, #+0] \ 00000020 0160A0E3 MOV R6,#+1 \ 00000024 0090A0E3 MOV R9,#+0 \ 00000028 031041E2 SUB R1,R1,#+3 \ 0000002C 1C0051E3 CMP R1,#+28 \ 00000030 BC02008A BHI ??ProcessPacket_2 \ 00000034 022F8FE2 ADR R2,??ProcessPacket_0 \ 00000038 8110A0E1 MOV R1,R1, LSL #+1 \ 0000003C B12092E1 LDRH R2,[R2, R1] \ 00000040 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??ProcessPacket_0: \ 00000044 34010E00B802 DC16 +308,+14,+696,+696 \ B802 \ 0000004C 1100B8024D00 DC16 +17,+696,+77,+696 \ B802 \ 00000054 B802B802B802 DC16 +696,+696,+696,+696 \ B802 \ 0000005C B80220022002 DC16 +696,+544,+544,+696 \ B802 \ 00000064 B8023D004B00 DC16 +696,+61,+75,+696 \ B802 \ 0000006C B802B8025002 DC16 +696,+696,+592,+696 \ B802 \ 00000074 B802B802B802 DC16 +696,+696,+696,+696 \ B802 \ 0000007C B6020000 DC16 +694,+0 4596 { 4597 case T_LOGIN: 4598 set_my_status(); \ ??ProcessPacket_3: \ 00000080 ........ BL set_my_status 4599 set_my_xstatus(); \ 00000084 ........ BL set_my_xstatus \ 00000088 A60200EA B ??ProcessPacket_2 4600 break; 4601 case T_CLENTRY: 4602 if (p->pkt.uin) \ ??ProcessPacket_4: \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 1800000A BEQ ??ProcessPacket_5 4603 { 4604 if ((t=FindContactByUin(p->pkt.uin))) \ 00000094 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000098 0080B0E1 MOVS R8,R0 \ 0000009C 0E00000A BEQ ??ProcessPacket_6 4605 { 4606 // t->state=0xFFFF; 4607 if (!t->local) strncpy(t->name,p->data,63); \ 000000A0 BC0098E5 LDR R0,[R8, #+188] \ 000000A4 000050E3 CMP R0,#+0 \ 000000A8 0300001A BNE ??ProcessPacket_7 \ 000000AC 3F20A0E3 MOV R2,#+63 \ 000000B0 081084E2 ADD R1,R4,#+8 \ 000000B4 140088E2 ADD R0,R8,#+20 \ 000000B8 160100EF SWI +278 4608 t->group=GROUP_CACHE; \ ??ProcessPacket_7: \ 000000BC 400397E5 LDR R0,[R7, #+832] \ 000000C0 100088E5 STR R0,[R8, #+16] 4609 ChangeContactPos(t); \ ??ProcessPacket_8: \ 000000C4 0800A0E1 MOV R0,R8 \ 000000C8 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4610 RecountMenu(t,1); \ 000000CC 0110A0E3 MOV R1,#+1 \ 000000D0 0800A0E1 MOV R0,R8 \ ??ProcessPacket_9: \ 000000D4 ........ BL RecountMenu \ 000000D8 920200EA B ??ProcessPacket_2 4611 } 4612 else 4613 { 4614 RecountMenu(AddContact(p->pkt.uin,p->data, GROUP_CACHE, 0),1); \ ??ProcessPacket_6: \ 000000DC 402397E5 LDR R2,[R7, #+832] \ 000000E0 000094E5 LDR R0,[R4, #+0] \ 000000E4 0030A0E3 MOV R3,#+0 \ 000000E8 081084E2 ADD R1,R4,#+8 \ 000000EC ........ _BLF AddContact,??AddContact??rA \ 000000F0 0610A0E1 MOV R1,R6 \ 000000F4 F6FFFFEA B ??ProcessPacket_9 4615 } 4616 } 4617 else 4618 { 4619 if(VIBR_ON_CONNECT) \ ??ProcessPacket_5: \ 000000F8 ........ LDR R0,??DataTable184 ;; VIBR_ON_CONNECT \ 000000FC 000090E5 LDR R0,[R0, #+0] \ 00000100 000050E3 CMP R0,#+0 \ 00000104 0100000A BEQ ??ProcessPacket_10 4620 { 4621 vibra_count=1; \ 00000108 FC6287E5 STR R6,[R7, #+764] 4622 start_vibra(); \ 0000010C ........ BL start_vibra 4623 } 4624 GROUP_CACHE=0; \ ??ProcessPacket_10: \ 00000110 409387E5 STR R9,[R7, #+832] 4625 ask_my_info(); 4626 if (contactlist_menu_id) \ 00000114 440397E5 LDR R0,[R7, #+836] \ 00000118 000050E3 CMP R0,#+0 \ 0000011C 0200000A BEQ ??ProcessPacket_11 4627 { 4628 RecountMenu(NULL,1); \ 00000120 0110A0E3 MOV R1,#+1 \ 00000124 0900A0E1 MOV R0,R9 \ ??ProcessPacket_12: \ 00000128 E9FFFFEA B ??ProcessPacket_9 4629 } 4630 else 4631 { 4632 unhooked2=1; \ ??ProcessPacket_11: \ 0000012C C86387E5 STR R6,[R7, #+968] 4633 create_contactlist_menu(); \ 00000130 ........ BL create_contactlist_menu 4634 SetIndividStatus(); \ 00000134 ........ BL SetIndividStatus \ 00000138 7A0200EA B ??ProcessPacket_2 4635 } 4636 } 4637 break; 4638 case T_GROUPID: 4639 if (t=FindGroupByID(GROUP_CACHE=p->pkt.uin)) \ ??ProcessPacket_13: \ 0000013C 400387E5 STR R0,[R7, #+832] \ 00000140 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000144 0080B0E1 MOVS R8,R0 \ 00000148 0400000A BEQ ??ProcessPacket_14 4640 { 4641 strncpy(t->name,p->data,63); \ 0000014C 3F20A0E3 MOV R2,#+63 \ 00000150 081084E2 ADD R1,R4,#+8 \ 00000154 140088E2 ADD R0,R8,#+20 \ 00000158 160100EF SWI +278 4642 ChangeContactPos(t); \ 0000015C D8FFFFEA B ??ProcessPacket_8 4643 RecountMenu(t,1); 4644 } 4645 else 4646 { 4647 RecountMenu(AddGroup(p->pkt.uin,p->data),1); \ ??ProcessPacket_14: \ 00000160 000094E5 LDR R0,[R4, #+0] \ 00000164 081084E2 ADD R1,R4,#+8 \ 00000168 ........ _BLF AddGroup,??AddGroup??rA \ 0000016C 0110A0E3 MOV R1,#+1 \ 00000170 D7FFFFEA B ??ProcessPacket_9 4648 } 4649 break; 4650 case T_GROUPFOLLOW: 4651 GROUP_CACHE=p->pkt.uin; \ ??ProcessPacket_15: \ 00000174 400387E5 STR R0,[R7, #+832] \ 00000178 6A0200EA B ??ProcessPacket_2 4652 break; 4653 case T_STATUSCHANGE: 4654 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_16: \ 0000017C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000180 0080B0E1 MOVS R8,R0 4655 if (t) \ 00000184 6702000A BEQ ??ProcessPacket_2 4656 { 4657 int i=t->state; \ 00000188 B415D8E1 LDRH R1,[R8, #+84] 4658 CLIST *oldt=NULL; \ 0000018C 00B0A0E3 MOV R11,#+0 \ 00000190 04108DE5 STR R1,[SP, #+4] \ 00000194 0A00D4E5 LDRB R0,[R4, #+10] \ 00000198 B615D8E1 LDRH R1,[R8, #+86] \ 0000019C 000051E1 CMP R1,R0 \ 000001A0 1D00000A BEQ ??ProcessPacket_17 4659 if (t->xstate!=p->data[2]) // Если картинка икс статуса сменилась 4660 { 4661 t->xstate=p->data[2]; \ 000001A4 B605C8E1 STRH R0,[R8, #+86] 4662 FreeXText(t); \ 000001A8 0800A0E1 MOV R0,R8 \ 000001AC ........ _BLF FreeXText,??FreeXText??rA 4663 if (t->xstate && ENA_AUTO_XTXT) // Если установлен икс статус и можно запрашивать по смене икс статуса :) \ 000001B0 B605D8E1 LDRH R0,[R8, #+86] \ 000001B4 000050E3 CMP R0,#+0 \ 000001B8 1600000A BEQ ??ProcessPacket_18 \ 000001BC 7C099FE5 LDR R0,??ProcessPacket_1+0x8 ;; ENA_AUTO_XTXT \ 000001C0 000090E5 LDR R0,[R0, #+0] \ 000001C4 000050E3 CMP R0,#+0 \ 000001C8 1200000A BEQ ??ProcessPacket_18 4664 { 4665 t->req_xtext=1; \ 000001CC B86088E5 STR R6,[R8, #+184] 4666 if (edchat_id) // Если открыт чат \ 000001D0 480397E5 LDR R0,[R7, #+840] \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 0F00000A BEQ ??ProcessPacket_17 4667 { 4668 void *data=FindGUIbyId(edchat_id,NULL); \ 000001DC 480397E5 LDR R0,[R7, #+840] \ 000001E0 0010A0E3 MOV R1,#+0 \ 000001E4 090200EF SWI +521 4669 if (data) \ 000001E8 000050E3 CMP R0,#+0 \ 000001EC 0A00000A BEQ ??ProcessPacket_17 4670 { 4671 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 000001F0 DF0100EF SWI +479 4672 if (ed_struct) \ 000001F4 000050E3 CMP R0,#+0 \ 000001F8 0700000A BEQ ??ProcessPacket_17 4673 { 4674 if (ed_struct->ed_contact==t) // Если наш чат то запрашиваем текст статуса \ 000001FC 000090E5 LDR R0,[R0, #+0] \ 00000200 080050E1 CMP R0,R8 \ 00000204 0400001A BNE ??ProcessPacket_17 4675 { 4676 t->req_xtext=0; \ 00000208 B89088E5 STR R9,[R8, #+184] 4677 RequestXText(t->uin); \ 0000020C 0C0098E5 LDR R0,[R8, #+12] \ 00000210 ........ BL RequestXText \ 00000214 000000EA B ??ProcessPacket_17 4678 } 4679 } 4680 } 4681 } 4682 } 4683 else // Если икс статус не установлен то на всякий случай снимаем флаг получения текста 4684 { 4685 t->req_xtext=0; \ ??ProcessPacket_18: \ 00000218 B89088E5 STR R9,[R8, #+184] 4686 } 4687 } 4688 if (contactlist_menu_id) \ ??ProcessPacket_17: \ 0000021C 440397E5 LDR R0,[R7, #+836] \ 00000220 000050E3 CMP R0,#+0 \ 00000224 0500000A BEQ ??ProcessPacket_19 4689 { 4690 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 00000228 440397E5 LDR R0,[R7, #+836] \ 0000022C 0010A0E3 MOV R1,#+0 \ 00000230 090200EF SWI +521 \ 00000234 8F0100EF SWI +399 \ 00000238 ........ _BLF FindContactByN,??FindContactByN??rA \ 0000023C 00B0A0E1 MOV R11,R0 4691 } 4692 if(t->state==65535) t->change=1; \ ??ProcessPacket_19: \ 00000240 B405D8E1 LDRH R0,[R8, #+84] \ 00000244 FFA0A0E3 MOV R10,#+255 \ 00000248 FFAC8AE3 ORR R10,R10,#0xFF00 \ 0000024C 0A0050E1 CMP R0,R10 \ 00000250 88608805 STREQ R6,[R8, #+136] 4693 t->state=*((unsigned short *)(p->data)); \ 00000254 B800D4E1 LDRH R0,[R4, #+8] \ 00000258 B405C8E1 STRH R0,[R8, #+84] 4694 if((t->state!=65535)&&(t->change==1)) \ 0000025C 0A0050E1 CMP R0,R10 \ 00000260 0400000A BEQ ??ProcessPacket_20 \ 00000264 880098E5 LDR R0,[R8, #+136] \ 00000268 010050E3 CMP R0,#+1 4695 { 4696 t->just_now=2; \ 0000026C 0200A003 MOVEQ R0,#+2 \ 00000270 74008805 STREQ R0,[R8, #+116] 4697 t->change=0; \ 00000274 88908805 STREQ R9,[R8, #+136] 4698 } 4699 LogStatusChange(t); \ ??ProcessPacket_20: \ 00000278 0800A0E1 MOV R0,R8 \ 0000027C ........ _BLF LogStatusChange,??LogStatusChange??rA 4700 ChangeContactPos(t); \ 00000280 0800A0E1 MOV R0,R8 \ 00000284 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4701 RecountMenu(oldt,1); \ 00000288 0110A0E3 MOV R1,#+1 \ 0000028C 0B00A0E1 MOV R0,R11 \ 00000290 ........ BL RecountMenu 4702 4703 if(isLogStatusChange)//isLogStatusChange // by kluchnik 05.04.08 \ 00000294 ........ LDR R0,??DataTable185 ;; isLogStatusChange \ 00000298 000090E5 LDR R0,[R0, #+0] \ 0000029C 000050E3 CMP R0,#+0 \ 000002A0 2B00000A BEQ ??ProcessPacket_21 4704 { 4705 char *s=GetStatusByIconIndex(GetIconIndex(t)); \ 000002A4 0800A0E1 MOV R0,R8 \ 000002A8 ........ BL GetIconIndex \ 000002AC ........ BL GetStatusByIconIndex \ 000002B0 00008DE5 STR R0,[SP, #+0] 4706 FreeXText2(t); \ 000002B4 0800A0E1 MOV R0,R8 \ 000002B8 ........ BL FreeXText2 4707 TTime time; 4708 GetDateTime(NULL,&time); \ 000002BC 08108DE2 ADD R1,SP,#+8 \ 000002C0 0000A0E3 MOV R0,#+0 \ 000002C4 B40000EF SWI +180 4709 char *txt=malloc(64); \ 000002C8 4000A0E3 MOV R0,#+64 \ 000002CC 140000EF SWI +20 \ 000002D0 00B0A0E1 MOV R11,R0 4710 sprintf(txt," %s: %02d:%02d:%02d",s,time.hour,time.min,time.sec); \ 000002D4 0A00DDE5 LDRB R0,[SP, #+10] \ 000002D8 AF1F85E2 ADD R1,R5,#+700 \ 000002DC 01002DE9 PUSH {R0} \ 000002E0 0D00DDE5 LDRB R0,[SP, #+13] \ 000002E4 01002DE9 PUSH {R0} \ 000002E8 1030DDE5 LDRB R3,[SP, #+16] \ 000002EC 08209DE5 LDR R2,[SP, #+8] \ 000002F0 0B00A0E1 MOV R0,R11 \ 000002F4 160000EF SWI +22 4711 t->xtext2=malloc(64); \ 000002F8 4000A0E3 MOV R0,#+64 \ 000002FC 140000EF SWI +20 \ 00000300 B40088E5 STR R0,[R8, #+180] 4712 snprintf(t->xtext2,64,txt); \ 00000304 0B20A0E1 MOV R2,R11 \ 00000308 4010A0E3 MOV R1,#+64 \ 0000030C 1B0100EF SWI +283 4713 AddStringToLog(t,0x03,txt,"Status change",0xFFFFFFFF, 0); \ 00000310 0900A0E1 MOV R0,R9 \ 00000314 01002DE9 PUSH {R0} \ 00000318 B43F85E2 ADD R3,R5,#+720 \ 0000031C 0B20A0E1 MOV R2,R11 \ 00000320 0310A0E3 MOV R1,#+3 \ 00000324 0000E0E1 MVN R0,R0 \ 00000328 01002DE9 PUSH {R0} \ 0000032C 0800A0E1 MOV R0,R8 \ 00000330 ........ BL AddStringToLog 4714 ReqAddMsgToChat(t); \ 00000334 0800A0E1 MOV R0,R8 \ 00000338 ........ BL ReqAddMsgToChat 4715 RecountMenu(NULL, 0); \ 0000033C 0910A0E1 MOV R1,R9 \ 00000340 0100A0E1 MOV R0,R1 \ 00000344 ........ BL RecountMenu 4716 mfree(txt); \ 00000348 0B00A0E1 MOV R0,R11 \ 0000034C 150000EF SWI +21 \ 00000350 10D08DE2 ADD SP,SP,#+16 4717 } 4718 4719 if ((t->state!=0xFFFF)&&(i==0xFFFF))//Звук \ ??ProcessPacket_21: \ 00000354 B405D8E1 LDRH R0,[R8, #+84] \ 00000358 2810A0E3 MOV R1,#+40 \ 0000035C 6C1D81E3 ORR R1,R1,#0x1B00 \ 00000360 07B081E0 ADD R11,R1,R7 \ 00000364 0A0050E1 CMP R0,R10 \ 00000368 4300000A BEQ ??ProcessPacket_22 \ 0000036C 04109DE5 LDR R1,[SP, #+4] \ 00000370 0A0051E1 CMP R1,R10 \ 00000374 4000001A BNE ??ProcessPacket_22 4720 { 4721 if(Is_INC_On && (PopupShow==2 || PopupShow==3)) \ 00000378 800297E5 LDR R0,[R7, #+640] \ 0000037C 000050E3 CMP R0,#+0 \ 00000380 1800000A BEQ ??ProcessPacket_23 \ 00000384 B8079FE5 LDR R0,??ProcessPacket_1+0xC ;; PopupShow \ 00000388 000090E5 LDR R0,[R0, #+0] \ 0000038C 020050E3 CMP R0,#+2 \ 00000390 03005013 CMPNE R0,#+3 \ 00000394 1300001A BNE ??ProcessPacket_23 4722 { 4723 INC_show2=20; 4724 sprintf(onContact,PopupOnlineString,t->name); \ 00000398 A8179FE5 LDR R1,??ProcessPacket_1+0x10 ;; PopupOnlineString \ 0000039C 1400A0E3 MOV R0,#+20 \ 000003A0 F40387E5 STR R0,[R7, #+1012] \ 000003A4 142088E2 ADD R2,R8,#+20 \ 000003A8 7400A0E3 MOV R0,#+116 \ 000003AC 7C0D80E3 ORR R0,R0,#0x1F00 \ 000003B0 070080E0 ADD R0,R0,R7 \ 000003B4 160000EF SWI +22 4725 sprintf(on_off_buf,"[%s: %s]\n",t->xtext2+1,t->name); \ 000003B8 B40098E5 LDR R0,[R8, #+180] \ 000003BC 143088E2 ADD R3,R8,#+20 \ 000003C0 012080E2 ADD R2,R0,#+1 \ 000003C4 B81F85E2 ADD R1,R5,#+736 \ 000003C8 0B00A0E1 MOV R0,R11 \ 000003CC 160000EF SWI +22 4726 on_off_timer=ON_OFF_TIME; \ 000003D0 74079FE5 LDR R0,??ProcessPacket_1+0x14 ;; ON_OFF_TIME \ 000003D4 000090E5 LDR R0,[R0, #+0] \ 000003D8 580387E5 STR R0,[R7, #+856] 4727 UpdateCLheader(); \ 000003DC ........ BL UpdateCLheader 4728 show_on_contact(); \ 000003E0 ........ BL show_on_contact \ 000003E4 030000EA B ??ProcessPacket_24 4729 } 4730 else 4731 GBS_DelTimer(&incs2);//на всяк \ ??ProcessPacket_23: \ 000003E8 B400A0E3 MOV R0,#+180 \ 000003EC 7C0D80E3 ORR R0,R0,#0x1F00 \ 000003F0 070080E0 ADD R0,R0,R7 \ 000003F4 8C0100EF SWI +396 4732 if(!extended_sounds) \ ??ProcessPacket_24: \ 000003F8 ........ LDR R0,??DataTable186 ;; extended_sounds \ 000003FC 4CA79FE5 LDR R10,??ProcessPacket_1+0x18 ;; sndGlobal \ 00000400 000090E5 LDR R0,[R0, #+0] \ 00000404 000050E3 CMP R0,#+0 \ 00000408 0200001A BNE ??ProcessPacket_25 4733 { 4734 Play(sndGlobal); \ 0000040C 0A00A0E1 MOV R0,R10 \ 00000410 ........ BL Play \ 00000414 300000EA B ??ProcessPacket_26 4735 } 4736 else 4737 { 4738 FSTATS stat; 4739 int fsize; 4740 unsigned int ul = 0; 4741 uins=t->uin; 4742 sprintf(talk_sound, "%s%d.wav", sndGlobal2, uins); \ ??ProcessPacket_25: \ 00000418 34279FE5 LDR R2,??ProcessPacket_1+0x1C ;; sndGlobal2 \ 0000041C 00908DE5 STR R9,[SP, #+0] \ 00000420 0C0098E5 LDR R0,[R8, #+12] \ 00000424 579EA0E3 MOV R9,#+1392 \ 00000428 6C0287E5 STR R0,[R7, #+620] \ 0000042C 0030A0E1 MOV R3,R0 \ 00000430 A31F85E2 ADD R1,R5,#+652 \ 00000434 070089E0 ADD R0,R9,R7 \ 00000438 160000EF SWI +22 4743 GetFileStats(talk_sound,&stat,&ul); \ 0000043C 0D20A0E1 MOV R2,SP \ 00000440 441F8DE2 ADD R1,SP,#+272 \ 00000444 070089E0 ADD R0,R9,R7 \ 00000448 840000EF SWI +132 4744 fsize=stat.size; 4745 if(fsize>0) \ 0000044C 14019DE5 LDR R0,[SP, #+276] \ 00000450 010050E3 CMP R0,#+1 4746 Play(talk_sound); \ 00000454 070089A0 ADDGE R0,R9,R7 4747 else 4748 Play(sndGlobal); \ 00000458 0A00A0B1 MOVLT R0,R10 \ 0000045C ........ BL Play 4749 t->isvibra=1; \ 00000460 686088E5 STR R6,[R8, #+104] 4750 t->issound=1; \ 00000464 6C6088E5 STR R6,[R8, #+108] 4751 t->isShowXst=Show_XTX; \ 00000468 C80297E5 LDR R0,[R7, #+712] \ 0000046C 780088E5 STR R0,[R8, #+120] 4752 #ifdef kluchnik 4753 t->isLoadHistory=1; \ 00000470 606088E5 STR R6,[R8, #+96] 4754 #endif 4755 t->signals=1; \ 00000474 7C6088E5 STR R6,[R8, #+124] \ 00000478 170000EA B ??ProcessPacket_26 4756 } 4757 } 4758 4759 if ((i!=0xFFFF)&&(t->state==0xFFFF))//Звук \ ??ProcessPacket_22: \ 0000047C 04109DE5 LDR R1,[SP, #+4] \ 00000480 0A0051E1 CMP R1,R10 \ 00000484 1400000A BEQ ??ProcessPacket_26 \ 00000488 0A0050E1 CMP R0,R10 \ 0000048C 1200001A BNE ??ProcessPacket_26 4760 { 4761 Play(sndSrvMsg); \ 00000490 C0069FE5 LDR R0,??ProcessPacket_1+0x20 ;; sndSrvMsg \ 00000494 ........ BL Play 4762 if(TIME_OR_MSG==2 || TIME_OR_MSG==3 | TIME_OR_MSG==4) \ 00000498 ........ LDR R0,??DataTable187 ;; TIME_OR_MSG \ 0000049C 000090E5 LDR R0,[R0, #+0] \ 000004A0 020050E3 CMP R0,#+2 \ 000004A4 03005013 CMPNE R0,#+3 \ 000004A8 04005013 CMPNE R0,#+4 \ 000004AC 0000001A BNE ??ProcessPacket_27 4763 Get_Online_total(); \ 000004B0 ........ BL Get_Online_total 4764 sprintf(on_off_buf,"[%s: %s]\n",t->xtext2+1,t->name); \ ??ProcessPacket_27: \ 000004B4 B40098E5 LDR R0,[R8, #+180] \ 000004B8 143088E2 ADD R3,R8,#+20 \ 000004BC 012080E2 ADD R2,R0,#+1 \ 000004C0 B81F85E2 ADD R1,R5,#+736 \ 000004C4 0B00A0E1 MOV R0,R11 \ 000004C8 160000EF SWI +22 4765 on_off_timer=ON_OFF_TIME; \ 000004CC 78069FE5 LDR R0,??ProcessPacket_1+0x14 ;; ON_OFF_TIME \ 000004D0 000090E5 LDR R0,[R0, #+0] \ 000004D4 580387E5 STR R0,[R7, #+856] 4766 UpdateCLheader(); \ 000004D8 ........ BL UpdateCLheader 4767 } 4768 4769 if (edchat_id) \ ??ProcessPacket_26: \ 000004DC 480397E5 LDR R0,[R7, #+840] \ 000004E0 000050E3 CMP R0,#+0 \ 000004E4 8F01000A BEQ ??ProcessPacket_2 4770 { 4771 void *data=FindGUIbyId(edchat_id,NULL); \ 000004E8 480397E5 LDR R0,[R7, #+840] \ 000004EC 0010A0E3 MOV R1,#+0 \ 000004F0 090200EF SWI +521 4772 { 4773 EDCHAT_STRUCT *ed_struct; 4774 ed_struct=EDIT_GetUserPointer(data); \ 000004F4 DF0100EF SWI +479 4775 if (ed_struct) \ 000004F8 000050E3 CMP R0,#+0 \ 000004FC 8901000A BEQ ??ProcessPacket_2 4776 { 4777 if (ed_struct->ed_contact==t) \ 00000500 000090E5 LDR R0,[R0, #+0] \ 00000504 080050E1 CMP R0,R8 \ 00000508 8601001A BNE ??ProcessPacket_2 4778 { 4779 DirectRedrawGUI_ID(edchat_id); \ 0000050C 480397E5 LDR R0,[R7, #+840] \ 00000510 400100EF SWI +320 \ 00000514 830100EA B ??ProcessPacket_2 4780 } 4781 } 4782 } 4783 } 4784 } 4785 break; 4786 case T_RECVMSG: 4787 NEW_MSG=1; \ ??ProcessPacket_28: \ 00000518 E46387E5 STR R6,[R7, #+996] 4788 t=FindContactByUin(p->pkt.uin); \ 0000051C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000520 0080B0E1 MOVS R8,R0 4789 if (!t) \ 00000524 0900001A BNE ??ProcessPacket_29 4790 { 4791 sprintf(s,percent_d,p->pkt.uin); \ 00000528 002094E5 LDR R2,[R4, #+0] \ 0000052C 3A1085E2 ADD R1,R5,#+58 \ 00000530 10008DE2 ADD R0,SP,#+16 \ 00000534 160000EF SWI +22 4792 t=AddContact(p->pkt.uin,s,GROUP_CACHE,0); \ 00000538 402397E5 LDR R2,[R7, #+832] \ 0000053C 000094E5 LDR R0,[R4, #+0] \ 00000540 0030A0E3 MOV R3,#+0 \ 00000544 10108DE2 ADD R1,SP,#+16 \ 00000548 ........ _BLF AddContact,??AddContact??rA \ 0000054C 0080A0E1 MOV R8,R0 4793 } 4794 #ifdef kluchnik 4795 if(!t->isactive && HISTORY_BUFFER && (t->isLoadHistory && t->isIndividSet)) GetHistory(t, 64<isactive && HISTORY_BUFFER) GetHistory(t, 64<isactive && HISTORY_BUFFER) GetHistory(t, 64<name[0]=='#') \ ??ProcessPacket_30: \ 0000057C E410A0E3 MOV R1,#+228 \ 00000580 741D81E3 ORR R1,R1,#0x1D00 \ 00000584 071081E0 ADD R1,R1,R7 \ 00000588 00108DE5 STR R1,[SP, #+0] \ 0000058C 1400D8E5 LDRB R0,[R8, #+20] \ 00000590 230050E3 CMP R0,#+35 \ 00000594 1700001A BNE ??ProcessPacket_31 4802 { 4803 //Если это конференция, патчим имя 4804 char *s=strchr(p->data,'>'); \ 00000598 3E10A0E3 MOV R1,#+62 \ 0000059C 080084E2 ADD R0,R4,#+8 \ 000005A0 180000EF SWI +24 4805 //Если нашли символ > и после него пробел и ник короче 16 символов 4806 if (s) \ 000005A4 000050E3 CMP R0,#+0 \ 000005A8 1200000A BEQ ??ProcessPacket_31 4807 { 4808 if ((s[1]==' ')&&((s-p->data)<16)) \ 000005AC 0110D0E5 LDRB R1,[R0, #+1] \ 000005B0 200051E3 CMP R1,#+32 \ 000005B4 0F00001A BNE ??ProcessPacket_31 \ 000005B8 081084E2 ADD R1,R4,#+8 \ 000005BC 011040E0 SUB R1,R0,R1 \ 000005C0 100051E3 CMP R1,#+16 \ 000005C4 0B0000AA BGE ??ProcessPacket_31 4809 { 4810 *s=0; //Режем строку \ 000005C8 0090C0E5 STRB R9,[R0, #+0] 4811 AddStringToLog(t,0x02,s+2,p->data,0xFFFFFFFF,1); //Добавляем имя из текста сообщения \ 000005CC 0110A0E3 MOV R1,#+1 \ 000005D0 02002DE9 PUSH {R1} \ 000005D4 083084E2 ADD R3,R4,#+8 \ 000005D8 022080E2 ADD R2,R0,#+2 \ 000005DC 0800A0E1 MOV R0,R8 \ 000005E0 001061E2 RSB R1,R1,#+0 \ 000005E4 02002DE9 PUSH {R1} \ 000005E8 0210A0E3 MOV R1,#+2 \ 000005EC ........ BL AddStringToLog 4812 goto L1; \ 000005F0 08D08DE2 ADD SP,SP,#+8 \ 000005F4 7E0000EA B ??ProcessPacket_32 4813 } 4814 } 4815 } 4816 4817 //=================== tas bus jautri ===================// 4818 4819 comanda=1; \ ??ProcessPacket_31: \ 000005F8 EC6387E5 STR R6,[R7, #+1004] 4820 CheckComand(p->data, t); \ 000005FC 0810A0E1 MOV R1,R8 \ 00000600 54559FE5 LDR R5,??ProcessPacket_1+0x24 ;; ILL_KEYS_RECV \ 00000604 54B59FE5 LDR R11,??ProcessPacket_1+0x28 ;; ILL_RECV_TMR \ 00000608 080084E2 ADD R0,R4,#+8 \ 0000060C ........ BL CheckComand \ 00000610 7C3098E5 LDR R3,[R8, #+124] \ 00000614 ........ LDR R0,??DataTable189 ;; automsgcount \ 00000618 ........ LDR R1,??DataTable190 ;; VIBR_TYPE \ 0000061C 000053E3 CMP R3,#+0 \ 00000620 80309815 LDRNE R3,[R8, #+128] \ 00000624 5A2FA0E3 MOV R2,#+360 \ 00000628 00005313 CMPNE R3,#+0 \ 0000062C 1100000A BEQ ??ProcessPacket_33 4821 if(t->signals && t->isaccess) 4822 { 4823 #ifdef NEWSGOLD 4824 scrsTime=0; 4825 #endif 4826 if(SHOW_ACTIVE) \ 00000630 ........ LDR R3,??DataTable193 ;; SHOW_ACTIVE \ 00000634 B49287E5 STR R9,[R7, #+692] \ 00000638 003093E5 LDR R3,[R3, #+0] \ 0000063C 000053E3 CMP R3,#+0 4827 t->isactive=ACTIVE_TIME; \ 00000640 A8208815 STRNE R2,[R8, #+168] 4828 if(t->isvibra) \ 00000644 682098E5 LDR R2,[R8, #+104] \ 00000648 000052E3 CMP R2,#+0 \ 0000064C 2800000A BEQ ??ProcessPacket_34 4829 { 4830 if(VIBR_TYPE) \ 00000650 001091E5 LDR R1,[R1, #+0] \ 00000654 000051E3 CMP R1,#+0 4831 vibra_count=2; \ 00000658 0210A013 MOVNE R1,#+2 \ 0000065C FC128715 STRNE R1,[R7, #+764] 4832 else 4833 vibra_count=1; \ 00000660 FC628705 STREQ R6,[R7, #+764] 4834 if(t->automsgcountisIndividSet) \ ??ProcessPacket_33: \ 00000678 643098E5 LDR R3,[R8, #+100] \ 0000067C B49287E5 STR R9,[R7, #+692] \ 00000680 000053E3 CMP R3,#+0 \ 00000684 0C00000A BEQ ??ProcessPacket_36 4851 { 4852 #ifdef NEWSGOLD 4853 scrsTime=0; 4854 #endif 4855 if(SHOW_ACTIVE) \ 00000688 ........ LDR R0,??DataTable193 ;; SHOW_ACTIVE \ 0000068C 000090E5 LDR R0,[R0, #+0] \ 00000690 000050E3 CMP R0,#+0 4856 t->isactive=ACTIVE_TIME; \ 00000694 A8208815 STRNE R2,[R8, #+168] 4857 if(t->isvibra) \ 00000698 680098E5 LDR R0,[R8, #+104] \ 0000069C 000050E3 CMP R0,#+0 \ 000006A0 1300000A BEQ ??ProcessPacket_34 4858 { 4859 if(VIBR_TYPE) \ 000006A4 000091E5 LDR R0,[R1, #+0] \ 000006A8 000050E3 CMP R0,#+0 4860 vibra_count=2; \ 000006AC 0200A013 MOVNE R0,#+2 \ 000006B0 FC028715 STRNE R0,[R7, #+764] 4861 else 4862 vibra_count=1; \ 000006B4 FC628705 STREQ R6,[R7, #+764] 4863 if(t->automsgcount < automsgcount && away_m) 4864 start_vibra(); \ 000006B8 0C0000EA B ??ProcessPacket_35 4865 else 4866 start_vibra(); 4867 } 4868 #ifdef ELKA 4869 if(SLI_TYPE) 4870 SLI_Timer(); 4871 #endif 4872 if(Is_Double_Vibra_On) 4873 { 4874 Reminder_timer(); 4875 } 4876 4877 if (Is_ILU_On) 4878 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 4879 } 4880 else 4881 { 4882 #ifdef NEWSGOLD 4883 scrsTime=0; 4884 #endif 4885 if(SHOW_ACTIVE) \ ??ProcessPacket_36: \ 000006BC ........ LDR R3,??DataTable193 ;; SHOW_ACTIVE \ 000006C0 003093E5 LDR R3,[R3, #+0] \ 000006C4 000053E3 CMP R3,#+0 4886 t->isactive=ACTIVE_TIME; \ 000006C8 A8208815 STRNE R2,[R8, #+168] 4887 if(VIBR_TYPE) \ 000006CC 001091E5 LDR R1,[R1, #+0] \ 000006D0 000051E3 CMP R1,#+0 4888 vibra_count=2; \ 000006D4 0210A013 MOVNE R1,#+2 \ 000006D8 FC128715 STRNE R1,[R7, #+764] 4889 else 4890 vibra_count=1; \ 000006DC FC628705 STREQ R6,[R7, #+764] 4891 if(t->automsgcount >= automsgcount) vibra_count=0; \ 000006E0 841098E5 LDR R1,[R8, #+132] \ 000006E4 000090E5 LDR R0,[R0, #+0] \ 000006E8 000051E1 CMP R1,R0 \ 000006EC FC928725 STRCS R9,[R7, #+764] 4892 start_vibra(); \ ??ProcessPacket_35: \ 000006F0 ........ BL start_vibra 4893 #ifdef ELKA 4894 if(SLI_TYPE) 4895 SLI_Timer(); \ ??ProcessPacket_34: \ 000006F4 ........ BL SLI_Timer 4896 #endif 4897 if(Is_Double_Vibra_On) \ 000006F8 880297E5 LDR R0,[R7, #+648] \ 000006FC 000050E3 CMP R0,#+0 \ 00000700 0000000A BEQ ??ProcessPacket_37 4898 { 4899 Reminder_timer(); \ 00000704 ........ BL Reminder_timer 4900 } 4901 4902 if (Is_ILU_On) \ ??ProcessPacket_37: \ 00000708 840297E5 LDR R0,[R7, #+644] \ 0000070C 000050E3 CMP R0,#+0 \ 00000710 0500000A BEQ ??ProcessPacket_38 4903 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 00000714 48049FE5 LDR R0,??ProcessPacket_1+0x2C ;; ILL_DISP_RECV \ 00000718 00309AE5 LDR R3,[R10, #+0] \ 0000071C 00209BE5 LDR R2,[R11, #+0] \ 00000720 001095E5 LDR R1,[R5, #+0] \ 00000724 000090E5 LDR R0,[R0, #+0] \ 00000728 ........ BL IlluminationOn 4904 } 4905 4906 if(comanda==1) \ ??ProcessPacket_38: \ 0000072C EC0397E5 LDR R0,[R7, #+1004] \ 00000730 010050E3 CMP R0,#+1 \ 00000734 2E00001A BNE ??ProcessPacket_32 4907 { 4908 AddStringToLog(t,0x02,p->data,t->name,0xFFFFFFFF,1); \ 00000738 01002DE9 PUSH {R0} \ 0000073C 143088E2 ADD R3,R8,#+20 \ 00000740 082084E2 ADD R2,R4,#+8 \ 00000744 0210A0E3 MOV R1,#+2 \ 00000748 000066E2 RSB R0,R6,#+0 \ 0000074C 01002DE9 PUSH {R0} \ 00000750 0800A0E1 MOV R0,R8 \ 00000754 ........ BL AddStringToLog 4909 main_count++; \ 00000758 ........ LDR R0,??DataTable194 ;; main_count \ 0000075C 001090E5 LDR R1,[R0, #+0] \ 00000760 011081E2 ADD R1,R1,#+1 \ 00000764 001080E5 STR R1,[R0, #+0] 4910 if(Is_INC_On && (PopupShow==1 || PopupShow==3)) \ 00000768 800297E5 LDR R0,[R7, #+640] \ 0000076C 08D08DE2 ADD SP,SP,#+8 \ 00000770 000050E3 CMP R0,#+0 \ 00000774 1300000A BEQ ??ProcessPacket_39 \ 00000778 C4039FE5 LDR R0,??ProcessPacket_1+0xC ;; PopupShow \ 0000077C 000090E5 LDR R0,[R0, #+0] \ 00000780 010050E3 CMP R0,#+1 \ 00000784 03005013 CMPNE R0,#+3 \ 00000788 0E00001A BNE ??ProcessPacket_39 4911 { 4912 sprintf(show_nick,PopupMsgString,t->name); \ 0000078C D4139FE5 LDR R1,??ProcessPacket_1+0x30 ;; PopupMsgString \ 00000790 142088E2 ADD R2,R8,#+20 \ 00000794 5400A0E3 MOV R0,#+84 \ 00000798 7C0D80E3 ORR R0,R0,#0x1F00 \ 0000079C 070080E0 ADD R0,R0,R7 \ 000007A0 160000EF SWI +22 4913 if(!IsIdleUiOnTop()&&(!saver_on)) \ 000007A4 C50000EF SWI +197 \ 000007A8 000050E3 CMP R0,#+0 \ 000007AC 70029705 LDREQ R0,[R7, #+624] \ 000007B0 00005003 CMPEQ R0,#+0 \ 000007B4 0500001A BNE ??ProcessPacket_40 4914 { 4915 INC_show=20; \ 000007B8 1400A0E3 MOV R0,#+20 \ 000007BC F00387E5 STR R0,[R7, #+1008] 4916 show_pp_sender(); \ 000007C0 ........ BL show_pp_sender \ 000007C4 010000EA B ??ProcessPacket_40 4917 } 4918 } 4919 else 4920 GBS_DelTimer(&develop); \ ??ProcessPacket_39: \ 000007C8 00009DE5 LDR R0,[SP, #+0] \ 000007CC 8C0100EF SWI +396 4921 4922 main_msg_timer2=main_msg_timer;//при получении сообщения восстанавливаем таймер \ ??ProcessPacket_40: \ 000007D0 94039FE5 LDR R0,??ProcessPacket_1+0x34 ;; main_msg_timer \ 000007D4 000090E5 LDR R0,[R0, #+0] \ 000007D8 E00387E5 STR R0,[R7, #+992] 4923 if(Is_SMARTCPU_On) \ 000007DC 7C0297E5 LDR R0,[R7, #+636] \ 000007E0 000050E3 CMP R0,#+0 \ 000007E4 0200000A BEQ ??ProcessPacket_32 4924 AddToMain(t->name,p->data); \ 000007E8 081084E2 ADD R1,R4,#+8 \ 000007EC 140088E2 ADD R0,R8,#+20 \ 000007F0 ........ BL AddToMain 4925 } 4926 L1: 4927 //Разворачиваем группу, в которой пришло сообщение 4928 { 4929 CLIST *g=FindGroupByID(t->group); \ ??ProcessPacket_32: \ 000007F4 100098E5 LDR R0,[R8, #+16] \ 000007F8 ........ _BLF FindGroupByID,??FindGroupByID??rA 4930 if (g) \ 000007FC 000050E3 CMP R0,#+0 4931 { 4932 if (g->state) \ 00000800 B415D011 LDRHNE R1,[R0, #+84] \ 00000804 00005113 CMPNE R1,#+0 4933 { 4934 g->state=0; \ 00000808 B495C011 STRHNE R9,[R0, #+84] 4935 } 4936 } 4937 } 4938 4939 ReqAddMsgToChat(t); \ 0000080C 0800A0E1 MOV R0,R8 \ 00000810 ........ BL ReqAddMsgToChat 4940 RecountMenu(t,1); \ 00000814 0110A0E3 MOV R1,#+1 \ 00000818 0800A0E1 MOV R0,R8 \ 0000081C ........ BL RecountMenu 4941 4942 switch (DEVELOP_IF) \ 00000820 48039FE5 LDR R0,??ProcessPacket_1+0x38 ;; DEVELOP_IF \ 00000824 000090E5 LDR R0,[R0, #+0] \ 00000828 000050E3 CMP R0,#+0 \ 0000082C 0400000A BEQ ??ProcessPacket_41 \ 00000830 010050E2 SUBS R0,R0,#+1 \ 00000834 0B00000A BEQ ??ProcessPacket_42 \ 00000838 020050E2 SUBS R0,R0,#+2 \ 0000083C 1300000A BEQ ??ProcessPacket_43 \ 00000840 B80000EA B ??ProcessPacket_2 4943 { 4944 case 0: 4945 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) to_develop(); \ ??ProcessPacket_41: \ 00000844 068100EF SWI +33030 \ 00000848 080090E5 LDR R0,[R0, #+8] \ 0000084C 901297E5 LDR R1,[R7, #+656] \ 00000850 0C0090E5 LDR R0,[R0, #+12] \ 00000854 0C0090E5 LDR R0,[R0, #+12] \ 00000858 010050E1 CMP R0,R1 \ ??ProcessPacket_44: \ 0000085C B100000A BEQ ??ProcessPacket_2 \ 00000860 ........ BL to_develop \ 00000864 AF0000EA B ??ProcessPacket_2 4946 break; 4947 case 1: 4948 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) to_develop(); \ ??ProcessPacket_42: \ 00000868 068100EF SWI +33030 \ 0000086C 080090E5 LDR R0,[R0, #+8] \ 00000870 901297E5 LDR R1,[R7, #+656] \ 00000874 0C0090E5 LDR R0,[R0, #+12] \ 00000878 0C0090E5 LDR R0,[R0, #+12] \ 0000087C 010050E1 CMP R0,R1 \ 00000880 A800000A BEQ ??ProcessPacket_2 \ 00000884 430000EF SWI +67 \ 00000888 000050E3 CMP R0,#+0 \ 0000088C F2FFFFEA B ??ProcessPacket_44 4949 break; 4950 case 2: 4951 break; 4952 case 3: 4953 GBS_DelTimer(&develop); \ ??ProcessPacket_43: \ 00000890 00009DE5 LDR R0,[SP, #+0] \ 00000894 8C0100EF SWI +396 4954 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(!IsUnlocked())) begin_to_develop(); \ 00000898 068100EF SWI +33030 \ 0000089C 080090E5 LDR R0,[R0, #+8] \ 000008A0 901297E5 LDR R1,[R7, #+656] \ 000008A4 0C0090E5 LDR R0,[R0, #+12] \ 000008A8 0C0090E5 LDR R0,[R0, #+12] \ 000008AC 010050E1 CMP R0,R1 \ 000008B0 9C00000A BEQ ??ProcessPacket_2 \ 000008B4 430000EF SWI +67 \ 000008B8 000050E3 CMP R0,#+0 \ 000008BC 9900001A BNE ??ProcessPacket_2 \ 000008C0 ........ BL begin_to_develop \ 000008C4 970000EA B ??ProcessPacket_2 4955 break; 4956 } 4957 break; 4958 case T_SRV_ACK: 4959 case T_CLIENT_ACK: 4960 q=FindContactLOGQByAck(p); \ ??ProcessPacket_45: \ 000008C8 0400A0E1 MOV R0,R4 \ 000008CC ........ BL FindContactLOGQByAck 4961 if (q) \ 000008D0 000050E3 CMP R0,#+0 \ 000008D4 9300000A BEQ ??ProcessPacket_2 4962 { 4963 q->acked=p->pkt.type==T_SRV_ACK?1:2; \ 000008D8 B410D4E1 LDRH R1,[R4, #+4] \ 000008DC 100051E3 CMP R1,#+16 \ 000008E0 0110A003 MOVEQ R1,#+1 \ 000008E4 0210A013 MOVNE R1,#+2 \ 000008E8 041080E5 STR R1,[R0, #+4] 4964 t=FindContactByUin(p->pkt.uin); \ 000008EC 000094E5 LDR R0,[R4, #+0] \ 000008F0 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000008F4 0080A0E1 MOV R8,R0 4965 if (edchat_id) \ 000008F8 480397E5 LDR R0,[R7, #+840] \ 000008FC 000050E3 CMP R0,#+0 \ 00000900 8800000A BEQ ??ProcessPacket_2 4966 { 4967 void *data=FindGUIbyId(edchat_id,NULL); \ 00000904 480397E5 LDR R0,[R7, #+840] \ 00000908 0010A0E3 MOV R1,#+0 \ 0000090C 090200EF SWI +521 \ 00000910 0050B0E1 MOVS R5,R0 4968 if (data) \ 00000914 8300000A BEQ ??ProcessPacket_2 4969 { 4970 EDCHAT_STRUCT *ed_struct; 4971 ed_struct=EDIT_GetUserPointer(data); \ 00000918 DF0100EF SWI +479 4972 if (ed_struct) \ 0000091C 000050E3 CMP R0,#+0 \ 00000920 8000000A BEQ ??ProcessPacket_2 4973 { 4974 if (ed_struct->ed_contact==t) \ 00000924 000090E5 LDR R0,[R0, #+0] \ 00000928 080050E1 CMP R0,R8 \ 0000092C 7D00001A BNE ??ProcessPacket_2 4975 { 4976 if (EDIT_IsBusy(data)) \ 00000930 0500A0E1 MOV R0,R5 \ 00000934 1C0200EF SWI +540 \ 00000938 000050E3 CMP R0,#+0 \ 0000093C 0300000A BEQ ??ProcessPacket_46 4977 { 4978 t->req_drawack=1; \ 00000940 986088E5 STR R6,[R8, #+152] 4979 time_to_stop_t9=3; \ 00000944 0300A0E3 MOV R0,#+3 \ 00000948 E80387E5 STR R0,[R7, #+1000] \ 0000094C 750000EA B ??ProcessPacket_2 4980 } 4981 else { 4982 DrawAck(data); \ ??ProcessPacket_46: \ 00000950 0500A0E1 MOV R0,R5 \ 00000954 ........ BL DrawAck 4983 if (p->pkt.type==T_SRV_ACK) \ 00000958 B400D4E1 LDRH R0,[R4, #+4] \ 0000095C 100050E3 CMP R0,#+16 \ 00000960 7000001A BNE ??ProcessPacket_2 4984 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 00000964 08029FE5 LDR R0,??ProcessPacket_1+0x3C ;; ILL_SEND_TMR \ 00000968 00309AE5 LDR R3,[R10, #+0] \ 0000096C 002090E5 LDR R2,[R0, #+0] \ 00000970 00029FE5 LDR R0,??ProcessPacket_1+0x40 ;; ILL_KEYS_SEND \ 00000974 001090E5 LDR R1,[R0, #+0] \ 00000978 FC019FE5 LDR R0,??ProcessPacket_1+0x44 ;; ILL_DISP_SEND \ 0000097C 000090E5 LDR R0,[R0, #+0] \ 00000980 ........ BL IlluminationOn \ 00000984 670000EA B ??ProcessPacket_2 4985 } 4986 } 4987 } 4988 } 4989 } 4990 } 4991 break; 4992 case T_XTEXT_ACK: 4993 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_47: \ 00000988 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 0000098C 0080B0E1 MOVS R8,R0 4994 if (t) \ 00000990 6400000A BEQ ??ProcessPacket_2 4995 { 4996 int i; 4997 int j; 4998 FreeXText(t); \ 00000994 ........ _BLF FreeXText,??FreeXText??rA 4999 i=p->pkt.data_len; \ 00000998 B660D4E1 LDRH R6,[R4, #+6] 5000 memcpy(t->xtext=malloc(i),p->data,i); \ 0000099C 0600A0E1 MOV R0,R6 \ 000009A0 140000EF SWI +20 \ 000009A4 B00088E5 STR R0,[R8, #+176] \ 000009A8 0620A0E1 MOV R2,R6 \ 000009AC 081084E2 ADD R1,R4,#+8 \ 000009B0 1E0100EF SWI +286 5001 zeromem(s,256); \ 000009B4 401FA0E3 MOV R1,#+256 \ 000009B8 10008DE2 ADD R0,SP,#+16 \ 000009BC 1D0100EF SWI +285 5002 strcpy(s,t->name); \ 000009C0 141088E2 ADD R1,R8,#+20 \ 000009C4 10008DE2 ADD R0,SP,#+16 \ 000009C8 1A0000EF SWI +26 5003 strcat(s,":\n"); \ 000009CC 591F8FE2 ADR R1,??ProcessPacket_1 ;; ":\n" \ 000009D0 10008DE2 ADD R0,SP,#+16 \ 000009D4 170000EF SWI +23 5004 i=strlen(s); \ 000009D8 10008DE2 ADD R0,SP,#+16 \ 000009DC 1B0000EF SWI +27 5005 j=p->data[0]; \ 000009E0 0860D4E5 LDRB R6,[R4, #+8] \ 000009E4 0070A0E1 MOV R7,R0 5006 if (j>(255-i)) j=255-i; \ 000009E8 FF0067E2 RSB R0,R7,#+255 \ 000009EC 060050E1 CMP R0,R6 \ 000009F0 0060A0B1 MOVLT R6,R0 5007 strncpy(s+i,p->data+1,j); \ 000009F4 0620A0E1 MOV R2,R6 \ 000009F8 091084E2 ADD R1,R4,#+9 \ 000009FC 10008DE2 ADD R0,SP,#+16 \ 00000A00 000087E0 ADD R0,R7,R0 \ 00000A04 160100EF SWI +278 5008 i+=j; \ 00000A08 070086E0 ADD R0,R6,R7 5009 if (i<255) \ 00000A0C FF0050E3 CMP R0,#+255 \ 00000A10 100000AA BGE ??ProcessPacket_48 5010 { 5011 s[i]='\n'; \ 00000A14 10108DE2 ADD R1,SP,#+16 \ 00000A18 0A20A0E3 MOV R2,#+10 \ 00000A1C 0120C0E7 STRB R2,[R0, +R1] 5012 i++; \ 00000A20 0810D4E5 LDRB R1,[R4, #+8] \ 00000A24 B620D4E1 LDRH R2,[R4, #+6] \ 00000A28 010080E2 ADD R0,R0,#+1 5013 j=p->pkt.data_len-p->data[0]-1; 5014 if (j>(255-i)) j=255-i; 5015 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000A2C 10308DE2 ADD R3,SP,#+16 \ 00000A30 012042E0 SUB R2,R2,R1 \ 00000A34 016042E2 SUB R6,R2,#+1 \ 00000A38 FF2060E2 RSB R2,R0,#+255 \ 00000A3C 060052E1 CMP R2,R6 \ 00000A40 0260A0B1 MOVLT R6,R2 \ 00000A44 0620A0E1 MOV R2,R6 \ 00000A48 041081E0 ADD R1,R1,R4 \ 00000A4C 091081E2 ADD R1,R1,#+9 \ 00000A50 030080E0 ADD R0,R0,R3 \ 00000A54 160100EF SWI +278 5016 } 5017 5018 zeromem(s,256); \ ??ProcessPacket_48: \ 00000A58 401FA0E3 MOV R1,#+256 \ 00000A5C 10008DE2 ADD R0,SP,#+16 \ 00000A60 1D0100EF SWI +285 5019 i=0; 5020 j=p->data[0]; \ 00000A64 0860D4E5 LDRB R6,[R4, #+8] 5021 if (j>(255-i)) j=255-i; 5022 strncpy(s,p->data+1,j); \ 00000A68 091084E2 ADD R1,R4,#+9 \ 00000A6C 10008DE2 ADD R0,SP,#+16 \ 00000A70 400F56E3 CMP R6,#+256 \ 00000A74 FF60A0A3 MOVGE R6,#+255 \ 00000A78 0620A0E1 MOV R2,R6 \ 00000A7C 160100EF SWI +278 5023 i+=j; 5024 if (i<255) \ 00000A80 FF0056E3 CMP R6,#+255 \ 00000A84 100000AA BGE ??ProcessPacket_49 5025 { 5026 s[i++]=13; \ 00000A88 10108DE2 ADD R1,SP,#+16 \ 00000A8C 0D20A0E3 MOV R2,#+13 \ 00000A90 0120C6E7 STRB R2,[R6, +R1] \ 00000A94 0810D4E5 LDRB R1,[R4, #+8] \ 00000A98 B620D4E1 LDRH R2,[R4, #+6] \ 00000A9C 010086E2 ADD R0,R6,#+1 5027 j=p->pkt.data_len-p->data[0]-1; 5028 if (j>(255-i)) j=255-i; 5029 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000AA0 10308DE2 ADD R3,SP,#+16 \ 00000AA4 012042E0 SUB R2,R2,R1 \ 00000AA8 016042E2 SUB R6,R2,#+1 \ 00000AAC FF2060E2 RSB R2,R0,#+255 \ 00000AB0 060052E1 CMP R2,R6 \ 00000AB4 0260A0B1 MOVLT R6,R2 \ 00000AB8 0620A0E1 MOV R2,R6 \ 00000ABC 041081E0 ADD R1,R1,R4 \ 00000AC0 091081E2 ADD R1,R1,#+9 \ 00000AC4 030080E0 ADD R0,R0,R3 \ 00000AC8 160100EF SWI +278 5030 } 5031 AddStringToLog(t,0x03,s,x_status_change,0xFFFFFFFF,1); \ ??ProcessPacket_49: \ 00000ACC 0100A0E3 MOV R0,#+1 \ 00000AD0 01002DE9 PUSH {R0} \ 00000AD4 503E85E2 ADD R3,R5,#+1280 \ 00000AD8 0310A0E3 MOV R1,#+3 \ 00000ADC 000060E2 RSB R0,R0,#+0 \ 00000AE0 01002DE9 PUSH {R0} \ 00000AE4 18208DE2 ADD R2,SP,#+24 \ 00000AE8 0800A0E1 MOV R0,R8 \ 00000AEC ........ BL AddStringToLog 5032 ReqAddMsgToChat(t); \ 00000AF0 0800A0E1 MOV R0,R8 \ 00000AF4 ........ BL ReqAddMsgToChat 5033 if (strlen(p->data)) // Если x-status не пустой \ 00000AF8 080084E2 ADD R0,R4,#+8 \ 00000AFC 1B0000EF SWI +27 \ 00000B00 000050E3 CMP R0,#+0 \ 00000B04 08D08DE2 ADD SP,SP,#+8 5034 RecountMenu(t, 1); \ 00000B08 0110A013 MOVNE R1,#+1 \ 00000B0C 0800A011 MOVNE R0,R8 \ 00000B10 6FFDFF1A BNE ??ProcessPacket_9 5035 else 5036 RecountMenu(NULL, 0); \ 00000B14 0010A0E3 MOV R1,#+0 \ 00000B18 0100A0E1 MOV R0,R1 \ 00000B1C 6CFDFFEA B ??ProcessPacket_9 5037 } 5038 break; 5039 case T_LASTPRIVACY: 5040 CurrentPrivateStatus=p->data[0]; \ ??ProcessPacket_50: \ 00000B20 0800D4E5 LDRB R0,[R4, #+8] \ 00000B24 F80287E5 STR R0,[R7, #+760] 5041 break; 5042 } 5043 mfree(p); \ ??ProcessPacket_2: \ 00000B28 0400A0E1 MOV R0,R4 \ 00000B2C 150000EF SWI +21 5044 } \ 00000B30 4EDF8DE2 ADD SP,SP,#+312 \ 00000B34 F08FBDE8 POP {R4-R11,PC} ;; return \ ??ProcessPacket_1: \ 00000B38 3A0A0000 DC8 ":\n",+0 \ 00000B3C ........ DC32 ILL_RECV_FADE \ 00000B40 ........ DC32 ENA_AUTO_XTXT \ 00000B44 ........ DC32 PopupShow \ 00000B48 ........ DC32 PopupOnlineString \ 00000B4C ........ DC32 ON_OFF_TIME \ 00000B50 ........ DC32 sndGlobal \ 00000B54 ........ DC32 sndGlobal2 \ 00000B58 ........ DC32 sndSrvMsg \ 00000B5C ........ DC32 ILL_KEYS_RECV \ 00000B60 ........ DC32 ILL_RECV_TMR \ 00000B64 ........ DC32 ILL_DISP_RECV \ 00000B68 ........ DC32 PopupMsgString \ 00000B6C ........ DC32 main_msg_timer \ 00000B70 ........ DC32 DEVELOP_IF \ 00000B74 ........ DC32 ILL_SEND_TMR \ 00000B78 ........ DC32 ILL_KEYS_SEND \ 00000B7C ........ DC32 ILL_DISP_SEND 5045 5046 5047 IPC_REQ tmr_gipc; \ In segment CODE, align 4, keep-with-next 5048 void process_active_timer(void) 5049 { \ process_active_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} 5050 if (connect_state>2) \ 00000004 ........ LDR R5,??DataTable199 ;; S_ICONS \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C 140395E5 LDR R0,[R5, #+788] \ 00000010 030050E3 CMP R0,#+3 \ 00000014 070000BA BLT ??process_active_timer_0 5051 { 5052 if (++tenseconds_to_ping>12) \ 00000018 540395E5 LDR R0,[R5, #+852] \ 0000001C 010080E2 ADD R0,R0,#+1 \ 00000020 540385E5 STR R0,[R5, #+852] \ 00000024 0D0050E3 CMP R0,#+13 \ 00000028 020000BA BLT ??process_active_timer_0 5053 { 5054 tenseconds_to_ping=0; 5055 SUBPROC((void *)do_ping); \ 0000002C 5C009FE5 LDR R0,??process_active_timer_1 ;; do_ping \ 00000030 544385E5 STR R4,[R5, #+852] \ 00000034 710100EF SWI +369 5056 } 5057 } 5058 tmr_gipc.name_to=ipc_my_name; \ ??process_active_timer_0: \ 00000038 ........ LDR R1,??DataTable201 ;; `?` \ 0000003C D800A0E3 MOV R0,#+216 \ 00000040 400E80E3 ORR R0,R0,#0x400 \ 00000044 012080E0 ADD R2,R0,R1 \ 00000048 C82085E5 STR R2,[R5, #+200] 5059 tmr_gipc.name_from=ipc_my_name; \ 0000004C 010080E0 ADD R0,R0,R1 \ 00000050 CC0085E5 STR R0,[R5, #+204] 5060 tmr_gipc.data=NULL; \ 00000054 D04085E5 STR R4,[R5, #+208] 5061 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_TENSECONDS,&tmr_gipc); \ 00000058 C83085E2 ADD R3,R5,#+200 \ 0000005C 0420A0E3 MOV R2,#+4 \ 00000060 B010A0E3 MOV R1,#+176 \ 00000064 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000068 0900A0E3 MOV R0,#+9 \ 0000006C 420C80E3 ORR R0,R0,#0x4200 \ 00000070 000100EF SWI +256 5062 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000074 ........ LDR R2,??DataTable225 ;; process_active_timer \ 00000078 871EA0E3 MOV R1,#+2160 \ 0000007C C800A0E3 MOV R0,#+200 \ 00000080 680D80E3 ORR R0,R0,#0x1A00 \ 00000084 050080E0 ADD R0,R0,R5 \ 00000088 4D0000EF SWI +77 5063 } \ 0000008C 3080BDE8 POP {R4,R5,PC} ;; return \ ??process_active_timer_1: \ 00000090 ........ DC32 do_ping 5064 5065 GBSTMR tm22; \ In segment CODE, align 4, keep-with-next 5066 void OneSecTmr() 5067 { 5068 tmr_gipc.name_to=ipc_my_name; \ OneSecTmr: \ 00000000 ........ LDR R1,??DataTable201 ;; `?` \ 00000004 10402DE9 PUSH {R4,LR} \ 00000008 ........ LDR R4,??DataTable199 ;; S_ICONS \ 0000000C D800A0E3 MOV R0,#+216 \ 00000010 400E80E3 ORR R0,R0,#0x400 \ 00000014 012080E0 ADD R2,R0,R1 \ 00000018 C82084E5 STR R2,[R4, #+200] 5069 tmr_gipc.name_from=ipc_my_name; \ 0000001C 010080E0 ADD R0,R0,R1 \ 00000020 CC0084E5 STR R0,[R4, #+204] 5070 tmr_gipc.data=NULL; \ 00000024 0000A0E3 MOV R0,#+0 \ 00000028 D00084E5 STR R0,[R4, #+208] 5071 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_ONESECOND,&tmr_gipc); \ 0000002C C83084E2 ADD R3,R4,#+200 \ 00000030 0620A0E3 MOV R2,#+6 \ 00000034 B010A0E3 MOV R1,#+176 \ 00000038 DE1C81E3 ORR R1,R1,#0xDE00 \ 0000003C 0900A0E3 MOV R0,#+9 \ 00000040 420C80E3 ORR R0,R0,#0x4200 \ 00000044 000100EF SWI +256 5072 GBS_StartTimerProc(&tm22,TMR_SECOND,OneSecTmr); \ 00000048 14209FE5 LDR R2,??OneSecTmr_0 ;; OneSecTmr \ 0000004C D810A0E3 MOV R1,#+216 \ 00000050 C400A0E3 MOV R0,#+196 \ 00000054 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000058 040080E0 ADD R0,R0,R4 \ 0000005C 4D0000EF SWI +77 5073 } \ 00000060 1080BDE8 POP {R4,PC} ;; return \ ??OneSecTmr_0: \ 00000064 ........ DC32 OneSecTmr 5074 5075 5076 //=============================================================================================== 5077 5078 extern ADDUIN addonuin[]; 5079 5080 int itemFromDisp;//кол-во на экране 5081 int totalItems;//общее количество итемов 5082 int curpos=0;//позичия курсора 5083 int curpage=1;//текущая страница 5084 5085 const char clrSelect[4]={0xFF,0x00,0x00,0x60}; 5086 const char fntSelect[4]={0xFF,0xFF,0x00,0x60}; 5087 const char bordSelect[4]={0x00,0x00,0x00,0x60}; 5088 5089 const char clrNotSelect[4]={0x00,0x00,0x00,0x60}; 5090 const char bordNotSelect[4]={0x00,0x00,0x00,0x60}; 5091 const char fntNotSelect[4]={0xFF,0xFF,0xFF,0x60}; 5092 5093 char clrBlack[]={0x00,0x00,0x00,0x64}; 5094 char clrWhite[]={0xFF,0xFF,0xFF,0x64}; 5095 //char prozr[]={0x00,0x00,0x00,0x00}; 5096 const int font=FONT_SMALL; 5097 const char _t[]="%t"; 5098 5099 extern int ParseUINS(); 5100 int USE_ADD_UIN=0; 5101 #define CLIST_Y1 (YDISP+GetFontYSIZE(font)+8) 5102 \ In segment CODE, align 4, keep-with-next 5103 static void DrawList() 5104 { \ DrawList: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 5105 int font_y = GetFontYSIZE(font)+2;//16+2 5106 int scr_w=ScreenW(); 5107 int scr_h=ScreenH()-1; 5108 // int y2=scr_w-(GetFontYSIZE(font)+2); 5109 #ifdef ELKA 5110 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-GetFontYSIZE(font)-2)-1; \ 00000004 ........ LDR R5,??DataTable232 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 5111 #else 5112 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-GetFontYSIZE(font)-2); 5113 #endif 5114 5115 LockSched(); 5116 totalItems = ParseUINS(); 5117 // Определяем количество страниц списка контактов 5118 int pageNum = sdiv(itemFromDisp, totalItems); 5119 if( itemFromDisp*pageNum < totalItems) pageNum++; //На всяк,вдруг еще страница нужна 5120 WSHDR* out_ws = AllocWS(256); 5121 int i=0; \ 0000000C ........ LDR R8,??DataTable201 ;; `?` \ 00000010 0800A0E3 MOV R0,#+8 \ 00000014 C50100EF SWI +453 \ 00000018 024080E2 ADD R4,R0,#+2 \ 0000001C 888100EF SWI +33160 \ 00000020 04008DE5 STR R0,[SP, #+4] \ 00000024 898100EF SWI +33161 \ 00000028 898100EF SWI +33161 \ 0000002C 0060A0E1 MOV R6,R0 \ 00000030 0800A0E3 MOV R0,#+8 \ 00000034 C50100EF SWI +453 \ 00000038 0070A0E1 MOV R7,R0 \ 0000003C 0800A0E3 MOV R0,#+8 \ 00000040 C50100EF SWI +453 \ 00000044 071046E0 SUB R1,R6,R7 \ 00000048 201041E2 SUB R1,R1,#+32 \ 0000004C 000041E0 SUB R0,R1,R0 \ 00000050 021040E2 SUB R1,R0,#+2 \ 00000054 0400A0E1 MOV R0,R4 \ 00000058 B80000EF SWI +184 \ 0000005C 010040E2 SUB R0,R0,#+1 \ 00000060 F80385E5 STR R0,[R5, #+1016] \ 00000064 460100EF SWI +326 \ 00000068 ........ _BLF ParseUINS,??ParseUINS??rA \ 0000006C FC0385E5 STR R0,[R5, #+1020] \ 00000070 0010A0E1 MOV R1,R0 \ 00000074 F80395E5 LDR R0,[R5, #+1016] \ 00000078 0070A0E3 MOV R7,#+0 \ 0000007C B80000EF SWI +184 \ 00000080 00008DE5 STR R0,[SP, #+0] \ 00000084 F80395E5 LDR R0,[R5, #+1016] \ 00000088 00109DE5 LDR R1,[SP, #+0] \ 0000008C 910000E0 MUL R0,R1,R0 \ 00000090 FC1395E5 LDR R1,[R5, #+1020] \ 00000094 010050E1 CMP R0,R1 \ 00000098 00109DB5 LDRLT R1,[SP, #+0] \ 0000009C 400FA0E3 MOV R0,#+256 \ 000000A0 011081B2 ADDLT R1,R1,#+1 \ 000000A4 00108DB5 STRLT R1,[SP, #+0] \ 000000A8 250100EF SWI +293 \ 000000AC 0060A0E1 MOV R6,R0 5122 int start_y; 5123 int x=1; 5124 while(i<=totalItems) \ ??DrawList_0: \ 000000B0 FC0395E5 LDR R0,[R5, #+1020] \ 000000B4 070050E1 CMP R0,R7 \ 000000B8 560000BA BLT ??DrawList_1 5125 { 5126 if((i>=(curpage-1)*itemFromDisp) && (i<=itemFromDisp*curpage))//если те итемы который нужно выводить на экран со страници curpage \ 000000BC F80395E5 LDR R0,[R5, #+1016] \ 000000C0 041495E5 LDR R1,[R5, #+1028] \ 000000C4 012041E2 SUB R2,R1,#+1 \ 000000C8 900202E0 MUL R2,R0,R2 \ 000000CC 020057E1 CMP R7,R2 \ 000000D0 910000A0 MULGE R0,R1,R0 \ 000000D4 070050A1 CMPGE R0,R7 \ 000000D8 480000BA BLT ??DrawList_2 5127 { 5128 wsprintf(out_ws,"%d. %d",i+1,addonuin[i].uin);//имя закладки \ 000000DC ........ LDR R0,??DataTable205 ;; addonuin \ 000000E0 012087E2 ADD R2,R7,#+1 \ 000000E4 073290E7 LDR R3,[R0, +R7, LSL #+4] \ 000000E8 BB1F88E2 ADD R1,R8,#+748 \ 000000EC 0600A0E1 MOV R0,R6 \ 000000F0 240100EF SWI +292 5129 start_y = (CLIST_Y1 + (i - (curpage-1)*itemFromDisp)*font_y); //определяем начальное смещение по у \ 000000F4 0800A0E3 MOV R0,#+8 \ 000000F8 C50100EF SWI +453 \ 000000FC 041495E5 LDR R1,[R5, #+1028] \ 00000100 F82395E5 LDR R2,[R5, #+1016] \ 00000104 011041E2 SUB R1,R1,#+1 \ 00000108 920101E0 MUL R1,R2,R1 \ 0000010C 011047E0 SUB R1,R7,R1 \ 00000110 940120E0 MLA R0,R4,R1,R0 \ 00000114 209080E2 ADD R9,R0,#+32 5130 5131 if(i==curpos) \ 00000118 04009DE5 LDR R0,[SP, #+4] \ 0000011C 09B084E0 ADD R11,R4,R9 \ 00000120 01A040E2 SUB R10,R0,#+1 \ 00000124 000495E5 LDR R0,[R5, #+1024] \ 00000128 000057E1 CMP R7,R0 \ 0000012C 1300001A BNE ??DrawList_3 5132 { 5133 DrawRoundedFrame(x-4,start_y,scr_w-1,start_y+font_y,5,5,0,bordSelect,clrSelect); \ 00000130 530E88E2 ADD R0,R8,#+1328 \ 00000134 01002DE9 PUSH {R0} \ 00000138 0B30A0E1 MOV R3,R11 \ 0000013C 0A20A0E1 MOV R2,R10 \ 00000140 0910A0E1 MOV R1,R9 \ 00000144 3800A0E3 MOV R0,#+56 \ 00000148 500E80E3 ORR R0,R0,#0x500 \ 0000014C 080080E0 ADD R0,R0,R8 \ 00000150 01002DE9 PUSH {R0} \ 00000154 0000A0E3 MOV R0,#+0 \ 00000158 01002DE9 PUSH {R0} \ 0000015C 0500A0E3 MOV R0,#+5 \ 00000160 01002DE9 PUSH {R0} \ 00000164 01002DE9 PUSH {R0} \ 00000168 0200E0E3 MVN R0,#+2 \ 0000016C 500100EF SWI +336 5134 DrawString(out_ws,x,start_y+2,scr_w-1,start_y+font_y,font,0,fntSelect,0); \ 00000170 0000A0E3 MOV R0,#+0 \ 00000174 01002DE9 PUSH {R0} \ 00000178 3400A0E3 MOV R0,#+52 \ 0000017C 110000EA B ??DrawList_4 5135 } 5136 else 5137 { 5138 DrawRoundedFrame(x,start_y+1,scr_w-1,start_y+font_y,0,0,0,bordNotSelect,clrNotSelect);//clrBlack \ ??DrawList_3: \ 00000180 3C00A0E3 MOV R0,#+60 \ 00000184 500E80E3 ORR R0,R0,#0x500 \ 00000188 080080E0 ADD R0,R0,R8 \ 0000018C 01002DE9 PUSH {R0} \ 00000190 0B30A0E1 MOV R3,R11 \ 00000194 0A20A0E1 MOV R2,R10 \ 00000198 011089E2 ADD R1,R9,#+1 \ 0000019C 540E88E2 ADD R0,R8,#+1344 \ 000001A0 01002DE9 PUSH {R0} \ 000001A4 0000A0E3 MOV R0,#+0 \ 000001A8 01002DE9 PUSH {R0} \ 000001AC 01002DE9 PUSH {R0} \ 000001B0 01002DE9 PUSH {R0} \ 000001B4 0100A0E3 MOV R0,#+1 \ 000001B8 500100EF SWI +336 5139 DrawString(out_ws,x,start_y+2,scr_w-1,start_y+font_y,font,0,fntNotSelect,0); \ 000001BC 0000A0E3 MOV R0,#+0 \ 000001C0 01002DE9 PUSH {R0} \ 000001C4 4400A0E3 MOV R0,#+68 \ ??DrawList_4: \ 000001C8 500E80E3 ORR R0,R0,#0x500 \ 000001CC 080080E0 ADD R0,R0,R8 \ 000001D0 01002DE9 PUSH {R0} \ 000001D4 0A30A0E1 MOV R3,R10 \ 000001D8 022089E2 ADD R2,R9,#+2 \ 000001DC 0110A0E3 MOV R1,#+1 \ 000001E0 0000A0E3 MOV R0,#+0 \ 000001E4 01002DE9 PUSH {R0} \ 000001E8 0800A0E3 MOV R0,#+8 \ 000001EC 01002DE9 PUSH {R0} \ 000001F0 00082DE9 PUSH {R11} \ 000001F4 0600A0E1 MOV R0,R6 \ 000001F8 4C0100EF SWI +332 \ 000001FC 28D08DE2 ADD SP,SP,#+40 5140 } 5141 } 5142 i++; 5143 if(i>(pageNum*itemFromDisp)) break; \ ??DrawList_2: \ 00000200 00009DE5 LDR R0,[SP, #+0] \ 00000204 F81395E5 LDR R1,[R5, #+1016] \ 00000208 017087E2 ADD R7,R7,#+1 \ 0000020C 910000E0 MUL R0,R1,R0 \ 00000210 070050E1 CMP R0,R7 \ 00000214 A5FFFFAA BGE ??DrawList_0 5144 } 5145 UnlockSched(); \ ??DrawList_1: \ 00000218 470100EF SWI +327 5146 FreeWS(out_ws); \ 0000021C 0600A0E1 MOV R0,R6 \ 00000220 290100EF SWI +297 5147 } \ 00000224 F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return 5148 5149 // Управление курсором \ In segment CODE, align 4, keep-with-next 5150 void MoveUp() 5151 { \ MoveUp: \ 00000000 10402DE9 PUSH {R4,LR} 5152 if(!itemFromDisp)return; \ 00000004 ........ LDR R4,??DataTable232 ;; S_ICONS \ 00000008 F80394E5 LDR R0,[R4, #+1016] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} 5153 if(curpos<1) \ 00000014 001494E5 LDR R1,[R4, #+1024] \ 00000018 010051E3 CMP R1,#+1 \ 0000001C 0A0000AA BGE ??MoveUp_0 5154 { 5155 curpos=totalItems; \ 00000020 FC1394E5 LDR R1,[R4, #+1020] \ 00000024 001484E5 STR R1,[R4, #+1024] 5156 if(itemFromDisp!=totalItems) \ 00000028 010050E1 CMP R0,R1 \ 0000002C 0300000A BEQ ??MoveUp_1 5157 { 5158 curpage = sdiv(itemFromDisp,totalItems)+1; \ 00000030 B80000EF SWI +184 \ 00000034 010080E2 ADD R0,R0,#+1 \ 00000038 040484E5 STR R0,[R4, #+1028] \ 0000003C 1080BDE8 POP {R4,PC} 5159 } 5160 else 5161 curpage = 1; \ ??MoveUp_1: \ 00000040 0100A0E3 MOV R0,#+1 \ 00000044 040484E5 STR R0,[R4, #+1028] \ 00000048 1080BDE8 POP {R4,PC} 5162 } 5163 else 5164 { 5165 curpos--; \ ??MoveUp_0: \ 0000004C 042494E5 LDR R2,[R4, #+1028] \ 00000050 011041E2 SUB R1,R1,#+1 \ 00000054 012042E2 SUB R2,R2,#+1 \ 00000058 900203E0 MUL R3,R0,R2 \ 0000005C 001484E5 STR R1,[R4, #+1024] \ 00000060 030051E1 CMP R1,R3 5166 if(curpos<(curpage-1)*itemFromDisp){ curpos++; curpage--; } \ 00000064 010081B2 ADDLT R0,R1,#+1 \ 00000068 000484B5 STRLT R0,[R4, #+1024] \ 0000006C 042484B5 STRLT R2,[R4, #+1028] \ 00000070 1080BDE8 POP {R4,PC} ;; return 5167 } 5168 // REDRAW(); 5169 } 5170 5171 \ In segment CODE, align 4, keep-with-next 5172 void MoveDown() 5173 { 5174 if(!totalItems)return; \ MoveDown: \ 00000000 ........ LDR R0,??DataTable232 ;; S_ICONS \ 00000004 FC1390E5 LDR R1,[R0, #+1020] \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 1EFF2F01 BXEQ LR 5175 curpos++; \ 00000010 002490E5 LDR R2,[R0, #+1024] \ 00000014 012082E2 ADD R2,R2,#+1 \ 00000018 002480E5 STR R2,[R0, #+1024] 5176 if(curpos>totalItems) { curpos=0; curpage=1; } \ 0000001C 020051E1 CMP R1,R2 \ 00000020 030000AA BGE ??MoveDown_0 \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 001480E5 STR R1,[R0, #+1024] \ 0000002C 0110A0E3 MOV R1,#+1 \ 00000030 041480E5 STR R1,[R0, #+1028] 5177 if(curpage*itemFromDisp` \ 00000018 000281E0 ADD R0,R1,R0, LSL #+4 \ 0000001C 001090E5 LDR R1,[R0, #+0] \ 00000020 043080E2 ADD R3,R0,#+4 \ 00000024 ........ LDR R0,??DataTable209 ;; PASS \ 00000028 001085E5 STR R1,[R5, #+0] \ 0000002C 372086E2 ADD R2,R6,#+55 \ 00000030 0910A0E3 MOV R1,#+9 \ 00000034 1B0100EF SWI +283 5186 USE_ADD_UIN=0; \ 00000038 0000A0E3 MOV R0,#+0 \ 0000003C 080484E5 STR R0,[R4, #+1032] 5187 5188 UpdateCSMname(); \ 00000040 ........ BL UpdateCSMname 5189 ReadDefSettings(); \ 00000044 ........ BL ReadDefSettings 5190 5191 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 00000048 002095E5 LDR R2,[R5, #+0] \ 0000004C 3A1086E2 ADD R1,R6,#+58 \ 00000050 DE00A0E3 MOV R0,#+222 \ 00000054 400E80E3 ORR R0,R0,#0x400 \ 00000058 060080E0 ADD R0,R0,R6 \ 0000005C 160000EF SWI +22 5192 /*gipc.name_to=ipc_my_name; 5193 gipc.name_from=ipc_my_name; 5194 gipc.data=(void *)-1; 5195 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); 5196 */ 5197 SUBPROC((void*)end_socket); \ 00000060 ........ LDR R0,??DataTable229 ;; end_socket \ 00000064 710100EF SWI +369 5198 GBS_DelTimer(&reconnect_tmr); \ 00000068 B800A0E3 MOV R0,#+184 \ 0000006C 680D80E3 ORR R0,R0,#0x1A00 \ 00000070 040080E0 ADD R0,R0,R4 \ 00000074 8C0100EF SWI +396 5199 DNR_TRIES=3; \ 00000078 0300A0E3 MOV R0,#+3 \ 0000007C D40384E5 STR R0,[R4, #+980] 5200 SUBPROC((void *)create_connect); \ 00000080 ........ LDR R0,??DataTable233 ;; create_connect \ 00000084 710100EF SWI +369 5201 5202 REDRAW(); \ 00000088 720100EF SWI +370 5203 } \ 0000008C 7080BDE8 POP {R4-R6,PC} ;; return 5204 \ In segment CODE, align 4, keep-with-next 5205 void method0(MAIN_GUI *data) 5206 { \ method0: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 0CD04DE2 SUB SP,SP,#+12 5207 int scr_w=ScreenW(); 5208 int scr_h=ScreenH(); 5209 int pos_status;//2026rev 5210 int pm = pictures_max, pl = pictures_loaded;//2026rev 5211 RECT rc=PBRECT; 5212 DrawRectangle(0,YDISP,scr_w-1,scr_h-1,0, GetPaletteAdrByColorIndex(1), GetPaletteAdrByColorIndex(1)); 5213 5214 if(!USE_ADD_UIN)//Если не используем доп.уины \ 00000008 ........ LDR R10,??DataTable212 ;; S_ICONS \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 888100EF SWI +33160 \ 00000014 0070A0E1 MOV R7,R0 \ 00000018 898100EF SWI +33161 \ 0000001C B8149FE5 LDR R1,??method0_0 ;; pictures_max \ 00000020 00008DE5 STR R0,[SP, #+0] \ 00000024 001091E5 LDR R1,[R1, #+0] \ 00000028 B0049FE5 LDR R0,??method0_0+0x4 ;; PBRECT \ 0000002C 04108DE5 STR R1,[SP, #+4] \ 00000030 AC149FE5 LDR R1,??method0_0+0x8 ;; pictures_loaded \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 08108DE5 STR R1,[SP, #+8] \ 0000003C F060D0E1 LDRSH R6,[R0, #+0] \ 00000040 F280D0E1 LDRSH R8,[R0, #+2] \ 00000044 F490D0E1 LDRSH R9,[R0, #+4] \ 00000048 F6B0D0E1 LDRSH R11,[R0, #+6] \ 0000004C 0100A0E3 MOV R0,#+1 \ 00000050 2E0100EF SWI +302 \ 00000054 0050A0E1 MOV R5,R0 \ 00000058 0100A0E3 MOV R0,#+1 \ 0000005C 2E0100EF SWI +302 \ 00000060 20002DE9 PUSH {R5} \ 00000064 ........ LDR R5,??DataTable235 ;; `?` \ 00000068 01002DE9 PUSH {R0} \ 0000006C 012047E2 SUB R2,R7,#+1 \ 00000070 1810A0E3 MOV R1,#+24 \ 00000074 0000A0E3 MOV R0,#+0 \ 00000078 01002DE9 PUSH {R0} \ 0000007C 0C009DE5 LDR R0,[SP, #+12] \ 00000080 013040E2 SUB R3,R0,#+1 \ 00000084 0000A0E3 MOV R0,#+0 \ 00000088 B40100EF SWI +436 \ 0000008C 08049AE5 LDR R0,[R10, #+1032] \ 00000090 0CD08DE2 ADD SP,SP,#+12 \ 00000094 000050E3 CMP R0,#+0 \ 00000098 6D00001A BNE ??method0_1 5215 { 5216 DrawImg(0,0,S_ICONS[ICON_LOGO]); \ 0000009C 50209AE5 LDR R2,[R10, #+80] \ 000000A0 0010A0E3 MOV R1,#+0 \ 000000A4 0000A0E3 MOV R0,#+0 \ 000000A8 230000EF SWI +35 5217 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //by BoBa 10.07 5218 if(IsShowInfo) \ 000000AC 34249FE5 LDR R2,??method0_0+0xC ;; IsShowInfo \ 000000B0 24039AE5 LDR R0,[R10, #+804] \ 000000B4 28139AE5 LDR R1,[R10, #+808] \ 000000B8 002092E5 LDR R2,[R2, #+0] \ 000000BC 000052E3 CMP R2,#+0 \ 000000C0 4500000A BEQ ??method0_2 5219 { 5220 wsprintf(data->ws1,LG_GRSTATESTRING,connect_state,RXstate,RX,TX,sendq_l,hostname,logmsg); \ 000000C4 9820A0E3 MOV R2,#+152 \ 000000C8 642D82E3 ORR R2,R2,#0x1900 \ 000000CC 0A2082E0 ADD R2,R2,R10 \ 000000D0 04002DE9 PUSH {R2} \ 000000D4 6820A0E3 MOV R2,#+104 \ 000000D8 702D82E3 ORR R2,R2,#0x1C00 \ 000000DC 0A2082E0 ADD R2,R2,R10 \ 000000E0 04002DE9 PUSH {R2} \ 000000E4 2C239AE5 LDR R2,[R10, #+812] \ 000000E8 04002DE9 PUSH {R2} \ 000000EC 02002DE9 PUSH {R1} \ 000000F0 01002DE9 PUSH {R0} \ 000000F4 10339AE5 LDR R3,[R10, #+784] \ 000000F8 14239AE5 LDR R2,[R10, #+788] \ 000000FC 340094E5 LDR R0,[R4, #+52] \ 00000100 BD1F85E2 ADD R1,R5,#+756 \ 00000104 240100EF SWI +292 5221 if(pm != pl) \ 00000108 18009DE5 LDR R0,[SP, #+24] \ 0000010C 1C109DE5 LDR R1,[SP, #+28] \ 00000110 14D08DE2 ADD SP,SP,#+20 \ 00000114 010050E1 CMP R0,R1 \ 00000118 3400000A BEQ ??method0_3 \ 0000011C C8039FE5 LDR R0,??method0_0+0x10 ;; BGPBcolor \ 00000120 0B30A0E1 MOV R3,R11 \ 00000124 0010A0E1 MOV R1,R0 \ 00000128 02002DE9 PUSH {R1} \ 0000012C 01002DE9 PUSH {R0} \ 00000130 0920A0E1 MOV R2,R9 \ 00000134 0810A0E1 MOV R1,R8 \ 00000138 0000A0E3 MOV R0,#+0 \ 0000013C 01002DE9 PUSH {R0} \ 00000140 0600A0E1 MOV R0,R6 5222 { 5223 /* DrawRectangle(0,scr_h-4-2*GetFontYSIZE(FONT_SMALL_BOLD),scr_w-1,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-2,0, 5224 GetPaletteAdrByColorIndex(0), 5225 GetPaletteAdrByColorIndex(0));*/ 5226 // pos_status = ((scr_w-1) * pl) / pm; 5227 /* DrawRectangle(1,scr_h-4-2*GetFontYSIZE(FONT_SMALL_BOLD)+1,pos_status,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-3,0, 5228 GetPaletteAdrByColorIndex(14), 5229 GetPaletteAdrByColorIndex(14)); */ 5230 // wstrcatprintf(data->ws1,"\nLoading images..."); 5231 5232 DrawRectangle(rc.x,rc.y,rc.x2,rc.y2,0,BGPBcolor,BGPBcolor); \ 00000144 B40100EF SWI +436 5233 pos_status = (((rc.x2-rc.x)-1) * pl) / pm; \ 00000148 14109DE5 LDR R1,[SP, #+20] \ 0000014C 060049E0 SUB R0,R9,R6 \ 00000150 010040E2 SUB R0,R0,#+1 \ 00000154 910000E0 MUL R0,R1,R0 \ 00000158 10109DE5 LDR R1,[SP, #+16] 5234 DrawRectangle(rc.x+2,rc.y+2,rc.x+pos_status+2,rc.y2-2,0,PBcolor,PBcolor); \ 0000015C 02304BE2 SUB R3,R11,#+2 \ 00000160 ........ _BLF ??div32_a,??rA??div32_a \ 00000164 84039FE5 LDR R0,??method0_0+0x14 ;; PBcolor \ 00000168 0020A0E1 MOV R2,R0 \ 0000016C 04002DE9 PUSH {R2} \ 00000170 01002DE9 PUSH {R0} \ 00000174 0000A0E3 MOV R0,#+0 \ 00000178 01002DE9 PUSH {R0} \ 0000017C 060081E0 ADD R0,R1,R6 \ 00000180 022080E2 ADD R2,R0,#+2 \ 00000184 021088E2 ADD R1,R8,#+2 \ 00000188 020086E2 ADD R0,R6,#+2 \ 0000018C B40100EF SWI +436 5235 5236 if(total_smiles) \ 00000190 5C039FE5 LDR R0,??method0_0+0x18 ;; total_smiles \ 00000194 001090E5 LDR R1,[R0, #+0] \ 00000198 18D08DE2 ADD SP,SP,#+24 \ 0000019C 000051E3 CMP R1,#+0 \ 000001A0 0300000A BEQ ??method0_4 5237 { 5238 wstrcatprintf(data->ws1,"\nLoaded %d smiles",total_smiles); \ 000001A4 002090E5 LDR R2,[R0, #+0] \ 000001A8 340094E5 LDR R0,[R4, #+52] \ 000001AC CB1F85E2 ADD R1,R5,#+812 \ 000001B0 160200EF SWI +534 5239 } 5240 if (xstatuses_load) \ ??method0_4: \ 000001B4 3C039FE5 LDR R0,??method0_0+0x1C ;; xstatuses_load \ 000001B8 000090E5 LDR R0,[R0, #+0] \ 000001BC 000050E3 CMP R0,#+0 \ 000001C0 0A00000A BEQ ??method0_3 5241 { 5242 wstrcatprintf(data->ws1,"\nLoaded %d xstatus",total_xstatuses); \ 000001C4 ........ LDR R0,??DataTable214 ;; total_xstatuses \ 000001C8 D01F85E2 ADD R1,R5,#+832 \ 000001CC 002090E5 LDR R2,[R0, #+0] \ 000001D0 340094E5 LDR R0,[R4, #+52] \ 000001D4 160200EF SWI +534 \ 000001D8 040000EA B ??method0_3 5243 } 5244 } 5245 } 5246 else 5247 { 5248 wsprintf(data->ws1,"State: %d, RXstate: %d",connect_state,RXstate); \ ??method0_2: \ 000001DC 10339AE5 LDR R3,[R10, #+784] \ 000001E0 14239AE5 LDR R2,[R10, #+788] \ 000001E4 340094E5 LDR R0,[R4, #+52] \ 000001E8 D51F85E2 ADD R1,R5,#+852 \ 000001EC 240100EF SWI +292 5249 } 5250 5251 DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD),FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ ??method0_3: \ 000001F0 1700A0E3 MOV R0,#+23 \ 000001F4 2E0100EF SWI +302 \ 000001F8 0060A0E1 MOV R6,R0 \ 000001FC 0000A0E3 MOV R0,#+0 \ 00000200 2E0100EF SWI +302 \ 00000204 0080A0E1 MOV R8,R0 \ 00000208 0500A0E3 MOV R0,#+5 \ 0000020C C50100EF SWI +453 \ 00000210 40002DE9 PUSH {R6} \ 00000214 00012DE9 PUSH {R8} \ 00000218 0010A0E3 MOV R1,#+0 \ 0000021C 02002DE9 PUSH {R1} \ 00000220 043047E2 SUB R3,R7,#+4 \ 00000224 1B20A0E3 MOV R2,#+27 \ 00000228 0810A0E3 MOV R1,#+8 \ 0000022C 02002DE9 PUSH {R1} \ 00000230 10109DE5 LDR R1,[SP, #+16] \ 00000234 041041E2 SUB R1,R1,#+4 \ 00000238 000041E0 SUB R0,R1,R0 \ 0000023C 01002DE9 PUSH {R0} \ 00000240 340094E5 LDR R0,[R4, #+52] \ 00000244 0310A0E3 MOV R1,#+3 \ 00000248 4C0100EF SWI +332 \ 0000024C 14D08DE2 ADD SP,SP,#+20 \ 00000250 2A0000EA B ??method0_5 5252 } 5253 else 5254 { 5255 wsprintf(data->ws1,"%t UIN!","Выберите"); \ ??method0_1: \ 00000254 340094E5 LDR R0,[R4, #+52] \ 00000258 DD2F85E2 ADD R2,R5,#+884 \ 0000025C DB1F85E2 ADD R1,R5,#+876 \ 00000260 240100EF SWI +292 5256 DrawLine(0,CLIST_Y1-3,ScreenW()-1,CLIST_Y1-3,0,clrWhite); \ 00000264 0800A0E3 MOV R0,#+8 \ 00000268 C50100EF SWI +453 \ 0000026C 0060A0E1 MOV R6,R0 \ 00000270 888100EF SWI +33160 \ 00000274 0080A0E1 MOV R8,R0 \ 00000278 0800A0E3 MOV R0,#+8 \ 0000027C C50100EF SWI +453 \ 00000280 D410A0E3 MOV R1,#+212 \ 00000284 7C1D81E3 ORR R1,R1,#0x1F00 \ 00000288 0A1081E0 ADD R1,R1,R10 \ 0000028C 02002DE9 PUSH {R1} \ 00000290 1D3086E2 ADD R3,R6,#+29 \ 00000294 012048E2 SUB R2,R8,#+1 \ 00000298 0010A0E3 MOV R1,#+0 \ 0000029C 02002DE9 PUSH {R1} \ 000002A0 1D1080E2 ADD R1,R0,#+29 \ 000002A4 0000A0E3 MOV R0,#+0 \ 000002A8 B30100EF SWI +435 5257 DrawString(data->ws1,2,YDISP+2,scr_w-1,YDISP+GetFontYSIZE(FONT_SMALL),FONT_SMALL,0,fntSelect,0); \ 000002AC 0800A0E3 MOV R0,#+8 \ 000002B0 C50100EF SWI +453 \ 000002B4 0010A0E3 MOV R1,#+0 \ 000002B8 02002DE9 PUSH {R1} \ 000002BC 180080E2 ADD R0,R0,#+24 \ 000002C0 013047E2 SUB R3,R7,#+1 \ 000002C4 1A20A0E3 MOV R2,#+26 \ 000002C8 3410A0E3 MOV R1,#+52 \ 000002CC 501E81E3 ORR R1,R1,#0x500 \ 000002D0 051081E0 ADD R1,R1,R5 \ 000002D4 02002DE9 PUSH {R1} \ 000002D8 0010A0E3 MOV R1,#+0 \ 000002DC 02002DE9 PUSH {R1} \ 000002E0 0810A0E3 MOV R1,#+8 \ 000002E4 02002DE9 PUSH {R1} \ 000002E8 01002DE9 PUSH {R0} \ 000002EC 340094E5 LDR R0,[R4, #+52] \ 000002F0 0210A0E3 MOV R1,#+2 \ 000002F4 4C0100EF SWI +332 5258 DrawList(); \ 000002F8 ........ BL DrawList \ 000002FC 1CD08DE2 ADD SP,SP,#+28 5259 } 5260 5261 if(IsInvertSoftKey) \ ??method0_5: \ 00000300 00109DE5 LDR R1,[SP, #+0] \ 00000304 380094E5 LDR R0,[R4, #+56] \ 00000308 048041E2 SUB R8,R1,#+4 \ 0000030C ........ LDR R1,??DataTable217 ;; IsInvertSoftKey \ 00000310 C760A0E1 ASR R6,R7,#+1 \ 00000314 001091E5 LDR R1,[R1, #+0] \ 00000318 047047E2 SUB R7,R7,#+4 \ 0000031C E09FA0E3 MOV R9,#+896 \ 00000320 000051E3 CMP R1,#+0 \ 00000324 3600000A BEQ ??method0_6 5262 { 5263 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 00000328 052089E0 ADD R2,R9,R5 \ 0000032C 341085E2 ADD R1,R5,#+52 \ 00000330 240100EF SWI +292 5264 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD),scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 00000334 1700A0E3 MOV R0,#+23 \ 00000338 2E0100EF SWI +302 \ 0000033C 0090A0E1 MOV R9,R0 \ 00000340 0000A0E3 MOV R0,#+0 \ 00000344 2E0100EF SWI +302 \ 00000348 00B0A0E1 MOV R11,R0 \ 0000034C 0500A0E3 MOV R0,#+5 \ 00000350 C50100EF SWI +453 \ 00000354 00022DE9 PUSH {R9} \ 00000358 00082DE9 PUSH {R11} \ 0000035C 0410A0E3 MOV R1,#+4 \ 00000360 02002DE9 PUSH {R1} \ 00000364 0730A0E1 MOV R3,R7 \ 00000368 002048E0 SUB R2,R8,R0 \ 0000036C 0510A0E3 MOV R1,#+5 \ 00000370 02002DE9 PUSH {R1} \ 00000374 0810A0E1 MOV R1,R8 \ 00000378 02002DE9 PUSH {R1} \ 0000037C 380094E5 LDR R0,[R4, #+56] \ 00000380 0610A0E1 MOV R1,R6 \ 00000384 4C0100EF SWI +332 5265 5266 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ 00000388 3C039AE5 LDR R0,[R10, #+828] \ 0000038C 14D08DE2 ADD SP,SP,#+20 \ 00000390 000050E3 CMP R0,#+0 \ 00000394 380094E5 LDR R0,[R4, #+56] \ 00000398 E22F8512 ADDNE R2,R5,#+904 \ 0000039C 3D208502 ADDEQ R2,R5,#+61 \ 000003A0 341085E2 ADD R1,R5,#+52 \ 000003A4 240100EF SWI +292 5267 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 000003A8 1700A0E3 MOV R0,#+23 \ 000003AC 2E0100EF SWI +302 \ 000003B0 0050A0E1 MOV R5,R0 \ 000003B4 0000A0E3 MOV R0,#+0 \ 000003B8 2E0100EF SWI +302 \ 000003BC 0070A0E1 MOV R7,R0 \ 000003C0 0500A0E3 MOV R0,#+5 \ 000003C4 C50100EF SWI +453 \ 000003C8 20002DE9 PUSH {R5} \ 000003CC 80002DE9 PUSH {R7} \ 000003D0 0110A0E3 MOV R1,#+1 \ 000003D4 02002DE9 PUSH {R1} \ 000003D8 0630A0E1 MOV R3,R6 \ 000003DC 002048E0 SUB R2,R8,R0 \ 000003E0 0510A0E3 MOV R1,#+5 \ 000003E4 02002DE9 PUSH {R1} \ 000003E8 0810A0E1 MOV R1,R8 \ 000003EC 02002DE9 PUSH {R1} \ 000003F0 380094E5 LDR R0,[R4, #+56] \ 000003F4 0310A0E3 MOV R1,#+3 \ 000003F8 4C0100EF SWI +332 \ 000003FC 14D08DE2 ADD SP,SP,#+20 \ 00000400 F78FBDE8 POP {R0-R2,R4-R11,PC} 5268 } 5269 else 5270 { 5271 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ ??method0_6: \ 00000404 3C139AE5 LDR R1,[R10, #+828] \ 00000408 000051E3 CMP R1,#+0 \ 0000040C E22F8512 ADDNE R2,R5,#+904 \ 00000410 3D208502 ADDEQ R2,R5,#+61 \ 00000414 341085E2 ADD R1,R5,#+52 \ 00000418 240100EF SWI +292 5272 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD),scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 0000041C 1700A0E3 MOV R0,#+23 \ 00000420 2E0100EF SWI +302 \ 00000424 00A0A0E1 MOV R10,R0 \ 00000428 0000A0E3 MOV R0,#+0 \ 0000042C 2E0100EF SWI +302 \ 00000430 00B0A0E1 MOV R11,R0 \ 00000434 0500A0E3 MOV R0,#+5 \ 00000438 C50100EF SWI +453 \ 0000043C 00042DE9 PUSH {R10} \ 00000440 00082DE9 PUSH {R11} \ 00000444 0410A0E3 MOV R1,#+4 \ 00000448 02002DE9 PUSH {R1} \ 0000044C 0730A0E1 MOV R3,R7 \ 00000450 002048E0 SUB R2,R8,R0 \ 00000454 0510A0E3 MOV R1,#+5 \ 00000458 02002DE9 PUSH {R1} \ 0000045C 0810A0E1 MOV R1,R8 \ 00000460 02002DE9 PUSH {R1} \ 00000464 380094E5 LDR R0,[R4, #+56] \ 00000468 0610A0E1 MOV R1,R6 \ 0000046C 4C0100EF SWI +332 5273 5274 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 00000470 380094E5 LDR R0,[R4, #+56] \ 00000474 052089E0 ADD R2,R9,R5 \ 00000478 341085E2 ADD R1,R5,#+52 \ 0000047C 240100EF SWI +292 5275 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 00000480 1700A0E3 MOV R0,#+23 \ 00000484 2E0100EF SWI +302 \ 00000488 0050A0E1 MOV R5,R0 \ 0000048C 0000A0E3 MOV R0,#+0 \ 00000490 2E0100EF SWI +302 \ 00000494 0070A0E1 MOV R7,R0 \ 00000498 0500A0E3 MOV R0,#+5 \ 0000049C C50100EF SWI +453 \ 000004A0 20002DE9 PUSH {R5} \ 000004A4 80002DE9 PUSH {R7} \ 000004A8 0110A0E3 MOV R1,#+1 \ 000004AC 02002DE9 PUSH {R1} \ 000004B0 0630A0E1 MOV R3,R6 \ 000004B4 002048E0 SUB R2,R8,R0 \ 000004B8 0510A0E3 MOV R1,#+5 \ 000004BC 02002DE9 PUSH {R1} \ 000004C0 0810A0E1 MOV R1,R8 \ 000004C4 02002DE9 PUSH {R1} \ 000004C8 380094E5 LDR R0,[R4, #+56] \ 000004CC 0310A0E3 MOV R1,#+3 \ 000004D0 4C0100EF SWI +332 \ 000004D4 28D08DE2 ADD SP,SP,#+40 5276 } 5277 /* 5278 wsprintf(data->ws2,"%d %s",addonuin[0].uin,addonuin[0].pass); 5279 DrawString(data->ws2,3,scr_h-4-(GetFontYSIZE(FONT_MEDIUM_BOLD)*3), scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 5280 */ 5281 5282 } \ 000004D8 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return \ ??method0_0: \ 000004DC ........ DC32 pictures_max \ 000004E0 ........ DC32 PBRECT \ 000004E4 ........ DC32 pictures_loaded \ 000004E8 ........ DC32 IsShowInfo \ 000004EC ........ DC32 BGPBcolor \ 000004F0 ........ DC32 PBcolor \ 000004F4 ........ DC32 total_smiles \ 000004F8 ........ DC32 xstatuses_load 5283 \ In segment CODE, align 4, keep-with-next 5284 void method1(MAIN_GUI *data,void *(*malloc_adr)(int)) 5285 { \ method1: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 5286 data->ws1=AllocWS(256); \ 00000008 400FA0E3 MOV R0,#+256 \ 0000000C 250100EF SWI +293 \ 00000010 340084E5 STR R0,[R4, #+52] 5287 data->ws2=AllocWS(256); \ 00000014 400FA0E3 MOV R0,#+256 \ 00000018 250100EF SWI +293 \ 0000001C 380084E5 STR R0,[R4, #+56] 5288 data->gui.state=1; \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 0C00C4E5 STRB R0,[R4, #+12] 5289 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 5290 \ In segment CODE, align 4, keep-with-next 5291 void method2(MAIN_GUI *data,void (*mfree_adr)(void *)) 5292 { \ method2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 5293 FreeWS(data->ws1); \ 00000008 340094E5 LDR R0,[R4, #+52] \ 0000000C 290100EF SWI +297 5294 FreeWS(data->ws2); \ 00000010 380094E5 LDR R0,[R4, #+56] \ 00000014 290100EF SWI +297 5295 data->gui.state=0; \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 0C00C4E5 STRB R0,[R4, #+12] 5296 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 5297 \ In segment CODE, align 4, keep-with-next 5298 void method3(MAIN_GUI *data,void *(*malloc_adr)(int),void (*mfree_adr)(void *)) 5299 { \ method3: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 5300 DisableIDLETMR(); \ 00000008 7F0100EF SWI +383 5301 data->gui.state=2; \ 0000000C 0200A0E3 MOV R0,#+2 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 5302 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 5303 \ In segment CODE, align 4, keep-with-next 5304 void method4(MAIN_GUI *data,void (*mfree_adr)(void *)) 5305 { 5306 if (data->gui.state!=2) \ method4: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 5307 return; 5308 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 5309 } \ 00000010 1EFF2FE1 BX LR ;; return 5310 \ In segment CODE, align 4, keep-with-next 5311 int method5(MAIN_GUI *data,GUI_MSG *msg) 5312 { \ method5: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 \ 00000008 0140A0E1 MOV R4,R1 5313 DirectRedrawGUI(); 5314 if (msg->gbsmsg->msg==KEY_DOWN) \ 0000000C 9350A0E3 MOV R5,#+147 \ 00000010 3F0100EF SWI +319 \ 00000014 041094E5 LDR R1,[R4, #+4] \ 00000018 405F85E3 ORR R5,R5,#0x100 \ 0000001C 040091E5 LDR R0,[R1, #+4] \ 00000020 050050E1 CMP R0,R5 \ 00000024 5300001A BNE ??method5_1 5315 { 5316 switch(msg->gbsmsg->submess) \ 00000028 ........ LDR R6,??DataTable232 ;; S_ICONS \ 0000002C ........ LDR R0,??DataTable217 ;; IsInvertSoftKey \ 00000030 081091E5 LDR R1,[R1, #+8] \ 00000034 3C2396E5 LDR R2,[R6, #+828] \ 00000038 003090E5 LDR R3,[R0, #+0] \ 0000003C ........ LDR R7,??DataTable233 ;; create_connect \ 00000040 B800A0E3 MOV R0,#+184 \ 00000044 680D80E3 ORR R0,R0,#0x1A00 \ 00000048 068080E0 ADD R8,R0,R6 \ 0000004C ........ LDR R0,??DataTable219 ;; WriteDefSettings \ 00000050 0390A0E3 MOV R9,#+3 \ 00000054 01A0A0E3 MOV R10,#+1 \ 00000058 00B0A0E3 MOV R11,#+0 \ 0000005C 011041E2 SUB R1,R1,#+1 \ 00000060 330051E3 CMP R1,#+51 \ 00000064 4300008A BHI ??method5_1 \ 00000068 01CF8FE2 ADR R12,??method5_0 \ 0000006C 01C0DCE7 LDRB R12,[R12, R1] \ 00000070 0CF18FE0 ADD PC,PC,R12, LSL #+2 \ ??method5_0: \ 00000074 0E404017 DC8 +14,+64,+64,+23 \ 00000078 40404040 DC8 +64,+64,+64,+64 \ 0000007C 40401D40 DC8 +64,+64,+29,+64 \ 00000080 40404040 DC8 +64,+64,+64,+64 \ 00000084 40404040 DC8 +64,+64,+64,+64 \ 00000088 40404040 DC8 +64,+64,+64,+64 \ 0000008C 400C4040 DC8 +64,+12,+64,+64 \ 00000090 40404040 DC8 +64,+64,+64,+64 \ 00000094 40404040 DC8 +64,+64,+64,+64 \ 00000098 40404040 DC8 +64,+64,+64,+64 \ 0000009C 40404040 DC8 +64,+64,+64,+64 \ 000000A0 40404028 DC8 +64,+64,+64,+40 \ 000000A4 2B30353B DC8 +43,+48,+53,+59 5317 { 5318 case ENTER_BUTTON: Enter(); break; \ ??method5_2: \ 000000A8 ........ BL Enter \ 000000AC 310000EA B ??method5_1 5319 case LEFT_SOFT: 5320 if(IsInvertSoftKey) \ ??method5_3: \ 000000B0 000053E3 CMP R3,#+0 \ 000000B4 0400000A BEQ ??method5_4 5321 { 5322 if (cltop) create_contactlist_menu(); \ 000000B8 000052E3 CMP R2,#+0 \ 000000BC 0000000A BEQ ??method5_5 \ 000000C0 ........ BL create_contactlist_menu 5323 unhooked2=1; \ ??method5_5: \ 000000C4 C8A386E5 STR R10,[R6, #+968] \ 000000C8 2A0000EA B ??method5_1 5324 } 5325 else return 1; \ ??method5_4: \ 000000CC 0100A0E3 MOV R0,#+1 \ 000000D0 F68FBDE8 POP {R1,R2,R4-R11,PC} 5326 // if (cltop) remake_clmenu(); 5327 break; 5328 case RIGHT_SOFT: 5329 if(IsInvertSoftKey) \ ??method5_6: \ 000000D4 000053E3 CMP R3,#+0 \ 000000D8 FBFFFF1A BNE ??method5_4 5330 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 5331 else 5332 { 5333 if (cltop) create_contactlist_menu(); \ 000000DC 000052E3 CMP R2,#+0 \ 000000E0 0000000A BEQ ??method5_7 \ 000000E4 ........ BL create_contactlist_menu 5334 unhooked2=1; \ ??method5_7: \ 000000E8 C8A386E5 STR R10,[R6, #+968] 5335 } 5336 case GREEN_BUTTON: 5337 disautorecconect=0; \ ??method5_8: \ 000000EC E8B286E5 STR R11,[R6, #+744] 5338 if ((connect_state==0)&&(sock==-1)) \ 000000F0 140396E5 LDR R0,[R6, #+788] \ 000000F4 000050E3 CMP R0,#+0 \ 000000F8 18039605 LDREQ R0,[R6, #+792] \ 000000FC 01007003 CMNEQ R0,#+1 \ 00000100 1C00001A BNE ??method5_1 5339 { 5340 GBS_DelTimer(&reconnect_tmr); \ ??method5_9: \ 00000104 0800A0E1 MOV R0,R8 \ 00000108 8C0100EF SWI +396 5341 DNR_TRIES=3; \ 0000010C D49386E5 STR R9,[R6, #+980] 5342 SUBPROC((void *)create_connect); \ 00000110 0700A0E1 MOV R0,R7 \ 00000114 160000EA B ??method5_10 5343 } 5344 break; 5345 case '0': 5346 SUBPROC((void*)end_socket); \ ??method5_11: \ 00000118 ........ LDR R0,??DataTable229 ;; end_socket \ 0000011C 710100EF SWI +369 5347 GBS_DelTimer(&reconnect_tmr); \ 00000120 F7FFFFEA B ??method5_9 5348 DNR_TRIES=3; 5349 SUBPROC((void *)create_connect); 5350 break; 5351 5352 //------------------------------------------------------// 5353 5354 case '1': 5355 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??method5_12: \ 00000124 EC1296E5 LDR R1,[R6, #+748] \ 00000128 000051E3 CMP R1,#+0 \ 0000012C 00A0A013 MOVNE R10,#+0 \ 00000130 ECA286E5 STR R10,[R6, #+748] 5356 SUBPROC((void*)WriteDefSettings); \ 00000134 0E0000EA B ??method5_10 5357 break; 5358 case '2': 5359 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??method5_13: \ 00000138 A01296E5 LDR R1,[R6, #+672] \ 0000013C 000051E3 CMP R1,#+0 \ 00000140 00A0A013 MOVNE R10,#+0 \ 00000144 A0A286E5 STR R10,[R6, #+672] 5360 SUBPROC((void*)WriteDefSettings); \ 00000148 090000EA B ??method5_10 5361 break; 5362 case '3': 5363 if(CurrentPrivateStatus!=1) \ ??method5_14: \ 0000014C F80296E5 LDR R0,[R6, #+760] \ 00000150 010050E3 CMP R0,#+1 \ 00000154 0300A003 MOVEQ R0,#+3 5364 SetPrivateStatus(1);//Инвиз \ 00000158 0100A013 MOVNE R0,#+1 \ 0000015C ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA \ 00000160 040000EA B ??method5_1 5365 else 5366 SetPrivateStatus(3); 5367 break; 5368 case '4': 5369 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??method5_15: \ 00000164 881296E5 LDR R1,[R6, #+648] \ 00000168 000051E3 CMP R1,#+0 \ 0000016C 00A0A013 MOVNE R10,#+0 \ 00000170 88A286E5 STR R10,[R6, #+648] 5370 SUBPROC((void*)WriteDefSettings); \ ??method5_10: \ 00000174 710100EF SWI +369 5371 break; 5372 } 5373 } 5374 5375 if(msg->gbsmsg->msg==LONG_PRESS || msg->gbsmsg->msg==KEY_DOWN) \ ??method5_1: \ 00000178 040094E5 LDR R0,[R4, #+4] \ 0000017C 022085E2 ADD R2,R5,#+2 \ 00000180 041090E5 LDR R1,[R0, #+4] \ 00000184 020051E1 CMP R1,R2 \ 00000188 05005111 CMPNE R1,R5 \ 0000018C 0900001A BNE ??method5_16 5376 { 5377 switch(msg->gbsmsg->submess) \ 00000190 080090E5 LDR R0,[R0, #+8] \ 00000194 3B0050E2 SUBS R0,R0,#+59 \ 00000198 0200000A BEQ ??method5_17 \ 0000019C 010050E2 SUBS R0,R0,#+1 \ 000001A0 0300000A BEQ ??method5_18 \ 000001A4 000000EA B ??method5_19 5378 { 5379 case UP_BUTTON: MoveUp(); break; \ ??method5_17: \ 000001A8 ........ BL MoveUp \ ??method5_19: \ 000001AC 0000A0E3 MOV R0,#+0 \ 000001B0 F68FBDE8 POP {R1,R2,R4-R11,PC} 5380 case DOWN_BUTTON: MoveDown(); break; \ ??method5_18: \ 000001B4 ........ BL MoveDown 5381 } 5382 } 5383 5384 return(0); \ ??method5_16: \ 000001B8 0000A0E3 MOV R0,#+0 \ 000001BC F68FBDE8 POP {R1,R2,R4-R11,PC} ;; return 5385 } 5386 \ In segment CODE, align 4, keep-with-next 5387 int method8(void){return(0);} \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 5388 \ In segment CODE, align 4, keep-with-next 5389 int method9(void){return(0);} \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 5390 5391 const void * const gui_methods[11]={ 5392 (void *)method0, //Redraw 5393 (void *)method1, //Create 5394 (void *)method2, //Close 5395 (void *)method3, //Focus 5396 (void *)method4, //Unfocus 5397 (void *)method5, //OnKey 5398 0, 5399 (void *)kill_data, //method7, //Destroy 5400 (void *)method8, 5401 (void *)method9, 5402 0 5403 }; 5404 5405 \ In segment CODE, align 4, keep-with-next 5406 int my_keyhook(int key, int m) 5407 { \ my_keyhook: \ 00000000 30402DE9 PUSH {R4,R5,LR} 5408 if(m==KEY_DOWN) \ 00000004 9320A0E3 MOV R2,#+147 \ 00000008 402F82E3 ORR R2,R2,#0x100 \ 0000000C 020051E1 CMP R1,R2 \ 00000010 2100001A BNE ??my_keyhook_0 5409 { 5410 #ifdef ELKA 5411 if ((key==CAMERA_BUTTON)&&(!IsUnlocked())) \ 00000014 ........ LDR R4,??DataTable232 ;; S_ICONS \ 00000018 140050E3 CMP R0,#+20 \ 0000001C 1000001A BNE ??my_keyhook_1 \ 00000020 430000EF SWI +67 \ 00000024 000050E3 CMP R0,#+0 \ 00000028 0D00001A BNE ??my_keyhook_1 5412 { 5413 GBS_StopTimer(&away_tmr); \ 0000002C B800A0E3 MOV R0,#+184 \ 00000030 600D80E3 ORR R0,R0,#0x1800 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 440100EF SWI +324 5414 msg_away_timer=AUTO_ENGADE*12; \ 0000003C ........ LDR R0,??DataTable222 ;; AUTO_ENGADE \ 00000040 0C10A0E3 MOV R1,#+12 \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 910000E0 MUL R0,R1,R0 \ 0000004C B80284E5 STR R0,[R4, #+696] 5415 away_timer(); \ 00000050 ........ BL away_timer 5416 main_d=1; \ 00000054 0100A0E3 MOV R0,#+1 \ 00000058 580284E5 STR R0,[R4, #+600] \ 0000005C 0000A0E3 MOV R0,#+0 \ 00000060 3080BDE8 POP {R4,R5,PC} 5417 } 5418 else 5419 { 5420 #endif 5421 if(Reset_timer) \ ??my_keyhook_1: \ 00000064 38009FE5 LDR R0,??my_keyhook_2 ;; Reset_timer \ 00000068 000090E5 LDR R0,[R0, #+0] \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 3080BD08 POPEQ {R4,R5,PC} 5422 { 5423 msg_away_timer=0; 5424 away_m=0; 5425 if(change_back_status) \ 00000074 C40294E5 LDR R0,[R4, #+708] \ 00000078 0050A0E3 MOV R5,#+0 \ 0000007C B85284E5 STR R5,[R4, #+696] \ 00000080 BC5284E5 STR R5,[R4, #+700] \ 00000084 000050E3 CMP R0,#+0 \ 00000088 3080BD08 POPEQ {R4,R5,PC} 5426 { 5427 CurrentStatus=status_rem; \ 0000008C C00294E5 LDR R0,[R4, #+704] \ 00000090 A80284E5 STR R0,[R4, #+680] 5428 set_my_status(); \ 00000094 ........ BL set_my_status 5429 change_back_status=0; \ 00000098 C45284E5 STR R5,[R4, #+708] 5430 } 5431 } 5432 #ifdef ELKA 5433 } 5434 #endif 5435 } 5436 return 0; \ ??my_keyhook_0: \ 0000009C 0000A0E3 MOV R0,#+0 \ 000000A0 3080BDE8 POP {R4,R5,PC} ;; return \ ??my_keyhook_2: \ 000000A4 ........ DC32 Reset_timer 5437 } \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5B41205B2573 DC8 "[A [%s] ]" \ 5D205D00 \ 0000000A 0000 DC8 0, 0 5438 5439 const RECT Canvas={0,0,0,0}; \ Canvas: \ 0000000C 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000014 ........ DC32 `?` \ 00000018 ........ DC32 `?` \ 0000001C ........ DC32 `?` \ percent_t: \ 00000034 257400 DC8 "%t" \ percent_s: \ 00000037 257300 DC8 "%s" \ percent_d: \ 0000003A 256400 DC8 "%d" \ empty_str: \ 0000003D 00 DC8 "" \ 0000003E 3C4300 DC8 "> %s <<" \ 3C3C00 \ 00000171 000000 DC8 0, 0, 0 \ 00000174 2563257400 DC8 "%c%t" \ 00000179 000000 DC8 0, 0, 0 \ 0000017C 2825642F2564 DC8 "(%d/%d)" \ 2900 \ 00000184 EEF8E8E1EAE0 DC8 "\356\370\350\341\352\340" \ 00 \ 0000018B 00 DC8 0 \ 0000018C 57616974696E DC8 "Waiting for GPRS up..." \ 6720666F7220 \ 475052532075 \ 702E2E2E00 \ 000001A3 00 DC8 0 \ 000001A4 436F6E6E6563 DC8 "Connect to %s:%d" \ 7420746F2025 \ 733A256400 \ 000001B5 000000 DC8 0, 0, 0 \ 000001B8 0A436F6E6E65 DC8 "\012Connect by IP!" \ 637420627920 \ 49502100 \ 000001C8 53656E642044 DC8 "Send DNR..." \ 4E522E2E2E00 \ 000001D4 444E52204552 DC8 "DNR ERROR %d!" \ 524F52202564 \ 2100 \ 000001E2 0000 DC8 0, 0 \ 000001E4 444E52204F6B DC8 "DNR Ok, connecting..." \ 2C20636F6E6E \ 656374696E67 \ 2E2E2E00 \ 000001FA 0000 DC8 0, 0 \ 000001FC 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 \ 00000215 000000 DC8 0, 0, 0 \ 00000218 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 \ 00000243 00 DC8 0 \ 00000244 D1E5F0E2E5F0 DC8 "\321\345\360\342\345\360 \355\345 \355\340\351\344\345\355!" \ 20EDE520EDE0 \ E9E4E5ED2100 \ 00000256 0000 DC8 0, 0 \ 00000258 426164207061 DC8 "Bad packet" \ 636B657400 \ 00000263 00 DC8 0 \ 00000264 534325643A20 DC8 "SC%d: %04X" \ 2530345800 \ 0000026F 00 DC8 0 \ 00000270 4552523A2025 DC8 "ERR: %s" \ 7300 \ 00000278 75696E256400 DC8 "uin%d" \ 0000027E 0000 DC8 0, 0 \ 00000280 4D534725643A DC8 "MSG%d: %s" \ 20257300 \ 0000028A 0000 DC8 0, 0 \ 0000028C 257325642E77 DC8 "%s%d.wav" \ 617600 \ 00000295 000000 DC8 0, 0, 0 \ 00000298 50696E672025 DC8 "Ping %d-%d seconds!" \ 642D25642073 \ 65636F6E6473 \ 2100 \ 000002AC 50696E673A20 DC8 "Ping: %d sec" \ 256420736563 \ 00 \ 000002B9 000000 DC8 0, 0, 0 \ 000002BC 2025733A2025 DC8 " %s: %02d:%02d:%02d" \ 3032643A2530 \ 32643A253032 \ 6400 \ 000002D0 537461747573 DC8 "Status change" \ 206368616E67 \ 6500 \ 000002DE 0000 DC8 0, 0 \ 000002E0 5B25733A2025 DC8 "[%s: %s]\012" \ 735D0A00 \ 000002EA 0000 DC8 0, 0 \ 000002EC 25642E202564 DC8 "%d. %d" \ 00 \ 000002F3 00 DC8 0 \ 000002F4 53746174653A DC8 53H, 74H, 61H, 74H, 65H, 3AH, 20H, 25H \ 2025 \ 000002FC 642C20525873 DC8 64H, 2CH, 20H, 52H, 58H, 73H, 74H, 61H \ 7461 \ 00000304 74653A202564 DC8 74H, 65H, 3AH, 20H, 25H, 64H, 0AH, 52H \ 0A52 \ 0000030C 783A2564622C DC8 78H, 3AH, 25H, 64H, 62H, 2CH, 54H, 78H \ 5478 \ 00000314 3A2564620A51 DC8 3AH, 25H, 64H, 62H, 0AH, 51H, 75H, 65H \ 7565 \ 0000031C 75653A202564 DC8 75H, 65H, 3AH, 20H, 25H, 64H, 62H, 0AH \ 620A \ 00000324 25730A257300 DC8 25H, 73H, 0AH, 25H, 73H, 0 \ 0000032A 0000 DC8 0, 0 \ 0000032C 0A4C6F616465 DC8 "\012Loaded %d smiles" \ 642025642073 \ 6D696C657300 \ 0000033E 0000 DC8 0, 0 \ 00000340 0A4C6F616465 DC8 "\012Loaded %d xstatus" \ 642025642078 \ 737461747573 \ 00 \ 00000353 00 DC8 0 \ 00000354 53746174653A DC8 "State: %d, RXstate: %d" \ 2025642C2052 \ 587374617465 \ 3A20256400 \ 0000036B 00 DC8 0 \ 0000036C 25742055494E DC8 "%t UIN!" \ 2100 \ 00000374 C2FBE1E5F0E8 DC8 "\302\373\341\345\360\350\362\345" \ F2E500 \ 0000037D 000000 DC8 0, 0, 0 \ 00000380 4578697400 DC8 "Exit" \ 00000385 000000 DC8 0, 0, 0 \ 00000388 434C69737400 DC8 "CList" \ 0000038E 0000 DC8 0, 0 \ 00000390 4675636B2079 DC8 "Fuck you hacker! my password sux ur ass" \ 6F7520686163 \ 6B657221206D \ 792070617373 \ 776F72642073 \ 757820757220 \ 61737300 \ 000003B8 556E72656164 DC8 "Unread: %d" \ 3A20256400 \ 000003C3 00 DC8 0 \ 000003C4 4E6174494351 DC8 "NatICQ config updated!" \ 20636F6E6669 \ 672075706461 \ 7465642100 \ 000003DB 00 DC8 0 \ 000003DC 257332323430 DC8 "%s2240.png" \ 2E706E6700 \ 000003E7 00 DC8 0 \ 000003E8 475052532075 DC8 "GPRS up, wait 10 sec..." \ 702C20776169 \ 742031302073 \ 65632E2E2E00 \ 00000400 54727920746F DC8 "Try to login..." \ 206C6F67696E \ 2E2E2E00 \ 00000410 CDE520E220F1 DC8 "\315\345 \342 \361\357\350\361\352\345" \ EFE8F1EAE500 \ 0000041C 4C6F6F706261 DC8 "Loopback" \ 636B00 \ 00000425 000000 DC8 0, 0, 0 \ 00000428 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 \ 00000450 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 \ 00000472 0000 DC8 0, 0 \ 00000474 446973636F6E DC8 "Disconnected, %d bytes not sended!" \ 6E6563746564 \ 2C2025642062 \ 79746573206E \ 6F742073656E \ 6465642100 \ 00000497 00 DC8 0 \ 00000498 25730A526563 DC8 "%s\012Reconect after %d second..." \ 6F6E65637420 \ 616674657220 \ 256420736563 \ 6F6E642E2E2E \ 00 \ 000004B7 00 DC8 0 \ 000004B8 50696E67204E DC8 "Ping None" \ 6F6E6500 \ 000004C2 0000 DC8 0, 0 \ 000004C4 C2E2E5E4E8F2 DC8 "\302\342\345\344\350\362\345 UIN/\357\340\360\356\353\374!" \ E52055494E2F \ EFE0F0EEEBFC \ 2100 \ ipc_my_name: \ 000004D8 4E6174494351 DC8 "NatICQ" \ 00 \ 000004DF 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004EF 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000 \ ipc_xtask_name: \ 000004F8 585461736B00 DC8 "XTask" \ 000004FE 0000 DC8 0, 0 \ x_status_change: \ 00000500 582D53746174 DC8 "X-Status change" \ 757320636861 \ 6E676500 \ 00000510 CAEEEDF2E0EA DC8 "\312\356\355\362\340\352\362\373" \ F2FB00 \ 00000519 000000 DC8 0, 0, 0 \ 0000051C C2E2EEE42054 DC8 "\302\342\356\344 T9: " \ 393A2000 \ 00000526 0000 DC8 0, 0 \ 00000528 C7E0EAF0FBF2 DC8 "\307\340\352\360\373\362\374" \ FC00 \ clrSelect: \ 00000530 FF000060 DC8 255, 0, 0, 96 \ fntSelect: \ 00000534 FFFF0060 DC8 255, 255, 0, 96 \ bordSelect: \ 00000538 00000060 DC8 0, 0, 0, 96 \ clrNotSelect: \ 0000053C 00000060 DC8 0, 0, 0, 96 \ bordNotSelect: \ 00000540 00000060 DC8 0, 0, 0, 96 \ fntNotSelect: \ 00000544 FFFFFF60 DC8 255, 255, 255, 96 \ gui_methods: \ 00000548 ............ DC32 method0, method1, method2, method3, method4, method5, 0H \ ............ \ ............ \ ............ \ 00000000 \ 00000564 ............ DC32 kill_data, method8, method9, 0H \ ............ \ 00000000 \ In segment DATA_C, align 4, align-sorted \ ipc_test_name: \ 00000000 7465737400 DC8 "test" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_OFFLINE: \ 00000000 4F66666C696E DC8 "Offline" \ 6500 \ In segment DATA_C, align 4, align-sorted \ S_INVISIBLE: \ 00000000 496E76697369 DC8 "Invisible" \ 626C6500 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_AWAY: \ 00000000 4177617900 DC8 "Away" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_NA: \ 00000000 4E2F4100 DC8 "N/A" \ In segment DATA_C, align 4, align-sorted \ S_OCCUPIED: \ 00000000 4F6363757069 DC8 "Occupied" \ 656400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_DND: \ 00000000 444E4400 DC8 "DND" \ In segment DATA_C, align 4, align-sorted \ S_ONLINE: \ 00000000 4F6E6C696E65 DC8 "Online" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ S_FFC: \ 00000000 46464300 DC8 "FFC" \ In segment DATA_C, align 4, align-sorted \ icons_names: \ 00000000 ............ DC32 `?`, `?` \ .... \ 00000008 ............ DC32 `?`, `?` \ .... \ 00000010 ............ DC32 `?`, `?` \ .... \ 00000018 ............ DC32 `?`, `?` \ .... \ 00000020 ............ DC32 `?`, `?` \ .... \ 00000028 ............ DC32 `?`, `?` \ .... \ 00000030 ............ DC32 `?`, `?` \ .... \ 00000038 ............ DC32 `?`, `?` \ .... \ 00000040 ............ DC32 `?`, `?` \ .... \ 00000048 ............ DC32 `?`, `?` \ .... \ 00000050 ............ DC32 `?`, `?` \ .... \ 00000058 ............ DC32 `?`, `?` \ .... \ 00000060 ............ DC32 `?`, `?` \ .... \ 00000068 ............ DC32 `?`, `?` \ .... \ In segment DATA_C, align 4, align-sorted \ input_awaymsg_desc: \ 00000000 01000000.... DC32 1, input_awaymsg_onkey, input_awaymsg_ghook, input_awaymsg_locret \ ............ \ ........ \ 00000010 00000000.... DC32 0, input_awaymsg_skt \ .... \ 00000018 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000020 080000006400 DC32 8, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ 00000038 D1EEEEE1F9E5 DC8 "\321\356\356\341\371\345\355\350\345:\012" \ EDE8E53A0A00 \ input_awaymsg_hdr: \ 00000044 000000008300 DC16 0, 0, 131, 21 \ 1500 \ 0000004C 00000000.... DC32 0H, `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ clmenu_sk: \ 00000000 18000000 DC16 24, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 clmenu_sk_r \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ menu_skt: \ 00000000 ........0000 DC32 menu_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ clmenu_skt: \ 00000000 ........0000 DC32 clmenu_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ _skt: \ 00000000 ........0000 DC32 _sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ CmdSoftkeys: \ 00000000 000000000100 DC32 0, 1, 2 \ 000002000000 \ In segment DATA_C, align 4, align-sorted \ cmd_sk: \ 00000000 04000000 DC16 4, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ cmd_Back_skt: \ 00000000 ........0000 DC32 cmd_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 53656C656374 DC8 "Select command" \ 20636F6D6D61 \ 6E6400 \ 0000000F 00 DC8 0 \ 00000010 46494C45204E DC8 "FILE NOT FOUND!" \ 4F5420464F55 \ 4E442100 \ 00000020 08000000.... DC32 8, CmdMenuKeyHook, CmdMenuGHook, 0H, CmdSoftkeys, cmd_Back_skt, 16 \ ............ \ 00000000.... \ ............ \ 10000000 \ 0000003C ........0000 DC32 CmdMenuItemHandler, 0H, 0H, 0 \ 000000000000 \ 00000000 \ In segment DATA_C, align 4, align-sorted \ font: \ 00000000 08000000 DC32 8 \ In segment DATA_C, align 1, align-sorted \ _t: \ 00000000 257400 DC8 "%t" 5440 \ In segment CODE, align 4, keep-with-next 5441 void maincsm_oncreate(CSM_RAM *data) 5442 { \ maincsm_oncreate: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0050A0E1 MOV R5,R0 5443 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000008 4000A0E3 MOV R0,#+64 5444 MAIN_CSM*csm=(MAIN_CSM*)data; 5445 zeromem(main_gui,sizeof(MAIN_GUI)); 5446 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,??DataTable235 ;; `?` \ 00000034 010040E2 SUB R0,R0,#+1 \ 00000038 0C7084E5 STR R7,[R4, #+12] \ 0000003C B001C4E1 STRH R0,[R4, #+16] \ 00000040 B211C4E1 STRH R1,[R4, #+18] 5447 main_gui->gui.canvas=(void *)(&Canvas); \ 00000044 0C0084E2 ADD R0,R4,#+12 \ 00000048 000086E5 STR R0,[R6, #+0] 5448 // main_gui->gui.flag30=2; 5449 main_gui->gui.methods=(void *)gui_methods; \ 0000004C 4800A0E3 MOV R0,#+72 \ 00000050 500E80E3 ORR R0,R0,#0x500 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 040086E5 STR R0,[R6, #+4] 5450 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 0000005C 158000EF SWI +32789 \ 00000060 200086E5 STR R0,[R6, #+32] 5451 csm->csm.state=0; \ 00000064 107085E5 STR R7,[R5, #+16] 5452 csm->csm.unk1=0; \ 00000068 147085E5 STR R7,[R5, #+20] 5453 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,??DataTable232 ;; S_ICONS \ 0000007C 940285E5 STR R0,[R5, #+660] 5454 ews=AllocWS(16384); \ 00000080 400CA0E3 MOV R0,#+16384 \ 00000084 250100EF SWI +293 \ 00000088 B00285E5 STR R0,[R5, #+688] 5455 // MutexCreate(&contactlist_mtx); 5456 DNR_TRIES=3; \ 0000008C 0300A0E3 MOV R0,#+3 \ 00000090 D40385E5 STR R0,[R5, #+980] 5457 // SUBPROC((void *)InitSmiles); 5458 // SUBPROC((void *)create_connect); 5459 wsBuffer=AllocWS(4096); \ 00000094 400DA0E3 MOV R0,#+4096 \ 00000098 250100EF SWI +293 \ 0000009C 680285E5 STR R0,[R5, #+616] 5460 OneSecTmr(); \ 000000A0 ........ BL OneSecTmr 5461 5462 if(ParseUINS()!=0) \ 000000A4 ........ _BLF ParseUINS,??ParseUINS??rA \ 000000A8 000050E3 CMP R0,#+0 \ 000000AC 0200000A BEQ ??maincsm_oncreate_0 5463 { 5464 USE_ADD_UIN=1; \ 000000B0 0100A0E3 MOV R0,#+1 \ 000000B4 080485E5 STR R0,[R5, #+1032] 5465 InitXStatusesImg(); \ 000000B8 ........ _BLF InitXStatusesImg,??InitXStatusesImg??rA 5466 } 5467 5468 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ ??maincsm_oncreate_0: \ 000000BC ........ LDR R2,??DataTable225 ;; process_active_timer \ 000000C0 871EA0E3 MOV R1,#+2160 \ 000000C4 C800A0E3 MOV R0,#+200 \ 000000C8 680D80E3 ORR R0,R0,#0x1A00 \ 000000CC 050080E0 ADD R0,R0,R5 \ 000000D0 4D0000EF SWI +77 5469 5470 if(!USE_ADD_UIN) \ 000000D4 080495E5 LDR R0,[R5, #+1032] \ 000000D8 000050E3 CMP R0,#+0 \ 000000DC F080BD18 POPNE {R4-R7,PC} 5471 { 5472 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000000E0 ........ LDR R0,??DataTable226 ;; UIN \ 000000E4 3A1084E2 ADD R1,R4,#+58 \ 000000E8 002090E5 LDR R2,[R0, #+0] \ 000000EC DE00A0E3 MOV R0,#+222 \ 000000F0 400E80E3 ORR R0,R0,#0x400 \ 000000F4 040080E0 ADD R0,R0,R4 \ 000000F8 160000EF SWI +22 5473 gipc.name_to=ipc_my_name; \ 000000FC D800A0E3 MOV R0,#+216 \ 00000100 400E80E3 ORR R0,R0,#0x400 \ 00000104 041080E0 ADD R1,R0,R4 \ 00000108 BC1085E5 STR R1,[R5, #+188] 5474 gipc.name_from=ipc_my_name; \ 0000010C 040080E0 ADD R0,R0,R4 \ 00000110 C00085E5 STR R0,[R5, #+192] 5475 gipc.data=(void *)-1; \ 00000114 0700E0E1 MVN R0,R7 \ 00000118 C40085E5 STR R0,[R5, #+196] 5476 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 0000011C BC3085E2 ADD R3,R5,#+188 \ 00000120 0120A0E3 MOV R2,#+1 \ 00000124 B010A0E3 MOV R1,#+176 \ 00000128 DE1C81E3 ORR R1,R1,#0xDE00 \ 0000012C 0900A0E3 MOV R0,#+9 \ 00000130 420C80E3 ORR R0,R0,#0x4200 \ 00000134 000100EF SWI +256 5477 } 5478 /* 5479 InitXStatusesImg(); 5480 //InitSmiles(); Это вызовется из InitXStatusesImg 5481 create_connect(); 5482 silenthide=1; 5483 gipc.name_to=ipc_xtask_name; 5484 gipc.name_from=ipc_my_name; 5485 gipc.data=0; 5486 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); 5487 */ 5488 } \ 00000138 F080BDE8 POP {R4-R7,PC} ;; return 5489 \ In segment CODE, align 4, keep-with-next 5490 void maincsm_onclose(CSM_RAM *csm) 5491 { \ maincsm_onclose: \ 00000000 10402DE9 PUSH {R4,LR} 5492 WriteDefSettings(); 5493 FreeWS(wsBuffer); \ 00000004 ........ LDR R4,??DataTable232 ;; S_ICONS \ 00000008 ........ BL WriteDefSettings \ 0000000C 680294E5 LDR R0,[R4, #+616] \ 00000010 290100EF SWI +297 5494 //GBS_DelTimer(&tmr_dorecv); 5495 RemoveKeybMsgHook((void *)my_keyhook); \ 00000014 ........ LDR R0,??DataTable228 ;; my_keyhook \ 00000018 2D0100EF SWI +301 5496 GBS_DelTimer(&tmr_active); \ 0000001C C800A0E3 MOV R0,#+200 \ 00000020 680D80E3 ORR R0,R0,#0x1A00 \ 00000024 040080E0 ADD R0,R0,R4 \ 00000028 8C0100EF SWI +396 5497 GBS_DelTimer(&tmr_vibra); \ 0000002C A800A0E3 MOV R0,#+168 \ 00000030 680D80E3 ORR R0,R0,#0x1A00 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 8C0100EF SWI +396 5498 GBS_DelTimer(&reconnect_tmr); \ 0000003C B800A0E3 MOV R0,#+184 \ 00000040 680D80E3 ORR R0,R0,#0x1A00 \ 00000044 040080E0 ADD R0,R0,R4 \ 00000048 8C0100EF SWI +396 5499 GBS_DelTimer(&tmr_illumination); \ 0000004C 9800A0E3 MOV R0,#+152 \ 00000050 680D80E3 ORR R0,R0,#0x1A00 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 8C0100EF SWI +396 5500 GBS_DelTimer(&tm22); \ 0000005C C400A0E3 MOV R0,#+196 \ 00000060 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000064 040080E0 ADD R0,R0,R4 \ 00000068 8C0100EF SWI +396 5501 #ifdef ELKA 5502 GBS_DelTimer(&sli_tmr); \ 0000006C 8800A0E3 MOV R0,#+136 \ 00000070 640D80E3 ORR R0,R0,#0x1900 \ 00000074 040080E0 ADD R0,R0,R4 \ 00000078 8C0100EF SWI +396 5503 #endif 5504 GBS_DelTimer(&remind_tmr); \ 0000007C D800A0E3 MOV R0,#+216 \ 00000080 600D80E3 ORR R0,R0,#0x1800 \ 00000084 040080E0 ADD R0,R0,R4 \ 00000088 8C0100EF SWI +396 5505 GBS_DelTimer(&ping_tmr); \ 0000008C 3000A0E3 MOV R0,#+48 \ 00000090 580D80E3 ORR R0,R0,#0x1600 \ 00000094 040080E0 ADD R0,R0,R4 \ 00000098 8C0100EF SWI +396 5506 GBS_DelTimer(&uptime_tmr); \ 0000009C E800A0E3 MOV R0,#+232 \ 000000A0 600D80E3 ORR R0,R0,#0x1800 \ 000000A4 040080E0 ADD R0,R0,R4 \ 000000A8 8C0100EF SWI +396 5507 GBS_DelTimer(&autoChangeStatus); \ 000000AC C800A0E3 MOV R0,#+200 \ 000000B0 600D80E3 ORR R0,R0,#0x1800 \ 000000B4 040080E0 ADD R0,R0,R4 \ 000000B8 8C0100EF SWI +396 5508 #ifdef NEWSGOLD 5509 GBS_DelTimer(&tracktmr); \ 000000BC F800A0E3 MOV R0,#+248 \ 000000C0 600D80E3 ORR R0,R0,#0x1800 \ 000000C4 040080E0 ADD R0,R0,R4 \ 000000C8 8C0100EF SWI +396 5510 GBS_DelTimer(&scrsTmr); \ 000000CC 5D0D84E2 ADD R0,R4,#+5952 \ 000000D0 8C0100EF SWI +396 5511 #endif 5512 GBS_DelTimer(&incs2); \ 000000D4 B400A0E3 MOV R0,#+180 \ 000000D8 7C0D80E3 ORR R0,R0,#0x1F00 \ 000000DC 040080E0 ADD R0,R0,R4 \ 000000E0 8C0100EF SWI +396 5513 GBS_DelTimer(&develop); \ 000000E4 E400A0E3 MOV R0,#+228 \ 000000E8 740D80E3 ORR R0,R0,#0x1D00 \ 000000EC 040080E0 ADD R0,R0,R4 \ 000000F0 8C0100EF SWI +396 5514 GBS_DelTimer(&away_tmr); \ 000000F4 B800A0E3 MOV R0,#+184 \ 000000F8 600D80E3 ORR R0,R0,#0x1800 \ 000000FC 040080E0 ADD R0,R0,R4 \ 00000100 8C0100EF SWI +396 5515 SetVibration(0); \ 00000104 0000A0E3 MOV R0,#+0 \ 00000108 7C0000EF SWI +124 5516 FreeTemplates(); \ 0000010C ........ BL FreeTemplates 5517 cmdFree(); \ 00000110 ........ BL cmdFree 5518 #ifdef kluchnik 5519 FreeBotMessage(); \ 00000114 ........ BL FreeBotMessage 5520 #endif 5521 FreeCLIST(); \ 00000118 ........ _BLF FreeCLIST,??FreeCLIST??rA 5522 free_ICONS(); \ 0000011C ........ BL free_ICONS 5523 // FreeSmiles(); 5524 FreeWS(ews); \ 00000120 B00294E5 LDR R0,[R4, #+688] \ 00000124 290100EF SWI +297 5525 FreeXStatusText(); \ 00000128 ........ _BLF FreeXStatusText,??FreeXStatusText??rA 5526 PrintLibFree(); \ 0000012C ........ _BLF PrintLibFree,??PrintLibFree??rA 5527 SUBPROC((void *)FreeSmiles); \ 00000130 24009FE5 LDR R0,??maincsm_onclose_0 ;; FreeSmiles \ 00000134 710100EF SWI +369 5528 SUBPROC((void *)FreeXStatusesImg); \ 00000138 20009FE5 LDR R0,??maincsm_onclose_0+0x4 ;; FreeXStatusesImg \ 0000013C 710100EF SWI +369 5529 SUBPROC((void *)end_socket); \ 00000140 ........ LDR R0,??DataTable229 ;; end_socket \ 00000144 710100EF SWI +369 5530 SUBPROC((void *)ClearSendQ); \ 00000148 ........ LDR R0,??DataTable261 ;; ClearSendQ \ 0000014C 710100EF SWI +369 5531 SUBPROC((void *)ElfKiller); \ 00000150 ........ LDR R0,??DataTable231 ;; ElfKiller \ 00000154 710100EF SWI +369 5532 } \ 00000158 1080BDE8 POP {R4,PC} ;; return \ ??maincsm_onclose_0: \ 0000015C ........ DC32 FreeSmiles \ 00000160 ........ DC32 FreeXStatusesImg 5533 \ In segment CODE, align 4, keep-with-next 5534 void do_reconnect(void) 5535 { 5536 if (is_gprs_online) \ do_reconnect: \ 00000000 ........ LDR R0,??DataTable232 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 341390E5 LDR R1,[R0, #+820] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 5537 { 5538 DNR_TRIES=3; \ 00000014 0310A0E3 MOV R1,#+3 \ 00000018 D41380E5 STR R1,[R0, #+980] 5539 SUBPROC((void*)create_connect); \ 0000001C ........ LDR R0,??DataTable233 ;; create_connect \ 00000020 710100EF SWI +369 5540 } 5541 } \ 00000024 0080BDE8 POP {PC} ;; return 5542 \ In segment CODE, align 4, keep-with-next 5543 void CheckDoubleRun(void) 5544 { \ CheckDoubleRun: \ 00000000 10402DE9 PUSH {R4,LR} 5545 int csm_id; 5546 if ((csm_id=(int)(gipc.data))!=-1) \ 00000004 ........ LDR R4,??DataTable263 ;; S_ICONS \ 00000008 C40094E5 LDR R0,[R4, #+196] \ 0000000C 010070E3 CMN R0,#+1 \ 00000010 1500000A BEQ ??CheckDoubleRun_0 5547 { 5548 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable235 ;; `?` \ 00000018 F820A0E3 MOV R2,#+248 \ 0000001C 402E82E3 ORR R2,R2,#0x400 \ 00000020 012082E0 ADD R2,R2,R1 \ 00000024 BC2084E5 STR R2,[R4, #+188] 5549 gipc.name_from=ipc_my_name; \ 00000028 D820A0E3 MOV R2,#+216 \ 0000002C 402E82E3 ORR R2,R2,#0x400 \ 00000030 011082E0 ADD R1,R2,R1 \ 00000034 C01084E5 STR R1,[R4, #+192] 5550 gipc.data=(void *)csm_id; \ 00000038 C40084E5 STR R0,[R4, #+196] 5551 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 0000003C BC3084E2 ADD R3,R4,#+188 \ 00000040 0220A0E3 MOV R2,#+2 \ 00000044 B010A0E3 MOV R1,#+176 \ 00000048 DE1C81E3 ORR R1,R1,#0xDE00 \ 0000004C 0900A0E3 MOV R0,#+9 \ 00000050 420C80E3 ORR R0,R0,#0x4200 \ 00000054 000100EF SWI +256 5552 LockSched(); \ 00000058 460100EF SWI +326 5553 CloseCSM(maincsm_id); \ 0000005C 900294E5 LDR R0,[R4, #+656] \ 00000060 FC0100EF SWI +508 5554 //ShowMSG(1,(int)LG_ALREADY_STARTED); 5555 UnlockSched(); \ 00000064 470100EF SWI +327 \ 00000068 1080BDE8 POP {R4,PC} 5556 } 5557 else 5558 if(!USE_ADD_UIN) \ ??CheckDoubleRun_0: \ 0000006C 080494E5 LDR R0,[R4, #+1032] \ 00000070 000050E3 CMP R0,#+0 \ 00000074 0200001A BNE ??CheckDoubleRun_1 5559 { 5560 InitXStatusesImg(); \ 00000078 ........ _BLF InitXStatusesImg,??InitXStatusesImg??rA 5561 //InitSmiles(); Это вызовется из InitXStatusesImg 5562 create_connect(); \ 0000007C ........ BL create_connect \ 00000080 1080BDE8 POP {R4,PC} 5563 } 5564 else 5565 { 5566 InitXStatusesImg(); \ ??CheckDoubleRun_1: \ 00000084 ........ _BLF InitXStatusesImg,??InitXStatusesImg??rA 5567 USE_ADD_UIN=1; \ 00000088 0100A0E3 MOV R0,#+1 \ 0000008C 080484E5 STR R0,[R4, #+1032] 5568 } 5569 5570 } \ 00000090 1080BDE8 POP {R4,PC} ;; return 5571 5572 5573 5574 //------------------------------------------------------------// 5575 5576 5577 #define idlegui_id(icsm) (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) \ In segment CODE, align 4, keep-with-next 5578 int checkGui(int id) 5579 { \ checkGui: \ 00000000 10402DE9 PUSH {R4,LR} 5580 int retval = 0; \ 00000004 0040A0E3 MOV R4,#+0 5581 if (IsGuiOnTop(id)) \ 00000008 350100EF SWI +309 \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0600000A BEQ ??checkGui_0 5582 { 5583 GUI* igui = GetTopGUI(); 5584 if (igui) \ 00000014 4D0100EF SWI +333 \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 0300000A BEQ ??checkGui_0 5585 { 5586 #ifdef ELKA 5587 canvasdata = BuildCanvas(); \ 00000020 F18000EF SWI +33009 \ 00000024 0C109FE5 LDR R1,??checkGui_1 ;; S_ICONS + 608 5588 retval = 1; \ 00000028 0140A0E3 MOV R4,#+1 \ 0000002C 000081E5 STR R0,[R1, #+0] 5589 #else 5590 void *idata = GetDataOfItemByID(igui, 2); 5591 if (idata) 5592 { 5593 canvasdata = ((void **)idata)[DISPLACE_OF_IDLECANVAS / 4]; 5594 retval = 1; 5595 } 5596 #endif 5597 } 5598 } 5599 return retval; \ ??checkGui_0: \ 00000030 0400A0E1 MOV R0,R4 \ 00000034 1080BDE8 POP {R4,PC} ;; return \ ??checkGui_1: \ 00000038 ........ DC32 S_ICONS + 608 5600 } 5601 5602 5603 //-------------------------------------------------------------// 5604 #define IPC_GAME 7 5605 5606 typedef struct{ 5607 unsigned long uin; 5608 char *msg; 5609 }IPCmsg; 5610 \ In segment CODE, align 4, keep-with-next 5611 int maincsm_onmessage(CSM_RAM *data,GBS_MSG *msg) 5612 { \ maincsm_onmessage: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} 5613 5614 // char ss[100]; 5615 MAIN_CSM *csm=(MAIN_CSM*)data; 5616 { 5617 //IPC 5618 if (msg->msg==MSG_IPC) \ 00000004 ........ LDR R5,??DataTable236 ;; S_ICONS \ 00000008 20D04DE2 SUB SP,SP,#+32 \ 0000000C ........ LDR R7,??DataTable237 ;; `?` \ 00000010 0140A0E1 MOV R4,R1 \ 00000014 2810A0E3 MOV R1,#+40 \ 00000018 6C1D81E3 ORR R1,R1,#0x1B00 \ 0000001C 051081E0 ADD R1,R1,R5 \ 00000020 00108DE5 STR R1,[SP, #+0] \ 00000024 040094E5 LDR R0,[R4, #+4] \ 00000028 0060A0E3 MOV R6,#+0 \ 0000002C B010A0E3 MOV R1,#+176 \ 00000030 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000034 010050E1 CMP R0,R1 \ 00000038 9900001A BNE ??maincsm_onmessage_2 5619 { 5620 IPC_REQ *ipc; 5621 if ((ipc=(IPC_REQ*)msg->data0)) \ 0000003C 0C8094E5 LDR R8,[R4, #+12] \ 00000040 000058E3 CMP R8,#+0 \ 00000044 9600000A BEQ ??maincsm_onmessage_2 5622 { 5623 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 00000048 000098E5 LDR R0,[R8, #+0] \ 0000004C D890A0E3 MOV R9,#+216 \ 00000050 409E89E3 ORR R9,R9,#0x400 \ 00000054 071089E0 ADD R1,R9,R7 \ 00000058 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 0000005C 000050E3 CMP R0,#+0 \ 00000060 8F00001A BNE ??maincsm_onmessage_2 5624 { 5625 switch (msg->submess) \ 00000064 081094E5 LDR R1,[R4, #+8] \ 00000068 040098E5 LDR R0,[R8, #+4] \ 0000006C 011041E2 SUB R1,R1,#+1 \ 00000070 050051E3 CMP R1,#+5 \ 00000074 8A00008A BHI ??maincsm_onmessage_2 \ 00000078 012F8FE2 ADR R2,??maincsm_onmessage_0 \ 0000007C 0120D2E7 LDRB R2,[R2, R1] \ 00000080 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_0: \ 00000084 010A1127 DC8 +1,+10,+17,+39 \ 00000088 64160000 DC8 +100,+22,+0,+0 5626 { 5627 case IPC_CHECK_DOUBLERUN: 5628 //Если приняли свое собственное сообщение, значит запускаем чекер 5629 if (ipc->name_from==ipc_my_name) SUBPROC((void *)CheckDoubleRun); \ ??maincsm_onmessage_3: \ 0000008C 071089E0 ADD R1,R9,R7 \ 00000090 010050E1 CMP R0,R1 \ 00000094 0200001A BNE ??maincsm_onmessage_4 \ 00000098 900B9FE5 LDR R0,??maincsm_onmessage_5 ;; CheckDoubleRun \ 0000009C 710100EF SWI +369 \ 000000A0 7F0000EA B ??maincsm_onmessage_2 5630 else ipc->data=(void *)maincsm_id; \ ??maincsm_onmessage_4: \ 000000A4 900295E5 LDR R0,[R5, #+656] \ 000000A8 080088E5 STR R0,[R8, #+8] \ 000000AC 7C0000EA B ??maincsm_onmessage_2 5631 break; 5632 case IPC_SMILE_PROCESSED: 5633 //Только собственные смайлы ;) 5634 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextSmile); \ ??maincsm_onmessage_6: \ 000000B0 071089E0 ADD R1,R9,R7 \ 000000B4 010050E1 CMP R0,R1 \ 000000B8 0100001A BNE ??maincsm_onmessage_7 \ 000000BC 700B9FE5 LDR R0,??maincsm_onmessage_5+0x4 ;; ProcessNextSmile \ ??maincsm_onmessage_8: \ 000000C0 710100EF SWI +369 5635 SMART_REDRAW(); \ ??maincsm_onmessage_7: \ 000000C4 ........ BL SMART_REDRAW \ 000000C8 750000EA B ??maincsm_onmessage_2 5636 break; 5637 case IPC_XSTATUSIMG_PROCESSED: 5638 //Только собственные иксстатусы ;) 5639 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextXStatImg); \ ??maincsm_onmessage_9: \ 000000CC 071089E0 ADD R1,R9,R7 \ 000000D0 010050E1 CMP R0,R1 \ 000000D4 FAFFFF1A BNE ??maincsm_onmessage_7 \ 000000D8 580B9FE5 LDR R0,??maincsm_onmessage_5+0x8 ;; ProcessNextXStatImg \ 000000DC F7FFFFEA B ??maincsm_onmessage_8 5640 SMART_REDRAW(); 5641 break; 5642 case IPC_ONESECOND: 5643 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_10: \ 000000E0 071089E0 ADD R1,R9,R7 \ 000000E4 010050E1 CMP R0,R1 \ 000000E8 6D00001A BNE ??maincsm_onmessage_2 5644 { 5645 //if(!(--on_off_timer)) on_off_timer=0;//таймер показа подключившихся/отключившихся 5646 if(on_off_timer>0) \ 000000EC 580395E5 LDR R0,[R5, #+856] \ 000000F0 010050E3 CMP R0,#+1 5647 on_off_timer--; \ 000000F4 010040A2 SUBGE R0,R0,#+1 \ 000000F8 580385A5 STRGE R0,[R5, #+856] \ 000000FC 680000AA BGE ??maincsm_onmessage_2 5648 else 5649 if(on_off_timer!=-1) \ 00000100 010070E3 CMN R0,#+1 \ 00000104 6600000A BEQ ??maincsm_onmessage_2 5650 { 5651 on_off_timer=-1; \ 00000108 0600E0E1 MVN R0,R6 \ 0000010C 580385E5 STR R0,[R5, #+856] 5652 zeromem(on_off_buf,128); \ 00000110 00009DE5 LDR R0,[SP, #+0] \ 00000114 8010A0E3 MOV R1,#+128 \ 00000118 1D0100EF SWI +285 5653 UpdateCLheader(); \ 0000011C ........ BL UpdateCLheader \ 00000120 5F0000EA B ??maincsm_onmessage_2 5654 } 5655 } 5656 break; 5657 case IPC_TENSECONDS: 5658 //Только свое сообщение 5659 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_11: \ 00000124 071089E0 ADD R1,R9,R7 \ 00000128 010050E1 CMP R0,R1 \ 0000012C 5C00001A BNE ??maincsm_onmessage_2 5660 { 5661 CLIST *t=(CLIST *)cltop; 5662 int f=0; 5663 if(main_msg_timer2!=0) main_msg_timer2--; else main_msg_timer2=0; \ 00000130 E00395E5 LDR R0,[R5, #+992] \ 00000134 3C8395E5 LDR R8,[R5, #+828] \ 00000138 0090A0E3 MOV R9,#+0 \ 0000013C 000050E3 CMP R0,#+0 \ 00000140 1900000A BEQ ??maincsm_onmessage_12 \ 00000144 010040E2 SUB R0,R0,#+1 \ 00000148 E00385E5 STR R0,[R5, #+992] \ 0000014C 160000EA B ??maincsm_onmessage_12 5664 while(t) 5665 { 5666 if(t->just_now) \ ??maincsm_onmessage_13: \ 00000150 740098E5 LDR R0,[R8, #+116] \ 00000154 000050E3 CMP R0,#+0 \ 00000158 0200000A BEQ ??maincsm_onmessage_14 5667 { 5668 if (!(--(t->just_now))) f=1; \ 0000015C 010050E2 SUBS R0,R0,#+1 \ 00000160 740088E5 STR R0,[R8, #+116] \ 00000164 0190A003 MOVEQ R9,#+1 5669 } 5670 if (t->isactive) \ ??maincsm_onmessage_14: \ 00000168 A80098E5 LDR R0,[R8, #+168] \ 0000016C 000050E3 CMP R0,#+0 \ 00000170 0C00000A BEQ ??maincsm_onmessage_15 5671 { 5672 if (!(--(t->isactive))) \ 00000174 010050E2 SUBS R0,R0,#+1 \ 00000178 A80088E5 STR R0,[R8, #+168] \ 0000017C 0900001A BNE ??maincsm_onmessage_15 5673 { 5674 f=1; //Если дошли до 0 хотя бы один раз - надо перерисовать меню 5675 if ((t->log)&&(!t->isunread)) \ 00000180 9C0098E5 LDR R0,[R8, #+156] \ 00000184 0190A0E3 MOV R9,#+1 \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 0500000A BEQ ??maincsm_onmessage_15 \ 00000190 8C0098E5 LDR R0,[R8, #+140] \ 00000194 000050E3 CMP R0,#+0 \ 00000198 0200001A BNE ??maincsm_onmessage_15 5676 { 5677 FreeLOGQ(&t->log); \ 0000019C 9C0088E2 ADD R0,R8,#+156 \ 000001A0 ........ BL FreeLOGQ 5678 t->msg_count=0; \ 000001A4 AC6088E5 STR R6,[R8, #+172] 5679 } 5680 } 5681 } 5682 t=(CLIST *)(t->next); \ ??maincsm_onmessage_15: \ 000001A8 008098E5 LDR R8,[R8, #+0] 5683 } \ ??maincsm_onmessage_12: \ 000001AC 000058E3 CMP R8,#+0 \ 000001B0 E6FFFF1A BNE ??maincsm_onmessage_13 5684 if (f) \ 000001B4 000059E3 CMP R9,#+0 \ 000001B8 0A00000A BEQ ??maincsm_onmessage_16 5685 { 5686 CLIST *oldt=NULL; 5687 if (contactlist_menu_id) \ 000001BC 441395E5 LDR R1,[R5, #+836] \ 000001C0 0000A0E3 MOV R0,#+0 \ 000001C4 000051E3 CMP R1,#+0 \ 000001C8 0400000A BEQ ??maincsm_onmessage_17 5688 { 5689 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 000001CC 440395E5 LDR R0,[R5, #+836] \ 000001D0 0010A0E3 MOV R1,#+0 \ 000001D4 090200EF SWI +521 \ 000001D8 8F0100EF SWI +399 \ 000001DC ........ _BLF FindContactByN,??FindContactByN??rA 5690 } 5691 RecountMenu(oldt,1); \ ??maincsm_onmessage_17: \ 000001E0 0110A0E3 MOV R1,#+1 \ 000001E4 ........ BL RecountMenu 5692 } 5693 if (time_to_stop_t9) \ ??maincsm_onmessage_16: \ 000001E8 E80395E5 LDR R0,[R5, #+1000] \ 000001EC 000050E3 CMP R0,#+0 \ 000001F0 2B00000A BEQ ??maincsm_onmessage_2 5694 { 5695 if (!(--time_to_stop_t9)) \ 000001F4 010050E2 SUBS R0,R0,#+1 \ 000001F8 E80385E5 STR R0,[R5, #+1000] \ 000001FC 2800001A BNE ??maincsm_onmessage_2 5696 { 5697 if (IsGuiOnTop(edchat_id)) RefreshGUI(); \ 00000200 480395E5 LDR R0,[R5, #+840] \ 00000204 350100EF SWI +309 \ 00000208 000050E3 CMP R0,#+0 \ 0000020C 2400000A BEQ ??maincsm_onmessage_2 \ 00000210 960100EF SWI +406 \ 00000214 220000EA B ??maincsm_onmessage_2 5698 } 5699 } 5700 } 5701 break; 5702 case IPC_SENDMSG: ; //IPC_SENDMSG by BoBa 26.06.07 5703 int l=strlen(((IPCMsg *)(ipc->data))->msg); \ ??maincsm_onmessage_18: \ 00000218 080098E5 LDR R0,[R8, #+8] \ 0000021C 040090E5 LDR R0,[R0, #+4] \ 00000220 1B0000EF SWI +27 \ 00000224 0090A0E1 MOV R9,R0 5704 TPKT *msg=malloc(sizeof(PKT)+l+30); \ 00000228 260089E2 ADD R0,R9,#+38 \ 0000022C 140000EF SWI +20 \ 00000230 00A0A0E1 MOV R10,R0 5705 msg->pkt.uin=((IPCMsg *)(ipc->data))->uin; \ 00000234 080098E5 LDR R0,[R8, #+8] 5706 msg->pkt.type=T_SENDMSG; 5707 msg->pkt.data_len=l; 5708 memcpy(msg->data,((IPCMsg *)(ipc->data))->msg,l); \ 00000238 0920A0E1 MOV R2,R9 \ 0000023C 000090E5 LDR R0,[R0, #+0] \ 00000240 00008AE5 STR R0,[R10, #+0] \ 00000244 0200A0E3 MOV R0,#+2 \ 00000248 B400CAE1 STRH R0,[R10, #+4] \ 0000024C B690CAE1 STRH R9,[R10, #+6] \ 00000250 080098E5 LDR R0,[R8, #+8] \ 00000254 041090E5 LDR R1,[R0, #+4] \ 00000258 08008AE2 ADD R0,R10,#+8 \ 0000025C 1E0100EF SWI +286 5709 //slientsend=1; 5710 if(strstr(msg->data,PASS)==0) \ 00000260 ........ LDR R1,??DataTable258 ;; PASS \ 00000264 08008AE2 ADD R0,R10,#+8 \ 00000268 180100EF SWI +280 \ 0000026C 000050E3 CMP R0,#+0 \ 00000270 0400000A BEQ ??maincsm_onmessage_19 5711 { 5712 SENDMSGCOUNT++; //Номер сообщения 5713 SUBPROC((void *)SendAnswer,0,msg); 5714 } 5715 else 5716 { 5717 msg->pkt.data_len=40; \ 00000274 2800A0E3 MOV R0,#+40 \ 00000278 B600CAE1 STRH R0,[R10, #+6] 5718 strcpy(msg->data, "Fuck you hacker! my password sux ur ass"); \ 0000027C E41F87E2 ADD R1,R7,#+912 \ 00000280 08008AE2 ADD R0,R10,#+8 \ 00000284 1A0000EF SWI +26 5719 SENDMSGCOUNT++; //Номер сообщения \ ??maincsm_onmessage_19: \ 00000288 980295E5 LDR R0,[R5, #+664] 5720 SUBPROC((void *)SendAnswer,0,msg); \ 0000028C 0A20A0E1 MOV R2,R10 \ 00000290 010080E2 ADD R0,R0,#+1 \ 00000294 980285E5 STR R0,[R5, #+664] \ 00000298 ........ LDR R0,??DataTable259 ;; SendAnswer \ 0000029C 0010A0E3 MOV R1,#+0 \ 000002A0 710100EF SWI +369 5721 } 5722 break; 5723 } 5724 } 5725 } 5726 } 5727 //Нарисуем иконочку моего статуса 5728 //#define idlegui_id (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 5729 //CSM_RAM *icsm=FindCSMbyID(CSM_root()->idle_id); 5730 // if (IsGuiOnTop(idlegui_id)/*&&IsUnlocked()*/) //Если IdleGui на самом верху 5731 // { 5732 void *icsm; 5733 icsm=FindCSMbyID(CSM_root()->idle_id); \ ??maincsm_onmessage_2: \ 000002A4 068100EF SWI +33030 \ 000002A8 040090E5 LDR R0,[R0, #+4] \ 000002AC 080100EF SWI +264 \ 000002B0 000050E3 CMP R0,#+0 \ 000002B4 0B00000A BEQ ??maincsm_onmessage_20 \ 000002B8 2C0090E5 LDR R0,[R0, #+44] 5734 if (icsm && checkGui(idlegui_id(icsm))) \ 000002BC ........ BL checkGui \ 000002C0 000050E3 CMP R0,#+0 \ 000002C4 0700000A BEQ ??maincsm_onmessage_20 5735 { 5736 // GUI *igui=GetTopGUI(); 5737 // if (igui) //И он существует 5738 //{ 5739 INC_show=0; \ 000002C8 F06385E5 STR R6,[R5, #+1008] 5740 canvasdata=BuildCanvas(); //void * - belyj fon! \ 000002CC F18000EF SWI +33009 \ 000002D0 600285E5 STR R0,[R5, #+608] 5741 //Тут трохи поменял 5742 // by Rainmaker: Рисуем канву только для иконки и выводим в своих координатах 5743 #ifdef ELKA 5744 if (total_unread) \ 000002D4 380395E5 LDR R0,[R5, #+824] \ 000002D8 000050E3 CMP R0,#+0 \ 000002DC 0300000A BEQ ??maincsm_onmessage_21 5745 SLI_On(); \ 000002E0 ........ BL SLI_On \ 000002E4 010000EA B ??maincsm_onmessage_21 5746 #endif 5747 } 5748 //} 5749 else 5750 { 5751 main_d=1; \ ??maincsm_onmessage_20: \ 000002E8 0100A0E3 MOV R0,#+1 \ 000002EC 580285E5 STR R0,[R5, #+600] 5752 } 5753 } 5754 5755 //---------------------------------------------------// 5756 void *icsm; 5757 icsm=FindCSMbyID(CSM_root()->idle_id); 5758 if (icsm && checkGui(idlegui_id(icsm))) \ ??maincsm_onmessage_21: \ 000002F0 ........ LDR R8,??DataTable278 ;; fonto \ 000002F4 068100EF SWI +33030 \ 000002F8 040090E5 LDR R0,[R0, #+4] \ 000002FC 080100EF SWI +264 \ 00000300 000050E3 CMP R0,#+0 \ 00000304 3D01000A BEQ ??maincsm_onmessage_22 \ 00000308 2C0090E5 LDR R0,[R0, #+44] \ 0000030C ........ BL checkGui \ 00000310 000050E3 CMP R0,#+0 \ 00000314 3901000A BEQ ??maincsm_onmessage_22 5759 { 5760 int icn; 5761 if(total_unread) \ 00000318 380395E5 LDR R0,[R5, #+824] \ 0000031C 000050E3 CMP R0,#+0 5762 icn=IS_MSG; \ 00000320 0D90A013 MOVNE R9,#+13 \ 00000324 0A00001A BNE ??maincsm_onmessage_23 5763 else 5764 { 5765 switch(connect_state) \ 00000328 140395E5 LDR R0,[R5, #+788] \ 0000032C 000050E3 CMP R0,#+0 \ 00000330 0200000A BEQ ??maincsm_onmessage_24 \ 00000334 030050E2 SUBS R0,R0,#+3 \ 00000338 0200000A BEQ ??maincsm_onmessage_25 \ 0000033C 030000EA B ??maincsm_onmessage_26 5766 { 5767 case 0: 5768 icn=IS_OFFLINE; break; \ ??maincsm_onmessage_24: \ 00000340 0090A0E3 MOV R9,#+0 \ 00000344 020000EA B ??maincsm_onmessage_23 5769 case 3: 5770 icn=CurrentStatus; //IS_ONLINE; \ ??maincsm_onmessage_25: \ 00000348 A89295E5 LDR R9,[R5, #+680] \ 0000034C 000000EA B ??maincsm_onmessage_23 5771 break; 5772 default: 5773 icn=IS_UNKNOWN; break; \ ??maincsm_onmessage_26: \ 00000350 0E90A0E3 MOV R9,#+14 5774 } 5775 } 5776 5777 #ifdef NEWSGOLD 5778 if(ShowStatusIcon==0 || ShowStatusIcon==2 || ShowStatusIcon==3) //kluchnik 26.03.08 \ ??maincsm_onmessage_23: \ 00000354 ........ LDR R0,??DataTable264 ;; ShowStatusIcon \ 00000358 000090E5 LDR R0,[R0, #+0] \ 0000035C 000050E3 CMP R0,#+0 \ 00000360 02005013 CMPNE R0,#+2 \ 00000364 03005013 CMPNE R0,#+3 \ 00000368 2100001A BNE ??maincsm_onmessage_27 5779 { 5780 #endif 5781 if((IsUnlocked()) || (!IsUnlocked()) || (IsScreenSaver())) \ 0000036C 430000EF SWI +67 \ 00000370 000050E3 CMP R0,#+0 \ 00000374 0500001A BNE ??maincsm_onmessage_28 \ 00000378 430000EF SWI +67 \ 0000037C 000050E3 CMP R0,#+0 \ 00000380 0200000A BEQ ??maincsm_onmessage_28 \ 00000384 420000EF SWI +66 \ 00000388 000050E3 CMP R0,#+0 \ 0000038C 1800000A BEQ ??maincsm_onmessage_27 5782 { 5783 DrawCanvas(canvasdata,IDLEICON_X,IDLEICON_Y,IDLEICON_X+GetImgWidth((int)S_ICONS[icn])-1, 5784 IDLEICON_Y+GetImgHeight((int)S_ICONS[icn])-1,1); \ ??maincsm_onmessage_28: \ 00000390 A4B89FE5 LDR R11,??maincsm_onmessage_5+0xC ;; IDLEICON_Y \ 00000394 099185E0 ADD R9,R5,R9, LSL #+2 \ 00000398 000099E5 LDR R0,[R9, #+0] \ 0000039C 210000EF SWI +33 \ 000003A0 00A0A0E1 MOV R10,R0 \ 000003A4 000099E5 LDR R0,[R9, #+0] \ 000003A8 220000EF SWI +34 \ 000003AC 8C189FE5 LDR R1,??maincsm_onmessage_5+0x10 ;; IDLEICON_X \ 000003B0 00209BE5 LDR R2,[R11, #+0] \ 000003B4 001091E5 LDR R1,[R1, #+0] \ 000003B8 0130A0E3 MOV R3,#+1 \ 000003BC 08002DE9 PUSH {R3} \ 000003C0 010080E0 ADD R0,R0,R1 \ 000003C4 02308AE0 ADD R3,R10,R2 \ 000003C8 013043E2 SUB R3,R3,#+1 \ 000003CC 08002DE9 PUSH {R3} \ 000003D0 013040E2 SUB R3,R0,#+1 \ 000003D4 600295E5 LDR R0,[R5, #+608] \ 000003D8 250000EF SWI +37 5785 DrawImg(IDLEICON_X,IDLEICON_Y,S_ICONS[icn]); \ 000003DC 5C089FE5 LDR R0,??maincsm_onmessage_5+0x10 ;; IDLEICON_X \ 000003E0 002099E5 LDR R2,[R9, #+0] \ 000003E4 00109BE5 LDR R1,[R11, #+0] \ 000003E8 000090E5 LDR R0,[R0, #+0] \ 000003EC 230000EF SWI +35 \ 000003F0 08D08DE2 ADD SP,SP,#+8 5786 } 5787 #ifdef NEWSGOLD 5788 } 5789 #ifdef kluchnik 5790 if(show_xstatus==1) \ ??maincsm_onmessage_27: \ 000003F4 ........ LDR R0,??DataTable266 ;; show_xstatus \ 000003F8 000090E5 LDR R0,[R0, #+0] \ 000003FC 010050E3 CMP R0,#+1 \ 00000400 2300001A BNE ??maincsm_onmessage_29 5791 #else 5792 if(show_xstatus==1 || show_xstatus==3) //kluchnik 26.03.08 5793 #endif 5794 #else 5795 if(show_xstatus==1) //kluchnik 26.03.08 5796 #endif 5797 { 5798 PNGTOP_DESC *pltop=PNG_TOP(); 5799 pltop->dyn_pltop=XStatusesImgList; 5800 DisableIDLETMR(); 5801 DrawCanvas(canvasdata,IDLEICON_XX,IDLEICON_YX,IDLEICON_XX+GetImgWidth((int)XStatusesIconArray[CurrentXStatus])-1, 5802 IDLEICON_YX+GetImgHeight((int)XStatusesIconArray[CurrentXStatus])-1,1); \ 00000404 38989FE5 LDR R9,??maincsm_onmessage_5+0x14 ;; XStatusesIconArray \ 00000408 38B89FE5 LDR R11,??maincsm_onmessage_5+0x18 ;; IDLEICON_YX \ 0000040C B98100EF SWI +33209 \ 00000410 ........ LDR R1,??DataTable243 ;; XStatusesImgList \ 00000414 001091E5 LDR R1,[R1, #+0] \ 00000418 081080E5 STR R1,[R0, #+8] \ 0000041C 7F0100EF SWI +383 \ 00000420 AC0295E5 LDR R0,[R5, #+684] \ 00000424 001099E5 LDR R1,[R9, #+0] \ 00000428 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 0000042C 210000EF SWI +33 \ 00000430 001099E5 LDR R1,[R9, #+0] \ 00000434 00A0A0E1 MOV R10,R0 \ 00000438 AC0295E5 LDR R0,[R5, #+684] \ 0000043C 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 00000440 220000EF SWI +34 \ 00000444 00189FE5 LDR R1,??maincsm_onmessage_5+0x1C ;; IDLEICON_XX \ 00000448 00209BE5 LDR R2,[R11, #+0] \ 0000044C 001091E5 LDR R1,[R1, #+0] \ 00000450 0130A0E3 MOV R3,#+1 \ 00000454 08002DE9 PUSH {R3} \ 00000458 010080E0 ADD R0,R0,R1 \ 0000045C 02308AE0 ADD R3,R10,R2 \ 00000460 013043E2 SUB R3,R3,#+1 \ 00000464 08002DE9 PUSH {R3} \ 00000468 013040E2 SUB R3,R0,#+1 \ 0000046C 600295E5 LDR R0,[R5, #+608] \ 00000470 250000EF SWI +37 5803 DrawImg(IDLEICON_XX,IDLEICON_YX,XStatusesIconArray[CurrentXStatus]); \ 00000474 AC0295E5 LDR R0,[R5, #+684] \ 00000478 001099E5 LDR R1,[R9, #+0] \ 0000047C 002191E7 LDR R2,[R1, +R0, LSL #+2] \ 00000480 C4079FE5 LDR R0,??maincsm_onmessage_5+0x1C ;; IDLEICON_XX \ 00000484 00109BE5 LDR R1,[R11, #+0] \ 00000488 000090E5 LDR R0,[R0, #+0] \ 0000048C 230000EF SWI +35 \ 00000490 08D08DE2 ADD SP,SP,#+8 5804 } 5805 5806 5807 if(IsUnlocked()) \ ??maincsm_onmessage_29: \ 00000494 430000EF SWI +67 \ 00000498 000050E3 CMP R0,#+0 \ 0000049C D700000A BEQ ??maincsm_onmessage_22 5808 { 5809 if (main_d==1) \ 000004A0 580295E5 LDR R0,[R5, #+600] \ 000004A4 010050E3 CMP R0,#+1 \ 000004A8 8A00001A BNE ??maincsm_onmessage_30 5810 { 5811 if(Is_SMARTCPU_On && main_msg_timer2) \ 000004AC 7C0295E5 LDR R0,[R5, #+636] \ 000004B0 000050E3 CMP R0,#+0 \ 000004B4 E0039515 LDRNE R0,[R5, #+992] \ 000004B8 00005013 CMPNE R0,#+0 \ 000004BC 8400000A BEQ ??maincsm_onmessage_31 5812 { 5813 if(fonto==1) \ 000004C0 88979FE5 LDR R9,??maincsm_onmessage_5+0x20 ;; msg_d_x \ 000004C4 88A79FE5 LDR R10,??maincsm_onmessage_5+0x24 ;; msg_d_y \ 000004C8 88B79FE5 LDR R11,??maincsm_onmessage_5+0x28 ;; spaco2 \ 000004CC 5C3295E5 LDR R3,[R5, #+604] \ 000004D0 B410A0E3 MOV R1,#+180 \ 000004D4 741D81E3 ORR R1,R1,#0x1D00 \ 000004D8 051081E0 ADD R1,R1,R5 \ 000004DC 18108DE5 STR R1,[SP, #+24] \ 000004E0 8410A0E3 MOV R1,#+132 \ 000004E4 741D81E3 ORR R1,R1,#0x1D00 \ 000004E8 051081E0 ADD R1,R1,R5 \ 000004EC 14108DE5 STR R1,[SP, #+20] \ 000004F0 5410A0E3 MOV R1,#+84 \ 000004F4 741D81E3 ORR R1,R1,#0x1D00 \ 000004F8 051081E0 ADD R1,R1,R5 \ 000004FC 10108DE5 STR R1,[SP, #+16] \ 00000500 2410A0E3 MOV R1,#+36 \ 00000504 741D81E3 ORR R1,R1,#0x1D00 \ 00000508 051081E0 ADD R1,R1,R5 \ 0000050C 0C108DE5 STR R1,[SP, #+12] \ 00000510 000099E5 LDR R0,[R9, #+0] \ 00000514 00109AE5 LDR R1,[R10, #+0] \ 00000518 00C09BE5 LDR R12,[R11, #+0] \ 0000051C 00E098E5 LDR LR,[R8, #+0] \ 00000520 00102DE9 PUSH {R12} \ 00000524 F420A0E3 MOV R2,#+244 \ 00000528 702D82E3 ORR R2,R2,#0x1C00 \ 0000052C 052082E0 ADD R2,R2,R5 \ 00000530 01005EE3 CMP LR,#+1 \ 00000534 2E00001A BNE ??maincsm_onmessage_32 5814 { 5815 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ 00000538 01C0A0E3 MOV R12,#+1 \ 0000053C 00102DE9 PUSH {R12} \ 00000540 ........ _BLF PrintField,??PrintField??rA 5816 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, spaco2); \ 00000544 00009BE5 LDR R0,[R11, #+0] \ 00000548 01002DE9 PUSH {R0} \ 0000054C 000098E5 LDR R0,[R8, #+0] \ 00000550 01002DE9 PUSH {R0} \ 00000554 641295E5 LDR R1,[R5, #+612] \ 00000558 5C3295E5 LDR R3,[R5, #+604] \ 0000055C 1C209DE5 LDR R2,[SP, #+28] \ 00000560 00009AE5 LDR R0,[R10, #+0] \ 00000564 001081E0 ADD R1,R1,R0 \ 00000568 000099E5 LDR R0,[R9, #+0] \ 0000056C ........ _BLF PrintField,??PrintField??rA 5817 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, spaco2); \ 00000570 00009BE5 LDR R0,[R11, #+0] \ 00000574 01002DE9 PUSH {R0} \ 00000578 000098E5 LDR R0,[R8, #+0] \ 0000057C 01002DE9 PUSH {R0} \ 00000580 641295E5 LDR R1,[R5, #+612] \ 00000584 5C3295E5 LDR R3,[R5, #+604] \ 00000588 28209DE5 LDR R2,[SP, #+40] \ 0000058C 00009AE5 LDR R0,[R10, #+0] \ 00000590 811080E0 ADD R1,R0,R1, LSL #+1 \ 00000594 000099E5 LDR R0,[R9, #+0] \ 00000598 ........ _BLF PrintField,??PrintField??rA 5818 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, spaco2); \ 0000059C 00009BE5 LDR R0,[R11, #+0] \ 000005A0 01002DE9 PUSH {R0} \ 000005A4 000098E5 LDR R0,[R8, #+0] \ 000005A8 01002DE9 PUSH {R0} \ 000005AC 641295E5 LDR R1,[R5, #+612] \ 000005B0 5C3295E5 LDR R3,[R5, #+604] \ 000005B4 34209DE5 LDR R2,[SP, #+52] \ 000005B8 00009AE5 LDR R0,[R10, #+0] \ 000005BC 811081E0 ADD R1,R1,R1, LSL #+1 \ 000005C0 001081E0 ADD R1,R1,R0 \ 000005C4 000099E5 LDR R0,[R9, #+0] \ 000005C8 ........ _BLF PrintField,??PrintField??rA 5819 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, spaco2); \ 000005CC 00009BE5 LDR R0,[R11, #+0] \ 000005D0 01002DE9 PUSH {R0} \ 000005D4 000098E5 LDR R0,[R8, #+0] \ 000005D8 01002DE9 PUSH {R0} \ 000005DC 641295E5 LDR R1,[R5, #+612] \ 000005E0 5C3295E5 LDR R3,[R5, #+604] \ 000005E4 40209DE5 LDR R2,[SP, #+64] \ 000005E8 00009AE5 LDR R0,[R10, #+0] \ 000005EC 011180E0 ADD R1,R0,R1, LSL #+2 \ 000005F0 340000EA B ??maincsm_onmessage_33 5820 } 5821 else 5822 { 5823 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ ??maincsm_onmessage_32: \ 000005F4 00402DE9 PUSH {LR} \ 000005F8 ........ _BLF PrintField,??PrintField??rA 5824 PrintField(msg_d_x,msg_d_y+GetFontYSIZE(paused_height)+1, s_txt, align, fonto, spaco2); \ 000005FC 640295E5 LDR R0,[R5, #+612] \ 00000600 C50100EF SWI +453 \ 00000604 00109BE5 LDR R1,[R11, #+0] \ 00000608 02002DE9 PUSH {R1} \ 0000060C 001098E5 LDR R1,[R8, #+0] \ 00000610 02002DE9 PUSH {R1} \ 00000614 5C3295E5 LDR R3,[R5, #+604] \ 00000618 1C209DE5 LDR R2,[SP, #+28] \ 0000061C 00109AE5 LDR R1,[R10, #+0] \ 00000620 010080E0 ADD R0,R0,R1 \ 00000624 011080E2 ADD R1,R0,#+1 \ 00000628 000099E5 LDR R0,[R9, #+0] \ 0000062C ........ _BLF PrintField,??PrintField??rA 5825 PrintField(msg_d_x,msg_d_y+(2*GetFontYSIZE(paused_height))+2, d_txt, align, fonto, spaco2); \ 00000630 640295E5 LDR R0,[R5, #+612] \ 00000634 C50100EF SWI +453 \ 00000638 00109BE5 LDR R1,[R11, #+0] \ 0000063C 02002DE9 PUSH {R1} \ 00000640 001098E5 LDR R1,[R8, #+0] \ 00000644 02002DE9 PUSH {R1} \ 00000648 5C3295E5 LDR R3,[R5, #+604] \ 0000064C 28209DE5 LDR R2,[SP, #+40] \ 00000650 00109AE5 LDR R1,[R10, #+0] \ 00000654 800081E0 ADD R0,R1,R0, LSL #+1 \ 00000658 021080E2 ADD R1,R0,#+2 \ 0000065C 000099E5 LDR R0,[R9, #+0] \ 00000660 ........ _BLF PrintField,??PrintField??rA 5826 PrintField(msg_d_x,msg_d_y+(3*GetFontYSIZE(paused_height))+3, f_txt, align, fonto, spaco2); \ 00000664 640295E5 LDR R0,[R5, #+612] \ 00000668 C50100EF SWI +453 \ 0000066C 00109BE5 LDR R1,[R11, #+0] \ 00000670 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000674 02002DE9 PUSH {R1} \ 00000678 001098E5 LDR R1,[R8, #+0] \ 0000067C 02002DE9 PUSH {R1} \ 00000680 5C3295E5 LDR R3,[R5, #+604] \ 00000684 34209DE5 LDR R2,[SP, #+52] \ 00000688 00109AE5 LDR R1,[R10, #+0] \ 0000068C 010080E0 ADD R0,R0,R1 \ 00000690 031080E2 ADD R1,R0,#+3 \ 00000694 000099E5 LDR R0,[R9, #+0] \ 00000698 ........ _BLF PrintField,??PrintField??rA 5827 PrintField(msg_d_x,msg_d_y+(4*GetFontYSIZE(paused_height))+4, g_txt, align, fonto, spaco2); \ 0000069C 640295E5 LDR R0,[R5, #+612] \ 000006A0 C50100EF SWI +453 \ 000006A4 00109BE5 LDR R1,[R11, #+0] \ 000006A8 02002DE9 PUSH {R1} \ 000006AC 001098E5 LDR R1,[R8, #+0] \ 000006B0 02002DE9 PUSH {R1} \ 000006B4 5C3295E5 LDR R3,[R5, #+604] \ 000006B8 40209DE5 LDR R2,[SP, #+64] \ 000006BC 00109AE5 LDR R1,[R10, #+0] \ 000006C0 000181E0 ADD R0,R1,R0, LSL #+2 \ 000006C4 041080E2 ADD R1,R0,#+4 \ ??maincsm_onmessage_33: \ 000006C8 000099E5 LDR R0,[R9, #+0] \ 000006CC ........ _BLF PrintField,??PrintField??rA \ 000006D0 28D08DE2 ADD SP,SP,#+40 5828 } 5829 } 5830 main_d=0; \ ??maincsm_onmessage_31: \ 000006D4 586285E5 STR R6,[R5, #+600] 5831 } 5832 5833 if(Is_UPTIME_On) DrawOnlineTime(canvasdata); \ ??maincsm_onmessage_30: \ 000006D8 CC0295E5 LDR R0,[R5, #+716] \ 000006DC 000050E3 CMP R0,#+0 \ 000006E0 0100000A BEQ ??maincsm_onmessage_34 \ 000006E4 600295E5 LDR R0,[R5, #+608] \ 000006E8 ........ BL DrawOnlineTime 5834 if(Is_PING_On) DrawPing(canvasdata); \ ??maincsm_onmessage_34: \ 000006EC 740295E5 LDR R0,[R5, #+628] \ 000006F0 000050E3 CMP R0,#+0 \ 000006F4 0100000A BEQ ??maincsm_onmessage_35 \ 000006F8 600295E5 LDR R0,[R5, #+608] \ 000006FC ........ BL DrawPing 5835 if(Auto_Status && showAwayIdle) DrawAutoMSG(canvasdata); \ ??maincsm_onmessage_35: \ 00000700 ........ LDR R0,??DataTable244 ;; Auto_Status \ 00000704 000090E5 LDR R0,[R0, #+0] \ 00000708 000050E3 CMP R0,#+0 \ 0000070C 0500000A BEQ ??maincsm_onmessage_36 \ 00000710 ........ LDR R0,??DataTable245 ;; showAwayIdle \ 00000714 000090E5 LDR R0,[R0, #+0] \ 00000718 000050E3 CMP R0,#+0 \ 0000071C 0100000A BEQ ??maincsm_onmessage_36 \ 00000720 600295E5 LDR R0,[R5, #+608] \ 00000724 ........ BL DrawAutoMSG 5836 if(Is_Unread_On) \ ??maincsm_onmessage_36: \ 00000728 2C059FE5 LDR R0,??maincsm_onmessage_5+0x2C ;; Is_Unread_On \ 0000072C ........ LDR R9,??DataTable246 ;; spaco1 \ 00000730 000090E5 LDR R0,[R0, #+0] \ 00000734 000050E3 CMP R0,#+0 \ 00000738 1000000A BEQ ??maincsm_onmessage_37 5837 { 5838 sprintf(unread_msg_info, "Unread: %d", total_unread2); \ 0000073C 8C2295E5 LDR R2,[R5, #+652] \ 00000740 5FAEA0E3 MOV R10,#+1520 \ 00000744 EE1F87E2 ADD R1,R7,#+952 \ 00000748 05008AE0 ADD R0,R10,R5 \ 0000074C 160000EF SWI +22 5839 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, spaco1); \ 00000750 000099E5 LDR R0,[R9, #+0] \ 00000754 05208AE0 ADD R2,R10,R5 \ 00000758 01002DE9 PUSH {R0} \ 0000075C 000098E5 LDR R0,[R8, #+0] \ 00000760 01002DE9 PUSH {R0} \ 00000764 5C3295E5 LDR R3,[R5, #+604] \ 00000768 F0049FE5 LDR R0,??maincsm_onmessage_5+0x30 ;; unread_Y \ 0000076C 001090E5 LDR R1,[R0, #+0] \ 00000770 EC049FE5 LDR R0,??maincsm_onmessage_5+0x34 ;; unread_X \ 00000774 000090E5 LDR R0,[R0, #+0] \ 00000778 ........ _BLF PrintField,??PrintField??rA \ 0000077C 08D08DE2 ADD SP,SP,#+8 5840 } 5841 5842 if(Is_Online_On && strlen(on_off_buf)!=0) \ ??maincsm_onmessage_37: \ 00000780 E0049FE5 LDR R0,??maincsm_onmessage_5+0x38 ;; Is_Online_On \ 00000784 000090E5 LDR R0,[R0, #+0] \ 00000788 000050E3 CMP R0,#+0 \ 0000078C 1B00000A BEQ ??maincsm_onmessage_22 \ 00000790 00009DE5 LDR R0,[SP, #+0] \ 00000794 1B0000EF SWI +27 \ 00000798 000050E3 CMP R0,#+0 \ 0000079C 1700000A BEQ ??maincsm_onmessage_22 5843 { 5844 char *s=malloc(128); \ 000007A0 8000A0E3 MOV R0,#+128 \ 000007A4 140000EF SWI +20 5845 sprintf(s,percent_s,on_off_buf); \ 000007A8 00209DE5 LDR R2,[SP, #+0] \ 000007AC 00A0A0E1 MOV R10,R0 \ 000007B0 371087E2 ADD R1,R7,#+55 \ 000007B4 160000EF SWI +22 5846 s[strlen(s)-1]=0; \ 000007B8 0A00A0E1 MOV R0,R10 \ 000007BC 1B0000EF SWI +27 \ 000007C0 0A0080E0 ADD R0,R0,R10 \ 000007C4 016040E5 STRB R6,[R0, #-1] 5847 PrintField(online_x,online_y,s, align, fonto, spaco1); \ 000007C8 000099E5 LDR R0,[R9, #+0] \ 000007CC 0A20A0E1 MOV R2,R10 \ 000007D0 01002DE9 PUSH {R0} \ 000007D4 000098E5 LDR R0,[R8, #+0] \ 000007D8 01002DE9 PUSH {R0} \ 000007DC 5C3295E5 LDR R3,[R5, #+604] \ 000007E0 84049FE5 LDR R0,??maincsm_onmessage_5+0x3C ;; online_y \ 000007E4 001090E5 LDR R1,[R0, #+0] \ 000007E8 80049FE5 LDR R0,??maincsm_onmessage_5+0x40 ;; online_x \ 000007EC 000090E5 LDR R0,[R0, #+0] \ 000007F0 ........ _BLF PrintField,??PrintField??rA 5848 mfree(s); \ 000007F4 0A00A0E1 MOV R0,R10 \ 000007F8 150000EF SWI +21 \ 000007FC 08D08DE2 ADD SP,SP,#+8 5849 } 5850 }//if(IsUnlocked()) 5851 } 5852 5853 5854 //-----------------------------------------------------------// 5855 5856 5857 if (msg->msg==MSG_RECONFIGURE_REQ) \ ??maincsm_onmessage_22: \ 00000800 040094E5 LDR R0,[R4, #+4] \ 00000804 AF10A0E3 MOV R1,#+175 \ 00000808 DE1C81E3 ORR R1,R1,#0xDE00 \ 0000080C 010050E1 CMP R0,R1 \ 00000810 3000001A BNE ??maincsm_onmessage_38 5858 { 5859 //if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) 5860 if( (strcmp_nocase(suc_config_name,(char *)msg->data0)==0) 5861 || (strcmp_nocase(suc_config_name_mod,(char *)msg->data0)==0)) \ 00000814 ........ LDR R0,??DataTable272 ;; suc_config_name \ 00000818 0C1094E5 LDR R1,[R4, #+12] \ 0000081C ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000820 000050E3 CMP R0,#+0 \ 00000824 0400000A BEQ ??maincsm_onmessage_39 \ 00000828 ........ LDR R0,??DataTable248 ;; suc_config_name_mod \ 0000082C 0C1094E5 LDR R1,[R4, #+12] \ 00000830 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000834 000050E3 CMP R0,#+0 \ 00000838 2600001A BNE ??maincsm_onmessage_38 5862 { 5863 ShowMSG(1,(int)"NatICQ config updated!"); 5864 // InitConfig(); 5865 UpdateConfig(); 5866 #ifdef NEWSGOLD 5867 initTags(); 5868 #endif 5869 PrintLibInit(1); 5870 FontPathInit((char *)fontpath, 1); \ ??maincsm_onmessage_39: \ 0000083C ........ LDR R9,??DataTable274 ;; fontpath \ 00000840 F11F87E2 ADD R1,R7,#+964 \ 00000844 0100A0E3 MOV R0,#+1 \ 00000848 480100EF SWI +328 \ 0000084C ........ _BLF UpdateConfig,??UpdateConfig??rA \ 00000850 ........ _BLF initTags,??initTags??rA \ 00000854 0100A0E3 MOV R0,#+1 \ 00000858 ........ _BLF PrintLibInit,??PrintLibInit??rA \ 0000085C 0110A0E3 MOV R1,#+1 \ 00000860 0900A0E1 MOV R0,R9 \ 00000864 ........ _BLF FontPathInit,??FontPathInit??rA 5871 SetFontColor((char*)fontColor,(char*)bgrColor,1); \ 00000868 ........ LDR R1,??DataTable275 ;; bgrColor \ 0000086C ........ LDR R0,??DataTable276 ;; fontColor \ 00000870 0120A0E3 MOV R2,#+1 \ 00000874 ........ _BLF SetFontColor,??SetFontColor??rA 5872 //#ifdef ELKA 5873 if(fonto==1) \ 00000878 000098E5 LDR R0,[R8, #+0] \ 0000087C 010050E3 CMP R0,#+1 \ 00000880 0B00001A BNE ??maincsm_onmessage_40 5874 { 5875 char *heght=malloc(64); \ 00000884 4000A0E3 MOV R0,#+64 \ 00000888 140000EF SWI +20 \ 0000088C 0080A0E1 MOV R8,R0 5876 sprintf(heght, "%s2240.png", fontpath); \ 00000890 0920A0E1 MOV R2,R9 \ 00000894 F71F87E2 ADD R1,R7,#+988 \ 00000898 160000EF SWI +22 5877 paused_height=GetImgHeight((int)heght); \ 0000089C 0800A0E1 MOV R0,R8 \ 000008A0 210000EF SWI +33 \ 000008A4 640285E5 STR R0,[R5, #+612] 5878 mfree(heght); \ 000008A8 0800A0E1 MOV R0,R8 \ 000008AC 150000EF SWI +21 \ 000008B0 010000EA B ??maincsm_onmessage_41 5879 } 5880 else 5881 paused_height=fonto-100; \ ??maincsm_onmessage_40: \ 000008B4 640040E2 SUB R0,R0,#+100 \ 000008B8 640285E5 STR R0,[R5, #+612] 5882 //#endif 5883 free_ICONS(); \ ??maincsm_onmessage_41: \ 000008BC ........ BL free_ICONS 5884 setup_ICONS(); \ 000008C0 ........ BL setup_ICONS 5885 ResortCL(); \ 000008C4 ........ _BLF ResortCL,??ResortCL??rA 5886 RecountMenu(NULL,1); \ 000008C8 0110A0E3 MOV R1,#+1 \ 000008CC 0000A0E3 MOV R0,#+0 \ 000008D0 ........ BL RecountMenu 5887 init_time_zone(); \ 000008D4 ........ BL init_time_zone 5888 // InitSmiles(); 5889 } 5890 } 5891 5892 if (msg->msg==MSG_GUI_DESTROYED) \ ??maincsm_onmessage_38: \ 000008D8 040094E5 LDR R0,[R4, #+4] \ 000008DC 0E10A0E3 MOV R1,#+14 \ 000008E0 641C81E3 ORR R1,R1,#0x6400 \ 000008E4 010050E1 CMP R0,R1 \ 000008E8 0E00001A BNE ??maincsm_onmessage_42 5893 { 5894 if ((int)msg->data0==csm->gui_id) \ 000008EC 20109DE5 LDR R1,[SP, #+32] \ 000008F0 0C0094E5 LDR R0,[R4, #+12] \ 000008F4 281091E5 LDR R1,[R1, #+40] \ 000008F8 010050E1 CMP R0,R1 5895 { 5896 csm->csm.state=-3; \ 000008FC 20009D05 LDREQ R0,[SP, #+32] \ 00000900 0210E003 MVNEQ R1,#+2 \ 00000904 10108005 STREQ R1,[R0, #+16] 5897 } 5898 if ((int)msg->data0==contactlist_menu_id) \ 00000908 0C0094E5 LDR R0,[R4, #+12] \ 0000090C 441395E5 LDR R1,[R5, #+836] \ 00000910 010050E1 CMP R0,R1 5899 { 5900 contactlist_menu_id=0; \ 00000914 44638505 STREQ R6,[R5, #+836] 5901 prev_clmenu_itemcount=0; \ 00000918 4C638505 STREQ R6,[R5, #+844] 5902 } 5903 if ((int)msg->data0==edchat_id) \ 0000091C 481395E5 LDR R1,[R5, #+840] \ 00000920 010050E1 CMP R0,R1 5904 { 5905 edchat_id=0; \ 00000924 48638505 STREQ R6,[R5, #+840] 5906 } 5907 } 5908 5909 if (msg->msg==MSG_HELPER_TRANSLATOR) \ ??maincsm_onmessage_42: \ 00000928 040094E5 LDR R0,[R4, #+4] \ 0000092C AE10A0E3 MOV R1,#+174 \ 00000930 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000934 010050E1 CMP R0,R1 \ 00000938 1000001A BNE ??maincsm_onmessage_43 5910 { 5911 switch((int)msg->data0) \ 0000093C 0C0094E5 LDR R0,[R4, #+12] \ 00000940 101094E5 LDR R1,[R4, #+16] \ 00000944 ........ LDR R9,??DataTable252 ;; RECONNECT_TIME \ 00000948 ........ LDR R10,??DataTable253 ;; do_reconnect \ 0000094C B820A0E3 MOV R2,#+184 \ 00000950 682D82E3 ORR R2,R2,#0x1A00 \ 00000954 054082E0 ADD R4,R2,R5 \ 00000958 482F42E2 SUB R2,R2,#+288 \ 0000095C 058082E0 ADD R8,R2,R5 \ 00000960 802050E2 SUBS R2,R0,#+128 \ 00000964 0800000A BEQ ??maincsm_onmessage_44 \ 00000968 022052E2 SUBS R2,R2,#+2 \ 0000096C 0200000A BEQ ??maincsm_onmessage_45 \ 00000970 122052E2 SUBS R2,R2,#+18 \ 00000974 1300000A BEQ ??maincsm_onmessage_46 \ 00000978 1D0000EA B ??maincsm_onmessage_47 5912 { 5913 case LMAN_DISCONNECT_IND: 5914 is_gprs_online=0; \ ??maincsm_onmessage_45: \ 0000097C 346385E5 STR R6,[R5, #+820] 5915 return(1); \ ??maincsm_onmessage_43: \ 00000980 0100A0E3 MOV R0,#+1 \ 00000984 24D08DE2 ADD SP,SP,#+36 \ 00000988 F08FBDE8 POP {R4-R11,PC} ;; return 5916 case LMAN_CONNECT_CNF: 5917 vibra_count=1; \ ??maincsm_onmessage_44: \ 0000098C 0100A0E3 MOV R0,#+1 \ 00000990 FC0285E5 STR R0,[R5, #+764] 5918 start_vibra(); \ 00000994 ........ BL start_vibra 5919 is_gprs_online=1; \ 00000998 0100A0E3 MOV R0,#+1 \ 0000099C 340385E5 STR R0,[R5, #+820] 5920 strcpy(logmsg,LG_GRGPRSUP); \ 000009A0 FA1F87E2 ADD R1,R7,#+1000 \ 000009A4 0800A0E1 MOV R0,R8 \ 000009A8 1A0000EF SWI +26 5921 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 000009AC 000099E5 LDR R0,[R9, #+0] \ 000009B0 0A20A0E1 MOV R2,R10 \ 000009B4 D830A0E3 MOV R3,#+216 \ 000009B8 930001E0 MUL R1,R3,R0 \ 000009BC 0400A0E1 MOV R0,R4 \ 000009C0 4D0000EF SWI +77 5922 return(1); \ 000009C4 070000EA B ??maincsm_onmessage_48 5923 case ENIP_DNR_HOST_BY_NAME: 5924 if ((int)msg->data1==DNR_ID) \ ??maincsm_onmessage_46: \ 000009C8 D00395E5 LDR R0,[R5, #+976] \ 000009CC 000051E1 CMP R1,R0 \ 000009D0 EAFFFF1A BNE ??maincsm_onmessage_43 5925 { 5926 if (DNR_TRIES) SUBPROC((void *)create_connect); \ 000009D4 D40395E5 LDR R0,[R5, #+980] \ 000009D8 000050E3 CMP R0,#+0 \ 000009DC E7FFFF0A BEQ ??maincsm_onmessage_43 \ 000009E0 ........ LDR R0,??DataTable254 ;; create_connect \ ??maincsm_onmessage_49: \ 000009E4 710100EF SWI +369 5927 } 5928 return(1); \ ??maincsm_onmessage_48: \ 000009E8 0100A0E3 MOV R0,#+1 \ ??maincsm_onmessage_50: \ 000009EC 24D08DE2 ADD SP,SP,#+36 \ 000009F0 F08FBDE8 POP {R4-R11,PC} 5929 } 5930 if ((int)msg->data1==sock) \ ??maincsm_onmessage_47: \ 000009F4 182395E5 LDR R2,[R5, #+792] \ 000009F8 020051E1 CMP R1,R2 \ 000009FC DFFFFF1A BNE ??maincsm_onmessage_43 5931 { 5932 //Если наш сокет 5933 if ((((unsigned int)msg->data0)>>28)==0xA) \ 00000A00 201EA0E1 LSR R1,R0,#+28 \ 00000A04 0A0051E3 CMP R1,#+10 \ 00000A08 0200001A BNE ??maincsm_onmessage_51 5934 { 5935 //Принят пакет 5936 ProcessPacket((TPKT *)msg->data0); \ 00000A0C ........ BL ProcessPacket 5937 return(0); \ 00000A10 0000A0E3 MOV R0,#+0 \ 00000A14 F4FFFFEA B ??maincsm_onmessage_50 5938 } 5939 switch((int)msg->data0) \ ??maincsm_onmessage_51: \ 00000A18 141395E5 LDR R1,[R5, #+788] \ 00000A1C ........ LDR R11,??DataTable255 ;; VIBR_ON_CONNECT \ 00000A20 8A0040E2 SUB R0,R0,#+138 \ 00000A24 050050E3 CMP R0,#+5 \ 00000A28 D4FFFF8A BHI ??maincsm_onmessage_43 \ 00000A2C 012F8FE2 ADR R2,??maincsm_onmessage_1 \ 00000A30 D02092E1 LDRSB R2,[R2, R0] \ 00000A34 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_1: \ 00000A38 46464101 DC8 +70,+70,+65,+1 \ 00000A3C 4F4B0000 DC8 +79,+75,+0,+0 5940 { 5941 case ENIP_SOCK_CONNECTED: 5942 if (connect_state==1) \ ??maincsm_onmessage_52: \ 00000A40 010051E3 CMP R1,#+1 \ 00000A44 3700001A BNE ??maincsm_onmessage_53 5943 { 5944 if(VIBR_ON_CONNECT) \ 00000A48 00009BE5 LDR R0,[R11, #+0] 5945 vibra_count=2; 5946 else 5947 vibra_count=1; 5948 start_vibra(); 5949 //Соединение установленно, посылаем пакет login 5950 strcpy(logmsg, LG_GRTRYLOGIN); 5951 { 5952 int i=strlen(PASS); 5953 TPKT *p=malloc(sizeof(PKT)+i); 5954 p->pkt.uin=UIN; \ 00000A4C ........ LDR R4,??DataTable271 ;; UIN \ 00000A50 000050E3 CMP R0,#+0 \ 00000A54 0200A013 MOVNE R0,#+2 \ 00000A58 0100A003 MOVEQ R0,#+1 \ 00000A5C FC0285E5 STR R0,[R5, #+764] \ 00000A60 ........ BL start_vibra \ 00000A64 401E87E2 ADD R1,R7,#+1024 \ 00000A68 0800A0E1 MOV R0,R8 \ 00000A6C 1A0000EF SWI +26 \ 00000A70 ........ LDR R0,??DataTable258 ;; PASS \ 00000A74 1B0000EF SWI +27 \ 00000A78 0080A0E1 MOV R8,R0 \ 00000A7C 080088E2 ADD R0,R8,#+8 \ 00000A80 140000EF SWI +20 5955 p->pkt.type=T_REQLOGIN; 5956 p->pkt.data_len=i; 5957 memcpy(p->data,PASS,i); \ 00000A84 ........ LDR R1,??DataTable258 ;; PASS \ 00000A88 0090A0E1 MOV R9,R0 \ 00000A8C 000094E5 LDR R0,[R4, #+0] \ 00000A90 0820A0E1 MOV R2,R8 \ 00000A94 000089E5 STR R0,[R9, #+0] \ 00000A98 0100A0E3 MOV R0,#+1 \ 00000A9C B400C9E1 STRH R0,[R9, #+4] \ 00000AA0 B680C9E1 STRH R8,[R9, #+6] \ 00000AA4 080089E2 ADD R0,R9,#+8 \ 00000AA8 1E0100EF SWI +286 5958 SUBPROC((void *)send_login,0,p); \ 00000AAC C0019FE5 LDR R0,??maincsm_onmessage_5+0x44 ;; send_login \ 00000AB0 0920A0E1 MOV R2,R9 \ 00000AB4 0010A0E3 MOV R1,#+0 \ 00000AB8 710100EF SWI +369 5959 } 5960 GROUP_CACHE=0; \ 00000ABC 406385E5 STR R6,[R5, #+832] 5961 SENDMSGCOUNT=0; //Начинаем отсчет \ 00000AC0 986285E5 STR R6,[R5, #+664] 5962 if (!FindGroupByID(0)) AddGroup(0,LG_GROUPNOTINLIST); \ 00000AC4 0600A0E1 MOV R0,R6 \ 00000AC8 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000ACC 000050E3 CMP R0,#+0 \ 00000AD0 0100001A BNE ??maincsm_onmessage_54 \ 00000AD4 411E87E2 ADD R1,R7,#+1040 \ 00000AD8 ........ _BLF AddGroup,??AddGroup??rA 5963 if (!FindContactByUin(UIN) && (IsShowLoopback)) AddContact(UIN, LG_CLLOOPBACK,0,1); \ ??maincsm_onmessage_54: \ 00000ADC 000094E5 LDR R0,[R4, #+0] \ 00000AE0 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000AE4 000050E3 CMP R0,#+0 \ 00000AE8 0A00001A BNE ??maincsm_onmessage_55 \ 00000AEC 84019FE5 LDR R0,??maincsm_onmessage_5+0x48 ;; IsShowLoopback \ 00000AF0 000090E5 LDR R0,[R0, #+0] \ 00000AF4 000050E3 CMP R0,#+0 \ 00000AF8 0600000A BEQ ??maincsm_onmessage_55 \ 00000AFC 0130A0E3 MOV R3,#+1 \ 00000B00 0020A0E3 MOV R2,#+0 \ 00000B04 1C00A0E3 MOV R0,#+28 \ 00000B08 400E80E3 ORR R0,R0,#0x400 \ 00000B0C 071080E0 ADD R1,R0,R7 \ 00000B10 000094E5 LDR R0,[R4, #+0] \ 00000B14 ........ _BLF AddContact,??AddContact??rA 5964 SUBPROC((void *)LoadLocalCL); \ ??maincsm_onmessage_55: \ 00000B18 5C019FE5 LDR R0,??maincsm_onmessage_5+0x4C ;; LoadLocalCL \ 00000B1C 710100EF SWI +369 5965 SMART_REDRAW(); \ 00000B20 ........ BL SMART_REDRAW \ 00000B24 AFFFFFEA B ??maincsm_onmessage_48 5966 } 5967 else 5968 { 5969 ShowMSG(1,(int)LG_MSGILLEGMSGCON); \ ??maincsm_onmessage_53: \ 00000B28 2800A0E3 MOV R0,#+40 \ 00000B2C 400E80E3 ORR R0,R0,#0x400 \ 00000B30 071080E0 ADD R1,R0,R7 \ ??maincsm_onmessage_56: \ 00000B34 0100A0E3 MOV R0,#+1 \ 00000B38 480100EF SWI +328 \ 00000B3C A9FFFFEA B ??maincsm_onmessage_48 5970 } 5971 break; 5972 case ENIP_SOCK_DATA_READ: 5973 if (connect_state>=2) \ ??maincsm_onmessage_57: \ 00000B40 020051E3 CMP R1,#+2 5974 { 5975 //Если посылали send 5976 SUBPROC((void *)get_answer); \ 00000B44 34019FA5 LDRGE R0,??maincsm_onmessage_5+0x50 ;; get_answer \ 00000B48 A5FFFFAA BGE ??maincsm_onmessage_49 5977 //SMART_REDRAW(); 5978 } 5979 else 5980 { 5981 ShowMSG(1,(int)LG_MSGILLEGMSGREA); \ 00000B4C 451E87E2 ADD R1,R7,#+1104 \ 00000B50 F7FFFFEA B ??maincsm_onmessage_56 5982 } 5983 break; 5984 case ENIP_BUFFER_FREE: 5985 case ENIP_BUFFER_FREE1: 5986 SUBPROC((void *)SendAnswer,0,0); \ ??maincsm_onmessage_58: \ 00000B54 ........ LDR R0,??DataTable259 ;; SendAnswer \ 00000B58 0020A0E3 MOV R2,#+0 \ 00000B5C 0210A0E1 MOV R1,R2 \ 00000B60 710100EF SWI +369 \ 00000B64 9FFFFFEA B ??maincsm_onmessage_48 5987 break; 5988 case ENIP_SOCK_REMOTE_CLOSED: 5989 //Закрыт со стороны сервера 5990 if (connect_state) \ ??maincsm_onmessage_59: \ 00000B68 000051E3 CMP R1,#+0 \ 00000B6C 83FFFF0A BEQ ??maincsm_onmessage_43 5991 SUBPROC((void *)end_socket); \ 00000B70 ........ LDR R0,??DataTable260 ;; end_socket \ 00000B74 9AFFFFEA B ??maincsm_onmessage_49 5992 break; 5993 case ENIP_SOCK_CLOSED: 5994 //strcpy(logmsg, "No connection"); 5995 //Dump not received 5996 /* if (RXstate>(-(int)sizeof(PKT))) 5997 { 5998 unsigned int err; 5999 int f=fopen("4:\\NATICQ.dump",A_ReadWrite+A_Create+A_Truncate+A_BIN,P_READ+P_WRITE,&err); 6000 if (f!=-1) 6001 { 6002 fwrite(f,&RXbuf,RXstate+sizeof(PKT),&err); 6003 fclose(f,&err); 6004 } 6005 }*/ 6006 FillAllOffline(); \ ??maincsm_onmessage_60: \ 00000B78 ........ _BLF FillAllOffline,??FillAllOffline??rA 6007 RecountMenu(NULL,1); \ 00000B7C 0110A0E3 MOV R1,#+1 \ 00000B80 0000A0E3 MOV R0,#+0 \ 00000B84 ........ BL RecountMenu 6008 connect_state=0; 6009 sock=-1; \ 00000B88 0600E0E1 MVN R0,R6 \ 00000B8C 180385E5 STR R0,[R5, #+792] 6010 if(VIBR_ON_CONNECT) \ 00000B90 00009BE5 LDR R0,[R11, #+0] \ 00000B94 146385E5 STR R6,[R5, #+788] \ 00000B98 000050E3 CMP R0,#+0 6011 vibra_count=4; \ 00000B9C 0400A013 MOVNE R0,#+4 6012 else 6013 vibra_count=1; \ 00000BA0 0100A003 MOVEQ R0,#+1 \ 00000BA4 FC0285E5 STR R0,[R5, #+764] 6014 6015 start_vibra(); \ 00000BA8 ........ BL start_vibra 6016 if (sendq_p) \ 00000BAC 300395E5 LDR R0,[R5, #+816] \ 00000BB0 000050E3 CMP R0,#+0 \ 00000BB4 0600000A BEQ ??maincsm_onmessage_61 6017 { 6018 snprintf(logmsg,255,"Disconnected, %d bytes not sended!",sendq_l); \ 00000BB8 2C3395E5 LDR R3,[R5, #+812] \ 00000BBC 7400A0E3 MOV R0,#+116 \ 00000BC0 400E80E3 ORR R0,R0,#0x400 \ 00000BC4 072080E0 ADD R2,R0,R7 \ 00000BC8 FF10A0E3 MOV R1,#+255 \ 00000BCC 0800A0E1 MOV R0,R8 \ 00000BD0 1B0100EF SWI +283 6019 } 6020 SMART_REDRAW(); \ ??maincsm_onmessage_61: \ 00000BD4 ........ BL SMART_REDRAW 6021 SUBPROC((void *)ClearSendQ); \ 00000BD8 ........ LDR R0,??DataTable261 ;; ClearSendQ \ 00000BDC 710100EF SWI +369 6022 #ifdef EVILFOX 6023 if (!disautorecconect) GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*12,do_reconnect); 6024 #else 6025 if (!disautorecconect) \ 00000BE0 E80295E5 LDR R0,[R5, #+744] \ 00000BE4 000050E3 CMP R0,#+0 \ 00000BE8 64FFFF1A BNE ??maincsm_onmessage_43 6026 { 6027 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000BEC 000099E5 LDR R0,[R9, #+0] \ 00000BF0 0A20A0E1 MOV R2,R10 \ 00000BF4 D830A0E3 MOV R3,#+216 \ 00000BF8 930001E0 MUL R1,R3,R0 \ 00000BFC 0400A0E1 MOV R0,R4 \ 00000C00 4D0000EF SWI +77 6028 snprintf(logmsg,255,"%s\nReconect after %d second...",logmsg, RECONNECT_TIME); //2058 \ 00000C04 000099E5 LDR R0,[R9, #+0] \ 00000C08 0830A0E1 MOV R3,R8 \ 00000C0C 01002DE9 PUSH {R0} \ 00000C10 FF10A0E3 MOV R1,#+255 \ 00000C14 9800A0E3 MOV R0,#+152 \ 00000C18 400E80E3 ORR R0,R0,#0x400 \ 00000C1C 072080E0 ADD R2,R0,R7 \ 00000C20 0800A0E1 MOV R0,R8 \ 00000C24 1B0100EF SWI +283 \ 00000C28 04D08DE2 ADD SP,SP,#+4 \ 00000C2C 6DFFFFEA B ??maincsm_onmessage_48 \ ??maincsm_onmessage_5: \ 00000C30 ........ DC32 CheckDoubleRun \ 00000C34 ........ DC32 ProcessNextSmile \ 00000C38 ........ DC32 ProcessNextXStatImg \ 00000C3C ........ DC32 IDLEICON_Y \ 00000C40 ........ DC32 IDLEICON_X \ 00000C44 ........ DC32 XStatusesIconArray \ 00000C48 ........ DC32 IDLEICON_YX \ 00000C4C ........ DC32 IDLEICON_XX \ 00000C50 ........ DC32 msg_d_x \ 00000C54 ........ DC32 msg_d_y \ 00000C58 ........ DC32 spaco2 \ 00000C5C ........ DC32 Is_Unread_On \ 00000C60 ........ DC32 unread_Y \ 00000C64 ........ DC32 unread_X \ 00000C68 ........ DC32 Is_Online_On \ 00000C6C ........ DC32 online_y \ 00000C70 ........ DC32 online_x \ 00000C74 ........ DC32 send_login \ 00000C78 ........ DC32 IsShowLoopback \ 00000C7C ........ DC32 LoadLocalCL \ 00000C80 ........ DC32 get_answer 6029 } 6030 6031 #endif 6032 break; 6033 } 6034 } 6035 } 6036 return(1); 6037 } 6038 6039 6040 //-------------------- ICON IN ICONBAR --------------------// 6041 6042 //kluchnik 26.03.08 6043 #ifdef NEWSGOLD 6044 #pragma swi_number=0x27 6045 __swi __arm void AddIconToIconBar(int pic, short *num); 6046 6047 \ In segment CODE, align 4, keep-with-next 6048 void addIconBar(short* num) 6049 { \ addIconBar: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 6050 int icn; 6051 if(ShowStatusIcon==1 || ShowStatusIcon==3) \ 00000004 ........ LDR R5,??DataTable262 ;; NumStatusToIconBar \ 00000008 ........ LDR R6,??DataTable263 ;; S_ICONS \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ LDR R0,??DataTable264 ;; ShowStatusIcon \ 00000014 000090E5 LDR R0,[R0, #+0] \ 00000018 010050E3 CMP R0,#+1 \ 0000001C 03005013 CMPNE R0,#+3 \ 00000020 2300001A BNE ??addIconBar_0 6052 { 6053 if(total_unread) \ 00000024 380396E5 LDR R0,[R6, #+824] \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 1900000A BEQ ??addIconBar_1 6054 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); \ ??addIconBar_2: \ 00000030 000095E5 LDR R0,[R5, #+0] \ 00000034 0410A0E1 MOV R1,R4 \ 00000038 0D0080E2 ADD R0,R0,#+13 \ ??addIconBar_3: \ 0000003C 270000EF SWI +39 6055 else 6056 { 6057 switch(connect_state) 6058 { 6059 case 0: 6060 icn=IS_OFFLINE; break; 6061 case 3: 6062 icn=CurrentStatus; //IS_ONLINE; 6063 break; 6064 default: 6065 icn=IS_UNKNOWN; break; 6066 } 6067 AddIconToIconBar(NumStatusToIconBar + icn, num); 6068 } 6069 } 6070 else 6071 { 6072 if(ShowStatusIcon==2)//Если показывать и иконбаре везде,кроме идле 6073 { 6074 if(!(IsIdleUiOnTop())) 6075 { 6076 if(total_unread) 6077 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); 6078 else 6079 { 6080 switch(connect_state) 6081 { 6082 case 0: 6083 icn=IS_OFFLINE; break; 6084 case 3: 6085 icn=CurrentStatus; //IS_ONLINE; 6086 break; 6087 default: 6088 icn=IS_UNKNOWN; break; 6089 } 6090 AddIconToIconBar(NumStatusToIconBar + icn, num); 6091 } 6092 } 6093 } 6094 } 6095 6096 #ifdef kluchnik 6097 /* if(ADDITION_UIN!=0) 6098 { 6099 CLIST *t; 6100 t=FindContactByUin(ADDITION_UIN); 6101 if(t) 6102 { 6103 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) 6104 { 6105 if(show_add_state) 6106 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); 6107 if(show_add_xstate) 6108 AddIconToIconBar(NumXStatusToIconBar + t->xstate, num); 6109 } 6110 } 6111 }*/ 6112 CLIST *t; 6113 t=FindContactByUin(438532198); \ ??addIconBar_4: \ 00000040 ........ LDR R0,??DataTable265 ;; 0x1a237866 6114 6115 if(show_xstatus==2 || show_xstatus==3) \ 00000044 ........ LDR R9,??DataTable266 ;; show_xstatus \ 00000048 54819FE5 LDR R8,??addIconBar_5 ;; NumXStatusToIconBar \ 0000004C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000050 0070A0E1 MOV R7,R0 \ 00000054 000099E5 LDR R0,[R9, #+0] \ 00000058 FFA0A0E3 MOV R10,#+255 \ 0000005C FFAC8AE3 ORR R10,R10,#0xFF00 \ 00000060 020050E3 CMP R0,#+2 \ 00000064 03005013 CMPNE R0,#+3 \ 00000068 3400001A BNE ??addIconBar_6 6116 { 6117 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) \ 0000006C B405D7E1 LDRH R0,[R7, #+84] \ 00000070 0A0050E1 CMP R0,R10 \ 00000074 2000000A BEQ ??addIconBar_7 \ 00000078 0700A0E1 MOV R0,R7 \ 0000007C ........ BL GetIconIndex \ 00000080 0E0050E3 CMP R0,#+14 \ 00000084 1C00000A BEQ ??addIconBar_7 6118 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); \ 00000088 0700A0E1 MOV R0,R7 \ 0000008C ........ BL GetIconIndex \ 00000090 002095E5 LDR R2,[R5, #+0] \ 00000094 260000EA B ??addIconBar_8 \ ??addIconBar_1: \ 00000098 140396E5 LDR R0,[R6, #+788] \ 0000009C 000050E3 CMP R0,#+0 \ 000000A0 1100000A BEQ ??addIconBar_9 \ 000000A4 030050E2 SUBS R0,R0,#+3 \ 000000A8 0E00001A BNE ??addIconBar_10 \ ??addIconBar_11: \ 000000AC A80296E5 LDR R0,[R6, #+680] \ 000000B0 0D0000EA B ??addIconBar_9 \ ??addIconBar_0: \ 000000B4 020050E3 CMP R0,#+2 \ 000000B8 E0FFFF1A BNE ??addIconBar_4 \ 000000BC C50000EF SWI +197 \ 000000C0 000050E3 CMP R0,#+0 \ 000000C4 DDFFFF1A BNE ??addIconBar_4 \ 000000C8 380396E5 LDR R0,[R6, #+824] \ 000000CC 000050E3 CMP R0,#+0 \ 000000D0 D6FFFF1A BNE ??addIconBar_2 \ 000000D4 140396E5 LDR R0,[R6, #+788] \ 000000D8 000050E3 CMP R0,#+0 \ 000000DC 0200000A BEQ ??addIconBar_9 \ 000000E0 030050E2 SUBS R0,R0,#+3 \ 000000E4 F0FFFF0A BEQ ??addIconBar_11 \ ??addIconBar_10: \ 000000E8 0E00A0E3 MOV R0,#+14 \ ??addIconBar_9: \ 000000EC 002095E5 LDR R2,[R5, #+0] \ 000000F0 0410A0E1 MOV R1,R4 \ 000000F4 020080E0 ADD R0,R0,R2 \ 000000F8 CFFFFFEA B ??addIconBar_3 6119 else 6120 if(total_unread2 && total_unread2<10) \ ??addIconBar_7: \ 000000FC 8C0296E5 LDR R0,[R6, #+652] \ 00000100 000050E3 CMP R0,#+0 \ 00000104 0600000A BEQ ??addIconBar_12 \ 00000108 0A0050E3 CMP R0,#+10 \ 0000010C 040000AA BGE ??addIconBar_12 6121 AddIconToIconBar(8200 + total_unread2, num); \ 00000110 0410A0E1 MOV R1,R4 \ 00000114 0820A0E3 MOV R2,#+8 \ 00000118 802D82E3 ORR R2,R2,#0x2000 \ 0000011C 000082E0 ADD R0,R2,R0 \ 00000120 050000EA B ??addIconBar_13 6122 else 6123 if(CurrentXStatus!=0) \ ??addIconBar_12: \ 00000124 AC0296E5 LDR R0,[R6, #+684] \ 00000128 000050E3 CMP R0,#+0 \ 0000012C 0300000A BEQ ??addIconBar_6 6124 AddIconToIconBar(NumXStatusToIconBar+CurrentXStatus,num); \ 00000130 002098E5 LDR R2,[R8, #+0] \ ??addIconBar_8: \ 00000134 0410A0E1 MOV R1,R4 \ 00000138 020080E0 ADD R0,R0,R2 \ ??addIconBar_13: \ 0000013C 270000EF SWI +39 6125 } 6126 6127 if(show_xstatus==3) \ ??addIconBar_6: \ 00000140 000099E5 LDR R0,[R9, #+0] \ 00000144 030050E3 CMP R0,#+3 \ 00000148 F087BD18 POPNE {R4-R10,PC} 6128 { 6129 t=FindContactByUin(366226649);//366226649 \ 0000014C 54009FE5 LDR R0,??addIconBar_5+0x4 ;; 0x15d42cd9 \ 00000150 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000154 0070A0E1 MOV R7,R0 6130 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) \ 00000158 B405D7E1 LDRH R0,[R7, #+84] \ 0000015C 0A0050E1 CMP R0,R10 \ 00000160 F087BD08 POPEQ {R4-R10,PC} \ 00000164 0700A0E1 MOV R0,R7 \ 00000168 ........ BL GetIconIndex \ 0000016C 0E0050E3 CMP R0,#+14 \ 00000170 F087BD08 POPEQ {R4-R10,PC} 6131 { 6132 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); \ 00000174 0700A0E1 MOV R0,R7 \ 00000178 ........ BL GetIconIndex \ 0000017C 002095E5 LDR R2,[R5, #+0] \ 00000180 0410A0E1 MOV R1,R4 \ 00000184 020080E0 ADD R0,R0,R2 \ 00000188 270000EF SWI +39 6133 AddIconToIconBar(NumXStatusToIconBar +t->xstate, num); \ 0000018C B625D7E1 LDRH R2,[R7, #+86] \ 00000190 000098E5 LDR R0,[R8, #+0] \ 00000194 0410A0E1 MOV R1,R4 \ 00000198 000082E0 ADD R0,R2,R0 \ 0000019C 270000EF SWI +39 6134 } 6135 } 6136 #else 6137 if(ADDITION_UIN!=0) 6138 { 6139 CLIST *t; 6140 t=FindContactByUin(ADDITION_UIN); 6141 if(t) 6142 { 6143 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) 6144 { 6145 if(show_add_state) 6146 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); 6147 if(show_add_xstate) 6148 AddIconToIconBar(NumXStatusToIconBar + t->xstate, num); 6149 } 6150 } 6151 } 6152 #endif 6153 } \ 000001A0 F087BDE8 POP {R4-R10,PC} ;; return \ ??addIconBar_5: \ 000001A4 ........ DC32 NumXStatusToIconBar \ 000001A8 D92CD415 DC32 0x15d42cd9 6154 6155 typedef struct 6156 { 6157 char check_name[8]; 6158 int addr; 6159 }ICONBAR_H; 6160 6161 #endif 6162 \ In segment DATA_C, align 4, align-sorted 6163 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 6164 \ In segment DATA_Z, align 4, align-sorted 6165 unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 6166 6167 struct 6168 { 6169 CSM_DESC maincsm; 6170 WSHDR maincsm_name; 6171 #ifdef NEWSGOLD 6172 ICONBAR_H iconbar_handler; 6173 #endif 6174 }MAINCSM = 6175 { 6176 { 6177 maincsm_onmessage, 6178 maincsm_oncreate, 6179 #ifdef NEWSGOLD 6180 0, 6181 0, 6182 0, 6183 0, 6184 #endif 6185 maincsm_onclose, 6186 sizeof(MAIN_CSM), 6187 1, 6188 &minus11 6189 }, 6190 { 6191 maincsm_name_body, 6192 NAMECSM_MAGIC1, 6193 NAMECSM_MAGIC2, 6194 0x0, 6195 139 6196 } 6197 #ifdef NEWSGOLD 6198 , 6199 { 6200 "IconBar" 6201 } 6202 #endif 6203 }; 6204 \ In segment CODE, align 4, keep-with-next 6205 void UpdateCSMname(void) 6206 { 6207 wsprintf((WSHDR *)(&MAINCSM.maincsm_name), "NATICQ: %d",UIN); \ UpdateCSMname: \ 00000000 ........ LDR R0,??DataTable271 ;; UIN \ 00000004 10109FE5 LDR R1,??UpdateCSMname_0 ;; `?` \ 00000008 00402DE9 PUSH {LR} \ 0000000C 002090E5 LDR R2,[R0, #+0] \ 00000010 08009FE5 LDR R0,??UpdateCSMname_0+0x4 ;; S_ICONS + 156 \ 00000014 240100EF SWI +292 6208 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??UpdateCSMname_0: \ 0000001C ........ DC32 `?` \ 00000020 ........ DC32 S_ICONS + 156 6209 6210 #ifdef NEWSGOLD \ In segment CODE, align 4, keep-with-next 6211 void SetIconBarHandler() 6212 { 6213 MAINCSM.iconbar_handler.addr = (int)addIconBar; \ SetIconBarHandler: \ 00000000 08009FE5 LDR R0,??SetIconBarHandler_0 ;; S_ICONS + 184 \ 00000004 ........ LDR R1,??DataTable277 ;; addIconBar \ 00000008 001080E5 STR R1,[R0, #+0] 6214 } \ 0000000C 1EFF2FE1 BX LR ;; return \ ??SetIconBarHandler_0: \ 00000010 ........ DC32 S_ICONS + 184 6215 #endif 6216 \ In segment CODE, align 4, keep-with-next 6217 int main(char *filename) 6218 { \ main: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 6219 MAIN_CSM main_csm; 6220 char *s; 6221 int len; 6222 WSHDR *ws; 6223 UpdateConfig(); 6224 //InitConfig(); 6225 6226 sprintf(PINGO, "Ping None"); \ 00000004 ........ LDR R4,??DataTable288 ;; S_ICONS \ 00000008 ........ LDR R5,??DataTable270 ;; `?` \ 0000000C 2CD04DE2 SUB SP,SP,#+44 \ 00000010 0060A0E1 MOV R6,R0 \ 00000014 ........ _BLF UpdateConfig,??UpdateConfig??rA \ 00000018 B800A0E3 MOV R0,#+184 \ 0000001C 400E80E3 ORR R0,R0,#0x400 \ 00000020 051080E0 ADD R1,R0,R5 \ 00000024 590D84E2 ADD R0,R4,#+5696 \ 00000028 160000EF SWI +22 6227 6228 s=strrchr(filename,'\\'); 6229 len=(s-filename)+1; \ 0000002C 5C10A0E3 MOV R1,#+92 \ 00000030 0600A0E1 MOV R0,R6 \ 00000034 170100EF SWI +279 \ 00000038 060040E0 SUB R0,R0,R6 \ 0000003C 017080E2 ADD R7,R0,#+1 6230 strncpy(elf_path,filename,len); \ 00000040 0720A0E1 MOV R2,R7 \ 00000044 0610A0E1 MOV R1,R6 \ 00000048 450E84E2 ADD R0,R4,#+1104 \ 0000004C 160100EF SWI +278 6231 elf_path[len]=0; \ 00000050 040087E0 ADD R0,R7,R4 \ 00000054 0010A0E3 MOV R1,#+0 \ 00000058 5014C0E5 STRB R1,[R0, #+1104] 6232 if (!UIN) \ 0000005C ........ LDR R0,??DataTable271 ;; UIN \ 00000060 000090E5 LDR R0,[R0, #+0] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 1700001A BNE ??main_1 6233 { 6234 LockSched(); \ 0000006C 460100EF SWI +326 6235 ShowMSG(1,(int)LG_MSGNOUINPASS); \ 00000070 C400A0E3 MOV R0,#+196 \ 00000074 400E80E3 ORR R0,R0,#0x400 \ 00000078 051080E0 ADD R1,R0,R5 \ 0000007C 0100A0E3 MOV R0,#+1 \ 00000080 480100EF SWI +328 6236 ws=AllocWS(150); \ 00000084 9600A0E3 MOV R0,#+150 \ 00000088 250100EF SWI +293 6237 str_2ws(ws,suc_config_name,128); \ 0000008C ........ LDR R1,??DataTable272 ;; suc_config_name \ 00000090 0040A0E1 MOV R4,R0 \ 00000094 8020A0E3 MOV R2,#+128 \ 00000098 6C0100EF SWI +364 6238 ExecuteFile(ws,0,0); \ 0000009C 0020A0E3 MOV R2,#+0 \ 000000A0 0010A0E3 MOV R1,#+0 \ 000000A4 0400A0E1 MOV R0,R4 \ 000000A8 940000EF SWI +148 6239 FreeWS(ws); \ 000000AC 0400A0E1 MOV R0,R4 \ 000000B0 290100EF SWI +297 6240 UnlockSched(); \ 000000B4 470100EF SWI +327 6241 SUBPROC((void *)ElfKiller); \ 000000B8 ........ LDR R0,??DataTable273 ;; ElfKiller \ 000000BC 710100EF SWI +369 6242 return 0; \ 000000C0 0000A0E3 MOV R0,#+0 \ 000000C4 2CD08DE2 ADD SP,SP,#+44 \ 000000C8 F080BDE8 POP {R4-R7,PC} 6243 } 6244 ReadDefSettings(); 6245 setup_ICONS(); 6246 LoadXStatusText(); 6247 UpdateCSMname(); 6248 LockSched(); 6249 maincsm_id=CreateCSM(&MAINCSM.maincsm,&main_csm,0); 6250 UnlockSched(); 6251 6252 PrintLibInit(1); 6253 FontPathInit((char *)fontpath, 1); \ ??main_1: \ 000000CC ........ LDR R6,??DataTable274 ;; fontpath \ 000000D0 ........ BL ReadDefSettings \ 000000D4 ........ BL setup_ICONS \ 000000D8 ........ _BLF LoadXStatusText,??LoadXStatusText??rA \ 000000DC ........ BL UpdateCSMname \ 000000E0 460100EF SWI +326 \ 000000E4 0020A0E3 MOV R2,#+0 \ 000000E8 0D10A0E1 MOV R1,SP \ 000000EC 740084E2 ADD R0,R4,#+116 \ 000000F0 070100EF SWI +263 \ 000000F4 900284E5 STR R0,[R4, #+656] \ 000000F8 470100EF SWI +327 \ 000000FC 0100A0E3 MOV R0,#+1 \ 00000100 ........ _BLF PrintLibInit,??PrintLibInit??rA \ 00000104 0110A0E3 MOV R1,#+1 \ 00000108 0600A0E1 MOV R0,R6 \ 0000010C ........ _BLF FontPathInit,??FontPathInit??rA 6254 SetFontColor((char*)fontColor,(char*)bgrColor,1); \ 00000110 ........ LDR R1,??DataTable275 ;; bgrColor \ 00000114 ........ LDR R0,??DataTable276 ;; fontColor \ 00000118 0120A0E3 MOV R2,#+1 \ 0000011C ........ _BLF SetFontColor,??SetFontColor??rA 6255 away_timer(); \ 00000120 ........ BL away_timer 6256 #ifdef NEWSGOLD 6257 SetIconBarHandler(); \ 00000124 ........ LDR R0,??DataTable277 ;; addIconBar \ 00000128 B80084E5 STR R0,[R4, #+184] 6258 #endif 6259 #ifdef kluchnik 6260 switch(CurrentPrivateStatus) \ 0000012C F80294E5 LDR R0,[R4, #+760] \ 00000130 040050E3 CMP R0,#+4 \ 00000134 0E00008A BHI ??main_2 \ 00000138 011F8FE2 ADR R1,??main_0 \ 0000013C 0010D1E7 LDRB R1,[R1, R0] \ 00000140 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??main_0: \ 00000144 01030507 DC8 +1,+3,+5,+7 \ 00000148 09000000 DC8 +9,+0,+0,+0 6261 { 6262 case 0: ICON_HD=ICON_ALL_CAN_SEE; break; \ ??main_3: \ 0000014C 1700A0E3 MOV R0,#+23 \ 00000150 060000EA B ??main_4 6263 case 1: ICON_HD=ICON_NOBODY_CAN_SEE; break; \ ??main_5: \ 00000154 1B00A0E3 MOV R0,#+27 \ 00000158 040000EA B ??main_4 6264 case 2: ICON_HD=ICON_VISLIST_CAN_SEE; break; \ ??main_6: \ 0000015C 1800A0E3 MOV R0,#+24 \ 00000160 020000EA B ??main_4 6265 case 3: ICON_HD=ICON_INVISLIST_CANNOT_SEE; break; \ ??main_7: \ 00000164 1900A0E3 MOV R0,#+25 \ 00000168 000000EA B ??main_4 6266 case 4: ICON_HD=ICON_CONTACTLIST_CAN_SEE; break; \ ??main_8: \ 0000016C 1A00A0E3 MOV R0,#+26 \ ??main_4: \ 00000170 500384E5 STR R0,[R4, #+848] 6267 } 6268 #endif 6269 if(fonto==1) \ ??main_2: \ 00000174 ........ LDR R0,??DataTable278 ;; fonto \ 00000178 000090E5 LDR R0,[R0, #+0] \ 0000017C 010050E3 CMP R0,#+1 \ 00000180 0B00001A BNE ??main_9 6270 { 6271 char *heght=malloc(64); \ 00000184 4000A0E3 MOV R0,#+64 \ 00000188 140000EF SWI +20 \ 0000018C 0070A0E1 MOV R7,R0 6272 sprintf(heght, "%s2240.png", fontpath); \ 00000190 0620A0E1 MOV R2,R6 \ 00000194 F71F85E2 ADD R1,R5,#+988 \ 00000198 160000EF SWI +22 6273 paused_height=GetImgHeight((int)heght); \ 0000019C 0700A0E1 MOV R0,R7 \ 000001A0 210000EF SWI +33 \ 000001A4 640284E5 STR R0,[R4, #+612] 6274 mfree(heght); \ 000001A8 0700A0E1 MOV R0,R7 \ 000001AC 150000EF SWI +21 \ 000001B0 010000EA B ??main_10 6275 } 6276 else 6277 paused_height=fonto-100; \ ??main_9: \ 000001B4 640040E2 SUB R0,R0,#+100 \ 000001B8 640284E5 STR R0,[R4, #+612] 6278 GBS_StartTimerProc(&ping_tmr, 12000, Pinger2); \ ??main_10: \ 000001BC ........ LDR R2,??DataTable279 ;; Pinger2 \ 000001C0 E010A0E3 MOV R1,#+224 \ 000001C4 B81D81E3 ORR R1,R1,#0x2E00 \ 000001C8 3000A0E3 MOV R0,#+48 \ 000001CC 580D80E3 ORR R0,R0,#0x1600 \ 000001D0 040080E0 ADD R0,R0,R4 \ 000001D4 4D0000EF SWI +77 6279 upTime(); \ 000001D8 ........ BL upTime 6280 #ifdef NEWSGOLD 6281 ScreenSaverTimer(); \ 000001DC ........ BL ScreenSaverTimer 6282 initTags(); \ 000001E0 ........ _BLF initTags,??initTags??rA 6283 #endif 6284 AutoChangeStatus_timer(); \ 000001E4 ........ BL AutoChangeStatus_timer 6285 init_time_zone(); \ 000001E8 ........ BL init_time_zone 6286 AddKeybMsgHook((void *)my_keyhook); \ 000001EC ........ LDR R0,??DataTable280 ;; my_keyhook \ 000001F0 2B0100EF SWI +299 6287 return 0; \ 000001F4 0000A0E3 MOV R0,#+0 \ 000001F8 2CD08DE2 ADD SP,SP,#+44 \ 000001FC F080BDE8 POP {R4-R7,PC} ;; return 6288 } 6289 6290 //=========================================================== 6291 // Edit chat 6292 //=========================================================== 6293 \ In segment CODE, align 4, keep-with-next 6294 void edchat_locret(void){} \ edchat_locret: \ 00000000 1EFF2FE1 BX LR ;; return 6295 \ In segment CODE, align 4, keep-with-next 6296 char *ExtractAnswer(WSHDR *ws) 6297 { \ ExtractAnswer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 6298 S_SMILES *t; 6299 int c; 6300 int len=0; 6301 int scur; 6302 char *msg=NULL; 6303 unsigned short *wsbody=ws->wsbody; \ 00000004 005090E5 LDR R5,[R0, #+0] \ 00000008 0040A0E3 MOV R4,#+0 6304 int wslen=wsbody[0]; \ 0000000C B060D5E1 LDRH R6,[R5, #+0] \ 00000010 0070A0E3 MOV R7,#+0 6305 if (wslen) \ 00000014 000056E3 CMP R6,#+0 \ 00000018 3C00000A BEQ ??ExtractAnswer_0 6306 { 6307 for (int i=0; i=0xE100) 6311 { 6312 t=FindSmileByUni(c); 6313 if (t) 6314 { 6315 if (t->lines) 6316 { 6317 len+=strlen(t->lines->text); 6318 } 6319 } 6320 else len++; 6321 } 6322 else len++; 6323 } 6324 6325 msg=malloc(len+1); \ ??ExtractAnswer_2: \ 00000024 010084E2 ADD R0,R4,#+1 \ 00000028 140000EF SWI +20 \ 0000002C 0070A0E1 MOV R7,R0 6326 scur=0; \ 00000030 0090A0E3 MOV R9,#+0 6327 for (int wcur=0; wcur=0xE100) 6332 { 6333 t=FindSmileByUni(c); 6334 if (t) 6335 { 6336 int w; 6337 char *s; 6338 if (t->lines) 6339 { 6340 s=t->lines->text; 6341 while ((w=*s++) && scurnext)) \ FindNextActiveContact: \ ??FindNextActiveContact_0: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0300000A BEQ ??FindNextActiveContact_1 6368 { 6369 if (t->isactive) return t; \ 0000000C A81090E5 LDR R1,[R0, #+168] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 F9FFFF0A BEQ ??FindNextActiveContact_0 \ 00000018 1EFF2FE1 BX LR 6370 } 6371 t=(CLIST *)(&cltop); \ ??FindNextActiveContact_1: \ 0000001C ........ LDR R0,??DataTable282 ;; S_ICONS + 828 \ 00000020 020000EA B ??FindNextActiveContact_2 6372 while(t=(CLIST *)(t->next)) 6373 { 6374 if (t->isactive) return t; \ ??FindNextActiveContact_3: \ 00000024 A81090E5 LDR R1,[R0, #+168] \ 00000028 000051E3 CMP R1,#+0 \ 0000002C 1EFF2F11 BXNE LR 6375 } \ ??FindNextActiveContact_2: \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 F9FFFF1A BNE ??FindNextActiveContact_3 6376 return NULL; \ 0000003C 1EFF2FE1 BX LR ;; return 6377 } 6378 \ In segment CODE, align 4, keep-with-next 6379 CLIST *FindPrevActiveContact(CLIST *t) 6380 { 6381 CLIST *cl; 6382 CLIST *cl_active=NULL; 6383 cl=(CLIST *)(&cltop); \ FindPrevActiveContact: \ 00000000 ........ LDR R2,??DataTable282 ;; S_ICONS + 828 \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 020000EA B ??FindPrevActiveContact_0 6384 6385 6386 while(cl=cl->next) 6387 { 6388 if (cl==t) 6389 { 6390 if (cl_active==NULL) break; 6391 else return (cl_active); 6392 } 6393 else 6394 { 6395 if (cl->isactive) cl_active=cl; \ ??FindPrevActiveContact_1: \ 0000000C A83092E5 LDR R3,[R2, #+168] \ 00000010 000053E3 CMP R3,#+0 \ 00000014 0210A011 MOVNE R1,R2 6396 } \ ??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 6397 } 6398 while(t) \ ??FindPrevActiveContact_2: \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 FBFFFF0A BEQ ??FindPrevActiveContact_3 6399 { 6400 if (t->isactive) cl_active=t; \ 00000044 A82090E5 LDR R2,[R0, #+168] \ 00000048 000052E3 CMP R2,#+0 \ 0000004C 0010A011 MOVNE R1,R0 6401 t=t->next; \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 F8FFFFEA B ??FindPrevActiveContact_2 6402 } 6403 return cl_active; 6404 } 6405 6406 \ In segment CODE, align 4, keep-with-next 6407 void ed_options_handler(USR_MENU_ITEM *item) 6408 { \ ed_options_handler: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 6409 EDCHAT_STRUCT *ed_struct=item->user_pointer; 6410 CLIST *t; 6411 int i=item->cur_item; 6412 if (item->type==0) \ 00000004 ........ LDR R5,??DataTable288 ;; S_ICONS \ 00000008 58D04DE2 SUB SP,SP,#+88 \ 0000000C ........ LDR R7,??DataTable284 ;; IsMultiBuffer \ 00000010 0080A0E1 MOV R8,R0 \ 00000014 0000D8E5 LDRB R0,[R8, #+0] \ 00000018 044098E5 LDR R4,[R8, #+4] \ 0000001C B860D8E1 LDRH R6,[R8, #+8] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 3200001A BNE ??ed_options_handler_0 6413 { 6414 if(IsMultiBuffer) \ 00000028 003097E5 LDR R3,[R7, #+0] \ 0000002C 041395E5 LDR R1,[R5, #+772] \ 00000030 102094E5 LDR R2,[R4, #+16] \ 00000034 0C0098E5 LDR R0,[R8, #+12] \ 00000038 70949FE5 LDR R9,??ed_options_handler_1 ;; `?` \ 0000003C 000053E3 CMP R3,#+0 \ 00000040 1900000A BEQ ??ed_options_handler_2 6415 { 6416 switch(i) \ 00000044 0630B0E1 MOVS R3,R6 \ 00000048 0600000A BEQ ??ed_options_handler_3 \ 0000004C 013056E2 SUBS R3,R6,#+1 \ 00000050 0D00000A BEQ ??ed_options_handler_4 \ 00000054 013053E2 SUBS R3,R3,#+1 \ 00000058 0D00000A BEQ ??ed_options_handler_5 \ 0000005C 013053E2 SUBS R3,R3,#+1 \ 00000060 0D00000A BEQ ??ed_options_handler_6 \ 00000064 0E0000EA B ??ed_options_handler_7 6417 { 6418 case 0: 6419 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ed_options_handler_3: \ 00000068 040094E5 LDR R0,[R4, #+4] \ 0000006C 820100EF SWI +386 \ 00000070 081094E5 LDR R1,[R4, #+8] \ 00000074 010050E1 CMP R0,R1 \ 00000078 0C009815 LDRNE R0,[R8, #+12] \ 0000007C 08108912 ADDNE R1,R9,#+8 6420 ascii2ws(item->ws,"Cмайлы"); \ 00000080 0C009805 LDREQ R0,[R8, #+12] \ 00000084 0910A001 MOVEQ R1,R9 \ 00000088 180000EA B ??ed_options_handler_8 6421 else 6422 ascii2ws(item->ws,"В буфер"); 6423 break; 6424 case 1: 6425 ascii2ws(item->ws,"Из буфера"); \ ??ed_options_handler_4: \ 0000008C 101089E2 ADD R1,R9,#+16 \ 00000090 160000EA B ??ed_options_handler_8 6426 break; 6427 case 2: 6428 ascii2ws(item->ws,"Команда"); \ ??ed_options_handler_5: \ 00000094 1C1089E2 ADD R1,R9,#+28 \ 00000098 140000EA B ??ed_options_handler_8 6429 break; 6430 case 3: 6431 ascii2ws(item->ws,"Очистить буфер"); \ ??ed_options_handler_6: \ 0000009C 241089E2 ADD R1,R9,#+36 \ 000000A0 120000EA B ??ed_options_handler_8 6432 break; 6433 default: 6434 i-=4; \ ??ed_options_handler_7: \ 000000A4 046046E2 SUB R6,R6,#+4 6435 if (iloaded_templates) ascii2ws(item->ws,templates_lines[i]); \ 000000A8 0D0000EA B ??ed_options_handler_9 6436 break; 6437 } 6438 } 6439 else 6440 { 6441 switch(i) \ ??ed_options_handler_2: \ 000000AC 0630B0E1 MOVS R3,R6 \ 000000B0 0400000A BEQ ??ed_options_handler_10 \ 000000B4 013056E2 SUBS R3,R6,#+1 \ 000000B8 0400000A BEQ ??ed_options_handler_11 \ 000000BC 013053E2 SUBS R3,R3,#+1 \ 000000C0 0400000A BEQ ??ed_options_handler_12 \ 000000C4 050000EA B ??ed_options_handler_13 6442 { 6443 case 0: 6444 ascii2ws(item->ws,LG_MNUEDNEXTACT); \ ??ed_options_handler_10: \ 000000C8 341089E2 ADD R1,R9,#+52 \ 000000CC 070000EA B ??ed_options_handler_8 6445 break; 6446 case 1: 6447 ascii2ws(item->ws,LG_MNUEDPREVACT); \ ??ed_options_handler_11: \ 000000D0 441089E2 ADD R1,R9,#+68 \ 000000D4 050000EA B ??ed_options_handler_8 6448 break; 6449 case 2: 6450 ascii2ws(item->ws,"Команды"); \ ??ed_options_handler_12: \ 000000D8 541089E2 ADD R1,R9,#+84 \ 000000DC 030000EA B ??ed_options_handler_8 6451 break; 6452 default: 6453 i-=3; \ ??ed_options_handler_13: \ 000000E0 036046E2 SUB R6,R6,#+3 6454 if (iloaded_templates) ascii2ws(item->ws,templates_lines[i]); \ ??ed_options_handler_9: \ 000000E4 020056E1 CMP R6,R2 \ 000000E8 EE0000AA BGE ??ed_options_handler_14 \ 000000EC 061191E7 LDR R1,[R1, +R6, LSL #+2] \ ??ed_options_handler_8: \ 000000F0 ........ _BLF ascii2ws,??ascii2ws??rA 6455 break; 6456 } 6457 } 6458 } 6459 6460 if (item->type==1) \ ??ed_options_handler_0: \ 000000F4 0000D8E5 LDRB R0,[R8, #+0] \ 000000F8 010050E3 CMP R0,#+1 \ 000000FC E900001A BNE ??ed_options_handler_14 6461 { 6462 if(IsMultiBuffer) \ 00000100 003097E5 LDR R3,[R7, #+0] \ 00000104 041395E5 LDR R1,[R5, #+772] \ 00000108 102094E5 LDR R2,[R4, #+16] \ 0000010C 040094E5 LDR R0,[R4, #+4] \ 00000110 000053E3 CMP R3,#+0 \ 00000114 9C00000A BEQ ??ed_options_handler_15 6463 { 6464 switch(i) \ 00000118 0630B0E1 MOVS R3,R6 \ 0000011C 0600000A BEQ ??ed_options_handler_16 \ 00000120 013056E2 SUBS R3,R6,#+1 \ 00000124 4200000A BEQ ??ed_options_handler_17 \ 00000128 013053E2 SUBS R3,R3,#+1 \ 0000012C 5C00000A BEQ ??ed_options_handler_18 \ 00000130 013053E2 SUBS R3,R3,#+1 \ 00000134 5D00000A BEQ ??ed_options_handler_19 \ 00000138 600000EA B ??ed_options_handler_20 6465 { 6466 case 0: 6467 { 6468 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ed_options_handler_16: \ 0000013C 820100EF SWI +386 \ 00000140 081094E5 LDR R1,[R4, #+8] \ 00000144 010050E1 CMP R0,R1 \ 00000148 0200001A BNE ??ed_options_handler_21 6469 CreateSmileSelectGUI(ed_struct); \ 0000014C 0400A0E1 MOV R0,R4 \ 00000150 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA \ 00000154 340000EA B ??ed_options_handler_22 6470 else 6471 { 6472 int ed; 6473 EDITCONTROL ec; 6474 EDITCONTROL ec_hdr; 6475 6476 ed=EDIT_GetFocus(ed_struct->ed_chatgui); \ ??ed_options_handler_21: \ 00000158 040094E5 LDR R0,[R4, #+4] \ 0000015C 820100EF SWI +386 \ 00000160 0060A0E1 MOV R6,R0 6477 ExtractEditControl(ed_struct->ed_chatgui,ed,&ec); \ 00000164 040094E5 LDR R0,[R4, #+4] \ 00000168 2C208DE2 ADD R2,SP,#+44 \ 0000016C 0610A0E1 MOV R1,R6 \ 00000170 690100EF SWI +361 6478 ExtractEditControl(ed_struct->ed_chatgui,ed-1,&ec_hdr); \ 00000174 040094E5 LDR R0,[R4, #+4] \ 00000178 0D20A0E1 MOV R2,SP \ 0000017C 011046E2 SUB R1,R6,#+1 \ 00000180 690100EF SWI +361 6479 6480 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 00000184 680295E5 LDR R0,[R5, #+616] \ 00000188 230100EF SWI +291 \ 0000018C 012080E2 ADD R2,R0,#+1 \ 00000190 680295E5 LDR R0,[R5, #+616] \ 00000194 3E10A0E3 MOV R1,#+62 \ 00000198 1D0000EF SWI +29 6481 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 0000019C 680295E5 LDR R0,[R5, #+616] \ 000001A0 230100EF SWI +291 \ 000001A4 012080E2 ADD R2,R0,#+1 \ 000001A8 680295E5 LDR R0,[R5, #+616] \ 000001AC 2010A0E3 MOV R1,#+32 \ 000001B0 1D0000EF SWI +29 6482 wstrcat(wsBuffer,ec_hdr.pWS); \ 000001B4 28109DE5 LDR R1,[SP, #+40] \ 000001B8 680295E5 LDR R0,[R5, #+616] \ 000001BC 210100EF SWI +289 6483 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 000001C0 680295E5 LDR R0,[R5, #+616] \ 000001C4 230100EF SWI +291 \ 000001C8 012080E2 ADD R2,R0,#+1 \ 000001CC 680295E5 LDR R0,[R5, #+616] \ 000001D0 0A10A0E3 MOV R1,#+10 \ 000001D4 1D0000EF SWI +29 6484 6485 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 000001D8 680295E5 LDR R0,[R5, #+616] \ 000001DC 230100EF SWI +291 \ 000001E0 012080E2 ADD R2,R0,#+1 \ 000001E4 680295E5 LDR R0,[R5, #+616] \ 000001E8 3E10A0E3 MOV R1,#+62 \ 000001EC 1D0000EF SWI +29 6486 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 000001F0 680295E5 LDR R0,[R5, #+616] \ 000001F4 230100EF SWI +291 \ 000001F8 012080E2 ADD R2,R0,#+1 \ 000001FC 680295E5 LDR R0,[R5, #+616] \ 00000200 2010A0E3 MOV R1,#+32 \ 00000204 1D0000EF SWI +29 6487 wstrcat(wsBuffer,ec.pWS); \ 00000208 54109DE5 LDR R1,[SP, #+84] \ 0000020C 680295E5 LDR R0,[R5, #+616] \ 00000210 210100EF SWI +289 6488 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 00000214 680295E5 LDR R0,[R5, #+616] \ 00000218 230100EF SWI +291 \ 0000021C 012080E2 ADD R2,R0,#+1 \ 00000220 680295E5 LDR R0,[R5, #+616] \ 00000224 0A10A0E3 MOV R1,#+10 \ 00000228 1D0000EF SWI +29 \ ??ed_options_handler_22: \ 0000022C 58D08DE2 ADD SP,SP,#+88 \ 00000230 F083BDE8 POP {R4-R9,PC} 6489 } 6490 } 6491 break; 6492 case 1: 6493 { 6494 EDITCONTROL ec; 6495 WSHDR *ws; 6496 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); \ ??ed_options_handler_17: \ 00000234 081094E5 LDR R1,[R4, #+8] \ 00000238 0D20A0E1 MOV R2,SP \ 0000023C 690100EF SWI +361 6497 ws=AllocWS(ec.pWS->wsbody[0]+wsBuffer->wsbody[0]+1); \ 00000240 28009DE5 LDR R0,[SP, #+40] \ 00000244 681295E5 LDR R1,[R5, #+616] \ 00000248 000090E5 LDR R0,[R0, #+0] \ 0000024C 001091E5 LDR R1,[R1, #+0] \ 00000250 B000D0E1 LDRH R0,[R0, #+0] \ 00000254 B010D1E1 LDRH R1,[R1, #+0] \ 00000258 000081E0 ADD R0,R1,R0 \ 0000025C 010080E2 ADD R0,R0,#+1 \ 00000260 250100EF SWI +293 6498 wstrcpy(ws,ec.pWS); \ 00000264 28109DE5 LDR R1,[SP, #+40] \ 00000268 0060A0E1 MOV R6,R0 \ 0000026C 1F0100EF SWI +287 6499 wstrcat(ws,wsBuffer); \ 00000270 681295E5 LDR R1,[R5, #+616] \ 00000274 0600A0E1 MOV R0,R6 \ 00000278 210100EF SWI +289 6500 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ws); \ 0000027C 040094E5 LDR R0,[R4, #+4] \ 00000280 081094E5 LDR R1,[R4, #+8] \ 00000284 0620A0E1 MOV R2,R6 \ 00000288 DE0100EF SWI +478 6501 EDIT_SetCursorPos(ed_struct->ed_chatgui,wstrlen(ws)); \ 0000028C 0600A0E1 MOV R0,R6 \ 00000290 230100EF SWI +291 \ 00000294 0010A0E1 MOV R1,R0 \ 00000298 040094E5 LDR R0,[R4, #+4] \ 0000029C D40100EF SWI +468 \ 000002A0 E1FFFFEA B ??ed_options_handler_22 6502 } 6503 break; 6504 case 2: 6505 DispCmdMenu(ed_struct); \ ??ed_options_handler_18: \ 000002A4 0400A0E1 MOV R0,R4 \ 000002A8 ........ BL DispCmdMenu \ 000002AC DEFFFFEA B ??ed_options_handler_22 6506 break; 6507 case 3: 6508 CutWSTR(wsBuffer,0); \ ??ed_options_handler_19: \ 000002B0 680295E5 LDR R0,[R5, #+616] \ 000002B4 0010A0E3 MOV R1,#+0 \ 000002B8 260100EF SWI +294 \ 000002BC DAFFFFEA B ??ed_options_handler_22 6509 break; 6510 default: 6511 i-=4; \ ??ed_options_handler_20: \ 000002C0 046046E2 SUB R6,R6,#+4 6512 if (iloaded_templates) \ 000002C4 020056E1 CMP R6,R2 \ 000002C8 760000AA BGE ??ed_options_handler_14 6513 { 6514 EDITCONTROL ec; 6515 WSHDR *ed_ws; 6516 int c; 6517 char *p=templates_lines[i]; \ 000002CC 065191E7 LDR R5,[R1, +R6, LSL #+2] 6518 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); \ 000002D0 081094E5 LDR R1,[R4, #+8] \ 000002D4 0D20A0E1 MOV R2,SP \ 000002D8 690100EF SWI +361 6519 ed_ws=AllocWS(ec.pWS->wsbody[0]+strlen(p)); \ 000002DC 0500A0E1 MOV R0,R5 \ 000002E0 1B0000EF SWI +27 \ 000002E4 28109DE5 LDR R1,[SP, #+40] \ 000002E8 001091E5 LDR R1,[R1, #+0] \ 000002EC B010D1E1 LDRH R1,[R1, #+0] \ 000002F0 010080E0 ADD R0,R0,R1 \ 000002F4 250100EF SWI +293 6520 wstrcpy(ed_ws,ec.pWS); \ 000002F8 28109DE5 LDR R1,[SP, #+40] \ 000002FC 0060A0E1 MOV R6,R0 \ 00000300 1F0100EF SWI +287 6521 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ 00000304 040094E5 LDR R0,[R4, #+4] \ 00000308 820100EF SWI +386 \ 0000030C 081094E5 LDR R1,[R4, #+8] \ 00000310 010050E1 CMP R0,R1 \ 00000314 1800001A BNE ??ed_options_handler_23 6522 { 6523 int pos=EDIT_GetCursorPos(ed_struct->ed_chatgui); \ 00000318 040094E5 LDR R0,[R4, #+4] \ 0000031C D30100EF SWI +467 \ 00000320 0070A0E1 MOV R7,R0 \ 00000324 050000EA B ??ed_options_handler_24 6524 while(c=*p++) 6525 { 6526 wsInsertChar(ed_ws,char8to16(c),pos++); \ ??ed_options_handler_25: \ 00000328 ........ _BLF char8to16,??char8to16??rA \ 0000032C 0720A0E1 MOV R2,R7 \ 00000330 0010A0E1 MOV R1,R0 \ 00000334 0600A0E1 MOV R0,R6 \ 00000338 1D0000EF SWI +29 \ 0000033C 017087E2 ADD R7,R7,#+1 6527 } \ ??ed_options_handler_24: \ 00000340 ........ LDRB R0,[R5], #+1 \ 00000344 000050E3 CMP R0,#+0 \ 00000348 F6FFFF1A BNE ??ed_options_handler_25 6528 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ ??ed_options_handler_26: \ 0000034C 081094E5 LDR R1,[R4, #+8] \ 00000350 040094E5 LDR R0,[R4, #+4] \ 00000354 0620A0E1 MOV R2,R6 \ 00000358 DE0100EF SWI +478 6529 EDIT_SetCursorPos(ed_struct->ed_chatgui,pos); \ 0000035C 040094E5 LDR R0,[R4, #+4] \ 00000360 0710A0E1 MOV R1,R7 \ 00000364 D40100EF SWI +468 \ 00000368 4C0000EA B ??ed_options_handler_27 6530 } 6531 else 6532 { 6533 while(c=*p++) 6534 { 6535 wsAppendChar(ed_ws,char8to16(c)); \ ??ed_options_handler_28: \ 0000036C ........ _BLF char8to16,??char8to16??rA \ 00000370 0010A0E1 MOV R1,R0 \ 00000374 0600A0E1 MOV R0,R6 \ 00000378 1C0000EF SWI +28 6536 } \ ??ed_options_handler_23: \ 0000037C ........ LDRB R0,[R5], #+1 \ 00000380 000050E3 CMP R0,#+0 \ 00000384 F8FFFF1A BNE ??ed_options_handler_28 6537 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 00000388 400000EA B ??ed_options_handler_29 6538 } 6539 FreeWS(ed_ws); 6540 } 6541 break; 6542 } 6543 } 6544 else 6545 { 6546 switch(i) \ ??ed_options_handler_15: \ 0000038C 007094E5 LDR R7,[R4, #+0] \ 00000390 0630B0E1 MOVS R3,R6 \ 00000394 0400000A BEQ ??ed_options_handler_30 \ 00000398 013056E2 SUBS R3,R6,#+1 \ 0000039C 0D00000A BEQ ??ed_options_handler_31 \ 000003A0 013053E2 SUBS R3,R3,#+1 \ 000003A4 BEFFFF0A BEQ ??ed_options_handler_18 \ 000003A8 0D0000EA B ??ed_options_handler_32 6547 { 6548 case 0: 6549 t=FindNextActiveContact(ed_struct->ed_contact); \ ??ed_options_handler_30: \ 000003AC 0700A0E1 MOV R0,R7 \ 000003B0 ........ BL FindNextActiveContact \ ??ed_options_handler_33: \ 000003B4 0040B0E1 MOVS R4,R0 6550 if (t && t!=ed_struct->ed_contact) \ 000003B8 07005411 CMPNE R4,R7 \ 000003BC 3900000A BEQ ??ed_options_handler_14 6551 { 6552 GeneralFunc_flag1(edchat_id,1); \ 000003C0 480395E5 LDR R0,[R5, #+840] \ 000003C4 0110A0E3 MOV R1,#+1 \ 000003C8 3D0100EF SWI +317 6553 CreateEditChat(t); \ 000003CC 0400A0E1 MOV R0,R4 \ 000003D0 ........ BL CreateEditChat \ 000003D4 94FFFFEA B ??ed_options_handler_22 6554 } 6555 break; 6556 case 1: 6557 t=FindPrevActiveContact(ed_struct->ed_contact); \ ??ed_options_handler_31: \ 000003D8 0700A0E1 MOV R0,R7 \ 000003DC ........ BL FindPrevActiveContact \ 000003E0 F3FFFFEA B ??ed_options_handler_33 6558 if (t && t!=ed_struct->ed_contact) 6559 { 6560 GeneralFunc_flag1(edchat_id,1); 6561 CreateEditChat(t); 6562 } 6563 break; 6564 case 2: 6565 DispCmdMenu(ed_struct); 6566 break; 6567 default: 6568 i-=3; \ ??ed_options_handler_32: \ 000003E4 036046E2 SUB R6,R6,#+3 6569 if (iloaded_templates) \ 000003E8 020056E1 CMP R6,R2 \ 000003EC 2D0000AA BGE ??ed_options_handler_14 6570 { 6571 EDITCONTROL ec; 6572 WSHDR *ed_ws; 6573 int c; 6574 char *p=templates_lines[i]; \ 000003F0 065191E7 LDR R5,[R1, +R6, LSL #+2] 6575 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); \ 000003F4 081094E5 LDR R1,[R4, #+8] \ 000003F8 0D20A0E1 MOV R2,SP \ 000003FC 690100EF SWI +361 6576 ed_ws=AllocWS(ec.pWS->wsbody[0]+strlen(p)); \ 00000400 0500A0E1 MOV R0,R5 \ 00000404 1B0000EF SWI +27 \ 00000408 28109DE5 LDR R1,[SP, #+40] \ 0000040C 001091E5 LDR R1,[R1, #+0] \ 00000410 B010D1E1 LDRH R1,[R1, #+0] \ 00000414 010080E0 ADD R0,R0,R1 \ 00000418 250100EF SWI +293 6577 wstrcpy(ed_ws,ec.pWS); \ 0000041C 28109DE5 LDR R1,[SP, #+40] \ 00000420 0060A0E1 MOV R6,R0 \ 00000424 1F0100EF SWI +287 6578 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ 00000428 040094E5 LDR R0,[R4, #+4] \ 0000042C 820100EF SWI +386 \ 00000430 081094E5 LDR R1,[R4, #+8] \ 00000434 010050E1 CMP R0,R1 \ 00000438 1100001A BNE ??ed_options_handler_34 6579 { 6580 int pos=EDIT_GetCursorPos(ed_struct->ed_chatgui); \ 0000043C 040094E5 LDR R0,[R4, #+4] \ 00000440 D30100EF SWI +467 \ 00000444 0070A0E1 MOV R7,R0 \ 00000448 050000EA B ??ed_options_handler_35 6581 while(c=*p++) 6582 { 6583 wsInsertChar(ed_ws,char8to16(c),pos++); \ ??ed_options_handler_36: \ 0000044C ........ _BLF char8to16,??char8to16??rA \ 00000450 0010A0E1 MOV R1,R0 \ 00000454 0720A0E1 MOV R2,R7 \ 00000458 0600A0E1 MOV R0,R6 \ 0000045C 1D0000EF SWI +29 \ 00000460 017087E2 ADD R7,R7,#+1 6584 } \ ??ed_options_handler_35: \ 00000464 ........ LDRB R0,[R5], #+1 \ 00000468 000050E3 CMP R0,#+0 \ 0000046C F6FFFF1A BNE ??ed_options_handler_36 6585 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 00000470 B5FFFFEA B ??ed_options_handler_26 6586 EDIT_SetCursorPos(ed_struct->ed_chatgui,pos); 6587 } 6588 else 6589 { 6590 while(c=*p++) 6591 { 6592 wsAppendChar(ed_ws,char8to16(c)); \ ??ed_options_handler_37: \ 00000474 ........ _BLF char8to16,??char8to16??rA \ 00000478 0010A0E1 MOV R1,R0 \ 0000047C 0600A0E1 MOV R0,R6 \ 00000480 1C0000EF SWI +28 6593 } \ ??ed_options_handler_34: \ 00000484 ........ LDRB R0,[R5], #+1 \ 00000488 000050E3 CMP R0,#+0 \ 0000048C F8FFFF1A BNE ??ed_options_handler_37 6594 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ ??ed_options_handler_29: \ 00000490 081094E5 LDR R1,[R4, #+8] \ 00000494 040094E5 LDR R0,[R4, #+4] \ 00000498 0620A0E1 MOV R2,R6 \ 0000049C DE0100EF SWI +478 6595 } 6596 FreeWS(ed_ws); \ ??ed_options_handler_27: \ 000004A0 0600A0E1 MOV R0,R6 \ 000004A4 290100EF SWI +297 6597 } 6598 break; 6599 } 6600 } 6601 } 6602 } \ ??ed_options_handler_14: \ 000004A8 58D08DE2 ADD SP,SP,#+88 ;; stack cleaning \ 000004AC F083BDE8 POP {R4-R9,PC} ;; return \ ??ed_options_handler_1: \ 000004B0 ........ DC32 `?` 6603 \ In segment CODE, align 4, keep-with-next 6604 unsigned short * wstrstr(unsigned short *ws, char *str, int *wslen, int len) 6605 { \ wstrstr: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0070A0E1 MOV R7,R0 \ 00000008 0140A0E1 MOV R4,R1 \ 0000000C 0250A0E1 MOV R5,R2 \ 00000010 0360A0E1 MOV R6,R3 \ 00000014 030000EA B ??wstrstr_0 6606 char *s; 6607 unsigned short *w; 6608 int l; 6609 6610 while(*wslen >= len) 6611 { 6612 s = str; 6613 w = ws; 6614 l = len; 6615 for(; (char16to8(*w) == *s) && l; w++, s++, l--); 6616 if(!l) return ws; 6617 ws++; 6618 (*wslen)--; \ ??wstrstr_1: \ 00000018 000095E5 LDR R0,[R5, #+0] \ 0000001C 027087E2 ADD R7,R7,#+2 \ 00000020 010040E2 SUB R0,R0,#+1 \ 00000024 000085E5 STR R0,[R5, #+0] \ ??wstrstr_0: \ 00000028 000095E5 LDR R0,[R5, #+0] \ 0000002C 060050E1 CMP R0,R6 \ 00000030 0F0000BA BLT ??wstrstr_2 \ 00000034 0480A0E1 MOV R8,R4 \ 00000038 0790A0E1 MOV R9,R7 \ 0000003C 06A0A0E1 MOV R10,R6 \ 00000040 000000EA B ??wstrstr_3 \ ??wstrstr_4: \ 00000044 01A04AE2 SUB R10,R10,#+1 \ ??wstrstr_3: \ 00000048 ........ LDRH R0,[R9], #+2 \ 0000004C ........ _BLF char16to8,??char16to8??rA \ 00000050 ........ LDRB R1,[R8], #+1 \ 00000054 010050E1 CMP R0,R1 \ 00000058 0100001A BNE ??wstrstr_5 \ 0000005C 00005AE3 CMP R10,#+0 \ 00000060 F7FFFF1A BNE ??wstrstr_4 \ ??wstrstr_5: \ 00000064 00005AE3 CMP R10,#+0 \ 00000068 EAFFFF1A BNE ??wstrstr_1 \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 F087BDE8 POP {R4-R10,PC} 6619 } 6620 return 0; \ ??wstrstr_2: \ 00000074 0000A0E3 MOV R0,#+0 \ 00000078 F087BDE8 POP {R4-R10,PC} ;; return 6621 6622 } 6623 \ In segment CODE, align 4, keep-with-next 6624 int IsUrl(WSHDR *ws, int pos, char *link) 6625 { \ IsUrl: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0150A0E1 MOV R5,R1 6626 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 6627 6628 int len = wstrlen(ws); 6629 unsigned short *str = ws->wsbody+1, *tmp, *begin; 6630 tmp = str; 6631 6632 begin = str = wstrstr(str, "http://", &len, 7); \ 0000000C ........ LDR R7,??DataTable286 ;; `?` \ 00000010 0260A0E1 MOV R6,R2 \ 00000014 230100EF SWI +291 \ 00000018 00008DE5 STR R0,[SP, #+0] \ 0000001C 04009DE5 LDR R0,[SP, #+4] \ 00000020 0730A0E3 MOV R3,#+7 \ 00000024 000090E5 LDR R0,[R0, #+0] \ 00000028 0D20A0E1 MOV R2,SP \ 0000002C 028080E2 ADD R8,R0,#+2 \ 00000030 941087E2 ADD R1,R7,#+148 \ 00000034 0800A0E1 MOV R0,R8 \ 00000038 ........ BL wstrstr \ 0000003C 00B0A0E1 MOV R11,R0 \ 00000040 0040A0E1 MOV R4,R0 \ 00000044 A890A0E1 LSR R9,R8,#+1 \ 00000048 02A045E2 SUB R10,R5,#+2 \ 0000004C 060000EA B ??IsUrl_0 6633 6634 while(str && (begin-tmp <= pos)) 6635 { 6636 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 6637 if(str-tmp >= pos-2) 6638 { 6639 for(;begin < str; begin++, link++) 6640 *link = char16to8(*begin); 6641 link[str-begin] = 0; 6642 return 1; 6643 } 6644 begin = str = wstrstr(str, "http://", &len, 7); \ ??IsUrl_1: \ 00000050 0730A0E3 MOV R3,#+7 \ 00000054 0D20A0E1 MOV R2,SP \ 00000058 941087E2 ADD R1,R7,#+148 \ 0000005C 0B00A0E1 MOV R0,R11 \ 00000060 ........ BL wstrstr \ 00000064 00B0A0E1 MOV R11,R0 \ 00000068 0040A0E1 MOV R4,R0 \ ??IsUrl_0: \ 0000006C 00005BE3 CMP R11,#+0 \ 00000070 0200000A BEQ ??IsUrl_2 \ 00000074 A40069E0 RSB R0,R9,R4, LSR #+1 \ 00000078 000055E1 CMP R5,R0 \ 0000007C 0B0000AA BGE ??IsUrl_3 6645 } 6646 6647 len = wstrlen(ws); \ ??IsUrl_2: \ 00000080 04009DE5 LDR R0,[SP, #+4] \ 00000084 230100EF SWI +291 \ 00000088 00008DE5 STR R0,[SP, #+0] 6648 begin = str = wstrstr(tmp, "www.", &len, 4); \ 0000008C 0430A0E3 MOV R3,#+4 \ 00000090 0D20A0E1 MOV R2,SP \ 00000094 9C1087E2 ADD R1,R7,#+156 \ 00000098 0800A0E1 MOV R0,R8 \ 0000009C 200000EA B ??IsUrl_4 \ ??IsUrl_5: \ 000000A0 00109DE5 LDR R1,[SP, #+0] \ 000000A4 02B08BE2 ADD R11,R11,#+2 \ 000000A8 011041E2 SUB R1,R1,#+1 \ 000000AC 00108DE5 STR R1,[SP, #+0] \ ??IsUrl_3: \ 000000B0 00009DE5 LDR R0,[SP, #+0] \ 000000B4 000050E3 CMP R0,#+0 \ 000000B8 0600000A BEQ ??IsUrl_6 \ 000000BC B000DBE1 LDRH R0,[R11, #+0] \ 000000C0 ........ _BLF char16to8,??char16to8??rA \ 000000C4 0010A0E1 MOV R1,R0 \ 000000C8 0700A0E1 MOV R0,R7 \ 000000CC 180000EF SWI +24 \ 000000D0 000050E3 CMP R0,#+0 \ 000000D4 F1FFFF1A BNE ??IsUrl_5 \ ??IsUrl_6: \ 000000D8 AB0069E0 RSB R0,R9,R11, LSR #+1 \ 000000DC 0A0050E1 CMP R0,R10 \ 000000E0 DAFFFFBA BLT ??IsUrl_1 \ ??IsUrl_7: \ 000000E4 0B0054E1 CMP R4,R11 \ 000000E8 0300002A BCS ??IsUrl_8 \ 000000EC ........ LDRH R0,[R4], #+2 \ 000000F0 ........ _BLF char16to8,??char16to8??rA \ 000000F4 ........ STRB R0,[R6], #+1 \ 000000F8 F9FFFFEA B ??IsUrl_7 \ ??IsUrl_8: \ 000000FC AB00A0E1 LSR R0,R11,#+1 \ 00000100 A40040E0 SUB R0,R0,R4, LSR #+1 \ 00000104 0010A0E3 MOV R1,#+0 \ 00000108 0610C0E7 STRB R1,[R0, +R6] \ 0000010C 0100A0E3 MOV R0,#+1 \ 00000110 F68FBDE8 POP {R1,R2,R4-R11,PC} 6649 while(str && (begin-tmp <= pos)) 6650 { 6651 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 6652 if(str-tmp >= pos-2) 6653 { 6654 for(;begin < str; begin++, link++) 6655 *link = char16to8(*begin); 6656 link[str-begin] = 0; 6657 return 1; 6658 } 6659 begin = str = wstrstr(str, "www.", &len, 4); \ ??IsUrl_9: \ 00000114 0430A0E3 MOV R3,#+4 \ 00000118 0D20A0E1 MOV R2,SP \ 0000011C 9C1087E2 ADD R1,R7,#+156 \ 00000120 0B00A0E1 MOV R0,R11 \ ??IsUrl_4: \ 00000124 ........ BL wstrstr \ 00000128 00B0A0E1 MOV R11,R0 \ 0000012C 0040A0E1 MOV R4,R0 \ 00000130 00005BE3 CMP R11,#+0 \ 00000134 0200000A BEQ ??IsUrl_10 \ 00000138 A40069E0 RSB R0,R9,R4, LSR #+1 \ 0000013C 000055E1 CMP R5,R0 \ 00000140 050000AA BGE ??IsUrl_11 6660 } 6661 return 0; \ ??IsUrl_10: \ 00000144 0000A0E3 MOV R0,#+0 \ 00000148 F68FBDE8 POP {R1,R2,R4-R11,PC} ;; return \ ??IsUrl_12: \ 0000014C 00109DE5 LDR R1,[SP, #+0] \ 00000150 02B08BE2 ADD R11,R11,#+2 \ 00000154 011041E2 SUB R1,R1,#+1 \ 00000158 00108DE5 STR R1,[SP, #+0] \ ??IsUrl_11: \ 0000015C 00009DE5 LDR R0,[SP, #+0] \ 00000160 000050E3 CMP R0,#+0 \ 00000164 0600000A BEQ ??IsUrl_13 \ 00000168 B000DBE1 LDRH R0,[R11, #+0] \ 0000016C ........ _BLF char16to8,??char16to8??rA \ 00000170 0010A0E1 MOV R1,R0 \ 00000174 0700A0E1 MOV R0,R7 \ 00000178 180000EF SWI +24 \ 0000017C 000050E3 CMP R0,#+0 \ 00000180 F1FFFF1A BNE ??IsUrl_12 \ ??IsUrl_13: \ 00000184 AB0069E0 RSB R0,R9,R11, LSR #+1 \ 00000188 0A0050E1 CMP R0,R10 \ 0000018C E0FFFFBA BLT ??IsUrl_9 \ ??IsUrl_14: \ 00000190 0B0054E1 CMP R4,R11 \ 00000194 D8FFFF2A BCS ??IsUrl_8 \ 00000198 ........ LDRH R0,[R4], #+2 \ 0000019C ........ _BLF char16to8,??char16to8??rA \ 000001A0 ........ STRB R0,[R6], #+1 \ 000001A4 F9FFFFEA B ??IsUrl_14 6662 } 6663 6664 #define UTF16_DIS_UNDERLINE (0xE002) 6665 #define UTF16_ENA_UNDERLINE (0xE001) 6666 \ In segment CODE, align 4, keep-with-next 6667 void ParseAnswer(WSHDR *ws, const char *s) 6668 { \ ParseAnswer: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0040A0E1 MOV R4,R0 6669 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 6670 S_SMILES *t; 6671 S_SMILES *t_root=(S_SMILES *)s_top; \ 00000008 10029FE5 LDR R0,??ParseAnswer_0 ;; s_top \ 0000000C 04D04DE2 SUB SP,SP,#+4 \ 00000010 006090E5 LDR R6,[R0, #+0] \ 00000014 0150A0E1 MOV R5,R1 6672 STXT_SMILES *st; 6673 unsigned int wchar; 6674 unsigned int ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); \ 00000018 0000D5E5 LDRB R0,[R5, #+0] \ 0000001C 0110D5E5 LDRB R1,[R5, #+1] \ 00000020 010480E0 ADD R0,R0,R1, LSL #+8 \ 00000024 0210D5E5 LDRB R1,[R5, #+2] \ 00000028 010880E0 ADD R0,R0,R1, LSL #+16 \ 0000002C 0310D5E5 LDRB R1,[R5, #+3] \ 00000030 018C80E0 ADD R8,R0,R1, LSL #+24 6675 CutWSTR(ws,0); \ 00000034 0010A0E3 MOV R1,#+0 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 260100EF SWI +294 \ 00000040 160000EA B ??ParseAnswer_1 6676 int i; 6677 while(wchar=*s) 6678 { 6679 if(s==strstr(s, "http://") || s == strstr(s, "www.")) 6680 { 6681 wsAppendChar(ws,UTF16_ENA_UNDERLINE); 6682 while(*s && strchr(valid, *s)) 6683 { 6684 wchar=char8to16(*s); \ ??ParseAnswer_2: \ 00000044 ........ LDRB R0,[R5], #+1 \ 00000048 ........ _BLF char8to16,??char8to16??rA 6685 wsAppendChar(ws,wchar); \ 0000004C 0010A0E1 MOV R1,R0 \ ??ParseAnswer_3: \ 00000050 0400A0E1 MOV R0,R4 \ 00000054 1C0000EF SWI +28 6686 s++; 6687 } \ 00000058 0010D5E5 LDRB R1,[R5, #+0] \ 0000005C 000051E3 CMP R1,#+0 \ 00000060 0300000A BEQ ??ParseAnswer_4 \ 00000064 0900A0E1 MOV R0,R9 \ 00000068 180000EF SWI +24 \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 F3FFFF1A BNE ??ParseAnswer_2 6688 wsAppendChar(ws,UTF16_DIS_UNDERLINE); \ ??ParseAnswer_4: \ 00000074 0210A0E3 MOV R1,#+2 \ 00000078 E01C81E3 ORR R1,R1,#0xE000 \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 1C0000EF SWI +28 6689 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); \ 00000084 0000D5E5 LDRB R0,[R5, #+0] \ 00000088 0110D5E5 LDRB R1,[R5, #+1] \ 0000008C 010480E0 ADD R0,R0,R1, LSL #+8 \ 00000090 0210D5E5 LDRB R1,[R5, #+2] \ 00000094 010880E0 ADD R0,R0,R1, LSL #+16 \ 00000098 0310D5E5 LDRB R1,[R5, #+3] \ 0000009C 018C80E0 ADD R8,R0,R1, LSL #+24 6690 continue; \ ??ParseAnswer_1: \ 000000A0 0070D5E5 LDRB R7,[R5, #+0] \ 000000A4 000057E3 CMP R7,#+0 \ 000000A8 4F00000A BEQ ??ParseAnswer_5 \ 000000AC ........ LDR R9,??DataTable286 ;; `?` \ 000000B0 0500A0E1 MOV R0,R5 \ 000000B4 941089E2 ADD R1,R9,#+148 \ 000000B8 180100EF SWI +280 \ 000000BC 000055E1 CMP R5,R0 \ 000000C0 0400000A BEQ ??ParseAnswer_6 \ 000000C4 9C1089E2 ADD R1,R9,#+156 \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 180100EF SWI +280 \ 000000D0 000055E1 CMP R5,R0 \ 000000D4 0200001A BNE ??ParseAnswer_7 \ ??ParseAnswer_6: \ 000000D8 0110A0E3 MOV R1,#+1 \ 000000DC E01C81E3 ORR R1,R1,#0xE000 \ 000000E0 DAFFFFEA B ??ParseAnswer_3 6691 } 6692 t=t_root; \ ??ParseAnswer_7: \ 000000E4 0690A0E1 MOV R9,R6 \ 000000E8 230000EA B ??ParseAnswer_8 6693 while(t) 6694 { 6695 st=t->lines; 6696 while(st) 6697 { 6698 if ((ulb&st->mask)==st->key) \ ??ParseAnswer_9: \ 000000EC 0B00DAE5 LDRB R0,[R10, #+11] \ 000000F0 0A10DAE5 LDRB R1,[R10, #+10] \ 000000F4 0620DAE5 LDRB R2,[R10, #+6] \ 000000F8 000481E1 ORR R0,R1,R0, LSL #+8 \ 000000FC 0910DAE5 LDRB R1,[R10, #+9] \ 00000100 000481E1 ORR R0,R1,R0, LSL #+8 \ 00000104 0810DAE5 LDRB R1,[R10, #+8] \ 00000108 000481E1 ORR R0,R1,R0, LSL #+8 \ 0000010C 0710DAE5 LDRB R1,[R10, #+7] \ 00000110 080000E0 AND R0,R0,R8 \ 00000114 011482E1 ORR R1,R2,R1, LSL #+8 \ 00000118 0520DAE5 LDRB R2,[R10, #+5] \ 0000011C 011482E1 ORR R1,R2,R1, LSL #+8 \ 00000120 0420DAE5 LDRB R2,[R10, #+4] \ 00000124 011482E1 ORR R1,R2,R1, LSL #+8 \ 00000128 010050E1 CMP R0,R1 \ 0000012C 0700001A BNE ??ParseAnswer_10 6699 { 6700 if (!strncmp(s,st->text,strlen(st->text))) goto L1; \ 00000130 0C008AE2 ADD R0,R10,#+12 \ 00000134 1B0000EF SWI +27 \ 00000138 0020A0E1 MOV R2,R0 \ 0000013C 0C108AE2 ADD R1,R10,#+12 \ 00000140 0500A0E1 MOV R0,R5 \ 00000144 150100EF SWI +277 \ 00000148 000050E3 CMP R0,#+0 \ 0000014C 1500000A BEQ ??ParseAnswer_11 6701 } 6702 st=st->next; \ ??ParseAnswer_10: \ 00000150 0000A0E3 MOV R0,#+0 \ ??ParseAnswer_12: \ 00000154 0A20D0E7 LDRB R2,[R0, +R10] \ 00000158 0D10A0E1 MOV R1,SP \ 0000015C 0120C0E7 STRB R2,[R0, +R1] \ 00000160 010080E2 ADD R0,R0,#+1 \ 00000164 040050E3 CMP R0,#+4 \ 00000168 F9FFFFBA BLT ??ParseAnswer_12 \ 0000016C 00A09DE5 LDR R10,[SP, #+0] 6703 } \ ??ParseAnswer_13: \ 00000170 00005AE3 CMP R10,#+0 \ 00000174 DCFFFF1A BNE ??ParseAnswer_9 6704 t=t->next; \ 00000178 009099E5 LDR R9,[R9, #+0] \ ??ParseAnswer_8: \ 0000017C 000059E3 CMP R9,#+0 \ 00000180 08A09915 LDRNE R10,[R9, #+8] \ 00000184 F9FFFF1A BNE ??ParseAnswer_13 6705 } 6706 L1: 6707 if (t) 6708 { 6709 wchar=t->uni_smile; 6710 s+=strlen(st->text); 6711 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); 6712 } 6713 else 6714 { 6715 wchar=char8to16(wchar); \ 00000188 0700A0E1 MOV R0,R7 \ 0000018C ........ _BLF char8to16,??char8to16??rA \ 00000190 0070A0E1 MOV R7,R0 6716 s++; 6717 ulb>>=8; 6718 ulb+=s[3]<<24; \ 00000194 015085E2 ADD R5,R5,#+1 \ 00000198 0300D5E5 LDRB R0,[R5, #+3] \ 0000019C 000CA0E1 LSL R0,R0,#+24 \ 000001A0 288480E0 ADD R8,R0,R8, LSR #+8 \ 000001A4 0A0000EA B ??ParseAnswer_14 6719 } \ ??ParseAnswer_11: \ 000001A8 047099E5 LDR R7,[R9, #+4] \ 000001AC 0C008AE2 ADD R0,R10,#+12 \ 000001B0 1B0000EF SWI +27 \ 000001B4 055080E0 ADD R5,R0,R5 \ 000001B8 0000D5E5 LDRB R0,[R5, #+0] \ 000001BC 0110D5E5 LDRB R1,[R5, #+1] \ 000001C0 010480E0 ADD R0,R0,R1, LSL #+8 \ 000001C4 0210D5E5 LDRB R1,[R5, #+2] \ 000001C8 010880E0 ADD R0,R0,R1, LSL #+16 \ 000001CC 0310D5E5 LDRB R1,[R5, #+3] \ 000001D0 018C80E0 ADD R8,R0,R1, LSL #+24 6720 if (wchar!=10) wsAppendChar(ws,wchar); \ ??ParseAnswer_14: \ 000001D4 0A0057E3 CMP R7,#+10 \ 000001D8 B0FFFF0A BEQ ??ParseAnswer_1 \ 000001DC 0710A0E1 MOV R1,R7 \ 000001E0 0400A0E1 MOV R0,R4 \ 000001E4 1C0000EF SWI +28 \ 000001E8 ACFFFFEA B ??ParseAnswer_1 6721 } 6722 i=ws->wsbody[0]; \ ??ParseAnswer_5: \ 000001EC 000094E5 LDR R0,[R4, #+0] \ 000001F0 B010D0E1 LDRH R1,[R0, #+0] \ 000001F4 000000EA B ??ParseAnswer_15 6723 while(i>1) 6724 { 6725 if (ws->wsbody[i--]!=13) break; 6726 ws->wsbody[0]=i; \ ??ParseAnswer_16: \ 000001F8 B010C0E1 STRH R1,[R0, #+0] \ ??ParseAnswer_15: \ 000001FC 020051E3 CMP R1,#+2 \ 00000200 F187BDB8 POPLT {R0,R4-R10,PC} \ 00000204 0120A0E1 MOV R2,R1 \ 00000208 011042E2 SUB R1,R2,#+1 \ 0000020C 822080E0 ADD R2,R0,R2, LSL #+1 \ 00000210 B020D2E1 LDRH R2,[R2, #+0] \ 00000214 0D0052E3 CMP R2,#+13 \ 00000218 F6FFFF0A BEQ ??ParseAnswer_16 6727 } 6728 } \ 0000021C F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??ParseAnswer_0: \ 00000220 ........ DC32 s_top 6729 \ In segment CODE, align 4, keep-with-next 6730 void SaveAnswer(CLIST *cl, WSHDR *ws) 6731 { \ SaveAnswer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0100A0E1 MOV R0,R1 6732 char *p=ExtractAnswer(ws); \ 0000000C ........ BL ExtractAnswer \ 00000010 0050A0E1 MOV R5,R0 6733 mfree(cl->answer); \ 00000014 A00094E5 LDR R0,[R4, #+160] \ 00000018 150000EF SWI +21 6734 cl->answer=p; \ 0000001C A05084E5 STR R5,[R4, #+160] 6735 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 6736 6737 //links applicator 6738 6739 \ In segment CODE, align 4, keep-with-next 6740 int GetTempName(void) 6741 { \ GetTempName: \ 00000000 00402DE9 PUSH {LR} \ 00000004 10D04DE2 SUB SP,SP,#+16 6742 static const int DMonth[]={0,31,59,90,120,151,181,212,243,273,304,334,365}; 6743 unsigned long iday; 6744 TTime tt; 6745 TDate dd; 6746 GetDateTime(&dd,&tt); \ 00000008 08108DE2 ADD R1,SP,#+8 \ 0000000C 0D00A0E1 MOV R0,SP \ 00000010 B40000EF SWI +180 6747 dd.year=dd.year%100; \ 00000014 00109DE5 LDR R1,[SP, #+0] \ 00000018 84209FE5 LDR R2,??GetTempName_0 ;; 0x51eb851f \ 0000001C 92318CE0 UMULL R3,R12,R2,R1 \ 00000020 6430A0E3 MOV R3,#+100 \ 00000024 ACC2A0E1 LSR R12,R12,#+5 \ 00000028 930C0CE0 MUL R12,R3,R12 6748 iday=365*dd.year+DMonth[dd.month-1]+(dd.day - 1); 6749 iday=iday+(dd.year>>2); \ 0000002C 6D20A0E3 MOV R2,#+109 \ 00000030 0CC041E0 SUB R12,R1,R12 \ 00000034 00C08DE5 STR R12,[SP, #+0] \ 00000038 0400DDE5 LDRB R0,[SP, #+4] \ 0000003C 0C10A0E1 MOV R1,R12 \ 00000040 60C09FE5 LDR R12,??GetTempName_0+0x4 ;; ??DMonth \ 00000044 402F82E3 ORR R2,R2,#0x100 \ 00000048 00318CE0 ADD R3,R12,R0, LSL #+2 \ 0000004C 043013E5 LDR R3,[R3, #-4] 6750 if (dd.month>2||(dd.year&3)>0) \ 00000050 030050E3 CMP R0,#+3 \ 00000054 923121E0 MLA R1,R2,R1,R3 \ 00000058 0520DDE5 LDRB R2,[SP, #+5] \ 0000005C 012042E2 SUB R2,R2,#+1 \ 00000060 011082E0 ADD R1,R2,R1 \ 00000064 00209DE5 LDR R2,[SP, #+0] \ 00000068 221181E0 ADD R1,R1,R2, LSR #+2 \ 0000006C 0100002A BCS ??GetTempName_1 \ 00000070 030012E3 TST R2,#0x3 \ 00000074 0000000A BEQ ??GetTempName_2 6751 iday++; \ ??GetTempName_1: \ 00000078 011081E2 ADD R1,R1,#+1 6752 iday=(tt.sec+60*(tt.min+60*(tt.hour+24* iday))); 6753 return iday; \ ??GetTempName_2: \ 0000007C 0830DDE5 LDRB R3,[SP, #+8] \ 00000080 0920DDE5 LDRB R2,[SP, #+9] \ 00000084 0A00DDE5 LDRB R0,[SP, #+10] \ 00000088 18C0A0E3 MOV R12,#+24 \ 0000008C 9C3121E0 MLA R1,R12,R1,R3 \ 00000090 3C30A0E3 MOV R3,#+60 \ 00000094 932121E0 MLA R1,R3,R1,R2 \ 00000098 10D08DE2 ADD SP,SP,#+16 \ 0000009C 930120E0 MLA R0,R3,R1,R0 \ 000000A0 0080BDE8 POP {PC} ;; return \ ??GetTempName_0: \ 000000A4 1F85EB51 DC32 0x51eb851f \ 000000A8 ........ DC32 ??DMonth 6754 } \ In segment DATA_C, align 4, align-sorted \ ??DMonth: \ 00000000 000000001F00 DC32 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 \ 00003B000000 \ 5A0000007800 \ 000097000000 \ B5000000D400 \ 0000F3000000 \ 110100003001 \ 00004E010000 \ 6D010000 6755 6756 \ In segment CODE, align 4, keep-with-next 6757 void recon() 6758 { 6759 SUBPROC((void*)end_socket); \ recon: \ 00000000 ........ LDR R0,??DataTable287 ;; end_socket \ 00000004 10402DE9 PUSH {R4,LR} 6760 GBS_DelTimer(&reconnect_tmr); \ 00000008 ........ LDR R4,??DataTable288 ;; S_ICONS \ 0000000C 710100EF SWI +369 \ 00000010 B800A0E3 MOV R0,#+184 \ 00000014 680D80E3 ORR R0,R0,#0x1A00 \ 00000018 040080E0 ADD R0,R0,R4 \ 0000001C 8C0100EF SWI +396 6761 DNR_TRIES=3; \ 00000020 0300A0E3 MOV R0,#+3 \ 00000024 D40384E5 STR R0,[R4, #+980] 6762 SUBPROC((void *)create_connect); \ 00000028 ........ LDR R0,??DataTable289 ;; create_connect \ 0000002C 710100EF SWI +369 6763 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 6764 \ In segment CODE, align 4, keep-with-next 6765 int edchat_onkey(GUI *data, GUI_MSG *msg) 6766 { \ edchat_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 6767 //-1 - do redraw 6768 GBS_DelTimer(&tmr_illumination); \ 00000004 ........ LDR R6,??DataTable298 ;; S_ICONS \ 00000008 57DF4DE2 SUB SP,SP,#+348 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0180A0E1 MOV R8,R1 \ 00000014 9800A0E3 MOV R0,#+152 \ 00000018 680D80E3 ORR R0,R0,#0x1A00 \ 0000001C 060080E0 ADD R0,R0,R6 \ 00000020 8C0100EF SWI +396 6769 CLIST *t; 6770 TPKT *p; 6771 EDITCONTROL ec; 6772 int len, f;//2026rev 6773 unsigned err;//2026rev 6774 char *s; 6775 int l=msg->gbsmsg->submess; \ 00000024 040098E5 LDR R0,[R8, #+4] \ 00000028 089090E5 LDR R9,[R0, #+8] 6776 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 DF0100EF SWI +479 \ 00000034 0050A0E1 MOV R5,R0 6777 char fn[256]; 6778 6779 if (msg->keys==0xFFF) \ 00000038 F200D8E1 LDRSH R0,[R8, #+2] \ 0000003C FF10A0E3 MOV R1,#+255 \ 00000040 F01E81E3 ORR R1,R1,#0xF00 \ 00000044 010050E1 CMP R0,R1 \ 00000048 0200001A BNE ??edchat_onkey_0 6780 { 6781 void ec_menu(EDCHAT_STRUCT *); 6782 ec_menu(ed_struct); \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 ........ BL ec_menu 6783 return(-1); \ ??edchat_onkey_1: \ 00000054 B40000EA B ??edchat_onkey_2 6784 } 6785 if (msg->keys==0xFF0) return (1); \ ??edchat_onkey_0: \ 00000058 FF0E50E3 CMP R0,#+4080 \ 0000005C 0100001A BNE ??edchat_onkey_3 \ 00000060 0100A0E3 MOV R0,#+1 \ 00000064 B10000EA B ??edchat_onkey_4 6786 6787 void AddSmile(GUI *data); 6788 if (msg->gbsmsg->msg==LONG_PRESS) \ ??edchat_onkey_3: \ 00000068 040098E5 LDR R0,[R8, #+4] \ 0000006C FC759FE5 LDR R7,??edchat_onkey_5 ;; `?` \ 00000070 040090E5 LDR R0,[R0, #+4] \ 00000074 9510A0E3 MOV R1,#+149 \ 00000078 401F81E3 ORR R1,R1,#0x100 \ 0000007C 010050E1 CMP R0,R1 \ 00000080 6D00001A BNE ??edchat_onkey_6 6789 { 6790 if (l==RIGHT_BUTTON) \ 00000084 3E0059E3 CMP R9,#+62 \ 00000088 2800001A BNE ??edchat_onkey_7 6791 { 6792 if(LongRightAction==2 && EDIT_GetFocus(data)==ed_struct->ed_answer) \ 0000008C E0A59FE5 LDR R10,??edchat_onkey_5+0x4 ;; LongRightAction \ 00000090 00009AE5 LDR R0,[R10, #+0] \ 00000094 020050E3 CMP R0,#+2 \ 00000098 0700001A BNE ??edchat_onkey_8 \ 0000009C 0400A0E1 MOV R0,R4 \ 000000A0 820100EF SWI +386 \ 000000A4 081095E5 LDR R1,[R5, #+8] \ 000000A8 010050E1 CMP R0,R1 \ 000000AC 0200001A BNE ??edchat_onkey_8 6793 CreateSmileSelectGUI(ed_struct); \ 000000B0 0500A0E1 MOV R0,R5 \ 000000B4 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA \ 000000B8 5F0000EA B ??edchat_onkey_6 6794 else 6795 if(LongRightAction==1) \ ??edchat_onkey_8: \ 000000BC 00009AE5 LDR R0,[R10, #+0] \ 000000C0 010050E3 CMP R0,#+1 \ 000000C4 5C00001A BNE ??edchat_onkey_6 6796 { 6797 if (EDIT_GetFocus(data)==ed_struct->ed_answer) \ 000000C8 0400A0E1 MOV R0,R4 \ 000000CC 820100EF SWI +386 \ 000000D0 081095E5 LDR R1,[R5, #+8] \ 000000D4 010050E1 CMP R0,R1 \ 000000D8 5700001A BNE ??edchat_onkey_6 6798 { 6799 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000DC 04208DE2 ADD R2,SP,#+4 \ 000000E0 0400A0E1 MOV R0,R4 \ 000000E4 690100EF SWI +361 6800 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) \ 000000E8 0400A0E1 MOV R0,R4 \ 000000EC D30100EF SWI +467 \ 000000F0 2C109DE5 LDR R1,[SP, #+44] \ 000000F4 010040E2 SUB R0,R0,#+1 \ 000000F8 001091E5 LDR R1,[R1, #+0] \ 000000FC B010D1E1 LDRH R1,[R1, #+0] \ 00000100 000051E1 CMP R1,R0 \ 00000104 4C00001A BNE ??edchat_onkey_6 6801 { 6802 t=FindNextActiveContact(ed_struct->ed_contact); \ 00000108 00B095E5 LDR R11,[R5, #+0] \ 0000010C 0B00A0E1 MOV R0,R11 \ 00000110 ........ BL FindNextActiveContact \ 00000114 00A0B0E1 MOVS R10,R0 6803 if (t && t!=ed_struct->ed_contact) \ 00000118 0B005A11 CMPNE R10,R11 \ 0000011C 4600000A BEQ ??edchat_onkey_6 6804 { 6805 CreateEditChat(t); \ ??edchat_onkey_9: \ 00000120 0A00A0E1 MOV R0,R10 \ 00000124 ........ BL CreateEditChat 6806 return(1); \ 00000128 0100A0E3 MOV R0,#+1 \ 0000012C 7F0000EA B ??edchat_onkey_4 6807 } 6808 } 6809 } 6810 } 6811 } 6812 if (l==LEFT_BUTTON && LongLeftAction) \ ??edchat_onkey_7: \ 00000130 3D0059E3 CMP R9,#+61 \ 00000134 5400001A BNE ??edchat_onkey_10 \ 00000138 38059FE5 LDR R0,??edchat_onkey_5+0x8 ;; LongLeftAction \ 0000013C 000090E5 LDR R0,[R0, #+0] \ 00000140 000050E3 CMP R0,#+0 \ 00000144 1500000A BEQ ??edchat_onkey_11 6813 { 6814 if (EDIT_GetFocus(data)==ed_struct->ed_answer) \ 00000148 0400A0E1 MOV R0,R4 \ 0000014C 820100EF SWI +386 \ 00000150 081095E5 LDR R1,[R5, #+8] \ 00000154 010050E1 CMP R0,R1 \ 00000158 1000001A BNE ??edchat_onkey_11 6815 { 6816 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 0000015C 04208DE2 ADD R2,SP,#+4 \ 00000160 0400A0E1 MOV R0,R4 \ 00000164 690100EF SWI +361 6817 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) \ 00000168 0400A0E1 MOV R0,R4 \ 0000016C D30100EF SWI +467 \ 00000170 2C109DE5 LDR R1,[SP, #+44] \ 00000174 010040E2 SUB R0,R0,#+1 \ 00000178 001091E5 LDR R1,[R1, #+0] \ 0000017C B010D1E1 LDRH R1,[R1, #+0] \ 00000180 000051E1 CMP R1,R0 \ 00000184 0500001A BNE ??edchat_onkey_11 6818 { 6819 t=FindPrevActiveContact(ed_struct->ed_contact); \ 00000188 00B095E5 LDR R11,[R5, #+0] \ 0000018C 0B00A0E1 MOV R0,R11 \ 00000190 ........ BL FindPrevActiveContact \ 00000194 00A0B0E1 MOVS R10,R0 6820 if (t && t!=ed_struct->ed_contact) \ 00000198 0B005A11 CMPNE R10,R11 \ 0000019C DFFFFF1A BNE ??edchat_onkey_9 \ ??edchat_onkey_11: \ 000001A0 040095E5 LDR R0,[R5, #+4] \ 000001A4 820100EF SWI +386 \ 000001A8 081095E5 LDR R1,[R5, #+8] \ 000001AC 010050E1 CMP R0,R1 \ 000001B0 2100000A BEQ ??edchat_onkey_6 \ 000001B4 0400A0E1 MOV R0,R4 \ 000001B8 D30100EF SWI +467 \ 000001BC 010050E3 CMP R0,#+1 \ 000001C0 1D00001A BNE ??edchat_onkey_6 6821 { 6822 CreateEditChat(t); 6823 return(1); 6824 } 6825 } 6826 } 6827 } 6828 //#ifdef ELKA 6829 if (l==VOL_DOWN_BUTTON) 6830 { 6831 #ifdef kluchnik 6832 if((EDIT_GetFocus(data)==ed_struct->ed_answer)) 6833 #else 6834 if(LongVolDownAction) 6835 #endif 6836 { 6837 WSHDR *ws; 6838 ExtractEditControl(data,ed_struct->ed_answer,&ec); 6839 if(wstrlen(ec.pWS)>0) 6840 { 6841 ws=AllocWS(1); 6842 CutWSTR(ws,0); 6843 6844 EDIT_SetFocus(data,ed_struct->ed_answer); 6845 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 6846 6847 FreeWS(ws); 6848 RefreshGUI(); 6849 } 6850 } 6851 else 6852 { 6853 int pos; 6854 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 6855 { 6856 EDIT_SetFocus(data, pos); 6857 EDIT_SetCursorPos(data, 1); 6858 } 6859 return (-1); 6860 } 6861 6862 } 6863 6864 if (l==VOL_UP_BUTTON) 6865 { 6866 if(LongVolUpAction) 6867 { 6868 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); 6869 ascii2ws(ws,last_msg_buffer); 6870 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); 6871 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 6872 FreeWS(ws); 6873 RefreshGUI(); 6874 } 6875 else 6876 { 6877 int pos; 6878 if ((pos=EDIT_GetFocus(data)-2)>=2) 6879 { 6880 EDIT_SetFocus(data, pos); 6881 EDIT_SetCursorPos(data, 1); 6882 } 6883 return (-1); 6884 } 6885 } 6886 //#endif 6887 #ifdef kluchnik 6888 if(l==LEFT_BUTTON && EDIT_GetFocus(ed_struct->ed_chatgui)!=ed_struct->ed_answer && EDIT_GetCursorPos(data)==1) 6889 { 6890 int ed; 6891 EDITCONTROL ec; 6892 ed=EDIT_GetFocus(ed_struct->ed_chatgui); \ 000001C4 040095E5 LDR R0,[R5, #+4] \ 000001C8 820100EF SWI +386 6893 ExtractEditControl(ed_struct->ed_chatgui,ed,&ec); \ 000001CC 4C2F8DE2 ADD R2,SP,#+304 \ 000001D0 0010A0E1 MOV R1,R0 \ 000001D4 040095E5 LDR R0,[R5, #+4] \ 000001D8 690100EF SWI +361 6894 6895 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 000001DC 680296E5 LDR R0,[R6, #+616] \ 000001E0 230100EF SWI +291 \ 000001E4 012080E2 ADD R2,R0,#+1 \ 000001E8 680296E5 LDR R0,[R6, #+616] \ 000001EC 3E10A0E3 MOV R1,#+62 \ 000001F0 1D0000EF SWI +29 6896 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 000001F4 680296E5 LDR R0,[R6, #+616] \ 000001F8 230100EF SWI +291 \ 000001FC 012080E2 ADD R2,R0,#+1 \ 00000200 680296E5 LDR R0,[R6, #+616] \ 00000204 2010A0E3 MOV R1,#+32 \ 00000208 1D0000EF SWI +29 6897 wstrcat(wsBuffer,ec.pWS); \ 0000020C 58119DE5 LDR R1,[SP, #+344] \ 00000210 680296E5 LDR R0,[R6, #+616] \ 00000214 210100EF SWI +289 6898 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 00000218 680296E5 LDR R0,[R6, #+616] \ 0000021C 230100EF SWI +291 \ 00000220 012080E2 ADD R2,R0,#+1 \ 00000224 680296E5 LDR R0,[R6, #+616] \ 00000228 0A10A0E3 MOV R1,#+10 \ 0000022C 1D0000EF SWI +29 6899 6900 ShowMSG(1,(int)"Message add to buffer"); \ 00000230 0710A0E1 MOV R1,R7 \ 00000234 0100A0E3 MOV R0,#+1 \ 00000238 480100EF SWI +328 6901 } 6902 #endif 6903 } 6904 6905 if (msg->gbsmsg->msg==KEY_DOWN) \ ??edchat_onkey_6: \ 0000023C 040098E5 LDR R0,[R8, #+4] \ 00000240 9310A0E3 MOV R1,#+147 \ 00000244 040090E5 LDR R0,[R0, #+4] \ 00000248 401F81E3 ORR R1,R1,#0x100 \ 0000024C 010050E1 CMP R0,R1 \ 00000250 0A00001A BNE ??edchat_onkey_12 6906 { 6907 if ((l>='0')&&(l<='9')) \ 00000254 300059E3 CMP R9,#+48 \ 00000258 4B0000BA BLT ??edchat_onkey_13 \ 0000025C 3A0059E3 CMP R9,#+58 \ 00000260 060000AA BGE ??edchat_onkey_12 6908 { 6909 if (EDIT_GetFocus(data)!=ed_struct->ed_answer) \ 00000264 0400A0E1 MOV R0,R4 \ 00000268 820100EF SWI +386 \ 0000026C 081095E5 LDR R1,[R5, #+8] \ 00000270 010050E1 CMP R0,R1 \ 00000274 0100000A BEQ ??edchat_onkey_12 6910 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000278 0400A0E1 MOV R0,R4 \ 0000027C 9B0100EF SWI +411 6911 } 6912 6913 if (l==GREEN_BUTTON) 6914 { 6915 if (connect_state==3) 6916 { 6917 if ((t=ed_struct->ed_contact)) 6918 { 6919 ExtractEditControl(data,ed_struct->ed_answer,&ec); 6920 SaveAnswer(t,ec.pWS); 6921 if ((s=t->answer)) 6922 { 6923 if ((len=strlen(s))) 6924 { 6925 msg_away_timer=0; 6926 away_m=0; 6927 t->automsgcount=0; 6928 if(change_back_status) 6929 { 6930 CurrentStatus=status_rem; 6931 set_my_status(); 6932 change_back_status=0; 6933 } 6934 if(SHOW_ACTIVE) 6935 t->isactive=ACTIVE_TIME; 6936 p=malloc(sizeof(PKT)+len+1); 6937 p->pkt.uin=t->uin; 6938 p->pkt.type=T_SENDMSG; 6939 p->pkt.data_len=len; 6940 strcpy(p->data,s); 6941 //#ifdef ELKA 6942 strcpy(last_msg_buffer, s); 6943 //#endif 6944 AddStringToLog(t,0x01,p->data,I_str,(++SENDMSGCOUNT)&0x7FFF,1); //Номер сообщения 6945 SUBPROC((void *)SendAnswer,0,p); 6946 main2_count++; 6947 mfree(t->answer); 6948 t->answer=NULL; 6949 // request_remake_edchat=1; 6950 EDIT_SetFocus(data,ed_struct->ed_answer); 6951 CutWSTR(ews,0); 6952 EDIT_SetTextToFocused(data,ews); 6953 AddMsgToChat(data); 6954 RecountMenu(t,1); 6955 return(-1); 6956 } 6957 } 6958 } 6959 } 6960 } 6961 //================2026rev-begin 6962 if (l==ENTER_BUTTON) 6963 { 6964 if (!EDIT_IsMarkModeActive(data)) // ?????? ???? ?? ????????? 6965 { 6966 int pos, len; 6967 char *link; 6968 ExtractEditControl(ed_struct->ed_chatgui,EDIT_GetFocus(ed_struct->ed_chatgui),&ec); 6969 wstrcpy(ews,ec.pWS); 6970 pos = EDIT_GetCursorPos(data); 6971 len = wstrlen(ews); 6972 link = malloc(len+1); 6973 6974 if(IsUrl(ews, pos, link) && IsOpenBrowser) 6975 { 6976 snprintf(fn, 255, "%s\\tmp%u.url", TEMPLATES_PATH, GetTempName); 6977 if ((f=fopen(fn,A_WriteOnly+A_BIN+A_Create+A_Truncate,P_WRITE,&err))!=-1) 6978 { 6979 fwrite(f,link,strlen(link),&err); 6980 fclose(f,&err); 6981 str_2ws(ews,fn,256); 6982 ExecuteFile(ews,0,0); 6983 unlink(fn, &err); 6984 } 6985 mfree(link); 6986 return (-1); 6987 } 6988 else 6989 { 6990 int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 6991 6992 if(IsMultiBuffer) 6993 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+4); 6994 else 6995 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+3); 6996 6997 mfree(link); 6998 return (-1); 6999 } 7000 } 7001 } 7002 7003 //================ 2026rev-end =================// 7004 7005 if (l==VOL_UP_BUTTON) 7006 { 7007 int pos; 7008 7009 if ((pos=EDIT_GetFocus(data)-2)>=2) 7010 { 7011 EDIT_SetFocus(data, pos); 7012 EDIT_SetCursorPos(data, 1); 7013 } 7014 return (-1); 7015 } 7016 if (l==VOL_DOWN_BUTTON) 7017 { 7018 int pos; 7019 7020 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 7021 { 7022 EDIT_SetFocus(data, pos); 7023 EDIT_SetCursorPos(data, 1); 7024 } 7025 return (-1); 7026 } 7027 } 7028 return(0); //Do standart keys \ ??edchat_onkey_12: \ 00000280 0000A0E3 MOV R0,#+0 \ 00000284 57DF8DE2 ADD SP,SP,#+348 \ 00000288 F08FBDE8 POP {R4-R11,PC} ;; return \ ??edchat_onkey_10: \ 0000028C 0E0059E3 CMP R9,#+14 \ 00000290 2800001A BNE ??edchat_onkey_14 \ 00000294 0400A0E1 MOV R0,R4 \ 00000298 820100EF SWI +386 \ 0000029C 081095E5 LDR R1,[R5, #+8] \ 000002A0 010050E1 CMP R0,R1 \ 000002A4 1500001A BNE ??edchat_onkey_15 \ 000002A8 04208DE2 ADD R2,SP,#+4 \ 000002AC 0400A0E1 MOV R0,R4 \ 000002B0 690100EF SWI +361 \ 000002B4 2C009DE5 LDR R0,[SP, #+44] \ 000002B8 230100EF SWI +291 \ 000002BC 010050E3 CMP R0,#+1 \ 000002C0 DDFFFFBA BLT ??edchat_onkey_6 \ 000002C4 0100A0E3 MOV R0,#+1 \ 000002C8 250100EF SWI +293 \ 000002CC 00A0A0E1 MOV R10,R0 \ 000002D0 0010A0E3 MOV R1,#+0 \ 000002D4 260100EF SWI +294 \ 000002D8 081095E5 LDR R1,[R5, #+8] \ 000002DC 0400A0E1 MOV R0,R4 \ ??edchat_onkey_16: \ 000002E0 9B0100EF SWI +411 \ 000002E4 040095E5 LDR R0,[R5, #+4] \ 000002E8 0A10A0E1 MOV R1,R10 \ 000002EC 810100EF SWI +385 \ 000002F0 0A00A0E1 MOV R0,R10 \ 000002F4 290100EF SWI +297 \ 000002F8 960100EF SWI +406 \ 000002FC CEFFFFEA B ??edchat_onkey_6 \ ??edchat_onkey_15: \ 00000300 0400A0E1 MOV R0,R4 \ 00000304 820100EF SWI +386 \ 00000308 021080E2 ADD R1,R0,#+2 \ 0000030C 080095E5 LDR R0,[R5, #+8] \ 00000310 010050E1 CMP R0,R1 \ ??edchat_onkey_17: \ 00000314 040000BA BLT ??edchat_onkey_2 \ 00000318 0400A0E1 MOV R0,R4 \ 0000031C 9B0100EF SWI +411 \ 00000320 0110A0E3 MOV R1,#+1 \ 00000324 0400A0E1 MOV R0,R4 \ 00000328 D40100EF SWI +468 \ ??edchat_onkey_2: \ 0000032C 0000E0E3 MVN R0,#+0 \ ??edchat_onkey_4: \ 00000330 57DF8DE2 ADD SP,SP,#+348 \ 00000334 F08FBDE8 POP {R4-R11,PC} \ ??edchat_onkey_14: \ 00000338 0D0059E3 CMP R9,#+13 \ 0000033C BEFFFF1A BNE ??edchat_onkey_6 \ 00000340 34039FE5 LDR R0,??edchat_onkey_5+0xC ;; LongVolUpAction \ 00000344 000090E5 LDR R0,[R0, #+0] \ 00000348 000050E3 CMP R0,#+0 \ 0000034C 0900000A BEQ ??edchat_onkey_18 \ 00000350 630E86E2 ADD R0,R6,#+1584 \ 00000354 1B0000EF SWI +27 \ 00000358 010080E2 ADD R0,R0,#+1 \ 0000035C 250100EF SWI +293 \ 00000360 00A0A0E1 MOV R10,R0 \ 00000364 631E86E2 ADD R1,R6,#+1584 \ 00000368 ........ _BLF ascii2ws,??ascii2ws??rA \ 0000036C 081095E5 LDR R1,[R5, #+8] \ 00000370 040095E5 LDR R0,[R5, #+4] \ 00000374 D9FFFFEA B ??edchat_onkey_16 \ ??edchat_onkey_18: \ 00000378 0400A0E1 MOV R0,R4 \ 0000037C 820100EF SWI +386 \ 00000380 021040E2 SUB R1,R0,#+2 \ 00000384 020051E3 CMP R1,#+2 \ 00000388 E1FFFFEA B ??edchat_onkey_17 \ ??edchat_onkey_13: \ 0000038C 0B0059E3 CMP R9,#+11 \ 00000390 5900001A BNE ??edchat_onkey_19 \ 00000394 140396E5 LDR R0,[R6, #+788] \ 00000398 030050E3 CMP R0,#+3 \ 0000039C B7FFFF1A BNE ??edchat_onkey_12 \ 000003A0 00A095E5 LDR R10,[R5, #+0] \ 000003A4 00005AE3 CMP R10,#+0 \ 000003A8 B4FFFF0A BEQ ??edchat_onkey_12 \ 000003AC 081095E5 LDR R1,[R5, #+8] \ 000003B0 04208DE2 ADD R2,SP,#+4 \ 000003B4 0400A0E1 MOV R0,R4 \ 000003B8 690100EF SWI +361 \ 000003BC 2C109DE5 LDR R1,[SP, #+44] \ 000003C0 0A00A0E1 MOV R0,R10 \ 000003C4 ........ BL SaveAnswer \ 000003C8 A0909AE5 LDR R9,[R10, #+160] \ 000003CC 000059E3 CMP R9,#+0 \ 000003D0 AAFFFF0A BEQ ??edchat_onkey_12 \ 000003D4 0900A0E1 MOV R0,R9 \ 000003D8 1B0000EF SWI +27 \ 000003DC 00B0B0E1 MOVS R11,R0 \ 000003E0 A6FFFF0A BEQ ??edchat_onkey_12 \ 000003E4 0070A0E3 MOV R7,#+0 \ 000003E8 B87286E5 STR R7,[R6, #+696] \ 000003EC BC7286E5 STR R7,[R6, #+700] \ 000003F0 84708AE5 STR R7,[R10, #+132] \ 000003F4 C40296E5 LDR R0,[R6, #+708] \ 000003F8 000050E3 CMP R0,#+0 \ 000003FC 0300000A BEQ ??edchat_onkey_20 \ 00000400 C00296E5 LDR R0,[R6, #+704] \ 00000404 A80286E5 STR R0,[R6, #+680] \ 00000408 ........ BL set_my_status \ 0000040C C47286E5 STR R7,[R6, #+708] \ ??edchat_onkey_20: \ 00000410 ........ LDR R0,??DataTable291 ;; SHOW_ACTIVE \ 00000414 000090E5 LDR R0,[R0, #+0] \ 00000418 000050E3 CMP R0,#+0 \ 0000041C 5A0FA013 MOVNE R0,#+360 \ 00000420 A8008A15 STRNE R0,[R10, #+168] \ 00000424 09008BE2 ADD R0,R11,#+9 \ 00000428 140000EF SWI +20 \ 0000042C 0080A0E1 MOV R8,R0 \ 00000430 0C009AE5 LDR R0,[R10, #+12] \ 00000434 0910A0E1 MOV R1,R9 \ 00000438 000088E5 STR R0,[R8, #+0] \ 0000043C 0200A0E3 MOV R0,#+2 \ 00000440 B400C8E1 STRH R0,[R8, #+4] \ 00000444 B6B0C8E1 STRH R11,[R8, #+6] \ 00000448 080088E2 ADD R0,R8,#+8 \ 0000044C 1A0000EF SWI +26 \ 00000450 0910A0E1 MOV R1,R9 \ 00000454 630E86E2 ADD R0,R6,#+1584 \ 00000458 1A0000EF SWI +26 \ 0000045C 980296E5 LDR R0,[R6, #+664] \ 00000460 ........ LDR R3,??DataTable327 ;; I_str \ 00000464 010080E2 ADD R0,R0,#+1 \ 00000468 980286E5 STR R0,[R6, #+664] \ 0000046C 0110A0E3 MOV R1,#+1 \ 00000470 02002DE9 PUSH {R1} \ 00000474 8008A0E1 LSL R0,R0,#+17 \ 00000478 A008A0E1 LSR R0,R0,#+17 \ 0000047C 01002DE9 PUSH {R0} \ 00000480 082088E2 ADD R2,R8,#+8 \ 00000484 0A00A0E1 MOV R0,R10 \ 00000488 ........ BL AddStringToLog \ 0000048C ........ LDR R0,??DataTable328 ;; SendAnswer \ 00000490 0820A0E1 MOV R2,R8 \ 00000494 0010A0E3 MOV R1,#+0 \ 00000498 710100EF SWI +369 \ 0000049C ........ LDR R0,??DataTable294 ;; main2_count \ 000004A0 001090E5 LDR R1,[R0, #+0] \ 000004A4 011081E2 ADD R1,R1,#+1 \ 000004A8 001080E5 STR R1,[R0, #+0] \ 000004AC A0009AE5 LDR R0,[R10, #+160] \ 000004B0 150000EF SWI +21 \ 000004B4 A0708AE5 STR R7,[R10, #+160] \ 000004B8 081095E5 LDR R1,[R5, #+8] \ 000004BC 0400A0E1 MOV R0,R4 \ 000004C0 9B0100EF SWI +411 \ 000004C4 B00296E5 LDR R0,[R6, #+688] \ 000004C8 0710A0E1 MOV R1,R7 \ 000004CC 260100EF SWI +294 \ 000004D0 B01296E5 LDR R1,[R6, #+688] \ 000004D4 0400A0E1 MOV R0,R4 \ 000004D8 810100EF SWI +385 \ 000004DC 0400A0E1 MOV R0,R4 \ 000004E0 ........ BL AddMsgToChat \ 000004E4 0110A0E3 MOV R1,#+1 \ 000004E8 0A00A0E1 MOV R0,R10 \ 000004EC ........ BL RecountMenu \ 000004F0 0700E0E1 MVN R0,R7 \ 000004F4 08D08DE2 ADD SP,SP,#+8 \ 000004F8 8CFFFFEA B ??edchat_onkey_4 \ ??edchat_onkey_19: \ 000004FC 1A0059E3 CMP R9,#+26 \ 00000500 5500001A BNE ??edchat_onkey_21 \ 00000504 0400A0E1 MOV R0,R4 \ 00000508 D80100EF SWI +472 \ 0000050C 000050E3 CMP R0,#+0 \ 00000510 5AFFFF1A BNE ??edchat_onkey_12 \ 00000514 040095E5 LDR R0,[R5, #+4] \ 00000518 820100EF SWI +386 \ 0000051C 04208DE2 ADD R2,SP,#+4 \ 00000520 0010A0E1 MOV R1,R0 \ 00000524 040095E5 LDR R0,[R5, #+4] \ 00000528 690100EF SWI +361 \ 0000052C B00296E5 LDR R0,[R6, #+688] \ 00000530 2C109DE5 LDR R1,[SP, #+44] \ 00000534 1F0100EF SWI +287 \ 00000538 0400A0E1 MOV R0,R4 \ 0000053C D30100EF SWI +467 \ 00000540 0090A0E1 MOV R9,R0 \ 00000544 B00296E5 LDR R0,[R6, #+688] \ 00000548 230100EF SWI +291 \ 0000054C 010080E2 ADD R0,R0,#+1 \ 00000550 140000EF SWI +20 \ 00000554 0080A0E1 MOV R8,R0 \ 00000558 B00296E5 LDR R0,[R6, #+688] \ 0000055C 0820A0E1 MOV R2,R8 \ 00000560 0910A0E1 MOV R1,R9 \ 00000564 ........ BL IsUrl \ 00000568 000050E3 CMP R0,#+0 \ 0000056C 2C00000A BEQ ??edchat_onkey_22 \ 00000570 08019FE5 LDR R0,??edchat_onkey_5+0x10 ;; IsOpenBrowser \ 00000574 000090E5 LDR R0,[R0, #+0] \ 00000578 000050E3 CMP R0,#+0 \ 0000057C 2800000A BEQ ??edchat_onkey_22 \ 00000580 FC009FE5 LDR R0,??edchat_onkey_5+0x14 ;; GetTempName \ 00000584 ........ LDR R3,??DataTable295 ;; TEMPLATES_PATH \ 00000588 01002DE9 PUSH {R0} \ 0000058C 182087E2 ADD R2,R7,#+24 \ 00000590 FF10A0E3 MOV R1,#+255 \ 00000594 34008DE2 ADD R0,SP,#+52 \ 00000598 1B0100EF SWI +283 \ 0000059C 04308DE2 ADD R3,SP,#+4 \ 000005A0 402FA0E3 MOV R2,#+256 \ 000005A4 0110A0E3 MOV R1,#+1 \ 000005A8 831C81E3 ORR R1,R1,#0x8300 \ 000005AC 34008DE2 ADD R0,SP,#+52 \ 000005B0 0A0000EF SWI +10 \ 000005B4 0040A0E1 MOV R4,R0 \ 000005B8 010074E3 CMN R4,#+1 \ 000005BC 04D08DE2 ADD SP,SP,#+4 \ 000005C0 1400000A BEQ ??edchat_onkey_23 \ 000005C4 0800A0E1 MOV R0,R8 \ 000005C8 1B0000EF SWI +27 \ 000005CC 0020A0E1 MOV R2,R0 \ 000005D0 0D30A0E1 MOV R3,SP \ 000005D4 0810A0E1 MOV R1,R8 \ 000005D8 0400A0E1 MOV R0,R4 \ 000005DC 0C0000EF SWI +12 \ 000005E0 0D10A0E1 MOV R1,SP \ 000005E4 0400A0E1 MOV R0,R4 \ 000005E8 0D0000EF SWI +13 \ 000005EC B00296E5 LDR R0,[R6, #+688] \ 000005F0 402FA0E3 MOV R2,#+256 \ 000005F4 30108DE2 ADD R1,SP,#+48 \ 000005F8 6C0100EF SWI +364 \ 000005FC B00296E5 LDR R0,[R6, #+688] \ 00000600 0020A0E3 MOV R2,#+0 \ 00000604 0010A0E3 MOV R1,#+0 \ 00000608 940000EF SWI +148 \ 0000060C 0D10A0E1 MOV R1,SP \ 00000610 30008DE2 ADD R0,SP,#+48 \ 00000614 6B0100EF SWI +363 \ ??edchat_onkey_23: \ 00000618 0800A0E1 MOV R0,R8 \ 0000061C 150000EF SWI +21 \ 00000620 41FFFFEA B ??edchat_onkey_2 \ ??edchat_onkey_22: \ 00000624 000095E5 LDR R0,[R5, #+0] \ 00000628 0C0090E5 LDR R0,[R0, #+12] \ 0000062C ........ BL LoadTemplates \ 00000630 ........ LDR R2,??DataTable296 ;; IsMultiBuffer \ 00000634 4C109FE5 LDR R1,??edchat_onkey_5+0x18 ;; ed_options_handler \ 00000638 100085E5 STR R0,[R5, #+16] \ 0000063C 002092E5 LDR R2,[R2, #+0] \ 00000640 000052E3 CMP R2,#+0 \ 00000644 03308002 ADDEQ R3,R0,#+3 \ 00000648 04308012 ADDNE R3,R0,#+4 \ 0000064C 0520A0E1 MOV R2,R5 \ 00000650 0400A0E1 MOV R0,R4 \ 00000654 E50100EF SWI +485 \ 00000658 EEFFFFEA B ??edchat_onkey_23 \ ??edchat_onkey_21: \ 0000065C 0D0059E3 CMP R9,#+13 \ 00000660 44FFFF0A BEQ ??edchat_onkey_18 \ ??edchat_onkey_24: \ 00000664 0E0059E3 CMP R9,#+14 \ 00000668 04FFFF1A BNE ??edchat_onkey_12 \ 0000066C 23FFFFEA B ??edchat_onkey_15 \ ??edchat_onkey_5: \ 00000670 ........ DC32 `?` \ 00000674 ........ DC32 LongRightAction \ 00000678 ........ DC32 LongLeftAction \ 0000067C ........ DC32 LongVolUpAction \ 00000680 ........ DC32 IsOpenBrowser \ 00000684 ........ DC32 GetTempName \ 00000688 ........ DC32 ed_options_handler 7029 //1: close 7030 } 7031 7032 static const HEADER_DESC edchat_hdr={0,0,NULL,NULL,NULL,0,LGP_NULL}; 7033 7034 void (*old_ed_redraw)(void *data); \ In segment CODE, align 4, keep-with-next 7035 void my_ed_redraw(void *data) 7036 { \ my_ed_redraw: \ 00000000 30402DE9 PUSH {R4,R5,LR} 7037 void *edchat_gui; 7038 EDCHAT_STRUCT *ed_struct; 7039 if (old_ed_redraw) old_ed_redraw(data); \ 00000004 ........ LDR R4,??DataTable299 ;; S_ICONS \ 00000008 0C1494E5 LDR R1,[R4, #+1036] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0100000A BEQ ??my_ed_redraw_0 \ 00000014 31FF2FE1 BLX R1 7040 edchat_gui=FindGUIbyId(edchat_id,NULL); \ 00000018 0010A0E3 MOV R1,#+0 \ ??my_ed_redraw_0: \ 0000001C 480394E5 LDR R0,[R4, #+840] \ 00000020 090200EF SWI +521 7041 if (edchat_gui) \ 00000024 000050E3 CMP R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 7042 { 7043 ed_struct=EDIT_GetUserPointer(edchat_gui); \ 0000002C DF0100EF SWI +479 7044 if (ed_struct) \ 00000030 000050E3 CMP R0,#+0 \ 00000034 3080BD08 POPEQ {R4,R5,PC} 7045 { 7046 int icon, width; 7047 #ifndef NEWSGOLD 7048 icon=*(S_ICONS+GetIconIndex(ed_struct->ed_contact)); 7049 ((HEADER_DESC *)&edchat_hdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); 7050 DrawImg(ScreenW()-1-width,1,icon); 7051 #else 7052 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] 7053 width=GetImgWidth(icon); \ 00000044 0400A0E1 MOV R0,R4 \ 00000048 220000EF SWI +34 \ 0000004C 0050A0E1 MOV R5,R0 7054 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 7055 /* DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 7056 GetPaletteAdrByColorIndex(0), 7057 GetPaletteAdrByColorIndex(EDIT_IsBusy(edchat_gui)?3:4));*/ 7058 #endif 7059 } 7060 } 7061 } \ 0000006C 3080BDE8 POP {R4,R5,PC} ;; return 7062 \ In segment CODE, align 4, keep-with-next 7063 void edchat_ghook(GUI *data, int cmd) 7064 { \ edchat_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 7065 7066 static const SOFTKEY_DESC sk={0x0FFF,0x0000,(int)LG_MENU}; 7067 static const SOFTKEY_DESC sk_cancel={0x0FF0,0x0000,(int)LG_CLOSE}; 7068 // static SOFTKEY_DESC sk={0x0018,0x0000,(int)"Menu"}; 7069 int j; 7070 EDITCONTROL ec; 7071 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); 7072 PNGTOP_DESC *pltop=PNG_TOP(); 7073 if (cmd==9) \ 00000004 ........ LDR R4,??DataTable298 ;; 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 7074 { 7075 GBS_DelTimer(&tmr_illumination); //by BoBa 25.06.07 \ 00000030 9800A0E3 MOV R0,#+152 \ 00000034 680D80E3 ORR R0,R0,#0x1A00 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 8C0100EF SWI +396 7076 pltop->dyn_pltop=NULL; \ 00000040 086088E5 STR R6,[R8, #+8] \ 00000044 170000EA B ??edchat_ghook_1 7077 } 7078 if (cmd==2) \ ??edchat_ghook_0: \ 00000048 081097E5 LDR R1,[R7, #+8] \ 0000004C 020059E3 CMP R9,#+2 \ 00000050 1600001A BNE ??edchat_ghook_2 7079 { 7080 ed_struct->ed_chatgui=data; \ 00000054 045087E5 STR R5,[R7, #+4] 7081 // edgui_data=data; 7082 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000058 0500A0E1 MOV R0,R5 \ 0000005C 9B0100EF SWI +411 7083 7084 static void *methods[16]; 7085 void **m=GetDataOfItemByID(data,2); \ 00000060 0210A0E3 MOV R1,#+2 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 4F0100EF SWI +335 \ 0000006C 0050B0E1 MOVS R5,R0 7086 if (m) 7087 { 7088 if (m[1]) \ 00000070 04009515 LDRNE R0,[R5, #+4] \ 00000074 00005013 CMPNE R0,#+0 \ 00000078 6700000A BEQ ??edchat_ghook_3 7089 { 7090 memcpy(methods,m[1],sizeof(methods)); \ 0000007C 416EA0E3 MOV R6,#+1040 \ 00000080 4020A0E3 MOV R2,#+64 \ 00000084 0010A0E1 MOV R1,R0 \ 00000088 040086E0 ADD R0,R6,R4 \ 0000008C 1E0100EF SWI +286 7091 old_ed_redraw=(void (*)(void *))(methods[0]); \ 00000090 040096E7 LDR R0,[R6, +R4] \ 00000094 0C0484E5 STR R0,[R4, #+1036] 7092 methods[0]=(void *)my_ed_redraw; \ 00000098 84019FE5 LDR R0,??edchat_ghook_4 ;; my_ed_redraw \ 0000009C 040086E7 STR R0,[R6, +R4] 7093 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} 7094 } 7095 } 7096 } 7097 if (cmd==3) \ ??edchat_ghook_2: \ 000000B0 030059E3 CMP R9,#+3 \ 000000B4 0E00001A BNE ??edchat_ghook_5 7098 { 7099 // if (edgui_data==data) edgui_data=NULL; 7100 if (ed_struct->ed_contact) \ 000000B8 000097E5 LDR R0,[R7, #+0] \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 0500000A BEQ ??edchat_ghook_6 7101 { 7102 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C4 0D20A0E1 MOV R2,SP \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 690100EF SWI +361 7103 SaveAnswer(ed_struct->ed_contact,ec.pWS); \ 000000D0 28109DE5 LDR R1,[SP, #+40] \ 000000D4 000097E5 LDR R0,[R7, #+0] \ 000000D8 ........ BL SaveAnswer 7104 } 7105 RecountMenu(ed_struct->ed_contact,1); \ ??edchat_ghook_6: \ 000000DC 000097E5 LDR R0,[R7, #+0] \ 000000E0 0110A0E3 MOV R1,#+1 \ 000000E4 ........ BL RecountMenu 7106 mfree(ed_struct); \ 000000E8 0700A0E1 MOV R0,R7 \ 000000EC 150000EF SWI +21 \ 000000F0 ECFFFFEA B ??edchat_ghook_1 7107 } 7108 if (cmd==0x0A) \ ??edchat_ghook_5: \ 000000F4 0A0059E3 CMP R9,#+10 \ 000000F8 0D00001A BNE ??edchat_ghook_7 7109 { 7110 pltop->dyn_pltop=SmilesImgList; \ 000000FC 24019FE5 LDR R0,??edchat_ghook_4+0x4 ;; SmilesImgList \ 00000100 000090E5 LDR R0,[R0, #+0] \ 00000104 080088E5 STR R0,[R8, #+8] 7111 DisableIDLETMR(); \ 00000108 7F0100EF SWI +383 7112 total_unread-=ed_struct->requested_decrement_total_unread; \ 0000010C 380394E5 LDR R0,[R4, #+824] \ 00000110 0C1097E5 LDR R1,[R7, #+12] \ 00000114 010040E0 SUB R0,R0,R1 \ 00000118 380384E5 STR R0,[R4, #+824] 7113 ed_struct->requested_decrement_total_unread=0; \ 0000011C 0C6087E5 STR R6,[R7, #+12] 7114 #ifdef ELKA 7115 if (!total_unread) \ 00000120 380394E5 LDR R0,[R4, #+824] \ 00000124 000050E3 CMP R0,#+0 \ 00000128 3B00001A BNE ??edchat_ghook_3 7116 { 7117 SLI_Off(); \ 0000012C ........ BL SLI_Off \ 00000130 DCFFFFEA B ??edchat_ghook_1 7118 } 7119 #endif 7120 /* if (request_close_edchat) 7121 { 7122 request_close_edchat=0; 7123 GeneralFunc_flag1(edchat_id,1); 7124 return; 7125 }*/ 7126 } 7127 if (cmd==7) \ ??edchat_ghook_7: \ 00000134 070059E3 CMP R9,#+7 \ 00000138 2800001A BNE ??edchat_ghook_8 7128 { 7129 SetSoftKey(data,&sk,SET_SOFT_KEY_N); \ 0000013C E8809FE5 LDR R8,??edchat_ghook_4+0x8 ;; ??sk_1 \ 00000140 0020A0E3 MOV R2,#+0 \ 00000144 0810A0E1 MOV R1,R8 \ 00000148 0500A0E1 MOV R0,R5 \ 0000014C 680100EF SWI +360 7130 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000150 081097E5 LDR R1,[R7, #+8] \ 00000154 0D20A0E1 MOV R2,SP \ 00000158 0500A0E1 MOV R0,R5 \ 0000015C 690100EF SWI +361 7131 if (ec.pWS->wsbody[0]==0) \ 00000160 28009DE5 LDR R0,[SP, #+40] \ 00000164 000090E5 LDR R0,[R0, #+0] \ 00000168 B000D0E1 LDRH R0,[R0, #+0] \ 0000016C 000050E3 CMP R0,#+0 \ 00000170 0300001A BNE ??edchat_ghook_9 7132 SetSoftKey(data,&sk_cancel,SET_SOFT_KEY_N==0?1:0); \ 00000174 0120A0E3 MOV R2,#+1 \ 00000178 081088E2 ADD R1,R8,#+8 \ 0000017C 0500A0E1 MOV R0,R5 \ 00000180 680100EF SWI +360 7133 if (!EDIT_IsBusy(data)) \ ??edchat_ghook_9: \ 00000184 0500A0E1 MOV R0,R5 \ 00000188 1C0200EF SWI +540 \ 0000018C 000050E3 CMP R0,#+0 \ 00000190 2100001A BNE ??edchat_ghook_3 7134 { 7135 time_to_stop_t9=0; \ 00000194 E86384E5 STR R6,[R4, #+1000] 7136 if (ed_struct->ed_contact->req_add) \ 00000198 000097E5 LDR R0,[R7, #+0] \ 0000019C 941090E5 LDR R1,[R0, #+148] \ 000001A0 000051E3 CMP R1,#+0 \ 000001A4 0500000A BEQ ??edchat_ghook_10 7137 { 7138 ed_struct->ed_contact->req_add=0; \ 000001A8 946080E5 STR R6,[R0, #+148] 7139 AddMsgToChat(data); \ 000001AC 0500A0E1 MOV R0,R5 \ 000001B0 ........ BL AddMsgToChat 7140 RecountMenu(ed_struct->ed_contact,1); \ 000001B4 000097E5 LDR R0,[R7, #+0] \ 000001B8 0110A0E3 MOV R1,#+1 \ 000001BC ........ BL RecountMenu 7141 } 7142 if (ed_struct->ed_contact->req_drawack) \ ??edchat_ghook_10: \ 000001C0 000097E5 LDR R0,[R7, #+0] \ 000001C4 981090E5 LDR R1,[R0, #+152] \ 000001C8 000051E3 CMP R1,#+0 \ 000001CC 1200000A BEQ ??edchat_ghook_3 7143 { 7144 ed_struct->ed_contact->req_drawack=0; \ 000001D0 986080E5 STR R6,[R0, #+152] 7145 DrawAck(data); \ 000001D4 0500A0E1 MOV R0,R5 \ 000001D8 ........ BL DrawAck \ 000001DC B1FFFFEA B ??edchat_ghook_1 7146 } 7147 } 7148 } 7149 if (cmd==0x0C) \ ??edchat_ghook_8: \ 000001E0 0C0059E3 CMP R9,#+12 \ 000001E4 0C00001A BNE ??edchat_ghook_3 7150 { 7151 j=EDIT_GetFocus(data); \ 000001E8 0500A0E1 MOV R0,R5 \ 000001EC 820100EF SWI +386 \ 000001F0 0040A0E1 MOV R4,R0 7152 if ((EDIT_GetUnFocus(data)ed_answer)) \ 000001F4 0500A0E1 MOV R0,R5 \ 000001F8 830100EF SWI +387 \ 000001FC 040050E1 CMP R0,R4 \ 00000200 050000AA BGE ??edchat_ghook_3 \ 00000204 080097E5 LDR R0,[R7, #+8] \ 00000208 000054E1 CMP R4,R0 \ 0000020C 0200000A BEQ ??edchat_ghook_3 7153 EDIT_SetCursorPos(data,1); \ 00000210 0110A0E3 MOV R1,#+1 \ 00000214 0500A0E1 MOV R0,R5 \ 00000218 D40100EF SWI +468 7154 } 7155 } \ ??edchat_ghook_3: \ 0000021C 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 00000220 F083BDE8 POP {R4-R9,PC} ;; return \ ??edchat_ghook_4: \ 00000224 ........ DC32 my_ed_redraw \ 00000228 ........ DC32 SmilesImgList \ 0000022C ........ DC32 ??sk_1 \ In segment DATA_C, align 4, align-sorted 7156 7157 7158 7159 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 `?` 7160 { 7161 1, 7162 edchat_onkey, 7163 edchat_ghook, 7164 (void *)edchat_locret, 7165 0, 7166 &menu_skt, 7167 {0,NULL,NULL,NULL}, 7168 FONT_SMALL, 7169 100, 7170 101, 7171 0, 7172 // 0x00000001 - Выровнять по правому краю 7173 // 0x00000002 - Выровнять по центру 7174 // 0x00000004 - Инверсия знакомест 7175 // 0x00000008 - UnderLine 7176 // 0x00000020 - Не переносить слова 7177 // 0x00000200 - bold 7178 0, 7179 // 0x00000002 - ReadOnly 7180 // 0x00000004 - Не двигается курсор 7181 // 0x40000000 - Поменять местами софт-кнопки 7182 0x40000000 7183 }; 7184 \ In segment CODE, align 4, keep-with-next 7185 void CreateEditChat(CLIST *t) 7186 { \ CreateEditChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 7187 7188 void *ma=malloc_adr(); 7189 void *eq; 7190 EDITCONTROL ec; 7191 EDITC_OPTIONS ec_options; 7192 int color, font, type; 7193 int zc; 7194 7195 LOGQ *lp; 7196 int edchat_toitem; 7197 // edcontact=t; 7198 7199 *((int *)(&edchat_hdr.lgp_id))=(int)t->name; \ 00000004 58649FE5 LDR R6,??CreateEditChat_0 ;; edchat_desc 7200 // *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+GetIconIndex(t); 7201 *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+IS_NULLICON; \ 00000008 ........ LDR R7,??DataTable299 ;; S_ICONS \ 0000000C 3CD04DE2 SUB SP,SP,#+60 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 148000EF SWI +32788 \ 00000018 0050A0E1 MOV R5,R0 \ 0000001C 140084E2 ADD R0,R4,#+20 \ 00000020 440086E5 STR R0,[R6, #+68] \ 00000024 440087E2 ADD R0,R7,#+68 \ 00000028 400086E5 STR R0,[R6, #+64] 7202 7203 eq=AllocEQueue(ma,mfree_adr()); \ 0000002C 158000EF SWI +32789 \ 00000030 0010A0E1 MOV R1,R0 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 630100EF SWI +355 7204 7205 /* hist = malloc(256); 7206 if(!GetHistory(hist, 256, t->uin)) 7207 { 7208 ascii2ws(ews,hist); 7209 PrepareEditControl(&ec); 7210 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL|ECF_DISABLE_T9,ews,ews->wsbody[0]); 7211 } 7212 mfree(hist); 7213 7214 AddEditControlToEditQend(eq,&ec,ma); */ 7215 lp=t->log; \ 0000003C 9C9094E5 LDR R9,[R4, #+156] \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 000059E3 CMP R9,#+0 \ 00000048 8F00000A BEQ ??CreateEditChat_1 7216 7217 while(lp) 7218 { 7219 font = ED_H_FONT_SIZE; \ ??CreateEditChat_2: \ 0000004C ........ LDR R0,??DataTable300 ;; ED_H_FONT_SIZE 7220 if ((zc=lp->acked&3)) \ 00000050 ........ LDR R1,??DataTable301 ;; I_COLOR \ 00000054 00A090E5 LDR R10,[R0, #+0] \ 00000058 040099E5 LDR R0,[R9, #+4] \ 0000005C 00B091E5 LDR R11,[R1, #+0] \ 00000060 030010E2 ANDS R0,R0,#0x3 \ 00000064 0300000A BEQ ??CreateEditChat_3 7221 { 7222 if (zc==1) \ 00000068 010050E3 CMP R0,#+1 \ 0000006C 2200001A BNE ??CreateEditChat_4 7223 color=ACK_COLOR; //Зеленый \ 00000070 ........ LDR R0,??DataTable302 ;; ACK_COLOR \ 00000074 1F0000EA B ??CreateEditChat_5 7224 else 7225 color=I_COLOR; 7226 } 7227 else 7228 { 7229 if (lp->ID==0xFFFFFFFF) \ ??CreateEditChat_3: \ 00000078 080099E5 LDR R0,[R9, #+8] \ 0000007C 010070E3 CMN R0,#+1 \ 00000080 1B00001A BNE ??CreateEditChat_6 7230 { 7231 type = lp->type&0x0F; \ 00000084 0C0099E5 LDR R0,[R9, #+12] \ 00000088 0F1000E2 AND R1,R0,#0xF 7232 if(lp->type&0x10) \ 0000008C 100010E3 TST R0,#0x10 \ 00000090 0D00000A BEQ ??CreateEditChat_7 7233 { 7234 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 00000094 010051E3 CMP R1,#+1 \ 00000098 ........ LDREQ R0,??DataTable303 ;; O_I_COLOR \ 0000009C 0700000A BEQ ??CreateEditChat_8 \ 000000A0 030051E3 CMP R1,#+3 \ 000000A4 0400001A BNE ??CreateEditChat_9 \ 000000A8 ........ LDR R0,??DataTable316 ;; O_X_COLOR \ 000000AC 00B090E5 LDR R11,[R0, #+0] \ 000000B0 ........ LDR R0,??DataTable318 ;; O_ED_X_FONT_SIZE \ ??CreateEditChat_10: \ 000000B4 00A090E5 LDR R10,[R0, #+0] \ 000000B8 0F0000EA B ??CreateEditChat_4 \ ??CreateEditChat_9: \ 000000BC ........ LDR R0,??DataTable306 ;; O_TO_COLOR \ ??CreateEditChat_8: \ 000000C0 00B090E5 LDR R11,[R0, #+0] \ 000000C4 ........ LDR R0,??DataTable307 ;; O_ED_H_FONT_SIZE \ 000000C8 F9FFFFEA B ??CreateEditChat_10 7235 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 7236 } 7237 else 7238 { 7239 color = (type==1)?I_COLOR:((type==3)?X_COLOR:TO_COLOR); \ ??CreateEditChat_7: \ 000000CC 010051E3 CMP R1,#+1 \ 000000D0 0900000A BEQ ??CreateEditChat_4 \ 000000D4 030051E3 CMP R1,#+3 \ 000000D8 0300001A BNE ??CreateEditChat_11 \ 000000DC ........ LDR R0,??DataTable317 ;; X_COLOR \ 000000E0 00B090E5 LDR R11,[R0, #+0] \ 000000E4 ........ LDR R0,??DataTable319 ;; ED_X_FONT_SIZE \ 000000E8 F1FFFFEA B ??CreateEditChat_10 \ ??CreateEditChat_11: \ 000000EC ........ LDR R0,??DataTable310 ;; TO_COLOR \ 000000F0 000000EA B ??CreateEditChat_5 7240 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 7241 } 7242 } 7243 else 7244 color=UNACK_COLOR; //????? \ ??CreateEditChat_6: \ 000000F4 ........ LDR R0,??DataTable311 ;; UNACK_COLOR \ ??CreateEditChat_5: \ 000000F8 00B090E5 LDR R11,[R0, #+0] 7245 } 7246 PrepareEditControl(&ec); \ ??CreateEditChat_4: \ 000000FC 10008DE2 ADD R0,SP,#+16 \ 00000100 640100EF SWI +356 7247 if ((lp->type&0x0F)!=3) \ 00000104 0C0099E5 LDR R0,[R9, #+12] \ 00000108 0F0000E2 AND R0,R0,#0xF \ 0000010C 030050E3 CMP R0,#+3 \ 00000110 0800000A BEQ ??CreateEditChat_12 7248 { 7249 ascii2ws(ews,lp->hdr); \ 00000114 B00297E5 LDR R0,[R7, #+688] \ 00000118 101089E2 ADD R1,R9,#+16 \ 0000011C ........ _BLF ascii2ws,??ascii2ws??rA 7250 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000120 B03297E5 LDR R3,[R7, #+688] \ 00000124 4020A0E3 MOV R2,#+64 \ 00000128 000093E5 LDR R0,[R3, #+0] \ 0000012C B000D0E1 LDRH R0,[R0, #+0] \ 00000130 01002DE9 PUSH {R0} \ 00000134 030000EA B ??CreateEditChat_13 7251 } 7252 else 7253 { 7254 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??CreateEditChat_12: \ 00000138 0000A0E3 MOV R0,#+0 \ 0000013C 01002DE9 PUSH {R0} \ 00000140 B03297E5 LDR R3,[R7, #+688] \ 00000144 2020A0E3 MOV R2,#+32 \ ??CreateEditChat_13: \ 00000148 0110A0E3 MOV R1,#+1 \ 0000014C 14008DE2 ADD R0,SP,#+20 \ 00000150 650100EF SWI +357 \ 00000154 04D08DE2 ADD SP,SP,#+4 7255 } 7256 PrepareEditCOptions(&ec_options); \ 00000158 0D00A0E1 MOV R0,SP \ 0000015C C80100EF SWI +456 7257 SetPenColorToEditCOptions(&ec_options,color); \ 00000160 0B10A0E1 MOV R1,R11 \ 00000164 0D00A0E1 MOV R0,SP \ 00000168 CC0100EF SWI +460 7258 SetFontToEditCOptions(&ec_options,font); \ 0000016C 0A10A0E1 MOV R1,R10 \ 00000170 0D00A0E1 MOV R0,SP \ 00000174 CA0100EF SWI +458 7259 CopyOptionsToEditControl(&ec,&ec_options); \ 00000178 0D10A0E1 MOV R1,SP \ 0000017C 10008DE2 ADD R0,SP,#+16 \ 00000180 CE0100EF SWI +462 7260 AddEditControlToEditQend(eq,&ec,ma); \ 00000184 0520A0E1 MOV R2,R5 \ 00000188 10108DE2 ADD R1,SP,#+16 \ 0000018C 0800A0E1 MOV R0,R8 \ 00000190 660100EF SWI +358 7261 if ((lp->type&0x0F)!=3) \ 00000194 0C0099E5 LDR R0,[R9, #+12] \ 00000198 0F1000E2 AND R1,R0,#0xF \ 0000019C 030051E3 CMP R1,#+3 \ 000001A0 0300000A BEQ ??CreateEditChat_14 7262 { 7263 ParseAnswer(ews,lp->text); \ 000001A4 B00297E5 LDR R0,[R7, #+688] \ 000001A8 601089E2 ADD R1,R9,#+96 \ 000001AC ........ BL ParseAnswer \ 000001B0 060000EA B ??CreateEditChat_15 7264 } 7265 else 7266 { 7267 ParseXStatusText(ews,lp->text,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_14: \ 000001B4 100010E3 TST R0,#0x10 \ 000001B8 ........ LDRNE R0,??DataTable316 ;; O_X_COLOR \ 000001BC 601089E2 ADD R1,R9,#+96 \ 000001C0 ........ LDREQ R0,??DataTable317 ;; X_COLOR \ 000001C4 002090E5 LDR R2,[R0, #+0] \ 000001C8 B00297E5 LDR R0,[R7, #+688] \ 000001CC ........ BL ParseXStatusText 7268 } 7269 PrepareEditControl(&ec); \ ??CreateEditChat_15: \ 000001D0 10008DE2 ADD R0,SP,#+16 \ 000001D4 640100EF SWI +356 7270 ConstructEditControl(&ec, 7271 ECT_NORMAL_TEXT, 7272 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 7273 ews,ews->wsbody[0]); \ 000001D8 B03297E5 LDR R3,[R7, #+688] \ 000001DC 000093E5 LDR R0,[R3, #+0] \ 000001E0 B010D0E1 LDRH R1,[R0, #+0] \ 000001E4 000051E3 CMP R1,#+0 \ 000001E8 0100A0E1 MOV R0,R1 \ 000001EC 01002DE9 PUSH {R0} \ 000001F0 812DA013 MOVNE R2,#+8256 \ 000001F4 2020A003 MOVEQ R2,#+32 \ 000001F8 0310A0E3 MOV R1,#+3 \ 000001FC 14008DE2 ADD R0,SP,#+20 \ 00000200 650100EF SWI +357 7274 PrepareEditCOptions(&ec_options); \ 00000204 04008DE2 ADD R0,SP,#+4 \ 00000208 C80100EF SWI +456 7275 //#ifdef M75 7276 if ((lp->type&0x0F)!=3) \ 0000020C 0C0099E5 LDR R0,[R9, #+12] \ 00000210 04D08DE2 ADD SP,SP,#+4 \ 00000214 0F1000E2 AND R1,R0,#0xF \ 00000218 030051E3 CMP R1,#+3 \ 0000021C 0300000A BEQ ??CreateEditChat_16 7277 { 7278 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000220 100010E3 TST R0,#0x10 \ 00000224 ........ LDRNE R0,??DataTable314 ;; O_ED_FONT_SIZE \ 00000228 ........ LDREQ R0,??DataTable321 ;; ED_FONT_SIZE \ 0000022C 090000EA B ??CreateEditChat_17 7279 } 7280 else 7281 { 7282 SetPenColorToEditCOptions(&ec_options,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_16: \ 00000230 100010E3 TST R0,#0x10 \ 00000234 ........ LDRNE R0,??DataTable316 ;; O_X_COLOR \ 00000238 ........ LDREQ R0,??DataTable317 ;; X_COLOR \ 0000023C 001090E5 LDR R1,[R0, #+0] \ 00000240 0D00A0E1 MOV R0,SP \ 00000244 CC0100EF SWI +460 7283 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_X_FONT_SIZE:ED_X_FONT_SIZE); \ 00000248 0C0099E5 LDR R0,[R9, #+12] \ 0000024C 100010E3 TST R0,#0x10 \ 00000250 ........ LDRNE R0,??DataTable318 ;; O_ED_X_FONT_SIZE \ 00000254 ........ LDREQ R0,??DataTable319 ;; ED_X_FONT_SIZE \ ??CreateEditChat_17: \ 00000258 001090E5 LDR R1,[R0, #+0] \ 0000025C 0D00A0E1 MOV R0,SP \ 00000260 CA0100EF SWI +458 7284 } 7285 //#else 7286 // SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 7287 //#endif 7288 CopyOptionsToEditControl(&ec,&ec_options); \ 00000264 0D10A0E1 MOV R1,SP \ 00000268 10008DE2 ADD R0,SP,#+16 \ 0000026C CE0100EF SWI +462 7289 AddEditControlToEditQend(eq,&ec,ma); \ 00000270 0520A0E1 MOV R2,R5 \ 00000274 10108DE2 ADD R1,SP,#+16 \ 00000278 0800A0E1 MOV R0,R8 \ 0000027C 660100EF SWI +358 7290 lp=lp->next; \ 00000280 009099E5 LDR R9,[R9, #+0] 7291 } \ 00000284 000059E3 CMP R9,#+0 \ 00000288 6FFFFF1A BNE ??CreateEditChat_2 7292 if (t->isunread) total_unread--; \ ??CreateEditChat_1: \ 0000028C 8C0094E5 LDR R0,[R4, #+140] 7293 total_unread2=total_unread2-t->unread_msg; 7294 t->unread_msg=0; \ 00000290 0090A0E3 MOV R9,#+0 \ 00000294 000050E3 CMP R0,#+0 \ 00000298 38039715 LDRNE R0,[R7, #+824] \ 0000029C 01004012 SUBNE R0,R0,#+1 \ 000002A0 38038715 STRNE R0,[R7, #+824] \ 000002A4 8C0297E5 LDR R0,[R7, #+652] \ 000002A8 901094E5 LDR R1,[R4, #+144] \ 000002AC 010040E0 SUB R0,R0,R1 \ 000002B0 8C0287E5 STR R0,[R7, #+652] \ 000002B4 909084E5 STR R9,[R4, #+144] 7295 t->isunread=0; \ 000002B8 8C9084E5 STR R9,[R4, #+140] 7296 ChangeContactPos(t); \ 000002BC 0400A0E1 MOV R0,R4 \ 000002C0 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 7297 wsprintf(ews, "-------"); \ 000002C4 B00297E5 LDR R0,[R7, #+688] \ 000002C8 4C1086E2 ADD R1,R6,#+76 \ 000002CC 240100EF SWI +292 7298 PrepareEditControl(&ec); \ 000002D0 10008DE2 ADD R0,SP,#+16 \ 000002D4 640100EF SWI +356 7299 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000002D8 B03297E5 LDR R3,[R7, #+688] \ 000002DC 4020A0E3 MOV R2,#+64 \ 000002E0 000093E5 LDR R0,[R3, #+0] \ 000002E4 0110A0E3 MOV R1,#+1 \ 000002E8 B000D0E1 LDRH R0,[R0, #+0] \ 000002EC 01002DE9 PUSH {R0} \ 000002F0 14008DE2 ADD R0,SP,#+20 \ 000002F4 650100EF SWI +357 7300 PrepareEditCOptions(&ec_options); \ 000002F8 04008DE2 ADD R0,SP,#+4 \ 000002FC C80100EF SWI +456 7301 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000300 ........ LDR R0,??DataTable321 ;; ED_FONT_SIZE \ 00000304 001090E5 LDR R1,[R0, #+0] \ 00000308 04008DE2 ADD R0,SP,#+4 \ 0000030C CA0100EF SWI +458 7302 CopyOptionsToEditControl(&ec,&ec_options); \ 00000310 04108DE2 ADD R1,SP,#+4 \ 00000314 14008DE2 ADD R0,SP,#+20 \ 00000318 CE0100EF SWI +462 7303 AddEditControlToEditQend(eq,&ec,ma); \ 0000031C 0520A0E1 MOV R2,R5 \ 00000320 14108DE2 ADD R1,SP,#+20 \ 00000324 0800A0E1 MOV R0,R8 \ 00000328 660100EF SWI +358 7304 7305 if (t->answer) ParseAnswer(ews,t->answer); \ 0000032C A01094E5 LDR R1,[R4, #+160] \ 00000330 04D08DE2 ADD SP,SP,#+4 \ 00000334 000051E3 CMP R1,#+0 \ 00000338 0200000A BEQ ??CreateEditChat_18 \ 0000033C B00297E5 LDR R0,[R7, #+688] \ 00000340 ........ BL ParseAnswer \ 00000344 020000EA B ??CreateEditChat_19 7306 else CutWSTR(ews,0); \ ??CreateEditChat_18: \ 00000348 B00297E5 LDR R0,[R7, #+688] \ 0000034C 0010A0E3 MOV R1,#+0 \ 00000350 260100EF SWI +294 7307 PrepareEditControl(&ec); \ ??CreateEditChat_19: \ 00000354 10008DE2 ADD R0,SP,#+16 \ 00000358 640100EF SWI +356 7308 // ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,1024); 7309 ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,4096); \ 0000035C 04019FE5 LDR R0,??CreateEditChat_0+0x4 ;; FIRST_LETTER \ 00000360 0310A0E3 MOV R1,#+3 \ 00000364 000090E5 LDR R0,[R0, #+0] \ 00000368 000050E3 CMP R0,#+0 \ 0000036C 400DA0E3 MOV R0,#+4096 \ 00000370 01002DE9 PUSH {R0} \ 00000374 B03297E5 LDR R3,[R7, #+688] \ 00000378 402DA013 MOVNE R2,#+4096 \ 0000037C 0020A003 MOVEQ R2,#+0 \ 00000380 14008DE2 ADD R0,SP,#+20 \ 00000384 650100EF SWI +357 7310 7311 PrepareEditCOptions(&ec_options); \ 00000388 04008DE2 ADD R0,SP,#+4 \ 0000038C C80100EF SWI +456 7312 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000390 ........ LDR R0,??DataTable321 ;; ED_FONT_SIZE \ 00000394 001090E5 LDR R1,[R0, #+0] \ 00000398 04008DE2 ADD R0,SP,#+4 \ 0000039C CA0100EF SWI +458 7313 CopyOptionsToEditControl(&ec,&ec_options); \ 000003A0 04108DE2 ADD R1,SP,#+4 \ 000003A4 14008DE2 ADD R0,SP,#+20 \ 000003A8 CE0100EF SWI +462 7314 edchat_toitem=AddEditControlToEditQend(eq,&ec,ma); \ 000003AC 0520A0E1 MOV R2,R5 \ 000003B0 14108DE2 ADD R1,SP,#+20 \ 000003B4 0800A0E1 MOV R0,R8 \ 000003B8 660100EF SWI +358 \ 000003BC 00A0A0E1 MOV R10,R0 7315 7316 if (t->req_xtext) \ 000003C0 B80094E5 LDR R0,[R4, #+184] \ 000003C4 04D08DE2 ADD SP,SP,#+4 \ 000003C8 000050E3 CMP R0,#+0 \ 000003CC 0400000A BEQ ??CreateEditChat_20 7317 { 7318 FreeXText(t); \ 000003D0 0400A0E1 MOV R0,R4 \ 000003D4 ........ _BLF FreeXText,??FreeXText??rA 7319 t->req_xtext=0; \ 000003D8 B89084E5 STR R9,[R4, #+184] 7320 RequestXText(t->uin); \ 000003DC 0C0094E5 LDR R0,[R4, #+12] \ 000003E0 ........ BL RequestXText 7321 } 7322 7323 EDCHAT_STRUCT *ed_struct=malloc(sizeof(EDCHAT_STRUCT)); \ ??CreateEditChat_20: \ 000003E4 1400A0E3 MOV R0,#+20 \ 000003E8 140000EF SWI +20 \ 000003EC 0050A0E1 MOV R5,R0 7324 ed_struct->ed_contact=t; \ 000003F0 004085E5 STR R4,[R5, #+0] 7325 ed_struct->ed_answer=edchat_toitem; \ 000003F4 08A085E5 STR R10,[R5, #+8] 7326 ed_struct->requested_decrement_total_unread=0; \ 000003F8 0C9085E5 STR R9,[R5, #+12] 7327 t->req_add=0; \ 000003FC 949084E5 STR R9,[R4, #+148] 7328 t->last_log=NULL; \ 00000400 A49084E5 STR R9,[R4, #+164] 7329 7330 // int scr_w=ScreenW(); 7331 // int scr_h=ScreenH(); 7332 // int head_h=HeaderH(); 7333 7334 patch_header(&edchat_hdr); \ 00000404 380086E2 ADD R0,R6,#+56 \ 00000408 ........ _BLF patch_header,??patch_header??rA 7335 patch_input(&edchat_desc); \ 0000040C B891C6E1 STRH R9,[R6, #+24] \ 00000410 8A8100EF SWI +33162 \ 00000414 190080E2 ADD R0,R0,#+25 \ 00000418 BA01C6E1 STRH R0,[R6, #+26] \ 0000041C 888100EF SWI +33160 \ 00000420 010040E2 SUB R0,R0,#+1 \ 00000424 BC01C6E1 STRH R0,[R6, #+28] \ 00000428 898100EF SWI +33161 \ 0000042C 0040A0E1 MOV R4,R0 \ 00000430 8B8100EF SWI +33163 \ 00000434 000044E0 SUB R0,R4,R0 \ 00000438 010040E2 SUB R0,R0,#+1 \ 0000043C BE01C6E1 STRH R0,[R6, #+30] 7336 // edchat_desc.font=ED_FONT_SIZE; 7337 edchat_id=CreateInputTextDialog(&edchat_desc,&edchat_hdr,eq,1,ed_struct); \ 00000440 20002DE9 PUSH {R5} \ 00000444 0130A0E3 MOV R3,#+1 \ 00000448 0820A0E1 MOV R2,R8 \ 0000044C 381086E2 ADD R1,R6,#+56 \ 00000450 0600A0E1 MOV R0,R6 \ 00000454 670100EF SWI +359 \ 00000458 480387E5 STR R0,[R7, #+840] 7338 } \ 0000045C 40D08DE2 ADD SP,SP,#+64 \ 00000460 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CreateEditChat_0: \ 00000464 ........ DC32 edchat_desc \ 00000468 ........ DC32 FIRST_LETTER 7339 7340 //----------------------------------------------------------------------------- 7341 7342 #define EC_MNU_MAX 9 7343 \ In segment CODE, align 4, keep-with-next 7344 void Quote(GUI *data) 7345 { \ Quote: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 7346 int q_n; 7347 EDITCONTROL ec, ec_hdr; 7348 EDITCONTROL ec_ed; 7349 WSHDR *ed_ws; 7350 WSHDR *ws; 7351 7352 EDCHAT_STRUCT *ed_struct; 7353 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 7354 7355 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 7356 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 7357 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 7358 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 7359 7360 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 7361 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 7362 { 7363 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 7364 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote_1 7365 } 7366 else 7367 CutWSTR(ed_ws,0); \ ??Quote_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 7368 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 7369 { 7370 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 7371 } 7372 else 7373 { 7374 wstrcat(ed_ws,ec.pWS); \ ??Quote_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 7375 } 7376 int ed_pos=0; \ ??Quote_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 7377 do 7378 { 7379 ed_pos++; \ ??Quote_4: \ 000000D0 017080E2 ADD R7,R0,#+1 7380 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 7381 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 7382 } 7383 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 7384 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 7385 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 7386 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 7387 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 7388 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 7389 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 7390 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 7391 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 7392 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 0000017C 040094E5 LDR R0,[R4, #+4] \ 00000180 0610A0E1 MOV R1,R6 \ 00000184 810100EF SWI +385 7393 FreeWS(ws); \ 00000188 0600A0E1 MOV R0,R6 \ 0000018C 290100EF SWI +297 7394 GeneralFuncF1(1); \ 00000190 0100A0E3 MOV R0,#+1 \ 00000194 3B0100EF SWI +315 7395 } \ 00000198 84D08DE2 ADD SP,SP,#+132 \ 0000019C F080BDE8 POP {R4-R7,PC} ;; return 7396 \ In segment CODE, align 4, keep-with-next 7397 void Quote2(GUI *data)//цитирование без фокуса на ответ 7398 { \ Quote2: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 7399 int q_n; 7400 EDITCONTROL ec, ec_hdr; 7401 EDITCONTROL ec_ed; 7402 WSHDR *ed_ws; 7403 WSHDR *ws; 7404 7405 EDCHAT_STRUCT *ed_struct; 7406 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 7407 7408 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 7409 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 7410 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 7411 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 7412 7413 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 7414 if(wstrlen(ec_hdr.pWS)) \ 00000060 80009DE5 LDR R0,[SP, #+128] \ 00000064 230100EF SWI +291 \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 0600000A BEQ ??Quote2_0 7415 { 7416 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 7417 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote2_1 7418 } 7419 else 7420 CutWSTR(ed_ws,0); \ ??Quote2_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 7421 if (EDIT_IsMarkModeActive(ed_struct->ed_chatgui)) \ ??Quote2_1: \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C D80100EF SWI +472 \ 000000A0 000050E3 CMP R0,#+0 \ 000000A4 0300000A BEQ ??Quote2_2 7422 { 7423 EDIT_GetMarkedText(ed_struct->ed_chatgui,ed_ws); \ 000000A8 040094E5 LDR R0,[R4, #+4] \ 000000AC 0510A0E1 MOV R1,R5 \ 000000B0 D90100EF SWI +473 \ 000000B4 020000EA B ??Quote2_3 7424 } 7425 else 7426 { 7427 wstrcat(ed_ws,ec.pWS); \ ??Quote2_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 7428 } 7429 int ed_pos=0; \ ??Quote2_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 7430 do 7431 { 7432 ed_pos++; \ ??Quote2_4: \ 000000D0 017080E2 ADD R7,R0,#+1 7433 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 7434 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 7435 } 7436 while((ed_pos=wstrchr(ed_ws,ed_pos,'\r'))!=0xFFFF); \ 000000F8 0D20A0E3 MOV R2,#+13 \ 000000FC 0710A0E1 MOV R1,R7 \ 00000100 0500A0E1 MOV R0,R5 \ 00000104 DC0100EF SWI +476 \ 00000108 060050E1 CMP R0,R6 \ 0000010C EFFFFF1A BNE ??Quote2_4 7437 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 7438 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 7439 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 7440 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 7441 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 7442 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 7443 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 7444 int ii=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000170 040094E5 LDR R0,[R4, #+4] \ 00000174 820100EF SWI +386 7445 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); \ 00000178 081094E5 LDR R1,[R4, #+8] \ 0000017C 0050A0E1 MOV R5,R0 \ 00000180 040094E5 LDR R0,[R4, #+4] \ 00000184 9B0100EF SWI +411 7446 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000188 040094E5 LDR R0,[R4, #+4] \ 0000018C 0610A0E1 MOV R1,R6 \ 00000190 810100EF SWI +385 7447 EDIT_SetFocus(ed_struct->ed_chatgui,ii); \ 00000194 040094E5 LDR R0,[R4, #+4] \ 00000198 0510A0E1 MOV R1,R5 \ 0000019C 9B0100EF SWI +411 7448 FreeWS(ws); \ 000001A0 0600A0E1 MOV R0,R6 \ 000001A4 290100EF SWI +297 7449 GeneralFuncF1(1); \ 000001A8 0100A0E3 MOV R0,#+1 \ 000001AC 3B0100EF SWI +315 7450 } \ 000001B0 84D08DE2 ADD SP,SP,#+132 \ 000001B4 F080BDE8 POP {R4-R7,PC} ;; return 7451 7452 \ In segment CODE, align 4, keep-with-next 7453 void GetShortInfo(GUI *data) 7454 { \ GetShortInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} 7455 EDCHAT_STRUCT *ed_struct; 7456 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 7457 7458 TPKT *p; 7459 CLIST *t; 7460 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,??DataTable329 ;; S_ICONS + 788 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 030050E3 CMP R0,#+3 \ 00000024 1B00001A BNE ??GetShortInfo_0 7461 { 7462 p=malloc(sizeof(PKT)); \ 00000028 0800A0E3 MOV R0,#+8 \ 0000002C 140000EF SWI +20 7463 p->pkt.uin=t->uin; 7464 p->pkt.type=T_REQINFOSHORT; 7465 p->pkt.data_len=0; 7466 AddStringToLog(t, 0x01, "Request info...", I_str,0xFFFFFFFF,1); \ 00000030 ........ LDR R3,??DataTable327 ;; I_str \ 00000034 68209FE5 LDR R2,??GetShortInfo_1 ;; `?` \ 00000038 0060A0E1 MOV R6,R0 \ 0000003C 0C0095E5 LDR R0,[R5, #+12] \ 00000040 0110A0E3 MOV R1,#+1 \ 00000044 000086E5 STR R0,[R6, #+0] \ 00000048 0B00A0E3 MOV R0,#+11 \ 0000004C B400C6E1 STRH R0,[R6, #+4] \ 00000050 0000A0E3 MOV R0,#+0 \ 00000054 B600C6E1 STRH R0,[R6, #+6] \ 00000058 0100A0E3 MOV R0,#+1 \ 0000005C 01002DE9 PUSH {R0} \ 00000060 000060E2 RSB R0,R0,#+0 \ 00000064 01002DE9 PUSH {R0} \ 00000068 0500A0E1 MOV R0,R5 \ 0000006C ........ BL AddStringToLog 7467 AddMsgToChat(ed_struct->ed_chatgui); \ 00000070 040094E5 LDR R0,[R4, #+4] \ 00000074 ........ BL AddMsgToChat 7468 RecountMenu(t,1); \ 00000078 0110A0E3 MOV R1,#+1 \ 0000007C 0500A0E1 MOV R0,R5 \ 00000080 ........ BL RecountMenu 7469 SUBPROC((void *)SendAnswer,0,p); \ 00000084 ........ LDR R0,??DataTable328 ;; SendAnswer \ 00000088 0620A0E1 MOV R2,R6 \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 710100EF SWI +369 \ 00000094 08D08DE2 ADD SP,SP,#+8 7470 } 7471 GeneralFuncF1(1); \ ??GetShortInfo_0: \ 00000098 0100A0E3 MOV R0,#+1 \ 0000009C 3B0100EF SWI +315 7472 } \ 000000A0 7080BDE8 POP {R4-R6,PC} ;; return \ ??GetShortInfo_1: \ 000000A4 ........ DC32 `?` 7473 7474 void AskNickAndAddContact(EDCHAT_STRUCT *); \ In segment CODE, align 4, keep-with-next 7475 void AddCurContact(GUI *data) 7476 { \ AddCurContact: \ 00000000 00402DE9 PUSH {LR} 7477 EDCHAT_STRUCT *ed_struct; 7478 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 7479 7480 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,??DataTable329 ;; S_ICONS + 788 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0000001A BNE ??AddCurContact_0 \ 00000024 ........ _BLF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA 7481 GeneralFuncF1(1); \ ??AddCurContact_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 3B0100EF SWI +315 7482 } \ 00000030 0080BDE8 POP {PC} ;; return 7483 \ In segment CODE, align 4, keep-with-next 7484 void SendAuthReq(GUI *data) 7485 { \ SendAuthReq: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 14D04DE2 SUB SP,SP,#+20 7486 EDCHAT_STRUCT *ed_struct; 7487 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 7488 7489 TPKT *p; 7490 CLIST *t; 7491 int l; 7492 const char s[]=LG_AUTHREQ; \ 0000000C BC109FE5 LDR R1,??SendAuthReq_0 ;; `?ed_contact)&&(connect_state==3)) \ 00000020 005094E5 LDR R5,[R4, #+0] \ 00000024 000055E3 CMP R5,#+0 \ 00000028 2400000A BEQ ??SendAuthReq_1 \ 0000002C ........ LDR R0,??DataTable329 ;; S_ICONS + 788 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthReq_1 7494 { 7495 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 7496 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 7497 p->pkt.type=T_AUTHREQ; 7498 p->pkt.data_len=l; 7499 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 7500 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 ........ LDR R3,??DataTable327 ;; I_str \ 00000078 0100A0E3 MOV R0,#+1 \ 0000007C 01002DE9 PUSH {R0} \ 00000080 082087E2 ADD R2,R7,#+8 \ 00000084 0110A0E3 MOV R1,#+1 \ 00000088 000060E2 RSB R0,R0,#+0 \ 0000008C 01002DE9 PUSH {R0} \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 ........ BL AddStringToLog 7501 AddMsgToChat(ed_struct->ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 7502 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 ........ BL RecountMenu 7503 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable328 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 7504 } 7505 GeneralFuncF1(1); \ ??SendAuthReq_1: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 7506 } \ 000000C8 14D08DE2 ADD SP,SP,#+20 \ 000000CC F080BDE8 POP {R4-R7,PC} ;; return \ ??SendAuthReq_0: \ 000000D0 ........ DC32 `?ed_contact)&&(connect_state==3)) \ 00000020 005094E5 LDR R5,[R4, #+0] \ 00000024 000055E3 CMP R5,#+0 \ 00000028 2400000A BEQ ??SendAuthGrant_1 \ 0000002C ........ LDR R0,??DataTable329 ;; S_ICONS + 788 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthGrant_1 7518 { 7519 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 7520 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 7521 p->pkt.type=T_AUTHGRANT; 7522 p->pkt.data_len=l; 7523 strcpy(p->data,s); \ 00000058 0D10A0E1 MOV R1,SP \ 0000005C 000087E5 STR R0,[R7, #+0] \ 00000060 0E00A0E3 MOV R0,#+14 \ 00000064 B400C7E1 STRH R0,[R7, #+4] \ 00000068 B660C7E1 STRH R6,[R7, #+6] \ 0000006C 080087E2 ADD R0,R7,#+8 \ 00000070 1A0000EF SWI +26 7524 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 ........ LDR R3,??DataTable330 ;; I_str \ 00000078 0100A0E3 MOV R0,#+1 \ 0000007C 01002DE9 PUSH {R0} \ 00000080 082087E2 ADD R2,R7,#+8 \ 00000084 0110A0E3 MOV R1,#+1 \ 00000088 000060E2 RSB R0,R0,#+0 \ 0000008C 01002DE9 PUSH {R0} \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 ........ BL AddStringToLog 7525 AddMsgToChat(ed_struct->ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 7526 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 ........ BL RecountMenu 7527 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable331 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 7528 } 7529 GeneralFuncF1(1); \ ??SendAuthGrant_1: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 7530 } \ 000000C8 FF80BDE8 POP {R0-R7,PC} ;; return \ ??SendAuthGrant_0: \ 000000CC ........ DC32 `?ed_contact)) \ 00000014 005095E5 LDR R5,[R5, #+0] \ 00000018 0040A0E1 MOV R4,R0 \ 0000001C 000055E3 CMP R5,#+0 \ 00000020 2600000A BEQ ??OpenLogfile_0 7540 { 7541 if(HISTORY_SAVE_TYPE) \ 00000024 ........ LDR R1,??DataTable332 ;; UIN \ 00000028 A4E09FE5 LDR LR,??OpenLogfile_1 ;; HISTORY_SAVE_TYPE \ 0000002C 003091E5 LDR R3,[R1, #+0] \ 00000030 A0109FE5 LDR R1,??OpenLogfile_1+0x4 ;; HISTORY_TYPE \ 00000034 00E09EE5 LDR LR,[LR, #+0] \ 00000038 0C0095E5 LDR R0,[R5, #+12] \ 0000003C 00C091E5 LDR R12,[R1, #+0] \ 00000040 94109FE5 LDR R1,??OpenLogfile_1+0x8 ;; `?` \ 00000044 94209FE5 LDR R2,??OpenLogfile_1+0xC ;; HIST_PATH \ 00000048 00005EE3 CMP LR,#+0 \ 0000004C 0E00000A BEQ ??OpenLogfile_2 7542 { 7543 if(HISTORY_TYPE) \ 00000050 01002DE9 PUSH {R0} \ 00000054 00005CE3 CMP R12,#+0 \ 00000058 0500000A BEQ ??OpenLogfile_3 7544 wsprintf(ws,"%s\\%u\\%s(%d).txt", HIST_PATH, UIN, t->name, t->uin); \ 0000005C 140085E2 ADD R0,R5,#+20 \ 00000060 01002DE9 PUSH {R0} \ 00000064 0400A0E1 MOV R0,R4 \ 00000068 240100EF SWI +292 \ 0000006C 08D08DE2 ADD SP,SP,#+8 \ 00000070 0E0000EA B ??OpenLogfile_4 7545 else 7546 wsprintf(ws,"%s\\%s(%d).txt", HIST_PATH, t->name, t->uin); \ ??OpenLogfile_3: \ 00000074 143085E2 ADD R3,R5,#+20 \ 00000078 141081E2 ADD R1,R1,#+20 \ ??OpenLogfile_5: \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 240100EF SWI +292 \ 00000084 04D08DE2 ADD SP,SP,#+4 \ 00000088 080000EA B ??OpenLogfile_4 7547 } 7548 else 7549 { 7550 if(HISTORY_TYPE) \ ??OpenLogfile_2: \ 0000008C 00005CE3 CMP R12,#+0 \ 00000090 0200000A BEQ ??OpenLogfile_6 7551 wsprintf(ws,"%s\\%u\\%u.txt", HIST_PATH, UIN, t->uin); \ 00000094 01002DE9 PUSH {R0} \ 00000098 241081E2 ADD R1,R1,#+36 \ 0000009C F6FFFFEA B ??OpenLogfile_5 7552 else 7553 wsprintf(ws,"%s\\%u.txt", HIST_PATH, t->uin); \ ??OpenLogfile_6: \ 000000A0 0030A0E1 MOV R3,R0 \ 000000A4 341081E2 ADD R1,R1,#+52 \ 000000A8 0400A0E1 MOV R0,R4 \ 000000AC 240100EF SWI +292 7554 } 7555 ExecuteFile(ws,NULL,NULL); \ ??OpenLogfile_4: \ 000000B0 0020A0E3 MOV R2,#+0 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 0400A0E1 MOV R0,R4 \ 000000BC 940000EF SWI +148 7556 } 7557 FreeWS(ws); \ ??OpenLogfile_0: \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 290100EF SWI +297 7558 GeneralFuncF1(1); \ 000000C8 0100A0E3 MOV R0,#+1 \ 000000CC 3B0100EF SWI +315 7559 } \ 000000D0 3080BDE8 POP {R4,R5,PC} ;; return \ ??OpenLogfile_1: \ 000000D4 ........ DC32 HISTORY_SAVE_TYPE \ 000000D8 ........ DC32 HISTORY_TYPE \ 000000DC ........ DC32 `?` \ 000000E0 ........ DC32 HIST_PATH 7560 \ In segment CODE, align 4, keep-with-next 7561 void ClearLog(GUI *data/*,void *dummy*/) 7562 { \ ClearLog: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 7563 EDITCONTROL ec; 7564 EDCHAT_STRUCT *ed_struct; 7565 WSHDR *ws; 7566 CLIST *t; 7567 7568 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 7569 7570 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 7571 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 7572 { 7573 ws=AllocWS(1); \ 00000030 0100A0E3 MOV R0,#+1 \ 00000034 250100EF SWI +293 \ 00000038 0050A0E1 MOV R5,R0 7574 CutWSTR(ws,0); \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 260100EF SWI +294 7575 7576 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 7577 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000050 040094E5 LDR R0,[R4, #+4] \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 810100EF SWI +385 7578 7579 FreeWS(ws); \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 290100EF SWI +297 7580 GeneralFuncF1(1); \ 00000064 1D0000EA B ??ClearLog_1 7581 } 7582 else 7583 { 7584 7585 if ((t=ed_struct->ed_contact)) \ ??ClearLog_0: \ 00000068 005094E5 LDR R5,[R4, #+0] \ 0000006C 000055E3 CMP R5,#+0 \ 00000070 1C00000A BEQ ??ClearLog_2 7586 { 7587 if (t->log) \ 00000074 9C0095E5 LDR R0,[R5, #+156] \ 00000078 0060A0E3 MOV R6,#+0 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 1200000A BEQ ??ClearLog_3 7588 { 7589 FreeLOGQ(&t->log); \ 00000084 9C0085E2 ADD R0,R5,#+156 \ 00000088 ........ BL FreeLOGQ 7590 t->msg_count=0; \ 0000008C AC6085E5 STR R6,[R5, #+172] 7591 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 7592 { 7593 while(ed_struct->ed_answer!=2) 7594 { 7595 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??ClearLog_5: \ 000000AC 040094E5 LDR R0,[R4, #+4] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 D10100EF SWI +465 7596 ed_struct->ed_answer--; \ 000000B8 080094E5 LDR R0,[R4, #+8] \ 000000BC 010040E2 SUB R0,R0,#+1 \ 000000C0 080084E5 STR R0,[R4, #+8] 7597 } \ ??ClearLog_4: \ 000000C4 080094E5 LDR R0,[R4, #+8] \ 000000C8 020050E3 CMP R0,#+2 \ 000000CC F6FFFF1A BNE ??ClearLog_5 7598 } 7599 } 7600 t->isactive=0; //by BoBa 18.06.07 \ ??ClearLog_3: \ 000000D0 A86085E5 STR R6,[R5, #+168] 7601 RecountMenu(t,1); \ 000000D4 0110A0E3 MOV R1,#+1 \ 000000D8 0500A0E1 MOV R0,R5 \ 000000DC ........ BL RecountMenu 7602 GeneralFuncF1(1); \ ??ClearLog_1: \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 3B0100EF SWI +315 7603 } 7604 } 7605 } \ ??ClearLog_2: \ 000000E8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000EC 7080BDE8 POP {R4-R6,PC} ;; return 7606 \ In segment CODE, align 4, keep-with-next 7607 void ecmenu_ghook(void *data, int cmd) 7608 { \ ecmenu_ghook: \ 00000000 00402DE9 PUSH {LR} 7609 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 7610 { 7611 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 7612 } 7613 } \ 00000010 0080BDE8 POP {PC} ;; return 7614 \ In segment DATA_C, align 4, align-sorted 7615 static const MENUITEM_DESC ecmenu_ITEMS[EC_MNU_MAX]= \ ecmenu_ITEMS: \ 00000000 00000000.... DC32 0H, `?` \ MAINCSM: \ 00000074 DS8 72 \ 000000BC REQUIRE `?` \ gipc: \ 000000BC DS8 12 \ 000000C8 REQUIRE `?` \ tmr_gipc: \ 000000C8 DS8 12 \ 000000D4 REQUIRE `?` \ def_set: \ 000000D4 DS8 388 \ 00000258 REQUIRE `?` \ main_d: \ 00000258 DS8 4 \ 0000025C REQUIRE `?` \ align: \ 0000025C DS8 4 \ 00000260 REQUIRE `?` \ canvasdata: \ 00000260 DS8 4 \ 00000264 REQUIRE `?` \ paused_height: \ 00000264 DS8 4 \ 00000268 REQUIRE `?` \ wsBuffer: \ 00000268 DS8 4 \ 0000026C REQUIRE `?` \ uins: \ 0000026C DS8 4 \ 00000270 REQUIRE `?` \ saver_on: \ 00000270 DS8 4 \ 00000274 REQUIRE `?` \ Is_PING_On: \ 00000274 DS8 4 \ 00000278 REQUIRE `?` \ Is_SLI_On: \ 00000278 DS8 4 \ 0000027C REQUIRE `?` \ Is_SMARTCPU_On: \ 0000027C DS8 4 \ 00000280 REQUIRE `?` \ Is_INC_On: \ 00000280 DS8 4 \ 00000284 REQUIRE `?` \ Is_ILU_On: \ 00000284 DS8 4 \ 00000288 REQUIRE `?` \ Is_Double_Vibra_On: \ 00000288 DS8 4 \ 0000028C REQUIRE `?` \ total_unread2: \ 0000028C DS8 4 \ 00000290 REQUIRE `?` \ maincsm_id: \ 00000290 DS8 4 \ 00000294 REQUIRE `?` \ maingui_id: \ 00000294 DS8 4 \ 00000298 REQUIRE `?` \ SENDMSGCOUNT: \ 00000298 DS8 4 \ 0000029C REQUIRE `?` \ IsActiveUp: \ 0000029C DS8 4 \ 000002A0 REQUIRE `?` \ Is_Vibra_Enabled: \ 000002A0 DS8 4 \ 000002A4 REQUIRE `?` \ Is_Id3tag_Enabled: \ 000002A4 DS8 4 \ 000002A8 REQUIRE `?` \ CurrentStatus: \ 000002A8 DS8 4 \ 000002AC REQUIRE `?` \ CurrentXStatus: \ 000002AC DS8 4 \ 000002B0 REQUIRE `?` \ ews: \ 000002B0 DS8 4 \ 000002B4 REQUIRE `?` \ scrsTime: \ 000002B4 DS8 4 \ 000002B8 REQUIRE `?` \ msg_away_timer: \ 000002B8 DS8 4 \ 000002BC REQUIRE `?` \ away_m: \ 000002BC DS8 4 \ 000002C0 REQUIRE `?` \ status_rem: \ 000002C0 DS8 4 \ 000002C4 REQUIRE `?` \ change_back_status: \ 000002C4 DS8 4 \ 000002C8 REQUIRE `?` \ Show_XTX: \ 000002C8 DS8 4 \ 000002CC REQUIRE `?` \ Is_UPTIME_On: \ 000002CC DS8 4 \ 000002D0 REQUIRE `?` \ uptimeHour: \ 000002D0 DS8 4 \ 000002D4 REQUIRE `?` \ uptimeMin: \ 000002D4 DS8 4 \ 000002D8 REQUIRE `?` \ uptimeSec: \ 000002D8 DS8 4 \ 000002DC REQUIRE `?` \ tracktimer: \ 000002DC DS8 4 \ 000002E0 REQUIRE `?` \ input_awaymsg_id: \ 000002E0 DS8 4 \ 000002E4 REQUIRE `?` \ silenthide: \ 000002E4 DS8 4 \ 000002E8 REQUIRE `?` \ disautorecconect: \ 000002E8 DS8 4 \ 000002EC REQUIRE `?` \ Is_Sounds_Enabled: \ 000002EC DS8 4 \ 000002F0 REQUIRE `?` \ Is_Show_Offline: \ 000002F0 DS8 4 \ 000002F4 REQUIRE `?` \ Is_Show_Groups: \ 000002F4 DS8 4 \ 000002F8 REQUIRE `?` \ CurrentPrivateStatus: \ 000002F8 DS8 4 \ 000002FC REQUIRE `?` \ vibra_count: \ 000002FC DS8 4 \ 00000300 REQUIRE `?` \ templates_chars: \ 00000300 DS8 4 \ 00000304 REQUIRE `?` \ templates_lines: \ 00000304 DS8 4 \ 00000308 REQUIRE `?` \ bot_chars: \ 00000308 DS8 4 \ 0000030C REQUIRE `?` \ bot_lines: \ 0000030C DS8 4 \ 00000310 REQUIRE `?` \ RXstate: \ 00000310 DS8 4 \ 00000314 REQUIRE `?` \ connect_state: \ 00000314 DS8 4 \ 00000318 REQUIRE `?` \ sock: \ 00000318 DS8 4 \ 0000031C REQUIRE `?` \ TOTALRECEIVED: \ 0000031C DS8 4 \ 00000320 REQUIRE `?` \ TOTALSENDED: \ 00000320 DS8 4 \ 00000324 REQUIRE `?` \ ALLTOTALRECEIVED: \ 00000324 DS8 4 \ 00000328 REQUIRE `?` \ ALLTOTALSENDED: \ 00000328 DS8 4 \ 0000032C REQUIRE `?` \ sendq_l: \ 0000032C DS8 4 \ 00000330 REQUIRE `?` \ sendq_p: \ 00000330 DS8 4 \ 00000334 REQUIRE `?` \ is_gprs_online: \ 00000334 DS8 4 \ 00000338 REQUIRE `?` \ total_unread: \ 00000338 DS8 4 \ 0000033C REQUIRE `?` \ cltop: \ 0000033C DS8 4 \ 00000340 REQUIRE `?` \ GROUP_CACHE: \ 00000340 DS8 4 \ 00000344 REQUIRE `?` \ contactlist_menu_id: \ 00000344 DS8 4 \ 00000348 REQUIRE `?` \ edchat_id: \ 00000348 DS8 4 \ 0000034C REQUIRE `?` \ 0000034C DS8 4 \ 00000350 REQUIRE `?` \ ICON_HD: \ 00000350 DS8 4 \ 00000354 REQUIRE `?` \ tenseconds_to_ping: \ 00000354 DS8 4 \ 00000358 REQUIRE `?` \ on_off_timer: \ 00000358 DS8 4 \ 0000035C REQUIRE `?` \ kopa_online: \ 0000035C DS8 4 \ 00000360 REQUIRE `?` \ kopa_kontaktu: \ 00000360 DS8 4 \ 00000364 REQUIRE `?` \ gui_methods2: \ 00000364 DS8 96 \ 000003C4 REQUIRE `?` \ old_redraw: \ 000003C4 DS8 4 \ 000003C8 REQUIRE `?` \ 000003C8 DS8 4 \ 000003CC REQUIRE `?` \ 000003CC DS8 4 \ 000003D0 REQUIRE `?` \ DNR_ID: \ 000003D0 DS8 4 \ 000003D4 REQUIRE `?` \ DNR_TRIES: \ 000003D4 DS8 4 \ 000003D8 REQUIRE `?` \ host_counter: \ 000003D8 DS8 4 \ 000003DC REQUIRE `?` \ ping_time: \ 000003DC DS8 4 \ 000003E0 REQUIRE `?` \ main_msg_timer2: \ 000003E0 DS8 4 \ 000003E4 REQUIRE `?` \ NEW_MSG: \ 000003E4 DS8 4 \ 000003E8 REQUIRE `?` \ time_to_stop_t9: \ 000003E8 DS8 4 \ 000003EC REQUIRE `?` \ comanda: \ 000003EC DS8 4 \ 000003F0 REQUIRE `?` \ INC_show: \ 000003F0 DS8 4 \ 000003F4 REQUIRE `?` \ INC_show2: \ 000003F4 DS8 4 \ 000003F8 REQUIRE `?` \ itemFromDisp: \ 000003F8 DS8 4 \ 000003FC REQUIRE `?` \ totalItems: \ 000003FC DS8 4 \ 00000400 REQUIRE `?` \ curpos: \ 00000400 DS8 4 \ 00000404 REQUIRE `?` \ curpage: \ 00000404 DS8 4 \ 00000408 REQUIRE `?` \ USE_ADD_UIN: \ 00000408 DS8 4 \ 0000040C REQUIRE `?` \ old_ed_redraw: \ 0000040C DS8 4 \ 00000410 REQUIRE `?` \ 00000410 DS8 64 \ 00000450 REQUIRE `?` \ elf_path: \ 00000450 DS8 256 \ 00000550 REQUIRE `?` \ ContactT9Key: \ 00000550 DS8 32 \ 00000570 REQUIRE `?` \ talk_sound: \ 00000570 DS8 128 \ 000005F0 REQUIRE `?` \ unread_msg_info: \ 000005F0 DS8 64 \ 00000630 REQUIRE `?` \ last_msg_buffer: \ 00000630 DS8 4096 \ 00001630 REQUIRE `?` \ ping_tmr: \ 00001630 DS8 16 \ 00001640 REQUIRE `?` \ PINGO: \ 00001640 DS8 256 \ 00001740 REQUIRE `?` \ scrsTmr: \ 00001740 DS8 16 \ 00001750 REQUIRE `?` \ away_msg: \ 00001750 DS8 264 \ 00001858 REQUIRE `?` \ away_msg_time: \ 00001858 DS8 64 \ 00001898 REQUIRE `?` \ away_msg_time_dace: \ 00001898 DS8 16 \ 000018A8 REQUIRE `?` \ tim_zone: \ 000018A8 DS8 16 \ 000018B8 REQUIRE `?` \ away_tmr: \ 000018B8 DS8 16 \ 000018C8 REQUIRE `?` \ autoChangeStatus: \ 000018C8 DS8 16 \ 000018D8 REQUIRE `?` \ remind_tmr: \ 000018D8 DS8 16 \ 000018E8 REQUIRE `?` \ uptime_tmr: \ 000018E8 DS8 16 \ 000018F8 REQUIRE `?` \ tracktmr: \ 000018F8 DS8 16 \ 00001908 REQUIRE `?` \ onlineTime: \ 00001908 DS8 128 \ 00001988 REQUIRE `?` \ sli_tmr: \ 00001988 DS8 16 \ 00001998 REQUIRE `?` \ logmsg: \ 00001998 DS8 256 \ 00001A98 REQUIRE `?` \ tmr_illumination: \ 00001A98 DS8 16 \ 00001AA8 REQUIRE `?` \ tmr_vibra: \ 00001AA8 DS8 16 \ 00001AB8 REQUIRE `?` \ reconnect_tmr: \ 00001AB8 DS8 16 \ 00001AC8 REQUIRE `?` \ tmr_active: \ 00001AC8 DS8 16 \ 00001AD8 REQUIRE `?` \ clm_hdr_text: \ 00001AD8 DS8 64 \ 00001B18 REQUIRE `?` \ clmenu_sk_r: \ 00001B18 DS8 16 \ 00001B28 REQUIRE `?` \ on_off_buf: \ 00001B28 DS8 128 \ 00001BA8 REQUIRE `?` \ status: \ 00001BA8 DS8 64 \ 00001BE8 REQUIRE `?` \ hostbuf2: \ 00001BE8 DS8 128 \ 00001C68 REQUIRE `?` \ hostname: \ 00001C68 DS8 128 \ 00001CE8 REQUIRE `?` \ I_UIN: \ 00001CE8 DS8 12 \ 00001CF4 REQUIRE `?` \ a_txt: \ 00001CF4 DS8 48 \ 00001D24 REQUIRE `?` \ s_txt: \ 00001D24 DS8 48 \ 00001D54 REQUIRE `?` \ d_txt: \ 00001D54 DS8 48 \ 00001D84 REQUIRE `?` \ f_txt: \ 00001D84 DS8 48 \ 00001DB4 REQUIRE `?` \ g_txt: \ 00001DB4 DS8 48 \ 00001DE4 REQUIRE `?` \ develop: \ 00001DE4 DS8 16 \ 00001DF4 REQUIRE `?` \ requests1: \ 00001DF4 DS8 24 \ 00001E0C REQUIRE `?` \ requests2: \ 00001E0C DS8 20 \ 00001E20 REQUIRE `?` \ requests3: \ 00001E20 DS8 24 \ 00001E38 REQUIRE `?` \ requests4: \ 00001E38 DS8 20 \ 00001E4C REQUIRE `?` \ mod_info: \ 00001E4C DS8 264 \ 00001F54 REQUIRE `?` \ show_nick: \ 00001F54 DS8 32 \ 00001F74 REQUIRE `?` \ onContact: \ 00001F74 DS8 64 \ 00001FB4 REQUIRE `?` \ incs2: \ 00001FB4 DS8 16 \ 00001FC4 REQUIRE `?` \ tm22: \ 00001FC4 DS8 16 \ 00001FD4 REQUIRE `?` \ clrWhite: \ 00001FD4 DS8 4 \ 00001FD8 REQUIRE `?` 7630 { 7631 Quote, 7632 Quote2, 7633 AddSmile, 7634 GetShortInfo, 7635 AddCurContact, 7636 SendAuthReq, 7637 SendAuthGrant, 7638 OpenLogfile, 7639 ClearLog, 7640 }; 7641 7642 char ecm_contactname[64]; \ ecm_contactname: \ 00001FD8 DS8 64 \ 00002018 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ ??sk: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ input_awaymsg_sk: \ 00000000 DS8 24 \ 00000018 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ input_awaymsg_skt: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ prozr: \ 00000000 DS8 4 \ 00000004 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ icon_array: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ 00000008 DS8 4 \ 0000000C REQUIRE `?` \ 0000000C DS8 32 \ 0000002C REQUIRE `?` \ cont_hdr: \ 0000002C DS8 64 \ 0000006C REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ CmdMenuHeader: \ 00000000 DS8 20 \ 00000014 REQUIRE `?` \ cmd_chars: \ 00000014 DS8 4 \ 00000018 REQUIRE `?` \ cmd_lines: \ 00000018 DS8 4 \ 0000001C REQUIRE `?` \ NumOfItems: \ 0000001C DS8 4 \ 00000020 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ requests6: \ 00000000 DS8 24 \ 00000018 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ clrBlack: \ 00000000 DS8 4 \ 00000004 REQUIRE `?` 7643 \ In segment DATA_C, align 4, align-sorted 7644 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, 9 \ ....09000000 7645 7646 static const MENU_DESC ecmenu_STRUCT= 7647 { 7648 8,NULL,ecmenu_ghook,NULL, 7649 menusoftkeys, 7650 &menu_skt, 7651 0, 7652 NULL, 7653 ecmenu_ITEMS, 7654 ecmenu_HNDLS, 7655 EC_MNU_MAX 7656 }; 7657 \ In segment CODE, align 4, keep-with-next 7658 void ec_menu(EDCHAT_STRUCT *ed_struct) 7659 { \ ec_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 28D04DE2 SUB SP,SP,#+40 \ 00000008 0040A0E1 MOV R4,R0 7660 CLIST *t; 7661 int to_remove[EC_MNU_MAX+1]; 7662 int remove=0; 7663 if ((t=ed_struct->ed_contact)) \ 0000000C 001094E5 LDR R1,[R4, #+0] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 4800000A BEQ ??ec_menu_0 7664 { 7665 if (t->name) \ 00000018 ........ LDR R5,??DataTable333 ;; S_ICONS \ 0000001C D800A0E3 MOV R0,#+216 \ 00000020 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000024 050080E0 ADD R0,R0,R5 \ 00000028 142091E2 ADDS R2,R1,#+20 \ 0000002C 0300000A BEQ ??ec_menu_1 7666 { 7667 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 7668 } 7669 else 7670 { 7671 sprintf(ecm_contactname,"%u",t->uin); \ ??ec_menu_1: \ 00000040 0C2091E5 LDR R2,[R1, #+12] \ 00000044 3E1F8FE2 ADR R1,??ec_menu_3 ;; "%u" \ 00000048 160000EF SWI +22 7672 } 7673 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ec_menu_2: \ 0000004C 040094E5 LDR R0,[R4, #+4] \ 00000050 820100EF SWI +386 \ 00000054 082094E5 LDR R2,[R4, #+8] \ 00000058 0210A0E3 MOV R1,#+2 \ 0000005C 020050E1 CMP R0,R2 \ 00000060 0500001A BNE ??ec_menu_4 7674 { 7675 to_remove[++remove]=0; \ 00000064 0020A0E3 MOV R2,#+0 \ 00000068 04208DE5 STR R2,[SP, #+4] 7676 to_remove[++remove]=1; \ 0000006C 0260A0E3 MOV R6,#+2 \ 00000070 0120A0E3 MOV R2,#+1 \ 00000074 08208DE5 STR R2,[SP, #+8] \ 00000078 010000EA B ??ec_menu_5 7677 } 7678 else 7679 { 7680 // to_remove[++remove]=1; 7681 to_remove[++remove]=2; \ ??ec_menu_4: \ 0000007C 0160A0E3 MOV R6,#+1 \ 00000080 04108DE5 STR R1,[SP, #+4] 7682 } 7683 7684 if (ed_struct->ed_answer<=2) \ ??ec_menu_5: \ 00000084 080094E5 LDR R0,[R4, #+8] \ 00000088 030050E3 CMP R0,#+3 \ 0000008C 030000AA BGE ??ec_menu_6 7685 to_remove[++remove]=7; \ 00000090 016086E2 ADD R6,R6,#+1 \ 00000094 0D00A0E1 MOV R0,SP \ 00000098 0720A0E3 MOV R2,#+7 \ 0000009C 062180E7 STR R2,[R0, +R6, LSL #+2] 7686 7687 if (!ed_struct->ed_contact || connect_state!=3) \ ??ec_menu_6: \ 000000A0 000094E5 LDR R0,[R4, #+0] \ 000000A4 000050E3 CMP R0,#+0 \ 000000A8 0200000A BEQ ??ec_menu_7 \ 000000AC 140395E5 LDR R0,[R5, #+788] \ 000000B0 030050E3 CMP R0,#+3 \ 000000B4 1000000A BEQ ??ec_menu_8 7688 { 7689 to_remove[++remove]=2; \ ??ec_menu_7: \ 000000B8 010086E2 ADD R0,R6,#+1 \ 000000BC 0D20A0E1 MOV R2,SP \ 000000C0 001182E7 STR R1,[R2, +R0, LSL #+2] 7690 to_remove[++remove]=3; \ 000000C4 010080E2 ADD R0,R0,#+1 \ 000000C8 0D10A0E1 MOV R1,SP \ 000000CC 0320A0E3 MOV R2,#+3 \ 000000D0 002181E7 STR R2,[R1, +R0, LSL #+2] 7691 to_remove[++remove]=4; \ 000000D4 010080E2 ADD R0,R0,#+1 \ 000000D8 0420A0E3 MOV R2,#+4 \ 000000DC 002181E7 STR R2,[R1, +R0, LSL #+2] 7692 to_remove[++remove]=5; \ 000000E0 010080E2 ADD R0,R0,#+1 \ 000000E4 0520A0E3 MOV R2,#+5 \ 000000E8 002181E7 STR R2,[R1, +R0, LSL #+2] 7693 to_remove[++remove]=6; \ 000000EC 016080E2 ADD R6,R0,#+1 \ 000000F0 0D00A0E1 MOV R0,SP \ 000000F4 0610A0E3 MOV R1,#+6 \ 000000F8 061180E7 STR R1,[R0, +R6, LSL #+2] 7694 } 7695 7696 patch_header(&ecmenu_HDR); \ ??ec_menu_8: \ 000000FC 44509FE5 LDR R5,??ec_menu_3+0x4 ;; ecmenu_HDR \ 00000100 0500A0E1 MOV R0,R5 \ 00000104 ........ _BLF patch_header,??patch_header??rA 7697 to_remove[0]=remove; \ 00000108 00608DE5 STR R6,[SP, #+0] 7698 CreateMenu(0,0,&ecmenu_STRUCT,&ecmenu_HDR,0,EC_MNU_MAX,ed_struct,to_remove); \ 0000010C 0D00A0E1 MOV R0,SP \ 00000110 01002DE9 PUSH {R0} \ 00000114 10002DE9 PUSH {R4} \ 00000118 0530A0E1 MOV R3,R5 \ 0000011C 0900A0E3 MOV R0,#+9 \ 00000120 01002DE9 PUSH {R0} \ 00000124 142085E2 ADD R2,R5,#+20 \ 00000128 0010A0E3 MOV R1,#+0 \ 0000012C 0000A0E3 MOV R0,#+0 \ 00000130 01002DE9 PUSH {R0} \ 00000134 520100EF SWI +338 \ 00000138 10D08DE2 ADD SP,SP,#+16 7699 } 7700 } \ ??ec_menu_0: \ 0000013C 28D08DE2 ADD SP,SP,#+40 ;; stack cleaning \ 00000140 7080BDE8 POP {R4-R6,PC} ;; return \ ??ec_menu_3: \ 00000144 25750000 DC8 "%u",+0 \ 00000148 ........ DC32 ecmenu_HDR 7701 7702 \ In segment CODE, align 4, keep-with-next 7703 void AskNickAndAddContact(EDCHAT_STRUCT *ed_struct) 7704 { 7705 CreateAddContactGrpDialog(ed_struct->ed_contact); \ AskNickAndAddContact: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 ........ _BF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA ;; tailcall 7706 } 7707 \ In segment CODE, align 4, keep-with-next 7708 void AddSmile(GUI *data) 7709 { \ AddSmile: \ 00000000 00402DE9 PUSH {LR} 7710 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 7711 CreateSmileSelectGUI(ed_struct); \ 00000008 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 7712 GeneralFuncF1(1); \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0100EF SWI +315 7713 } \ 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 \ ??DataTable7: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable9: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable15: \ 00000000 ........ DC32 Remind_Timer2 \ In segment CODE, align 4, keep-with-next \ ??DataTable18: \ 00000000 ........ DC32 GetTags \ In segment CODE, align 4, keep-with-next \ ??DataTable23: \ 00000000 ........ DC32 showAwayIdle \ In segment CODE, align 4, keep-with-next \ ??DataTable24: \ 00000000 ........ DC32 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable25: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable28: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable29: \ 00000000 ........ DC32 awayMsg \ In segment CODE, align 4, keep-with-next \ ??DataTable31: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable33: \ 00000000 ........ DC32 ICON_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable34: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable39: \ 00000000 ........ DC32 def_setting \ In segment CODE, align 4, keep-with-next \ ??DataTable40: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable42: \ 00000000 ........ DC32 ind_set_xstatus \ In segment CODE, align 4, keep-with-next \ ??DataTable48: \ 00000000 ........ DC32 vibraPower \ In segment CODE, align 4, keep-with-next \ ??DataTable51: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable59: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable60: \ 00000000 ........ DC32 S_ICONS + 828 \ In segment CODE, align 4, keep-with-next \ ??DataTable61: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable62: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable63: \ 00000000 ........ DC32 ICON_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable64: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable72: \ 00000000 ........ DC32 TIME_OR_MSG \ In segment CODE, align 4, keep-with-next \ ??DataTable73: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable81: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable83: \ 00000000 ........ DC32 icon_array + 8 \ In segment CODE, align 4, keep-with-next \ ??DataTable86: \ 00000000 ........ DC32 icon_array \ In segment CODE, align 4, keep-with-next \ ??DataTable87: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable88: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable89: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable90: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable91: \ 00000000 ........ DC32 suc_config_name \ In segment CODE, align 4, keep-with-next \ ??DataTable92: \ 00000000 ........ DC32 suc_config_name_mod \ In segment CODE, align 4, keep-with-next \ ??DataTable93: \ 00000000 ........ DC32 janis \ In segment CODE, align 4, keep-with-next \ ??DataTable94: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable96: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable98: \ 00000000 ........ DC32 S_ICONS + 828 \ In segment CODE, align 4, keep-with-next \ ??DataTable100: \ 00000000 ........ DC32 isLogStatusChange \ In segment CODE, align 4, keep-with-next \ ??DataTable101: \ 00000000 ........ DC32 total_xstatuses \ In segment CODE, align 4, keep-with-next \ ??DataTable102: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable104: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable105: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable106: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable109: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable112: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable113: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable115: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable116: \ 00000000 ........ DC32 ignor_list \ In segment CODE, align 4, keep-with-next \ ??DataTable117: \ 00000000 ........ DC32 extended_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable118: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable119: \ 00000000 ........ DC32 janis \ In segment CODE, align 4, keep-with-next \ ??DataTable120: \ 00000000 ........ DC32 main_count \ In segment CODE, align 4, keep-with-next \ ??DataTable122: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable123: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable125: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable126: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable127: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable137: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable138: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable139: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable141: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable142: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable143: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable144: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable145: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable146: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable147: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable148: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable154: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable157: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable159: \ 00000000 ........ DC32 CmdMenuHeader \ In segment CODE, align 4, keep-with-next \ ??DataTable160: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable161: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable163: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable166: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable167: \ 00000000 ........ DC32 main_count \ In segment CODE, align 4, keep-with-next \ ??DataTable168: \ 00000000 ........ DC32 main2_count \ In segment CODE, align 4, keep-with-next \ ??DataTable169: \ 00000000 ........ DC32 ignor_list \ In segment CODE, align 4, keep-with-next \ ??DataTable170: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable171: \ 00000000 ........ DC32 awayMsg \ In segment CODE, align 4, keep-with-next \ ??DataTable172: \ 00000000 6678231A DC32 0x1a237866 \ In segment CODE, align 4, keep-with-next \ ??DataTable176: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable177: \ 00000000 ........ DC32 PopupFont \ In segment CODE, align 4, keep-with-next \ ??DataTable178: \ 00000000 ........ DC32 NumStatusToIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable179: \ 00000000 ........ DC32 PopupBGCl \ In segment CODE, align 4, keep-with-next \ ??DataTable184: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable185: \ 00000000 ........ DC32 isLogStatusChange \ In segment CODE, align 4, keep-with-next \ ??DataTable186: \ 00000000 ........ DC32 extended_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable187: \ 00000000 ........ DC32 TIME_OR_MSG \ In segment CODE, align 4, keep-with-next \ ??DataTable188: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable189: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable190: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable193: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable194: \ 00000000 ........ DC32 main_count \ In segment CODE, align 4, keep-with-next \ ??DataTable199: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable201: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable205: \ 00000000 ........ DC32 addonuin \ In segment CODE, align 4, keep-with-next \ ??DataTable209: \ 00000000 ........ DC32 PASS \ In segment CODE, align 4, keep-with-next \ ??DataTable212: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable214: \ 00000000 ........ DC32 total_xstatuses \ In segment CODE, align 4, keep-with-next \ ??DataTable217: \ 00000000 ........ DC32 IsInvertSoftKey \ In segment CODE, align 4, keep-with-next \ ??DataTable219: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable222: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable225: \ 00000000 ........ DC32 process_active_timer \ In segment CODE, align 4, keep-with-next \ ??DataTable226: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable228: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable229: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable231: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable232: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable233: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable235: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable236: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable237: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable243: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable244: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable245: \ 00000000 ........ DC32 showAwayIdle \ In segment CODE, align 4, keep-with-next \ ??DataTable246: \ 00000000 ........ DC32 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable248: \ 00000000 ........ DC32 suc_config_name_mod \ In segment CODE, align 4, keep-with-next \ ??DataTable252: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable253: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable254: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable255: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable258: \ 00000000 ........ DC32 PASS \ In segment CODE, align 4, keep-with-next \ ??DataTable259: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable260: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable261: \ 00000000 ........ DC32 ClearSendQ \ In segment CODE, align 4, keep-with-next \ ??DataTable262: \ 00000000 ........ DC32 NumStatusToIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable263: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable264: \ 00000000 ........ DC32 ShowStatusIcon \ In segment CODE, align 4, keep-with-next \ ??DataTable265: \ 00000000 6678231A DC32 0x1a237866 \ In segment CODE, align 4, keep-with-next \ ??DataTable266: \ 00000000 ........ DC32 show_xstatus \ In segment CODE, align 4, keep-with-next \ ??DataTable270: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable271: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable272: \ 00000000 ........ DC32 suc_config_name \ In segment CODE, align 4, keep-with-next \ ??DataTable273: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable274: \ 00000000 ........ DC32 fontpath \ In segment CODE, align 4, keep-with-next \ ??DataTable275: \ 00000000 ........ DC32 bgrColor \ In segment CODE, align 4, keep-with-next \ ??DataTable276: \ 00000000 ........ DC32 fontColor \ In segment CODE, align 4, keep-with-next \ ??DataTable277: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable278: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable279: \ 00000000 ........ DC32 Pinger2 \ In segment CODE, align 4, keep-with-next \ ??DataTable280: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable282: \ 00000000 ........ DC32 S_ICONS + 828 \ In segment CODE, align 4, keep-with-next \ ??DataTable284: \ 00000000 ........ DC32 IsMultiBuffer \ In segment CODE, align 4, keep-with-next \ ??DataTable286: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable287: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable288: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable289: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable291: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable294: \ 00000000 ........ DC32 main2_count \ In segment CODE, align 4, keep-with-next \ ??DataTable295: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable296: \ 00000000 ........ DC32 IsMultiBuffer \ In segment CODE, align 4, keep-with-next \ ??DataTable298: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable299: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable300: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable301: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable302: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable303: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable306: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable307: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable310: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable311: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable314: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable316: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable317: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable318: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable319: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable321: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable327: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable328: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable329: \ 00000000 ........ DC32 S_ICONS + 788 \ In segment CODE, align 4, keep-with-next \ ??DataTable330: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable331: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable332: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable333: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable334: \ 00000000 ........ DC32 GetTags \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000010 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000020 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000030 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000040 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000050 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000060 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000000000 \ 0000 \ `?`: \ 00000074 ............ DC32 maincsm_onmessage, maincsm_oncreate, 0, 0, 0, 0, maincsm_onclose \ ....00000000 \ 000000000000 \ 000000000000 \ ........ \ 00000090 2C0000000100 DC32 44, 1, minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ 0000........ \ ........CCCC \ AA5555AA3333 \ 00000000 \ 000000AC 8B00 DC16 139 \ 000000AE 0000 DC8 0, 0 \ 000000B0 49636F6E4261 DC8 "IconBar" \ 7200 \ 000000B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000000C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000000D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000104 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000114 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000124 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000134 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000144 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000154 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000164 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000174 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000184 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000194 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 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, 0, 0, 0, 0 \ 000000000000 \ 000000000000 \ 0000 \ `?`: \ 00000258 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000025C 00000000 DC32 0 \ `?`: \ 00000260 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000264 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000268 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000026C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000270 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000274 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000278 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000027C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000280 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000284 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000288 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000028C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000290 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000294 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000298 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000029C 01000000 DC32 1 \ `?`: \ 000002A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002A4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002A8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002AC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002B8 00000000 DC32 0 \ `?`: \ 000002BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002D4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002D8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002DC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002E0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002E4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002E8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002EC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002F4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002FC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000300 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000304 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000308 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000030C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000310 F6FFFFFF DC32 -10 \ `?`: \ 00000314 00000000 DC32 0 \ `?`: \ 00000318 FFFFFFFF DC32 -1 \ `?`: \ 0000031C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000320 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000324 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000328 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000032C 00000000 DC32 0 \ `?`: \ 00000330 00000000 DC32 0H \ `?`: \ 00000334 01000000 DC32 1 \ `?`: \ 00000338 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000033C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000340 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000344 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000348 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000034C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000350 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000354 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000358 00000000 DC32 0 \ `?`: \ 0000035C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000360 00000000 DC8 0, 0, 0, 0 \ `?`: \ 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 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003C8 01000000 DC32 1 \ `?`: \ 000003CC 01000000 DC32 1 \ `?`: \ 000003D0 00000000 DC32 0 \ `?`: \ 000003D4 03000000 DC32 3 \ `?`: \ 000003D8 00000000 DC32 0 \ `?`: \ 000003DC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003E0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003E4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003E8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003EC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003F4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003FC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000400 00000000 DC32 0 \ `?`: \ 00000404 01000000 DC32 1 \ `?`: \ 00000408 00000000 DC32 0 \ `?`: \ 0000040C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000410 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000420 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000430 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000440 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000450 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000460 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000470 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000480 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000490 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000500 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000510 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000520 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000530 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000540 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000550 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000560 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000570 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000580 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000590 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000005F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000600 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000610 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000620 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000630 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000640 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000650 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000660 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000670 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000680 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000690 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000700 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000710 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000720 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000730 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000740 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000750 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000760 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000770 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000780 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000790 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000800 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000810 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000820 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000830 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000840 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000850 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000860 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000870 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000880 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000890 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000900 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000910 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000920 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000930 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000940 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000950 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000960 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000970 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000980 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000990 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ED0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001000 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001010 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001020 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001030 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001040 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001050 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001060 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001070 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001080 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001090 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001100 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001110 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001120 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001130 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001140 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001150 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001160 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001170 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001180 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001190 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001200 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001210 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001220 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001230 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001240 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001250 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001260 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001270 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001280 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001290 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001300 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001310 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001320 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001330 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001340 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001350 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001360 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001370 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001380 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001390 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001400 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001410 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001420 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001430 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001440 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001450 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001460 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001470 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001480 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001490 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001500 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001510 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001520 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001530 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001540 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001550 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001560 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001570 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001580 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001590 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001600 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001610 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001620 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001630 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001640 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001650 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001660 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001670 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001680 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001690 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001700 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001710 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001720 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001730 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001740 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001750 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001760 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001770 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001780 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001790 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001800 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001810 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001820 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001830 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001840 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001850 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00001858 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001868 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001878 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001888 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001898 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 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 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 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, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001BA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001BE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001C68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001CE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00001CF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001D24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001D54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001D84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001DB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001DE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001DF4 53656E64696E DC8 "Sending online time..." \ 67206F6E6C69 \ 6E652074696D \ 652E2E2E00 \ 00001E0B 00 DC8 0 \ `?`: \ 00001E0C 53656E64696E DC8 "Sending msg info..." \ 67206D736720 \ 696E666F2E2E \ 2E00 \ `?`: \ 00001E20 53656E64696E DC8 "Sending battery info..." \ 672062617474 \ 65727920696E \ 666F2E2E2E00 \ `?`: \ 00001E38 53656E64696E DC8 "Sending mod info..." \ 67206D6F6420 \ 696E666F2E2E \ 2E00 \ `?`: \ 00001E4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001ECC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00001F54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001F74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001FB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001FC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001FD4 FFFFFF64 DC8 255, 255, 255, 100 \ `?`: \ 00001FD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002008 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 FF0F0000 DC16 4095, 0 \ 00000004 ........ DC32 `?`: \ 00000000 18000000 DC16 24, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 ........0000 DC32 input_awaymsg_sk, 0 \ 0000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 00000064 DC8 0, 0, 0, 100 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00000008 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000000C ............ DC32 ChangeVibraContact, ChangeSoundContact, ChangeAutoMsg \ ............ \ 00000018 ............ DC32 ChangeShowXstatus, ChangeAccess, ChangeAwaySignal \ ............ \ 00000024 ............ DC32 ChangeLoadHistory, ChangeAutobot \ .... \ `?`: \ 0000002C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000003C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000004C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000005C 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 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000008 000000000000 DC32 0H, 0, 2147483647 \ 0000FFFFFF7F \ `?`: \ 00000014 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000018 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000001C 00000000 DC32 0 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 53656E64696E DC8 "Sending offline info..." \ 67206F66666C \ 696E6520696E \ 666F2E2E2E00 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 00000064 DC8 0, 0, 0, 100 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 474D54202D30 DC8 "GMT -07:00" \ 373A303000 \ 0000000B 00 DC8 0 \ 0000000C 474D54202D30 DC8 "GMT -06:00" \ 363A303000 \ 00000017 00 DC8 0 \ 00000018 474D54202D30 DC8 "GMT -05:00" \ 353A303000 \ 00000023 00 DC8 0 \ 00000024 474D54202D30 DC8 "GMT -04:00" \ 343A303000 \ 0000002F 00 DC8 0 \ 00000030 474D54202D30 DC8 "GMT -03:30" \ 333A333000 \ 0000003B 00 DC8 0 \ 0000003C 474D54202D30 DC8 "GMT -03:00" \ 333A303000 \ 00000047 00 DC8 0 \ 00000048 474D54202D30 DC8 "GMT -02:00" \ 323A303000 \ 00000053 00 DC8 0 \ 00000054 474D54202D30 DC8 "GMT -01:00" \ 313A303000 \ 0000005F 00 DC8 0 \ 00000060 474D54203030 DC8 "GMT 00:00" \ 3A303000 \ 0000006A 0000 DC8 0, 0 \ 0000006C 474D54202B30 DC8 "GMT +01:00" \ 313A303000 \ 00000077 00 DC8 0 \ 00000078 474D54202B30 DC8 "GMT +02:00" \ 323A303000 \ 00000083 00 DC8 0 \ 00000084 474D54202B30 DC8 "GMT +03:00" \ 333A303000 \ 0000008F 00 DC8 0 \ 00000090 474D54202B30 DC8 "GMT +03:30" \ 333A333000 \ 0000009B 00 DC8 0 \ 0000009C 474D54202B30 DC8 "GMT +04:00" \ 343A303000 \ 000000A7 00 DC8 0 \ 000000A8 474D54202B30 DC8 "GMT +04:30" \ 343A333000 \ 000000B3 00 DC8 0 \ 000000B4 474D54202B30 DC8 "GMT +05:00" \ 353A303000 \ 000000BF 00 DC8 0 \ 000000C0 474D54202B30 DC8 "GMT +05:30" \ 353A333000 \ 000000CB 00 DC8 0 \ 000000CC 474D54202B30 DC8 "GMT +05:45" \ 353A343500 \ 000000D7 00 DC8 0 \ 000000D8 474D54202B30 DC8 "GMT +06:00" \ 363A303000 \ 000000E3 00 DC8 0 \ 000000E4 474D54202B30 DC8 "GMT +06:30" \ 363A333000 \ 000000EF 00 DC8 0 \ 000000F0 474D54202B30 DC8 "GMT +07:00" \ 373A303000 \ 000000FB 00 DC8 0 \ 000000FC 474D54202B30 DC8 "GMT +08:00" \ 383A303000 \ 00000107 00 DC8 0 \ 00000108 474D54202B30 DC8 "GMT +09:00" \ 393A303000 \ 00000113 00 DC8 0 \ 00000114 474D54202B30 DC8 "GMT +09:30" \ 393A333000 \ 0000011F 00 DC8 0 \ 00000120 474D54202B31 DC8 "GMT +10:00" \ 303A303000 \ 0000012B 00 DC8 0 \ 0000012C 474D54202B31 DC8 "GMT +11:00" \ 313A303000 \ 00000137 00 DC8 0 \ 00000138 474D54202B31 DC8 "GMT +12:00" \ 323A303000 \ 00000143 00 DC8 0 \ 00000144 474D54202B31 DC8 "GMT +13:00" \ 333A303000 \ 0000014F 00 DC8 0 \ 00000150 474D54202D31 DC8 "GMT -12:00" \ 323A303000 \ 0000015B 00 DC8 0 \ 0000015C 474D54202D31 DC8 "GMT -11:00" \ 313A303000 \ 00000167 00 DC8 0 \ 00000168 474D54202D31 DC8 "GMT -10:00" \ 303A303000 \ 00000173 00 DC8 0 \ 00000174 474D54202D30 DC8 "GMT -09:00" \ 393A303000 \ 0000017F 00 DC8 0 \ 00000180 474D54202D30 DC8 "GMT -08:00" \ 383A303000 \ 0000018B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4F6E6C696E65 DC8 "Online: %02d:%02d:%02d" \ 3A2025303264 \ 3A253032643A \ 2530326400 \ 00000017 00 DC8 0 \ 00000018 4F66666C696E DC8 "Offline" \ 6500 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 417761792066 DC8 "Away from [%s]" \ 726F6D205B25 \ 735D00 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5C25642E7478 DC8 "\\%d.txt" \ 7400 \ 00000008 5C302E747874 DC8 "\\0.txt" \ 00 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5C626F745F25 DC8 "\\bot_%d.txt" \ 642E74787400 \ 0000000C 5C626F742E74 DC8 "\\bot.txt" \ 787400 \ 00000015 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5C6C6F63616C DC8 "\\local.cl" \ 2E636C00 \ 0000000A 0000 DC8 0, 0 \ 0000000C 3B25643B2573 DC8 ";%d;%s;;;\015\012" \ 3B3B3B0D0A00 \ 00000018 536176656420 DC8 "Saved local.cl" \ 6C6F63616C2E \ 636C00 \ 00000027 00 DC8 0 \ 00000028 43616E277420 DC8 "Can't save local.cl" \ 73617665206C \ 6F63616C2E63 \ 6C00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25735C484541 DC8 "%s\\HEAD.png" \ 442E706E6700 \ In segment DATA_C, align 4, align-sorted \ 00000000 5B415D00 DC8 "[A]" \ In segment DATA_C, align 4, align-sorted \ 00000000 5B495D00 DC8 "[I]" \ In segment DATA_C, align 4, align-sorted \ 00000000 5B565D00 DC8 "[V]" \ In segment DATA_C, align 4, align-sorted \ 00000000 5B535D00 DC8 "[S]" \ In segment DATA_C, align 4, align-sorted \ 00000000 5B525D00 DC8 "[R]" \ In segment DATA_C, align 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.%02d %s:\015\012" \ 3032643A2530 \ 326420253032 \ 642E25303264 \ 2025733A0D0A \ 00 \ 0000001F 00 DC8 0 \ 00000020 253032643A25 DC8 "%02d:%02d:%02d %02d.%02d %s:" \ 3032643A2530 \ 326420253032 \ 642E25303264 \ 2025733A00 \ 0000003D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5C636D642E74 DC8 "\\cmd.txt" \ 787400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CEF2EAEBFEF7 DC8 "\316\362\352\353\376\367\345\355" \ E5ED00 \ 00000009 000000 DC8 0, 0, 0 \ 0000000C CDE5E2E8E4E8 DC8 "\315\345\342\350\344\350\354\373\351" \ ECFBE900 \ 00000016 0000 DC8 0, 0 \ 00000018 CEF2F1F3F2F1 DC8 "\316\362\361\363\362\361\342\363\345\362" \ E2F3E5F200 \ 00000023 00 DC8 0 \ 00000024 CDE520E4EEF1 DC8 "\315\345 \344\356\361\362\363\357\345\355" \ F2F3EFE5ED00 \ 00000030 C7E0EDFFF200 DC8 "\307\340\355\377\362" \ 00000036 0000 DC8 0, 0 \ 00000038 CDE520E1E5F1 DC8 "\315\345 \341\345\361\357\356\352\356\350\362\374" \ EFEEEAEEE8F2 \ FC00 \ 00000046 0000 DC8 0, 0 \ 00000048 C4E5EFF0E5F1 DC8 "\304\345\357\360\345\361\361\350\377" \ F1E8FF00 \ 00000052 0000 DC8 0, 0 \ 00000054 C7EBEEE900 DC8 "\307\353\356\351" \ 00000059 000000 DC8 0, 0, 0 \ 0000005C C4EEECE000 DC8 "\304\356\354\340" \ 00000061 000000 DC8 0, 0, 0 \ 00000064 D0E0E1EEF2E0 DC8 "\320\340\341\356\362\340" \ 00 \ 0000006B 00 DC8 0 \ 0000006C C220F1E5F2E8 DC8 "\302 \361\345\362\350" \ 00 \ 00000073 00 DC8 0 \ 00000074 C3EEF2EEE220 DC8 "\303\356\362\356\342 \341\356\353\362\340\362\374" \ E1EEEBF2E0F2 \ FC00 \ 00000082 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ 00000000 C6F0F300 DC8 "\306\360\363" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6D6F64206279 DC8 6DH, 6FH, 64H, 20H, 62H, 79H, 20H, 45H \ 2045 \ 00000008 76696C666F78 DC8 76H, 69H, 6CH, 66H, 6FH, 78H, 2CH, 6BH \ 2C6B \ 00000010 6C7563686E69 DC8 6CH, 75H, 63H, 68H, 6EH, 69H, 6BH, 2CH \ 6B2C \ 00000018 77696E646573 DC8 77H, 69H, 6EH, 64H, 65H, 73H, 20H, 62H \ 2062 \ 00000020 61736564206F DC8 61H, 73H, 65H, 64H, 20H, 6FH, 6EH, 20H \ 6E20 \ 00000028 726576697369 DC8 72H, 65H, 76H, 69H, 73H, 69H, 6FH, 6EH \ 6F6E \ 00000030 20323035382C DC8 20H, 32H, 30H, 35H, 38H, 2CH, 20H, 6DH \ 206D \ 00000038 6F6420646174 DC8 6FH, 64H, 20H, 64H, 61H, 74H, 65H, 3AH \ 653A \ 00000040 202573206174 DC8 20H, 25H, 73H, 20H, 61H, 74H, 20H, 25H \ 2025 \ 00000048 732000 DC8 73H, 20H, 0 \ 0000004B 00 DC8 0 \ 0000004C 446563203134 DC8 "Dec 14 2008" \ 203230303800 \ 00000058 31313A33363A DC8 "11:36:39" \ 333900 \ 00000061 000000 DC8 0, 0, 0 \ 00000064 2573206D6F64 DC8 "%s model: %s sw: %s\015\012" \ 656C3A202573 \ 2073773A2025 \ 730D0A00 \ 0000007A 0000 DC8 0, 0 \ 0000007C 506C6174666F DC8 "Platform: \250LKA" \ 726D3A20A84C \ 4B4100 \ 0000008B 00 DC8 0 \ 0000008C C2F0E5ECFF20 DC8 0C2H, 0F0H, 0E5H, 0ECH, 0FFH, 20H, 0E2H, 20H \ E220 \ 00000094 EEEDEBE0E9ED DC8 0EEH, 0EDH, 0EBH, 0E0H, 0E9H, 0EDH, 3AH, 20H \ 3A20 \ 0000009C 253032643A25 DC8 25H, 30H, 32H, 64H, 3AH, 25H, 30H, 32H \ 3032 \ 000000A4 643A25303264 DC8 64H, 3AH, 25H, 30H, 32H, 64H, 20H, 0DH \ 200D \ 000000AC 0AD1E5F0E2E5 DC8 0AH, 0D1H, 0E5H, 0F0H, 0E2H, 0E5H, 0F0H, 3AH \ F03A \ 000000B4 202573200D0A DC8 20H, 25H, 73H, 20H, 0DH, 0AH, 25H, 73H \ 2573 \ 000000BC 200D0A00 DC8 20H, 0DH, 0AH, 0 \ 000000C0 CEF2EFF0E0E2 DC8 0CEH, 0F2H, 0EFH, 0F0H, 0E0H, 0E2H, 0EBH, 0E5H \ EBE5 \ 000000C8 EDEE20F1EEEE DC8 0EDH, 0EEH, 20H, 0F1H, 0EEH, 0EEH, 0E1H, 0F9H \ E1F9 \ 000000D0 E5EDE8E93A20 DC8 0E5H, 0EDH, 0E8H, 0E9H, 3AH, 20H, 25H, 64H \ 2564 \ 000000D8 200D0ACFF0E8 DC8 20H, 0DH, 0AH, 0CFH, 0F0H, 0E8H, 0EDH, 0FFH \ EDFF \ 000000E0 F2EE20F1EEEE DC8 0F2H, 0EEH, 20H, 0F1H, 0EEH, 0EEH, 0E1H, 0F9H \ E1F9 \ 000000E8 E5EDE8E93A20 DC8 0E5H, 0EDH, 0E8H, 0E9H, 3AH, 20H, 25H, 64H \ 2564 \ 000000F0 200D0A00 DC8 20H, 0DH, 0AH, 0 \ 000000F4 CEEFE5F0E0F2 DC8 "\316\357\345\360\340\362\356\360: %s \015\012" \ EEF03A202573 \ 200D0A00 \ 00000104 C7E0F0FFE420 DC8 "\307\340\360\377\344 \341\340\362\340\360\345\350: %d \357\360\356\366\345\355\362\356\342 \015\012" \ E1E0F2E0F0E5 \ E83A20256420 \ EFF0EEF6E5ED \ F2EEE2200D0A \ 00 \ 00000123 00 DC8 0 \ 00000124 547261666669 DC8 54H, 72H, 61H, 66H, 66H, 69H, 63H, 3AH \ 633A \ 0000012C 205278203A20 DC8 20H, 52H, 78H, 20H, 3AH, 20H, 25H, 64H \ 2564 \ 00000134 62205478203A DC8 62H, 20H, 54H, 78H, 20H, 3AH, 20H, 25H \ 2025 \ 0000013C 646220517565 DC8 64H, 62H, 20H, 51H, 75H, 65H, 75H, 65H \ 7565 \ 00000144 3A2025646220 DC8 3AH, 20H, 25H, 64H, 62H, 20H, 0DH, 0AH \ 0D0A \ 0000014C 54696D653A20 DC8 54H, 69H, 6DH, 65H, 3AH, 20H, 25H, 30H \ 2530 \ 00000154 32643A253032 DC8 32H, 64H, 3AH, 25H, 30H, 32H, 64H, 0DH \ 640D \ 0000015C 0A4F6E6C696E DC8 0AH, 4FH, 6EH, 6CH, 69H, 6EH, 65H, 20H \ 6520 \ 00000164 636F6E746163 DC8 63H, 6FH, 6EH, 74H, 61H, 63H, 74H, 3AH \ 743A \ 0000016C 202564205B74 DC8 20H, 25H, 64H, 20H, 5BH, 74H, 6FH, 74H \ 6F74 \ 00000174 616C3A202564 DC8 61H, 6CH, 3AH, 20H, 25H, 64H, 5DH, 20H \ 5D20 \ 0000017C 0D0A556E7265 DC8 0DH, 0AH, 55H, 6EH, 72H, 65H, 61H, 64H \ 6164 \ 00000184 206D65737361 DC8 20H, 6DH, 65H, 73H, 73H, 61H, 67H, 65H \ 6765 \ 0000018C 3A2025642F25 DC8 3AH, 20H, 25H, 64H, 2FH, 25H, 64H, 20H \ 6420 \ 00000194 00 DC8 0 \ 00000195 000000 DC8 0, 0, 0 \ 00000198 53656E64696E DC8 "Sending textinfo..." \ 672074657874 \ 696E666F2E2E \ 2E00 \ 000001AC 5F5F54455854 DC8 "__TEXTINFO" \ 494E464F00 \ 000001B7 00 DC8 0 \ 000001B8 5F5F544900 DC8 "__TI" \ 000001BD 000000 DC8 0, 0, 0 \ 000001C0 54696D653A20 DC8 "Time: %02d:%02d" \ 253032643A25 \ 30326400 \ 000001D0 53656E64696E DC8 "Sending time..." \ 672074696D65 \ 2E2E2E00 \ 000001E0 5F5F54494D45 DC8 "__TIME" \ 00 \ 000001E7 00 DC8 0 \ 000001E8 4745545F5449 DC8 "GET_TIME" \ 4D4500 \ 000001F1 000000 DC8 0, 0, 0 \ 000001F4 2573206D6F64 DC8 "%s model: %s sw: %s" \ 656C3A202573 \ 2073773A2025 \ 7300 \ 00000208 53656E64696E DC8 "Sending platform info..." \ 6720706C6174 \ 666F726D2069 \ 6E666F2E2E2E \ 00 \ 00000221 000000 DC8 0, 0, 0 \ 00000224 4745545F504C DC8 "GET_PLATFORM_INFO" \ 4154464F524D \ 5F494E464F00 \ 00000236 0000 DC8 0, 0 \ 00000238 5F5F504C4154 DC8 "__PLATFORM" \ 464F524D00 \ 00000243 00 DC8 0 \ 00000244 5F5F485700 DC8 "__HW" \ 00000249 000000 DC8 0, 0, 0 \ 0000024C C2F0E5ECFF20 DC8 "\302\360\345\354\377 \342 \356\355\353\340\351\355: %02d:%02d:%02d \012\321\345\360\342\345\360: %s" \ E220EEEDEBE0 \ E9ED3A202530 \ 32643A253032 \ 643A25303264 \ 200AD1E5F0E2 \ E5F03A202573 \ 00 \ 00000277 00 DC8 0 \ 00000278 4745545F4F4E DC8 "GET_ONLINE_TIME" \ 4C494E455F54 \ 494D4500 \ 00000288 5F5F4F4E4C49 DC8 "__ONLINE" \ 4E4500 \ 00000291 000000 DC8 0, 0, 0 \ 00000294 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 \ 000002C4 4745545F4D53 DC8 "GET_MSG_INFO" \ 475F494E464F \ 00 \ 000002D1 000000 DC8 0, 0, 0 \ 000002D4 5F5F4D534700 DC8 "__MSG" \ 000002DA 0000 DC8 0, 0 \ 000002DC CEEFE5F0E0F2 DC8 "\316\357\345\360\340\362\356\360: %s" \ EEF03A202573 \ 00 \ 000002E9 000000 DC8 0, 0, 0 \ 000002EC 53656E64696E DC8 "Sending provider name..." \ 672070726F76 \ 69646572206E \ 616D652E2E2E \ 00 \ 00000305 000000 DC8 0, 0, 0 \ 00000308 4745545F5052 DC8 "GET_PROVIDER" \ 4F5649444552 \ 00 \ 00000315 000000 DC8 0, 0, 0 \ 00000318 5F5F50524F56 DC8 "__PROVIDER" \ 4944455200 \ 00000323 00 DC8 0 \ 00000324 2A2A2A416363 DC8 "***Access denied***" \ 657373206465 \ 6E6965642A2A \ 2A00 \ 00000338 4745545F4D4F DC8 "GET_MOD_INFO" \ 445F494E464F \ 00 \ 00000345 000000 DC8 0, 0, 0 \ 00000348 5F5F4D4F4400 DC8 "__MOD" \ 0000034E 0000 DC8 0, 0 \ 00000350 C7E0F0FFE420 DC8 "\307\340\360\377\344 \341\340\362\340\360\345\350: %d \357\360\356\366\345\355\362\356\342" \ E1E0F2E0F0E5 \ E83A20256420 \ EFF0EEF6E5ED \ F2EEE200 \ 0000036C 4745545F4241 DC8 "GET_BAT_INFO" \ 545F494E464F \ 00 \ 00000379 000000 DC8 0, 0, 0 \ 0000037C 5F5F42415400 DC8 "__BAT" \ 00000382 0000 DC8 0, 0 \ 00000384 726576697369 DC8 "revision 2058, mod date: %s at %s " \ 6F6E20323035 \ 382C206D6F64 \ 20646174653A \ 202573206174 \ 2025732000 \ 000003A7 00 DC8 0 \ 000003A8 687474703A2F DC8 "http://kluchnik.jino-net.ru/naticqmod/" \ 2F6B6C756368 \ 6E696B2E6A69 \ 6E6F2D6E6574 \ 2E72752F6E61 \ 746963716D6F \ 642F00 \ 000003CF 00 DC8 0 \ 000003D0 53656E64696E DC8 "Sending url info..." \ 672075726C20 \ 696E666F2E2E \ 2E00 \ 000003E4 4745545F5552 DC8 "GET_URL_INFO" \ 4C5F494E464F \ 00 \ 000003F1 000000 DC8 0, 0, 0 \ 000003F4 5F5F55524C00 DC8 "__URL" \ 000003FA 0000 DC8 0, 0 \ 000003FC 4175746F626F DC8 "Autobot" \ 7400 \ 00000404 C0E2F2EEEEF2 DC8 "\300\342\362\356\356\362\342\345\362\367\350\352: %s %s! %s %s" \ E2E5F2F7E8EA \ 3A2025732025 \ 732120257320 \ 257300 \ 0000041F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ 00000000 5F5F5400 DC8 "__T" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 B0B5041C0025 DC8 176, 181, 4, 28, 0, 37, 5, 97 \ 0561 \ In segment DATA_C, align 4, align-sorted \ `?_1`: \ 00000000 B0B5041C0025 DC8 176, 181, 4, 28, 0, 37, 5, 97 \ 0561 \ In segment DATA_C, align 1, align-sorted \ 00000000 3A0A00 DC8 ":\012" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CEEFF6E8E800 DC8 "\316\357\366\350\350" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4E4154494351 DC8 "NATICQ: %d" \ 3A20256400 \ 0000000B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 43ECE0E9EBFB DC8 "C\354\340\351\353\373" \ 00 \ 00000007 00 DC8 0 \ 00000008 C220E1F3F4E5 DC8 "\302 \341\363\364\345\360" \ F000 \ 00000010 C8E720E1F3F4 DC8 "\310\347 \341\363\364\345\360\340" \ E5F0E000 \ 0000001A 0000 DC8 0, 0 \ 0000001C CAEEECE0EDE4 DC8 "\312\356\354\340\355\344\340" \ E000 \ 00000024 CEF7E8F1F2E8 DC8 "\316\367\350\361\362\350\362\374 \341\363\364\345\360" \ F2FC20E1F3F4 \ E5F000 \ 00000033 00 DC8 0 \ 00000034 D1EBE5E4F3FE DC8 "\321\353\345\344\363\376\371\350\351 \367\340\362" \ F9E8E920F7E0 \ F200 \ 00000042 0000 DC8 0, 0 \ 00000044 CFF0E5E4FBE4 DC8 "\317\360\345\344\373\344\363\371\350\351 \367\340\362" \ F3F9E8E920F7 \ E0F200 \ 00000053 00 DC8 0 \ 00000054 CAEEECE0EDE4 DC8 "\312\356\354\340\355\344\373" \ FB00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 616263646566 DC8 61H, 62H, 63H, 64H, 65H, 66H, 67H, 68H \ 6768 \ 00000008 696A6B6C6D6E DC8 69H, 6AH, 6BH, 6CH, 6DH, 6EH, 6FH, 70H \ 6F70 \ 00000010 717273747576 DC8 71H, 72H, 73H, 74H, 75H, 76H, 77H, 78H \ 7778 \ 00000018 797A41424344 DC8 79H, 7AH, 41H, 42H, 43H, 44H, 45H, 46H \ 4546 \ 00000020 4748494A4B4C DC8 47H, 48H, 49H, 4AH, 4BH, 4CH, 4DH, 4EH \ 4D4E \ 00000028 4F5051525354 DC8 4FH, 50H, 51H, 52H, 53H, 54H, 55H, 56H \ 5556 \ 00000030 5758595A3031 DC8 57H, 58H, 59H, 5AH, 30H, 31H, 32H, 33H \ 3233 \ 00000038 343536373839 DC8 34H, 35H, 36H, 37H, 38H, 39H, 24H, 2DH \ 242D \ 00000040 5F2E2B212A27 DC8 5FH, 2EH, 2BH, 21H, 2AH, 27H, 28H, 29H \ 2829 \ 00000048 2C253B3A4026 DC8 2CH, 25H, 3BH, 3AH, 40H, 26H, 3DH, 2FH \ 3D2F \ 00000050 3FE0E1E2E3E4 DC8 3FH, 0E0H, 0E1H, 0E2H, 0E3H, 0E4H, 0E5H, 0B8H \ E5B8 \ 00000058 E6E7E8E9EAEB DC8 0E6H, 0E7H, 0E8H, 0E9H, 0EAH, 0EBH, 0ECH, 0EDH \ ECED \ 00000060 EEEFF0F1F2F3 DC8 0EEH, 0EFH, 0F0H, 0F1H, 0F2H, 0F3H, 0F4H, 0F5H \ F4F5 \ 00000068 F6F7F8F9FAFB DC8 0F6H, 0F7H, 0F8H, 0F9H, 0FAH, 0FBH, 0FCH, 0FDH \ FCFD \ 00000070 FEFFC0C1C2C3 DC8 0FEH, 0FFH, 0C0H, 0C1H, 0C2H, 0C3H, 0C4H, 0C5H \ C4C5 \ 00000078 A8C6C7C8C9CA DC8 0A8H, 0C6H, 0C7H, 0C8H, 0C9H, 0CAH, 0CBH, 0CCH \ CBCC \ 00000080 CDCECFD0D1D2 DC8 0CDH, 0CEH, 0CFH, 0D0H, 0D1H, 0D2H, 0D3H, 0D4H \ D3D4 \ 00000088 D5D6D7D8D9DA DC8 0D5H, 0D6H, 0D7H, 0D8H, 0D9H, 0DAH, 0DBH, 0DCH \ DBDC \ 00000090 DDDEDF00 DC8 0DDH, 0DEH, 0DFH, 0 \ 00000094 687474703A2F DC8 "http://" \ 2F00 \ 0000009C 7777772E00 DC8 "www." \ 000000A1 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4D6573736167 DC8 "Message add to buffer" \ 652061646420 \ 746F20627566 \ 66657200 \ 00000016 0000 DC8 0, 0 \ 00000018 25735C746D70 DC8 "%s\\tmp%u.url" \ 25752E75726C \ 00 \ 00000025 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 526571756573 DC8 "Request info..." \ 7420696E666F \ 2E2E2E00 \ 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 \ 00000024 25735C25755C DC8 "%s\\%u\\%u.txt" \ 25752E747874 \ 00 \ 00000031 000000 DC8 0, 0, 0 \ 00000034 25735C25752E DC8 "%s\\%u.txt" \ 74787400 \ 0000003E 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 70696E672E70 DC8 "ping.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 73657474696E DC8 "settings.png" \ 67732E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973312E70 DC8 "vis1.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973322E70 DC8 "vis2.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973332E70 DC8 "vis3.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973342E70 DC8 "vis4.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973352E70 DC8 "vis5.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CBE5E200 DC8 "\313\345\342" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CFF0E0E200 DC8 "\317\360\340\342" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2FBE1EEF000 DC8 "\302\373\341\356\360" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7E0EAF0FBF2 DC8 "\307\340\352\360\373\362\374" \ FC00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2E8E1F0E000 DC8 "\302\350\341\360\340" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7E2F3EA00 DC8 "\307\342\363\352" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 41E2F2EEE1EE DC8 "A\342\362\356\341\356\362" \ F200 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2FBE1F0E0F2 DC8 "\302\373\341\360\340\362\374" \ FC00 \ In segment DATA_C, align 1, align-sorted \ `?`: \ 00000000 00 DC8 "" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 253032643A25 DC8 "%02d:%02d" \ 30326400 \ 0000000A 0000 DC8 0, 0 \ 0000000C 2820CEF2F1F3 DC8 "( \316\362\361\363\362\361\362\342\363\376 \357\360\350\354\345\360\355\356 \361 %02d:%02d [%s] )" \ F2F1F2E2F3FE \ 20EFF0E8ECE5 \ F0EDEE20F120 \ 253032643A25 \ 303264205B25 \ 735D202900 \ 00000035 000000 DC8 0, 0, 0 \ 00000038 2820CDE5E4EE DC8 "( \315\345\344\356\361\362\363\357\345\355 \357\360\350\354\345\360\355\356 \361 %02d:%02d [%s] )" \ F1F2F3EFE5ED \ 20EFF0E8ECE5 \ F0EDEE20F120 \ 253032643A25 \ 303264205B25 \ 735D202900 \ 00000061 000000 DC8 0, 0, 0 Maximum stack usage in bytes: Function CSTACK -------- ------ AddContactT9Key 12 AddCurContact 4 AddLOGQ 0 AddMsgToChat 104 AddSmile 4 AddStringToLog 196 AddToMain 44 AskNickAndAddContact 4 AutoChangeStatus_timer 20 BackSpaceContactT9 8 ChangeAccess 4 ChangeAutoMsg 4 ChangeAutobot 4 ChangeAwaySignal 4 ChangeLoadHistory 4 ChangeShowXstatus 4 ChangeSound 4 ChangeSoundContact 4 ChangeVibra 4 ChangeVibraContact 4 CheckComand 632 CheckDoubleRun 8 ClearContactT9Key 4 ClearLog 60 ClearSendQ 8 CmdMenuGHook 4 CmdMenuItemHandler 24 CmdMenuKeyHook 16 CreateCLFile 280 CreateContactMenu 32 CreateEditChat 100 DispCmdMenu 32 DrawAck 80 DrawAutoMSG 80 DrawList 84 DrawOnlineTime 20 DrawPing 12 ElfKiller 4 Enter 16 ExtractAnswer 36 FindContactLOGQByAck 12 FindNextActiveContact 0 FindPrevActiveContact 0 FreeBotMessage 8 FreeLOGQ 8 FreeTemplates 8 FreeXText2 8 GetHost 0 GetHostsCount 0 GetIconIndex 0 GetLastXTextLOGQ 0 GetOnTotalContact 8 GetPort 16 GetShortInfo 24 GetStatusByIconIndex 12 GetTempName 20 Get_Online_total 0 IlluminationOff 8 IlluminationOn 24 InputAwayMsg 76 IsUrl 44 LastLOGQ 0 LoadBotMessage 332 LoadCmd 332 LoadTemplates 332 LongPressAction 4 LongPressActionOnChat 40 MoveDown 0 MoveUp 8 NewLOGQ 12 OneSecTmr 8 OpenLogfile 20 ParseAnswer 36 ParseXStatusText 20 Pinger2 16 Play 236 ProcessPacket 364 Quote 152 Quote2 152 ReadDefSettings 184 RecountMenu 20 Remind_Timer2 8 Reminder_timer 4 RemoveLOGQ 4 ReqAddMsgToChat 16 RequestXText 8 SLI_Off 4 SLI_On 8 SLI_Timer 4 SLI_check 4 SMART_REDRAW 8 SaveAnswer 12 ScreenSaverTimer 16 SendAnswer 28 SendAuthGrant 44 SendAuthReq 48 SendData 16 SendMSGACK 8 SetIconBarHandler 0 SetIndividStatus 0 UpdateCLheader 176 UpdateCSMname 4 UptimeMinHour 0 WriteDefSettings 180 addIconBar 32 ask_my_info 0 atoi 4 away_timer 52 begin_to_develop 4 checkGui 8 cmdFree 8 contact_keyhook 12 contact_list_ghook 4 contacthandler 28 contactlist_menu_ghook 28 contactlist_menu_iconhndl 668 contactlist_menu_onkey 32 create_connect 312 create_contactlist_menu 24 do_ping 4 do_reconnect 4 ec_menu 72 ecmenu_ghook 4 ed_options_handler 116 edchat_ghook 72 edchat_locret 0 edchat_onkey 392 end_socket 8 free_ICONS 16 get_answer 1096 init_time_zone 4 input_awaymsg_ghook 4 input_awaymsg_locret 0 input_awaymsg_onkey 72 main 64 maincsm_onclose 8 maincsm_oncreate 20 maincsm_onmessage 112 method0 88 method1 8 method2 8 method3 8 method4 0 method5 44 method8 0 method9 0 my_ed_redraw 12 my_keyhook 12 new_redraw 100 patch_header 8 process_active_timer 12 recon 8 send_login 36 set_my_status 4 set_my_xstatus 44 set_my_xstatus2 36 setup_ICONS 12 show_on_contact 64 show_pp_sender 76 start_vibra 8 start_vibra2 4 stop_vibra 4 stop_vibra2 4 to_develop 4 upTime 20 wstrstr 32 Segment part sizes: Function/Label Bytes -------------- ----- patch_header 52 Pinger2 144 SLI_TYPE 4 SMART_REDRAW 48 ScreenSaverTimer 124 timeh 4 timemin 4 FreeXText2 36 away_timer 416 init_time_zone 356 AutoChangeStatus_timer 1080 DrawPing 72 Remind_Timer2 68 Reminder_timer 32 UptimeMinHour 64 upTime 152 DrawOnlineTime 148 DrawAutoMSG 140 input_awaymsg_onkey 256 input_awaymsg_ghook 68 input_awaymsg_locret 4 InputAwayMsg 316 SLI_On 60 SLI_Off 72 SLI_check 32 SLI_Timer 36 setup_ICONS 68 free_ICONS 44 IlluminationOff 56 IlluminationOn 120 ReadDefSettings 640 WriteDefSettings 664 Play 304 start_vibra 100 stop_vibra 88 start_vibra2 60 stop_vibra2 88 ChangeVibra 56 ChangeSound 56 FreeTemplates 56 LoadTemplates 396 FreeBotMessage 56 LoadBotMessage 396 RXbuf 16392 TXbuf 16392 ElfKiller 28 NewLOGQ 52 LastLOGQ 36 FreeLOGQ 48 RemoveLOGQ 52 AddLOGQ 44 GetLastXTextLOGQ 72 GetIconIndex 228 FindContactLOGQByAck 88 CreateCLFile 236 new_redraw 236 UpdateCLheader 1392 ClearContactT9Key 24 AddContactT9Key 36 BackSpaceContactT9 36 create_contactlist_menu 76 contactlist_menu_ghook 176 RecountMenu 160 ChangeVibraContact 44 ChangeSoundContact 44 ChangeAutoMsg 44 ChangeShowXstatus 44 ChangeAccess 44 ChangeAwaySignal 36 ChangeAutobot 44 ChangeLoadHistory 44 contact_list_ghook 20 contact_keyhook 76 contacthandler 224 CreateContactMenu 136 LongPressActionOnChat 864 LongPressAction 236 contactlist_menu_onkey 1112 GetOnTotalContact 92 contactlist_menu_iconhndl 688 GetHost 192 atoi 84 GetPort 276 GetHostsCount 120 create_connect 760 ClearSendQ 32 end_socket 40 SendAnswer 388 send_login 148 do_ping 52 SendMSGACK 52 RequestXText 52 get_answer 1532 AddToMain 572 AddStringToLog 588 ParseXStatusText 152 AddMsgToChat 812 DrawAck 340 ask_my_info 4 set_my_status 72 set_my_xstatus 528 set_my_xstatus2 244 to_develop 96 ReqAddMsgToChat 120 begin_to_develop 52 cmdFree 56 LoadCmd 280 CmdMenuItemHandler 92 CmdMenuGHook 36 CmdMenuKeyHook 152 DispCmdMenu 124 GetStatusByIconIndex 176 SendData 120 errornumber 4 CheckComand 3088 INC_Nick 32 show_on_contact 360 show_pp_sender 432 Get_Online_total 92 SetIndividStatus 80 ProcessPacket 2944 process_active_timer 148 OneSecTmr 104 DrawList 552 MoveUp 116 MoveDown 96 Enter 144 method0 1276 method1 44 method2 36 method3 24 method4 20 method5 448 method8 8 method9 8 my_keyhook 168 ? 1396 ipc_test_name 8 S_OFFLINE 8 S_INVISIBLE 12 S_AWAY 8 S_NA 4 S_OCCUPIED 12 S_DND 4 S_ONLINE 8 S_FFC 4 icons_names 112 input_awaymsg_desc 88 def_setting 48 contactlist_menuhdr 68 menusoftkeys 12 menu_sk 24 clmenu_sk 24 menu_skt 8 clmenu_skt 8 ? 76 font 4 _t 3 maincsm_oncreate 316 maincsm_onclose 356 do_reconnect 40 CheckDoubleRun 148 checkGui 60 maincsm_onmessage 3204 addIconBar 428 minus11 4 maincsm_name_body 280 UpdateCSMname 36 SetIconBarHandler 20 main 512 edchat_locret 4 ExtractAnswer 280 ??FindNextActiveContact_0 64 FindPrevActiveContact 88 ed_options_handler 1204 wstrstr 124 IsUrl 424 ParseAnswer 548 SaveAnswer 36 GetTempName 172 DMonth 52 recon 52 edchat_onkey 1676 my_ed_redraw 112 edchat_ghook 560 edchat_desc 84 sk 16 CreateEditChat 1132 Quote 416 Quote2 440 GetShortInfo 168 AddCurContact 52 SendAuthReq 212 SendAuthGrant 208 OpenLogfile 228 ClearLog 240 ecmenu_ghook 20 ecmenu_ITEMS 252 ecmenu_HNDLS 36 S_ICONS 8216 sk 8 input_awaymsg_sk 24 input_awaymsg_skt 8 prozr 4 icon_array 108 CmdMenuHeader 32 requests6 24 clrBlack 4 ecmenu_HDR 64 ec_menu 332 AskNickAndAddContact 8 AddSmile 24 ??DataTable1 4 ??DataTable2 4 ??DataTable7 4 ??DataTable9 4 ??DataTable15 4 ??DataTable18 4 ??DataTable23 4 ??DataTable24 4 ??DataTable25 4 ??DataTable28 4 ??DataTable29 4 ??DataTable31 4 ??DataTable33 4 ??DataTable34 4 ??DataTable39 4 ??DataTable40 4 ??DataTable42 4 ??DataTable48 4 ??DataTable51 4 ??DataTable59 4 ??DataTable60 4 ??DataTable61 4 ??DataTable62 4 ??DataTable63 4 ??DataTable64 4 ??DataTable72 4 ??DataTable73 4 ??DataTable81 4 ??DataTable83 4 ??DataTable86 4 ??DataTable87 4 ??DataTable88 4 ??DataTable89 4 ??DataTable90 4 ??DataTable91 4 ??DataTable92 4 ??DataTable93 4 ??DataTable94 4 ??DataTable96 4 ??DataTable98 4 ??DataTable100 4 ??DataTable101 4 ??DataTable102 4 ??DataTable104 4 ??DataTable105 4 ??DataTable106 4 ??DataTable109 4 ??DataTable112 4 ??DataTable113 4 ??DataTable115 4 ??DataTable116 4 ??DataTable117 4 ??DataTable118 4 ??DataTable119 4 ??DataTable120 4 ??DataTable122 4 ??DataTable123 4 ??DataTable125 4 ??DataTable126 4 ??DataTable127 4 ??DataTable137 4 ??DataTable138 4 ??DataTable139 4 ??DataTable141 4 ??DataTable142 4 ??DataTable143 4 ??DataTable144 4 ??DataTable145 4 ??DataTable146 4 ??DataTable147 4 ??DataTable148 4 ??DataTable154 4 ??DataTable157 4 ??DataTable159 4 ??DataTable160 4 ??DataTable161 4 ??DataTable163 4 ??DataTable166 4 ??DataTable167 4 ??DataTable168 4 ??DataTable169 4 ??DataTable170 4 ??DataTable171 4 ??DataTable172 4 ??DataTable176 4 ??DataTable177 4 ??DataTable178 4 ??DataTable179 4 ??DataTable184 4 ??DataTable185 4 ??DataTable186 4 ??DataTable187 4 ??DataTable188 4 ??DataTable189 4 ??DataTable190 4 ??DataTable193 4 ??DataTable194 4 ??DataTable199 4 ??DataTable201 4 ??DataTable205 4 ??DataTable209 4 ??DataTable212 4 ??DataTable214 4 ??DataTable217 4 ??DataTable219 4 ??DataTable222 4 ??DataTable225 4 ??DataTable226 4 ??DataTable228 4 ??DataTable229 4 ??DataTable231 4 ??DataTable232 4 ??DataTable233 4 ??DataTable235 4 ??DataTable236 4 ??DataTable237 4 ??DataTable243 4 ??DataTable244 4 ??DataTable245 4 ??DataTable246 4 ??DataTable248 4 ??DataTable252 4 ??DataTable253 4 ??DataTable254 4 ??DataTable255 4 ??DataTable258 4 ??DataTable259 4 ??DataTable260 4 ??DataTable261 4 ??DataTable262 4 ??DataTable263 4 ??DataTable264 4 ??DataTable265 4 ??DataTable266 4 ??DataTable270 4 ??DataTable271 4 ??DataTable272 4 ??DataTable273 4 ??DataTable274 4 ??DataTable275 4 ??DataTable276 4 ??DataTable277 4 ??DataTable278 4 ??DataTable279 4 ??DataTable280 4 ??DataTable282 4 ??DataTable284 4 ??DataTable286 4 ??DataTable287 4 ??DataTable288 4 ??DataTable289 4 ??DataTable291 4 ??DataTable294 4 ??DataTable295 4 ??DataTable296 4 ??DataTable298 4 ??DataTable299 4 ??DataTable300 4 ??DataTable301 4 ??DataTable302 4 ??DataTable303 4 ??DataTable306 4 ??DataTable307 4 ??DataTable310 4 ??DataTable311 4 ??DataTable314 4 ??DataTable316 4 ??DataTable317 4 ??DataTable318 4 ??DataTable319 4 ??DataTable321 4 ??DataTable327 4 ??DataTable328 4 ??DataTable329 4 ??DataTable330 4 ??DataTable331 4 ??DataTable332 4 ??DataTable333 4 ??DataTable334 4 ? 8216 ? 8 ? 24 ? 8 ? 4 ? 108 ? 32 ? 24 ? 4 ? 396 ? 32 ? 16 ? 3 ? 16 ? 24 ? 60 ? 12 ? 4 ? 4 ? 4 ? 4 ? 4 ? 2 ? 40 ? 12 ? 3 ? 8 ? 64 ? 12 ? 132 ? 4 ? 1056 ? 4 ? 8 ?_1 8 ? 3 ? 8 ? 12 ? 92 ? 164 ? 40 ? 8 ? 16 ? 64 ? 3 ? 12 ? 16 ? 12 ? 8 ? 16 ? 8 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 8 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 4 ? 8 ? 8 ? 8 ? 8 ? 8 ? 8 ? 8 ? 1 ? 100 Others 1220 48 224 bytes in segment CODE 5 850 bytes in segment DATA_C 8 428 bytes in segment DATA_I 8 428 bytes in segment DATA_ID 33 108 bytes in segment DATA_Z 24 bytes in segment INITTAB 46 976 bytes of CODE memory (+ 1 272 bytes shared) 14 278 bytes of CONST memory 41 536 bytes of DATA memory Errors: none Warnings: none