############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 05/Jul/2008 20:07:08 # # 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 UIN_WRITE --preprocess # # D:\Pasha\elf\_MY_PROJECT_\naticq_mod\ESKA\List\ -lC # # D:\Pasha\elf\_MY_PROJECT_\naticq_mod\ESKA\List\ -o # # D:\Pasha\elf\_MY_PROJECT_\naticq_mod\ESKA\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\ESKA\List\main. # # lst # # Object file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\ESKA\Obj\main.r # # 79 # # # # # ############################################################################## 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 B200C4E1 STRH R0,[R4, #+2] \ 00000014 888100EF SWI +33160 \ 00000018 010040E2 SUB R0,R0,#+1 \ 0000001C B400C4E1 STRH R0,[R4, #+4] \ 00000020 8A8100EF SWI +33162 \ 00000024 010040E2 SUB R0,R0,#+1 \ 00000028 B600C4E1 STRH R0,[R4, #+6] \ 0000002C 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,??DataTable25 ;; S_ICONS \ 00000004 70402DE9 PUSH {R4-R6,LR} \ 00000008 ........ LDR R5,??DataTable1 ;; Pinger2 \ 0000000C FC10A0E3 MOV R1,#+252 \ 00000010 541D81E3 ORR R1,R1,#0x1500 \ 00000014 004081E0 ADD R4,R1,R0 \ 00000018 500290E5 LDR R0,[R0, #+592] \ 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 116 const int SLI_TYPE=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 + 620 \ 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 + 620 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 { \ ScreenSaverTimer: \ 00000000 70402DE9 PUSH {R4-R6,LR} 228 if(scrsTime==screenSaverTime) \ 00000004 ........ LDR R4,??DataTable25 ;; S_ICONS \ 00000008 68609FE5 LDR R6,??ScreenSaverTimer_0 ;; ScreenSaverTimer \ 0000000C 8C1294E5 LDR R1,[R4, #+652] \ 00000010 0C00A0E3 MOV R0,#+12 \ 00000014 5C0D80E3 ORR R0,R0,#0x1700 \ 00000018 045080E0 ADD R5,R0,R4 \ 0000001C 58009FE5 LDR R0,??ScreenSaverTimer_0+0x4 ;; screenSaverTime \ 00000020 000090E5 LDR R0,[R0, #+0] \ 00000024 000051E1 CMP R1,R0 \ 00000028 0600001A BNE ??ScreenSaverTimer_1 229 { 230 scrsTime=screenSaverTime;//на всякий случай \ 0000002C 8C0284E5 STR R0,[R4, #+652] 231 CloseScreensaver(); \ 00000030 9C0000EF SWI +156 232 DrawScreenSaver(); \ 00000034 200000EF SWI +32 233 GBS_StartTimerProc(&scrsTmr, 216*10, ScreenSaverTimer); \ 00000038 0620A0E1 MOV R2,R6 \ 0000003C 871EA0E3 MOV R1,#+2160 \ 00000040 0500A0E1 MOV R0,R5 \ 00000044 4D0000EF SWI +77 234 } 235 if(isScreenSaverEna) \ ??ScreenSaverTimer_1: \ 00000048 30009FE5 LDR R0,??ScreenSaverTimer_0+0x8 ;; isScreenSaverEna 236 scrsTime++; 237 GBS_StartTimerProc(&scrsTmr, 216*5, ScreenSaverTimer); \ 0000004C 0620A0E1 MOV R2,R6 \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 3810A0E3 MOV R1,#+56 \ 00000058 000050E3 CMP R0,#+0 \ 0000005C 8C029415 LDRNE R0,[R4, #+652] \ 00000060 401E81E3 ORR R1,R1,#0x400 \ 00000064 01008012 ADDNE R0,R0,#+1 \ 00000068 8C028415 STRNE R0,[R4, #+652] \ 0000006C 0500A0E1 MOV R0,R5 \ 00000070 4D0000EF SWI +77 238 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return \ ??ScreenSaverTimer_0: \ 00000078 ........ DC32 ScreenSaverTimer \ 0000007C ........ DC32 screenSaverTime \ 00000080 ........ 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 A80094E5 LDR R0,[R4, #+168] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} \ 00000014 150000EF SWI +21 \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C A80084E5 STR R0,[R4, #+168] 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,??DataTable4 ;; addIconBar \ 00000008 ........ LDR R10,??DataTable27 ;; AUTO_ENGADE \ 0000000C ........ LDR R5,??DataTable25 ;; S_ICONS \ 00000010 78919FE5 LDR R9,??away_timer_0 ;; `?` \ 00000014 0CD04DE2 SUB SP,SP,#+12 \ 00000018 00109AE5 LDR R1,[R10, #+0] \ 0000001C 2400A0E3 MOV R0,#+36 \ 00000020 600D80E3 ORR R0,R0,#0x1800 \ 00000024 056080E0 ADD R6,R0,R5 \ 00000028 500080E3 ORR R0,R0,#0x50 \ 0000002C 057080E0 ADD R7,R0,R5 \ 00000030 1000C0E3 BIC R0,R0,#0x10 \ 00000034 058080E0 ADD R8,R0,R5 \ 00000038 900295E5 LDR R0,[R5, #+656] \ 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 800295E5 LDR R0,[R5, #+640] \ 0000008C 01B0A0E3 MOV R11,#+1 \ 00000090 94B285E5 STR R11,[R5, #+660] \ 00000094 020050E3 CMP R0,#+2 \ 00000098 04D08DE2 ADD SP,SP,#+4 \ 0000009C 0900000A BEQ ??away_timer_1 \ 000000A0 EC109FE5 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 980285E5 STR R0,[R5, #+664] 277 CurrentStatus=2; \ 000000B4 0200A0E3 MOV R0,#+2 \ 000000B8 800285E5 STR R0,[R5, #+640] 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 9CB285E5 STR R11,[R5, #+668] 284 } 285 } 286 287 if( (IsOnNAStatus) && (msg_away_timer==((AUTO_ENGADE*12)+(NAStatusTime*12))) )//Включить переключение на недоступен,в минутах \ ??away_timer_1: \ 000000C8 C8009FE5 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 BC209FE5 LDR R2,??away_timer_0+0xC ;; NAStatusTime \ 000000DC 00109AE5 LDR R1,[R10, #+0] \ 000000E0 002092E5 LDR R2,[R2, #+0] \ 000000E4 900295E5 LDR R0,[R5, #+656] \ 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 800295E5 LDR R0,[R5, #+640] \ 00000138 04D08DE2 ADD SP,SP,#+4 \ 0000013C 030050E3 CMP R0,#+3 \ 00000140 0400000A BEQ ??away_timer_2 294 { 295 status_rem=CurrentStatus; \ 00000144 980285E5 STR R0,[R5, #+664] 296 CurrentStatus=3; \ 00000148 0300A0E3 MOV R0,#+3 \ 0000014C 800285E5 STR R0,[R5, #+640] 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 3C209FE5 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 90029515 LDRNE R0,[R5, #+656] \ 00000170 401E81E3 ORR R1,R1,#0x400 \ 00000174 01008012 ADDNE R0,R0,#+1 \ 00000178 90028515 STRNE R0,[R5, #+656] \ 0000017C 8400A0E3 MOV R0,#+132 \ 00000180 600D80E3 ORR R0,R0,#0x1800 \ 00000184 050080E0 ADD R0,R0,R5 \ 00000188 4D0000EF SWI +77 308 } \ 0000018C F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return \ ??away_timer_0: \ 00000190 ........ DC32 `?` \ 00000194 ........ DC32 isAutoStatusOn \ 00000198 ........ DC32 IsOnNAStatus \ 0000019C ........ DC32 NAStatusTime \ 000001A0 ........ 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 + 6260 \ 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 + 6260 \ 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,??DataTable25 ;; S_ICONS \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 B40000EF SWI +180 \ 00000018 E4039FE5 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 D4139FE5 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 800284E5 STR R0,[R4, #+640] 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 24039FE5 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 18139FE5 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 800284E5 STR R0,[R4, #+640] 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 68029FE5 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 5C129FE5 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 800284E5 STR R0,[R4, #+640] 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 AC019FE5 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 A0119FE5 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 800284E5 STR R0,[R4, #+640] 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 F0009FE5 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 E4109FE5 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 805284E5 STR R5,[R4, #+640] 487 set_my_status(); \ 000003E4 ........ BL set_my_status 488 } 489 #ifdef ELKA 490 SetIconBarHandler(); 491 #endif 492 493 GBS_StartTimerProc(&autoChangeStatus, 216*10, AutoChangeStatus_timer); \ ??AutoChangeStatus_timer_66: \ 000003E8 3C209FE5 LDR R2,??AutoChangeStatus_timer_5+0x28 ;; AutoChangeStatus_timer \ 000003EC 871EA0E3 MOV R1,#+2160 \ 000003F0 9400A0E3 MOV R0,#+148 \ 000003F4 600D80E3 ORR R0,R0,#0x1800 \ 000003F8 040080E0 ADD R0,R0,R4 \ 000003FC 4D0000EF SWI +77 494 } \ 00000400 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??AutoChangeStatus_timer_5: \ 00000404 ........ DC32 status_1 \ 00000408 ........ DC32 tm_status_1 \ 0000040C ........ DC32 status_2 \ 00000410 ........ DC32 tm_status_2 \ 00000414 ........ DC32 status_3 \ 00000418 ........ DC32 tm_status_3 \ 0000041C ........ DC32 status_4 \ 00000420 ........ DC32 tm_status_4 \ 00000424 ........ DC32 status_5 \ 00000428 ........ DC32 tm_status_5 \ 0000042C ........ 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,??DataTable23 ;; spaco1 \ 00000004 ........ LDR R0,??DataTable25 ;; S_ICONS \ 00000008 00402DE9 PUSH {LR} \ 0000000C 001091E5 LDR R1,[R1, #+0] \ 00000010 02002DE9 PUSH {R1} \ 00000014 ........ LDR R1,??DataTable24 ;; fonto \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 02002DE9 PUSH {R1} \ 00000020 383290E5 LDR R3,[R0, #+568] \ 00000024 0C10A0E3 MOV R1,#+12 \ 00000028 581D81E3 ORR R1,R1,#0x1600 \ 0000002C 002081E0 ADD R2,R1,R0 \ 00000030 10009FE5 LDR R0,??DrawPing_0 ;; Ping_Y \ 00000034 001090E5 LDR R1,[R0, #+0] \ 00000038 0C009FE5 LDR R0,??DrawPing_0+0x4 ;; Ping_X \ 0000003C 000090E5 LDR R0,[R0, #+0] \ 00000040 ........ _BLF PrintField,??PrintField??rA 501 } \ 00000044 0380BDE8 POP {R0,R1,PC} ;; return \ ??DrawPing_0: \ 00000048 ........ DC32 Ping_Y \ 0000004C ........ 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,??DataTable25 ;; S_ICONS \ 00000008 080394E5 LDR R0,[R4, #+776] \ 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 D40284E5 STR R0,[R4, #+724] 519 start_vibra2(); \ 00000020 ........ BL start_vibra2 520 GBS_StartTimerProc(&remind_tmr, 6480, Remind_Timer2); \ 00000024 ........ LDR R2,??DataTable14 ;; Remind_Timer2 \ 00000028 5010A0E3 MOV R1,#+80 \ 0000002C 641D81E3 ORR R1,R1,#0x1900 \ 00000030 AC0041E2 SUB R0,R1,#+172 \ 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,??DataTable14 ;; Remind_Timer2 \ 00000004 10009FE5 LDR R0,??Reminder_timer_0 ;; S_ICONS + 6308 \ 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 + 6308 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,??DataTable25 ;; S_ICONS \ 00000004 B01290E5 LDR R1,[R0, #+688] 539 if(uptimeSec==60) \ 00000008 AC2290E5 LDR R2,[R0, #+684] \ 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 B01280E5 STR R1,[R0, #+688] 543 } 544 if(uptimeMin==60) \ 00000020 3C0052E3 CMP R2,#+60 \ 00000024 0300001A BNE ??UptimeMinHour_0 545 { 546 uptimeMin=0; 547 uptimeHour++; \ 00000028 A81290E5 LDR R1,[R0, #+680] \ 0000002C 0020A0E3 MOV R2,#+0 \ 00000030 011081E2 ADD R1,R1,#+1 \ 00000034 A81280E5 STR R1,[R0, #+680] \ ??UptimeMinHour_0: \ 00000038 AC2280E5 STR R2,[R0, #+684] 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,??DataTable25 ;; S_ICONS \ 00000008 84609FE5 LDR R6,??upTime_0 ;; upTime \ 0000000C B400A0E3 MOV R0,#+180 \ 00000010 600D80E3 ORR R0,R0,#0x1800 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 E40294E5 LDR R0,[R4, #+740] \ 0000001C 0070A0E3 MOV R7,#+0 \ 00000020 030050E3 CMP R0,#+3 \ 00000024 0F00001A BNE ??upTime_1 560 { 561 UptimeMinHour(); \ 00000028 ........ BL UptimeMinHour 562 #ifdef NEWSGOLD 563 if (tracktimer>=10)/*&&(_GetPlayStatus()!=1))*/ \ 0000002C B40294E5 LDR R0,[R4, #+692] \ 00000030 0A0050E3 CMP R0,#+10 \ 00000034 070000BA BLT ??upTime_2 564 { 565 GBS_StartTimerProc(&tracktmr, 216*5, GetTags); \ 00000038 ........ LDR R2,??DataTable17 ;; GetTags \ 0000003C 3810A0E3 MOV R1,#+56 \ 00000040 401E81E3 ORR R1,R1,#0x400 \ 00000044 C400A0E3 MOV R0,#+196 \ 00000048 600D80E3 ORR R0,R0,#0x1800 \ 0000004C 040080E0 ADD R0,R0,R4 \ 00000050 4D0000EF SWI +77 566 tracktimer=0; \ 00000054 B47284E5 STR R7,[R4, #+692] 567 } 568 tracktimer++; \ ??upTime_2: \ 00000058 B40294E5 LDR R0,[R4, #+692] \ 0000005C 010080E2 ADD R0,R0,#+1 \ 00000060 B40284E5 STR R0,[R4, #+692] 569 #endif 570 GBS_StartTimerProc(&uptime_tmr, 216, upTime); \ 00000064 050000EA B ??upTime_3 571 } 572 else 573 { 574 if(!Pause_Time) \ ??upTime_1: \ 00000068 28009FE5 LDR R0,??upTime_0+0x4 ;; Pause_Time \ 0000006C 000090E5 LDR R0,[R0, #+0] \ 00000070 000050E3 CMP R0,#+0 575 { 576 uptimeHour=0; \ 00000074 A8728405 STREQ R7,[R4, #+680] 577 uptimeMin=0; \ 00000078 AC728405 STREQ R7,[R4, #+684] 578 uptimeSec=0; \ 0000007C B0728405 STREQ R7,[R4, #+688] 579 } 580 GBS_StartTimerProc(&uptime_tmr, 216, upTime); \ ??upTime_3: \ 00000080 0620A0E1 MOV R2,R6 \ 00000084 D810A0E3 MOV R1,#+216 \ 00000088 0500A0E1 MOV R0,R5 \ 0000008C 4D0000EF SWI +77 581 } 582 } \ 00000090 F080BDE8 POP {R4-R7,PC} ;; return \ ??upTime_0: \ 00000094 ........ DC32 upTime \ 00000098 ........ 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,??DataTable25 ;; S_ICONS \ 0000000C D400A0E3 MOV R0,#+212 \ 00000010 600D80E3 ORR R0,R0,#0x1800 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 E40294E5 LDR R0,[R4, #+740] \ 0000001C 030050E3 CMP R0,#+3 \ 00000020 0700001A BNE ??DrawOnlineTime_1 588 { 589 sprintf(onlineTime,"Online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); \ 00000024 B00294E5 LDR R0,[R4, #+688] \ 00000028 01002DE9 PUSH {R0} \ 0000002C AC3294E5 LDR R3,[R4, #+684] \ 00000030 A82294E5 LDR R2,[R4, #+680] \ 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,??DataTable23 ;; spaco1 \ 00000054 0520A0E1 MOV R2,R5 \ 00000058 000090E5 LDR R0,[R0, #+0] \ 0000005C 01002DE9 PUSH {R0} \ 00000060 ........ LDR R0,??DataTable24 ;; fonto \ 00000064 000090E5 LDR R0,[R0, #+0] \ 00000068 01002DE9 PUSH {R0} \ 0000006C 383294E5 LDR R3,[R4, #+568] \ 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,??DataTable25 ;; S_ICONS \ 00000008 40D04DE2 SUB SP,SP,#+64 \ 0000000C 940294E5 LDR R0,[R4, #+660] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 1700000A BEQ ??DrawAutoMSG_0 \ 00000018 ........ LDR R0,??DataTable22 ;; 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 6400A0E3 MOV R0,#+100 \ 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,??DataTable23 ;; spaco1 \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 01002DE9 PUSH {R0} \ 0000004C ........ LDR R0,??DataTable24 ;; fonto \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 01002DE9 PUSH {R0} \ 00000058 383294E5 LDR R3,[R4, #+568] \ 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,??DataTable25 ;; 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,??DataTable28 ;; 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,??DataTable27 ;; 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 900284E5 STR R0,[R4, #+656] 645 away_m=1; \ 000000A0 0100A0E3 MOV R0,#+1 \ 000000A4 940284E5 STR R0,[R4, #+660] 646 away_timer(); \ 000000A8 ........ BL away_timer 647 UpdateCLheader(); \ 000000AC ........ BL UpdateCLheader 648 GeneralFunc_flag1(input_awaymsg_id,1); \ 000000B0 B80294E5 LDR R0,[R4, #+696] \ 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 9C0294E5 LDR R0,[R4, #+668] \ 000000D0 905284E5 STR R5,[R4, #+656] \ 000000D4 945284E5 STR R5,[R4, #+660] \ 000000D8 000050E3 CMP R0,#+0 \ 000000DC 0300000A BEQ ??input_awaymsg_onkey_5 657 { 658 CurrentStatus=status_rem; \ 000000E0 980294E5 LDR R0,[R4, #+664] \ 000000E4 800284E5 STR R0,[R4, #+640] 659 set_my_status(); \ 000000E8 ........ BL set_my_status 660 change_back_status=0; \ 000000EC 9C5284E5 STR R5,[R4, #+668] 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,??DataTable28 ;; 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 010080E2 ADD R0,R0,#+1 \ 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 + 696 \ 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 + 696 747 748 749 //////////////////////////uptime////////////////////////// 750 #ifdef ELKA 751 GBSTMR sli_tmr; 752 void SLI_On() 753 { 754 if(Is_SLI_On) 755 SLI_SetState(1); 756 GBS_StartTimerProc(&sli_tmr, IN_TICKS(2) / 20, SLI_Off); 757 } 758 759 void SLI_Off() 760 { 761 SLI_SetState(2); 762 if(total_unread) 763 GBS_StartTimerProc(&sli_tmr, IN_TICKS(2) / 20, SLI_On); //26*SLI_time2 764 else 765 SLI_SetState(0); 766 } 767 768 void SLI_check() 769 { 770 if (total_unread) 771 SLI_On(); 772 } 773 774 void SLI_Timer() 775 { 776 GBS_StartTimerProc(&sli_tmr, 262, SLI_check); //262*SLI_time 777 } 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,??DataTable31 ;; 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,??DataTable57 ;; 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,??DataTable56 ;; S_ICONS \ 00000010 D41290E5 LDR R1,[R0, #+724] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 D41280E5 STR R1,[R0, #+724] \ 0000001C 0080BD08 POPEQ {PC} 1076 { 1077 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra_0 ;; start_vibra \ 00000024 6410A0E3 MOV R1,#+100 \ 00000028 681D81E3 ORR R1,R1,#0x1A00 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable48 ;; 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,??DataTable45 ;; vibraPower \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 7C0000EF SWI +124 1089 if(VIBR_TYPE) \ 00000010 ........ LDR R1,??DataTable48 ;; VIBR_TYPE \ 00000014 18009FE5 LDR R0,??start_vibra2_0 ;; S_ICONS + 6756 \ 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 + 6756 \ 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,??DataTable56 ;; S_ICONS \ 00000010 D41290E5 LDR R1,[R0, #+724] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 D41280E5 STR R1,[R0, #+724] \ 0000001C 0080BD08 POPEQ {PC} 1099 { 1100 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra2_0 ;; start_vibra2 \ 00000024 6410A0E3 MOV R1,#+100 \ 00000028 681D81E3 ORR R1,R1,#0x1A00 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable48 ;; 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,??DataTable56 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 781290E5 LDR R1,[R0, #+632] \ 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,??DataTable55 ;; 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,??DataTable56 ;; S_ICONS \ 000000EC 010087E2 ADD R0,R7,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 D80284E5 STR R0,[R4, #+728] \ 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 DC0294E5 LDR R0,[R4, #+732] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 DC0284E5 STR R0,[R4, #+732] \ 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 1199 void FreeBotMessage(void) 1200 { 1201 if (bot_lines) mfree(bot_lines); 1202 if (bot_chars) mfree(bot_chars); 1203 bot_lines=NULL; 1204 bot_chars=NULL; 1205 } 1206 1207 int LoadBotMessage(unsigned int uin) 1208 { 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); 1222 if (GetFileStats(fn,&stat,&ul)==-1) goto L1; 1223 if ((fsize=stat.size)<=0) goto L1; 1224 if ((f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul))==-1) 1225 { 1226 L1: 1227 strcpy(fn+i,"\\bot.txt"); 1228 if (GetFileStats(fn,&stat,&ul)==-1) return 0; 1229 if ((fsize=stat.size)<=0) return 0; 1230 f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul); 1231 } 1232 if (f==-1) return 0; 1233 p=bot_chars=malloc(fsize+1); 1234 p[fread(f,p,fsize,&ul)]=0; 1235 fclose(f,&ul); 1236 i=0; 1237 pp=p; 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; 1255 } 1256 p++; 1257 } 1258 return i; 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 901090E5 LDR R1,[R0, #+144] 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 800090E5 LDR R0,[R0, #+128] \ 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 905095E5 LDR R5,[R5, #+144] \ 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,??DataTable54 ;; S_ICONS + 780 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,??DataTable55 ;; 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,??DataTable56 ;; S_ICONS \ 00000008 40D04DE2 SUB SP,SP,#+64 \ 0000000C 901394E5 LDR R1,[R4, #+912] \ 00000010 31FF2FE1 BLX R1 1582 char s[64]; 1583 sprintf(s,"%s\\HEAD.png",ICON_PATH); \ 00000014 ........ LDR R2,??DataTable57 ;; ICON_PATH \ 00000018 64109FE5 LDR R1,??new_redraw_0 ;; `?` \ 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 0210A0E3 MOV R1,#+2 \ 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,??DataTable58 ;; fonto \ 00000060 000090E5 LDR R0,[R0, #+0] \ 00000064 01002DE9 PUSH {R0} \ 00000068 6400A0E3 MOV R0,#+100 \ 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) 1592 { 1593 case 0: ICON_HD=ICON_ALL_CAN_SEE; break; 1594 case 1: ICON_HD=ICON_NOBODY_CAN_SEE; break; 1595 case 2: ICON_HD=ICON_VISLIST_CAN_SEE; break; 1596 case 3: ICON_HD=ICON_INVISLIST_CANNOT_SEE; break; 1597 case 4: ICON_HD=ICON_CONTACTLIST_CAN_SEE; break; 1598 default : ICON_HD=ICON_HEAD; break; 1599 } 1600 int icon; 1601 icon=*(S_ICONS+ICON_HD); 1602 DrawImg(3,YDISP+3,icon); 1603 #endif 1604 } \ 0000007C 58D08DE2 ADD SP,SP,#+88 \ 00000080 3080BDE8 POP {R4,R5,PC} ;; return \ ??new_redraw_0: \ 00000084 ........ 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,??DataTable78 ;; S_ICONS \ 00000008 ........ LDR R6,??DataTable77 ;; Canvas \ 0000000C 98D04DE2 SUB SP,SP,#+152 \ 00000010 D410A0E3 MOV R1,#+212 \ 00000014 681D81E3 ORR R1,R1,#0x1A00 \ 00000018 071081E0 ADD R1,R1,R7 \ 0000001C 0C108DE5 STR R1,[SP, #+12] \ 00000020 9400A0E3 MOV R0,#+148 \ 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 1C80A0E3 MOV R8,#+28 \ 00000038 508E88E3 ORR R8,R8,#0x500 \ 0000003C 070088E0 ADD R0,R8,R7 \ 00000040 1B0000EF SWI +27 \ 00000044 000050E3 CMP R0,#+0 \ 00000048 0B00000A BEQ ??UpdateCLheader_1 1647 { 1648 zeromem(status,64); \ 0000004C 4010A0E3 MOV R1,#+64 \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 1D0100EF SWI +285 1649 strcpy(clm_hdr_text,key_clm_hdr_text); \ 00000058 380048E2 SUB R0,R8,#+56 \ 0000005C 061080E0 ADD R1,R0,R6 \ 00000060 0400A0E1 MOV R0,R4 \ 00000064 1A0000EF SWI +26 1650 strcat(clm_hdr_text,ContactT9Key); \ 00000068 071088E0 ADD R1,R8,R7 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 170000EF SWI +23 1651 strcpy(clmenu_sk_r,key_clmenu_sk_r); \ 00000074 221086E2 ADD R1,R6,#+34 \ 00000078 3D0100EA B ??UpdateCLheader_2 1652 } 1653 else 1654 { 1655 TTime the; 1656 GetDateTime(NULL,&the); \ ??UpdateCLheader_1: \ 0000007C 04108DE2 ADD R1,SP,#+4 \ 00000080 B40000EF SWI +180 1657 char t[64]; 1658 char s[32]; 1659 void Get_Online_total(); 1660 Get_Online_total(); \ 00000084 ........ BL Get_Online_total 1661 zeromem(clm_hdr_text,64); \ 00000088 4010A0E3 MOV R1,#+64 \ 0000008C 0400A0E1 MOV R0,R4 \ 00000090 1D0100EF SWI +285 1662 zeromem(status,64); \ 00000094 4010A0E3 MOV R1,#+64 \ 00000098 0500A0E1 MOV R0,R5 \ 0000009C 1D0100EF SWI +285 1663 switch(TIME_OR_MSG) \ 000000A0 ........ LDR R1,??DataTable66 ;; TIME_OR_MSG \ 000000A4 440048E2 SUB R0,R8,#+68 \ 000000A8 001091E5 LDR R1,[R1, #+0] \ 000000AC AA8F8FE2 ADR R8,??UpdateCLheader_3 ;; "[S]" \ 000000B0 AA9F8FE2 ADR R9,??UpdateCLheader_3+0x4 ;; "[V]" \ 000000B4 AAAF8FE2 ADR R10,??UpdateCLheader_3+0x8 ;; "[I]" \ 000000B8 AABF8FE2 ADR R11,??UpdateCLheader_3+0xC ;; "[A]" \ 000000BC 040051E3 CMP R1,#+4 \ 000000C0 2601008A BHI ??UpdateCLheader_4 \ 000000C4 022F8FE2 ADR R2,??UpdateCLheader_0 \ 000000C8 8110A0E1 MOV R1,R1, LSL #+1 \ 000000CC B12092E1 LDRH R2,[R2, R1] \ 000000D0 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??UpdateCLheader_0: \ 000000D4 02000B001100 DC16 +2,+11,+17,+24 \ 1800 \ 000000DC 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: \ 000000E0 0510DDE5 LDRB R1,[SP, #+5] \ 000000E4 062080E0 ADD R2,R0,R6 \ 000000E8 02002DE9 PUSH {R1} \ 000000EC 0830DDE5 LDRB R3,[SP, #+8] \ 000000F0 281086E2 ADD R1,R6,#+40 \ ??UpdateCLheader_6: \ 000000F4 0400A0E1 MOV R0,R4 \ ??UpdateCLheader_7: \ 000000F8 160000EF SWI +22 \ 000000FC 04D08DE2 ADD SP,SP,#+4 \ 00000100 1A0100EA 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: \ 00000104 641297E5 LDR R1,[R7, #+612] \ 00000108 062080E0 ADD R2,R0,R6 \ 0000010C 02002DE9 PUSH {R1} \ 00000110 083397E5 LDR R3,[R7, #+776] \ 00000114 381086E2 ADD R1,R6,#+56 \ 00000118 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: \ 0000011C 281397E5 LDR R1,[R7, #+808] \ 00000120 062080E0 ADD R2,R0,R6 \ 00000124 02002DE9 PUSH {R1} \ 00000128 2C3397E5 LDR R3,[R7, #+812] \ 0000012C 0400A0E1 MOV R0,R4 \ 00000130 381086E2 ADD R1,R6,#+56 \ 00000134 EFFFFFEA B ??UpdateCLheader_7 1673 break; 1674 case 3: 1675 { 1676 if(isShowTime) { sprintf(t,"[%02d:%02d]",the.hour,the.min); strcat(status,t); } \ ??UpdateCLheader_11: \ 00000138 48049FE5 LDR R0,??UpdateCLheader_12+0x4 ;; isShowTime \ 0000013C 000090E5 LDR R0,[R0, #+0] \ 00000140 000050E3 CMP R0,#+0 \ 00000144 0700000A BEQ ??UpdateCLheader_13 \ 00000148 0530DDE5 LDRB R3,[SP, #+5] \ 0000014C 0420DDE5 LDRB R2,[SP, #+4] \ 00000150 441086E2 ADD R1,R6,#+68 \ 00000154 58008DE2 ADD R0,SP,#+88 \ 00000158 160000EF SWI +22 \ 0000015C 58108DE2 ADD R1,SP,#+88 \ 00000160 0500A0E1 MOV R0,R5 \ 00000164 170000EF SWI +23 1677 if(isShowCont) { sprintf(s,"[%d/%d]",kopa_kontaktu,kopa_online); strcat(clm_hdr_text,s); } \ ??UpdateCLheader_13: \ 00000168 1C049FE5 LDR R0,??UpdateCLheader_12+0x8 ;; isShowCont \ 0000016C 000090E5 LDR R0,[R0, #+0] \ 00000170 000050E3 CMP R0,#+0 \ 00000174 0700000A BEQ ??UpdateCLheader_14 \ 00000178 283397E5 LDR R3,[R7, #+808] \ 0000017C 2C2397E5 LDR R2,[R7, #+812] \ 00000180 501086E2 ADD R1,R6,#+80 \ 00000184 38008DE2 ADD R0,SP,#+56 \ 00000188 160000EF SWI +22 \ 0000018C 38108DE2 ADD R1,SP,#+56 \ 00000190 0400A0E1 MOV R0,R4 \ 00000194 170000EF SWI +23 1678 if(isShowUnread) { sprintf(s,"[%d/%d]",total_unread,total_unread2); strcat(clm_hdr_text,s); } \ ??UpdateCLheader_14: \ 00000198 F0039FE5 LDR R0,??UpdateCLheader_12+0xC ;; isShowUnread \ 0000019C 000090E5 LDR R0,[R0, #+0] \ 000001A0 000050E3 CMP R0,#+0 \ 000001A4 0700000A BEQ ??UpdateCLheader_15 \ 000001A8 643297E5 LDR R3,[R7, #+612] \ 000001AC 082397E5 LDR R2,[R7, #+776] \ 000001B0 501086E2 ADD R1,R6,#+80 \ 000001B4 38008DE2 ADD R0,SP,#+56 \ 000001B8 160000EF SWI +22 \ 000001BC 38108DE2 ADD R1,SP,#+56 \ 000001C0 0400A0E1 MOV R0,R4 \ 000001C4 170000EF SWI +23 1679 if(isShowTime) strcat(clm_hdr_text,t); \ ??UpdateCLheader_15: \ 000001C8 B8039FE5 LDR R0,??UpdateCLheader_12+0x4 ;; isShowTime \ 000001CC 000090E5 LDR R0,[R0, #+0] \ 000001D0 000050E3 CMP R0,#+0 \ 000001D4 0200000A BEQ ??UpdateCLheader_16 \ 000001D8 58108DE2 ADD R1,SP,#+88 \ 000001DC 0400A0E1 MOV R0,R4 \ 000001E0 170000EF SWI +23 1680 if(away_m && isShowA) strcat(clm_hdr_text,"[A]"); \ ??UpdateCLheader_16: \ 000001E4 940297E5 LDR R0,[R7, #+660] \ 000001E8 000050E3 CMP R0,#+0 \ 000001EC 0600000A BEQ ??UpdateCLheader_17 \ 000001F0 9C039FE5 LDR R0,??UpdateCLheader_12+0x10 ;; isShowA \ 000001F4 000090E5 LDR R0,[R0, #+0] \ 000001F8 000050E3 CMP R0,#+0 \ 000001FC 0200000A BEQ ??UpdateCLheader_17 \ 00000200 0B10A0E1 MOV R1,R11 \ 00000204 0400A0E1 MOV R0,R4 \ 00000208 170000EF SWI +23 1681 if(CurrentPrivateStatus==1 && isShowI) strcat(clm_hdr_text,"[I]") ; \ ??UpdateCLheader_17: \ 0000020C D00297E5 LDR R0,[R7, #+720] \ 00000210 010050E3 CMP R0,#+1 \ 00000214 0600001A BNE ??UpdateCLheader_18 \ 00000218 78039FE5 LDR R0,??UpdateCLheader_12+0x14 ;; isShowI \ 0000021C 000090E5 LDR R0,[R0, #+0] \ 00000220 000050E3 CMP R0,#+0 \ 00000224 0200000A BEQ ??UpdateCLheader_18 \ 00000228 0A10A0E1 MOV R1,R10 \ 0000022C 0400A0E1 MOV R0,R4 \ 00000230 170000EF SWI +23 1682 if(Is_Vibra_Enabled && isShowV) strcat(clm_hdr_text,"[V]") ; \ ??UpdateCLheader_18: \ 00000234 780297E5 LDR R0,[R7, #+632] \ 00000238 000050E3 CMP R0,#+0 \ 0000023C 0600000A BEQ ??UpdateCLheader_19 \ 00000240 54039FE5 LDR R0,??UpdateCLheader_12+0x18 ;; isShowV \ 00000244 000090E5 LDR R0,[R0, #+0] \ 00000248 000050E3 CMP R0,#+0 \ 0000024C 0200000A BEQ ??UpdateCLheader_19 \ 00000250 0910A0E1 MOV R1,R9 \ 00000254 0400A0E1 MOV R0,R4 \ 00000258 170000EF SWI +23 1683 if(Is_Sounds_Enabled && isShowS) strcat(clm_hdr_text,"[S]") ; \ ??UpdateCLheader_19: \ 0000025C C40297E5 LDR R0,[R7, #+708] \ 00000260 000050E3 CMP R0,#+0 \ 00000264 0600000A BEQ ??UpdateCLheader_20 \ 00000268 30039FE5 LDR R0,??UpdateCLheader_12+0x1C ;; isShowS \ 0000026C 000090E5 LDR R0,[R0, #+0] \ 00000270 000050E3 CMP R0,#+0 \ 00000274 0200000A BEQ ??UpdateCLheader_20 \ 00000278 0810A0E1 MOV R1,R8 \ 0000027C 0400A0E1 MOV R0,R4 \ 00000280 170000EF SWI +23 1684 if(Is_Double_Vibra_On && isShowR) strcat(clm_hdr_text,"[R]") ; \ ??UpdateCLheader_20: \ 00000284 600297E5 LDR R0,[R7, #+608] \ 00000288 000050E3 CMP R0,#+0 \ 0000028C 0600000A BEQ ??UpdateCLheader_21 \ 00000290 0C039FE5 LDR R0,??UpdateCLheader_12+0x20 ;; isShowR \ 00000294 000090E5 LDR R0,[R0, #+0] \ 00000298 000050E3 CMP R0,#+0 \ 0000029C 0200000A BEQ ??UpdateCLheader_21 \ 000002A0 B71F8FE2 ADR R1,??UpdateCLheader_12 ;; "[R]" \ 000002A4 0400A0E1 MOV R0,R4 \ 000002A8 170000EF SWI +23 1685 if(Show_XTX && isShowTmXs) strcat(clm_hdr_text,"[Xs]"); \ ??UpdateCLheader_21: \ 000002AC F4029FE5 LDR R0,??UpdateCLheader_12+0x24 ;; isShowTmXs \ 000002B0 A01297E5 LDR R1,[R7, #+672] \ 000002B4 000090E5 LDR R0,[R0, #+0] \ 000002B8 000051E3 CMP R1,#+0 \ 000002BC 00005013 CMPNE R0,#+0 \ 000002C0 58108612 ADDNE R1,R6,#+88 \ 000002C4 0200001A BNE ??UpdateCLheader_22 1686 else if(isShowTmXs) strcat(clm_hdr_text,"[Tm]"); \ 000002C8 000050E3 CMP R0,#+0 \ 000002CC 0200000A BEQ ??UpdateCLheader_23 \ 000002D0 601086E2 ADD R1,R6,#+96 \ ??UpdateCLheader_22: \ 000002D4 0400A0E1 MOV R0,R4 \ 000002D8 170000EF SWI +23 1687 if(isShowBat) \ ??UpdateCLheader_23: \ 000002DC C8029FE5 LDR R0,??UpdateCLheader_12+0x28 ;; isShowBat \ 000002E0 000090E5 LDR R0,[R0, #+0] \ 000002E4 000050E3 CMP R0,#+0 \ 000002E8 A000000A BEQ ??UpdateCLheader_8 1688 { 1689 int bat=*RamCap(); \ 000002EC C88000EF SWI +32968 \ 000002F0 B020D0E1 LDRH R2,[R0, #+0] 1690 char s[4]; 1691 sprintf(s,"[%d%%]",bat); \ 000002F4 681086E2 ADD R1,R6,#+104 \ 000002F8 0D00A0E1 MOV R0,SP \ 000002FC 160000EF SWI +22 1692 strcat(clm_hdr_text,s); \ 00000300 0D10A0E1 MOV R1,SP \ 00000304 0400A0E1 MOV R0,R4 \ 00000308 170000EF SWI +23 \ 0000030C 970000EA B ??UpdateCLheader_8 1693 } 1694 1695 } 1696 break; 1697 case 4://png 1698 { 1699 #ifdef kluchnik 1700 char A_s[]="[A [%s] ]"; 1701 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l 1702 if(on_off_timer > 0 && strlen(on_off_buf)!=0) 1703 sprintf(status,on_off_buf); 1704 else 1705 { 1706 sprintf(status, "[Rx:%db/Tx:%db/Queue:%db]\n",RX,TX,sendq_l); 1707 } 1708 sprintf(t,"[%d/%d] [%d/%d] ",kopa_kontaktu, kopa_online,total_unread,total_unread2); 1709 strcat(status,t); 1710 if(away_m && isShowA) { sprintf(t,A_s,away_msg_time_dace); strcat(status,t); } 1711 #else 1712 char s[32]; 1713 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l \ ??UpdateCLheader_24: \ 00000310 F41297E5 LDR R1,[R7, #+756] \ 00000314 10108DE5 STR R1,[SP, #+16] \ 00000318 F81297E5 LDR R1,[R7, #+760] \ 0000031C 14108DE5 STR R1,[SP, #+20] 1714 #ifdef NEWSGOLD 1715 if(on_off_timer>0 && strlen(on_off_buf)!=0) \ 00000320 240397E5 LDR R0,[R7, #+804] \ 00000324 010050E3 CMP R0,#+1 \ 00000328 0F0000BA BLT ??UpdateCLheader_25 \ 0000032C E410A0E3 MOV R1,#+228 \ 00000330 681D81E3 ORR R1,R1,#0x1A00 \ 00000334 071081E0 ADD R1,R1,R7 \ 00000338 00108DE5 STR R1,[SP, #+0] \ 0000033C 0100A0E1 MOV R0,R1 \ 00000340 1B0000EF SWI +27 \ 00000344 000050E3 CMP R0,#+0 \ 00000348 0700000A BEQ ??UpdateCLheader_25 1716 sprintf(status,on_off_buf); \ 0000034C 00109DE5 LDR R1,[SP, #+0] \ 00000350 0500A0E1 MOV R0,R5 \ 00000354 160000EF SWI +22 \ 00000358 0E0000EA B ??UpdateCLheader_26 \ ??UpdateCLheader_3: \ 0000035C 5B535D00 DC8 "[S]" \ 00000360 5B565D00 DC8 "[V]" \ 00000364 5B495D00 DC8 "[I]" \ 00000368 5B415D00 DC8 "[A]" 1717 else 1718 if(ShowTraff) \ ??UpdateCLheader_25: \ 0000036C 3C029FE5 LDR R0,??UpdateCLheader_12+0x2C ;; ShowTraff \ 00000370 000090E5 LDR R0,[R0, #+0] \ 00000374 000050E3 CMP R0,#+0 \ 00000378 0600000A BEQ ??UpdateCLheader_26 1719 sprintf(status, "[T:%db/Queue:%db]\n",RX+TX,sendq_l); \ 0000037C FC3297E5 LDR R3,[R7, #+764] \ 00000380 10009DE5 LDR R0,[SP, #+16] \ 00000384 14109DE5 LDR R1,[SP, #+20] \ 00000388 002081E0 ADD R2,R1,R0 \ 0000038C 701086E2 ADD R1,R6,#+112 \ 00000390 0500A0E1 MOV R0,R5 \ 00000394 160000EF SWI +22 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); } \ ??UpdateCLheader_26: \ 00000398 E8019FE5 LDR R0,??UpdateCLheader_12+0x4 ;; isShowTime \ 0000039C 000090E5 LDR R0,[R0, #+0] \ 000003A0 000050E3 CMP R0,#+0 \ 000003A4 0700000A BEQ ??UpdateCLheader_27 \ 000003A8 0530DDE5 LDRB R3,[SP, #+5] \ 000003AC 0420DDE5 LDRB R2,[SP, #+4] \ 000003B0 441086E2 ADD R1,R6,#+68 \ 000003B4 58008DE2 ADD R0,SP,#+88 \ 000003B8 160000EF SWI +22 \ 000003BC 58108DE2 ADD R1,SP,#+88 \ 000003C0 0500A0E1 MOV R0,R5 \ 000003C4 170000EF SWI +23 1729 if(isShowCont) { sprintf(s,"[%d/%d]",kopa_kontaktu,kopa_online); strcat(status,s); } \ ??UpdateCLheader_27: \ 000003C8 BC019FE5 LDR R0,??UpdateCLheader_12+0x8 ;; isShowCont \ 000003CC 000090E5 LDR R0,[R0, #+0] \ 000003D0 000050E3 CMP R0,#+0 \ 000003D4 0700000A BEQ ??UpdateCLheader_28 \ 000003D8 283397E5 LDR R3,[R7, #+808] \ 000003DC 2C2397E5 LDR R2,[R7, #+812] \ 000003E0 501086E2 ADD R1,R6,#+80 \ 000003E4 18008DE2 ADD R0,SP,#+24 \ 000003E8 160000EF SWI +22 \ 000003EC 18108DE2 ADD R1,SP,#+24 \ 000003F0 0500A0E1 MOV R0,R5 \ 000003F4 170000EF SWI +23 1730 if(isShowUnread) { sprintf(s,"[%d/%d]",total_unread,total_unread2); strcat(status,s); } \ ??UpdateCLheader_28: \ 000003F8 90019FE5 LDR R0,??UpdateCLheader_12+0xC ;; isShowUnread \ 000003FC 000090E5 LDR R0,[R0, #+0] \ 00000400 000050E3 CMP R0,#+0 \ 00000404 0700000A BEQ ??UpdateCLheader_29 \ 00000408 643297E5 LDR R3,[R7, #+612] \ 0000040C 082397E5 LDR R2,[R7, #+776] \ 00000410 501086E2 ADD R1,R6,#+80 \ 00000414 18008DE2 ADD R0,SP,#+24 \ 00000418 160000EF SWI +22 \ 0000041C 18108DE2 ADD R1,SP,#+24 \ 00000420 0500A0E1 MOV R0,R5 \ 00000424 170000EF SWI +23 1731 if(away_m && isShowA) { /* sprintf(t,A_s,away_msg_time_dace);*/ strcat(status,"[A]"); } \ ??UpdateCLheader_29: \ 00000428 940297E5 LDR R0,[R7, #+660] \ 0000042C 000050E3 CMP R0,#+0 \ 00000430 0600000A BEQ ??UpdateCLheader_30 \ 00000434 58019FE5 LDR R0,??UpdateCLheader_12+0x10 ;; isShowA \ 00000438 000090E5 LDR R0,[R0, #+0] \ 0000043C 000050E3 CMP R0,#+0 \ 00000440 0200000A BEQ ??UpdateCLheader_30 \ 00000444 0B10A0E1 MOV R1,R11 \ 00000448 0500A0E1 MOV R0,R5 \ 0000044C 170000EF SWI +23 1732 #endif 1733 1734 if(CurrentPrivateStatus==1 && isShowI) strcat(status,"[I]"); \ ??UpdateCLheader_30: \ 00000450 D00297E5 LDR R0,[R7, #+720] \ 00000454 010050E3 CMP R0,#+1 \ 00000458 0600001A BNE ??UpdateCLheader_31 \ 0000045C 34019FE5 LDR R0,??UpdateCLheader_12+0x14 ;; isShowI \ 00000460 000090E5 LDR R0,[R0, #+0] \ 00000464 000050E3 CMP R0,#+0 \ 00000468 0200000A BEQ ??UpdateCLheader_31 \ 0000046C 0A10A0E1 MOV R1,R10 \ 00000470 0500A0E1 MOV R0,R5 \ 00000474 170000EF SWI +23 1735 if(Is_Vibra_Enabled && isShowV) strcat(status,"[V]"); \ ??UpdateCLheader_31: \ 00000478 780297E5 LDR R0,[R7, #+632] \ 0000047C 000050E3 CMP R0,#+0 \ 00000480 0600000A BEQ ??UpdateCLheader_32 \ 00000484 10019FE5 LDR R0,??UpdateCLheader_12+0x18 ;; isShowV \ 00000488 000090E5 LDR R0,[R0, #+0] \ 0000048C 000050E3 CMP R0,#+0 \ 00000490 0200000A BEQ ??UpdateCLheader_32 \ 00000494 0910A0E1 MOV R1,R9 \ 00000498 0500A0E1 MOV R0,R5 \ 0000049C 170000EF SWI +23 1736 if(Is_Sounds_Enabled && isShowS) strcat(status,"[S]"); \ ??UpdateCLheader_32: \ 000004A0 C40297E5 LDR R0,[R7, #+708] \ 000004A4 000050E3 CMP R0,#+0 \ 000004A8 0600000A BEQ ??UpdateCLheader_33 \ 000004AC EC009FE5 LDR R0,??UpdateCLheader_12+0x1C ;; isShowS \ 000004B0 000090E5 LDR R0,[R0, #+0] \ 000004B4 000050E3 CMP R0,#+0 \ 000004B8 0200000A BEQ ??UpdateCLheader_33 \ 000004BC 0810A0E1 MOV R1,R8 \ 000004C0 0500A0E1 MOV R0,R5 \ 000004C4 170000EF SWI +23 1737 if(Is_Double_Vibra_On && isShowR) strcat(status,"[R]"); \ ??UpdateCLheader_33: \ 000004C8 600297E5 LDR R0,[R7, #+608] \ 000004CC 000050E3 CMP R0,#+0 \ 000004D0 0600000A BEQ ??UpdateCLheader_34 \ 000004D4 C8009FE5 LDR R0,??UpdateCLheader_12+0x20 ;; isShowR \ 000004D8 000090E5 LDR R0,[R0, #+0] \ 000004DC 000050E3 CMP R0,#+0 \ 000004E0 0200000A BEQ ??UpdateCLheader_34 \ 000004E4 261F8FE2 ADR R1,??UpdateCLheader_12 ;; "[R]" \ 000004E8 0500A0E1 MOV R0,R5 \ 000004EC 170000EF SWI +23 1738 if(Show_XTX && isShowTmXs) strcat(status,"[Xs]"); \ ??UpdateCLheader_34: \ 000004F0 B0009FE5 LDR R0,??UpdateCLheader_12+0x24 ;; isShowTmXs \ 000004F4 A01297E5 LDR R1,[R7, #+672] \ 000004F8 000090E5 LDR R0,[R0, #+0] \ 000004FC 000051E3 CMP R1,#+0 \ 00000500 00005013 CMPNE R0,#+0 \ 00000504 58108612 ADDNE R1,R6,#+88 \ 00000508 0200001A BNE ??UpdateCLheader_35 1739 else 1740 if(isShowTmXs) strcat(status,"[Tm]"); \ 0000050C 000050E3 CMP R0,#+0 \ 00000510 0200000A BEQ ??UpdateCLheader_36 \ 00000514 601086E2 ADD R1,R6,#+96 \ ??UpdateCLheader_35: \ 00000518 0500A0E1 MOV R0,R5 \ 0000051C 170000EF SWI +23 1741 if(isShowBat) \ ??UpdateCLheader_36: \ 00000520 84009FE5 LDR R0,??UpdateCLheader_12+0x28 ;; isShowBat \ 00000524 000090E5 LDR R0,[R0, #+0] \ 00000528 000050E3 CMP R0,#+0 \ 0000052C 0700000A BEQ ??UpdateCLheader_37 1742 { 1743 int bat=*RamCap(); \ 00000530 C88000EF SWI +32968 \ 00000534 B020D0E1 LDRH R2,[R0, #+0] 1744 char s[4]; 1745 sprintf(s,"[%d%%]",bat); \ 00000538 681086E2 ADD R1,R6,#+104 \ 0000053C 0D00A0E1 MOV R0,SP \ 00000540 160000EF SWI +22 1746 strcat(status,s); \ 00000544 0D10A0E1 MOV R1,SP \ 00000548 0500A0E1 MOV R0,R5 \ 0000054C 170000EF SWI +23 1747 } 1748 zeromem(clm_hdr_text,64); \ ??UpdateCLheader_37: \ 00000550 4010A0E3 MOV R1,#+64 \ 00000554 0400A0E1 MOV R0,R4 \ 00000558 1D0100EF SWI +285 \ 0000055C 030000EA B ??UpdateCLheader_8 1749 } 1750 break; 1751 default : 1752 sprintf(clm_hdr_text, percent_s,def_clm_hdr_text); \ ??UpdateCLheader_4: \ 00000560 062080E0 ADD R2,R0,R6 \ 00000564 1B1086E2 ADD R1,R6,#+27 \ 00000568 0400A0E1 MOV R0,R4 \ 0000056C 160000EF SWI +22 1753 break; 1754 } 1755 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ ??UpdateCLheader_8: \ 00000570 4F1E86E2 ADD R1,R6,#+1264 \ ??UpdateCLheader_2: \ 00000574 0C009DE5 LDR R0,[SP, #+12] \ 00000578 1A0000EF SWI +26 1756 } 1757 } \ 0000057C 98D08DE2 ADD SP,SP,#+152 \ 00000580 F08FBDE8 POP {R4-R11,PC} ;; return \ ??UpdateCLheader_12: \ 00000584 5B525D00 DC8 "[R]" \ 00000588 ........ DC32 isShowTime \ 0000058C ........ DC32 isShowCont \ 00000590 ........ DC32 isShowUnread \ 00000594 ........ DC32 isShowA \ 00000598 ........ DC32 isShowI \ 0000059C ........ DC32 isShowV \ 000005A0 ........ DC32 isShowS \ 000005A4 ........ DC32 isShowR \ 000005A8 ........ DC32 isShowTmXs \ 000005AC ........ DC32 isShowBat \ 000005B0 ........ DC32 ShowTraff 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 + 1308 \ 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 + 1308 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,??DataTable78 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 1C00A0E3 MOV R0,#+28 \ 00000010 500E80E3 ORR R0,R0,#0x500 \ 00000014 050080E0 ADD R0,R0,R5 \ 00000018 1B0000EF SWI +27 1767 if (l<(sizeof(ContactT9Key)-1)) \ 0000001C 1F0050E3 CMP R0,#+31 1768 { 1769 ContactT9Key[l]=chr; \ 00000020 05008030 ADDCC R0,R0,R5 \ 00000024 1C45C035 STRBCC R4,[R0, #+1308] 1770 } 1771 } \ 00000028 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,??DataTable78 ;; S_ICONS \ 00000008 1C00A0E3 MOV R0,#+28 \ 0000000C 500E80E3 ORR R0,R0,#0x500 \ 00000010 040080E0 ADD R0,R0,R4 \ 00000014 1B0000EF SWI +27 1776 if (l) \ 00000018 000050E3 CMP R0,#+0 1777 { 1778 l--; 1779 ContactT9Key[l]=0; \ 0000001C 04008010 ADDNE R0,R0,R4 \ 00000020 0010A013 MOVNE R1,#+0 \ 00000024 1B15C015 STRBNE R1,[R0, #+1307] 1780 } 1781 } \ 00000028 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,??DataTable78 ;; 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 1C4385E5 STR R4,[R5, #+796] \ 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 140385E5 STR R0,[R5, #+788] 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,??DataTable78 ;; 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 980398E5 LDR R0,[R8, #+920] \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 94039805 LDREQ R0,[R8, #+916] \ 00000030 00005003 CMPEQ R0,#+0 \ 00000034 1600000A BEQ ??contactlist_menu_ghook_0 \ 00000038 ........ LDR R0,??DataTable66 ;; TIME_OR_MSG \ 0000003C 000090E5 LDR R0,[R0, #+0] \ 00000040 040050E3 CMP R0,#+4 \ 00000044 1200001A BNE ??contactlist_menu_ghook_0 1809 { 1810 if(!(strlen(ContactT9Key))) \ 00000048 1C00A0E3 MOV R0,#+28 \ 0000004C 500E80E3 ORR R0,R0,#0x500 \ 00000050 080080E0 ADD R0,R0,R8 \ 00000054 1B0000EF SWI +27 \ 00000058 000050E3 CMP R0,#+0 \ 0000005C 0A00001A BNE ??contactlist_menu_ghook_1 1811 { 1812 GUI * gui=(GUI*)data; 1813 memcpy(&gui_methods2,gui->methods,nmeth*4); \ 00000060 041094E5 LDR R1,[R4, #+4] \ 00000064 CC9FA0E3 MOV R9,#+816 \ 00000068 6020A0E3 MOV R2,#+96 \ 0000006C 080089E0 ADD R0,R9,R8 \ 00000070 1E0100EF SWI +286 1814 gui->methods=&gui_methods2; \ 00000074 080089E0 ADD R0,R9,R8 \ 00000078 040084E5 STR R0,[R4, #+4] 1815 old_redraw=gui_methods2[0]; \ 0000007C 080099E7 LDR R0,[R9, +R8] \ 00000080 900388E5 STR R0,[R8, #+912] 1816 gui_methods2[0]=(void*)&new_redraw; \ 00000084 28009FE5 LDR R0,??contactlist_menu_ghook_2 ;; new_redraw \ 00000088 080089E7 STR R0,[R9, +R8] 1817 } 1818 unhooked=0; \ ??contactlist_menu_ghook_1: \ 0000008C 987388E5 STR R7,[R8, #+920] 1819 unhooked2=0; \ 00000090 947388E5 STR R7,[R8, #+916] 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: \ 00000094 0A0055E3 CMP R5,#+10 \ 00000098 F083BD18 POPNE {R4-R9,PC} 1839 { 1840 silenthide=0; 1841 pltop->dyn_pltop=XStatusesImgList; \ 0000009C ........ LDR R0,??DataTable67 ;; XStatusesImgList \ 000000A0 BC7288E5 STR R7,[R8, #+700] \ 000000A4 000090E5 LDR R0,[R0, #+0] \ 000000A8 080086E5 STR R0,[R6, #+8] 1842 DisableIDLETMR(); \ 000000AC 7F0100EF SWI +383 1843 } 1844 } \ 000000B0 F083BDE8 POP {R4-R9,PC} ;; return \ ??contactlist_menu_ghook_2: \ 000000B4 ........ 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,??DataTable78 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 ........ BL UpdateCLheader \ 00000014 140396E5 LDR R0,[R6, #+788] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C F080BD08 POPEQ {R4-R7,PC} 1853 data=FindGUIbyId(contactlist_menu_id,NULL); \ 00000020 140396E5 LDR R0,[R6, #+788] \ 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 1C1396E5 LDR R1,[R6, #+796] \ 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 1C0386E5 STR R0,[R6, #+796] 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 140396E5 LDR R0,[R6, #+788] \ 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,??DataTable72 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1890 t->isvibra=!(t->isvibra); \ 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] 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,??DataTable72 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1898 t->issound=!(t->issound); \ 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] 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,??DataTable72 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1906 t->isautomsg=!(t->isautomsg); \ 00000010 641090E5 LDR R1,[R0, #+100] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 641080E5 STR R1,[R0, #+100] 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,??DataTable72 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1914 t->isShowXst=!(t->isShowXst); \ 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] 1915 RefreshGUI(); \ 00000024 960100EF SWI +406 1916 } \ 00000028 0080BDE8 POP {PC} ;; return 1917 1918 #ifdef kluchnik 1919 1920 static void ChangeAccess(GUI *data) 1921 { 1922 CLIST *t; 1923 t=FindContactByUin(uinContact); 1924 t->isaccess=!(t->isaccess); 1925 RefreshGUI(); 1926 } 1927 1928 1929 static void ChangeAwaySignal(GUI *data) 1930 { 1931 CLIST *t; 1932 t=FindContactByUin(uinContact); 1933 t->automsgcount=automsgcount; 1934 RefreshGUI(); 1935 } 1936 1937 static void ChangeAutobot(GUI *data) 1938 { 1939 CLIST *t; 1940 t=FindContactByUin(uinContact); 1941 t->isautobot=!(t->isautobot); 1942 RefreshGUI(); 1943 } 1944 1945 static void ChangeLoadHistory(GUI *data) 1946 { 1947 CLIST *t; 1948 t=FindContactByUin(uinContact); 1949 t->isLoadHistory=!(t->isLoadHistory); 1950 RefreshGUI(); 1951 } 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 581080E5 STR R1,[R0, #+88] 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,??DataTable77 ;; Canvas \ 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 089090E5 LDR R9,[R0, #+8] \ 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 181088E2 ADD R1,R8,#+24 2018 CLIST *t; 2019 t=FindContactByUin(uinContact); \ 00000038 ........ LDR R8,??DataTable75 ;; 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 0510B0E1 MOVS R1,R5 \ 00000054 0600000A BEQ ??contacthandler_0 \ 00000058 011055E2 SUBS R1,R5,#+1 \ 0000005C 0600000A BEQ ??contacthandler_1 \ 00000060 011051E2 SUBS R1,R1,#+1 \ 00000064 0600000A BEQ ??contacthandler_2 \ 00000068 011051E2 SUBS R1,R1,#+1 \ 0000006C 0600000A BEQ ??contacthandler_3 \ 00000070 0D0000EA B ??contacthandler_4 2021 { 2022 case 0: 2023 SetMenuItemIconArray(data,item,icon_array+(t->isvibra?0:1)); \ ??contacthandler_0: \ 00000074 5C0090E5 LDR R0,[R0, #+92] \ 00000078 040000EA B ??contacthandler_5 2024 break; 2025 case 1: 2026 SetMenuItemIconArray(data,item,icon_array+(t->issound?0:1)); \ ??contacthandler_1: \ 0000007C 600090E5 LDR R0,[R0, #+96] \ 00000080 020000EA B ??contacthandler_5 2027 break; 2028 case 2: 2029 SetMenuItemIconArray(data,item,icon_array+(t->isautomsg?0:1)); \ ??contacthandler_2: \ 00000084 640090E5 LDR R0,[R0, #+100] \ 00000088 000000EA B ??contacthandler_5 2030 break; 2031 case 3: 2032 SetMenuItemIconArray(data,item,icon_array+(t->isShowXst?0:1)); \ ??contacthandler_3: \ 0000008C 6C0090E5 LDR R0,[R0, #+108] \ ??contacthandler_5: \ 00000090 0610A0E1 MOV R1,R6 \ 00000094 000050E3 CMP R0,#+0 \ 00000098 0000A013 MOVNE R0,#+0 \ 0000009C 0100A003 MOVEQ R0,#+1 \ 000000A0 002188E0 ADD R2,R8,R0, LSL #+2 \ 000000A4 0400A0E1 MOV R0,R4 \ 000000A8 990100EF SWI +409 2033 break; 2034 #ifdef kluchnik 2035 case 4: 2036 SetMenuItemIconArray(data,item,icon_array+(t->isaccess?0:1)); 2037 break; 2038 case 5: 2039 SetMenuItemIconArray(data,item,icon_array+(t->automsgcount?0:1)); 2040 break; 2041 case 6: 2042 SetMenuItemIconArray(data,item,icon_array+(t->isLoadHistory?0:1)); 2043 break; 2044 case 7: 2045 SetMenuItemIconArray(data,item,icon_array+(t->isautobot?0:1)); 2046 break; 2047 #endif 2048 } 2049 SetMenuItemText(data, item, ws, curitem); \ ??contacthandler_4: \ 000000AC 0530A0E1 MOV R3,R5 \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0610A0E1 MOV R1,R6 \ 000000B8 0400A0E1 MOV R0,R4 \ 000000BC 9A0100EF SWI +410 2050 } \ 000000C0 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,??DataTable75 ;; 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 ;; `?next)) 2138 { 2139 if(cl->log) \ ??LongPressActionOnChat_10: \ 00000128 900098E5 LDR R0,[R8, #+144] \ 0000012C 000050E3 CMP R0,#+0 \ 00000130 0300000A BEQ ??LongPressActionOnChat_9 2140 { 2141 FreeLOGQ(&cl->log); \ 00000134 900088E2 ADD R0,R8,#+144 \ 00000138 ........ BL FreeLOGQ 2142 cl->msg_count=0; \ 0000013C A04088E5 STR R4,[R8, #+160] 2143 cl->isactive=0; \ 00000140 9C4088E5 STR R4,[R8, #+156] 2144 } 2145 } \ ??LongPressActionOnChat_9: \ 00000144 008098E5 LDR R8,[R8, #+0] \ 00000148 000058E3 CMP R8,#+0 \ 0000014C F5FFFF1A BNE ??LongPressActionOnChat_10 2146 if(strlen(ContactT9Key)) ClearContactT9Key(); \ 00000150 070086E0 ADD R0,R6,R7 \ 00000154 1B0000EF SWI +27 \ 00000158 000050E3 CMP R0,#+0 \ 0000015C 0200000A BEQ ??LongPressActionOnChat_11 \ 00000160 2010A0E3 MOV R1,#+32 \ 00000164 070086E0 ADD R0,R6,R7 \ 00000168 1D0100EF SWI +285 2147 RecountMenu(NULL,1); \ ??LongPressActionOnChat_11: \ 0000016C 0110A0E3 MOV R1,#+1 \ 00000170 0400A0E1 MOV R0,R4 \ 00000174 ........ BL RecountMenu 2148 ShowMSG(1,(int)"All chat clear!"); \ 00000178 F41085E2 ADD R1,R5,#+244 \ ??LongPressActionOnChat_5: \ 0000017C 0B00A0E1 MOV R0,R11 \ ??LongPressActionOnChat_6: \ 00000180 480100EF SWI +328 \ 00000184 F18FBDE8 POP {R0,R4-R11,PC} 2149 break; 2150 } 2151 case 6: 2152 if(!away_m) \ ??LongPressActionOnChat_12: \ 00000188 940297E5 LDR R0,[R7, #+660] \ 0000018C 000050E3 CMP R0,#+0 \ 00000190 0C00001A BNE ??LongPressActionOnChat_13 2153 { 2154 away_m=!away_m; \ 00000194 94B287E5 STR R11,[R7, #+660] 2155 GBS_StopTimer(&away_tmr); \ 00000198 8400A0E3 MOV R0,#+132 \ 0000019C 600D80E3 ORR R0,R0,#0x1800 \ 000001A0 070080E0 ADD R0,R0,R7 \ 000001A4 440100EF SWI +324 2156 msg_away_timer=AUTO_ENGADE*12; \ 000001A8 ........ LDR R0,??DataTable79 ;; AUTO_ENGADE \ 000001AC 0C10A0E3 MOV R1,#+12 \ 000001B0 000090E5 LDR R0,[R0, #+0] \ 000001B4 910000E0 MUL R0,R1,R0 \ 000001B8 900287E5 STR R0,[R7, #+656] 2157 InputAwayMsg(); \ 000001BC ........ BL InputAwayMsg \ 000001C0 ........ BL UpdateCLheader \ 000001C4 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: \ 000001C8 9C0297E5 LDR R0,[R7, #+668] \ 000001CC 904287E5 STR R4,[R7, #+656] \ 000001D0 944287E5 STR R4,[R7, #+660] \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 0300000A BEQ ??LongPressActionOnChat_14 2165 { 2166 CurrentStatus=status_rem; \ 000001DC 980297E5 LDR R0,[R7, #+664] \ 000001E0 800287E5 STR R0,[R7, #+640] 2167 set_my_status(); \ 000001E4 ........ BL set_my_status 2168 change_back_status=0; \ 000001E8 9C4287E5 STR R4,[R7, #+668] 2169 } 2170 } 2171 UpdateCLheader(); \ ??LongPressActionOnChat_14: \ 000001EC ........ BL UpdateCLheader \ 000001F0 F18FBDE8 POP {R0,R4-R11,PC} 2172 break; 2173 case 7: 2174 { 2175 Show_XTX=!(Show_XTX); \ ??LongPressActionOnChat_15: \ 000001F4 A00297E5 LDR R0,[R7, #+672] \ 000001F8 000050E3 CMP R0,#+0 \ 000001FC 00B0A013 MOVNE R11,#+0 \ 00000200 A0B287E5 STR R11,[R7, #+672] 2176 if(Show_XTX) \ 00000204 00005BE3 CMP R11,#+0 \ 00000208 471F8502 ADDEQ R1,R5,#+284 2177 ShowMSG(1,(int)"Default show x-status"); \ 0000020C 411F8512 ADDNE R1,R5,#+260 \ 00000210 0100A0E3 MOV R0,#+1 \ 00000214 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: \ 00000218 9600A0E3 MOV R0,#+150 \ 0000021C 250100EF SWI +293 2186 str_2ws(ws,suc_config_name,128); \ 00000220 ........ LDR R1,??DataTable80 ;; suc_config_name \ 00000224 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: \ 00000228 9600A0E3 MOV R0,#+150 \ 0000022C 250100EF SWI +293 2195 str_2ws(ws,suc_config_name_mod,128); \ 00000230 ........ LDR R1,??DataTable81 ;; suc_config_name_mod \ ??LongPressActionOnChat_17: \ 00000234 0040A0E1 MOV R4,R0 \ 00000238 8020A0E3 MOV R2,#+128 \ 0000023C 6C0100EF SWI +364 2196 ExecuteFile(ws,0,0); \ 00000240 0020A0E3 MOV R2,#+0 \ 00000244 0010A0E3 MOV R1,#+0 \ 00000248 0400A0E1 MOV R0,R4 \ 0000024C 940000EF SWI +148 2197 FreeWS(ws); \ 00000250 0400A0E1 MOV R0,R4 \ 00000254 290100EF SWI +297 \ 00000258 F18FBDE8 POP {R0,R4-R11,PC} 2198 } 2199 break; 2200 case 10://ping 2201 { 2202 janis=1; \ ??LongPressActionOnChat_19: \ 0000025C ........ LDR R0,??DataTable82 ;; janis \ 00000260 00B080E5 STR R11,[R0, #+0] 2203 TPKT *p; 2204 p=malloc(sizeof(PKT)+sizeof(TTime)); \ 00000264 1000A0E3 MOV R0,#+16 \ 00000268 140000EF SWI +20 \ 0000026C 0050A0E1 MOV R5,R0 2205 GetDateTime(NULL,(TTime *)p->data); \ 00000270 081085E2 ADD R1,R5,#+8 \ 00000274 0000A0E3 MOV R0,#+0 \ 00000278 B40000EF SWI +180 2206 p->pkt.uin=0; \ 0000027C 004085E5 STR R4,[R5, #+0] 2207 p->pkt.type=T_ECHO; \ 00000280 1200A0E3 MOV R0,#+18 \ 00000284 B400C5E1 STRH R0,[R5, #+4] 2208 p->pkt.data_len=sizeof(TTime); \ 00000288 0800A0E3 MOV R0,#+8 \ 0000028C B600C5E1 STRH R0,[R5, #+6] 2209 SUBPROC((void *)SendAnswer,0,p); \ 00000290 ........ LDR R0,??DataTable83 ;; SendAnswer \ 00000294 0520A0E1 MOV R2,R5 \ 00000298 0410A0E1 MOV R1,R4 \ 0000029C 710100EF SWI +369 \ 000002A0 F18FBDE8 POP {R0,R4-R11,PC} 2210 } 2211 break; 2212 case 11://go to idle 2213 { 2214 ClearContactT9Key(); \ ??LongPressActionOnChat_20: \ 000002A4 2010A0E3 MOV R1,#+32 \ 000002A8 070086E0 ADD R0,R6,R7 \ 000002AC 1D0100EF SWI +285 2215 RecountMenu(NULL,1); \ 000002B0 0110A0E3 MOV R1,#+1 \ 000002B4 0400A0E1 MOV R0,R4 \ 000002B8 ........ BL RecountMenu 2216 silenthide=1; \ 000002BC BCB287E5 STR R11,[R7, #+700] 2217 gipc.name_to=ipc_xtask_name; \ 000002C0 4C0E85E2 ADD R0,R5,#+1216 \ 000002C4 BC0087E5 STR R0,[R7, #+188] 2218 gipc.name_from=ipc_my_name; \ 000002C8 4A0E85E2 ADD R0,R5,#+1184 \ 000002CC C00087E5 STR R0,[R7, #+192] 2219 gipc.data=0; \ 000002D0 C44087E5 STR R4,[R7, #+196] 2220 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 000002D4 BC3087E2 ADD R3,R7,#+188 \ 000002D8 0B20A0E1 MOV R2,R11 \ 000002DC 0A10A0E1 MOV R1,R10 \ 000002E0 0900A0E1 MOV R0,R9 \ 000002E4 000100EF SWI +256 \ 000002E8 F18FBDE8 POP {R0,R4-R11,PC} 2221 } 2222 break; 2223 case 12://hide & lock 2224 { 2225 ClearContactT9Key(); \ ??LongPressActionOnChat_21: \ 000002EC 2010A0E3 MOV R1,#+32 \ 000002F0 070086E0 ADD R0,R6,R7 \ 000002F4 1D0100EF SWI +285 2226 RecountMenu(NULL,1); \ 000002F8 0110A0E3 MOV R1,#+1 \ 000002FC 0400A0E1 MOV R0,R4 \ 00000300 ........ BL RecountMenu 2227 gipc.name_to=ipc_xtask_name; \ 00000304 4C0E85E2 ADD R0,R5,#+1216 \ 00000308 BC0087E5 STR R0,[R7, #+188] 2228 gipc.name_from=ipc_my_name; \ 0000030C 4A0E85E2 ADD R0,R5,#+1184 \ 00000310 C00087E5 STR R0,[R7, #+192] 2229 gipc.data=0; \ 00000314 C44087E5 STR R4,[R7, #+196] 2230 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 00000318 BC3087E2 ADD R3,R7,#+188 \ 0000031C 0B20A0E1 MOV R2,R11 \ 00000320 0A10A0E1 MOV R1,R10 \ 00000324 0900A0E1 MOV R0,R9 \ 00000328 000100EF SWI +256 2231 if (IsUnlocked()) \ 0000032C 430000EF SWI +67 \ 00000330 000050E3 CMP R0,#+0 \ 00000334 F18FBD08 POPEQ {R0,R4-R11,PC} 2232 { 2233 KbdLock(); \ 00000338 A90000EF SWI +169 \ 0000033C 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: \ 00000340 081090E5 LDR R1,[R0, #+8] \ 00000344 000051E3 CMP R1,#+0 \ 00000348 F18FBD18 POPNE {R0,R4-R11,PC} 2241 CreateContactMenu(t); \ 0000034C ........ BL CreateContactMenu 2242 } 2243 break; 2244 }//switch() 2245 } \ ??LongPressActionOnChat_23: \ 00000350 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,??DataTable98 ;; S_ICONS \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C 0040A0E3 MOV R4,#+0 \ 00000010 8C4287E5 STR R4,[R7, #+652] 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 F60000EA B ??contactlist_menu_onkey_1 2286 } 2287 2288 if (msg->keys==0x3D) \ ??contactlist_menu_onkey_0: \ 00000034 1C80A0E3 MOV R8,#+28 \ 00000038 508E88E3 ORR R8,R8,#0x500 \ 0000003C 3D0050E3 CMP R0,#+61 \ 00000040 2400001A BNE ??contactlist_menu_onkey_2 2289 { 2290 if (t) \ 00000044 000055E3 CMP R5,#+0 \ 00000048 3A00000A BEQ ??contactlist_menu_onkey_3 2291 { 2292 if (t->isgroup) \ 0000004C 080095E5 LDR R0,[R5, #+8] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0700000A BEQ ??contactlist_menu_onkey_4 2293 { 2294 t->state^=0xFFFF; \ 00000058 B405D5E1 LDRH R0,[R5, #+84] \ 0000005C FF10A0E3 MOV R1,#+255 \ 00000060 FF1C81E3 ORR R1,R1,#0xFF00 \ 00000064 000021E0 EOR R0,R1,R0 \ 00000068 B405C5E1 STRH R0,[R5, #+84] 2295 RecountMenu(t,1); \ ??contactlist_menu_onkey_5: \ 0000006C 0110A0E3 MOV R1,#+1 \ 00000070 0500A0E1 MOV R0,R5 \ 00000074 2E0000EA B ??contactlist_menu_onkey_6 2296 return(-1); 2297 } 2298 if (strlen(ContactT9Key)) \ ??contactlist_menu_onkey_4: \ 00000078 070088E0 ADD R0,R8,R7 \ 0000007C 1B0000EF SWI +27 \ 00000080 000050E3 CMP R0,#+0 \ 00000084 0500000A BEQ ??contactlist_menu_onkey_7 2299 { 2300 ClearContactT9Key(); \ 00000088 2010A0E3 MOV R1,#+32 \ 0000008C 070088E0 ADD R0,R8,R7 \ 00000090 1D0100EF SWI +285 2301 RecountMenu(NULL,1); \ 00000094 0110A0E3 MOV R1,#+1 \ 00000098 0000A0E3 MOV R0,#+0 \ 0000009C ........ 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: \ 000000D8 010050E3 CMP R0,#+1 \ 000000DC 0500001A BNE ??contactlist_menu_onkey_9 2315 { 2316 if (strlen(ContactT9Key)) \ 000000E0 070088E0 ADD R0,R8,R7 \ 000000E4 1B0000EF SWI +27 \ 000000E8 000050E3 CMP R0,#+0 \ 000000EC 0100000A BEQ ??contactlist_menu_onkey_9 2317 { 2318 BackSpaceContactT9(); \ 000000F0 ........ BL BackSpaceContactT9 2319 RecountMenu(NULL,1); \ 000000F4 0C0000EA B ??contactlist_menu_onkey_10 2320 return(-1); 2321 } 2322 } 2323 if (msg->gbsmsg->msg==KEY_DOWN) \ ??contactlist_menu_onkey_9: \ 000000F8 040096E5 LDR R0,[R6, #+4] \ 000000FC 9320A0E3 MOV R2,#+147 \ 00000100 041090E5 LDR R1,[R0, #+4] \ 00000104 402F82E3 ORR R2,R2,#0x100 \ 00000108 020051E1 CMP R1,R2 \ 0000010C 3900001A BNE ??contactlist_menu_onkey_11 2324 { 2325 int key=msg->gbsmsg->submess; \ 00000110 089090E5 LDR R9,[R0, #+8] 2326 if ((key>='0')&&(key<='9')) \ 00000114 300059E3 CMP R9,#+48 \ 00000118 080000BA BLT ??contactlist_menu_onkey_12 \ 0000011C 3A0059E3 CMP R9,#+58 \ 00000120 0D0000AA BGE ??contactlist_menu_onkey_13 2327 { 2328 AddContactT9Key(key); \ 00000124 0900A0E1 MOV R0,R9 \ 00000128 ........ BL AddContactT9Key 2329 RecountMenu(NULL,1); \ ??contactlist_menu_onkey_10: \ 0000012C 0110A0E3 MOV R1,#+1 \ 00000130 0000A0E3 MOV R0,#+0 \ ??contactlist_menu_onkey_6: \ 00000134 ........ BL RecountMenu 2330 return(-1); \ ??contactlist_menu_onkey_3: \ 00000138 0400E0E1 MVN R0,R4 \ 0000013C F087BDE8 POP {R4-R10,PC} 2331 } 2332 2333 if (key==VOL_UP_BUTTON && isVolUpButton) \ ??contactlist_menu_onkey_12: \ 00000140 0D0059E3 CMP R9,#+13 \ 00000144 0400001A BNE ??contactlist_menu_onkey_13 \ 00000148 00039FE5 LDR R0,??contactlist_menu_onkey_14 ;; isVolUpButton \ 0000014C 000090E5 LDR R0,[R0, #+0] \ 00000150 000050E3 CMP R0,#+0 \ 00000154 0000000A BEQ ??contactlist_menu_onkey_13 2334 { 2335 #ifdef NEWSGOLD 2336 CreateScreenSelectGUI(); \ 00000158 ........ _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: \ 0000015C 040096E5 LDR R0,[R6, #+4] \ 00000160 01A0A0E3 MOV R10,#+1 \ 00000164 080090E5 LDR R0,[R0, #+8] \ 00000168 0E0050E3 CMP R0,#+14 \ 0000016C 1500001A BNE ??contactlist_menu_onkey_15 \ 00000170 DC029FE5 LDR R0,??contactlist_menu_onkey_14+0x4 ;; isVolDownButton \ 00000174 000090E5 LDR R0,[R0, #+0] \ 00000178 000050E3 CMP R0,#+0 \ 0000017C 1100000A BEQ ??contactlist_menu_onkey_15 2349 { 2350 if(!away_m) \ 00000180 940297E5 LDR R0,[R7, #+660] \ 00000184 000050E3 CMP R0,#+0 \ 00000188 0300001A BNE ??contactlist_menu_onkey_16 2351 { 2352 away_m=!away_m; \ 0000018C 94A287E5 STR R10,[R7, #+660] 2353 /* GBS_StopTimer(&away_tmr); 2354 msg_away_timer=AUTO_ENGADE; 2355 away_timer();*/ 2356 main_d=1; \ 00000190 34A287E5 STR R10,[R7, #+564] 2357 InputAwayMsg(); \ 00000194 ........ BL InputAwayMsg \ 00000198 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: \ 0000019C 9C0297E5 LDR R0,[R7, #+668] \ 000001A0 904287E5 STR R4,[R7, #+656] \ 000001A4 944287E5 STR R4,[R7, #+660] \ 000001A8 000050E3 CMP R0,#+0 \ 000001AC 0300000A BEQ ??contactlist_menu_onkey_17 2364 { 2365 CurrentStatus=status_rem; \ 000001B0 980297E5 LDR R0,[R7, #+664] \ 000001B4 800287E5 STR R0,[R7, #+640] 2366 set_my_status(); \ 000001B8 ........ BL set_my_status 2367 change_back_status=0; \ 000001BC 9C4287E5 STR R4,[R7, #+668] 2368 } 2369 } 2370 UpdateCLheader(); \ ??contactlist_menu_onkey_17: \ 000001C0 ........ BL UpdateCLheader 2371 RefreshGUI(); \ 000001C4 960100EF SWI +406 2372 } 2373 2374 if(key==GREEN_BUTTON) \ ??contactlist_menu_onkey_15: \ 000001C8 0B0059E3 CMP R9,#+11 \ 000001CC 0400001A BNE ??contactlist_menu_onkey_18 2375 { 2376 IsActiveUp=!IsActiveUp; \ 000001D0 740297E5 LDR R0,[R7, #+628] \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 00A0A013 MOVNE R10,#+0 \ 000001DC 74A287E5 STR R10,[R7, #+628] 2377 RecountMenu(NULL,1); \ 000001E0 D1FFFFEA B ??contactlist_menu_onkey_10 2378 return(-1); 2379 } 2380 2381 if(key==LEFT_BUTTON && (CountContacts()>0)) \ ??contactlist_menu_onkey_18: \ 000001E4 3D0059E3 CMP R9,#+61 \ 000001E8 2E00001A BNE ??contactlist_menu_onkey_19 \ 000001EC ........ _BLF CountContacts,??CountContacts??rA \ 000001F0 010050E3 CMP R0,#+1 \ 000001F4 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: \ 000001F8 040096E5 LDR R0,[R6, #+4] \ 000001FC 9520A0E3 MOV R2,#+149 \ 00000200 041090E5 LDR R1,[R0, #+4] \ 00000204 402F82E3 ORR R2,R2,#0x100 \ 00000208 020051E1 CMP R1,R2 \ 0000020C 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); \ 00000210 081090E5 LDR R1,[R0, #+8] \ 00000214 0500A0E1 MOV R0,R5 \ 00000218 ........ BL LongPressAction 2658 2659 int key=msg->gbsmsg->submess; \ 0000021C 040096E5 LDR R0,[R6, #+4] \ 00000220 080090E5 LDR R0,[R0, #+8] 2660 if ((key>='0')&&(key<='9')) \ 00000224 300050E3 CMP R0,#+48 \ 00000228 080000BA BLT ??contactlist_menu_onkey_21 \ 0000022C 3A0050E3 CMP R0,#+58 \ 00000230 060000AA BGE ??contactlist_menu_onkey_21 2661 { 2662 ClearContactT9Key(); \ 00000234 2010A0E3 MOV R1,#+32 \ 00000238 070088E0 ADD R0,R8,R7 \ 0000023C 1D0100EF SWI +285 2663 UpdateCLheader(); \ 00000240 ........ BL UpdateCLheader 2664 RecountMenu(NULL,1); \ 00000244 0110A0E3 MOV R1,#+1 \ 00000248 0000A0E3 MOV R0,#+0 \ 0000024C ........ BL RecountMenu 2665 } 2666 } 2667 return(0); \ ??contactlist_menu_onkey_21: \ 00000250 0000A0E3 MOV R0,#+0 \ 00000254 F087BDE8 POP {R4-R10,PC} ;; return \ ??contactlist_menu_onkey_22: \ 00000258 800095E5 LDR R0,[R5, #+128] \ 0000025C 000050E3 CMP R0,#+0 \ 00000260 0900001A BNE ??contactlist_menu_onkey_23 \ ??contactlist_menu_onkey_20: \ 00000264 005095E5 LDR R5,[R5, #+0] \ 00000268 000055E3 CMP R5,#+0 \ 0000026C F9FFFF1A BNE ??contactlist_menu_onkey_22 \ 00000270 C35F87E2 ADD R5,R7,#+780 \ ??contactlist_menu_onkey_24: \ 00000274 005095E5 LDR R5,[R5, #+0] \ 00000278 000055E3 CMP R5,#+0 \ 0000027C 0200000A BEQ ??contactlist_menu_onkey_23 \ 00000280 800095E5 LDR R0,[R5, #+128] \ 00000284 000050E3 CMP R0,#+0 \ 00000288 F9FFFF0A BEQ ??contactlist_menu_onkey_24 \ ??contactlist_menu_onkey_23: \ 0000028C 100095E5 LDR R0,[R5, #+16] \ 00000290 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000294 000050E3 CMP R0,#+0 \ 00000298 B415D011 LDRHNE R1,[R0, #+84] \ 0000029C 00005113 CMPNE R1,#+0 \ 000002A0 B445C011 STRHNE R4,[R0, #+84] \ 000002A4 70FFFFEA B ??contactlist_menu_onkey_5 \ ??contactlist_menu_onkey_19: \ 000002A8 2A0059E3 CMP R9,#+42 \ 000002AC 1100001A BNE ??contactlist_menu_onkey_25 \ 000002B0 ........ _BLF CountContacts,??CountContacts??rA \ 000002B4 010050E3 CMP R0,#+1 \ 000002B8 CEFFFFBA BLT ??contactlist_menu_onkey_11 \ 000002BC 020000EA B ??contactlist_menu_onkey_26 \ ??contactlist_menu_onkey_27: \ 000002C0 680095E5 LDR R0,[R5, #+104] \ 000002C4 000050E3 CMP R0,#+0 \ 000002C8 EFFFFF1A BNE ??contactlist_menu_onkey_23 \ ??contactlist_menu_onkey_26: \ 000002CC 005095E5 LDR R5,[R5, #+0] \ 000002D0 000055E3 CMP R5,#+0 \ 000002D4 F9FFFF1A BNE ??contactlist_menu_onkey_27 \ 000002D8 C35F87E2 ADD R5,R7,#+780 \ ??contactlist_menu_onkey_28: \ 000002DC 005095E5 LDR R5,[R5, #+0] \ 000002E0 000055E3 CMP R5,#+0 \ 000002E4 93FFFF0A BEQ ??contactlist_menu_onkey_3 \ 000002E8 680095E5 LDR R0,[R5, #+104] \ 000002EC 000050E3 CMP R0,#+0 \ 000002F0 F9FFFF0A BEQ ??contactlist_menu_onkey_28 \ 000002F4 E4FFFFEA B ??contactlist_menu_onkey_23 \ ??contactlist_menu_onkey_25: \ 000002F8 230059E3 CMP R9,#+35 \ 000002FC 4500001A BNE ??contactlist_menu_onkey_29 \ 00000300 ........ _BLF CountContacts,??CountContacts??rA \ 00000304 010050E3 CMP R0,#+1 \ 00000308 BAFFFFBA BLT ??contactlist_menu_onkey_11 \ 0000030C 44019FE5 LDR R0,??contactlist_menu_onkey_14+0x8 ;; ActionResh \ 00000310 000090E5 LDR R0,[R0, #+0] \ 00000314 000050E3 CMP R0,#+0 \ 00000318 1900001A BNE ??contactlist_menu_onkey_30 \ 0000031C 900095E5 LDR R0,[R5, #+144] \ 00000320 000050E3 CMP R0,#+0 \ 00000324 0600000A BEQ ??contactlist_menu_onkey_31 \ 00000328 680095E5 LDR R0,[R5, #+104] \ 0000032C 000050E3 CMP R0,#+0 \ 00000330 0300001A BNE ??contactlist_menu_onkey_31 \ 00000334 900085E2 ADD R0,R5,#+144 \ 00000338 ........ BL FreeLOGQ \ 0000033C A04085E5 STR R4,[R5, #+160] \ 00000340 9C4085E5 STR R4,[R5, #+156] \ ??contactlist_menu_onkey_31: \ 00000344 680095E5 LDR R0,[R5, #+104] \ 00000348 000050E3 CMP R0,#+0 \ 0000034C 0200000A BEQ ??contactlist_menu_onkey_32 \ 00000350 0C0095E5 LDR R0,[R5, #+12] \ 00000354 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000358 684080E5 STR R4,[R0, #+104] \ ??contactlist_menu_onkey_32: \ 0000035C ........ LDR R1,??DataTable101 ;; UIN \ 00000360 0C0095E5 LDR R0,[R5, #+12] \ 00000364 001091E5 LDR R1,[R1, #+0] \ 00000368 010050E1 CMP R0,R1 \ 0000036C 1D00001A BNE ??contactlist_menu_onkey_33 \ 00000370 C30F87E2 ADD R0,R7,#+780 \ 00000374 180000EA B ??contactlist_menu_onkey_34 \ ??contactlist_menu_onkey_35: \ 00000378 9C0095E5 LDR R0,[R5, #+156] \ 0000037C 000050E3 CMP R0,#+0 \ 00000380 0900001A BNE ??contactlist_menu_onkey_36 \ ??contactlist_menu_onkey_30: \ 00000384 005095E5 LDR R5,[R5, #+0] \ 00000388 000055E3 CMP R5,#+0 \ 0000038C F9FFFF1A BNE ??contactlist_menu_onkey_35 \ 00000390 C35F87E2 ADD R5,R7,#+780 \ ??contactlist_menu_onkey_37: \ 00000394 005095E5 LDR R5,[R5, #+0] \ 00000398 000055E3 CMP R5,#+0 \ 0000039C 65FFFF0A BEQ ??contactlist_menu_onkey_3 \ 000003A0 9C0095E5 LDR R0,[R5, #+156] \ 000003A4 000050E3 CMP R0,#+0 \ 000003A8 F9FFFF0A BEQ ??contactlist_menu_onkey_37 \ ??contactlist_menu_onkey_36: \ 000003AC 100095E5 LDR R0,[R5, #+16] \ 000003B0 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 000003B4 000050E3 CMP R0,#+0 \ 000003B8 B415D011 LDRHNE R1,[R0, #+84] \ 000003BC 00005113 CMPNE R1,#+0 \ 000003C0 B445C011 STRHNE R4,[R0, #+84] \ 000003C4 0110A0E3 MOV R1,#+1 \ 000003C8 0500A0E1 MOV R0,R5 \ 000003CC 0E0000EA B ??contactlist_menu_onkey_38 \ ??contactlist_menu_onkey_39: \ 000003D0 681090E5 LDR R1,[R0, #+104] \ 000003D4 000051E3 CMP R1,#+0 \ 000003D8 68408015 STRNE R4,[R0, #+104] \ ??contactlist_menu_onkey_34: \ 000003DC 000090E5 LDR R0,[R0, #+0] \ 000003E0 000050E3 CMP R0,#+0 \ 000003E4 F9FFFF1A BNE ??contactlist_menu_onkey_39 \ ??contactlist_menu_onkey_33: \ 000003E8 070088E0 ADD R0,R8,R7 \ 000003EC 1B0000EF SWI +27 \ 000003F0 000050E3 CMP R0,#+0 \ 000003F4 0200000A BEQ ??contactlist_menu_onkey_40 \ 000003F8 2010A0E3 MOV R1,#+32 \ 000003FC 070088E0 ADD R0,R8,R7 \ 00000400 1D0100EF SWI +285 \ ??contactlist_menu_onkey_40: \ 00000404 0010A0E3 MOV R1,#+0 \ 00000408 0100A0E1 MOV R0,R1 \ ??contactlist_menu_onkey_38: \ 0000040C ........ BL RecountMenu \ ??contactlist_menu_onkey_1: \ 00000410 0400E0E1 MVN R0,R4 \ 00000414 F087BDE8 POP {R4-R10,PC} \ ??contactlist_menu_onkey_29: \ 00000418 3E0059E3 CMP R9,#+62 \ 0000041C 75FFFF1A BNE ??contactlist_menu_onkey_11 \ 00000420 000055E3 CMP R5,#+0 \ 00000424 73FFFF0A BEQ ??contactlist_menu_onkey_11 \ 00000428 080095E5 LDR R0,[R5, #+8] \ 0000042C 000050E3 CMP R0,#+0 \ 00000430 70FFFF1A BNE ??contactlist_menu_onkey_11 \ 00000434 0500A0E1 MOV R0,R5 \ 00000438 ........ _BLF FreeXText,??FreeXText??rA \ 0000043C AC4085E5 STR R4,[R5, #+172] \ 00000440 0C0095E5 LDR R0,[R5, #+12] \ 00000444 ........ BL RequestXText \ 00000448 960100EF SWI +406 \ 0000044C EFFFFFEA B ??contactlist_menu_onkey_1 \ ??contactlist_menu_onkey_14: \ 00000450 ........ DC32 isVolUpButton \ 00000454 ........ DC32 isVolDownButton \ 00000458 ........ 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,??DataTable87 ;; S_ICONS + 780 \ 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,??DataTable93 ;; Canvas \ 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 680098E5 LDR R0,[R8, #+104] \ 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 4C1F8AE2 ADD R1,R10,#+304 \ 00000080 160000EF SWI +22 2721 wsprintf(ws1,percent_t,test); \ 00000084 0B20A0E1 MOV R2,R11 \ 00000088 18108AE2 ADD R1,R10,#+24 \ 0000008C 0600A0E1 MOV R0,R6 \ 00000090 240100EF SWI +292 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 18108AE2 ADD R1,R10,#+24 \ 000000A8 0600A0E1 MOV R0,R6 \ 000000AC 240100EF SWI +292 2726 if (t->just_now) \ ??contactlist_menu_iconhndl_3: \ 000000B0 680098E5 LDR R0,[R8, #+104] \ 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 9C0098E5 LDR R0,[R8, #+156] \ 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 A40098E5 LDR R0,[R8, #+164] \ 000000FC 0AB08BE2 ADD R11,R11,#+10 \ 00000100 000050E3 CMP R0,#+0 \ 00000104 0000D015 LDRBNE R0,[R0, #+0] \ 00000108 00005013 CMPNE R0,#+0 \ 0000010C 6C009815 LDRNE R0,[R8, #+108] \ 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 A40098E5 LDR R0,[R8, #+164] \ ??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 4F1F8AE2 ADD R1,R10,#+316 \ 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 A80098E5 LDR R0,[R8, #+168] \ 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,??DataTable89 ;; 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 A80098E5 LDR R0,[R8, #+168] \ 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 1E108AE2 ADD R1,R10,#+30 \ 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,??DataTable90 ;; 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 18108AE2 ADD R1,R10,#+24 \ 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 511F8AE2 ADD R1,R10,#+324 \ 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 531F8AE2 ADD R1,R10,#+332 \ 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,??DataTable91 ;; 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,??DataTable98 ;; S_ICONS 2897 int err; 2898 unsigned int ip; 2899 GBS_DelTimer(&reconnect_tmr); 2900 if (!IsGPRSEnabled()) \ 00000008 ........ LDR R8,??DataTable93 ;; Canvas \ 0000000C 45DF4DE2 SUB SP,SP,#+276 \ 00000010 0040A0E3 MOV R4,#+0 \ 00000014 00408DE5 STR R4,[SP, #+0] \ 00000018 E44285E5 STR R4,[R5, #+740] \ 0000001C 7400A0E3 MOV R0,#+116 \ 00000020 680D80E3 ORR R0,R0,#0x1A00 \ 00000024 056080E0 ADD R6,R0,R5 \ 00000028 0600A0E1 MOV R0,R6 \ 0000002C 8C0100EF SWI +396 \ 00000030 5400A0E3 MOV R0,#+84 \ 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 044385E5 STR R4,[R5, #+772] 2903 strcpy(logmsg,LG_GRWAITFORGPRS); \ 0000004C 551F88E2 ADD R1,R8,#+340 \ 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 9C4385E5 STR R4,[R5, #+924] \ 00000064 7C8100EF SWI +33148 \ 00000068 004080E5 STR R4,[R0, #+0] \ 0000006C 0900A0E1 MOV R0,R9 \ 00000070 ........ BL GetHostsCount \ 00000074 A41395E5 LDR R1,[R5, #+932] \ 00000078 010040E2 SUB R0,R0,#+1 \ 0000007C 010050E1 CMP R0,R1 \ 00000080 A44385B5 STRLT R4,[R5, #+932] 2910 GetHost(host_counter, NATICQ_HOST, hostbuf); \ 00000084 A40395E5 LDR R0,[R5, #+932] \ 00000088 14208DE2 ADD R2,SP,#+20 \ 0000008C 0910A0E1 MOV R1,R9 \ 00000090 ........ BL GetHost 2911 hostport = GetPort(host_counter, NATICQ_HOST); \ 00000094 A40395E5 LDR R0,[R5, #+932] \ 00000098 0910A0E1 MOV R1,R9 \ 0000009C ........ BL GetPort \ 000000A0 0090A0E1 MOV R9,R0 2912 host_counter++; \ 000000A4 A40395E5 LDR R0,[R5, #+932] 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 A40385E5 STR R0,[R5, #+932] \ 000000B4 14208DE2 ADD R2,SP,#+20 \ 000000B8 5B1F88E2 ADD R1,R8,#+364 \ 000000BC 2400A0E3 MOV R0,#+36 \ 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 A400A0E3 MOV R0,#+164 \ 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 1B1088E2 ADD R1,R8,#+27 \ 000000EC 0A00A0E1 MOV R0,R10 2918 strcpy(logmsg,buf); 2919 SMART_REDRAW(); 2920 2921 ip=str2ip(hostbuf); \ 000000F0 ........ LDR R10,??DataTable94 ;; 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 601F88E2 ADD R1,R8,#+384 \ 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 641F88E2 ADD R1,R8,#+400 \ 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 E72F85E2 ADD R2,R5,#+924 \ 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 9C0395E5 LDR R0,[R5, #+924] \ 00000178 000050E3 CMP R0,#+0 \ 0000017C 1000000A BEQ ??create_connect_5 2938 { 2939 host_counter--; \ 00000180 A40395E5 LDR R0,[R5, #+932] \ 00000184 010040E2 SUB R0,R0,#+1 \ 00000188 A40385E5 STR R0,[R5, #+932] 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 672F88E2 ADD R2,R8,#+412 \ 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,??DataTable95 ;; 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 6B1F88E2 ADD R1,R8,#+428 \ 000001F8 0700A0E1 MOV R0,R7 \ 000001FC 1A0000EF SWI +26 2958 SMART_REDRAW(); \ 00000200 ........ BL SMART_REDRAW 2959 DNR_TRIES=0; \ 00000204 A04385E5 STR R4,[R5, #+928] 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 E80285E5 STR R0,[R5, #+744] 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 E80295E5 LDR R0,[R5, #+744] \ 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 E47285E5 STR R7,[R5, #+740] 2971 TOTALRECEIVED=0; \ 0000026C EC4285E5 STR R4,[R5, #+748] 2972 TOTALSENDED=0; \ 00000270 F04285E5 STR R4,[R5, #+752] 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 E80295E5 LDR R0,[R5, #+744] \ 00000284 760100EF SWI +374 2978 sock=-1; \ 00000288 E8B285E5 STR R11,[R5, #+744] 2979 LockSched(); \ 0000028C 460100EF SWI +326 2980 ShowMSG(1,(int)LG_MSGCANTCONN); \ 00000290 711F88E2 ADD R1,R8,#+452 \ 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 781F88E2 ADD R1,R8,#+480 \ 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 A00395E5 LDR R0,[R5, #+928] \ 000002CC 010040E2 SUB R0,R0,#+1 \ 000002D0 A00385E5 STR R0,[R5, #+928] 2999 LockSched(); \ 000002D4 460100EF SWI +326 3000 ShowMSG(1,(int)LG_MSGHOSTNFND); \ 000002D8 831F88E2 ADD R1,R8,#+524 \ 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,??DataTable98 ;; S_ICONS \ 00000008 000394E5 LDR R0,[R4, #+768] \ 0000000C 150000EF SWI +21 3012 sendq_p=NULL; \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 000384E5 STR R0,[R4, #+768] 3013 sendq_l=NULL; \ 00000018 FC0284E5 STR R0,[R4, #+764] 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,??DataTable98 ;; S_ICONS \ 00000008 E80294E5 LDR R0,[R4, #+744] \ 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 E80294E5 LDR R0,[R4, #+744] \ 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,??DataTable98 ;; S_ICONS \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C E40294E5 LDR R0,[R4, #+740] \ 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 F00294E5 LDR R0,[R4, #+752] \ 00000038 000085E0 ADD R0,R5,R0 \ 0000003C F00284E5 STR R0,[R4, #+752] 3052 ALLTOTALSENDED+=j; //by BoBa 10.07 \ 00000040 F80294E5 LDR R0,[R4, #+760] \ 00000044 000085E0 ADD R0,R5,R0 \ 00000048 F80284E5 STR R0,[R4, #+760] 3053 //Проверяем, не надо ли добавить в очередь 3054 if (sendq_p) \ 0000004C 000394E5 LDR R0,[R4, #+768] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0F00000A BEQ ??SendAnswer_2 3055 { 3056 //Есть очередь, добавляем в нее 3057 sendq_p=realloc((void *)sendq_p,sendq_l+j); \ 00000058 FC1294E5 LDR R1,[R4, #+764] \ 0000005C 011085E0 ADD R1,R5,R1 \ 00000060 BA0000EF SWI +186 \ 00000064 000384E5 STR R0,[R4, #+768] 3058 memcpy((char *)sendq_p+sendq_l,p,j); \ 00000068 FC0294E5 LDR R0,[R4, #+764] \ 0000006C 003394E5 LDR R3,[R4, #+768] \ 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 FC0294E5 LDR R0,[R4, #+764] \ 0000008C 000085E0 ADD R0,R5,R0 \ 00000090 FC0284E5 STR R0,[R4, #+764] 3061 return; \ 00000094 F083BDE8 POP {R4-R9,PC} 3062 } 3063 sendq_p=p; \ ??SendAnswer_2: \ 00000098 006384E5 STR R6,[R4, #+768] 3064 sendq_l=j; \ 0000009C FC5284E5 STR R5,[R4, #+764] \ 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 FC0294E5 LDR R0,[R4, #+764] \ 000000A8 052040E0 SUB R2,R0,R5 \ 000000AC FC2284E5 STR R2,[R4, #+764] \ 000000B0 000394E5 LDR R0,[R4, #+768] \ 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 E80294E5 LDR R0,[R4, #+744] \ 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 5400A0E3 MOV R0,#+84 \ 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 006384E5 STR R6,[R4, #+768] 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,??DataTable112 ;; S_ICONS \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 0200A0E3 MOV R0,#+2 \ 0000001C E40286E5 STR R0,[R6, #+740] \ 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,??DataTable101 ;; 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 E00286E5 STR R0,[R6, #+736] 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,??DataTable101 ;; 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,??DataTable102 ;; 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,??DataTable112 ;; 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 E40295E5 LDR R0,[R5, #+740] \ 00000014 E08295E5 LDR R8,[R5, #+736] \ 00000018 1C108DE2 ADD R1,SP,#+28 \ 0000001C 00108DE5 STR R1,[SP, #+0] \ 00000020 020050E3 CMP R0,#+2 \ 00000024 640100BA BLT ??get_answer_1 \ 00000028 0A0078E3 CMN R8,#+10 \ 0000002C 6201000A BEQ ??get_answer_1 3167 if (i==EOP) return; 3168 j=recv(sock,rb,sizeof(rb),0); \ 00000030 E80295E5 LDR R0,[R5, #+744] \ 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 E80295E5 LDR R0,[R5, #+744] \ 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 480100BA BLT ??get_answer_8 \ 00000094 30759FE5 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 5400A0E3 MOV R0,#+84 \ 000000E4 640D80E3 ORR R0,R0,#0x1900 \ 000000E8 05A080E0 ADD R10,R0,R5 \ 000000EC 400C54E3 CMP R4,#+16384 \ 000000F0 080000BA BLT ??get_answer_11 \ 000000F4 D4149FE5 LDR R1,??get_answer_9+0x8 ;; Canvas + 544 \ 000000F8 0A00A0E1 MOV R0,R10 \ 000000FC 1A0000EF SWI +26 \ 00000100 ........ BL end_socket \ 00000104 0900E0E3 MVN R0,#+9 \ 00000108 E00285E5 STR R0,[R5, #+736] \ 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 EC1295E5 LDR R1,[R5, #+748] \ 00000164 080088E2 ADD R0,R8,#+8 \ 00000168 011080E0 ADD R1,R0,R1 \ 0000016C EC1285E5 STR R1,[R5, #+748] \ 00000170 F41295E5 LDR R1,[R5, #+756] \ 00000174 0020A0E3 MOV R2,#+0 \ 00000178 011080E0 ADD R1,R0,R1 \ 0000017C F41285E5 STR R1,[R5, #+756] \ 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 B4FFB4FFB000 DC16 +65460,+65460,+176,+65460 \ B4FF \ 000001CC B4FFB600BC00 DC16 +65460,+182,+188,+65460 \ B4FF \ 000001D4 C10029002900 DC16 +193,+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 E80295E5 LDR R0,[R5, #+744] \ 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 A8039FE5 LDR R0,??get_answer_9+0xC ;; sndStartup \ 00000228 ........ BL Play \ 0000022C 083087E2 ADD R3,R7,#+8 \ 00000230 E42F8FE2 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 E40285E5 STR R0,[R5, #+740] \ 00000248 A40395E5 LDR R0,[R5, #+932] \ 0000024C 010040E2 SUB R0,R0,#+1 \ 00000250 A40385E5 STR R0,[R5, #+932] \ 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 50239FE5 LDR R2,??get_answer_9+0x10 ;; Canvas + 556 \ 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 E80295E5 LDR R0,[R5, #+744] \ 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 18239FE5 LDR R2,??get_answer_9+0x14 ;; Canvas + 568 \ 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,??DataTable104 ;; addIconBar \ 00000318 002097E5 LDR R2,[R7, #+0] \ 0000031C BC129FE5 LDR R1,??get_answer_9+0x18 ;; Canvas + 576 \ 00000320 B80085E5 STR R0,[R5, #+184] \ 00000324 A400A0E3 MOV R0,#+164 \ 00000328 700D80E3 ORR R0,R0,#0x1C00 \ 0000032C 054080E0 ADD R4,R0,R5 \ 00000330 0400A0E1 MOV R0,R4 \ 00000334 160000EF SWI +22 \ 00000338 ........ LDR R0,??DataTable105 ;; ignor_list \ 0000033C 0410A0E1 MOV R1,R4 \ 00000340 180100EF SWI +280 \ 00000344 000050E3 CMP R0,#+0 \ 00000348 4EFFFF1A BNE ??get_answer_7 \ 0000034C 90229FE5 LDR R2,??get_answer_9+0x1C ;; Canvas + 584 \ 00000350 90429FE5 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 EC0295E5 LDR R0,[R5, #+748] \ 00000370 ........ BL SendMSGACK \ 00000374 E80295E5 LDR R0,[R5, #+744] \ 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,??DataTable106 ;; 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 581090E5 LDR R1,[R0, #+88] \ 000003B4 000051E3 CMP R1,#+0 \ 000003B8 0500000A BEQ ??get_answer_21 \ 000003BC 600090E5 LDR R0,[R0, #+96] \ 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,??DataTable107 ;; automsgcount \ 000003D8 781090E5 LDR R1,[R0, #+120] \ 000003DC 002092E5 LDR R2,[R2, #+0] \ 000003E0 020051E1 CMP R1,R2 \ 000003E4 0200002A BCS ??get_answer_24 \ 000003E8 941295E5 LDR R1,[R5, #+660] \ 000003EC 000051E3 CMP R1,#+0 \ 000003F0 F4FFFF1A BNE ??get_answer_22 \ ??get_answer_24: \ 000003F4 741090E5 LDR R1,[R0, #+116] \ 000003F8 000051E3 CMP R1,#+0 \ 000003FC 0300000A BEQ ??get_answer_25 \ 00000400 700090E5 LDR R0,[R0, #+112] \ 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 CC219FE5 LDR R2,??get_answer_9+0x24 ;; sndMsg2 \ 0000041C 480285E5 STR R0,[R5, #+584] \ 00000420 0010A0E3 MOV R1,#+0 \ 00000424 08108DE5 STR R1,[SP, #+8] \ 00000428 483295E5 LDR R3,[R5, #+584] \ 0000042C BC119FE5 LDR R1,??get_answer_9+0x28 ;; Canvas + 596 \ 00000430 3C70A0E3 MOV R7,#+60 \ 00000434 507E87E3 ORR R7,R7,#0x500 \ 00000438 050087E0 ADD R0,R7,R5 \ 0000043C 160000EF SWI +22 \ 00000440 08308DE2 ADD R3,SP,#+8 \ 00000444 8020A0E3 MOV R2,#+128 \ 00000448 801CA0E3 MOV R1,#+32768 \ 0000044C 050087E0 ADD R0,R7,R5 \ 00000450 0A0000EF SWI +10 \ 00000454 04008DE5 STR R0,[SP, #+4] \ 00000458 04009DE5 LDR R0,[SP, #+4] \ 0000045C 010070E3 CMN R0,#+1 \ 00000460 EAFFFF0A BEQ ??get_answer_25 \ 00000464 04009DE5 LDR R0,[SP, #+4] \ 00000468 08108DE2 ADD R1,SP,#+8 \ 0000046C 0D0000EF SWI +13 \ 00000470 050087E0 ADD R0,R7,R5 \ 00000474 D4FFFFEA B ??get_answer_23 \ ??get_answer_26: \ 00000478 460100EF SWI +326 \ 0000047C 081087E2 ADD R1,R7,#+8 \ 00000480 0100A0E3 MOV R0,#+1 \ 00000484 480100EF SWI +328 \ ??get_answer_27: \ 00000488 470100EF SWI +327 \ 0000048C FDFEFFEA B ??get_answer_7 \ ??get_answer_28: \ 00000490 0700A0E1 MOV R0,R7 \ 00000494 ........ BL FindContactLOGQByAck \ 00000498 000050E3 CMP R0,#+0 \ 0000049C 0100000A BEQ ??get_answer_29 \ 000004A0 4C019FE5 LDR R0,??get_answer_9+0x2C ;; sndMsgSent \ 000004A4 ........ BL Play \ ??get_answer_29: \ 000004A8 0A00A0E3 MOV R0,#+10 \ 000004AC 140000EF SWI +20 \ 000004B0 00B0A0E1 MOV R11,R0 \ 000004B4 0A20A0E3 MOV R2,#+10 \ 000004B8 E8FEFFEA B ??get_answer_5 \ ??get_answer_30: \ 000004BC 0C108DE2 ADD R1,SP,#+12 \ 000004C0 14008DE2 ADD R0,SP,#+20 \ 000004C4 B40000EF SWI +180 \ 000004C8 0C00DDE5 LDRB R0,[SP, #+12] \ 000004CC 0D20DDE5 LDRB R2,[SP, #+13] \ 000004D0 E11EA0E3 MOV R1,#+3600 \ 000004D4 3C30A0E3 MOV R3,#+60 \ 000004D8 930202E0 MUL R2,R3,R2 \ 000004DC 912020E0 MLA R0,R1,R0,R2 \ 000004E0 0E10DDE5 LDRB R1,[SP, #+14] \ 000004E4 E12EA0E3 MOV R2,#+3600 \ 000004E8 000081E0 ADD R0,R1,R0 \ 000004EC 0810D7E5 LDRB R1,[R7, #+8] \ 000004F0 920101E0 MUL R1,R2,R1 \ 000004F4 FC209FE5 LDR R2,??get_answer_9+0x30 ;; Canvas + 608 \ 000004F8 010040E0 SUB R0,R0,R1 \ 000004FC 0910D7E5 LDRB R1,[R7, #+9] \ 00000500 930101E0 MUL R1,R3,R1 \ 00000504 010040E0 SUB R0,R0,R1 \ 00000508 0A10D7E5 LDRB R1,[R7, #+10] \ 0000050C ........ LDR R7,??DataTable108 ;; janis \ 00000510 014050E0 SUBS R4,R0,R1 \ 00000514 500BA043 MOVMI R0,#+81920 \ 00000518 460D8043 ORRMI R0,R0,#0x1180 \ 0000051C 04408040 ADDMI R4,R0,R4 \ 00000520 010084E2 ADD R0,R4,#+1 \ 00000524 01002DE9 PUSH {R0} \ 00000528 0430A0E1 MOV R3,R4 \ 0000052C FF10A0E3 MOV R1,#+255 \ 00000530 0A00A0E1 MOV R0,R10 \ 00000534 1B0100EF SWI +283 \ 00000538 BC109FE5 LDR R1,??get_answer_9+0x34 ;; Canvas + 628 \ 0000053C 0420A0E1 MOV R2,R4 \ 00000540 B8409FE5 LDR R4,??get_answer_9+0x38 ;; pingsnd \ 00000544 0C00A0E3 MOV R0,#+12 \ 00000548 580D80E3 ORR R0,R0,#0x1600 \ 0000054C 050080E0 ADD R0,R0,R5 \ 00000550 160000EF SWI +22 \ 00000554 460100EF SWI +326 \ 00000558 000097E5 LDR R0,[R7, #+0] \ 0000055C 04D08DE2 ADD SP,SP,#+4 \ 00000560 010050E3 CMP R0,#+1 \ 00000564 0700001A BNE ??get_answer_31 \ 00000568 0A10A0E1 MOV R1,R10 \ 0000056C 0100A0E3 MOV R0,#+1 \ 00000570 480100EF SWI +328 \ 00000574 0400A0E1 MOV R0,R4 \ 00000578 ........ BL Play \ 0000057C 0000A0E3 MOV R0,#+0 \ 00000580 000087E5 STR R0,[R7, #+0] \ 00000584 BFFFFFEA B ??get_answer_27 \ ??get_answer_31: \ 00000588 A80395E5 LDR R0,[R5, #+936] \ 0000058C 000050E3 CMP R0,#+0 \ 00000590 0500001A BNE ??get_answer_32 \ 00000594 68009FE5 LDR R0,??get_answer_9+0x3C ;; ping_time_config \ 00000598 000090E5 LDR R0,[R0, #+0] \ 0000059C A80385E5 STR R0,[R5, #+936] \ 000005A0 0400A0E1 MOV R0,R4 \ 000005A4 ........ BL Play \ 000005A8 B6FFFFEA B ??get_answer_27 \ ??get_answer_32: \ 000005AC 010040E2 SUB R0,R0,#+1 \ 000005B0 A80385E5 STR R0,[R5, #+936] \ 000005B4 B3FFFFEA B ??get_answer_27 3371 } 3372 } 3373 } 3374 RXstate=i; \ ??get_answer_8: \ 000005B8 E08285E5 STR R8,[R5, #+736] 3375 // GBS_StartTimerProc(&tmr_dorecv,3000,dorecv); 3376 // SMART_REDRAW(); 3377 } \ ??get_answer_1: \ 000005BC 1CD08DE2 ADD SP,SP,#+28 \ 000005C0 40DE8DE2 ADD SP,SP,#+1024 \ 000005C4 F08FBDE8 POP {R4-R11,PC} ;; return \ ??get_answer_9: \ 000005C8 25730000 DC8 "%s",+0 \ 000005CC ........ DC32 RXbuf \ 000005D0 ........ DC32 Canvas + 544 \ 000005D4 ........ DC32 sndStartup \ 000005D8 ........ DC32 Canvas + 556 \ 000005DC ........ DC32 Canvas + 568 \ 000005E0 ........ DC32 Canvas + 576 \ 000005E4 ........ DC32 Canvas + 584 \ 000005E8 ........ DC32 sndMsg \ 000005EC ........ DC32 sndMsg2 \ 000005F0 ........ DC32 Canvas + 596 \ 000005F4 ........ DC32 sndMsgSent \ 000005F8 ........ DC32 Canvas + 608 \ 000005FC ........ DC32 Canvas + 628 \ 00000600 ........ DC32 pingsnd \ 00000604 ........ 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; 3404 #else 3405 text_l=main_lenght-name_l; \ 00000024 FC119FE5 LDR R1,??AddToMain_0 ;; main_lenght \ 00000028 0070A0E3 MOV R7,#+0 \ 0000002C 001091E5 LDR R1,[R1, #+0] 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 AC119FE5 LDR R1,??AddToMain_0+0x4 ;; use_cutter \ 0000007C 001091E5 LDR R1,[R1, #+0] \ 00000080 000051E3 CMP R1,#+0 \ 00000084 0500000A BEQ ??AddToMain_5 \ 00000088 2E10A0E3 MOV R1,#+46 \ 0000008C 0510C7E7 STRB R1,[R7, +R5] \ 00000090 0510C0E7 STRB R1,[R0, +R5] \ 00000094 010080E2 ADD R0,R0,#+1 \ 00000098 0510C0E7 STRB R1,[R0, +R5] \ 0000009C 017080E2 ADD R7,R0,#+1 \ ??AddToMain_5: \ 000000A0 0560C7E7 STRB R6,[R7, +R5] \ 000000A4 EAFFFFEA B ??AddToMain_2 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,??DataTable109 ;; main_count \ 000000DC 0560C7E7 STRB R6,[R7, +R5] \ 000000E0 ........ LDR R6,??DataTable112 ;; S_ICONS \ 000000E4 44719FE5 LDR R7,??AddToMain_0+0x8 ;; `?` \ 000000E8 B010A0E3 MOV R1,#+176 \ 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 E010A0E3 MOV R1,#+224 \ 0000011C 701D81E3 ORR R1,R1,#0x1C00 \ 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 1000A0E3 MOV R0,#+16 \ 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 000098E5 LDR R0,[R8, #+0] \ 00000178 75AD86E2 ADD R10,R6,#+7488 \ 0000017C 030050E3 CMP R0,#+3 \ 00000180 0400001A BNE ??AddToMain_10 \ 00000184 0530A0E1 MOV R3,R5 \ 00000188 0420A0E1 MOV R2,R4 \ 0000018C 0710A0E1 MOV R1,R7 \ 00000190 0A00A0E1 MOV R0,R10 \ 00000194 160000EF SWI +22 3441 if(main_count==4) sprintf(g_txt, "%s: %s", nameu,de); \ ??AddToMain_10: \ 00000198 7000A0E3 MOV R0,#+112 \ 0000019C 740D80E3 ORR R0,R0,#0x1D00 \ 000001A0 06B080E0 ADD R11,R0,R6 \ 000001A4 000098E5 LDR R0,[R8, #+0] \ 000001A8 040050E3 CMP R0,#+4 \ 000001AC 0400001A BNE ??AddToMain_11 \ 000001B0 0530A0E1 MOV R3,R5 \ 000001B4 0420A0E1 MOV R2,R4 \ 000001B8 0710A0E1 MOV R1,R7 \ 000001BC 0B00A0E1 MOV R0,R11 \ 000001C0 160000EF SWI +22 3442 if(main_count>4) \ ??AddToMain_11: \ 000001C4 000098E5 LDR R0,[R8, #+0] \ 000001C8 050050E3 CMP R0,#+5 \ 000001CC 100000BA BLT ??AddToMain_12 3443 { 3444 strcpy(a_txt, s_txt); \ 000001D0 00109DE5 LDR R1,[SP, #+0] \ 000001D4 04009DE5 LDR R0,[SP, #+4] \ 000001D8 1A0000EF SWI +26 3445 strcpy(s_txt, d_txt); \ 000001DC 00009DE5 LDR R0,[SP, #+0] \ 000001E0 0910A0E1 MOV R1,R9 \ 000001E4 1A0000EF SWI +26 3446 strcpy(d_txt, f_txt); \ 000001E8 0A10A0E1 MOV R1,R10 \ 000001EC 0900A0E1 MOV R0,R9 \ 000001F0 1A0000EF SWI +26 3447 strcpy(f_txt, g_txt); \ 000001F4 0B10A0E1 MOV R1,R11 \ 000001F8 0A00A0E1 MOV R0,R10 \ 000001FC 1A0000EF SWI +26 3448 sprintf(g_txt, "%s: %s", nameu,de); \ 00000200 0530A0E1 MOV R3,R5 \ 00000204 0420A0E1 MOV R2,R4 \ 00000208 0710A0E1 MOV R1,R7 \ 0000020C 0B00A0E1 MOV R0,R11 \ 00000210 160000EF SWI +22 3449 } 3450 mfree(de); \ ??AddToMain_12: \ 00000214 0500A0E1 MOV R0,R5 \ 00000218 150000EF SWI +21 3451 main_d=1; \ 0000021C 0100A0E3 MOV R0,#+1 \ 00000220 340286E5 STR R0,[R6, #+564] 3452 } \ 00000224 F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??AddToMain_0: \ 00000228 ........ DC32 main_lenght \ 0000022C ........ DC32 use_cutter \ 00000230 ........ 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 900084E2 ADD R0,R4,#+144 \ 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 980094E5 LDR R0,[R4, #+152] \ 00000170 901094E5 LDR R1,[R4, #+144] 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 98008405 STREQ R0,[R4, #+152] \ 00000184 900084E2 ADD R0,R4,#+144 \ 00000188 ........ BL RemoveLOGQ 3494 } \ 0000018C 150056E3 CMP R6,#+21 \ 00000190 F5FFFFAA BGE ??AddStringToLog_7 3495 t->msg_count=i; \ ??AddStringToLog_6: \ 00000194 A06084E5 STR R6,[R4, #+160] 3496 if (!t->last_log) t->last_log=p; \ 00000198 980094E5 LDR R0,[R4, #+152] 3497 if (code==3) \ 0000019C ........ LDR R6,??DataTable112 ;; S_ICONS \ 000001A0 000050E3 CMP R0,#+0 \ 000001A4 98808405 STREQ R8,[R4, #+152] \ 000001A8 030055E3 CMP R5,#+3 \ 000001AC 0D00001A BNE ??AddStringToLog_8 3498 { 3499 if (edchat_id) \ 000001B0 180396E5 LDR R0,[R6, #+792] \ 000001B4 000050E3 CMP R0,#+0 \ 000001B8 1C00000A BEQ ??AddStringToLog_9 3500 { 3501 void *data=FindGUIbyId(edchat_id,NULL); \ 000001BC 180396E5 LDR R0,[R6, #+792] \ 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 800094E5 LDR R0,[R4, #+128] \ 000001EC 000050E3 CMP R0,#+0 \ 000001F0 08039605 LDREQ R0,[R6, #+776] \ 000001F4 01008002 ADDEQ R0,R0,#+1 \ 000001F8 08038605 STREQ R0,[R6, #+776] 3519 if(NEW_MSG==1) \ 000001FC B00396E5 LDR R0,[R6, #+944] \ 00000200 010050E3 CMP R0,#+1 \ 00000204 0700001A BNE ??AddStringToLog_10 3520 { 3521 t->unread_msg++; \ 00000208 840094E5 LDR R0,[R4, #+132] \ 0000020C 010080E2 ADD R0,R0,#+1 \ 00000210 840084E5 STR R0,[R4, #+132] 3522 total_unread2++; \ 00000214 640296E5 LDR R0,[R6, #+612] \ 00000218 010080E2 ADD R0,R0,#+1 \ 0000021C 640286E5 STR R0,[R6, #+612] 3523 NEW_MSG=0; \ 00000220 0000A0E3 MOV R0,#+0 \ 00000224 B00386E5 STR R0,[R6, #+944] 3524 } 3525 t->isunread=1; \ ??AddStringToLog_10: \ 00000228 0100A0E3 MOV R0,#+1 \ 0000022C 800084E5 STR R0,[R4, #+128] 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 801090E5 LDR R1,[R0, #+128] \ 00000024 000051E3 CMP R1,#+0 \ 00000028 BD00000A BEQ ??AddMsgToChat_0 3572 3573 p=ed_struct->ed_contact->last_log; \ 0000002C 985090E5 LDR R5,[R0, #+152] 3574 if (p) \ 00000030 ........ LDR R6,??DataTable149 ;; S_ICONS \ 00000034 ........ LDR R7,??DataTable114 ;; O_ED_X_FONT_SIZE \ 00000038 ........ LDR R8,??DataTable115 ;; X_COLOR \ 0000003C ........ LDR R9,??DataTable116 ;; 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,??DataTable137 ;; ED_H_FONT_SIZE 3579 if ((zc=p->acked&3)) \ 0000004C ........ LDR R1,??DataTable134 ;; 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,??DataTable130 ;; 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,??DataTable132 ;; 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,??DataTable131 ;; O_TO_COLOR \ ??AddMsgToChat_8: \ 000000B0 00B090E5 LDR R11,[R0, #+0] \ 000000B4 ........ LDR R0,??DataTable136 ;; 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,??DataTable128 ;; ED_X_FONT_SIZE \ 000000D4 F7FFFF0A BEQ ??AddMsgToChat_9 \ 000000D8 ........ LDR R0,??DataTable133 ;; 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,??DataTable135 ;; 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 880296E5 LDR R0,[R6, #+648] \ 00000104 101085E2 ADD R1,R5,#+16 \ 00000108 ........ _BLF ascii2ws,??ascii2ws??rA 3609 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 0000010C 883296E5 LDR R3,[R6, #+648] \ 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 883296E5 LDR R3,[R6, #+648] \ 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 880296E5 LDR R0,[R6, #+648] \ 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 880296E5 LDR R0,[R6, #+648] \ 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 883296E5 LDR R3,[R6, #+648] \ 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,??DataTable126 ;; O_ED_FONT_SIZE \ 00000220 ........ LDREQ R0,??DataTable127 ;; 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,??DataTable128 ;; 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 A01091E5 LDR R1,[R1, #+160] \ 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 985080E5 STR R5,[R0, #+152] 3660 if (IsGuiOnTop(edchat_id)) \ 000002D8 180396E5 LDR R0,[R6, #+792] \ 000002DC 350100EF SWI +309 \ 000002E0 000050E3 CMP R0,#+0 \ 000002E4 0300000A BEQ ??AddMsgToChat_18 3661 { 3662 total_unread--; \ 000002E8 080396E5 LDR R0,[R6, #+776] \ 000002EC 010040E2 SUB R0,R0,#+1 \ 000002F0 080386E5 STR R0,[R6, #+776] \ 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 805080E5 STR R5,[R0, #+128] 3667 total_unread2=total_unread2-ed_struct->ed_contact->unread_msg; \ 0000030C 641296E5 LDR R1,[R6, #+612] \ 00000310 842090E5 LDR R2,[R0, #+132] \ 00000314 021041E0 SUB R1,R1,R2 \ 00000318 641286E5 STR R1,[R6, #+612] 3668 ed_struct->ed_contact->unread_msg=0; \ 0000031C 845080E5 STR R5,[R0, #+132] 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 905091E5 LDR R5,[R1, #+144] \ 0000002C A01091E5 LDR R1,[R1, #+160] \ 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,??DataTable134 ;; I_COLOR 3700 color=ACK_COLOR; //Зеленый \ 00000080 ........ LDREQ R0,??DataTable130 ;; 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,??DataTable131 ;; O_TO_COLOR \ 000000AC ........ LDREQ R0,??DataTable132 ;; O_I_COLOR \ 000000B0 040000EA B ??DrawAck_5 \ ??DrawAck_7: \ 000000B4 010050E3 CMP R0,#+1 \ 000000B8 ........ LDRNE R0,??DataTable133 ;; TO_COLOR \ 000000BC ........ LDREQ R0,??DataTable134 ;; I_COLOR \ 000000C0 000000EA B ??DrawAck_5 3708 else 3709 color=UNACK_COLOR; //Серый \ ??DrawAck_6: \ 000000C4 ........ LDR R0,??DataTable135 ;; 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,??DataTable136 ;; O_ED_H_FONT_SIZE \ 000000E4 ........ LDREQ R0,??DataTable137 ;; 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 + 792 \ 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 + 792 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 + 640 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,??DataTable150 ;; SendAnswer \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 710100EF SWI +369 3746 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??set_my_status_0: \ 00000044 ........ DC32 S_ICONS + 640 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,??DataTable149 ;; S_ICONS \ 00000008 ........ LDR R4,??DataTable150 ;; SendAnswer \ 0000000C 0CD04DE2 SUB SP,SP,#+12 \ 00000010 7C0297E5 LDR R0,[R7, #+636] \ 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 840297E5 LDR R0,[R7, #+644] \ 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 840297E5 LDR R0,[R7, #+644] 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 840297E5 LDR R0,[R7, #+644] \ 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 840297E5 LDR R0,[R7, #+644] \ 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 840297E5 LDR R0,[R7, #+644] 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 840297E5 LDR R0,[R7, #+644] \ 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 840297E5 LDR R0,[R7, #+644] \ 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 B46287E5 STR R6,[R7, #+692] 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,??DataTable150 ;; 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,??DataTable149 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 BC1290E5 LDR R1,[R0, #+700] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD18 POPNE {PC} 3857 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable143 ;; Canvas 3858 gipc.name_from=ipc_my_name; 3859 gipc.data=(void *)maincsm_id; 3860 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 00000018 BC3080E2 ADD R3,R0,#+188 \ 0000001C 4C2E81E2 ADD R2,R1,#+1216 \ 00000020 4A1E81E2 ADD R1,R1,#+1184 \ 00000024 C01080E5 STR R1,[R0, #+192] \ 00000028 681290E5 LDR R1,[R0, #+616] \ 0000002C BC2080E5 STR R2,[R0, #+188] \ 00000030 C41080E5 STR R1,[R0, #+196] \ 00000034 0220A0E3 MOV R2,#+2 \ 00000038 B010A0E3 MOV R1,#+176 \ 0000003C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000040 0900A0E3 MOV R0,#+9 \ 00000044 420C80E3 ORR R0,R0,#0x4200 \ 00000048 000100EF SWI +256 3861 } \ 0000004C 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,??DataTable149 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 180395E5 LDR R0,[R5, #+792] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 7080BD08 POPEQ {R4-R6,PC} 3866 { 3867 void *data=FindGUIbyId(edchat_id,NULL); \ 00000018 180395E5 LDR R0,[R5, #+792] \ 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 880084E5 STR R0,[R4, #+136] 3878 #ifdef EVILFOX 3879 time_to_stop_t9=2; 3880 #else 3881 time_to_stop_t9=3; \ 00000058 0300A0E3 MOV R0,#+3 \ 0000005C B40385E5 STR R0,[R5, #+948] \ 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 180395E5 LDR R0,[R5, #+792] \ 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 + 7584 \ 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 + 7584 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,??DataTable148 ;; 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,??DataTable146 ;; 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,??DataTable148 ;; 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,??DataTable148 ;; 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,??DataTable149 ;; S_ICONS \ 00000010 0010A0E3 MOV R1,#+0 \ 00000014 B81380E5 STR R1,[R0, #+952] 4129 t->signals=signal; \ 00000018 702085E5 STR R2,[R5, #+112] 4130 TPKT *p; 4131 SENDMSGCOUNT+=count; \ 0000001C 701290E5 LDR R1,[R0, #+624] \ 00000020 011083E0 ADD R1,R3,R1 \ 00000024 701280E5 STR R1,[R0, #+624] 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,??DataTable150 ;; 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,??DataTable169 ;; 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 186B9FE5 LDR R6,??CheckComand_0 ;; `?` \ 0000000C 8ADF4DE2 SUB SP,SP,#+552 \ 00000010 00B0A0E1 MOV R11,R0 \ 00000014 0140A0E1 MOV R4,R1 \ 00000018 0100A0E3 MOV R0,#+1 \ 0000001C B80385E5 STR R0,[R5, #+952] 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,??DataTable152 ;; I_str \ 00000024 008B9FE5 LDR R8,??CheckComand_0+0x4 ;; show_send_info \ 00000028 2010A0E3 MOV R1,#+32 \ 0000002C 781D81E3 ORR R1,R1,#0x1E00 \ 00000030 051081E0 ADD R1,R1,R5 \ 00000034 10108DE5 STR R1,[SP, #+16] \ 00000038 10009DE5 LDR R0,[SP, #+16] \ 0000003C 583086E2 ADD R3,R6,#+88 \ 00000040 4C2086E2 ADD R2,R6,#+76 \ 00000044 0610A0E1 MOV R1,R6 \ 00000048 160000EF SWI +22 \ 0000004C 0100A0E3 MOV R0,#+1 \ 00000050 700084E5 STR R0,[R4, #+112] \ 00000054 A410A0E3 MOV R1,#+164 \ 00000058 6C1D81E3 ORR R1,R1,#0x1B00 \ 0000005C 051081E0 ADD R1,R1,R5 \ 00000060 14108DE5 STR R1,[SP, #+20] \ 00000064 0090A0E3 MOV R9,#+0 \ 00000068 6C1F86E2 ADD R1,R6,#+432 \ 0000006C 0B00A0E1 MOV R0,R11 \ 00000070 190000EF SWI +25 \ 00000074 000050E3 CMP R0,#+0 \ 00000078 0400000A BEQ ??CheckComand_1 \ 0000007C 6F1F86E2 ADD R1,R6,#+444 \ 00000080 0B00A0E1 MOV R0,R11 \ 00000084 190000EF SWI +25 \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 8500001A BNE ??CheckComand_2 4153 { 4154 char *s=malloc(16384); \ ??CheckComand_1: \ 00000090 400CA0E3 MOV R0,#+16384 \ 00000094 140000EF SWI +20 \ 00000098 00A0A0E1 MOV R10,R0 4155 char pl[256]; 4156 *s=0; \ 0000009C 0090CAE5 STRB R9,[R10, #+0] 4157 snprintf(pl,256,"%s model: %s sw: %s\r\n",PLATFORM,Get_Phone_Info(PI_MODEL),Get_Phone_Info(PI_SW_NUMBER)); \ 000000A0 0700A0E3 MOV R0,#+7 \ 000000A4 D50100EF SWI +469 \ 000000A8 00B0A0E1 MOV R11,R0 \ 000000AC 0900A0E3 MOV R0,#+9 \ 000000B0 D50100EF SWI +469 \ 000000B4 00082DE9 PUSH {R11} \ 000000B8 01002DE9 PUSH {R0} \ 000000BC 7C3086E2 ADD R3,R6,#+124 \ 000000C0 642086E2 ADD R2,R6,#+100 \ 000000C4 401FA0E3 MOV R1,#+256 \ 000000C8 30008DE2 ADD R0,SP,#+48 \ 000000CC 1B0100EF SWI +283 4158 strcat(s,pl); \ 000000D0 30108DE2 ADD R1,SP,#+48 \ 000000D4 0A00A0E1 MOV R0,R10 \ 000000D8 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); \ 000000DC 0C00A0E3 MOV R0,#+12 \ 000000E0 580D80E3 ORR R0,R0,#0x1600 \ 000000E4 050080E0 ADD R0,R0,R5 \ 000000E8 01002DE9 PUSH {R0} \ 000000EC 20009DE5 LDR R0,[SP, #+32] \ 000000F0 901086E2 ADD R1,R6,#+144 \ 000000F4 01002DE9 PUSH {R0} \ 000000F8 B00295E5 LDR R0,[R5, #+688] \ 000000FC 01002DE9 PUSH {R0} \ 00000100 AC3295E5 LDR R3,[R5, #+684] \ 00000104 A82295E5 LDR R2,[R5, #+680] \ 00000108 4F0F8DE2 ADD R0,SP,#+316 \ 0000010C 160000EF SWI +22 4162 strcat(s,online); \ 00000110 4F1F8DE2 ADD R1,SP,#+316 \ 00000114 0A00A0E1 MOV R0,R10 \ 00000118 170000EF SWI +23 4163 char *send_txt=malloc(64); \ 0000011C 4000A0E3 MOV R0,#+64 \ 00000120 140000EF SWI +20 \ 00000124 00B0A0E1 MOV R11,R0 4164 sprintf(send_txt, "Отправлено сообщений: %d \r\n" 4165 "Принято сообщений: %d \r\n", main2_count, main_count); \ 00000128 ........ LDR R0,??DataTable156 ;; main_count \ 0000012C C41086E2 ADD R1,R6,#+196 \ 00000130 003090E5 LDR R3,[R0, #+0] \ 00000134 ........ LDR R0,??DataTable157 ;; main2_count \ 00000138 002090E5 LDR R2,[R0, #+0] \ 0000013C 0B00A0E1 MOV R0,R11 \ 00000140 160000EF SWI +22 4166 strcat(s,send_txt); \ 00000144 0B10A0E1 MOV R1,R11 \ 00000148 0A00A0E1 MOV R0,R10 \ 0000014C 170000EF SWI +23 4167 4168 WSHDR *ws=AllocWS(64); \ 00000150 4000A0E3 MOV R0,#+64 \ 00000154 250100EF SWI +293 \ 00000158 14008DE5 STR R0,[SP, #+20] 4169 GetProvider(ws,0); \ 0000015C 0010A0E3 MOV R1,#+0 \ 00000160 410000EF SWI +65 4170 char prov[16]; 4171 ws_2str(ws,prov,wstrlen(ws)); \ 00000164 14009DE5 LDR R0,[SP, #+20] \ 00000168 230100EF SWI +291 \ 0000016C 0020A0E1 MOV R2,R0 \ 00000170 14009DE5 LDR R0,[SP, #+20] \ 00000174 2C108DE2 ADD R1,SP,#+44 \ 00000178 A30000EF SWI +163 4172 sprintf(send_txt, "Оператор: %s \r\n", prov); \ 0000017C 2C208DE2 ADD R2,SP,#+44 \ 00000180 F81086E2 ADD R1,R6,#+248 \ 00000184 0B00A0E1 MOV R0,R11 \ 00000188 160000EF SWI +22 4173 FreeWS(ws); \ 0000018C 14009DE5 LDR R0,[SP, #+20] \ 00000190 290100EF SWI +297 4174 strcat(s,send_txt); \ 00000194 0B10A0E1 MOV R1,R11 \ 00000198 0A00A0E1 MOV R0,R10 \ 0000019C 170000EF SWI +23 4175 4176 int bat; 4177 bat=*RamCap(); \ 000001A0 C88000EF SWI +32968 \ 000001A4 B020D0E1 LDRH R2,[R0, #+0] 4178 sprintf(send_txt, "Заряд батареи: %d процентов \r\n", bat); \ 000001A8 421F86E2 ADD R1,R6,#+264 \ 000001AC 0B00A0E1 MOV R0,R11 \ 000001B0 160000EF SWI +22 4179 strcat(s,send_txt); \ 000001B4 0B10A0E1 MOV R1,R11 \ 000001B8 0A00A0E1 MOV R0,R10 \ 000001BC 170000EF SWI +23 4180 4181 char *status=malloc(256); \ 000001C0 400FA0E3 MOV R0,#+256 \ 000001C4 140000EF SWI +20 \ 000001C8 14008DE5 STR R0,[SP, #+20] 4182 TTime the; 4183 GetDateTime(NULL,&the); \ 000001CC 1C108DE2 ADD R1,SP,#+28 \ 000001D0 0900A0E1 MOV R0,R9 \ 000001D4 B40000EF SWI +180 4184 void Get_Online_total(); 4185 Get_Online_total(); \ 000001D8 ........ BL Get_Online_total 4186 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l \ 000001DC F42295E5 LDR R2,[R5, #+756] \ 000001E0 F83295E5 LDR R3,[R5, #+760] 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); \ 000001E4 640295E5 LDR R0,[R5, #+612] \ 000001E8 4A1F86E2 ADD R1,R6,#+296 \ 000001EC 01002DE9 PUSH {R0} \ 000001F0 080395E5 LDR R0,[R5, #+776] \ 000001F4 01002DE9 PUSH {R0} \ 000001F8 280395E5 LDR R0,[R5, #+808] \ 000001FC 01002DE9 PUSH {R0} \ 00000200 2C0395E5 LDR R0,[R5, #+812] \ 00000204 01002DE9 PUSH {R0} \ 00000208 2D00DDE5 LDRB R0,[SP, #+45] \ 0000020C 01002DE9 PUSH {R0} \ 00000210 3000DDE5 LDRB R0,[SP, #+48] \ 00000214 01002DE9 PUSH {R0} \ 00000218 FC0295E5 LDR R0,[R5, #+764] \ 0000021C 01002DE9 PUSH {R0} \ 00000220 30009DE5 LDR R0,[SP, #+48] \ 00000224 160000EF SWI +22 \ 00000228 30D08DE2 ADD SP,SP,#+48 4193 strcat(s,status); \ 0000022C 00109DE5 LDR R1,[SP, #+0] \ 00000230 0A00A0E1 MOV R0,R10 \ 00000234 170000EF SWI +23 4194 comanda=0; 4195 if(show_send_info) \ 00000238 000098E5 LDR R0,[R8, #+0] \ 0000023C B89385E5 STR R9,[R5, #+952] \ 00000240 000050E3 CMP R0,#+0 \ 00000244 700295E5 LDR R0,[R5, #+624] \ 00000248 010080E2 ADD R0,R0,#+1 \ 0000024C 700285E5 STR R0,[R5, #+624] \ 00000250 0900000A BEQ ??CheckComand_3 4196 AddStringToLog(t,0x01,"Sending textinfo...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000254 0110A0E3 MOV R1,#+1 \ 00000258 02002DE9 PUSH {R1} \ 0000025C 8008A0E1 LSL R0,R0,#+17 \ 00000260 A008A0E1 LSR R0,R0,#+17 \ 00000264 01002DE9 PUSH {R0} \ 00000268 0730A0E1 MOV R3,R7 \ 0000026C 672F86E2 ADD R2,R6,#+412 \ 00000270 0400A0E1 MOV R0,R4 \ 00000274 ........ BL AddStringToLog \ 00000278 08D08DE2 ADD SP,SP,#+8 4197 else 4198 SENDMSGCOUNT++; 4199 SendData(t,s,ENA_SIGNAL,0); \ ??CheckComand_3: \ 0000027C 0030A0E3 MOV R3,#+0 \ 00000280 0120A0E3 MOV R2,#+1 \ 00000284 0A10A0E1 MOV R1,R10 \ 00000288 0400A0E1 MOV R0,R4 \ 0000028C ........ BL SendData 4200 mfree(s); \ 00000290 0A00A0E1 MOV R0,R10 \ 00000294 150000EF SWI +21 4201 mfree(send_txt); \ 00000298 0B00A0E1 MOV R0,R11 \ 0000029C 150000EF SWI +21 4202 mfree(status); \ 000002A0 00009DE5 LDR R0,[SP, #+0] \ 000002A4 690100EA B ??CheckComand_4 4203 return; 4204 } 4205 4206 if(!strcmp(txt, "__TIME") || !strcmp(txt, "__T") || !strcmp(txt, "GET_TIME")) \ ??CheckComand_2: \ 000002A8 791F86E2 ADD R1,R6,#+484 \ 000002AC 0B00A0E1 MOV R0,R11 \ 000002B0 190000EF SWI +25 \ 000002B4 000050E3 CMP R0,#+0 \ 000002B8 0900000A BEQ ??CheckComand_5 \ 000002BC DC1F8FE2 ADR R1,??CheckComand_6 ;; "__T" \ 000002C0 0B00A0E1 MOV R0,R11 \ 000002C4 190000EF SWI +25 \ 000002C8 000050E3 CMP R0,#+0 \ 000002CC 0400000A BEQ ??CheckComand_5 \ 000002D0 7B1F86E2 ADD R1,R6,#+492 \ 000002D4 0B00A0E1 MOV R0,R11 \ 000002D8 190000EF SWI +25 \ 000002DC 000050E3 CMP R0,#+0 \ 000002E0 2200001A BNE ??CheckComand_7 4207 { 4208 char *status=malloc(256); \ ??CheckComand_5: \ 000002E4 400FA0E3 MOV R0,#+256 \ 000002E8 140000EF SWI +20 \ 000002EC 00A0A0E1 MOV R10,R0 4209 TTime the; 4210 GetDateTime(NULL,&the); \ 000002F0 08108DE2 ADD R1,SP,#+8 \ 000002F4 0000A0E3 MOV R0,#+0 \ 000002F8 B40000EF SWI +180 4211 sprintf(status, "Time: %02d:%02d",the.hour, the.min); \ 000002FC 0930DDE5 LDRB R3,[SP, #+9] \ 00000300 0820DDE5 LDRB R2,[SP, #+8] \ 00000304 711F86E2 ADD R1,R6,#+452 \ 00000308 0A00A0E1 MOV R0,R10 \ 0000030C 160000EF SWI +22 4212 comanda=0; 4213 if(show_send_info) \ 00000310 000098E5 LDR R0,[R8, #+0] \ 00000314 B89385E5 STR R9,[R5, #+952] \ 00000318 000050E3 CMP R0,#+0 \ 0000031C 700295E5 LDR R0,[R5, #+624] \ 00000320 010080E2 ADD R0,R0,#+1 \ 00000324 700285E5 STR R0,[R5, #+624] \ 00000328 0900000A BEQ ??CheckComand_8 4214 AddStringToLog(t,0x01,"Sending time...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 0000032C 0110A0E3 MOV R1,#+1 \ 00000330 02002DE9 PUSH {R1} \ 00000334 8008A0E1 LSL R0,R0,#+17 \ 00000338 A008A0E1 LSR R0,R0,#+17 \ 0000033C 01002DE9 PUSH {R0} \ 00000340 0730A0E1 MOV R3,R7 \ 00000344 752F86E2 ADD R2,R6,#+468 \ 00000348 0400A0E1 MOV R0,R4 \ 0000034C ........ BL AddStringToLog \ 00000350 08D08DE2 ADD SP,SP,#+8 4215 else 4216 SENDMSGCOUNT++; 4217 SendData(t,status,ENA_SIGNAL,0); \ ??CheckComand_8: \ 00000354 0030A0E3 MOV R3,#+0 \ 00000358 0120A0E3 MOV R2,#+1 \ 0000035C 0A10A0E1 MOV R1,R10 \ 00000360 0400A0E1 MOV R0,R4 \ 00000364 ........ BL SendData 4218 mfree(status); \ 00000368 0A00A0E1 MOV R0,R10 \ 0000036C 370100EA B ??CheckComand_4 4219 return; 4220 } 4221 4222 if(!strcmp(txt, "GET_PLATFORM_INFO") || !strcmp(txt, "__PLATFORM") || !strcmp(txt,"__HW")) \ ??CheckComand_7: \ 00000370 ........ LDR R10,??DataTable155 ;; SendAnswer \ 00000374 8A1F86E2 ADD R1,R6,#+552 \ 00000378 0B00A0E1 MOV R0,R11 \ 0000037C 190000EF SWI +25 \ 00000380 000050E3 CMP R0,#+0 \ 00000384 0900000A BEQ ??CheckComand_9 \ 00000388 8F1F86E2 ADD R1,R6,#+572 \ 0000038C 0B00A0E1 MOV R0,R11 \ 00000390 190000EF SWI +25 \ 00000394 000050E3 CMP R0,#+0 \ 00000398 0400000A BEQ ??CheckComand_9 \ 0000039C 921F86E2 ADD R1,R6,#+584 \ 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 B89385E5 STR R9,[R5, #+952] 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 0090A0E1 MOV R9,R0 \ 000003C0 0900A0E3 MOV R0,#+9 \ 000003C4 D50100EF SWI +469 \ 000003C8 00022DE9 PUSH {R9} \ 000003CC 01002DE9 PUSH {R0} \ 000003D0 7C3086E2 ADD R3,R6,#+124 \ 000003D4 7E2F86E2 ADD R2,R6,#+504 \ 000003D8 401FA0E3 MOV R1,#+256 \ 000003DC 4C0F8DE2 ADD R0,SP,#+304 \ 000003E0 1B0100EF SWI +283 4228 p=malloc(sizeof(PKT)+strlen(pl)+1); \ 000003E4 4C0F8DE2 ADD R0,SP,#+304 \ 000003E8 1B0000EF SWI +27 \ 000003EC 090080E2 ADD R0,R0,#+9 \ 000003F0 140000EF SWI +20 \ 000003F4 0090A0E1 MOV R9,R0 4229 p->pkt.uin=t->uin; \ 000003F8 0C0094E5 LDR R0,[R4, #+12] \ 000003FC 000089E5 STR R0,[R9, #+0] 4230 p->pkt.type=T_SENDMSG; \ 00000400 0200A0E3 MOV R0,#+2 \ 00000404 B400C9E1 STRH R0,[R9, #+4] 4231 p->pkt.data_len=strlen(pl); \ 00000408 4C0F8DE2 ADD R0,SP,#+304 \ 0000040C 1B0000EF SWI +27 \ 00000410 B600C9E1 STRH R0,[R9, #+6] 4232 strcpy(p->data,pl); \ 00000414 4C1F8DE2 ADD R1,SP,#+304 \ 00000418 080089E2 ADD R0,R9,#+8 \ 0000041C 1A0000EF SWI +26 4233 if(show_send_info) \ 00000420 000098E5 LDR R0,[R8, #+0] \ 00000424 08D08DE2 ADD SP,SP,#+8 \ 00000428 000050E3 CMP R0,#+0 \ 0000042C 700295E5 LDR R0,[R5, #+624] \ 00000430 010080E2 ADD R0,R0,#+1 \ 00000434 700285E5 STR R0,[R5, #+624] \ 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 832F86E2 ADD R2,R6,#+524 \ 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 0920A0E1 MOV R2,R9 \ ??CheckComand_12: \ 00000468 0010A0E3 MOV R1,#+0 \ 0000046C 0A00A0E1 MOV R0,R10 \ 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 9F1F86E2 ADD R1,R6,#+636 \ 0000047C 0B00A0E1 MOV R0,R11 \ 00000480 190000EF SWI +25 \ 00000484 000050E3 CMP R0,#+0 \ 00000488 0400000A BEQ ??CheckComand_14 \ 0000048C A31F86E2 ADD R1,R6,#+652 \ 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 B89385E5 STR R9,[R5, #+952] 4244 TPKT *p; 4245 char online[256]; 4246 sprintf(online,"Время в онлайн: %02d:%02d:%02d \n" 4247 "Сервер: %s", uptimeHour, uptimeMin, uptimeSec, hostbuf2); \ 000004A4 14009DE5 LDR R0,[SP, #+20] \ 000004A8 941F86E2 ADD R1,R6,#+592 \ 000004AC 01002DE9 PUSH {R0} \ 000004B0 B00295E5 LDR R0,[R5, #+688] \ 000004B4 01002DE9 PUSH {R0} \ 000004B8 AC3295E5 LDR R3,[R5, #+684] \ 000004BC A82295E5 LDR R2,[R5, #+680] \ 000004C0 4C0F8DE2 ADD R0,SP,#+304 \ 000004C4 160000EF SWI +22 4248 p=malloc(sizeof(PKT)+strlen(online)+1); \ 000004C8 4C0F8DE2 ADD R0,SP,#+304 \ 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 0200A0E3 MOV R0,#+2 \ 000004E8 B400C6E1 STRH R0,[R6, #+4] 4251 p->pkt.data_len=strlen(online); \ 000004EC 4C0F8DE2 ADD R0,SP,#+304 \ 000004F0 1B0000EF SWI +27 \ 000004F4 B600C6E1 STRH R0,[R6, #+6] 4252 strcpy(p->data,online); \ 000004F8 4C1F8DE2 ADD R1,SP,#+304 \ 000004FC 080086E2 ADD R0,R6,#+8 \ 00000500 1A0000EF SWI +26 4253 if(show_send_info) \ 00000504 000098E5 LDR R0,[R8, #+0] \ 00000508 08D08DE2 ADD SP,SP,#+8 \ 0000050C 000050E3 CMP R0,#+0 \ 00000510 700295E5 LDR R0,[R5, #+624] \ 00000514 010080E2 ADD R0,R0,#+1 \ 00000518 700285E5 STR R0,[R5, #+624] \ 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 B000A0E3 MOV R0,#+176 \ 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 B21F86E2 ADD R1,R6,#+712 \ 0000055C 0B00A0E1 MOV R0,R11 \ 00000560 190000EF SWI +25 \ 00000564 000050E3 CMP R0,#+0 \ 00000568 0400000A BEQ ??CheckComand_17 \ 0000056C B61F86E2 ADD R1,R6,#+728 \ 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 B89385E5 STR R9,[R5, #+952] 4264 TPKT *p; 4265 char *send_txt=malloc(64); \ 00000584 4000A0E3 MOV R0,#+64 \ 00000588 140000EF SWI +20 \ 0000058C 0090A0E1 MOV R9,R0 4266 sprintf(send_txt, "Отправлено сообщений: %d \n" 4267 "Принято сообщений: %d" 4268 , main2_count, main_count); \ 00000590 ........ LDR R0,??DataTable156 ;; main_count \ 00000594 A61F86E2 ADD R1,R6,#+664 \ 00000598 003090E5 LDR R3,[R0, #+0] \ 0000059C ........ LDR R0,??DataTable157 ;; main2_count \ 000005A0 002090E5 LDR R2,[R0, #+0] \ 000005A4 0900A0E1 MOV R0,R9 \ 000005A8 160000EF SWI +22 4269 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000005AC 0900A0E1 MOV R0,R9 \ 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 0200A0E3 MOV R0,#+2 \ 000005CC B400C6E1 STRH R0,[R6, #+4] 4272 p->pkt.data_len=strlen(send_txt); \ 000005D0 0900A0E1 MOV R0,R9 \ 000005D4 1B0000EF SWI +27 \ 000005D8 B600C6E1 STRH R0,[R6, #+6] 4273 strcpy(p->data,send_txt); \ 000005DC 0910A0E1 MOV R1,R9 \ 000005E0 080086E2 ADD R0,R6,#+8 \ 000005E4 1A0000EF SWI +26 4274 if(show_send_info) \ 000005E8 000098E5 LDR R0,[R8, #+0] \ 000005EC 000050E3 CMP R0,#+0 \ 000005F0 700295E5 LDR R0,[R5, #+624] \ 000005F4 010080E2 ADD R0,R0,#+1 \ 000005F8 700285E5 STR R0,[R5, #+624] \ 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 C800A0E3 MOV R0,#+200 \ 0000061C 740D80E3 ORR R0,R0,#0x1D00 \ 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 C31F86E2 ADD R1,R6,#+780 \ 0000063C 0B00A0E1 MOV R0,R11 \ 00000640 190000EF SWI +25 \ 00000644 000050E3 CMP R0,#+0 \ 00000648 0400000A BEQ ??CheckComand_21 \ 0000064C C71F86E2 ADD R1,R6,#+796 \ 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 B89385E5 STR R9,[R5, #+952] 4288 TPKT *p; 4289 4290 WSHDR *ws=AllocWS(32); \ 00000664 2000A0E3 MOV R0,#+32 \ 00000668 250100EF SWI +293 \ 0000066C 0090A0E1 MOV R9,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 0900A0E1 MOV R0,R9 \ 0000067C 230100EF SWI +291 \ 00000680 0020A0E1 MOV R2,R0 \ 00000684 18108DE2 ADD R1,SP,#+24 \ 00000688 0900A0E1 MOV R0,R9 \ 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 18208DE2 ADD R2,SP,#+24 \ 000006A0 B81F86E2 ADD R1,R6,#+736 \ 000006A4 160000EF SWI +22 4296 FreeWS(ws); \ 000006A8 0900A0E1 MOV R0,R9 \ 000006AC 290100EF SWI +297 4297 4298 p=malloc(sizeof(PKT)+28+1); \ 000006B0 2500A0E3 MOV R0,#+37 \ 000006B4 140000EF SWI +20 \ 000006B8 0090A0E1 MOV R9,R0 4299 p->pkt.uin=t->uin; \ 000006BC 0C0094E5 LDR R0,[R4, #+12] \ 000006C0 000089E5 STR R0,[R9, #+0] 4300 p->pkt.type=T_SENDMSG; \ 000006C4 0200A0E3 MOV R0,#+2 \ 000006C8 B400C9E1 STRH R0,[R9, #+4] 4301 p->pkt.data_len=strlen(send_txt); \ 000006CC 0B00A0E1 MOV R0,R11 \ 000006D0 1B0000EF SWI +27 \ 000006D4 B600C9E1 STRH R0,[R9, #+6] 4302 strcpy(p->data,send_txt); \ 000006D8 0B10A0E1 MOV R1,R11 \ 000006DC 080089E2 ADD R0,R9,#+8 \ 000006E0 1A0000EF SWI +26 4303 if(show_send_info) \ 000006E4 000098E5 LDR R0,[R8, #+0] \ 000006E8 000050E3 CMP R0,#+0 \ 000006EC 700295E5 LDR R0,[R5, #+624] \ 000006F0 010080E2 ADD R0,R0,#+1 \ 000006F4 700285E5 STR R0,[R5, #+624] \ 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 BC2F86E2 ADD R2,R6,#+752 \ 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 0920A0E1 MOV R2,R9 \ 00000728 0010A0E3 MOV R1,#+0 \ 0000072C 0A00A0E1 MOV R0,R10 \ 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 CF1F86E2 ADD R1,R6,#+828 \ 00000740 0B00A0E1 MOV R0,R11 \ 00000744 190000EF SWI +25 \ 00000748 000050E3 CMP R0,#+0 \ 0000074C 0400000A BEQ ??CheckComand_24 \ 00000750 D31F86E2 ADD R1,R6,#+844 \ 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 B89385E5 STR R9,[R5, #+952] 4319 TPKT *p; 4320 char *send_txt=malloc(256); \ 00000768 400FA0E3 MOV R0,#+256 \ 0000076C 140000EF SWI +20 \ 00000770 0090A0E1 MOV R9,R0 4321 // sprintf(I_UIN, "uin%d", t->uin); 4322 strcpy(I_UIN, t->name); \ 00000774 A400A0E3 MOV R0,#+164 \ 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,??DataTable158 ;; ignor_list \ 00000790 0B10A0E1 MOV R1,R11 \ 00000794 180100EF SWI +280 \ 00000798 000050E3 CMP R0,#+0 4324 { 4325 strcpy(send_txt, mod_info); \ 0000079C 10109D05 LDREQ R1,[SP, #+16] 4326 } 4327 else 4328 strcpy(send_txt, "***Access denied***"); \ 000007A0 0900A0E1 MOV R0,R9 \ 000007A4 CA1F8612 ADDNE R1,R6,#+808 \ 000007A8 1A0000EF SWI +26 4329 4330 strcpy(send_txt, mod_info); \ 000007AC 10109DE5 LDR R1,[SP, #+16] \ 000007B0 0900A0E1 MOV R0,R9 \ 000007B4 1A0000EF SWI +26 4331 4332 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000007B8 0900A0E1 MOV R0,R9 \ 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 0200A0E3 MOV R0,#+2 \ 000007D8 B400C6E1 STRH R0,[R6, #+4] 4335 p->pkt.data_len=strlen(send_txt); \ 000007DC 0900A0E1 MOV R0,R9 \ 000007E0 1B0000EF SWI +27 \ 000007E4 B600C6E1 STRH R0,[R6, #+6] 4336 strcpy(p->data,send_txt); \ 000007E8 0910A0E1 MOV R1,R9 \ 000007EC 080086E2 ADD R0,R6,#+8 \ 000007F0 1A0000EF SWI +26 4337 #ifdef EVILFOX 4338 SENDMSGCOUNT++; 4339 #else 4340 if(show_send_info) \ 000007F4 000098E5 LDR R0,[R8, #+0] \ 000007F8 000050E3 CMP R0,#+0 \ 000007FC 700295E5 LDR R0,[R5, #+624] \ 00000800 010080E2 ADD R0,R0,#+1 \ 00000804 700285E5 STR R0,[R5, #+624] \ 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 F400A0E3 MOV R0,#+244 \ 00000828 740D80E3 ORR R0,R0,#0x1D00 \ 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 0A00A0E1 MOV R0,R10 \ 00000848 710100EF SWI +369 4346 mfree(send_txt); \ 0000084C 0900A0E1 MOV R0,R9 \ ??CheckComand_4: \ 00000850 150000EF SWI +21 \ ??CheckComand_13: \ 00000854 8ADF8DE2 ADD SP,SP,#+552 \ 00000858 F08FBDE8 POP {R4-R11,PC} 4347 return; 4348 } 4349 4350 if(!strcmp(txt, "GET_BAT_INFO") || !strcmp(txt, "__BAT")) \ ??CheckComand_25: \ 0000085C DC1F86E2 ADD R1,R6,#+880 \ 00000860 0B00A0E1 MOV R0,R11 \ 00000864 190000EF SWI +25 \ 00000868 000050E3 CMP R0,#+0 \ 0000086C 0400000A BEQ ??CheckComand_27 \ 00000870 E01F86E2 ADD R1,R6,#+896 \ 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 B89385E5 STR R9,[R5, #+952] 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 0090A0E1 MOV R9,R0 4357 sprintf(send_txt, "Заряд батареи: %d процентов", bat); \ 0000089C 0B20A0E1 MOV R2,R11 \ 000008A0 D51F86E2 ADD R1,R6,#+852 \ 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 0200A0E3 MOV R0,#+2 \ 000008C0 B400C6E1 STRH R0,[R6, #+4] 4361 p->pkt.data_len=strlen(send_txt); \ 000008C4 0900A0E1 MOV R0,R9 \ 000008C8 1B0000EF SWI +27 \ 000008CC B600C6E1 STRH R0,[R6, #+6] 4362 strcpy(p->data,send_txt); \ 000008D0 0910A0E1 MOV R1,R9 \ 000008D4 080086E2 ADD R0,R6,#+8 \ 000008D8 1A0000EF SWI +26 4363 #ifdef EVILFOX 4364 SENDMSGCOUNT++; 4365 #else 4366 if(show_send_info) \ 000008DC 000098E5 LDR R0,[R8, #+0] \ 000008E0 000050E3 CMP R0,#+0 \ 000008E4 700295E5 LDR R0,[R5, #+624] \ 000008E8 010080E2 ADD R0,R0,#+1 \ 000008EC 700285E5 STR R0,[R5, #+624] \ 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 DC00A0E3 MOV R0,#+220 \ 00000910 740D80E3 ORR R0,R0,#0x1D00 \ 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 941295E5 LDR R1,[R5, #+660] \ 0000092C ........ LDR R2,??DataTable159 ;; automsgcount \ 00000930 640094E5 LDR R0,[R4, #+100] \ 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 783094E5 LDR R3,[R4, #+120] \ 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 D4219FE5 LDR R2,??CheckComand_0+0x8 ;; awayHelloMsg \ 00000958 010083E2 ADD R0,R3,#+1 \ 0000095C 780084E5 STR R0,[R4, #+120] \ 00000960 0100A0E3 MOV R0,#+1 \ 00000964 B80385E5 STR R0,[R5, #+952] \ 00000968 1C00A0E3 MOV R0,#+28 \ 0000096C 5C0D80E3 ORR R0,R0,#0x1700 \ 00000970 059080E0 ADD R9,R0,R5 \ 00000974 420F80E2 ADD R0,R0,#+264 \ 00000978 050080E0 ADD R0,R0,R5 \ 0000097C 01002DE9 PUSH {R0} \ 00000980 ........ LDR R0,??DataTable160 ;; awayMsg \ 00000984 143084E2 ADD R3,R4,#+20 \ 00000988 01002DE9 PUSH {R0} \ 0000098C 401E86E2 ADD R1,R6,#+1024 \ 00000990 0900A0E1 MOV R0,R9 \ 00000994 160000EF SWI +22 4383 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 00000998 0900A0E1 MOV R0,R9 \ 0000099C 1B0000EF SWI +27 \ 000009A0 090080E2 ADD R0,R0,#+9 \ 000009A4 140000EF SWI +20 \ 000009A8 0060A0E1 MOV R6,R0 4384 p->pkt.uin=t->uin; \ 000009AC 0C0094E5 LDR R0,[R4, #+12] \ 000009B0 000086E5 STR R0,[R6, #+0] 4385 p->pkt.type=T_SENDMSG; \ 000009B4 0200A0E3 MOV R0,#+2 \ 000009B8 B400C6E1 STRH R0,[R6, #+4] 4386 p->pkt.data_len=strlen(away_msg); \ 000009BC 0900A0E1 MOV R0,R9 \ 000009C0 1B0000EF SWI +27 \ 000009C4 B600C6E1 STRH R0,[R6, #+6] 4387 strcpy(p->data,away_msg); \ 000009C8 0910A0E1 MOV R1,R9 \ 000009CC 080086E2 ADD R0,R6,#+8 \ 000009D0 1A0000EF SWI +26 4388 if(show_send_info) \ 000009D4 000098E5 LDR R0,[R8, #+0] \ 000009D8 08D08DE2 ADD SP,SP,#+8 \ 000009DC 000050E3 CMP R0,#+0 \ 000009E0 700295E5 LDR R0,[R5, #+624] \ 000009E4 010080E2 ADD R0,R0,#+1 \ 000009E8 700285E5 STR R0,[R5, #+624] \ 000009EC 0B00000A BEQ ??CheckComand_33 4389 #ifdef kluchnik 4390 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF,1); 4391 #else 4392 AddStringToLog(t,0x01,requests6,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000009F0 0110A0E3 MOV R1,#+1 \ 000009F4 02002DE9 PUSH {R1} \ 000009F8 8008A0E1 LSL R0,R0,#+17 \ 000009FC A008A0E1 LSR R0,R0,#+17 \ 00000A00 01002DE9 PUSH {R0} \ 00000A04 0730A0E1 MOV R3,R7 \ 00000A08 0800A0E3 MOV R0,#+8 \ 00000A0C 780D80E3 ORR R0,R0,#0x1E00 \ 00000A10 052080E0 ADD R2,R0,R5 \ 00000A14 0400A0E1 MOV R0,R4 \ 00000A18 ........ BL AddStringToLog \ 00000A1C 08D08DE2 ADD SP,SP,#+8 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; } 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) \ ??CheckComand_32: \ 00000A28 010051E3 CMP R1,#+1 \ 00000A2C 0100000A BEQ ??CheckComand_34 \ ??CheckComand_31: \ 00000A30 000050E3 CMP R0,#+0 \ 00000A34 0100000A BEQ ??CheckComand_35 4418 { 4419 t->automsgcount=automsgcount; \ ??CheckComand_34: \ 00000A38 782084E5 STR R2,[R4, #+120] 4420 return; \ 00000A3C 84FFFFEA 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_35: \ 00000A40 FA1F86E2 ADD R1,R6,#+1000 \ 00000A44 0B00A0E1 MOV R0,R11 \ 00000A48 190000EF SWI +25 \ 00000A4C 000050E3 CMP R0,#+0 \ 00000A50 0400000A BEQ ??CheckComand_36 \ 00000A54 FE1F86E2 ADD R1,R6,#+1016 \ 00000A58 0B00A0E1 MOV R0,R11 \ 00000A5C 190000EF SWI +25 \ 00000A60 000050E3 CMP R0,#+0 \ 00000A64 2A00001A BNE ??CheckComand_37 4428 { 4429 comanda=0; \ ??CheckComand_36: \ 00000A68 B89385E5 STR R9,[R5, #+952] 4430 TPKT *p; 4431 4432 char *send_txt=malloc(256); \ 00000A6C 400FA0E3 MOV R0,#+256 \ 00000A70 140000EF SWI +20 \ 00000A74 0090A0E1 MOV R9,R0 4433 sprintf(send_txt,"revision 2058, mod date: %s at %s ", 4434 "http://kluchnik.jino-net.ru/naticqmod/",__DATE__,__TIME__); \ 00000A78 580086E2 ADD R0,R6,#+88 \ 00000A7C 01002DE9 PUSH {R0} \ 00000A80 4C3086E2 ADD R3,R6,#+76 \ 00000A84 EB2F86E2 ADD R2,R6,#+940 \ 00000A88 E21F86E2 ADD R1,R6,#+904 \ 00000A8C 0900A0E1 MOV R0,R9 \ 00000A90 160000EF SWI +22 4435 4436 p=malloc(sizeof(PKT)+256); \ 00000A94 420FA0E3 MOV R0,#+264 \ 00000A98 140000EF SWI +20 \ 00000A9C 00B0A0E1 MOV R11,R0 4437 p->pkt.uin=t->uin; \ 00000AA0 0C0094E5 LDR R0,[R4, #+12] \ 00000AA4 00008BE5 STR R0,[R11, #+0] 4438 p->pkt.type=T_SENDMSG; \ 00000AA8 0200A0E3 MOV R0,#+2 \ 00000AAC B400CBE1 STRH R0,[R11, #+4] 4439 p->pkt.data_len=strlen(send_txt); \ 00000AB0 0900A0E1 MOV R0,R9 \ 00000AB4 1B0000EF SWI +27 \ 00000AB8 B600CBE1 STRH R0,[R11, #+6] 4440 strcpy(p->data,send_txt); \ 00000ABC 0910A0E1 MOV R1,R9 \ 00000AC0 08008BE2 ADD R0,R11,#+8 \ 00000AC4 1A0000EF SWI +26 4441 if(show_send_info) \ 00000AC8 000098E5 LDR R0,[R8, #+0] \ 00000ACC 04D08DE2 ADD SP,SP,#+4 \ 00000AD0 000050E3 CMP R0,#+0 \ 00000AD4 700295E5 LDR R0,[R5, #+624] \ 00000AD8 010080E2 ADD R0,R0,#+1 \ 00000ADC 700285E5 STR R0,[R5, #+624] \ 00000AE0 0900000A BEQ ??CheckComand_38 4442 AddStringToLog(t,0x01,"Sending url info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000AE4 0110A0E3 MOV R1,#+1 \ 00000AE8 02002DE9 PUSH {R1} \ 00000AEC 8008A0E1 LSL R0,R0,#+17 \ 00000AF0 A008A0E1 LSR R0,R0,#+17 \ 00000AF4 01002DE9 PUSH {R0} \ 00000AF8 0730A0E1 MOV R3,R7 \ 00000AFC F52F86E2 ADD R2,R6,#+980 \ 00000B00 0400A0E1 MOV R0,R4 \ 00000B04 ........ BL AddStringToLog \ 00000B08 08D08DE2 ADD SP,SP,#+8 4443 else 4444 SENDMSGCOUNT++; 4445 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_38: \ 00000B0C 0B20A0E1 MOV R2,R11 \ 00000B10 4AFFFFEA B ??CheckComand_26 4446 mfree(send_txt); 4447 return; 4448 } 4449 4450 #ifdef kluchnik // не доступно для всех,потому что имхо,будет еще большая перегрузка серверов!!!а оно нам надо? 4451 if(t->isautobot) 4452 { 4453 TPKT *p; 4454 int i=LoadBotMessage(t->uin); 4455 if(i==0) return;//если нет никаких файлов то просто возвращаемся 4456 char *pp=bot_lines[t->bot_msg]; 4457 t->bot_msg++; 4458 if(t->bot_msg==i) 4459 t->bot_msg=0; 4460 p=malloc(sizeof(PKT)+strlen(pp)+1); 4461 p->pkt.uin=t->uin; 4462 p->pkt.type=T_SENDMSG; 4463 p->pkt.data_len=strlen(pp); 4464 strcpy(p->data,pp); 4465 AddStringToLog(t,0x01,pp,"Autobot",(++SENDMSGCOUNT)&0x7FFF,1); 4466 SUBPROC((void *)SendAnswer,0,p); 4467 return; 4468 } 4469 #endif 4470 4471 CheckComand2(txt,t); \ ??CheckComand_37: \ 00000B14 0410A0E1 MOV R1,R4 \ 00000B18 0B00A0E1 MOV R0,R11 \ 00000B1C ........ _BLF CheckComand2,??CheckComand2??rA 4472 } \ 00000B20 8ADF8DE2 ADD SP,SP,#+552 \ 00000B24 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CheckComand_0: \ 00000B28 ........ DC32 `?` \ 00000B2C ........ DC32 show_send_info \ 00000B30 ........ 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,??DataTable169 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C C00394E5 LDR R0,[R4, #+960] \ 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 4800A0E3 MOV R0,#+72 \ 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 C00394E5 LDR R0,[R4, #+960] \ 00000078 020040E2 SUB R0,R0,#+2 \ 0000007C 010000EA B ??show_on_contact_3 4497 } 4498 else 4499 INC_show2--; \ ??show_on_contact_2: \ 00000080 C00394E5 LDR R0,[R4, #+960] \ 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,??DataTable165 ;; PopupFont \ 0000008C C00384E5 STR R0,[R4, #+960] \ 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,??DataTable167 ;; 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 8800A0E3 MOV R0,#+136 \ 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,??DataTable169 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C BC0394E5 LDR R0,[R4, #+956] \ 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 2800A0E3 MOV R0,#+40 \ 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 BC0394E5 LDR R0,[R4, #+956] \ 00000078 020040E2 SUB R0,R0,#+2 \ 0000007C 010000EA B ??show_pp_sender_2 4525 } 4526 else 4527 INC_show--; \ ??show_pp_sender_1: \ 00000080 BC0394E5 LDR R0,[R4, #+956] \ 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,??DataTable165 ;; PopupFont \ 0000008C ........ LDR R11,??DataTable166 ;; NumStatusToIconBar \ 00000090 BC0384E5 STR R0,[R4, #+956] \ 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,??DataTable167 ;; 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 A000A0E3 MOV R0,#+160 \ 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,??DataTable169 ;; S_ICONS \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 281380E5 STR R1,[R0, #+808] 4549 kopa_kontaktu=0; \ 0000000C 2C1380E5 STR R1,[R0, #+812] 4550 t=(CLIST *)(&cltop); \ 00000010 C31F80E2 ADD R1,R0,#+780 \ 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 282390E5 LDR R2,[R0, #+808] \ 00000030 012082E2 ADD R2,R2,#+1 \ 00000034 282380E5 STR R2,[R0, #+808] 4556 if (t->state!=65535) kopa_kontaktu++; \ 00000038 B425D1E1 LDRH R2,[R1, #+84] \ 0000003C 030052E1 CMP R2,R3 \ 00000040 2C239015 LDRNE R2,[R0, #+812] \ 00000044 01208212 ADDNE R2,R2,#+1 \ 00000048 2C238015 STRNE R2,[R0, #+812] 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,??DataTable169 ;; S_ICONS \ 00000004 C31F80E2 ADD R1,R0,#+780 \ 00000008 0B0000EA 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 0800001A BNE ??SetIndividStatus_0 4572 { 4573 t->isvibra=1; \ 00000018 0120A0E3 MOV R2,#+1 \ 0000001C 5C2081E5 STR R2,[R1, #+92] 4574 t->issound=1; \ 00000020 602081E5 STR R2,[R1, #+96] 4575 t->isShowXst=Show_XTX; \ 00000024 A03290E5 LDR R3,[R0, #+672] \ 00000028 6C3081E5 STR R3,[R1, #+108] 4576 #ifdef kluchnik 4577 t->isLoadHistory=1; 4578 #endif 4579 t->signals=1; \ 0000002C 702081E5 STR R2,[R1, #+112] 4580 t->isaccess=1; \ 00000030 742081E5 STR R2,[R1, #+116] 4581 4582 t->automsgcount=0; \ 00000034 0020A0E3 MOV R2,#+0 \ 00000038 782081E5 STR R2,[R1, #+120] 4583 } 4584 } \ ??SetIndividStatus_0: \ 0000003C 001091E5 LDR R1,[R1, #+0] \ 00000040 000051E3 CMP R1,#+0 \ 00000044 F0FFFF1A BNE ??SetIndividStatus_1 4585 } \ 00000048 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 30AB9FE5 LDR R10,??ProcessPacket_1+0x4 ;; ILL_RECV_FADE \ 0000000C ........ LDR R5,??DataTable189 ;; Canvas \ 00000010 ........ LDR R7,??DataTable191 ;; 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 BD02008A 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 34010E00B902 DC16 +308,+14,+697,+697 \ B902 \ 0000004C 1100B9024D00 DC16 +17,+697,+77,+697 \ B902 \ 00000054 B902B902B902 DC16 +697,+697,+697,+697 \ B902 \ 0000005C B9021F021F02 DC16 +697,+543,+543,+697 \ B902 \ 00000064 B9023D004B00 DC16 +697,+61,+75,+697 \ B902 \ 0000006C B902B9024F02 DC16 +697,+697,+591,+697 \ B902 \ 00000074 B902B902B902 DC16 +697,+697,+697,+697 \ B902 \ 0000007C B7020000 DC16 +695,+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 A70200EA 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 B00098E5 LDR R0,[R8, #+176] \ 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 100397E5 LDR R0,[R7, #+784] \ 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 930200EA B ??ProcessPacket_2 4611 } 4612 else 4613 { 4614 RecountMenu(AddContact(p->pkt.uin,p->data, GROUP_CACHE, 0),1); \ ??ProcessPacket_6: \ 000000DC 102397E5 LDR R2,[R7, #+784] \ 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,??DataTable172 ;; 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 D46287E5 STR R6,[R7, #+724] 4622 start_vibra(); \ 0000010C ........ BL start_vibra 4623 } 4624 GROUP_CACHE=0; \ ??ProcessPacket_10: \ 00000110 109387E5 STR R9,[R7, #+784] 4625 ask_my_info(); 4626 if (contactlist_menu_id) \ 00000114 140397E5 LDR R0,[R7, #+788] \ 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 946387E5 STR R6,[R7, #+916] 4633 create_contactlist_menu(); \ 00000130 ........ BL create_contactlist_menu 4634 SetIndividStatus(); \ 00000134 ........ BL SetIndividStatus \ 00000138 7B0200EA B ??ProcessPacket_2 4635 } 4636 } 4637 break; 4638 case T_GROUPID: 4639 if (t=FindGroupByID(GROUP_CACHE=p->pkt.uin)) \ ??ProcessPacket_13: \ 0000013C 100387E5 STR R0,[R7, #+784] \ 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 100387E5 STR R0,[R7, #+784] \ 00000178 6B0200EA 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 6802000A 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 80099FE5 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 AC6088E5 STR R6,[R8, #+172] 4666 if (edchat_id) // Если открыт чат \ 000001D0 180397E5 LDR R0,[R7, #+792] \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 0F00000A BEQ ??ProcessPacket_17 4667 { 4668 void *data=FindGUIbyId(edchat_id,NULL); \ 000001DC 180397E5 LDR R0,[R7, #+792] \ 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 AC9088E5 STR R9,[R8, #+172] 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 AC9088E5 STR R9,[R8, #+172] 4686 } 4687 } 4688 if (contactlist_menu_id) \ ??ProcessPacket_17: \ 0000021C 140397E5 LDR R0,[R7, #+788] \ 00000220 000050E3 CMP R0,#+0 \ 00000224 0500000A BEQ ??ProcessPacket_19 4689 { 4690 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 00000228 140397E5 LDR R0,[R7, #+788] \ 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 7C608805 STREQ R6,[R8, #+124] 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 7C0098E5 LDR R0,[R8, #+124] \ 00000268 010050E3 CMP R0,#+1 4695 { 4696 t->just_now=2; \ 0000026C 0200A003 MOVEQ R0,#+2 \ 00000270 68008805 STREQ R0,[R8, #+104] 4697 t->change=0; \ 00000274 7C908805 STREQ R9,[R8, #+124] 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,??DataTable173 ;; 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 A11F85E2 ADD R1,R5,#+644 \ 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 A80088E5 STR R0,[R8, #+168] 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 A63F85E2 ADD R3,R5,#+664 \ 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 E410A0E3 MOV R1,#+228 \ 0000035C 681D81E3 ORR R1,R1,#0x1A00 \ 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 580297E5 LDR R0,[R7, #+600] \ 0000037C 000050E3 CMP R0,#+0 \ 00000380 1800000A BEQ ??ProcessPacket_23 \ 00000384 BC079FE5 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 AC179FE5 LDR R1,??ProcessPacket_1+0x10 ;; PopupOnlineString \ 0000039C 1400A0E3 MOV R0,#+20 \ 000003A0 C00387E5 STR R0,[R7, #+960] \ 000003A4 142088E2 ADD R2,R8,#+20 \ 000003A8 4800A0E3 MOV R0,#+72 \ 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 A80098E5 LDR R0,[R8, #+168] \ 000003BC 143088E2 ADD R3,R8,#+20 \ 000003C0 012080E2 ADD R2,R0,#+1 \ 000003C4 AA1F85E2 ADD R1,R5,#+680 \ 000003C8 0B00A0E1 MOV R0,R11 \ 000003CC 160000EF SWI +22 4726 on_off_timer=ON_OFF_TIME; \ 000003D0 78079FE5 LDR R0,??ProcessPacket_1+0x14 ;; ON_OFF_TIME \ 000003D4 000090E5 LDR R0,[R0, #+0] \ 000003D8 240387E5 STR R0,[R7, #+804] 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 8800A0E3 MOV R0,#+136 \ 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,??DataTable174 ;; extended_sounds \ 000003FC 50A79FE5 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 38279FE5 LDR R2,??ProcessPacket_1+0x1C ;; sndGlobal2 \ 0000041C 00908DE5 STR R9,[SP, #+0] \ 00000420 0C0098E5 LDR R0,[R8, #+12] \ 00000424 3C90A0E3 MOV R9,#+60 \ 00000428 480287E5 STR R0,[R7, #+584] \ 0000042C 509E89E3 ORR R9,R9,#0x500 \ 00000430 0030A0E1 MOV R3,R0 \ 00000434 951F85E2 ADD R1,R5,#+596 \ 00000438 070089E0 ADD R0,R9,R7 \ 0000043C 160000EF SWI +22 4743 GetFileStats(talk_sound,&stat,&ul); \ 00000440 0D20A0E1 MOV R2,SP \ 00000444 441F8DE2 ADD R1,SP,#+272 \ 00000448 070089E0 ADD R0,R9,R7 \ 0000044C 840000EF SWI +132 4744 fsize=stat.size; 4745 if(fsize>0) \ 00000450 14019DE5 LDR R0,[SP, #+276] \ 00000454 010050E3 CMP R0,#+1 4746 Play(talk_sound); \ 00000458 070089A0 ADDGE R0,R9,R7 4747 else 4748 Play(sndGlobal); \ 0000045C 0A00A0B1 MOVLT R0,R10 \ 00000460 ........ BL Play 4749 t->isvibra=1; \ 00000464 5C6088E5 STR R6,[R8, #+92] 4750 t->issound=1; \ 00000468 606088E5 STR R6,[R8, #+96] 4751 t->isShowXst=Show_XTX; \ 0000046C A00297E5 LDR R0,[R7, #+672] \ 00000470 6C0088E5 STR R0,[R8, #+108] 4752 #ifdef kluchnik 4753 t->isLoadHistory=1; 4754 #endif 4755 t->signals=1; \ 00000474 706088E5 STR R6,[R8, #+112] \ 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 C4069FE5 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,??DataTable175 ;; 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 A80098E5 LDR R0,[R8, #+168] \ 000004B8 143088E2 ADD R3,R8,#+20 \ 000004BC 012080E2 ADD R2,R0,#+1 \ 000004C0 AA1F85E2 ADD R1,R5,#+680 \ 000004C4 0B00A0E1 MOV R0,R11 \ 000004C8 160000EF SWI +22 4765 on_off_timer=ON_OFF_TIME; \ 000004CC 7C069FE5 LDR R0,??ProcessPacket_1+0x14 ;; ON_OFF_TIME \ 000004D0 000090E5 LDR R0,[R0, #+0] \ 000004D4 240387E5 STR R0,[R7, #+804] 4766 UpdateCLheader(); \ 000004D8 ........ BL UpdateCLheader 4767 } 4768 4769 if (edchat_id) \ ??ProcessPacket_26: \ 000004DC 180397E5 LDR R0,[R7, #+792] \ 000004E0 000050E3 CMP R0,#+0 \ 000004E4 9001000A BEQ ??ProcessPacket_2 4770 { 4771 void *data=FindGUIbyId(edchat_id,NULL); \ 000004E8 180397E5 LDR R0,[R7, #+792] \ 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 8A01000A BEQ ??ProcessPacket_2 4776 { 4777 if (ed_struct->ed_contact==t) \ 00000500 000090E5 LDR R0,[R0, #+0] \ 00000504 080050E1 CMP R0,R8 \ 00000508 8701001A BNE ??ProcessPacket_2 4778 { 4779 DirectRedrawGUI_ID(edchat_id); \ 0000050C 180397E5 LDR R0,[R7, #+792] \ 00000510 400100EF SWI +320 \ 00000514 840100EA B ??ProcessPacket_2 4780 } 4781 } 4782 } 4783 } 4784 } 4785 break; 4786 case T_RECVMSG: 4787 NEW_MSG=1; \ ??ProcessPacket_28: \ 00000518 B06387E5 STR R6,[R7, #+944] 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 1E1085E2 ADD R1,R5,#+30 \ 00000530 10008DE2 ADD R0,SP,#+16 \ 00000534 160000EF SWI +22 4792 t=AddContact(p->pkt.uin,s,GROUP_CACHE,0); \ 00000538 102397E5 LDR R2,[R7, #+784] \ 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 A010A0E3 MOV R1,#+160 \ 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 7D0000EA B ??ProcessPacket_32 4813 } 4814 } 4815 } 4816 4817 //=================== tas bus jautri ===================// 4818 4819 comanda=1; \ ??ProcessPacket_31: \ 000005F8 B86387E5 STR R6,[R7, #+952] 4820 CheckComand(p->data, t); \ 000005FC 0810A0E1 MOV R1,R8 \ 00000600 58559FE5 LDR R5,??ProcessPacket_1+0x24 ;; ILL_KEYS_RECV \ 00000604 58B59FE5 LDR R11,??ProcessPacket_1+0x28 ;; ILL_RECV_TMR \ 00000608 080084E2 ADD R0,R4,#+8 \ 0000060C ........ BL CheckComand \ 00000610 703098E5 LDR R3,[R8, #+112] \ 00000614 ........ LDR R0,??DataTable177 ;; automsgcount \ 00000618 ........ LDR R1,??DataTable178 ;; VIBR_TYPE \ 0000061C 000053E3 CMP R3,#+0 \ 00000620 74309815 LDRNE R3,[R8, #+116] \ 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,??DataTable181 ;; SHOW_ACTIVE \ 00000634 8C9287E5 STR R9,[R7, #+652] \ 00000638 003093E5 LDR R3,[R3, #+0] \ 0000063C 000053E3 CMP R3,#+0 4827 t->isactive=ACTIVE_TIME; \ 00000640 9C208815 STRNE R2,[R8, #+156] 4828 if(t->isvibra) \ 00000644 5C2098E5 LDR R2,[R8, #+92] \ 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 D4128715 STRNE R1,[R7, #+724] 4832 else 4833 vibra_count=1; \ 00000660 D4628705 STREQ R6,[R7, #+724] 4834 if(t->automsgcountisIndividSet) \ ??ProcessPacket_33: \ 00000678 583098E5 LDR R3,[R8, #+88] \ 0000067C 8C9287E5 STR R9,[R7, #+652] \ 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,??DataTable181 ;; SHOW_ACTIVE \ 0000068C 000090E5 LDR R0,[R0, #+0] \ 00000690 000050E3 CMP R0,#+0 4856 t->isactive=ACTIVE_TIME; \ 00000694 9C208815 STRNE R2,[R8, #+156] 4857 if(t->isvibra) \ 00000698 5C0098E5 LDR R0,[R8, #+92] \ 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 D4028715 STRNE R0,[R7, #+724] 4861 else 4862 vibra_count=1; \ 000006B4 D4628705 STREQ R6,[R7, #+724] 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,??DataTable181 ;; SHOW_ACTIVE \ 000006C0 003093E5 LDR R3,[R3, #+0] \ 000006C4 000053E3 CMP R3,#+0 4886 t->isactive=ACTIVE_TIME; \ 000006C8 9C208815 STRNE R2,[R8, #+156] 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 D4128715 STRNE R1,[R7, #+724] 4889 else 4890 vibra_count=1; \ 000006DC D4628705 STREQ R6,[R7, #+724] 4891 if(t->automsgcount >= automsgcount) vibra_count=0; \ 000006E0 781098E5 LDR R1,[R8, #+120] \ 000006E4 000090E5 LDR R0,[R0, #+0] \ 000006E8 000051E1 CMP R1,R0 \ 000006EC D4928725 STRCS R9,[R7, #+724] 4892 start_vibra(); \ ??ProcessPacket_35: \ 000006F0 ........ BL start_vibra 4893 #ifdef ELKA 4894 if(SLI_TYPE) 4895 SLI_Timer(); 4896 #endif 4897 if(Is_Double_Vibra_On) \ ??ProcessPacket_34: \ 000006F4 600297E5 LDR R0,[R7, #+608] \ 000006F8 000050E3 CMP R0,#+0 \ 000006FC 0000000A BEQ ??ProcessPacket_37 4898 { 4899 Reminder_timer(); \ 00000700 ........ BL Reminder_timer 4900 } 4901 4902 if (Is_ILU_On) \ ??ProcessPacket_37: \ 00000704 5C0297E5 LDR R0,[R7, #+604] \ 00000708 000050E3 CMP R0,#+0 \ 0000070C 0500000A BEQ ??ProcessPacket_38 4903 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 00000710 50049FE5 LDR R0,??ProcessPacket_1+0x2C ;; ILL_DISP_RECV \ 00000714 00309AE5 LDR R3,[R10, #+0] \ 00000718 00209BE5 LDR R2,[R11, #+0] \ 0000071C 001095E5 LDR R1,[R5, #+0] \ 00000720 000090E5 LDR R0,[R0, #+0] \ 00000724 ........ BL IlluminationOn 4904 } 4905 4906 if(comanda==1) \ ??ProcessPacket_38: \ 00000728 B80397E5 LDR R0,[R7, #+952] \ 0000072C 010050E3 CMP R0,#+1 \ 00000730 2E00001A BNE ??ProcessPacket_32 4907 { 4908 AddStringToLog(t,0x02,p->data,t->name,0xFFFFFFFF,1); \ 00000734 01002DE9 PUSH {R0} \ 00000738 143088E2 ADD R3,R8,#+20 \ 0000073C 082084E2 ADD R2,R4,#+8 \ 00000740 0210A0E3 MOV R1,#+2 \ 00000744 000066E2 RSB R0,R6,#+0 \ 00000748 01002DE9 PUSH {R0} \ 0000074C 0800A0E1 MOV R0,R8 \ 00000750 ........ BL AddStringToLog 4909 main_count++; \ 00000754 ........ LDR R0,??DataTable182 ;; main_count \ 00000758 001090E5 LDR R1,[R0, #+0] \ 0000075C 011081E2 ADD R1,R1,#+1 \ 00000760 001080E5 STR R1,[R0, #+0] 4910 if(Is_INC_On && (PopupShow==1 || PopupShow==3)) \ 00000764 580297E5 LDR R0,[R7, #+600] \ 00000768 08D08DE2 ADD SP,SP,#+8 \ 0000076C 000050E3 CMP R0,#+0 \ 00000770 1300000A BEQ ??ProcessPacket_39 \ 00000774 CC039FE5 LDR R0,??ProcessPacket_1+0xC ;; PopupShow \ 00000778 000090E5 LDR R0,[R0, #+0] \ 0000077C 010050E3 CMP R0,#+1 \ 00000780 03005013 CMPNE R0,#+3 \ 00000784 0E00001A BNE ??ProcessPacket_39 4911 { 4912 sprintf(show_nick,PopupMsgString,t->name); \ 00000788 DC139FE5 LDR R1,??ProcessPacket_1+0x30 ;; PopupMsgString \ 0000078C 142088E2 ADD R2,R8,#+20 \ 00000790 2800A0E3 MOV R0,#+40 \ 00000794 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000798 070080E0 ADD R0,R0,R7 \ 0000079C 160000EF SWI +22 4913 if(!IsIdleUiOnTop()&&(!saver_on)) \ 000007A0 C50000EF SWI +197 \ 000007A4 000050E3 CMP R0,#+0 \ 000007A8 4C029705 LDREQ R0,[R7, #+588] \ 000007AC 00005003 CMPEQ R0,#+0 \ 000007B0 0500001A BNE ??ProcessPacket_40 4914 { 4915 INC_show=20; \ 000007B4 1400A0E3 MOV R0,#+20 \ 000007B8 BC0387E5 STR R0,[R7, #+956] 4916 show_pp_sender(); \ 000007BC ........ BL show_pp_sender \ 000007C0 010000EA B ??ProcessPacket_40 4917 } 4918 } 4919 else 4920 GBS_DelTimer(&develop); \ ??ProcessPacket_39: \ 000007C4 00009DE5 LDR R0,[SP, #+0] \ 000007C8 8C0100EF SWI +396 4921 4922 main_msg_timer2=main_msg_timer;//при получении сообщения восстанавливаем таймер \ ??ProcessPacket_40: \ 000007CC 9C039FE5 LDR R0,??ProcessPacket_1+0x34 ;; main_msg_timer \ 000007D0 000090E5 LDR R0,[R0, #+0] \ 000007D4 AC0387E5 STR R0,[R7, #+940] 4923 if(Is_SMARTCPU_On) \ 000007D8 540297E5 LDR R0,[R7, #+596] \ 000007DC 000050E3 CMP R0,#+0 \ 000007E0 0200000A BEQ ??ProcessPacket_32 4924 AddToMain(t->name,p->data); \ 000007E4 081084E2 ADD R1,R4,#+8 \ 000007E8 140088E2 ADD R0,R8,#+20 \ 000007EC ........ BL AddToMain 4925 } 4926 L1: 4927 //Разворачиваем группу, в которой пришло сообщение 4928 { 4929 CLIST *g=FindGroupByID(t->group); \ ??ProcessPacket_32: \ 000007F0 100098E5 LDR R0,[R8, #+16] \ 000007F4 ........ _BLF FindGroupByID,??FindGroupByID??rA 4930 if (g) \ 000007F8 000050E3 CMP R0,#+0 4931 { 4932 if (g->state) \ 000007FC B415D011 LDRHNE R1,[R0, #+84] \ 00000800 00005113 CMPNE R1,#+0 4933 { 4934 g->state=0; \ 00000804 B495C011 STRHNE R9,[R0, #+84] 4935 } 4936 } 4937 } 4938 4939 ReqAddMsgToChat(t); \ 00000808 0800A0E1 MOV R0,R8 \ 0000080C ........ BL ReqAddMsgToChat 4940 RecountMenu(t,1); \ 00000810 0110A0E3 MOV R1,#+1 \ 00000814 0800A0E1 MOV R0,R8 \ 00000818 ........ BL RecountMenu 4941 4942 switch (DEVELOP_IF) \ 0000081C 50039FE5 LDR R0,??ProcessPacket_1+0x38 ;; DEVELOP_IF \ 00000820 000090E5 LDR R0,[R0, #+0] \ 00000824 000050E3 CMP R0,#+0 \ 00000828 0400000A BEQ ??ProcessPacket_41 \ 0000082C 010050E2 SUBS R0,R0,#+1 \ 00000830 0B00000A BEQ ??ProcessPacket_42 \ 00000834 020050E2 SUBS R0,R0,#+2 \ 00000838 1300000A BEQ ??ProcessPacket_43 \ 0000083C BA0000EA B ??ProcessPacket_2 4943 { 4944 case 0: 4945 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) to_develop(); \ ??ProcessPacket_41: \ 00000840 068100EF SWI +33030 \ 00000844 080090E5 LDR R0,[R0, #+8] \ 00000848 681297E5 LDR R1,[R7, #+616] \ 0000084C 0C0090E5 LDR R0,[R0, #+12] \ 00000850 0C0090E5 LDR R0,[R0, #+12] \ 00000854 010050E1 CMP R0,R1 \ ??ProcessPacket_44: \ 00000858 B300000A BEQ ??ProcessPacket_2 \ 0000085C ........ BL to_develop \ 00000860 B10000EA 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: \ 00000864 068100EF SWI +33030 \ 00000868 080090E5 LDR R0,[R0, #+8] \ 0000086C 681297E5 LDR R1,[R7, #+616] \ 00000870 0C0090E5 LDR R0,[R0, #+12] \ 00000874 0C0090E5 LDR R0,[R0, #+12] \ 00000878 010050E1 CMP R0,R1 \ 0000087C AA00000A BEQ ??ProcessPacket_2 \ 00000880 430000EF SWI +67 \ 00000884 000050E3 CMP R0,#+0 \ 00000888 F2FFFFEA B ??ProcessPacket_44 4949 break; 4950 case 2: 4951 break; 4952 case 3: 4953 GBS_DelTimer(&develop); \ ??ProcessPacket_43: \ 0000088C 00009DE5 LDR R0,[SP, #+0] \ 00000890 8C0100EF SWI +396 4954 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(!IsUnlocked())) begin_to_develop(); \ 00000894 068100EF SWI +33030 \ 00000898 080090E5 LDR R0,[R0, #+8] \ 0000089C 681297E5 LDR R1,[R7, #+616] \ 000008A0 0C0090E5 LDR R0,[R0, #+12] \ 000008A4 0C0090E5 LDR R0,[R0, #+12] \ 000008A8 010050E1 CMP R0,R1 \ 000008AC 9E00000A BEQ ??ProcessPacket_2 \ 000008B0 430000EF SWI +67 \ 000008B4 000050E3 CMP R0,#+0 \ 000008B8 9B00001A BNE ??ProcessPacket_2 \ 000008BC ........ BL begin_to_develop \ 000008C0 990000EA B ??ProcessPacket_2 4955 break; 4956 } 4957 break; 4958 case T_SRV_ACK: 4959 case T_CLIENT_ACK: 4960 q=FindContactLOGQByAck(p); \ ??ProcessPacket_45: \ 000008C4 0400A0E1 MOV R0,R4 \ 000008C8 ........ BL FindContactLOGQByAck 4961 if (q) \ 000008CC 000050E3 CMP R0,#+0 \ 000008D0 9500000A BEQ ??ProcessPacket_2 4962 { 4963 q->acked=p->pkt.type==T_SRV_ACK?1:2; \ 000008D4 B410D4E1 LDRH R1,[R4, #+4] \ 000008D8 100051E3 CMP R1,#+16 \ 000008DC 0110A003 MOVEQ R1,#+1 \ 000008E0 0210A013 MOVNE R1,#+2 \ 000008E4 041080E5 STR R1,[R0, #+4] 4964 t=FindContactByUin(p->pkt.uin); \ 000008E8 000094E5 LDR R0,[R4, #+0] \ 000008EC ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000008F0 0080A0E1 MOV R8,R0 4965 if (edchat_id) \ 000008F4 180397E5 LDR R0,[R7, #+792] \ 000008F8 000050E3 CMP R0,#+0 \ 000008FC 8A00000A BEQ ??ProcessPacket_2 4966 { 4967 void *data=FindGUIbyId(edchat_id,NULL); \ 00000900 180397E5 LDR R0,[R7, #+792] \ 00000904 0010A0E3 MOV R1,#+0 \ 00000908 090200EF SWI +521 \ 0000090C 0050B0E1 MOVS R5,R0 4968 if (data) \ 00000910 8500000A BEQ ??ProcessPacket_2 4969 { 4970 EDCHAT_STRUCT *ed_struct; 4971 ed_struct=EDIT_GetUserPointer(data); \ 00000914 DF0100EF SWI +479 4972 if (ed_struct) \ 00000918 000050E3 CMP R0,#+0 \ 0000091C 8200000A BEQ ??ProcessPacket_2 4973 { 4974 if (ed_struct->ed_contact==t) \ 00000920 000090E5 LDR R0,[R0, #+0] \ 00000924 080050E1 CMP R0,R8 \ 00000928 7F00001A BNE ??ProcessPacket_2 4975 { 4976 if (EDIT_IsBusy(data)) \ 0000092C 0500A0E1 MOV R0,R5 \ 00000930 1C0200EF SWI +540 \ 00000934 000050E3 CMP R0,#+0 \ 00000938 0300000A BEQ ??ProcessPacket_46 4977 { 4978 t->req_drawack=1; \ 0000093C 8C6088E5 STR R6,[R8, #+140] 4979 time_to_stop_t9=3; \ 00000940 0300A0E3 MOV R0,#+3 \ 00000944 B40387E5 STR R0,[R7, #+948] \ 00000948 770000EA B ??ProcessPacket_2 4980 } 4981 else { 4982 DrawAck(data); \ ??ProcessPacket_46: \ 0000094C 0500A0E1 MOV R0,R5 \ 00000950 ........ BL DrawAck 4983 if (p->pkt.type==T_SRV_ACK) \ 00000954 B400D4E1 LDRH R0,[R4, #+4] \ 00000958 100050E3 CMP R0,#+16 \ 0000095C 7200001A BNE ??ProcessPacket_2 4984 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 00000960 10029FE5 LDR R0,??ProcessPacket_1+0x3C ;; ILL_SEND_TMR \ 00000964 00309AE5 LDR R3,[R10, #+0] \ 00000968 002090E5 LDR R2,[R0, #+0] \ 0000096C 08029FE5 LDR R0,??ProcessPacket_1+0x40 ;; ILL_KEYS_SEND \ 00000970 001090E5 LDR R1,[R0, #+0] \ 00000974 04029FE5 LDR R0,??ProcessPacket_1+0x44 ;; ILL_DISP_SEND \ 00000978 000090E5 LDR R0,[R0, #+0] \ 0000097C ........ BL IlluminationOn \ 00000980 690000EA B ??ProcessPacket_2 4985 } 4986 } 4987 } 4988 } 4989 } 4990 } 4991 break; 4992 case T_XTEXT_ACK: 4993 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_47: \ 00000984 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000988 0080B0E1 MOVS R8,R0 4994 if (t) \ 0000098C 6600000A BEQ ??ProcessPacket_2 4995 { 4996 int i; 4997 int j; 4998 FreeXText(t); \ 00000990 ........ _BLF FreeXText,??FreeXText??rA 4999 i=p->pkt.data_len; \ 00000994 B660D4E1 LDRH R6,[R4, #+6] 5000 memcpy(t->xtext=malloc(i),p->data,i); \ 00000998 0600A0E1 MOV R0,R6 \ 0000099C 140000EF SWI +20 \ 000009A0 A40088E5 STR R0,[R8, #+164] \ 000009A4 0620A0E1 MOV R2,R6 \ 000009A8 081084E2 ADD R1,R4,#+8 \ 000009AC 1E0100EF SWI +286 5001 zeromem(s,256); \ 000009B0 401FA0E3 MOV R1,#+256 \ 000009B4 10008DE2 ADD R0,SP,#+16 \ 000009B8 1D0100EF SWI +285 5002 strcpy(s,t->name); \ 000009BC 141088E2 ADD R1,R8,#+20 \ 000009C0 10008DE2 ADD R0,SP,#+16 \ 000009C4 1A0000EF SWI +26 5003 strcat(s,":\n"); \ 000009C8 5B1F8FE2 ADR R1,??ProcessPacket_1 ;; ":\n" \ 000009CC 10008DE2 ADD R0,SP,#+16 \ 000009D0 170000EF SWI +23 5004 i=strlen(s); \ 000009D4 10008DE2 ADD R0,SP,#+16 \ 000009D8 1B0000EF SWI +27 5005 j=p->data[0]; \ 000009DC 0860D4E5 LDRB R6,[R4, #+8] \ 000009E0 0070A0E1 MOV R7,R0 5006 if (j>(255-i)) j=255-i; \ 000009E4 FF0067E2 RSB R0,R7,#+255 \ 000009E8 060050E1 CMP R0,R6 \ 000009EC 0060A0B1 MOVLT R6,R0 5007 strncpy(s+i,p->data+1,j); \ 000009F0 0620A0E1 MOV R2,R6 \ 000009F4 091084E2 ADD R1,R4,#+9 \ 000009F8 10008DE2 ADD R0,SP,#+16 \ 000009FC 000087E0 ADD R0,R7,R0 \ 00000A00 160100EF SWI +278 5008 i+=j; \ 00000A04 070086E0 ADD R0,R6,R7 5009 if (i<255) \ 00000A08 FF0050E3 CMP R0,#+255 \ 00000A0C 100000AA BGE ??ProcessPacket_48 5010 { 5011 s[i]='\n'; \ 00000A10 10108DE2 ADD R1,SP,#+16 \ 00000A14 0A20A0E3 MOV R2,#+10 \ 00000A18 0120C0E7 STRB R2,[R0, +R1] 5012 i++; \ 00000A1C 0810D4E5 LDRB R1,[R4, #+8] \ 00000A20 B620D4E1 LDRH R2,[R4, #+6] \ 00000A24 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); \ 00000A28 10308DE2 ADD R3,SP,#+16 \ 00000A2C 012042E0 SUB R2,R2,R1 \ 00000A30 016042E2 SUB R6,R2,#+1 \ 00000A34 FF2060E2 RSB R2,R0,#+255 \ 00000A38 060052E1 CMP R2,R6 \ 00000A3C 0260A0B1 MOVLT R6,R2 \ 00000A40 0620A0E1 MOV R2,R6 \ 00000A44 041081E0 ADD R1,R1,R4 \ 00000A48 091081E2 ADD R1,R1,#+9 \ 00000A4C 030080E0 ADD R0,R0,R3 \ 00000A50 160100EF SWI +278 5016 } 5017 5018 zeromem(s,256); \ ??ProcessPacket_48: \ 00000A54 401FA0E3 MOV R1,#+256 \ 00000A58 10008DE2 ADD R0,SP,#+16 \ 00000A5C 1D0100EF SWI +285 5019 i=0; 5020 j=p->data[0]; \ 00000A60 0860D4E5 LDRB R6,[R4, #+8] 5021 if (j>(255-i)) j=255-i; 5022 strncpy(s,p->data+1,j); \ 00000A64 091084E2 ADD R1,R4,#+9 \ 00000A68 10008DE2 ADD R0,SP,#+16 \ 00000A6C 400F56E3 CMP R6,#+256 \ 00000A70 FF60A0A3 MOVGE R6,#+255 \ 00000A74 0620A0E1 MOV R2,R6 \ 00000A78 160100EF SWI +278 5023 i+=j; 5024 if (i<255) \ 00000A7C FF0056E3 CMP R6,#+255 \ 00000A80 100000AA BGE ??ProcessPacket_49 5025 { 5026 s[i++]=13; \ 00000A84 10108DE2 ADD R1,SP,#+16 \ 00000A88 0D20A0E3 MOV R2,#+13 \ 00000A8C 0120C6E7 STRB R2,[R6, +R1] \ 00000A90 0810D4E5 LDRB R1,[R4, #+8] \ 00000A94 B620D4E1 LDRH R2,[R4, #+6] \ 00000A98 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); \ 00000A9C 10308DE2 ADD R3,SP,#+16 \ 00000AA0 012042E0 SUB R2,R2,R1 \ 00000AA4 016042E2 SUB R6,R2,#+1 \ 00000AA8 FF2060E2 RSB R2,R0,#+255 \ 00000AAC 060052E1 CMP R2,R6 \ 00000AB0 0260A0B1 MOVLT R6,R2 \ 00000AB4 0620A0E1 MOV R2,R6 \ 00000AB8 041081E0 ADD R1,R1,R4 \ 00000ABC 091081E2 ADD R1,R1,#+9 \ 00000AC0 030080E0 ADD R0,R0,R3 \ 00000AC4 160100EF SWI +278 5030 } 5031 AddStringToLog(t,0x03,s,x_status_change,0xFFFFFFFF,1); \ ??ProcessPacket_49: \ 00000AC8 0100A0E3 MOV R0,#+1 \ 00000ACC 01002DE9 PUSH {R0} \ 00000AD0 0310A0E3 MOV R1,#+3 \ 00000AD4 000060E2 RSB R0,R0,#+0 \ 00000AD8 01002DE9 PUSH {R0} \ 00000ADC 18208DE2 ADD R2,SP,#+24 \ 00000AE0 C800A0E3 MOV R0,#+200 \ 00000AE4 400E80E3 ORR R0,R0,#0x400 \ 00000AE8 053080E0 ADD R3,R0,R5 \ 00000AEC 0800A0E1 MOV R0,R8 \ 00000AF0 ........ BL AddStringToLog 5032 ReqAddMsgToChat(t); \ 00000AF4 0800A0E1 MOV R0,R8 \ 00000AF8 ........ BL ReqAddMsgToChat 5033 if (strlen(p->data)) // Если x-status не пустой \ 00000AFC 080084E2 ADD R0,R4,#+8 \ 00000B00 1B0000EF SWI +27 \ 00000B04 000050E3 CMP R0,#+0 \ 00000B08 08D08DE2 ADD SP,SP,#+8 5034 RecountMenu(t, 1); \ 00000B0C 0110A013 MOVNE R1,#+1 \ 00000B10 0800A011 MOVNE R0,R8 \ 00000B14 6EFDFF1A BNE ??ProcessPacket_9 5035 else 5036 RecountMenu(NULL, 0); \ 00000B18 0010A0E3 MOV R1,#+0 \ 00000B1C 0100A0E1 MOV R0,R1 \ 00000B20 6BFDFFEA B ??ProcessPacket_9 5037 } 5038 break; 5039 case T_LASTPRIVACY: 5040 CurrentPrivateStatus=p->data[0]; \ ??ProcessPacket_50: \ 00000B24 0800D4E5 LDRB R0,[R4, #+8] \ 00000B28 D00287E5 STR R0,[R7, #+720] 5041 break; 5042 } 5043 mfree(p); \ ??ProcessPacket_2: \ 00000B2C 0400A0E1 MOV R0,R4 \ 00000B30 150000EF SWI +21 5044 } \ 00000B34 4EDF8DE2 ADD SP,SP,#+312 \ 00000B38 F08FBDE8 POP {R4-R11,PC} ;; return \ ??ProcessPacket_1: \ 00000B3C 3A0A0000 DC8 ":\n",+0 \ 00000B40 ........ DC32 ILL_RECV_FADE \ 00000B44 ........ DC32 ENA_AUTO_XTXT \ 00000B48 ........ DC32 PopupShow \ 00000B4C ........ DC32 PopupOnlineString \ 00000B50 ........ DC32 ON_OFF_TIME \ 00000B54 ........ DC32 sndGlobal \ 00000B58 ........ DC32 sndGlobal2 \ 00000B5C ........ DC32 sndSrvMsg \ 00000B60 ........ DC32 ILL_KEYS_RECV \ 00000B64 ........ DC32 ILL_RECV_TMR \ 00000B68 ........ DC32 ILL_DISP_RECV \ 00000B6C ........ DC32 PopupMsgString \ 00000B70 ........ DC32 main_msg_timer \ 00000B74 ........ DC32 DEVELOP_IF \ 00000B78 ........ DC32 ILL_SEND_TMR \ 00000B7C ........ DC32 ILL_KEYS_SEND \ 00000B80 ........ 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,??DataTable191 ;; S_ICONS \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C E40295E5 LDR R0,[R5, #+740] \ 00000010 030050E3 CMP R0,#+3 \ 00000014 070000BA BLT ??process_active_timer_0 5051 { 5052 if (++tenseconds_to_ping>12) \ 00000018 200395E5 LDR R0,[R5, #+800] \ 0000001C 010080E2 ADD R0,R0,#+1 \ 00000020 200385E5 STR R0,[R5, #+800] \ 00000024 0D0050E3 CMP R0,#+13 \ 00000028 020000BA BLT ??process_active_timer_0 5053 { 5054 tenseconds_to_ping=0; 5055 SUBPROC((void *)do_ping); \ 0000002C 58009FE5 LDR R0,??process_active_timer_1 ;; do_ping \ 00000030 204385E5 STR R4,[R5, #+800] \ 00000034 710100EF SWI +369 5056 } 5057 } 5058 tmr_gipc.name_to=ipc_my_name; \ ??process_active_timer_0: \ 00000038 ........ LDR R1,??DataTable189 ;; Canvas \ 0000003C 4A0EA0E3 MOV R0,#+1184 \ 00000040 012080E0 ADD R2,R0,R1 \ 00000044 C82085E5 STR R2,[R5, #+200] 5059 tmr_gipc.name_from=ipc_my_name; \ 00000048 010080E0 ADD R0,R0,R1 \ 0000004C CC0085E5 STR R0,[R5, #+204] 5060 tmr_gipc.data=NULL; \ 00000050 D04085E5 STR R4,[R5, #+208] 5061 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_TENSECONDS,&tmr_gipc); \ 00000054 C83085E2 ADD R3,R5,#+200 \ 00000058 0420A0E3 MOV R2,#+4 \ 0000005C B010A0E3 MOV R1,#+176 \ 00000060 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000064 0900A0E3 MOV R0,#+9 \ 00000068 420C80E3 ORR R0,R0,#0x4200 \ 0000006C 000100EF SWI +256 5062 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000070 ........ LDR R2,??DataTable211 ;; process_active_timer \ 00000074 871EA0E3 MOV R1,#+2160 \ 00000078 8400A0E3 MOV R0,#+132 \ 0000007C 680D80E3 ORR R0,R0,#0x1A00 \ 00000080 050080E0 ADD R0,R0,R5 \ 00000084 4D0000EF SWI +77 5063 } \ 00000088 3080BDE8 POP {R4,R5,PC} ;; return \ ??process_active_timer_1: \ 0000008C ........ 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,??DataTable189 ;; Canvas \ 00000004 10402DE9 PUSH {R4,LR} \ 00000008 ........ LDR R4,??DataTable191 ;; S_ICONS \ 0000000C 4A0EA0E3 MOV R0,#+1184 \ 00000010 012080E0 ADD R2,R0,R1 \ 00000014 C82084E5 STR R2,[R4, #+200] 5069 tmr_gipc.name_from=ipc_my_name; \ 00000018 010080E0 ADD R0,R0,R1 \ 0000001C CC0084E5 STR R0,[R4, #+204] 5070 tmr_gipc.data=NULL; \ 00000020 0000A0E3 MOV R0,#+0 \ 00000024 D00084E5 STR R0,[R4, #+208] 5071 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_ONESECOND,&tmr_gipc); \ 00000028 C83084E2 ADD R3,R4,#+200 \ 0000002C 0620A0E3 MOV R2,#+6 \ 00000030 B010A0E3 MOV R1,#+176 \ 00000034 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000038 0900A0E3 MOV R0,#+9 \ 0000003C 420C80E3 ORR R0,R0,#0x4200 \ 00000040 000100EF SWI +256 5072 GBS_StartTimerProc(&tm22,TMR_SECOND,OneSecTmr); \ 00000044 10209FE5 LDR R2,??OneSecTmr_0 ;; OneSecTmr \ 00000048 D810A0E3 MOV R1,#+216 \ 0000004C 7B0D81E2 ADD R0,R1,#+7872 \ 00000050 040080E0 ADD R0,R0,R4 \ 00000054 4D0000EF SWI +77 5073 } \ 00000058 1080BDE8 POP {R4,PC} ;; return \ ??OneSecTmr_0: \ 0000005C ........ 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; 5111 #else 5112 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-GetFontYSIZE(font)-2); \ 00000004 ........ LDR R5,??DataTable191 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 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,??DataTable189 ;; Canvas \ 00000010 0B00A0E3 MOV R0,#+11 \ 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 0B00A0E3 MOV R0,#+11 \ 00000034 C50100EF SWI +453 \ 00000038 0070A0E1 MOV R7,R0 \ 0000003C 0B00A0E3 MOV R0,#+11 \ 00000040 C50100EF SWI +453 \ 00000044 071046E0 SUB R1,R6,R7 \ 00000048 081041E2 SUB R1,R1,#+8 \ 0000004C 000041E0 SUB R0,R1,R0 \ 00000050 021040E2 SUB R1,R0,#+2 \ 00000054 0400A0E1 MOV R0,R4 \ 00000058 B80000EF SWI +184 \ 0000005C C40385E5 STR R0,[R5, #+964] \ 00000060 460100EF SWI +326 \ 00000064 ........ _BLF ParseUINS,??ParseUINS??rA \ 00000068 C80385E5 STR R0,[R5, #+968] \ 0000006C 0010A0E1 MOV R1,R0 \ 00000070 C40395E5 LDR R0,[R5, #+964] \ 00000074 0070A0E3 MOV R7,#+0 \ 00000078 B80000EF SWI +184 \ 0000007C 00008DE5 STR R0,[SP, #+0] \ 00000080 C40395E5 LDR R0,[R5, #+964] \ 00000084 00109DE5 LDR R1,[SP, #+0] \ 00000088 910000E0 MUL R0,R1,R0 \ 0000008C C81395E5 LDR R1,[R5, #+968] \ 00000090 010050E1 CMP R0,R1 \ 00000094 00109DB5 LDRLT R1,[SP, #+0] \ 00000098 400FA0E3 MOV R0,#+256 \ 0000009C 011081B2 ADDLT R1,R1,#+1 \ 000000A0 00108DB5 STRLT R1,[SP, #+0] \ 000000A4 250100EF SWI +293 \ 000000A8 0060A0E1 MOV R6,R0 5122 int start_y; 5123 int x=1; 5124 while(i<=totalItems) \ ??DrawList_0: \ 000000AC C80395E5 LDR R0,[R5, #+968] \ 000000B0 070050E1 CMP R0,R7 \ 000000B4 590000BA BLT ??DrawList_1 5125 { 5126 if((i>=(curpage-1)*itemFromDisp) && (i<=itemFromDisp*curpage))//если те итемы который нужно выводить на экран со страници curpage \ 000000B8 C40395E5 LDR R0,[R5, #+964] \ 000000BC D01395E5 LDR R1,[R5, #+976] \ 000000C0 012041E2 SUB R2,R1,#+1 \ 000000C4 900202E0 MUL R2,R0,R2 \ 000000C8 020057E1 CMP R7,R2 \ 000000CC 910000A0 MULGE R0,R1,R0 \ 000000D0 070050A1 CMPGE R0,R7 \ 000000D4 4B0000BA BLT ??DrawList_2 5127 { 5128 wsprintf(out_ws,"%d. %d",i+1,addonuin[i].uin);//имя закладки \ 000000D8 ........ LDR R0,??DataTable193 ;; addonuin \ 000000DC 012087E2 ADD R2,R7,#+1 \ 000000E0 073290E7 LDR R3,[R0, +R7, LSL #+4] \ 000000E4 AD1F88E2 ADD R1,R8,#+692 \ 000000E8 0600A0E1 MOV R0,R6 \ 000000EC 240100EF SWI +292 5129 start_y = (CLIST_Y1 + (i - (curpage-1)*itemFromDisp)*font_y); //определяем начальное смещение по у \ 000000F0 0B00A0E3 MOV R0,#+11 \ 000000F4 C50100EF SWI +453 \ 000000F8 D01395E5 LDR R1,[R5, #+976] \ 000000FC C42395E5 LDR R2,[R5, #+964] \ 00000100 011041E2 SUB R1,R1,#+1 \ 00000104 920101E0 MUL R1,R2,R1 \ 00000108 011047E0 SUB R1,R7,R1 \ 0000010C 940120E0 MLA R0,R4,R1,R0 \ 00000110 089080E2 ADD R9,R0,#+8 5130 5131 if(i==curpos) \ 00000114 04009DE5 LDR R0,[SP, #+4] \ 00000118 09B084E0 ADD R11,R4,R9 \ 0000011C 01A040E2 SUB R10,R0,#+1 \ 00000120 CC0395E5 LDR R0,[R5, #+972] \ 00000124 000057E1 CMP R7,R0 \ 00000128 1400001A BNE ??DrawList_3 5132 { 5133 DrawRoundedFrame(x-4,start_y,scr_w-1,start_y+font_y,5,5,0,bordSelect,clrSelect); \ 0000012C F800A0E3 MOV R0,#+248 \ 00000130 400E80E3 ORR R0,R0,#0x400 \ 00000134 080080E0 ADD R0,R0,R8 \ 00000138 01002DE9 PUSH {R0} \ 0000013C 0B30A0E1 MOV R3,R11 \ 00000140 0A20A0E1 MOV R2,R10 \ 00000144 0910A0E1 MOV R1,R9 \ 00000148 500E88E2 ADD R0,R8,#+1280 \ 0000014C 01002DE9 PUSH {R0} \ 00000150 0000A0E3 MOV R0,#+0 \ 00000154 01002DE9 PUSH {R0} \ 00000158 0500A0E3 MOV R0,#+5 \ 0000015C 01002DE9 PUSH {R0} \ 00000160 01002DE9 PUSH {R0} \ 00000164 0200E0E3 MVN R0,#+2 \ 00000168 500100EF SWI +336 5134 DrawString(out_ws,x,start_y+2,scr_w-1,start_y+font_y,font,0,fntSelect,0); \ 0000016C 0000A0E3 MOV R0,#+0 \ 00000170 01002DE9 PUSH {R0} \ 00000174 FC00A0E3 MOV R0,#+252 \ 00000178 400E80E3 ORR R0,R0,#0x400 \ 0000017C 140000EA 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 0400A0E3 MOV R0,#+4 \ 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 0800A0E3 MOV R0,#+8 \ 000001A0 500E80E3 ORR R0,R0,#0x500 \ 000001A4 080080E0 ADD R0,R0,R8 \ 000001A8 01002DE9 PUSH {R0} \ 000001AC 0000A0E3 MOV R0,#+0 \ 000001B0 01002DE9 PUSH {R0} \ 000001B4 01002DE9 PUSH {R0} \ 000001B8 01002DE9 PUSH {R0} \ 000001BC 0100A0E3 MOV R0,#+1 \ 000001C0 500100EF SWI +336 5139 DrawString(out_ws,x,start_y+2,scr_w-1,start_y+font_y,font,0,fntNotSelect,0); \ 000001C4 0000A0E3 MOV R0,#+0 \ 000001C8 01002DE9 PUSH {R0} \ 000001CC 0C00A0E3 MOV R0,#+12 \ 000001D0 500E80E3 ORR R0,R0,#0x500 \ ??DrawList_4: \ 000001D4 080080E0 ADD R0,R0,R8 \ 000001D8 01002DE9 PUSH {R0} \ 000001DC 0A30A0E1 MOV R3,R10 \ 000001E0 022089E2 ADD R2,R9,#+2 \ 000001E4 0110A0E3 MOV R1,#+1 \ 000001E8 0000A0E3 MOV R0,#+0 \ 000001EC 01002DE9 PUSH {R0} \ 000001F0 0B00A0E3 MOV R0,#+11 \ 000001F4 01002DE9 PUSH {R0} \ 000001F8 00082DE9 PUSH {R11} \ 000001FC 0600A0E1 MOV R0,R6 \ 00000200 4C0100EF SWI +332 \ 00000204 28D08DE2 ADD SP,SP,#+40 5140 } 5141 } 5142 i++; 5143 if(i>(pageNum*itemFromDisp)) break; \ ??DrawList_2: \ 00000208 00009DE5 LDR R0,[SP, #+0] \ 0000020C C41395E5 LDR R1,[R5, #+964] \ 00000210 017087E2 ADD R7,R7,#+1 \ 00000214 910000E0 MUL R0,R1,R0 \ 00000218 070050E1 CMP R0,R7 \ 0000021C A2FFFFAA BGE ??DrawList_0 5144 } 5145 UnlockSched(); \ ??DrawList_1: \ 00000220 470100EF SWI +327 5146 FreeWS(out_ws); \ 00000224 0600A0E1 MOV R0,R6 \ 00000228 290100EF SWI +297 5147 } \ 0000022C 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,??DataTable191 ;; S_ICONS \ 00000008 C40394E5 LDR R0,[R4, #+964] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} 5153 if(curpos<1) \ 00000014 CC1394E5 LDR R1,[R4, #+972] \ 00000018 010051E3 CMP R1,#+1 \ 0000001C 0A0000AA BGE ??MoveUp_0 5154 { 5155 curpos=totalItems; \ 00000020 C81394E5 LDR R1,[R4, #+968] \ 00000024 CC1384E5 STR R1,[R4, #+972] 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 D00384E5 STR R0,[R4, #+976] \ 0000003C 1080BDE8 POP {R4,PC} 5159 } 5160 else 5161 curpage = 1; \ ??MoveUp_1: \ 00000040 0100A0E3 MOV R0,#+1 \ 00000044 D00384E5 STR R0,[R4, #+976] \ 00000048 1080BDE8 POP {R4,PC} 5162 } 5163 else 5164 { 5165 curpos--; \ ??MoveUp_0: \ 0000004C D02394E5 LDR R2,[R4, #+976] \ 00000050 011041E2 SUB R1,R1,#+1 \ 00000054 012042E2 SUB R2,R2,#+1 \ 00000058 900203E0 MUL R3,R0,R2 \ 0000005C CC1384E5 STR R1,[R4, #+972] \ 00000060 030051E1 CMP R1,R3 5166 if(curpos<(curpage-1)*itemFromDisp){ curpos++; curpage--; } \ 00000064 010081B2 ADDLT R0,R1,#+1 \ 00000068 CC0384B5 STRLT R0,[R4, #+972] \ 0000006C D02384B5 STRLT R2,[R4, #+976] \ 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,??DataTable220 ;; S_ICONS \ 00000004 C81390E5 LDR R1,[R0, #+968] \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 1EFF2F01 BXEQ LR 5175 curpos++; \ 00000010 CC2390E5 LDR R2,[R0, #+972] \ 00000014 012082E2 ADD R2,R2,#+1 \ 00000018 CC2380E5 STR R2,[R0, #+972] 5176 if(curpos>totalItems) { curpos=0; curpage=1; } \ 0000001C 020051E1 CMP R1,R2 \ 00000020 030000AA BGE ??MoveDown_0 \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 CC1380E5 STR R1,[R0, #+972] \ 0000002C 0110A0E3 MOV R1,#+1 \ 00000030 D01380E5 STR R1,[R0, #+976] 5177 if(curpage*itemFromDispws1,LG_GRSTATESTRING,connect_state,RXstate,RX,TX,sendq_l,hostname,logmsg); \ 000000C4 5420A0E3 MOV R2,#+84 \ 000000C8 642D82E3 ORR R2,R2,#0x1900 \ 000000CC 0A2082E0 ADD R2,R2,R10 \ 000000D0 04002DE9 PUSH {R2} \ 000000D4 2420A0E3 MOV R2,#+36 \ 000000D8 702D82E3 ORR R2,R2,#0x1C00 \ 000000DC 0A2082E0 ADD R2,R2,R10 \ 000000E0 04002DE9 PUSH {R2} \ 000000E4 FC229AE5 LDR R2,[R10, #+764] \ 000000E8 04002DE9 PUSH {R2} \ 000000EC 02002DE9 PUSH {R1} \ 000000F0 01002DE9 PUSH {R0} \ 000000F4 E0329AE5 LDR R3,[R10, #+736] \ 000000F8 E4229AE5 LDR R2,[R10, #+740] \ 000000FC 340094E5 LDR R0,[R4, #+52] \ 00000100 AF1F85E2 ADD R1,R5,#+700 \ 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 C4039FE5 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 80039FE5 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 58039FE5 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 BD1F85E2 ADD R1,R5,#+756 \ 000001B0 160200EF SWI +534 5239 } 5240 if (xstatuses_load) \ ??method0_4: \ 000001B4 38039FE5 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,??DataTable202 ;; total_xstatuses \ 000001C8 C21F85E2 ADD R1,R5,#+776 \ 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 E0329AE5 LDR R3,[R10, #+736] \ 000001E0 E4229AE5 LDR R2,[R10, #+740] \ 000001E4 340094E5 LDR R0,[R4, #+52] \ 000001E8 C71F85E2 ADD R1,R5,#+796 \ 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 0320A0E3 MOV R2,#+3 \ 00000228 0B10A0E3 MOV R1,#+11 \ 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 290000EA B ??method0_5 5252 } 5253 else 5254 { 5255 wsprintf(data->ws1,"%t UIN!","Выберите"); \ ??method0_1: \ 00000254 340094E5 LDR R0,[R4, #+52] \ 00000258 CF2F85E2 ADD R2,R5,#+828 \ 0000025C CD1F85E2 ADD R1,R5,#+820 \ 00000260 240100EF SWI +292 5256 DrawLine(0,CLIST_Y1-3,ScreenW()-1,CLIST_Y1-3,0,clrWhite); \ 00000264 0B00A0E3 MOV R0,#+11 \ 00000268 C50100EF SWI +453 \ 0000026C 0060A0E1 MOV R6,R0 \ 00000270 888100EF SWI +33160 \ 00000274 0080A0E1 MOV R8,R0 \ 00000278 0B00A0E3 MOV R0,#+11 \ 0000027C C50100EF SWI +453 \ 00000280 A810A0E3 MOV R1,#+168 \ 00000284 7C1D81E3 ORR R1,R1,#0x1F00 \ 00000288 0A1081E0 ADD R1,R1,R10 \ 0000028C 02002DE9 PUSH {R1} \ 00000290 053086E2 ADD R3,R6,#+5 \ 00000294 012048E2 SUB R2,R8,#+1 \ 00000298 0010A0E3 MOV R1,#+0 \ 0000029C 02002DE9 PUSH {R1} \ 000002A0 051080E2 ADD R1,R0,#+5 \ 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 0B00A0E3 MOV R0,#+11 \ 000002B0 C50100EF SWI +453 \ 000002B4 0010A0E3 MOV R1,#+0 \ 000002B8 02002DE9 PUSH {R1} \ 000002BC 013047E2 SUB R3,R7,#+1 \ 000002C0 0220A0E3 MOV R2,#+2 \ 000002C4 FC10A0E3 MOV R1,#+252 \ 000002C8 401E81E3 ORR R1,R1,#0x400 \ 000002CC 051081E0 ADD R1,R1,R5 \ 000002D0 02002DE9 PUSH {R1} \ 000002D4 0010A0E3 MOV R1,#+0 \ 000002D8 02002DE9 PUSH {R1} \ 000002DC 0B10A0E3 MOV R1,#+11 \ 000002E0 02002DE9 PUSH {R1} \ 000002E4 01002DE9 PUSH {R0} \ 000002E8 340094E5 LDR R0,[R4, #+52] \ 000002EC 0210A0E3 MOV R1,#+2 \ 000002F0 4C0100EF SWI +332 5258 DrawList(); \ 000002F4 ........ BL DrawList \ 000002F8 1CD08DE2 ADD SP,SP,#+28 5259 } 5260 5261 if(IsInvertSoftKey) \ ??method0_5: \ 000002FC 00109DE5 LDR R1,[SP, #+0] \ 00000300 380094E5 LDR R0,[R4, #+56] \ 00000304 048041E2 SUB R8,R1,#+4 \ 00000308 ........ LDR R1,??DataTable205 ;; IsInvertSoftKey \ 0000030C C760A0E1 ASR R6,R7,#+1 \ 00000310 001091E5 LDR R1,[R1, #+0] \ 00000314 047047E2 SUB R7,R7,#+4 \ 00000318 D29FA0E3 MOV R9,#+840 \ 0000031C 000051E3 CMP R1,#+0 \ 00000320 3600000A BEQ ??method0_6 5262 { 5263 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 00000324 052089E0 ADD R2,R9,R5 \ 00000328 181085E2 ADD R1,R5,#+24 \ 0000032C 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)); \ 00000330 1700A0E3 MOV R0,#+23 \ 00000334 2E0100EF SWI +302 \ 00000338 0090A0E1 MOV R9,R0 \ 0000033C 0000A0E3 MOV R0,#+0 \ 00000340 2E0100EF SWI +302 \ 00000344 00B0A0E1 MOV R11,R0 \ 00000348 0500A0E3 MOV R0,#+5 \ 0000034C C50100EF SWI +453 \ 00000350 00022DE9 PUSH {R9} \ 00000354 00082DE9 PUSH {R11} \ 00000358 0410A0E3 MOV R1,#+4 \ 0000035C 02002DE9 PUSH {R1} \ 00000360 0730A0E1 MOV R3,R7 \ 00000364 002048E0 SUB R2,R8,R0 \ 00000368 0510A0E3 MOV R1,#+5 \ 0000036C 02002DE9 PUSH {R1} \ 00000370 0810A0E1 MOV R1,R8 \ 00000374 02002DE9 PUSH {R1} \ 00000378 380094E5 LDR R0,[R4, #+56] \ 0000037C 0610A0E1 MOV R1,R6 \ 00000380 4C0100EF SWI +332 5265 5266 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ 00000384 0C039AE5 LDR R0,[R10, #+780] \ 00000388 14D08DE2 ADD SP,SP,#+20 \ 0000038C 000050E3 CMP R0,#+0 \ 00000390 380094E5 LDR R0,[R4, #+56] \ 00000394 D42F8512 ADDNE R2,R5,#+848 \ 00000398 21208502 ADDEQ R2,R5,#+33 \ 0000039C 181085E2 ADD R1,R5,#+24 \ 000003A0 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)); \ 000003A4 1700A0E3 MOV R0,#+23 \ 000003A8 2E0100EF SWI +302 \ 000003AC 0050A0E1 MOV R5,R0 \ 000003B0 0000A0E3 MOV R0,#+0 \ 000003B4 2E0100EF SWI +302 \ 000003B8 0070A0E1 MOV R7,R0 \ 000003BC 0500A0E3 MOV R0,#+5 \ 000003C0 C50100EF SWI +453 \ 000003C4 20002DE9 PUSH {R5} \ 000003C8 80002DE9 PUSH {R7} \ 000003CC 0110A0E3 MOV R1,#+1 \ 000003D0 02002DE9 PUSH {R1} \ 000003D4 0630A0E1 MOV R3,R6 \ 000003D8 002048E0 SUB R2,R8,R0 \ 000003DC 0510A0E3 MOV R1,#+5 \ 000003E0 02002DE9 PUSH {R1} \ 000003E4 0810A0E1 MOV R1,R8 \ 000003E8 02002DE9 PUSH {R1} \ 000003EC 380094E5 LDR R0,[R4, #+56] \ 000003F0 0310A0E3 MOV R1,#+3 \ 000003F4 4C0100EF SWI +332 \ 000003F8 14D08DE2 ADD SP,SP,#+20 \ 000003FC F78FBDE8 POP {R0-R2,R4-R11,PC} 5268 } 5269 else 5270 { 5271 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ ??method0_6: \ 00000400 0C139AE5 LDR R1,[R10, #+780] \ 00000404 000051E3 CMP R1,#+0 \ 00000408 D42F8512 ADDNE R2,R5,#+848 \ 0000040C 21208502 ADDEQ R2,R5,#+33 \ 00000410 181085E2 ADD R1,R5,#+24 \ 00000414 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)); \ 00000418 1700A0E3 MOV R0,#+23 \ 0000041C 2E0100EF SWI +302 \ 00000420 00A0A0E1 MOV R10,R0 \ 00000424 0000A0E3 MOV R0,#+0 \ 00000428 2E0100EF SWI +302 \ 0000042C 00B0A0E1 MOV R11,R0 \ 00000430 0500A0E3 MOV R0,#+5 \ 00000434 C50100EF SWI +453 \ 00000438 00042DE9 PUSH {R10} \ 0000043C 00082DE9 PUSH {R11} \ 00000440 0410A0E3 MOV R1,#+4 \ 00000444 02002DE9 PUSH {R1} \ 00000448 0730A0E1 MOV R3,R7 \ 0000044C 002048E0 SUB R2,R8,R0 \ 00000450 0510A0E3 MOV R1,#+5 \ 00000454 02002DE9 PUSH {R1} \ 00000458 0810A0E1 MOV R1,R8 \ 0000045C 02002DE9 PUSH {R1} \ 00000460 380094E5 LDR R0,[R4, #+56] \ 00000464 0610A0E1 MOV R1,R6 \ 00000468 4C0100EF SWI +332 5273 5274 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 0000046C 380094E5 LDR R0,[R4, #+56] \ 00000470 052089E0 ADD R2,R9,R5 \ 00000474 181085E2 ADD R1,R5,#+24 \ 00000478 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)); \ 0000047C 1700A0E3 MOV R0,#+23 \ 00000480 2E0100EF SWI +302 \ 00000484 0050A0E1 MOV R5,R0 \ 00000488 0000A0E3 MOV R0,#+0 \ 0000048C 2E0100EF SWI +302 \ 00000490 0070A0E1 MOV R7,R0 \ 00000494 0500A0E3 MOV R0,#+5 \ 00000498 C50100EF SWI +453 \ 0000049C 20002DE9 PUSH {R5} \ 000004A0 80002DE9 PUSH {R7} \ 000004A4 0110A0E3 MOV R1,#+1 \ 000004A8 02002DE9 PUSH {R1} \ 000004AC 0630A0E1 MOV R3,R6 \ 000004B0 002048E0 SUB R2,R8,R0 \ 000004B4 0510A0E3 MOV R1,#+5 \ 000004B8 02002DE9 PUSH {R1} \ 000004BC 0810A0E1 MOV R1,R8 \ 000004C0 02002DE9 PUSH {R1} \ 000004C4 380094E5 LDR R0,[R4, #+56] \ 000004C8 0310A0E3 MOV R1,#+3 \ 000004CC 4C0100EF SWI +332 \ 000004D0 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 } \ 000004D4 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return \ ??method0_0: \ 000004D8 ........ DC32 pictures_max \ 000004DC ........ DC32 PBRECT \ 000004E0 ........ DC32 pictures_loaded \ 000004E4 ........ DC32 IsShowInfo \ 000004E8 ........ DC32 BGPBcolor \ 000004EC ........ DC32 PBcolor \ 000004F0 ........ DC32 total_smiles \ 000004F4 ........ 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,??DataTable220 ;; S_ICONS \ 0000002C ........ LDR R0,??DataTable205 ;; IsInvertSoftKey \ 00000030 081091E5 LDR R1,[R1, #+8] \ 00000034 0C2396E5 LDR R2,[R6, #+780] \ 00000038 003090E5 LDR R3,[R0, #+0] \ 0000003C ........ LDR R7,??DataTable219 ;; create_connect \ 00000040 7400A0E3 MOV R0,#+116 \ 00000044 680D80E3 ORR R0,R0,#0x1A00 \ 00000048 068080E0 ADD R8,R0,R6 \ 0000004C ........ LDR R0,??DataTable207 ;; 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 94A386E5 STR R10,[R6, #+916] \ 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 94A386E5 STR R10,[R6, #+916] 5335 } 5336 case GREEN_BUTTON: 5337 disautorecconect=0; \ ??method5_8: \ 000000EC C0B286E5 STR R11,[R6, #+704] 5338 if ((connect_state==0)&&(sock==-1)) \ 000000F0 E40296E5 LDR R0,[R6, #+740] \ 000000F4 000050E3 CMP R0,#+0 \ 000000F8 E8029605 LDREQ R0,[R6, #+744] \ 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 A09386E5 STR R9,[R6, #+928] 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,??DataTable215 ;; 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 C41296E5 LDR R1,[R6, #+708] \ 00000128 000051E3 CMP R1,#+0 \ 0000012C 00A0A013 MOVNE R10,#+0 \ 00000130 C4A286E5 STR R10,[R6, #+708] 5356 SUBPROC((void*)WriteDefSettings); \ 00000134 0E0000EA B ??method5_10 5357 break; 5358 case '2': 5359 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??method5_13: \ 00000138 781296E5 LDR R1,[R6, #+632] \ 0000013C 000051E3 CMP R1,#+0 \ 00000140 00A0A013 MOVNE R10,#+0 \ 00000144 78A286E5 STR R10,[R6, #+632] 5360 SUBPROC((void*)WriteDefSettings); \ 00000148 090000EA B ??method5_10 5361 break; 5362 case '3': 5363 if(CurrentPrivateStatus!=1) \ ??method5_14: \ 0000014C D00296E5 LDR R0,[R6, #+720] \ 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 601296E5 LDR R1,[R6, #+608] \ 00000168 000051E3 CMP R1,#+0 \ 0000016C 00A0A013 MOVNE R10,#+0 \ 00000170 60A286E5 STR R10,[R6, #+608] 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 9300A0E3 MOV R0,#+147 \ 00000008 400F80E3 ORR R0,R0,#0x100 \ 0000000C 000051E1 CMP R1,R0 \ 00000010 0E00001A BNE ??my_keyhook_0 5409 { 5410 #ifdef ELKA 5411 if ((key==CAMERA_BUTTON)&&(!IsUnlocked())) 5412 { 5413 GBS_StopTimer(&away_tmr); 5414 msg_away_timer=AUTO_ENGADE*12; 5415 away_timer(); 5416 main_d=1; 5417 } 5418 else 5419 { 5420 #endif 5421 if(Reset_timer) \ 00000014 3C009FE5 LDR R0,??my_keyhook_1 ;; Reset_timer \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 3080BD08 POPEQ {R4,R5,PC} 5422 { 5423 msg_away_timer=0; \ 00000024 ........ LDR R4,??DataTable220 ;; S_ICONS \ 00000028 0050A0E3 MOV R5,#+0 5424 away_m=0; 5425 if(change_back_status) \ 0000002C 9C0294E5 LDR R0,[R4, #+668] \ 00000030 905284E5 STR R5,[R4, #+656] \ 00000034 945284E5 STR R5,[R4, #+660] \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 3080BD08 POPEQ {R4,R5,PC} 5426 { 5427 CurrentStatus=status_rem; \ 00000040 980294E5 LDR R0,[R4, #+664] \ 00000044 800284E5 STR R0,[R4, #+640] 5428 set_my_status(); \ 00000048 ........ BL set_my_status 5429 change_back_status=0; \ 0000004C 9C5284E5 STR R5,[R4, #+668] 5430 } 5431 } 5432 #ifdef ELKA 5433 } 5434 #endif 5435 } 5436 return 0; \ ??my_keyhook_0: \ 00000050 0000A0E3 MOV R0,#+0 \ 00000054 3080BDE8 POP {R4,R5,PC} ;; return \ ??my_keyhook_1: \ 00000058 ........ DC32 Reset_timer 5437 } \ In segment DATA_C, align 4, align-sorted 5438 5439 const RECT Canvas={0,0,0,0}; \ Canvas: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000008 ........ DC32 `?` \ 0000000C ........ DC32 `?` \ 00000010 ........ DC32 `?> %s <<" \ 3C3C00 \ 00000139 000000 DC8 0, 0, 0 \ 0000013C 2563257400 DC8 "%c%t" \ 00000141 000000 DC8 0, 0, 0 \ 00000144 2825642F2564 DC8 "(%d/%d)" \ 2900 \ 0000014C EEF8E8E1EAE0 DC8 "\356\370\350\341\352\340" \ 00 \ 00000153 00 DC8 0 \ 00000154 57616974696E DC8 "Waiting for GPRS up..." \ 6720666F7220 \ 475052532075 \ 702E2E2E00 \ 0000016B 00 DC8 0 \ 0000016C 436F6E6E6563 DC8 "Connect to %s:%d" \ 7420746F2025 \ 733A256400 \ 0000017D 000000 DC8 0, 0, 0 \ 00000180 0A436F6E6E65 DC8 "\012Connect by IP!" \ 637420627920 \ 49502100 \ 00000190 53656E642044 DC8 "Send DNR..." \ 4E522E2E2E00 \ 0000019C 444E52204552 DC8 "DNR ERROR %d!" \ 524F52202564 \ 2100 \ 000001AA 0000 DC8 0, 0 \ 000001AC 444E52204F6B DC8 "DNR Ok, connecting..." \ 2C20636F6E6E \ 656374696E67 \ 2E2E2E00 \ 000001C2 0000 DC8 0, 0 \ 000001C4 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 \ 000001DD 000000 DC8 0, 0, 0 \ 000001E0 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 \ 0000020B 00 DC8 0 \ 0000020C D1E5F0E2E5F0 DC8 "\321\345\360\342\345\360 \355\345 \355\340\351\344\345\355!" \ 20EDE520EDE0 \ E9E4E5ED2100 \ 0000021E 0000 DC8 0, 0 \ 00000220 426164207061 DC8 "Bad packet" \ 636B657400 \ 0000022B 00 DC8 0 \ 0000022C 534325643A20 DC8 "SC%d: %04X" \ 2530345800 \ 00000237 00 DC8 0 \ 00000238 4552523A2025 DC8 "ERR: %s" \ 7300 \ 00000240 75696E256400 DC8 "uin%d" \ 00000246 0000 DC8 0, 0 \ 00000248 4D534725643A DC8 "MSG%d: %s" \ 20257300 \ 00000252 0000 DC8 0, 0 \ 00000254 257325642E77 DC8 "%s%d.wav" \ 617600 \ 0000025D 000000 DC8 0, 0, 0 \ 00000260 50696E672025 DC8 "Ping %d-%d seconds!" \ 642D25642073 \ 65636F6E6473 \ 2100 \ 00000274 50696E673A20 DC8 "Ping: %d sec" \ 256420736563 \ 00 \ 00000281 000000 DC8 0, 0, 0 \ 00000284 2025733A2025 DC8 " %s: %02d:%02d:%02d" \ 3032643A2530 \ 32643A253032 \ 6400 \ 00000298 537461747573 DC8 "Status change" \ 206368616E67 \ 6500 \ 000002A6 0000 DC8 0, 0 \ 000002A8 5B25733A2025 DC8 "[%s: %s]\012" \ 735D0A00 \ 000002B2 0000 DC8 0, 0 \ 000002B4 25642E202564 DC8 "%d. %d" \ 00 \ 000002BB 00 DC8 0 \ 000002BC 53746174653A DC8 53H, 74H, 61H, 74H, 65H, 3AH, 20H, 25H \ 2025 \ 000002C4 642C20525873 DC8 64H, 2CH, 20H, 52H, 58H, 73H, 74H, 61H \ 7461 \ 000002CC 74653A202564 DC8 74H, 65H, 3AH, 20H, 25H, 64H, 0AH, 52H \ 0A52 \ 000002D4 783A2564622C DC8 78H, 3AH, 25H, 64H, 62H, 2CH, 54H, 78H \ 5478 \ 000002DC 3A2564620A51 DC8 3AH, 25H, 64H, 62H, 0AH, 51H, 75H, 65H \ 7565 \ 000002E4 75653A202564 DC8 75H, 65H, 3AH, 20H, 25H, 64H, 62H, 0AH \ 620A \ 000002EC 25730A257300 DC8 25H, 73H, 0AH, 25H, 73H, 0 \ 000002F2 0000 DC8 0, 0 \ 000002F4 0A4C6F616465 DC8 "\012Loaded %d smiles" \ 642025642073 \ 6D696C657300 \ 00000306 0000 DC8 0, 0 \ 00000308 0A4C6F616465 DC8 "\012Loaded %d xstatus" \ 642025642078 \ 737461747573 \ 00 \ 0000031B 00 DC8 0 \ 0000031C 53746174653A DC8 "State: %d, RXstate: %d" \ 2025642C2052 \ 587374617465 \ 3A20256400 \ 00000333 00 DC8 0 \ 00000334 25742055494E DC8 "%t UIN!" \ 2100 \ 0000033C C2FBE1E5F0E8 DC8 "\302\373\341\345\360\350\362\345" \ F2E500 \ 00000345 000000 DC8 0, 0, 0 \ 00000348 4578697400 DC8 "Exit" \ 0000034D 000000 DC8 0, 0, 0 \ 00000350 434C69737400 DC8 "CList" \ 00000356 0000 DC8 0, 0 \ 00000358 4675636B2079 DC8 "Fuck you hacker! my password sux ur ass" \ 6F7520686163 \ 6B657221206D \ 792070617373 \ 776F72642073 \ 757820757220 \ 61737300 \ 00000380 556E72656164 DC8 "Unread: %d" \ 3A20256400 \ 0000038B 00 DC8 0 \ 0000038C 4E6174494351 DC8 "NatICQ config updated!" \ 20636F6E6669 \ 672075706461 \ 7465642100 \ 000003A3 00 DC8 0 \ 000003A4 257332323430 DC8 "%s2240.png" \ 2E706E6700 \ 000003AF 00 DC8 0 \ 000003B0 475052532075 DC8 "GPRS up, wait 10 sec..." \ 702C20776169 \ 742031302073 \ 65632E2E2E00 \ 000003C8 54727920746F DC8 "Try to login..." \ 206C6F67696E \ 2E2E2E00 \ 000003D8 CDE520E220F1 DC8 "\315\345 \342 \361\357\350\361\352\345" \ EFE8F1EAE500 \ 000003E4 4C6F6F706261 DC8 "Loopback" \ 636B00 \ 000003ED 000000 DC8 0, 0, 0 \ 000003F0 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 \ 00000418 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 \ 0000043A 0000 DC8 0, 0 \ 0000043C 446973636F6E DC8 "Disconnected, %d bytes not sended!" \ 6E6563746564 \ 2C2025642062 \ 79746573206E \ 6F742073656E \ 6465642100 \ 0000045F 00 DC8 0 \ 00000460 25730A526563 DC8 "%s\012Reconect after %d second..." \ 6F6E65637420 \ 616674657220 \ 256420736563 \ 6F6E642E2E2E \ 00 \ 0000047F 00 DC8 0 \ 00000480 50696E67204E DC8 "Ping None" \ 6F6E6500 \ 0000048A 0000 DC8 0, 0 \ 0000048C C2E2E5E4E8F2 DC8 "\302\342\345\344\350\362\345 UIN/\357\340\360\356\353\374!" \ E52055494E2F \ EFE0F0EEEBFC \ 2100 \ ipc_my_name: \ 000004A0 4E6174494351 DC8 "NatICQ" \ 00 \ 000004A7 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004B7 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000 \ ipc_xtask_name: \ 000004C0 585461736B00 DC8 "XTask" \ 000004C6 0000 DC8 0, 0 \ x_status_change: \ 000004C8 582D53746174 DC8 "X-Status change" \ 757320636861 \ 6E676500 \ 000004D8 CAEEEDF2E0EA DC8 "\312\356\355\362\340\352\362\373" \ F2FB00 \ 000004E1 000000 DC8 0, 0, 0 \ 000004E4 C2E2EEE42054 DC8 "\302\342\356\344 T9: " \ 393A2000 \ 000004EE 0000 DC8 0, 0 \ 000004F0 C7E0EAF0FBF2 DC8 "\307\340\352\360\373\362\374" \ FC00 \ clrSelect: \ 000004F8 FF000060 DC8 255, 0, 0, 96 \ fntSelect: \ 000004FC FFFF0060 DC8 255, 255, 0, 96 \ bordSelect: \ 00000500 00000060 DC8 0, 0, 0, 96 \ clrNotSelect: \ 00000504 00000060 DC8 0, 0, 0, 96 \ bordNotSelect: \ 00000508 00000060 DC8 0, 0, 0, 96 \ fntNotSelect: \ 0000050C FFFFFF60 DC8 255, 255, 255, 96 \ gui_methods: \ 00000510 ............ DC32 method0, method1, method2, method3, method4, method5, 0H \ ............ \ ............ \ ............ \ 00000000 \ 0000052C ............ 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 0B0000006400 DC32 11, 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 0B000000 DC32 11 \ 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 F4409FE5 LDR R4,??maincsm_oncreate_0 ;; Canvas \ 00000034 010040E2 SUB R0,R0,#+1 \ 00000038 007084E5 STR R7,[R4, #+0] \ 0000003C B400C4E1 STRH R0,[R4, #+4] \ 00000040 B610C4E1 STRH R1,[R4, #+6] 5447 main_gui->gui.canvas=(void *)(&Canvas); \ 00000044 004086E5 STR R4,[R6, #+0] 5448 // main_gui->gui.flag30=2; 5449 main_gui->gui.methods=(void *)gui_methods; \ 00000048 510E84E2 ADD R0,R4,#+1296 \ 0000004C 040086E5 STR R0,[R6, #+4] 5450 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 00000050 158000EF SWI +32789 \ 00000054 200086E5 STR R0,[R6, #+32] 5451 csm->csm.state=0; \ 00000058 107085E5 STR R7,[R5, #+16] 5452 csm->csm.unk1=0; \ 0000005C 147085E5 STR R7,[R5, #+20] 5453 maingui_id=csm->gui_id=CreateGUI(main_gui); \ 00000060 0600A0E1 MOV R0,R6 \ 00000064 370100EF SWI +311 \ 00000068 280085E5 STR R0,[R5, #+40] \ 0000006C ........ LDR R5,??DataTable220 ;; S_ICONS \ 00000070 6C0285E5 STR R0,[R5, #+620] 5454 ews=AllocWS(16384); \ 00000074 400CA0E3 MOV R0,#+16384 \ 00000078 250100EF SWI +293 \ 0000007C 880285E5 STR R0,[R5, #+648] 5455 // MutexCreate(&contactlist_mtx); 5456 DNR_TRIES=3; \ 00000080 0300A0E3 MOV R0,#+3 \ 00000084 A00385E5 STR R0,[R5, #+928] 5457 // SUBPROC((void *)InitSmiles); 5458 // SUBPROC((void *)create_connect); 5459 wsBuffer=AllocWS(4096); \ 00000088 400DA0E3 MOV R0,#+4096 \ 0000008C 250100EF SWI +293 \ 00000090 440285E5 STR R0,[R5, #+580] 5460 OneSecTmr(); \ 00000094 ........ BL OneSecTmr 5461 5462 if(ParseUINS()!=0) \ 00000098 ........ _BLF ParseUINS,??ParseUINS??rA \ 0000009C 000050E3 CMP R0,#+0 \ 000000A0 0200000A BEQ ??maincsm_oncreate_1 5463 { 5464 USE_ADD_UIN=1; \ 000000A4 0100A0E3 MOV R0,#+1 \ 000000A8 D40385E5 STR R0,[R5, #+980] 5465 InitXStatusesImg(); \ 000000AC ........ _BLF InitXStatusesImg,??InitXStatusesImg??rA 5466 } 5467 5468 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ ??maincsm_oncreate_1: \ 000000B0 ........ LDR R2,??DataTable211 ;; process_active_timer \ 000000B4 871EA0E3 MOV R1,#+2160 \ 000000B8 8400A0E3 MOV R0,#+132 \ 000000BC 680D80E3 ORR R0,R0,#0x1A00 \ 000000C0 050080E0 ADD R0,R0,R5 \ 000000C4 4D0000EF SWI +77 5469 5470 if(!USE_ADD_UIN) \ 000000C8 D40395E5 LDR R0,[R5, #+980] \ 000000CC 000050E3 CMP R0,#+0 \ 000000D0 F080BD18 POPNE {R4-R7,PC} 5471 { 5472 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000000D4 ........ LDR R0,??DataTable212 ;; UIN \ 000000D8 1E1084E2 ADD R1,R4,#+30 \ 000000DC 002090E5 LDR R2,[R0, #+0] \ 000000E0 A600A0E3 MOV R0,#+166 \ 000000E4 400E80E3 ORR R0,R0,#0x400 \ 000000E8 040080E0 ADD R0,R0,R4 \ 000000EC 160000EF SWI +22 5473 gipc.name_to=ipc_my_name; \ 000000F0 4A0EA0E3 MOV R0,#+1184 \ 000000F4 041080E0 ADD R1,R0,R4 \ 000000F8 BC1085E5 STR R1,[R5, #+188] 5474 gipc.name_from=ipc_my_name; \ 000000FC 040080E0 ADD R0,R0,R4 \ 00000100 C00085E5 STR R0,[R5, #+192] 5475 gipc.data=(void *)-1; \ 00000104 0700E0E1 MVN R0,R7 \ 00000108 C40085E5 STR R0,[R5, #+196] 5476 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 0000010C BC3085E2 ADD R3,R5,#+188 \ 00000110 0120A0E3 MOV R2,#+1 \ 00000114 B010A0E3 MOV R1,#+176 \ 00000118 DE1C81E3 ORR R1,R1,#0xDE00 \ 0000011C 0900A0E3 MOV R0,#+9 \ 00000120 420C80E3 ORR R0,R0,#0x4200 \ 00000124 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 } \ 00000128 F080BDE8 POP {R4-R7,PC} ;; return \ ??maincsm_oncreate_0: \ 0000012C ........ DC32 Canvas 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,??DataTable220 ;; S_ICONS \ 00000008 ........ BL WriteDefSettings \ 0000000C 440294E5 LDR R0,[R4, #+580] \ 00000010 290100EF SWI +297 5494 //GBS_DelTimer(&tmr_dorecv); 5495 RemoveKeybMsgHook((void *)my_keyhook); \ 00000014 ........ LDR R0,??DataTable214 ;; my_keyhook \ 00000018 2D0100EF SWI +301 5496 GBS_DelTimer(&tmr_active); \ 0000001C 8400A0E3 MOV R0,#+132 \ 00000020 680D80E3 ORR R0,R0,#0x1A00 \ 00000024 040080E0 ADD R0,R0,R4 \ 00000028 8C0100EF SWI +396 5497 GBS_DelTimer(&tmr_vibra); \ 0000002C 6400A0E3 MOV R0,#+100 \ 00000030 680D80E3 ORR R0,R0,#0x1A00 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 8C0100EF SWI +396 5498 GBS_DelTimer(&reconnect_tmr); \ 0000003C 7400A0E3 MOV R0,#+116 \ 00000040 680D80E3 ORR R0,R0,#0x1A00 \ 00000044 040080E0 ADD R0,R0,R4 \ 00000048 8C0100EF SWI +396 5499 GBS_DelTimer(&tmr_illumination); \ 0000004C 5400A0E3 MOV R0,#+84 \ 00000050 680D80E3 ORR R0,R0,#0x1A00 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 8C0100EF SWI +396 5500 GBS_DelTimer(&tm22); \ 0000005C 9800A0E3 MOV R0,#+152 \ 00000060 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000064 040080E0 ADD R0,R0,R4 \ 00000068 8C0100EF SWI +396 5501 #ifdef ELKA 5502 GBS_DelTimer(&sli_tmr); 5503 #endif 5504 GBS_DelTimer(&remind_tmr); \ 0000006C A400A0E3 MOV R0,#+164 \ 00000070 600D80E3 ORR R0,R0,#0x1800 \ 00000074 040080E0 ADD R0,R0,R4 \ 00000078 8C0100EF SWI +396 5505 GBS_DelTimer(&ping_tmr); \ 0000007C FC00A0E3 MOV R0,#+252 \ 00000080 540D80E3 ORR R0,R0,#0x1500 \ 00000084 040080E0 ADD R0,R0,R4 \ 00000088 8C0100EF SWI +396 5506 GBS_DelTimer(&uptime_tmr); \ 0000008C B400A0E3 MOV R0,#+180 \ 00000090 600D80E3 ORR R0,R0,#0x1800 \ 00000094 040080E0 ADD R0,R0,R4 \ 00000098 8C0100EF SWI +396 5507 GBS_DelTimer(&autoChangeStatus); \ 0000009C 9400A0E3 MOV R0,#+148 \ 000000A0 600D80E3 ORR R0,R0,#0x1800 \ 000000A4 040080E0 ADD R0,R0,R4 \ 000000A8 8C0100EF SWI +396 5508 #ifdef NEWSGOLD 5509 GBS_DelTimer(&tracktmr); \ 000000AC C400A0E3 MOV R0,#+196 \ 000000B0 600D80E3 ORR R0,R0,#0x1800 \ 000000B4 040080E0 ADD R0,R0,R4 \ 000000B8 8C0100EF SWI +396 5510 GBS_DelTimer(&scrsTmr); \ 000000BC 0C00A0E3 MOV R0,#+12 \ 000000C0 5C0D80E3 ORR R0,R0,#0x1700 \ 000000C4 040080E0 ADD R0,R0,R4 \ 000000C8 8C0100EF SWI +396 5511 #endif 5512 GBS_DelTimer(&incs2); \ 000000CC 8800A0E3 MOV R0,#+136 \ 000000D0 7C0D80E3 ORR R0,R0,#0x1F00 \ 000000D4 040080E0 ADD R0,R0,R4 \ 000000D8 8C0100EF SWI +396 5513 GBS_DelTimer(&develop); \ 000000DC A000A0E3 MOV R0,#+160 \ 000000E0 740D80E3 ORR R0,R0,#0x1D00 \ 000000E4 040080E0 ADD R0,R0,R4 \ 000000E8 8C0100EF SWI +396 5514 GBS_DelTimer(&away_tmr); \ 000000EC 8400A0E3 MOV R0,#+132 \ 000000F0 600D80E3 ORR R0,R0,#0x1800 \ 000000F4 040080E0 ADD R0,R0,R4 \ 000000F8 8C0100EF SWI +396 5515 SetVibration(0); \ 000000FC 0000A0E3 MOV R0,#+0 \ 00000100 7C0000EF SWI +124 5516 FreeTemplates(); \ 00000104 ........ BL FreeTemplates 5517 cmdFree(); \ 00000108 ........ BL cmdFree 5518 #ifdef kluchnik 5519 FreeBotMessage(); 5520 #endif 5521 FreeCLIST(); \ 0000010C ........ _BLF FreeCLIST,??FreeCLIST??rA 5522 free_ICONS(); \ 00000110 ........ BL free_ICONS 5523 // FreeSmiles(); 5524 FreeWS(ews); \ 00000114 880294E5 LDR R0,[R4, #+648] \ 00000118 290100EF SWI +297 5525 FreeXStatusText(); \ 0000011C ........ _BLF FreeXStatusText,??FreeXStatusText??rA 5526 PrintLibFree(); \ 00000120 ........ _BLF PrintLibFree,??PrintLibFree??rA 5527 SUBPROC((void *)FreeSmiles); \ 00000124 24009FE5 LDR R0,??maincsm_onclose_0 ;; FreeSmiles \ 00000128 710100EF SWI +369 5528 SUBPROC((void *)FreeXStatusesImg); \ 0000012C 20009FE5 LDR R0,??maincsm_onclose_0+0x4 ;; FreeXStatusesImg \ 00000130 710100EF SWI +369 5529 SUBPROC((void *)end_socket); \ 00000134 ........ LDR R0,??DataTable215 ;; end_socket \ 00000138 710100EF SWI +369 5530 SUBPROC((void *)ClearSendQ); \ 0000013C ........ LDR R0,??DataTable246 ;; ClearSendQ \ 00000140 710100EF SWI +369 5531 SUBPROC((void *)ElfKiller); \ 00000144 ........ LDR R0,??DataTable217 ;; ElfKiller \ 00000148 710100EF SWI +369 5532 } \ 0000014C 1080BDE8 POP {R4,PC} ;; return \ ??maincsm_onclose_0: \ 00000150 ........ DC32 FreeSmiles \ 00000154 ........ 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,??DataTable220 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 041390E5 LDR R1,[R0, #+772] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 5537 { 5538 DNR_TRIES=3; \ 00000014 0310A0E3 MOV R1,#+3 \ 00000018 A01380E5 STR R1,[R0, #+928] 5539 SUBPROC((void*)create_connect); \ 0000001C ........ LDR R0,??DataTable219 ;; 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,??DataTable220 ;; S_ICONS \ 00000008 C40094E5 LDR R0,[R4, #+196] \ 0000000C 010070E3 CMN R0,#+1 \ 00000010 1100000A BEQ ??CheckDoubleRun_0 5547 { 5548 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable221 ;; Canvas 5549 gipc.name_from=ipc_my_name; 5550 gipc.data=(void *)csm_id; \ 00000018 C40084E5 STR R0,[R4, #+196] \ 0000001C 4C2E81E2 ADD R2,R1,#+1216 \ 00000020 BC2084E5 STR R2,[R4, #+188] \ 00000024 4A1E81E2 ADD R1,R1,#+1184 \ 00000028 C01084E5 STR R1,[R4, #+192] 5551 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 0000002C BC3084E2 ADD R3,R4,#+188 \ 00000030 0220A0E3 MOV R2,#+2 \ 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 5552 LockSched(); \ 00000048 460100EF SWI +326 5553 CloseCSM(maincsm_id); \ 0000004C 680294E5 LDR R0,[R4, #+616] \ 00000050 FC0100EF SWI +508 5554 //ShowMSG(1,(int)LG_ALREADY_STARTED); 5555 UnlockSched(); \ 00000054 470100EF SWI +327 \ 00000058 1080BDE8 POP {R4,PC} 5556 } 5557 else 5558 if(!USE_ADD_UIN) \ ??CheckDoubleRun_0: \ 0000005C D40394E5 LDR R0,[R4, #+980] \ 00000060 000050E3 CMP R0,#+0 \ 00000064 0200001A BNE ??CheckDoubleRun_1 5559 { 5560 InitXStatusesImg(); \ 00000068 ........ _BLF InitXStatusesImg,??InitXStatusesImg??rA 5561 //InitSmiles(); Это вызовется из InitXStatusesImg 5562 create_connect(); \ 0000006C ........ BL create_connect \ 00000070 1080BDE8 POP {R4,PC} 5563 } 5564 else 5565 { 5566 InitXStatusesImg(); \ ??CheckDoubleRun_1: \ 00000074 ........ _BLF InitXStatusesImg,??InitXStatusesImg??rA 5567 USE_ADD_UIN=1; \ 00000078 0100A0E3 MOV R0,#+1 \ 0000007C D40384E5 STR R0,[R4, #+980] 5568 } 5569 5570 } \ 00000080 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 0A00000A BEQ ??checkGui_0 5582 { 5583 GUI* igui = GetTopGUI(); \ 00000014 4D0100EF SWI +333 5584 if (igui) \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 0700000A BEQ ??checkGui_0 5585 { 5586 #ifdef ELKA 5587 canvasdata = BuildCanvas(); 5588 retval = 1; 5589 #else 5590 void *idata = GetDataOfItemByID(igui, 2); \ 00000020 0210A0E3 MOV R1,#+2 \ 00000024 4F0100EF SWI +335 5591 if (idata) \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 0300000A BEQ ??checkGui_0 5592 { 5593 canvasdata = ((void **)idata)[DISPLACE_OF_IDLECANVAS / 4]; \ 00000030 10109FE5 LDR R1,??checkGui_1 ;; S_ICONS + 572 \ 00000034 180090E5 LDR R0,[R0, #+24] 5594 retval = 1; \ 00000038 0140A0E3 MOV R4,#+1 \ 0000003C 000081E5 STR R0,[R1, #+0] 5595 } 5596 #endif 5597 } 5598 } 5599 return retval; \ ??checkGui_0: \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1080BDE8 POP {R4,PC} ;; return \ ??checkGui_1: \ 00000048 ........ DC32 S_ICONS + 572 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,??DataTable222 ;; S_ICONS \ 00000008 20D04DE2 SUB SP,SP,#+32 \ 0000000C ........ LDR R7,??DataTable223 ;; Canvas \ 00000010 0140A0E1 MOV R4,R1 \ 00000014 E410A0E3 MOV R1,#+228 \ 00000018 681D81E3 ORR R1,R1,#0x1A00 \ 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 9800001A 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 9500000A BEQ ??maincsm_onmessage_2 5622 { 5623 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 00000048 000098E5 LDR R0,[R8, #+0] \ 0000004C 4A9EA0E3 MOV R9,#+1184 \ 00000050 071089E0 ADD R1,R9,R7 \ 00000054 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000058 000050E3 CMP R0,#+0 \ 0000005C 8F00001A BNE ??maincsm_onmessage_2 5624 { 5625 switch (msg->submess) \ 00000060 081094E5 LDR R1,[R4, #+8] \ 00000064 040098E5 LDR R0,[R8, #+4] \ 00000068 011041E2 SUB R1,R1,#+1 \ 0000006C 050051E3 CMP R1,#+5 \ 00000070 8A00008A BHI ??maincsm_onmessage_2 \ 00000074 012F8FE2 ADR R2,??maincsm_onmessage_0 \ 00000078 0120D2E7 LDRB R2,[R2, R1] \ 0000007C 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_0: \ 00000080 010A1127 DC8 +1,+10,+17,+39 \ 00000084 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: \ 00000088 071089E0 ADD R1,R9,R7 \ 0000008C 010050E1 CMP R0,R1 \ 00000090 0200001A BNE ??maincsm_onmessage_4 \ 00000094 700B9FE5 LDR R0,??maincsm_onmessage_5 ;; CheckDoubleRun \ 00000098 710100EF SWI +369 \ 0000009C 7F0000EA B ??maincsm_onmessage_2 5630 else ipc->data=(void *)maincsm_id; \ ??maincsm_onmessage_4: \ 000000A0 680295E5 LDR R0,[R5, #+616] \ 000000A4 080088E5 STR R0,[R8, #+8] \ 000000A8 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: \ 000000AC 071089E0 ADD R1,R9,R7 \ 000000B0 010050E1 CMP R0,R1 \ 000000B4 0100001A BNE ??maincsm_onmessage_7 \ 000000B8 500B9FE5 LDR R0,??maincsm_onmessage_5+0x4 ;; ProcessNextSmile \ ??maincsm_onmessage_8: \ 000000BC 710100EF SWI +369 5635 SMART_REDRAW(); \ ??maincsm_onmessage_7: \ 000000C0 ........ BL SMART_REDRAW \ 000000C4 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: \ 000000C8 071089E0 ADD R1,R9,R7 \ 000000CC 010050E1 CMP R0,R1 \ 000000D0 FAFFFF1A BNE ??maincsm_onmessage_7 \ 000000D4 380B9FE5 LDR R0,??maincsm_onmessage_5+0x8 ;; ProcessNextXStatImg \ 000000D8 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: \ 000000DC 071089E0 ADD R1,R9,R7 \ 000000E0 010050E1 CMP R0,R1 \ 000000E4 6D00001A BNE ??maincsm_onmessage_2 5644 { 5645 //if(!(--on_off_timer)) on_off_timer=0;//таймер показа подключившихся/отключившихся 5646 if(on_off_timer>0) \ 000000E8 240395E5 LDR R0,[R5, #+804] \ 000000EC 010050E3 CMP R0,#+1 5647 on_off_timer--; \ 000000F0 010040A2 SUBGE R0,R0,#+1 \ 000000F4 240385A5 STRGE R0,[R5, #+804] \ 000000F8 680000AA BGE ??maincsm_onmessage_2 5648 else 5649 if(on_off_timer!=-1) \ 000000FC 010070E3 CMN R0,#+1 \ 00000100 6600000A BEQ ??maincsm_onmessage_2 5650 { 5651 on_off_timer=-1; \ 00000104 0600E0E1 MVN R0,R6 \ 00000108 240385E5 STR R0,[R5, #+804] 5652 zeromem(on_off_buf,128); \ 0000010C 00009DE5 LDR R0,[SP, #+0] \ 00000110 8010A0E3 MOV R1,#+128 \ 00000114 1D0100EF SWI +285 5653 UpdateCLheader(); \ 00000118 ........ BL UpdateCLheader \ 0000011C 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: \ 00000120 071089E0 ADD R1,R9,R7 \ 00000124 010050E1 CMP R0,R1 \ 00000128 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; \ 0000012C AC0395E5 LDR R0,[R5, #+940] \ 00000130 0C8395E5 LDR R8,[R5, #+780] \ 00000134 0090A0E3 MOV R9,#+0 \ 00000138 000050E3 CMP R0,#+0 \ 0000013C 1900000A BEQ ??maincsm_onmessage_12 \ 00000140 010040E2 SUB R0,R0,#+1 \ 00000144 AC0385E5 STR R0,[R5, #+940] \ 00000148 160000EA B ??maincsm_onmessage_12 5664 while(t) 5665 { 5666 if(t->just_now) \ ??maincsm_onmessage_13: \ 0000014C 680098E5 LDR R0,[R8, #+104] \ 00000150 000050E3 CMP R0,#+0 \ 00000154 0200000A BEQ ??maincsm_onmessage_14 5667 { 5668 if (!(--(t->just_now))) f=1; \ 00000158 010050E2 SUBS R0,R0,#+1 \ 0000015C 680088E5 STR R0,[R8, #+104] \ 00000160 0190A003 MOVEQ R9,#+1 5669 } 5670 if (t->isactive) \ ??maincsm_onmessage_14: \ 00000164 9C0098E5 LDR R0,[R8, #+156] \ 00000168 000050E3 CMP R0,#+0 \ 0000016C 0C00000A BEQ ??maincsm_onmessage_15 5671 { 5672 if (!(--(t->isactive))) \ 00000170 010050E2 SUBS R0,R0,#+1 \ 00000174 9C0088E5 STR R0,[R8, #+156] \ 00000178 0900001A BNE ??maincsm_onmessage_15 5673 { 5674 f=1; //Если дошли до 0 хотя бы один раз - надо перерисовать меню 5675 if ((t->log)&&(!t->isunread)) \ 0000017C 900098E5 LDR R0,[R8, #+144] \ 00000180 0190A0E3 MOV R9,#+1 \ 00000184 000050E3 CMP R0,#+0 \ 00000188 0500000A BEQ ??maincsm_onmessage_15 \ 0000018C 800098E5 LDR R0,[R8, #+128] \ 00000190 000050E3 CMP R0,#+0 \ 00000194 0200001A BNE ??maincsm_onmessage_15 5676 { 5677 FreeLOGQ(&t->log); \ 00000198 900088E2 ADD R0,R8,#+144 \ 0000019C ........ BL FreeLOGQ 5678 t->msg_count=0; \ 000001A0 A06088E5 STR R6,[R8, #+160] 5679 } 5680 } 5681 } 5682 t=(CLIST *)(t->next); \ ??maincsm_onmessage_15: \ 000001A4 008098E5 LDR R8,[R8, #+0] 5683 } \ ??maincsm_onmessage_12: \ 000001A8 000058E3 CMP R8,#+0 \ 000001AC E6FFFF1A BNE ??maincsm_onmessage_13 5684 if (f) \ 000001B0 000059E3 CMP R9,#+0 \ 000001B4 0A00000A BEQ ??maincsm_onmessage_16 5685 { 5686 CLIST *oldt=NULL; 5687 if (contactlist_menu_id) \ 000001B8 141395E5 LDR R1,[R5, #+788] \ 000001BC 0000A0E3 MOV R0,#+0 \ 000001C0 000051E3 CMP R1,#+0 \ 000001C4 0400000A BEQ ??maincsm_onmessage_17 5688 { 5689 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 000001C8 140395E5 LDR R0,[R5, #+788] \ 000001CC 0010A0E3 MOV R1,#+0 \ 000001D0 090200EF SWI +521 \ 000001D4 8F0100EF SWI +399 \ 000001D8 ........ _BLF FindContactByN,??FindContactByN??rA 5690 } 5691 RecountMenu(oldt,1); \ ??maincsm_onmessage_17: \ 000001DC 0110A0E3 MOV R1,#+1 \ 000001E0 ........ BL RecountMenu 5692 } 5693 if (time_to_stop_t9) \ ??maincsm_onmessage_16: \ 000001E4 B40395E5 LDR R0,[R5, #+948] \ 000001E8 000050E3 CMP R0,#+0 \ 000001EC 2B00000A BEQ ??maincsm_onmessage_2 5694 { 5695 if (!(--time_to_stop_t9)) \ 000001F0 010050E2 SUBS R0,R0,#+1 \ 000001F4 B40385E5 STR R0,[R5, #+948] \ 000001F8 2800001A BNE ??maincsm_onmessage_2 5696 { 5697 if (IsGuiOnTop(edchat_id)) RefreshGUI(); \ 000001FC 180395E5 LDR R0,[R5, #+792] \ 00000200 350100EF SWI +309 \ 00000204 000050E3 CMP R0,#+0 \ 00000208 2400000A BEQ ??maincsm_onmessage_2 \ 0000020C 960100EF SWI +406 \ 00000210 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: \ 00000214 080098E5 LDR R0,[R8, #+8] \ 00000218 040090E5 LDR R0,[R0, #+4] \ 0000021C 1B0000EF SWI +27 \ 00000220 0090A0E1 MOV R9,R0 5704 TPKT *msg=malloc(sizeof(PKT)+l+30); \ 00000224 260089E2 ADD R0,R9,#+38 \ 00000228 140000EF SWI +20 \ 0000022C 00A0A0E1 MOV R10,R0 5705 msg->pkt.uin=((IPCMsg *)(ipc->data))->uin; \ 00000230 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); \ 00000234 0920A0E1 MOV R2,R9 \ 00000238 000090E5 LDR R0,[R0, #+0] \ 0000023C 00008AE5 STR R0,[R10, #+0] \ 00000240 0200A0E3 MOV R0,#+2 \ 00000244 B400CAE1 STRH R0,[R10, #+4] \ 00000248 B690CAE1 STRH R9,[R10, #+6] \ 0000024C 080098E5 LDR R0,[R8, #+8] \ 00000250 041090E5 LDR R1,[R0, #+4] \ 00000254 08008AE2 ADD R0,R10,#+8 \ 00000258 1E0100EF SWI +286 5709 //slientsend=1; 5710 if(strstr(msg->data,PASS)==0) \ 0000025C ........ LDR R1,??DataTable243 ;; PASS \ 00000260 08008AE2 ADD R0,R10,#+8 \ 00000264 180100EF SWI +280 \ 00000268 000050E3 CMP R0,#+0 \ 0000026C 0400000A BEQ ??maincsm_onmessage_19 5711 { 5712 SENDMSGCOUNT++; //Номер сообщения 5713 SUBPROC((void *)SendAnswer,0,msg); 5714 } 5715 else 5716 { 5717 msg->pkt.data_len=40; \ 00000270 2800A0E3 MOV R0,#+40 \ 00000274 B600CAE1 STRH R0,[R10, #+6] 5718 strcpy(msg->data, "Fuck you hacker! my password sux ur ass"); \ 00000278 D61F87E2 ADD R1,R7,#+856 \ 0000027C 08008AE2 ADD R0,R10,#+8 \ 00000280 1A0000EF SWI +26 5719 SENDMSGCOUNT++; //Номер сообщения \ ??maincsm_onmessage_19: \ 00000284 700295E5 LDR R0,[R5, #+624] 5720 SUBPROC((void *)SendAnswer,0,msg); \ 00000288 0A20A0E1 MOV R2,R10 \ 0000028C 010080E2 ADD R0,R0,#+1 \ 00000290 700285E5 STR R0,[R5, #+624] \ 00000294 ........ LDR R0,??DataTable244 ;; SendAnswer \ 00000298 0010A0E3 MOV R1,#+0 \ 0000029C 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: \ 000002A0 068100EF SWI +33030 \ 000002A4 040090E5 LDR R0,[R0, #+4] \ 000002A8 080100EF SWI +264 \ 000002AC 000050E3 CMP R0,#+0 \ 000002B0 0700000A BEQ ??maincsm_onmessage_20 \ 000002B4 2C0090E5 LDR R0,[R0, #+44] 5734 if (icsm && checkGui(idlegui_id(icsm))) \ 000002B8 ........ BL checkGui \ 000002BC 000050E3 CMP R0,#+0 \ 000002C0 0300000A BEQ ??maincsm_onmessage_20 5735 { 5736 // GUI *igui=GetTopGUI(); 5737 // if (igui) //И он существует 5738 //{ 5739 INC_show=0; \ 000002C4 BC6385E5 STR R6,[R5, #+956] 5740 canvasdata=BuildCanvas(); //void * - belyj fon! \ 000002C8 F18000EF SWI +33009 \ 000002CC 3C0285E5 STR R0,[R5, #+572] \ 000002D0 010000EA B ??maincsm_onmessage_21 5741 //Тут трохи поменял 5742 // by Rainmaker: Рисуем канву только для иконки и выводим в своих координатах 5743 #ifdef ELKA 5744 if (total_unread) 5745 SLI_On(); 5746 #endif 5747 } 5748 //} 5749 else 5750 { 5751 main_d=1; \ ??maincsm_onmessage_20: \ 000002D4 0100A0E3 MOV R0,#+1 \ 000002D8 340285E5 STR R0,[R5, #+564] 5752 } 5753 } 5754 5755 //---------------------------------------------------// 5756 void *icsm; 5757 icsm=FindCSMbyID(CSM_root()->idle_id); 5758 if (icsm && checkGui(idlegui_id(icsm))) \ ??maincsm_onmessage_21: \ 000002DC ........ LDR R8,??DataTable261 ;; fonto \ 000002E0 068100EF SWI +33030 \ 000002E4 040090E5 LDR R0,[R0, #+4] \ 000002E8 080100EF SWI +264 \ 000002EC 000050E3 CMP R0,#+0 \ 000002F0 3D01000A BEQ ??maincsm_onmessage_22 \ 000002F4 2C0090E5 LDR R0,[R0, #+44] \ 000002F8 ........ BL checkGui \ 000002FC 000050E3 CMP R0,#+0 \ 00000300 3901000A BEQ ??maincsm_onmessage_22 5759 { 5760 int icn; 5761 if(total_unread) \ 00000304 080395E5 LDR R0,[R5, #+776] \ 00000308 000050E3 CMP R0,#+0 5762 icn=IS_MSG; \ 0000030C 0D90A013 MOVNE R9,#+13 \ 00000310 0A00001A BNE ??maincsm_onmessage_23 5763 else 5764 { 5765 switch(connect_state) \ 00000314 E40295E5 LDR R0,[R5, #+740] \ 00000318 000050E3 CMP R0,#+0 \ 0000031C 0200000A BEQ ??maincsm_onmessage_24 \ 00000320 030050E2 SUBS R0,R0,#+3 \ 00000324 0200000A BEQ ??maincsm_onmessage_25 \ 00000328 030000EA B ??maincsm_onmessage_26 5766 { 5767 case 0: 5768 icn=IS_OFFLINE; break; \ ??maincsm_onmessage_24: \ 0000032C 0090A0E3 MOV R9,#+0 \ 00000330 020000EA B ??maincsm_onmessage_23 5769 case 3: 5770 icn=CurrentStatus; //IS_ONLINE; \ ??maincsm_onmessage_25: \ 00000334 809295E5 LDR R9,[R5, #+640] \ 00000338 000000EA B ??maincsm_onmessage_23 5771 break; 5772 default: 5773 icn=IS_UNKNOWN; break; \ ??maincsm_onmessage_26: \ 0000033C 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: \ 00000340 ........ LDR R0,??DataTable249 ;; ShowStatusIcon \ 00000344 000090E5 LDR R0,[R0, #+0] \ 00000348 000050E3 CMP R0,#+0 \ 0000034C 02005013 CMPNE R0,#+2 \ 00000350 03005013 CMPNE R0,#+3 \ 00000354 2100001A BNE ??maincsm_onmessage_27 5779 { 5780 #endif 5781 if((IsUnlocked()) || (!IsUnlocked()) || (IsScreenSaver())) \ 00000358 430000EF SWI +67 \ 0000035C 000050E3 CMP R0,#+0 \ 00000360 0500001A BNE ??maincsm_onmessage_28 \ 00000364 430000EF SWI +67 \ 00000368 000050E3 CMP R0,#+0 \ 0000036C 0200000A BEQ ??maincsm_onmessage_28 \ 00000370 420000EF SWI +66 \ 00000374 000050E3 CMP R0,#+0 \ 00000378 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: \ 0000037C 94B89FE5 LDR R11,??maincsm_onmessage_5+0xC ;; IDLEICON_Y \ 00000380 099185E0 ADD R9,R5,R9, LSL #+2 \ 00000384 000099E5 LDR R0,[R9, #+0] \ 00000388 210000EF SWI +33 \ 0000038C 00A0A0E1 MOV R10,R0 \ 00000390 000099E5 LDR R0,[R9, #+0] \ 00000394 220000EF SWI +34 \ 00000398 7C189FE5 LDR R1,??maincsm_onmessage_5+0x10 ;; IDLEICON_X \ 0000039C 00209BE5 LDR R2,[R11, #+0] \ 000003A0 001091E5 LDR R1,[R1, #+0] \ 000003A4 0130A0E3 MOV R3,#+1 \ 000003A8 08002DE9 PUSH {R3} \ 000003AC 010080E0 ADD R0,R0,R1 \ 000003B0 02308AE0 ADD R3,R10,R2 \ 000003B4 013043E2 SUB R3,R3,#+1 \ 000003B8 08002DE9 PUSH {R3} \ 000003BC 013040E2 SUB R3,R0,#+1 \ 000003C0 3C0295E5 LDR R0,[R5, #+572] \ 000003C4 250000EF SWI +37 5785 DrawImg(IDLEICON_X,IDLEICON_Y,S_ICONS[icn]); \ 000003C8 4C089FE5 LDR R0,??maincsm_onmessage_5+0x10 ;; IDLEICON_X \ 000003CC 002099E5 LDR R2,[R9, #+0] \ 000003D0 00109BE5 LDR R1,[R11, #+0] \ 000003D4 000090E5 LDR R0,[R0, #+0] \ 000003D8 230000EF SWI +35 \ 000003DC 08D08DE2 ADD SP,SP,#+8 5786 } 5787 #ifdef NEWSGOLD 5788 } 5789 #ifdef kluchnik 5790 if(show_xstatus==1) 5791 #else 5792 if(show_xstatus==1 || show_xstatus==3) //kluchnik 26.03.08 \ ??maincsm_onmessage_27: \ 000003E0 38089FE5 LDR R0,??maincsm_onmessage_5+0x14 ;; show_xstatus \ 000003E4 000090E5 LDR R0,[R0, #+0] \ 000003E8 010050E3 CMP R0,#+1 \ 000003EC 03005013 CMPNE R0,#+3 \ 000003F0 2300001A BNE ??maincsm_onmessage_29 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); \ 000003F4 28989FE5 LDR R9,??maincsm_onmessage_5+0x18 ;; XStatusesIconArray \ 000003F8 28B89FE5 LDR R11,??maincsm_onmessage_5+0x1C ;; IDLEICON_YX \ 000003FC B98100EF SWI +33209 \ 00000400 ........ LDR R1,??DataTable228 ;; XStatusesImgList \ 00000404 001091E5 LDR R1,[R1, #+0] \ 00000408 081080E5 STR R1,[R0, #+8] \ 0000040C 7F0100EF SWI +383 \ 00000410 840295E5 LDR R0,[R5, #+644] \ 00000414 001099E5 LDR R1,[R9, #+0] \ 00000418 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 0000041C 210000EF SWI +33 \ 00000420 001099E5 LDR R1,[R9, #+0] \ 00000424 00A0A0E1 MOV R10,R0 \ 00000428 840295E5 LDR R0,[R5, #+644] \ 0000042C 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 00000430 220000EF SWI +34 \ 00000434 F0179FE5 LDR R1,??maincsm_onmessage_5+0x20 ;; IDLEICON_XX \ 00000438 00209BE5 LDR R2,[R11, #+0] \ 0000043C 001091E5 LDR R1,[R1, #+0] \ 00000440 0130A0E3 MOV R3,#+1 \ 00000444 08002DE9 PUSH {R3} \ 00000448 010080E0 ADD R0,R0,R1 \ 0000044C 02308AE0 ADD R3,R10,R2 \ 00000450 013043E2 SUB R3,R3,#+1 \ 00000454 08002DE9 PUSH {R3} \ 00000458 013040E2 SUB R3,R0,#+1 \ 0000045C 3C0295E5 LDR R0,[R5, #+572] \ 00000460 250000EF SWI +37 5803 DrawImg(IDLEICON_XX,IDLEICON_YX,XStatusesIconArray[CurrentXStatus]); \ 00000464 840295E5 LDR R0,[R5, #+644] \ 00000468 001099E5 LDR R1,[R9, #+0] \ 0000046C 002191E7 LDR R2,[R1, +R0, LSL #+2] \ 00000470 B4079FE5 LDR R0,??maincsm_onmessage_5+0x20 ;; IDLEICON_XX \ 00000474 00109BE5 LDR R1,[R11, #+0] \ 00000478 000090E5 LDR R0,[R0, #+0] \ 0000047C 230000EF SWI +35 \ 00000480 08D08DE2 ADD SP,SP,#+8 5804 } 5805 5806 5807 if(IsUnlocked()) \ ??maincsm_onmessage_29: \ 00000484 430000EF SWI +67 \ 00000488 000050E3 CMP R0,#+0 \ 0000048C D600000A BEQ ??maincsm_onmessage_22 5808 { 5809 if (main_d==1) \ 00000490 340295E5 LDR R0,[R5, #+564] \ 00000494 010050E3 CMP R0,#+1 \ 00000498 8800001A BNE ??maincsm_onmessage_30 5810 { 5811 if(Is_SMARTCPU_On && main_msg_timer2) \ 0000049C 540295E5 LDR R0,[R5, #+596] \ 000004A0 000050E3 CMP R0,#+0 \ 000004A4 AC039515 LDRNE R0,[R5, #+940] \ 000004A8 00005013 CMPNE R0,#+0 \ 000004AC 8200000A BEQ ??maincsm_onmessage_31 5812 { 5813 if(fonto==1) \ 000004B0 78979FE5 LDR R9,??maincsm_onmessage_5+0x24 ;; msg_d_x \ 000004B4 78A79FE5 LDR R10,??maincsm_onmessage_5+0x28 ;; msg_d_y \ 000004B8 78B79FE5 LDR R11,??maincsm_onmessage_5+0x2C ;; spaco2 \ 000004BC 383295E5 LDR R3,[R5, #+568] \ 000004C0 7010A0E3 MOV R1,#+112 \ 000004C4 741D81E3 ORR R1,R1,#0x1D00 \ 000004C8 051081E0 ADD R1,R1,R5 \ 000004CC 18108DE5 STR R1,[SP, #+24] \ 000004D0 751D85E2 ADD R1,R5,#+7488 \ 000004D4 14108DE5 STR R1,[SP, #+20] \ 000004D8 1010A0E3 MOV R1,#+16 \ 000004DC 741D81E3 ORR R1,R1,#0x1D00 \ 000004E0 051081E0 ADD R1,R1,R5 \ 000004E4 10108DE5 STR R1,[SP, #+16] \ 000004E8 E010A0E3 MOV R1,#+224 \ 000004EC 701D81E3 ORR R1,R1,#0x1C00 \ 000004F0 051081E0 ADD R1,R1,R5 \ 000004F4 0C108DE5 STR R1,[SP, #+12] \ 000004F8 000099E5 LDR R0,[R9, #+0] \ 000004FC 00109AE5 LDR R1,[R10, #+0] \ 00000500 00C09BE5 LDR R12,[R11, #+0] \ 00000504 00E098E5 LDR LR,[R8, #+0] \ 00000508 00102DE9 PUSH {R12} \ 0000050C B020A0E3 MOV R2,#+176 \ 00000510 702D82E3 ORR R2,R2,#0x1C00 \ 00000514 052082E0 ADD R2,R2,R5 \ 00000518 01005EE3 CMP LR,#+1 \ 0000051C 2E00001A BNE ??maincsm_onmessage_32 5814 { 5815 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ 00000520 01C0A0E3 MOV R12,#+1 \ 00000524 00102DE9 PUSH {R12} \ 00000528 ........ _BLF PrintField,??PrintField??rA 5816 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, spaco2); \ 0000052C 00009BE5 LDR R0,[R11, #+0] \ 00000530 01002DE9 PUSH {R0} \ 00000534 000098E5 LDR R0,[R8, #+0] \ 00000538 01002DE9 PUSH {R0} \ 0000053C 401295E5 LDR R1,[R5, #+576] \ 00000540 383295E5 LDR R3,[R5, #+568] \ 00000544 1C209DE5 LDR R2,[SP, #+28] \ 00000548 00009AE5 LDR R0,[R10, #+0] \ 0000054C 001081E0 ADD R1,R1,R0 \ 00000550 000099E5 LDR R0,[R9, #+0] \ 00000554 ........ _BLF PrintField,??PrintField??rA 5817 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, spaco2); \ 00000558 00009BE5 LDR R0,[R11, #+0] \ 0000055C 01002DE9 PUSH {R0} \ 00000560 000098E5 LDR R0,[R8, #+0] \ 00000564 01002DE9 PUSH {R0} \ 00000568 401295E5 LDR R1,[R5, #+576] \ 0000056C 383295E5 LDR R3,[R5, #+568] \ 00000570 28209DE5 LDR R2,[SP, #+40] \ 00000574 00009AE5 LDR R0,[R10, #+0] \ 00000578 811080E0 ADD R1,R0,R1, LSL #+1 \ 0000057C 000099E5 LDR R0,[R9, #+0] \ 00000580 ........ _BLF PrintField,??PrintField??rA 5818 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, spaco2); \ 00000584 00009BE5 LDR R0,[R11, #+0] \ 00000588 01002DE9 PUSH {R0} \ 0000058C 000098E5 LDR R0,[R8, #+0] \ 00000590 01002DE9 PUSH {R0} \ 00000594 401295E5 LDR R1,[R5, #+576] \ 00000598 383295E5 LDR R3,[R5, #+568] \ 0000059C 34209DE5 LDR R2,[SP, #+52] \ 000005A0 00009AE5 LDR R0,[R10, #+0] \ 000005A4 811081E0 ADD R1,R1,R1, LSL #+1 \ 000005A8 001081E0 ADD R1,R1,R0 \ 000005AC 000099E5 LDR R0,[R9, #+0] \ 000005B0 ........ _BLF PrintField,??PrintField??rA 5819 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, spaco2); \ 000005B4 00009BE5 LDR R0,[R11, #+0] \ 000005B8 01002DE9 PUSH {R0} \ 000005BC 000098E5 LDR R0,[R8, #+0] \ 000005C0 01002DE9 PUSH {R0} \ 000005C4 401295E5 LDR R1,[R5, #+576] \ 000005C8 383295E5 LDR R3,[R5, #+568] \ 000005CC 40209DE5 LDR R2,[SP, #+64] \ 000005D0 00009AE5 LDR R0,[R10, #+0] \ 000005D4 011180E0 ADD R1,R0,R1, LSL #+2 \ 000005D8 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: \ 000005DC 00402DE9 PUSH {LR} \ 000005E0 ........ _BLF PrintField,??PrintField??rA 5824 PrintField(msg_d_x,msg_d_y+GetFontYSIZE(paused_height)+1, s_txt, align, fonto, spaco2); \ 000005E4 400295E5 LDR R0,[R5, #+576] \ 000005E8 C50100EF SWI +453 \ 000005EC 00109BE5 LDR R1,[R11, #+0] \ 000005F0 02002DE9 PUSH {R1} \ 000005F4 001098E5 LDR R1,[R8, #+0] \ 000005F8 02002DE9 PUSH {R1} \ 000005FC 383295E5 LDR R3,[R5, #+568] \ 00000600 1C209DE5 LDR R2,[SP, #+28] \ 00000604 00109AE5 LDR R1,[R10, #+0] \ 00000608 010080E0 ADD R0,R0,R1 \ 0000060C 011080E2 ADD R1,R0,#+1 \ 00000610 000099E5 LDR R0,[R9, #+0] \ 00000614 ........ _BLF PrintField,??PrintField??rA 5825 PrintField(msg_d_x,msg_d_y+(2*GetFontYSIZE(paused_height))+2, d_txt, align, fonto, spaco2); \ 00000618 400295E5 LDR R0,[R5, #+576] \ 0000061C C50100EF SWI +453 \ 00000620 00109BE5 LDR R1,[R11, #+0] \ 00000624 02002DE9 PUSH {R1} \ 00000628 001098E5 LDR R1,[R8, #+0] \ 0000062C 02002DE9 PUSH {R1} \ 00000630 383295E5 LDR R3,[R5, #+568] \ 00000634 28209DE5 LDR R2,[SP, #+40] \ 00000638 00109AE5 LDR R1,[R10, #+0] \ 0000063C 800081E0 ADD R0,R1,R0, LSL #+1 \ 00000640 021080E2 ADD R1,R0,#+2 \ 00000644 000099E5 LDR R0,[R9, #+0] \ 00000648 ........ _BLF PrintField,??PrintField??rA 5826 PrintField(msg_d_x,msg_d_y+(3*GetFontYSIZE(paused_height))+3, f_txt, align, fonto, spaco2); \ 0000064C 400295E5 LDR R0,[R5, #+576] \ 00000650 C50100EF SWI +453 \ 00000654 00109BE5 LDR R1,[R11, #+0] \ 00000658 800080E0 ADD R0,R0,R0, LSL #+1 \ 0000065C 02002DE9 PUSH {R1} \ 00000660 001098E5 LDR R1,[R8, #+0] \ 00000664 02002DE9 PUSH {R1} \ 00000668 383295E5 LDR R3,[R5, #+568] \ 0000066C 34209DE5 LDR R2,[SP, #+52] \ 00000670 00109AE5 LDR R1,[R10, #+0] \ 00000674 010080E0 ADD R0,R0,R1 \ 00000678 031080E2 ADD R1,R0,#+3 \ 0000067C 000099E5 LDR R0,[R9, #+0] \ 00000680 ........ _BLF PrintField,??PrintField??rA 5827 PrintField(msg_d_x,msg_d_y+(4*GetFontYSIZE(paused_height))+4, g_txt, align, fonto, spaco2); \ 00000684 400295E5 LDR R0,[R5, #+576] \ 00000688 C50100EF SWI +453 \ 0000068C 00109BE5 LDR R1,[R11, #+0] \ 00000690 02002DE9 PUSH {R1} \ 00000694 001098E5 LDR R1,[R8, #+0] \ 00000698 02002DE9 PUSH {R1} \ 0000069C 383295E5 LDR R3,[R5, #+568] \ 000006A0 40209DE5 LDR R2,[SP, #+64] \ 000006A4 00109AE5 LDR R1,[R10, #+0] \ 000006A8 000181E0 ADD R0,R1,R0, LSL #+2 \ 000006AC 041080E2 ADD R1,R0,#+4 \ ??maincsm_onmessage_33: \ 000006B0 000099E5 LDR R0,[R9, #+0] \ 000006B4 ........ _BLF PrintField,??PrintField??rA \ 000006B8 28D08DE2 ADD SP,SP,#+40 5828 } 5829 } 5830 main_d=0; \ ??maincsm_onmessage_31: \ 000006BC 346285E5 STR R6,[R5, #+564] 5831 } 5832 5833 if(Is_UPTIME_On) DrawOnlineTime(canvasdata); \ ??maincsm_onmessage_30: \ 000006C0 A40295E5 LDR R0,[R5, #+676] \ 000006C4 000050E3 CMP R0,#+0 \ 000006C8 0100000A BEQ ??maincsm_onmessage_34 \ 000006CC 3C0295E5 LDR R0,[R5, #+572] \ 000006D0 ........ BL DrawOnlineTime 5834 if(Is_PING_On) DrawPing(canvasdata); \ ??maincsm_onmessage_34: \ 000006D4 500295E5 LDR R0,[R5, #+592] \ 000006D8 000050E3 CMP R0,#+0 \ 000006DC 0100000A BEQ ??maincsm_onmessage_35 \ 000006E0 3C0295E5 LDR R0,[R5, #+572] \ 000006E4 ........ BL DrawPing 5835 if(Auto_Status && showAwayIdle) DrawAutoMSG(canvasdata); \ ??maincsm_onmessage_35: \ 000006E8 ........ LDR R0,??DataTable229 ;; Auto_Status \ 000006EC 000090E5 LDR R0,[R0, #+0] \ 000006F0 000050E3 CMP R0,#+0 \ 000006F4 0500000A BEQ ??maincsm_onmessage_36 \ 000006F8 ........ LDR R0,??DataTable230 ;; showAwayIdle \ 000006FC 000090E5 LDR R0,[R0, #+0] \ 00000700 000050E3 CMP R0,#+0 \ 00000704 0100000A BEQ ??maincsm_onmessage_36 \ 00000708 3C0295E5 LDR R0,[R5, #+572] \ 0000070C ........ BL DrawAutoMSG 5836 if(Is_Unread_On) \ ??maincsm_onmessage_36: \ 00000710 24059FE5 LDR R0,??maincsm_onmessage_5+0x30 ;; Is_Unread_On \ 00000714 ........ LDR R9,??DataTable231 ;; spaco1 \ 00000718 000090E5 LDR R0,[R0, #+0] \ 0000071C 000050E3 CMP R0,#+0 \ 00000720 1100000A BEQ ??maincsm_onmessage_37 5837 { 5838 sprintf(unread_msg_info, "Unread: %d", total_unread2); \ 00000724 642295E5 LDR R2,[R5, #+612] \ 00000728 BCA0A0E3 MOV R10,#+188 \ 0000072C 50AE8AE3 ORR R10,R10,#0x500 \ 00000730 E01F87E2 ADD R1,R7,#+896 \ 00000734 05008AE0 ADD R0,R10,R5 \ 00000738 160000EF SWI +22 5839 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, spaco1); \ 0000073C 000099E5 LDR R0,[R9, #+0] \ 00000740 05208AE0 ADD R2,R10,R5 \ 00000744 01002DE9 PUSH {R0} \ 00000748 000098E5 LDR R0,[R8, #+0] \ 0000074C 01002DE9 PUSH {R0} \ 00000750 383295E5 LDR R3,[R5, #+568] \ 00000754 E4049FE5 LDR R0,??maincsm_onmessage_5+0x34 ;; unread_Y \ 00000758 001090E5 LDR R1,[R0, #+0] \ 0000075C E0049FE5 LDR R0,??maincsm_onmessage_5+0x38 ;; unread_X \ 00000760 000090E5 LDR R0,[R0, #+0] \ 00000764 ........ _BLF PrintField,??PrintField??rA \ 00000768 08D08DE2 ADD SP,SP,#+8 5840 } 5841 5842 if(Is_Online_On && strlen(on_off_buf)!=0) \ ??maincsm_onmessage_37: \ 0000076C D4049FE5 LDR R0,??maincsm_onmessage_5+0x3C ;; Is_Online_On \ 00000770 000090E5 LDR R0,[R0, #+0] \ 00000774 000050E3 CMP R0,#+0 \ 00000778 1B00000A BEQ ??maincsm_onmessage_22 \ 0000077C 00009DE5 LDR R0,[SP, #+0] \ 00000780 1B0000EF SWI +27 \ 00000784 000050E3 CMP R0,#+0 \ 00000788 1700000A BEQ ??maincsm_onmessage_22 5843 { 5844 char *s=malloc(128); \ 0000078C 8000A0E3 MOV R0,#+128 \ 00000790 140000EF SWI +20 5845 sprintf(s,percent_s,on_off_buf); \ 00000794 00209DE5 LDR R2,[SP, #+0] \ 00000798 00A0A0E1 MOV R10,R0 \ 0000079C 1B1087E2 ADD R1,R7,#+27 \ 000007A0 160000EF SWI +22 5846 s[strlen(s)-1]=0; \ 000007A4 0A00A0E1 MOV R0,R10 \ 000007A8 1B0000EF SWI +27 \ 000007AC 0A0080E0 ADD R0,R0,R10 \ 000007B0 016040E5 STRB R6,[R0, #-1] 5847 PrintField(online_x,online_y,s, align, fonto, spaco1); \ 000007B4 000099E5 LDR R0,[R9, #+0] \ 000007B8 0A20A0E1 MOV R2,R10 \ 000007BC 01002DE9 PUSH {R0} \ 000007C0 000098E5 LDR R0,[R8, #+0] \ 000007C4 01002DE9 PUSH {R0} \ 000007C8 383295E5 LDR R3,[R5, #+568] \ 000007CC 78049FE5 LDR R0,??maincsm_onmessage_5+0x40 ;; online_y \ 000007D0 001090E5 LDR R1,[R0, #+0] \ 000007D4 74049FE5 LDR R0,??maincsm_onmessage_5+0x44 ;; online_x \ 000007D8 000090E5 LDR R0,[R0, #+0] \ 000007DC ........ _BLF PrintField,??PrintField??rA 5848 mfree(s); \ 000007E0 0A00A0E1 MOV R0,R10 \ 000007E4 150000EF SWI +21 \ 000007E8 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: \ 000007EC 040094E5 LDR R0,[R4, #+4] \ 000007F0 AF10A0E3 MOV R1,#+175 \ 000007F4 DE1C81E3 ORR R1,R1,#0xDE00 \ 000007F8 010050E1 CMP R0,R1 \ 000007FC 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)) \ 00000800 ........ LDR R0,??DataTable255 ;; suc_config_name \ 00000804 0C1094E5 LDR R1,[R4, #+12] \ 00000808 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 0000080C 000050E3 CMP R0,#+0 \ 00000810 0400000A BEQ ??maincsm_onmessage_39 \ 00000814 ........ LDR R0,??DataTable233 ;; suc_config_name_mod \ 00000818 0C1094E5 LDR R1,[R4, #+12] \ 0000081C ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000820 000050E3 CMP R0,#+0 \ 00000824 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: \ 00000828 ........ LDR R9,??DataTable257 ;; fontpath \ 0000082C E31F87E2 ADD R1,R7,#+908 \ 00000830 0100A0E3 MOV R0,#+1 \ 00000834 480100EF SWI +328 \ 00000838 ........ _BLF UpdateConfig,??UpdateConfig??rA \ 0000083C ........ _BLF initTags,??initTags??rA \ 00000840 0100A0E3 MOV R0,#+1 \ 00000844 ........ _BLF PrintLibInit,??PrintLibInit??rA \ 00000848 0110A0E3 MOV R1,#+1 \ 0000084C 0900A0E1 MOV R0,R9 \ 00000850 ........ _BLF FontPathInit,??FontPathInit??rA 5871 SetFontColor((char*)fontColor,(char*)bgrColor,1); \ 00000854 ........ LDR R1,??DataTable258 ;; bgrColor \ 00000858 ........ LDR R0,??DataTable259 ;; fontColor \ 0000085C 0120A0E3 MOV R2,#+1 \ 00000860 ........ _BLF SetFontColor,??SetFontColor??rA 5872 //#ifdef ELKA 5873 if(fonto==1) \ 00000864 000098E5 LDR R0,[R8, #+0] \ 00000868 010050E3 CMP R0,#+1 \ 0000086C 0B00001A BNE ??maincsm_onmessage_40 5874 { 5875 char *heght=malloc(64); \ 00000870 4000A0E3 MOV R0,#+64 \ 00000874 140000EF SWI +20 \ 00000878 0080A0E1 MOV R8,R0 5876 sprintf(heght, "%s2240.png", fontpath); \ 0000087C 0920A0E1 MOV R2,R9 \ 00000880 E91F87E2 ADD R1,R7,#+932 \ 00000884 160000EF SWI +22 5877 paused_height=GetImgHeight((int)heght); \ 00000888 0800A0E1 MOV R0,R8 \ 0000088C 210000EF SWI +33 \ 00000890 400285E5 STR R0,[R5, #+576] 5878 mfree(heght); \ 00000894 0800A0E1 MOV R0,R8 \ 00000898 150000EF SWI +21 \ 0000089C 010000EA B ??maincsm_onmessage_41 5879 } 5880 else 5881 paused_height=fonto-100; \ ??maincsm_onmessage_40: \ 000008A0 640040E2 SUB R0,R0,#+100 \ 000008A4 400285E5 STR R0,[R5, #+576] 5882 //#endif 5883 free_ICONS(); \ ??maincsm_onmessage_41: \ 000008A8 ........ BL free_ICONS 5884 setup_ICONS(); \ 000008AC ........ BL setup_ICONS 5885 ResortCL(); \ 000008B0 ........ _BLF ResortCL,??ResortCL??rA 5886 RecountMenu(NULL,1); \ 000008B4 0110A0E3 MOV R1,#+1 \ 000008B8 0000A0E3 MOV R0,#+0 \ 000008BC ........ BL RecountMenu 5887 init_time_zone(); \ 000008C0 ........ BL init_time_zone 5888 // InitSmiles(); 5889 } 5890 } 5891 5892 if (msg->msg==MSG_GUI_DESTROYED) \ ??maincsm_onmessage_38: \ 000008C4 040094E5 LDR R0,[R4, #+4] \ 000008C8 0E10A0E3 MOV R1,#+14 \ 000008CC 641C81E3 ORR R1,R1,#0x6400 \ 000008D0 010050E1 CMP R0,R1 \ 000008D4 0E00001A BNE ??maincsm_onmessage_42 5893 { 5894 if ((int)msg->data0==csm->gui_id) \ 000008D8 20109DE5 LDR R1,[SP, #+32] \ 000008DC 0C0094E5 LDR R0,[R4, #+12] \ 000008E0 281091E5 LDR R1,[R1, #+40] \ 000008E4 010050E1 CMP R0,R1 5895 { 5896 csm->csm.state=-3; \ 000008E8 20009D05 LDREQ R0,[SP, #+32] \ 000008EC 0210E003 MVNEQ R1,#+2 \ 000008F0 10108005 STREQ R1,[R0, #+16] 5897 } 5898 if ((int)msg->data0==contactlist_menu_id) \ 000008F4 0C0094E5 LDR R0,[R4, #+12] \ 000008F8 141395E5 LDR R1,[R5, #+788] \ 000008FC 010050E1 CMP R0,R1 5899 { 5900 contactlist_menu_id=0; \ 00000900 14638505 STREQ R6,[R5, #+788] 5901 prev_clmenu_itemcount=0; \ 00000904 1C638505 STREQ R6,[R5, #+796] 5902 } 5903 if ((int)msg->data0==edchat_id) \ 00000908 181395E5 LDR R1,[R5, #+792] \ 0000090C 010050E1 CMP R0,R1 5904 { 5905 edchat_id=0; \ 00000910 18638505 STREQ R6,[R5, #+792] 5906 } 5907 } 5908 5909 if (msg->msg==MSG_HELPER_TRANSLATOR) \ ??maincsm_onmessage_42: \ 00000914 040094E5 LDR R0,[R4, #+4] \ 00000918 AE10A0E3 MOV R1,#+174 \ 0000091C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000920 010050E1 CMP R0,R1 \ 00000924 1000001A BNE ??maincsm_onmessage_43 5910 { 5911 switch((int)msg->data0) \ 00000928 0C0094E5 LDR R0,[R4, #+12] \ 0000092C 101094E5 LDR R1,[R4, #+16] \ 00000930 ........ LDR R9,??DataTable237 ;; RECONNECT_TIME \ 00000934 ........ LDR R10,??DataTable238 ;; do_reconnect \ 00000938 7420A0E3 MOV R2,#+116 \ 0000093C 682D82E3 ORR R2,R2,#0x1A00 \ 00000940 054082E0 ADD R4,R2,R5 \ 00000944 482F42E2 SUB R2,R2,#+288 \ 00000948 058082E0 ADD R8,R2,R5 \ 0000094C 802050E2 SUBS R2,R0,#+128 \ 00000950 0800000A BEQ ??maincsm_onmessage_44 \ 00000954 022052E2 SUBS R2,R2,#+2 \ 00000958 0200000A BEQ ??maincsm_onmessage_45 \ 0000095C 122052E2 SUBS R2,R2,#+18 \ 00000960 1300000A BEQ ??maincsm_onmessage_46 \ 00000964 1D0000EA B ??maincsm_onmessage_47 5912 { 5913 case LMAN_DISCONNECT_IND: 5914 is_gprs_online=0; \ ??maincsm_onmessage_45: \ 00000968 046385E5 STR R6,[R5, #+772] 5915 return(1); \ ??maincsm_onmessage_43: \ 0000096C 0100A0E3 MOV R0,#+1 \ 00000970 24D08DE2 ADD SP,SP,#+36 \ 00000974 F08FBDE8 POP {R4-R11,PC} ;; return 5916 case LMAN_CONNECT_CNF: 5917 vibra_count=1; \ ??maincsm_onmessage_44: \ 00000978 0100A0E3 MOV R0,#+1 \ 0000097C D40285E5 STR R0,[R5, #+724] 5918 start_vibra(); \ 00000980 ........ BL start_vibra 5919 is_gprs_online=1; \ 00000984 0100A0E3 MOV R0,#+1 \ 00000988 040385E5 STR R0,[R5, #+772] 5920 strcpy(logmsg,LG_GRGPRSUP); \ 0000098C EC1F87E2 ADD R1,R7,#+944 \ 00000990 0800A0E1 MOV R0,R8 \ 00000994 1A0000EF SWI +26 5921 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000998 000099E5 LDR R0,[R9, #+0] \ 0000099C 0A20A0E1 MOV R2,R10 \ 000009A0 D830A0E3 MOV R3,#+216 \ 000009A4 930001E0 MUL R1,R3,R0 \ 000009A8 0400A0E1 MOV R0,R4 \ 000009AC 4D0000EF SWI +77 5922 return(1); \ 000009B0 070000EA B ??maincsm_onmessage_48 5923 case ENIP_DNR_HOST_BY_NAME: 5924 if ((int)msg->data1==DNR_ID) \ ??maincsm_onmessage_46: \ 000009B4 9C0395E5 LDR R0,[R5, #+924] \ 000009B8 000051E1 CMP R1,R0 \ 000009BC EAFFFF1A BNE ??maincsm_onmessage_43 5925 { 5926 if (DNR_TRIES) SUBPROC((void *)create_connect); \ 000009C0 A00395E5 LDR R0,[R5, #+928] \ 000009C4 000050E3 CMP R0,#+0 \ 000009C8 E7FFFF0A BEQ ??maincsm_onmessage_43 \ 000009CC ........ LDR R0,??DataTable239 ;; create_connect \ ??maincsm_onmessage_49: \ 000009D0 710100EF SWI +369 5927 } 5928 return(1); \ ??maincsm_onmessage_48: \ 000009D4 0100A0E3 MOV R0,#+1 \ ??maincsm_onmessage_50: \ 000009D8 24D08DE2 ADD SP,SP,#+36 \ 000009DC F08FBDE8 POP {R4-R11,PC} 5929 } 5930 if ((int)msg->data1==sock) \ ??maincsm_onmessage_47: \ 000009E0 E82295E5 LDR R2,[R5, #+744] \ 000009E4 020051E1 CMP R1,R2 \ 000009E8 DFFFFF1A BNE ??maincsm_onmessage_43 5931 { 5932 //Если наш сокет 5933 if ((((unsigned int)msg->data0)>>28)==0xA) \ 000009EC 201EA0E1 LSR R1,R0,#+28 \ 000009F0 0A0051E3 CMP R1,#+10 \ 000009F4 0200001A BNE ??maincsm_onmessage_51 5934 { 5935 //Принят пакет 5936 ProcessPacket((TPKT *)msg->data0); \ 000009F8 ........ BL ProcessPacket 5937 return(0); \ 000009FC 0000A0E3 MOV R0,#+0 \ 00000A00 F4FFFFEA B ??maincsm_onmessage_50 5938 } 5939 switch((int)msg->data0) \ ??maincsm_onmessage_51: \ 00000A04 E41295E5 LDR R1,[R5, #+740] \ 00000A08 ........ LDR R11,??DataTable240 ;; VIBR_ON_CONNECT \ 00000A0C 8A0040E2 SUB R0,R0,#+138 \ 00000A10 050050E3 CMP R0,#+5 \ 00000A14 D4FFFF8A BHI ??maincsm_onmessage_43 \ 00000A18 012F8FE2 ADR R2,??maincsm_onmessage_1 \ 00000A1C D02092E1 LDRSB R2,[R2, R0] \ 00000A20 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_1: \ 00000A24 44443D01 DC8 +68,+68,+61,+1 \ 00000A28 4D490000 DC8 +77,+73,+0,+0 5940 { 5941 case ENIP_SOCK_CONNECTED: 5942 if (connect_state==1) \ ??maincsm_onmessage_52: \ 00000A2C 010051E3 CMP R1,#+1 \ 00000A30 3500001A BNE ??maincsm_onmessage_53 5943 { 5944 if(VIBR_ON_CONNECT) \ 00000A34 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; \ 00000A38 ........ LDR R4,??DataTable254 ;; UIN \ 00000A3C 000050E3 CMP R0,#+0 \ 00000A40 0200A013 MOVNE R0,#+2 \ 00000A44 0100A003 MOVEQ R0,#+1 \ 00000A48 D40285E5 STR R0,[R5, #+724] \ 00000A4C ........ BL start_vibra \ 00000A50 F21F87E2 ADD R1,R7,#+968 \ 00000A54 0800A0E1 MOV R0,R8 \ 00000A58 1A0000EF SWI +26 \ 00000A5C ........ LDR R0,??DataTable243 ;; PASS \ 00000A60 1B0000EF SWI +27 \ 00000A64 0080A0E1 MOV R8,R0 \ 00000A68 080088E2 ADD R0,R8,#+8 \ 00000A6C 140000EF SWI +20 5955 p->pkt.type=T_REQLOGIN; 5956 p->pkt.data_len=i; 5957 memcpy(p->data,PASS,i); \ 00000A70 ........ LDR R1,??DataTable243 ;; PASS \ 00000A74 0090A0E1 MOV R9,R0 \ 00000A78 000094E5 LDR R0,[R4, #+0] \ 00000A7C 0820A0E1 MOV R2,R8 \ 00000A80 000089E5 STR R0,[R9, #+0] \ 00000A84 0100A0E3 MOV R0,#+1 \ 00000A88 B400C9E1 STRH R0,[R9, #+4] \ 00000A8C B680C9E1 STRH R8,[R9, #+6] \ 00000A90 080089E2 ADD R0,R9,#+8 \ 00000A94 1E0100EF SWI +286 5958 SUBPROC((void *)send_login,0,p); \ 00000A98 B4019FE5 LDR R0,??maincsm_onmessage_5+0x48 ;; send_login \ 00000A9C 0920A0E1 MOV R2,R9 \ 00000AA0 0010A0E3 MOV R1,#+0 \ 00000AA4 710100EF SWI +369 5959 } 5960 GROUP_CACHE=0; \ 00000AA8 106385E5 STR R6,[R5, #+784] 5961 SENDMSGCOUNT=0; //Начинаем отсчет \ 00000AAC 706285E5 STR R6,[R5, #+624] 5962 if (!FindGroupByID(0)) AddGroup(0,LG_GROUPNOTINLIST); \ 00000AB0 0600A0E1 MOV R0,R6 \ 00000AB4 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000AB8 000050E3 CMP R0,#+0 \ 00000ABC 0100001A BNE ??maincsm_onmessage_54 \ 00000AC0 F61F87E2 ADD R1,R7,#+984 \ 00000AC4 ........ _BLF AddGroup,??AddGroup??rA 5963 if (!FindContactByUin(UIN) && (IsShowLoopback)) AddContact(UIN, LG_CLLOOPBACK,0,1); \ ??maincsm_onmessage_54: \ 00000AC8 000094E5 LDR R0,[R4, #+0] \ 00000ACC ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000AD0 000050E3 CMP R0,#+0 \ 00000AD4 0800001A BNE ??maincsm_onmessage_55 \ 00000AD8 78019FE5 LDR R0,??maincsm_onmessage_5+0x4C ;; IsShowLoopback \ 00000ADC 000090E5 LDR R0,[R0, #+0] \ 00000AE0 000050E3 CMP R0,#+0 \ 00000AE4 0400000A BEQ ??maincsm_onmessage_55 \ 00000AE8 000094E5 LDR R0,[R4, #+0] \ 00000AEC 0130A0E3 MOV R3,#+1 \ 00000AF0 0020A0E3 MOV R2,#+0 \ 00000AF4 F91F87E2 ADD R1,R7,#+996 \ 00000AF8 ........ _BLF AddContact,??AddContact??rA 5964 SUBPROC((void *)LoadLocalCL); \ ??maincsm_onmessage_55: \ 00000AFC 58019FE5 LDR R0,??maincsm_onmessage_5+0x50 ;; LoadLocalCL \ 00000B00 710100EF SWI +369 5965 SMART_REDRAW(); \ 00000B04 ........ BL SMART_REDRAW \ 00000B08 B1FFFFEA B ??maincsm_onmessage_48 5966 } 5967 else 5968 { 5969 ShowMSG(1,(int)LG_MSGILLEGMSGCON); \ ??maincsm_onmessage_53: \ 00000B0C FC1F87E2 ADD R1,R7,#+1008 \ ??maincsm_onmessage_56: \ 00000B10 0100A0E3 MOV R0,#+1 \ 00000B14 480100EF SWI +328 \ 00000B18 ADFFFFEA B ??maincsm_onmessage_48 5970 } 5971 break; 5972 case ENIP_SOCK_DATA_READ: 5973 if (connect_state>=2) \ ??maincsm_onmessage_57: \ 00000B1C 020051E3 CMP R1,#+2 5974 { 5975 //Если посылали send 5976 SUBPROC((void *)get_answer); \ 00000B20 38019FA5 LDRGE R0,??maincsm_onmessage_5+0x54 ;; get_answer \ 00000B24 A9FFFFAA BGE ??maincsm_onmessage_49 5977 //SMART_REDRAW(); 5978 } 5979 else 5980 { 5981 ShowMSG(1,(int)LG_MSGILLEGMSGREA); \ 00000B28 1800A0E3 MOV R0,#+24 \ 00000B2C 400E80E3 ORR R0,R0,#0x400 \ 00000B30 071080E0 ADD R1,R0,R7 \ 00000B34 F5FFFFEA 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: \ 00000B38 ........ LDR R0,??DataTable244 ;; SendAnswer \ 00000B3C 0020A0E3 MOV R2,#+0 \ 00000B40 0210A0E1 MOV R1,R2 \ 00000B44 710100EF SWI +369 \ 00000B48 A1FFFFEA B ??maincsm_onmessage_48 5987 break; 5988 case ENIP_SOCK_REMOTE_CLOSED: 5989 //Закрыт со стороны сервера 5990 if (connect_state) \ ??maincsm_onmessage_59: \ 00000B4C 000051E3 CMP R1,#+0 \ 00000B50 85FFFF0A BEQ ??maincsm_onmessage_43 5991 SUBPROC((void *)end_socket); \ 00000B54 ........ LDR R0,??DataTable245 ;; end_socket \ 00000B58 9CFFFFEA 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: \ 00000B5C ........ _BLF FillAllOffline,??FillAllOffline??rA 6007 RecountMenu(NULL,1); \ 00000B60 0110A0E3 MOV R1,#+1 \ 00000B64 0000A0E3 MOV R0,#+0 \ 00000B68 ........ BL RecountMenu 6008 connect_state=0; 6009 sock=-1; \ 00000B6C 0600E0E1 MVN R0,R6 \ 00000B70 E80285E5 STR R0,[R5, #+744] 6010 if(VIBR_ON_CONNECT) \ 00000B74 00009BE5 LDR R0,[R11, #+0] \ 00000B78 E46285E5 STR R6,[R5, #+740] \ 00000B7C 000050E3 CMP R0,#+0 6011 vibra_count=4; \ 00000B80 0400A013 MOVNE R0,#+4 6012 else 6013 vibra_count=1; \ 00000B84 0100A003 MOVEQ R0,#+1 \ 00000B88 D40285E5 STR R0,[R5, #+724] 6014 6015 start_vibra(); \ 00000B8C ........ BL start_vibra 6016 if (sendq_p) \ 00000B90 000395E5 LDR R0,[R5, #+768] \ 00000B94 000050E3 CMP R0,#+0 \ 00000B98 0600000A BEQ ??maincsm_onmessage_61 6017 { 6018 snprintf(logmsg,255,"Disconnected, %d bytes not sended!",sendq_l); \ 00000B9C FC3295E5 LDR R3,[R5, #+764] \ 00000BA0 3C00A0E3 MOV R0,#+60 \ 00000BA4 400E80E3 ORR R0,R0,#0x400 \ 00000BA8 072080E0 ADD R2,R0,R7 \ 00000BAC FF10A0E3 MOV R1,#+255 \ 00000BB0 0800A0E1 MOV R0,R8 \ 00000BB4 1B0100EF SWI +283 6019 } 6020 SMART_REDRAW(); \ ??maincsm_onmessage_61: \ 00000BB8 ........ BL SMART_REDRAW 6021 SUBPROC((void *)ClearSendQ); \ 00000BBC ........ LDR R0,??DataTable246 ;; ClearSendQ \ 00000BC0 710100EF SWI +369 6022 #ifdef EVILFOX 6023 if (!disautorecconect) GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*12,do_reconnect); 6024 #else 6025 if (!disautorecconect) \ 00000BC4 C00295E5 LDR R0,[R5, #+704] \ 00000BC8 000050E3 CMP R0,#+0 \ 00000BCC 66FFFF1A BNE ??maincsm_onmessage_43 6026 { 6027 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000BD0 000099E5 LDR R0,[R9, #+0] \ 00000BD4 0A20A0E1 MOV R2,R10 \ 00000BD8 D830A0E3 MOV R3,#+216 \ 00000BDC 930001E0 MUL R1,R3,R0 \ 00000BE0 0400A0E1 MOV R0,R4 \ 00000BE4 4D0000EF SWI +77 6028 snprintf(logmsg,255,"%s\nReconect after %d second...",logmsg, RECONNECT_TIME); //2058 \ 00000BE8 000099E5 LDR R0,[R9, #+0] \ 00000BEC 0830A0E1 MOV R3,R8 \ 00000BF0 01002DE9 PUSH {R0} \ 00000BF4 462E87E2 ADD R2,R7,#+1120 \ 00000BF8 FF10A0E3 MOV R1,#+255 \ 00000BFC 0800A0E1 MOV R0,R8 \ 00000C00 1B0100EF SWI +283 \ 00000C04 04D08DE2 ADD SP,SP,#+4 \ 00000C08 71FFFFEA B ??maincsm_onmessage_48 \ ??maincsm_onmessage_5: \ 00000C0C ........ DC32 CheckDoubleRun \ 00000C10 ........ DC32 ProcessNextSmile \ 00000C14 ........ DC32 ProcessNextXStatImg \ 00000C18 ........ DC32 IDLEICON_Y \ 00000C1C ........ DC32 IDLEICON_X \ 00000C20 ........ DC32 show_xstatus \ 00000C24 ........ DC32 XStatusesIconArray \ 00000C28 ........ DC32 IDLEICON_YX \ 00000C2C ........ DC32 IDLEICON_XX \ 00000C30 ........ DC32 msg_d_x \ 00000C34 ........ DC32 msg_d_y \ 00000C38 ........ DC32 spaco2 \ 00000C3C ........ DC32 Is_Unread_On \ 00000C40 ........ DC32 unread_Y \ 00000C44 ........ DC32 unread_X \ 00000C48 ........ DC32 Is_Online_On \ 00000C4C ........ DC32 online_y \ 00000C50 ........ DC32 online_x \ 00000C54 ........ DC32 send_login \ 00000C58 ........ DC32 IsShowLoopback \ 00000C5C ........ DC32 LoadLocalCL \ 00000C60 ........ 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 70402DE9 PUSH {R4-R6,LR} 6050 int icn; 6051 if(ShowStatusIcon==1 || ShowStatusIcon==3) \ 00000004 ........ LDR R5,??DataTable247 ;; NumStatusToIconBar \ 00000008 ........ LDR R6,??DataTable271 ;; S_ICONS \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ LDR R0,??DataTable249 ;; ShowStatusIcon \ 00000014 000090E5 LDR R0,[R0, #+0] \ 00000018 010050E3 CMP R0,#+1 \ 0000001C 03005013 CMPNE R0,#+3 \ 00000020 3200001A BNE ??addIconBar_0 6052 { 6053 if(total_unread) \ 00000024 080396E5 LDR R0,[R6, #+776] \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 2800000A 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); 6114 6115 if(show_xstatus==2 || show_xstatus==3) 6116 { 6117 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) 6118 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); 6119 else 6120 if(total_unread2 && total_unread2<10) 6121 AddIconToIconBar(8200 + total_unread2, num); 6122 else 6123 if(CurrentXStatus!=0) 6124 AddIconToIconBar(NumXStatusToIconBar+CurrentXStatus,num); 6125 } 6126 6127 if(show_xstatus==3) 6128 { 6129 t=FindContactByUin(366226649);//366226649 6130 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) 6131 { 6132 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); 6133 AddIconToIconBar(NumXStatusToIconBar +t->xstate, num); 6134 } 6135 } 6136 #else 6137 if(ADDITION_UIN!=0) \ ??addIconBar_4: \ 00000040 F0009FE5 LDR R0,??addIconBar_5 ;; ADDITION_UIN \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 7080BD08 POPEQ {R4-R6,PC} 6138 { 6139 CLIST *t; 6140 t=FindContactByUin(ADDITION_UIN); \ 00000050 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000054 0060B0E1 MOVS R6,R0 6141 if(t) \ 00000058 7080BD08 POPEQ {R4-R6,PC} 6142 { 6143 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) \ 0000005C B405D6E1 LDRH R0,[R6, #+84] \ 00000060 FF10A0E3 MOV R1,#+255 \ 00000064 FF1C81E3 ORR R1,R1,#0xFF00 \ 00000068 010050E1 CMP R0,R1 \ 0000006C 7080BD08 POPEQ {R4-R6,PC} \ 00000070 0600A0E1 MOV R0,R6 \ 00000074 ........ BL GetIconIndex \ 00000078 0E0050E3 CMP R0,#+14 \ 0000007C 7080BD08 POPEQ {R4-R6,PC} 6144 { 6145 if(show_add_state) \ 00000080 B4009FE5 LDR R0,??addIconBar_5+0x4 ;; show_add_state \ 00000084 000090E5 LDR R0,[R0, #+0] \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 0500000A BEQ ??addIconBar_6 6146 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); \ 00000090 0600A0E1 MOV R0,R6 \ 00000094 ........ BL GetIconIndex \ 00000098 002095E5 LDR R2,[R5, #+0] \ 0000009C 0410A0E1 MOV R1,R4 \ 000000A0 020080E0 ADD R0,R0,R2 \ 000000A4 270000EF SWI +39 6147 if(show_add_xstate) \ ??addIconBar_6: \ 000000A8 90009FE5 LDR R0,??addIconBar_5+0x8 ;; show_add_xstate \ 000000AC 000090E5 LDR R0,[R0, #+0] \ 000000B0 000050E3 CMP R0,#+0 \ 000000B4 7080BD08 POPEQ {R4-R6,PC} 6148 AddIconToIconBar(NumXStatusToIconBar + t->xstate, num); \ 000000B8 84009FE5 LDR R0,??addIconBar_5+0xC ;; NumXStatusToIconBar \ 000000BC B625D6E1 LDRH R2,[R6, #+86] \ 000000C0 000090E5 LDR R0,[R0, #+0] \ 000000C4 0410A0E1 MOV R1,R4 \ 000000C8 000082E0 ADD R0,R2,R0 \ 000000CC 270000EF SWI +39 6149 } 6150 } 6151 } 6152 #endif 6153 } \ 000000D0 7080BDE8 POP {R4-R6,PC} ;; return \ ??addIconBar_1: \ 000000D4 E40296E5 LDR R0,[R6, #+740] \ 000000D8 000050E3 CMP R0,#+0 \ 000000DC 1100000A BEQ ??addIconBar_7 \ 000000E0 030050E2 SUBS R0,R0,#+3 \ 000000E4 0E00001A BNE ??addIconBar_8 \ ??addIconBar_9: \ 000000E8 800296E5 LDR R0,[R6, #+640] \ 000000EC 0D0000EA B ??addIconBar_7 \ ??addIconBar_0: \ 000000F0 020050E3 CMP R0,#+2 \ 000000F4 D1FFFF1A BNE ??addIconBar_4 \ 000000F8 C50000EF SWI +197 \ 000000FC 000050E3 CMP R0,#+0 \ 00000100 CEFFFF1A BNE ??addIconBar_4 \ 00000104 080396E5 LDR R0,[R6, #+776] \ 00000108 000050E3 CMP R0,#+0 \ 0000010C C7FFFF1A BNE ??addIconBar_2 \ 00000110 E40296E5 LDR R0,[R6, #+740] \ 00000114 000050E3 CMP R0,#+0 \ 00000118 0200000A BEQ ??addIconBar_7 \ 0000011C 030050E2 SUBS R0,R0,#+3 \ 00000120 F0FFFF0A BEQ ??addIconBar_9 \ ??addIconBar_8: \ 00000124 0E00A0E3 MOV R0,#+14 \ ??addIconBar_7: \ 00000128 002095E5 LDR R2,[R5, #+0] \ 0000012C 0410A0E1 MOV R1,R4 \ 00000130 020080E0 ADD R0,R0,R2 \ 00000134 C0FFFFEA B ??addIconBar_3 \ ??addIconBar_5: \ 00000138 ........ DC32 ADDITION_UIN \ 0000013C ........ DC32 show_add_state \ 00000140 ........ DC32 show_add_xstate \ 00000144 ........ DC32 NumXStatusToIconBar 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,??DataTable254 ;; 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,??DataTable260 ;; 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,??DataTable271 ;; S_ICONS \ 00000008 ........ LDR R5,??DataTable253 ;; Canvas \ 0000000C 2CD04DE2 SUB SP,SP,#+44 \ 00000010 0060A0E1 MOV R6,R0 \ 00000014 ........ _BLF UpdateConfig,??UpdateConfig??rA \ 00000018 481E85E2 ADD R1,R5,#+1152 \ 0000001C 0C00A0E3 MOV R0,#+12 \ 00000020 580D80E3 ORR R0,R0,#0x1600 \ 00000024 040080E0 ADD R0,R0,R4 \ 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 1C00A0E3 MOV R0,#+28 \ 0000004C 400E80E3 ORR R0,R0,#0x400 \ 00000050 040080E0 ADD R0,R0,R4 \ 00000054 160100EF SWI +278 6231 elf_path[len]=0; \ 00000058 040087E0 ADD R0,R7,R4 \ 0000005C 0010A0E3 MOV R1,#+0 \ 00000060 1C14C0E5 STRB R1,[R0, #+1052] 6232 if (!UIN) \ 00000064 ........ LDR R0,??DataTable254 ;; UIN \ 00000068 000090E5 LDR R0,[R0, #+0] \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 1700001A BNE ??main_0 6233 { 6234 LockSched(); \ 00000074 460100EF SWI +326 6235 ShowMSG(1,(int)LG_MSGNOUINPASS); \ 00000078 8C00A0E3 MOV R0,#+140 \ 0000007C 400E80E3 ORR R0,R0,#0x400 \ 00000080 051080E0 ADD R1,R0,R5 \ 00000084 0100A0E3 MOV R0,#+1 \ 00000088 480100EF SWI +328 6236 ws=AllocWS(150); \ 0000008C 9600A0E3 MOV R0,#+150 \ 00000090 250100EF SWI +293 6237 str_2ws(ws,suc_config_name,128); \ 00000094 ........ LDR R1,??DataTable255 ;; suc_config_name \ 00000098 0040A0E1 MOV R4,R0 \ 0000009C 8020A0E3 MOV R2,#+128 \ 000000A0 6C0100EF SWI +364 6238 ExecuteFile(ws,0,0); \ 000000A4 0020A0E3 MOV R2,#+0 \ 000000A8 0010A0E3 MOV R1,#+0 \ 000000AC 0400A0E1 MOV R0,R4 \ 000000B0 940000EF SWI +148 6239 FreeWS(ws); \ 000000B4 0400A0E1 MOV R0,R4 \ 000000B8 290100EF SWI +297 6240 UnlockSched(); \ 000000BC 470100EF SWI +327 6241 SUBPROC((void *)ElfKiller); \ 000000C0 ........ LDR R0,??DataTable256 ;; ElfKiller \ 000000C4 710100EF SWI +369 6242 return 0; \ 000000C8 0000A0E3 MOV R0,#+0 \ 000000CC 2CD08DE2 ADD SP,SP,#+44 \ 000000D0 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_0: \ 000000D4 ........ LDR R6,??DataTable257 ;; fontpath \ 000000D8 ........ BL ReadDefSettings \ 000000DC ........ BL setup_ICONS \ 000000E0 ........ _BLF LoadXStatusText,??LoadXStatusText??rA \ 000000E4 ........ BL UpdateCSMname \ 000000E8 460100EF SWI +326 \ 000000EC 0020A0E3 MOV R2,#+0 \ 000000F0 0D10A0E1 MOV R1,SP \ 000000F4 740084E2 ADD R0,R4,#+116 \ 000000F8 070100EF SWI +263 \ 000000FC 680284E5 STR R0,[R4, #+616] \ 00000100 470100EF SWI +327 \ 00000104 0100A0E3 MOV R0,#+1 \ 00000108 ........ _BLF PrintLibInit,??PrintLibInit??rA \ 0000010C 0110A0E3 MOV R1,#+1 \ 00000110 0600A0E1 MOV R0,R6 \ 00000114 ........ _BLF FontPathInit,??FontPathInit??rA 6254 SetFontColor((char*)fontColor,(char*)bgrColor,1); \ 00000118 ........ LDR R1,??DataTable258 ;; bgrColor \ 0000011C ........ LDR R0,??DataTable259 ;; fontColor \ 00000120 0120A0E3 MOV R2,#+1 \ 00000124 ........ _BLF SetFontColor,??SetFontColor??rA 6255 away_timer(); \ 00000128 ........ BL away_timer 6256 #ifdef NEWSGOLD 6257 SetIconBarHandler(); \ 0000012C ........ LDR R0,??DataTable260 ;; addIconBar \ 00000130 B80084E5 STR R0,[R4, #+184] 6258 #endif 6259 #ifdef kluchnik 6260 switch(CurrentPrivateStatus) 6261 { 6262 case 0: ICON_HD=ICON_ALL_CAN_SEE; break; 6263 case 1: ICON_HD=ICON_NOBODY_CAN_SEE; break; 6264 case 2: ICON_HD=ICON_VISLIST_CAN_SEE; break; 6265 case 3: ICON_HD=ICON_INVISLIST_CANNOT_SEE; break; 6266 case 4: ICON_HD=ICON_CONTACTLIST_CAN_SEE; break; 6267 } 6268 #endif 6269 if(fonto==1) \ 00000134 ........ LDR R0,??DataTable261 ;; fonto \ 00000138 000090E5 LDR R0,[R0, #+0] \ 0000013C 010050E3 CMP R0,#+1 \ 00000140 0B00001A BNE ??main_1 6270 { 6271 char *heght=malloc(64); \ 00000144 4000A0E3 MOV R0,#+64 \ 00000148 140000EF SWI +20 \ 0000014C 0070A0E1 MOV R7,R0 6272 sprintf(heght, "%s2240.png", fontpath); \ 00000150 0620A0E1 MOV R2,R6 \ 00000154 E91F85E2 ADD R1,R5,#+932 \ 00000158 160000EF SWI +22 6273 paused_height=GetImgHeight((int)heght); \ 0000015C 0700A0E1 MOV R0,R7 \ 00000160 210000EF SWI +33 \ 00000164 400284E5 STR R0,[R4, #+576] 6274 mfree(heght); \ 00000168 0700A0E1 MOV R0,R7 \ 0000016C 150000EF SWI +21 \ 00000170 010000EA B ??main_2 6275 } 6276 else 6277 paused_height=fonto-100; \ ??main_1: \ 00000174 640040E2 SUB R0,R0,#+100 \ 00000178 400284E5 STR R0,[R4, #+576] 6278 GBS_StartTimerProc(&ping_tmr, 12000, Pinger2); \ ??main_2: \ 0000017C ........ LDR R2,??DataTable262 ;; Pinger2 \ 00000180 E010A0E3 MOV R1,#+224 \ 00000184 B81D81E3 ORR R1,R1,#0x2E00 \ 00000188 FC00A0E3 MOV R0,#+252 \ 0000018C 540D80E3 ORR R0,R0,#0x1500 \ 00000190 040080E0 ADD R0,R0,R4 \ 00000194 4D0000EF SWI +77 6279 upTime(); \ 00000198 ........ BL upTime 6280 #ifdef NEWSGOLD 6281 ScreenSaverTimer(); \ 0000019C ........ BL ScreenSaverTimer 6282 initTags(); \ 000001A0 ........ _BLF initTags,??initTags??rA 6283 #endif 6284 AutoChangeStatus_timer(); \ 000001A4 ........ BL AutoChangeStatus_timer 6285 init_time_zone(); \ 000001A8 ........ BL init_time_zone 6286 AddKeybMsgHook((void *)my_keyhook); \ 000001AC ........ LDR R0,??DataTable263 ;; my_keyhook \ 000001B0 2B0100EF SWI +299 6287 return 0; \ 000001B4 0000A0E3 MOV R0,#+0 \ 000001B8 2CD08DE2 ADD SP,SP,#+44 \ 000001BC 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 9C1090E5 LDR R1,[R0, #+156] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 F9FFFF0A BEQ ??FindNextActiveContact_0 \ 00000018 1EFF2FE1 BX LR 6370 } 6371 t=(CLIST *)(&cltop); \ ??FindNextActiveContact_1: \ 0000001C ........ LDR R0,??DataTable265 ;; S_ICONS + 780 \ 00000020 020000EA B ??FindNextActiveContact_2 6372 while(t=(CLIST *)(t->next)) 6373 { 6374 if (t->isactive) return t; \ ??FindNextActiveContact_3: \ 00000024 9C1090E5 LDR R1,[R0, #+156] \ 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,??DataTable265 ;; S_ICONS + 780 \ 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 9C3092E5 LDR R3,[R2, #+156] \ 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 9C2090E5 LDR R2,[R0, #+156] \ 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,??DataTable271 ;; S_ICONS \ 00000008 58D04DE2 SUB SP,SP,#+88 \ 0000000C ........ LDR R7,??DataTable267 ;; 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 DC1295E5 LDR R1,[R5, #+732] \ 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 DC1295E5 LDR R1,[R5, #+732] \ 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 440295E5 LDR R0,[R5, #+580] \ 00000188 230100EF SWI +291 \ 0000018C 012080E2 ADD R2,R0,#+1 \ 00000190 440295E5 LDR R0,[R5, #+580] \ 00000194 3E10A0E3 MOV R1,#+62 \ 00000198 1D0000EF SWI +29 6481 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 0000019C 440295E5 LDR R0,[R5, #+580] \ 000001A0 230100EF SWI +291 \ 000001A4 012080E2 ADD R2,R0,#+1 \ 000001A8 440295E5 LDR R0,[R5, #+580] \ 000001AC 2010A0E3 MOV R1,#+32 \ 000001B0 1D0000EF SWI +29 6482 wstrcat(wsBuffer,ec_hdr.pWS); \ 000001B4 28109DE5 LDR R1,[SP, #+40] \ 000001B8 440295E5 LDR R0,[R5, #+580] \ 000001BC 210100EF SWI +289 6483 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 000001C0 440295E5 LDR R0,[R5, #+580] \ 000001C4 230100EF SWI +291 \ 000001C8 012080E2 ADD R2,R0,#+1 \ 000001CC 440295E5 LDR R0,[R5, #+580] \ 000001D0 0A10A0E3 MOV R1,#+10 \ 000001D4 1D0000EF SWI +29 6484 6485 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 000001D8 440295E5 LDR R0,[R5, #+580] \ 000001DC 230100EF SWI +291 \ 000001E0 012080E2 ADD R2,R0,#+1 \ 000001E4 440295E5 LDR R0,[R5, #+580] \ 000001E8 3E10A0E3 MOV R1,#+62 \ 000001EC 1D0000EF SWI +29 6486 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 000001F0 440295E5 LDR R0,[R5, #+580] \ 000001F4 230100EF SWI +291 \ 000001F8 012080E2 ADD R2,R0,#+1 \ 000001FC 440295E5 LDR R0,[R5, #+580] \ 00000200 2010A0E3 MOV R1,#+32 \ 00000204 1D0000EF SWI +29 6487 wstrcat(wsBuffer,ec.pWS); \ 00000208 54109DE5 LDR R1,[SP, #+84] \ 0000020C 440295E5 LDR R0,[R5, #+580] \ 00000210 210100EF SWI +289 6488 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 00000214 440295E5 LDR R0,[R5, #+580] \ 00000218 230100EF SWI +291 \ 0000021C 012080E2 ADD R2,R0,#+1 \ 00000220 440295E5 LDR R0,[R5, #+580] \ 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 441295E5 LDR R1,[R5, #+580] \ 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 441295E5 LDR R1,[R5, #+580] \ 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 440295E5 LDR R0,[R5, #+580] \ 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 180395E5 LDR R0,[R5, #+792] \ 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,??DataTable269 ;; `?` \ 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,??DataTable269 ;; `?` \ 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 940094E5 LDR R0,[R4, #+148] \ 00000018 150000EF SWI +21 6734 cl->answer=p; \ 0000001C 945084E5 STR R5,[R4, #+148] 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,??DataTable270 ;; end_socket \ 00000004 10402DE9 PUSH {R4,LR} 6760 GBS_DelTimer(&reconnect_tmr); \ 00000008 ........ LDR R4,??DataTable271 ;; S_ICONS \ 0000000C 710100EF SWI +369 \ 00000010 7400A0E3 MOV R0,#+116 \ 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 A00384E5 STR R0,[R4, #+928] 6762 SUBPROC((void *)create_connect); \ 00000028 ........ LDR R0,??DataTable272 ;; 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,??DataTable281 ;; S_ICONS \ 00000008 4CDF4DE2 SUB SP,SP,#+304 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0170A0E1 MOV R7,R1 \ 00000014 5400A0E3 MOV R0,#+84 \ 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 040097E5 LDR R0,[R7, #+4] \ 00000028 088090E5 LDR R8,[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 F200D7E1 LDRSH R0,[R7, #+2] \ 0000003C FF10A0E3 MOV R1,#+255 \ 00000040 F01E81E3 ORR R1,R1,#0xF00 \ 00000044 010050E1 CMP R0,R1 \ 00000048 0200001A BNE ??edchat_onkey_0 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 8C0000EA 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 890000EA B ??edchat_onkey_4 \ ??edchat_onkey_3: \ 00000068 040097E5 LDR R0,[R7, #+4] \ 0000006C 9510A0E3 MOV R1,#+149 \ 00000070 040090E5 LDR R0,[R0, #+4] \ 00000074 401F81E3 ORR R1,R1,#0x100 \ 00000078 010050E1 CMP R0,R1 \ 0000007C 0C00001A BNE ??edchat_onkey_5 6786 6787 void AddSmile(GUI *data); 6788 if (msg->gbsmsg->msg==LONG_PRESS) 6789 { 6790 if (l==RIGHT_BUTTON) \ 00000080 3E0058E3 CMP R8,#+62 \ 00000084 3B00001A BNE ??edchat_onkey_6 6791 { 6792 if(LongRightAction==2 && EDIT_GetFocus(data)==ed_struct->ed_answer) \ 00000088 5C959FE5 LDR R9,??edchat_onkey_7 ;; LongRightAction \ 0000008C 000099E5 LDR R0,[R9, #+0] \ 00000090 020050E3 CMP R0,#+2 \ 00000094 1A00001A BNE ??edchat_onkey_8 \ 00000098 0400A0E1 MOV R0,R4 \ 0000009C 820100EF SWI +386 \ 000000A0 081095E5 LDR R1,[R5, #+8] \ 000000A4 010050E1 CMP R0,R1 \ 000000A8 1500001A BNE ??edchat_onkey_8 6793 CreateSmileSelectGUI(ed_struct); \ 000000AC 0500A0E1 MOV R0,R5 \ 000000B0 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 6794 else 6795 if(LongRightAction==1) 6796 { 6797 if (EDIT_GetFocus(data)==ed_struct->ed_answer) 6798 { 6799 ExtractEditControl(data,ed_struct->ed_answer,&ec); 6800 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) 6801 { 6802 t=FindNextActiveContact(ed_struct->ed_contact); 6803 if (t && t!=ed_struct->ed_contact) 6804 { 6805 CreateEditChat(t); 6806 return(1); 6807 } 6808 } 6809 } 6810 } 6811 } 6812 if (l==LEFT_BUTTON && LongLeftAction) 6813 { 6814 if (EDIT_GetFocus(data)==ed_struct->ed_answer) 6815 { 6816 ExtractEditControl(data,ed_struct->ed_answer,&ec); 6817 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) 6818 { 6819 t=FindPrevActiveContact(ed_struct->ed_contact); 6820 if (t && t!=ed_struct->ed_contact) 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); 6893 ExtractEditControl(ed_struct->ed_chatgui,ed,&ec); 6894 6895 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); 6896 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); 6897 wstrcat(wsBuffer,ec.pWS); 6898 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); 6899 6900 ShowMSG(1,(int)"Message add to buffer"); 6901 } 6902 #endif 6903 } 6904 6905 if (msg->gbsmsg->msg==KEY_DOWN) \ ??edchat_onkey_5: \ 000000B4 040097E5 LDR R0,[R7, #+4] \ 000000B8 9310A0E3 MOV R1,#+147 \ 000000BC 040090E5 LDR R0,[R0, #+4] \ 000000C0 401F81E3 ORR R1,R1,#0x100 \ 000000C4 010050E1 CMP R0,R1 \ 000000C8 0A00001A BNE ??edchat_onkey_9 6906 { 6907 if ((l>='0')&&(l<='9')) \ 000000CC 300058E3 CMP R8,#+48 \ 000000D0 8A0000BA BLT ??edchat_onkey_10 \ 000000D4 3A0058E3 CMP R8,#+58 \ 000000D8 060000AA BGE ??edchat_onkey_9 6908 { 6909 if (EDIT_GetFocus(data)!=ed_struct->ed_answer) \ 000000DC 0400A0E1 MOV R0,R4 \ 000000E0 820100EF SWI +386 \ 000000E4 081095E5 LDR R1,[R5, #+8] \ 000000E8 010050E1 CMP R0,R1 \ 000000EC 0100000A BEQ ??edchat_onkey_9 6910 EDIT_SetFocus(data,ed_struct->ed_answer); \ 000000F0 0400A0E1 MOV R0,R4 \ 000000F4 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_9: \ 000000F8 0000A0E3 MOV R0,#+0 \ 000000FC 4CDF8DE2 ADD SP,SP,#+304 \ 00000100 F08FBDE8 POP {R4-R11,PC} ;; return \ ??edchat_onkey_8: \ 00000104 000099E5 LDR R0,[R9, #+0] \ 00000108 010050E3 CMP R0,#+1 \ 0000010C E8FFFF1A BNE ??edchat_onkey_5 \ 00000110 0400A0E1 MOV R0,R4 \ 00000114 820100EF SWI +386 \ 00000118 081095E5 LDR R1,[R5, #+8] \ 0000011C 010050E1 CMP R0,R1 \ 00000120 E3FFFF1A BNE ??edchat_onkey_5 \ 00000124 04208DE2 ADD R2,SP,#+4 \ 00000128 0400A0E1 MOV R0,R4 \ 0000012C 690100EF SWI +361 \ 00000130 0400A0E1 MOV R0,R4 \ 00000134 D30100EF SWI +467 \ 00000138 2C109DE5 LDR R1,[SP, #+44] \ 0000013C 010040E2 SUB R0,R0,#+1 \ 00000140 001091E5 LDR R1,[R1, #+0] \ 00000144 B010D1E1 LDRH R1,[R1, #+0] \ 00000148 000051E1 CMP R1,R0 \ 0000014C D8FFFF1A BNE ??edchat_onkey_5 \ 00000150 00A095E5 LDR R10,[R5, #+0] \ 00000154 0A00A0E1 MOV R0,R10 \ 00000158 ........ BL FindNextActiveContact \ 0000015C 0090B0E1 MOVS R9,R0 \ 00000160 0A005911 CMPNE R9,R10 \ 00000164 D2FFFF0A BEQ ??edchat_onkey_5 \ ??edchat_onkey_11: \ 00000168 0900A0E1 MOV R0,R9 \ 0000016C ........ BL CreateEditChat \ 00000170 0100A0E3 MOV R0,#+1 \ 00000174 450000EA B ??edchat_onkey_4 \ ??edchat_onkey_6: \ 00000178 3D0058E3 CMP R8,#+61 \ 0000017C 1A00001A BNE ??edchat_onkey_12 \ 00000180 68049FE5 LDR R0,??edchat_onkey_7+0x4 ;; LongLeftAction \ 00000184 000090E5 LDR R0,[R0, #+0] \ 00000188 000050E3 CMP R0,#+0 \ 0000018C C8FFFF0A BEQ ??edchat_onkey_5 \ 00000190 0400A0E1 MOV R0,R4 \ 00000194 820100EF SWI +386 \ 00000198 081095E5 LDR R1,[R5, #+8] \ 0000019C 010050E1 CMP R0,R1 \ 000001A0 C3FFFF1A BNE ??edchat_onkey_5 \ 000001A4 04208DE2 ADD R2,SP,#+4 \ 000001A8 0400A0E1 MOV R0,R4 \ 000001AC 690100EF SWI +361 \ 000001B0 0400A0E1 MOV R0,R4 \ 000001B4 D30100EF SWI +467 \ 000001B8 2C109DE5 LDR R1,[SP, #+44] \ 000001BC 010040E2 SUB R0,R0,#+1 \ 000001C0 001091E5 LDR R1,[R1, #+0] \ 000001C4 B010D1E1 LDRH R1,[R1, #+0] \ 000001C8 000051E1 CMP R1,R0 \ 000001CC B8FFFF1A BNE ??edchat_onkey_5 \ 000001D0 00A095E5 LDR R10,[R5, #+0] \ 000001D4 0A00A0E1 MOV R0,R10 \ 000001D8 ........ BL FindPrevActiveContact \ 000001DC 0090B0E1 MOVS R9,R0 \ 000001E0 0A005911 CMPNE R9,R10 \ 000001E4 B2FFFF0A BEQ ??edchat_onkey_5 \ 000001E8 DEFFFFEA B ??edchat_onkey_11 \ ??edchat_onkey_12: \ 000001EC 0E0058E3 CMP R8,#+14 \ 000001F0 2800001A BNE ??edchat_onkey_13 \ 000001F4 F8039FE5 LDR R0,??edchat_onkey_7+0x8 ;; LongVolDownAction \ 000001F8 000090E5 LDR R0,[R0, #+0] \ 000001FC 000050E3 CMP R0,#+0 \ 00000200 1600000A BEQ ??edchat_onkey_14 \ 00000204 081095E5 LDR R1,[R5, #+8] \ 00000208 04208DE2 ADD R2,SP,#+4 \ 0000020C 0400A0E1 MOV R0,R4 \ 00000210 690100EF SWI +361 \ 00000214 2C009DE5 LDR R0,[SP, #+44] \ 00000218 230100EF SWI +291 \ 0000021C 010050E3 CMP R0,#+1 \ 00000220 A3FFFFBA BLT ??edchat_onkey_5 \ 00000224 0100A0E3 MOV R0,#+1 \ 00000228 250100EF SWI +293 \ 0000022C 0090A0E1 MOV R9,R0 \ 00000230 0010A0E3 MOV R1,#+0 \ 00000234 260100EF SWI +294 \ 00000238 081095E5 LDR R1,[R5, #+8] \ 0000023C 0400A0E1 MOV R0,R4 \ ??edchat_onkey_15: \ 00000240 9B0100EF SWI +411 \ 00000244 040095E5 LDR R0,[R5, #+4] \ 00000248 0910A0E1 MOV R1,R9 \ 0000024C 810100EF SWI +385 \ 00000250 0900A0E1 MOV R0,R9 \ 00000254 290100EF SWI +297 \ 00000258 960100EF SWI +406 \ 0000025C 94FFFFEA B ??edchat_onkey_5 \ ??edchat_onkey_14: \ 00000260 0400A0E1 MOV R0,R4 \ 00000264 820100EF SWI +386 \ 00000268 021080E2 ADD R1,R0,#+2 \ 0000026C 080095E5 LDR R0,[R5, #+8] \ 00000270 010050E1 CMP R0,R1 \ ??edchat_onkey_16: \ 00000274 040000BA BLT ??edchat_onkey_2 \ 00000278 0400A0E1 MOV R0,R4 \ 0000027C 9B0100EF SWI +411 \ 00000280 0110A0E3 MOV R1,#+1 \ 00000284 0400A0E1 MOV R0,R4 \ 00000288 D40100EF SWI +468 \ ??edchat_onkey_2: \ 0000028C 0000E0E3 MVN R0,#+0 \ ??edchat_onkey_4: \ 00000290 4CDF8DE2 ADD SP,SP,#+304 \ 00000294 F08FBDE8 POP {R4-R11,PC} \ ??edchat_onkey_13: \ 00000298 0D0058E3 CMP R8,#+13 \ 0000029C 84FFFF1A BNE ??edchat_onkey_5 \ 000002A0 50039FE5 LDR R0,??edchat_onkey_7+0xC ;; LongVolUpAction \ 000002A4 000090E5 LDR R0,[R0, #+0] \ 000002A8 000050E3 CMP R0,#+0 \ 000002AC 0E00000A BEQ ??edchat_onkey_17 \ 000002B0 FC00A0E3 MOV R0,#+252 \ 000002B4 500E80E3 ORR R0,R0,#0x500 \ 000002B8 060080E0 ADD R0,R0,R6 \ 000002BC 1B0000EF SWI +27 \ 000002C0 010080E2 ADD R0,R0,#+1 \ 000002C4 250100EF SWI +293 \ 000002C8 0090A0E1 MOV R9,R0 \ 000002CC FC00A0E3 MOV R0,#+252 \ 000002D0 500E80E3 ORR R0,R0,#0x500 \ 000002D4 061080E0 ADD R1,R0,R6 \ 000002D8 0900A0E1 MOV R0,R9 \ 000002DC ........ _BLF ascii2ws,??ascii2ws??rA \ 000002E0 081095E5 LDR R1,[R5, #+8] \ 000002E4 040095E5 LDR R0,[R5, #+4] \ 000002E8 D4FFFFEA B ??edchat_onkey_15 \ ??edchat_onkey_17: \ 000002EC 0400A0E1 MOV R0,R4 \ 000002F0 820100EF SWI +386 \ 000002F4 021040E2 SUB R1,R0,#+2 \ 000002F8 020051E3 CMP R1,#+2 \ 000002FC DCFFFFEA B ??edchat_onkey_16 \ ??edchat_onkey_10: \ 00000300 0B0058E3 CMP R8,#+11 \ 00000304 5B00001A BNE ??edchat_onkey_18 \ 00000308 E40296E5 LDR R0,[R6, #+740] \ 0000030C 030050E3 CMP R0,#+3 \ 00000310 78FFFF1A BNE ??edchat_onkey_9 \ 00000314 009095E5 LDR R9,[R5, #+0] \ 00000318 000059E3 CMP R9,#+0 \ 0000031C 75FFFF0A BEQ ??edchat_onkey_9 \ 00000320 081095E5 LDR R1,[R5, #+8] \ 00000324 04208DE2 ADD R2,SP,#+4 \ 00000328 0400A0E1 MOV R0,R4 \ 0000032C 690100EF SWI +361 \ 00000330 2C109DE5 LDR R1,[SP, #+44] \ 00000334 0900A0E1 MOV R0,R9 \ 00000338 ........ BL SaveAnswer \ 0000033C 94A099E5 LDR R10,[R9, #+148] \ 00000340 00005AE3 CMP R10,#+0 \ 00000344 6BFFFF0A BEQ ??edchat_onkey_9 \ 00000348 0A00A0E1 MOV R0,R10 \ 0000034C 1B0000EF SWI +27 \ 00000350 00B0B0E1 MOVS R11,R0 \ 00000354 67FFFF0A BEQ ??edchat_onkey_9 \ 00000358 0070A0E3 MOV R7,#+0 \ 0000035C 907286E5 STR R7,[R6, #+656] \ 00000360 947286E5 STR R7,[R6, #+660] \ 00000364 787089E5 STR R7,[R9, #+120] \ 00000368 9C0296E5 LDR R0,[R6, #+668] \ 0000036C 000050E3 CMP R0,#+0 \ 00000370 0300000A BEQ ??edchat_onkey_19 \ 00000374 980296E5 LDR R0,[R6, #+664] \ 00000378 800286E5 STR R0,[R6, #+640] \ 0000037C ........ BL set_my_status \ 00000380 9C7286E5 STR R7,[R6, #+668] \ ??edchat_onkey_19: \ 00000384 ........ LDR R0,??DataTable274 ;; SHOW_ACTIVE \ 00000388 000090E5 LDR R0,[R0, #+0] \ 0000038C 000050E3 CMP R0,#+0 \ 00000390 5A0FA013 MOVNE R0,#+360 \ 00000394 9C008915 STRNE R0,[R9, #+156] \ 00000398 09008BE2 ADD R0,R11,#+9 \ 0000039C 140000EF SWI +20 \ 000003A0 0080A0E1 MOV R8,R0 \ 000003A4 0C0099E5 LDR R0,[R9, #+12] \ 000003A8 0A10A0E1 MOV R1,R10 \ 000003AC 000088E5 STR R0,[R8, #+0] \ 000003B0 0200A0E3 MOV R0,#+2 \ 000003B4 B400C8E1 STRH R0,[R8, #+4] \ 000003B8 B6B0C8E1 STRH R11,[R8, #+6] \ 000003BC 080088E2 ADD R0,R8,#+8 \ 000003C0 1A0000EF SWI +26 \ 000003C4 0A10A0E1 MOV R1,R10 \ 000003C8 FC00A0E3 MOV R0,#+252 \ 000003CC 500E80E3 ORR R0,R0,#0x500 \ 000003D0 060080E0 ADD R0,R0,R6 \ 000003D4 1A0000EF SWI +26 \ 000003D8 700296E5 LDR R0,[R6, #+624] \ 000003DC ........ LDR R3,??DataTable310 ;; I_str \ 000003E0 010080E2 ADD R0,R0,#+1 \ 000003E4 700286E5 STR R0,[R6, #+624] \ 000003E8 0110A0E3 MOV R1,#+1 \ 000003EC 02002DE9 PUSH {R1} \ 000003F0 8008A0E1 LSL R0,R0,#+17 \ 000003F4 A008A0E1 LSR R0,R0,#+17 \ 000003F8 01002DE9 PUSH {R0} \ 000003FC 082088E2 ADD R2,R8,#+8 \ 00000400 0900A0E1 MOV R0,R9 \ 00000404 ........ BL AddStringToLog \ 00000408 ........ LDR R0,??DataTable311 ;; SendAnswer \ 0000040C 0820A0E1 MOV R2,R8 \ 00000410 0010A0E3 MOV R1,#+0 \ 00000414 710100EF SWI +369 \ 00000418 ........ LDR R0,??DataTable277 ;; main2_count \ 0000041C 001090E5 LDR R1,[R0, #+0] \ 00000420 011081E2 ADD R1,R1,#+1 \ 00000424 001080E5 STR R1,[R0, #+0] \ 00000428 940099E5 LDR R0,[R9, #+148] \ 0000042C 150000EF SWI +21 \ 00000430 947089E5 STR R7,[R9, #+148] \ 00000434 081095E5 LDR R1,[R5, #+8] \ 00000438 0400A0E1 MOV R0,R4 \ 0000043C 9B0100EF SWI +411 \ 00000440 880296E5 LDR R0,[R6, #+648] \ 00000444 0710A0E1 MOV R1,R7 \ 00000448 260100EF SWI +294 \ 0000044C 881296E5 LDR R1,[R6, #+648] \ 00000450 0400A0E1 MOV R0,R4 \ 00000454 810100EF SWI +385 \ 00000458 0400A0E1 MOV R0,R4 \ 0000045C ........ BL AddMsgToChat \ 00000460 0110A0E3 MOV R1,#+1 \ 00000464 0900A0E1 MOV R0,R9 \ 00000468 ........ BL RecountMenu \ 0000046C 0700E0E1 MVN R0,R7 \ 00000470 08D08DE2 ADD SP,SP,#+8 \ 00000474 85FFFFEA B ??edchat_onkey_4 \ ??edchat_onkey_18: \ 00000478 1A0058E3 CMP R8,#+26 \ 0000047C 5500001A BNE ??edchat_onkey_20 \ 00000480 0400A0E1 MOV R0,R4 \ 00000484 D80100EF SWI +472 \ 00000488 000050E3 CMP R0,#+0 \ 0000048C 19FFFF1A BNE ??edchat_onkey_9 \ 00000490 040095E5 LDR R0,[R5, #+4] \ 00000494 820100EF SWI +386 \ 00000498 04208DE2 ADD R2,SP,#+4 \ 0000049C 0010A0E1 MOV R1,R0 \ 000004A0 040095E5 LDR R0,[R5, #+4] \ 000004A4 690100EF SWI +361 \ 000004A8 880296E5 LDR R0,[R6, #+648] \ 000004AC 2C109DE5 LDR R1,[SP, #+44] \ 000004B0 1F0100EF SWI +287 \ 000004B4 0400A0E1 MOV R0,R4 \ 000004B8 D30100EF SWI +467 \ 000004BC 0080A0E1 MOV R8,R0 \ 000004C0 880296E5 LDR R0,[R6, #+648] \ 000004C4 230100EF SWI +291 \ 000004C8 010080E2 ADD R0,R0,#+1 \ 000004CC 140000EF SWI +20 \ 000004D0 0070A0E1 MOV R7,R0 \ 000004D4 880296E5 LDR R0,[R6, #+648] \ 000004D8 0720A0E1 MOV R2,R7 \ 000004DC 0810A0E1 MOV R1,R8 \ 000004E0 ........ BL IsUrl \ 000004E4 000050E3 CMP R0,#+0 \ 000004E8 2C00000A BEQ ??edchat_onkey_21 \ 000004EC 08019FE5 LDR R0,??edchat_onkey_7+0x10 ;; IsOpenBrowser \ 000004F0 000090E5 LDR R0,[R0, #+0] \ 000004F4 000050E3 CMP R0,#+0 \ 000004F8 2800000A BEQ ??edchat_onkey_21 \ 000004FC FC009FE5 LDR R0,??edchat_onkey_7+0x14 ;; GetTempName \ 00000500 ........ LDR R3,??DataTable278 ;; TEMPLATES_PATH \ 00000504 F8209FE5 LDR R2,??edchat_onkey_7+0x18 ;; `?` \ 00000508 01002DE9 PUSH {R0} \ 0000050C FF10A0E3 MOV R1,#+255 \ 00000510 34008DE2 ADD R0,SP,#+52 \ 00000514 1B0100EF SWI +283 \ 00000518 04308DE2 ADD R3,SP,#+4 \ 0000051C 402FA0E3 MOV R2,#+256 \ 00000520 0110A0E3 MOV R1,#+1 \ 00000524 831C81E3 ORR R1,R1,#0x8300 \ 00000528 34008DE2 ADD R0,SP,#+52 \ 0000052C 0A0000EF SWI +10 \ 00000530 0040A0E1 MOV R4,R0 \ 00000534 010074E3 CMN R4,#+1 \ 00000538 04D08DE2 ADD SP,SP,#+4 \ 0000053C 1400000A BEQ ??edchat_onkey_22 \ 00000540 0700A0E1 MOV R0,R7 \ 00000544 1B0000EF SWI +27 \ 00000548 0020A0E1 MOV R2,R0 \ 0000054C 0D30A0E1 MOV R3,SP \ 00000550 0710A0E1 MOV R1,R7 \ 00000554 0400A0E1 MOV R0,R4 \ 00000558 0C0000EF SWI +12 \ 0000055C 0D10A0E1 MOV R1,SP \ 00000560 0400A0E1 MOV R0,R4 \ 00000564 0D0000EF SWI +13 \ 00000568 880296E5 LDR R0,[R6, #+648] \ 0000056C 402FA0E3 MOV R2,#+256 \ 00000570 30108DE2 ADD R1,SP,#+48 \ 00000574 6C0100EF SWI +364 \ 00000578 880296E5 LDR R0,[R6, #+648] \ 0000057C 0020A0E3 MOV R2,#+0 \ 00000580 0010A0E3 MOV R1,#+0 \ 00000584 940000EF SWI +148 \ 00000588 0D10A0E1 MOV R1,SP \ 0000058C 30008DE2 ADD R0,SP,#+48 \ 00000590 6B0100EF SWI +363 \ ??edchat_onkey_22: \ 00000594 0700A0E1 MOV R0,R7 \ 00000598 150000EF SWI +21 \ 0000059C 3AFFFFEA B ??edchat_onkey_2 \ ??edchat_onkey_21: \ 000005A0 000095E5 LDR R0,[R5, #+0] \ 000005A4 0C0090E5 LDR R0,[R0, #+12] \ 000005A8 ........ BL LoadTemplates \ 000005AC ........ LDR R2,??DataTable279 ;; IsMultiBuffer \ 000005B0 50109FE5 LDR R1,??edchat_onkey_7+0x1C ;; ed_options_handler \ 000005B4 100085E5 STR R0,[R5, #+16] \ 000005B8 002092E5 LDR R2,[R2, #+0] \ 000005BC 000052E3 CMP R2,#+0 \ 000005C0 03308002 ADDEQ R3,R0,#+3 \ 000005C4 04308012 ADDNE R3,R0,#+4 \ 000005C8 0520A0E1 MOV R2,R5 \ 000005CC 0400A0E1 MOV R0,R4 \ 000005D0 E50100EF SWI +485 \ 000005D4 EEFFFFEA B ??edchat_onkey_22 \ ??edchat_onkey_20: \ 000005D8 0D0058E3 CMP R8,#+13 \ 000005DC 42FFFF0A BEQ ??edchat_onkey_17 \ ??edchat_onkey_23: \ 000005E0 0E0058E3 CMP R8,#+14 \ 000005E4 C3FEFF1A BNE ??edchat_onkey_9 \ 000005E8 1CFFFFEA B ??edchat_onkey_14 \ ??edchat_onkey_7: \ 000005EC ........ DC32 LongRightAction \ 000005F0 ........ DC32 LongLeftAction \ 000005F4 ........ DC32 LongVolDownAction \ 000005F8 ........ DC32 LongVolUpAction \ 000005FC ........ DC32 IsOpenBrowser \ 00000600 ........ DC32 GetTempName \ 00000604 ........ DC32 `?` \ 00000608 ........ 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,??DataTable282 ;; S_ICONS \ 00000008 D81394E5 LDR R1,[R4, #+984] \ 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 180394E5 LDR R0,[R4, #+792] \ 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 C010A0E1 ASR R1,R0,#+1 \ 00000060 0200A0E3 MOV R0,#+2 \ 00000064 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 } \ 00000068 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,??DataTable281 ;; 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 5400A0E3 MOV R0,#+84 \ 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 6300000A BEQ ??edchat_ghook_3 7089 { 7090 memcpy(methods,m[1],sizeof(methods)); \ 0000007C F76FA0E3 MOV R6,#+988 \ 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 D80384E5 STR R0,[R4, #+984] 7092 methods[0]=(void *)my_ed_redraw; \ 00000098 74019FE5 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 0900001A BNE ??edchat_ghook_7 7109 { 7110 pltop->dyn_pltop=SmilesImgList; \ 000000FC 14019FE5 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 080394E5 LDR R0,[R4, #+776] \ 00000110 0C1097E5 LDR R1,[R7, #+12] \ 00000114 010040E0 SUB R0,R0,R1 \ 00000118 080384E5 STR R0,[R4, #+776] 7113 ed_struct->requested_decrement_total_unread=0; \ 0000011C 0C6087E5 STR R6,[R7, #+12] \ 00000120 E0FFFFEA B ??edchat_ghook_1 7114 #ifdef ELKA 7115 if (!total_unread) 7116 { 7117 SLI_Off(); 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: \ 00000124 070059E3 CMP R9,#+7 \ 00000128 2800001A BNE ??edchat_ghook_8 7128 { 7129 SetSoftKey(data,&sk,SET_SOFT_KEY_N); \ 0000012C E8809FE5 LDR R8,??edchat_ghook_4+0x8 ;; ??sk_1 \ 00000130 0020A0E3 MOV R2,#+0 \ 00000134 0810A0E1 MOV R1,R8 \ 00000138 0500A0E1 MOV R0,R5 \ 0000013C 680100EF SWI +360 7130 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000140 081097E5 LDR R1,[R7, #+8] \ 00000144 0D20A0E1 MOV R2,SP \ 00000148 0500A0E1 MOV R0,R5 \ 0000014C 690100EF SWI +361 7131 if (ec.pWS->wsbody[0]==0) \ 00000150 28009DE5 LDR R0,[SP, #+40] \ 00000154 000090E5 LDR R0,[R0, #+0] \ 00000158 B000D0E1 LDRH R0,[R0, #+0] \ 0000015C 000050E3 CMP R0,#+0 \ 00000160 0300001A BNE ??edchat_ghook_9 7132 SetSoftKey(data,&sk_cancel,SET_SOFT_KEY_N==0?1:0); \ 00000164 0120A0E3 MOV R2,#+1 \ 00000168 081088E2 ADD R1,R8,#+8 \ 0000016C 0500A0E1 MOV R0,R5 \ 00000170 680100EF SWI +360 7133 if (!EDIT_IsBusy(data)) \ ??edchat_ghook_9: \ 00000174 0500A0E1 MOV R0,R5 \ 00000178 1C0200EF SWI +540 \ 0000017C 000050E3 CMP R0,#+0 \ 00000180 2100001A BNE ??edchat_ghook_3 7134 { 7135 time_to_stop_t9=0; \ 00000184 B46384E5 STR R6,[R4, #+948] 7136 if (ed_struct->ed_contact->req_add) \ 00000188 000097E5 LDR R0,[R7, #+0] \ 0000018C 881090E5 LDR R1,[R0, #+136] \ 00000190 000051E3 CMP R1,#+0 \ 00000194 0500000A BEQ ??edchat_ghook_10 7137 { 7138 ed_struct->ed_contact->req_add=0; \ 00000198 886080E5 STR R6,[R0, #+136] 7139 AddMsgToChat(data); \ 0000019C 0500A0E1 MOV R0,R5 \ 000001A0 ........ BL AddMsgToChat 7140 RecountMenu(ed_struct->ed_contact,1); \ 000001A4 000097E5 LDR R0,[R7, #+0] \ 000001A8 0110A0E3 MOV R1,#+1 \ 000001AC ........ BL RecountMenu 7141 } 7142 if (ed_struct->ed_contact->req_drawack) \ ??edchat_ghook_10: \ 000001B0 000097E5 LDR R0,[R7, #+0] \ 000001B4 8C1090E5 LDR R1,[R0, #+140] \ 000001B8 000051E3 CMP R1,#+0 \ 000001BC 1200000A BEQ ??edchat_ghook_3 7143 { 7144 ed_struct->ed_contact->req_drawack=0; \ 000001C0 8C6080E5 STR R6,[R0, #+140] 7145 DrawAck(data); \ 000001C4 0500A0E1 MOV R0,R5 \ 000001C8 ........ BL DrawAck \ 000001CC B5FFFFEA B ??edchat_ghook_1 7146 } 7147 } 7148 } 7149 if (cmd==0x0C) \ ??edchat_ghook_8: \ 000001D0 0C0059E3 CMP R9,#+12 \ 000001D4 0C00001A BNE ??edchat_ghook_3 7150 { 7151 j=EDIT_GetFocus(data); \ 000001D8 0500A0E1 MOV R0,R5 \ 000001DC 820100EF SWI +386 \ 000001E0 0040A0E1 MOV R4,R0 7152 if ((EDIT_GetUnFocus(data)ed_answer)) \ 000001E4 0500A0E1 MOV R0,R5 \ 000001E8 830100EF SWI +387 \ 000001EC 040050E1 CMP R0,R4 \ 000001F0 050000AA BGE ??edchat_ghook_3 \ 000001F4 080097E5 LDR R0,[R7, #+8] \ 000001F8 000054E1 CMP R4,R0 \ 000001FC 0200000A BEQ ??edchat_ghook_3 7153 EDIT_SetCursorPos(data,1); \ 00000200 0110A0E3 MOV R1,#+1 \ 00000204 0500A0E1 MOV R0,R5 \ 00000208 D40100EF SWI +468 7154 } 7155 } \ ??edchat_ghook_3: \ 0000020C 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 00000210 F083BDE8 POP {R4-R9,PC} ;; return \ ??edchat_ghook_4: \ 00000214 ........ DC32 my_ed_redraw \ 00000218 ........ DC32 SmilesImgList \ 0000021C ........ 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 0B0000006400 DC32 11, 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,??DataTable282 ;; 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 909094E5 LDR R9,[R4, #+144] \ 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,??DataTable283 ;; ED_H_FONT_SIZE 7220 if ((zc=lp->acked&3)) \ 00000050 ........ LDR R1,??DataTable284 ;; 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,??DataTable285 ;; 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,??DataTable286 ;; O_I_COLOR \ 0000009C 0700000A BEQ ??CreateEditChat_8 \ 000000A0 030051E3 CMP R1,#+3 \ 000000A4 0400001A BNE ??CreateEditChat_9 \ 000000A8 ........ LDR R0,??DataTable299 ;; O_X_COLOR \ 000000AC 00B090E5 LDR R11,[R0, #+0] \ 000000B0 ........ LDR R0,??DataTable301 ;; O_ED_X_FONT_SIZE \ ??CreateEditChat_10: \ 000000B4 00A090E5 LDR R10,[R0, #+0] \ 000000B8 0F0000EA B ??CreateEditChat_4 \ ??CreateEditChat_9: \ 000000BC ........ LDR R0,??DataTable289 ;; O_TO_COLOR \ ??CreateEditChat_8: \ 000000C0 00B090E5 LDR R11,[R0, #+0] \ 000000C4 ........ LDR R0,??DataTable290 ;; 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,??DataTable300 ;; X_COLOR \ 000000E0 00B090E5 LDR R11,[R0, #+0] \ 000000E4 ........ LDR R0,??DataTable302 ;; ED_X_FONT_SIZE \ 000000E8 F1FFFFEA B ??CreateEditChat_10 \ ??CreateEditChat_11: \ 000000EC ........ LDR R0,??DataTable293 ;; 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,??DataTable294 ;; 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 880297E5 LDR R0,[R7, #+648] \ 00000118 101089E2 ADD R1,R9,#+16 \ 0000011C ........ _BLF ascii2ws,??ascii2ws??rA 7250 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000120 883297E5 LDR R3,[R7, #+648] \ 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 883297E5 LDR R3,[R7, #+648] \ 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 880297E5 LDR R0,[R7, #+648] \ 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,??DataTable299 ;; O_X_COLOR \ 000001BC 601089E2 ADD R1,R9,#+96 \ 000001C0 ........ LDREQ R0,??DataTable300 ;; X_COLOR \ 000001C4 002090E5 LDR R2,[R0, #+0] \ 000001C8 880297E5 LDR R0,[R7, #+648] \ 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 883297E5 LDR R3,[R7, #+648] \ 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,??DataTable297 ;; O_ED_FONT_SIZE \ 00000228 ........ LDREQ R0,??DataTable304 ;; 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,??DataTable299 ;; O_X_COLOR \ 00000238 ........ LDREQ R0,??DataTable300 ;; 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,??DataTable301 ;; O_ED_X_FONT_SIZE \ 00000254 ........ LDREQ R0,??DataTable302 ;; 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 800094E5 LDR R0,[R4, #+128] 7293 total_unread2=total_unread2-t->unread_msg; 7294 t->unread_msg=0; \ 00000290 0090A0E3 MOV R9,#+0 \ 00000294 000050E3 CMP R0,#+0 \ 00000298 08039715 LDRNE R0,[R7, #+776] \ 0000029C 01004012 SUBNE R0,R0,#+1 \ 000002A0 08038715 STRNE R0,[R7, #+776] \ 000002A4 640297E5 LDR R0,[R7, #+612] \ 000002A8 841094E5 LDR R1,[R4, #+132] \ 000002AC 010040E0 SUB R0,R0,R1 \ 000002B0 640287E5 STR R0,[R7, #+612] \ 000002B4 849084E5 STR R9,[R4, #+132] 7295 t->isunread=0; \ 000002B8 809084E5 STR R9,[R4, #+128] 7296 ChangeContactPos(t); \ 000002BC 0400A0E1 MOV R0,R4 \ 000002C0 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 7297 wsprintf(ews, "-------"); \ 000002C4 880297E5 LDR R0,[R7, #+648] \ 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 883297E5 LDR R3,[R7, #+648] \ 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,??DataTable304 ;; 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 941094E5 LDR R1,[R4, #+148] \ 00000330 04D08DE2 ADD SP,SP,#+4 \ 00000334 000051E3 CMP R1,#+0 \ 00000338 0200000A BEQ ??CreateEditChat_18 \ 0000033C 880297E5 LDR R0,[R7, #+648] \ 00000340 ........ BL ParseAnswer \ 00000344 020000EA B ??CreateEditChat_19 7306 else CutWSTR(ews,0); \ ??CreateEditChat_18: \ 00000348 880297E5 LDR R0,[R7, #+648] \ 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 883297E5 LDR R3,[R7, #+648] \ 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,??DataTable304 ;; 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 AC0094E5 LDR R0,[R4, #+172] \ 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 AC9084E5 STR R9,[R4, #+172] 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 889084E5 STR R9,[R4, #+136] 7328 t->last_log=NULL; \ 00000400 989084E5 STR R9,[R4, #+152] 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 010080E2 ADD R0,R0,#+1 \ 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 180387E5 STR R0,[R7, #+792] 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,??DataTable312 ;; S_ICONS + 740 \ 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,??DataTable310 ;; 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,??DataTable311 ;; 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,??DataTable312 ;; S_ICONS + 740 \ 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,??DataTable312 ;; S_ICONS + 740 \ 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,??DataTable310 ;; 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,??DataTable311 ;; 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,??DataTable312 ;; S_ICONS + 740 \ 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,??DataTable313 ;; 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,??DataTable314 ;; 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,??DataTable315 ;; 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 900095E5 LDR R0,[R5, #+144] \ 00000078 0060A0E3 MOV R6,#+0 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 1200000A BEQ ??ClearLog_3 7588 { 7589 FreeLOGQ(&t->log); \ 00000084 900085E2 ADD R0,R5,#+144 \ 00000088 ........ BL FreeLOGQ 7590 t->msg_count=0; \ 0000008C A06085E5 STR R6,[R5, #+160] 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 9C6085E5 STR R6,[R5, #+156] 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 352 \ 00000234 REQUIRE `?` \ main_d: \ 00000234 DS8 4 \ 00000238 REQUIRE `?` \ align: \ 00000238 DS8 4 \ 0000023C REQUIRE `?` \ canvasdata: \ 0000023C DS8 4 \ 00000240 REQUIRE `?` \ paused_height: \ 00000240 DS8 4 \ 00000244 REQUIRE `?` \ wsBuffer: \ 00000244 DS8 4 \ 00000248 REQUIRE `?` \ uins: \ 00000248 DS8 4 \ 0000024C REQUIRE `?` \ saver_on: \ 0000024C DS8 4 \ 00000250 REQUIRE `?` \ Is_PING_On: \ 00000250 DS8 4 \ 00000254 REQUIRE `?` \ Is_SMARTCPU_On: \ 00000254 DS8 4 \ 00000258 REQUIRE `?` \ Is_INC_On: \ 00000258 DS8 4 \ 0000025C REQUIRE `?` \ Is_ILU_On: \ 0000025C DS8 4 \ 00000260 REQUIRE `?` \ Is_Double_Vibra_On: \ 00000260 DS8 4 \ 00000264 REQUIRE `?` \ total_unread2: \ 00000264 DS8 4 \ 00000268 REQUIRE `?` \ maincsm_id: \ 00000268 DS8 4 \ 0000026C REQUIRE `?` \ maingui_id: \ 0000026C DS8 4 \ 00000270 REQUIRE `?` \ SENDMSGCOUNT: \ 00000270 DS8 4 \ 00000274 REQUIRE `?` \ IsActiveUp: \ 00000274 DS8 4 \ 00000278 REQUIRE `?` \ Is_Vibra_Enabled: \ 00000278 DS8 4 \ 0000027C REQUIRE `?` \ Is_Id3tag_Enabled: \ 0000027C DS8 4 \ 00000280 REQUIRE `?` \ CurrentStatus: \ 00000280 DS8 4 \ 00000284 REQUIRE `?` \ CurrentXStatus: \ 00000284 DS8 4 \ 00000288 REQUIRE `?` \ ews: \ 00000288 DS8 4 \ 0000028C REQUIRE `?` \ scrsTime: \ 0000028C DS8 4 \ 00000290 REQUIRE `?` \ msg_away_timer: \ 00000290 DS8 4 \ 00000294 REQUIRE `?` \ away_m: \ 00000294 DS8 4 \ 00000298 REQUIRE `?` \ status_rem: \ 00000298 DS8 4 \ 0000029C REQUIRE `?` \ change_back_status: \ 0000029C DS8 4 \ 000002A0 REQUIRE `?` \ Show_XTX: \ 000002A0 DS8 4 \ 000002A4 REQUIRE `?` \ Is_UPTIME_On: \ 000002A4 DS8 4 \ 000002A8 REQUIRE `?` \ uptimeHour: \ 000002A8 DS8 4 \ 000002AC REQUIRE `?` \ uptimeMin: \ 000002AC DS8 4 \ 000002B0 REQUIRE `?` \ uptimeSec: \ 000002B0 DS8 4 \ 000002B4 REQUIRE `?` \ tracktimer: \ 000002B4 DS8 4 \ 000002B8 REQUIRE `?` \ input_awaymsg_id: \ 000002B8 DS8 4 \ 000002BC REQUIRE `?` \ silenthide: \ 000002BC DS8 4 \ 000002C0 REQUIRE `?` \ disautorecconect: \ 000002C0 DS8 4 \ 000002C4 REQUIRE `?` \ Is_Sounds_Enabled: \ 000002C4 DS8 4 \ 000002C8 REQUIRE `?` \ Is_Show_Offline: \ 000002C8 DS8 4 \ 000002CC REQUIRE `?` \ Is_Show_Groups: \ 000002CC DS8 4 \ 000002D0 REQUIRE `?` \ CurrentPrivateStatus: \ 000002D0 DS8 4 \ 000002D4 REQUIRE `?` \ vibra_count: \ 000002D4 DS8 4 \ 000002D8 REQUIRE `?` \ templates_chars: \ 000002D8 DS8 4 \ 000002DC REQUIRE `?` \ templates_lines: \ 000002DC DS8 4 \ 000002E0 REQUIRE `?` \ RXstate: \ 000002E0 DS8 4 \ 000002E4 REQUIRE `?` \ connect_state: \ 000002E4 DS8 4 \ 000002E8 REQUIRE `?` \ sock: \ 000002E8 DS8 4 \ 000002EC REQUIRE `?` \ TOTALRECEIVED: \ 000002EC DS8 4 \ 000002F0 REQUIRE `?` \ TOTALSENDED: \ 000002F0 DS8 4 \ 000002F4 REQUIRE `?` \ ALLTOTALRECEIVED: \ 000002F4 DS8 4 \ 000002F8 REQUIRE `?` \ ALLTOTALSENDED: \ 000002F8 DS8 4 \ 000002FC REQUIRE `?` \ sendq_l: \ 000002FC DS8 4 \ 00000300 REQUIRE `?` \ sendq_p: \ 00000300 DS8 4 \ 00000304 REQUIRE `?` \ is_gprs_online: \ 00000304 DS8 4 \ 00000308 REQUIRE `?` \ total_unread: \ 00000308 DS8 4 \ 0000030C REQUIRE `?` \ cltop: \ 0000030C DS8 4 \ 00000310 REQUIRE `?` \ GROUP_CACHE: \ 00000310 DS8 4 \ 00000314 REQUIRE `?` \ contactlist_menu_id: \ 00000314 DS8 4 \ 00000318 REQUIRE `?` \ edchat_id: \ 00000318 DS8 4 \ 0000031C REQUIRE `?` \ 0000031C DS8 4 \ 00000320 REQUIRE `?` \ tenseconds_to_ping: \ 00000320 DS8 4 \ 00000324 REQUIRE `?` \ on_off_timer: \ 00000324 DS8 4 \ 00000328 REQUIRE `?` \ kopa_online: \ 00000328 DS8 4 \ 0000032C REQUIRE `?` \ kopa_kontaktu: \ 0000032C DS8 4 \ 00000330 REQUIRE `?` \ gui_methods2: \ 00000330 DS8 96 \ 00000390 REQUIRE `?` \ old_redraw: \ 00000390 DS8 4 \ 00000394 REQUIRE `?` \ 00000394 DS8 4 \ 00000398 REQUIRE `?` \ 00000398 DS8 4 \ 0000039C REQUIRE `?` \ DNR_ID: \ 0000039C DS8 4 \ 000003A0 REQUIRE `?` \ DNR_TRIES: \ 000003A0 DS8 4 \ 000003A4 REQUIRE `?` \ host_counter: \ 000003A4 DS8 4 \ 000003A8 REQUIRE `?` \ ping_time: \ 000003A8 DS8 4 \ 000003AC REQUIRE `?` \ main_msg_timer2: \ 000003AC DS8 4 \ 000003B0 REQUIRE `?` \ NEW_MSG: \ 000003B0 DS8 4 \ 000003B4 REQUIRE `?` \ time_to_stop_t9: \ 000003B4 DS8 4 \ 000003B8 REQUIRE `?` \ comanda: \ 000003B8 DS8 4 \ 000003BC REQUIRE `?` \ INC_show: \ 000003BC DS8 4 \ 000003C0 REQUIRE `?` \ INC_show2: \ 000003C0 DS8 4 \ 000003C4 REQUIRE `?` \ itemFromDisp: \ 000003C4 DS8 4 \ 000003C8 REQUIRE `?` \ totalItems: \ 000003C8 DS8 4 \ 000003CC REQUIRE `?` \ curpos: \ 000003CC DS8 4 \ 000003D0 REQUIRE `?` \ curpage: \ 000003D0 DS8 4 \ 000003D4 REQUIRE `?` \ USE_ADD_UIN: \ 000003D4 DS8 4 \ 000003D8 REQUIRE `?` \ old_ed_redraw: \ 000003D8 DS8 4 \ 000003DC REQUIRE `?` \ 000003DC DS8 64 \ 0000041C REQUIRE `?` \ elf_path: \ 0000041C DS8 256 \ 0000051C REQUIRE `?` \ ContactT9Key: \ 0000051C DS8 32 \ 0000053C REQUIRE `?` \ talk_sound: \ 0000053C DS8 128 \ 000005BC REQUIRE `?` \ unread_msg_info: \ 000005BC DS8 64 \ 000005FC REQUIRE `?` \ last_msg_buffer: \ 000005FC DS8 4096 \ 000015FC REQUIRE `?` \ ping_tmr: \ 000015FC DS8 16 \ 0000160C REQUIRE `?` \ PINGO: \ 0000160C DS8 256 \ 0000170C REQUIRE `?` \ scrsTmr: \ 0000170C DS8 16 \ 0000171C REQUIRE `?` \ away_msg: \ 0000171C DS8 264 \ 00001824 REQUIRE `?` \ away_msg_time: \ 00001824 DS8 64 \ 00001864 REQUIRE `?` \ away_msg_time_dace: \ 00001864 DS8 16 \ 00001874 REQUIRE `?` \ tim_zone: \ 00001874 DS8 16 \ 00001884 REQUIRE `?` \ away_tmr: \ 00001884 DS8 16 \ 00001894 REQUIRE `?` \ autoChangeStatus: \ 00001894 DS8 16 \ 000018A4 REQUIRE `?` \ remind_tmr: \ 000018A4 DS8 16 \ 000018B4 REQUIRE `?` \ uptime_tmr: \ 000018B4 DS8 16 \ 000018C4 REQUIRE `?` \ tracktmr: \ 000018C4 DS8 16 \ 000018D4 REQUIRE `?` \ onlineTime: \ 000018D4 DS8 128 \ 00001954 REQUIRE `?` \ logmsg: \ 00001954 DS8 256 \ 00001A54 REQUIRE `?` \ tmr_illumination: \ 00001A54 DS8 16 \ 00001A64 REQUIRE `?` \ tmr_vibra: \ 00001A64 DS8 16 \ 00001A74 REQUIRE `?` \ reconnect_tmr: \ 00001A74 DS8 16 \ 00001A84 REQUIRE `?` \ tmr_active: \ 00001A84 DS8 16 \ 00001A94 REQUIRE `?` \ clm_hdr_text: \ 00001A94 DS8 64 \ 00001AD4 REQUIRE `?` \ clmenu_sk_r: \ 00001AD4 DS8 16 \ 00001AE4 REQUIRE `?` \ on_off_buf: \ 00001AE4 DS8 128 \ 00001B64 REQUIRE `?` \ status: \ 00001B64 DS8 64 \ 00001BA4 REQUIRE `?` \ hostbuf2: \ 00001BA4 DS8 128 \ 00001C24 REQUIRE `?` \ hostname: \ 00001C24 DS8 128 \ 00001CA4 REQUIRE `?` \ I_UIN: \ 00001CA4 DS8 12 \ 00001CB0 REQUIRE `?` \ a_txt: \ 00001CB0 DS8 48 \ 00001CE0 REQUIRE `?` \ s_txt: \ 00001CE0 DS8 48 \ 00001D10 REQUIRE `?` \ d_txt: \ 00001D10 DS8 48 \ 00001D40 REQUIRE `?` \ f_txt: \ 00001D40 DS8 48 \ 00001D70 REQUIRE `?` \ g_txt: \ 00001D70 DS8 48 \ 00001DA0 REQUIRE `?` \ develop: \ 00001DA0 DS8 16 \ 00001DB0 REQUIRE `?` \ requests1: \ 00001DB0 DS8 24 \ 00001DC8 REQUIRE `?` \ requests2: \ 00001DC8 DS8 20 \ 00001DDC REQUIRE `?` \ requests3: \ 00001DDC DS8 24 \ 00001DF4 REQUIRE `?` \ requests4: \ 00001DF4 DS8 20 \ 00001E08 REQUIRE `?` \ requests6: \ 00001E08 DS8 24 \ 00001E20 REQUIRE `?` \ mod_info: \ 00001E20 DS8 264 \ 00001F28 REQUIRE `?` \ show_nick: \ 00001F28 DS8 32 \ 00001F48 REQUIRE `?` \ onContact: \ 00001F48 DS8 64 \ 00001F88 REQUIRE `?` \ incs2: \ 00001F88 DS8 16 \ 00001F98 REQUIRE `?` \ tm22: \ 00001F98 DS8 16 \ 00001FA8 REQUIRE `?` \ clrWhite: \ 00001FA8 DS8 4 \ 00001FAC 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: \ 00001FAC DS8 64 \ 00001FEC 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 16 \ 0000001C REQUIRE `?` \ cont_hdr: \ 0000001C DS8 64 \ 0000005C 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 \ 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,??DataTable316 ;; S_ICONS \ 0000001C AC00A0E3 MOV R0,#+172 \ 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 E40295E5 LDR R0,[R5, #+740] \ 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 \ ??DataTable4: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable7: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable14: \ 00000000 ........ DC32 Remind_Timer2 \ In segment CODE, align 4, keep-with-next \ ??DataTable17: \ 00000000 ........ DC32 GetTags \ In segment CODE, align 4, keep-with-next \ ??DataTable22: \ 00000000 ........ DC32 showAwayIdle \ In segment CODE, align 4, keep-with-next \ ??DataTable23: \ 00000000 ........ DC32 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable24: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable25: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable27: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable28: \ 00000000 ........ DC32 awayMsg \ In segment CODE, align 4, keep-with-next \ ??DataTable31: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable36: \ 00000000 ........ DC32 def_setting \ In segment CODE, align 4, keep-with-next \ ??DataTable37: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable39: \ 00000000 ........ DC32 ind_set_xstatus \ In segment CODE, align 4, keep-with-next \ ??DataTable45: \ 00000000 ........ DC32 vibraPower \ In segment CODE, align 4, keep-with-next \ ??DataTable48: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable54: \ 00000000 ........ DC32 S_ICONS + 780 \ In segment CODE, align 4, keep-with-next \ ??DataTable55: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable56: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable57: \ 00000000 ........ DC32 ICON_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable58: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable66: \ 00000000 ........ DC32 TIME_OR_MSG \ In segment CODE, align 4, keep-with-next \ ??DataTable67: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable72: \ 00000000 ........ DC32 icon_array + 8 \ In segment CODE, align 4, keep-with-next \ ??DataTable75: \ 00000000 ........ DC32 icon_array \ In segment CODE, align 4, keep-with-next \ ??DataTable76: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable77: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable78: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable79: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable80: \ 00000000 ........ DC32 suc_config_name \ In segment CODE, align 4, keep-with-next \ ??DataTable81: \ 00000000 ........ DC32 suc_config_name_mod \ In segment CODE, align 4, keep-with-next \ ??DataTable82: \ 00000000 ........ DC32 janis \ In segment CODE, align 4, keep-with-next \ ??DataTable83: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable85: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable87: \ 00000000 ........ DC32 S_ICONS + 780 \ In segment CODE, align 4, keep-with-next \ ??DataTable89: \ 00000000 ........ DC32 isLogStatusChange \ In segment CODE, align 4, keep-with-next \ ??DataTable90: \ 00000000 ........ DC32 total_xstatuses \ In segment CODE, align 4, keep-with-next \ ??DataTable91: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable93: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable94: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable95: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable98: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable101: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable102: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable104: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable105: \ 00000000 ........ DC32 ignor_list \ In segment CODE, align 4, keep-with-next \ ??DataTable106: \ 00000000 ........ DC32 extended_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable107: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable108: \ 00000000 ........ DC32 janis \ In segment CODE, align 4, keep-with-next \ ??DataTable109: \ 00000000 ........ DC32 main_count \ In segment CODE, align 4, keep-with-next \ ??DataTable111: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable112: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable114: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable115: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable116: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable126: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable127: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable128: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable130: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable131: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable132: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable133: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable134: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable135: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable136: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable137: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable143: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable146: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable148: \ 00000000 ........ DC32 CmdMenuHeader \ In segment CODE, align 4, keep-with-next \ ??DataTable149: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable150: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable152: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable155: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable156: \ 00000000 ........ DC32 main_count \ In segment CODE, align 4, keep-with-next \ ??DataTable157: \ 00000000 ........ DC32 main2_count \ In segment CODE, align 4, keep-with-next \ ??DataTable158: \ 00000000 ........ DC32 ignor_list \ In segment CODE, align 4, keep-with-next \ ??DataTable159: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable160: \ 00000000 ........ DC32 awayMsg \ In segment CODE, align 4, keep-with-next \ ??DataTable165: \ 00000000 ........ DC32 PopupFont \ In segment CODE, align 4, keep-with-next \ ??DataTable166: \ 00000000 ........ DC32 NumStatusToIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable167: \ 00000000 ........ DC32 PopupBGCl \ In segment CODE, align 4, keep-with-next \ ??DataTable169: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable172: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable173: \ 00000000 ........ DC32 isLogStatusChange \ In segment CODE, align 4, keep-with-next \ ??DataTable174: \ 00000000 ........ DC32 extended_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable175: \ 00000000 ........ DC32 TIME_OR_MSG \ In segment CODE, align 4, keep-with-next \ ??DataTable176: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable177: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable178: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable181: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable182: \ 00000000 ........ DC32 main_count \ In segment CODE, align 4, keep-with-next \ ??DataTable189: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable191: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable193: \ 00000000 ........ DC32 addonuin \ In segment CODE, align 4, keep-with-next \ ??DataTable197: \ 00000000 ........ DC32 PASS \ In segment CODE, align 4, keep-with-next \ ??DataTable200: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable202: \ 00000000 ........ DC32 total_xstatuses \ In segment CODE, align 4, keep-with-next \ ??DataTable205: \ 00000000 ........ DC32 IsInvertSoftKey \ In segment CODE, align 4, keep-with-next \ ??DataTable207: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable211: \ 00000000 ........ DC32 process_active_timer \ In segment CODE, align 4, keep-with-next \ ??DataTable212: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable214: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable215: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable217: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable219: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable220: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable221: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable222: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable223: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable228: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable229: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable230: \ 00000000 ........ DC32 showAwayIdle \ In segment CODE, align 4, keep-with-next \ ??DataTable231: \ 00000000 ........ DC32 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable233: \ 00000000 ........ DC32 suc_config_name_mod \ In segment CODE, align 4, keep-with-next \ ??DataTable237: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable238: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable239: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable240: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable243: \ 00000000 ........ DC32 PASS \ In segment CODE, align 4, keep-with-next \ ??DataTable244: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable245: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable246: \ 00000000 ........ DC32 ClearSendQ \ In segment CODE, align 4, keep-with-next \ ??DataTable247: \ 00000000 ........ DC32 NumStatusToIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable249: \ 00000000 ........ DC32 ShowStatusIcon \ In segment CODE, align 4, keep-with-next \ ??DataTable253: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable254: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable255: \ 00000000 ........ DC32 suc_config_name \ In segment CODE, align 4, keep-with-next \ ??DataTable256: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable257: \ 00000000 ........ DC32 fontpath \ In segment CODE, align 4, keep-with-next \ ??DataTable258: \ 00000000 ........ DC32 bgrColor \ In segment CODE, align 4, keep-with-next \ ??DataTable259: \ 00000000 ........ DC32 fontColor \ In segment CODE, align 4, keep-with-next \ ??DataTable260: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable261: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable262: \ 00000000 ........ DC32 Pinger2 \ In segment CODE, align 4, keep-with-next \ ??DataTable263: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable265: \ 00000000 ........ DC32 S_ICONS + 780 \ In segment CODE, align 4, keep-with-next \ ??DataTable267: \ 00000000 ........ DC32 IsMultiBuffer \ In segment CODE, align 4, keep-with-next \ ??DataTable269: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable270: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable271: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable272: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable274: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable277: \ 00000000 ........ DC32 main2_count \ In segment CODE, align 4, keep-with-next \ ??DataTable278: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable279: \ 00000000 ........ DC32 IsMultiBuffer \ In segment CODE, align 4, keep-with-next \ ??DataTable281: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable282: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable283: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable284: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable285: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable286: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable289: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable290: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable293: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable294: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable297: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable299: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable300: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable301: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable302: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable304: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable310: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable311: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable312: \ 00000000 ........ DC32 S_ICONS + 740 \ In segment CODE, align 4, keep-with-next \ ??DataTable313: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable314: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable315: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable316: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable317: \ 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 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000238 00000000 DC32 0 \ `?`: \ 0000023C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000240 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000244 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000248 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000024C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000250 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000254 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000258 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000025C 00000000 DC8 0, 0, 0, 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 DC32 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 DC32 0 \ `?`: \ 00000294 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000298 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000029C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 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 DC8 0, 0, 0, 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 F6FFFFFF DC32 -10 \ `?`: \ 000002E4 00000000 DC32 0 \ `?`: \ 000002E8 FFFFFFFF DC32 -1 \ `?`: \ 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 DC32 0 \ `?`: \ 00000300 00000000 DC32 0H \ `?`: \ 00000304 01000000 DC32 1 \ `?`: \ 00000308 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000030C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000310 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000314 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000318 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000031C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000320 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000324 00000000 DC32 0 \ `?`: \ 00000328 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000032C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000330 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000340 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000350 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000360 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000370 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000380 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000390 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000394 01000000 DC32 1 \ `?`: \ 00000398 01000000 DC32 1 \ `?`: \ 0000039C 00000000 DC32 0 \ `?`: \ 000003A0 03000000 DC32 3 \ `?`: \ 000003A4 00000000 DC32 0 \ `?`: \ 000003A8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003AC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003CC 00000000 DC32 0 \ `?`: \ 000003D0 01000000 DC32 1 \ `?`: \ 000003D4 00000000 DC32 0 \ `?`: \ 000003D8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000040C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000041C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000042C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000043C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000044C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000045C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000046C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000047C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000048C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000049C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000050C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000051C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000052C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000053C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000054C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000055C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000056C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000057C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000058C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000059C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000005BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000005FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000060C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000061C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000062C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000063C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000064C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000065C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000066C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000067C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000068C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000069C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000070C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000071C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000072C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000073C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000074C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000075C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000076C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000077C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000078C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000079C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000080C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000081C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000082C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000083C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000084C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000085C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000086C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000087C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000088C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000089C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000090C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000091C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000092C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000093C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000094C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000095C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000096C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000097C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000098C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000099C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ABC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ACC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ADC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ECC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000100C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000101C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000102C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000103C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000104C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000105C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000106C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000107C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000108C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000109C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000110C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000111C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000112C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000113C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000114C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000115C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000116C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000117C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000118C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000119C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000120C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000121C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000122C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000123C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000124C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000125C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000126C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000127C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000128C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000129C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000130C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000131C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000132C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000133C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000134C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000135C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000136C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000137C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000138C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000139C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000140C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000141C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000142C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000143C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000144C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000145C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000146C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000147C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000148C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000149C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000150C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000151C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000152C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000153C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000154C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000155C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000156C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000157C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000158C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000159C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000015FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000160C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000161C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000162C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000163C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000164C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000165C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000166C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000167C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000168C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000169C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000170C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000171C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000172C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000173C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000174C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000175C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000176C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000177C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000178C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000179C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000180C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000181C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00001824 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001834 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001844 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001854 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001864 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001874 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001884 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001894 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001904 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001914 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001924 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001934 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001944 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001954 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001964 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001974 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001984 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001994 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001AD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001AE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001B64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001BA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001C24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001CA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00001CB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001CE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001D10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001D40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001D70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001DA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001DB0 53656E64696E DC8 "Sending online time..." \ 67206F6E6C69 \ 6E652074696D \ 652E2E2E00 \ 00001DC7 00 DC8 0 \ `?`: \ 00001DC8 53656E64696E DC8 "Sending msg info..." \ 67206D736720 \ 696E666F2E2E \ 2E00 \ `?`: \ 00001DDC 53656E64696E DC8 "Sending battery info..." \ 672062617474 \ 65727920696E \ 666F2E2E2E00 \ `?`: \ 00001DF4 53656E64696E DC8 "Sending mod info..." \ 67206D6F6420 \ 696E666F2E2E \ 2E00 \ `?`: \ 00001E08 53656E64696E DC8 "Sending offline info..." \ 67206F66666C \ 696E6520696E \ 666F2E2E2E00 \ `?`: \ 00001E20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001ED0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00001F28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001F48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001F88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001F98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001FA8 FFFFFF64 DC8 255, 255, 255, 100 \ `?`: \ 00001FAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FDC 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 \ `?`: \ 0000001C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 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 \ 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 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 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 4A756C202035 DC8 "Jul 5 2008" \ 203230303800 \ 00000058 32303A30363A DC8 "20:06:21" \ 323100 \ 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: NEW\333GOLD" \ 726D3A204E45 \ 57DB474F4C44 \ 00 \ 0000008F 00 DC8 0 \ 00000090 C2F0E5ECFF20 DC8 0C2H, 0F0H, 0E5H, 0ECH, 0FFH, 20H, 0E2H, 20H \ E220 \ 00000098 EEEDEBE0E9ED DC8 0EEH, 0EDH, 0EBH, 0E0H, 0E9H, 0EDH, 3AH, 20H \ 3A20 \ 000000A0 253032643A25 DC8 25H, 30H, 32H, 64H, 3AH, 25H, 30H, 32H \ 3032 \ 000000A8 643A25303264 DC8 64H, 3AH, 25H, 30H, 32H, 64H, 20H, 0DH \ 200D \ 000000B0 0AD1E5F0E2E5 DC8 0AH, 0D1H, 0E5H, 0F0H, 0E2H, 0E5H, 0F0H, 3AH \ F03A \ 000000B8 202573200D0A DC8 20H, 25H, 73H, 20H, 0DH, 0AH, 25H, 73H \ 2573 \ 000000C0 200D0A00 DC8 20H, 0DH, 0AH, 0 \ 000000C4 CEF2EFF0E0E2 DC8 0CEH, 0F2H, 0EFH, 0F0H, 0E0H, 0E2H, 0EBH, 0E5H \ EBE5 \ 000000CC EDEE20F1EEEE DC8 0EDH, 0EEH, 20H, 0F1H, 0EEH, 0EEH, 0E1H, 0F9H \ E1F9 \ 000000D4 E5EDE8E93A20 DC8 0E5H, 0EDH, 0E8H, 0E9H, 3AH, 20H, 25H, 64H \ 2564 \ 000000DC 200D0ACFF0E8 DC8 20H, 0DH, 0AH, 0CFH, 0F0H, 0E8H, 0EDH, 0FFH \ EDFF \ 000000E4 F2EE20F1EEEE DC8 0F2H, 0EEH, 20H, 0F1H, 0EEH, 0EEH, 0E1H, 0F9H \ E1F9 \ 000000EC E5EDE8E93A20 DC8 0E5H, 0EDH, 0E8H, 0E9H, 3AH, 20H, 25H, 64H \ 2564 \ 000000F4 200D0A00 DC8 20H, 0DH, 0AH, 0 \ 000000F8 CEEFE5F0E0F2 DC8 "\316\357\345\360\340\362\356\360: %s \015\012" \ EEF03A202573 \ 200D0A00 \ 00000108 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 \ 00000127 00 DC8 0 \ 00000128 547261666669 DC8 54H, 72H, 61H, 66H, 66H, 69H, 63H, 3AH \ 633A \ 00000130 205278203A20 DC8 20H, 52H, 78H, 20H, 3AH, 20H, 25H, 64H \ 2564 \ 00000138 62205478203A DC8 62H, 20H, 54H, 78H, 20H, 3AH, 20H, 25H \ 2025 \ 00000140 646220517565 DC8 64H, 62H, 20H, 51H, 75H, 65H, 75H, 65H \ 7565 \ 00000148 3A2025646220 DC8 3AH, 20H, 25H, 64H, 62H, 20H, 0DH, 0AH \ 0D0A \ 00000150 54696D653A20 DC8 54H, 69H, 6DH, 65H, 3AH, 20H, 25H, 30H \ 2530 \ 00000158 32643A253032 DC8 32H, 64H, 3AH, 25H, 30H, 32H, 64H, 0DH \ 640D \ 00000160 0A4F6E6C696E DC8 0AH, 4FH, 6EH, 6CH, 69H, 6EH, 65H, 20H \ 6520 \ 00000168 636F6E746163 DC8 63H, 6FH, 6EH, 74H, 61H, 63H, 74H, 3AH \ 743A \ 00000170 202564205B74 DC8 20H, 25H, 64H, 20H, 5BH, 74H, 6FH, 74H \ 6F74 \ 00000178 616C3A202564 DC8 61H, 6CH, 3AH, 20H, 25H, 64H, 5DH, 20H \ 5D20 \ 00000180 0D0A556E7265 DC8 0DH, 0AH, 55H, 6EH, 72H, 65H, 61H, 64H \ 6164 \ 00000188 206D65737361 DC8 20H, 6DH, 65H, 73H, 73H, 61H, 67H, 65H \ 6765 \ 00000190 3A2025642F25 DC8 3AH, 20H, 25H, 64H, 2FH, 25H, 64H, 20H \ 6420 \ 00000198 00 DC8 0 \ 00000199 000000 DC8 0, 0, 0 \ 0000019C 53656E64696E DC8 "Sending textinfo..." \ 672074657874 \ 696E666F2E2E \ 2E00 \ 000001B0 5F5F54455854 DC8 "__TEXTINFO" \ 494E464F00 \ 000001BB 00 DC8 0 \ 000001BC 5F5F544900 DC8 "__TI" \ 000001C1 000000 DC8 0, 0, 0 \ 000001C4 54696D653A20 DC8 "Time: %02d:%02d" \ 253032643A25 \ 30326400 \ 000001D4 53656E64696E DC8 "Sending time..." \ 672074696D65 \ 2E2E2E00 \ 000001E4 5F5F54494D45 DC8 "__TIME" \ 00 \ 000001EB 00 DC8 0 \ 000001EC 4745545F5449 DC8 "GET_TIME" \ 4D4500 \ 000001F5 000000 DC8 0, 0, 0 \ 000001F8 2573206D6F64 DC8 "%s model: %s sw: %s" \ 656C3A202573 \ 2073773A2025 \ 7300 \ 0000020C 53656E64696E DC8 "Sending platform info..." \ 6720706C6174 \ 666F726D2069 \ 6E666F2E2E2E \ 00 \ 00000225 000000 DC8 0, 0, 0 \ 00000228 4745545F504C DC8 "GET_PLATFORM_INFO" \ 4154464F524D \ 5F494E464F00 \ 0000023A 0000 DC8 0, 0 \ 0000023C 5F5F504C4154 DC8 "__PLATFORM" \ 464F524D00 \ 00000247 00 DC8 0 \ 00000248 5F5F485700 DC8 "__HW" \ 0000024D 000000 DC8 0, 0, 0 \ 00000250 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 \ 0000027B 00 DC8 0 \ 0000027C 4745545F4F4E DC8 "GET_ONLINE_TIME" \ 4C494E455F54 \ 494D4500 \ 0000028C 5F5F4F4E4C49 DC8 "__ONLINE" \ 4E4500 \ 00000295 000000 DC8 0, 0, 0 \ 00000298 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 \ 000002C8 4745545F4D53 DC8 "GET_MSG_INFO" \ 475F494E464F \ 00 \ 000002D5 000000 DC8 0, 0, 0 \ 000002D8 5F5F4D534700 DC8 "__MSG" \ 000002DE 0000 DC8 0, 0 \ 000002E0 CEEFE5F0E0F2 DC8 "\316\357\345\360\340\362\356\360: %s" \ EEF03A202573 \ 00 \ 000002ED 000000 DC8 0, 0, 0 \ 000002F0 53656E64696E DC8 "Sending provider name..." \ 672070726F76 \ 69646572206E \ 616D652E2E2E \ 00 \ 00000309 000000 DC8 0, 0, 0 \ 0000030C 4745545F5052 DC8 "GET_PROVIDER" \ 4F5649444552 \ 00 \ 00000319 000000 DC8 0, 0, 0 \ 0000031C 5F5F50524F56 DC8 "__PROVIDER" \ 4944455200 \ 00000327 00 DC8 0 \ 00000328 2A2A2A416363 DC8 "***Access denied***" \ 657373206465 \ 6E6965642A2A \ 2A00 \ 0000033C 4745545F4D4F DC8 "GET_MOD_INFO" \ 445F494E464F \ 00 \ 00000349 000000 DC8 0, 0, 0 \ 0000034C 5F5F4D4F4400 DC8 "__MOD" \ 00000352 0000 DC8 0, 0 \ 00000354 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 \ 00000370 4745545F4241 DC8 "GET_BAT_INFO" \ 545F494E464F \ 00 \ 0000037D 000000 DC8 0, 0, 0 \ 00000380 5F5F42415400 DC8 "__BAT" \ 00000386 0000 DC8 0, 0 \ 00000388 726576697369 DC8 "revision 2058, mod date: %s at %s " \ 6F6E20323035 \ 382C206D6F64 \ 20646174653A \ 202573206174 \ 2025732000 \ 000003AB 00 DC8 0 \ 000003AC 687474703A2F DC8 "http://kluchnik.jino-net.ru/naticqmod/" \ 2F6B6C756368 \ 6E696B2E6A69 \ 6E6F2D6E6574 \ 2E72752F6E61 \ 746963716D6F \ 642F00 \ 000003D3 00 DC8 0 \ 000003D4 53656E64696E DC8 "Sending url info..." \ 672075726C20 \ 696E666F2E2E \ 2E00 \ 000003E8 4745545F5552 DC8 "GET_URL_INFO" \ 4C5F494E464F \ 00 \ 000003F5 000000 DC8 0, 0, 0 \ 000003F8 5F5F55524C00 DC8 "__URL" \ 000003FE 0000 DC8 0, 0 \ 00000400 C0E2F2EEEEF2 DC8 "\300\342\362\356\356\362\342\345\362\367\350\352: %s %s! %s %s" \ E2E5F2F7E8EA \ 3A2025732025 \ 732120257320 \ 257300 \ 0000041B 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 C2FBE1EEF000 DC8 "\302\373\341\356\360" \ 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 25735C746D70 DC8 "%s\\tmp%u.url" \ 25752E75726C \ 00 \ 0000000D 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 C7E0EAF0FBF2 DC8 "\307\340\352\360\373\362\374" \ FC00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CEEFF6E8E800 DC8 "\316\357\366\350\350" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 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 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 ChangeAutoMsg 4 ChangeShowXstatus 4 ChangeSound 4 ChangeSoundContact 4 ChangeVibra 4 ChangeVibraContact 4 CheckComand 636 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 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 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 180 RecountMenu 20 Remind_Timer2 8 Reminder_timer 4 RemoveLOGQ 4 ReqAddMsgToChat 16 RequestXText 8 SMART_REDRAW 8 SaveAnswer 12 ScreenSaverTimer 16 SendAnswer 28 SendAuthGrant 44 SendAuthReq 48 SendData 16 SendMSGACK 8 SetIconBarHandler 0 SetIndividStatus 0 UpdateCLheader 192 UpdateCSMname 4 UptimeMinHour 0 WriteDefSettings 176 addIconBar 16 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 348 end_socket 8 free_ICONS 16 get_answer 1096 init_time_zone 4 input_awaymsg_ghook 4 input_awaymsg_locret 0 input_awaymsg_onkey 72 main 64 maincsm_onclose 8 maincsm_oncreate 20 maincsm_onmessage 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 48 Pinger2 144 SMART_REDRAW 48 ScreenSaverTimer 132 timeh 4 timemin 4 FreeXText2 36 away_timer 420 init_time_zone 356 AutoChangeStatus_timer 1072 DrawPing 80 Remind_Timer2 68 Reminder_timer 32 UptimeMinHour 64 upTime 156 DrawOnlineTime 148 DrawAutoMSG 140 input_awaymsg_onkey 256 input_awaymsg_ghook 68 input_awaymsg_locret 4 InputAwayMsg 316 setup_ICONS 68 free_ICONS 44 IlluminationOff 56 IlluminationOn 120 ReadDefSettings 616 WriteDefSettings 620 Play 304 start_vibra 100 stop_vibra 88 start_vibra2 60 stop_vibra2 88 ChangeVibra 56 ChangeSound 56 FreeTemplates 56 LoadTemplates 396 RXbuf 16392 TXbuf 16392 ElfKiller 28 NewLOGQ 52 LastLOGQ 36 FreeLOGQ 48 RemoveLOGQ 52 AddLOGQ 44 GetLastXTextLOGQ 72 GetIconIndex 228 FindContactLOGQByAck 88 CreateCLFile 236 new_redraw 136 UpdateCLheader 1460 ClearContactT9Key 24 AddContactT9Key 44 BackSpaceContactT9 44 create_contactlist_menu 76 contactlist_menu_ghook 184 RecountMenu 160 ChangeVibraContact 44 ChangeSoundContact 44 ChangeAutoMsg 44 ChangeShowXstatus 44 contact_list_ghook 20 contact_keyhook 76 contacthandler 196 CreateContactMenu 136 LongPressActionOnChat 852 LongPressAction 236 contactlist_menu_onkey 1116 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 1544 AddToMain 564 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 80 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 2868 INC_Nick 32 show_on_contact 360 show_pp_sender 432 Get_Online_total 92 SetIndividStatus 76 ProcessPacket 2948 process_active_timer 144 OneSecTmr 96 DrawList 560 MoveUp 116 MoveDown 96 Enter 144 method0 1272 method1 44 method2 36 method3 24 method4 20 method5 448 method8 8 method9 8 my_keyhook 92 Canvas 1340 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 304 maincsm_onclose 344 do_reconnect 40 CheckDoubleRun 132 checkGui 76 maincsm_onmessage 3172 addIconBar 328 minus11 4 maincsm_name_body 280 UpdateCSMname 36 SetIconBarHandler 20 main 448 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 1548 my_ed_redraw 108 edchat_ghook 544 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 8172 sk 8 input_awaymsg_sk 24 input_awaymsg_skt 8 prozr 4 icon_array 92 CmdMenuHeader 32 clrBlack 4 ecmenu_HDR 64 ec_menu 332 AskNickAndAddContact 8 AddSmile 24 ??DataTable1 4 ??DataTable2 4 ??DataTable4 4 ??DataTable7 4 ??DataTable14 4 ??DataTable17 4 ??DataTable22 4 ??DataTable23 4 ??DataTable24 4 ??DataTable25 4 ??DataTable27 4 ??DataTable28 4 ??DataTable31 4 ??DataTable36 4 ??DataTable37 4 ??DataTable39 4 ??DataTable45 4 ??DataTable48 4 ??DataTable54 4 ??DataTable55 4 ??DataTable56 4 ??DataTable57 4 ??DataTable58 4 ??DataTable66 4 ??DataTable67 4 ??DataTable72 4 ??DataTable75 4 ??DataTable76 4 ??DataTable77 4 ??DataTable78 4 ??DataTable79 4 ??DataTable80 4 ??DataTable81 4 ??DataTable82 4 ??DataTable83 4 ??DataTable85 4 ??DataTable87 4 ??DataTable89 4 ??DataTable90 4 ??DataTable91 4 ??DataTable93 4 ??DataTable94 4 ??DataTable95 4 ??DataTable98 4 ??DataTable101 4 ??DataTable102 4 ??DataTable104 4 ??DataTable105 4 ??DataTable106 4 ??DataTable107 4 ??DataTable108 4 ??DataTable109 4 ??DataTable111 4 ??DataTable112 4 ??DataTable114 4 ??DataTable115 4 ??DataTable116 4 ??DataTable126 4 ??DataTable127 4 ??DataTable128 4 ??DataTable130 4 ??DataTable131 4 ??DataTable132 4 ??DataTable133 4 ??DataTable134 4 ??DataTable135 4 ??DataTable136 4 ??DataTable137 4 ??DataTable143 4 ??DataTable146 4 ??DataTable148 4 ??DataTable149 4 ??DataTable150 4 ??DataTable152 4 ??DataTable155 4 ??DataTable156 4 ??DataTable157 4 ??DataTable158 4 ??DataTable159 4 ??DataTable160 4 ??DataTable165 4 ??DataTable166 4 ??DataTable167 4 ??DataTable169 4 ??DataTable172 4 ??DataTable173 4 ??DataTable174 4 ??DataTable175 4 ??DataTable176 4 ??DataTable177 4 ??DataTable178 4 ??DataTable181 4 ??DataTable182 4 ??DataTable189 4 ??DataTable191 4 ??DataTable193 4 ??DataTable197 4 ??DataTable200 4 ??DataTable202 4 ??DataTable205 4 ??DataTable207 4 ??DataTable211 4 ??DataTable212 4 ??DataTable214 4 ??DataTable215 4 ??DataTable217 4 ??DataTable219 4 ??DataTable220 4 ??DataTable221 4 ??DataTable222 4 ??DataTable223 4 ??DataTable228 4 ??DataTable229 4 ??DataTable230 4 ??DataTable231 4 ??DataTable233 4 ??DataTable237 4 ??DataTable238 4 ??DataTable239 4 ??DataTable240 4 ??DataTable243 4 ??DataTable244 4 ??DataTable245 4 ??DataTable246 4 ??DataTable247 4 ??DataTable249 4 ??DataTable253 4 ??DataTable254 4 ??DataTable255 4 ??DataTable256 4 ??DataTable257 4 ??DataTable258 4 ??DataTable259 4 ??DataTable260 4 ??DataTable261 4 ??DataTable262 4 ??DataTable263 4 ??DataTable265 4 ??DataTable267 4 ??DataTable269 4 ??DataTable270 4 ??DataTable271 4 ??DataTable272 4 ??DataTable274 4 ??DataTable277 4 ??DataTable278 4 ??DataTable279 4 ??DataTable281 4 ??DataTable282 4 ??DataTable283 4 ??DataTable284 4 ??DataTable285 4 ??DataTable286 4 ??DataTable289 4 ??DataTable290 4 ??DataTable293 4 ??DataTable294 4 ??DataTable297 4 ??DataTable299 4 ??DataTable300 4 ??DataTable301 4 ??DataTable302 4 ??DataTable304 4 ??DataTable310 4 ??DataTable311 4 ??DataTable312 4 ??DataTable313 4 ??DataTable314 4 ??DataTable315 4 ??DataTable316 4 ??DataTable317 4 ? 8172 ? 8 ? 24 ? 8 ? 4 ? 92 ? 32 ? 4 ? 396 ? 32 ? 16 ? 3 ? 16 ? 60 ? 12 ? 4 ? 4 ? 4 ? 4 ? 4 ? 2 ? 40 ? 12 ? 3 ? 8 ? 64 ? 12 ? 132 ? 4 ? 1052 ? 4 ? 8 ?_1 8 ? 3 ? 8 ? 12 ? 92 ? 164 ? 16 ? 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 ? 1 ? 100 Others 1180 46 548 bytes in segment CODE 5 666 bytes in segment DATA_C 8 344 bytes in segment DATA_I 8 344 bytes in segment DATA_ID 33 108 bytes in segment DATA_Z 24 bytes in segment INITTAB 45 344 bytes of CODE memory (+ 1 228 bytes shared) 14 010 bytes of CONST memory 41 452 bytes of DATA memory Errors: none Warnings: none