############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 19/Dec/2010 16:45:14 # # 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 --preprocess D:\pasha\elf\_MY_PROJECT_\nati # # cq_mod\Release\List\ -lC D:\pasha\elf\_MY_PROJECT_\n # # aticq_mod\Release\List\ -o # # D:\pasha\elf\_MY_PROJECT_\naticq_mod\Release\Obj\ # # -s9 --no_unroll --cpu_mode arm --endian little # # --cpu ARM926EJ-S --stack_align 4 --interwork # # --separate_cluster_for_initialized_variables -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\Release\List\ma # # in.lst # # Object file = D:\pasha\elf\_MY_PROJECT_\naticq_mod\Release\Obj\mai # # n.r79 # # # # # ############################################################################## D:\pasha\elf\_MY_PROJECT_\naticq_mod\main.c 1 #include "../inc/swilib.h" 2 #include "../inc/cfg_items.h" 3 #include "../inc/pnglist.h" 4 #include "configs.h" 5 #include "NatICQ.h" 6 #include "history.h" 7 #include "conf_loader.h" 8 #include "mainmenu.h" 9 #include "main.h" 10 #include "language.h" 11 #include "../inc/xtask_ipc.h" 12 #include "smiles.h" 13 #include "naticq_ipc.h" 14 #include "status_change.h" 15 #include "strings.h" 16 #include "manage_cl.h" 17 #include "cl_work.h" 18 #include "select_smile.h" 19 #include "revision.h" 20 #include "print.h" 21 #ifdef NEWSGOLD 22 #include "screen_save.h" 23 #include "player_tags.h" 24 #endif 25 #include "swilib2.h" 26 #include "rect_patcher.h" \ In segment CODE, align 4, keep-with-next \ __??Code32?? __code __interwork __atpcs void patch_header(HEADER_DESC const *) \ patch_header: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0000A0E3 MOV R0,#+0 \ 0000000C B000C4E1 STRH R0,[R4, #+0] \ 00000010 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 #include "auth.h" 29 30 extern int *XStatusesIconArray; 31 32 #ifndef NEWSGOLD 33 #define SEND_TIMER 34 #endif 35 36 #define IN_TICKS(sec) (sec * TMR_SECOND) 37 38 39 //------------- ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ -------------// 40 41 int main_d; 42 int align=0; 43 //int space=1; 44 void *canvasdata; 45 int paused_height; 46 WSHDR *wsBuffer;//мультибуффер 47 48 char talk_sound[128]; 49 int uins; 50 //char m_1[]="unofficial! private use only"; 51 //char m_2[]="mod by (c)Evilfox 315384924"; 52 char unread_msg_info[64]; 53 54 int saver_on; 55 56 #ifdef NEWSGOLD 57 extern char teast2[256]; 58 #endif 59 60 //#ifdef ELKA 61 char last_msg_buffer[4096]; 62 //#endif 63 64 //-------------------------------------------------// 65 66 67 68 //-------------------- AUTOPING -------------------// 69 70 GBSTMR ping_tmr; 71 static void PingToServer2(void) 72 { 73 TPKT *p; 74 p=malloc(sizeof(PKT)+sizeof(TTime)); 75 GetDateTime(NULL,(TTime *)p->data); 76 p->pkt.uin=0; 77 p->pkt.type=T_ECHO; 78 p->pkt.data_len=sizeof(TTime); 79 SUBPROC((void *)SendAnswer,0,p); 80 } 81 82 int Is_PING_On; 83 \ In segment CODE, align 4, keep-with-next 84 void Pinger2() 85 { 86 if(Is_PING_On) \ Pinger2: \ 00000000 ........ LDR R0,??DataTable30 ;; S_ICONS \ 00000004 70402DE9 PUSH {R4-R6,LR} \ 00000008 ........ LDR R5,??DataTable1 ;; Pinger2 \ 0000000C 6410A0E3 MOV R1,#+100 \ 00000010 541D81E3 ORR R1,R1,#0x1500 \ 00000014 004081E0 ADD R4,R1,R0 \ 00000018 040290E5 LDR R0,[R0, #+516] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1500000A BEQ ??Pinger2_0 87 { 88 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 89 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} 90 } 91 else 92 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 93 } \ 0000008C 7080BDE8 POP {R4-R6,PC} ;; return 94 95 //-------------------------------------------------// 96 97 98 99 extern volatile int total_smiles; 100 extern volatile int total_xstatuses; 101 extern volatile int xstatuses_load; 102 extern volatile int pictures_max; //2026rev 103 extern volatile int pictures_loaded; //2026rev 104 105 #ifdef ELKA 106 int Is_SLI_On;//мигаем светодиодом 107 #endif 108 109 int Is_SMARTCPU_On;//Вывод сообщений на гэ 110 int Is_INC_On;//Popup message 111 int Is_ILU_On;//Режим подсветки 112 int Is_Double_Vibra_On;//Режим напоминания 113 int total_unread; 114 int total_unread2; 115 116 #ifdef ELKA 117 const int SLI_TYPE=1; 118 #endif 119 120 char PINGO[256]; 121 122 #ifdef ELKA 123 extern const unsigned int SLI_time; 124 extern const unsigned int SLI_time2; 125 #endif 126 #define USE_MLMENU 127 128 #define TMR_SECOND 216 129 130 //IPC 131 const char ipc_my_name[32]=IPC_NATICQ_NAME; 132 const char ipc_xtask_name[]=IPC_XTASK_NAME; 133 const char ipc_test_name[]="test"; 134 IPC_REQ gipc; 135 136 137 char elf_path[256]; 138 int maincsm_id; 139 int maingui_id; 140 \ In segment CODE, align 4, keep-with-next 141 void SMART_REDRAW(void) 142 { \ SMART_REDRAW: \ 00000000 10402DE9 PUSH {R4,LR} 143 int f; 144 LockSched(); \ 00000004 460100EF SWI +326 145 f=IsGuiOnTop(maingui_id); \ 00000008 1C009FE5 LDR R0,??SMART_REDRAW_0 ;; S_ICONS + 544 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 350100EF SWI +309 \ 00000014 0040A0E1 MOV R4,R0 146 UnlockSched(); \ 00000018 470100EF SWI +327 147 if (f) REDRAW(); \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} \ 00000024 720100EF SWI +370 148 } \ 00000028 1080BDE8 POP {R4,PC} ;; return \ ??SMART_REDRAW_0: \ 0000002C ........ DC32 S_ICONS + 544 149 150 //По 10 секунд 151 #define ACTIVE_TIME 360 152 153 //Максимальное количество сообщений в логе 154 #define MAXLOGMSG (20) 155 156 // Строковые описания статусов 157 158 const char S_OFFLINE[]="Offline"; 159 const char S_INVISIBLE[]="Invisible"; 160 const char S_AWAY[]="Away"; 161 const char S_NA[]="N/A"; 162 const char S_OCCUPIED[]="Occupied"; 163 const char S_DND[]="DND"; 164 const char S_ONLINE[]="Online"; 165 const char S_FFC[]="FFC"; 166 167 volatile int SENDMSGCOUNT; 168 #ifdef kluchnik 169 int IsActiveUp=1; 170 #else 171 int IsActiveUp=0; 172 #endif 173 int Is_Vibra_Enabled; 174 int Is_Id3tag_Enabled; 175 unsigned int Is_Sounds_Enabled; 176 int Is_Show_Offline; 177 int Is_Show_Groups; 178 179 int S_ICONS[TOTAL_ICONS+1]; 180 181 #define EOP -10 182 int CurrentStatus; 183 int CurrentXStatus; 184 185 WSHDR *ews; 186 187 static const char * const icons_names[TOTAL_ICONS]= 188 { 189 "offline.png", 190 "invisible.png", 191 "away.png", 192 "na.png", 193 "occupied.png", 194 "dnd.png", 195 "depression.png", 196 "evil.png", 197 "home.png", 198 "lunch.png", 199 "work.png", 200 "online.png", 201 "ffc.png", 202 "message.png", 203 "unknown.png", 204 "groupon.png", 205 "groupoff.png", 206 "null.png", 207 "addcont.png", 208 "head.png", 209 "logo.png", 210 "ping.png", 211 "settings.png", 212 "vis1.png", 213 "vis2.png", 214 "vis3.png", 215 "vis4.png", 216 "vis5.png" 217 }; 218 219 220 221 222 //------------------------ SCREEN SAVER TIMER ---------------------------// 223 224 #ifdef NEWSGOLD 225 GBSTMR scrsTmr; 226 int scrsTime; \ In segment CODE, align 4, keep-with-next 227 void ScreenSaverTimer() 228 { \ ScreenSaverTimer: \ 00000000 70402DE9 PUSH {R4-R6,LR} 229 if(scrsTime==screenSaverTime) \ 00000004 ........ LDR R4,??DataTable30 ;; S_ICONS \ 00000008 68609FE5 LDR R6,??ScreenSaverTimer_0 ;; ScreenSaverTimer \ 0000000C 3C1294E5 LDR R1,[R4, #+572] \ 00000010 7400A0E3 MOV R0,#+116 \ 00000014 580D80E3 ORR R0,R0,#0x1600 \ 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 230 { 231 scrsTime=screenSaverTime;//на всякий случай \ 0000002C 3C0284E5 STR R0,[R4, #+572] 232 CloseScreensaver(); \ 00000030 9C0000EF SWI +156 233 DrawScreenSaver(); \ 00000034 200000EF SWI +32 234 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 235 } 236 if(isScreenSaverEna) \ ??ScreenSaverTimer_1: \ 00000048 30009FE5 LDR R0,??ScreenSaverTimer_0+0x8 ;; isScreenSaverEna 237 scrsTime++; 238 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 3C029415 LDRNE R0,[R4, #+572] \ 00000060 401E81E3 ORR R1,R1,#0x400 \ 00000064 01008012 ADDNE R0,R0,#+1 \ 00000068 3C028415 STRNE R0,[R4, #+572] \ 0000006C 0500A0E1 MOV R0,R5 \ 00000070 4D0000EF SWI +77 239 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return \ ??ScreenSaverTimer_0: \ 00000078 ........ DC32 ScreenSaverTimer \ 0000007C ........ DC32 screenSaverTime \ 00000080 ........ DC32 isScreenSaverEna 240 #endif 241 242 243 //-----------------------------------------------------------------------// 244 245 246 int msg_away_timer=0;//Счетчик для автостатуса 247 char away_msg[264];//Само сообщение для ответа 248 char away_msg_time[64];//Время когда сработал таймер 249 char away_msg_time_dace[16];//время отсутвтвия для вывода на идле 250 //char *inp_away_msg2;//Текст сообщения,если будем писать сами(на долгую 6 или VOL_DOWN_BUTTON),а не брать из конфига 251 char tim_zone[16]; 252 int timeh; 253 int timemin; 254 int away_m;//состояние автоответчика 255 int status_rem;//Для сохранения текущего статуса 256 int change_back_status;//вернуть предыдущий статус или нет 257 GBSTMR away_tmr; 258 259 260 int Show_XTX;//Показывать хстатус или время он лайн \ In segment CODE, align 4, keep-with-next 261 void FreeXText2(CLIST *t) 262 { \ FreeXText2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 263 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] 264 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 265 \ In segment CODE, align 4, keep-with-next 266 void away_timer()//Таймер автостатуса 267 { \ away_timer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 ........ LDR R9,??DataTable33 ;; AUTO_ENGADE \ 00000008 ........ LDR R4,??DataTable30 ;; S_ICONS \ 0000000C ........ LDR R10,??DataTable31 ;; MAINCSM \ 00000010 80819FE5 LDR R8,??away_timer_0 ;; `?` \ 00000014 0CD04DE2 SUB SP,SP,#+12 \ 00000018 001099E5 LDR R1,[R9, #+0] \ 0000001C 8C00A0E3 MOV R0,#+140 \ 00000020 5C0D80E3 ORR R0,R0,#0x1700 \ 00000024 045080E0 ADD R5,R0,R4 \ 00000028 500080E3 ORR R0,R0,#0x50 \ 0000002C 046080E0 ADD R6,R0,R4 \ 00000030 1000C0E3 BIC R0,R0,#0x10 \ 00000034 047080E0 ADD R7,R0,R4 \ 00000038 50009AE5 LDR R0,[R10, #+80] \ 0000003C 0C20A0E3 MOV R2,#+12 \ 00000040 920101E0 MUL R1,R2,R1 \ 00000044 010050E1 CMP R0,R1 \ 00000048 1F00001A BNE ??away_timer_1 268 if(msg_away_timer==(AUTO_ENGADE*12)) 269 { 270 TTime tt; 271 GetDateTime(NULL,&tt); \ 0000004C 0D10A0E1 MOV R1,SP \ 00000050 0000A0E3 MOV R0,#+0 \ 00000054 B40000EF SWI +180 272 sprintf(away_msg_time_dace, "%02d:%02d", tt.hour, tt.min); \ 00000058 0130DDE5 LDRB R3,[SP, #+1] \ 0000005C 0020DDE5 LDRB R2,[SP, #+0] \ 00000060 0810A0E1 MOV R1,R8 \ 00000064 0700A0E1 MOV R0,R7 \ 00000068 160000EF SWI +22 273 sprintf(away_msg_time, "( Отсутствую примерно с %02d:%02d [%s] )", tt.hour, tt.min, tim_zone); \ 0000006C 0600A0E1 MOV R0,R6 \ 00000070 01002DE9 PUSH {R0} \ 00000074 0530DDE5 LDRB R3,[SP, #+5] \ 00000078 0420DDE5 LDRB R2,[SP, #+4] \ 0000007C 0C1088E2 ADD R1,R8,#+12 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 160000EF SWI +22 274 away_m=1; 275 if(CurrentStatus!=2 && CurrentStatus!=isAutoStatusOn) \ 00000088 300294E5 LDR R0,[R4, #+560] \ 0000008C 01B0A0E3 MOV R11,#+1 \ 00000090 40B284E5 STR R11,[R4, #+576] \ 00000094 020050E3 CMP R0,#+2 \ 00000098 04D08DE2 ADD SP,SP,#+4 \ 0000009C 0A00000A BEQ ??away_timer_1 \ 000000A0 F4109FE5 LDR R1,??away_timer_0+0x4 ;; isAutoStatusOn \ 000000A4 001091E5 LDR R1,[R1, #+0] \ 000000A8 010050E1 CMP R0,R1 \ 000000AC 0600000A BEQ ??away_timer_1 276 { 277 status_rem=CurrentStatus; \ 000000B0 440284E5 STR R0,[R4, #+580] 278 CurrentStatus=2; \ 000000B4 0200A0E3 MOV R0,#+2 \ 000000B8 300284E5 STR R0,[R4, #+560] 279 set_my_status(); \ 000000BC ........ BL set_my_status 280 #ifdef NEWSGOLD 281 void SetIconBarHandler(); 282 SetIconBarHandler(); \ 000000C0 ........ LDR R0,??DataTable8 ;; addIconBar 283 #endif 284 change_back_status=1; \ 000000C4 48B284E5 STR R11,[R4, #+584] \ 000000C8 44008AE5 STR R0,[R10, #+68] 285 } 286 } 287 288 if( (IsOnNAStatus) && (msg_away_timer==((AUTO_ENGADE*12)+(NAStatusTime*12))) )//Включить переключение на недоступен,в минутах \ ??away_timer_1: \ 000000CC CC009FE5 LDR R0,??away_timer_0+0x8 ;; IsOnNAStatus \ 000000D0 000090E5 LDR R0,[R0, #+0] \ 000000D4 000050E3 CMP R0,#+0 \ 000000D8 2000000A BEQ ??away_timer_2 \ 000000DC C0209FE5 LDR R2,??away_timer_0+0xC ;; NAStatusTime \ 000000E0 001099E5 LDR R1,[R9, #+0] \ 000000E4 002092E5 LDR R2,[R2, #+0] \ 000000E8 50009AE5 LDR R0,[R10, #+80] \ 000000EC 011082E0 ADD R1,R2,R1 \ 000000F0 0C20A0E3 MOV R2,#+12 \ 000000F4 920101E0 MUL R1,R2,R1 \ 000000F8 010050E1 CMP R0,R1 \ 000000FC 1700001A BNE ??away_timer_2 289 { 290 TTime tt; 291 GetDateTime(NULL,&tt); \ 00000100 0D10A0E1 MOV R1,SP \ 00000104 0000A0E3 MOV R0,#+0 \ 00000108 B40000EF SWI +180 292 sprintf(away_msg_time_dace, "%02d:%02d", tt.hour, tt.min); \ 0000010C 0130DDE5 LDRB R3,[SP, #+1] \ 00000110 0020DDE5 LDRB R2,[SP, #+0] \ 00000114 0810A0E1 MOV R1,R8 \ 00000118 0700A0E1 MOV R0,R7 \ 0000011C 160000EF SWI +22 293 sprintf(away_msg_time, "( Недоступен примерно с %02d:%02d [%s] )", tt.hour, tt.min, tim_zone); \ 00000120 40002DE9 PUSH {R6} \ 00000124 0530DDE5 LDRB R3,[SP, #+5] \ 00000128 0420DDE5 LDRB R2,[SP, #+4] \ 0000012C 381088E2 ADD R1,R8,#+56 \ 00000130 0500A0E1 MOV R0,R5 \ 00000134 160000EF SWI +22 294 if(CurrentStatus!=3) \ 00000138 300294E5 LDR R0,[R4, #+560] \ 0000013C 04D08DE2 ADD SP,SP,#+4 \ 00000140 030050E3 CMP R0,#+3 \ 00000144 0500000A BEQ ??away_timer_2 295 { 296 status_rem=CurrentStatus; \ 00000148 440284E5 STR R0,[R4, #+580] 297 CurrentStatus=3; \ 0000014C 0300A0E3 MOV R0,#+3 \ 00000150 300284E5 STR R0,[R4, #+560] 298 set_my_status(); \ 00000154 ........ BL set_my_status 299 #ifdef NEWSGOLD 300 void SetIconBarHandler(); 301 SetIconBarHandler(); \ 00000158 ........ LDR R0,??DataTable8 ;; addIconBar \ 0000015C 44008AE5 STR R0,[R10, #+68] 302 #endif 303 } 304 } 305 306 if(Auto_Status) \ ??away_timer_2: \ 00000160 ........ LDR R0,??DataTable9 ;; Auto_Status 307 msg_away_timer++; 308 GBS_StartTimerProc(&away_tmr, 216*5, away_timer); \ 00000164 3C209FE5 LDR R2,??away_timer_0+0x10 ;; away_timer \ 00000168 000090E5 LDR R0,[R0, #+0] \ 0000016C 3810A0E3 MOV R1,#+56 \ 00000170 000050E3 CMP R0,#+0 \ 00000174 50009A15 LDRNE R0,[R10, #+80] \ 00000178 401E81E3 ORR R1,R1,#0x400 \ 0000017C 01008012 ADDNE R0,R0,#+1 \ 00000180 50008A15 STRNE R0,[R10, #+80] \ 00000184 EC00A0E3 MOV R0,#+236 \ 00000188 5C0D80E3 ORR R0,R0,#0x1700 \ 0000018C 040080E0 ADD R0,R0,R4 \ 00000190 4D0000EF SWI +77 309 } \ 00000194 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return \ ??away_timer_0: \ 00000198 ........ DC32 `?` \ 0000019C ........ DC32 isAutoStatusOn \ 000001A0 ........ DC32 IsOnNAStatus \ 000001A4 ........ DC32 NAStatusTime \ 000001A8 ........ DC32 away_timer 310 311 \ In segment CODE, align 4, keep-with-next 312 void init_time_zone() 313 { 314 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 + 6108 \ 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 315 { 316 case 0: 317 sprintf(tim_zone, "GMT -12:00"); \ ??init_time_zone_2: \ 0000004C 541F81E2 ADD R1,R1,#+336 \ 00000050 030000EA B ??init_time_zone_3 318 break; 319 case 1: 320 sprintf(tim_zone, "GMT -11:00"); \ ??init_time_zone_4: \ 00000054 571F81E2 ADD R1,R1,#+348 \ 00000058 160000EF SWI +22 \ 0000005C 0080BDE8 POP {PC} 321 break; 322 case 2: 323 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} 324 break; 325 case 3: 326 sprintf(tim_zone, "GMT -09:00"); \ ??init_time_zone_6: \ 0000006C 5D1F81E2 ADD R1,R1,#+372 \ 00000070 FBFFFFEA B ??init_time_zone_3 327 break; 328 case 4: 329 sprintf(tim_zone, "GMT -08:00"); \ ??init_time_zone_7: \ 00000074 601F81E2 ADD R1,R1,#+384 \ 00000078 F9FFFFEA B ??init_time_zone_3 330 break; 331 case 5: 332 sprintf(tim_zone, "GMT -07:00"); 333 break; 334 case 6: 335 sprintf(tim_zone, "GMT -06:00"); \ ??init_time_zone_8: \ 0000007C 0C1081E2 ADD R1,R1,#+12 \ 00000080 F7FFFFEA B ??init_time_zone_3 336 break; 337 case 7: 338 sprintf(tim_zone, "GMT -05:00"); \ ??init_time_zone_9: \ 00000084 181081E2 ADD R1,R1,#+24 \ 00000088 F5FFFFEA B ??init_time_zone_3 339 break; 340 case 8: 341 sprintf(tim_zone, "GMT -04:00"); \ ??init_time_zone_10: \ 0000008C 241081E2 ADD R1,R1,#+36 \ 00000090 F3FFFFEA B ??init_time_zone_3 342 break; 343 case 9: 344 sprintf(tim_zone, "GMT -03:30"); \ ??init_time_zone_11: \ 00000094 301081E2 ADD R1,R1,#+48 \ 00000098 F1FFFFEA B ??init_time_zone_3 345 break; 346 case 10: 347 sprintf(tim_zone, "GMT -03:00"); \ ??init_time_zone_12: \ 0000009C 3C1081E2 ADD R1,R1,#+60 \ 000000A0 EFFFFFEA B ??init_time_zone_3 348 break; 349 case 11: 350 sprintf(tim_zone, "GMT -02:00"); \ ??init_time_zone_13: \ 000000A4 481081E2 ADD R1,R1,#+72 \ 000000A8 EDFFFFEA B ??init_time_zone_3 351 break; 352 case 12: 353 sprintf(tim_zone, "GMT -01:00"); \ ??init_time_zone_14: \ 000000AC 541081E2 ADD R1,R1,#+84 \ 000000B0 EBFFFFEA B ??init_time_zone_3 354 break; 355 case 13: 356 sprintf(tim_zone, "GMT 00:00"); \ ??init_time_zone_15: \ 000000B4 601081E2 ADD R1,R1,#+96 \ 000000B8 E9FFFFEA B ??init_time_zone_3 357 break; 358 case 14: 359 sprintf(tim_zone, "GMT +01:00"); \ ??init_time_zone_16: \ 000000BC 6C1081E2 ADD R1,R1,#+108 \ 000000C0 E7FFFFEA B ??init_time_zone_3 360 break; 361 case 15: 362 sprintf(tim_zone, "GMT +02:00"); \ ??init_time_zone_17: \ 000000C4 781081E2 ADD R1,R1,#+120 \ 000000C8 E5FFFFEA B ??init_time_zone_3 363 break; 364 case 16: 365 sprintf(tim_zone, "GMT +03:00"); \ ??init_time_zone_18: \ 000000CC 841081E2 ADD R1,R1,#+132 \ 000000D0 E3FFFFEA B ??init_time_zone_3 366 break; 367 case 17: 368 sprintf(tim_zone, "GMT +03:30"); \ ??init_time_zone_19: \ 000000D4 901081E2 ADD R1,R1,#+144 \ 000000D8 E1FFFFEA B ??init_time_zone_3 369 break; 370 case 18: 371 sprintf(tim_zone, "GMT +04:00"); \ ??init_time_zone_20: \ 000000DC 9C1081E2 ADD R1,R1,#+156 \ 000000E0 DFFFFFEA B ??init_time_zone_3 372 break; 373 case 19: 374 sprintf(tim_zone, "GMT +04:30"); \ ??init_time_zone_21: \ 000000E4 A81081E2 ADD R1,R1,#+168 \ 000000E8 DDFFFFEA B ??init_time_zone_3 375 break; 376 case 20: 377 sprintf(tim_zone, "GMT +05:00"); \ ??init_time_zone_22: \ 000000EC B41081E2 ADD R1,R1,#+180 \ 000000F0 DBFFFFEA B ??init_time_zone_3 378 break; 379 case 21: 380 sprintf(tim_zone, "GMT +05:30"); \ ??init_time_zone_23: \ 000000F4 C01081E2 ADD R1,R1,#+192 \ 000000F8 D9FFFFEA B ??init_time_zone_3 381 break; 382 case 22: 383 sprintf(tim_zone, "GMT +05:45"); \ ??init_time_zone_24: \ 000000FC CC1081E2 ADD R1,R1,#+204 \ 00000100 D7FFFFEA B ??init_time_zone_3 384 break; 385 case 23: 386 sprintf(tim_zone, "GMT +06:00"); \ ??init_time_zone_25: \ 00000104 D81081E2 ADD R1,R1,#+216 \ 00000108 D5FFFFEA B ??init_time_zone_3 387 break; 388 case 24: 389 sprintf(tim_zone, "GMT +06:30"); \ ??init_time_zone_26: \ 0000010C E41081E2 ADD R1,R1,#+228 \ 00000110 D3FFFFEA B ??init_time_zone_3 390 break; 391 case 25: 392 sprintf(tim_zone, "GMT +07:00"); \ ??init_time_zone_27: \ 00000114 F01081E2 ADD R1,R1,#+240 \ 00000118 D1FFFFEA B ??init_time_zone_3 393 break; 394 case 26: 395 sprintf(tim_zone, "GMT +08:00"); \ ??init_time_zone_28: \ 0000011C FC1081E2 ADD R1,R1,#+252 \ 00000120 CFFFFFEA B ??init_time_zone_3 396 break; 397 case 27: 398 sprintf(tim_zone, "GMT +09:00"); \ ??init_time_zone_29: \ 00000124 421F81E2 ADD R1,R1,#+264 \ 00000128 CDFFFFEA B ??init_time_zone_3 399 break; 400 case 28: 401 sprintf(tim_zone, "GMT +09:30"); \ ??init_time_zone_30: \ 0000012C 451F81E2 ADD R1,R1,#+276 \ 00000130 CBFFFFEA B ??init_time_zone_3 402 break; 403 case 29: 404 sprintf(tim_zone, "GMT +10:00"); \ ??init_time_zone_31: \ 00000134 481F81E2 ADD R1,R1,#+288 \ 00000138 C9FFFFEA B ??init_time_zone_3 405 break; 406 case 30: 407 sprintf(tim_zone, "GMT +11:00"); \ ??init_time_zone_32: \ 0000013C 4B1F81E2 ADD R1,R1,#+300 \ 00000140 C7FFFFEA B ??init_time_zone_3 408 break; 409 case 31: 410 sprintf(tim_zone, "GMT +12:00"); \ ??init_time_zone_33: \ 00000144 4E1F81E2 ADD R1,R1,#+312 \ 00000148 C5FFFFEA B ??init_time_zone_3 411 break; 412 case 32: 413 sprintf(tim_zone, "GMT +13:00"); \ ??init_time_zone_34: \ 0000014C 511F81E2 ADD R1,R1,#+324 \ 00000150 160000EF SWI +22 414 break; 415 } 416 } \ ??init_time_zone_35: \ 00000154 0080BDE8 POP {PC} ;; return \ ??init_time_zone_1: \ 00000158 ........ DC32 time_zone \ 0000015C ........ DC32 S_ICONS + 6108 \ 00000160 ........ DC32 `?` 417 418 419 //------------------------ AUTO CHANGE STATUS ------------------------------// 420 421 void SetIconBarHandler(); 422 GBSTMR autoChangeStatus; 423 #pragma inline 424 static unsigned int GetStatusByIndex(int pos) 425 { 426 switch(pos) 427 { 428 case 1: 429 return IS_ONLINE; 430 case 2: 431 return IS_AWAY; 432 case 3: 433 return IS_NA; 434 case 4: 435 return IS_DND; 436 case 5: 437 return IS_OCCUPIED; 438 case 6: 439 return IS_FFC; 440 case 7: 441 return IS_INVISIBLE; 442 case 8: 443 return IS_DEPRESSION; 444 case 9: 445 return IS_EVIL; 446 case 10: 447 return IS_HOME; 448 case 11: 449 return IS_LUNCH; 450 case 12: 451 return IS_WORK; 452 } 453 return IS_UNKNOWN; 454 } 455 \ In segment CODE, align 4, keep-with-next 456 void AutoChangeStatus_timer()//Таймер автосмены статуса 457 { \ AutoChangeStatus_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 458 TTime tt; 459 GetDateTime(NULL,&tt); \ 00000008 0D10A0E1 MOV R1,SP 460 461 if(status_1!=0 && tt.hour==tm_status_1.hour && tt.min==tm_status_1.min) \ 0000000C ........ LDR R4,??DataTable30 ;; 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 462 { 463 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 300284E5 STR R0,[R4, #+560] 464 set_my_status(); \ 000000DC ........ BL set_my_status 465 } 466 467 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 468 { 469 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 300284E5 STR R0,[R4, #+560] 470 set_my_status(); \ 000001A0 ........ BL set_my_status 471 } 472 473 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 474 { 475 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 300284E5 STR R0,[R4, #+560] 476 set_my_status(); \ 00000264 ........ BL set_my_status 477 } 478 479 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 480 { 481 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 300284E5 STR R0,[R4, #+560] 482 set_my_status(); \ 00000328 ........ BL set_my_status 483 } 484 485 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 486 { 487 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 305284E5 STR R5,[R4, #+560] 488 set_my_status(); \ 000003E4 ........ BL set_my_status 489 } 490 #ifdef ELKA 491 SetIconBarHandler(); 492 #endif 493 494 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 FC00A0E3 MOV R0,#+252 \ 000003F4 5C0D80E3 ORR R0,R0,#0x1700 \ 000003F8 040080E0 ADD R0,R0,R4 \ 000003FC 4D0000EF SWI +77 495 } \ 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 496 //=================================away_msg=============== 497 //////////////////////////////////////////tozhe dlja auto ping/////////////// 498 \ In segment CODE, align 4, keep-with-next 499 void DrawPing(void *canv) 500 { 501 PrintField(Ping_X,Ping_Y, PINGO, align, fonto, spaco1); \ DrawPing: \ 00000000 ........ LDR R0,??DataTable27 ;; spaco1 \ 00000004 34209FE5 LDR R2,??DrawPing_0 ;; S_ICONS + 5492 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 01002DE9 PUSH {R0} \ 00000014 ........ LDR R0,??DataTable28 ;; fonto \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 01002DE9 PUSH {R0} \ 00000020 ........ LDR R0,??DataTable29 ;; MAINCSM + 72 \ 00000024 003090E5 LDR R3,[R0, #+0] \ 00000028 14009FE5 LDR R0,??DrawPing_0+0x4 ;; Ping_Y \ 0000002C 001090E5 LDR R1,[R0, #+0] \ 00000030 10009FE5 LDR R0,??DrawPing_0+0x8 ;; Ping_X \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 ........ _BLF PrintField,??PrintField??rA 502 } \ 0000003C 0380BDE8 POP {R0,R1,PC} ;; return \ ??DrawPing_0: \ 00000040 ........ DC32 S_ICONS + 5492 \ 00000044 ........ DC32 Ping_Y \ 00000048 ........ DC32 Ping_X 503 504 //////////////////////////////////////////tozhe dlja auto ping/////////////// 505 506 GBSTMR remind_tmr; 507 volatile int vibra_count; 508 #ifdef ELKA 509 void SLI_Off(void); 510 #endif 511 void start_vibra2(void); 512 513 //////////////////////////reminder timer///////////////////////// 514 \ In segment CODE, align 4, keep-with-next 515 void Remind_Timer2() 516 { \ Remind_Timer2: \ 00000000 10402DE9 PUSH {R4,LR} 517 if (total_unread) \ 00000004 ........ LDR R4,??DataTable30 ;; S_ICONS \ 00000008 9C0294E5 LDR R0,[R4, #+668] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} 518 { 519 vibra_count=Vibra_cc; \ 00000014 24009FE5 LDR R0,??Remind_Timer2_0 ;; Vibra_cc \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 800284E5 STR R0,[R4, #+640] 520 start_vibra2(); \ 00000020 ........ BL start_vibra2 521 GBS_StartTimerProc(&remind_tmr, 6480, Remind_Timer2); \ 00000024 ........ LDR R2,??DataTable16 ;; Remind_Timer2 \ 00000028 5010A0E3 MOV R1,#+80 \ 0000002C 641D81E3 ORR R1,R1,#0x1900 \ 00000030 510F41E2 SUB R0,R1,#+324 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 4D0000EF SWI +77 522 } 523 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return \ ??Remind_Timer2_0: \ 00000040 ........ DC32 Vibra_cc 524 \ In segment CODE, align 4, keep-with-next 525 void Reminder_timer() 526 { 527 GBS_StartTimerProc(&remind_tmr, 6480, Remind_Timer2); \ Reminder_timer: \ 00000000 ........ LDR R2,??DataTable16 ;; Remind_Timer2 \ 00000004 10009FE5 LDR R0,??Reminder_timer_0 ;; S_ICONS + 6156 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 5010A0E3 MOV R1,#+80 \ 00000010 641D81E3 ORR R1,R1,#0x1900 \ 00000014 4D0000EF SWI +77 528 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??Reminder_timer_0: \ 0000001C ........ DC32 S_ICONS + 6156 529 //////////////////////////reminder timer///////////////////////// 530 531 //////////////////////////uptime////////////////////////// 532 int Is_UPTIME_On; 533 int uptimeHour; 534 int uptimeMin; 535 int uptimeSec; 536 \ In segment CODE, align 4, keep-with-next 537 void UptimeMinHour() 538 { 539 uptimeSec++; \ UptimeMinHour: \ 00000000 ........ LDR R0,??DataTable30 ;; S_ICONS \ 00000004 5C1290E5 LDR R1,[R0, #+604] 540 if(uptimeSec==60) \ 00000008 582290E5 LDR R2,[R0, #+600] \ 0000000C 011081E2 ADD R1,R1,#+1 \ 00000010 3C0051E3 CMP R1,#+60 541 { 542 uptimeSec=0; \ 00000014 0010A003 MOVEQ R1,#+0 543 uptimeMin++; \ 00000018 01208202 ADDEQ R2,R2,#+1 \ 0000001C 5C1280E5 STR R1,[R0, #+604] 544 } 545 if(uptimeMin==60) \ 00000020 3C0052E3 CMP R2,#+60 \ 00000024 0300001A BNE ??UptimeMinHour_0 546 { 547 uptimeMin=0; 548 uptimeHour++; \ 00000028 541290E5 LDR R1,[R0, #+596] \ 0000002C 0020A0E3 MOV R2,#+0 \ 00000030 011081E2 ADD R1,R1,#+1 \ 00000034 541280E5 STR R1,[R0, #+596] \ ??UptimeMinHour_0: \ 00000038 582280E5 STR R2,[R0, #+600] 549 } 550 } \ 0000003C 1EFF2FE1 BX LR ;; return 551 552 GBSTMR uptime_tmr; 553 #ifdef NEWSGOLD 554 GBSTMR tracktmr; 555 int tracktimer; 556 #endif 557 \ In segment CODE, align 4, keep-with-next 558 void upTime() 559 { \ upTime: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 560 if(connect_state==3) \ 00000004 ........ LDR R4,??DataTable30 ;; S_ICONS \ 00000008 88609FE5 LDR R6,??upTime_0 ;; upTime \ 0000000C 1C00A0E3 MOV R0,#+28 \ 00000010 600D80E3 ORR R0,R0,#0x1800 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 ........ LDR R0,??DataTable19 ;; MAINCSM + 88 \ 0000001C 0070A0E3 MOV R7,#+0 \ 00000020 000090E5 LDR R0,[R0, #+0] \ 00000024 030050E3 CMP R0,#+3 \ 00000028 0F00001A BNE ??upTime_1 561 { 562 UptimeMinHour(); \ 0000002C ........ BL UptimeMinHour 563 #ifdef NEWSGOLD 564 if (tracktimer>=10)/*&&(_GetPlayStatus()!=1))*/ \ 00000030 600294E5 LDR R0,[R4, #+608] \ 00000034 0A0050E3 CMP R0,#+10 \ 00000038 070000BA BLT ??upTime_2 565 { 566 GBS_StartTimerProc(&tracktmr, 216*5, GetTags); \ 0000003C ........ LDR R2,??DataTable20 ;; GetTags \ 00000040 3810A0E3 MOV R1,#+56 \ 00000044 401E81E3 ORR R1,R1,#0x400 \ 00000048 2C00A0E3 MOV R0,#+44 \ 0000004C 600D80E3 ORR R0,R0,#0x1800 \ 00000050 040080E0 ADD R0,R0,R4 \ 00000054 4D0000EF SWI +77 567 tracktimer=0; \ 00000058 607284E5 STR R7,[R4, #+608] 568 } 569 tracktimer++; \ ??upTime_2: \ 0000005C 600294E5 LDR R0,[R4, #+608] \ 00000060 010080E2 ADD R0,R0,#+1 \ 00000064 600284E5 STR R0,[R4, #+608] 570 #endif 571 GBS_StartTimerProc(&uptime_tmr, 216, upTime); \ 00000068 050000EA B ??upTime_3 572 } 573 else 574 { 575 if(!Pause_Time) \ ??upTime_1: \ 0000006C 28009FE5 LDR R0,??upTime_0+0x4 ;; Pause_Time \ 00000070 000090E5 LDR R0,[R0, #+0] \ 00000074 000050E3 CMP R0,#+0 576 { 577 uptimeHour=0; \ 00000078 54728405 STREQ R7,[R4, #+596] 578 uptimeMin=0; \ 0000007C 58728405 STREQ R7,[R4, #+600] 579 uptimeSec=0; \ 00000080 5C728405 STREQ R7,[R4, #+604] 580 } 581 GBS_StartTimerProc(&uptime_tmr, 216, upTime); \ ??upTime_3: \ 00000084 0620A0E1 MOV R2,R6 \ 00000088 D810A0E3 MOV R1,#+216 \ 0000008C 0500A0E1 MOV R0,R5 \ 00000090 4D0000EF SWI +77 582 } 583 } \ 00000094 F080BDE8 POP {R4-R7,PC} ;; return \ ??upTime_0: \ 00000098 ........ DC32 upTime \ 0000009C ........ DC32 Pause_Time 584 585 char onlineTime[128]; \ In segment CODE, align 4, keep-with-next 586 void DrawOnlineTime(void *canv) 587 { 588 if(connect_state==3) \ DrawOnlineTime: \ 00000000 ........ LDR R0,??DataTable30 ;; S_ICONS \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 ........ LDR R5,??DataTable31 ;; MAINCSM \ 0000000C 3C10A0E3 MOV R1,#+60 \ 00000010 582095E5 LDR R2,[R5, #+88] \ 00000014 601D81E3 ORR R1,R1,#0x1800 \ 00000018 004081E0 ADD R4,R1,R0 \ 0000001C 68109FE5 LDR R1,??DrawOnlineTime_0 ;; `?` \ 00000020 030052E3 CMP R2,#+3 \ 00000024 0700001A BNE ??DrawOnlineTime_1 589 { 590 sprintf(onlineTime,"Online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); \ 00000028 5C2290E5 LDR R2,[R0, #+604] \ 0000002C 04002DE9 PUSH {R2} \ 00000030 583290E5 LDR R3,[R0, #+600] \ 00000034 542290E5 LDR R2,[R0, #+596] \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 160000EF SWI +22 \ 00000040 04D08DE2 ADD SP,SP,#+4 \ 00000044 020000EA B ??DrawOnlineTime_2 591 } 592 else 593 sprintf(onlineTime,"Offline"); \ ??DrawOnlineTime_1: \ 00000048 181081E2 ADD R1,R1,#+24 \ 0000004C 0400A0E1 MOV R0,R4 \ 00000050 160000EF SWI +22 594 PrintField(onlineTime_x,onlineTime_y, onlineTime, align, fonto, spaco1); \ ??DrawOnlineTime_2: \ 00000054 ........ LDR R0,??DataTable27 ;; spaco1 \ 00000058 0420A0E1 MOV R2,R4 \ 0000005C 000090E5 LDR R0,[R0, #+0] \ 00000060 01002DE9 PUSH {R0} \ 00000064 ........ LDR R0,??DataTable28 ;; fonto \ 00000068 000090E5 LDR R0,[R0, #+0] \ 0000006C 01002DE9 PUSH {R0} \ 00000070 483095E5 LDR R3,[R5, #+72] \ 00000074 14009FE5 LDR R0,??DrawOnlineTime_0+0x4 ;; onlineTime_y \ 00000078 001090E5 LDR R1,[R0, #+0] \ 0000007C 10009FE5 LDR R0,??DrawOnlineTime_0+0x8 ;; onlineTime_x \ 00000080 000090E5 LDR R0,[R0, #+0] \ 00000084 ........ _BLF PrintField,??PrintField??rA 595 } \ 00000088 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??DrawOnlineTime_0: \ 0000008C ........ DC32 `?` \ 00000090 ........ DC32 onlineTime_y \ 00000094 ........ DC32 onlineTime_x 596 597 598 //---------------------- Вывод времени на идле ---------------------// 599 600 \ In segment CODE, align 4, keep-with-next 601 void DrawAutoMSG(void *canv) 602 { 603 char awayTime[64]; 604 if(away_m && showAwayIdle) \ DrawAutoMSG: \ 00000000 ........ LDR R0,??DataTable30 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 40D04DE2 SUB SP,SP,#+64 \ 0000000C 401290E5 LDR R1,[R0, #+576] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 1800000A BEQ ??DrawAutoMSG_0 \ 00000018 ........ LDR R1,??DataTable26 ;; showAwayIdle \ 0000001C 001091E5 LDR R1,[R1, #+0] \ 00000020 000051E3 CMP R1,#+0 \ 00000024 1400000A BEQ ??DrawAutoMSG_0 605 { 606 sprintf(awayTime,"Away from [%s]",away_msg_time_dace); \ 00000028 CC10A0E3 MOV R1,#+204 \ 0000002C 5C1D81E3 ORR R1,R1,#0x1700 \ 00000030 002081E0 ADD R2,R1,R0 \ 00000034 48109FE5 LDR R1,??DrawAutoMSG_1 ;; `?` \ 00000038 0D00A0E1 MOV R0,SP \ 0000003C 160000EF SWI +22 607 PrintField(auto_x,auto_y, awayTime, align, fonto, spaco1); \ 00000040 ........ LDR R0,??DataTable27 ;; spaco1 \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 01002DE9 PUSH {R0} \ 0000004C ........ LDR R0,??DataTable28 ;; fonto \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 01002DE9 PUSH {R0} \ 00000058 ........ LDR R0,??DataTable29 ;; MAINCSM + 72 \ 0000005C 08208DE2 ADD R2,SP,#+8 \ 00000060 003090E5 LDR R3,[R0, #+0] \ 00000064 1C009FE5 LDR R0,??DrawAutoMSG_1+0x4 ;; auto_y \ 00000068 001090E5 LDR R1,[R0, #+0] \ 0000006C 18009FE5 LDR R0,??DrawAutoMSG_1+0x8 ;; auto_x \ 00000070 000090E5 LDR R0,[R0, #+0] \ 00000074 ........ _BLF PrintField,??PrintField??rA \ 00000078 08D08DE2 ADD SP,SP,#+8 608 } 609 } \ ??DrawAutoMSG_0: \ 0000007C 40D08DE2 ADD SP,SP,#+64 ;; stack cleaning \ 00000080 0080BDE8 POP {PC} ;; return \ ??DrawAutoMSG_1: \ 00000084 ........ DC32 `?` \ 00000088 ........ DC32 auto_y \ 0000008C ........ DC32 auto_x 610 611 612 //---------------------------- Input away msg ---------------------------// 613 614 //Вводим сообщение какое хотим,а не то что прописали в конфиге 615 int input_awaymsg_id; 616 617 const HEADER_DESC input_awaymsg_hdr={0,0,131,21,NULL,(int)"Ввод автосообщения",LGP_NULL}; 618 void UpdateCLheader(void); \ In segment CODE, align 4, keep-with-next 619 int input_awaymsg_onkey(GUI *data, GUI_MSG *msg) 620 { \ input_awaymsg_onkey: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 621 WSHDR *ws; 622 if (msg->keys==0x0FFF || msg->keys==VOL_DOWN_BUTTON) \ 00000008 ........ LDR R5,??DataTable30 ;; S_ICONS \ 0000000C ........ LDR R6,??DataTable31 ;; MAINCSM \ 00000010 0140A0E1 MOV R4,R1 \ 00000014 F210D4E1 LDRSH R1,[R4, #+2] \ 00000018 0070A0E3 MOV R7,#+0 \ 0000001C FF20A0E3 MOV R2,#+255 \ 00000020 F02E82E3 ORR R2,R2,#0xF00 \ 00000024 020051E1 CMP R1,R2 \ 00000028 0E005113 CMPNE R1,#+14 \ 0000002C 2300001A BNE ??input_awaymsg_onkey_0 623 { 624 EDITCONTROL ec; 625 ExtractEditControl(data,2,&ec); 626 ws=ec.pWS; 627 zeromem(awayMsg,256); \ 00000030 ........ LDR R9,??DataTable34 ;; awayMsg \ 00000034 0D20A0E1 MOV R2,SP \ 00000038 0210A0E3 MOV R1,#+2 \ 0000003C 690100EF SWI +361 \ 00000040 28809DE5 LDR R8,[SP, #+40] \ 00000044 401FA0E3 MOV R1,#+256 \ 00000048 0900A0E1 MOV R0,R9 \ 0000004C 1D0100EF SWI +285 628 int i=0; 629 for(i=0;iwsbody[0];i++) \ 00000050 000098E5 LDR R0,[R8, #+0] \ 00000054 00A0A0E3 MOV R10,#+0 \ 00000058 B000D0E1 LDRH R0,[R0, #+0] \ 0000005C 000050E3 CMP R0,#+0 \ 00000060 0500001A BNE ??input_awaymsg_onkey_1 \ 00000064 080000EA B ??input_awaymsg_onkey_2 630 awayMsg[i]=char16to8(ws->wsbody[i+1]); \ ??input_awaymsg_onkey_3: \ 00000068 8A0080E0 ADD R0,R0,R10, LSL #+1 \ 0000006C B200D0E1 LDRH R0,[R0, #+2] \ 00000070 ........ _BLF char16to8,??char16to8??rA \ 00000074 0900CAE7 STRB R0,[R10, +R9] \ 00000078 01A08AE2 ADD R10,R10,#+1 \ ??input_awaymsg_onkey_1: \ 0000007C 000098E5 LDR R0,[R8, #+0] \ 00000080 B010D0E1 LDRH R1,[R0, #+0] \ 00000084 01005AE1 CMP R10,R1 \ 00000088 F6FFFFBA BLT ??input_awaymsg_onkey_3 631 awayMsg[i]=0; 632 633 #ifdef kluchnik2 634 char *s; 635 ExtractEditControl(data,4,&ec); 636 ws=ec.pWS; 637 s=malloc(ws->wsbody[0]); 638 *s=0; 639 for(i=0;iwsbody[0];i++) 640 *(s+i)=char16to8(ws->wsbody[i+1]); 641 *(s+i)=0; 642 strcat(awayMsg,s); 643 mfree(s); 644 #endif 645 msg_away_timer=(AUTO_ENGADE*12); \ ??input_awaymsg_onkey_2: \ 0000008C ........ LDR R0,??DataTable33 ;; AUTO_ENGADE \ 00000090 0970CAE7 STRB R7,[R10, +R9] \ 00000094 000090E5 LDR R0,[R0, #+0] \ 00000098 0C10A0E3 MOV R1,#+12 \ 0000009C 910000E0 MUL R0,R1,R0 \ 000000A0 500086E5 STR R0,[R6, #+80] 646 away_m=1; \ 000000A4 0100A0E3 MOV R0,#+1 \ 000000A8 400285E5 STR R0,[R5, #+576] 647 away_timer(); \ 000000AC ........ BL away_timer 648 UpdateCLheader(); \ 000000B0 ........ BL UpdateCLheader 649 GeneralFunc_flag1(input_awaymsg_id,1); \ 000000B4 640295E5 LDR R0,[R5, #+612] \ 000000B8 0110A0E3 MOV R1,#+1 \ 000000BC 3D0100EF SWI +317 650 // GeneralFuncF1(1); 651 } 652 653 if(msg->keys==LEFT_SOFT || msg->keys==RED_BUTTON) \ ??input_awaymsg_onkey_0: \ 000000C0 F200D4E1 LDRSH R0,[R4, #+2] \ 000000C4 010050E3 CMP R0,#+1 \ 000000C8 0C005013 CMPNE R0,#+12 \ 000000CC 0900001A BNE ??input_awaymsg_onkey_4 654 { 655 msg_away_timer=0; 656 away_m=0; 657 if(change_back_status) \ 000000D0 480295E5 LDR R0,[R5, #+584] \ 000000D4 507086E5 STR R7,[R6, #+80] \ 000000D8 407285E5 STR R7,[R5, #+576] \ 000000DC 000050E3 CMP R0,#+0 \ 000000E0 0300000A BEQ ??input_awaymsg_onkey_5 658 { 659 CurrentStatus=status_rem; \ 000000E4 440295E5 LDR R0,[R5, #+580] \ 000000E8 300285E5 STR R0,[R5, #+560] 660 set_my_status(); \ 000000EC ........ BL set_my_status 661 change_back_status=0; \ 000000F0 487285E5 STR R7,[R5, #+584] 662 } 663 UpdateCLheader(); \ ??input_awaymsg_onkey_5: \ 000000F4 ........ BL UpdateCLheader 664 } 665 return(0); \ ??input_awaymsg_onkey_4: \ 000000F8 0000A0E3 MOV R0,#+0 \ 000000FC 2CD08DE2 ADD SP,SP,#+44 \ 00000100 F087BDE8 POP {R4-R10,PC} ;; return 666 } 667 \ In segment CODE, align 4, keep-with-next 668 void input_awaymsg_ghook(GUI *gui, int cmd) 669 { \ input_awaymsg_ghook: \ 00000000 00402DE9 PUSH {LR} 670 static SOFTKEY_DESC sk={0x0FFF,0x0000,(int)"Сохранить"}; 671 if (cmd==7) \ 00000004 070051E3 CMP R1,#+7 \ 00000008 0300001A BNE ??input_awaymsg_ghook_0 672 { 673 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} 674 } 675 if(cmd==0xA) \ ??input_awaymsg_ghook_0: \ 0000001C 0A0051E3 CMP R1,#+10 \ 00000020 0100001A BNE ??input_awaymsg_ghook_2 676 { 677 DisableIDLETMR(); // Отключаем таймер выхода по таймауту \ 00000024 7F0100EF SWI +383 \ 00000028 0080BDE8 POP {PC} 678 } 679 if (cmd==0x0C) \ ??input_awaymsg_ghook_2: \ 0000002C 0C0051E3 CMP R1,#+12 \ 00000030 0080BD18 POPNE {PC} 680 { 681 EDIT_SetCursorPos(gui,1); \ 00000034 0110A0E3 MOV R1,#+1 \ 00000038 D40100EF SWI +468 682 } 683 if(cmd==0x03){} 684 } \ 0000003C 0080BDE8 POP {PC} ;; return \ ??input_awaymsg_ghook_1: \ 00000040 ........ DC32 ??sk 685 \ In segment CODE, align 4, keep-with-next 686 void input_awaymsg_locret(void){} \ input_awaymsg_locret: \ 00000000 1EFF2FE1 BX LR ;; return 687 688 SOFTKEY_DESC input_awaymsg_sk[]= 689 { 690 {0x0018,0x0000,(int)"Лев"}, 691 {0x0001,0x0000,(int)"Прав"}, 692 {0x003D,0x0000,(int)LGP_DOIT_PIC} 693 }; 694 695 SOFTKEYSTAB input_awaymsg_skt= 696 { 697 input_awaymsg_sk,0 698 }; 699 700 const INPUTDIA_DESC input_awaymsg_desc= 701 { 702 1, 703 input_awaymsg_onkey, 704 input_awaymsg_ghook, 705 (void *)input_awaymsg_locret, 706 0, 707 &input_awaymsg_skt, 708 {0,NULL,NULL,NULL}, 709 FONT_SMALL, 710 100, 711 101, 712 0, 713 0x00000000, 714 0x40000000 715 }; 716 \ In segment CODE, align 4, keep-with-next 717 void InputAwayMsg() 718 { \ InputAwayMsg: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 719 WSHDR *wss=AllocWS(256); 720 void *ma=malloc_adr(); 721 void *eq=AllocEQueue(ma, mfree_adr()); 722 EDITCONTROL ec; 723 PrepareEditControl(&ec); 724 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 725 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 726 AddEditControlToEditQend(eq,&ec,ma); \ 00000068 0720A0E1 MOV R2,R7 \ 0000006C 04108DE2 ADD R1,SP,#+4 \ 00000070 0400A0E1 MOV R0,R4 \ 00000074 660100EF SWI +358 727 728 PrepareEditControl(&ec); \ 00000078 04008DE2 ADD R0,SP,#+4 \ 0000007C 640100EF SWI +356 729 CutWSTR(wss,0); \ 00000080 0010A0E3 MOV R1,#+0 \ 00000084 0600A0E1 MOV R0,R6 \ 00000088 260100EF SWI +294 730 ascii2ws(wss,awayMsg); \ 0000008C ........ LDR R1,??DataTable34 ;; awayMsg \ 00000090 0600A0E1 MOV R0,R6 \ 00000094 ........ _BLF ascii2ws,??ascii2ws??rA 731 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 732 AddEditControlToEditQend(eq,&ec,ma); \ 000000B4 0720A0E1 MOV R2,R7 \ 000000B8 08108DE2 ADD R1,SP,#+8 \ 000000BC 0400A0E1 MOV R0,R4 \ 000000C0 660100EF SWI +358 733 #ifdef kluchnik2 734 PrepareEditControl(&ec); 735 wsprintf(wss,"%t","Сообщение 2:\n"); 736 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); 737 AddEditControlToEditQend(eq,&ec,ma); 738 739 ascii2ws(wss,"когда смогу отвечу:)"); 740 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); 741 AddEditControlToEditQend(eq,&ec,ma); 742 #endif 743 patch_header(&input_awaymsg_hdr); \ 000000C4 440085E2 ADD R0,R5,#+68 \ 000000C8 ........ _BLF patch_header,??patch_header??rA 744 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] 745 746 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 + 612 \ 00000124 000081E5 STR R0,[R1, #+0] 747 } \ 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 + 612 748 749 750 //////////////////////////uptime////////////////////////// 751 #ifdef ELKA 752 GBSTMR sli_tmr; 753 void SLI_On() 754 { 755 if(Is_SLI_On) 756 SLI_SetState(1); 757 GBS_StartTimerProc(&sli_tmr, IN_TICKS(2) / 20, SLI_Off); 758 } 759 760 void SLI_Off() 761 { 762 SLI_SetState(2); 763 if(total_unread) 764 GBS_StartTimerProc(&sli_tmr, IN_TICKS(2) / 20, SLI_On); //26*SLI_time2 765 else 766 SLI_SetState(0); 767 } 768 769 void SLI_check() 770 { 771 if (total_unread) 772 SLI_On(); 773 } 774 775 void SLI_Timer() 776 { 777 GBS_StartTimerProc(&sli_tmr, 262, SLI_check); //262*SLI_time 778 } 779 #endif 780 \ In segment CODE, align 4, keep-with-next 781 void setup_ICONS(void) 782 { \ setup_ICONS: \ 00000000 30402DE9 PUSH {R4,R5,LR} 783 int i=0; \ 00000004 ........ LDR R5,??DataTable37 ;; S_ICONS \ 00000008 0040A0E3 MOV R4,#+0 784 do 785 { 786 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,??DataTable63 ;; ICON_PATH \ 00000028 ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 0000002C 040185E7 STR R0,[R5, +R4, LSL #+2] 787 i++; \ ??setup_ICONS_1: \ 00000030 014084E2 ADD R4,R4,#+1 788 } 789 while(i>2,stop_vibra); \ 0000004C 3610A0E3 MOV R1,#+54 \ 00000050 000000EA B ??start_vibra_2 1068 else 1069 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra); \ ??start_vibra_1: \ 00000054 6C10A0E3 MOV R1,#+108 \ ??start_vibra_2: \ 00000058 4D0000EF SWI +77 1070 } 1071 } \ 0000005C 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra_0: \ 00000060 ........ DC32 stop_vibra 1072 \ In segment CODE, align 4, keep-with-next 1073 void stop_vibra(void) 1074 { \ stop_vibra: \ 00000000 00402DE9 PUSH {LR} 1075 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1076 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable62 ;; S_ICONS \ 00000010 801290E5 LDR R1,[R0, #+640] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 801280E5 STR R1,[R0, #+640] \ 0000001C 0080BD08 POPEQ {PC} 1077 { 1078 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra_0 ;; start_vibra \ 00000024 CC10A0E3 MOV R1,#+204 \ 00000028 641D81E3 ORR R1,R1,#0x1900 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable54 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra_1 1079 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra_2 1080 else 1081 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra); \ ??stop_vibra_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra_2: \ 0000004C 4D0000EF SWI +77 1082 } 1083 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra_0: \ 00000054 ........ DC32 start_vibra 1084 \ In segment CODE, align 4, keep-with-next 1085 void start_vibra2(void) 1086 { 1087 void stop_vibra2(void); 1088 1089 SetVibration(vibraPower); \ start_vibra2: \ 00000000 ........ LDR R0,??DataTable51 ;; vibraPower \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 7C0000EF SWI +124 1090 if(VIBR_TYPE) \ 00000010 ........ LDR R1,??DataTable54 ;; VIBR_TYPE \ 00000014 18009FE5 LDR R0,??start_vibra2_0 ;; S_ICONS + 6604 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 14209FE5 LDR R2,??start_vibra2_0+0x4 ;; stop_vibra2 \ 00000020 000051E3 CMP R1,#+0 1091 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>2,stop_vibra2); \ 00000024 3610A013 MOVNE R1,#+54 1092 else 1093 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra2); \ 00000028 6C10A003 MOVEQ R1,#+108 \ 0000002C 4D0000EF SWI +77 1094 } \ 00000030 0080BDE8 POP {PC} ;; return \ ??start_vibra2_0: \ 00000034 ........ DC32 S_ICONS + 6604 \ 00000038 ........ DC32 stop_vibra2 1095 \ In segment CODE, align 4, keep-with-next 1096 void stop_vibra2(void) 1097 { \ stop_vibra2: \ 00000000 00402DE9 PUSH {LR} 1098 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1099 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable62 ;; S_ICONS \ 00000010 801290E5 LDR R1,[R0, #+640] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 801280E5 STR R1,[R0, #+640] \ 0000001C 0080BD08 POPEQ {PC} 1100 { 1101 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra2_0 ;; start_vibra2 \ 00000024 CC10A0E3 MOV R1,#+204 \ 00000028 641D81E3 ORR R1,R1,#0x1900 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable54 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra2_1 1102 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra2); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra2_2 1103 else 1104 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra2); \ ??stop_vibra2_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra2_2: \ 0000004C 4D0000EF SWI +77 1105 } 1106 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra2_0: \ 00000054 ........ DC32 start_vibra2 1107 \ In segment CODE, align 4, keep-with-next 1108 void ChangeVibra(void) 1109 { 1110 if (!(Is_Vibra_Enabled=!(Is_Vibra_Enabled))) \ ChangeVibra: \ 00000000 ........ LDR R0,??DataTable62 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 281290E5 LDR R1,[R0, #+552] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 1C109FE5 LDR R1,??ChangeVibra_0 ;; `?` \ 00000008 4BDF4DE2 SUB SP,SP,#+300 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ BL FreeTemplates \ 00000014 ........ LDR R1,??DataTable61 ;; TEMPLATES_PATH \ 00000018 2C008DE2 ADD R0,SP,#+44 \ 0000001C 1A0000EF SWI +26 \ 00000020 2C008DE2 ADD R0,SP,#+44 \ 00000024 1B0000EF SWI +27 \ 00000028 0070A0E1 MOV R7,R0 \ 0000002C 2C008DE2 ADD R0,SP,#+44 \ 00000030 005087E0 ADD R5,R7,R0 \ 00000034 0420A0E1 MOV R2,R4 \ 00000038 0610A0E1 MOV R1,R6 \ 0000003C 0500A0E1 MOV R0,R5 \ 00000040 160000EF SWI +22 1152 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 1153 if ((fsize=stat.size)<=0) goto L1; \ 00000060 08709DE5 LDR R7,[SP, #+8] \ 00000064 010057E3 CMP R7,#+1 \ 00000068 070000BA BLT ??LoadTemplates_1 1154 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 1155 { 1156 L1: 1157 strcpy(fn+i,"\\0.txt"); \ ??LoadTemplates_1: \ 0000008C 081086E2 ADD R1,R6,#+8 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 1A0000EF SWI +26 1158 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 1159 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 1160 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 1161 } 1162 if (f==-1) return 0; \ ??LoadTemplates_2: \ 000000E0 040058E1 CMP R8,R4 \ 000000E4 F1FFFF0A BEQ ??LoadTemplates_4 1163 p=templates_chars=malloc(fsize+1); \ 000000E8 ........ LDR R4,??DataTable62 ;; S_ICONS \ 000000EC 010087E2 ADD R0,R7,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 840284E5 STR R0,[R4, #+644] \ 000000F8 0060A0E1 MOV R6,R0 1164 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] 1165 fclose(f,&ul); \ 00000118 0D10A0E1 MOV R1,SP \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 0D0000EF SWI +13 1166 i=0; \ 00000124 0070A0E3 MOV R7,#+0 1167 pp=p; \ 00000128 0680A0E1 MOV R8,R6 \ 0000012C 020000EA B ??LoadTemplates_6 1168 for(;;) 1169 { 1170 c=*p; 1171 if (c<32) 1172 { 1173 if (pp&&(pp!=p)) 1174 { 1175 templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 1176 templates_lines[i++]=pp; 1177 } 1178 pp=NULL; 1179 if (!c) break; 1180 *p=0; 1181 } 1182 else 1183 { 1184 if (pp==NULL) pp=p; \ ??LoadTemplates_7: \ 00000130 000058E3 CMP R8,#+0 \ 00000134 0680A001 MOVEQ R8,R6 1185 } 1186 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 880294E5 LDR R0,[R4, #+648] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 880284E5 STR R0,[R4, #+648] \ 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 1187 } 1188 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 `?` 1189 } 1190 1191 1192 1193 //---------------------- AUTOBOT MESSAGE -------------------------// 1194 1195 1196 #ifdef kluchnik 1197 char *bot_chars; //Собственно файл 1198 char **bot_lines; //Массив указателей на строки 1199 1200 void FreeBotMessage(void) 1201 { 1202 if (bot_lines) mfree(bot_lines); 1203 if (bot_chars) mfree(bot_chars); 1204 bot_lines=NULL; 1205 bot_chars=NULL; 1206 } 1207 1208 int LoadBotMessage(unsigned int uin) 1209 { 1210 FSTATS stat; 1211 char fn[256]; 1212 int f; 1213 unsigned int ul; 1214 int i; 1215 int fsize; 1216 char *p; 1217 char *pp; 1218 int c; 1219 FreeBotMessage(); 1220 strcpy(fn,TEMPLATES_PATH); 1221 i=strlen(fn); 1222 sprintf(fn+i,"\\bot_%d.txt",uin); 1223 if (GetFileStats(fn,&stat,&ul)==-1) goto L1; 1224 if ((fsize=stat.size)<=0) goto L1; 1225 if ((f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul))==-1) 1226 { 1227 L1: 1228 strcpy(fn+i,"\\bot.txt"); 1229 if (GetFileStats(fn,&stat,&ul)==-1) return 0; 1230 if ((fsize=stat.size)<=0) return 0; 1231 f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul); 1232 } 1233 if (f==-1) return 0; 1234 p=bot_chars=malloc(fsize+1); 1235 p[fread(f,p,fsize,&ul)]=0; 1236 fclose(f,&ul); 1237 i=0; 1238 pp=p; 1239 for(;;) 1240 { 1241 c=*p; 1242 if (c<32) 1243 { 1244 if (pp&&(pp!=p)) 1245 { 1246 bot_lines=realloc(bot_lines,(i+1)*sizeof(char *)); 1247 bot_lines[i++]=pp; 1248 } 1249 pp=NULL; 1250 if (!c) break; 1251 *p=0; 1252 } 1253 else 1254 { 1255 if (pp==NULL) pp=p; 1256 } 1257 p++; 1258 } 1259 return i; 1260 } 1261 #endif 1262 1263 //=================================================================== 1264 1265 typedef struct 1266 { 1267 CSM_RAM csm; 1268 int gui_id; 1269 }MAIN_CSM; 1270 1271 typedef struct 1272 { 1273 GUI gui; 1274 WSHDR *ws1; 1275 WSHDR *ws2; 1276 int i1; 1277 }MAIN_GUI; 1278 1279 1280 1281 int RXstate=EOP; //-sizeof(RXpkt)..-1 - receive header, 0..RXpkt.data_len - receive data 1282 1283 TPKT RXbuf; 1284 TPKT TXbuf; 1285 1286 int connect_state=0; 1287 1288 int sock=-1; 1289 1290 volatile unsigned long TOTALRECEIVED; 1291 volatile unsigned long TOTALSENDED; 1292 volatile unsigned long ALLTOTALRECEIVED; //by BoBa 10.07 1293 volatile unsigned long ALLTOTALSENDED; 1294 1295 volatile int sendq_l=0; //Длинна очереди для send 1296 volatile void *sendq_p=NULL; //указатель очереди 1297 1298 volatile int is_gprs_online=1; 1299 1300 GBSTMR reconnect_tmr; 1301 1302 extern void kill_data(void *p,void (*func_p)(void *)); 1303 \ In segment CODE, align 4, keep-with-next 1304 void ElfKiller(void) 1305 { \ ElfKiller: \ 00000000 00402DE9 PUSH {LR} 1306 extern void *ELF_BEGIN; 1307 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 1308 } 1309 1310 int total_unread; 1311 1312 volatile CLIST *cltop; 1313 1314 volatile unsigned int GROUP_CACHE; //Текущая группа для добавления 1315 1316 volatile int contactlist_menu_id; 1317 1318 GBSTMR tmr_active; 1319 1320 volatile int edchat_id; 1321 1322 //Применяется для добавления сообщений 1323 //CLIST *edcontact; 1324 //void *edgui_data; 1325 1326 static int prev_clmenu_itemcount; 1327 1328 char clm_hdr_text[64]; 1329 static const char def_clm_hdr_text[] = LG_CLTITLE; 1330 static const char key_clm_hdr_text[] = LG_CLT9INP; 1331 #ifdef kluchnik 1332 int ICON_HD; 1333 static const HEADER_DESC contactlist_menuhdr = {0, 0, 0, 0, S_ICONS+IS_NULLICON, (int)clm_hdr_text, LGP_NULL}; 1334 #else 1335 static const HEADER_DESC contactlist_menuhdr = {0, 0, 0, 0, S_ICONS+ICON_HEAD, (int)clm_hdr_text, LGP_NULL}; 1336 #endif 1337 1338 static const int menusoftkeys[] = {0,1,2}; 1339 static const SOFTKEY_DESC menu_sk[] = 1340 { 1341 {0x0018, 0x0000, (int)LG_SELECT}, 1342 {0x0001, 0x0000, (int)LG_CLOSE}, 1343 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 1344 }; 1345 1346 char clmenu_sk_r[16]; 1347 static const char def_clmenu_sk_r[] = LG_CLOSE; 1348 static const char key_clmenu_sk_r[] = LG_CLEAR; 1349 1350 static const SOFTKEY_DESC clmenu_sk[]= 1351 { 1352 {0x0018, 0x0000, (int)LG_OPTIONS}, 1353 {0x0001, 0x0000, (int)clmenu_sk_r}, 1354 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 1355 }; 1356 1357 const SOFTKEYSTAB menu_skt = 1358 { 1359 menu_sk, 0 1360 }; 1361 1362 static const SOFTKEYSTAB clmenu_skt = 1363 { 1364 clmenu_sk, 0 1365 }; 1366 1367 void contactlist_menu_ghook(void *data, int cmd); 1368 int contactlist_menu_onkey(void *data, GUI_MSG *msg); 1369 void contactlist_menu_iconhndl(void *data, int curitem, void *unk); 1370 1371 #ifdef USE_MLMENU 1372 static const ML_MENU_DESC contactlist_menu= 1373 { 1374 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 1375 menusoftkeys, 1376 &clmenu_skt, 1377 0x11, //+0x400 1378 contactlist_menu_iconhndl, 1379 NULL, //Items 1380 NULL, //Procs 1381 0, //n 1382 1 //Добавочных строк 1383 }; 1384 #else 1385 static const MENU_DESC contactlist_menu= 1386 { 1387 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 1388 menusoftkeys, 1389 &clmenu_skt, 1390 0x11, //+0x400 1391 contactlist_menu_iconhndl, 1392 NULL, //Items 1393 NULL, //Procs 1394 0 //n 1395 }; 1396 #endif 1397 1398 //GBSTMR tmr_ping; 1399 int tenseconds_to_ping; 1400 \ In segment CODE, align 4, keep-with-next 1401 LOGQ *NewLOGQ(const char *s) 1402 { \ NewLOGQ: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1403 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 1404 zeromem(p,sizeof(LOGQ)); \ 00000018 6010A0E3 MOV R1,#+96 \ 0000001C 1D0100EF SWI +285 1405 strcpy(p->text,s); \ 00000020 0410A0E1 MOV R1,R4 \ 00000024 600085E2 ADD R0,R5,#+96 \ 00000028 1A0000EF SWI +26 1406 return p; \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 3080BDE8 POP {R4,R5,PC} ;; return 1407 } 1408 \ In segment CODE, align 4, keep-with-next 1409 LOGQ *LastLOGQ(LOGQ **pp) 1410 { 1411 LOGQ *q=*pp; \ LastLOGQ: \ 00000000 000090E5 LDR R0,[R0, #+0] 1412 if (q) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 1EFF2F01 BXEQ LR \ 0000000C 000000EA B ??LastLOGQ_0 1413 { 1414 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 1415 } 1416 return(q); \ 00000020 1EFF2FE1 BX LR ;; return 1417 } 1418 1419 //Уничтожить лог \ In segment CODE, align 4, keep-with-next 1420 void FreeLOGQ(LOGQ **pp) 1421 { \ FreeLOGQ: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0010A0E1 MOV R1,R0 1422 LOGQ *p=*pp; \ 00000008 000091E5 LDR R0,[R1, #+0] 1423 *pp=NULL; //Сразу обрежем \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 002081E5 STR R2,[R1, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 1080BD08 POPEQ {R4,PC} 1424 while(p) 1425 { 1426 LOGQ *np=p->next; \ ??FreeLOGQ_0: \ 0000001C 004090E5 LDR R4,[R0, #+0] 1427 mfree(p); \ 00000020 150000EF SWI +21 1428 p=np; \ 00000024 0400B0E1 MOVS R0,R4 1429 } \ 00000028 FBFFFF1A BNE ??FreeLOGQ_0 1430 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 1431 1432 //Удалить элемент из лога \ In segment CODE, align 4, keep-with-next 1433 void RemoveLOGQ(LOGQ **queue, LOGQ *p) 1434 { \ RemoveLOGQ: \ 00000000 00402DE9 PUSH {LR} 1435 LOGQ *q=(LOGQ *)queue; \ 00000004 000000EA B ??RemoveLOGQ_0 1436 LOGQ *qp; 1437 while(qp=q->next) 1438 { 1439 if (qp==p) 1440 { 1441 q->next=p->next; 1442 break; 1443 } 1444 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] 1445 } 1446 mfree(p); //Если элемент вообще не в логе \ ??RemoveLOGQ_2: \ 00000028 0100A0E1 MOV R0,R1 \ 0000002C 150000EF SWI +21 1447 } \ 00000030 0080BDE8 POP {PC} ;; return 1448 1449 //Добавить элемент в лог \ In segment CODE, align 4, keep-with-next 1450 int AddLOGQ(LOGQ **queue, LOGQ *p) 1451 { 1452 LOGQ *q=(LOGQ *)queue; 1453 LOGQ *qp; 1454 int i=0; \ AddLOGQ: \ 00000000 0020A0E3 MOV R2,#+0 \ 00000004 000000EA B ??AddLOGQ_0 1455 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 1456 p->next=NULL; \ 0000001C 003081E5 STR R3,[R1, #+0] 1457 q->next=p; \ 00000020 001080E5 STR R1,[R0, #+0] 1458 return(i+1); //Теперь всего в логе элементов \ 00000024 0200A0E1 MOV R0,R2 \ 00000028 1EFF2FE1 BX LR ;; return 1459 } 1460 \ In segment CODE, align 4, keep-with-next 1461 char *GetLastXTextLOGQ(CLIST *t) 1462 { 1463 LOGQ *p = t->log; \ GetLastXTextLOGQ: \ 00000000 901090E5 LDR R1,[R0, #+144] 1464 char *s = 0; \ 00000004 0000A0E3 MOV R0,#+0 1465 if(!p) return 0; \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 0500001A BNE ??GetLastXTextLOGQ_0 \ 00000010 1EFF2FE1 BX LR 1466 while(p->next) 1467 { 1468 if((p->type&0x0F)==3) \ ??GetLastXTextLOGQ_1: \ 00000014 0C3091E5 LDR R3,[R1, #+12] \ 00000018 0F3003E2 AND R3,R3,#0xF \ 0000001C 030053E3 CMP R3,#+3 1469 s = p->text; \ 00000020 60008102 ADDEQ R0,R1,#+96 1470 p = p->next; \ 00000024 0210A0E1 MOV R1,R2 1471 } \ ??GetLastXTextLOGQ_0: \ 00000028 002091E5 LDR R2,[R1, #+0] \ 0000002C 000052E3 CMP R2,#+0 \ 00000030 F7FFFF1A BNE ??GetLastXTextLOGQ_1 1472 if((p->type&0x0F)==3) \ 00000034 0C2091E5 LDR R2,[R1, #+12] \ 00000038 0F2002E2 AND R2,R2,#0xF \ 0000003C 030052E3 CMP R2,#+3 1473 s = p->text; \ 00000040 60008102 ADDEQ R0,R1,#+96 1474 return s; \ 00000044 1EFF2FE1 BX LR ;; return 1475 } 1476 \ In segment CODE, align 4, keep-with-next 1477 int GetIconIndex(CLIST *t) 1478 { 1479 unsigned short s; 1480 if (t) \ GetIconIndex: \ 00000000 000050E3 CMP R0,#+0 \ 00000004 3400000A BEQ ??GetIconIndex_0 1481 { 1482 s=t->state; 1483 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 1484 if (t->isunread) \ 0000001C 800090E5 LDR R0,[R0, #+128] \ 00000020 000050E3 CMP R0,#+0 1485 return(IS_MSG); \ 00000024 0D00A013 MOVNE R0,#+13 \ 00000028 1EFF2F11 BXNE LR 1486 else 1487 { 1488 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 1489 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 1490 if ((s&0xF000)==0x3000) return (IS_EVIL); \ 0000004C C00D52E3 CMP R2,#+12288 \ 00000050 0700A003 MOVEQ R0,#+7 \ 00000054 1EFF2F01 BXEQ LR 1491 if ((s&0xF000)==0x4000) return (IS_DEPRESSION); \ 00000058 400C52E3 CMP R2,#+16384 \ 0000005C 0600A003 MOVEQ R0,#+6 \ 00000060 1EFF2F01 BXEQ LR 1492 if ((s&0xF000)==0x5000) return (IS_HOME); \ 00000064 500C52E3 CMP R2,#+20480 \ 00000068 0800A003 MOVEQ R0,#+8 \ 0000006C 1EFF2F01 BXEQ LR 1493 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 1494 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 1495 if (s & 0x0001) return(IS_AWAY); \ ??GetIconIndex_1: \ 00000090 010011E3 TST R1,#0x1 \ 00000094 0200A013 MOVNE R0,#+2 \ 00000098 1EFF2F11 BXNE LR 1496 if (s & 0x0005) return(IS_NA); \ 0000009C 050011E3 TST R1,#0x5 \ 000000A0 0300A013 MOVNE R0,#+3 \ 000000A4 1EFF2F11 BXNE LR 1497 if (s & 0x0011) return(IS_OCCUPIED); \ 000000A8 110011E3 TST R1,#0x11 \ 000000AC 0400A013 MOVNE R0,#+4 \ 000000B0 1EFF2F11 BXNE LR 1498 if (s & 0x0013) return(IS_DND); \ 000000B4 130011E3 TST R1,#0x13 \ 000000B8 0500A013 MOVNE R0,#+5 \ 000000BC 1EFF2F11 BXNE LR 1499 if (s & 0x0002) return(IS_FFC); \ 000000C0 020011E3 TST R1,#0x2 \ 000000C4 EFFFFF1A BNE ??GetIconIndex_2 1500 if (s & 0x0100) return(IS_INVISIBLE); \ 000000C8 400F11E3 TST R1,#0x100 \ 000000CC 0100A013 MOVNE R0,#+1 \ 000000D0 1EFF2F11 BXNE LR 1501 } 1502 } 1503 else 1504 { 1505 return(IS_UNKNOWN); 1506 } 1507 return(IS_ONLINE); \ 000000D4 0B00A0E3 MOV R0,#+11 \ 000000D8 1EFF2FE1 BX LR \ ??GetIconIndex_0: \ 000000DC 0E00A0E3 MOV R0,#+14 \ 000000E0 1EFF2FE1 BX LR ;; return 1508 } 1509 \ In segment CODE, align 4, keep-with-next 1510 LOGQ *FindContactLOGQByAck(TPKT *p) 1511 { \ FindContactLOGQByAck: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1512 CLIST *t; 1513 LockSched(); \ 00000008 460100EF SWI +326 1514 t=FindContactByUin(p->pkt.uin); \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000014 0050A0E1 MOV R5,R0 1515 UnlockSched(); \ 00000018 470100EF SWI +327 1516 unsigned int id=*((unsigned short*)(p->data)); \ 0000001C B840D4E1 LDRH R4,[R4, #+8] 1517 LOGQ *q; 1518 if (!t) return NULL; \ 00000020 000055E3 CMP R5,#+0 \ 00000024 0000A003 MOVEQ R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 1519 LockSched(); \ 0000002C 460100EF SWI +326 1520 q=t->log; \ 00000030 905095E5 LDR R5,[R5, #+144] \ 00000034 000000EA B ??FindContactLOGQByAck_0 1521 while(q) 1522 { 1523 if (q->ID==id) break; 1524 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 1525 } 1526 UnlockSched(); \ 0000004C 470100EF SWI +327 1527 return q; \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 3080BDE8 POP {R4,R5,PC} ;; return 1528 } 1529 1530 1531 1532 1533 /*----------------------------- SAVE CONTACT LIST TO FILE --------------------------------*/ 1534 \ In segment CODE, align 4, keep-with-next 1535 void CreateCLFile(void) 1536 { \ CreateCLFile: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 42DF4DE2 SUB SP,SP,#+264 1537 CLIST *t; 1538 t=(CLIST *)(&cltop); \ 00000008 ........ LDR R5,??DataTable60 ;; S_ICONS + 672 1539 char *s=malloc(128); 1540 volatile int hFile_cl; 1541 unsigned int io_error_cl = 0; 1542 char fn[256]; 1543 strcpy(fn,TEMPLATES_PATH); 1544 strcat(fn,"\\local.cl"); \ 0000000C D4609FE5 LDR R6,??CreateCLFile_0 ;; `?` \ 00000010 8000A0E3 MOV R0,#+128 \ 00000014 140000EF SWI +20 \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C 00108DE5 STR R1,[SP, #+0] \ 00000020 ........ LDR R1,??DataTable61 ;; TEMPLATES_PATH \ 00000024 0040A0E1 MOV R4,R0 \ 00000028 08008DE2 ADD R0,SP,#+8 \ 0000002C 1A0000EF SWI +26 \ 00000030 0610A0E1 MOV R1,R6 \ 00000034 08008DE2 ADD R0,SP,#+8 \ 00000038 170000EF SWI +23 1545 unlink(fn,&io_error_cl); \ 0000003C 0D10A0E1 MOV R1,SP \ 00000040 08008DE2 ADD R0,SP,#+8 \ 00000044 6B0100EF SWI +363 1546 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] 1547 if(hFile_cl!=-1) \ 00000064 04009DE5 LDR R0,[SP, #+4] \ 00000068 010070E3 CMN R0,#+1 \ 0000006C 1800001A BNE ??CreateCLFile_1 1548 { 1549 while(t=(CLIST *)(t->next)) 1550 { 1551 if(!t->isgroup) 1552 { 1553 sprintf(s, ";%d;%s;;;\r\n", t->uin, t->name); 1554 fwrite(hFile_cl, s, strlen(s), &io_error_cl); 1555 } 1556 } 1557 ShowMSG(2,(int)"Saved local.cl"); 1558 } 1559 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 1560 fclose(hFile_cl, &io_error_cl); \ 0000007C 04009DE5 LDR R0,[SP, #+4] \ 00000080 0D10A0E1 MOV R1,SP \ 00000084 0D0000EF SWI +13 1561 mfree(s); \ 00000088 0400A0E1 MOV R0,R4 \ 0000008C 150000EF SWI +21 1562 } \ 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 `?` 1563 1564 /*-----------------------------------------------------------------------------------------*/ 1565 1566 char on_off_buf[128]; 1567 int on_off_timer=0; 1568 char ContactT9Key[32]; 1569 int kopa_online; 1570 int kopa_kontaktu; 1571 char status[64]; 1572 1573 #define nmeth 24 1574 1575 void * gui_methods2[nmeth]; 1576 void * old_redraw; 1577 1578 typedef void (*tredraw)(void *data); 1579 char prozr[]={0x00,0x00,0x00,0x64}; \ In segment CODE, align 4, keep-with-next 1580 void new_redraw(void *data) 1581 { \ new_redraw: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1582 ((tredraw)old_redraw)(data); \ 00000004 ........ LDR R4,??DataTable62 ;; S_ICONS \ 00000008 40D04DE2 SUB SP,SP,#+64 \ 0000000C 201394E5 LDR R1,[R4, #+800] \ 00000010 31FF2FE1 BLX R1 1583 char s[64]; 1584 sprintf(s,"%s\\HEAD.png",ICON_PATH); \ 00000014 ........ LDR R2,??DataTable63 ;; ICON_PATH \ 00000018 64109FE5 LDR R1,??new_redraw_0 ;; `?` \ 0000001C 0D00A0E1 MOV R0,SP \ 00000020 160000EF SWI +22 1585 int x=GetImgWidth((int)s); \ 00000024 0D00A0E1 MOV R0,SP \ 00000028 220000EF SWI +34 \ 0000002C 0050A0E1 MOV R5,R0 1586 /*#ifdef ELKA 1587 #else 1588 DrawRectangle(0,YDISP,ScreenW()-1,ScreenH()-1,0,prozr,prozr); 1589 #endif*/ 1590 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,??DataTable64 ;; fonto \ 00000060 000090E5 LDR R0,[R0, #+0] \ 00000064 01002DE9 PUSH {R0} \ 00000068 CC00A0E3 MOV R0,#+204 \ 0000006C 680D80E3 ORR R0,R0,#0x1A00 \ 00000070 042080E0 ADD R2,R0,R4 \ 00000074 070085E2 ADD R0,R5,#+7 \ 00000078 ........ _BLF PrintText,??PrintText??rA 1591 #ifdef kluchnik 1592 switch(CurrentPrivateStatus) 1593 { 1594 case 0: ICON_HD=ICON_ALL_CAN_SEE; break; 1595 case 1: ICON_HD=ICON_NOBODY_CAN_SEE; break; 1596 case 2: ICON_HD=ICON_VISLIST_CAN_SEE; break; 1597 case 3: ICON_HD=ICON_INVISLIST_CANNOT_SEE; break; 1598 case 4: ICON_HD=ICON_CONTACTLIST_CAN_SEE; break; 1599 default : ICON_HD=ICON_HEAD; break; 1600 } 1601 int icon; 1602 icon=*(S_ICONS+ICON_HD); 1603 DrawImg(3,YDISP+3,icon); 1604 #endif 1605 } \ 0000007C 58D08DE2 ADD SP,SP,#+88 \ 00000080 3080BDE8 POP {R4,R5,PC} ;; return \ ??new_redraw_0: \ 00000084 ........ DC32 `?` 1606 1607 /* 1608 void (*old_ed_redraw)(void *data); 1609 void my_ed_redraw2(void *data) 1610 { 1611 void *gui; 1612 char s[128]; 1613 sprintf(s,"%s\\HEAD.png",ICON_PATH); 1614 int x=GetImgWidth((int)s); 1615 if (old_ed_redraw) old_ed_redraw(data); 1616 gui=FindGUIbyId(contactlist_menu_id,NULL); 1617 if (gui) 1618 { 1619 ClearScreen(); 1620 // canvasdata=BuildCanvas(); 1621 PrintText(x+7,YDISP+2,status,0,fonto,1,1,0,0,ScreenW()-x); 1622 switch(CurrentPrivateStatus) 1623 { 1624 case 0: ICON_HD=ICON_ALL_CAN_SEE; break; 1625 case 1: ICON_HD=ICON_NOBODY_CAN_SEE; break; 1626 case 2: ICON_HD=ICON_VISLIST_CAN_SEE; break; 1627 case 3: ICON_HD=ICON_INVISLIST_CANNOT_SEE; break; 1628 case 4: ICON_HD=ICON_CONTACTLIST_CAN_SEE; break; 1629 default : ICON_HD=ICON_HEAD; break; 1630 } 1631 int icon, width; 1632 #ifdef NEWSGOLD 1633 icon=*(S_ICONS+ICON_HD); 1634 ((HEADER_DESC *)&contactlist_menuhdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); 1635 DrawImg(ScreenW()-1-width,1,icon); 1636 #else 1637 icon=*(S_ICONS+ICON_HD); 1638 width=GetImgWidth(icon); 1639 DrawImg(2,((HeaderH()-width)>>1)+YDISP,icon); 1640 #endif 1641 1642 } 1643 }*/ 1644 \ In segment CODE, align 4, keep-with-next 1645 void UpdateCLheader(void) 1646 { \ UpdateCLheader: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 1647 if (strlen(ContactT9Key)) \ 00000004 ........ LDR R7,??DataTable88 ;; S_ICONS \ 00000008 ........ LDR R6,??DataTable87 ;; Canvas \ 0000000C 98D04DE2 SUB SP,SP,#+152 \ 00000010 3C10A0E3 MOV R1,#+60 \ 00000014 681D81E3 ORR R1,R1,#0x1A00 \ 00000018 071081E0 ADD R1,R1,R7 \ 0000001C 0C108DE5 STR R1,[SP, #+12] \ 00000020 FC00A0E3 MOV R0,#+252 \ 00000024 640D80E3 ORR R0,R0,#0x1900 \ 00000028 074080E0 ADD R4,R0,R7 \ 0000002C D00080E2 ADD R0,R0,#+208 \ 00000030 075080E0 ADD R5,R0,R7 \ 00000034 8480A0E3 MOV R8,#+132 \ 00000038 408E88E3 ORR R8,R8,#0x400 \ 0000003C 070088E0 ADD R0,R8,R7 \ 00000040 1B0000EF SWI +27 \ 00000044 000050E3 CMP R0,#+0 \ 00000048 0B00000A BEQ ??UpdateCLheader_1 1648 { 1649 zeromem(status,64); \ 0000004C 4010A0E3 MOV R1,#+64 \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 1D0100EF SWI +285 1650 strcpy(clm_hdr_text,key_clm_hdr_text); \ 00000058 600088E3 ORR R0,R8,#0x60 \ 0000005C 061080E0 ADD R1,R0,R6 \ 00000060 0400A0E1 MOV R0,R4 \ 00000064 1A0000EF SWI +26 1651 strcat(clm_hdr_text,ContactT9Key); \ 00000068 071088E0 ADD R1,R8,R7 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 170000EF SWI +23 1652 strcpy(clmenu_sk_r,key_clmenu_sk_r); \ 00000074 221086E2 ADD R1,R6,#+34 \ 00000078 3F0100EA B ??UpdateCLheader_2 1653 } 1654 else 1655 { 1656 TTime the; 1657 GetDateTime(NULL,&the); \ ??UpdateCLheader_1: \ 0000007C 04108DE2 ADD R1,SP,#+4 \ 00000080 B40000EF SWI +180 1658 char t[64]; 1659 char s[32]; 1660 void Get_Online_total(); 1661 Get_Online_total(); \ 00000084 ........ BL Get_Online_total 1662 zeromem(clm_hdr_text,64); \ 00000088 4010A0E3 MOV R1,#+64 \ 0000008C 0400A0E1 MOV R0,R4 \ 00000090 1D0100EF SWI +285 1663 zeromem(status,64); \ 00000094 4010A0E3 MOV R1,#+64 \ 00000098 0500A0E1 MOV R0,R5 \ 0000009C 1D0100EF SWI +285 1664 switch(TIME_OR_MSG) \ 000000A0 ........ LDR R1,??DataTable75 ;; TIME_OR_MSG \ 000000A4 540088E2 ADD R0,R8,#+84 \ 000000A8 001091E5 LDR R1,[R1, #+0] \ 000000AC AB8F8FE2 ADR R8,??UpdateCLheader_3 ;; "[S]" \ 000000B0 AB9F8FE2 ADR R9,??UpdateCLheader_3+0x4 ;; "[V]" \ 000000B4 ABAF8FE2 ADR R10,??UpdateCLheader_3+0x8 ;; "[I]" \ 000000B8 ABBF8FE2 ADR R11,??UpdateCLheader_3+0xC ;; "[A]" \ 000000BC 040051E3 CMP R1,#+4 \ 000000C0 2801008A 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 1665 { 1666 case 0: 1667 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 1C0100EA B ??UpdateCLheader_8 1668 break; 1669 case 1: 1670 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,total_unread,total_unread2); \ ??UpdateCLheader_9: \ 00000104 181297E5 LDR R1,[R7, #+536] \ 00000108 062080E0 ADD R2,R0,R6 \ 0000010C 02002DE9 PUSH {R1} \ 00000110 9C3297E5 LDR R3,[R7, #+668] \ 00000114 381086E2 ADD R1,R6,#+56 \ 00000118 F5FFFFEA B ??UpdateCLheader_6 1671 break; 1672 case 2: 1673 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,kopa_kontaktu,kopa_online); \ ??UpdateCLheader_10: \ 0000011C B81297E5 LDR R1,[R7, #+696] \ 00000120 062080E0 ADD R2,R0,R6 \ 00000124 02002DE9 PUSH {R1} \ 00000128 BC3297E5 LDR R3,[R7, #+700] \ 0000012C 0400A0E1 MOV R0,R4 \ 00000130 381086E2 ADD R1,R6,#+56 \ 00000134 EFFFFFEA B ??UpdateCLheader_7 1674 break; 1675 case 3: 1676 { 1677 if(isShowTime) { sprintf(t,"[%02d:%02d]",the.hour,the.min); strcat(status,t); } \ ??UpdateCLheader_11: \ 00000138 50049FE5 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 1678 if(isShowCont) { sprintf(s,"[%d/%d]",kopa_kontaktu,kopa_online); strcat(clm_hdr_text,s); } \ ??UpdateCLheader_13: \ 00000168 24049FE5 LDR R0,??UpdateCLheader_12+0x8 ;; isShowCont \ 0000016C 000090E5 LDR R0,[R0, #+0] \ 00000170 000050E3 CMP R0,#+0 \ 00000174 0700000A BEQ ??UpdateCLheader_14 \ 00000178 B83297E5 LDR R3,[R7, #+696] \ 0000017C BC2297E5 LDR R2,[R7, #+700] \ 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 1679 if(isShowUnread) { sprintf(s,"[%d/%d]",total_unread,total_unread2); strcat(clm_hdr_text,s); } \ ??UpdateCLheader_14: \ 00000198 F8039FE5 LDR R0,??UpdateCLheader_12+0xC ;; isShowUnread \ 0000019C 000090E5 LDR R0,[R0, #+0] \ 000001A0 000050E3 CMP R0,#+0 \ 000001A4 0700000A BEQ ??UpdateCLheader_15 \ 000001A8 183297E5 LDR R3,[R7, #+536] \ 000001AC 9C2297E5 LDR R2,[R7, #+668] \ 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 1680 if(isShowTime) strcat(clm_hdr_text,t); \ ??UpdateCLheader_15: \ 000001C8 C0039FE5 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 1681 if(away_m && isShowA) strcat(clm_hdr_text,"[A]"); \ ??UpdateCLheader_16: \ 000001E4 400297E5 LDR R0,[R7, #+576] \ 000001E8 000050E3 CMP R0,#+0 \ 000001EC 0600000A BEQ ??UpdateCLheader_17 \ 000001F0 A4039FE5 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 1682 if(CurrentPrivateStatus==1 && isShowI) strcat(clm_hdr_text,"[I]") ; \ ??UpdateCLheader_17: \ 0000020C 7C0297E5 LDR R0,[R7, #+636] \ 00000210 010050E3 CMP R0,#+1 \ 00000214 0600001A BNE ??UpdateCLheader_18 \ 00000218 80039FE5 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 1683 if(Is_Vibra_Enabled && isShowV) strcat(clm_hdr_text,"[V]") ; \ ??UpdateCLheader_18: \ 00000234 280297E5 LDR R0,[R7, #+552] \ 00000238 000050E3 CMP R0,#+0 \ 0000023C 0600000A BEQ ??UpdateCLheader_19 \ 00000240 5C039FE5 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 1684 if(Is_Sounds_Enabled && isShowS) strcat(clm_hdr_text,"[S]") ; \ ??UpdateCLheader_19: \ 0000025C 700297E5 LDR R0,[R7, #+624] \ 00000260 000050E3 CMP R0,#+0 \ 00000264 0600000A BEQ ??UpdateCLheader_20 \ 00000268 38039FE5 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 1685 if(Is_Double_Vibra_On && isShowR) strcat(clm_hdr_text,"[R]") ; \ ??UpdateCLheader_20: \ 00000284 140297E5 LDR R0,[R7, #+532] \ 00000288 000050E3 CMP R0,#+0 \ 0000028C 0600000A BEQ ??UpdateCLheader_21 \ 00000290 14039FE5 LDR R0,??UpdateCLheader_12+0x20 ;; isShowR \ 00000294 000090E5 LDR R0,[R0, #+0] \ 00000298 000050E3 CMP R0,#+0 \ 0000029C 0200000A BEQ ??UpdateCLheader_21 \ 000002A0 B91F8FE2 ADR R1,??UpdateCLheader_12 ;; "[R]" \ 000002A4 0400A0E1 MOV R0,R4 \ 000002A8 170000EF SWI +23 1686 if(Show_XTX && isShowTmXs) strcat(clm_hdr_text,"[Xs]"); \ ??UpdateCLheader_21: \ 000002AC FC029FE5 LDR R0,??UpdateCLheader_12+0x24 ;; isShowTmXs \ 000002B0 4C1297E5 LDR R1,[R7, #+588] \ 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 1687 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 1688 if(isShowBat) \ ??UpdateCLheader_23: \ 000002DC D0029FE5 LDR R0,??UpdateCLheader_12+0x28 ;; isShowBat \ 000002E0 000090E5 LDR R0,[R0, #+0] \ 000002E4 000050E3 CMP R0,#+0 \ 000002E8 A200000A BEQ ??UpdateCLheader_8 1689 { 1690 int bat=*RamCap(); \ 000002EC C88000EF SWI +32968 \ 000002F0 B020D0E1 LDRH R2,[R0, #+0] 1691 char s[4]; 1692 sprintf(s,"[%d%%]",bat); \ 000002F4 681086E2 ADD R1,R6,#+104 \ 000002F8 0D00A0E1 MOV R0,SP \ 000002FC 160000EF SWI +22 1693 strcat(clm_hdr_text,s); \ 00000300 0D10A0E1 MOV R1,SP \ 00000304 0400A0E1 MOV R0,R4 \ 00000308 170000EF SWI +23 \ 0000030C 990000EA B ??UpdateCLheader_8 1694 } 1695 1696 } 1697 break; 1698 case 4://png 1699 { 1700 #ifdef kluchnik 1701 char A_s[]="[A [%s] ]"; 1702 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l 1703 if(on_off_timer > 0 && strlen(on_off_buf)!=0) 1704 sprintf(status,on_off_buf); 1705 else 1706 { 1707 sprintf(status, "[Rx:%db/Tx:%db/Queue:%db]\n",RX,TX,sendq_l); 1708 } 1709 sprintf(t,"[%d/%d] [%d/%d] ",kopa_kontaktu, kopa_online,total_unread,total_unread2); 1710 strcat(status,t); 1711 if(away_m && isShowA) { sprintf(t,A_s,away_msg_time_dace); strcat(status,t); } 1712 #else 1713 char s[32]; 1714 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l \ ??UpdateCLheader_24: \ 00000310 941297E5 LDR R1,[R7, #+660] \ 00000314 ........ LDR R0,??DataTable68 ;; MAINCSM + 108 \ 00000318 10108DE5 STR R1,[SP, #+16] \ 0000031C 981297E5 LDR R1,[R7, #+664] \ 00000320 14108DE5 STR R1,[SP, #+20] \ 00000324 000090E5 LDR R0,[R0, #+0] \ 00000328 010050E3 CMP R0,#+1 \ 0000032C 0F0000BA BLT ??UpdateCLheader_25 \ 00000330 4C10A0E3 MOV R1,#+76 \ 00000334 681D81E3 ORR R1,R1,#0x1A00 \ 00000338 071081E0 ADD R1,R1,R7 \ 0000033C 00108DE5 STR R1,[SP, #+0] \ 00000340 0100A0E1 MOV R0,R1 1715 #ifdef NEWSGOLD 1716 if(on_off_timer>0 && strlen(on_off_buf)!=0) \ 00000344 1B0000EF SWI +27 \ 00000348 000050E3 CMP R0,#+0 \ 0000034C 0700000A BEQ ??UpdateCLheader_25 1717 sprintf(status,on_off_buf); \ 00000350 00109DE5 LDR R1,[SP, #+0] \ 00000354 0500A0E1 MOV R0,R5 \ 00000358 160000EF SWI +22 \ 0000035C 0F0000EA B ??UpdateCLheader_26 \ ??UpdateCLheader_3: \ 00000360 5B535D00 DC8 "[S]" \ 00000364 5B565D00 DC8 "[V]" \ 00000368 5B495D00 DC8 "[I]" \ 0000036C 5B415D00 DC8 "[A]" 1718 else 1719 if(ShowTraff) \ ??UpdateCLheader_25: \ 00000370 40029FE5 LDR R0,??UpdateCLheader_12+0x2C ;; ShowTraff \ 00000374 000090E5 LDR R0,[R0, #+0] \ 00000378 000050E3 CMP R0,#+0 \ 0000037C 0700000A BEQ ??UpdateCLheader_26 1720 sprintf(status, "[T:%db/Queue:%db]\n",RX+TX,sendq_l); \ 00000380 ........ LDR R0,??DataTable69 ;; MAINCSM + 96 \ 00000384 003090E5 LDR R3,[R0, #+0] \ 00000388 10009DE5 LDR R0,[SP, #+16] \ 0000038C 14109DE5 LDR R1,[SP, #+20] \ 00000390 002081E0 ADD R2,R1,R0 \ 00000394 701086E2 ADD R1,R6,#+112 \ 00000398 0500A0E1 MOV R0,R5 \ 0000039C 160000EF SWI +22 1721 #else 1722 if(on_off_timer>0 && strlen(on_off_buf)!=0) 1723 sprintf(status,on_off_buf); 1724 else 1725 if(ShowTraff) 1726 sprintf(status, "[T:%db/Q:%db]\n",RX+TX,sendq_l); 1727 #endif 1728 //sprintf(status, "%s\n",def_clm_hdr_text); 1729 if(isShowTime) { sprintf(t,"[%02d:%02d]",the.hour,the.min); strcat(status,t); } \ ??UpdateCLheader_26: \ 000003A0 E8019FE5 LDR R0,??UpdateCLheader_12+0x4 ;; isShowTime \ 000003A4 000090E5 LDR R0,[R0, #+0] \ 000003A8 000050E3 CMP R0,#+0 \ 000003AC 0700000A BEQ ??UpdateCLheader_27 \ 000003B0 0530DDE5 LDRB R3,[SP, #+5] \ 000003B4 0420DDE5 LDRB R2,[SP, #+4] \ 000003B8 441086E2 ADD R1,R6,#+68 \ 000003BC 58008DE2 ADD R0,SP,#+88 \ 000003C0 160000EF SWI +22 \ 000003C4 58108DE2 ADD R1,SP,#+88 \ 000003C8 0500A0E1 MOV R0,R5 \ 000003CC 170000EF SWI +23 1730 if(isShowCont) { sprintf(s,"[%d/%d]",kopa_kontaktu,kopa_online); strcat(status,s); } \ ??UpdateCLheader_27: \ 000003D0 BC019FE5 LDR R0,??UpdateCLheader_12+0x8 ;; isShowCont \ 000003D4 000090E5 LDR R0,[R0, #+0] \ 000003D8 000050E3 CMP R0,#+0 \ 000003DC 0700000A BEQ ??UpdateCLheader_28 \ 000003E0 B83297E5 LDR R3,[R7, #+696] \ 000003E4 BC2297E5 LDR R2,[R7, #+700] \ 000003E8 501086E2 ADD R1,R6,#+80 \ 000003EC 18008DE2 ADD R0,SP,#+24 \ 000003F0 160000EF SWI +22 \ 000003F4 18108DE2 ADD R1,SP,#+24 \ 000003F8 0500A0E1 MOV R0,R5 \ 000003FC 170000EF SWI +23 1731 if(isShowUnread) { sprintf(s,"[%d/%d]",total_unread,total_unread2); strcat(status,s); } \ ??UpdateCLheader_28: \ 00000400 90019FE5 LDR R0,??UpdateCLheader_12+0xC ;; isShowUnread \ 00000404 000090E5 LDR R0,[R0, #+0] \ 00000408 000050E3 CMP R0,#+0 \ 0000040C 0700000A BEQ ??UpdateCLheader_29 \ 00000410 183297E5 LDR R3,[R7, #+536] \ 00000414 9C2297E5 LDR R2,[R7, #+668] \ 00000418 501086E2 ADD R1,R6,#+80 \ 0000041C 18008DE2 ADD R0,SP,#+24 \ 00000420 160000EF SWI +22 \ 00000424 18108DE2 ADD R1,SP,#+24 \ 00000428 0500A0E1 MOV R0,R5 \ 0000042C 170000EF SWI +23 1732 if(away_m && isShowA) { /* sprintf(t,A_s,away_msg_time_dace);*/ strcat(status,"[A]"); } \ ??UpdateCLheader_29: \ 00000430 400297E5 LDR R0,[R7, #+576] \ 00000434 000050E3 CMP R0,#+0 \ 00000438 0600000A BEQ ??UpdateCLheader_30 \ 0000043C 58019FE5 LDR R0,??UpdateCLheader_12+0x10 ;; isShowA \ 00000440 000090E5 LDR R0,[R0, #+0] \ 00000444 000050E3 CMP R0,#+0 \ 00000448 0200000A BEQ ??UpdateCLheader_30 \ 0000044C 0B10A0E1 MOV R1,R11 \ 00000450 0500A0E1 MOV R0,R5 \ 00000454 170000EF SWI +23 1733 #endif 1734 1735 if(CurrentPrivateStatus==1 && isShowI) strcat(status,"[I]"); \ ??UpdateCLheader_30: \ 00000458 7C0297E5 LDR R0,[R7, #+636] \ 0000045C 010050E3 CMP R0,#+1 \ 00000460 0600001A BNE ??UpdateCLheader_31 \ 00000464 34019FE5 LDR R0,??UpdateCLheader_12+0x14 ;; isShowI \ 00000468 000090E5 LDR R0,[R0, #+0] \ 0000046C 000050E3 CMP R0,#+0 \ 00000470 0200000A BEQ ??UpdateCLheader_31 \ 00000474 0A10A0E1 MOV R1,R10 \ 00000478 0500A0E1 MOV R0,R5 \ 0000047C 170000EF SWI +23 1736 if(Is_Vibra_Enabled && isShowV) strcat(status,"[V]"); \ ??UpdateCLheader_31: \ 00000480 280297E5 LDR R0,[R7, #+552] \ 00000484 000050E3 CMP R0,#+0 \ 00000488 0600000A BEQ ??UpdateCLheader_32 \ 0000048C 10019FE5 LDR R0,??UpdateCLheader_12+0x18 ;; isShowV \ 00000490 000090E5 LDR R0,[R0, #+0] \ 00000494 000050E3 CMP R0,#+0 \ 00000498 0200000A BEQ ??UpdateCLheader_32 \ 0000049C 0910A0E1 MOV R1,R9 \ 000004A0 0500A0E1 MOV R0,R5 \ 000004A4 170000EF SWI +23 1737 if(Is_Sounds_Enabled && isShowS) strcat(status,"[S]"); \ ??UpdateCLheader_32: \ 000004A8 700297E5 LDR R0,[R7, #+624] \ 000004AC 000050E3 CMP R0,#+0 \ 000004B0 0600000A BEQ ??UpdateCLheader_33 \ 000004B4 EC009FE5 LDR R0,??UpdateCLheader_12+0x1C ;; isShowS \ 000004B8 000090E5 LDR R0,[R0, #+0] \ 000004BC 000050E3 CMP R0,#+0 \ 000004C0 0200000A BEQ ??UpdateCLheader_33 \ 000004C4 0810A0E1 MOV R1,R8 \ 000004C8 0500A0E1 MOV R0,R5 \ 000004CC 170000EF SWI +23 1738 if(Is_Double_Vibra_On && isShowR) strcat(status,"[R]"); \ ??UpdateCLheader_33: \ 000004D0 140297E5 LDR R0,[R7, #+532] \ 000004D4 000050E3 CMP R0,#+0 \ 000004D8 0600000A BEQ ??UpdateCLheader_34 \ 000004DC C8009FE5 LDR R0,??UpdateCLheader_12+0x20 ;; isShowR \ 000004E0 000090E5 LDR R0,[R0, #+0] \ 000004E4 000050E3 CMP R0,#+0 \ 000004E8 0200000A BEQ ??UpdateCLheader_34 \ 000004EC 261F8FE2 ADR R1,??UpdateCLheader_12 ;; "[R]" \ 000004F0 0500A0E1 MOV R0,R5 \ 000004F4 170000EF SWI +23 1739 if(Show_XTX && isShowTmXs) strcat(status,"[Xs]"); \ ??UpdateCLheader_34: \ 000004F8 B0009FE5 LDR R0,??UpdateCLheader_12+0x24 ;; isShowTmXs \ 000004FC 4C1297E5 LDR R1,[R7, #+588] \ 00000500 000090E5 LDR R0,[R0, #+0] \ 00000504 000051E3 CMP R1,#+0 \ 00000508 00005013 CMPNE R0,#+0 \ 0000050C 58108612 ADDNE R1,R6,#+88 \ 00000510 0200001A BNE ??UpdateCLheader_35 1740 else 1741 if(isShowTmXs) strcat(status,"[Tm]"); \ 00000514 000050E3 CMP R0,#+0 \ 00000518 0200000A BEQ ??UpdateCLheader_36 \ 0000051C 601086E2 ADD R1,R6,#+96 \ ??UpdateCLheader_35: \ 00000520 0500A0E1 MOV R0,R5 \ 00000524 170000EF SWI +23 1742 if(isShowBat) \ ??UpdateCLheader_36: \ 00000528 84009FE5 LDR R0,??UpdateCLheader_12+0x28 ;; isShowBat \ 0000052C 000090E5 LDR R0,[R0, #+0] \ 00000530 000050E3 CMP R0,#+0 \ 00000534 0700000A BEQ ??UpdateCLheader_37 1743 { 1744 int bat=*RamCap(); \ 00000538 C88000EF SWI +32968 \ 0000053C B020D0E1 LDRH R2,[R0, #+0] 1745 char s[4]; 1746 sprintf(s,"[%d%%]",bat); \ 00000540 681086E2 ADD R1,R6,#+104 \ 00000544 0D00A0E1 MOV R0,SP \ 00000548 160000EF SWI +22 1747 strcat(status,s); \ 0000054C 0D10A0E1 MOV R1,SP \ 00000550 0500A0E1 MOV R0,R5 \ 00000554 170000EF SWI +23 1748 } 1749 zeromem(clm_hdr_text,64); \ ??UpdateCLheader_37: \ 00000558 4010A0E3 MOV R1,#+64 \ 0000055C 0400A0E1 MOV R0,R4 \ 00000560 1D0100EF SWI +285 \ 00000564 030000EA B ??UpdateCLheader_8 1750 } 1751 break; 1752 default : 1753 sprintf(clm_hdr_text, percent_s,def_clm_hdr_text); \ ??UpdateCLheader_4: \ 00000568 062080E0 ADD R2,R0,R6 \ 0000056C 1B1086E2 ADD R1,R6,#+27 \ 00000570 0400A0E1 MOV R0,R4 \ 00000574 160000EF SWI +22 1754 break; 1755 } 1756 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ ??UpdateCLheader_8: \ 00000578 4F1E86E2 ADD R1,R6,#+1264 \ ??UpdateCLheader_2: \ 0000057C 0C009DE5 LDR R0,[SP, #+12] \ 00000580 1A0000EF SWI +26 1757 } 1758 } \ 00000584 98D08DE2 ADD SP,SP,#+152 \ 00000588 F08FBDE8 POP {R4-R11,PC} ;; return \ ??UpdateCLheader_12: \ 0000058C 5B525D00 DC8 "[R]" \ 00000590 ........ DC32 isShowTime \ 00000594 ........ DC32 isShowCont \ 00000598 ........ DC32 isShowUnread \ 0000059C ........ DC32 isShowA \ 000005A0 ........ DC32 isShowI \ 000005A4 ........ DC32 isShowV \ 000005A8 ........ DC32 isShowS \ 000005AC ........ DC32 isShowR \ 000005B0 ........ DC32 isShowTmXs \ 000005B4 ........ DC32 isShowBat \ 000005B8 ........ DC32 ShowTraff 1759 \ In segment CODE, align 4, keep-with-next 1760 void ClearContactT9Key(void) 1761 { 1762 zeromem(ContactT9Key,sizeof(ContactT9Key)); \ ClearContactT9Key: \ 00000000 0C009FE5 LDR R0,??ClearContactT9Key_0 ;; S_ICONS + 1156 \ 00000004 00402DE9 PUSH {LR} \ 00000008 2010A0E3 MOV R1,#+32 \ 0000000C 1D0100EF SWI +285 1763 } \ 00000010 0080BDE8 POP {PC} ;; return \ ??ClearContactT9Key_0: \ 00000014 ........ DC32 S_ICONS + 1156 1764 \ In segment CODE, align 4, keep-with-next 1765 void AddContactT9Key(int chr) 1766 { \ AddContactT9Key: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1767 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R5,??DataTable88 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 8400A0E3 MOV R0,#+132 \ 00000010 400E80E3 ORR R0,R0,#0x400 \ 00000014 050080E0 ADD R0,R0,R5 \ 00000018 1B0000EF SWI +27 1768 if (l<(sizeof(ContactT9Key)-1)) \ 0000001C 1F0050E3 CMP R0,#+31 1769 { 1770 ContactT9Key[l]=chr; \ 00000020 05008030 ADDCC R0,R0,R5 \ 00000024 8444C035 STRBCC R4,[R0, #+1156] 1771 } 1772 } \ 00000028 3080BDE8 POP {R4,R5,PC} ;; return 1773 \ In segment CODE, align 4, keep-with-next 1774 void BackSpaceContactT9(void) 1775 { \ BackSpaceContactT9: \ 00000000 10402DE9 PUSH {R4,LR} 1776 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R4,??DataTable88 ;; S_ICONS \ 00000008 8400A0E3 MOV R0,#+132 \ 0000000C 400E80E3 ORR R0,R0,#0x400 \ 00000010 040080E0 ADD R0,R0,R4 \ 00000014 1B0000EF SWI +27 1777 if (l) \ 00000018 000050E3 CMP R0,#+0 1778 { 1779 l--; 1780 ContactT9Key[l]=0; \ 0000001C 04008010 ADDNE R0,R0,R4 \ 00000020 0010A013 MOVNE R1,#+0 \ 00000024 8314C015 STRBNE R1,[R0, #+1155] 1781 } 1782 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 1783 1784 \ In segment CODE, align 4, keep-with-next 1785 void create_contactlist_menu(void) 1786 { \ create_contactlist_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 1787 int i; 1788 i=CountContacts(); 1789 prev_clmenu_itemcount=i; \ 00000004 ........ LDR R5,??DataTable88 ;; S_ICONS 1790 UpdateCLheader(); 1791 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 B04285E5 STR R4,[R5, #+688] \ 00000018 ........ BL UpdateCLheader \ 0000001C 0600A0E1 MOV R0,R6 \ 00000020 ........ _BLF patch_header,??patch_header??rA 1792 #ifdef USE_MLMENU 1793 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 A80285E5 STR R0,[R5, #+680] 1794 #else 1795 contactlist_menu_id=CreateMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i,0,0); 1796 #endif 1797 } \ 00000044 7380BDE8 POP {R0,R1,R4-R6,PC} ;; return \ ??create_contactlist_menu_0: \ 00000048 ........ DC32 contactlist_menuhdr 1798 1799 static int unhooked2=1; 1800 \ In segment CODE, align 4, keep-with-next 1801 void contactlist_menu_ghook(void *data, int cmd) 1802 { \ contactlist_menu_ghook: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 1803 PNGTOP_DESC *pltop=PNG_TOP(); 1804 if (cmd==9) 1805 { 1806 pltop->dyn_pltop=NULL; 1807 } 1808 static int unhooked=1; 1809 if( ((unhooked) || (unhooked2)) && (TIME_OR_MSG==4) ) \ 00000004 ........ LDR R8,??DataTable88 ;; S_ICONS \ 00000008 ........ LDR R9,??DataTable97 ;; MAINCSM \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0150A0E1 MOV R5,R1 \ 00000014 B98100EF SWI +33209 \ 00000018 0060A0E1 MOV R6,R0 \ 0000001C 0070A0E3 MOV R7,#+0 \ 00000020 090055E3 CMP R5,#+9 \ 00000024 08708605 STREQ R7,[R6, #+8] \ 00000028 740099E5 LDR R0,[R9, #+116] \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 70009905 LDREQ R0,[R9, #+112] \ 00000034 00005003 CMPEQ R0,#+0 \ 00000038 1600000A BEQ ??contactlist_menu_ghook_0 \ 0000003C ........ LDR R0,??DataTable75 ;; TIME_OR_MSG \ 00000040 000090E5 LDR R0,[R0, #+0] \ 00000044 040050E3 CMP R0,#+4 \ 00000048 1200001A BNE ??contactlist_menu_ghook_0 1810 { 1811 if(!(strlen(ContactT9Key))) \ 0000004C 8400A0E3 MOV R0,#+132 \ 00000050 400E80E3 ORR R0,R0,#0x400 \ 00000054 080080E0 ADD R0,R0,R8 \ 00000058 1B0000EF SWI +27 \ 0000005C 000050E3 CMP R0,#+0 \ 00000060 0A00001A BNE ??contactlist_menu_ghook_1 1812 { 1813 GUI * gui=(GUI*)data; 1814 memcpy(&gui_methods2,gui->methods,nmeth*4); \ 00000064 041094E5 LDR R1,[R4, #+4] \ 00000068 B0AFA0E3 MOV R10,#+704 \ 0000006C 6020A0E3 MOV R2,#+96 \ 00000070 08008AE0 ADD R0,R10,R8 \ 00000074 1E0100EF SWI +286 1815 gui->methods=&gui_methods2; \ 00000078 08008AE0 ADD R0,R10,R8 \ 0000007C 040084E5 STR R0,[R4, #+4] 1816 old_redraw=gui_methods2[0]; \ 00000080 08009AE7 LDR R0,[R10, +R8] \ 00000084 200388E5 STR R0,[R8, #+800] 1817 gui_methods2[0]=(void*)&new_redraw; \ 00000088 28009FE5 LDR R0,??contactlist_menu_ghook_2 ;; new_redraw \ 0000008C 08008AE7 STR R0,[R10, +R8] 1818 } 1819 unhooked=0; \ ??contactlist_menu_ghook_1: \ 00000090 747089E5 STR R7,[R9, #+116] 1820 unhooked2=0; \ 00000094 707089E5 STR R7,[R9, #+112] 1821 } 1822 /* 1823 if (cmd==2) 1824 { 1825 static void *methods[16]; 1826 void **m=GetDataOfItemByID(data,2); 1827 if (m) 1828 { 1829 if (m[1]) 1830 { 1831 memcpy(methods,m[1],sizeof(methods)); 1832 old_ed_redraw=(void (*)(void *))(methods[0]); 1833 methods[0]=(void *)my_ed_redraw2; 1834 m[1]=methods; 1835 } 1836 } 1837 }*/ 1838 1839 if (cmd==0x0A) \ ??contactlist_menu_ghook_0: \ 00000098 0A0055E3 CMP R5,#+10 \ 0000009C F087BD18 POPNE {R4-R10,PC} 1840 { 1841 silenthide=0; 1842 pltop->dyn_pltop=XStatusesImgList; \ 000000A0 ........ LDR R0,??DataTable76 ;; XStatusesImgList \ 000000A4 687288E5 STR R7,[R8, #+616] \ 000000A8 000090E5 LDR R0,[R0, #+0] \ 000000AC 080086E5 STR R0,[R6, #+8] 1843 DisableIDLETMR(); \ 000000B0 7F0100EF SWI +383 1844 } 1845 } \ 000000B4 F087BDE8 POP {R4-R10,PC} ;; return \ ??contactlist_menu_ghook_2: \ 000000B8 ........ DC32 new_redraw 1846 \ In segment CODE, align 4, keep-with-next 1847 void RecountMenu(CLIST *req, int needfocus) 1848 { \ RecountMenu: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 1849 int i; 1850 int j; 1851 void *data; 1852 UpdateCLheader(); 1853 if (!contactlist_menu_id) return; //Нечего считать \ 00000004 ........ LDR R6,??DataTable88 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 ........ BL UpdateCLheader \ 00000014 A80296E5 LDR R0,[R6, #+680] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C F080BD08 POPEQ {R4-R7,PC} 1854 data=FindGUIbyId(contactlist_menu_id,NULL); \ 00000020 A80296E5 LDR R0,[R6, #+680] \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 090200EF SWI +521 \ 0000002C 0070A0E1 MOV R7,R0 1855 if (req==NULL) \ 00000030 000054E3 CMP R4,#+0 \ 00000034 0200000A BEQ ??RecountMenu_0 1856 { 1857 j=0; 1858 } 1859 else 1860 { 1861 j=FindContactByContact(req); \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C ........ _BLF FindContactByContact,??FindContactByContact??rA \ 00000040 0040A0E1 MOV R4,R0 1862 } 1863 i=CountContacts(); \ ??RecountMenu_0: \ 00000044 ........ _BLF CountContacts,??CountContacts??rA 1864 if (j>=i) j=i-1; 1865 if (j<0) j=0; 1866 if (i!=prev_clmenu_itemcount) \ 00000048 B01296E5 LDR R1,[R6, #+688] \ 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 1867 { 1868 prev_clmenu_itemcount=i; \ 00000064 B00286E5 STR R0,[R6, #+688] 1869 Menu_SetItemCountDyn(data,i); \ 00000068 0010A0E1 MOV R1,R0 \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 E60100EF SWI +486 1870 } 1871 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 1872 if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); \ ??RecountMenu_2: \ 00000088 A80296E5 LDR R0,[R6, #+680] \ 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 1873 } 1874 1875 1876 //-------------------- MANAGE CONTACT MENU --------------------------// 1877 1878 1879 #ifdef kluchnik 1880 #define _MAX 8 1881 #else 1882 #define _MAX 4 1883 #endif 1884 1885 static int uinContact; 1886 \ In segment CODE, align 4, keep-with-next 1887 static void ChangeVibraContact(GUI *data) 1888 { 1889 CLIST *t; 1890 t=FindContactByUin(uinContact); \ ChangeVibraContact: \ 00000000 ........ LDR R0,??DataTable82 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1891 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] 1892 RefreshGUI(); \ 00000024 960100EF SWI +406 1893 } \ 00000028 0080BDE8 POP {PC} ;; return 1894 \ In segment CODE, align 4, keep-with-next 1895 static void ChangeSoundContact(GUI *data) 1896 { 1897 CLIST *t; 1898 t=FindContactByUin(uinContact); \ ChangeSoundContact: \ 00000000 ........ LDR R0,??DataTable82 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1899 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] 1900 RefreshGUI(); \ 00000024 960100EF SWI +406 1901 } \ 00000028 0080BDE8 POP {PC} ;; return 1902 \ In segment CODE, align 4, keep-with-next 1903 static void ChangeAutoMsg(GUI *data) 1904 { 1905 CLIST *t; 1906 t=FindContactByUin(uinContact); \ ChangeAutoMsg: \ 00000000 ........ LDR R0,??DataTable82 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1907 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] 1908 RefreshGUI(); \ 00000024 960100EF SWI +406 1909 } \ 00000028 0080BDE8 POP {PC} ;; return 1910 \ In segment CODE, align 4, keep-with-next 1911 static void ChangeShowXstatus(GUI *data) 1912 { 1913 CLIST *t; 1914 t=FindContactByUin(uinContact); \ ChangeShowXstatus: \ 00000000 ........ LDR R0,??DataTable82 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1915 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] 1916 RefreshGUI(); \ 00000024 960100EF SWI +406 1917 } \ 00000028 0080BDE8 POP {PC} ;; return 1918 1919 #ifdef kluchnik 1920 1921 static void ChangeAccess(GUI *data) 1922 { 1923 CLIST *t; 1924 t=FindContactByUin(uinContact); 1925 t->isaccess=!(t->isaccess); 1926 RefreshGUI(); 1927 } 1928 1929 1930 static void ChangeAwaySignal(GUI *data) 1931 { 1932 CLIST *t; 1933 t=FindContactByUin(uinContact); 1934 t->automsgcount=automsgcount; 1935 RefreshGUI(); 1936 } 1937 1938 static void ChangeAutobot(GUI *data) 1939 { 1940 CLIST *t; 1941 t=FindContactByUin(uinContact); 1942 t->isautobot=!(t->isautobot); 1943 RefreshGUI(); 1944 } 1945 1946 static void ChangeLoadHistory(GUI *data) 1947 { 1948 CLIST *t; 1949 t=FindContactByUin(uinContact); 1950 t->isLoadHistory=!(t->isLoadHistory); 1951 RefreshGUI(); 1952 } 1953 #endif 1954 /* 1955 static void RqtXText(GUI *data) 1956 { 1957 void RequestXText(unsigned int uin); 1958 RequestXText(uinContact); 1959 GeneralFuncF1(1); 1960 } 1961 */ \ In segment CODE, align 4, keep-with-next 1962 static void contact_list_ghook(void *data, int cmd) 1963 { \ contact_list_ghook: \ 00000000 00402DE9 PUSH {LR} 1964 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 1965 { 1966 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 1967 } 1968 } \ 00000010 0080BDE8 POP {PC} ;; return 1969 static int icon_array[2]; 1970 1971 static const void *menuproc[_MAX]= 1972 { 1973 (void *)ChangeVibraContact, 1974 (void *)ChangeSoundContact, 1975 (void *)ChangeAutoMsg, 1976 (void *)ChangeShowXstatus, 1977 #ifdef kluchnik 1978 (void *)ChangeAccess, 1979 (void *)ChangeAwaySignal, 1980 (void *)ChangeLoadHistory, 1981 (void *)ChangeAutobot, 1982 #endif 1983 }; 1984 1985 static const char * const menutext[_MAX]= 1986 { 1987 "Вибра", 1988 "Звук", 1989 "Автоответчик", 1990 "Показ.хстатус", 1991 #ifdef kluchnik 1992 "Удаленное управление", 1993 "Синалы автоответчика", 1994 "Загруж.историю", 1995 "Aвтобот" 1996 #endif 1997 }; 1998 \ In segment CODE, align 4, keep-with-next 1999 static int contact_keyhook(void *data, GUI_MSG *msg) 2000 { \ contact_keyhook: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 2001 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 2002 { 2003 CLIST *t; 2004 t=FindContactByUin(uinContact); 2005 t->isIndividSet=1; \ 00000018 ........ LDR R0,??DataTable82 ;; icon_array + 8 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000024 0110A0E3 MOV R1,#+1 \ 00000028 581080E5 STR R1,[R0, #+88] 2006 ((void (*)(void))(menuproc[GetCurMenuItem(data)]))(); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 8F0100EF SWI +399 \ 00000034 0C109FE5 LDR R1,??contact_keyhook_1 ;; menuproc \ 00000038 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 0000003C 30FF2FE1 BLX R0 2007 } 2008 //if(msg->keys==LEFT_BUTTON) GeneralFuncF1(1); 2009 return(0); \ ??contact_keyhook_0: \ 00000040 0000A0E3 MOV R0,#+0 \ 00000044 1080BDE8 POP {R4,PC} ;; return \ ??contact_keyhook_1: \ 00000048 ........ DC32 menuproc 2010 } 2011 \ In segment CODE, align 4, keep-with-next 2012 static void contacthandler(void *data, int curitem, void *unk) 2013 { \ contacthandler: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 2014 WSHDR *ws; 2015 void *item=AllocMenuItem(data); 2016 extern const char percent_t[]; 2017 ws=AllocMenuWS(data,strlen(menutext[curitem])); \ 00000004 ........ LDR R8,??DataTable87 ;; 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 2018 wsprintf(ws,percent_t,menutext[curitem]); \ 00000034 181088E2 ADD R1,R8,#+24 2019 CLIST *t; 2020 t=FindContactByUin(uinContact); \ 00000038 ........ LDR R8,??DataTable85 ;; 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 2021 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 2022 { 2023 case 0: 2024 SetMenuItemIconArray(data,item,icon_array+(t->isvibra?0:1)); \ ??contacthandler_0: \ 00000074 5C0090E5 LDR R0,[R0, #+92] \ 00000078 040000EA B ??contacthandler_5 2025 break; 2026 case 1: 2027 SetMenuItemIconArray(data,item,icon_array+(t->issound?0:1)); \ ??contacthandler_1: \ 0000007C 600090E5 LDR R0,[R0, #+96] \ 00000080 020000EA B ??contacthandler_5 2028 break; 2029 case 2: 2030 SetMenuItemIconArray(data,item,icon_array+(t->isautomsg?0:1)); \ ??contacthandler_2: \ 00000084 640090E5 LDR R0,[R0, #+100] \ 00000088 000000EA B ??contacthandler_5 2031 break; 2032 case 3: 2033 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 2034 break; 2035 #ifdef kluchnik 2036 case 4: 2037 SetMenuItemIconArray(data,item,icon_array+(t->isaccess?0:1)); 2038 break; 2039 case 5: 2040 SetMenuItemIconArray(data,item,icon_array+(t->automsgcount?0:1)); 2041 break; 2042 case 6: 2043 SetMenuItemIconArray(data,item,icon_array+(t->isLoadHistory?0:1)); 2044 break; 2045 case 7: 2046 SetMenuItemIconArray(data,item,icon_array+(t->isautobot?0:1)); 2047 break; 2048 #endif 2049 } 2050 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 2051 } \ 000000C0 F083BDE8 POP {R4-R9,PC} ;; return 2052 2053 char cont_hdr[64]; 2054 static const HEADER_DESC contact_list_HDR={0,0,NULL,NULL,NULL,(int)cont_hdr,LGP_NULL}; 2055 static const int _softkeys[] = {0,1,2}; 2056 2057 static const SOFTKEY_DESC _sk[] = 2058 { 2059 {0x0018, 0x0000, (int)"Выбрать"}, 2060 {0x0001, 0x0000, (int)LG_CLOSE}, 2061 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 2062 }; 2063 2064 const SOFTKEYSTAB _skt = 2065 { 2066 _sk, 0 2067 }; 2068 static const MENU_DESC contact_list_MNU= 2069 { 2070 8,contact_keyhook,contact_list_ghook,NULL, 2071 _softkeys, 2072 &_skt, 2073 0x11, 2074 contacthandler, 2075 NULL, 2076 NULL, 2077 _MAX 2078 }; 2079 2080 \ In segment CODE, align 4, keep-with-next 2081 int CreateContactMenu(CLIST *t) 2082 { \ CreateContactMenu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 2083 uinContact=t->uin; \ 00000004 ........ LDR R5,??DataTable85 ;; icon_array 2084 icon_array[0]=GetPicNByUnicodeSymbol(CBOX_CHECKED); 2085 icon_array[1]=GetPicNByUnicodeSymbol(CBOX_UNCHECKED); 2086 sprintf(cont_hdr,"Меню кoнт. %s",t->name); \ 00000008 74609FE5 LDR R6,??CreateContactMenu_0 ;; `?next)) 2139 { 2140 if(cl->log) \ ??LongPressActionOnChat_10: \ 0000012C 900094E5 LDR R0,[R4, #+144] \ 00000130 000050E3 CMP R0,#+0 \ 00000134 0300000A BEQ ??LongPressActionOnChat_9 2141 { 2142 FreeLOGQ(&cl->log); \ 00000138 900084E2 ADD R0,R4,#+144 \ 0000013C ........ BL FreeLOGQ 2143 cl->msg_count=0; \ 00000140 A08084E5 STR R8,[R4, #+160] 2144 cl->isactive=0; \ 00000144 9C8084E5 STR R8,[R4, #+156] 2145 } 2146 } \ ??LongPressActionOnChat_9: \ 00000148 004094E5 LDR R4,[R4, #+0] \ 0000014C 000054E3 CMP R4,#+0 \ 00000150 F5FFFF1A BNE ??LongPressActionOnChat_10 2147 if(strlen(ContactT9Key)) ClearContactT9Key(); \ 00000154 060089E0 ADD R0,R9,R6 \ 00000158 1B0000EF SWI +27 \ 0000015C 000050E3 CMP R0,#+0 \ 00000160 0200000A BEQ ??LongPressActionOnChat_11 \ 00000164 2010A0E3 MOV R1,#+32 \ 00000168 060089E0 ADD R0,R9,R6 \ 0000016C 1D0100EF SWI +285 2148 RecountMenu(NULL,1); \ ??LongPressActionOnChat_11: \ 00000170 0110A0E3 MOV R1,#+1 \ 00000174 0000A0E3 MOV R0,#+0 \ 00000178 ........ BL RecountMenu 2149 ShowMSG(1,(int)"All chat clear!"); \ 0000017C F41085E2 ADD R1,R5,#+244 \ 00000180 E4FFFFEA B ??LongPressActionOnChat_6 2150 break; 2151 } 2152 case 6: 2153 if(!away_m) \ ??LongPressActionOnChat_12: \ 00000184 400296E5 LDR R0,[R6, #+576] \ 00000188 ........ LDR R5,??DataTable97 ;; MAINCSM \ 0000018C 000050E3 CMP R0,#+0 \ 00000190 0C00001A BNE ??LongPressActionOnChat_13 2154 { 2155 away_m=!away_m; \ 00000194 404286E5 STR R4,[R6, #+576] 2156 GBS_StopTimer(&away_tmr); \ 00000198 EC00A0E3 MOV R0,#+236 \ 0000019C 5C0D80E3 ORR R0,R0,#0x1700 \ 000001A0 060080E0 ADD R0,R0,R6 \ 000001A4 440100EF SWI +324 2157 msg_away_timer=AUTO_ENGADE*12; \ 000001A8 ........ LDR R0,??DataTable90 ;; AUTO_ENGADE \ 000001AC 0C10A0E3 MOV R1,#+12 \ 000001B0 000090E5 LDR R0,[R0, #+0] \ 000001B4 910000E0 MUL R0,R1,R0 \ 000001B8 500085E5 STR R0,[R5, #+80] 2158 InputAwayMsg(); \ 000001BC ........ BL InputAwayMsg \ 000001C0 ........ BL UpdateCLheader \ 000001C4 F18FBDE8 POP {R0,R4-R11,PC} 2159 2160 } 2161 else 2162 { 2163 msg_away_timer=0; 2164 away_m=!away_m; 2165 if(change_back_status) \ ??LongPressActionOnChat_13: \ 000001C8 480296E5 LDR R0,[R6, #+584] \ 000001CC 508085E5 STR R8,[R5, #+80] \ 000001D0 408286E5 STR R8,[R6, #+576] \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 0300000A BEQ ??LongPressActionOnChat_14 2166 { 2167 CurrentStatus=status_rem; \ 000001DC 440296E5 LDR R0,[R6, #+580] \ 000001E0 300286E5 STR R0,[R6, #+560] 2168 set_my_status(); \ 000001E4 ........ BL set_my_status 2169 change_back_status=0; \ 000001E8 488286E5 STR R8,[R6, #+584] 2170 } 2171 } 2172 UpdateCLheader(); \ ??LongPressActionOnChat_14: \ 000001EC ........ BL UpdateCLheader \ 000001F0 F18FBDE8 POP {R0,R4-R11,PC} 2173 break; 2174 case 7: 2175 { 2176 Show_XTX=!(Show_XTX); \ ??LongPressActionOnChat_15: \ 000001F4 4C0296E5 LDR R0,[R6, #+588] \ 000001F8 000050E3 CMP R0,#+0 \ 000001FC 0040A013 MOVNE R4,#+0 \ 00000200 4C4286E5 STR R4,[R6, #+588] 2177 if(Show_XTX) \ 00000204 000054E3 CMP R4,#+0 \ 00000208 471F8502 ADDEQ R1,R5,#+284 2178 ShowMSG(1,(int)"Default show x-status"); \ 0000020C 411F8512 ADDNE R1,R5,#+260 \ 00000210 C0FFFFEA B ??LongPressActionOnChat_6 2179 else 2180 ShowMSG(1,(int)"Default show time"); 2181 } 2182 break; 2183 case 8: 2184 { 2185 WSHDR *ws; 2186 ws=AllocWS(150); \ ??LongPressActionOnChat_16: \ 00000214 9600A0E3 MOV R0,#+150 \ 00000218 250100EF SWI +293 2187 str_2ws(ws,suc_config_name,128); \ 0000021C ........ LDR R1,??DataTable91 ;; suc_config_name \ 00000220 020000EA B ??LongPressActionOnChat_17 2188 ExecuteFile(ws,0,0); 2189 FreeWS(ws); 2190 } 2191 break; 2192 case 9: 2193 { 2194 WSHDR *ws; 2195 ws=AllocWS(150); \ ??LongPressActionOnChat_18: \ 00000224 9600A0E3 MOV R0,#+150 \ 00000228 250100EF SWI +293 2196 str_2ws(ws,suc_config_name_mod,128); \ 0000022C ........ LDR R1,??DataTable92 ;; suc_config_name_mod \ ??LongPressActionOnChat_17: \ 00000230 0040A0E1 MOV R4,R0 \ 00000234 8020A0E3 MOV R2,#+128 \ 00000238 6C0100EF SWI +364 2197 ExecuteFile(ws,0,0); \ 0000023C 0020A0E3 MOV R2,#+0 \ 00000240 0210A0E1 MOV R1,R2 \ 00000244 0400A0E1 MOV R0,R4 \ 00000248 940000EF SWI +148 2198 FreeWS(ws); \ 0000024C 0400A0E1 MOV R0,R4 \ 00000250 290100EF SWI +297 \ 00000254 F18FBDE8 POP {R0,R4-R11,PC} 2199 } 2200 break; 2201 case 10://ping 2202 { 2203 janis=1; \ ??LongPressActionOnChat_19: \ 00000258 ........ LDR R0,??DataTable93 ;; janis \ 0000025C 004080E5 STR R4,[R0, #+0] 2204 TPKT *p; 2205 p=malloc(sizeof(PKT)+sizeof(TTime)); \ 00000260 1000A0E3 MOV R0,#+16 \ 00000264 140000EF SWI +20 \ 00000268 0040A0E1 MOV R4,R0 2206 GetDateTime(NULL,(TTime *)p->data); \ 0000026C 081084E2 ADD R1,R4,#+8 \ 00000270 0000A0E3 MOV R0,#+0 \ 00000274 B40000EF SWI +180 2207 p->pkt.uin=0; \ 00000278 008084E5 STR R8,[R4, #+0] 2208 p->pkt.type=T_ECHO; \ 0000027C 1200A0E3 MOV R0,#+18 \ 00000280 B400C4E1 STRH R0,[R4, #+4] 2209 p->pkt.data_len=sizeof(TTime); \ 00000284 0800A0E3 MOV R0,#+8 \ 00000288 B600C4E1 STRH R0,[R4, #+6] 2210 SUBPROC((void *)SendAnswer,0,p); \ 0000028C ........ LDR R0,??DataTable94 ;; SendAnswer \ 00000290 0420A0E1 MOV R2,R4 \ 00000294 0810A0E1 MOV R1,R8 \ 00000298 710100EF SWI +369 \ 0000029C F18FBDE8 POP {R0,R4-R11,PC} 2211 } 2212 break; 2213 case 11://go to idle 2214 { 2215 ClearContactT9Key(); \ ??LongPressActionOnChat_20: \ 000002A0 2010A0E3 MOV R1,#+32 \ 000002A4 060089E0 ADD R0,R9,R6 \ 000002A8 1D0100EF SWI +285 2216 RecountMenu(NULL,1); \ 000002AC 0110A0E3 MOV R1,#+1 \ 000002B0 0800A0E1 MOV R0,R8 \ 000002B4 ........ BL RecountMenu 2217 silenthide=1; \ 000002B8 684286E5 STR R4,[R6, #+616] 2218 gipc.name_to=ipc_xtask_name; \ 000002BC 4C0E85E2 ADD R0,R5,#+1216 \ 000002C0 740086E5 STR R0,[R6, #+116] 2219 gipc.name_from=ipc_my_name; \ 000002C4 4A0E85E2 ADD R0,R5,#+1184 \ 000002C8 780086E5 STR R0,[R6, #+120] 2220 gipc.data=0; \ 000002CC 7C8086E5 STR R8,[R6, #+124] 2221 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 000002D0 743086E2 ADD R3,R6,#+116 \ 000002D4 0420A0E1 MOV R2,R4 \ 000002D8 0B10A0E1 MOV R1,R11 \ 000002DC 0A00A0E1 MOV R0,R10 \ 000002E0 000100EF SWI +256 \ 000002E4 F18FBDE8 POP {R0,R4-R11,PC} 2222 } 2223 break; 2224 case 12://hide & lock 2225 { 2226 ClearContactT9Key(); \ ??LongPressActionOnChat_21: \ 000002E8 2010A0E3 MOV R1,#+32 \ 000002EC 060089E0 ADD R0,R9,R6 \ 000002F0 1D0100EF SWI +285 2227 RecountMenu(NULL,1); \ 000002F4 0110A0E3 MOV R1,#+1 \ 000002F8 0800A0E1 MOV R0,R8 \ 000002FC ........ BL RecountMenu 2228 gipc.name_to=ipc_xtask_name; \ 00000300 4C0E85E2 ADD R0,R5,#+1216 \ 00000304 740086E5 STR R0,[R6, #+116] 2229 gipc.name_from=ipc_my_name; \ 00000308 4A0E85E2 ADD R0,R5,#+1184 \ 0000030C 780086E5 STR R0,[R6, #+120] 2230 gipc.data=0; \ 00000310 7C8086E5 STR R8,[R6, #+124] 2231 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 00000314 743086E2 ADD R3,R6,#+116 \ 00000318 0420A0E1 MOV R2,R4 \ 0000031C 0B10A0E1 MOV R1,R11 \ 00000320 0A00A0E1 MOV R0,R10 \ 00000324 000100EF SWI +256 2232 if (IsUnlocked()) \ 00000328 430000EF SWI +67 \ 0000032C 000050E3 CMP R0,#+0 \ 00000330 F18FBD08 POPEQ {R0,R4-R11,PC} 2233 { 2234 KbdLock(); \ 00000334 A90000EF SWI +169 \ 00000338 F18FBDE8 POP {R0,R4-R11,PC} 2235 } 2236 // return(-1); 2237 } 2238 break; 2239 case 13://users menu 2240 { 2241 if(!t->isgroup) \ ??LongPressActionOnChat_22: \ 0000033C 081090E5 LDR R1,[R0, #+8] \ 00000340 000051E3 CMP R1,#+0 \ 00000344 F18FBD18 POPNE {R0,R4-R11,PC} 2242 CreateContactMenu(t); \ 00000348 ........ BL CreateContactMenu 2243 } 2244 break; 2245 }//switch() 2246 } \ ??LongPressActionOnChat_23: \ 0000034C F18FBDE8 POP {R0,R4-R11,PC} ;; return 2247 2248 //{"Без действия","Звук","Вибра","Инвиз","Реж.напоминания","Очистить чаты","Автоответчик","Показ.хстат/время","Конфиг","Конфиг мода","Пинг","Заблокировать","На гэ","Меню юзера"} 2249 \ In segment CODE, align 4, keep-with-next 2250 void LongPressAction(CLIST *t,int key) 2251 { \ LongPressAction: \ 00000000 00402DE9 PUSH {LR} 2252 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 2253 { 2254 case '0': LongPressActionOnChat(t,longAct_0); break; \ ??LongPressAction_1: \ 00000038 78109FE5 LDR R1,??LongPressAction_2 ;; longAct_0 \ 0000003C 040000EA B ??LongPressAction_3 2255 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} 2256 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} 2257 case '3': LongPressActionOnChat(t,longAct_3); break; \ ??LongPressAction_6: \ 00000060 5C109FE5 LDR R1,??LongPressAction_2+0xC ;; longAct_3 \ 00000064 FAFFFFEA B ??LongPressAction_3 2258 case '4': LongPressActionOnChat(t,longAct_4); break; \ ??LongPressAction_7: \ 00000068 58109FE5 LDR R1,??LongPressAction_2+0x10 ;; longAct_4 \ 0000006C F8FFFFEA B ??LongPressAction_3 2259 case '5': LongPressActionOnChat(t,longAct_5); break; \ ??LongPressAction_8: \ 00000070 54109FE5 LDR R1,??LongPressAction_2+0x14 ;; longAct_5 \ 00000074 F6FFFFEA B ??LongPressAction_3 2260 case '6': LongPressActionOnChat(t,longAct_6); break; \ ??LongPressAction_9: \ 00000078 50109FE5 LDR R1,??LongPressAction_2+0x18 ;; longAct_6 \ 0000007C F4FFFFEA B ??LongPressAction_3 2261 case '7': LongPressActionOnChat(t,longAct_7); break; \ ??LongPressAction_10: \ 00000080 4C109FE5 LDR R1,??LongPressAction_2+0x1C ;; longAct_7 \ 00000084 F2FFFFEA B ??LongPressAction_3 2262 case '8': LongPressActionOnChat(t,longAct_8); break; \ ??LongPressAction_11: \ 00000088 48109FE5 LDR R1,??LongPressAction_2+0x20 ;; longAct_8 \ 0000008C F0FFFFEA B ??LongPressAction_3 2263 case '9': LongPressActionOnChat(t,longAct_9); break; \ ??LongPressAction_12: \ 00000090 44109FE5 LDR R1,??LongPressAction_2+0x24 ;; longAct_9 \ 00000094 EEFFFFEA B ??LongPressAction_3 2264 case '*': LongPressActionOnChat(t,longAct_10); break; \ ??LongPressAction_13: \ 00000098 40109FE5 LDR R1,??LongPressAction_2+0x28 ;; longAct_10 \ 0000009C ECFFFFEA B ??LongPressAction_3 2265 case '#': LongPressActionOnChat(t,longAct_11); break; \ ??LongPressAction_14: \ 000000A0 3C109FE5 LDR R1,??LongPressAction_2+0x2C ;; longAct_11 \ 000000A4 EAFFFFEA B ??LongPressAction_3 2266 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 2267 } 2268 } \ ??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 2269 2270 char hostbuf2[128]; 2271 \ In segment CODE, align 4, keep-with-next 2272 int contactlist_menu_onkey(void *data, GUI_MSG *msg) 2273 { \ contactlist_menu_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2274 #ifdef NEWSGOLD 2275 scrsTime=0; \ 00000004 ........ LDR R7,??DataTable112 ;; S_ICONS \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C 0040A0E3 MOV R4,#+0 \ 00000010 3C4287E5 STR R4,[R7, #+572] 2276 #endif 2277 2278 CLIST *t; 2279 int i; 2280 i=GetCurMenuItem(data); \ 00000014 8F0100EF SWI +399 2281 t=FindContactByN(i); \ 00000018 ........ _BLF FindContactByN,??FindContactByN??rA \ 0000001C 0050A0E1 MOV R5,R0 2282 2283 if (msg->keys==0x18) \ 00000020 F200D6E1 LDRSH R0,[R6, #+2] \ 00000024 180050E3 CMP R0,#+24 \ 00000028 0100001A BNE ??contactlist_menu_onkey_0 2284 { 2285 ShowMainMenu(); \ 0000002C ........ _BLF ShowMainMenu,??ShowMainMenu??rA 2286 return(-1); \ 00000030 F70000EA B ??contactlist_menu_onkey_1 2287 } 2288 2289 if (msg->keys==0x3D) \ ??contactlist_menu_onkey_0: \ 00000034 8480A0E3 MOV R8,#+132 \ 00000038 408E88E3 ORR R8,R8,#0x400 \ 0000003C 3D0050E3 CMP R0,#+61 \ 00000040 2400001A BNE ??contactlist_menu_onkey_2 2290 { 2291 if (t) \ 00000044 000055E3 CMP R5,#+0 \ 00000048 3A00000A BEQ ??contactlist_menu_onkey_3 2292 { 2293 if (t->isgroup) \ 0000004C 080095E5 LDR R0,[R5, #+8] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0700000A BEQ ??contactlist_menu_onkey_4 2294 { 2295 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] 2296 RecountMenu(t,1); \ ??contactlist_menu_onkey_5: \ 0000006C 0110A0E3 MOV R1,#+1 \ 00000070 0500A0E1 MOV R0,R5 \ 00000074 2E0000EA B ??contactlist_menu_onkey_6 2297 return(-1); 2298 } 2299 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 2300 { 2301 ClearContactT9Key(); \ 00000088 2010A0E3 MOV R1,#+32 \ 0000008C 070088E0 ADD R0,R8,R7 \ 00000090 1D0100EF SWI +285 2302 RecountMenu(NULL,1); \ 00000094 0110A0E3 MOV R1,#+1 \ 00000098 0000A0E3 MOV R0,#+0 \ 0000009C ........ BL RecountMenu 2303 } 2304 #ifdef kluchnik 2305 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 2316 { 2317 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 2318 { 2319 BackSpaceContactT9(); \ 000000F0 ........ BL BackSpaceContactT9 2320 RecountMenu(NULL,1); \ 000000F4 0C0000EA B ??contactlist_menu_onkey_10 2321 return(-1); 2322 } 2323 } 2324 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 3A00001A BNE ??contactlist_menu_onkey_11 2325 { 2326 int key=msg->gbsmsg->submess; \ 00000110 089090E5 LDR R9,[R0, #+8] 2327 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 2328 { 2329 AddContactT9Key(key); \ 00000124 0900A0E1 MOV R0,R9 \ 00000128 ........ BL AddContactT9Key 2330 RecountMenu(NULL,1); \ ??contactlist_menu_onkey_10: \ 0000012C 0110A0E3 MOV R1,#+1 \ 00000130 0000A0E3 MOV R0,#+0 \ ??contactlist_menu_onkey_6: \ 00000134 ........ BL RecountMenu 2331 return(-1); \ ??contactlist_menu_onkey_3: \ 00000138 0400E0E1 MVN R0,R4 \ 0000013C F08FBDE8 POP {R4-R11,PC} 2332 } 2333 2334 if (key==VOL_UP_BUTTON && isVolUpButton) \ ??contactlist_menu_onkey_12: \ 00000140 0D0059E3 CMP R9,#+13 \ 00000144 0400001A BNE ??contactlist_menu_onkey_13 \ 00000148 04039FE5 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 2335 { 2336 #ifdef NEWSGOLD 2337 CreateScreenSelectGUI(); \ 00000158 ........ _BLF CreateScreenSelectGUI,??CreateScreenSelectGUI??rA 2338 #else 2339 char *small_info=malloc(256); 2340 sprintf(small_info, "Время в онлайн:\n" 2341 "%02d:%02d:%02d\n" 2342 "Сервер:\n%s" 2343 ,uptimeHour, uptimeMin, uptimeSec, hostbuf2); 2344 ShowMSG(1,(int)small_info); 2345 mfree(small_info); 2346 #endif 2347 } 2348 2349 if(msg->gbsmsg->submess==VOL_DOWN_BUTTON && isVolDownButton) \ ??contactlist_menu_onkey_13: \ 0000015C 040096E5 LDR R0,[R6, #+4] \ 00000160 ........ LDR R10,??DataTable97 ;; MAINCSM \ 00000164 080090E5 LDR R0,[R0, #+8] \ 00000168 01B0A0E3 MOV R11,#+1 \ 0000016C 0E0050E3 CMP R0,#+14 \ 00000170 1500001A BNE ??contactlist_menu_onkey_15 \ 00000174 DC029FE5 LDR R0,??contactlist_menu_onkey_14+0x4 ;; isVolDownButton \ 00000178 000090E5 LDR R0,[R0, #+0] \ 0000017C 000050E3 CMP R0,#+0 \ 00000180 1100000A BEQ ??contactlist_menu_onkey_15 2350 { 2351 if(!away_m) \ 00000184 400297E5 LDR R0,[R7, #+576] \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 0300001A BNE ??contactlist_menu_onkey_16 2352 { 2353 away_m=!away_m; \ 00000190 40B287E5 STR R11,[R7, #+576] 2354 /* GBS_StopTimer(&away_tmr); 2355 msg_away_timer=AUTO_ENGADE; 2356 away_timer();*/ 2357 main_d=1; \ 00000194 ECB187E5 STR R11,[R7, #+492] 2358 InputAwayMsg(); \ 00000198 ........ BL InputAwayMsg \ 0000019C 080000EA B ??contactlist_menu_onkey_17 2359 } 2360 else 2361 { 2362 msg_away_timer=0; 2363 away_m=!away_m; 2364 if(change_back_status) \ ??contactlist_menu_onkey_16: \ 000001A0 480297E5 LDR R0,[R7, #+584] \ 000001A4 50408AE5 STR R4,[R10, #+80] \ 000001A8 404287E5 STR R4,[R7, #+576] \ 000001AC 000050E3 CMP R0,#+0 \ 000001B0 0300000A BEQ ??contactlist_menu_onkey_17 2365 { 2366 CurrentStatus=status_rem; \ 000001B4 440297E5 LDR R0,[R7, #+580] \ 000001B8 300287E5 STR R0,[R7, #+560] 2367 set_my_status(); \ 000001BC ........ BL set_my_status 2368 change_back_status=0; \ 000001C0 484287E5 STR R4,[R7, #+584] 2369 } 2370 } 2371 UpdateCLheader(); \ ??contactlist_menu_onkey_17: \ 000001C4 ........ BL UpdateCLheader 2372 RefreshGUI(); \ 000001C8 960100EF SWI +406 2373 } 2374 2375 if(key==GREEN_BUTTON) \ ??contactlist_menu_onkey_15: \ 000001CC 0B0059E3 CMP R9,#+11 \ 000001D0 0400001A BNE ??contactlist_menu_onkey_18 2376 { 2377 IsActiveUp=!IsActiveUp; \ 000001D4 4C009AE5 LDR R0,[R10, #+76] \ 000001D8 000050E3 CMP R0,#+0 \ 000001DC 00B0A013 MOVNE R11,#+0 \ 000001E0 4CB08AE5 STR R11,[R10, #+76] 2378 RecountMenu(NULL,1); \ 000001E4 D0FFFFEA B ??contactlist_menu_onkey_10 2379 return(-1); 2380 } 2381 2382 if(key==LEFT_BUTTON && (CountContacts()>0)) \ ??contactlist_menu_onkey_18: \ 000001E8 3D0059E3 CMP R9,#+61 \ 000001EC 2E00001A BNE ??contactlist_menu_onkey_19 \ 000001F0 ........ _BLF CountContacts,??CountContacts??rA \ 000001F4 010050E3 CMP R0,#+1 \ 000001F8 1A0000AA BGE ??contactlist_menu_onkey_20 2383 { 2384 while(t=(CLIST *)(t->next)) 2385 { 2386 if (t->isunread) goto doit; 2387 } 2388 t=(CLIST *)(&cltop); 2389 while(t=(CLIST *)(t->next)) 2390 { 2391 if (t->isunread) goto doit; 2392 } 2393 if (t && Is_Show_Groups) { 2394 if (!t->isgroup) 2395 t=FindGroupByID(t->group); 2396 if (t && !t->state) { 2397 t->state^=0xFFFF; 2398 goto does; 2399 } 2400 } 2401 doit: 2402 { 2403 CLIST *g=FindGroupByID(t->group); 2404 if (g) 2405 { 2406 if (g->state) 2407 { 2408 g->state=0; 2409 } 2410 } 2411 } 2412 does: 2413 RecountMenu(t,1); 2414 return(-1); 2415 } 2416 2417 if (key=='*' && (CountContacts()>0)) 2418 { 2419 while(t=(CLIST *)(t->next)) 2420 { 2421 if (t->just_now) goto doit3; 2422 } 2423 t=(CLIST *)(&cltop); 2424 while(t=(CLIST *)(t->next)) 2425 { 2426 if (t->just_now) goto doit3; 2427 } 2428 return(-1); 2429 doit3: 2430 { 2431 CLIST *g=FindGroupByID(t->group); 2432 if (g) 2433 { 2434 if (g->state) 2435 { 2436 g->state=0; 2437 } 2438 } 2439 } 2440 RecountMenu(t,1); 2441 return(-1); 2442 } 2443 2444 if (key=='#' && (CountContacts()>0))//Если есть хоть один контакт то выполнять,иначе возможен пикофф 2445 { 2446 if(ActionResh) 2447 { 2448 while(t=(CLIST *)(t->next)) 2449 { 2450 if (t->isactive) goto doit4; 2451 } 2452 t=(CLIST *)(&cltop); 2453 while(t=(CLIST *)(t->next)) 2454 { 2455 if (t->isactive) goto doit4; 2456 } 2457 return(-1); 2458 doit4: 2459 { 2460 CLIST *g=FindGroupByID(t->group); 2461 if (g) 2462 { 2463 if (g->state) 2464 { 2465 g->state=0; 2466 } 2467 } 2468 } 2469 RecountMenu(t,1); 2470 } 2471 else 2472 { 2473 if(t->log && !(t->just_now))//очистить лог 2474 { 2475 FreeLOGQ(&t->log); 2476 t->msg_count=0; 2477 t->isactive=0; 2478 } 2479 2480 if(t->just_now)//если контакт тока зашел,то обнуляем 2481 { 2482 CLIST *tt; 2483 tt=FindContactByUin(t->uin); 2484 tt->just_now=0; 2485 } 2486 2487 if(t->uin==UIN)//если нажали на Loopback, то обнуляем все just_now'ы 2488 { 2489 CLIST *tt; 2490 tt=(CLIST *)(&cltop); 2491 while(tt=(CLIST *)(tt->next)) 2492 { 2493 if(tt->just_now) tt->just_now=0; 2494 } 2495 } 2496 2497 if(strlen(ContactT9Key)) ClearContactT9Key(); 2498 RecountMenu(NULL,0); 2499 } 2500 return(-1); 2501 } 2502 2503 if (key==RIGHT_BUTTON) 2504 { 2505 //Послать запрос текста XStatus 2506 if (t) 2507 { 2508 if (!t->isgroup) 2509 { 2510 FreeXText(t); 2511 t->req_xtext=0; 2512 RequestXText(t->uin); 2513 RefreshGUI(); 2514 return(-1); 2515 } 2516 } 2517 } 2518 } 2519 2520 if (msg->gbsmsg->msg==LONG_PRESS) \ ??contactlist_menu_onkey_11: \ 000001FC 040096E5 LDR R0,[R6, #+4] \ 00000200 9520A0E3 MOV R2,#+149 \ 00000204 041090E5 LDR R1,[R0, #+4] \ 00000208 402F82E3 ORR R2,R2,#0x100 \ 0000020C 020051E1 CMP R1,R2 \ 00000210 0F00001A BNE ??contactlist_menu_onkey_21 2521 { 2522 /* if (msg->gbsmsg->submess=='#') 2523 { 2524 ClearContactT9Key(); 2525 RecountMenu(NULL,1); 2526 gipc.name_to=ipc_xtask_name; 2527 gipc.name_from=ipc_my_name; 2528 gipc.data=0; 2529 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); 2530 if (IsUnlocked()) 2531 { 2532 KbdLock(); 2533 } 2534 // CreateScreenSelectGUI(); 2535 return(-1); 2536 } 2537 if(msg->gbsmsg->submess=='*') 2538 { 2539 ClearContactT9Key(); 2540 RecountMenu(NULL,1); 2541 silenthide=1; 2542 gipc.name_to=ipc_xtask_name; 2543 gipc.name_from=ipc_my_name; 2544 gipc.data=0; 2545 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); 2546 } 2547 2548 if(msg->gbsmsg->submess==RIGHT_BUTTON) 2549 { 2550 if(!t->isgroup) 2551 CreateContactMenu(t); 2552 }*/ 2553 2554 //-------------------- LONG PRESS ACTION ON CL --------------------// 2555 /* switch(msg->gbsmsg->submess) 2556 { 2557 case '1': 2558 Is_Sounds_Enabled=!(Is_Sounds_Enabled); 2559 if(Is_Sounds_Enabled) 2560 ShowMSG(1,(int)"Sound 0n"); 2561 else 2562 ShowMSG(1,(int)"Sound Off"); 2563 SUBPROC((void*)WriteDefSettings); 2564 break; 2565 case '2': 2566 Is_Vibra_Enabled=!(Is_Vibra_Enabled); 2567 SUBPROC((void*)WriteDefSettings); 2568 if(Is_Vibra_Enabled) 2569 ShowMSG(1,(int)"Vibra On"); 2570 else 2571 ShowMSG(1,(int)"Vibra Off"); 2572 break; 2573 case '3': 2574 if(CurrentPrivateStatus!=1) 2575 { 2576 SetPrivateStatus(1);//Инвиз 2577 ShowMSG(1,(int)"Инвиз включен"); 2578 } 2579 else 2580 { 2581 SetPrivateStatus(3); 2582 ShowMSG(1,(int)"Инвиз выключен"); 2583 } 2584 break; 2585 case '4': 2586 Is_Double_Vibra_On=!(Is_Double_Vibra_On); 2587 SUBPROC((void*)WriteDefSettings); 2588 if(Is_Double_Vibra_On) 2589 ShowMSG(1,(int)"Vibra rem On"); 2590 else 2591 ShowMSG(1,(int)"Vibra rem Off"); 2592 break; 2593 case '5': 2594 { 2595 CLIST *cl; 2596 cl=(CLIST *)(&cltop); 2597 while(cl=(CLIST *)(cl->next)) 2598 { 2599 if(cl->log) 2600 { 2601 FreeLOGQ(&cl->log); 2602 cl->msg_count=0; 2603 cl->isactive=0; 2604 } 2605 } 2606 if(strlen(ContactT9Key)) ClearContactT9Key(); 2607 RecountMenu(NULL,1); 2608 return (-1); 2609 } 2610 case '6': 2611 Is_Show_Offline=!(Is_Show_Offline); 2612 if(Is_Show_Offline) 2613 ShowMSG(1,(int)"Offline on"); 2614 else 2615 ShowMSG(1,(int)"Offline off"); 2616 UpdateCLheader(); 2617 break; 2618 case '7': 2619 { 2620 Show_XTX=!(Show_XTX); 2621 if(Show_XTX) 2622 ShowMSG(1,(int)"Default show x-status"); 2623 else 2624 ShowMSG(1,(int)"Default show time"); 2625 } 2626 break; 2627 case '8': 2628 { 2629 WSHDR *ws; 2630 ws=AllocWS(150); 2631 str_2ws(ws,suc_config_name,128); 2632 ExecuteFile(ws,0,0); 2633 FreeWS(ws); 2634 } 2635 break; 2636 case '9': 2637 { 2638 WSHDR *ws; 2639 ws=AllocWS(150); 2640 str_2ws(ws,suc_config_name_mod,128); 2641 ExecuteFile(ws,0,0); 2642 FreeWS(ws); 2643 } 2644 break; 2645 case '0'://ping 2646 { 2647 janis=1; 2648 TPKT *p; 2649 p=malloc(sizeof(PKT)+sizeof(TTime)); 2650 GetDateTime(NULL,(TTime *)p->data); 2651 p->pkt.uin=0; 2652 p->pkt.type=T_ECHO; 2653 p->pkt.data_len=sizeof(TTime); 2654 SUBPROC((void *)SendAnswer,0,p); 2655 } 2656 break; 2657 } */ 2658 LongPressAction(t,msg->gbsmsg->submess); \ 00000214 081090E5 LDR R1,[R0, #+8] \ 00000218 0500A0E1 MOV R0,R5 \ 0000021C ........ BL LongPressAction 2659 2660 int key=msg->gbsmsg->submess; \ 00000220 040096E5 LDR R0,[R6, #+4] \ 00000224 080090E5 LDR R0,[R0, #+8] 2661 if ((key>='0')&&(key<='9')) \ 00000228 300050E3 CMP R0,#+48 \ 0000022C 080000BA BLT ??contactlist_menu_onkey_21 \ 00000230 3A0050E3 CMP R0,#+58 \ 00000234 060000AA BGE ??contactlist_menu_onkey_21 2662 { 2663 ClearContactT9Key(); \ 00000238 2010A0E3 MOV R1,#+32 \ 0000023C 070088E0 ADD R0,R8,R7 \ 00000240 1D0100EF SWI +285 2664 UpdateCLheader(); \ 00000244 ........ BL UpdateCLheader 2665 RecountMenu(NULL,1); \ 00000248 0110A0E3 MOV R1,#+1 \ 0000024C 0000A0E3 MOV R0,#+0 \ 00000250 ........ BL RecountMenu 2666 } 2667 } 2668 return(0); \ ??contactlist_menu_onkey_21: \ 00000254 0000A0E3 MOV R0,#+0 \ 00000258 F08FBDE8 POP {R4-R11,PC} ;; return \ ??contactlist_menu_onkey_22: \ 0000025C 800095E5 LDR R0,[R5, #+128] \ 00000260 000050E3 CMP R0,#+0 \ 00000264 0900001A BNE ??contactlist_menu_onkey_23 \ ??contactlist_menu_onkey_20: \ 00000268 005095E5 LDR R5,[R5, #+0] \ 0000026C 000055E3 CMP R5,#+0 \ 00000270 F9FFFF1A BNE ??contactlist_menu_onkey_22 \ 00000274 A85F87E2 ADD R5,R7,#+672 \ ??contactlist_menu_onkey_24: \ 00000278 005095E5 LDR R5,[R5, #+0] \ 0000027C 000055E3 CMP R5,#+0 \ 00000280 0200000A BEQ ??contactlist_menu_onkey_23 \ 00000284 800095E5 LDR R0,[R5, #+128] \ 00000288 000050E3 CMP R0,#+0 \ 0000028C F9FFFF0A BEQ ??contactlist_menu_onkey_24 \ ??contactlist_menu_onkey_23: \ 00000290 100095E5 LDR R0,[R5, #+16] \ 00000294 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000298 000050E3 CMP R0,#+0 \ 0000029C B415D011 LDRHNE R1,[R0, #+84] \ 000002A0 00005113 CMPNE R1,#+0 \ 000002A4 B445C011 STRHNE R4,[R0, #+84] \ 000002A8 6FFFFFEA B ??contactlist_menu_onkey_5 \ ??contactlist_menu_onkey_19: \ 000002AC 2A0059E3 CMP R9,#+42 \ 000002B0 1100001A BNE ??contactlist_menu_onkey_25 \ 000002B4 ........ _BLF CountContacts,??CountContacts??rA \ 000002B8 010050E3 CMP R0,#+1 \ 000002BC CEFFFFBA BLT ??contactlist_menu_onkey_11 \ 000002C0 020000EA B ??contactlist_menu_onkey_26 \ ??contactlist_menu_onkey_27: \ 000002C4 680095E5 LDR R0,[R5, #+104] \ 000002C8 000050E3 CMP R0,#+0 \ 000002CC EFFFFF1A BNE ??contactlist_menu_onkey_23 \ ??contactlist_menu_onkey_26: \ 000002D0 005095E5 LDR R5,[R5, #+0] \ 000002D4 000055E3 CMP R5,#+0 \ 000002D8 F9FFFF1A BNE ??contactlist_menu_onkey_27 \ 000002DC A85F87E2 ADD R5,R7,#+672 \ ??contactlist_menu_onkey_28: \ 000002E0 005095E5 LDR R5,[R5, #+0] \ 000002E4 000055E3 CMP R5,#+0 \ 000002E8 92FFFF0A BEQ ??contactlist_menu_onkey_3 \ 000002EC 680095E5 LDR R0,[R5, #+104] \ 000002F0 000050E3 CMP R0,#+0 \ 000002F4 F9FFFF0A BEQ ??contactlist_menu_onkey_28 \ 000002F8 E4FFFFEA B ??contactlist_menu_onkey_23 \ ??contactlist_menu_onkey_25: \ 000002FC 230059E3 CMP R9,#+35 \ 00000300 4500001A BNE ??contactlist_menu_onkey_29 \ 00000304 ........ _BLF CountContacts,??CountContacts??rA \ 00000308 010050E3 CMP R0,#+1 \ 0000030C BAFFFFBA BLT ??contactlist_menu_onkey_11 \ 00000310 44019FE5 LDR R0,??contactlist_menu_onkey_14+0x8 ;; ActionResh \ 00000314 000090E5 LDR R0,[R0, #+0] \ 00000318 000050E3 CMP R0,#+0 \ 0000031C 1900001A BNE ??contactlist_menu_onkey_30 \ 00000320 900095E5 LDR R0,[R5, #+144] \ 00000324 000050E3 CMP R0,#+0 \ 00000328 0600000A BEQ ??contactlist_menu_onkey_31 \ 0000032C 680095E5 LDR R0,[R5, #+104] \ 00000330 000050E3 CMP R0,#+0 \ 00000334 0300001A BNE ??contactlist_menu_onkey_31 \ 00000338 900085E2 ADD R0,R5,#+144 \ 0000033C ........ BL FreeLOGQ \ 00000340 A04085E5 STR R4,[R5, #+160] \ 00000344 9C4085E5 STR R4,[R5, #+156] \ ??contactlist_menu_onkey_31: \ 00000348 680095E5 LDR R0,[R5, #+104] \ 0000034C 000050E3 CMP R0,#+0 \ 00000350 0200000A BEQ ??contactlist_menu_onkey_32 \ 00000354 0C0095E5 LDR R0,[R5, #+12] \ 00000358 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 0000035C 684080E5 STR R4,[R0, #+104] \ ??contactlist_menu_onkey_32: \ 00000360 ........ LDR R1,??DataTable115 ;; UIN \ 00000364 0C0095E5 LDR R0,[R5, #+12] \ 00000368 001091E5 LDR R1,[R1, #+0] \ 0000036C 010050E1 CMP R0,R1 \ 00000370 1D00001A BNE ??contactlist_menu_onkey_33 \ 00000374 A80F87E2 ADD R0,R7,#+672 \ 00000378 180000EA B ??contactlist_menu_onkey_34 \ ??contactlist_menu_onkey_35: \ 0000037C 9C0095E5 LDR R0,[R5, #+156] \ 00000380 000050E3 CMP R0,#+0 \ 00000384 0900001A BNE ??contactlist_menu_onkey_36 \ ??contactlist_menu_onkey_30: \ 00000388 005095E5 LDR R5,[R5, #+0] \ 0000038C 000055E3 CMP R5,#+0 \ 00000390 F9FFFF1A BNE ??contactlist_menu_onkey_35 \ 00000394 A85F87E2 ADD R5,R7,#+672 \ ??contactlist_menu_onkey_37: \ 00000398 005095E5 LDR R5,[R5, #+0] \ 0000039C 000055E3 CMP R5,#+0 \ 000003A0 64FFFF0A BEQ ??contactlist_menu_onkey_3 \ 000003A4 9C0095E5 LDR R0,[R5, #+156] \ 000003A8 000050E3 CMP R0,#+0 \ 000003AC F9FFFF0A BEQ ??contactlist_menu_onkey_37 \ ??contactlist_menu_onkey_36: \ 000003B0 100095E5 LDR R0,[R5, #+16] \ 000003B4 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 000003B8 000050E3 CMP R0,#+0 \ 000003BC B415D011 LDRHNE R1,[R0, #+84] \ 000003C0 00005113 CMPNE R1,#+0 \ 000003C4 B445C011 STRHNE R4,[R0, #+84] \ 000003C8 0110A0E3 MOV R1,#+1 \ 000003CC 0500A0E1 MOV R0,R5 \ 000003D0 0E0000EA B ??contactlist_menu_onkey_38 \ ??contactlist_menu_onkey_39: \ 000003D4 681090E5 LDR R1,[R0, #+104] \ 000003D8 000051E3 CMP R1,#+0 \ 000003DC 68408015 STRNE R4,[R0, #+104] \ ??contactlist_menu_onkey_34: \ 000003E0 000090E5 LDR R0,[R0, #+0] \ 000003E4 000050E3 CMP R0,#+0 \ 000003E8 F9FFFF1A BNE ??contactlist_menu_onkey_39 \ ??contactlist_menu_onkey_33: \ 000003EC 070088E0 ADD R0,R8,R7 \ 000003F0 1B0000EF SWI +27 \ 000003F4 000050E3 CMP R0,#+0 \ 000003F8 0200000A BEQ ??contactlist_menu_onkey_40 \ 000003FC 2010A0E3 MOV R1,#+32 \ 00000400 070088E0 ADD R0,R8,R7 \ 00000404 1D0100EF SWI +285 \ ??contactlist_menu_onkey_40: \ 00000408 0010A0E3 MOV R1,#+0 \ 0000040C 0100A0E1 MOV R0,R1 \ ??contactlist_menu_onkey_38: \ 00000410 ........ BL RecountMenu \ ??contactlist_menu_onkey_1: \ 00000414 0400E0E1 MVN R0,R4 \ 00000418 F08FBDE8 POP {R4-R11,PC} \ ??contactlist_menu_onkey_29: \ 0000041C 3E0059E3 CMP R9,#+62 \ 00000420 75FFFF1A BNE ??contactlist_menu_onkey_11 \ 00000424 000055E3 CMP R5,#+0 \ 00000428 73FFFF0A BEQ ??contactlist_menu_onkey_11 \ 0000042C 080095E5 LDR R0,[R5, #+8] \ 00000430 000050E3 CMP R0,#+0 \ 00000434 70FFFF1A BNE ??contactlist_menu_onkey_11 \ 00000438 0500A0E1 MOV R0,R5 \ 0000043C ........ _BLF FreeXText,??FreeXText??rA \ 00000440 AC4085E5 STR R4,[R5, #+172] \ 00000444 0C0095E5 LDR R0,[R5, #+12] \ 00000448 ........ BL RequestXText \ 0000044C 960100EF SWI +406 \ 00000450 EFFFFFEA B ??contactlist_menu_onkey_1 \ ??contactlist_menu_onkey_14: \ 00000454 ........ DC32 isVolUpButton \ 00000458 ........ DC32 isVolDownButton \ 0000045C ........ DC32 ActionResh 2669 } 2670 \ In segment CODE, align 4, keep-with-next 2671 void GetOnTotalContact(int group_id,int *_onlinetotal) 2672 { 2673 CLIST *t; 2674 t=(CLIST *)&cltop; \ GetOnTotalContact: \ 00000000 ........ LDR R2,??DataTable99 ;; S_ICONS + 672 \ 00000004 30002DE9 PUSH {R4,R5} 2675 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 2676 while((t=t->next)) 2677 { 2678 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 2679 { 2680 total++; 2681 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 2682 } 2683 } \ ??GetOnTotalContact_0: \ 00000040 002092E5 LDR R2,[R2, #+0] \ 00000044 000052E3 CMP R2,#+0 \ 00000048 F3FFFF1A BNE ??GetOnTotalContact_1 2684 _onlinetotal[0]=online; \ 0000004C 003081E5 STR R3,[R1, #+0] 2685 _onlinetotal[1]=total; \ 00000050 04C081E5 STR R12,[R1, #+4] 2686 } \ 00000054 3000BDE8 POP {R4,R5} \ 00000058 1EFF2FE1 BX LR ;; return 2687 2688 \ In segment CODE, align 4, keep-with-next 2689 void contactlist_menu_iconhndl(void *data, int curitem, void *unk) 2690 { \ contactlist_menu_iconhndl: \ 00000000 F24F2DE9 PUSH {R1,R4-R11,LR} \ 00000004 9CDF4DE2 SUB SP,SP,#+624 2691 CLIST *t; 2692 #ifdef USE_MLMENU 2693 void *item=AllocMLMenuItem(data); 2694 #else 2695 void *item=AllocMenuItem(data); 2696 #endif 2697 int icon; 2698 2699 WSHDR *ws2; 2700 #ifdef USE_MLMENU 2701 WSHDR *ws4; 2702 #endif 2703 WSHDR ws1loc, *ws1; 2704 unsigned short num[128]; 2705 ws1=CreateLocalWS(&ws1loc,num,128); 2706 #ifdef USE_MLMENU 2707 WSHDR ws3loc, *ws3; 2708 unsigned short num3[128]; 2709 ws3=CreateLocalWS(&ws3loc,num3,128); 2710 char s[64]; 2711 #endif 2712 t=FindContactByN(curitem); 2713 if (t) \ 00000008 ........ LDR R10,??DataTable106 ;; 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 2714 { 2715 icon=GetIconIndex(t); \ 00000050 ........ BL GetIconIndex \ 00000054 0090A0E1 MOV R9,R0 2716 if (icon!=IS_GROUP) \ 00000058 0F0059E3 CMP R9,#+15 \ 0000005C 6200000A BEQ ??contactlist_menu_iconhndl_1 2717 { 2718 if(t->just_now) \ 00000060 680098E5 LDR R0,[R8, #+104] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 0C00000A BEQ ??contactlist_menu_iconhndl_2 2719 { 2720 char *test=malloc(64); \ 0000006C 4000A0E3 MOV R0,#+64 \ 00000070 140000EF SWI +20 \ 00000074 00B0A0E1 MOV R11,R0 2721 sprintf(test, ">> %s <<", t->name); \ 00000078 142088E2 ADD R2,R8,#+20 \ 0000007C 4C1F8AE2 ADD R1,R10,#+304 \ 00000080 160000EF SWI +22 2722 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 2723 mfree(test); \ 00000094 0B00A0E1 MOV R0,R11 \ 00000098 150000EF SWI +21 \ 0000009C 030000EA B ??contactlist_menu_iconhndl_3 2724 } 2725 else 2726 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 2727 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 2728 { 2729 wsInsertChar(ws1,0x0004,1); \ 000000C0 0120A013 MOVNE R2,#+1 \ 000000C4 0410A013 MOVNE R1,#+4 \ 000000C8 0400001A BNE ??contactlist_menu_iconhndl_4 2730 wsInsertChar(ws1,0xE008,1); 2731 } 2732 else 2733 if (t->isactive) \ 000000CC 9C0098E5 LDR R0,[R8, #+156] \ 000000D0 000050E3 CMP R0,#+0 \ 000000D4 0700000A BEQ ??contactlist_menu_iconhndl_5 2734 { 2735 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 2736 wsInsertChar(ws1,0xE008,1); \ 000000E8 0120A0E3 MOV R2,#+1 \ 000000EC 0B10A0E1 MOV R1,R11 \ 000000F0 0600A0E1 MOV R0,R6 \ 000000F4 1D0000EF SWI +29 2737 } 2738 2739 #ifdef USE_MLMENU 2740 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 2741 { 2742 int i; 2743 zeromem(s,64); \ 0000012C 4010A0E3 MOV R1,#+64 \ 00000130 820F8DE2 ADD R0,SP,#+520 \ 00000134 1D0100EF SWI +285 2744 i=t->xtext[0]; \ 00000138 A40098E5 LDR R0,[R8, #+164] \ ??contactlist_menu_iconhndl_7: \ 0000013C 0020D0E5 LDRB R2,[R0, #+0] 2745 if (i>63) i=63; 2746 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 2747 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 2748 } 2749 else 2750 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,??DataTable101 ;; isLogStatusChange \ 00000184 000090E5 LDR R0,[R0, #+0] \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 0400000A BEQ ??contactlist_menu_iconhndl_9 2751 { 2752 int i; 2753 zeromem(s,64); \ 00000190 4010A0E3 MOV R1,#+64 \ 00000194 820F8DE2 ADD R0,SP,#+520 \ 00000198 1D0100EF SWI +285 2754 i=t->xtext2[0]; \ 0000019C A80098E5 LDR R0,[R8, #+168] \ 000001A0 E5FFFFEA B ??contactlist_menu_iconhndl_7 2755 if (i>63) i=63; 2756 strncpy(s,t->xtext2+1,i); 2757 wsprintf(ws3,"%c%t",0xE012,s); 2758 } 2759 else 2760 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 2761 if ((t->xstatexstate)) \ ??contactlist_menu_iconhndl_8: \ 000001B4 B605D8E1 LDRH R0,[R8, #+86] \ 000001B8 ........ LDR R2,??DataTable102 ;; 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 2762 { 2763 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 2764 } 2765 #endif 2766 } 2767 else 2768 { 2769 int onlinetotal[2]; 2770 GetOnTotalContact(t->group,onlinetotal); \ ??contactlist_menu_iconhndl_1: \ 000001EC 100098E5 LDR R0,[R8, #+16] \ 000001F0 0D10A0E1 MOV R1,SP \ 000001F4 ........ BL GetOnTotalContact 2771 #ifdef USE_MLMENU 2772 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 2773 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 2774 #else 2775 wsprintf(ws1,"%t%c%c(%d/%d)",t->name,0xE01D,0xE012,onlinetotal[0],onlinetotal[1]); 2776 #endif 2777 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 2778 } 2779 } 2780 else 2781 { 2782 wsprintf(ws1, LG_CLERROR); \ ??contactlist_menu_iconhndl_0: \ 00000230 531F8AE2 ADD R1,R10,#+332 \ 00000234 0600A0E1 MOV R0,R6 \ 00000238 240100EF SWI +292 2783 } 2784 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 2785 wstrcpy(ws2,ws1); \ 00000254 0610A0E1 MOV R1,R6 \ 00000258 1F0100EF SWI +287 2786 2787 /* 2788 #ifdef kluchnik 2789 if ((t->xstatexstate)) 2790 { 2791 wsInsertChar(ws2,NumXStatusToIconBar+t->xstate,1); 2792 } 2793 #endif 2794 */ 2795 2796 SetMenuItemIconArray(data, item, S_ICONS+icon); \ 0000025C ........ LDR R0,??DataTable103 ;; S_ICONS \ 00000260 0510A0E1 MOV R1,R5 \ 00000264 092180E0 ADD R2,R0,R9, LSL #+2 \ 00000268 0400A0E1 MOV R0,R4 \ 0000026C 990100EF SWI +409 2797 #ifdef USE_MLMENU 2798 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 2799 wstrcpy(ws4,ws3); \ 00000284 0710A0E1 MOV R1,R7 \ 00000288 1F0100EF SWI +287 2800 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 2801 #else 2802 SetMenuItemText(data, item, ws2, curitem); 2803 #endif 2804 } \ 000002A8 9EDF8DE2 ADD SP,SP,#+632 \ 000002AC F08FBDE8 POP {R4-R11,PC} ;; return 2805 2806 //=============================================================================================== 2807 2808 int DNR_ID=0; 2809 int DNR_TRIES=3; 2810 2811 char hostname[128]; //2058 che toka 128? :) 2812 2813 int host_counter = 0; 2814 2815 //--------------------------------------------------------------------------- 2816 \ In segment CODE, align 4, keep-with-next 2817 const char *GetHost(int cnt, const char *str, char *buf) 2818 { 2819 const char *tmp = str, *begin, *end; \ GetHost: \ 00000000 0130A0E1 MOV R3,R1 2820 if(cnt) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0100001A BNE ??GetHost_0 \ 0000000C 180000EA B ??GetHost_1 2821 { 2822 for(;cnt;cnt--) 2823 { 2824 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 2825 if(!*str) str = tmp; \ 00000030 00005CE3 CMP R12,#+0 \ 00000034 0200001A BNE ??GetHost_3 \ 00000038 0310A0E1 MOV R1,R3 \ 0000003C 000000EA B ??GetHost_3 2826 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 2827 if(!*str) str = tmp; \ ??GetHost_5: \ 00000064 00005CE3 CMP R12,#+0 \ 00000068 0310A001 MOVEQ R1,R3 2828 } \ 0000006C 010050E2 SUBS R0,R0,#+1 \ 00000070 E7FFFF1A BNE ??GetHost_0 2829 } 2830 tmp = buf; \ ??GetHost_1: \ 00000074 0200A0E1 MOV R0,R2 2831 begin = str; \ 00000078 0130A0E1 MOV R3,R1 \ 0000007C 000000EA B ??GetHost_6 2832 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 2833 end = str; 2834 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 2846 } 2847 } 2848 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 2849 int GetPort(int cnt, const char *str) 2850 { \ GetPort: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 2851 const char *tmp = str; \ 00000008 01C0A0E1 MOV R12,R1 2852 char numbuf[6], numcnt = 0; \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 0030A0E3 MOV R3,#+0 2853 if(cnt) \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0100001A BNE ??GetPort_0 \ 0000001C 180000EA B ??GetPort_1 2854 { 2855 for(;cnt;cnt--) 2856 { 2857 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 2858 if(!*str) str = tmp; \ 00000040 000054E3 CMP R4,#+0 \ 00000044 0200001A BNE ??GetPort_3 \ 00000048 0C10A0E1 MOV R1,R12 \ 0000004C 000000EA B ??GetPort_3 2859 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 2860 if(!*str) str = tmp; \ ??GetPort_5: \ 00000074 000054E3 CMP R4,#+0 \ 00000078 0C10A001 MOVEQ R1,R12 2861 } \ 0000007C 010050E2 SUBS R0,R0,#+1 \ 00000080 E7FFFF1A BNE ??GetPort_0 2862 } 2863 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 2864 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} 2865 str++; 2866 numbuf[5] = 0; \ 000000BC 0520CDE5 STRB R2,[SP, #+5] \ 000000C0 030000EA B ??GetPort_7 2867 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 2868 numbuf[numcnt] = 0; //2058 \ ??GetPort_9: \ 00000100 0020C0E5 STRB R2,[R0, #+0] 2869 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 2870 2871 } 2872 // 2873 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 2874 int GetHostsCount(const char *str) 2875 { 2876 char cnt = 1; \ GetHostsCount: \ 00000000 0110A0E3 MOV R1,#+1 \ 00000004 000000EA B ??GetHostsCount_0 2877 for(;cnt;cnt++) 2878 { 2879 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 2880 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 2881 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 2882 if(!*str) return cnt; \ ??GetHostsCount_5: \ 0000005C 000052E3 CMP R2,#+0 \ 00000060 F2FFFF0A BEQ ??GetHostsCount_3 2883 } \ 00000064 011081E2 ADD R1,R1,#+1 \ 00000068 FF1011E2 ANDS R1,R1,#0xFF \ 0000006C E6FFFF1A BNE ??GetHostsCount_0 2884 return 0; \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 1EFF2FE1 BX LR ;; return 2885 } 2886 //--------------------------------------------------------------------------- 2887 \ In segment CODE, align 4, keep-with-next 2888 void create_connect(void) 2889 { \ create_connect: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2890 // static int host_counter = 0; 2891 char hostbuf[128], buf[128]; 2892 int hostport; 2893 int ***p_res=NULL; 2894 void do_reconnect(void); 2895 SOCK_ADDR sa; 2896 //Устанавливаем соединение 2897 connect_state = 0; \ 00000004 ........ LDR R5,??DataTable117 ;; MAINCSM 2898 int err; 2899 unsigned int ip; 2900 GBS_DelTimer(&reconnect_tmr); \ 00000008 ........ LDR R6,??DataTable112 ;; S_ICONS 2901 if (!IsGPRSEnabled()) \ 0000000C ........ LDR R9,??DataTable106 ;; Canvas \ 00000010 45DF4DE2 SUB SP,SP,#+276 \ 00000014 0040A0E3 MOV R4,#+0 \ 00000018 00408DE5 STR R4,[SP, #+0] \ 0000001C 584085E5 STR R4,[R5, #+88] \ 00000020 DC00A0E3 MOV R0,#+220 \ 00000024 640D80E3 ORR R0,R0,#0x1900 \ 00000028 067080E0 ADD R7,R0,R6 \ 0000002C 0700A0E1 MOV R0,R7 \ 00000030 8C0100EF SWI +396 \ 00000034 BC00A0E3 MOV R0,#+188 \ 00000038 600D80E3 ORR R0,R0,#0x1800 \ 0000003C 068080E0 ADD R8,R0,R6 \ 00000040 A70000EF SWI +167 \ 00000044 000050E3 CMP R0,#+0 \ 00000048 0400001A BNE ??create_connect_0 2902 { 2903 is_gprs_online=0; \ 0000004C 684085E5 STR R4,[R5, #+104] 2904 strcpy(logmsg,LG_GRWAITFORGPRS); \ 00000050 551F89E2 ADD R1,R9,#+340 \ 00000054 0800A0E1 MOV R0,R8 \ 00000058 1A0000EF SWI +26 2905 SMART_REDRAW(); \ 0000005C 840000EA B ??create_connect_1 2906 return; 2907 } 2908 DNR_ID=0; 2909 *socklasterr()=0; 2910 if(host_counter > GetHostsCount(NATICQ_HOST)-1) host_counter = 0; //2058 \ ??create_connect_0: \ 00000060 8CA29FE5 LDR R10,??create_connect_2+0x4 ;; NATICQ_HOST \ 00000064 784085E5 STR R4,[R5, #+120] \ 00000068 7C8100EF SWI +33148 \ 0000006C 004080E5 STR R4,[R0, #+0] \ 00000070 0A00A0E1 MOV R0,R10 \ 00000074 ........ BL GetHostsCount \ 00000078 801095E5 LDR R1,[R5, #+128] \ 0000007C 010040E2 SUB R0,R0,#+1 \ 00000080 010050E1 CMP R0,R1 \ 00000084 804085B5 STRLT R4,[R5, #+128] 2911 GetHost(host_counter, NATICQ_HOST, hostbuf); \ 00000088 800095E5 LDR R0,[R5, #+128] \ 0000008C 14208DE2 ADD R2,SP,#+20 \ 00000090 0A10A0E1 MOV R1,R10 \ 00000094 ........ BL GetHost 2912 hostport = GetPort(host_counter, NATICQ_HOST); \ 00000098 800095E5 LDR R0,[R5, #+128] \ 0000009C 0A10A0E1 MOV R1,R10 \ 000000A0 ........ BL GetPort \ 000000A4 00A0A0E1 MOV R10,R0 2913 host_counter++; \ 000000A8 800095E5 LDR R0,[R5, #+128] 2914 2915 sprintf(hostname, "Connect to %s:%d", hostbuf, hostport); //2058 - stavim hostname, izbavlyaemsya ot buf \ 000000AC 0A30A0E1 MOV R3,R10 \ 000000B0 010080E2 ADD R0,R0,#+1 \ 000000B4 800085E5 STR R0,[R5, #+128] \ 000000B8 14208DE2 ADD R2,SP,#+20 \ 000000BC 5B1F89E2 ADD R1,R9,#+364 \ 000000C0 8C00A0E3 MOV R0,#+140 \ 000000C4 6C0D80E3 ORR R0,R0,#0x1B00 \ 000000C8 060080E0 ADD R0,R0,R6 \ 000000CC 160000EF SWI +22 2916 //strcpy(hostbuf2, hostbuf); //vyvod host v get_online_time 2917 zeromem(hostbuf2,128); \ 000000D0 0C00A0E3 MOV R0,#+12 \ 000000D4 6C0D80E3 ORR R0,R0,#0x1B00 \ 000000D8 06B080E0 ADD R11,R0,R6 \ 000000DC 8010A0E3 MOV R1,#+128 \ 000000E0 0B00A0E1 MOV R0,R11 \ 000000E4 1D0100EF SWI +285 2918 sprintf(hostbuf2, percent_s,hostbuf); \ 000000E8 14208DE2 ADD R2,SP,#+20 \ 000000EC 1B1089E2 ADD R1,R9,#+27 \ 000000F0 0B00A0E1 MOV R0,R11 \ 000000F4 160000EF SWI +22 2919 strcpy(logmsg,buf); \ 000000F8 94108DE2 ADD R1,SP,#+148 \ 000000FC 0800A0E1 MOV R0,R8 \ 00000100 1A0000EF SWI +26 2920 SMART_REDRAW(); \ 00000104 ........ BL SMART_REDRAW 2921 2922 ip=str2ip(hostbuf); \ 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 2923 if (ip!=0xFFFFFFFF) 2924 { 2925 sa.ip=ip; \ 0000011C 08008DE5 STR R0,[SP, #+8] 2926 strcpy(logmsg,"\nConnect by IP!"); //strcat->strcpy \ 00000120 601F89E2 ADD R1,R9,#+384 \ 00000124 0800A0E1 MOV R0,R8 \ 00000128 1A0000EF SWI +26 2927 SMART_REDRAW(); \ 0000012C ........ BL SMART_REDRAW 2928 goto L_CONNECT; \ 00000130 390000EA B ??create_connect_4 2929 } \ ??create_connect_3: \ 00000134 6D1F8FE2 ADR R1,??create_connect_2 ;; "\n" \ 00000138 0800A0E1 MOV R0,R8 2930 strcat(logmsg,"\n"); \ 0000013C 170000EF SWI +23 2931 strcpy(logmsg,LG_GRSENDDNR); //strcat->strcpy \ 00000140 641F89E2 ADD R1,R9,#+400 \ 00000144 0800A0E1 MOV R0,R8 \ 00000148 1A0000EF SWI +26 2932 SMART_REDRAW(); \ 0000014C ........ BL SMART_REDRAW 2933 err=async_gethostbyname(hostbuf,&p_res,&DNR_ID); //03461351 3<70<19<81 \ 00000150 782085E2 ADD R2,R5,#+120 \ 00000154 0D10A0E1 MOV R1,SP \ 00000158 14008DE2 ADD R0,SP,#+20 \ 0000015C B60100EF SWI +438 \ 00000160 0030B0E1 MOVS R3,R0 2934 if (err) \ 00000164 1600000A BEQ ??create_connect_5 2935 { 2936 if ((err==0xC9)||(err==0xD6)) \ 00000168 C90053E3 CMP R3,#+201 \ 0000016C D6005313 CMPNE R3,#+214 \ 00000170 0600001A BNE ??create_connect_6 2937 { 2938 if (DNR_ID) \ 00000174 780095E5 LDR R0,[R5, #+120] \ 00000178 000050E3 CMP R0,#+0 \ 0000017C 1000000A BEQ ??create_connect_5 2939 { 2940 host_counter--; \ 00000180 800095E5 LDR R0,[R5, #+128] \ 00000184 010040E2 SUB R0,R0,#+1 \ 00000188 800085E5 STR R0,[R5, #+128] 2941 return; //Ждем готовности DNR \ 0000018C 390000EA B ??create_connect_7 2942 } 2943 } 2944 else 2945 { 2946 snprintf(logmsg,255,LG_GRDNRERROR,err); \ ??create_connect_6: \ 00000190 672F89E2 ADD R2,R9,#+412 \ 00000194 FF10A0E3 MOV R1,#+255 \ 00000198 0800A0E1 MOV R0,R8 \ 0000019C 1B0100EF SWI +283 2947 SMART_REDRAW(); \ 000001A0 ........ BL SMART_REDRAW 2948 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ ??create_connect_8: \ 000001A4 ........ LDR R0,??DataTable107 ;; RECONNECT_TIME \ 000001A8 ........ LDR R2,??DataTable108 ;; do_reconnect \ 000001AC 000090E5 LDR R0,[R0, #+0] \ 000001B0 D830A0E3 MOV R3,#+216 \ 000001B4 930001E0 MUL R1,R3,R0 \ 000001B8 0700A0E1 MOV R0,R7 \ 000001BC 4D0000EF SWI +77 2949 return; \ 000001C0 2C0000EA B ??create_connect_7 2950 } 2951 } 2952 if (p_res) \ ??create_connect_5: \ 000001C4 00009DE5 LDR R0,[SP, #+0] \ 000001C8 000050E3 CMP R0,#+0 \ 000001CC 3D00000A BEQ ??create_connect_9 2953 { 2954 if (p_res[3]) \ 000001D0 0C0090E5 LDR R0,[R0, #+12] \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 4200000A BEQ ??create_connect_10 2955 { 2956 strcpy(logmsg,buf); \ 000001DC 94108DE2 ADD R1,SP,#+148 \ 000001E0 0800A0E1 MOV R0,R8 \ 000001E4 1A0000EF SWI +26 2957 strcat(logmsg,"\n"); \ 000001E8 401F8FE2 ADR R1,??create_connect_2 ;; "\n" \ 000001EC 0800A0E1 MOV R0,R8 \ 000001F0 170000EF SWI +23 2958 strcpy(logmsg,LG_GRDNROK); \ 000001F4 6B1F89E2 ADD R1,R9,#+428 \ 000001F8 0800A0E1 MOV R0,R8 \ 000001FC 1A0000EF SWI +26 2959 SMART_REDRAW(); \ 00000200 ........ BL SMART_REDRAW 2960 DNR_TRIES=0; \ 00000204 7C4085E5 STR R4,[R5, #+124] 2961 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] 2962 L_CONNECT: 2963 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 5C0085E5 STR R0,[R5, #+92] 2964 if (sock!=-1) \ 00000230 0B0050E1 CMP R0,R11 \ 00000234 1A00000A BEQ ??create_connect_11 2965 { 2966 sa.family=1; \ 00000238 0180A0E3 MOV R8,#+1 \ 0000023C B480CDE1 STRH R8,[SP, #+4] 2967 sa.port=htons(hostport); \ 00000240 0A08A0E1 MOV R0,R10, LSL #+16 \ 00000244 2008A0E1 MOV R0,R0, LSR #+16 \ 00000248 7A0100EF SWI +378 \ 0000024C B600CDE1 STRH R0,[SP, #+6] 2968 // sa.ip=htonl(IP_ADDR(82,207,89,182)); 2969 if (connect(sock,&sa,sizeof(sa))!=-1) \ 00000250 5C0095E5 LDR R0,[R5, #+92] \ 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 2970 { 2971 connect_state=1; \ 00000268 588085E5 STR R8,[R5, #+88] 2972 TOTALRECEIVED=0; \ 0000026C 8C4286E5 STR R4,[R6, #+652] 2973 TOTALSENDED=0; \ 00000270 904286E5 STR R4,[R6, #+656] 2974 SMART_REDRAW(); \ ??create_connect_1: \ 00000274 ........ BL SMART_REDRAW \ ??create_connect_7: \ 00000278 45DF8DE2 ADD SP,SP,#+276 \ 0000027C F08FBDE8 POP {R4-R11,PC} 2975 } 2976 else 2977 { 2978 closesocket(sock); \ ??create_connect_12: \ 00000280 5C0095E5 LDR R0,[R5, #+92] \ 00000284 760100EF SWI +374 2979 sock=-1; \ 00000288 5CB085E5 STR R11,[R5, #+92] 2980 LockSched(); \ 0000028C 460100EF SWI +326 2981 ShowMSG(1,(int)LG_MSGCANTCONN); \ 00000290 711F89E2 ADD R1,R9,#+452 \ 00000294 0100A0E3 MOV R0,#+1 \ 00000298 480100EF SWI +328 2982 UnlockSched(); \ 0000029C 470100EF SWI +327 2983 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 000002A0 BFFFFFEA B ??create_connect_8 2984 2985 } 2986 } 2987 else 2988 { 2989 LockSched(); \ ??create_connect_11: \ 000002A4 460100EF SWI +326 2990 ShowMSG(1,(int)LG_MSGCANTCRSC); \ 000002A8 781F89E2 ADD R1,R9,#+480 \ 000002AC 0100A0E3 MOV R0,#+1 \ 000002B0 480100EF SWI +328 2991 UnlockSched(); \ 000002B4 470100EF SWI +327 2992 //Не осилили создания сокета, закрываем GPRS-сессию 2993 GPRS_OnOff(0,1); \ 000002B8 0110A0E3 MOV R1,#+1 \ 000002BC 0000A0E3 MOV R0,#+0 \ 000002C0 8E0100EF SWI +398 \ 000002C4 EBFFFFEA B ??create_connect_7 2994 } 2995 } 2996 } 2997 else 2998 { 2999 DNR_TRIES--; \ ??create_connect_9: \ 000002C8 7C0095E5 LDR R0,[R5, #+124] \ 000002CC 010040E2 SUB R0,R0,#+1 \ 000002D0 7C0085E5 STR R0,[R5, #+124] 3000 LockSched(); \ 000002D4 460100EF SWI +326 3001 ShowMSG(1,(int)LG_MSGHOSTNFND); \ 000002D8 831F89E2 ADD R1,R9,#+524 \ 000002DC 0100A0E3 MOV R0,#+1 \ 000002E0 480100EF SWI +328 3002 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 3003 } 3004 } 3005 3006 #ifdef SEND_TIMER 3007 GBSTMR send_tmr; 3008 #endif 3009 \ In segment CODE, align 4, keep-with-next 3010 void ClearSendQ(void) 3011 { \ ClearSendQ: \ 00000000 10402DE9 PUSH {R4,LR} 3012 mfree((void *)sendq_p); \ 00000004 ........ LDR R4,??DataTable117 ;; MAINCSM \ 00000008 640094E5 LDR R0,[R4, #+100] \ 0000000C 150000EF SWI +21 3013 sendq_p=NULL; \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 640084E5 STR R0,[R4, #+100] 3014 sendq_l=NULL; \ 00000018 600084E5 STR R0,[R4, #+96] 3015 #ifdef SEND_TIMER 3016 GBS_DelTimer(&send_tmr); 3017 #endif 3018 } \ 0000001C 1080BDE8 POP {R4,PC} ;; return 3019 \ In segment CODE, align 4, keep-with-next 3020 void end_socket(void) 3021 { \ end_socket: \ 00000000 10402DE9 PUSH {R4,LR} 3022 if (sock>=0) \ 00000004 ........ LDR R4,??DataTable117 ;; MAINCSM \ 00000008 5C0094E5 LDR R0,[R4, #+92] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD48 POPMI {R4,PC} 3023 { 3024 shutdown(sock,2); \ 00000014 0210A0E3 MOV R1,#+2 \ 00000018 770100EF SWI +375 3025 closesocket(sock); \ 0000001C 5C0094E5 LDR R0,[R4, #+92] \ 00000020 760100EF SWI +374 3026 } 3027 #ifdef SEND_TIMER 3028 GBS_DelTimer(&send_tmr); 3029 #endif 3030 } \ 00000024 1080BDE8 POP {R4,PC} ;; return 3031 3032 #ifdef SEND_TIMER 3033 static void resend(void) 3034 { 3035 void SendAnswer(int dummy, TPKT *p); 3036 SUBPROC((void*)SendAnswer,0,0); 3037 } 3038 #endif 3039 \ In segment CODE, align 4, keep-with-next 3040 void SendAnswer(int dummy, TPKT *p) 3041 { \ SendAnswer: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 3042 int i; 3043 int j; 3044 if (connect_state<2) \ 00000004 ........ LDR R4,??DataTable117 ;; MAINCSM \ 00000008 0170A0E1 MOV R7,R1 \ 0000000C 580094E5 LDR R0,[R4, #+88] \ 00000010 020050E3 CMP R0,#+2 \ 00000014 020000AA BGE ??SendAnswer_0 3045 { 3046 mfree(p); \ 00000018 0700A0E1 MOV R0,R7 \ 0000001C 150000EF SWI +21 3047 return; \ 00000020 F087BDE8 POP {R4-R10,PC} 3048 } 3049 if (p) \ ??SendAnswer_0: \ 00000024 ........ LDR R5,??DataTable112 ;; S_ICONS \ 00000028 000057E3 CMP R7,#+0 \ 0000002C 2600000A BEQ ??SendAnswer_1 3050 { 3051 j=sizeof(PKT)+p->pkt.data_len; //Размер пакета \ 00000030 B600D7E1 LDRH R0,[R7, #+6] \ 00000034 086080E2 ADD R6,R0,#+8 3052 TOTALSENDED+=j; \ 00000038 900295E5 LDR R0,[R5, #+656] \ 0000003C 000086E0 ADD R0,R6,R0 \ 00000040 900285E5 STR R0,[R5, #+656] 3053 ALLTOTALSENDED+=j; //by BoBa 10.07 \ 00000044 980295E5 LDR R0,[R5, #+664] \ 00000048 000086E0 ADD R0,R6,R0 \ 0000004C 980285E5 STR R0,[R5, #+664] 3054 //Проверяем, не надо ли добавить в очередь 3055 if (sendq_p) \ 00000050 640094E5 LDR R0,[R4, #+100] \ 00000054 000050E3 CMP R0,#+0 \ 00000058 0F00000A BEQ ??SendAnswer_2 3056 { 3057 //Есть очередь, добавляем в нее 3058 sendq_p=realloc((void *)sendq_p,sendq_l+j); \ 0000005C 601094E5 LDR R1,[R4, #+96] \ 00000060 011086E0 ADD R1,R6,R1 \ 00000064 BA0000EF SWI +186 \ 00000068 640084E5 STR R0,[R4, #+100] 3059 memcpy((char *)sendq_p+sendq_l,p,j); \ 0000006C 600094E5 LDR R0,[R4, #+96] \ 00000070 643094E5 LDR R3,[R4, #+100] \ 00000074 0620A0E1 MOV R2,R6 \ 00000078 0710A0E1 MOV R1,R7 \ 0000007C 030080E0 ADD R0,R0,R3 \ 00000080 1E0100EF SWI +286 3060 mfree(p); \ 00000084 0700A0E1 MOV R0,R7 \ 00000088 150000EF SWI +21 3061 sendq_l+=j; \ 0000008C 600094E5 LDR R0,[R4, #+96] \ 00000090 000086E0 ADD R0,R6,R0 \ 00000094 600084E5 STR R0,[R4, #+96] 3062 return; \ 00000098 F087BDE8 POP {R4-R10,PC} 3063 } 3064 sendq_p=p; \ ??SendAnswer_2: \ 0000009C 647084E5 STR R7,[R4, #+100] 3065 sendq_l=j; \ 000000A0 606084E5 STR R6,[R4, #+96] \ 000000A4 080000EA B ??SendAnswer_1 3066 } 3067 //Отправляем уже существующее в очереди 3068 while((i=sendq_l)!=0) 3069 { 3070 if (i>0x400) i=0x400; 3071 j=send(sock,(void *)sendq_p,i,0); 3072 snprintf(logmsg,255,"send res %d",j); 3073 SMART_REDRAW(); 3074 if (j<0) 3075 { 3076 j=*socklasterr(); 3077 if ((j==0xC9)||(j==0xD6)) 3078 { 3079 //Передали что хотели 3080 strcpy(logmsg,"Send delayed..."); 3081 return; //Видимо, надо ждать сообщения ENIP_BUFFER_FREE 3082 } 3083 else 3084 { 3085 //Ошибка 3086 LockSched(); 3087 ShowMSG(1,(int)"Send error!"); 3088 UnlockSched(); 3089 end_socket(); 3090 return; 3091 } 3092 } 3093 memcpy((void *)sendq_p,(char *)sendq_p+j,sendq_l-=j); //Удалили переданное \ ??SendAnswer_3: \ 000000A8 600094E5 LDR R0,[R4, #+96] \ 000000AC 062040E0 SUB R2,R0,R6 \ 000000B0 602084E5 STR R2,[R4, #+96] \ 000000B4 640094E5 LDR R0,[R4, #+100] \ 000000B8 001086E0 ADD R1,R6,R0 \ 000000BC 1E0100EF SWI +286 3094 if (j` \ 000000E4 0100A0E3 MOV R0,#+1 \ 000000E8 400E80E3 ORR R0,R0,#0x400 \ 000000EC 000057E1 CMP R7,R0 \ 000000F0 5C0094E5 LDR R0,[R4, #+92] \ 000000F4 407EA0A3 MOVGE R7,#+1024 \ 000000F8 0030A0E3 MOV R3,#+0 \ 000000FC 0720A0E1 MOV R2,R7 \ 00000100 790100EF SWI +377 \ 00000104 0060A0E1 MOV R6,R0 \ 00000108 BC00A0E3 MOV R0,#+188 \ 0000010C 600D80E3 ORR R0,R0,#0x1800 \ 00000110 059080E0 ADD R9,R0,R5 \ 00000114 0630A0E1 MOV R3,R6 \ 00000118 0A20A0E1 MOV R2,R10 \ 0000011C FF10A0E3 MOV R1,#+255 \ 00000120 0900A0E1 MOV R0,R9 \ 00000124 1B0100EF SWI +283 \ 00000128 ........ BL SMART_REDRAW \ 0000012C 000056E3 CMP R6,#+0 \ 00000130 DCFFFF5A BPL ??SendAnswer_3 \ 00000134 7C8100EF SWI +33148 \ 00000138 006090E5 LDR R6,[R0, #+0] \ 0000013C C90056E3 CMP R6,#+201 \ 00000140 D6005613 CMPNE R6,#+214 \ 00000144 0300001A BNE ??SendAnswer_6 \ 00000148 0C108AE2 ADD R1,R10,#+12 \ 0000014C 0900A0E1 MOV R0,R9 \ 00000150 1A0000EF SWI +26 \ 00000154 F087BDE8 POP {R4-R10,PC} \ ??SendAnswer_6: \ 00000158 460100EF SWI +326 \ 0000015C 1C108AE2 ADD R1,R10,#+28 \ 00000160 0100A0E3 MOV R0,#+1 \ 00000164 480100EF SWI +328 \ 00000168 470100EF SWI +327 \ 0000016C ........ BL end_socket \ 00000170 F087BDE8 POP {R4-R10,PC} 3103 } 3104 mfree((void *)sendq_p); \ ??SendAnswer_4: \ 00000174 0100A0E1 MOV R0,R1 \ 00000178 150000EF SWI +21 3105 sendq_p=NULL; \ 0000017C 648084E5 STR R8,[R4, #+100] 3106 } \ 00000180 F087BDE8 POP {R4-R10,PC} ;; return \ ??SendAnswer_5: \ 00000184 ........ DC32 `?` 3107 3108 \ In segment CODE, align 4, keep-with-next 3109 void send_login(int dummy, TPKT *p) 3110 { 3111 connect_state=2; 3112 char rev[16]; 3113 //Кто будет менять в этом месте идентификатор клиента, буду банить на уровне сервера!!! 3114 //А Вова будет банить на форуме! 3115 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,??DataTable117 ;; MAINCSM \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 0200A0E3 MOV R0,#+2 \ 0000001C 580086E5 STR R0,[R6, #+88] \ 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 3116 3117 TPKT *p2=malloc(sizeof(PKT)+8); \ 00000034 1000A0E3 MOV R0,#+16 \ 00000038 140000EF SWI +20 \ 0000003C 0070A0E1 MOV R7,R0 3118 p2->pkt.uin=UIN; \ 00000040 ........ LDR R0,??DataTable115 ;; UIN 3119 p2->pkt.type=T_SETCLIENT_ID; 3120 p2->pkt.data_len=8; 3121 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 3122 SendAnswer(0,p2); \ 0000006C 0710A0E1 MOV R1,R7 \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 ........ BL SendAnswer 3123 SendAnswer(dummy,p); \ 00000078 0510A0E1 MOV R1,R5 \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 ........ BL SendAnswer 3124 RXstate=-(int)sizeof(PKT); \ 00000084 0700E0E3 MVN R0,#+7 \ 00000088 540086E5 STR R0,[R6, #+84] 3125 } \ 0000008C FF80BDE8 POP {R0-R7,PC} ;; return \ ??send_login_0: \ 00000090 ........ DC32 `?` 3126 \ In segment CODE, align 4, keep-with-next 3127 void do_ping(void) 3128 { \ do_ping: \ 00000000 00402DE9 PUSH {LR} 3129 TPKT *pingp=malloc(sizeof(PKT)); \ 00000004 0800A0E3 MOV R0,#+8 \ 00000008 140000EF SWI +20 3130 pingp->pkt.uin=UIN; \ 0000000C ........ LDR R1,??DataTable115 ;; UIN \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 3131 pingp->pkt.type=0; \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C B410C0E1 STRH R1,[R0, #+4] 3132 pingp->pkt.data_len=0; \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3133 SendAnswer(0,pingp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 0040BDE8 POP {LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 3134 } 3135 \ In segment CODE, align 4, keep-with-next 3136 void SendMSGACK(int i) 3137 { \ SendMSGACK: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3138 TPKT *ackp=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 3139 ackp->pkt.uin=i; \ 00000010 004080E5 STR R4,[R0, #+0] 3140 ackp->pkt.type=T_MSGACK; \ 00000014 1710A0E3 MOV R1,#+23 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 3141 ackp->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3142 SendAnswer(0,ackp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 1040BDE8 POP {R4,LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 3143 } 3144 \ In segment CODE, align 4, keep-with-next 3145 void RequestXText(unsigned int uin) 3146 { \ RequestXText: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3147 TPKT *p=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 3148 p->pkt.uin=uin; \ 00000010 004080E5 STR R4,[R0, #+0] 3149 p->pkt.type=T_XTEXT_REQ; \ 00000014 1810A0E3 MOV R1,#+24 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 3150 p->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3151 SUBPROC((void *)SendAnswer,0,p); \ 00000024 0020A0E1 MOV R2,R0 \ 00000028 ........ LDR R0,??DataTable116 ;; SendAnswer \ 0000002C 710100EF SWI +369 3152 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 3153 3154 extern int main2_count; 3155 3156 int ping_time; 3157 char I_UIN[9]; 3158 \ In segment CODE, align 4, keep-with-next 3159 void get_answer(void) 3160 { \ get_answer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3161 void *p; 3162 int i=RXstate; \ 00000004 ........ LDR R5,??DataTable117 ;; MAINCSM \ 00000008 42DE4DE2 SUB SP,SP,#+1056 3163 int j; 3164 int n; 3165 char rb[1024]; 3166 char *rp=rb; 3167 if (connect_state<2) return; \ 0000000C 580095E5 LDR R0,[R5, #+88] \ 00000010 547095E5 LDR R7,[R5, #+84] \ 00000014 20108DE2 ADD R1,SP,#+32 \ 00000018 04108DE5 STR R1,[SP, #+4] \ 0000001C 020050E3 CMP R0,#+2 \ 00000020 6E0100BA BLT ??get_answer_1 \ 00000024 0A0077E3 CMN R7,#+10 \ 00000028 6C01000A BEQ ??get_answer_1 3168 if (i==EOP) return; 3169 j=recv(sock,rb,sizeof(rb),0); \ 0000002C 5C0095E5 LDR R0,[R5, #+92] \ 00000030 B4659FE5 LDR R6,??get_answer_2+0x4 ;; RXbuf \ 00000034 ........ LDR R9,??DataTable128 ;; S_ICONS \ 00000038 0030A0E3 MOV R3,#+0 \ 0000003C 402EA0E3 MOV R2,#+1024 \ 00000040 780100EF SWI +376 \ 00000044 00008DE5 STR R0,[SP, #+0] \ 00000048 0980A0E3 MOV R8,#+9 \ 0000004C 428C88E3 ORR R8,R8,#0x4200 \ 00000050 110000EA B ??get_answer_3 3170 while(j>0) 3171 { 3172 if (i<0) 3173 { 3174 //Принимаем заголовок 3175 n=-i; //Требуемое количество байт 3176 if (j=0) 3183 { 3184 //Принимаем тельце ;) 3185 n=RXbuf.pkt.data_len; //Всего в тельце 3186 if (n>16383) 3187 { 3188 //Слишком много 3189 strcpy(logmsg,LG_GRBADPACKET); 3190 end_socket(); 3191 RXstate=EOP; 3192 return; 3193 } 3194 n-=i; //Количество требуемых байт (общая длинна тельца-текущая позиция) 3195 if (n>0) 3196 { 3197 if (jisIndividSet)//Если индивидуальные натсройки(меню на долгое вправо) 3283 { 3284 if(t->issound) Play(sndMsg);//если звук включен то играем 3285 break; 3286 } 3287 else 3288 if(t->automsgcount < automsgcount && away_m)//если сигналы автоответчика 3289 { 3290 Play(sndMsg); 3291 break; 3292 } 3293 else 3294 if(t->isaccess)//если удаленный доступ ;) 3295 { 3296 if(t->signals) Play(sndMsg); 3297 break; 3298 } 3299 else//в остальный случаях 3300 Play(sndMsg); 3301 } 3302 else 3303 { 3304 uins=RXbuf.pkt.uin; 3305 volatile int hFile_ex; 3306 unsigned int io_error_ex = 0; 3307 sprintf(talk_sound, "%s%d.wav", sndMsg2, uins); 3308 hFile_ex = fopen(talk_sound,A_ReadOnly + A_BIN,P_READ, &io_error_ex); 3309 if(hFile_ex!=-1) 3310 { 3311 fclose(hFile_ex, &io_error_ex); 3312 Play(talk_sound); 3313 } 3314 else 3315 Play(sndMsg); 3316 } 3317 } 3318 break; 3319 case T_SSLRESP: 3320 LockSched(); 3321 ShowMSG(1,(int)RXbuf.data); 3322 UnlockSched(); 3323 break; 3324 case T_SRV_ACK: 3325 if (FindContactLOGQByAck(&RXbuf)) Play(sndMsgSent); 3326 case T_CLIENT_ACK: 3327 p=malloc(sizeof(PKT)+2); 3328 memcpy(p,&RXbuf,sizeof(PKT)+2); 3329 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); 3330 break; 3331 case T_ECHORET: 3332 { 3333 TDate d; 3334 TTime t; 3335 TTime *pt=(TTime *)(RXbuf.data); 3336 int s1; 3337 int s2; 3338 GetDateTime(&d,&t); 3339 s1=t.hour*3600+t.min*60+t.sec; 3340 s2=pt->hour*3600+pt->min*60+pt->sec; 3341 s1-=s2; 3342 if (s1<0) s1+=86400; 3343 snprintf(logmsg,255,"Ping %d-%d seconds!",s1,s1+1); 3344 sprintf(PINGO, "Ping: %d sec",s1); 3345 LockSched(); 3346 if(janis==1) 3347 { 3348 ShowMSG(1,(int)logmsg); 3349 Play(pingsnd); 3350 janis=0; 3351 } 3352 else 3353 { 3354 if(ping_time==0) 3355 { 3356 ping_time=ping_time_config; 3357 Play(pingsnd); 3358 } 3359 else 3360 ping_time--; 3361 } 3362 UnlockSched(); 3363 } 3364 break; 3365 case T_LASTPRIVACY: 3366 n=i+sizeof(PKT); \ ??get_answer_4: \ 00000054 0B40A0E1 MOV R4,R11 3367 p=malloc(n); \ ??get_answer_5: \ 00000058 0400A0E1 MOV R0,R4 \ 0000005C 140000EF SWI +20 \ 00000060 00B0A0E1 MOV R11,R0 3368 memcpy(p,&RXbuf,n); \ 00000064 0420A0E1 MOV R2,R4 \ ??get_answer_6: \ 00000068 0610A0E1 MOV R1,R6 \ 0000006C 1E0100EF SWI +286 3369 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); \ 00000070 5C0095E5 LDR R0,[R5, #+92] \ 00000074 0B30A0E1 MOV R3,R11 \ 00000078 01002DE9 PUSH {R0} \ 0000007C 0020A0E3 MOV R2,#+0 \ 00000080 0710A0E1 MOV R1,R7 \ 00000084 0800A0E1 MOV R0,R8 \ 00000088 000100EF SWI +256 \ ??get_answer_7: \ 0000008C 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning 3370 break; 3371 } 3372 ad(&RXbuf); \ ??get_answer_8: \ 00000090 0600A0E1 MOV R0,R6 \ 00000094 ........ _BLF ad,??ad??rA 3373 i=-(int)sizeof(PKT); //А может еще есть данные \ 00000098 0770E0E3 MVN R7,#+7 \ ??get_answer_3: \ 0000009C 00009DE5 LDR R0,[SP, #+0] \ 000000A0 010050E3 CMP R0,#+1 \ 000000A4 4C0100BA BLT ??get_answer_9 \ 000000A8 000057E3 CMP R7,#+0 \ 000000AC 0E00005A BPL ??get_answer_10 \ 000000B0 04109DE5 LDR R1,[SP, #+4] \ 000000B4 004067E2 RSB R4,R7,#+0 \ 000000B8 040050E1 CMP R0,R4 \ 000000BC 0040A0B1 MOVLT R4,R0 \ 000000C0 0420A0E1 MOV R2,R4 \ 000000C4 060087E0 ADD R0,R7,R6 \ 000000C8 080080E2 ADD R0,R0,#+8 \ 000000CC 1E0100EF SWI +286 \ 000000D0 00109DE5 LDR R1,[SP, #+0] \ 000000D4 077084E0 ADD R7,R4,R7 \ 000000D8 041041E0 SUB R1,R1,R4 \ 000000DC 00108DE5 STR R1,[SP, #+0] \ 000000E0 04109DE5 LDR R1,[SP, #+4] \ 000000E4 011084E0 ADD R1,R4,R1 \ 000000E8 04108DE5 STR R1,[SP, #+4] \ ??get_answer_10: \ 000000EC 000057E3 CMP R7,#+0 \ 000000F0 E9FFFF4A BMI ??get_answer_3 \ 000000F4 B640D6E1 LDRH R4,[R6, #+6] \ 000000F8 BC00A0E3 MOV R0,#+188 \ 000000FC 600D80E3 ORR R0,R0,#0x1800 \ 00000100 09A080E0 ADD R10,R0,R9 \ 00000104 400C54E3 CMP R4,#+16384 \ 00000108 070000BA BLT ??get_answer_11 \ 0000010C DC149FE5 LDR R1,??get_answer_2+0x8 ;; Canvas + 544 \ 00000110 0A00A0E1 MOV R0,R10 \ 00000114 1A0000EF SWI +26 \ 00000118 ........ BL end_socket \ 0000011C 0900E0E3 MVN R0,#+9 \ 00000120 540085E5 STR R0,[R5, #+84] \ 00000124 42DE8DE2 ADD SP,SP,#+1056 \ 00000128 F08FBDE8 POP {R4-R11,PC} \ ??get_answer_11: \ 0000012C 074044E0 SUB R4,R4,R7 \ 00000130 010054E3 CMP R4,#+1 \ 00000134 0E0000BA BLT ??get_answer_12 \ 00000138 00009DE5 LDR R0,[SP, #+0] \ 0000013C 04109DE5 LDR R1,[SP, #+4] \ 00000140 040050E1 CMP R0,R4 \ 00000144 0040A0B1 MOVLT R4,R0 \ 00000148 0420A0E1 MOV R2,R4 \ 0000014C 060087E0 ADD R0,R7,R6 \ 00000150 080080E2 ADD R0,R0,#+8 \ 00000154 1E0100EF SWI +286 \ 00000158 00109DE5 LDR R1,[SP, #+0] \ 0000015C 077084E0 ADD R7,R4,R7 \ 00000160 041041E0 SUB R1,R1,R4 \ 00000164 00108DE5 STR R1,[SP, #+0] \ 00000168 04109DE5 LDR R1,[SP, #+4] \ 0000016C 011084E0 ADD R1,R4,R1 \ 00000170 04108DE5 STR R1,[SP, #+4] \ ??get_answer_12: \ 00000174 B600D6E1 LDRH R0,[R6, #+6] \ 00000178 070050E1 CMP R0,R7 \ 0000017C C6FFFF1A BNE ??get_answer_3 \ 00000180 8C0299E5 LDR R0,[R9, #+652] \ 00000184 08B087E2 ADD R11,R7,#+8 \ 00000188 00008BE0 ADD R0,R11,R0 \ 0000018C 8C0289E5 STR R0,[R9, #+652] \ 00000190 940299E5 LDR R0,[R9, #+660] \ 00000194 0010A0E3 MOV R1,#+0 \ 00000198 00008BE0 ADD R0,R11,R0 \ 0000019C 940289E5 STR R0,[R9, #+660] \ 000001A0 060087E0 ADD R0,R7,R6 \ 000001A4 0810C0E5 STRB R1,[R0, #+8] \ 000001A8 0600A0E1 MOV R0,R6 \ 000001AC ........ _BLF aa,??aa??rA \ 000001B0 B400D6E1 LDRH R0,[R6, #+4] \ 000001B4 094087E2 ADD R4,R7,#+9 \ 000001B8 AE70A0E3 MOV R7,#+174 \ 000001BC DE7C87E3 ORR R7,R7,#0xDE00 \ 000001C0 030040E2 SUB R0,R0,#+3 \ 000001C4 1C0050E3 CMP R0,#+28 \ 000001C8 B0FFFF8A BHI ??get_answer_8 \ 000001CC 021F8FE2 ADR R1,??get_answer_0 \ 000001D0 8000A0E1 MOV R0,R0, LSL #+1 \ 000001D4 F01091E1 LDRSH R1,[R1, R0] \ 000001D8 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??get_answer_0: \ 000001DC 47000E00ACFF DC16 +71,+14,+65452,+64 \ 4000 \ 000001E4 9EFFACFF2900 DC16 +65438,+65452,+41,+65452 \ ACFF \ 000001EC ACFFACFFAF00 DC16 +65452,+65452,+175,+65452 \ ACFF \ 000001F4 ACFFB500BB00 DC16 +65452,+181,+187,+65452 \ ACFF \ 000001FC C0009EFF9EFF DC16 +192,+65438,+65438,+65452 \ ACFF \ 00000204 ACFFACFF9EFF DC16 +65452,+65452,+65438,+65452 \ ACFF \ 0000020C ACFFACFFACFF DC16 +65452,+65452,+65452,+65452 \ ACFF \ 00000214 9DFF0000 DC16 +65437,+0 \ ??get_answer_13: \ 00000218 0400A0E1 MOV R0,R4 \ 0000021C 140000EF SWI +20 \ 00000220 00B0A0E1 MOV R11,R0 \ 00000224 0420A0E1 MOV R2,R4 \ 00000228 0610A0E1 MOV R1,R6 \ 0000022C 1E0100EF SWI +286 \ 00000230 5C0095E5 LDR R0,[R5, #+92] \ 00000234 0B30A0E1 MOV R3,R11 \ 00000238 01002DE9 PUSH {R0} \ 0000023C 0020A0E3 MOV R2,#+0 \ 00000240 0710A0E1 MOV R1,R7 \ 00000244 0800A0E1 MOV R0,R8 \ 00000248 000100EF SWI +256 \ 0000024C A0039FE5 LDR R0,??get_answer_2+0xC ;; sndStartup \ 00000250 ........ BL Play \ 00000254 083086E2 ADD R3,R6,#+8 \ 00000258 E22F8FE2 ADR R2,??get_answer_2 ;; "%s" \ 0000025C FF10A0E3 MOV R1,#+255 \ 00000260 0A00A0E1 MOV R0,R10 \ 00000264 1B0100EF SWI +283 \ 00000268 0300A0E3 MOV R0,#+3 \ 0000026C 580085E5 STR R0,[R5, #+88] \ 00000270 800095E5 LDR R0,[R5, #+128] \ 00000274 010040E2 SUB R0,R0,#+1 \ 00000278 800085E5 STR R0,[R5, #+128] \ 0000027C ........ BL SMART_REDRAW \ 00000280 81FFFFEA B ??get_answer_7 \ ??get_answer_14: \ 00000284 0B40A0E1 MOV R4,R11 \ 00000288 0400A0E1 MOV R0,R4 \ 0000028C 140000EF SWI +20 \ 00000290 00B0A0E1 MOV R11,R0 \ 00000294 0420A0E1 MOV R2,R4 \ 00000298 0610A0E1 MOV R1,R6 \ 0000029C 1E0100EF SWI +286 \ 000002A0 B800D6E1 LDRH R0,[R6, #+8] \ 000002A4 4C239FE5 LDR R2,??get_answer_2+0x10 ;; Canvas + 556 \ 000002A8 FF10A0E3 MOV R1,#+255 \ 000002AC 01002DE9 PUSH {R0} \ 000002B0 003096E5 LDR R3,[R6, #+0] \ 000002B4 0A00A0E1 MOV R0,R10 \ 000002B8 1B0100EF SWI +283 \ 000002BC 5C0095E5 LDR R0,[R5, #+92] \ 000002C0 0B30A0E1 MOV R3,R11 \ 000002C4 01002DE9 PUSH {R0} \ 000002C8 0020A0E3 MOV R2,#+0 \ 000002CC 0710A0E1 MOV R1,R7 \ 000002D0 0800A0E1 MOV R0,R8 \ 000002D4 000100EF SWI +256 \ 000002D8 08D08DE2 ADD SP,SP,#+8 \ 000002DC 6BFFFFEA B ??get_answer_8 \ ??get_answer_15: \ 000002E0 14239FE5 LDR R2,??get_answer_2+0x14 ;; Canvas + 568 \ 000002E4 083086E2 ADD R3,R6,#+8 \ 000002E8 FF10A0E3 MOV R1,#+255 \ 000002EC 0A00A0E1 MOV R0,R10 \ 000002F0 1B0100EF SWI +283 \ 000002F4 ........ BL SMART_REDRAW \ 000002F8 64FFFFEA B ??get_answer_8 \ ??get_answer_16: \ 000002FC 0400A0E1 MOV R0,R4 \ 00000300 140000EF SWI +20 \ 00000304 00B0A0E1 MOV R11,R0 \ 00000308 0420A0E1 MOV R2,R4 \ 0000030C 0610A0E1 MOV R1,R6 \ 00000310 1E0100EF SWI +286 \ 00000314 08008BE2 ADD R0,R11,#+8 \ 00000318 030000EA B ??get_answer_17 \ ??get_answer_18: \ 0000031C 030051E3 CMP R1,#+3 \ 00000320 2010A0B3 MOVLT R1,#+32 \ 00000324 0010C0B5 STRBLT R1,[R0, #+0] \ 00000328 010080E2 ADD R0,R0,#+1 \ ??get_answer_17: \ 0000032C 0010D0E5 LDRB R1,[R0, #+0] \ 00000330 000051E3 CMP R1,#+0 \ 00000334 F8FFFF1A BNE ??get_answer_18 \ 00000338 ........ LDR R0,??DataTable119 ;; addIconBar \ 0000033C 002096E5 LDR R2,[R6, #+0] \ 00000340 B8129FE5 LDR R1,??get_answer_2+0x18 ;; Canvas + 576 \ 00000344 440085E5 STR R0,[R5, #+68] \ 00000348 0C00A0E3 MOV R0,#+12 \ 0000034C 700D80E3 ORR R0,R0,#0x1C00 \ 00000350 094080E0 ADD R4,R0,R9 \ 00000354 0400A0E1 MOV R0,R4 \ 00000358 160000EF SWI +22 \ 0000035C ........ LDR R0,??DataTable120 ;; ignor_list \ 00000360 0410A0E1 MOV R1,R4 \ 00000364 180100EF SWI +280 \ 00000368 000050E3 CMP R0,#+0 \ 0000036C 47FFFF1A BNE ??get_answer_8 \ 00000370 8C229FE5 LDR R2,??get_answer_2+0x1C ;; Canvas + 584 \ 00000374 8C429FE5 LDR R4,??get_answer_2+0x20 ;; sndMsg \ 00000378 080086E2 ADD R0,R6,#+8 \ 0000037C 01002DE9 PUSH {R0} \ 00000380 003096E5 LDR R3,[R6, #+0] \ 00000384 FF10A0E3 MOV R1,#+255 \ 00000388 0A00A0E1 MOV R0,R10 \ 0000038C 1B0100EF SWI +283 \ 00000390 8C0299E5 LDR R0,[R9, #+652] \ 00000394 ........ BL SendMSGACK \ 00000398 5C0095E5 LDR R0,[R5, #+92] \ 0000039C 0B30A0E1 MOV R3,R11 \ 000003A0 01002DE9 PUSH {R0} \ 000003A4 0020A0E3 MOV R2,#+0 \ 000003A8 0710A0E1 MOV R1,R7 \ 000003AC 0800A0E1 MOV R0,R8 \ 000003B0 000100EF SWI +256 \ 000003B4 ........ BL SMART_REDRAW \ 000003B8 ........ LDR R0,??DataTable121 ;; extended_sounds \ 000003BC 000090E5 LDR R0,[R0, #+0] \ 000003C0 08D08DE2 ADD SP,SP,#+8 \ 000003C4 000050E3 CMP R0,#+0 \ 000003C8 000096E5 LDR R0,[R6, #+0] \ 000003CC 1A00001A BNE ??get_answer_19 \ 000003D0 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000003D4 581090E5 LDR R1,[R0, #+88] \ 000003D8 000051E3 CMP R1,#+0 \ 000003DC 0500000A BEQ ??get_answer_20 \ 000003E0 600090E5 LDR R0,[R0, #+96] \ 000003E4 000050E3 CMP R0,#+0 \ 000003E8 28FFFF0A BEQ ??get_answer_8 \ ??get_answer_21: \ 000003EC 0400A0E1 MOV R0,R4 \ ??get_answer_22: \ 000003F0 ........ BL Play \ 000003F4 25FFFFEA B ??get_answer_8 \ ??get_answer_20: \ 000003F8 ........ LDR R2,??DataTable122 ;; automsgcount \ 000003FC 781090E5 LDR R1,[R0, #+120] \ 00000400 002092E5 LDR R2,[R2, #+0] \ 00000404 020051E1 CMP R1,R2 \ 00000408 0200002A BCS ??get_answer_23 \ 0000040C 401299E5 LDR R1,[R9, #+576] \ 00000410 000051E3 CMP R1,#+0 \ 00000414 F4FFFF1A BNE ??get_answer_21 \ ??get_answer_23: \ 00000418 741090E5 LDR R1,[R0, #+116] \ 0000041C 000051E3 CMP R1,#+0 \ 00000420 0300000A BEQ ??get_answer_24 \ 00000424 700090E5 LDR R0,[R0, #+112] \ 00000428 000050E3 CMP R0,#+0 \ 0000042C 17FFFF0A BEQ ??get_answer_8 \ 00000430 EDFFFFEA B ??get_answer_21 \ ??get_answer_24: \ 00000434 0400A0E1 MOV R0,R4 \ 00000438 ECFFFFEA B ??get_answer_22 \ ??get_answer_19: \ 0000043C C8219FE5 LDR R2,??get_answer_2+0x24 ;; sndMsg2 \ 00000440 FC0189E5 STR R0,[R9, #+508] \ 00000444 0010A0E3 MOV R1,#+0 \ 00000448 0C108DE5 STR R1,[SP, #+12] \ 0000044C FC3199E5 LDR R3,[R9, #+508] \ 00000450 B8119FE5 LDR R1,??get_answer_2+0x28 ;; Canvas + 596 \ 00000454 A470A0E3 MOV R7,#+164 \ 00000458 407E87E3 ORR R7,R7,#0x400 \ 0000045C 090087E0 ADD R0,R7,R9 \ 00000460 160000EF SWI +22 \ 00000464 0C308DE2 ADD R3,SP,#+12 \ 00000468 8020A0E3 MOV R2,#+128 \ 0000046C 801CA0E3 MOV R1,#+32768 \ 00000470 090087E0 ADD R0,R7,R9 \ 00000474 0A0000EF SWI +10 \ 00000478 08008DE5 STR R0,[SP, #+8] \ 0000047C 08009DE5 LDR R0,[SP, #+8] \ 00000480 010070E3 CMN R0,#+1 \ 00000484 EAFFFF0A BEQ ??get_answer_24 \ 00000488 08009DE5 LDR R0,[SP, #+8] \ 0000048C 0C108DE2 ADD R1,SP,#+12 \ 00000490 0D0000EF SWI +13 \ 00000494 090087E0 ADD R0,R7,R9 \ 00000498 D4FFFFEA B ??get_answer_22 \ ??get_answer_25: \ 0000049C 460100EF SWI +326 \ 000004A0 081086E2 ADD R1,R6,#+8 \ 000004A4 0100A0E3 MOV R0,#+1 \ 000004A8 480100EF SWI +328 \ ??get_answer_26: \ 000004AC 470100EF SWI +327 \ 000004B0 F6FEFFEA B ??get_answer_8 \ ??get_answer_27: \ 000004B4 0600A0E1 MOV R0,R6 \ 000004B8 ........ BL FindContactLOGQByAck \ 000004BC 000050E3 CMP R0,#+0 \ 000004C0 0100000A BEQ ??get_answer_28 \ 000004C4 48019FE5 LDR R0,??get_answer_2+0x2C ;; sndMsgSent \ 000004C8 ........ BL Play \ ??get_answer_28: \ 000004CC 0A00A0E3 MOV R0,#+10 \ 000004D0 140000EF SWI +20 \ 000004D4 00B0A0E1 MOV R11,R0 \ 000004D8 0A20A0E3 MOV R2,#+10 \ 000004DC E1FEFFEA B ??get_answer_6 \ ??get_answer_29: \ 000004E0 10108DE2 ADD R1,SP,#+16 \ 000004E4 ........ LDR R7,??DataTable123 ;; janis \ 000004E8 18008DE2 ADD R0,SP,#+24 \ 000004EC B40000EF SWI +180 \ 000004F0 1000DDE5 LDRB R0,[SP, #+16] \ 000004F4 1120DDE5 LDRB R2,[SP, #+17] \ 000004F8 E11EA0E3 MOV R1,#+3600 \ 000004FC 3C30A0E3 MOV R3,#+60 \ 00000500 930202E0 MUL R2,R3,R2 \ 00000504 912020E0 MLA R0,R1,R0,R2 \ 00000508 1210DDE5 LDRB R1,[SP, #+18] \ 0000050C E12EA0E3 MOV R2,#+3600 \ 00000510 000081E0 ADD R0,R1,R0 \ 00000514 0810D6E5 LDRB R1,[R6, #+8] \ 00000518 920101E0 MUL R1,R2,R1 \ 0000051C F4209FE5 LDR R2,??get_answer_2+0x30 ;; Canvas + 608 \ 00000520 010040E0 SUB R0,R0,R1 \ 00000524 0910D6E5 LDRB R1,[R6, #+9] \ 00000528 930101E0 MUL R1,R3,R1 \ 0000052C 010040E0 SUB R0,R0,R1 \ 00000530 0A10D6E5 LDRB R1,[R6, #+10] \ 00000534 014050E0 SUBS R4,R0,R1 \ 00000538 500BA043 MOVMI R0,#+81920 \ 0000053C 460D8043 ORRMI R0,R0,#0x1180 \ 00000540 04408040 ADDMI R4,R0,R4 \ 00000544 010084E2 ADD R0,R4,#+1 \ 00000548 01002DE9 PUSH {R0} \ 0000054C 0430A0E1 MOV R3,R4 \ 00000550 FF10A0E3 MOV R1,#+255 \ 00000554 0A00A0E1 MOV R0,R10 \ 00000558 1B0100EF SWI +283 \ 0000055C B8109FE5 LDR R1,??get_answer_2+0x34 ;; Canvas + 628 \ 00000560 0420A0E1 MOV R2,R4 \ 00000564 B4409FE5 LDR R4,??get_answer_2+0x38 ;; pingsnd \ 00000568 7400A0E3 MOV R0,#+116 \ 0000056C 540D80E3 ORR R0,R0,#0x1500 \ 00000570 090080E0 ADD R0,R0,R9 \ 00000574 160000EF SWI +22 \ 00000578 460100EF SWI +326 \ 0000057C 000097E5 LDR R0,[R7, #+0] \ 00000580 04D08DE2 ADD SP,SP,#+4 \ 00000584 010050E3 CMP R0,#+1 \ 00000588 0700001A BNE ??get_answer_30 \ 0000058C 0A10A0E1 MOV R1,R10 \ 00000590 0100A0E3 MOV R0,#+1 \ 00000594 480100EF SWI +328 \ 00000598 0400A0E1 MOV R0,R4 \ 0000059C ........ BL Play \ 000005A0 0000A0E3 MOV R0,#+0 \ 000005A4 000087E5 STR R0,[R7, #+0] \ 000005A8 BFFFFFEA B ??get_answer_26 \ ??get_answer_30: \ 000005AC 240399E5 LDR R0,[R9, #+804] \ 000005B0 000050E3 CMP R0,#+0 \ 000005B4 0500001A BNE ??get_answer_31 \ 000005B8 64009FE5 LDR R0,??get_answer_2+0x3C ;; ping_time_config \ 000005BC 000090E5 LDR R0,[R0, #+0] \ 000005C0 240389E5 STR R0,[R9, #+804] \ 000005C4 0400A0E1 MOV R0,R4 \ 000005C8 ........ BL Play \ 000005CC B6FFFFEA B ??get_answer_26 \ ??get_answer_31: \ 000005D0 010040E2 SUB R0,R0,#+1 \ 000005D4 240389E5 STR R0,[R9, #+804] \ 000005D8 B3FFFFEA B ??get_answer_26 3374 } 3375 } 3376 } 3377 RXstate=i; \ ??get_answer_9: \ 000005DC 547085E5 STR R7,[R5, #+84] 3378 // GBS_StartTimerProc(&tmr_dorecv,3000,dorecv); 3379 // SMART_REDRAW(); 3380 } \ ??get_answer_1: \ 000005E0 42DE8DE2 ADD SP,SP,#+1056 ;; stack cleaning \ 000005E4 F08FBDE8 POP {R4-R11,PC} ;; return \ ??get_answer_2: \ 000005E8 25730000 DC8 "%s",+0 \ 000005EC ........ DC32 RXbuf \ 000005F0 ........ DC32 Canvas + 544 \ 000005F4 ........ DC32 sndStartup \ 000005F8 ........ DC32 Canvas + 556 \ 000005FC ........ DC32 Canvas + 568 \ 00000600 ........ DC32 Canvas + 576 \ 00000604 ........ DC32 Canvas + 584 \ 00000608 ........ DC32 sndMsg \ 0000060C ........ DC32 sndMsg2 \ 00000610 ........ DC32 Canvas + 596 \ 00000614 ........ DC32 sndMsgSent \ 00000618 ........ DC32 Canvas + 608 \ 0000061C ........ DC32 Canvas + 628 \ 00000620 ........ DC32 pingsnd \ 00000624 ........ DC32 ping_time_config 3381 3382 3383 extern int main_count; 3384 3385 //=====================add to main info==================== 3386 3387 //Сюда я не лез...и че та желания нет...kluchnik ;) 3388 3389 char a_txt[45]; 3390 char s_txt[45]; 3391 char d_txt[45]; 3392 char f_txt[45]; 3393 char g_txt[45]; 3394 unsigned int main_msg_timer2; \ In segment CODE, align 4, keep-with-next 3395 void AddToMain(const char *nameu,char *si) 3396 { \ AddToMain: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0180A0E1 MOV R8,R1 3397 char *de=malloc(64); \ 00000010 4000A0E3 MOV R0,#+64 \ 00000014 140000EF SWI +20 \ 00000018 0050A0E1 MOV R5,R0 3398 int text_l; 3399 int iz; 3400 int name_l; 3401 name_l=0; 3402 text_l=0; 3403 name_l=strlen(nameu); \ 0000001C 0400A0E1 MOV R0,R4 \ 00000020 1B0000EF SWI +27 3404 iz=0; 3405 #ifdef ELKA 3406 text_l=main_lenght-name_l; 3407 #else 3408 text_l=main_lenght-name_l; \ 00000024 04129FE5 LDR R1,??AddToMain_0 ;; main_lenght \ 00000028 0070A0E3 MOV R7,#+0 \ 0000002C 001091E5 LDR R1,[R1, #+0] 3409 #endif 3410 3411 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 3412 { 3413 while(text_l!=0) 3414 { 3415 de[iz]=si[iz]; 3416 iz++; 3417 text_l--; 3418 } 3419 if(use_cutter) 3420 { 3421 de[iz]='.'; 3422 iz++; 3423 de[iz]='.'; 3424 iz++; 3425 de[iz]='.'; 3426 iz++; 3427 } 3428 de[iz]='\0'; 3429 } 3430 else 3431 strcpy(de, si); \ 00000048 0810A0E1 MOV R1,R8 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 1A0000EF SWI +26 3432 iz=0; \ ??AddToMain_2: \ 00000054 0070A0E3 MOV R7,#+0 \ 00000058 1A0000EA B ??AddToMain_3 \ ??AddToMain_4: \ 0000005C 0810D7E7 LDRB R1,[R7, +R8] \ 00000060 019049E2 SUB R9,R9,#+1 \ 00000064 0510C7E7 STRB R1,[R7, +R5] \ 00000068 0070A0E1 MOV R7,R0 \ ??AddToMain_1: \ 0000006C 010087E2 ADD R0,R7,#+1 \ 00000070 000059E3 CMP R9,#+0 \ 00000074 F8FFFF1A BNE ??AddToMain_4 \ 00000078 B4119FE5 LDR R1,??AddToMain_0+0x4 ;; use_cutter \ 0000007C 001091E5 LDR R1,[R1, #+0] \ 00000080 000051E3 CMP R1,#+0 \ 00000084 0500000A BEQ ??AddToMain_5 \ 00000088 2E10A0E3 MOV R1,#+46 \ 0000008C 0510C7E7 STRB R1,[R7, +R5] \ 00000090 0510C0E7 STRB R1,[R0, +R5] \ 00000094 010080E2 ADD R0,R0,#+1 \ 00000098 0510C0E7 STRB R1,[R0, +R5] \ 0000009C 017080E2 ADD R7,R0,#+1 \ ??AddToMain_5: \ 000000A0 0560C7E7 STRB R6,[R7, +R5] \ 000000A4 EAFFFFEA B ??AddToMain_2 3433 while(strlen(de)!=iz) 3434 { 3435 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] 3436 if(de[iz]==0x0A) de[iz]=0x20; \ 000000B8 0510D7E7 LDRB R1,[R7, +R5] \ 000000BC 0A0051E3 CMP R1,#+10 \ 000000C0 0500C707 STRBEQ R0,[R7, +R5] 3437 iz++; \ 000000C4 017087E2 ADD R7,R7,#+1 3438 } \ ??AddToMain_3: \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 1B0000EF SWI +27 \ 000000D0 070050E1 CMP R0,R7 \ 000000D4 F3FFFF1A BNE ??AddToMain_6 3439 de[iz]='\0'; 3440 if(main_count==0) sprintf(a_txt, "%s: %s", nameu,de); \ 000000D8 ........ LDR R8,??DataTable124 ;; main_count \ 000000DC 0560C7E7 STRB R6,[R7, +R5] \ 000000E0 ........ LDR R6,??DataTable128 ;; S_ICONS \ 000000E4 4C719FE5 LDR R7,??AddToMain_0+0x8 ;; `?` \ 000000E8 1810A0E3 MOV R1,#+24 \ 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 3441 if(main_count==1) sprintf(s_txt, "%s: %s", nameu,de); \ ??AddToMain_7: \ 00000118 4810A0E3 MOV R1,#+72 \ 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 3442 if(main_count==2) sprintf(d_txt, "%s: %s", nameu,de); \ ??AddToMain_8: \ 00000148 7800A0E3 MOV R0,#+120 \ 0000014C 700D80E3 ORR R0,R0,#0x1C00 \ 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 3443 if(main_count==3) sprintf(f_txt, "%s: %s", nameu,de); \ ??AddToMain_9: \ 00000174 A800A0E3 MOV R0,#+168 \ 00000178 700D80E3 ORR R0,R0,#0x1C00 \ 0000017C 06A080E0 ADD R10,R0,R6 \ 00000180 000098E5 LDR R0,[R8, #+0] \ 00000184 030050E3 CMP R0,#+3 \ 00000188 0400001A BNE ??AddToMain_10 \ 0000018C 0530A0E1 MOV R3,R5 \ 00000190 0420A0E1 MOV R2,R4 \ 00000194 0710A0E1 MOV R1,R7 \ 00000198 0A00A0E1 MOV R0,R10 \ 0000019C 160000EF SWI +22 3444 if(main_count==4) sprintf(g_txt, "%s: %s", nameu,de); \ ??AddToMain_10: \ 000001A0 D800A0E3 MOV R0,#+216 \ 000001A4 700D80E3 ORR R0,R0,#0x1C00 \ 000001A8 06B080E0 ADD R11,R0,R6 \ 000001AC 000098E5 LDR R0,[R8, #+0] \ 000001B0 040050E3 CMP R0,#+4 \ 000001B4 0400001A BNE ??AddToMain_11 \ 000001B8 0530A0E1 MOV R3,R5 \ 000001BC 0420A0E1 MOV R2,R4 \ 000001C0 0710A0E1 MOV R1,R7 \ 000001C4 0B00A0E1 MOV R0,R11 \ 000001C8 160000EF SWI +22 3445 if(main_count>4) \ ??AddToMain_11: \ 000001CC 000098E5 LDR R0,[R8, #+0] \ 000001D0 050050E3 CMP R0,#+5 \ 000001D4 100000BA BLT ??AddToMain_12 3446 { 3447 strcpy(a_txt, s_txt); \ 000001D8 00109DE5 LDR R1,[SP, #+0] \ 000001DC 04009DE5 LDR R0,[SP, #+4] \ 000001E0 1A0000EF SWI +26 3448 strcpy(s_txt, d_txt); \ 000001E4 00009DE5 LDR R0,[SP, #+0] \ 000001E8 0910A0E1 MOV R1,R9 \ 000001EC 1A0000EF SWI +26 3449 strcpy(d_txt, f_txt); \ 000001F0 0A10A0E1 MOV R1,R10 \ 000001F4 0900A0E1 MOV R0,R9 \ 000001F8 1A0000EF SWI +26 3450 strcpy(f_txt, g_txt); \ 000001FC 0B10A0E1 MOV R1,R11 \ 00000200 0A00A0E1 MOV R0,R10 \ 00000204 1A0000EF SWI +26 3451 sprintf(g_txt, "%s: %s", nameu,de); \ 00000208 0530A0E1 MOV R3,R5 \ 0000020C 0420A0E1 MOV R2,R4 \ 00000210 0710A0E1 MOV R1,R7 \ 00000214 0B00A0E1 MOV R0,R11 \ 00000218 160000EF SWI +22 3452 } 3453 mfree(de); \ ??AddToMain_12: \ 0000021C 0500A0E1 MOV R0,R5 \ 00000220 150000EF SWI +21 3454 main_d=1; \ 00000224 0100A0E3 MOV R0,#+1 \ 00000228 EC0186E5 STR R0,[R6, #+492] 3455 } \ 0000022C F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??AddToMain_0: \ 00000230 ........ DC32 main_lenght \ 00000234 ........ DC32 use_cutter \ 00000238 ........ DC32 `?` 3456 3457 //======================add to main info================ 3458 3459 int NEW_MSG; 3460 \ In segment CODE, align 4, keep-with-next 3461 void AddStringToLog(CLIST *t, int code, char *s, const char *name, unsigned int IDforACK,int flag) 3462 { \ 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 3463 char hs[128], *lastX; 3464 TTime tt; 3465 TDate d; 3466 GetDateTime(&d,&tt); \ 00000020 0D10A0E1 MOV R1,SP \ 00000024 08008DE2 ADD R0,SP,#+8 \ 00000028 B40000EF SWI +180 3467 int i; 3468 3469 // if(code == 3 && !LOG_XTXT) return; //Нl нуcно nоodrн?nь cennnrnуn 3470 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 3471 { 3472 #ifdef kluchnik 3473 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 3484 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 3485 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 3486 3487 LOGQ *p=NewLOGQ(s); \ ??AddStringToLog_5: \ 00000104 0800A0E1 MOV R0,R8 \ 00000108 ........ BL NewLOGQ \ 0000010C 0080A0E1 MOV R8,R0 3488 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 3489 p->type=code; \ 00000148 0C5088E5 STR R5,[R8, #+12] 3490 p->ID=IDforACK; //0-32767 \ 0000014C 087088E5 STR R7,[R8, #+8] 3491 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 3492 while(i>MAXLOGMSG) 3493 { 3494 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] 3495 RemoveLOGQ(&t->log,t->log); 3496 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 3497 } \ 0000018C 150056E3 CMP R6,#+21 \ 00000190 F5FFFFAA BGE ??AddStringToLog_7 3498 t->msg_count=i; \ ??AddStringToLog_6: \ 00000194 A06084E5 STR R6,[R4, #+160] 3499 if (!t->last_log) t->last_log=p; \ 00000198 980094E5 LDR R0,[R4, #+152] 3500 if (code==3) \ 0000019C ........ LDR R6,??DataTable128 ;; S_ICONS \ 000001A0 000050E3 CMP R0,#+0 \ 000001A4 98808405 STREQ R8,[R4, #+152] \ 000001A8 030055E3 CMP R5,#+3 \ 000001AC 0D00001A BNE ??AddStringToLog_8 3501 { 3502 if (edchat_id) \ 000001B0 AC0296E5 LDR R0,[R6, #+684] \ 000001B4 000050E3 CMP R0,#+0 \ 000001B8 1C00000A BEQ ??AddStringToLog_9 3503 { 3504 void *data=FindGUIbyId(edchat_id,NULL); \ 000001BC AC0296E5 LDR R0,[R6, #+684] \ 000001C0 0010A0E3 MOV R1,#+0 \ 000001C4 090200EF SWI +521 3505 if (data) \ 000001C8 000050E3 CMP R0,#+0 \ 000001CC 1700000A BEQ ??AddStringToLog_9 3506 { 3507 EDCHAT_STRUCT *ed_struct; 3508 ed_struct=EDIT_GetUserPointer(data); \ 000001D0 DF0100EF SWI +479 3509 if (ed_struct) \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 1400000A BEQ ??AddStringToLog_9 3510 { 3511 if (ed_struct->ed_contact==t) \ 000001DC 000090E5 LDR R0,[R0, #+0] \ 000001E0 040050E1 CMP R0,R4 \ 000001E4 1100001A BNE ??AddStringToLog_9 3512 { 3513 goto L_INC; 3514 } 3515 } 3516 } 3517 } 3518 goto L_NOINC; 3519 } 3520 L_INC: 3521 if (!t->isunread) total_unread++; \ ??AddStringToLog_8: \ 000001E8 800094E5 LDR R0,[R4, #+128] \ 000001EC 000050E3 CMP R0,#+0 \ 000001F0 9C029605 LDREQ R0,[R6, #+668] \ 000001F4 01008002 ADDEQ R0,R0,#+1 \ 000001F8 9C028605 STREQ R0,[R6, #+668] 3522 if(NEW_MSG==1) \ 000001FC 2C0396E5 LDR R0,[R6, #+812] \ 00000200 010050E3 CMP R0,#+1 \ 00000204 0700001A BNE ??AddStringToLog_10 3523 { 3524 t->unread_msg++; \ 00000208 840094E5 LDR R0,[R4, #+132] \ 0000020C 010080E2 ADD R0,R0,#+1 \ 00000210 840084E5 STR R0,[R4, #+132] 3525 total_unread2++; \ 00000214 180296E5 LDR R0,[R6, #+536] \ 00000218 010080E2 ADD R0,R0,#+1 \ 0000021C 180286E5 STR R0,[R6, #+536] 3526 NEW_MSG=0; \ 00000220 0000A0E3 MOV R0,#+0 \ 00000224 2C0386E5 STR R0,[R6, #+812] 3527 } 3528 t->isunread=1; \ ??AddStringToLog_10: \ 00000228 0100A0E3 MOV R0,#+1 \ 0000022C 800084E5 STR R0,[R4, #+128] 3529 L_NOINC: 3530 ChangeContactPos(t); \ ??AddStringToLog_9: \ 00000230 0400A0E1 MOV R0,R4 \ 00000234 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3531 } \ ??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 3532 3533 void ParseAnswer(WSHDR *ws, const char *s); 3534 3535 int time_to_stop_t9; 3536 \ In segment CODE, align 4, keep-with-next 3537 void ParseXStatusText(WSHDR *ws, const char *s, int color) 3538 { \ ParseXStatusText: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 3539 int c; 3540 int flag=0; \ 00000010 0070A0E3 MOV R7,#+0 3541 CutWSTR(ws,0); \ 00000014 0010A0E3 MOV R1,#+0 \ 00000018 260100EF SWI +294 3542 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} 3543 wsAppendChar(ws,0xE008); \ 0000002C 0810A0E3 MOV R1,#+8 \ 00000030 E01C81E3 ORR R1,R1,#0xE000 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 1C0000EF SWI +28 3544 wsAppendChar(ws,color); \ 0000003C 0610A0E1 MOV R1,R6 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1C0000EF SWI +28 3545 wsAppendChar(ws,0xE013); \ 00000048 1310A0E3 MOV R1,#+19 \ 0000004C E01C81E3 ORR R1,R1,#0xE000 \ 00000050 0A0000EA B ??ParseXStatusText_0 3546 while((c=*s++)) 3547 { 3548 if (c==13) \ ??ParseXStatusText_1: \ 00000054 0D0050E3 CMP R0,#+13 3549 { 3550 if (!flag) \ 00000058 00005703 CMPEQ R7,#+0 \ 0000005C 0500001A BNE ??ParseXStatusText_2 3551 { 3552 flag=1; \ 00000060 0170A0E3 MOV R7,#+1 3553 wsAppendChar(ws,0xE012); \ 00000064 1210A0E3 MOV R1,#+18 \ 00000068 E01C81E3 ORR R1,R1,#0xE000 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 1C0000EF SWI +28 3554 c=' '; \ 00000074 2000A0E3 MOV R0,#+32 3555 } 3556 } 3557 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 3558 } \ 00000088 ........ LDRB R0,[R5], #+1 \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 EFFFFF1A BNE ??ParseXStatusText_1 \ 00000094 F080BDE8 POP {R4-R7,PC} ;; return 3559 } 3560 3561 //Добавление итемов в чат при получении нового сообщения \ In segment CODE, align 4, keep-with-next 3562 void AddMsgToChat(void *data) 3563 { \ AddMsgToChat: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 3564 LOGQ *p; 3565 EDITCONTROL ec; 3566 EDITC_OPTIONS ec_options; 3567 EDCHAT_STRUCT *ed_struct; 3568 int j; 3569 int color, font, type; 3570 int zc; 3571 if (!data) return; \ 00000008 000050E3 CMP R0,#+0 \ 0000000C C400000A BEQ ??AddMsgToChat_0 3572 ed_struct=EDIT_GetUserPointer(data); \ 00000010 DF0100EF SWI +479 \ 00000014 0040B0E1 MOVS R4,R0 3573 if (!ed_struct) return; \ 00000018 C100000A BEQ ??AddMsgToChat_0 3574 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 3575 3576 p=ed_struct->ed_contact->last_log; \ 0000002C 985090E5 LDR R5,[R0, #+152] 3577 if (p) \ 00000030 ........ LDR R6,??DataTable128 ;; S_ICONS \ 00000034 ........ LDR R7,??DataTable129 ;; O_ED_X_FONT_SIZE \ 00000038 ........ LDR R8,??DataTable130 ;; X_COLOR \ 0000003C ........ LDR R9,??DataTable131 ;; O_X_COLOR \ 00000040 000055E3 CMP R5,#+0 \ 00000044 A100000A BEQ ??AddMsgToChat_1 3578 { 3579 while(p) 3580 { 3581 font = ED_H_FONT_SIZE; \ ??AddMsgToChat_2: \ 00000048 ........ LDR R0,??DataTable152 ;; ED_H_FONT_SIZE 3582 if ((zc=p->acked&3)) \ 0000004C ........ LDR R1,??DataTable149 ;; 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 3583 { 3584 if (zc==1) \ 00000064 010050E3 CMP R0,#+1 \ 00000068 1E00001A BNE ??AddMsgToChat_4 3585 color=ACK_COLOR; //Зеленый \ 0000006C ........ LDR R0,??DataTable145 ;; ACK_COLOR \ 00000070 1B0000EA B ??AddMsgToChat_5 3586 else 3587 color=I_COLOR; 3588 } 3589 else 3590 { 3591 if (p->ID==0xFFFFFFFF) \ ??AddMsgToChat_3: \ 00000074 080095E5 LDR R0,[R5, #+8] \ 00000078 010070E3 CMN R0,#+1 \ 0000007C 1700001A BNE ??AddMsgToChat_6 3592 { 3593 type = p->type&0x0F; \ 00000080 0C0095E5 LDR R0,[R5, #+12] \ 00000084 0F1000E2 AND R1,R0,#0xF 3594 if(p->type&0x10) \ 00000088 100010E3 TST R0,#0x10 \ 0000008C 0B00000A BEQ ??AddMsgToChat_7 3595 { 3596 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 00000090 010051E3 CMP R1,#+1 \ 00000094 ........ LDREQ R0,??DataTable147 ;; 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,??DataTable146 ;; O_TO_COLOR \ ??AddMsgToChat_8: \ 000000B0 00B090E5 LDR R11,[R0, #+0] \ 000000B4 ........ LDR R0,??DataTable151 ;; O_ED_H_FONT_SIZE \ ??AddMsgToChat_9: \ 000000B8 00A090E5 LDR R10,[R0, #+0] \ 000000BC 090000EA B ??AddMsgToChat_4 3597 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 3598 } 3599 else 3600 { 3601 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,??DataTable143 ;; ED_X_FONT_SIZE \ 000000D4 F7FFFF0A BEQ ??AddMsgToChat_9 \ 000000D8 ........ LDR R0,??DataTable148 ;; TO_COLOR \ 000000DC 000000EA B ??AddMsgToChat_5 3602 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 3603 } 3604 } 3605 else 3606 color=UNACK_COLOR; //????? \ ??AddMsgToChat_6: \ 000000E0 ........ LDR R0,??DataTable150 ;; UNACK_COLOR \ ??AddMsgToChat_5: \ 000000E4 00B090E5 LDR R11,[R0, #+0] 3607 } 3608 PrepareEditControl(&ec); \ ??AddMsgToChat_4: \ 000000E8 10008DE2 ADD R0,SP,#+16 \ 000000EC 640100EF SWI +356 3609 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 3610 { 3611 ascii2ws(ews,p->hdr); \ 00000100 380296E5 LDR R0,[R6, #+568] \ 00000104 101085E2 ADD R1,R5,#+16 \ 00000108 ........ _BLF ascii2ws,??ascii2ws??rA 3612 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 0000010C 383296E5 LDR R3,[R6, #+568] \ 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 3613 } 3614 else 3615 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??AddMsgToChat_10: \ 00000124 0000A0E3 MOV R0,#+0 \ 00000128 01002DE9 PUSH {R0} \ 0000012C 383296E5 LDR R3,[R6, #+568] \ 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 3616 PrepareEditCOptions(&ec_options); \ 00000144 0D00A0E1 MOV R0,SP \ 00000148 C80100EF SWI +456 3617 SetPenColorToEditCOptions(&ec_options,color); \ 0000014C 0B10A0E1 MOV R1,R11 \ 00000150 0D00A0E1 MOV R0,SP \ 00000154 CC0100EF SWI +460 3618 SetFontToEditCOptions(&ec_options,font); \ 00000158 0A10A0E1 MOV R1,R10 \ 0000015C 0D00A0E1 MOV R0,SP \ 00000160 CA0100EF SWI +458 3619 CopyOptionsToEditControl(&ec,&ec_options); \ 00000164 0D10A0E1 MOV R1,SP \ 00000168 10008DE2 ADD R0,SP,#+16 \ 0000016C CE0100EF SWI +462 3620 //AddEditControlToEditQend(eq,&ec,ma); 3621 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 3622 ed_struct->ed_answer++; \ 00000184 080094E5 LDR R0,[R4, #+8] \ 00000188 010080E2 ADD R0,R0,#+1 \ 0000018C 080084E5 STR R0,[R4, #+8] 3623 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 3624 { 3625 ParseAnswer(ews,p->text); \ 000001A0 380296E5 LDR R0,[R6, #+568] \ 000001A4 601085E2 ADD R1,R5,#+96 \ 000001A8 ........ BL ParseAnswer \ 000001AC 050000EA B ??AddMsgToChat_13 3626 } 3627 else 3628 { 3629 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 380296E5 LDR R0,[R6, #+568] \ 000001BC 00209805 LDREQ R2,[R8, #+0] \ 000001C0 601085E2 ADD R1,R5,#+96 \ 000001C4 ........ BL ParseXStatusText 3630 } 3631 PrepareEditControl(&ec); \ ??AddMsgToChat_13: \ 000001C8 10008DE2 ADD R0,SP,#+16 \ 000001CC 640100EF SWI +356 3632 ConstructEditControl(&ec, 3633 ECT_NORMAL_TEXT, 3634 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 3635 ews,ews->wsbody[0]); \ 000001D0 383296E5 LDR R3,[R6, #+568] \ 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 3636 PrepareEditCOptions(&ec_options); \ 000001FC 04008DE2 ADD R0,SP,#+4 \ 00000200 C80100EF SWI +456 3637 //#ifdef M75 3638 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 3639 { 3640 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000218 100010E3 TST R0,#0x10 \ 0000021C ........ LDRNE R0,??DataTable141 ;; O_ED_FONT_SIZE \ 00000220 ........ LDREQ R0,??DataTable142 ;; ED_FONT_SIZE \ 00000224 001090E5 LDR R1,[R0, #+0] \ 00000228 090000EA B ??AddMsgToChat_15 3641 } 3642 else 3643 { 3644 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 3645 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,??DataTable143 ;; 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 3646 } 3647 //#else 3648 // SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 3649 //#endif 3650 CopyOptionsToEditControl(&ec,&ec_options); \ 0000025C 0D10A0E1 MOV R1,SP \ 00000260 10008DE2 ADD R0,SP,#+16 \ 00000264 CE0100EF SWI +462 3651 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 3652 ed_struct->ed_answer++; \ 0000027C 080094E5 LDR R0,[R4, #+8] \ 00000280 010080E2 ADD R0,R0,#+1 \ 00000284 080084E5 STR R0,[R4, #+8] 3653 p=p->next; \ 00000288 005095E5 LDR R5,[R5, #+0] 3654 } \ 0000028C 000055E3 CMP R5,#+0 \ 00000290 6CFFFF1A BNE ??AddMsgToChat_2 3655 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 3656 while(jed_answer) 3657 { 3658 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??AddMsgToChat_17: \ 000002AC 040094E5 LDR R0,[R4, #+4] \ 000002B0 0110A0E3 MOV R1,#+1 \ 000002B4 D10100EF SWI +465 3659 ed_struct->ed_answer--; \ 000002B8 080094E5 LDR R0,[R4, #+8] \ 000002BC 010040E2 SUB R0,R0,#+1 \ 000002C0 080084E5 STR R0,[R4, #+8] 3660 } \ 000002C4 000055E1 CMP R5,R0 \ 000002C8 F7FFFFBA BLT ??AddMsgToChat_17 3661 } 3662 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] 3663 if (IsGuiOnTop(edchat_id)) \ 000002D8 AC0296E5 LDR R0,[R6, #+684] \ 000002DC 350100EF SWI +309 \ 000002E0 000050E3 CMP R0,#+0 \ 000002E4 0300000A BEQ ??AddMsgToChat_18 3664 { 3665 total_unread--; \ 000002E8 9C0296E5 LDR R0,[R6, #+668] \ 000002EC 010040E2 SUB R0,R0,#+1 \ 000002F0 9C0286E5 STR R0,[R6, #+668] \ 000002F4 020000EA B ??AddMsgToChat_19 3666 } 3667 else 3668 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] 3669 ed_struct->ed_contact->isunread=0; \ ??AddMsgToChat_19: \ 00000304 000094E5 LDR R0,[R4, #+0] \ 00000308 805080E5 STR R5,[R0, #+128] 3670 total_unread2=total_unread2-ed_struct->ed_contact->unread_msg; \ 0000030C 181296E5 LDR R1,[R6, #+536] \ 00000310 842090E5 LDR R2,[R0, #+132] \ 00000314 021041E0 SUB R1,R1,R2 \ 00000318 181286E5 STR R1,[R6, #+536] 3671 ed_struct->ed_contact->unread_msg=0; \ 0000031C 845080E5 STR R5,[R0, #+132] 3672 ChangeContactPos(ed_struct->ed_contact); \ 00000320 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3673 // EDIT_SetFocus(data,ed_struct->ed_answer); 3674 } \ ??AddMsgToChat_0: \ 00000324 40D08DE2 ADD SP,SP,#+64 ;; stack cleaning \ 00000328 F08FBDE8 POP {R4-R11,PC} ;; return 3675 3676 //Рисуем подтверждения непосредственно \ In segment CODE, align 4, keep-with-next 3677 void DrawAck(void *data) 3678 { \ DrawAck: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 3679 LOGQ *p; 3680 EDITCONTROL ec; 3681 EDITC_OPTIONS ec_options; 3682 EDCHAT_STRUCT *ed_struct; 3683 int j; 3684 int color; 3685 int dorefresh=0; \ 0000000C 0060A0E3 MOV R6,#+0 3686 if (!data) return; \ 00000010 4C00000A BEQ ??DrawAck_0 3687 ed_struct=EDIT_GetUserPointer(data); \ 00000014 DF0100EF SWI +479 3688 if (!ed_struct) return; \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 4900000A BEQ ??DrawAck_0 3689 p=ed_struct->ed_contact->log; \ 00000020 001090E5 LDR R1,[R0, #+0] 3690 j=ed_struct->ed_answer; 3691 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 3692 while(p) 3693 { 3694 if (j>=1) //Пока возможно лишнее \ ??DrawAck_2: \ 00000040 010057E3 CMP R7,#+1 \ 00000044 340000BA BLT ??DrawAck_3 3695 { 3696 if (!(p->acked&4)) \ 00000048 040095E5 LDR R0,[R5, #+4] \ 0000004C 040010E3 TST R0,#0x4 \ 00000050 3100001A BNE ??DrawAck_3 3697 { 3698 ExtractEditControl(data,j,&ec); \ 00000054 10208DE2 ADD R2,SP,#+16 \ 00000058 0710A0E1 MOV R1,R7 \ 0000005C 0400A0E1 MOV R0,R4 \ 00000060 690100EF SWI +361 3699 PrepareEditCOptions(&ec_options); \ 00000064 0D00A0E1 MOV R0,SP \ 00000068 C80100EF SWI +456 3700 if (p->acked) \ 0000006C 040095E5 LDR R0,[R5, #+4] \ 00000070 000050E3 CMP R0,#+0 \ 00000074 0300000A BEQ ??DrawAck_4 3701 { 3702 if (p->acked==1) \ 00000078 010050E3 CMP R0,#+1 \ 0000007C ........ LDRNE R0,??DataTable149 ;; I_COLOR 3703 color=ACK_COLOR; //Зеленый \ 00000080 ........ LDREQ R0,??DataTable145 ;; ACK_COLOR \ 00000084 0F0000EA B ??DrawAck_5 3704 else 3705 color=I_COLOR; 3706 } 3707 else 3708 { 3709 if (p->ID==0xFFFFFFFF) \ ??DrawAck_4: \ 00000088 080095E5 LDR R0,[R5, #+8] \ 0000008C 010070E3 CMN R0,#+1 \ 00000090 0B00001A BNE ??DrawAck_6 3710 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,??DataTable146 ;; O_TO_COLOR \ 000000AC ........ LDREQ R0,??DataTable147 ;; O_I_COLOR \ 000000B0 040000EA B ??DrawAck_5 \ ??DrawAck_7: \ 000000B4 010050E3 CMP R0,#+1 \ 000000B8 ........ LDRNE R0,??DataTable148 ;; TO_COLOR \ 000000BC ........ LDREQ R0,??DataTable149 ;; I_COLOR \ 000000C0 000000EA B ??DrawAck_5 3711 else 3712 color=UNACK_COLOR; //Серый \ ??DrawAck_6: \ 000000C4 ........ LDR R0,??DataTable150 ;; UNACK_COLOR 3713 } 3714 SetPenColorToEditCOptions(&ec_options,color/*p->type==1?I_COLOR:TO_COLOR*/); 3715 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_H_FONT_SIZE:ED_H_FONT_SIZE); 3716 CopyOptionsToEditControl(&ec,&ec_options); 3717 StoreEditControl(data,j,&ec); 3718 p->acked|=4; //Обработали 3719 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,??DataTable151 ;; O_ED_H_FONT_SIZE \ 000000E4 ........ LDREQ R0,??DataTable152 ;; 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] 3720 } 3721 } 3722 j+=2; 3723 p=p->next; \ ??DrawAck_3: \ 0000011C 005095E5 LDR R5,[R5, #+0] \ 00000120 027087E2 ADD R7,R7,#+2 3724 } \ 00000124 000055E3 CMP R5,#+0 \ 00000128 C4FFFF1A BNE ??DrawAck_2 3725 if (IsGuiOnTop(edchat_id)&&dorefresh) RefreshGUI(); \ ??DrawAck_1: \ 0000012C 1C009FE5 LDR R0,??DrawAck_8 ;; S_ICONS + 684 \ 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 + 684 3726 } 3727 \ In segment CODE, align 4, keep-with-next 3728 void ask_my_info(void) 3729 { 3730 /* TPKT *p; 3731 CLIST *t; 3732 p=malloc(sizeof(PKT)); 3733 p->pkt.uin=UIN; 3734 p->pkt.type=T_REQINFOSHORT; 3735 p->pkt.data_len=0; 3736 // AddStringToLog(t,0x01,"Request info...",I_str); 3737 SUBPROC((void *)SendAnswer,0,p);*/ 3738 } \ ask_my_info: \ 00000000 1EFF2FE1 BX LR ;; return 3739 \ In segment CODE, align 4, keep-with-next 3740 void set_my_status(void) 3741 { \ set_my_status: \ 00000000 00402DE9 PUSH {LR} 3742 TPKT *p; 3743 p=malloc(sizeof(PKT)+1); \ 00000004 0900A0E3 MOV R0,#+9 \ 00000008 140000EF SWI +20 3744 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 001080E5 STR R1,[R0, #+0] 3745 p->pkt.type=T_MY_STATUS_CH; // Тип пакета: изменение статуса \ 00000014 0F10A0E3 MOV R1,#+15 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 3746 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000001C 0110A0E3 MOV R1,#+1 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3747 p->data[0]=CurrentStatus; \ 00000024 18109FE5 LDR R1,??set_my_status_0 ;; S_ICONS + 560 3748 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,??DataTable166 ;; SendAnswer \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 710100EF SWI +369 3749 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??set_my_status_0: \ 00000044 ........ DC32 S_ICONS + 560 3750 3751 extern int Send0; 3752 \ In segment CODE, align 4, keep-with-next 3753 void set_my_xstatus(void) 3754 { \ set_my_xstatus: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 3755 #ifdef NEWSGOLD 3756 if(Is_Id3tag_Enabled) \ 00000004 ........ LDR R7,??DataTable165 ;; S_ICONS \ 00000008 ........ LDR R4,??DataTable166 ;; SendAnswer \ 0000000C 0CD04DE2 SUB SP,SP,#+12 \ 00000010 2C0297E5 LDR R0,[R7, #+556] \ 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 3757 { 3758 if(CurrentXStatus!=11) \ 0000002C 340297E5 LDR R0,[R7, #+564] \ 00000030 0B0050E3 CMP R0,#+11 \ 00000034 7200000A BEQ ??set_my_xstatus_1 3759 { 3760 #endif 3761 TPKT *p; 3762 char *s1; 3763 char *s2; 3764 int l1; 3765 int l2; 3766 p=malloc(sizeof(PKT)+1); \ 00000038 0900A0E3 MOV R0,#+9 \ 0000003C 140000EF SWI +20 \ 00000040 0080A0E1 MOV R8,R0 3767 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 00000044 006088E5 STR R6,[R8, #+0] 3768 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 00000048 B4A0C8E1 STRH R10,[R8, #+4] 3769 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000004C B690C8E1 STRH R9,[R8, #+6] 3770 p->data[0]=CurrentXStatus; \ 00000050 340297E5 LDR R0,[R7, #+564] 3771 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 3772 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 00000068 340297E5 LDR R0,[R7, #+564] \ 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 3773 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000080 340297E5 LDR R0,[R7, #+564] \ 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 3774 if ((!s1)||(!s2)) return; \ 00000098 000059E3 CMP R9,#+0 \ 0000009C 00005713 CMPNE R7,#+0 \ 000000A0 F787BD08 POPEQ {R0-R2,R4-R10,PC} 3775 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 3776 p->pkt.uin=0; \ 000000BC 006088E5 STR R6,[R8, #+0] 3777 p->pkt.type=T_XTEXT_SET; \ 000000C0 B450C8E1 STRH R5,[R8, #+4] 3778 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] 3779 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 3780 p->data[l1]=0; \ 000000E8 00009DE5 LDR R0,[SP, #+0] 3781 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 3782 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} 3783 #ifdef NEWSGOLD 3784 } 3785 else 3786 { 3787 tracktimer=0; 3788 GetTags(); 3789 } 3790 } 3791 else 3792 { 3793 TPKT *p; 3794 char *s1; 3795 char *s2; 3796 int l1; 3797 int l2; 3798 p=malloc(sizeof(PKT)+1); \ ??set_my_xstatus_0: \ 00000120 0900A0E3 MOV R0,#+9 \ 00000124 140000EF SWI +20 \ 00000128 0080A0E1 MOV R8,R0 3799 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000012C 006088E5 STR R6,[R8, #+0] 3800 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 00000130 B4A0C8E1 STRH R10,[R8, #+4] 3801 p->pkt.data_len=1; // Длина пакета: 1 байт \ 00000134 B690C8E1 STRH R9,[R8, #+6] 3802 p->data[0]=CurrentXStatus; \ 00000138 340297E5 LDR R0,[R7, #+564] 3803 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 3804 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 00000150 340297E5 LDR R0,[R7, #+564] \ 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 3805 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000168 340297E5 LDR R0,[R7, #+564] \ 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 3806 if ((!s1)||(!s2)) return; \ 00000180 000059E3 CMP R9,#+0 \ 00000184 00005A13 CMPNE R10,#+0 \ 00000188 F787BD08 POPEQ {R0-R2,R4-R10,PC} 3807 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 3808 p->pkt.uin=0; \ 000001A4 006088E5 STR R6,[R8, #+0] 3809 p->pkt.type=T_XTEXT_SET; \ 000001A8 B450C8E1 STRH R5,[R8, #+4] 3810 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] 3811 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 3812 p->data[l1]=0; \ 000001D0 00009DE5 LDR R0,[SP, #+0] 3813 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 3814 SUBPROC((void *)SendAnswer,0,p); \ 000001F4 0820A0E1 MOV R2,R8 \ 000001F8 0010A0E3 MOV R1,#+0 \ 000001FC 0400A0E1 MOV R0,R4 \ 00000200 710100EF SWI +369 3815 tracktimer=0; \ ??set_my_xstatus_1: \ 00000204 606287E5 STR R6,[R7, #+608] 3816 GetTags(); \ 00000208 ........ _BLF GetTags,??GetTags??rA \ 0000020C F787BDE8 POP {R0-R2,R4-R10,PC} ;; return 3817 } 3818 #endif 3819 } 3820 3821 #ifdef NEWSGOLD 3822 \ In segment CODE, align 4, keep-with-next 3823 void set_my_xstatus2(void) 3824 { \ set_my_xstatus2: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 3825 TPKT *p; 3826 // char *s1; 3827 // char *s2; 3828 int l1; 3829 int l2; 3830 p=malloc(sizeof(PKT)+1); 3831 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 3832 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 3833 p->pkt.data_len=1; // Длина пакета: 1 байт 3834 p->data[0]=11; 3835 SUBPROC((void *)SendAnswer,0,p); \ 00000004 ........ LDR R6,??DataTable166 ;; SendAnswer 3836 // char *s1; 3837 char *sk2=malloc(256); 3838 // strcpy(s1, playing); 3839 // s1="Now playing:"; 3840 strcpy(sk2,teast2); 3841 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 3842 l2=strlen(sk2); \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 1B0000EF SWI +27 \ 00000074 00A0A0E1 MOV R10,R0 3843 if ((!playing)||(!sk2)) return; \ 00000078 000057E3 CMP R7,#+0 \ 0000007C F187BD08 POPEQ {R0,R4-R10,PC} 3844 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 3845 p->pkt.uin=0; \ 00000090 005084E5 STR R5,[R4, #+0] 3846 p->pkt.type=T_XTEXT_SET; \ 00000094 1A00A0E3 MOV R0,#+26 \ 00000098 B400C4E1 STRH R0,[R4, #+4] 3847 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] 3848 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 3849 p->data[l1]=0; \ 000000B8 040089E0 ADD R0,R9,R4 \ 000000BC 0850C0E5 STRB R5,[R0, #+8] 3850 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 3851 mfree(sk2); \ 000000D0 0700A0E1 MOV R0,R7 \ 000000D4 150000EF SWI +21 3852 SUBPROC((void *)SendAnswer,0,p); \ 000000D8 0420A0E1 MOV R2,R4 \ 000000DC 0010A0E3 MOV R1,#+0 \ 000000E0 0600A0E1 MOV R0,R6 \ 000000E4 710100EF SWI +369 3853 // mfree(s1); 3854 // mfree(s2); 3855 } \ 000000E8 F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??set_my_xstatus2_0: \ 000000EC ........ DC32 playing \ 000000F0 ........ DC32 teast2 3856 #endif \ In segment CODE, align 4, keep-with-next 3857 void to_develop(void) 3858 { 3859 if (silenthide) return; \ to_develop: \ 00000000 ........ LDR R0,??DataTable165 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 681290E5 LDR R1,[R0, #+616] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD18 POPNE {PC} 3860 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable158 ;; Canvas 3861 gipc.name_from=ipc_my_name; 3862 gipc.data=(void *)maincsm_id; 3863 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 00000018 743080E2 ADD R3,R0,#+116 \ 0000001C 4C2E81E2 ADD R2,R1,#+1216 \ 00000020 4A1E81E2 ADD R1,R1,#+1184 \ 00000024 781080E5 STR R1,[R0, #+120] \ 00000028 1C1290E5 LDR R1,[R0, #+540] \ 0000002C 742080E5 STR R2,[R0, #+116] \ 00000030 7C1080E5 STR R1,[R0, #+124] \ 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 3864 } \ 0000004C 0080BDE8 POP {PC} ;; return 3865 \ In segment CODE, align 4, keep-with-next 3866 void ReqAddMsgToChat(CLIST *t) 3867 { \ ReqAddMsgToChat: \ 00000000 70402DE9 PUSH {R4-R6,LR} 3868 if (edchat_id) \ 00000004 ........ LDR R5,??DataTable165 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C AC0295E5 LDR R0,[R5, #+684] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 7080BD08 POPEQ {R4-R6,PC} 3869 { 3870 void *data=FindGUIbyId(edchat_id,NULL); \ 00000018 AC0295E5 LDR R0,[R5, #+684] \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 090200EF SWI +521 \ 00000024 0060A0E1 MOV R6,R0 3871 { 3872 EDCHAT_STRUCT *ed_struct; 3873 ed_struct=EDIT_GetUserPointer(data); \ 00000028 DF0100EF SWI +479 3874 if (ed_struct) \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 7080BD08 POPEQ {R4-R6,PC} 3875 { 3876 if (ed_struct->ed_contact==t) \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 040050E1 CMP R0,R4 \ 0000003C 7080BD18 POPNE {R4-R6,PC} 3877 { 3878 if (EDIT_IsBusy(data)) \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 1C0200EF SWI +540 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0400000A BEQ ??ReqAddMsgToChat_0 3879 { 3880 t->req_add=1; \ 00000050 0100A0E3 MOV R0,#+1 \ 00000054 880084E5 STR R0,[R4, #+136] 3881 #ifdef EVILFOX 3882 time_to_stop_t9=2; 3883 #else 3884 time_to_stop_t9=3; \ 00000058 0300A0E3 MOV R0,#+3 \ 0000005C 300385E5 STR R0,[R5, #+816] \ 00000060 7080BDE8 POP {R4-R6,PC} 3885 #endif 3886 } 3887 else 3888 { 3889 AddMsgToChat(data); \ ??ReqAddMsgToChat_0: \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 ........ BL AddMsgToChat 3890 DirectRedrawGUI_ID(edchat_id); \ 0000006C AC0295E5 LDR R0,[R5, #+684] \ 00000070 400100EF SWI +320 3891 } 3892 } 3893 } 3894 } 3895 } 3896 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 3897 3898 GBSTMR develop; 3899 \ In segment CODE, align 4, keep-with-next 3900 void begin_to_develop() 3901 { \ begin_to_develop: \ 00000000 00402DE9 PUSH {LR} 3902 if(IsUnlocked()) \ 00000004 430000EF SWI +67 \ 00000008 000050E3 CMP R0,#+0 \ 0000000C 0100000A BEQ ??begin_to_develop_0 3903 to_develop(); \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ B to_develop ;; tailcall 3904 else 3905 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 + 7432 \ 00000020 6410A0E3 MOV R1,#+100 \ 00000024 4D0000EF SWI +77 3906 } \ 00000028 0080BDE8 POP {PC} ;; return \ ??begin_to_develop_1: \ 0000002C ........ DC32 begin_to_develop \ 00000030 ........ DC32 S_ICONS + 7432 3907 3908 3909 3910 //----------------------------- LOAD COMMANDS -----------------------------// 3911 //Templates 3912 char *cmd_chars; //Собственно файл 3913 char **cmd_lines; //Массив указателей на строки 3914 \ In segment CODE, align 4, keep-with-next 3915 void cmdFree(void) 3916 { \ cmdFree: \ 00000000 10402DE9 PUSH {R4,LR} 3917 if (cmd_lines) mfree(cmd_lines); \ 00000004 ........ LDR R4,??DataTable162 ;; cmd_chars \ 00000008 040094E5 LDR R0,[R4, #+4] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0000000A BEQ ??cmdFree_0 \ 00000014 150000EF SWI +21 3918 if (cmd_chars) mfree(cmd_chars); \ ??cmdFree_0: \ 00000018 000094E5 LDR R0,[R4, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0100000A BEQ ??cmdFree_1 \ 00000024 150000EF SWI +21 3919 cmd_lines=NULL; \ 00000028 0000A0E3 MOV R0,#+0 \ ??cmdFree_1: \ 0000002C 040084E5 STR R0,[R4, #+4] 3920 cmd_chars=NULL; \ 00000030 000084E5 STR R0,[R4, #+0] 3921 } \ 00000034 1080BDE8 POP {R4,PC} ;; return 3922 \ In segment CODE, align 4, keep-with-next 3923 int LoadCmd() 3924 { \ LoadCmd: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 4BDF4DE2 SUB SP,SP,#+300 3925 FSTATS stat; 3926 char fn[256]; 3927 int f; 3928 unsigned int ul; 3929 int i; 3930 int fsize; 3931 char *p; 3932 char *pp; 3933 int c; 3934 cmdFree(); \ 00000008 ........ BL cmdFree 3935 strcpy(fn,TEMPLATES_PATH); \ 0000000C ........ LDR R1,??DataTable161 ;; TEMPLATES_PATH \ 00000010 04008DE2 ADD R0,SP,#+4 \ 00000014 1A0000EF SWI +26 3936 i=strlen(fn); \ 00000018 04008DE2 ADD R0,SP,#+4 \ 0000001C 1B0000EF SWI +27 3937 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 3938 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 3939 fsize=stat.size; \ 00000044 08719DE5 LDR R7,[SP, #+264] 3940 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 3941 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 3942 p=cmd_chars=malloc(fsize+1); \ ??LoadCmd_1: \ 00000074 ........ LDR R4,??DataTable162 ;; cmd_chars \ 00000078 010087E2 ADD R0,R7,#+1 \ 0000007C 140000EF SWI +20 \ 00000080 000084E5 STR R0,[R4, #+0] \ 00000084 0060A0E1 MOV R6,R0 3943 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] 3944 fclose(f,&ul); \ 000000A4 0D10A0E1 MOV R1,SP \ 000000A8 0800A0E1 MOV R0,R8 \ 000000AC 0D0000EF SWI +13 3945 i=0; \ 000000B0 0070A0E3 MOV R7,#+0 3946 pp=p; \ 000000B4 0680A0E1 MOV R8,R6 \ 000000B8 020000EA B ??LoadCmd_3 3947 for(;;) 3948 { 3949 c=*p; 3950 if (c<32) 3951 { 3952 if (pp&&(pp!=p)) 3953 { 3954 cmd_lines=realloc(cmd_lines,(i+1)*sizeof(char *)); 3955 cmd_lines[i++]=pp; 3956 } 3957 pp=NULL; 3958 if (!c) break; 3959 *p=0; 3960 } 3961 else 3962 { 3963 if (pp==NULL) pp=p; \ ??LoadCmd_4: \ 000000BC 000058E3 CMP R8,#+0 \ 000000C0 0680A001 MOVEQ R8,R6 3964 } 3965 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 040094E5 LDR R0,[R4, #+4] \ 000000E4 01A087E2 ADD R10,R7,#+1 \ 000000E8 0A11A0E1 LSL R1,R10,#+2 \ 000000EC BA0000EF SWI +186 \ 000000F0 040084E5 STR R0,[R4, #+4] \ 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 3966 } 3967 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 `?` 3968 } 3969 3970 int NumOfItems=0; 3971 HEADER_DESC CmdMenuHeader={NULL,NULL,NULL,NULL,NULL,NULL,LGP_NULL}; 3972 \ In segment CODE, align 4, keep-with-next 3973 void CmdMenuItemHandler(void *data, int curitem, void *unk) 3974 { \ CmdMenuItemHandler: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 3975 void *item=AllocMenuItem(data); \ 0000000C 970100EF SWI +407 \ 00000010 0060A0E1 MOV R6,R0 3976 char *p=cmd_lines[curitem]; \ 00000014 ........ LDR R0,??DataTable164 ;; cmd_chars + 4 \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 057190E7 LDR R7,[R0, +R5, LSL #+2] 3977 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 3978 ascii2ws(ws,p); \ 00000038 0710A0E1 MOV R1,R7 \ 0000003C ........ _BLF ascii2ws,??ascii2ws??rA 3979 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 3980 } \ 00000054 F081BDE8 POP {R4-R8,PC} ;; return 3981 \ In segment CODE, align 4, keep-with-next 3982 void CmdMenuGHook(void *data, int cmd) 3983 { \ CmdMenuGHook: \ 00000000 00402DE9 PUSH {LR} 3984 if (cmd==TI_CMD_FOCUS) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0100001A BNE ??CmdMenuGHook_0 3985 { 3986 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 \ 00000010 0080BDE8 POP {PC} 3987 } 3988 if (cmd==TI_CMD_DESTROY) \ ??CmdMenuGHook_0: \ 00000014 030051E3 CMP R1,#+3 \ 00000018 0080BD18 POPNE {PC} 3989 { 3990 cmdFree(); \ 0000001C 0040BDE8 POP {LR} ;; Pop \ 00000020 ........ B cmdFree ;; tailcall 3991 } 3992 } 3993 \ In segment CODE, align 4, keep-with-next 3994 static int CmdMenuKeyHook(void *data, GUI_MSG *msg) 3995 { \ CmdMenuKeyHook: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0160A0E1 MOV R6,R1 3996 int Selected=GetCurMenuItem(data); \ 0000000C 8F0100EF SWI +399 \ 00000010 0050A0E1 MOV R5,R0 3997 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000014 0400A0E1 MOV R0,R4 \ 00000018 E00100EF SWI +480 \ 0000001C 0040A0E1 MOV R4,R0 3998 if ((msg->keys==0x18)||(msg->keys==0x3D)) \ 00000020 F200D6E1 LDRSH R0,[R6, #+2] \ 00000024 180050E3 CMP R0,#+24 \ 00000028 3D005013 CMPNE R0,#+61 \ 0000002C 1800001A BNE ??CmdMenuKeyHook_0 3999 { 4000 if (NumOfItems) \ 00000030 64009FE5 LDR R0,??CmdMenuKeyHook_1 ;; CmdMenuHeader + 20 \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 7080BD08 POPEQ {R4-R6,PC} 4001 { 4002 const char *p=cmd_lines[Selected]; \ 00000040 ........ LDR R0,??DataTable164 ;; cmd_chars + 4 \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 055190E7 LDR R5,[R0, +R5, LSL #+2] 4003 WSHDR *ws; 4004 ws=AllocWS(256); \ 0000004C 400FA0E3 MOV R0,#+256 \ 00000050 250100EF SWI +293 \ 00000054 0060A0E1 MOV R6,R0 4005 wsprintf(ws,p); \ 00000058 0510A0E1 MOV R1,R5 \ 0000005C 240100EF SWI +292 4006 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ws); \ 00000060 040094E5 LDR R0,[R4, #+4] \ 00000064 081094E5 LDR R1,[R4, #+8] \ 00000068 0620A0E1 MOV R2,R6 \ 0000006C DE0100EF SWI +478 4007 EDIT_SetCursorPos(ed_struct->ed_chatgui,wstrlen(ws)+1); \ 00000070 0600A0E1 MOV R0,R6 \ 00000074 230100EF SWI +291 \ 00000078 011080E2 ADD R1,R0,#+1 \ 0000007C 040094E5 LDR R0,[R4, #+4] \ 00000080 D40100EF SWI +468 4008 4009 FreeWS(ws); \ 00000084 0600A0E1 MOV R0,R6 \ 00000088 290100EF SWI +297 4010 return(1); \ 0000008C 0100A0E3 MOV R0,#+1 \ 00000090 7080BDE8 POP {R4-R6,PC} 4011 } 4012 } 4013 return(0); \ ??CmdMenuKeyHook_0: \ 00000094 0000A0E3 MOV R0,#+0 \ 00000098 7080BDE8 POP {R4-R6,PC} ;; return \ ??CmdMenuKeyHook_1: \ 0000009C ........ DC32 CmdMenuHeader + 20 4014 } 4015 4016 const int CmdSoftkeys[]={0,1,2}; 4017 4018 const SOFTKEY_DESC cmd_sk[]= 4019 { 4020 {0x0004,0x0000,(int)""}, 4021 {0x0001,0x0000,(int)LG_CLOSE}, 4022 {0x003D,0x0000,(int)LGP_DOIT_PIC} 4023 }; 4024 const SOFTKEYSTAB cmd_Back_skt= 4025 { 4026 cmd_sk,0 4027 }; 4028 static const MENU_DESC CmdMenuStruct= 4029 { 4030 8,CmdMenuKeyHook,CmdMenuGHook,NULL, 4031 CmdSoftkeys, 4032 &cmd_Back_skt, 4033 0x10, 4034 CmdMenuItemHandler, 4035 NULL, //menuitems, 4036 NULL, //menuprocs, 4037 NULL 4038 }; 4039 \ In segment CODE, align 4, keep-with-next 4040 int DispCmdMenu(void *ed_gui) 4041 { \ DispCmdMenu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 4042 NumOfItems=LoadCmd(); \ 00000004 68509FE5 LDR R5,??DispCmdMenu_0 ;; CmdMenuHeader 4043 if(NumOfItems) \ 00000008 68609FE5 LDR R6,??DispCmdMenu_0+0x4 ;; `?` \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ BL LoadCmd \ 00000014 140085E5 STR R0,[R5, #+20] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 0F00000A BEQ ??DispCmdMenu_1 4044 { 4045 *((int *)(&CmdMenuHeader.lgp_id))=(int)"Select command"; \ 00000020 0C6085E5 STR R6,[R5, #+12] 4046 patch_header(&CmdMenuHeader); \ 00000024 0500A0E1 MOV R0,R5 \ 00000028 ........ _BLF patch_header,??patch_header??rA 4047 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 140095E5 LDR R0,[R5, #+20] \ 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} 4048 } 4049 MsgBoxError(1, (int)"FILE NOT FOUND!"); \ ??DispCmdMenu_1: \ 00000060 101086E2 ADD R1,R6,#+16 \ 00000064 0100A0E3 MOV R0,#+1 \ 00000068 4E0000EF SWI +78 4050 return(0); \ 0000006C 0000A0E3 MOV R0,#+0 \ 00000070 7080BDE8 POP {R4-R6,PC} ;; return \ ??DispCmdMenu_0: \ 00000074 ........ DC32 CmdMenuHeader \ 00000078 ........ DC32 `?` 4051 } 4052 /* 4053 char *GetStatusByIconIndex(int icon) 4054 { 4055 char *stat=malloc(32); 4056 switch(icon) 4057 { 4058 case IS_OFFLINE : sprintf(stat,"Offline"); break; 4059 case IS_INVISIBLE : sprintf(stat,"Invisable"); break; 4060 case IS_AWAY : sprintf(stat,"Away"); break; 4061 case IS_NA : sprintf(stat,"N/A"); break; 4062 case IS_OCCUPIED: sprintf(stat,"Occupied"); break; 4063 case IS_DND : sprintf(stat,"DND"); break; 4064 case IS_DEPRESSION : sprintf(stat,"Depression"); break; 4065 case IS_EVIL : sprintf(stat,"Evil"); break; 4066 case IS_HOME : sprintf(stat,"Home"); break; 4067 case IS_LUNCH : sprintf(stat,"Lunch"); break; 4068 case IS_WORK : sprintf(stat,"Work"); break; 4069 case IS_ONLINE : sprintf(stat,"Online"); break; 4070 case IS_FFC : sprintf(stat,"FFC"); break; 4071 default : sprintf(stat,"Error status"); break; 4072 } 4073 return stat; 4074 } 4075 */ 4076 \ In segment CODE, align 4, keep-with-next 4077 char *GetStatusByIconIndex(int icon) 4078 { \ GetStatusByIconIndex: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 4079 char *stat=malloc(32); \ 00000008 2000A0E3 MOV R0,#+32 \ 0000000C 140000EF SWI +20 4080 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 4081 { 4082 case IS_OFFLINE : sprintf(stat,"Отключен"); break; 4083 case IS_INVISIBLE : sprintf(stat,"Невидимый"); break; \ ??GetStatusByIconIndex_3: \ 0000003C 0C1081E2 ADD R1,R1,#+12 \ 00000040 140000EA B ??GetStatusByIconIndex_4 4084 case IS_AWAY : sprintf(stat,"Отсутсвует"); break; \ ??GetStatusByIconIndex_5: \ 00000044 181081E2 ADD R1,R1,#+24 \ 00000048 120000EA B ??GetStatusByIconIndex_4 4085 case IS_NA : sprintf(stat,"Не доступен"); break; \ ??GetStatusByIconIndex_6: \ 0000004C 241081E2 ADD R1,R1,#+36 \ 00000050 100000EA B ??GetStatusByIconIndex_4 4086 case IS_OCCUPIED: sprintf(stat,"Занят"); break; \ ??GetStatusByIconIndex_7: \ 00000054 301081E2 ADD R1,R1,#+48 \ 00000058 0E0000EA B ??GetStatusByIconIndex_4 4087 case IS_DND : sprintf(stat,"Не беспокоить");break; \ ??GetStatusByIconIndex_8: \ 0000005C 381081E2 ADD R1,R1,#+56 \ 00000060 0C0000EA B ??GetStatusByIconIndex_4 4088 case IS_DEPRESSION : sprintf(stat,"Депрессия"); break; \ ??GetStatusByIconIndex_9: \ 00000064 481081E2 ADD R1,R1,#+72 \ 00000068 0A0000EA B ??GetStatusByIconIndex_4 4089 case IS_EVIL : sprintf(stat,"Злой"); break; \ ??GetStatusByIconIndex_10: \ 0000006C 541081E2 ADD R1,R1,#+84 \ 00000070 080000EA B ??GetStatusByIconIndex_4 4090 case IS_HOME : sprintf(stat,"Дома"); break; \ ??GetStatusByIconIndex_11: \ 00000074 5C1081E2 ADD R1,R1,#+92 \ 00000078 060000EA B ??GetStatusByIconIndex_4 4091 case IS_LUNCH : sprintf(stat,"Жру"); break; \ ??GetStatusByIconIndex_12: \ 0000007C 091F8FE2 ADR R1,??GetStatusByIconIndex_1 ;; "Жру" \ 00000080 040000EA B ??GetStatusByIconIndex_4 4092 case IS_WORK : sprintf(stat,"Работа"); break; \ ??GetStatusByIconIndex_13: \ 00000084 641081E2 ADD R1,R1,#+100 \ 00000088 020000EA B ??GetStatusByIconIndex_4 4093 case IS_ONLINE : sprintf(stat,"В сети"); break; \ ??GetStatusByIconIndex_2: \ 0000008C 6C1081E2 ADD R1,R1,#+108 \ 00000090 000000EA B ??GetStatusByIconIndex_4 4094 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 4095 default : sprintf(stat,"В сети"); break; 4096 } 4097 return stat; \ 000000A0 0500A0E1 MOV R0,R5 \ 000000A4 3080BDE8 POP {R4,R5,PC} ;; return \ ??GetStatusByIconIndex_1: \ 000000A8 C6F0F300 DC8 "Жру" \ 000000AC ........ DC32 `?` 4098 } 4099 //----------------------------- CHECK COMMANDS -----------------------------// 4100 4101 4102 int comanda; 4103 4104 char requests1[]="Sending online time..."; 4105 char requests2[]="Sending msg info..."; 4106 char requests3[]="Sending battery info..."; 4107 char requests4[]="Sending mod info..."; 4108 char requests6[]="Sending offline info..."; 4109 char mod_info[264]; 4110 #ifdef NEWSGOLD 4111 #ifdef ELKA 4112 #ifdef ole64//kluchnik 4113 #define PLATFORM "Plяtform from ОлежкО" 4114 #else 4115 #define PLATFORM "Platform: ЁLKA" 4116 #endif 4117 #else 4118 #define PLATFORM "Platform: NEWЫGOLD" 4119 #endif 4120 #else 4121 #define PLATFORM "Platform: ЫGOLD" 4122 #endif 4123 4124 #define ENA_SIGNAL 1 //для команд, активировать сигналы,али нет 4125 #define DIS_SIGNAL 0 4126 4127 4128 \ In segment CODE, align 4, keep-with-next 4129 void SendData(CLIST *t,char *s,int signal,int count) 4130 { \ SendData: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0140A0E1 MOV R4,R1 \ 00000008 0050A0E1 MOV R5,R0 4131 comanda=0; \ 0000000C ........ LDR R0,??DataTable165 ;; S_ICONS \ 00000010 0010A0E3 MOV R1,#+0 \ 00000014 341380E5 STR R1,[R0, #+820] 4132 t->signals=signal; \ 00000018 702085E5 STR R2,[R5, #+112] 4133 TPKT *p; 4134 SENDMSGCOUNT+=count; \ 0000001C 241290E5 LDR R1,[R0, #+548] \ 00000020 011083E0 ADD R1,R3,R1 \ 00000024 241280E5 STR R1,[R0, #+548] 4135 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 4136 p->pkt.uin=t->uin; \ 0000003C 0C0095E5 LDR R0,[R5, #+12] \ 00000040 000086E5 STR R0,[R6, #+0] 4137 p->pkt.type=T_SENDMSG; \ 00000044 0200A0E3 MOV R0,#+2 \ 00000048 B400C6E1 STRH R0,[R6, #+4] 4138 p->pkt.data_len=strlen(s); \ 0000004C 0400A0E1 MOV R0,R4 \ 00000050 1B0000EF SWI +27 \ 00000054 B600C6E1 STRH R0,[R6, #+6] 4139 strcpy(p->data,s); \ 00000058 0410A0E1 MOV R1,R4 \ 0000005C 080086E2 ADD R0,R6,#+8 \ 00000060 1A0000EF SWI +26 4140 SUBPROC((void *)SendAnswer,0,p); \ 00000064 ........ LDR R0,??DataTable166 ;; SendAnswer \ 00000068 0620A0E1 MOV R2,R6 \ 0000006C 0010A0E3 MOV R1,#+0 \ 00000070 710100EF SWI +369 4141 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 4142 4143 unsigned int *errornumber; 4144 \ In segment CODE, align 4, keep-with-next 4145 void CheckComand(char *txt, CLIST *t) 4146 { \ CheckComand: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 4147 comanda=1; \ 00000004 ........ LDR R5,??DataTable186 ;; S_ICONS 4148 #ifdef ole64 4149 sprintf(mod_info,"mod by Evilfox,kluchnik,windes based on revision 2058 from ОлежкО64, mod date: %s at %s ",__DATE__,__TIME__); 4150 #else 4151 sprintf(mod_info,"mod by Evilfox,kluchnik,windes based on revision 2058, mod date: %s at %s ",__DATE__,__TIME__); \ 00000008 F46A9FE5 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 340385E5 STR R0,[R5, #+820] 4152 #endif 4153 // sprintf(mod_info,"mod by %s based on revision 2058, mod date: Apr 21 2008 ",devel); 4154 t->signals=1; 4155 if(!strcmp(txt, "__TEXTINFO") || !strcmp(txt, "__TI")) \ 00000020 ........ LDR R7,??DataTable168 ;; I_str \ 00000024 DC8A9FE5 LDR R8,??CheckComand_0+0x4 ;; show_send_info \ 00000028 1810A0E3 MOV R1,#+24 \ 0000002C 741D81E3 ORR R1,R1,#0x1D00 \ 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 0C10A0E3 MOV R1,#+12 \ 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 8600001A BNE ??CheckComand_2 4156 { 4157 char *s=malloc(16384); \ ??CheckComand_1: \ 00000090 400CA0E3 MOV R0,#+16384 \ 00000094 140000EF SWI +20 \ 00000098 00A0A0E1 MOV R10,R0 4158 char pl[256]; 4159 *s=0; \ 0000009C 0090CAE5 STRB R9,[R10, #+0] 4160 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 4161 strcat(s,pl); \ 000000D0 30108DE2 ADD R1,SP,#+48 \ 000000D4 0A00A0E1 MOV R0,R10 \ 000000D8 170000EF SWI +23 4162 char online[256]; 4163 sprintf(online,"Время в онлайн: %02d:%02d:%02d \r\n" 4164 "Сервер: %s \r\n%s \r\n", uptimeHour, uptimeMin, uptimeSec, hostbuf2,PINGO); \ 000000DC 7400A0E3 MOV R0,#+116 \ 000000E0 540D80E3 ORR R0,R0,#0x1500 \ 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 5C0295E5 LDR R0,[R5, #+604] \ 000000FC 01002DE9 PUSH {R0} \ 00000100 583295E5 LDR R3,[R5, #+600] \ 00000104 542295E5 LDR R2,[R5, #+596] \ 00000108 4F0F8DE2 ADD R0,SP,#+316 \ 0000010C 160000EF SWI +22 4165 strcat(s,online); \ 00000110 4F1F8DE2 ADD R1,SP,#+316 \ 00000114 0A00A0E1 MOV R0,R10 \ 00000118 170000EF SWI +23 4166 char *send_txt=malloc(64); \ 0000011C 4000A0E3 MOV R0,#+64 \ 00000120 140000EF SWI +20 \ 00000124 00B0A0E1 MOV R11,R0 4167 sprintf(send_txt, "Отправлено сообщений: %d \r\n" 4168 "Принято сообщений: %d \r\n", main2_count, main_count); \ 00000128 ........ LDR R0,??DataTable173 ;; main_count \ 0000012C C41086E2 ADD R1,R6,#+196 \ 00000130 003090E5 LDR R3,[R0, #+0] \ 00000134 ........ LDR R0,??DataTable174 ;; main2_count \ 00000138 002090E5 LDR R2,[R0, #+0] \ 0000013C 0B00A0E1 MOV R0,R11 \ 00000140 160000EF SWI +22 4169 strcat(s,send_txt); \ 00000144 0B10A0E1 MOV R1,R11 \ 00000148 0A00A0E1 MOV R0,R10 \ 0000014C 170000EF SWI +23 4170 4171 WSHDR *ws=AllocWS(64); \ 00000150 4000A0E3 MOV R0,#+64 \ 00000154 250100EF SWI +293 \ 00000158 14008DE5 STR R0,[SP, #+20] 4172 GetProvider(ws,0); \ 0000015C 0010A0E3 MOV R1,#+0 \ 00000160 410000EF SWI +65 4173 char prov[16]; 4174 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 4175 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 4176 FreeWS(ws); \ 0000018C 14009DE5 LDR R0,[SP, #+20] \ 00000190 290100EF SWI +297 4177 strcat(s,send_txt); \ 00000194 0B10A0E1 MOV R1,R11 \ 00000198 0A00A0E1 MOV R0,R10 \ 0000019C 170000EF SWI +23 4178 4179 int bat; 4180 bat=*RamCap(); \ 000001A0 C88000EF SWI +32968 \ 000001A4 B020D0E1 LDRH R2,[R0, #+0] 4181 sprintf(send_txt, "Заряд батареи: %d процентов \r\n", bat); \ 000001A8 421F86E2 ADD R1,R6,#+264 \ 000001AC 0B00A0E1 MOV R0,R11 \ 000001B0 160000EF SWI +22 4182 strcat(s,send_txt); \ 000001B4 0B10A0E1 MOV R1,R11 \ 000001B8 0A00A0E1 MOV R0,R10 \ 000001BC 170000EF SWI +23 4183 4184 char *status=malloc(256); \ 000001C0 400FA0E3 MOV R0,#+256 \ 000001C4 140000EF SWI +20 \ 000001C8 14008DE5 STR R0,[SP, #+20] 4185 TTime the; 4186 GetDateTime(NULL,&the); \ 000001CC 1C108DE2 ADD R1,SP,#+28 \ 000001D0 0900A0E1 MOV R0,R9 \ 000001D4 B40000EF SWI +180 4187 void Get_Online_total(); 4188 Get_Online_total(); \ 000001D8 ........ BL Get_Online_total 4189 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l \ 000001DC 942295E5 LDR R2,[R5, #+660] \ 000001E0 983295E5 LDR R3,[R5, #+664] 4190 sprintf(status, "Traffic: Rx : %db Tx : %db Queue: %db \r\nTime: %02d:%02d\r\n" 4191 "Online contact: %d [total: %d] \r\nUnread message: %d/%d ", 4192 RX,TX,sendq_l, 4193 the.hour, the.min, 4194 kopa_kontaktu, kopa_online, 4195 total_unread,total_unread2); \ 000001E4 180295E5 LDR R0,[R5, #+536] \ 000001E8 4A1F86E2 ADD R1,R6,#+296 \ 000001EC 01002DE9 PUSH {R0} \ 000001F0 9C0295E5 LDR R0,[R5, #+668] \ 000001F4 01002DE9 PUSH {R0} \ 000001F8 B80295E5 LDR R0,[R5, #+696] \ 000001FC 01002DE9 PUSH {R0} \ 00000200 BC0295E5 LDR R0,[R5, #+700] \ 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 ........ LDR R0,??DataTable171 ;; MAINCSM + 96 \ 0000021C 000090E5 LDR R0,[R0, #+0] \ 00000220 01002DE9 PUSH {R0} \ 00000224 30009DE5 LDR R0,[SP, #+48] \ 00000228 160000EF SWI +22 \ 0000022C 30D08DE2 ADD SP,SP,#+48 4196 strcat(s,status); \ 00000230 00109DE5 LDR R1,[SP, #+0] \ 00000234 0A00A0E1 MOV R0,R10 \ 00000238 170000EF SWI +23 4197 comanda=0; 4198 if(show_send_info) \ 0000023C 000098E5 LDR R0,[R8, #+0] \ 00000240 349385E5 STR R9,[R5, #+820] \ 00000244 000050E3 CMP R0,#+0 \ 00000248 240295E5 LDR R0,[R5, #+548] \ 0000024C 010080E2 ADD R0,R0,#+1 \ 00000250 240285E5 STR R0,[R5, #+548] \ 00000254 0900000A BEQ ??CheckComand_3 4199 AddStringToLog(t,0x01,"Sending textinfo...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000258 0110A0E3 MOV R1,#+1 \ 0000025C 02002DE9 PUSH {R1} \ 00000260 8008A0E1 LSL R0,R0,#+17 \ 00000264 A008A0E1 LSR R0,R0,#+17 \ 00000268 01002DE9 PUSH {R0} \ 0000026C 0730A0E1 MOV R3,R7 \ 00000270 672F86E2 ADD R2,R6,#+412 \ 00000274 0400A0E1 MOV R0,R4 \ 00000278 ........ BL AddStringToLog \ 0000027C 08D08DE2 ADD SP,SP,#+8 4200 else 4201 SENDMSGCOUNT++; 4202 SendData(t,s,ENA_SIGNAL,0); \ ??CheckComand_3: \ 00000280 0030A0E3 MOV R3,#+0 \ 00000284 0120A0E3 MOV R2,#+1 \ 00000288 0A10A0E1 MOV R1,R10 \ 0000028C 0400A0E1 MOV R0,R4 \ 00000290 ........ BL SendData 4203 mfree(s); \ 00000294 0A00A0E1 MOV R0,R10 \ 00000298 150000EF SWI +21 4204 mfree(send_txt); \ 0000029C 0B00A0E1 MOV R0,R11 \ 000002A0 150000EF SWI +21 4205 mfree(status); \ 000002A4 00009DE5 LDR R0,[SP, #+0] \ 000002A8 630100EA B ??CheckComand_4 4206 return; 4207 } 4208 4209 if(!strcmp(txt, "__TIME") || !strcmp(txt, "__T") || !strcmp(txt, "GET_TIME")) \ ??CheckComand_2: \ 000002AC 791F86E2 ADD R1,R6,#+484 \ 000002B0 0B00A0E1 MOV R0,R11 \ 000002B4 190000EF SWI +25 \ 000002B8 000050E3 CMP R0,#+0 \ 000002BC 0900000A BEQ ??CheckComand_5 \ 000002C0 D81F8FE2 ADR R1,??CheckComand_6 ;; "__T" \ 000002C4 0B00A0E1 MOV R0,R11 \ 000002C8 190000EF SWI +25 \ 000002CC 000050E3 CMP R0,#+0 \ 000002D0 0400000A BEQ ??CheckComand_5 \ 000002D4 7B1F86E2 ADD R1,R6,#+492 \ 000002D8 0B00A0E1 MOV R0,R11 \ 000002DC 190000EF SWI +25 \ 000002E0 000050E3 CMP R0,#+0 \ 000002E4 2200001A BNE ??CheckComand_7 4210 { 4211 char *status=malloc(256); \ ??CheckComand_5: \ 000002E8 400FA0E3 MOV R0,#+256 \ 000002EC 140000EF SWI +20 \ 000002F0 00A0A0E1 MOV R10,R0 4212 TTime the; 4213 GetDateTime(NULL,&the); \ 000002F4 08108DE2 ADD R1,SP,#+8 \ 000002F8 0000A0E3 MOV R0,#+0 \ 000002FC B40000EF SWI +180 4214 sprintf(status, "Time: %02d:%02d",the.hour, the.min); \ 00000300 0930DDE5 LDRB R3,[SP, #+9] \ 00000304 0820DDE5 LDRB R2,[SP, #+8] \ 00000308 711F86E2 ADD R1,R6,#+452 \ 0000030C 0A00A0E1 MOV R0,R10 \ 00000310 160000EF SWI +22 4215 comanda=0; 4216 if(show_send_info) \ 00000314 000098E5 LDR R0,[R8, #+0] \ 00000318 349385E5 STR R9,[R5, #+820] \ 0000031C 000050E3 CMP R0,#+0 \ 00000320 240295E5 LDR R0,[R5, #+548] \ 00000324 010080E2 ADD R0,R0,#+1 \ 00000328 240285E5 STR R0,[R5, #+548] \ 0000032C 0900000A BEQ ??CheckComand_8 4217 AddStringToLog(t,0x01,"Sending time...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000330 0110A0E3 MOV R1,#+1 \ 00000334 02002DE9 PUSH {R1} \ 00000338 8008A0E1 LSL R0,R0,#+17 \ 0000033C A008A0E1 LSR R0,R0,#+17 \ 00000340 01002DE9 PUSH {R0} \ 00000344 0730A0E1 MOV R3,R7 \ 00000348 752F86E2 ADD R2,R6,#+468 \ 0000034C 0400A0E1 MOV R0,R4 \ 00000350 ........ BL AddStringToLog \ 00000354 08D08DE2 ADD SP,SP,#+8 4218 else 4219 SENDMSGCOUNT++; 4220 SendData(t,status,ENA_SIGNAL,0); \ ??CheckComand_8: \ 00000358 0030A0E3 MOV R3,#+0 \ 0000035C 0120A0E3 MOV R2,#+1 \ 00000360 0A10A0E1 MOV R1,R10 \ 00000364 0400A0E1 MOV R0,R4 \ 00000368 ........ BL SendData 4221 mfree(status); \ 0000036C 0A00A0E1 MOV R0,R10 \ 00000370 310100EA B ??CheckComand_4 4222 return; 4223 } 4224 4225 if(!strcmp(txt, "GET_PLATFORM_INFO") || !strcmp(txt, "__PLATFORM") || !strcmp(txt,"__HW")) \ ??CheckComand_7: \ 00000374 ........ LDR R10,??DataTable172 ;; SendAnswer \ 00000378 8A1F86E2 ADD R1,R6,#+552 \ 0000037C 0B00A0E1 MOV R0,R11 \ 00000380 190000EF SWI +25 \ 00000384 000050E3 CMP R0,#+0 \ 00000388 0900000A BEQ ??CheckComand_9 \ 0000038C 8F1F86E2 ADD R1,R6,#+572 \ 00000390 0B00A0E1 MOV R0,R11 \ 00000394 190000EF SWI +25 \ 00000398 000050E3 CMP R0,#+0 \ 0000039C 0400000A BEQ ??CheckComand_9 \ 000003A0 921F86E2 ADD R1,R6,#+584 \ 000003A4 0B00A0E1 MOV R0,R11 \ 000003A8 190000EF SWI +25 \ 000003AC 000050E3 CMP R0,#+0 \ 000003B0 3100001A BNE ??CheckComand_10 4226 { 4227 comanda=0; \ ??CheckComand_9: \ 000003B4 349385E5 STR R9,[R5, #+820] 4228 TPKT *p; 4229 char pl[256]; 4230 snprintf(pl,256,"%s model: %s sw: %s",PLATFORM,Get_Phone_Info(PI_MODEL),Get_Phone_Info(PI_SW_NUMBER)); \ 000003B8 0700A0E3 MOV R0,#+7 \ 000003BC D50100EF SWI +469 \ 000003C0 0090A0E1 MOV R9,R0 \ 000003C4 0900A0E3 MOV R0,#+9 \ 000003C8 D50100EF SWI +469 \ 000003CC 00022DE9 PUSH {R9} \ 000003D0 01002DE9 PUSH {R0} \ 000003D4 7C3086E2 ADD R3,R6,#+124 \ 000003D8 7E2F86E2 ADD R2,R6,#+504 \ 000003DC 401FA0E3 MOV R1,#+256 \ 000003E0 4C0F8DE2 ADD R0,SP,#+304 \ 000003E4 1B0100EF SWI +283 4231 p=malloc(sizeof(PKT)+strlen(pl)+1); \ 000003E8 4C0F8DE2 ADD R0,SP,#+304 \ 000003EC 1B0000EF SWI +27 \ 000003F0 090080E2 ADD R0,R0,#+9 \ 000003F4 140000EF SWI +20 \ 000003F8 0090A0E1 MOV R9,R0 4232 p->pkt.uin=t->uin; \ 000003FC 0C0094E5 LDR R0,[R4, #+12] \ 00000400 000089E5 STR R0,[R9, #+0] 4233 p->pkt.type=T_SENDMSG; \ 00000404 0200A0E3 MOV R0,#+2 \ 00000408 B400C9E1 STRH R0,[R9, #+4] 4234 p->pkt.data_len=strlen(pl); \ 0000040C 4C0F8DE2 ADD R0,SP,#+304 \ 00000410 1B0000EF SWI +27 \ 00000414 B600C9E1 STRH R0,[R9, #+6] 4235 strcpy(p->data,pl); \ 00000418 4C1F8DE2 ADD R1,SP,#+304 \ 0000041C 080089E2 ADD R0,R9,#+8 \ 00000420 1A0000EF SWI +26 4236 if(show_send_info) \ 00000424 000098E5 LDR R0,[R8, #+0] \ 00000428 08D08DE2 ADD SP,SP,#+8 \ 0000042C 000050E3 CMP R0,#+0 \ 00000430 240295E5 LDR R0,[R5, #+548] \ 00000434 010080E2 ADD R0,R0,#+1 \ 00000438 240285E5 STR R0,[R5, #+548] \ 0000043C 0900000A BEQ ??CheckComand_11 4237 AddStringToLog(t,0x01,"Sending platform info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000440 0110A0E3 MOV R1,#+1 \ 00000444 02002DE9 PUSH {R1} \ 00000448 8008A0E1 LSL R0,R0,#+17 \ 0000044C A008A0E1 LSR R0,R0,#+17 \ 00000450 01002DE9 PUSH {R0} \ 00000454 0730A0E1 MOV R3,R7 \ 00000458 832F86E2 ADD R2,R6,#+524 \ 0000045C 0400A0E1 MOV R0,R4 \ 00000460 ........ BL AddStringToLog \ 00000464 08D08DE2 ADD SP,SP,#+8 4238 else 4239 SENDMSGCOUNT++; 4240 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_11: \ 00000468 0920A0E1 MOV R2,R9 \ ??CheckComand_12: \ 0000046C 0010A0E3 MOV R1,#+0 \ 00000470 0A00A0E1 MOV R0,R10 \ 00000474 710100EF SWI +369 4241 return; \ 00000478 F00000EA B ??CheckComand_13 4242 } 4243 4244 if(!strcmp(txt, "GET_ONLINE_TIME") || !strcmp(txt, "__ONLINE")) \ ??CheckComand_10: \ 0000047C 9F1F86E2 ADD R1,R6,#+636 \ 00000480 0B00A0E1 MOV R0,R11 \ 00000484 190000EF SWI +25 \ 00000488 000050E3 CMP R0,#+0 \ 0000048C 0400000A BEQ ??CheckComand_14 \ 00000490 A31F86E2 ADD R1,R6,#+652 \ 00000494 0B00A0E1 MOV R0,R11 \ 00000498 190000EF SWI +25 \ 0000049C 000050E3 CMP R0,#+0 \ 000004A0 2B00001A BNE ??CheckComand_15 4245 { 4246 comanda=0; \ ??CheckComand_14: \ 000004A4 349385E5 STR R9,[R5, #+820] 4247 TPKT *p; 4248 char online[256]; 4249 sprintf(online,"Время в онлайн: %02d:%02d:%02d \n" 4250 "Сервер: %s", uptimeHour, uptimeMin, uptimeSec, hostbuf2); \ 000004A8 14009DE5 LDR R0,[SP, #+20] \ 000004AC 941F86E2 ADD R1,R6,#+592 \ 000004B0 01002DE9 PUSH {R0} \ 000004B4 5C0295E5 LDR R0,[R5, #+604] \ 000004B8 01002DE9 PUSH {R0} \ 000004BC 583295E5 LDR R3,[R5, #+600] \ 000004C0 542295E5 LDR R2,[R5, #+596] \ 000004C4 4C0F8DE2 ADD R0,SP,#+304 \ 000004C8 160000EF SWI +22 4251 p=malloc(sizeof(PKT)+strlen(online)+1); \ 000004CC 4C0F8DE2 ADD R0,SP,#+304 \ 000004D0 1B0000EF SWI +27 \ 000004D4 090080E2 ADD R0,R0,#+9 \ 000004D8 140000EF SWI +20 \ 000004DC 0060A0E1 MOV R6,R0 4252 p->pkt.uin=t->uin; \ 000004E0 0C0094E5 LDR R0,[R4, #+12] \ 000004E4 000086E5 STR R0,[R6, #+0] 4253 p->pkt.type=T_SENDMSG; \ 000004E8 0200A0E3 MOV R0,#+2 \ 000004EC B400C6E1 STRH R0,[R6, #+4] 4254 p->pkt.data_len=strlen(online); \ 000004F0 4C0F8DE2 ADD R0,SP,#+304 \ 000004F4 1B0000EF SWI +27 \ 000004F8 B600C6E1 STRH R0,[R6, #+6] 4255 strcpy(p->data,online); \ 000004FC 4C1F8DE2 ADD R1,SP,#+304 \ 00000500 080086E2 ADD R0,R6,#+8 \ 00000504 1A0000EF SWI +26 4256 if(show_send_info) \ 00000508 000098E5 LDR R0,[R8, #+0] \ 0000050C 08D08DE2 ADD SP,SP,#+8 \ 00000510 000050E3 CMP R0,#+0 \ 00000514 240295E5 LDR R0,[R5, #+548] \ 00000518 010080E2 ADD R0,R0,#+1 \ 0000051C 240285E5 STR R0,[R5, #+548] \ 00000520 0900000A BEQ ??CheckComand_16 4257 AddStringToLog(t,0x01,requests1,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000524 0110A0E3 MOV R1,#+1 \ 00000528 02002DE9 PUSH {R1} \ 0000052C D8259FE5 LDR R2,??CheckComand_0+0x8 ;; MAINCSM + 144 \ 00000530 8008A0E1 LSL R0,R0,#+17 \ 00000534 A008A0E1 LSR R0,R0,#+17 \ 00000538 01002DE9 PUSH {R0} \ 0000053C 0730A0E1 MOV R3,R7 \ 00000540 0400A0E1 MOV R0,R4 \ 00000544 ........ BL AddStringToLog \ 00000548 08D08DE2 ADD SP,SP,#+8 4258 else 4259 SENDMSGCOUNT++; 4260 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_16: \ 0000054C 0620A0E1 MOV R2,R6 \ 00000550 C5FFFFEA B ??CheckComand_12 4261 return; 4262 } 4263 4264 if(!strcmp(txt, "GET_MSG_INFO") || !strcmp(txt, "__MSG")) \ ??CheckComand_15: \ 00000554 B21F86E2 ADD R1,R6,#+712 \ 00000558 0B00A0E1 MOV R0,R11 \ 0000055C 190000EF SWI +25 \ 00000560 000050E3 CMP R0,#+0 \ 00000564 0400000A BEQ ??CheckComand_17 \ 00000568 B61F86E2 ADD R1,R6,#+728 \ 0000056C 0B00A0E1 MOV R0,R11 \ 00000570 190000EF SWI +25 \ 00000574 000050E3 CMP R0,#+0 \ 00000578 2B00001A BNE ??CheckComand_18 4265 { 4266 comanda=0; \ ??CheckComand_17: \ 0000057C 349385E5 STR R9,[R5, #+820] 4267 TPKT *p; 4268 char *send_txt=malloc(64); \ 00000580 4000A0E3 MOV R0,#+64 \ 00000584 140000EF SWI +20 \ 00000588 0090A0E1 MOV R9,R0 4269 sprintf(send_txt, "Отправлено сообщений: %d \n" 4270 "Принято сообщений: %d" 4271 , main2_count, main_count); \ 0000058C ........ LDR R0,??DataTable173 ;; main_count \ 00000590 A61F86E2 ADD R1,R6,#+664 \ 00000594 003090E5 LDR R3,[R0, #+0] \ 00000598 ........ LDR R0,??DataTable174 ;; main2_count \ 0000059C 002090E5 LDR R2,[R0, #+0] \ 000005A0 0900A0E1 MOV R0,R9 \ 000005A4 160000EF SWI +22 4272 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000005A8 0900A0E1 MOV R0,R9 \ 000005AC 1B0000EF SWI +27 \ 000005B0 090080E2 ADD R0,R0,#+9 \ 000005B4 140000EF SWI +20 \ 000005B8 0060A0E1 MOV R6,R0 4273 p->pkt.uin=t->uin; \ 000005BC 0C0094E5 LDR R0,[R4, #+12] \ 000005C0 000086E5 STR R0,[R6, #+0] 4274 p->pkt.type=T_SENDMSG; \ 000005C4 0200A0E3 MOV R0,#+2 \ 000005C8 B400C6E1 STRH R0,[R6, #+4] 4275 p->pkt.data_len=strlen(send_txt); \ 000005CC 0900A0E1 MOV R0,R9 \ 000005D0 1B0000EF SWI +27 \ 000005D4 B600C6E1 STRH R0,[R6, #+6] 4276 strcpy(p->data,send_txt); \ 000005D8 0910A0E1 MOV R1,R9 \ 000005DC 080086E2 ADD R0,R6,#+8 \ 000005E0 1A0000EF SWI +26 4277 if(show_send_info) \ 000005E4 000098E5 LDR R0,[R8, #+0] \ 000005E8 000050E3 CMP R0,#+0 \ 000005EC 240295E5 LDR R0,[R5, #+548] \ 000005F0 010080E2 ADD R0,R0,#+1 \ 000005F4 240285E5 STR R0,[R5, #+548] \ 000005F8 8A00000A BEQ ??CheckComand_19 4278 AddStringToLog(t,0x01,requests2,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000005FC 0110A0E3 MOV R1,#+1 \ 00000600 02002DE9 PUSH {R1} \ 00000604 04259FE5 LDR R2,??CheckComand_0+0xC ;; MAINCSM + 168 \ 00000608 8008A0E1 LSL R0,R0,#+17 \ 0000060C A008A0E1 LSR R0,R0,#+17 \ 00000610 01002DE9 PUSH {R0} \ 00000614 0730A0E1 MOV R3,R7 \ 00000618 0400A0E1 MOV R0,R4 \ 0000061C ........ BL AddStringToLog \ 00000620 08D08DE2 ADD SP,SP,#+8 4279 else 4280 SENDMSGCOUNT++; 4281 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_20: \ 00000624 7F0000EA B ??CheckComand_19 \ ??CheckComand_6: \ 00000628 5F5F5400 DC8 "__T" 4282 mfree(send_txt); 4283 return; 4284 } 4285 4286 //==========================windes commands begin ===================== 4287 4288 if(!strcmp(txt, "GET_PROVIDER") || !strcmp(txt, "__PROVIDER")) \ ??CheckComand_18: \ 0000062C C31F86E2 ADD R1,R6,#+780 \ 00000630 0B00A0E1 MOV R0,R11 \ 00000634 190000EF SWI +25 \ 00000638 000050E3 CMP R0,#+0 \ 0000063C 0400000A BEQ ??CheckComand_21 \ 00000640 C71F86E2 ADD R1,R6,#+796 \ 00000644 0B00A0E1 MOV R0,R11 \ 00000648 190000EF SWI +25 \ 0000064C 000050E3 CMP R0,#+0 \ 00000650 3600001A BNE ??CheckComand_22 4289 { 4290 comanda=0; \ ??CheckComand_21: \ 00000654 349385E5 STR R9,[R5, #+820] 4291 TPKT *p; 4292 4293 WSHDR *ws=AllocWS(32); \ 00000658 2000A0E3 MOV R0,#+32 \ 0000065C 250100EF SWI +293 \ 00000660 0090A0E1 MOV R9,R0 4294 GetProvider(ws,0); \ 00000664 0010A0E3 MOV R1,#+0 \ 00000668 410000EF SWI +65 4295 char prov[16]; 4296 ws_2str(ws,prov,wstrlen(ws)); \ 0000066C 0900A0E1 MOV R0,R9 \ 00000670 230100EF SWI +291 \ 00000674 0020A0E1 MOV R2,R0 \ 00000678 18108DE2 ADD R1,SP,#+24 \ 0000067C 0900A0E1 MOV R0,R9 \ 00000680 A30000EF SWI +163 4297 char *send_txt=malloc(32); \ 00000684 2000A0E3 MOV R0,#+32 \ 00000688 140000EF SWI +20 \ 0000068C 00B0A0E1 MOV R11,R0 4298 sprintf(send_txt, "Оператор: %s", prov); \ 00000690 18208DE2 ADD R2,SP,#+24 \ 00000694 B81F86E2 ADD R1,R6,#+736 \ 00000698 160000EF SWI +22 4299 FreeWS(ws); \ 0000069C 0900A0E1 MOV R0,R9 \ 000006A0 290100EF SWI +297 4300 4301 p=malloc(sizeof(PKT)+28+1); \ 000006A4 2500A0E3 MOV R0,#+37 \ 000006A8 140000EF SWI +20 \ 000006AC 0090A0E1 MOV R9,R0 4302 p->pkt.uin=t->uin; \ 000006B0 0C0094E5 LDR R0,[R4, #+12] \ 000006B4 000089E5 STR R0,[R9, #+0] 4303 p->pkt.type=T_SENDMSG; \ 000006B8 0200A0E3 MOV R0,#+2 \ 000006BC B400C9E1 STRH R0,[R9, #+4] 4304 p->pkt.data_len=strlen(send_txt); \ 000006C0 0B00A0E1 MOV R0,R11 \ 000006C4 1B0000EF SWI +27 \ 000006C8 B600C9E1 STRH R0,[R9, #+6] 4305 strcpy(p->data,send_txt); \ 000006CC 0B10A0E1 MOV R1,R11 \ 000006D0 080089E2 ADD R0,R9,#+8 \ 000006D4 1A0000EF SWI +26 4306 if(show_send_info) \ 000006D8 000098E5 LDR R0,[R8, #+0] \ 000006DC 000050E3 CMP R0,#+0 \ 000006E0 240295E5 LDR R0,[R5, #+548] \ 000006E4 010080E2 ADD R0,R0,#+1 \ 000006E8 240285E5 STR R0,[R5, #+548] \ 000006EC 0900000A BEQ ??CheckComand_23 4307 AddStringToLog(t,0x01,"Sending provider name...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000006F0 0110A0E3 MOV R1,#+1 \ 000006F4 02002DE9 PUSH {R1} \ 000006F8 8008A0E1 LSL R0,R0,#+17 \ 000006FC A008A0E1 LSR R0,R0,#+17 \ 00000700 01002DE9 PUSH {R0} \ 00000704 0730A0E1 MOV R3,R7 \ 00000708 BC2F86E2 ADD R2,R6,#+752 \ 0000070C 0400A0E1 MOV R0,R4 \ 00000710 ........ BL AddStringToLog \ 00000714 08D08DE2 ADD SP,SP,#+8 4308 else 4309 SENDMSGCOUNT++; 4310 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_23: \ 00000718 0920A0E1 MOV R2,R9 \ 0000071C 0010A0E3 MOV R1,#+0 \ 00000720 0A00A0E1 MOV R0,R10 \ 00000724 710100EF SWI +369 4311 mfree(send_txt); \ 00000728 0B00A0E1 MOV R0,R11 \ 0000072C 420000EA B ??CheckComand_4 4312 return; 4313 } 4314 4315 4316 //----------------------------------------------------------------------- 4317 4318 4319 if(!strcmp(txt, "GET_MOD_INFO") || !strcmp(txt, "__MOD")) \ ??CheckComand_22: \ 00000730 CF1F86E2 ADD R1,R6,#+828 \ 00000734 0B00A0E1 MOV R0,R11 \ 00000738 190000EF SWI +25 \ 0000073C 000050E3 CMP R0,#+0 \ 00000740 0400000A BEQ ??CheckComand_24 \ 00000744 D31F86E2 ADD R1,R6,#+844 \ 00000748 0B00A0E1 MOV R0,R11 \ 0000074C 190000EF SWI +25 \ 00000750 000050E3 CMP R0,#+0 \ 00000754 3B00001A BNE ??CheckComand_25 4320 { 4321 comanda=0; \ ??CheckComand_24: \ 00000758 349385E5 STR R9,[R5, #+820] 4322 TPKT *p; 4323 char *send_txt=malloc(256); \ 0000075C 400FA0E3 MOV R0,#+256 \ 00000760 140000EF SWI +20 \ 00000764 0090A0E1 MOV R9,R0 4324 // sprintf(I_UIN, "uin%d", t->uin); 4325 strcpy(I_UIN, t->name); \ 00000768 0C00A0E3 MOV R0,#+12 \ 0000076C 700D80E3 ORR R0,R0,#0x1C00 \ 00000770 05B080E0 ADD R11,R0,R5 \ 00000774 141084E2 ADD R1,R4,#+20 \ 00000778 0B00A0E1 MOV R0,R11 \ 0000077C 1A0000EF SWI +26 4326 if(strstr(ignor_list,I_UIN)==0) \ 00000780 ........ LDR R0,??DataTable175 ;; ignor_list \ 00000784 0B10A0E1 MOV R1,R11 \ 00000788 180100EF SWI +280 \ 0000078C 000050E3 CMP R0,#+0 4327 { 4328 strcpy(send_txt, mod_info); \ 00000790 10109D05 LDREQ R1,[SP, #+16] 4329 } 4330 else 4331 strcpy(send_txt, "***Access denied***"); \ 00000794 0900A0E1 MOV R0,R9 \ 00000798 CA1F8612 ADDNE R1,R6,#+808 \ 0000079C 1A0000EF SWI +26 4332 4333 strcpy(send_txt, mod_info); \ 000007A0 10109DE5 LDR R1,[SP, #+16] \ 000007A4 0900A0E1 MOV R0,R9 \ 000007A8 1A0000EF SWI +26 4334 4335 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000007AC 0900A0E1 MOV R0,R9 \ 000007B0 1B0000EF SWI +27 \ 000007B4 090080E2 ADD R0,R0,#+9 \ 000007B8 140000EF SWI +20 \ 000007BC 0060A0E1 MOV R6,R0 4336 p->pkt.uin=t->uin; \ 000007C0 0C0094E5 LDR R0,[R4, #+12] \ 000007C4 000086E5 STR R0,[R6, #+0] 4337 p->pkt.type=T_SENDMSG; \ 000007C8 0200A0E3 MOV R0,#+2 \ 000007CC B400C6E1 STRH R0,[R6, #+4] 4338 p->pkt.data_len=strlen(send_txt); \ 000007D0 0900A0E1 MOV R0,R9 \ 000007D4 1B0000EF SWI +27 \ 000007D8 B600C6E1 STRH R0,[R6, #+6] 4339 strcpy(p->data,send_txt); \ 000007DC 0910A0E1 MOV R1,R9 \ 000007E0 080086E2 ADD R0,R6,#+8 \ 000007E4 1A0000EF SWI +26 4340 #ifdef EVILFOX 4341 SENDMSGCOUNT++; 4342 #else 4343 if(show_send_info) \ 000007E8 000098E5 LDR R0,[R8, #+0] \ 000007EC 000050E3 CMP R0,#+0 \ 000007F0 240295E5 LDR R0,[R5, #+548] \ 000007F4 010080E2 ADD R0,R0,#+1 \ 000007F8 240285E5 STR R0,[R5, #+548] \ 000007FC 0900000A BEQ ??CheckComand_19 4344 AddStringToLog(t,0x01,requests4,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000800 0110A0E3 MOV R1,#+1 \ 00000804 02002DE9 PUSH {R1} \ 00000808 04239FE5 LDR R2,??CheckComand_0+0x10 ;; MAINCSM + 212 \ 0000080C 8008A0E1 LSL R0,R0,#+17 \ 00000810 A008A0E1 LSR R0,R0,#+17 \ 00000814 01002DE9 PUSH {R0} \ 00000818 0730A0E1 MOV R3,R7 \ 0000081C 0400A0E1 MOV R0,R4 \ 00000820 ........ BL AddStringToLog \ 00000824 08D08DE2 ADD SP,SP,#+8 4345 else 4346 SENDMSGCOUNT++; 4347 #endif 4348 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_19: \ 00000828 0620A0E1 MOV R2,R6 \ ??CheckComand_26: \ 0000082C 0010A0E3 MOV R1,#+0 \ 00000830 0A00A0E1 MOV R0,R10 \ 00000834 710100EF SWI +369 4349 mfree(send_txt); \ 00000838 0900A0E1 MOV R0,R9 \ ??CheckComand_4: \ 0000083C 150000EF SWI +21 \ ??CheckComand_13: \ 00000840 8ADF8DE2 ADD SP,SP,#+552 \ 00000844 F08FBDE8 POP {R4-R11,PC} 4350 return; 4351 } 4352 4353 if(!strcmp(txt, "GET_BAT_INFO") || !strcmp(txt, "__BAT")) \ ??CheckComand_25: \ 00000848 DC1F86E2 ADD R1,R6,#+880 \ 0000084C 0B00A0E1 MOV R0,R11 \ 00000850 190000EF SWI +25 \ 00000854 000050E3 CMP R0,#+0 \ 00000858 0400000A BEQ ??CheckComand_27 \ 0000085C E01F86E2 ADD R1,R6,#+896 \ 00000860 0B00A0E1 MOV R0,R11 \ 00000864 190000EF SWI +25 \ 00000868 000050E3 CMP R0,#+0 \ 0000086C 2600001A BNE ??CheckComand_28 4354 { 4355 comanda=0; \ ??CheckComand_27: \ 00000870 349385E5 STR R9,[R5, #+820] 4356 TPKT *p; 4357 int bat; 4358 bat=*RamCap(); \ 00000874 C88000EF SWI +32968 \ 00000878 B0B0D0E1 LDRH R11,[R0, #+0] 4359 char *send_txt=malloc(64); \ 0000087C 4000A0E3 MOV R0,#+64 \ 00000880 140000EF SWI +20 \ 00000884 0090A0E1 MOV R9,R0 4360 sprintf(send_txt, "Заряд батареи: %d процентов", bat); \ 00000888 0B20A0E1 MOV R2,R11 \ 0000088C D51F86E2 ADD R1,R6,#+852 \ 00000890 160000EF SWI +22 4361 p=malloc(sizeof(PKT)+28+1); \ 00000894 2500A0E3 MOV R0,#+37 \ 00000898 140000EF SWI +20 \ 0000089C 0060A0E1 MOV R6,R0 4362 p->pkt.uin=t->uin; \ 000008A0 0C0094E5 LDR R0,[R4, #+12] \ 000008A4 000086E5 STR R0,[R6, #+0] 4363 p->pkt.type=T_SENDMSG; \ 000008A8 0200A0E3 MOV R0,#+2 \ 000008AC B400C6E1 STRH R0,[R6, #+4] 4364 p->pkt.data_len=strlen(send_txt); \ 000008B0 0900A0E1 MOV R0,R9 \ 000008B4 1B0000EF SWI +27 \ 000008B8 B600C6E1 STRH R0,[R6, #+6] 4365 strcpy(p->data,send_txt); \ 000008BC 0910A0E1 MOV R1,R9 \ 000008C0 080086E2 ADD R0,R6,#+8 \ 000008C4 1A0000EF SWI +26 4366 #ifdef EVILFOX 4367 SENDMSGCOUNT++; 4368 #else 4369 if(show_send_info) \ 000008C8 000098E5 LDR R0,[R8, #+0] \ 000008CC 000050E3 CMP R0,#+0 \ 000008D0 240295E5 LDR R0,[R5, #+548] \ 000008D4 010080E2 ADD R0,R0,#+1 \ 000008D8 240285E5 STR R0,[R5, #+548] \ 000008DC D1FFFF0A BEQ ??CheckComand_19 4370 AddStringToLog(t,0x01,requests3,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000008E0 0110A0E3 MOV R1,#+1 \ 000008E4 02002DE9 PUSH {R1} \ 000008E8 28229FE5 LDR R2,??CheckComand_0+0x14 ;; MAINCSM + 188 \ 000008EC 8008A0E1 LSL R0,R0,#+17 \ 000008F0 A008A0E1 LSR R0,R0,#+17 \ 000008F4 01002DE9 PUSH {R0} \ 000008F8 0730A0E1 MOV R3,R7 \ 000008FC 0400A0E1 MOV R0,R4 \ 00000900 ........ BL AddStringToLog \ 00000904 08D08DE2 ADD SP,SP,#+8 4371 else 4372 SENDMSGCOUNT++; 4373 #endif 4374 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_29: \ 00000908 C6FFFFEA B ??CheckComand_19 4375 mfree(send_txt); 4376 return; 4377 } 4378 4379 if((away_m==1 || t->isautomsg) && (t->automsgcount < automsgcount)) \ ??CheckComand_28: \ 0000090C 401295E5 LDR R1,[R5, #+576] \ 00000910 ........ LDR R2,??DataTable176 ;; automsgcount \ 00000914 640094E5 LDR R0,[R4, #+100] \ 00000918 002092E5 LDR R2,[R2, #+0] \ 0000091C 010051E3 CMP R1,#+1 \ 00000920 0100000A BEQ ??CheckComand_30 \ 00000924 000050E3 CMP R0,#+0 \ 00000928 3700000A BEQ ??CheckComand_31 \ ??CheckComand_30: \ 0000092C 783094E5 LDR R3,[R4, #+120] \ 00000930 020053E1 CMP R3,R2 \ 00000934 3200002A BCS ??CheckComand_32 4380 { 4381 t->automsgcount++; 4382 comanda=1; 4383 TPKT *p; 4384 // sprintf(hah,"online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); 4385 sprintf(away_msg, "Автоответчик: %s %s! %s %s", awayHelloMsg, t->name, awayMsg, away_msg_time); \ 00000938 DC219FE5 LDR R2,??CheckComand_0+0x18 ;; awayHelloMsg \ 0000093C 010083E2 ADD R0,R3,#+1 \ 00000940 780084E5 STR R0,[R4, #+120] \ 00000944 0100A0E3 MOV R0,#+1 \ 00000948 340385E5 STR R0,[R5, #+820] \ 0000094C 8400A0E3 MOV R0,#+132 \ 00000950 580D80E3 ORR R0,R0,#0x1600 \ 00000954 059080E0 ADD R9,R0,R5 \ 00000958 420F80E3 ORR R0,R0,#0x108 \ 0000095C 050080E0 ADD R0,R0,R5 \ 00000960 01002DE9 PUSH {R0} \ 00000964 ........ LDR R0,??DataTable177 ;; awayMsg \ 00000968 143084E2 ADD R3,R4,#+20 \ 0000096C 01002DE9 PUSH {R0} \ 00000970 401E86E2 ADD R1,R6,#+1024 \ 00000974 0900A0E1 MOV R0,R9 \ 00000978 160000EF SWI +22 4386 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 0000097C 0900A0E1 MOV R0,R9 \ 00000980 1B0000EF SWI +27 \ 00000984 090080E2 ADD R0,R0,#+9 \ 00000988 140000EF SWI +20 \ 0000098C 0060A0E1 MOV R6,R0 4387 p->pkt.uin=t->uin; \ 00000990 0C0094E5 LDR R0,[R4, #+12] \ 00000994 000086E5 STR R0,[R6, #+0] 4388 p->pkt.type=T_SENDMSG; \ 00000998 0200A0E3 MOV R0,#+2 \ 0000099C B400C6E1 STRH R0,[R6, #+4] 4389 p->pkt.data_len=strlen(away_msg); \ 000009A0 0900A0E1 MOV R0,R9 \ 000009A4 1B0000EF SWI +27 \ 000009A8 B600C6E1 STRH R0,[R6, #+6] 4390 strcpy(p->data,away_msg); \ 000009AC 0910A0E1 MOV R1,R9 \ 000009B0 080086E2 ADD R0,R6,#+8 \ 000009B4 1A0000EF SWI +26 4391 if(show_send_info) \ 000009B8 000098E5 LDR R0,[R8, #+0] \ 000009BC 08D08DE2 ADD SP,SP,#+8 \ 000009C0 000050E3 CMP R0,#+0 \ 000009C4 240295E5 LDR R0,[R5, #+548] \ 000009C8 010080E2 ADD R0,R0,#+1 \ 000009CC 240285E5 STR R0,[R5, #+548] \ 000009D0 0900000A BEQ ??CheckComand_33 4392 #ifdef kluchnik 4393 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF,1); 4394 #else 4395 AddStringToLog(t,0x01,requests6,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000009D4 0110A0E3 MOV R1,#+1 \ 000009D8 02002DE9 PUSH {R1} \ 000009DC 3C219FE5 LDR R2,??CheckComand_0+0x1C ;; MAINCSM + 232 \ 000009E0 8008A0E1 LSL R0,R0,#+17 \ 000009E4 A008A0E1 LSR R0,R0,#+17 \ 000009E8 01002DE9 PUSH {R0} \ 000009EC 0730A0E1 MOV R3,R7 \ 000009F0 0400A0E1 MOV R0,R4 \ 000009F4 ........ BL AddStringToLog \ 000009F8 08D08DE2 ADD SP,SP,#+8 4396 #endif 4397 else 4398 SENDMSGCOUNT++; 4399 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_33: \ 000009FC 0620A0E1 MOV R2,R6 \ 00000A00 99FEFFEA B ??CheckComand_12 4400 return; 4401 } 4402 #ifdef kluchnik 4403 else 4404 if((away_m==1 || t->isautomsg) && (t->uin==438532198)){ t->automsgcount=0;/* t->awaysignal=1;*/ return; } 4405 /* else 4406 if((away_m==1 || t->isautomsg) && (t->automsgcount<=(automsgcount+3)) ) 4407 { 4408 t->awaysignal=0; 4409 t->automsgcount++; 4410 sprintf(away_msg,"Бля,ну русским ж языком написали,НЕТУ МЕНЯ!!!че по сто сообщений слать?тем более если тебе делать нех..."); 4411 if(show_send_info) 4412 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF,1); 4413 else 4414 SENDMSGCOUNT++; 4415 SendData(t,away_msg,ENA_SIGNAL,0); 4416 return; 4417 }*/ 4418 #endif 4419 else 4420 if(away_m==1 || t->isautomsg) \ ??CheckComand_32: \ 00000A04 010051E3 CMP R1,#+1 \ 00000A08 0100000A BEQ ??CheckComand_34 \ ??CheckComand_31: \ 00000A0C 000050E3 CMP R0,#+0 \ 00000A10 0100000A BEQ ??CheckComand_35 4421 { 4422 t->automsgcount=automsgcount; \ ??CheckComand_34: \ 00000A14 782084E5 STR R2,[R4, #+120] 4423 return; \ 00000A18 88FFFFEA B ??CheckComand_13 4424 } 4425 4426 4427 //---------------------------------------------------------------------------// 4428 4429 4430 if(!strcmp(txt, "GET_URL_INFO") || !strcmp(txt, "__URL"))// by kluchnik 26.03.08 \ ??CheckComand_35: \ 00000A1C FA1F86E2 ADD R1,R6,#+1000 \ 00000A20 0B00A0E1 MOV R0,R11 \ 00000A24 190000EF SWI +25 \ 00000A28 000050E3 CMP R0,#+0 \ 00000A2C 0400000A BEQ ??CheckComand_36 \ 00000A30 FE1F86E2 ADD R1,R6,#+1016 \ 00000A34 0B00A0E1 MOV R0,R11 \ 00000A38 190000EF SWI +25 \ 00000A3C 000050E3 CMP R0,#+0 \ 00000A40 2A00001A BNE ??CheckComand_37 4431 { 4432 comanda=0; \ ??CheckComand_36: \ 00000A44 349385E5 STR R9,[R5, #+820] 4433 TPKT *p; 4434 4435 char *send_txt=malloc(256); \ 00000A48 400FA0E3 MOV R0,#+256 \ 00000A4C 140000EF SWI +20 \ 00000A50 0090A0E1 MOV R9,R0 4436 sprintf(send_txt,"revision 2058, mod date: %s at %s ", 4437 "http://kluchnik.jino-net.ru/naticqmod/",__DATE__,__TIME__); \ 00000A54 580086E2 ADD R0,R6,#+88 \ 00000A58 01002DE9 PUSH {R0} \ 00000A5C 4C3086E2 ADD R3,R6,#+76 \ 00000A60 EB2F86E2 ADD R2,R6,#+940 \ 00000A64 E21F86E2 ADD R1,R6,#+904 \ 00000A68 0900A0E1 MOV R0,R9 \ 00000A6C 160000EF SWI +22 4438 4439 p=malloc(sizeof(PKT)+256); \ 00000A70 420FA0E3 MOV R0,#+264 \ 00000A74 140000EF SWI +20 \ 00000A78 00B0A0E1 MOV R11,R0 4440 p->pkt.uin=t->uin; \ 00000A7C 0C0094E5 LDR R0,[R4, #+12] \ 00000A80 00008BE5 STR R0,[R11, #+0] 4441 p->pkt.type=T_SENDMSG; \ 00000A84 0200A0E3 MOV R0,#+2 \ 00000A88 B400CBE1 STRH R0,[R11, #+4] 4442 p->pkt.data_len=strlen(send_txt); \ 00000A8C 0900A0E1 MOV R0,R9 \ 00000A90 1B0000EF SWI +27 \ 00000A94 B600CBE1 STRH R0,[R11, #+6] 4443 strcpy(p->data,send_txt); \ 00000A98 0910A0E1 MOV R1,R9 \ 00000A9C 08008BE2 ADD R0,R11,#+8 \ 00000AA0 1A0000EF SWI +26 4444 if(show_send_info) \ 00000AA4 000098E5 LDR R0,[R8, #+0] \ 00000AA8 04D08DE2 ADD SP,SP,#+4 \ 00000AAC 000050E3 CMP R0,#+0 \ 00000AB0 240295E5 LDR R0,[R5, #+548] \ 00000AB4 010080E2 ADD R0,R0,#+1 \ 00000AB8 240285E5 STR R0,[R5, #+548] \ 00000ABC 0900000A BEQ ??CheckComand_38 4445 AddStringToLog(t,0x01,"Sending url info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000AC0 0110A0E3 MOV R1,#+1 \ 00000AC4 02002DE9 PUSH {R1} \ 00000AC8 8008A0E1 LSL R0,R0,#+17 \ 00000ACC A008A0E1 LSR R0,R0,#+17 \ 00000AD0 01002DE9 PUSH {R0} \ 00000AD4 0730A0E1 MOV R3,R7 \ 00000AD8 F52F86E2 ADD R2,R6,#+980 \ 00000ADC 0400A0E1 MOV R0,R4 \ 00000AE0 ........ BL AddStringToLog \ 00000AE4 08D08DE2 ADD SP,SP,#+8 4446 else 4447 SENDMSGCOUNT++; 4448 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_38: \ 00000AE8 0B20A0E1 MOV R2,R11 \ 00000AEC 4EFFFFEA B ??CheckComand_26 4449 mfree(send_txt); 4450 return; 4451 } 4452 4453 #ifdef kluchnik // не доступно для всех,потому что имхо,будет еще большая перегрузка серверов!!!а оно нам надо? 4454 if(t->isautobot) 4455 { 4456 TPKT *p; 4457 int i=LoadBotMessage(t->uin); 4458 if(i==0) return;//если нет никаких файлов то просто возвращаемся 4459 char *pp=bot_lines[t->bot_msg]; 4460 t->bot_msg++; 4461 if(t->bot_msg==i) 4462 t->bot_msg=0; 4463 p=malloc(sizeof(PKT)+strlen(pp)+1); 4464 p->pkt.uin=t->uin; 4465 p->pkt.type=T_SENDMSG; 4466 p->pkt.data_len=strlen(pp); 4467 strcpy(p->data,pp); 4468 AddStringToLog(t,0x01,pp,"Autobot",(++SENDMSGCOUNT)&0x7FFF,1); 4469 SUBPROC((void *)SendAnswer,0,p); 4470 return; 4471 } 4472 #endif 4473 4474 CheckComand2(txt,t); \ ??CheckComand_37: \ 00000AF0 0410A0E1 MOV R1,R4 \ 00000AF4 0B00A0E1 MOV R0,R11 \ 00000AF8 ........ _BLF CheckComand2,??CheckComand2??rA 4475 } \ 00000AFC 8ADF8DE2 ADD SP,SP,#+552 \ 00000B00 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CheckComand_0: \ 00000B04 ........ DC32 `?` \ 00000B08 ........ DC32 show_send_info \ 00000B0C ........ DC32 MAINCSM + 144 \ 00000B10 ........ DC32 MAINCSM + 168 \ 00000B14 ........ DC32 MAINCSM + 212 \ 00000B18 ........ DC32 MAINCSM + 188 \ 00000B1C ........ DC32 awayHelloMsg \ 00000B20 ........ DC32 MAINCSM + 232 4476 4477 //------------- Попап месаже для подключившегося контакта -----------// 4478 4479 char INC_Nick[32]; 4480 char show_nick[32]; 4481 int INC_show; 4482 4483 char onContact[64]; 4484 int INC_show2; 4485 GBSTMR incs2; 4486 extern void DrawScreenShot(); 4487 \ In segment CODE, align 4, keep-with-next 4488 void show_on_contact() 4489 { \ show_on_contact: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 4490 if(INC_show2>0) \ 00000004 ........ LDR R4,??DataTable186 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 3C0394E5 LDR R0,[R4, #+828] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 490000BA BLT ??show_on_contact_0 4491 { 4492 WSHDR *ws=AllocWS(64); \ 00000018 4000A0E3 MOV R0,#+64 \ 0000001C 250100EF SWI +293 \ 00000020 0050A0E1 MOV R5,R0 4493 ascii2ws(ws,onContact); \ 00000024 791D84E2 ADD R1,R4,#+7744 \ 00000028 ........ _BLF ascii2ws,??ascii2ws??rA 4494 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; \ 0000002C 068100EF SWI +33030 \ 00000030 080090E5 LDR R0,[R0, #+8] 4495 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 00000034 0C219FE5 LDR R2,??show_on_contact_1 ;; `?` \ 00000038 0C0090E5 LDR R0,[R0, #+12] \ 0000003C 480092E8 LDM R2,{R3,R6} \ 00000040 080090E5 LDR R0,[R0, #+8] \ 00000044 0D10A0E1 MOV R1,SP \ 00000048 040090E5 LDR R0,[R0, #+4] \ 0000004C 480081E8 STM R1,{R3,R6} \ 00000050 010040E2 SUB R0,R0,#+1 4496 if(!(memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8))) \ 00000054 0820A0E3 MOV R2,#+8 \ 00000058 1C0100EF SWI +284 \ 0000005C 000050E3 CMP R0,#+0 \ 00000060 0300001A BNE ??show_on_contact_2 4497 { 4498 DrawScreenShot(); \ 00000064 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 4499 INC_show2-=2; \ 00000068 3C0394E5 LDR R0,[R4, #+828] \ 0000006C 020040E2 SUB R0,R0,#+2 \ 00000070 010000EA B ??show_on_contact_3 4500 } 4501 else 4502 INC_show2--; \ ??show_on_contact_2: \ 00000074 3C0394E5 LDR R0,[R4, #+828] \ 00000078 010040E2 SUB R0,R0,#+1 4503 DrawRectangle(0,0,Get_WS_width(ws,PopupFont)+2,GetFontYSIZE(PopupFont)+2,0,PopupBGCl,PopupBGCl); \ ??show_on_contact_3: \ 0000007C ........ LDR R6,??DataTable182 ;; PopupFont \ 00000080 3C0384E5 STR R0,[R4, #+828] \ 00000084 000096E5 LDR R0,[R6, #+0] \ 00000088 C50100EF SWI +453 \ 0000008C 001096E5 LDR R1,[R6, #+0] \ 00000090 0070A0E1 MOV R7,R0 \ 00000094 0500A0E1 MOV R0,R5 \ 00000098 080200EF SWI +520 \ 0000009C ........ LDR R1,??DataTable184 ;; PopupBGCl \ 000000A0 023087E2 ADD R3,R7,#+2 \ 000000A4 0120A0E1 MOV R2,R1 \ 000000A8 04002DE9 PUSH {R2} \ 000000AC 02002DE9 PUSH {R1} \ 000000B0 0010A0E3 MOV R1,#+0 \ 000000B4 02002DE9 PUSH {R1} \ 000000B8 022080E2 ADD R2,R0,#+2 \ 000000BC 0000A0E3 MOV R0,#+0 \ 000000C0 B40100EF SWI +436 4504 DrawString(ws,1,1,1+Get_WS_width(ws,PopupFont)+2,1+GetFontYSIZE(PopupFont),PopupFont,0,PopupOnlineCl,GetPaletteAdrByColorIndex(23)); \ 000000C4 1700A0E3 MOV R0,#+23 \ 000000C8 2E0100EF SWI +302 \ 000000CC 0080A0E1 MOV R8,R0 \ 000000D0 000096E5 LDR R0,[R6, #+0] \ 000000D4 C50100EF SWI +453 \ 000000D8 001096E5 LDR R1,[R6, #+0] \ 000000DC 0070A0E1 MOV R7,R0 \ 000000E0 0500A0E1 MOV R0,R5 \ 000000E4 080200EF SWI +520 \ 000000E8 5C109FE5 LDR R1,??show_on_contact_1+0x4 ;; PopupOnlineCl \ 000000EC 00012DE9 PUSH {R8} \ 000000F0 02002DE9 PUSH {R1} \ 000000F4 033080E2 ADD R3,R0,#+3 \ 000000F8 0120A0E3 MOV R2,#+1 \ 000000FC 0500A0E1 MOV R0,R5 \ 00000100 0010A0E3 MOV R1,#+0 \ 00000104 02002DE9 PUSH {R1} \ 00000108 001096E5 LDR R1,[R6, #+0] \ 0000010C 02002DE9 PUSH {R1} \ 00000110 011087E2 ADD R1,R7,#+1 \ 00000114 02002DE9 PUSH {R1} \ 00000118 0210A0E1 MOV R1,R2 \ 0000011C 4C0100EF SWI +332 4505 FreeWS(ws); \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 290100EF SWI +297 4506 GBS_StartTimerProc(&incs2, 15, show_on_contact); \ 00000128 20209FE5 LDR R2,??show_on_contact_1+0x8 ;; show_on_contact \ 0000012C 0F10A0E3 MOV R1,#+15 \ 00000130 7A0D84E2 ADD R0,R4,#+7808 \ 00000134 4D0000EF SWI +77 \ 00000138 20D08DE2 ADD SP,SP,#+32 \ 0000013C F381BDE8 POP {R0,R1,R4-R8,PC} 4507 } 4508 else 4509 RefreshGUI(); \ ??show_on_contact_0: \ 00000140 960100EF SWI +406 4510 } \ 00000144 F381BDE8 POP {R0,R1,R4-R8,PC} ;; return \ ??show_on_contact_1: \ 00000148 ........ DC32 `?` \ 0000014C ........ DC32 PopupOnlineCl \ 00000150 ........ DC32 show_on_contact 4511 4512 4513 //---------------------------- popup message ---------------------------// 4514 4515 \ In segment CODE, align 4, keep-with-next 4516 void show_pp_sender() 4517 { \ show_pp_sender: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 4518 if(INC_show>0) \ 00000004 ........ LDR R4,??DataTable186 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 380394E5 LDR R0,[R4, #+824] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 F38FBDB8 POPLT {R0,R1,R4-R11,PC} 4519 { 4520 WSHDR *ws=AllocWS(256); \ 00000018 400FA0E3 MOV R0,#+256 \ 0000001C 250100EF SWI +293 \ 00000020 0050A0E1 MOV R5,R0 4521 ascii2ws(ws,show_nick); \ 00000024 2000A0E3 MOV R0,#+32 \ 00000028 780D80E3 ORR R0,R0,#0x1E00 \ 0000002C 041080E0 ADD R1,R0,R4 \ 00000030 0500A0E1 MOV R0,R5 \ 00000034 ........ _BLF ascii2ws,??ascii2ws??rA 4522 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] 4523 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 4524 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 4525 { 4526 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 4527 INC_show-=2; \ 00000074 380394E5 LDR R0,[R4, #+824] \ 00000078 020040E2 SUB R0,R0,#+2 \ 0000007C 010000EA B ??show_pp_sender_2 4528 } 4529 else 4530 INC_show--; \ ??show_pp_sender_1: \ 00000080 380394E5 LDR R0,[R4, #+824] \ 00000084 010040E2 SUB R0,R0,#+1 4531 #ifdef NEWSGOLD 4532 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,??DataTable182 ;; PopupFont \ 0000008C ........ LDR R11,??DataTable183 ;; NumStatusToIconBar \ 00000090 380384E5 STR R0,[R4, #+824] \ 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,??DataTable184 ;; 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 4533 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 4534 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 4535 #else 4536 DrawRectangle(0,0,Get_WS_width(ws,PopupFont)+2,GetFontYSIZE(PopupFont)+2,0,PopupBGCl,PopupBGCl); 4537 DrawString(ws,1,1,1+Get_WS_width(ws,PopupFont)+2,1+GetFontYSIZE(PopupFont),PopupFont,0,PopupMsgCl,GetPaletteAdrByColorIndex(23)); 4538 #endif 4539 FreeWS(ws); \ 0000017C 0500A0E1 MOV R0,R5 \ 00000180 290100EF SWI +297 4540 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 0800A0E3 MOV R0,#+8 \ 00000190 740D80E3 ORR R0,R0,#0x1D00 \ 00000194 040080E0 ADD R0,R0,R4 \ 00000198 4D0000EF SWI +77 \ 0000019C 20D08DE2 ADD SP,SP,#+32 4541 } 4542 } \ 000001A0 F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??show_pp_sender_0: \ 000001A4 ........ DC32 `?_1` \ 000001A8 ........ DC32 PopupMsgCl \ 000001AC ........ DC32 show_pp_sender 4543 4544 4545 //----------------------------------------------------------------------------------------// 4546 4547 \ In segment CODE, align 4, keep-with-next 4548 void Get_Online_total() 4549 { 4550 CLIST *t; 4551 kopa_online=0; \ Get_Online_total: \ 00000000 ........ LDR R0,??DataTable186 ;; S_ICONS \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 B81280E5 STR R1,[R0, #+696] 4552 kopa_kontaktu=0; \ 0000000C BC1280E5 STR R1,[R0, #+700] 4553 t=(CLIST *)(&cltop); \ 00000010 A81F80E2 ADD R1,R0,#+672 \ 00000014 FF30A0E3 MOV R3,#+255 \ 00000018 FF3C83E3 ORR R3,R3,#0xFF00 \ 0000001C 0A0000EA B ??Get_Online_total_0 4554 while(t=(CLIST *)(t->next)) 4555 { 4556 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 4557 { 4558 kopa_online++; \ 0000002C B82290E5 LDR R2,[R0, #+696] \ 00000030 012082E2 ADD R2,R2,#+1 \ 00000034 B82280E5 STR R2,[R0, #+696] 4559 if (t->state!=65535) kopa_kontaktu++; \ 00000038 B425D1E1 LDRH R2,[R1, #+84] \ 0000003C 030052E1 CMP R2,R3 \ 00000040 BC229015 LDRNE R2,[R0, #+700] \ 00000044 01208212 ADDNE R2,R2,#+1 \ 00000048 BC228015 STRNE R2,[R0, #+700] 4560 } 4561 } \ ??Get_Online_total_0: \ 0000004C 001091E5 LDR R1,[R1, #+0] \ 00000050 000051E3 CMP R1,#+0 \ 00000054 F1FFFF1A BNE ??Get_Online_total_1 4562 } \ 00000058 1EFF2FE1 BX LR ;; return 4563 4564 4565 //-------------------------------------------------------------------------------------------// 4566 4567 \ In segment CODE, align 4, keep-with-next 4568 void SetIndividStatus()//set to all contact to default vibra, sound and other by kluchnik 04.04.08 4569 { 4570 CLIST *t; 4571 t=(CLIST *)(&cltop); \ SetIndividStatus: \ 00000000 ........ LDR R0,??DataTable186 ;; S_ICONS \ 00000004 A81F80E2 ADD R1,R0,#+672 \ 00000008 0B0000EA B ??SetIndividStatus_0 4572 while(t=(CLIST *)(t->next)) 4573 { 4574 if (!t->isgroup) \ ??SetIndividStatus_1: \ 0000000C 082091E5 LDR R2,[R1, #+8] \ 00000010 000052E3 CMP R2,#+0 \ 00000014 0800001A BNE ??SetIndividStatus_0 4575 { 4576 t->isvibra=1; \ 00000018 0120A0E3 MOV R2,#+1 \ 0000001C 5C2081E5 STR R2,[R1, #+92] 4577 t->issound=1; \ 00000020 602081E5 STR R2,[R1, #+96] 4578 t->isShowXst=Show_XTX; \ 00000024 4C3290E5 LDR R3,[R0, #+588] \ 00000028 6C3081E5 STR R3,[R1, #+108] 4579 #ifdef kluchnik 4580 t->isLoadHistory=1; 4581 #endif 4582 t->signals=1; \ 0000002C 702081E5 STR R2,[R1, #+112] 4583 t->isaccess=1; \ 00000030 742081E5 STR R2,[R1, #+116] 4584 4585 t->automsgcount=0; \ 00000034 0020A0E3 MOV R2,#+0 \ 00000038 782081E5 STR R2,[R1, #+120] 4586 } 4587 } \ ??SetIndividStatus_0: \ 0000003C 001091E5 LDR R1,[R1, #+0] \ 00000040 000051E3 CMP R1,#+0 \ 00000044 F0FFFF1A BNE ??SetIndividStatus_1 4588 } \ 00000048 1EFF2FE1 BX LR ;; return 4589 4590 //-------------------------------------------------------------------------------------------// 4591 4592 \ In segment CODE, align 4, keep-with-next 4593 ProcessPacket(TPKT *p) 4594 { \ ProcessPacket: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 4EDF4DE2 SUB SP,SP,#+312 4595 CLIST *t; 4596 LOGQ *q; 4597 char s[256]; 4598 switch(p->pkt.type) \ 00000008 2CAB9FE5 LDR R10,??ProcessPacket_1+0x4 ;; ILL_RECV_FADE \ 0000000C ........ LDR R5,??DataTable209 ;; Canvas \ 00000010 ........ LDR R7,??DataTable207 ;; S_ICONS \ 00000014 0040A0E1 MOV R4,R0 \ 00000018 B410D4E1 LDRH R1,[R4, #+4] \ 0000001C 000094E5 LDR R0,[R4, #+0] \ 00000020 0160A0E3 MOV R6,#+1 \ 00000024 0090A0E3 MOV R9,#+0 \ 00000028 031041E2 SUB R1,R1,#+3 \ 0000002C 1C0051E3 CMP R1,#+28 \ 00000030 BC02008A BHI ??ProcessPacket_2 \ 00000034 022F8FE2 ADR R2,??ProcessPacket_0 \ 00000038 8110A0E1 MOV R1,R1, LSL #+1 \ 0000003C B12092E1 LDRH R2,[R2, R1] \ 00000040 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??ProcessPacket_0: \ 00000044 33010E00B802 DC16 +307,+14,+696,+696 \ B802 \ 0000004C 1100B8024E00 DC16 +17,+696,+78,+696 \ B802 \ 00000054 B802B802B802 DC16 +696,+696,+696,+696 \ B802 \ 0000005C B8021E021E02 DC16 +696,+542,+542,+696 \ B802 \ 00000064 B8023E004C00 DC16 +696,+62,+76,+696 \ B802 \ 0000006C B802B8024E02 DC16 +696,+696,+590,+696 \ B802 \ 00000074 B802B802B802 DC16 +696,+696,+696,+696 \ B802 \ 0000007C B6020000 DC16 +694,+0 4599 { 4600 case T_LOGIN: 4601 set_my_status(); \ ??ProcessPacket_3: \ 00000080 ........ BL set_my_status 4602 set_my_xstatus(); \ 00000084 ........ BL set_my_xstatus \ 00000088 A60200EA B ??ProcessPacket_2 4603 break; 4604 case T_CLENTRY: 4605 if (p->pkt.uin) \ ??ProcessPacket_4: \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 1800000A BEQ ??ProcessPacket_5 4606 { 4607 if ((t=FindContactByUin(p->pkt.uin))) \ 00000094 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000098 0080B0E1 MOVS R8,R0 \ 0000009C 0E00000A BEQ ??ProcessPacket_6 4608 { 4609 // t->state=0xFFFF; 4610 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 4611 t->group=GROUP_CACHE; \ ??ProcessPacket_7: \ 000000BC A40297E5 LDR R0,[R7, #+676] \ 000000C0 100088E5 STR R0,[R8, #+16] 4612 ChangeContactPos(t); \ ??ProcessPacket_8: \ 000000C4 0800A0E1 MOV R0,R8 \ 000000C8 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4613 RecountMenu(t,1); \ 000000CC 0110A0E3 MOV R1,#+1 \ 000000D0 0800A0E1 MOV R0,R8 \ ??ProcessPacket_9: \ 000000D4 ........ BL RecountMenu \ 000000D8 920200EA B ??ProcessPacket_2 4614 } 4615 else 4616 { 4617 RecountMenu(AddContact(p->pkt.uin,p->data, GROUP_CACHE, 0),1); \ ??ProcessPacket_6: \ 000000DC A42297E5 LDR R2,[R7, #+676] \ 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 4618 } 4619 } 4620 else 4621 { 4622 if(VIBR_ON_CONNECT) \ ??ProcessPacket_5: \ 000000F8 ........ LDR R0,??DataTable189 ;; VIBR_ON_CONNECT \ 000000FC 000090E5 LDR R0,[R0, #+0] \ 00000100 000050E3 CMP R0,#+0 \ 00000104 0100000A BEQ ??ProcessPacket_10 4623 { 4624 vibra_count=1; \ 00000108 806287E5 STR R6,[R7, #+640] 4625 start_vibra(); \ 0000010C ........ BL start_vibra 4626 } 4627 GROUP_CACHE=0; \ ??ProcessPacket_10: \ 00000110 A49287E5 STR R9,[R7, #+676] 4628 ask_my_info(); 4629 if (contactlist_menu_id) \ 00000114 A80297E5 LDR R0,[R7, #+680] \ 00000118 000050E3 CMP R0,#+0 \ 0000011C 0200000A BEQ ??ProcessPacket_11 4630 { 4631 RecountMenu(NULL,1); \ 00000120 0110A0E3 MOV R1,#+1 \ 00000124 0900A0E1 MOV R0,R9 \ ??ProcessPacket_12: \ 00000128 E9FFFFEA B ??ProcessPacket_9 4632 } 4633 else 4634 { 4635 unhooked2=1; \ ??ProcessPacket_11: \ 0000012C 0C0A9FE5 LDR R0,??ProcessPacket_1+0x8 ;; MAINCSM + 112 \ 00000130 006080E5 STR R6,[R0, #+0] 4636 create_contactlist_menu(); \ 00000134 ........ BL create_contactlist_menu 4637 SetIndividStatus(); \ 00000138 ........ BL SetIndividStatus \ 0000013C 790200EA B ??ProcessPacket_2 4638 } 4639 } 4640 break; 4641 case T_GROUPID: 4642 if (t=FindGroupByID(GROUP_CACHE=p->pkt.uin)) \ ??ProcessPacket_13: \ 00000140 A40287E5 STR R0,[R7, #+676] \ 00000144 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000148 0080B0E1 MOVS R8,R0 \ 0000014C 0400000A BEQ ??ProcessPacket_14 4643 { 4644 strncpy(t->name,p->data,63); \ 00000150 3F20A0E3 MOV R2,#+63 \ 00000154 081084E2 ADD R1,R4,#+8 \ 00000158 140088E2 ADD R0,R8,#+20 \ 0000015C 160100EF SWI +278 4645 ChangeContactPos(t); \ 00000160 D7FFFFEA B ??ProcessPacket_8 4646 RecountMenu(t,1); 4647 } 4648 else 4649 { 4650 RecountMenu(AddGroup(p->pkt.uin,p->data),1); \ ??ProcessPacket_14: \ 00000164 000094E5 LDR R0,[R4, #+0] \ 00000168 081084E2 ADD R1,R4,#+8 \ 0000016C ........ _BLF AddGroup,??AddGroup??rA \ 00000170 0110A0E3 MOV R1,#+1 \ 00000174 D6FFFFEA B ??ProcessPacket_9 4651 } 4652 break; 4653 case T_GROUPFOLLOW: 4654 GROUP_CACHE=p->pkt.uin; \ ??ProcessPacket_15: \ 00000178 A40287E5 STR R0,[R7, #+676] \ 0000017C 690200EA B ??ProcessPacket_2 4655 break; 4656 case T_STATUSCHANGE: 4657 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_16: \ 00000180 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000184 0080B0E1 MOVS R8,R0 4658 if (t) \ 00000188 6602000A BEQ ??ProcessPacket_2 4659 { 4660 int i=t->state; \ 0000018C B415D8E1 LDRH R1,[R8, #+84] 4661 CLIST *oldt=NULL; \ 00000190 00B0A0E3 MOV R11,#+0 \ 00000194 04108DE5 STR R1,[SP, #+4] \ 00000198 0A00D4E5 LDRB R0,[R4, #+10] \ 0000019C B615D8E1 LDRH R1,[R8, #+86] \ 000001A0 000051E1 CMP R1,R0 \ 000001A4 1D00000A BEQ ??ProcessPacket_17 4662 if (t->xstate!=p->data[2]) // Если картинка икс статуса сменилась 4663 { 4664 t->xstate=p->data[2]; \ 000001A8 B605C8E1 STRH R0,[R8, #+86] 4665 FreeXText(t); \ 000001AC 0800A0E1 MOV R0,R8 \ 000001B0 ........ _BLF FreeXText,??FreeXText??rA 4666 if (t->xstate && ENA_AUTO_XTXT) // Если установлен икс статус и можно запрашивать по смене икс статуса :) \ 000001B4 B605D8E1 LDRH R0,[R8, #+86] \ 000001B8 000050E3 CMP R0,#+0 \ 000001BC 1600000A BEQ ??ProcessPacket_18 \ 000001C0 7C099FE5 LDR R0,??ProcessPacket_1+0xC ;; ENA_AUTO_XTXT \ 000001C4 000090E5 LDR R0,[R0, #+0] \ 000001C8 000050E3 CMP R0,#+0 \ 000001CC 1200000A BEQ ??ProcessPacket_18 4667 { 4668 t->req_xtext=1; \ 000001D0 AC6088E5 STR R6,[R8, #+172] 4669 if (edchat_id) // Если открыт чат \ 000001D4 AC0297E5 LDR R0,[R7, #+684] \ 000001D8 000050E3 CMP R0,#+0 \ 000001DC 0F00000A BEQ ??ProcessPacket_17 4670 { 4671 void *data=FindGUIbyId(edchat_id,NULL); \ 000001E0 AC0297E5 LDR R0,[R7, #+684] \ 000001E4 0010A0E3 MOV R1,#+0 \ 000001E8 090200EF SWI +521 4672 if (data) \ 000001EC 000050E3 CMP R0,#+0 \ 000001F0 0A00000A BEQ ??ProcessPacket_17 4673 { 4674 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 000001F4 DF0100EF SWI +479 4675 if (ed_struct) \ 000001F8 000050E3 CMP R0,#+0 \ 000001FC 0700000A BEQ ??ProcessPacket_17 4676 { 4677 if (ed_struct->ed_contact==t) // Если наш чат то запрашиваем текст статуса \ 00000200 000090E5 LDR R0,[R0, #+0] \ 00000204 080050E1 CMP R0,R8 \ 00000208 0400001A BNE ??ProcessPacket_17 4678 { 4679 t->req_xtext=0; \ 0000020C AC9088E5 STR R9,[R8, #+172] 4680 RequestXText(t->uin); \ 00000210 0C0098E5 LDR R0,[R8, #+12] \ 00000214 ........ BL RequestXText \ 00000218 000000EA B ??ProcessPacket_17 4681 } 4682 } 4683 } 4684 } 4685 } 4686 else // Если икс статус не установлен то на всякий случай снимаем флаг получения текста 4687 { 4688 t->req_xtext=0; \ ??ProcessPacket_18: \ 0000021C AC9088E5 STR R9,[R8, #+172] 4689 } 4690 } 4691 if (contactlist_menu_id) \ ??ProcessPacket_17: \ 00000220 A80297E5 LDR R0,[R7, #+680] \ 00000224 000050E3 CMP R0,#+0 \ 00000228 0500000A BEQ ??ProcessPacket_19 4692 { 4693 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 0000022C A80297E5 LDR R0,[R7, #+680] \ 00000230 0010A0E3 MOV R1,#+0 \ 00000234 090200EF SWI +521 \ 00000238 8F0100EF SWI +399 \ 0000023C ........ _BLF FindContactByN,??FindContactByN??rA \ 00000240 00B0A0E1 MOV R11,R0 4694 } 4695 if(t->state==65535) t->change=1; \ ??ProcessPacket_19: \ 00000244 B405D8E1 LDRH R0,[R8, #+84] \ 00000248 FFA0A0E3 MOV R10,#+255 \ 0000024C FFAC8AE3 ORR R10,R10,#0xFF00 \ 00000250 0A0050E1 CMP R0,R10 \ 00000254 7C608805 STREQ R6,[R8, #+124] 4696 t->state=*((unsigned short *)(p->data)); \ 00000258 B800D4E1 LDRH R0,[R4, #+8] \ 0000025C B405C8E1 STRH R0,[R8, #+84] 4697 if((t->state!=65535)&&(t->change==1)) \ 00000260 0A0050E1 CMP R0,R10 \ 00000264 0400000A BEQ ??ProcessPacket_20 \ 00000268 7C0098E5 LDR R0,[R8, #+124] \ 0000026C 010050E3 CMP R0,#+1 4698 { 4699 t->just_now=2; \ 00000270 0200A003 MOVEQ R0,#+2 \ 00000274 68008805 STREQ R0,[R8, #+104] 4700 t->change=0; \ 00000278 7C908805 STREQ R9,[R8, #+124] 4701 } 4702 LogStatusChange(t); \ ??ProcessPacket_20: \ 0000027C 0800A0E1 MOV R0,R8 \ 00000280 ........ _BLF LogStatusChange,??LogStatusChange??rA 4703 ChangeContactPos(t); \ 00000284 0800A0E1 MOV R0,R8 \ 00000288 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4704 RecountMenu(oldt,1); \ 0000028C 0110A0E3 MOV R1,#+1 \ 00000290 0B00A0E1 MOV R0,R11 \ 00000294 ........ BL RecountMenu 4705 4706 if(isLogStatusChange)//isLogStatusChange // by kluchnik 05.04.08 \ 00000298 ........ LDR R0,??DataTable190 ;; isLogStatusChange \ 0000029C 000090E5 LDR R0,[R0, #+0] \ 000002A0 000050E3 CMP R0,#+0 \ 000002A4 2B00000A BEQ ??ProcessPacket_21 4707 { 4708 char *s=GetStatusByIconIndex(GetIconIndex(t)); \ 000002A8 0800A0E1 MOV R0,R8 \ 000002AC ........ BL GetIconIndex \ 000002B0 ........ BL GetStatusByIconIndex \ 000002B4 00008DE5 STR R0,[SP, #+0] 4709 FreeXText2(t); \ 000002B8 0800A0E1 MOV R0,R8 \ 000002BC ........ BL FreeXText2 4710 TTime time; 4711 GetDateTime(NULL,&time); \ 000002C0 08108DE2 ADD R1,SP,#+8 \ 000002C4 0000A0E3 MOV R0,#+0 \ 000002C8 B40000EF SWI +180 4712 char *txt=malloc(64); \ 000002CC 4000A0E3 MOV R0,#+64 \ 000002D0 140000EF SWI +20 \ 000002D4 00B0A0E1 MOV R11,R0 4713 sprintf(txt," %s: %02d:%02d:%02d",s,time.hour,time.min,time.sec); \ 000002D8 0A00DDE5 LDRB R0,[SP, #+10] \ 000002DC A11F85E2 ADD R1,R5,#+644 \ 000002E0 01002DE9 PUSH {R0} \ 000002E4 0D00DDE5 LDRB R0,[SP, #+13] \ 000002E8 01002DE9 PUSH {R0} \ 000002EC 1030DDE5 LDRB R3,[SP, #+16] \ 000002F0 08209DE5 LDR R2,[SP, #+8] \ 000002F4 0B00A0E1 MOV R0,R11 \ 000002F8 160000EF SWI +22 4714 t->xtext2=malloc(64); \ 000002FC 4000A0E3 MOV R0,#+64 \ 00000300 140000EF SWI +20 \ 00000304 A80088E5 STR R0,[R8, #+168] 4715 snprintf(t->xtext2,64,txt); \ 00000308 0B20A0E1 MOV R2,R11 \ 0000030C 4010A0E3 MOV R1,#+64 \ 00000310 1B0100EF SWI +283 4716 AddStringToLog(t,0x03,txt,"Status change",0xFFFFFFFF, 0); \ 00000314 0900A0E1 MOV R0,R9 \ 00000318 01002DE9 PUSH {R0} \ 0000031C A63F85E2 ADD R3,R5,#+664 \ 00000320 0B20A0E1 MOV R2,R11 \ 00000324 0310A0E3 MOV R1,#+3 \ 00000328 0000E0E1 MVN R0,R0 \ 0000032C 01002DE9 PUSH {R0} \ 00000330 0800A0E1 MOV R0,R8 \ 00000334 ........ BL AddStringToLog 4717 ReqAddMsgToChat(t); \ 00000338 0800A0E1 MOV R0,R8 \ 0000033C ........ BL ReqAddMsgToChat 4718 RecountMenu(NULL, 0); \ 00000340 0910A0E1 MOV R1,R9 \ 00000344 0100A0E1 MOV R0,R1 \ 00000348 ........ BL RecountMenu 4719 mfree(txt); \ 0000034C 0B00A0E1 MOV R0,R11 \ 00000350 150000EF SWI +21 \ 00000354 10D08DE2 ADD SP,SP,#+16 4720 } 4721 4722 if ((t->state!=0xFFFF)&&(i==0xFFFF))//Звук \ ??ProcessPacket_21: \ 00000358 B405D8E1 LDRH R0,[R8, #+84] \ 0000035C 4C10A0E3 MOV R1,#+76 \ 00000360 681D81E3 ORR R1,R1,#0x1A00 \ 00000364 07B081E0 ADD R11,R1,R7 \ 00000368 0A0050E1 CMP R0,R10 \ 0000036C 4000000A BEQ ??ProcessPacket_22 \ 00000370 04109DE5 LDR R1,[SP, #+4] \ 00000374 0A0051E1 CMP R1,R10 \ 00000378 3D00001A BNE ??ProcessPacket_22 4723 { 4724 if(Is_INC_On && (PopupShow==2 || PopupShow==3)) \ 0000037C 0C0297E5 LDR R0,[R7, #+524] \ 00000380 000050E3 CMP R0,#+0 \ 00000384 1700000A BEQ ??ProcessPacket_23 \ 00000388 B8079FE5 LDR R0,??ProcessPacket_1+0x10 ;; PopupShow \ 0000038C 000090E5 LDR R0,[R0, #+0] \ 00000390 020050E3 CMP R0,#+2 \ 00000394 03005013 CMPNE R0,#+3 \ 00000398 1200001A BNE ??ProcessPacket_23 4725 { 4726 INC_show2=20; 4727 sprintf(onContact,PopupOnlineString,t->name); \ 0000039C A8179FE5 LDR R1,??ProcessPacket_1+0x14 ;; PopupOnlineString \ 000003A0 1400A0E3 MOV R0,#+20 \ 000003A4 3C0387E5 STR R0,[R7, #+828] \ 000003A8 142088E2 ADD R2,R8,#+20 \ 000003AC 790D87E2 ADD R0,R7,#+7744 \ 000003B0 160000EF SWI +22 4728 sprintf(on_off_buf,"[%s: %s]\n",t->xtext2+1,t->name); \ 000003B4 A80098E5 LDR R0,[R8, #+168] \ 000003B8 143088E2 ADD R3,R8,#+20 \ 000003BC 012080E2 ADD R2,R0,#+1 \ 000003C0 AA1F85E2 ADD R1,R5,#+680 \ 000003C4 0B00A0E1 MOV R0,R11 \ 000003C8 160000EF SWI +22 4729 on_off_timer=ON_OFF_TIME; \ 000003CC 7C179FE5 LDR R1,??ProcessPacket_1+0x18 ;; ON_OFF_TIME \ 000003D0 ........ LDR R0,??DataTable194 ;; MAINCSM + 108 \ 000003D4 001091E5 LDR R1,[R1, #+0] \ 000003D8 001080E5 STR R1,[R0, #+0] 4730 UpdateCLheader(); \ 000003DC ........ BL UpdateCLheader 4731 show_on_contact(); \ 000003E0 ........ BL show_on_contact \ 000003E4 010000EA B ??ProcessPacket_24 4732 } 4733 else 4734 GBS_DelTimer(&incs2);//на всяк \ ??ProcessPacket_23: \ 000003E8 7A0D87E2 ADD R0,R7,#+7808 \ 000003EC 8C0100EF SWI +396 4735 if(!extended_sounds) \ ??ProcessPacket_24: \ 000003F0 ........ LDR R0,??DataTable192 ;; extended_sounds \ 000003F4 58A79FE5 LDR R10,??ProcessPacket_1+0x1C ;; sndGlobal \ 000003F8 000090E5 LDR R0,[R0, #+0] \ 000003FC 000050E3 CMP R0,#+0 \ 00000400 0200001A BNE ??ProcessPacket_25 4736 { 4737 Play(sndGlobal); \ 00000404 0A00A0E1 MOV R0,R10 \ 00000408 ........ BL Play \ 0000040C 310000EA B ??ProcessPacket_26 4738 } 4739 else 4740 { 4741 FSTATS stat; 4742 int fsize; 4743 unsigned int ul = 0; 4744 uins=t->uin; 4745 sprintf(talk_sound, "%s%d.wav", sndGlobal2, uins); \ ??ProcessPacket_25: \ 00000410 40279FE5 LDR R2,??ProcessPacket_1+0x20 ;; sndGlobal2 \ 00000414 00908DE5 STR R9,[SP, #+0] \ 00000418 0C0098E5 LDR R0,[R8, #+12] \ 0000041C A490A0E3 MOV R9,#+164 \ 00000420 FC0187E5 STR R0,[R7, #+508] \ 00000424 409E89E3 ORR R9,R9,#0x400 \ 00000428 0030A0E1 MOV R3,R0 \ 0000042C 951F85E2 ADD R1,R5,#+596 \ 00000430 070089E0 ADD R0,R9,R7 \ 00000434 160000EF SWI +22 4746 GetFileStats(talk_sound,&stat,&ul); \ 00000438 0D20A0E1 MOV R2,SP \ 0000043C 441F8DE2 ADD R1,SP,#+272 \ 00000440 070089E0 ADD R0,R9,R7 \ 00000444 840000EF SWI +132 4747 fsize=stat.size; 4748 if(fsize>0) \ 00000448 14019DE5 LDR R0,[SP, #+276] \ 0000044C 010050E3 CMP R0,#+1 4749 Play(talk_sound); \ 00000450 070089A0 ADDGE R0,R9,R7 4750 else 4751 Play(sndGlobal); \ 00000454 0A00A0B1 MOVLT R0,R10 \ 00000458 ........ BL Play 4752 t->isvibra=1; \ 0000045C 5C6088E5 STR R6,[R8, #+92] 4753 t->issound=1; \ 00000460 606088E5 STR R6,[R8, #+96] 4754 t->isShowXst=Show_XTX; \ 00000464 4C0297E5 LDR R0,[R7, #+588] \ 00000468 6C0088E5 STR R0,[R8, #+108] 4755 #ifdef kluchnik 4756 t->isLoadHistory=1; 4757 #endif 4758 t->signals=1; \ 0000046C 706088E5 STR R6,[R8, #+112] \ 00000470 180000EA B ??ProcessPacket_26 4759 } 4760 } 4761 4762 if ((i!=0xFFFF)&&(t->state==0xFFFF))//Звук \ ??ProcessPacket_22: \ 00000474 04109DE5 LDR R1,[SP, #+4] \ 00000478 0A0051E1 CMP R1,R10 \ 0000047C 1500000A BEQ ??ProcessPacket_26 \ 00000480 0A0050E1 CMP R0,R10 \ 00000484 1300001A BNE ??ProcessPacket_26 4763 { 4764 Play(sndSrvMsg); \ 00000488 CC069FE5 LDR R0,??ProcessPacket_1+0x24 ;; sndSrvMsg \ 0000048C ........ BL Play 4765 if(TIME_OR_MSG==2 || TIME_OR_MSG==3 | TIME_OR_MSG==4) \ 00000490 ........ LDR R0,??DataTable193 ;; TIME_OR_MSG \ 00000494 000090E5 LDR R0,[R0, #+0] \ 00000498 020050E3 CMP R0,#+2 \ 0000049C 03005013 CMPNE R0,#+3 \ 000004A0 04005013 CMPNE R0,#+4 \ 000004A4 0000001A BNE ??ProcessPacket_27 4766 Get_Online_total(); \ 000004A8 ........ BL Get_Online_total 4767 sprintf(on_off_buf,"[%s: %s]\n",t->xtext2+1,t->name); \ ??ProcessPacket_27: \ 000004AC A80098E5 LDR R0,[R8, #+168] \ 000004B0 143088E2 ADD R3,R8,#+20 \ 000004B4 012080E2 ADD R2,R0,#+1 \ 000004B8 AA1F85E2 ADD R1,R5,#+680 \ 000004BC 0B00A0E1 MOV R0,R11 \ 000004C0 160000EF SWI +22 4768 on_off_timer=ON_OFF_TIME; \ 000004C4 84169FE5 LDR R1,??ProcessPacket_1+0x18 ;; ON_OFF_TIME \ 000004C8 ........ LDR R0,??DataTable194 ;; MAINCSM + 108 \ 000004CC 001091E5 LDR R1,[R1, #+0] \ 000004D0 001080E5 STR R1,[R0, #+0] 4769 UpdateCLheader(); \ 000004D4 ........ BL UpdateCLheader 4770 } 4771 4772 if (edchat_id) \ ??ProcessPacket_26: \ 000004D8 AC0297E5 LDR R0,[R7, #+684] \ 000004DC 000050E3 CMP R0,#+0 \ 000004E0 9001000A BEQ ??ProcessPacket_2 4773 { 4774 void *data=FindGUIbyId(edchat_id,NULL); \ 000004E4 AC0297E5 LDR R0,[R7, #+684] \ 000004E8 0010A0E3 MOV R1,#+0 \ 000004EC 090200EF SWI +521 4775 { 4776 EDCHAT_STRUCT *ed_struct; 4777 ed_struct=EDIT_GetUserPointer(data); \ 000004F0 DF0100EF SWI +479 4778 if (ed_struct) \ 000004F4 000050E3 CMP R0,#+0 \ 000004F8 8A01000A BEQ ??ProcessPacket_2 4779 { 4780 if (ed_struct->ed_contact==t) \ 000004FC 000090E5 LDR R0,[R0, #+0] \ 00000500 080050E1 CMP R0,R8 \ 00000504 8701001A BNE ??ProcessPacket_2 4781 { 4782 DirectRedrawGUI_ID(edchat_id); \ 00000508 AC0297E5 LDR R0,[R7, #+684] \ 0000050C 400100EF SWI +320 \ 00000510 840100EA B ??ProcessPacket_2 4783 } 4784 } 4785 } 4786 } 4787 } 4788 break; 4789 case T_RECVMSG: 4790 NEW_MSG=1; \ ??ProcessPacket_28: \ 00000514 2C6387E5 STR R6,[R7, #+812] 4791 t=FindContactByUin(p->pkt.uin); \ 00000518 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 0000051C 0080B0E1 MOVS R8,R0 4792 if (!t) \ 00000520 0900001A BNE ??ProcessPacket_29 4793 { 4794 sprintf(s,percent_d,p->pkt.uin); \ 00000524 002094E5 LDR R2,[R4, #+0] \ 00000528 1E1085E2 ADD R1,R5,#+30 \ 0000052C 10008DE2 ADD R0,SP,#+16 \ 00000530 160000EF SWI +22 4795 t=AddContact(p->pkt.uin,s,GROUP_CACHE,0); \ 00000534 A42297E5 LDR R2,[R7, #+676] \ 00000538 000094E5 LDR R0,[R4, #+0] \ 0000053C 0030A0E3 MOV R3,#+0 \ 00000540 10108DE2 ADD R1,SP,#+16 \ 00000544 ........ _BLF AddContact,??AddContact??rA \ 00000548 0080A0E1 MOV R8,R0 4796 } 4797 #ifdef kluchnik 4798 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: \ 00000578 0810A0E3 MOV R1,#+8 \ 0000057C 741D81E3 ORR R1,R1,#0x1D00 \ 00000580 071081E0 ADD R1,R1,R7 \ 00000584 00108DE5 STR R1,[SP, #+0] \ 00000588 1400D8E5 LDRB R0,[R8, #+20] \ 0000058C 230050E3 CMP R0,#+35 \ 00000590 1700001A BNE ??ProcessPacket_31 4805 { 4806 //Если это конференция, патчим имя 4807 char *s=strchr(p->data,'>'); \ 00000594 3E10A0E3 MOV R1,#+62 \ 00000598 080084E2 ADD R0,R4,#+8 \ 0000059C 180000EF SWI +24 4808 //Если нашли символ > и после него пробел и ник короче 16 символов 4809 if (s) \ 000005A0 000050E3 CMP R0,#+0 \ 000005A4 1200000A BEQ ??ProcessPacket_31 4810 { 4811 if ((s[1]==' ')&&((s-p->data)<16)) \ 000005A8 0110D0E5 LDRB R1,[R0, #+1] \ 000005AC 200051E3 CMP R1,#+32 \ 000005B0 0F00001A BNE ??ProcessPacket_31 \ 000005B4 081084E2 ADD R1,R4,#+8 \ 000005B8 011040E0 SUB R1,R0,R1 \ 000005BC 100051E3 CMP R1,#+16 \ 000005C0 0B0000AA BGE ??ProcessPacket_31 4812 { 4813 *s=0; //Режем строку \ 000005C4 0090C0E5 STRB R9,[R0, #+0] 4814 AddStringToLog(t,0x02,s+2,p->data,0xFFFFFFFF,1); //Добавляем имя из текста сообщения \ 000005C8 0110A0E3 MOV R1,#+1 \ 000005CC 02002DE9 PUSH {R1} \ 000005D0 083084E2 ADD R3,R4,#+8 \ 000005D4 022080E2 ADD R2,R0,#+2 \ 000005D8 0800A0E1 MOV R0,R8 \ 000005DC 001061E2 RSB R1,R1,#+0 \ 000005E0 02002DE9 PUSH {R1} \ 000005E4 0210A0E3 MOV R1,#+2 \ 000005E8 ........ BL AddStringToLog 4815 goto L1; \ 000005EC 08D08DE2 ADD SP,SP,#+8 \ 000005F0 7D0000EA B ??ProcessPacket_32 4816 } 4817 } 4818 } 4819 4820 //=================== tas bus jautri ===================// 4821 4822 comanda=1; \ ??ProcessPacket_31: \ 000005F4 346387E5 STR R6,[R7, #+820] 4823 CheckComand(p->data, t); \ 000005F8 0810A0E1 MOV R1,R8 \ 000005FC 5C559FE5 LDR R5,??ProcessPacket_1+0x28 ;; ILL_KEYS_RECV \ 00000600 5CB59FE5 LDR R11,??ProcessPacket_1+0x2C ;; ILL_RECV_TMR \ 00000604 080084E2 ADD R0,R4,#+8 \ 00000608 ........ BL CheckComand \ 0000060C 703098E5 LDR R3,[R8, #+112] \ 00000610 ........ LDR R0,??DataTable196 ;; automsgcount \ 00000614 ........ LDR R1,??DataTable197 ;; VIBR_TYPE \ 00000618 000053E3 CMP R3,#+0 \ 0000061C 74309815 LDRNE R3,[R8, #+116] \ 00000620 5A2FA0E3 MOV R2,#+360 \ 00000624 00005313 CMPNE R3,#+0 \ 00000628 1100000A BEQ ??ProcessPacket_33 4824 if(t->signals && t->isaccess) 4825 { 4826 #ifdef NEWSGOLD 4827 scrsTime=0; 4828 #endif 4829 if(SHOW_ACTIVE) \ 0000062C ........ LDR R3,??DataTable200 ;; SHOW_ACTIVE \ 00000630 3C9287E5 STR R9,[R7, #+572] \ 00000634 003093E5 LDR R3,[R3, #+0] \ 00000638 000053E3 CMP R3,#+0 4830 t->isactive=ACTIVE_TIME; \ 0000063C 9C208815 STRNE R2,[R8, #+156] 4831 if(t->isvibra) \ 00000640 5C2098E5 LDR R2,[R8, #+92] \ 00000644 000052E3 CMP R2,#+0 \ 00000648 2800000A BEQ ??ProcessPacket_34 4832 { 4833 if(VIBR_TYPE) \ 0000064C 001091E5 LDR R1,[R1, #+0] \ 00000650 000051E3 CMP R1,#+0 4834 vibra_count=2; \ 00000654 0210A013 MOVNE R1,#+2 \ 00000658 80128715 STRNE R1,[R7, #+640] 4835 else 4836 vibra_count=1; \ 0000065C 80628705 STREQ R6,[R7, #+640] 4837 if(t->automsgcountisIndividSet) \ ??ProcessPacket_33: \ 00000674 583098E5 LDR R3,[R8, #+88] \ 00000678 3C9287E5 STR R9,[R7, #+572] \ 0000067C 000053E3 CMP R3,#+0 \ 00000680 0C00000A BEQ ??ProcessPacket_36 4854 { 4855 #ifdef NEWSGOLD 4856 scrsTime=0; 4857 #endif 4858 if(SHOW_ACTIVE) \ 00000684 ........ LDR R0,??DataTable200 ;; SHOW_ACTIVE \ 00000688 000090E5 LDR R0,[R0, #+0] \ 0000068C 000050E3 CMP R0,#+0 4859 t->isactive=ACTIVE_TIME; \ 00000690 9C208815 STRNE R2,[R8, #+156] 4860 if(t->isvibra) \ 00000694 5C0098E5 LDR R0,[R8, #+92] \ 00000698 000050E3 CMP R0,#+0 \ 0000069C 1300000A BEQ ??ProcessPacket_34 4861 { 4862 if(VIBR_TYPE) \ 000006A0 000091E5 LDR R0,[R1, #+0] \ 000006A4 000050E3 CMP R0,#+0 4863 vibra_count=2; \ 000006A8 0200A013 MOVNE R0,#+2 \ 000006AC 80028715 STRNE R0,[R7, #+640] 4864 else 4865 vibra_count=1; \ 000006B0 80628705 STREQ R6,[R7, #+640] 4866 if(t->automsgcount < automsgcount && away_m) 4867 start_vibra(); \ 000006B4 0C0000EA B ??ProcessPacket_35 4868 else 4869 start_vibra(); 4870 } 4871 #ifdef ELKA 4872 if(SLI_TYPE) 4873 SLI_Timer(); 4874 #endif 4875 if(Is_Double_Vibra_On) 4876 { 4877 Reminder_timer(); 4878 } 4879 4880 if (Is_ILU_On) 4881 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 4882 } 4883 else 4884 { 4885 #ifdef NEWSGOLD 4886 scrsTime=0; 4887 #endif 4888 if(SHOW_ACTIVE) \ ??ProcessPacket_36: \ 000006B8 ........ LDR R3,??DataTable200 ;; SHOW_ACTIVE \ 000006BC 003093E5 LDR R3,[R3, #+0] \ 000006C0 000053E3 CMP R3,#+0 4889 t->isactive=ACTIVE_TIME; \ 000006C4 9C208815 STRNE R2,[R8, #+156] 4890 if(VIBR_TYPE) \ 000006C8 001091E5 LDR R1,[R1, #+0] \ 000006CC 000051E3 CMP R1,#+0 4891 vibra_count=2; \ 000006D0 0210A013 MOVNE R1,#+2 \ 000006D4 80128715 STRNE R1,[R7, #+640] 4892 else 4893 vibra_count=1; \ 000006D8 80628705 STREQ R6,[R7, #+640] 4894 if(t->automsgcount >= automsgcount) vibra_count=0; \ 000006DC 781098E5 LDR R1,[R8, #+120] \ 000006E0 000090E5 LDR R0,[R0, #+0] \ 000006E4 000051E1 CMP R1,R0 \ 000006E8 80928725 STRCS R9,[R7, #+640] 4895 start_vibra(); \ ??ProcessPacket_35: \ 000006EC ........ BL start_vibra 4896 #ifdef ELKA 4897 if(SLI_TYPE) 4898 SLI_Timer(); 4899 #endif 4900 if(Is_Double_Vibra_On) \ ??ProcessPacket_34: \ 000006F0 140297E5 LDR R0,[R7, #+532] \ 000006F4 000050E3 CMP R0,#+0 \ 000006F8 0000000A BEQ ??ProcessPacket_37 4901 { 4902 Reminder_timer(); \ 000006FC ........ BL Reminder_timer 4903 } 4904 4905 if (Is_ILU_On) \ ??ProcessPacket_37: \ 00000700 100297E5 LDR R0,[R7, #+528] \ 00000704 000050E3 CMP R0,#+0 \ 00000708 0500000A BEQ ??ProcessPacket_38 4906 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 0000070C 54049FE5 LDR R0,??ProcessPacket_1+0x30 ;; ILL_DISP_RECV \ 00000710 00309AE5 LDR R3,[R10, #+0] \ 00000714 00209BE5 LDR R2,[R11, #+0] \ 00000718 001095E5 LDR R1,[R5, #+0] \ 0000071C 000090E5 LDR R0,[R0, #+0] \ 00000720 ........ BL IlluminationOn 4907 } 4908 4909 if(comanda==1) \ ??ProcessPacket_38: \ 00000724 340397E5 LDR R0,[R7, #+820] \ 00000728 010050E3 CMP R0,#+1 \ 0000072C 2E00001A BNE ??ProcessPacket_32 4910 { 4911 AddStringToLog(t,0x02,p->data,t->name,0xFFFFFFFF,1); \ 00000730 01002DE9 PUSH {R0} \ 00000734 143088E2 ADD R3,R8,#+20 \ 00000738 082084E2 ADD R2,R4,#+8 \ 0000073C 0210A0E3 MOV R1,#+2 \ 00000740 000066E2 RSB R0,R6,#+0 \ 00000744 01002DE9 PUSH {R0} \ 00000748 0800A0E1 MOV R0,R8 \ 0000074C ........ BL AddStringToLog 4912 main_count++; \ 00000750 ........ LDR R0,??DataTable201 ;; main_count \ 00000754 001090E5 LDR R1,[R0, #+0] \ 00000758 011081E2 ADD R1,R1,#+1 \ 0000075C 001080E5 STR R1,[R0, #+0] 4913 if(Is_INC_On && (PopupShow==1 || PopupShow==3)) \ 00000760 0C0297E5 LDR R0,[R7, #+524] \ 00000764 08D08DE2 ADD SP,SP,#+8 \ 00000768 000050E3 CMP R0,#+0 \ 0000076C 1300000A BEQ ??ProcessPacket_39 \ 00000770 D0039FE5 LDR R0,??ProcessPacket_1+0x10 ;; PopupShow \ 00000774 000090E5 LDR R0,[R0, #+0] \ 00000778 010050E3 CMP R0,#+1 \ 0000077C 03005013 CMPNE R0,#+3 \ 00000780 0E00001A BNE ??ProcessPacket_39 4914 { 4915 sprintf(show_nick,PopupMsgString,t->name); \ 00000784 E0139FE5 LDR R1,??ProcessPacket_1+0x34 ;; PopupMsgString \ 00000788 142088E2 ADD R2,R8,#+20 \ 0000078C 2000A0E3 MOV R0,#+32 \ 00000790 780D80E3 ORR R0,R0,#0x1E00 \ 00000794 070080E0 ADD R0,R0,R7 \ 00000798 160000EF SWI +22 4916 if(!IsIdleUiOnTop()&&(!saver_on)) \ 0000079C C50000EF SWI +197 \ 000007A0 000050E3 CMP R0,#+0 \ 000007A4 00029705 LDREQ R0,[R7, #+512] \ 000007A8 00005003 CMPEQ R0,#+0 \ 000007AC 0500001A BNE ??ProcessPacket_40 4917 { 4918 INC_show=20; \ 000007B0 1400A0E3 MOV R0,#+20 \ 000007B4 380387E5 STR R0,[R7, #+824] 4919 show_pp_sender(); \ 000007B8 ........ BL show_pp_sender \ 000007BC 010000EA B ??ProcessPacket_40 4920 } 4921 } 4922 else 4923 GBS_DelTimer(&develop); \ ??ProcessPacket_39: \ 000007C0 00009DE5 LDR R0,[SP, #+0] \ 000007C4 8C0100EF SWI +396 4924 4925 main_msg_timer2=main_msg_timer;//при получении сообщения восстанавливаем таймер \ ??ProcessPacket_40: \ 000007C8 A0039FE5 LDR R0,??ProcessPacket_1+0x38 ;; main_msg_timer \ 000007CC 000090E5 LDR R0,[R0, #+0] \ 000007D0 280387E5 STR R0,[R7, #+808] 4926 if(Is_SMARTCPU_On) \ 000007D4 080297E5 LDR R0,[R7, #+520] \ 000007D8 000050E3 CMP R0,#+0 \ 000007DC 0200000A BEQ ??ProcessPacket_32 4927 AddToMain(t->name,p->data); \ 000007E0 081084E2 ADD R1,R4,#+8 \ 000007E4 140088E2 ADD R0,R8,#+20 \ 000007E8 ........ BL AddToMain 4928 } 4929 L1: 4930 //Разворачиваем группу, в которой пришло сообщение 4931 { 4932 CLIST *g=FindGroupByID(t->group); \ ??ProcessPacket_32: \ 000007EC 100098E5 LDR R0,[R8, #+16] \ 000007F0 ........ _BLF FindGroupByID,??FindGroupByID??rA 4933 if (g) \ 000007F4 000050E3 CMP R0,#+0 4934 { 4935 if (g->state) \ 000007F8 B415D011 LDRHNE R1,[R0, #+84] \ 000007FC 00005113 CMPNE R1,#+0 4936 { 4937 g->state=0; \ 00000800 B495C011 STRHNE R9,[R0, #+84] 4938 } 4939 } 4940 } 4941 4942 ReqAddMsgToChat(t); \ 00000804 0800A0E1 MOV R0,R8 \ 00000808 ........ BL ReqAddMsgToChat 4943 RecountMenu(t,1); \ 0000080C 0110A0E3 MOV R1,#+1 \ 00000810 0800A0E1 MOV R0,R8 \ 00000814 ........ BL RecountMenu 4944 4945 switch (DEVELOP_IF) \ 00000818 54039FE5 LDR R0,??ProcessPacket_1+0x3C ;; DEVELOP_IF \ 0000081C 000090E5 LDR R0,[R0, #+0] \ 00000820 000050E3 CMP R0,#+0 \ 00000824 0400000A BEQ ??ProcessPacket_41 \ 00000828 010050E2 SUBS R0,R0,#+1 \ 0000082C 0B00000A BEQ ??ProcessPacket_42 \ 00000830 020050E2 SUBS R0,R0,#+2 \ 00000834 1300000A BEQ ??ProcessPacket_43 \ 00000838 BA0000EA B ??ProcessPacket_2 4946 { 4947 case 0: 4948 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) to_develop(); \ ??ProcessPacket_41: \ 0000083C 068100EF SWI +33030 \ 00000840 080090E5 LDR R0,[R0, #+8] \ 00000844 1C1297E5 LDR R1,[R7, #+540] \ 00000848 0C0090E5 LDR R0,[R0, #+12] \ 0000084C 0C0090E5 LDR R0,[R0, #+12] \ 00000850 010050E1 CMP R0,R1 \ ??ProcessPacket_44: \ 00000854 B300000A BEQ ??ProcessPacket_2 \ 00000858 ........ BL to_develop \ 0000085C B10000EA B ??ProcessPacket_2 4949 break; 4950 case 1: 4951 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) to_develop(); \ ??ProcessPacket_42: \ 00000860 068100EF SWI +33030 \ 00000864 080090E5 LDR R0,[R0, #+8] \ 00000868 1C1297E5 LDR R1,[R7, #+540] \ 0000086C 0C0090E5 LDR R0,[R0, #+12] \ 00000870 0C0090E5 LDR R0,[R0, #+12] \ 00000874 010050E1 CMP R0,R1 \ 00000878 AA00000A BEQ ??ProcessPacket_2 \ 0000087C 430000EF SWI +67 \ 00000880 000050E3 CMP R0,#+0 \ 00000884 F2FFFFEA B ??ProcessPacket_44 4952 break; 4953 case 2: 4954 break; 4955 case 3: 4956 GBS_DelTimer(&develop); \ ??ProcessPacket_43: \ 00000888 00009DE5 LDR R0,[SP, #+0] \ 0000088C 8C0100EF SWI +396 4957 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(!IsUnlocked())) begin_to_develop(); \ 00000890 068100EF SWI +33030 \ 00000894 080090E5 LDR R0,[R0, #+8] \ 00000898 1C1297E5 LDR R1,[R7, #+540] \ 0000089C 0C0090E5 LDR R0,[R0, #+12] \ 000008A0 0C0090E5 LDR R0,[R0, #+12] \ 000008A4 010050E1 CMP R0,R1 \ 000008A8 9E00000A BEQ ??ProcessPacket_2 \ 000008AC 430000EF SWI +67 \ 000008B0 000050E3 CMP R0,#+0 \ 000008B4 9B00001A BNE ??ProcessPacket_2 \ 000008B8 ........ BL begin_to_develop \ 000008BC 990000EA B ??ProcessPacket_2 4958 break; 4959 } 4960 break; 4961 case T_SRV_ACK: 4962 case T_CLIENT_ACK: 4963 q=FindContactLOGQByAck(p); \ ??ProcessPacket_45: \ 000008C0 0400A0E1 MOV R0,R4 \ 000008C4 ........ BL FindContactLOGQByAck 4964 if (q) \ 000008C8 000050E3 CMP R0,#+0 \ 000008CC 9500000A BEQ ??ProcessPacket_2 4965 { 4966 q->acked=p->pkt.type==T_SRV_ACK?1:2; \ 000008D0 B410D4E1 LDRH R1,[R4, #+4] \ 000008D4 100051E3 CMP R1,#+16 \ 000008D8 0110A003 MOVEQ R1,#+1 \ 000008DC 0210A013 MOVNE R1,#+2 \ 000008E0 041080E5 STR R1,[R0, #+4] 4967 t=FindContactByUin(p->pkt.uin); \ 000008E4 000094E5 LDR R0,[R4, #+0] \ 000008E8 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000008EC 0080A0E1 MOV R8,R0 4968 if (edchat_id) \ 000008F0 AC0297E5 LDR R0,[R7, #+684] \ 000008F4 000050E3 CMP R0,#+0 \ 000008F8 8A00000A BEQ ??ProcessPacket_2 4969 { 4970 void *data=FindGUIbyId(edchat_id,NULL); \ 000008FC AC0297E5 LDR R0,[R7, #+684] \ 00000900 0010A0E3 MOV R1,#+0 \ 00000904 090200EF SWI +521 \ 00000908 0050B0E1 MOVS R5,R0 4971 if (data) \ 0000090C 8500000A BEQ ??ProcessPacket_2 4972 { 4973 EDCHAT_STRUCT *ed_struct; 4974 ed_struct=EDIT_GetUserPointer(data); \ 00000910 DF0100EF SWI +479 4975 if (ed_struct) \ 00000914 000050E3 CMP R0,#+0 \ 00000918 8200000A BEQ ??ProcessPacket_2 4976 { 4977 if (ed_struct->ed_contact==t) \ 0000091C 000090E5 LDR R0,[R0, #+0] \ 00000920 080050E1 CMP R0,R8 \ 00000924 7F00001A BNE ??ProcessPacket_2 4978 { 4979 if (EDIT_IsBusy(data)) \ 00000928 0500A0E1 MOV R0,R5 \ 0000092C 1C0200EF SWI +540 \ 00000930 000050E3 CMP R0,#+0 \ 00000934 0300000A BEQ ??ProcessPacket_46 4980 { 4981 t->req_drawack=1; \ 00000938 8C6088E5 STR R6,[R8, #+140] 4982 time_to_stop_t9=3; \ 0000093C 0300A0E3 MOV R0,#+3 \ 00000940 300387E5 STR R0,[R7, #+816] \ 00000944 770000EA B ??ProcessPacket_2 4983 } 4984 else { 4985 DrawAck(data); \ ??ProcessPacket_46: \ 00000948 0500A0E1 MOV R0,R5 \ 0000094C ........ BL DrawAck 4986 if (p->pkt.type==T_SRV_ACK) \ 00000950 B400D4E1 LDRH R0,[R4, #+4] \ 00000954 100050E3 CMP R0,#+16 \ 00000958 7200001A BNE ??ProcessPacket_2 4987 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 0000095C 14029FE5 LDR R0,??ProcessPacket_1+0x40 ;; ILL_SEND_TMR \ 00000960 00309AE5 LDR R3,[R10, #+0] \ 00000964 002090E5 LDR R2,[R0, #+0] \ 00000968 0C029FE5 LDR R0,??ProcessPacket_1+0x44 ;; ILL_KEYS_SEND \ 0000096C 001090E5 LDR R1,[R0, #+0] \ 00000970 08029FE5 LDR R0,??ProcessPacket_1+0x48 ;; ILL_DISP_SEND \ 00000974 000090E5 LDR R0,[R0, #+0] \ 00000978 ........ BL IlluminationOn \ 0000097C 690000EA B ??ProcessPacket_2 4988 } 4989 } 4990 } 4991 } 4992 } 4993 } 4994 break; 4995 case T_XTEXT_ACK: 4996 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_47: \ 00000980 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000984 0080B0E1 MOVS R8,R0 4997 if (t) \ 00000988 6600000A BEQ ??ProcessPacket_2 4998 { 4999 int i; 5000 int j; 5001 FreeXText(t); \ 0000098C ........ _BLF FreeXText,??FreeXText??rA 5002 i=p->pkt.data_len; \ 00000990 B660D4E1 LDRH R6,[R4, #+6] 5003 memcpy(t->xtext=malloc(i),p->data,i); \ 00000994 0600A0E1 MOV R0,R6 \ 00000998 140000EF SWI +20 \ 0000099C A40088E5 STR R0,[R8, #+164] \ 000009A0 0620A0E1 MOV R2,R6 \ 000009A4 081084E2 ADD R1,R4,#+8 \ 000009A8 1E0100EF SWI +286 5004 zeromem(s,256); \ 000009AC 401FA0E3 MOV R1,#+256 \ 000009B0 10008DE2 ADD R0,SP,#+16 \ 000009B4 1D0100EF SWI +285 5005 strcpy(s,t->name); \ 000009B8 141088E2 ADD R1,R8,#+20 \ 000009BC 10008DE2 ADD R0,SP,#+16 \ 000009C0 1A0000EF SWI +26 5006 strcat(s,":\n"); \ 000009C4 5B1F8FE2 ADR R1,??ProcessPacket_1 ;; ":\n" \ 000009C8 10008DE2 ADD R0,SP,#+16 \ 000009CC 170000EF SWI +23 5007 i=strlen(s); \ 000009D0 10008DE2 ADD R0,SP,#+16 \ 000009D4 1B0000EF SWI +27 5008 j=p->data[0]; \ 000009D8 0860D4E5 LDRB R6,[R4, #+8] \ 000009DC 0070A0E1 MOV R7,R0 5009 if (j>(255-i)) j=255-i; \ 000009E0 FF0067E2 RSB R0,R7,#+255 \ 000009E4 060050E1 CMP R0,R6 \ 000009E8 0060A0B1 MOVLT R6,R0 5010 strncpy(s+i,p->data+1,j); \ 000009EC 0620A0E1 MOV R2,R6 \ 000009F0 091084E2 ADD R1,R4,#+9 \ 000009F4 10008DE2 ADD R0,SP,#+16 \ 000009F8 000087E0 ADD R0,R7,R0 \ 000009FC 160100EF SWI +278 5011 i+=j; \ 00000A00 070086E0 ADD R0,R6,R7 5012 if (i<255) \ 00000A04 FF0050E3 CMP R0,#+255 \ 00000A08 100000AA BGE ??ProcessPacket_48 5013 { 5014 s[i]='\n'; \ 00000A0C 10108DE2 ADD R1,SP,#+16 \ 00000A10 0A20A0E3 MOV R2,#+10 \ 00000A14 0120C0E7 STRB R2,[R0, +R1] 5015 i++; \ 00000A18 0810D4E5 LDRB R1,[R4, #+8] \ 00000A1C B620D4E1 LDRH R2,[R4, #+6] \ 00000A20 010080E2 ADD R0,R0,#+1 5016 j=p->pkt.data_len-p->data[0]-1; 5017 if (j>(255-i)) j=255-i; 5018 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000A24 10308DE2 ADD R3,SP,#+16 \ 00000A28 012042E0 SUB R2,R2,R1 \ 00000A2C 016042E2 SUB R6,R2,#+1 \ 00000A30 FF2060E2 RSB R2,R0,#+255 \ 00000A34 060052E1 CMP R2,R6 \ 00000A38 0260A0B1 MOVLT R6,R2 \ 00000A3C 0620A0E1 MOV R2,R6 \ 00000A40 041081E0 ADD R1,R1,R4 \ 00000A44 091081E2 ADD R1,R1,#+9 \ 00000A48 030080E0 ADD R0,R0,R3 \ 00000A4C 160100EF SWI +278 5019 } 5020 5021 zeromem(s,256); \ ??ProcessPacket_48: \ 00000A50 401FA0E3 MOV R1,#+256 \ 00000A54 10008DE2 ADD R0,SP,#+16 \ 00000A58 1D0100EF SWI +285 5022 i=0; 5023 j=p->data[0]; \ 00000A5C 0860D4E5 LDRB R6,[R4, #+8] 5024 if (j>(255-i)) j=255-i; 5025 strncpy(s,p->data+1,j); \ 00000A60 091084E2 ADD R1,R4,#+9 \ 00000A64 10008DE2 ADD R0,SP,#+16 \ 00000A68 400F56E3 CMP R6,#+256 \ 00000A6C FF60A0A3 MOVGE R6,#+255 \ 00000A70 0620A0E1 MOV R2,R6 \ 00000A74 160100EF SWI +278 5026 i+=j; 5027 if (i<255) \ 00000A78 FF0056E3 CMP R6,#+255 \ 00000A7C 100000AA BGE ??ProcessPacket_49 5028 { 5029 s[i++]=13; \ 00000A80 10108DE2 ADD R1,SP,#+16 \ 00000A84 0D20A0E3 MOV R2,#+13 \ 00000A88 0120C6E7 STRB R2,[R6, +R1] \ 00000A8C 0810D4E5 LDRB R1,[R4, #+8] \ 00000A90 B620D4E1 LDRH R2,[R4, #+6] \ 00000A94 010086E2 ADD R0,R6,#+1 5030 j=p->pkt.data_len-p->data[0]-1; 5031 if (j>(255-i)) j=255-i; 5032 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000A98 10308DE2 ADD R3,SP,#+16 \ 00000A9C 012042E0 SUB R2,R2,R1 \ 00000AA0 016042E2 SUB R6,R2,#+1 \ 00000AA4 FF2060E2 RSB R2,R0,#+255 \ 00000AA8 060052E1 CMP R2,R6 \ 00000AAC 0260A0B1 MOVLT R6,R2 \ 00000AB0 0620A0E1 MOV R2,R6 \ 00000AB4 041081E0 ADD R1,R1,R4 \ 00000AB8 091081E2 ADD R1,R1,#+9 \ 00000ABC 030080E0 ADD R0,R0,R3 \ 00000AC0 160100EF SWI +278 5033 } 5034 AddStringToLog(t,0x03,s,x_status_change,0xFFFFFFFF,1); \ ??ProcessPacket_49: \ 00000AC4 0100A0E3 MOV R0,#+1 \ 00000AC8 01002DE9 PUSH {R0} \ 00000ACC 0310A0E3 MOV R1,#+3 \ 00000AD0 000060E2 RSB R0,R0,#+0 \ 00000AD4 01002DE9 PUSH {R0} \ 00000AD8 18208DE2 ADD R2,SP,#+24 \ 00000ADC C800A0E3 MOV R0,#+200 \ 00000AE0 400E80E3 ORR R0,R0,#0x400 \ 00000AE4 053080E0 ADD R3,R0,R5 \ 00000AE8 0800A0E1 MOV R0,R8 \ 00000AEC ........ BL AddStringToLog 5035 ReqAddMsgToChat(t); \ 00000AF0 0800A0E1 MOV R0,R8 \ 00000AF4 ........ BL ReqAddMsgToChat 5036 if (strlen(p->data)) // Если x-status не пустой \ 00000AF8 080084E2 ADD R0,R4,#+8 \ 00000AFC 1B0000EF SWI +27 \ 00000B00 000050E3 CMP R0,#+0 \ 00000B04 08D08DE2 ADD SP,SP,#+8 5037 RecountMenu(t, 1); \ 00000B08 0110A013 MOVNE R1,#+1 \ 00000B0C 0800A011 MOVNE R0,R8 \ 00000B10 6FFDFF1A BNE ??ProcessPacket_9 5038 else 5039 RecountMenu(NULL, 0); \ 00000B14 0010A0E3 MOV R1,#+0 \ 00000B18 0100A0E1 MOV R0,R1 \ 00000B1C 6CFDFFEA B ??ProcessPacket_9 5040 } 5041 break; 5042 case T_LASTPRIVACY: 5043 CurrentPrivateStatus=p->data[0]; \ ??ProcessPacket_50: \ 00000B20 0800D4E5 LDRB R0,[R4, #+8] \ 00000B24 7C0287E5 STR R0,[R7, #+636] 5044 break; 5045 } 5046 mfree(p); \ ??ProcessPacket_2: \ 00000B28 0400A0E1 MOV R0,R4 \ 00000B2C 150000EF SWI +21 5047 } \ 00000B30 4EDF8DE2 ADD SP,SP,#+312 \ 00000B34 F08FBDE8 POP {R4-R11,PC} ;; return \ ??ProcessPacket_1: \ 00000B38 3A0A0000 DC8 ":\n",+0 \ 00000B3C ........ DC32 ILL_RECV_FADE \ 00000B40 ........ DC32 MAINCSM + 112 \ 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 5048 5049 5050 IPC_REQ tmr_gipc; \ In segment CODE, align 4, keep-with-next 5051 void process_active_timer(void) 5052 { 5053 if (connect_state>2) \ process_active_timer: \ 00000000 ........ LDR R0,??DataTable202 ;; MAINCSM + 88 \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ LDR R5,??DataTable207 ;; S_ICONS \ 00000010 0040A0E3 MOV R4,#+0 \ 00000014 030050E3 CMP R0,#+3 \ 00000018 070000BA BLT ??process_active_timer_0 5054 { 5055 if (++tenseconds_to_ping>12) \ 0000001C B40295E5 LDR R0,[R5, #+692] \ 00000020 010080E2 ADD R0,R0,#+1 \ 00000024 B40285E5 STR R0,[R5, #+692] \ 00000028 0D0050E3 CMP R0,#+13 \ 0000002C 020000BA BLT ??process_active_timer_0 5056 { 5057 tenseconds_to_ping=0; 5058 SUBPROC((void *)do_ping); \ 00000030 58009FE5 LDR R0,??process_active_timer_1 ;; do_ping \ 00000034 B44285E5 STR R4,[R5, #+692] \ 00000038 710100EF SWI +369 5059 } 5060 } 5061 tmr_gipc.name_to=ipc_my_name; \ ??process_active_timer_0: \ 0000003C ........ LDR R1,??DataTable209 ;; Canvas \ 00000040 4A0EA0E3 MOV R0,#+1184 \ 00000044 012080E0 ADD R2,R0,R1 \ 00000048 802085E5 STR R2,[R5, #+128] 5062 tmr_gipc.name_from=ipc_my_name; \ 0000004C 010080E0 ADD R0,R0,R1 \ 00000050 840085E5 STR R0,[R5, #+132] 5063 tmr_gipc.data=NULL; \ 00000054 884085E5 STR R4,[R5, #+136] 5064 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_TENSECONDS,&tmr_gipc); \ 00000058 803085E2 ADD R3,R5,#+128 \ 0000005C 0420A0E3 MOV R2,#+4 \ 00000060 B010A0E3 MOV R1,#+176 \ 00000064 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000068 0900A0E3 MOV R0,#+9 \ 0000006C 420C80E3 ORR R0,R0,#0x4200 \ 00000070 000100EF SWI +256 5065 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000074 ........ LDR R2,??DataTable238 ;; process_active_timer \ 00000078 871EA0E3 MOV R1,#+2160 \ 0000007C EC00A0E3 MOV R0,#+236 \ 00000080 640D80E3 ORR R0,R0,#0x1900 \ 00000084 050080E0 ADD R0,R0,R5 \ 00000088 4D0000EF SWI +77 5066 } \ 0000008C 3080BDE8 POP {R4,R5,PC} ;; return \ ??process_active_timer_1: \ 00000090 ........ DC32 do_ping 5067 5068 GBSTMR tm22; \ In segment CODE, align 4, keep-with-next 5069 void OneSecTmr() 5070 { 5071 tmr_gipc.name_to=ipc_my_name; \ OneSecTmr: \ 00000000 ........ LDR R1,??DataTable209 ;; Canvas \ 00000004 10402DE9 PUSH {R4,LR} \ 00000008 ........ LDR R4,??DataTable207 ;; S_ICONS \ 0000000C 4A0EA0E3 MOV R0,#+1184 \ 00000010 012080E0 ADD R2,R0,R1 \ 00000014 802084E5 STR R2,[R4, #+128] 5072 tmr_gipc.name_from=ipc_my_name; \ 00000018 010080E0 ADD R0,R0,R1 \ 0000001C 840084E5 STR R0,[R4, #+132] 5073 tmr_gipc.data=NULL; \ 00000020 0000A0E3 MOV R0,#+0 \ 00000024 880084E5 STR R0,[R4, #+136] 5074 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_ONESECOND,&tmr_gipc); \ 00000028 803084E2 ADD R3,R4,#+128 \ 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 5075 GBS_StartTimerProc(&tm22,TMR_SECOND,OneSecTmr); \ 00000044 14209FE5 LDR R2,??OneSecTmr_0 ;; OneSecTmr \ 00000048 D810A0E3 MOV R1,#+216 \ 0000004C 9000A0E3 MOV R0,#+144 \ 00000050 780D80E3 ORR R0,R0,#0x1E00 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 4D0000EF SWI +77 5076 } \ 0000005C 1080BDE8 POP {R4,PC} ;; return \ ??OneSecTmr_0: \ 00000060 ........ DC32 OneSecTmr 5077 5078 5079 //=============================================================================================== 5080 5081 extern ADDUIN addonuin[]; 5082 5083 int itemFromDisp;//кол-во на экране 5084 int totalItems;//общее количество итемов 5085 int curpos=0;//позичия курсора 5086 int curpage=1;//текущая страница 5087 5088 const char clrSelect[4]={0xFF,0x00,0x00,0x60}; 5089 const char fntSelect[4]={0xFF,0xFF,0x00,0x60}; 5090 const char bordSelect[4]={0x00,0x00,0x00,0x60}; 5091 5092 const char clrNotSelect[4]={0x00,0x00,0x00,0x60}; 5093 const char bordNotSelect[4]={0x00,0x00,0x00,0x60}; 5094 const char fntNotSelect[4]={0xFF,0xFF,0xFF,0x60}; 5095 5096 char clrBlack[]={0x00,0x00,0x00,0x64}; 5097 char clrWhite[]={0xFF,0xFF,0xFF,0x64}; 5098 //char prozr[]={0x00,0x00,0x00,0x00}; 5099 const int font=FONT_SMALL; 5100 const char _t[]="%t"; 5101 5102 extern int ParseUINS(); 5103 int USE_ADD_UIN=0; 5104 #define CLIST_Y1 (YDISP+GetFontYSIZE(font)+8) 5105 \ In segment CODE, align 4, keep-with-next 5106 static void DrawList() 5107 { \ DrawList: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 5108 int font_y = GetFontYSIZE(font)+2;//16+2 5109 int scr_w=ScreenW(); 5110 int scr_h=ScreenH()-1; 5111 // int y2=scr_w-(GetFontYSIZE(font)+2); 5112 #ifdef ELKA 5113 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-GetFontYSIZE(font)-2)-1; 5114 #else 5115 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-GetFontYSIZE(font)-2); \ 00000004 ........ LDR R5,??DataTable214 ;; itemFromDisp \ 00000008 08D04DE2 SUB SP,SP,#+8 5116 #endif 5117 5118 LockSched(); 5119 totalItems = ParseUINS(); 5120 // Определяем количество страниц списка контактов 5121 int pageNum = sdiv(itemFromDisp, totalItems); 5122 if( itemFromDisp*pageNum < totalItems) pageNum++; //На всяк,вдруг еще страница нужна 5123 WSHDR* out_ws = AllocWS(256); 5124 int i=0; \ 0000000C ........ LDR R8,??DataTable209 ;; 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 000085E5 STR R0,[R5, #+0] \ 00000060 460100EF SWI +326 \ 00000064 ........ _BLF ParseUINS,??ParseUINS??rA \ 00000068 040085E5 STR R0,[R5, #+4] \ 0000006C 0010A0E1 MOV R1,R0 \ 00000070 000095E5 LDR R0,[R5, #+0] \ 00000074 0070A0E3 MOV R7,#+0 \ 00000078 B80000EF SWI +184 \ 0000007C 00008DE5 STR R0,[SP, #+0] \ 00000080 000095E5 LDR R0,[R5, #+0] \ 00000084 00109DE5 LDR R1,[SP, #+0] \ 00000088 910000E0 MUL R0,R1,R0 \ 0000008C 041095E5 LDR R1,[R5, #+4] \ 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 5125 int start_y; 5126 int x=1; 5127 while(i<=totalItems) \ ??DrawList_0: \ 000000AC 040095E5 LDR R0,[R5, #+4] \ 000000B0 070050E1 CMP R0,R7 \ 000000B4 5A0000BA BLT ??DrawList_1 5128 { 5129 if((i>=(curpage-1)*itemFromDisp) && (i<=itemFromDisp*curpage))//если те итемы который нужно выводить на экран со страници curpage \ 000000B8 ........ LDR R11,??DataTable249 ;; MAINCSM \ 000000BC 001095E5 LDR R1,[R5, #+0] \ 000000C0 88009BE5 LDR R0,[R11, #+136] \ 000000C4 012040E2 SUB R2,R0,#+1 \ 000000C8 910202E0 MUL R2,R1,R2 \ 000000CC 020057E1 CMP R7,R2 \ 000000D0 900101A0 MULGE R1,R0,R1 \ 000000D4 070051A1 CMPGE R1,R7 \ 000000D8 4B0000BA BLT ??DrawList_2 5130 { 5131 wsprintf(out_ws,"%d. %d",i+1,addonuin[i].uin);//имя закладки \ 000000DC ........ LDR R0,??DataTable216 ;; addonuin \ 000000E0 012087E2 ADD R2,R7,#+1 \ 000000E4 073290E7 LDR R3,[R0, +R7, LSL #+4] \ 000000E8 AD1F88E2 ADD R1,R8,#+692 \ 000000EC 0600A0E1 MOV R0,R6 \ 000000F0 240100EF SWI +292 5132 start_y = (CLIST_Y1 + (i - (curpage-1)*itemFromDisp)*font_y); //определяем начальное смещение по у \ 000000F4 0B00A0E3 MOV R0,#+11 \ 000000F8 C50100EF SWI +453 \ 000000FC 88109BE5 LDR R1,[R11, #+136] \ 00000100 002095E5 LDR R2,[R5, #+0] \ 00000104 011041E2 SUB R1,R1,#+1 \ 00000108 920101E0 MUL R1,R2,R1 \ 0000010C 011047E0 SUB R1,R7,R1 \ 00000110 940120E0 MLA R0,R4,R1,R0 \ 00000114 089080E2 ADD R9,R0,#+8 5133 5134 if(i==curpos) \ 00000118 04009DE5 LDR R0,[SP, #+4] \ 0000011C 01A040E2 SUB R10,R0,#+1 \ 00000120 84009BE5 LDR R0,[R11, #+132] \ 00000124 09B084E0 ADD R11,R4,R9 \ 00000128 000057E1 CMP R7,R0 \ 0000012C 1400001A BNE ??DrawList_3 5135 { 5136 DrawRoundedFrame(x-4,start_y,scr_w-1,start_y+font_y,5,5,0,bordSelect,clrSelect); \ 00000130 F800A0E3 MOV R0,#+248 \ 00000134 400E80E3 ORR R0,R0,#0x400 \ 00000138 080080E0 ADD R0,R0,R8 \ 0000013C 01002DE9 PUSH {R0} \ 00000140 0B30A0E1 MOV R3,R11 \ 00000144 0A20A0E1 MOV R2,R10 \ 00000148 0910A0E1 MOV R1,R9 \ 0000014C 500E88E2 ADD R0,R8,#+1280 \ 00000150 01002DE9 PUSH {R0} \ 00000154 0000A0E3 MOV R0,#+0 \ 00000158 01002DE9 PUSH {R0} \ 0000015C 0500A0E3 MOV R0,#+5 \ 00000160 01002DE9 PUSH {R0} \ 00000164 01002DE9 PUSH {R0} \ 00000168 0200E0E3 MVN R0,#+2 \ 0000016C 500100EF SWI +336 5137 DrawString(out_ws,x,start_y+2,scr_w-1,start_y+font_y,font,0,fntSelect,0); \ 00000170 0000A0E3 MOV R0,#+0 \ 00000174 01002DE9 PUSH {R0} \ 00000178 FC00A0E3 MOV R0,#+252 \ 0000017C 400E80E3 ORR R0,R0,#0x400 \ 00000180 140000EA B ??DrawList_4 5138 } 5139 else 5140 { 5141 DrawRoundedFrame(x,start_y+1,scr_w-1,start_y+font_y,0,0,0,bordNotSelect,clrNotSelect);//clrBlack \ ??DrawList_3: \ 00000184 0400A0E3 MOV R0,#+4 \ 00000188 500E80E3 ORR R0,R0,#0x500 \ 0000018C 080080E0 ADD R0,R0,R8 \ 00000190 01002DE9 PUSH {R0} \ 00000194 0B30A0E1 MOV R3,R11 \ 00000198 0A20A0E1 MOV R2,R10 \ 0000019C 011089E2 ADD R1,R9,#+1 \ 000001A0 0800A0E3 MOV R0,#+8 \ 000001A4 500E80E3 ORR R0,R0,#0x500 \ 000001A8 080080E0 ADD R0,R0,R8 \ 000001AC 01002DE9 PUSH {R0} \ 000001B0 0000A0E3 MOV R0,#+0 \ 000001B4 01002DE9 PUSH {R0} \ 000001B8 01002DE9 PUSH {R0} \ 000001BC 01002DE9 PUSH {R0} \ 000001C0 0100A0E3 MOV R0,#+1 \ 000001C4 500100EF SWI +336 5142 DrawString(out_ws,x,start_y+2,scr_w-1,start_y+font_y,font,0,fntNotSelect,0); \ 000001C8 0000A0E3 MOV R0,#+0 \ 000001CC 01002DE9 PUSH {R0} \ 000001D0 0C00A0E3 MOV R0,#+12 \ 000001D4 500E80E3 ORR R0,R0,#0x500 \ ??DrawList_4: \ 000001D8 080080E0 ADD R0,R0,R8 \ 000001DC 01002DE9 PUSH {R0} \ 000001E0 0A30A0E1 MOV R3,R10 \ 000001E4 022089E2 ADD R2,R9,#+2 \ 000001E8 0110A0E3 MOV R1,#+1 \ 000001EC 0000A0E3 MOV R0,#+0 \ 000001F0 01002DE9 PUSH {R0} \ 000001F4 0B00A0E3 MOV R0,#+11 \ 000001F8 01002DE9 PUSH {R0} \ 000001FC 00082DE9 PUSH {R11} \ 00000200 0600A0E1 MOV R0,R6 \ 00000204 4C0100EF SWI +332 \ 00000208 28D08DE2 ADD SP,SP,#+40 5143 } 5144 } 5145 i++; 5146 if(i>(pageNum*itemFromDisp)) break; \ ??DrawList_2: \ 0000020C 00009DE5 LDR R0,[SP, #+0] \ 00000210 001095E5 LDR R1,[R5, #+0] \ 00000214 017087E2 ADD R7,R7,#+1 \ 00000218 910000E0 MUL R0,R1,R0 \ 0000021C 070050E1 CMP R0,R7 \ 00000220 A1FFFFAA BGE ??DrawList_0 5147 } 5148 UnlockSched(); \ ??DrawList_1: \ 00000224 470100EF SWI +327 5149 FreeWS(out_ws); \ 00000228 0600A0E1 MOV R0,R6 \ 0000022C 290100EF SWI +297 5150 } \ 00000230 F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return 5151 5152 // Управление курсором \ In segment CODE, align 4, keep-with-next 5153 void MoveUp() 5154 { 5155 if(!itemFromDisp)return; \ MoveUp: \ 00000000 ........ LDR R1,??DataTable214 ;; itemFromDisp \ 00000004 10402DE9 PUSH {R4,LR} \ 00000008 000091E5 LDR R0,[R1, #+0] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} 5156 if(curpos<1) \ 00000014 ........ LDR R4,??DataTable249 ;; MAINCSM \ 00000018 842094E5 LDR R2,[R4, #+132] \ 0000001C 010052E3 CMP R2,#+1 \ 00000020 0A0000AA BGE ??MoveUp_0 5157 { 5158 curpos=totalItems; \ 00000024 041091E5 LDR R1,[R1, #+4] \ 00000028 841084E5 STR R1,[R4, #+132] 5159 if(itemFromDisp!=totalItems) \ 0000002C 010050E1 CMP R0,R1 \ 00000030 0300000A BEQ ??MoveUp_1 5160 { 5161 curpage = sdiv(itemFromDisp,totalItems)+1; \ 00000034 B80000EF SWI +184 \ 00000038 010080E2 ADD R0,R0,#+1 \ 0000003C 880084E5 STR R0,[R4, #+136] \ 00000040 1080BDE8 POP {R4,PC} 5162 } 5163 else 5164 curpage = 1; \ ??MoveUp_1: \ 00000044 0100A0E3 MOV R0,#+1 \ 00000048 880084E5 STR R0,[R4, #+136] \ 0000004C 1080BDE8 POP {R4,PC} 5165 } 5166 else 5167 { 5168 curpos--; \ ??MoveUp_0: \ 00000050 011042E2 SUB R1,R2,#+1 \ 00000054 882094E5 LDR R2,[R4, #+136] \ 00000058 841084E5 STR R1,[R4, #+132] \ 0000005C 012042E2 SUB R2,R2,#+1 \ 00000060 900203E0 MUL R3,R0,R2 \ 00000064 030051E1 CMP R1,R3 5169 if(curpos<(curpage-1)*itemFromDisp){ curpos++; curpage--; } \ 00000068 010081B2 ADDLT R0,R1,#+1 \ 0000006C 840084B5 STRLT R0,[R4, #+132] \ 00000070 882084B5 STRLT R2,[R4, #+136] \ 00000074 1080BDE8 POP {R4,PC} ;; return 5170 } 5171 // REDRAW(); 5172 } 5173 5174 \ In segment CODE, align 4, keep-with-next 5175 void MoveDown() 5176 { 5177 if(!totalItems)return; \ MoveDown: \ 00000000 ........ LDR R0,??DataTable214 ;; itemFromDisp \ 00000004 041090E5 LDR R1,[R0, #+4] \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 1EFF2F01 BXEQ LR 5178 curpos++; \ 00000010 ........ LDR R2,??DataTable249 ;; MAINCSM \ 00000014 843092E5 LDR R3,[R2, #+132] \ 00000018 013083E2 ADD R3,R3,#+1 \ 0000001C 843082E5 STR R3,[R2, #+132] 5179 if(curpos>totalItems) { curpos=0; curpage=1; } \ 00000020 030051E1 CMP R1,R3 \ 00000024 030000AA BGE ??MoveDown_0 \ 00000028 0010A0E3 MOV R1,#+0 \ 0000002C 841082E5 STR R1,[R2, #+132] \ 00000030 0110A0E3 MOV R1,#+1 \ 00000034 881082E5 STR R1,[R2, #+136] 5180 if(curpage*itemFromDispws1,LG_GRSTATESTRING,connect_state,RXstate,RX,TX,sendq_l,hostname,logmsg); \ 000000CC BC20A0E3 MOV R2,#+188 \ 000000D0 602D82E3 ORR R2,R2,#0x1800 \ 000000D4 0A2082E0 ADD R2,R2,R10 \ 000000D8 04002DE9 PUSH {R2} \ 000000DC 8C20A0E3 MOV R2,#+140 \ 000000E0 6C2D82E3 ORR R2,R2,#0x1B00 \ 000000E4 0A2082E0 ADD R2,R2,R10 \ 000000E8 04002DE9 PUSH {R2} \ 000000EC 602096E5 LDR R2,[R6, #+96] \ 000000F0 04002DE9 PUSH {R2} \ 000000F4 02002DE9 PUSH {R1} \ 000000F8 01002DE9 PUSH {R0} \ 000000FC 543096E5 LDR R3,[R6, #+84] \ 00000100 582096E5 LDR R2,[R6, #+88] \ 00000104 340094E5 LDR R0,[R4, #+52] \ 00000108 AF1F85E2 ADD R1,R5,#+700 \ 0000010C 240100EF SWI +292 5224 if(pm != pl) \ 00000110 18009DE5 LDR R0,[SP, #+24] \ 00000114 1C109DE5 LDR R1,[SP, #+28] \ 00000118 14D08DE2 ADD SP,SP,#+20 \ 0000011C 010050E1 CMP R0,R1 \ 00000120 3500000A BEQ ??method0_3 5225 { 5226 /* DrawRectangle(0,scr_h-4-2*GetFontYSIZE(FONT_SMALL_BOLD),scr_w-1,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-2,0, 5227 GetPaletteAdrByColorIndex(0), 5228 GetPaletteAdrByColorIndex(0));*/ 5229 // pos_status = ((scr_w-1) * pl) / pm; 5230 /* DrawRectangle(1,scr_h-4-2*GetFontYSIZE(FONT_SMALL_BOLD)+1,pos_status,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-3,0, 5231 GetPaletteAdrByColorIndex(14), 5232 GetPaletteAdrByColorIndex(14)); */ 5233 // wstrcatprintf(data->ws1,"\nLoading images..."); 5234 5235 DrawRectangle(rc.x,rc.y,rc.x2,rc.y2,0,BGPBcolor,BGPBcolor); \ 00000124 C0039FE5 LDR R0,??method0_0+0x10 ;; BGPBcolor \ 00000128 FC60DDE1 LDRSH R6,[SP, #+12] \ 0000012C 0010A0E1 MOV R1,R0 \ 00000130 02002DE9 PUSH {R1} \ 00000134 01002DE9 PUSH {R0} \ 00000138 0B30A0E1 MOV R3,R11 \ 0000013C 0920A0E1 MOV R2,R9 \ 00000140 0810A0E1 MOV R1,R8 \ 00000144 0000A0E3 MOV R0,#+0 \ 00000148 01002DE9 PUSH {R0} \ 0000014C 0600A0E1 MOV R0,R6 \ 00000150 B40100EF SWI +436 5236 pos_status = (((rc.x2-rc.x)-1) * pl) / pm; \ 00000154 14109DE5 LDR R1,[SP, #+20] \ 00000158 060049E0 SUB R0,R9,R6 \ 0000015C 010040E2 SUB R0,R0,#+1 \ 00000160 910000E0 MUL R0,R1,R0 \ 00000164 10109DE5 LDR R1,[SP, #+16] 5237 DrawRectangle(rc.x+2,rc.y+2,rc.x+pos_status+2,rc.y2-2,0,PBcolor,PBcolor); \ 00000168 02304BE2 SUB R3,R11,#+2 \ 0000016C ........ _BLF ??div32_a,??rA??div32_a \ 00000170 78039FE5 LDR R0,??method0_0+0x14 ;; PBcolor \ 00000174 0020A0E1 MOV R2,R0 \ 00000178 04002DE9 PUSH {R2} \ 0000017C 01002DE9 PUSH {R0} \ 00000180 0000A0E3 MOV R0,#+0 \ 00000184 01002DE9 PUSH {R0} \ 00000188 060081E0 ADD R0,R1,R6 \ 0000018C 022080E2 ADD R2,R0,#+2 \ 00000190 021088E2 ADD R1,R8,#+2 \ 00000194 020086E2 ADD R0,R6,#+2 \ 00000198 B40100EF SWI +436 5238 5239 if(total_smiles) \ 0000019C 50039FE5 LDR R0,??method0_0+0x18 ;; total_smiles \ 000001A0 001090E5 LDR R1,[R0, #+0] \ 000001A4 18D08DE2 ADD SP,SP,#+24 \ 000001A8 000051E3 CMP R1,#+0 \ 000001AC 0300000A BEQ ??method0_4 5240 { 5241 wstrcatprintf(data->ws1,"\nLoaded %d smiles",total_smiles); \ 000001B0 002090E5 LDR R2,[R0, #+0] \ 000001B4 340094E5 LDR R0,[R4, #+52] \ 000001B8 BD1F85E2 ADD R1,R5,#+756 \ 000001BC 160200EF SWI +534 5242 } 5243 if (xstatuses_load) \ ??method0_4: \ 000001C0 30039FE5 LDR R0,??method0_0+0x1C ;; xstatuses_load \ 000001C4 000090E5 LDR R0,[R0, #+0] \ 000001C8 000050E3 CMP R0,#+0 \ 000001CC 0A00000A BEQ ??method0_3 5244 { 5245 wstrcatprintf(data->ws1,"\nLoaded %d xstatus",total_xstatuses); \ 000001D0 ........ LDR R0,??DataTable227 ;; total_xstatuses \ 000001D4 C21F85E2 ADD R1,R5,#+776 \ 000001D8 002090E5 LDR R2,[R0, #+0] \ 000001DC 340094E5 LDR R0,[R4, #+52] \ 000001E0 160200EF SWI +534 \ 000001E4 040000EA B ??method0_3 5246 } 5247 } 5248 } 5249 else 5250 { 5251 wsprintf(data->ws1,"State: %d, RXstate: %d",connect_state,RXstate); \ ??method0_2: \ 000001E8 543096E5 LDR R3,[R6, #+84] \ 000001EC 582096E5 LDR R2,[R6, #+88] \ 000001F0 340094E5 LDR R0,[R4, #+52] \ 000001F4 C71F85E2 ADD R1,R5,#+796 \ 000001F8 240100EF SWI +292 5252 } 5253 5254 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: \ 000001FC 1700A0E3 MOV R0,#+23 \ 00000200 2E0100EF SWI +302 \ 00000204 0060A0E1 MOV R6,R0 \ 00000208 0000A0E3 MOV R0,#+0 \ 0000020C 2E0100EF SWI +302 \ 00000210 0080A0E1 MOV R8,R0 \ 00000214 0500A0E3 MOV R0,#+5 \ 00000218 C50100EF SWI +453 \ 0000021C 40002DE9 PUSH {R6} \ 00000220 00012DE9 PUSH {R8} \ 00000224 0010A0E3 MOV R1,#+0 \ 00000228 02002DE9 PUSH {R1} \ 0000022C 043047E2 SUB R3,R7,#+4 \ 00000230 0320A0E3 MOV R2,#+3 \ 00000234 0B10A0E3 MOV R1,#+11 \ 00000238 02002DE9 PUSH {R1} \ 0000023C 10109DE5 LDR R1,[SP, #+16] \ 00000240 041041E2 SUB R1,R1,#+4 \ 00000244 000041E0 SUB R0,R1,R0 \ 00000248 01002DE9 PUSH {R0} \ 0000024C 340094E5 LDR R0,[R4, #+52] \ 00000250 0310A0E3 MOV R1,#+3 \ 00000254 4C0100EF SWI +332 \ 00000258 14D08DE2 ADD SP,SP,#+20 \ 0000025C 270000EA B ??method0_5 5255 } 5256 else 5257 { 5258 wsprintf(data->ws1,"%t UIN!","Выберите"); \ ??method0_1: \ 00000260 340094E5 LDR R0,[R4, #+52] \ 00000264 CF2F85E2 ADD R2,R5,#+828 \ 00000268 CD1F85E2 ADD R1,R5,#+820 \ 0000026C 240100EF SWI +292 5259 DrawLine(0,CLIST_Y1-3,ScreenW()-1,CLIST_Y1-3,0,clrWhite); \ 00000270 0B00A0E3 MOV R0,#+11 \ 00000274 C50100EF SWI +453 \ 00000278 0080A0E1 MOV R8,R0 \ 0000027C 888100EF SWI +33160 \ 00000280 0090A0E1 MOV R9,R0 \ 00000284 0B00A0E3 MOV R0,#+11 \ 00000288 C50100EF SWI +453 \ 0000028C 401F86E2 ADD R1,R6,#+256 \ 00000290 02002DE9 PUSH {R1} \ 00000294 053088E2 ADD R3,R8,#+5 \ 00000298 012049E2 SUB R2,R9,#+1 \ 0000029C 0010A0E3 MOV R1,#+0 \ 000002A0 02002DE9 PUSH {R1} \ 000002A4 051080E2 ADD R1,R0,#+5 \ 000002A8 0000A0E3 MOV R0,#+0 \ 000002AC B30100EF SWI +435 5260 DrawString(data->ws1,2,YDISP+2,scr_w-1,YDISP+GetFontYSIZE(FONT_SMALL),FONT_SMALL,0,fntSelect,0); \ 000002B0 0B00A0E3 MOV R0,#+11 \ 000002B4 C50100EF SWI +453 \ 000002B8 0010A0E3 MOV R1,#+0 \ 000002BC 02002DE9 PUSH {R1} \ 000002C0 013047E2 SUB R3,R7,#+1 \ 000002C4 0220A0E3 MOV R2,#+2 \ 000002C8 FC10A0E3 MOV R1,#+252 \ 000002CC 401E81E3 ORR R1,R1,#0x400 \ 000002D0 051081E0 ADD R1,R1,R5 \ 000002D4 02002DE9 PUSH {R1} \ 000002D8 0010A0E3 MOV R1,#+0 \ 000002DC 02002DE9 PUSH {R1} \ 000002E0 0B10A0E3 MOV R1,#+11 \ 000002E4 02002DE9 PUSH {R1} \ 000002E8 01002DE9 PUSH {R0} \ 000002EC 340094E5 LDR R0,[R4, #+52] \ 000002F0 0210A0E3 MOV R1,#+2 \ 000002F4 4C0100EF SWI +332 5261 DrawList(); \ 000002F8 ........ BL DrawList \ 000002FC 1CD08DE2 ADD SP,SP,#+28 5262 } 5263 5264 if(IsInvertSoftKey) \ ??method0_5: \ 00000300 00109DE5 LDR R1,[SP, #+0] \ 00000304 380094E5 LDR R0,[R4, #+56] \ 00000308 048041E2 SUB R8,R1,#+4 \ 0000030C ........ LDR R1,??DataTable230 ;; IsInvertSoftKey \ 00000310 C760A0E1 ASR R6,R7,#+1 \ 00000314 001091E5 LDR R1,[R1, #+0] \ 00000318 047047E2 SUB R7,R7,#+4 \ 0000031C D29FA0E3 MOV R9,#+840 \ 00000320 000051E3 CMP R1,#+0 \ 00000324 3600000A BEQ ??method0_6 5265 { 5266 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 00000328 052089E0 ADD R2,R9,R5 \ 0000032C 181085E2 ADD R1,R5,#+24 \ 00000330 240100EF SWI +292 5267 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD),scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 00000334 1700A0E3 MOV R0,#+23 \ 00000338 2E0100EF SWI +302 \ 0000033C 0090A0E1 MOV R9,R0 \ 00000340 0000A0E3 MOV R0,#+0 \ 00000344 2E0100EF SWI +302 \ 00000348 00B0A0E1 MOV R11,R0 \ 0000034C 0500A0E3 MOV R0,#+5 \ 00000350 C50100EF SWI +453 \ 00000354 00022DE9 PUSH {R9} \ 00000358 00082DE9 PUSH {R11} \ 0000035C 0410A0E3 MOV R1,#+4 \ 00000360 02002DE9 PUSH {R1} \ 00000364 0730A0E1 MOV R3,R7 \ 00000368 002048E0 SUB R2,R8,R0 \ 0000036C 0510A0E3 MOV R1,#+5 \ 00000370 02002DE9 PUSH {R1} \ 00000374 0810A0E1 MOV R1,R8 \ 00000378 02002DE9 PUSH {R1} \ 0000037C 380094E5 LDR R0,[R4, #+56] \ 00000380 0610A0E1 MOV R1,R6 \ 00000384 4C0100EF SWI +332 5268 5269 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ 00000388 A0029AE5 LDR R0,[R10, #+672] \ 0000038C 14D08DE2 ADD SP,SP,#+20 \ 00000390 000050E3 CMP R0,#+0 \ 00000394 380094E5 LDR R0,[R4, #+56] \ 00000398 D42F8512 ADDNE R2,R5,#+848 \ 0000039C 21208502 ADDEQ R2,R5,#+33 \ 000003A0 181085E2 ADD R1,R5,#+24 \ 000003A4 240100EF SWI +292 5270 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 000003A8 1700A0E3 MOV R0,#+23 \ 000003AC 2E0100EF SWI +302 \ 000003B0 0050A0E1 MOV R5,R0 \ 000003B4 0000A0E3 MOV R0,#+0 \ 000003B8 2E0100EF SWI +302 \ 000003BC 0070A0E1 MOV R7,R0 \ 000003C0 0500A0E3 MOV R0,#+5 \ 000003C4 C50100EF SWI +453 \ 000003C8 20002DE9 PUSH {R5} \ 000003CC 80002DE9 PUSH {R7} \ 000003D0 0110A0E3 MOV R1,#+1 \ 000003D4 02002DE9 PUSH {R1} \ 000003D8 0630A0E1 MOV R3,R6 \ 000003DC 002048E0 SUB R2,R8,R0 \ 000003E0 0510A0E3 MOV R1,#+5 \ 000003E4 02002DE9 PUSH {R1} \ 000003E8 0810A0E1 MOV R1,R8 \ 000003EC 02002DE9 PUSH {R1} \ 000003F0 380094E5 LDR R0,[R4, #+56] \ 000003F4 0310A0E3 MOV R1,#+3 \ 000003F8 4C0100EF SWI +332 \ 000003FC 14D08DE2 ADD SP,SP,#+20 \ 00000400 FF8FBDE8 POP {R0-R11,PC} 5271 } 5272 else 5273 { 5274 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ ??method0_6: \ 00000404 A0129AE5 LDR R1,[R10, #+672] \ 00000408 000051E3 CMP R1,#+0 \ 0000040C D42F8512 ADDNE R2,R5,#+848 \ 00000410 21208502 ADDEQ R2,R5,#+33 \ 00000414 181085E2 ADD R1,R5,#+24 \ 00000418 240100EF SWI +292 5275 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD),scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 0000041C 1700A0E3 MOV R0,#+23 \ 00000420 2E0100EF SWI +302 \ 00000424 00A0A0E1 MOV R10,R0 \ 00000428 0000A0E3 MOV R0,#+0 \ 0000042C 2E0100EF SWI +302 \ 00000430 00B0A0E1 MOV R11,R0 \ 00000434 0500A0E3 MOV R0,#+5 \ 00000438 C50100EF SWI +453 \ 0000043C 00042DE9 PUSH {R10} \ 00000440 00082DE9 PUSH {R11} \ 00000444 0410A0E3 MOV R1,#+4 \ 00000448 02002DE9 PUSH {R1} \ 0000044C 0730A0E1 MOV R3,R7 \ 00000450 002048E0 SUB R2,R8,R0 \ 00000454 0510A0E3 MOV R1,#+5 \ 00000458 02002DE9 PUSH {R1} \ 0000045C 0810A0E1 MOV R1,R8 \ 00000460 02002DE9 PUSH {R1} \ 00000464 380094E5 LDR R0,[R4, #+56] \ 00000468 0610A0E1 MOV R1,R6 \ 0000046C 4C0100EF SWI +332 5276 5277 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 00000470 380094E5 LDR R0,[R4, #+56] \ 00000474 052089E0 ADD R2,R9,R5 \ 00000478 181085E2 ADD R1,R5,#+24 \ 0000047C 240100EF SWI +292 5278 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 00000480 1700A0E3 MOV R0,#+23 \ 00000484 2E0100EF SWI +302 \ 00000488 0050A0E1 MOV R5,R0 \ 0000048C 0000A0E3 MOV R0,#+0 \ 00000490 2E0100EF SWI +302 \ 00000494 0070A0E1 MOV R7,R0 \ 00000498 0500A0E3 MOV R0,#+5 \ 0000049C C50100EF SWI +453 \ 000004A0 20002DE9 PUSH {R5} \ 000004A4 80002DE9 PUSH {R7} \ 000004A8 0110A0E3 MOV R1,#+1 \ 000004AC 02002DE9 PUSH {R1} \ 000004B0 0630A0E1 MOV R3,R6 \ 000004B4 002048E0 SUB R2,R8,R0 \ 000004B8 0510A0E3 MOV R1,#+5 \ 000004BC 02002DE9 PUSH {R1} \ 000004C0 0810A0E1 MOV R1,R8 \ 000004C4 02002DE9 PUSH {R1} \ 000004C8 380094E5 LDR R0,[R4, #+56] \ 000004CC 0310A0E3 MOV R1,#+3 \ 000004D0 4C0100EF SWI +332 \ 000004D4 28D08DE2 ADD SP,SP,#+40 5279 } 5280 /* 5281 wsprintf(data->ws2,"%d %s",addonuin[0].uin,addonuin[0].pass); 5282 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)); 5283 */ 5284 5285 } \ 000004D8 FF8FBDE8 POP {R0-R11,PC} ;; return \ ??method0_0: \ 000004DC ........ DC32 pictures_max \ 000004E0 ........ DC32 PBRECT \ 000004E4 ........ DC32 pictures_loaded \ 000004E8 ........ DC32 IsShowInfo \ 000004EC ........ DC32 BGPBcolor \ 000004F0 ........ DC32 PBcolor \ 000004F4 ........ DC32 total_smiles \ 000004F8 ........ DC32 xstatuses_load 5286 \ In segment CODE, align 4, keep-with-next 5287 void method1(MAIN_GUI *data,void *(*malloc_adr)(int)) 5288 { \ method1: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 5289 data->ws1=AllocWS(256); \ 00000008 400FA0E3 MOV R0,#+256 \ 0000000C 250100EF SWI +293 \ 00000010 340084E5 STR R0,[R4, #+52] 5290 data->ws2=AllocWS(256); \ 00000014 400FA0E3 MOV R0,#+256 \ 00000018 250100EF SWI +293 \ 0000001C 380084E5 STR R0,[R4, #+56] 5291 data->gui.state=1; \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 0C00C4E5 STRB R0,[R4, #+12] 5292 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 5293 \ In segment CODE, align 4, keep-with-next 5294 void method2(MAIN_GUI *data,void (*mfree_adr)(void *)) 5295 { \ method2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 5296 FreeWS(data->ws1); \ 00000008 340094E5 LDR R0,[R4, #+52] \ 0000000C 290100EF SWI +297 5297 FreeWS(data->ws2); \ 00000010 380094E5 LDR R0,[R4, #+56] \ 00000014 290100EF SWI +297 5298 data->gui.state=0; \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 0C00C4E5 STRB R0,[R4, #+12] 5299 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 5300 \ In segment CODE, align 4, keep-with-next 5301 void method3(MAIN_GUI *data,void *(*malloc_adr)(int),void (*mfree_adr)(void *)) 5302 { \ method3: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 5303 DisableIDLETMR(); \ 00000008 7F0100EF SWI +383 5304 data->gui.state=2; \ 0000000C 0200A0E3 MOV R0,#+2 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 5305 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 5306 \ In segment CODE, align 4, keep-with-next 5307 void method4(MAIN_GUI *data,void (*mfree_adr)(void *)) 5308 { 5309 if (data->gui.state!=2) \ method4: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 5310 return; 5311 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 5312 } \ 00000010 1EFF2FE1 BX LR ;; return 5313 \ In segment CODE, align 4, keep-with-next 5314 int method5(MAIN_GUI *data,GUI_MSG *msg) 5315 { \ method5: \ 00000000 F24F2DE9 PUSH {R1,R4-R11,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 5316 DirectRedrawGUI(); 5317 if (msg->gbsmsg->msg==KEY_DOWN) \ 00000008 9340A0E3 MOV R4,#+147 \ 0000000C 404F84E3 ORR R4,R4,#0x100 \ 00000010 3F0100EF SWI +319 \ 00000014 08009DE5 LDR R0,[SP, #+8] \ 00000018 041090E5 LDR R1,[R0, #+4] \ 0000001C 040091E5 LDR R0,[R1, #+4] \ 00000020 040050E1 CMP R0,R4 \ 00000024 5400001A BNE ??method5_1 5318 { 5319 switch(msg->gbsmsg->submess) \ 00000028 ........ LDR R5,??DataTable247 ;; S_ICONS \ 0000002C ........ LDR R0,??DataTable230 ;; IsInvertSoftKey \ 00000030 081091E5 LDR R1,[R1, #+8] \ 00000034 A02295E5 LDR R2,[R5, #+672] \ 00000038 003090E5 LDR R3,[R0, #+0] \ 0000003C ........ LDR R6,??DataTable246 ;; create_connect \ 00000040 ........ LDR R8,??DataTable249 ;; MAINCSM \ 00000044 DC00A0E3 MOV R0,#+220 \ 00000048 640D80E3 ORR R0,R0,#0x1900 \ 0000004C 057080E0 ADD R7,R0,R5 \ 00000050 ........ LDR R0,??DataTable233 ;; WriteDefSettings \ 00000054 0390A0E3 MOV R9,#+3 \ 00000058 01A0A0E3 MOV R10,#+1 \ 0000005C 00B0A0E3 MOV R11,#+0 \ 00000060 011041E2 SUB R1,R1,#+1 \ 00000064 330051E3 CMP R1,#+51 \ 00000068 4300008A BHI ??method5_1 \ 0000006C 01CF8FE2 ADR R12,??method5_0 \ 00000070 01C0DCE7 LDRB R12,[R12, R1] \ 00000074 0CF18FE0 ADD PC,PC,R12, LSL #+2 \ ??method5_0: \ 00000078 0E404017 DC8 +14,+64,+64,+23 \ 0000007C 40404040 DC8 +64,+64,+64,+64 \ 00000080 40401D40 DC8 +64,+64,+29,+64 \ 00000084 40404040 DC8 +64,+64,+64,+64 \ 00000088 40404040 DC8 +64,+64,+64,+64 \ 0000008C 40404040 DC8 +64,+64,+64,+64 \ 00000090 400C4040 DC8 +64,+12,+64,+64 \ 00000094 40404040 DC8 +64,+64,+64,+64 \ 00000098 40404040 DC8 +64,+64,+64,+64 \ 0000009C 40404040 DC8 +64,+64,+64,+64 \ 000000A0 40404040 DC8 +64,+64,+64,+64 \ 000000A4 40404028 DC8 +64,+64,+64,+40 \ 000000A8 2B30353B DC8 +43,+48,+53,+59 5320 { 5321 case ENTER_BUTTON: Enter(); break; \ ??method5_2: \ 000000AC ........ BL Enter \ 000000B0 310000EA B ??method5_1 5322 case LEFT_SOFT: 5323 if(IsInvertSoftKey) \ ??method5_3: \ 000000B4 000053E3 CMP R3,#+0 \ 000000B8 0400000A BEQ ??method5_4 5324 { 5325 if (cltop) create_contactlist_menu(); \ 000000BC 000052E3 CMP R2,#+0 \ 000000C0 0000000A BEQ ??method5_5 \ 000000C4 ........ BL create_contactlist_menu 5326 unhooked2=1; \ ??method5_5: \ 000000C8 70A088E5 STR R10,[R8, #+112] \ 000000CC 2A0000EA B ??method5_1 5327 } 5328 else return 1; \ ??method5_4: \ 000000D0 0100A0E3 MOV R0,#+1 \ 000000D4 FE8FBDE8 POP {R1-R11,PC} 5329 // if (cltop) remake_clmenu(); 5330 break; 5331 case RIGHT_SOFT: 5332 if(IsInvertSoftKey) \ ??method5_6: \ 000000D8 000053E3 CMP R3,#+0 \ 000000DC FBFFFF1A BNE ??method5_4 5333 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 5334 else 5335 { 5336 if (cltop) create_contactlist_menu(); \ 000000E0 000052E3 CMP R2,#+0 \ 000000E4 0000000A BEQ ??method5_7 \ 000000E8 ........ BL create_contactlist_menu 5337 unhooked2=1; \ ??method5_7: \ 000000EC 70A088E5 STR R10,[R8, #+112] 5338 } 5339 case GREEN_BUTTON: 5340 disautorecconect=0; \ ??method5_8: \ 000000F0 6CB285E5 STR R11,[R5, #+620] 5341 if ((connect_state==0)&&(sock==-1)) \ 000000F4 580098E5 LDR R0,[R8, #+88] \ 000000F8 000050E3 CMP R0,#+0 \ 000000FC 5C009805 LDREQ R0,[R8, #+92] \ 00000100 01007003 CMNEQ R0,#+1 \ 00000104 1C00001A BNE ??method5_1 5342 { 5343 GBS_DelTimer(&reconnect_tmr); \ ??method5_9: \ 00000108 0700A0E1 MOV R0,R7 \ 0000010C 8C0100EF SWI +396 5344 DNR_TRIES=3; \ 00000110 7C9088E5 STR R9,[R8, #+124] 5345 SUBPROC((void *)create_connect); \ 00000114 0600A0E1 MOV R0,R6 \ 00000118 160000EA B ??method5_10 5346 } 5347 break; 5348 case '0': 5349 SUBPROC((void*)end_socket); \ ??method5_11: \ 0000011C ........ LDR R0,??DataTable242 ;; end_socket \ 00000120 710100EF SWI +369 5350 GBS_DelTimer(&reconnect_tmr); \ 00000124 F7FFFFEA B ??method5_9 5351 DNR_TRIES=3; 5352 SUBPROC((void *)create_connect); 5353 break; 5354 5355 //------------------------------------------------------// 5356 5357 case '1': 5358 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??method5_12: \ 00000128 701295E5 LDR R1,[R5, #+624] \ 0000012C 000051E3 CMP R1,#+0 \ 00000130 00A0A013 MOVNE R10,#+0 \ 00000134 70A285E5 STR R10,[R5, #+624] 5359 SUBPROC((void*)WriteDefSettings); \ 00000138 0E0000EA B ??method5_10 5360 break; 5361 case '2': 5362 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??method5_13: \ 0000013C 281295E5 LDR R1,[R5, #+552] \ 00000140 000051E3 CMP R1,#+0 \ 00000144 00A0A013 MOVNE R10,#+0 \ 00000148 28A285E5 STR R10,[R5, #+552] 5363 SUBPROC((void*)WriteDefSettings); \ 0000014C 090000EA B ??method5_10 5364 break; 5365 case '3': 5366 if(CurrentPrivateStatus!=1) \ ??method5_14: \ 00000150 7C0295E5 LDR R0,[R5, #+636] \ 00000154 010050E3 CMP R0,#+1 \ 00000158 0300A003 MOVEQ R0,#+3 5367 SetPrivateStatus(1);//Инвиз \ 0000015C 0100A013 MOVNE R0,#+1 \ 00000160 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA \ 00000164 040000EA B ??method5_1 5368 else 5369 SetPrivateStatus(3); 5370 break; 5371 case '4': 5372 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??method5_15: \ 00000168 141295E5 LDR R1,[R5, #+532] \ 0000016C 000051E3 CMP R1,#+0 \ 00000170 00A0A013 MOVNE R10,#+0 \ 00000174 14A285E5 STR R10,[R5, #+532] 5373 SUBPROC((void*)WriteDefSettings); \ ??method5_10: \ 00000178 710100EF SWI +369 5374 break; 5375 } 5376 } 5377 5378 if(msg->gbsmsg->msg==LONG_PRESS || msg->gbsmsg->msg==KEY_DOWN) \ ??method5_1: \ 0000017C 08009DE5 LDR R0,[SP, #+8] \ 00000180 022084E2 ADD R2,R4,#+2 \ 00000184 040090E5 LDR R0,[R0, #+4] \ 00000188 041090E5 LDR R1,[R0, #+4] \ 0000018C 020051E1 CMP R1,R2 \ 00000190 04005111 CMPNE R1,R4 \ 00000194 0900001A BNE ??method5_16 5379 { 5380 switch(msg->gbsmsg->submess) \ 00000198 080090E5 LDR R0,[R0, #+8] \ 0000019C 3B0050E2 SUBS R0,R0,#+59 \ 000001A0 0200000A BEQ ??method5_17 \ 000001A4 010050E2 SUBS R0,R0,#+1 \ 000001A8 0300000A BEQ ??method5_18 \ 000001AC 000000EA B ??method5_19 5381 { 5382 case UP_BUTTON: MoveUp(); break; \ ??method5_17: \ 000001B0 ........ BL MoveUp \ ??method5_19: \ 000001B4 0000A0E3 MOV R0,#+0 \ 000001B8 FE8FBDE8 POP {R1-R11,PC} 5383 case DOWN_BUTTON: MoveDown(); break; \ ??method5_18: \ 000001BC ........ BL MoveDown 5384 } 5385 } 5386 5387 return(0); \ ??method5_16: \ 000001C0 0000A0E3 MOV R0,#+0 \ 000001C4 FE8FBDE8 POP {R1-R11,PC} ;; return 5388 } 5389 \ In segment CODE, align 4, keep-with-next 5390 int method8(void){return(0);} \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 5391 \ In segment CODE, align 4, keep-with-next 5392 int method9(void){return(0);} \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 5393 5394 const void * const gui_methods[11]={ 5395 (void *)method0, //Redraw 5396 (void *)method1, //Create 5397 (void *)method2, //Close 5398 (void *)method3, //Focus 5399 (void *)method4, //Unfocus 5400 (void *)method5, //OnKey 5401 0, 5402 (void *)kill_data, //method7, //Destroy 5403 (void *)method8, 5404 (void *)method9, 5405 0 5406 }; 5407 5408 \ In segment CODE, align 4, keep-with-next 5409 int my_keyhook(int key, int m) 5410 { \ my_keyhook: \ 00000000 30402DE9 PUSH {R4,R5,LR} 5411 if(m==KEY_DOWN) \ 00000004 9300A0E3 MOV R0,#+147 \ 00000008 400F80E3 ORR R0,R0,#0x100 \ 0000000C 000051E1 CMP R1,R0 \ 00000010 0F00001A BNE ??my_keyhook_0 5412 { 5413 #ifdef ELKA 5414 if ((key==CAMERA_BUTTON)&&(!IsUnlocked())) 5415 { 5416 GBS_StopTimer(&away_tmr); 5417 msg_away_timer=AUTO_ENGADE*12; 5418 away_timer(); 5419 main_d=1; 5420 } 5421 else 5422 { 5423 #endif 5424 if(Reset_timer) \ 00000014 40009FE5 LDR R0,??my_keyhook_1 ;; Reset_timer \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 3080BD08 POPEQ {R4,R5,PC} 5425 { 5426 msg_away_timer=0; \ 00000024 34009FE5 LDR R0,??my_keyhook_1+0x4 ;; MAINCSM + 80 5427 away_m=0; \ 00000028 ........ LDR R5,??DataTable247 ;; S_ICONS \ 0000002C 0040A0E3 MOV R4,#+0 \ 00000030 004080E5 STR R4,[R0, #+0] 5428 if(change_back_status) \ 00000034 480295E5 LDR R0,[R5, #+584] \ 00000038 404285E5 STR R4,[R5, #+576] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 3080BD08 POPEQ {R4,R5,PC} 5429 { 5430 CurrentStatus=status_rem; \ 00000044 440295E5 LDR R0,[R5, #+580] \ 00000048 300285E5 STR R0,[R5, #+560] 5431 set_my_status(); \ 0000004C ........ BL set_my_status 5432 change_back_status=0; \ 00000050 484285E5 STR R4,[R5, #+584] 5433 } 5434 } 5435 #ifdef ELKA 5436 } 5437 #endif 5438 } 5439 return 0; \ ??my_keyhook_0: \ 00000054 0000A0E3 MOV R0,#+0 \ 00000058 3080BDE8 POP {R4,R5,PC} ;; return \ ??my_keyhook_1: \ 0000005C ........ DC32 Reset_timer \ 00000060 ........ DC32 MAINCSM + 80 5440 } \ In segment DATA_C, align 4, align-sorted 5441 5442 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" 5443 \ In segment CODE, align 4, keep-with-next 5444 void maincsm_oncreate(CSM_RAM *data) 5445 { \ maincsm_oncreate: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0050A0E1 MOV R5,R0 5446 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000008 4000A0E3 MOV R0,#+64 5447 MAIN_CSM*csm=(MAIN_CSM*)data; 5448 zeromem(main_gui,sizeof(MAIN_GUI)); 5449 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 F8409FE5 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] 5450 main_gui->gui.canvas=(void *)(&Canvas); \ 00000044 004086E5 STR R4,[R6, #+0] 5451 // main_gui->gui.flag30=2; 5452 main_gui->gui.methods=(void *)gui_methods; \ 00000048 510E84E2 ADD R0,R4,#+1296 \ 0000004C 040086E5 STR R0,[R6, #+4] 5453 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 00000050 158000EF SWI +32789 \ 00000054 200086E5 STR R0,[R6, #+32] 5454 csm->csm.state=0; \ 00000058 107085E5 STR R7,[R5, #+16] 5455 csm->csm.unk1=0; \ 0000005C 147085E5 STR R7,[R5, #+20] 5456 maingui_id=csm->gui_id=CreateGUI(main_gui); \ 00000060 0600A0E1 MOV R0,R6 5457 ews=AllocWS(16384); 5458 // MutexCreate(&contactlist_mtx); 5459 DNR_TRIES=3; \ 00000064 ........ LDR R6,??DataTable249 ;; MAINCSM \ 00000068 370100EF SWI +311 \ 0000006C 280085E5 STR R0,[R5, #+40] \ 00000070 ........ LDR R5,??DataTable247 ;; S_ICONS \ 00000074 200285E5 STR R0,[R5, #+544] \ 00000078 400CA0E3 MOV R0,#+16384 \ 0000007C 250100EF SWI +293 \ 00000080 380285E5 STR R0,[R5, #+568] \ 00000084 0300A0E3 MOV R0,#+3 \ 00000088 7C0086E5 STR R0,[R6, #+124] 5460 // SUBPROC((void *)InitSmiles); 5461 // SUBPROC((void *)create_connect); 5462 wsBuffer=AllocWS(4096); \ 0000008C 400DA0E3 MOV R0,#+4096 \ 00000090 250100EF SWI +293 \ 00000094 F80185E5 STR R0,[R5, #+504] 5463 OneSecTmr(); \ 00000098 ........ BL OneSecTmr 5464 5465 if(ParseUINS()!=0) \ 0000009C ........ _BLF ParseUINS,??ParseUINS??rA \ 000000A0 000050E3 CMP R0,#+0 \ 000000A4 0200000A BEQ ??maincsm_oncreate_1 5466 { 5467 USE_ADD_UIN=1; \ 000000A8 0100A0E3 MOV R0,#+1 \ 000000AC 8C0086E5 STR R0,[R6, #+140] 5468 InitXStatusesImg(); \ 000000B0 ........ _BLF InitXStatusesImg,??InitXStatusesImg??rA 5469 } 5470 5471 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ ??maincsm_oncreate_1: \ 000000B4 ........ LDR R2,??DataTable238 ;; process_active_timer \ 000000B8 871EA0E3 MOV R1,#+2160 \ 000000BC EC00A0E3 MOV R0,#+236 \ 000000C0 640D80E3 ORR R0,R0,#0x1900 \ 000000C4 050080E0 ADD R0,R0,R5 \ 000000C8 4D0000EF SWI +77 5472 5473 if(!USE_ADD_UIN) \ 000000CC 8C0096E5 LDR R0,[R6, #+140] \ 000000D0 000050E3 CMP R0,#+0 \ 000000D4 F080BD18 POPNE {R4-R7,PC} 5474 { 5475 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000000D8 ........ LDR R0,??DataTable239 ;; UIN \ 000000DC 1E1084E2 ADD R1,R4,#+30 \ 000000E0 002090E5 LDR R2,[R0, #+0] \ 000000E4 A600A0E3 MOV R0,#+166 \ 000000E8 400E80E3 ORR R0,R0,#0x400 \ 000000EC 040080E0 ADD R0,R0,R4 \ 000000F0 160000EF SWI +22 5476 gipc.name_to=ipc_my_name; \ 000000F4 4A0EA0E3 MOV R0,#+1184 \ 000000F8 041080E0 ADD R1,R0,R4 \ 000000FC 741085E5 STR R1,[R5, #+116] 5477 gipc.name_from=ipc_my_name; \ 00000100 040080E0 ADD R0,R0,R4 \ 00000104 780085E5 STR R0,[R5, #+120] 5478 gipc.data=(void *)-1; \ 00000108 0700E0E1 MVN R0,R7 \ 0000010C 7C0085E5 STR R0,[R5, #+124] 5479 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 00000110 743085E2 ADD R3,R5,#+116 \ 00000114 0120A0E3 MOV R2,#+1 \ 00000118 B010A0E3 MOV R1,#+176 \ 0000011C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000120 0900A0E3 MOV R0,#+9 \ 00000124 420C80E3 ORR R0,R0,#0x4200 \ 00000128 000100EF SWI +256 5480 } 5481 /* 5482 InitXStatusesImg(); 5483 //InitSmiles(); Это вызовется из InitXStatusesImg 5484 create_connect(); 5485 silenthide=1; 5486 gipc.name_to=ipc_xtask_name; 5487 gipc.name_from=ipc_my_name; 5488 gipc.data=0; 5489 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); 5490 */ 5491 } \ 0000012C F080BDE8 POP {R4-R7,PC} ;; return \ ??maincsm_oncreate_0: \ 00000130 ........ DC32 Canvas 5492 \ In segment CODE, align 4, keep-with-next 5493 void maincsm_onclose(CSM_RAM *csm) 5494 { \ maincsm_onclose: \ 00000000 10402DE9 PUSH {R4,LR} 5495 WriteDefSettings(); 5496 FreeWS(wsBuffer); \ 00000004 ........ LDR R4,??DataTable247 ;; S_ICONS \ 00000008 ........ BL WriteDefSettings \ 0000000C F80194E5 LDR R0,[R4, #+504] \ 00000010 290100EF SWI +297 5497 //GBS_DelTimer(&tmr_dorecv); 5498 RemoveKeybMsgHook((void *)my_keyhook); \ 00000014 ........ LDR R0,??DataTable241 ;; my_keyhook \ 00000018 2D0100EF SWI +301 5499 GBS_DelTimer(&tmr_active); \ 0000001C EC00A0E3 MOV R0,#+236 \ 00000020 640D80E3 ORR R0,R0,#0x1900 \ 00000024 040080E0 ADD R0,R0,R4 \ 00000028 8C0100EF SWI +396 5500 GBS_DelTimer(&tmr_vibra); \ 0000002C CC00A0E3 MOV R0,#+204 \ 00000030 640D80E3 ORR R0,R0,#0x1900 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 8C0100EF SWI +396 5501 GBS_DelTimer(&reconnect_tmr); \ 0000003C DC00A0E3 MOV R0,#+220 \ 00000040 640D80E3 ORR R0,R0,#0x1900 \ 00000044 040080E0 ADD R0,R0,R4 \ 00000048 8C0100EF SWI +396 5502 GBS_DelTimer(&tmr_illumination); \ 0000004C BC00A0E3 MOV R0,#+188 \ 00000050 640D80E3 ORR R0,R0,#0x1900 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 8C0100EF SWI +396 5503 GBS_DelTimer(&tm22); \ 0000005C 9000A0E3 MOV R0,#+144 \ 00000060 780D80E3 ORR R0,R0,#0x1E00 \ 00000064 040080E0 ADD R0,R0,R4 \ 00000068 8C0100EF SWI +396 5504 #ifdef ELKA 5505 GBS_DelTimer(&sli_tmr); 5506 #endif 5507 GBS_DelTimer(&remind_tmr); \ 0000006C 0C00A0E3 MOV R0,#+12 \ 00000070 600D80E3 ORR R0,R0,#0x1800 \ 00000074 040080E0 ADD R0,R0,R4 \ 00000078 8C0100EF SWI +396 5508 GBS_DelTimer(&ping_tmr); \ 0000007C 6400A0E3 MOV R0,#+100 \ 00000080 540D80E3 ORR R0,R0,#0x1500 \ 00000084 040080E0 ADD R0,R0,R4 \ 00000088 8C0100EF SWI +396 5509 GBS_DelTimer(&uptime_tmr); \ 0000008C 1C00A0E3 MOV R0,#+28 \ 00000090 600D80E3 ORR R0,R0,#0x1800 \ 00000094 040080E0 ADD R0,R0,R4 \ 00000098 8C0100EF SWI +396 5510 GBS_DelTimer(&autoChangeStatus); \ 0000009C FC00A0E3 MOV R0,#+252 \ 000000A0 5C0D80E3 ORR R0,R0,#0x1700 \ 000000A4 040080E0 ADD R0,R0,R4 \ 000000A8 8C0100EF SWI +396 5511 #ifdef NEWSGOLD 5512 GBS_DelTimer(&tracktmr); \ 000000AC 2C00A0E3 MOV R0,#+44 \ 000000B0 600D80E3 ORR R0,R0,#0x1800 \ 000000B4 040080E0 ADD R0,R0,R4 \ 000000B8 8C0100EF SWI +396 5513 GBS_DelTimer(&scrsTmr); \ 000000BC 7400A0E3 MOV R0,#+116 \ 000000C0 580D80E3 ORR R0,R0,#0x1600 \ 000000C4 040080E0 ADD R0,R0,R4 \ 000000C8 8C0100EF SWI +396 5514 #endif 5515 GBS_DelTimer(&incs2); \ 000000CC 7A0D84E2 ADD R0,R4,#+7808 \ 000000D0 8C0100EF SWI +396 5516 GBS_DelTimer(&develop); \ 000000D4 0800A0E3 MOV R0,#+8 \ 000000D8 740D80E3 ORR R0,R0,#0x1D00 \ 000000DC 040080E0 ADD R0,R0,R4 \ 000000E0 8C0100EF SWI +396 5517 GBS_DelTimer(&away_tmr); \ 000000E4 EC00A0E3 MOV R0,#+236 \ 000000E8 5C0D80E3 ORR R0,R0,#0x1700 \ 000000EC 040080E0 ADD R0,R0,R4 \ 000000F0 8C0100EF SWI +396 5518 SetVibration(0); \ 000000F4 0000A0E3 MOV R0,#+0 \ 000000F8 7C0000EF SWI +124 5519 FreeTemplates(); \ 000000FC ........ BL FreeTemplates 5520 cmdFree(); \ 00000100 ........ BL cmdFree 5521 #ifdef kluchnik 5522 FreeBotMessage(); 5523 #endif 5524 FreeCLIST(); \ 00000104 ........ _BLF FreeCLIST,??FreeCLIST??rA 5525 free_ICONS(); \ 00000108 ........ BL free_ICONS 5526 // FreeSmiles(); 5527 FreeWS(ews); \ 0000010C 380294E5 LDR R0,[R4, #+568] \ 00000110 290100EF SWI +297 5528 FreeXStatusText(); \ 00000114 ........ _BLF FreeXStatusText,??FreeXStatusText??rA 5529 PrintLibFree(); \ 00000118 ........ _BLF PrintLibFree,??PrintLibFree??rA 5530 SUBPROC((void *)FreeSmiles); \ 0000011C 24009FE5 LDR R0,??maincsm_onclose_0 ;; FreeSmiles \ 00000120 710100EF SWI +369 5531 SUBPROC((void *)FreeXStatusesImg); \ 00000124 20009FE5 LDR R0,??maincsm_onclose_0+0x4 ;; FreeXStatusesImg \ 00000128 710100EF SWI +369 5532 SUBPROC((void *)end_socket); \ 0000012C ........ LDR R0,??DataTable242 ;; end_socket \ 00000130 710100EF SWI +369 5533 SUBPROC((void *)ClearSendQ); \ 00000134 ........ LDR R0,??DataTable274 ;; ClearSendQ \ 00000138 710100EF SWI +369 5534 SUBPROC((void *)ElfKiller); \ 0000013C ........ LDR R0,??DataTable244 ;; ElfKiller \ 00000140 710100EF SWI +369 5535 } \ 00000144 1080BDE8 POP {R4,PC} ;; return \ ??maincsm_onclose_0: \ 00000148 ........ DC32 FreeSmiles \ 0000014C ........ DC32 FreeXStatusesImg 5536 \ In segment CODE, align 4, keep-with-next 5537 void do_reconnect(void) 5538 { 5539 if (is_gprs_online) \ do_reconnect: \ 00000000 ........ LDR R0,??DataTable249 ;; MAINCSM \ 00000004 00402DE9 PUSH {LR} \ 00000008 681090E5 LDR R1,[R0, #+104] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 5540 { 5541 DNR_TRIES=3; \ 00000014 0310A0E3 MOV R1,#+3 \ 00000018 7C1080E5 STR R1,[R0, #+124] 5542 SUBPROC((void*)create_connect); \ 0000001C ........ LDR R0,??DataTable246 ;; create_connect \ 00000020 710100EF SWI +369 5543 } 5544 } \ 00000024 0080BDE8 POP {PC} ;; return 5545 \ In segment CODE, align 4, keep-with-next 5546 void CheckDoubleRun(void) 5547 { \ CheckDoubleRun: \ 00000000 10402DE9 PUSH {R4,LR} 5548 int csm_id; 5549 if ((csm_id=(int)(gipc.data))!=-1) \ 00000004 ........ LDR R4,??DataTable247 ;; S_ICONS \ 00000008 7C0094E5 LDR R0,[R4, #+124] \ 0000000C 010070E3 CMN R0,#+1 \ 00000010 1100000A BEQ ??CheckDoubleRun_0 5550 { 5551 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable248 ;; Canvas 5552 gipc.name_from=ipc_my_name; 5553 gipc.data=(void *)csm_id; \ 00000018 7C0084E5 STR R0,[R4, #+124] \ 0000001C 4C2E81E2 ADD R2,R1,#+1216 \ 00000020 742084E5 STR R2,[R4, #+116] \ 00000024 4A1E81E2 ADD R1,R1,#+1184 \ 00000028 781084E5 STR R1,[R4, #+120] 5554 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 0000002C 743084E2 ADD R3,R4,#+116 \ 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 5555 LockSched(); \ 00000048 460100EF SWI +326 5556 CloseCSM(maincsm_id); \ 0000004C 1C0294E5 LDR R0,[R4, #+540] \ 00000050 FC0100EF SWI +508 5557 //ShowMSG(1,(int)LG_ALREADY_STARTED); 5558 UnlockSched(); \ 00000054 470100EF SWI +327 \ 00000058 1080BDE8 POP {R4,PC} 5559 } 5560 else 5561 if(!USE_ADD_UIN) \ ??CheckDoubleRun_0: \ 0000005C ........ LDR R4,??DataTable249 ;; MAINCSM \ 00000060 8C0094E5 LDR R0,[R4, #+140] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 0200001A BNE ??CheckDoubleRun_1 5562 { 5563 InitXStatusesImg(); \ 0000006C ........ _BLF InitXStatusesImg,??InitXStatusesImg??rA 5564 //InitSmiles(); Это вызовется из InitXStatusesImg 5565 create_connect(); \ 00000070 ........ BL create_connect \ 00000074 1080BDE8 POP {R4,PC} 5566 } 5567 else 5568 { 5569 InitXStatusesImg(); \ ??CheckDoubleRun_1: \ 00000078 ........ _BLF InitXStatusesImg,??InitXStatusesImg??rA 5570 USE_ADD_UIN=1; \ 0000007C 0100A0E3 MOV R0,#+1 \ 00000080 8C0084E5 STR R0,[R4, #+140] 5571 } 5572 5573 } \ 00000084 1080BDE8 POP {R4,PC} ;; return 5574 5575 5576 5577 //------------------------------------------------------------// 5578 5579 5580 #define idlegui_id(icsm) (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) \ In segment CODE, align 4, keep-with-next 5581 int checkGui(int id) 5582 { \ checkGui: \ 00000000 10402DE9 PUSH {R4,LR} 5583 int retval = 0; \ 00000004 0040A0E3 MOV R4,#+0 5584 if (IsGuiOnTop(id)) \ 00000008 350100EF SWI +309 \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0A00000A BEQ ??checkGui_0 5585 { 5586 GUI* igui = GetTopGUI(); \ 00000014 4D0100EF SWI +333 5587 if (igui) \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 0700000A BEQ ??checkGui_0 5588 { 5589 #ifdef ELKA 5590 canvasdata = BuildCanvas(); 5591 retval = 1; 5592 #else 5593 void *idata = GetDataOfItemByID(igui, 2); \ 00000020 0210A0E3 MOV R1,#+2 \ 00000024 4F0100EF SWI +335 5594 if (idata) \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 0300000A BEQ ??checkGui_0 5595 { 5596 canvasdata = ((void **)idata)[DISPLACE_OF_IDLECANVAS / 4]; \ 00000030 10109FE5 LDR R1,??checkGui_1 ;; S_ICONS + 496 \ 00000034 180090E5 LDR R0,[R0, #+24] 5597 retval = 1; \ 00000038 0140A0E3 MOV R4,#+1 \ 0000003C 000081E5 STR R0,[R1, #+0] 5598 } 5599 #endif 5600 } 5601 } 5602 return retval; \ ??checkGui_0: \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1080BDE8 POP {R4,PC} ;; return \ ??checkGui_1: \ 00000048 ........ DC32 S_ICONS + 496 5603 } 5604 5605 5606 //-------------------------------------------------------------// 5607 #define IPC_GAME 7 5608 5609 typedef struct{ 5610 unsigned long uin; 5611 char *msg; 5612 }IPCmsg; 5613 \ In segment CODE, align 4, keep-with-next 5614 int maincsm_onmessage(CSM_RAM *data,GBS_MSG *msg) 5615 { \ maincsm_onmessage: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} 5616 5617 // char ss[100]; 5618 MAIN_CSM *csm=(MAIN_CSM*)data; 5619 { 5620 //IPC 5621 if (msg->msg==MSG_IPC) \ 00000004 ........ LDR R5,??DataTable250 ;; S_ICONS \ 00000008 20D04DE2 SUB SP,SP,#+32 \ 0000000C ........ LDR R6,??DataTable276 ;; MAINCSM \ 00000010 ........ LDR R8,??DataTable252 ;; Canvas \ 00000014 0140A0E1 MOV R4,R1 \ 00000018 4C10A0E3 MOV R1,#+76 \ 0000001C 681D81E3 ORR R1,R1,#0x1A00 \ 00000020 051081E0 ADD R1,R1,R5 \ 00000024 00108DE5 STR R1,[SP, #+0] \ 00000028 040094E5 LDR R0,[R4, #+4] \ 0000002C 0070A0E3 MOV R7,#+0 \ 00000030 B010A0E3 MOV R1,#+176 \ 00000034 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000038 010050E1 CMP R0,R1 \ 0000003C 9800001A BNE ??maincsm_onmessage_2 5622 { 5623 IPC_REQ *ipc; 5624 if ((ipc=(IPC_REQ*)msg->data0)) \ 00000040 0C9094E5 LDR R9,[R4, #+12] \ 00000044 000059E3 CMP R9,#+0 \ 00000048 9500000A BEQ ??maincsm_onmessage_2 5625 { 5626 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 0000004C 000099E5 LDR R0,[R9, #+0] \ 00000050 4AAEA0E3 MOV R10,#+1184 \ 00000054 08108AE0 ADD R1,R10,R8 \ 00000058 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 0000005C 000050E3 CMP R0,#+0 \ 00000060 8F00001A BNE ??maincsm_onmessage_2 5627 { 5628 switch (msg->submess) \ 00000064 081094E5 LDR R1,[R4, #+8] \ 00000068 040099E5 LDR R0,[R9, #+4] \ 0000006C 011041E2 SUB R1,R1,#+1 \ 00000070 050051E3 CMP R1,#+5 \ 00000074 8A00008A BHI ??maincsm_onmessage_2 \ 00000078 012F8FE2 ADR R2,??maincsm_onmessage_0 \ 0000007C 0120D2E7 LDRB R2,[R2, R1] \ 00000080 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_0: \ 00000084 010A1127 DC8 +1,+10,+17,+39 \ 00000088 64160000 DC8 +100,+22,+0,+0 5629 { 5630 case IPC_CHECK_DOUBLERUN: 5631 //Если приняли свое собственное сообщение, значит запускаем чекер 5632 if (ipc->name_from==ipc_my_name) SUBPROC((void *)CheckDoubleRun); \ ??maincsm_onmessage_3: \ 0000008C 08108AE0 ADD R1,R10,R8 \ 00000090 010050E1 CMP R0,R1 \ 00000094 0200001A BNE ??maincsm_onmessage_4 \ 00000098 640B9FE5 LDR R0,??maincsm_onmessage_5 ;; CheckDoubleRun \ 0000009C 710100EF SWI +369 \ 000000A0 7F0000EA B ??maincsm_onmessage_2 5633 else ipc->data=(void *)maincsm_id; \ ??maincsm_onmessage_4: \ 000000A4 1C0295E5 LDR R0,[R5, #+540] \ 000000A8 080089E5 STR R0,[R9, #+8] \ 000000AC 7C0000EA B ??maincsm_onmessage_2 5634 break; 5635 case IPC_SMILE_PROCESSED: 5636 //Только собственные смайлы ;) 5637 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextSmile); \ ??maincsm_onmessage_6: \ 000000B0 08108AE0 ADD R1,R10,R8 \ 000000B4 010050E1 CMP R0,R1 \ 000000B8 0100001A BNE ??maincsm_onmessage_7 \ 000000BC 440B9FE5 LDR R0,??maincsm_onmessage_5+0x4 ;; ProcessNextSmile \ ??maincsm_onmessage_8: \ 000000C0 710100EF SWI +369 5638 SMART_REDRAW(); \ ??maincsm_onmessage_7: \ 000000C4 ........ BL SMART_REDRAW \ 000000C8 750000EA B ??maincsm_onmessage_2 5639 break; 5640 case IPC_XSTATUSIMG_PROCESSED: 5641 //Только собственные иксстатусы ;) 5642 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextXStatImg); \ ??maincsm_onmessage_9: \ 000000CC 08108AE0 ADD R1,R10,R8 \ 000000D0 010050E1 CMP R0,R1 \ 000000D4 FAFFFF1A BNE ??maincsm_onmessage_7 \ 000000D8 2C0B9FE5 LDR R0,??maincsm_onmessage_5+0x8 ;; ProcessNextXStatImg \ 000000DC F7FFFFEA B ??maincsm_onmessage_8 5643 SMART_REDRAW(); 5644 break; 5645 case IPC_ONESECOND: 5646 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_10: \ 000000E0 08108AE0 ADD R1,R10,R8 \ 000000E4 010050E1 CMP R0,R1 \ 000000E8 6D00001A BNE ??maincsm_onmessage_2 5647 { 5648 //if(!(--on_off_timer)) on_off_timer=0;//таймер показа подключившихся/отключившихся 5649 if(on_off_timer>0) \ 000000EC 6C0096E5 LDR R0,[R6, #+108] \ 000000F0 010050E3 CMP R0,#+1 5650 on_off_timer--; \ 000000F4 010040A2 SUBGE R0,R0,#+1 \ 000000F8 6C0086A5 STRGE R0,[R6, #+108] \ 000000FC 680000AA BGE ??maincsm_onmessage_2 5651 else 5652 if(on_off_timer!=-1) \ 00000100 010070E3 CMN R0,#+1 \ 00000104 6600000A BEQ ??maincsm_onmessage_2 5653 { 5654 on_off_timer=-1; \ 00000108 0700E0E1 MVN R0,R7 \ 0000010C 6C0086E5 STR R0,[R6, #+108] 5655 zeromem(on_off_buf,128); \ 00000110 00009DE5 LDR R0,[SP, #+0] \ 00000114 8010A0E3 MOV R1,#+128 \ 00000118 1D0100EF SWI +285 5656 UpdateCLheader(); \ 0000011C ........ BL UpdateCLheader \ 00000120 5F0000EA B ??maincsm_onmessage_2 5657 } 5658 } 5659 break; 5660 case IPC_TENSECONDS: 5661 //Только свое сообщение 5662 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_11: \ 00000124 08108AE0 ADD R1,R10,R8 \ 00000128 010050E1 CMP R0,R1 \ 0000012C 5C00001A BNE ??maincsm_onmessage_2 5663 { 5664 CLIST *t=(CLIST *)cltop; 5665 int f=0; 5666 if(main_msg_timer2!=0) main_msg_timer2--; else main_msg_timer2=0; \ 00000130 280395E5 LDR R0,[R5, #+808] \ 00000134 A09295E5 LDR R9,[R5, #+672] \ 00000138 00A0A0E3 MOV R10,#+0 \ 0000013C 000050E3 CMP R0,#+0 \ 00000140 1900000A BEQ ??maincsm_onmessage_12 \ 00000144 010040E2 SUB R0,R0,#+1 \ 00000148 280385E5 STR R0,[R5, #+808] \ 0000014C 160000EA B ??maincsm_onmessage_12 5667 while(t) 5668 { 5669 if(t->just_now) \ ??maincsm_onmessage_13: \ 00000150 680099E5 LDR R0,[R9, #+104] \ 00000154 000050E3 CMP R0,#+0 \ 00000158 0200000A BEQ ??maincsm_onmessage_14 5670 { 5671 if (!(--(t->just_now))) f=1; \ 0000015C 010050E2 SUBS R0,R0,#+1 \ 00000160 680089E5 STR R0,[R9, #+104] \ 00000164 01A0A003 MOVEQ R10,#+1 5672 } 5673 if (t->isactive) \ ??maincsm_onmessage_14: \ 00000168 9C0099E5 LDR R0,[R9, #+156] \ 0000016C 000050E3 CMP R0,#+0 \ 00000170 0C00000A BEQ ??maincsm_onmessage_15 5674 { 5675 if (!(--(t->isactive))) \ 00000174 010050E2 SUBS R0,R0,#+1 \ 00000178 9C0089E5 STR R0,[R9, #+156] \ 0000017C 0900001A BNE ??maincsm_onmessage_15 5676 { 5677 f=1; //Если дошли до 0 хотя бы один раз - надо перерисовать меню 5678 if ((t->log)&&(!t->isunread)) \ 00000180 900099E5 LDR R0,[R9, #+144] \ 00000184 01A0A0E3 MOV R10,#+1 \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 0500000A BEQ ??maincsm_onmessage_15 \ 00000190 800099E5 LDR R0,[R9, #+128] \ 00000194 000050E3 CMP R0,#+0 \ 00000198 0200001A BNE ??maincsm_onmessage_15 5679 { 5680 FreeLOGQ(&t->log); \ 0000019C 900089E2 ADD R0,R9,#+144 \ 000001A0 ........ BL FreeLOGQ 5681 t->msg_count=0; \ 000001A4 A07089E5 STR R7,[R9, #+160] 5682 } 5683 } 5684 } 5685 t=(CLIST *)(t->next); \ ??maincsm_onmessage_15: \ 000001A8 009099E5 LDR R9,[R9, #+0] 5686 } \ ??maincsm_onmessage_12: \ 000001AC 000059E3 CMP R9,#+0 \ 000001B0 E6FFFF1A BNE ??maincsm_onmessage_13 5687 if (f) \ 000001B4 00005AE3 CMP R10,#+0 \ 000001B8 0A00000A BEQ ??maincsm_onmessage_16 5688 { 5689 CLIST *oldt=NULL; 5690 if (contactlist_menu_id) \ 000001BC A81295E5 LDR R1,[R5, #+680] \ 000001C0 0000A0E3 MOV R0,#+0 \ 000001C4 000051E3 CMP R1,#+0 \ 000001C8 0400000A BEQ ??maincsm_onmessage_17 5691 { 5692 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 000001CC A80295E5 LDR R0,[R5, #+680] \ 000001D0 0010A0E3 MOV R1,#+0 \ 000001D4 090200EF SWI +521 \ 000001D8 8F0100EF SWI +399 \ 000001DC ........ _BLF FindContactByN,??FindContactByN??rA 5693 } 5694 RecountMenu(oldt,1); \ ??maincsm_onmessage_17: \ 000001E0 0110A0E3 MOV R1,#+1 \ 000001E4 ........ BL RecountMenu 5695 } 5696 if (time_to_stop_t9) \ ??maincsm_onmessage_16: \ 000001E8 300395E5 LDR R0,[R5, #+816] \ 000001EC 000050E3 CMP R0,#+0 \ 000001F0 2B00000A BEQ ??maincsm_onmessage_2 5697 { 5698 if (!(--time_to_stop_t9)) \ 000001F4 010050E2 SUBS R0,R0,#+1 \ 000001F8 300385E5 STR R0,[R5, #+816] \ 000001FC 2800001A BNE ??maincsm_onmessage_2 5699 { 5700 if (IsGuiOnTop(edchat_id)) RefreshGUI(); \ 00000200 AC0295E5 LDR R0,[R5, #+684] \ 00000204 350100EF SWI +309 \ 00000208 000050E3 CMP R0,#+0 \ 0000020C 2400000A BEQ ??maincsm_onmessage_2 \ 00000210 960100EF SWI +406 \ 00000214 220000EA B ??maincsm_onmessage_2 5701 } 5702 } 5703 } 5704 break; 5705 case IPC_SENDMSG: ; //IPC_SENDMSG by BoBa 26.06.07 5706 int l=strlen(((IPCMsg *)(ipc->data))->msg); \ ??maincsm_onmessage_18: \ 00000218 080099E5 LDR R0,[R9, #+8] \ 0000021C 040090E5 LDR R0,[R0, #+4] \ 00000220 1B0000EF SWI +27 \ 00000224 00A0A0E1 MOV R10,R0 5707 TPKT *msg=malloc(sizeof(PKT)+l+30); \ 00000228 26008AE2 ADD R0,R10,#+38 \ 0000022C 140000EF SWI +20 \ 00000230 00B0A0E1 MOV R11,R0 5708 msg->pkt.uin=((IPCMsg *)(ipc->data))->uin; \ 00000234 080099E5 LDR R0,[R9, #+8] 5709 msg->pkt.type=T_SENDMSG; 5710 msg->pkt.data_len=l; 5711 memcpy(msg->data,((IPCMsg *)(ipc->data))->msg,l); \ 00000238 0A20A0E1 MOV R2,R10 \ 0000023C 000090E5 LDR R0,[R0, #+0] \ 00000240 00008BE5 STR R0,[R11, #+0] \ 00000244 0200A0E3 MOV R0,#+2 \ 00000248 B400CBE1 STRH R0,[R11, #+4] \ 0000024C B6A0CBE1 STRH R10,[R11, #+6] \ 00000250 080099E5 LDR R0,[R9, #+8] \ 00000254 041090E5 LDR R1,[R0, #+4] \ 00000258 08008BE2 ADD R0,R11,#+8 \ 0000025C 1E0100EF SWI +286 5712 //slientsend=1; 5713 if(strstr(msg->data,PASS)==0) \ 00000260 ........ LDR R1,??DataTable253 ;; PASS \ 00000264 08008BE2 ADD R0,R11,#+8 \ 00000268 180100EF SWI +280 \ 0000026C 000050E3 CMP R0,#+0 \ 00000270 0400000A BEQ ??maincsm_onmessage_19 5714 { 5715 SENDMSGCOUNT++; //Номер сообщения 5716 SUBPROC((void *)SendAnswer,0,msg); 5717 } 5718 else 5719 { 5720 msg->pkt.data_len=40; \ 00000274 2800A0E3 MOV R0,#+40 \ 00000278 B600CBE1 STRH R0,[R11, #+6] 5721 strcpy(msg->data, "Fuck you hacker! my password sux ur ass"); \ 0000027C D61F88E2 ADD R1,R8,#+856 \ 00000280 08008BE2 ADD R0,R11,#+8 \ 00000284 1A0000EF SWI +26 5722 SENDMSGCOUNT++; //Номер сообщения \ ??maincsm_onmessage_19: \ 00000288 240295E5 LDR R0,[R5, #+548] 5723 SUBPROC((void *)SendAnswer,0,msg); \ 0000028C 0B20A0E1 MOV R2,R11 \ 00000290 010080E2 ADD R0,R0,#+1 \ 00000294 240285E5 STR R0,[R5, #+548] \ 00000298 ........ LDR R0,??DataTable271 ;; SendAnswer \ 0000029C 0010A0E3 MOV R1,#+0 \ 000002A0 710100EF SWI +369 5724 } 5725 break; 5726 } 5727 } 5728 } 5729 } 5730 //Нарисуем иконочку моего статуса 5731 //#define idlegui_id (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 5732 //CSM_RAM *icsm=FindCSMbyID(CSM_root()->idle_id); 5733 // if (IsGuiOnTop(idlegui_id)/*&&IsUnlocked()*/) //Если IdleGui на самом верху 5734 // { 5735 void *icsm; 5736 icsm=FindCSMbyID(CSM_root()->idle_id); \ ??maincsm_onmessage_2: \ 000002A4 068100EF SWI +33030 \ 000002A8 040090E5 LDR R0,[R0, #+4] \ 000002AC 080100EF SWI +264 \ 000002B0 000050E3 CMP R0,#+0 \ 000002B4 0700000A BEQ ??maincsm_onmessage_20 \ 000002B8 2C0090E5 LDR R0,[R0, #+44] 5737 if (icsm && checkGui(idlegui_id(icsm))) \ 000002BC ........ BL checkGui \ 000002C0 000050E3 CMP R0,#+0 \ 000002C4 0300000A BEQ ??maincsm_onmessage_20 5738 { 5739 // GUI *igui=GetTopGUI(); 5740 // if (igui) //И он существует 5741 //{ 5742 INC_show=0; \ 000002C8 387385E5 STR R7,[R5, #+824] 5743 canvasdata=BuildCanvas(); //void * - belyj fon! \ 000002CC F18000EF SWI +33009 \ 000002D0 F00185E5 STR R0,[R5, #+496] \ 000002D4 010000EA B ??maincsm_onmessage_21 5744 //Тут трохи поменял 5745 // by Rainmaker: Рисуем канву только для иконки и выводим в своих координатах 5746 #ifdef ELKA 5747 if (total_unread) 5748 SLI_On(); 5749 #endif 5750 } 5751 //} 5752 else 5753 { 5754 main_d=1; \ ??maincsm_onmessage_20: \ 000002D8 0100A0E3 MOV R0,#+1 \ 000002DC EC0185E5 STR R0,[R5, #+492] 5755 } 5756 } 5757 5758 //---------------------------------------------------// 5759 void *icsm; 5760 icsm=FindCSMbyID(CSM_root()->idle_id); 5761 if (icsm && checkGui(idlegui_id(icsm))) \ ??maincsm_onmessage_21: \ 000002E0 ........ LDR R9,??DataTable290 ;; fonto \ 000002E4 068100EF SWI +33030 \ 000002E8 040090E5 LDR R0,[R0, #+4] \ 000002EC 080100EF SWI +264 \ 000002F0 000050E3 CMP R0,#+0 \ 000002F4 4801000A BEQ ??maincsm_onmessage_22 \ 000002F8 2C0090E5 LDR R0,[R0, #+44] \ 000002FC ........ BL checkGui \ 00000300 000050E3 CMP R0,#+0 \ 00000304 4401000A BEQ ??maincsm_onmessage_22 5762 { 5763 int icn; 5764 if(total_unread) \ 00000308 9C0295E5 LDR R0,[R5, #+668] \ 0000030C 000050E3 CMP R0,#+0 5765 icn=IS_MSG; \ 00000310 0DA0A013 MOVNE R10,#+13 \ 00000314 0A00001A BNE ??maincsm_onmessage_23 5766 else 5767 { 5768 switch(connect_state) \ 00000318 580096E5 LDR R0,[R6, #+88] \ 0000031C 000050E3 CMP R0,#+0 \ 00000320 0200000A BEQ ??maincsm_onmessage_24 \ 00000324 030050E2 SUBS R0,R0,#+3 \ 00000328 0200000A BEQ ??maincsm_onmessage_25 \ 0000032C 030000EA B ??maincsm_onmessage_26 5769 { 5770 case 0: 5771 icn=IS_OFFLINE; break; \ ??maincsm_onmessage_24: \ 00000330 00A0A0E3 MOV R10,#+0 \ 00000334 020000EA B ??maincsm_onmessage_23 5772 case 3: 5773 icn=CurrentStatus; //IS_ONLINE; \ ??maincsm_onmessage_25: \ 00000338 30A295E5 LDR R10,[R5, #+560] \ 0000033C 000000EA B ??maincsm_onmessage_23 5774 break; 5775 default: 5776 icn=IS_UNKNOWN; break; \ ??maincsm_onmessage_26: \ 00000340 0EA0A0E3 MOV R10,#+14 5777 } 5778 } 5779 5780 #ifdef NEWSGOLD 5781 if(ShowStatusIcon==0 || ShowStatusIcon==2 || ShowStatusIcon==3) //kluchnik 26.03.08 \ ??maincsm_onmessage_23: \ 00000344 ........ LDR R0,??DataTable278 ;; ShowStatusIcon \ 00000348 000090E5 LDR R0,[R0, #+0] \ 0000034C 000050E3 CMP R0,#+0 \ 00000350 02005013 CMPNE R0,#+2 \ 00000354 03005013 CMPNE R0,#+3 \ 00000358 2200001A BNE ??maincsm_onmessage_27 5782 { 5783 #endif 5784 if((IsUnlocked()) || (!IsUnlocked()) || (IsScreenSaver())) \ 0000035C 430000EF SWI +67 \ 00000360 000050E3 CMP R0,#+0 \ 00000364 0500001A BNE ??maincsm_onmessage_28 \ 00000368 430000EF SWI +67 \ 0000036C 000050E3 CMP R0,#+0 \ 00000370 0200000A BEQ ??maincsm_onmessage_28 \ 00000374 420000EF SWI +66 \ 00000378 000050E3 CMP R0,#+0 \ 0000037C 1900000A BEQ ??maincsm_onmessage_27 5785 { 5786 DrawCanvas(canvasdata,IDLEICON_X,IDLEICON_Y,IDLEICON_X+GetImgWidth((int)S_ICONS[icn])-1, 5787 IDLEICON_Y+GetImgHeight((int)S_ICONS[icn])-1,1); \ ??maincsm_onmessage_28: \ 00000380 0AA185E0 ADD R10,R5,R10, LSL #+2 \ 00000384 00009AE5 LDR R0,[R10, #+0] \ 00000388 210000EF SWI +33 \ 0000038C 00B0A0E1 MOV R11,R0 \ 00000390 00009AE5 LDR R0,[R10, #+0] \ 00000394 220000EF SWI +34 \ 00000398 70189FE5 LDR R1,??maincsm_onmessage_5+0xC ;; IDLEICON_X \ 0000039C 70289FE5 LDR R2,??maincsm_onmessage_5+0x10 ;; IDLEICON_Y \ 000003A0 001091E5 LDR R1,[R1, #+0] \ 000003A4 002092E5 LDR R2,[R2, #+0] \ 000003A8 0130A0E3 MOV R3,#+1 \ 000003AC 08002DE9 PUSH {R3} \ 000003B0 010080E0 ADD R0,R0,R1 \ 000003B4 02308BE0 ADD R3,R11,R2 \ 000003B8 013043E2 SUB R3,R3,#+1 \ 000003BC 08002DE9 PUSH {R3} \ 000003C0 013040E2 SUB R3,R0,#+1 \ 000003C4 F00195E5 LDR R0,[R5, #+496] \ 000003C8 250000EF SWI +37 5788 DrawImg(IDLEICON_X,IDLEICON_Y,S_ICONS[icn]); \ 000003CC 40089FE5 LDR R0,??maincsm_onmessage_5+0x10 ;; IDLEICON_Y \ 000003D0 00209AE5 LDR R2,[R10, #+0] \ 000003D4 001090E5 LDR R1,[R0, #+0] \ 000003D8 30089FE5 LDR R0,??maincsm_onmessage_5+0xC ;; IDLEICON_X \ 000003DC 000090E5 LDR R0,[R0, #+0] \ 000003E0 230000EF SWI +35 \ 000003E4 08D08DE2 ADD SP,SP,#+8 5789 } 5790 #ifdef NEWSGOLD 5791 } 5792 #ifdef kluchnik 5793 if(show_xstatus==1) 5794 #else 5795 if(show_xstatus==1 || show_xstatus==3) //kluchnik 26.03.08 \ ??maincsm_onmessage_27: \ 000003E8 28089FE5 LDR R0,??maincsm_onmessage_5+0x14 ;; show_xstatus \ 000003EC 000090E5 LDR R0,[R0, #+0] \ 000003F0 010050E3 CMP R0,#+1 \ 000003F4 03005013 CMPNE R0,#+3 \ 000003F8 2400001A BNE ??maincsm_onmessage_29 5796 #endif 5797 #else 5798 if(show_xstatus==1) //kluchnik 26.03.08 5799 #endif 5800 { 5801 PNGTOP_DESC *pltop=PNG_TOP(); 5802 pltop->dyn_pltop=XStatusesImgList; 5803 DisableIDLETMR(); 5804 DrawCanvas(canvasdata,IDLEICON_XX,IDLEICON_YX,IDLEICON_XX+GetImgWidth((int)XStatusesIconArray[CurrentXStatus])-1, 5805 IDLEICON_YX+GetImgHeight((int)XStatusesIconArray[CurrentXStatus])-1,1); \ 000003FC 18A89FE5 LDR R10,??maincsm_onmessage_5+0x18 ;; XStatusesIconArray \ 00000400 B98100EF SWI +33209 \ 00000404 ........ LDR R1,??DataTable257 ;; XStatusesImgList \ 00000408 001091E5 LDR R1,[R1, #+0] \ 0000040C 081080E5 STR R1,[R0, #+8] \ 00000410 7F0100EF SWI +383 \ 00000414 340295E5 LDR R0,[R5, #+564] \ 00000418 00109AE5 LDR R1,[R10, #+0] \ 0000041C 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 00000420 210000EF SWI +33 \ 00000424 00109AE5 LDR R1,[R10, #+0] \ 00000428 00B0A0E1 MOV R11,R0 \ 0000042C 340295E5 LDR R0,[R5, #+564] \ 00000430 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 00000434 220000EF SWI +34 \ 00000438 E0179FE5 LDR R1,??maincsm_onmessage_5+0x1C ;; IDLEICON_XX \ 0000043C E0279FE5 LDR R2,??maincsm_onmessage_5+0x20 ;; IDLEICON_YX \ 00000440 001091E5 LDR R1,[R1, #+0] \ 00000444 002092E5 LDR R2,[R2, #+0] \ 00000448 0130A0E3 MOV R3,#+1 \ 0000044C 08002DE9 PUSH {R3} \ 00000450 010080E0 ADD R0,R0,R1 \ 00000454 02308BE0 ADD R3,R11,R2 \ 00000458 013043E2 SUB R3,R3,#+1 \ 0000045C 08002DE9 PUSH {R3} \ 00000460 013040E2 SUB R3,R0,#+1 \ 00000464 F00195E5 LDR R0,[R5, #+496] \ 00000468 250000EF SWI +37 5806 DrawImg(IDLEICON_XX,IDLEICON_YX,XStatusesIconArray[CurrentXStatus]); \ 0000046C 340295E5 LDR R0,[R5, #+564] \ 00000470 00109AE5 LDR R1,[R10, #+0] \ 00000474 002191E7 LDR R2,[R1, +R0, LSL #+2] \ 00000478 A4079FE5 LDR R0,??maincsm_onmessage_5+0x20 ;; IDLEICON_YX \ 0000047C 001090E5 LDR R1,[R0, #+0] \ 00000480 98079FE5 LDR R0,??maincsm_onmessage_5+0x1C ;; IDLEICON_XX \ 00000484 000090E5 LDR R0,[R0, #+0] \ 00000488 230000EF SWI +35 \ 0000048C 08D08DE2 ADD SP,SP,#+8 5807 } 5808 5809 5810 if(IsUnlocked()) \ ??maincsm_onmessage_29: \ 00000490 430000EF SWI +67 \ 00000494 000050E3 CMP R0,#+0 \ 00000498 DF00000A BEQ ??maincsm_onmessage_22 5811 { 5812 if (main_d==1) \ 0000049C EC0195E5 LDR R0,[R5, #+492] \ 000004A0 010050E3 CMP R0,#+1 \ 000004A4 9100001A BNE ??maincsm_onmessage_30 5813 { 5814 if(Is_SMARTCPU_On && main_msg_timer2) \ 000004A8 080295E5 LDR R0,[R5, #+520] \ 000004AC 000050E3 CMP R0,#+0 \ 000004B0 28039515 LDRNE R0,[R5, #+808] \ 000004B4 00005013 CMPNE R0,#+0 \ 000004B8 8B00000A BEQ ??maincsm_onmessage_31 5815 { 5816 if(fonto==1) \ 000004BC 64079FE5 LDR R0,??maincsm_onmessage_5+0x24 ;; msg_d_x \ 000004C0 64A79FE5 LDR R10,??maincsm_onmessage_5+0x28 ;; msg_d_y \ 000004C4 64B79FE5 LDR R11,??maincsm_onmessage_5+0x2C ;; spaco2 \ 000004C8 483096E5 LDR R3,[R6, #+72] \ 000004CC D810A0E3 MOV R1,#+216 \ 000004D0 701D81E3 ORR R1,R1,#0x1C00 \ 000004D4 051081E0 ADD R1,R1,R5 \ 000004D8 18108DE5 STR R1,[SP, #+24] \ 000004DC A810A0E3 MOV R1,#+168 \ 000004E0 701D81E3 ORR R1,R1,#0x1C00 \ 000004E4 051081E0 ADD R1,R1,R5 \ 000004E8 14108DE5 STR R1,[SP, #+20] \ 000004EC 7810A0E3 MOV R1,#+120 \ 000004F0 701D81E3 ORR R1,R1,#0x1C00 \ 000004F4 051081E0 ADD R1,R1,R5 \ 000004F8 10108DE5 STR R1,[SP, #+16] \ 000004FC 4810A0E3 MOV R1,#+72 \ 00000500 701D81E3 ORR R1,R1,#0x1C00 \ 00000504 051081E0 ADD R1,R1,R5 \ 00000508 0C108DE5 STR R1,[SP, #+12] \ 0000050C 000090E5 LDR R0,[R0, #+0] \ 00000510 00109AE5 LDR R1,[R10, #+0] \ 00000514 00C09BE5 LDR R12,[R11, #+0] \ 00000518 00E099E5 LDR LR,[R9, #+0] \ 0000051C 00102DE9 PUSH {R12} \ 00000520 1820A0E3 MOV R2,#+24 \ 00000524 702D82E3 ORR R2,R2,#0x1C00 \ 00000528 052082E0 ADD R2,R2,R5 \ 0000052C 01005EE3 CMP LR,#+1 \ 00000530 3100001A BNE ??maincsm_onmessage_32 5817 { 5818 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ 00000534 01C0A0E3 MOV R12,#+1 \ 00000538 00102DE9 PUSH {R12} \ 0000053C ........ _BLF PrintField,??PrintField??rA 5819 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, spaco2); \ 00000540 00009BE5 LDR R0,[R11, #+0] \ 00000544 01002DE9 PUSH {R0} \ 00000548 000099E5 LDR R0,[R9, #+0] \ 0000054C 01002DE9 PUSH {R0} \ 00000550 F41195E5 LDR R1,[R5, #+500] \ 00000554 483096E5 LDR R3,[R6, #+72] \ 00000558 1C209DE5 LDR R2,[SP, #+28] \ 0000055C 00009AE5 LDR R0,[R10, #+0] \ 00000560 001081E0 ADD R1,R1,R0 \ 00000564 BC069FE5 LDR R0,??maincsm_onmessage_5+0x24 ;; msg_d_x \ 00000568 000090E5 LDR R0,[R0, #+0] \ 0000056C ........ _BLF PrintField,??PrintField??rA 5820 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, spaco2); \ 00000570 00009BE5 LDR R0,[R11, #+0] \ 00000574 01002DE9 PUSH {R0} \ 00000578 000099E5 LDR R0,[R9, #+0] \ 0000057C 01002DE9 PUSH {R0} \ 00000580 F41195E5 LDR R1,[R5, #+500] \ 00000584 483096E5 LDR R3,[R6, #+72] \ 00000588 28209DE5 LDR R2,[SP, #+40] \ 0000058C 00009AE5 LDR R0,[R10, #+0] \ 00000590 811080E0 ADD R1,R0,R1, LSL #+1 \ 00000594 8C069FE5 LDR R0,??maincsm_onmessage_5+0x24 ;; msg_d_x \ 00000598 000090E5 LDR R0,[R0, #+0] \ 0000059C ........ _BLF PrintField,??PrintField??rA 5821 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, spaco2); \ 000005A0 00009BE5 LDR R0,[R11, #+0] \ 000005A4 01002DE9 PUSH {R0} \ 000005A8 000099E5 LDR R0,[R9, #+0] \ 000005AC 01002DE9 PUSH {R0} \ 000005B0 F41195E5 LDR R1,[R5, #+500] \ 000005B4 483096E5 LDR R3,[R6, #+72] \ 000005B8 34209DE5 LDR R2,[SP, #+52] \ 000005BC 00009AE5 LDR R0,[R10, #+0] \ 000005C0 811081E0 ADD R1,R1,R1, LSL #+1 \ 000005C4 001081E0 ADD R1,R1,R0 \ 000005C8 58069FE5 LDR R0,??maincsm_onmessage_5+0x24 ;; msg_d_x \ 000005CC 000090E5 LDR R0,[R0, #+0] \ 000005D0 ........ _BLF PrintField,??PrintField??rA 5822 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, spaco2); \ 000005D4 00009BE5 LDR R0,[R11, #+0] \ 000005D8 01002DE9 PUSH {R0} \ 000005DC 000099E5 LDR R0,[R9, #+0] \ 000005E0 01002DE9 PUSH {R0} \ 000005E4 F41195E5 LDR R1,[R5, #+500] \ 000005E8 483096E5 LDR R3,[R6, #+72] \ 000005EC 40209DE5 LDR R2,[SP, #+64] \ 000005F0 00009AE5 LDR R0,[R10, #+0] \ 000005F4 011180E0 ADD R1,R0,R1, LSL #+2 \ 000005F8 370000EA B ??maincsm_onmessage_33 5823 } 5824 else 5825 { 5826 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ ??maincsm_onmessage_32: \ 000005FC 00402DE9 PUSH {LR} \ 00000600 ........ _BLF PrintField,??PrintField??rA 5827 PrintField(msg_d_x,msg_d_y+GetFontYSIZE(paused_height)+1, s_txt, align, fonto, spaco2); \ 00000604 F40195E5 LDR R0,[R5, #+500] \ 00000608 C50100EF SWI +453 \ 0000060C 00109BE5 LDR R1,[R11, #+0] \ 00000610 02002DE9 PUSH {R1} \ 00000614 001099E5 LDR R1,[R9, #+0] \ 00000618 02002DE9 PUSH {R1} \ 0000061C 483096E5 LDR R3,[R6, #+72] \ 00000620 1C209DE5 LDR R2,[SP, #+28] \ 00000624 00109AE5 LDR R1,[R10, #+0] \ 00000628 010080E0 ADD R0,R0,R1 \ 0000062C 011080E2 ADD R1,R0,#+1 \ 00000630 F0059FE5 LDR R0,??maincsm_onmessage_5+0x24 ;; msg_d_x \ 00000634 000090E5 LDR R0,[R0, #+0] \ 00000638 ........ _BLF PrintField,??PrintField??rA 5828 PrintField(msg_d_x,msg_d_y+(2*GetFontYSIZE(paused_height))+2, d_txt, align, fonto, spaco2); \ 0000063C F40195E5 LDR R0,[R5, #+500] \ 00000640 C50100EF SWI +453 \ 00000644 00109BE5 LDR R1,[R11, #+0] \ 00000648 02002DE9 PUSH {R1} \ 0000064C 001099E5 LDR R1,[R9, #+0] \ 00000650 02002DE9 PUSH {R1} \ 00000654 483096E5 LDR R3,[R6, #+72] \ 00000658 28209DE5 LDR R2,[SP, #+40] \ 0000065C 00109AE5 LDR R1,[R10, #+0] \ 00000660 800081E0 ADD R0,R1,R0, LSL #+1 \ 00000664 021080E2 ADD R1,R0,#+2 \ 00000668 B8059FE5 LDR R0,??maincsm_onmessage_5+0x24 ;; msg_d_x \ 0000066C 000090E5 LDR R0,[R0, #+0] \ 00000670 ........ _BLF PrintField,??PrintField??rA 5829 PrintField(msg_d_x,msg_d_y+(3*GetFontYSIZE(paused_height))+3, f_txt, align, fonto, spaco2); \ 00000674 F40195E5 LDR R0,[R5, #+500] \ 00000678 C50100EF SWI +453 \ 0000067C 00109BE5 LDR R1,[R11, #+0] \ 00000680 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000684 02002DE9 PUSH {R1} \ 00000688 001099E5 LDR R1,[R9, #+0] \ 0000068C 02002DE9 PUSH {R1} \ 00000690 483096E5 LDR R3,[R6, #+72] \ 00000694 34209DE5 LDR R2,[SP, #+52] \ 00000698 00109AE5 LDR R1,[R10, #+0] \ 0000069C 010080E0 ADD R0,R0,R1 \ 000006A0 031080E2 ADD R1,R0,#+3 \ 000006A4 7C059FE5 LDR R0,??maincsm_onmessage_5+0x24 ;; msg_d_x \ 000006A8 000090E5 LDR R0,[R0, #+0] \ 000006AC ........ _BLF PrintField,??PrintField??rA 5830 PrintField(msg_d_x,msg_d_y+(4*GetFontYSIZE(paused_height))+4, g_txt, align, fonto, spaco2); \ 000006B0 F40195E5 LDR R0,[R5, #+500] \ 000006B4 C50100EF SWI +453 \ 000006B8 00109BE5 LDR R1,[R11, #+0] \ 000006BC 02002DE9 PUSH {R1} \ 000006C0 001099E5 LDR R1,[R9, #+0] \ 000006C4 02002DE9 PUSH {R1} \ 000006C8 483096E5 LDR R3,[R6, #+72] \ 000006CC 40209DE5 LDR R2,[SP, #+64] \ 000006D0 00109AE5 LDR R1,[R10, #+0] \ 000006D4 000181E0 ADD R0,R1,R0, LSL #+2 \ 000006D8 041080E2 ADD R1,R0,#+4 \ ??maincsm_onmessage_33: \ 000006DC 44059FE5 LDR R0,??maincsm_onmessage_5+0x24 ;; msg_d_x \ 000006E0 000090E5 LDR R0,[R0, #+0] \ 000006E4 ........ _BLF PrintField,??PrintField??rA \ 000006E8 28D08DE2 ADD SP,SP,#+40 5831 } 5832 } 5833 main_d=0; \ ??maincsm_onmessage_31: \ 000006EC EC7185E5 STR R7,[R5, #+492] 5834 } 5835 5836 if(Is_UPTIME_On) DrawOnlineTime(canvasdata); \ ??maincsm_onmessage_30: \ 000006F0 500295E5 LDR R0,[R5, #+592] \ 000006F4 000050E3 CMP R0,#+0 \ 000006F8 0100000A BEQ ??maincsm_onmessage_34 \ 000006FC F00195E5 LDR R0,[R5, #+496] \ 00000700 ........ BL DrawOnlineTime 5837 if(Is_PING_On) DrawPing(canvasdata); \ ??maincsm_onmessage_34: \ 00000704 040295E5 LDR R0,[R5, #+516] \ 00000708 000050E3 CMP R0,#+0 \ 0000070C 0100000A BEQ ??maincsm_onmessage_35 \ 00000710 F00195E5 LDR R0,[R5, #+496] \ 00000714 ........ BL DrawPing 5838 if(Auto_Status && showAwayIdle) DrawAutoMSG(canvasdata); \ ??maincsm_onmessage_35: \ 00000718 ........ LDR R0,??DataTable258 ;; Auto_Status \ 0000071C 000090E5 LDR R0,[R0, #+0] \ 00000720 000050E3 CMP R0,#+0 \ 00000724 0500000A BEQ ??maincsm_onmessage_36 \ 00000728 ........ LDR R0,??DataTable259 ;; showAwayIdle \ 0000072C 000090E5 LDR R0,[R0, #+0] \ 00000730 000050E3 CMP R0,#+0 \ 00000734 0100000A BEQ ??maincsm_onmessage_36 \ 00000738 F00195E5 LDR R0,[R5, #+496] \ 0000073C ........ BL DrawAutoMSG 5839 if(Is_Unread_On) \ ??maincsm_onmessage_36: \ 00000740 EC049FE5 LDR R0,??maincsm_onmessage_5+0x30 ;; Is_Unread_On \ 00000744 ........ LDR R10,??DataTable260 ;; spaco1 \ 00000748 000090E5 LDR R0,[R0, #+0] \ 0000074C 000050E3 CMP R0,#+0 \ 00000750 1100000A BEQ ??maincsm_onmessage_37 5840 { 5841 sprintf(unread_msg_info, "Unread: %d", total_unread2); \ 00000754 182295E5 LDR R2,[R5, #+536] \ 00000758 24B0A0E3 MOV R11,#+36 \ 0000075C 50BE8BE3 ORR R11,R11,#0x500 \ 00000760 E01F88E2 ADD R1,R8,#+896 \ 00000764 05008BE0 ADD R0,R11,R5 \ 00000768 160000EF SWI +22 5842 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, spaco1); \ 0000076C 00009AE5 LDR R0,[R10, #+0] \ 00000770 05208BE0 ADD R2,R11,R5 \ 00000774 01002DE9 PUSH {R0} \ 00000778 000099E5 LDR R0,[R9, #+0] \ 0000077C 01002DE9 PUSH {R0} \ 00000780 483096E5 LDR R3,[R6, #+72] \ 00000784 AC049FE5 LDR R0,??maincsm_onmessage_5+0x34 ;; unread_Y \ 00000788 001090E5 LDR R1,[R0, #+0] \ 0000078C A8049FE5 LDR R0,??maincsm_onmessage_5+0x38 ;; unread_X \ 00000790 000090E5 LDR R0,[R0, #+0] \ 00000794 ........ _BLF PrintField,??PrintField??rA \ 00000798 08D08DE2 ADD SP,SP,#+8 5843 } 5844 5845 if(Is_Online_On && strlen(on_off_buf)!=0) \ ??maincsm_onmessage_37: \ 0000079C 9C049FE5 LDR R0,??maincsm_onmessage_5+0x3C ;; Is_Online_On \ 000007A0 000090E5 LDR R0,[R0, #+0] \ 000007A4 000050E3 CMP R0,#+0 \ 000007A8 1B00000A BEQ ??maincsm_onmessage_22 \ 000007AC 00009DE5 LDR R0,[SP, #+0] \ 000007B0 1B0000EF SWI +27 \ 000007B4 000050E3 CMP R0,#+0 \ 000007B8 1700000A BEQ ??maincsm_onmessage_22 5846 { 5847 char *s=malloc(128); \ 000007BC 8000A0E3 MOV R0,#+128 \ 000007C0 140000EF SWI +20 5848 sprintf(s,percent_s,on_off_buf); \ 000007C4 00209DE5 LDR R2,[SP, #+0] \ 000007C8 00B0A0E1 MOV R11,R0 \ 000007CC 1B1088E2 ADD R1,R8,#+27 \ 000007D0 160000EF SWI +22 5849 s[strlen(s)-1]=0; \ 000007D4 0B00A0E1 MOV R0,R11 \ 000007D8 1B0000EF SWI +27 \ 000007DC 0B0080E0 ADD R0,R0,R11 \ 000007E0 017040E5 STRB R7,[R0, #-1] 5850 PrintField(online_x,online_y,s, align, fonto, spaco1); \ 000007E4 00009AE5 LDR R0,[R10, #+0] \ 000007E8 0B20A0E1 MOV R2,R11 \ 000007EC 01002DE9 PUSH {R0} \ 000007F0 000099E5 LDR R0,[R9, #+0] \ 000007F4 01002DE9 PUSH {R0} \ 000007F8 483096E5 LDR R3,[R6, #+72] \ 000007FC 40049FE5 LDR R0,??maincsm_onmessage_5+0x40 ;; online_y \ 00000800 001090E5 LDR R1,[R0, #+0] \ 00000804 3C049FE5 LDR R0,??maincsm_onmessage_5+0x44 ;; online_x \ 00000808 000090E5 LDR R0,[R0, #+0] \ 0000080C ........ _BLF PrintField,??PrintField??rA 5851 mfree(s); \ 00000810 0B00A0E1 MOV R0,R11 \ 00000814 150000EF SWI +21 \ 00000818 08D08DE2 ADD SP,SP,#+8 5852 } 5853 }//if(IsUnlocked()) 5854 } 5855 5856 5857 //-----------------------------------------------------------// 5858 5859 5860 if (msg->msg==MSG_RECONFIGURE_REQ) \ ??maincsm_onmessage_22: \ 0000081C 040094E5 LDR R0,[R4, #+4] \ 00000820 AF10A0E3 MOV R1,#+175 \ 00000824 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000828 010050E1 CMP R0,R1 \ 0000082C 3000001A BNE ??maincsm_onmessage_38 5861 { 5862 //if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) 5863 if( (strcmp_nocase(suc_config_name,(char *)msg->data0)==0) 5864 || (strcmp_nocase(suc_config_name_mod,(char *)msg->data0)==0)) \ 00000830 ........ LDR R0,??DataTable284 ;; suc_config_name \ 00000834 0C1094E5 LDR R1,[R4, #+12] \ 00000838 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 0000083C 000050E3 CMP R0,#+0 \ 00000840 0400000A BEQ ??maincsm_onmessage_39 \ 00000844 ........ LDR R0,??DataTable262 ;; suc_config_name_mod \ 00000848 0C1094E5 LDR R1,[R4, #+12] \ 0000084C ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000850 000050E3 CMP R0,#+0 \ 00000854 2600001A BNE ??maincsm_onmessage_38 5865 { 5866 ShowMSG(1,(int)"NatICQ config updated!"); 5867 // InitConfig(); 5868 UpdateConfig(); 5869 #ifdef NEWSGOLD 5870 initTags(); 5871 #endif 5872 PrintLibInit(1); 5873 FontPathInit((char *)fontpath, 1); \ ??maincsm_onmessage_39: \ 00000858 ........ LDR R10,??DataTable286 ;; fontpath \ 0000085C E31F88E2 ADD R1,R8,#+908 \ 00000860 0100A0E3 MOV R0,#+1 \ 00000864 480100EF SWI +328 \ 00000868 ........ _BLF UpdateConfig,??UpdateConfig??rA \ 0000086C ........ _BLF initTags,??initTags??rA \ 00000870 0100A0E3 MOV R0,#+1 \ 00000874 ........ _BLF PrintLibInit,??PrintLibInit??rA \ 00000878 0110A0E3 MOV R1,#+1 \ 0000087C 0A00A0E1 MOV R0,R10 \ 00000880 ........ _BLF FontPathInit,??FontPathInit??rA 5874 SetFontColor((char*)fontColor,(char*)bgrColor,1); \ 00000884 ........ LDR R1,??DataTable287 ;; bgrColor \ 00000888 ........ LDR R0,??DataTable288 ;; fontColor \ 0000088C 0120A0E3 MOV R2,#+1 \ 00000890 ........ _BLF SetFontColor,??SetFontColor??rA 5875 //#ifdef ELKA 5876 if(fonto==1) \ 00000894 000099E5 LDR R0,[R9, #+0] \ 00000898 010050E3 CMP R0,#+1 \ 0000089C 0B00001A BNE ??maincsm_onmessage_40 5877 { 5878 char *heght=malloc(64); \ 000008A0 4000A0E3 MOV R0,#+64 \ 000008A4 140000EF SWI +20 \ 000008A8 0090A0E1 MOV R9,R0 5879 sprintf(heght, "%s2240.png", fontpath); \ 000008AC 0A20A0E1 MOV R2,R10 \ 000008B0 E91F88E2 ADD R1,R8,#+932 \ 000008B4 160000EF SWI +22 5880 paused_height=GetImgHeight((int)heght); \ 000008B8 0900A0E1 MOV R0,R9 \ 000008BC 210000EF SWI +33 \ 000008C0 F40185E5 STR R0,[R5, #+500] 5881 mfree(heght); \ 000008C4 0900A0E1 MOV R0,R9 \ 000008C8 150000EF SWI +21 \ 000008CC 010000EA B ??maincsm_onmessage_41 5882 } 5883 else 5884 paused_height=fonto-100; \ ??maincsm_onmessage_40: \ 000008D0 640040E2 SUB R0,R0,#+100 \ 000008D4 F40185E5 STR R0,[R5, #+500] 5885 //#endif 5886 free_ICONS(); \ ??maincsm_onmessage_41: \ 000008D8 ........ BL free_ICONS 5887 setup_ICONS(); \ 000008DC ........ BL setup_ICONS 5888 ResortCL(); \ 000008E0 ........ _BLF ResortCL,??ResortCL??rA 5889 RecountMenu(NULL,1); \ 000008E4 0110A0E3 MOV R1,#+1 \ 000008E8 0000A0E3 MOV R0,#+0 \ 000008EC ........ BL RecountMenu 5890 init_time_zone(); \ 000008F0 ........ BL init_time_zone 5891 // InitSmiles(); 5892 } 5893 } 5894 5895 if (msg->msg==MSG_GUI_DESTROYED) \ ??maincsm_onmessage_38: \ 000008F4 040094E5 LDR R0,[R4, #+4] \ 000008F8 0E10A0E3 MOV R1,#+14 \ 000008FC 641C81E3 ORR R1,R1,#0x6400 \ 00000900 010050E1 CMP R0,R1 \ 00000904 0E00001A BNE ??maincsm_onmessage_42 5896 { 5897 if ((int)msg->data0==csm->gui_id) \ 00000908 20109DE5 LDR R1,[SP, #+32] \ 0000090C 0C0094E5 LDR R0,[R4, #+12] \ 00000910 281091E5 LDR R1,[R1, #+40] \ 00000914 010050E1 CMP R0,R1 5898 { 5899 csm->csm.state=-3; \ 00000918 20009D05 LDREQ R0,[SP, #+32] \ 0000091C 0210E003 MVNEQ R1,#+2 \ 00000920 10108005 STREQ R1,[R0, #+16] 5900 } 5901 if ((int)msg->data0==contactlist_menu_id) \ 00000924 0C0094E5 LDR R0,[R4, #+12] \ 00000928 A81295E5 LDR R1,[R5, #+680] \ 0000092C 010050E1 CMP R0,R1 5902 { 5903 contactlist_menu_id=0; \ 00000930 A8728505 STREQ R7,[R5, #+680] 5904 prev_clmenu_itemcount=0; \ 00000934 B0728505 STREQ R7,[R5, #+688] 5905 } 5906 if ((int)msg->data0==edchat_id) \ 00000938 AC1295E5 LDR R1,[R5, #+684] \ 0000093C 010050E1 CMP R0,R1 5907 { 5908 edchat_id=0; \ 00000940 AC728505 STREQ R7,[R5, #+684] 5909 } 5910 } 5911 5912 if (msg->msg==MSG_HELPER_TRANSLATOR) \ ??maincsm_onmessage_42: \ 00000944 040094E5 LDR R0,[R4, #+4] \ 00000948 AE10A0E3 MOV R1,#+174 \ 0000094C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000950 010050E1 CMP R0,R1 \ 00000954 1000001A BNE ??maincsm_onmessage_43 5913 { 5914 switch((int)msg->data0) \ 00000958 0C0094E5 LDR R0,[R4, #+12] \ 0000095C 101094E5 LDR R1,[R4, #+16] \ 00000960 ........ LDR R10,??DataTable266 ;; RECONNECT_TIME \ 00000964 ........ LDR R11,??DataTable267 ;; do_reconnect \ 00000968 DC20A0E3 MOV R2,#+220 \ 0000096C 642D82E3 ORR R2,R2,#0x1900 \ 00000970 054082E0 ADD R4,R2,R5 \ 00000974 482F42E2 SUB R2,R2,#+288 \ 00000978 059082E0 ADD R9,R2,R5 \ 0000097C 802050E2 SUBS R2,R0,#+128 \ 00000980 0800000A BEQ ??maincsm_onmessage_44 \ 00000984 022052E2 SUBS R2,R2,#+2 \ 00000988 0200000A BEQ ??maincsm_onmessage_45 \ 0000098C 122052E2 SUBS R2,R2,#+18 \ 00000990 1300000A BEQ ??maincsm_onmessage_46 \ 00000994 1D0000EA B ??maincsm_onmessage_47 5915 { 5916 case LMAN_DISCONNECT_IND: 5917 is_gprs_online=0; \ ??maincsm_onmessage_45: \ 00000998 687086E5 STR R7,[R6, #+104] 5918 return(1); \ ??maincsm_onmessage_43: \ 0000099C 0100A0E3 MOV R0,#+1 \ 000009A0 24D08DE2 ADD SP,SP,#+36 \ 000009A4 F08FBDE8 POP {R4-R11,PC} ;; return 5919 case LMAN_CONNECT_CNF: 5920 vibra_count=1; \ ??maincsm_onmessage_44: \ 000009A8 0100A0E3 MOV R0,#+1 \ 000009AC 800285E5 STR R0,[R5, #+640] 5921 start_vibra(); \ 000009B0 ........ BL start_vibra 5922 is_gprs_online=1; \ 000009B4 0100A0E3 MOV R0,#+1 \ 000009B8 680086E5 STR R0,[R6, #+104] 5923 strcpy(logmsg,LG_GRGPRSUP); \ 000009BC EC1F88E2 ADD R1,R8,#+944 \ 000009C0 0900A0E1 MOV R0,R9 \ 000009C4 1A0000EF SWI +26 5924 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 000009C8 00009AE5 LDR R0,[R10, #+0] \ 000009CC 0B20A0E1 MOV R2,R11 \ 000009D0 D830A0E3 MOV R3,#+216 \ 000009D4 930001E0 MUL R1,R3,R0 \ 000009D8 0400A0E1 MOV R0,R4 \ 000009DC 4D0000EF SWI +77 5925 return(1); \ 000009E0 070000EA B ??maincsm_onmessage_48 5926 case ENIP_DNR_HOST_BY_NAME: 5927 if ((int)msg->data1==DNR_ID) \ ??maincsm_onmessage_46: \ 000009E4 780096E5 LDR R0,[R6, #+120] \ 000009E8 000051E1 CMP R1,R0 \ 000009EC EAFFFF1A BNE ??maincsm_onmessage_43 5928 { 5929 if (DNR_TRIES) SUBPROC((void *)create_connect); \ 000009F0 7C0096E5 LDR R0,[R6, #+124] \ 000009F4 000050E3 CMP R0,#+0 \ 000009F8 E7FFFF0A BEQ ??maincsm_onmessage_43 \ 000009FC ........ LDR R0,??DataTable268 ;; create_connect \ ??maincsm_onmessage_49: \ 00000A00 710100EF SWI +369 5930 } 5931 return(1); \ ??maincsm_onmessage_48: \ 00000A04 0100A0E3 MOV R0,#+1 \ ??maincsm_onmessage_50: \ 00000A08 24D08DE2 ADD SP,SP,#+36 \ 00000A0C F08FBDE8 POP {R4-R11,PC} 5932 } 5933 if ((int)msg->data1==sock) \ ??maincsm_onmessage_47: \ 00000A10 5C2096E5 LDR R2,[R6, #+92] \ 00000A14 020051E1 CMP R1,R2 \ 00000A18 DFFFFF1A BNE ??maincsm_onmessage_43 5934 { 5935 //Если наш сокет 5936 if ((((unsigned int)msg->data0)>>28)==0xA) \ 00000A1C 201EA0E1 LSR R1,R0,#+28 \ 00000A20 0A0051E3 CMP R1,#+10 \ 00000A24 0200001A BNE ??maincsm_onmessage_51 5937 { 5938 //Принят пакет 5939 ProcessPacket((TPKT *)msg->data0); \ 00000A28 ........ BL ProcessPacket 5940 return(0); \ 00000A2C 0000A0E3 MOV R0,#+0 \ 00000A30 F4FFFFEA B ??maincsm_onmessage_50 5941 } 5942 switch((int)msg->data0) \ ??maincsm_onmessage_51: \ 00000A34 581096E5 LDR R1,[R6, #+88] \ 00000A38 8A0040E2 SUB R0,R0,#+138 \ 00000A3C 050050E3 CMP R0,#+5 \ 00000A40 D5FFFF8A BHI ??maincsm_onmessage_43 \ 00000A44 012F8FE2 ADR R2,??maincsm_onmessage_1 \ 00000A48 D02092E1 LDRSB R2,[R2, R0] \ 00000A4C 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_1: \ 00000A50 36362F01 DC8 +54,+54,+47,+1 \ 00000A54 3F3B0000 DC8 +63,+59,+0,+0 5943 { 5944 case ENIP_SOCK_CONNECTED: 5945 if (connect_state==1) \ ??maincsm_onmessage_52: \ 00000A58 010051E3 CMP R1,#+1 \ 00000A5C 2700001A BNE ??maincsm_onmessage_53 5946 { 5947 if(VIBR_ON_CONNECT) \ 00000A60 ........ LDR R0,??DataTable273 ;; VIBR_ON_CONNECT \ 00000A64 000090E5 LDR R0,[R0, #+0] \ 00000A68 000050E3 CMP R0,#+0 5948 vibra_count=2; \ 00000A6C 0200A013 MOVNE R0,#+2 5949 else 5950 vibra_count=1; \ 00000A70 0100A003 MOVEQ R0,#+1 \ 00000A74 800285E5 STR R0,[R5, #+640] 5951 start_vibra(); \ 00000A78 ........ BL start_vibra 5952 //Соединение установленно, посылаем пакет login 5953 strcpy(logmsg, LG_GRTRYLOGIN); \ 00000A7C F21F88E2 ADD R1,R8,#+968 \ 00000A80 0900A0E1 MOV R0,R9 \ 00000A84 1A0000EF SWI +26 5954 { 5955 SUBPROC((void *)ab,0,0); \ 00000A88 BC019FE5 LDR R0,??maincsm_onmessage_5+0x48 ;; ab \ 00000A8C 0020A0E3 MOV R2,#+0 \ 00000A90 0210A0E1 MOV R1,R2 \ 00000A94 710100EF SWI +369 5956 /* 5957 int i=strlen(PASS); 5958 TPKT *p=malloc(sizeof(PKT)+i); 5959 p->pkt.uin=UIN; 5960 p->pkt.type=T_REQLOGIN; 5961 p->pkt.data_len=i; 5962 memcpy(p->data,PASS,i); 5963 SUBPROC((void *)send_login,0,p);*/ 5964 } 5965 GROUP_CACHE=0; \ 00000A98 A47285E5 STR R7,[R5, #+676] 5966 SENDMSGCOUNT=0; //Начинаем отсчет \ 00000A9C 247285E5 STR R7,[R5, #+548] 5967 if (!FindGroupByID(0)) AddGroup(0,LG_GROUPNOTINLIST); \ 00000AA0 0700A0E1 MOV R0,R7 \ 00000AA4 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000AA8 000050E3 CMP R0,#+0 \ 00000AAC 0100001A BNE ??maincsm_onmessage_54 \ 00000AB0 F61F88E2 ADD R1,R8,#+984 \ 00000AB4 ........ _BLF AddGroup,??AddGroup??rA 5968 if (!FindContactByUin(UIN) && (IsShowLoopback)) AddContact(UIN, LG_CLLOOPBACK,0,1); \ ??maincsm_onmessage_54: \ 00000AB8 ........ LDR R4,??DataTable283 ;; UIN \ 00000ABC 000094E5 LDR R0,[R4, #+0] \ 00000AC0 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000AC4 000050E3 CMP R0,#+0 \ 00000AC8 0800001A BNE ??maincsm_onmessage_55 \ 00000ACC 7C019FE5 LDR R0,??maincsm_onmessage_5+0x4C ;; IsShowLoopback \ 00000AD0 000090E5 LDR R0,[R0, #+0] \ 00000AD4 000050E3 CMP R0,#+0 \ 00000AD8 0400000A BEQ ??maincsm_onmessage_55 \ 00000ADC 000094E5 LDR R0,[R4, #+0] \ 00000AE0 0130A0E3 MOV R3,#+1 \ 00000AE4 0020A0E3 MOV R2,#+0 \ 00000AE8 F91F88E2 ADD R1,R8,#+996 \ 00000AEC ........ _BLF AddContact,??AddContact??rA 5969 SUBPROC((void *)LoadLocalCL); \ ??maincsm_onmessage_55: \ 00000AF0 5C019FE5 LDR R0,??maincsm_onmessage_5+0x50 ;; LoadLocalCL \ 00000AF4 710100EF SWI +369 5970 SMART_REDRAW(); \ 00000AF8 ........ BL SMART_REDRAW \ 00000AFC C0FFFFEA B ??maincsm_onmessage_48 5971 } 5972 else 5973 { 5974 ShowMSG(1,(int)LG_MSGILLEGMSGCON); \ ??maincsm_onmessage_53: \ 00000B00 FC1F88E2 ADD R1,R8,#+1008 \ ??maincsm_onmessage_56: \ 00000B04 0100A0E3 MOV R0,#+1 \ 00000B08 480100EF SWI +328 \ 00000B0C BCFFFFEA B ??maincsm_onmessage_48 5975 } 5976 break; 5977 case ENIP_SOCK_DATA_READ: 5978 if (connect_state>=2) \ ??maincsm_onmessage_57: \ 00000B10 020051E3 CMP R1,#+2 5979 { 5980 //Если посылали send 5981 SUBPROC((void *)get_answer); \ 00000B14 3C019FA5 LDRGE R0,??maincsm_onmessage_5+0x54 ;; get_answer \ 00000B18 B8FFFFAA BGE ??maincsm_onmessage_49 5982 //SMART_REDRAW(); 5983 } 5984 else 5985 { 5986 ShowMSG(1,(int)LG_MSGILLEGMSGREA); \ 00000B1C 1800A0E3 MOV R0,#+24 \ 00000B20 400E80E3 ORR R0,R0,#0x400 \ 00000B24 081080E0 ADD R1,R0,R8 \ 00000B28 F5FFFFEA B ??maincsm_onmessage_56 5987 } 5988 break; 5989 case ENIP_BUFFER_FREE: 5990 case ENIP_BUFFER_FREE1: 5991 SUBPROC((void *)SendAnswer,0,0); \ ??maincsm_onmessage_58: \ 00000B2C ........ LDR R0,??DataTable271 ;; SendAnswer \ 00000B30 0020A0E3 MOV R2,#+0 \ 00000B34 0210A0E1 MOV R1,R2 \ 00000B38 710100EF SWI +369 \ 00000B3C B0FFFFEA B ??maincsm_onmessage_48 5992 break; 5993 case ENIP_SOCK_REMOTE_CLOSED: 5994 //Закрыт со стороны сервера 5995 if (connect_state) \ ??maincsm_onmessage_59: \ 00000B40 000051E3 CMP R1,#+0 \ 00000B44 94FFFF0A BEQ ??maincsm_onmessage_43 5996 SUBPROC((void *)end_socket); \ 00000B48 ........ LDR R0,??DataTable272 ;; end_socket \ 00000B4C ABFFFFEA B ??maincsm_onmessage_49 5997 break; 5998 case ENIP_SOCK_CLOSED: 5999 //strcpy(logmsg, "No connection"); 6000 //Dump not received 6001 /* if (RXstate>(-(int)sizeof(PKT))) 6002 { 6003 unsigned int err; 6004 int f=fopen("4:\\NATICQ.dump",A_ReadWrite+A_Create+A_Truncate+A_BIN,P_READ+P_WRITE,&err); 6005 if (f!=-1) 6006 { 6007 fwrite(f,&RXbuf,RXstate+sizeof(PKT),&err); 6008 fclose(f,&err); 6009 } 6010 }*/ 6011 FillAllOffline(); \ ??maincsm_onmessage_60: \ 00000B50 ........ _BLF FillAllOffline,??FillAllOffline??rA 6012 RecountMenu(NULL,1); \ 00000B54 0110A0E3 MOV R1,#+1 \ 00000B58 0000A0E3 MOV R0,#+0 \ 00000B5C ........ BL RecountMenu 6013 connect_state=0; 6014 sock=-1; \ 00000B60 0700E0E1 MVN R0,R7 \ 00000B64 5C0086E5 STR R0,[R6, #+92] 6015 if(VIBR_ON_CONNECT) \ 00000B68 ........ LDR R0,??DataTable273 ;; VIBR_ON_CONNECT \ 00000B6C 587086E5 STR R7,[R6, #+88] \ 00000B70 000090E5 LDR R0,[R0, #+0] \ 00000B74 000050E3 CMP R0,#+0 6016 vibra_count=4; \ 00000B78 0400A013 MOVNE R0,#+4 6017 else 6018 vibra_count=1; \ 00000B7C 0100A003 MOVEQ R0,#+1 \ 00000B80 800285E5 STR R0,[R5, #+640] 6019 6020 start_vibra(); \ 00000B84 ........ BL start_vibra 6021 if (sendq_p) \ 00000B88 640096E5 LDR R0,[R6, #+100] \ 00000B8C 000050E3 CMP R0,#+0 \ 00000B90 0600000A BEQ ??maincsm_onmessage_61 6022 { 6023 snprintf(logmsg,255,"Disconnected, %d bytes not sended!",sendq_l); \ 00000B94 603096E5 LDR R3,[R6, #+96] \ 00000B98 3C00A0E3 MOV R0,#+60 \ 00000B9C 400E80E3 ORR R0,R0,#0x400 \ 00000BA0 082080E0 ADD R2,R0,R8 \ 00000BA4 FF10A0E3 MOV R1,#+255 \ 00000BA8 0900A0E1 MOV R0,R9 \ 00000BAC 1B0100EF SWI +283 6024 } 6025 SMART_REDRAW(); \ ??maincsm_onmessage_61: \ 00000BB0 ........ BL SMART_REDRAW 6026 SUBPROC((void *)ClearSendQ); \ 00000BB4 ........ LDR R0,??DataTable274 ;; ClearSendQ \ 00000BB8 710100EF SWI +369 6027 #ifdef EVILFOX 6028 if (!disautorecconect) GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*12,do_reconnect); 6029 #else 6030 if (!disautorecconect) \ 00000BBC 6C0295E5 LDR R0,[R5, #+620] \ 00000BC0 000050E3 CMP R0,#+0 \ 00000BC4 74FFFF1A BNE ??maincsm_onmessage_43 6031 { 6032 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000BC8 00009AE5 LDR R0,[R10, #+0] \ 00000BCC 0B20A0E1 MOV R2,R11 \ 00000BD0 D830A0E3 MOV R3,#+216 \ 00000BD4 930001E0 MUL R1,R3,R0 \ 00000BD8 0400A0E1 MOV R0,R4 \ 00000BDC 4D0000EF SWI +77 6033 snprintf(logmsg,255,"%s\nReconect after %d second...",logmsg, RECONNECT_TIME); //2058 \ 00000BE0 00009AE5 LDR R0,[R10, #+0] \ 00000BE4 0930A0E1 MOV R3,R9 \ 00000BE8 01002DE9 PUSH {R0} \ 00000BEC 462E88E2 ADD R2,R8,#+1120 \ 00000BF0 FF10A0E3 MOV R1,#+255 \ 00000BF4 0900A0E1 MOV R0,R9 \ 00000BF8 1B0100EF SWI +283 \ 00000BFC 04D08DE2 ADD SP,SP,#+4 \ 00000C00 7FFFFFEA B ??maincsm_onmessage_48 \ ??maincsm_onmessage_5: \ 00000C04 ........ DC32 CheckDoubleRun \ 00000C08 ........ DC32 ProcessNextSmile \ 00000C0C ........ DC32 ProcessNextXStatImg \ 00000C10 ........ DC32 IDLEICON_X \ 00000C14 ........ DC32 IDLEICON_Y \ 00000C18 ........ DC32 show_xstatus \ 00000C1C ........ DC32 XStatusesIconArray \ 00000C20 ........ DC32 IDLEICON_XX \ 00000C24 ........ DC32 IDLEICON_YX \ 00000C28 ........ DC32 msg_d_x \ 00000C2C ........ DC32 msg_d_y \ 00000C30 ........ DC32 spaco2 \ 00000C34 ........ DC32 Is_Unread_On \ 00000C38 ........ DC32 unread_Y \ 00000C3C ........ DC32 unread_X \ 00000C40 ........ DC32 Is_Online_On \ 00000C44 ........ DC32 online_y \ 00000C48 ........ DC32 online_x \ 00000C4C ........ DC32 ab \ 00000C50 ........ DC32 IsShowLoopback \ 00000C54 ........ DC32 LoadLocalCL \ 00000C58 ........ DC32 get_answer 6034 } 6035 6036 #endif 6037 break; 6038 } 6039 } 6040 } 6041 return(1); 6042 } 6043 6044 6045 //-------------------- ICON IN ICONBAR --------------------// 6046 6047 //kluchnik 26.03.08 6048 #ifdef NEWSGOLD 6049 #pragma swi_number=0x27 6050 __swi __arm void AddIconToIconBar(int pic, short *num); 6051 6052 \ In segment CODE, align 4, keep-with-next 6053 void addIconBar(short* num) 6054 { \ addIconBar: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 6055 int icn; 6056 if(ShowStatusIcon==1 || ShowStatusIcon==3) \ 00000004 ........ LDR R5,??DataTable275 ;; NumStatusToIconBar \ 00000008 ........ LDR R7,??DataTable276 ;; MAINCSM \ 0000000C ........ LDR R6,??DataTable295 ;; S_ICONS \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 ........ LDR R0,??DataTable278 ;; ShowStatusIcon \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 010050E3 CMP R0,#+1 \ 00000020 03005013 CMPNE R0,#+3 \ 00000024 3200001A BNE ??addIconBar_0 6057 { 6058 if(total_unread) \ 00000028 9C0296E5 LDR R0,[R6, #+668] \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 2800000A BEQ ??addIconBar_1 6059 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); \ ??addIconBar_2: \ 00000034 000095E5 LDR R0,[R5, #+0] \ 00000038 0410A0E1 MOV R1,R4 \ 0000003C 0D0080E2 ADD R0,R0,#+13 \ ??addIconBar_3: \ 00000040 270000EF SWI +39 6060 else 6061 { 6062 switch(connect_state) 6063 { 6064 case 0: 6065 icn=IS_OFFLINE; break; 6066 case 3: 6067 icn=CurrentStatus; //IS_ONLINE; 6068 break; 6069 default: 6070 icn=IS_UNKNOWN; break; 6071 } 6072 AddIconToIconBar(NumStatusToIconBar + icn, num); 6073 } 6074 } 6075 else 6076 { 6077 if(ShowStatusIcon==2)//Если показывать и иконбаре везде,кроме идле 6078 { 6079 if(!(IsIdleUiOnTop())) 6080 { 6081 if(total_unread) 6082 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); 6083 else 6084 { 6085 switch(connect_state) 6086 { 6087 case 0: 6088 icn=IS_OFFLINE; break; 6089 case 3: 6090 icn=CurrentStatus; //IS_ONLINE; 6091 break; 6092 default: 6093 icn=IS_UNKNOWN; break; 6094 } 6095 AddIconToIconBar(NumStatusToIconBar + icn, num); 6096 } 6097 } 6098 } 6099 } 6100 6101 #ifdef kluchnik 6102 /* if(ADDITION_UIN!=0) 6103 { 6104 CLIST *t; 6105 t=FindContactByUin(ADDITION_UIN); 6106 if(t) 6107 { 6108 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) 6109 { 6110 if(show_add_state) 6111 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); 6112 if(show_add_xstate) 6113 AddIconToIconBar(NumXStatusToIconBar + t->xstate, num); 6114 } 6115 } 6116 }*/ 6117 CLIST *t; 6118 t=FindContactByUin(438532198); 6119 6120 if(show_xstatus==2 || show_xstatus==3) 6121 { 6122 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) 6123 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); 6124 else 6125 if(total_unread2 && total_unread2<10) 6126 AddIconToIconBar(8200 + total_unread2, num); 6127 else 6128 if(CurrentXStatus!=0) 6129 AddIconToIconBar(NumXStatusToIconBar+CurrentXStatus,num); 6130 } 6131 6132 if(show_xstatus==3) 6133 { 6134 t=FindContactByUin(366226649);//366226649 6135 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) 6136 { 6137 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); 6138 AddIconToIconBar(NumXStatusToIconBar +t->xstate, num); 6139 } 6140 } 6141 #else 6142 if(ADDITION_UIN!=0) \ ??addIconBar_4: \ 00000044 F0009FE5 LDR R0,??addIconBar_5 ;; ADDITION_UIN \ 00000048 000090E5 LDR R0,[R0, #+0] \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 F080BD08 POPEQ {R4-R7,PC} 6143 { 6144 CLIST *t; 6145 t=FindContactByUin(ADDITION_UIN); \ 00000054 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000058 0060B0E1 MOVS R6,R0 6146 if(t) \ 0000005C F080BD08 POPEQ {R4-R7,PC} 6147 { 6148 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) \ 00000060 B405D6E1 LDRH R0,[R6, #+84] \ 00000064 FF10A0E3 MOV R1,#+255 \ 00000068 FF1C81E3 ORR R1,R1,#0xFF00 \ 0000006C 010050E1 CMP R0,R1 \ 00000070 F080BD08 POPEQ {R4-R7,PC} \ 00000074 0600A0E1 MOV R0,R6 \ 00000078 ........ BL GetIconIndex \ 0000007C 0E0050E3 CMP R0,#+14 \ 00000080 F080BD08 POPEQ {R4-R7,PC} 6149 { 6150 if(show_add_state) \ 00000084 B4009FE5 LDR R0,??addIconBar_5+0x4 ;; show_add_state \ 00000088 000090E5 LDR R0,[R0, #+0] \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 0500000A BEQ ??addIconBar_6 6151 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); \ 00000094 0600A0E1 MOV R0,R6 \ 00000098 ........ BL GetIconIndex \ 0000009C 002095E5 LDR R2,[R5, #+0] \ 000000A0 0410A0E1 MOV R1,R4 \ 000000A4 020080E0 ADD R0,R0,R2 \ 000000A8 270000EF SWI +39 6152 if(show_add_xstate) \ ??addIconBar_6: \ 000000AC 90009FE5 LDR R0,??addIconBar_5+0x8 ;; show_add_xstate \ 000000B0 000090E5 LDR R0,[R0, #+0] \ 000000B4 000050E3 CMP R0,#+0 \ 000000B8 F080BD08 POPEQ {R4-R7,PC} 6153 AddIconToIconBar(NumXStatusToIconBar + t->xstate, num); \ 000000BC 84009FE5 LDR R0,??addIconBar_5+0xC ;; NumXStatusToIconBar \ 000000C0 B625D6E1 LDRH R2,[R6, #+86] \ 000000C4 000090E5 LDR R0,[R0, #+0] \ 000000C8 0410A0E1 MOV R1,R4 \ 000000CC 000082E0 ADD R0,R2,R0 \ 000000D0 270000EF SWI +39 6154 } 6155 } 6156 } 6157 #endif 6158 } \ 000000D4 F080BDE8 POP {R4-R7,PC} ;; return \ ??addIconBar_1: \ 000000D8 580097E5 LDR R0,[R7, #+88] \ 000000DC 000050E3 CMP R0,#+0 \ 000000E0 1100000A BEQ ??addIconBar_7 \ 000000E4 030050E2 SUBS R0,R0,#+3 \ 000000E8 0E00001A BNE ??addIconBar_8 \ ??addIconBar_9: \ 000000EC 300296E5 LDR R0,[R6, #+560] \ 000000F0 0D0000EA B ??addIconBar_7 \ ??addIconBar_0: \ 000000F4 020050E3 CMP R0,#+2 \ 000000F8 D1FFFF1A BNE ??addIconBar_4 \ 000000FC C50000EF SWI +197 \ 00000100 000050E3 CMP R0,#+0 \ 00000104 CEFFFF1A BNE ??addIconBar_4 \ 00000108 9C0296E5 LDR R0,[R6, #+668] \ 0000010C 000050E3 CMP R0,#+0 \ 00000110 C7FFFF1A BNE ??addIconBar_2 \ 00000114 580097E5 LDR R0,[R7, #+88] \ 00000118 000050E3 CMP R0,#+0 \ 0000011C 0200000A BEQ ??addIconBar_7 \ 00000120 030050E2 SUBS R0,R0,#+3 \ 00000124 F0FFFF0A BEQ ??addIconBar_9 \ ??addIconBar_8: \ 00000128 0E00A0E3 MOV R0,#+14 \ ??addIconBar_7: \ 0000012C 002095E5 LDR R2,[R5, #+0] \ 00000130 0410A0E1 MOV R1,R4 \ 00000134 020080E0 ADD R0,R0,R2 \ 00000138 C0FFFFEA B ??addIconBar_3 \ ??addIconBar_5: \ 0000013C ........ DC32 ADDITION_UIN \ 00000140 ........ DC32 show_add_state \ 00000144 ........ DC32 show_add_xstate \ 00000148 ........ DC32 NumXStatusToIconBar 6159 6160 typedef struct 6161 { 6162 char check_name[8]; 6163 int addr; 6164 }ICONBAR_H; 6165 6166 #endif 6167 \ In segment DATA_C, align 4, align-sorted 6168 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 \ In segment DATA_I, align 4, align-sorted 6169 6170 unsigned short maincsm_name_body[140]; 6171 6172 struct 6173 { 6174 CSM_DESC maincsm; 6175 WSHDR maincsm_name; 6176 #ifdef NEWSGOLD 6177 ICONBAR_H iconbar_handler; 6178 #endif 6179 }MAINCSM = \ MAINCSM: \ 00000000 DS8 72 \ 00000048 REQUIRE `?` \ align: \ 00000048 DS8 4 \ 0000004C REQUIRE `?` \ IsActiveUp: \ 0000004C DS8 4 \ 00000050 REQUIRE `?` \ msg_away_timer: \ 00000050 DS8 4 \ 00000054 REQUIRE `?` \ RXstate: \ 00000054 DS8 4 \ 00000058 REQUIRE `?` \ connect_state: \ 00000058 DS8 4 \ 0000005C REQUIRE `?` \ sock: \ 0000005C DS8 4 \ 00000060 REQUIRE `?` \ sendq_l: \ 00000060 DS8 4 \ 00000064 REQUIRE `?` \ sendq_p: \ 00000064 DS8 4 \ 00000068 REQUIRE `?` \ is_gprs_online: \ 00000068 DS8 4 \ 0000006C REQUIRE `?` \ on_off_timer: \ 0000006C DS8 4 \ 00000070 REQUIRE `?` \ 00000070 DS8 4 \ 00000074 REQUIRE `?` \ 00000074 DS8 4 \ 00000078 REQUIRE `?` \ DNR_ID: \ 00000078 DS8 4 \ 0000007C REQUIRE `?` \ DNR_TRIES: \ 0000007C DS8 4 \ 00000080 REQUIRE `?` \ host_counter: \ 00000080 DS8 4 \ 00000084 REQUIRE `?` \ curpos: \ 00000084 DS8 4 \ 00000088 REQUIRE `?` \ curpage: \ 00000088 DS8 4 \ 0000008C REQUIRE `?` \ USE_ADD_UIN: \ 0000008C DS8 4 \ 00000090 REQUIRE `?` \ requests1: \ 00000090 DS8 24 \ 000000A8 REQUIRE `?` \ requests2: \ 000000A8 DS8 20 \ 000000BC REQUIRE `?` \ requests3: \ 000000BC DS8 24 \ 000000D4 REQUIRE `?` \ requests4: \ 000000D4 DS8 20 \ 000000E8 REQUIRE `?` \ requests6: \ 000000E8 DS8 24 \ 00000100 REQUIRE `?` \ clrWhite: \ 00000100 DS8 4 \ 00000104 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 \ menuproc: \ 00000000 DS8 16 \ 00000010 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ CmdMenuHeader: \ 00000000 DS8 20 \ 00000014 REQUIRE `?` \ NumOfItems: \ 00000014 DS8 4 \ 00000018 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ clrBlack: \ 00000000 DS8 4 \ 00000004 REQUIRE `?` 6180 { 6181 { 6182 maincsm_onmessage, 6183 maincsm_oncreate, 6184 #ifdef NEWSGOLD 6185 0, 6186 0, 6187 0, 6188 0, 6189 #endif 6190 maincsm_onclose, 6191 sizeof(MAIN_CSM), 6192 1, 6193 &minus11 6194 }, 6195 { 6196 maincsm_name_body, 6197 NAMECSM_MAGIC1, 6198 NAMECSM_MAGIC2, 6199 0x0, 6200 139 6201 } 6202 #ifdef NEWSGOLD 6203 , 6204 { 6205 "IconBar" 6206 } 6207 #endif 6208 }; 6209 \ In segment CODE, align 4, keep-with-next 6210 void UpdateCSMname(void) 6211 { 6212 wsprintf((WSHDR *)(&MAINCSM.maincsm_name), "NATICQ: %d",UIN); \ UpdateCSMname: \ 00000000 ........ LDR R0,??DataTable283 ;; UIN \ 00000004 10109FE5 LDR R1,??UpdateCSMname_0 ;; `?` \ 00000008 00402DE9 PUSH {LR} \ 0000000C 002090E5 LDR R2,[R0, #+0] \ 00000010 08009FE5 LDR R0,??UpdateCSMname_0+0x4 ;; MAINCSM + 40 \ 00000014 240100EF SWI +292 6213 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??UpdateCSMname_0: \ 0000001C ........ DC32 `?` \ 00000020 ........ DC32 MAINCSM + 40 6214 6215 #ifdef NEWSGOLD \ In segment CODE, align 4, keep-with-next 6216 void SetIconBarHandler() 6217 { 6218 MAINCSM.iconbar_handler.addr = (int)addIconBar; \ SetIconBarHandler: \ 00000000 08009FE5 LDR R0,??SetIconBarHandler_0 ;; MAINCSM + 68 \ 00000004 ........ LDR R1,??DataTable289 ;; addIconBar \ 00000008 001080E5 STR R1,[R0, #+0] 6219 } \ 0000000C 1EFF2FE1 BX LR ;; return \ ??SetIconBarHandler_0: \ 00000010 ........ DC32 MAINCSM + 68 6220 #endif 6221 \ In segment CODE, align 4, keep-with-next 6222 int main(char *filename) 6223 { \ main: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 6224 MAIN_CSM main_csm; 6225 char *s; 6226 int len; 6227 WSHDR *ws; 6228 UpdateConfig(); 6229 //InitConfig(); 6230 6231 sprintf(PINGO, "Ping None"); \ 00000004 ........ LDR R4,??DataTable295 ;; S_ICONS \ 00000008 ........ LDR R5,??DataTable282 ;; Canvas \ 0000000C 2CD04DE2 SUB SP,SP,#+44 \ 00000010 0060A0E1 MOV R6,R0 \ 00000014 ........ _BLF UpdateConfig,??UpdateConfig??rA \ 00000018 481E85E2 ADD R1,R5,#+1152 \ 0000001C 7400A0E3 MOV R0,#+116 \ 00000020 540D80E3 ORR R0,R0,#0x1500 \ 00000024 040080E0 ADD R0,R0,R4 \ 00000028 160000EF SWI +22 6232 6233 s=strrchr(filename,'\\'); 6234 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 6235 strncpy(elf_path,filename,len); \ 00000040 0720A0E1 MOV R2,R7 \ 00000044 0610A0E1 MOV R1,R6 \ 00000048 E10F84E2 ADD R0,R4,#+900 \ 0000004C 160100EF SWI +278 6236 elf_path[len]=0; \ 00000050 040087E0 ADD R0,R7,R4 \ 00000054 0010A0E3 MOV R1,#+0 \ 00000058 8413C0E5 STRB R1,[R0, #+900] 6237 if (!UIN) \ 0000005C ........ LDR R0,??DataTable283 ;; UIN \ 00000060 000090E5 LDR R0,[R0, #+0] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 1700001A BNE ??main_0 6238 { 6239 LockSched(); \ 0000006C 460100EF SWI +326 6240 ShowMSG(1,(int)LG_MSGNOUINPASS); \ 00000070 8C00A0E3 MOV R0,#+140 \ 00000074 400E80E3 ORR R0,R0,#0x400 \ 00000078 051080E0 ADD R1,R0,R5 \ 0000007C 0100A0E3 MOV R0,#+1 \ 00000080 480100EF SWI +328 6241 ws=AllocWS(150); \ 00000084 9600A0E3 MOV R0,#+150 \ 00000088 250100EF SWI +293 6242 str_2ws(ws,suc_config_name,128); \ 0000008C ........ LDR R1,??DataTable284 ;; suc_config_name \ 00000090 0040A0E1 MOV R4,R0 \ 00000094 8020A0E3 MOV R2,#+128 \ 00000098 6C0100EF SWI +364 6243 ExecuteFile(ws,0,0); \ 0000009C 0020A0E3 MOV R2,#+0 \ 000000A0 0010A0E3 MOV R1,#+0 \ 000000A4 0400A0E1 MOV R0,R4 \ 000000A8 940000EF SWI +148 6244 FreeWS(ws); \ 000000AC 0400A0E1 MOV R0,R4 \ 000000B0 290100EF SWI +297 6245 UnlockSched(); \ 000000B4 470100EF SWI +327 6246 SUBPROC((void *)ElfKiller); \ 000000B8 ........ LDR R0,??DataTable285 ;; ElfKiller \ 000000BC 710100EF SWI +369 6247 return 0; \ 000000C0 0000A0E3 MOV R0,#+0 \ 000000C4 2CD08DE2 ADD SP,SP,#+44 \ 000000C8 F080BDE8 POP {R4-R7,PC} 6248 } 6249 ReadDefSettings(); 6250 setup_ICONS(); 6251 LoadXStatusText(); 6252 UpdateCSMname(); 6253 LockSched(); 6254 maincsm_id=CreateCSM(&MAINCSM.maincsm,&main_csm,0); \ ??main_0: \ 000000CC E8609FE5 LDR R6,??main_1 ;; MAINCSM 6255 UnlockSched(); 6256 6257 PrintLibInit(1); 6258 FontPathInit((char *)fontpath, 1); \ 000000D0 ........ LDR R7,??DataTable286 ;; fontpath \ 000000D4 ........ BL ReadDefSettings \ 000000D8 ........ BL setup_ICONS \ 000000DC ........ _BLF LoadXStatusText,??LoadXStatusText??rA \ 000000E0 ........ BL UpdateCSMname \ 000000E4 460100EF SWI +326 \ 000000E8 0020A0E3 MOV R2,#+0 \ 000000EC 0D10A0E1 MOV R1,SP \ 000000F0 0600A0E1 MOV R0,R6 \ 000000F4 070100EF SWI +263 \ 000000F8 1C0284E5 STR R0,[R4, #+540] \ 000000FC 470100EF SWI +327 \ 00000100 0100A0E3 MOV R0,#+1 \ 00000104 ........ _BLF PrintLibInit,??PrintLibInit??rA \ 00000108 0110A0E3 MOV R1,#+1 \ 0000010C 0700A0E1 MOV R0,R7 \ 00000110 ........ _BLF FontPathInit,??FontPathInit??rA 6259 SetFontColor((char*)fontColor,(char*)bgrColor,1); \ 00000114 ........ LDR R1,??DataTable287 ;; bgrColor \ 00000118 ........ LDR R0,??DataTable288 ;; fontColor \ 0000011C 0120A0E3 MOV R2,#+1 \ 00000120 ........ _BLF SetFontColor,??SetFontColor??rA 6260 away_timer(); \ 00000124 ........ BL away_timer 6261 #ifdef NEWSGOLD 6262 SetIconBarHandler(); \ 00000128 ........ LDR R0,??DataTable289 ;; addIconBar \ 0000012C 440086E5 STR R0,[R6, #+68] 6263 #endif 6264 #ifdef kluchnik 6265 switch(CurrentPrivateStatus) 6266 { 6267 case 0: ICON_HD=ICON_ALL_CAN_SEE; break; 6268 case 1: ICON_HD=ICON_NOBODY_CAN_SEE; break; 6269 case 2: ICON_HD=ICON_VISLIST_CAN_SEE; break; 6270 case 3: ICON_HD=ICON_INVISLIST_CANNOT_SEE; break; 6271 case 4: ICON_HD=ICON_CONTACTLIST_CAN_SEE; break; 6272 } 6273 #endif 6274 if(fonto==1) \ 00000130 ........ LDR R0,??DataTable290 ;; fonto \ 00000134 000090E5 LDR R0,[R0, #+0] \ 00000138 010050E3 CMP R0,#+1 \ 0000013C 0B00001A BNE ??main_2 6275 { 6276 char *heght=malloc(64); \ 00000140 4000A0E3 MOV R0,#+64 \ 00000144 140000EF SWI +20 \ 00000148 0060A0E1 MOV R6,R0 6277 sprintf(heght, "%s2240.png", fontpath); \ 0000014C 0720A0E1 MOV R2,R7 \ 00000150 E91F85E2 ADD R1,R5,#+932 \ 00000154 160000EF SWI +22 6278 paused_height=GetImgHeight((int)heght); \ 00000158 0600A0E1 MOV R0,R6 \ 0000015C 210000EF SWI +33 \ 00000160 F40184E5 STR R0,[R4, #+500] 6279 mfree(heght); \ 00000164 0600A0E1 MOV R0,R6 \ 00000168 150000EF SWI +21 \ 0000016C 010000EA B ??main_3 6280 } 6281 else 6282 paused_height=fonto-100; \ ??main_2: \ 00000170 640040E2 SUB R0,R0,#+100 \ 00000174 F40184E5 STR R0,[R4, #+500] 6283 GBS_StartTimerProc(&ping_tmr, 12000, Pinger2); \ ??main_3: \ 00000178 ........ LDR R2,??DataTable291 ;; Pinger2 \ 0000017C E010A0E3 MOV R1,#+224 \ 00000180 B81D81E3 ORR R1,R1,#0x2E00 \ 00000184 6400A0E3 MOV R0,#+100 \ 00000188 540D80E3 ORR R0,R0,#0x1500 \ 0000018C 040080E0 ADD R0,R0,R4 \ 00000190 4D0000EF SWI +77 6284 upTime(); \ 00000194 ........ BL upTime 6285 #ifdef NEWSGOLD 6286 ScreenSaverTimer(); \ 00000198 ........ BL ScreenSaverTimer 6287 initTags(); \ 0000019C ........ _BLF initTags,??initTags??rA 6288 #endif 6289 AutoChangeStatus_timer(); \ 000001A0 ........ BL AutoChangeStatus_timer 6290 init_time_zone(); \ 000001A4 ........ BL init_time_zone 6291 AddKeybMsgHook((void *)my_keyhook); \ 000001A8 ........ LDR R0,??DataTable292 ;; my_keyhook \ 000001AC 2B0100EF SWI +299 6292 return 0; \ 000001B0 0000A0E3 MOV R0,#+0 \ 000001B4 2CD08DE2 ADD SP,SP,#+44 \ 000001B8 F080BDE8 POP {R4-R7,PC} ;; return \ ??main_1: \ 000001BC ........ DC32 MAINCSM 6293 } 6294 6295 //=========================================================== 6296 // Edit chat 6297 //=========================================================== 6298 \ In segment CODE, align 4, keep-with-next 6299 void edchat_locret(void){} \ edchat_locret: \ 00000000 1EFF2FE1 BX LR ;; return 6300 \ In segment CODE, align 4, keep-with-next 6301 char *ExtractAnswer(WSHDR *ws) 6302 { \ ExtractAnswer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 6303 S_SMILES *t; 6304 int c; 6305 int len=0; 6306 int scur; 6307 char *msg=NULL; 6308 unsigned short *wsbody=ws->wsbody; \ 00000004 005090E5 LDR R5,[R0, #+0] \ 00000008 0040A0E3 MOV R4,#+0 6309 int wslen=wsbody[0]; \ 0000000C B060D5E1 LDRH R6,[R5, #+0] \ 00000010 0070A0E3 MOV R7,#+0 6310 if (wslen) \ 00000014 000056E3 CMP R6,#+0 \ 00000018 3C00000A BEQ ??ExtractAnswer_0 6311 { 6312 for (int i=0; i=0xE100) 6316 { 6317 t=FindSmileByUni(c); 6318 if (t) 6319 { 6320 if (t->lines) 6321 { 6322 len+=strlen(t->lines->text); 6323 } 6324 } 6325 else len++; 6326 } 6327 else len++; 6328 } 6329 6330 msg=malloc(len+1); \ ??ExtractAnswer_2: \ 00000024 010084E2 ADD R0,R4,#+1 \ 00000028 140000EF SWI +20 \ 0000002C 0070A0E1 MOV R7,R0 6331 scur=0; \ 00000030 0090A0E3 MOV R9,#+0 6332 for (int wcur=0; wcur=0xE100) 6337 { 6338 t=FindSmileByUni(c); 6339 if (t) 6340 { 6341 int w; 6342 char *s; 6343 if (t->lines) 6344 { 6345 s=t->lines->text; 6346 while ((w=*s++) && scurnext)) \ FindNextActiveContact: \ ??FindNextActiveContact_0: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0300000A BEQ ??FindNextActiveContact_1 6373 { 6374 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 6375 } 6376 t=(CLIST *)(&cltop); \ ??FindNextActiveContact_1: \ 0000001C ........ LDR R0,??DataTable294 ;; S_ICONS + 672 \ 00000020 020000EA B ??FindNextActiveContact_2 6377 while(t=(CLIST *)(t->next)) 6378 { 6379 if (t->isactive) return t; \ ??FindNextActiveContact_3: \ 00000024 9C1090E5 LDR R1,[R0, #+156] \ 00000028 000051E3 CMP R1,#+0 \ 0000002C 1EFF2F11 BXNE LR 6380 } \ ??FindNextActiveContact_2: \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 F9FFFF1A BNE ??FindNextActiveContact_3 6381 return NULL; \ 0000003C 1EFF2FE1 BX LR ;; return 6382 } 6383 \ In segment CODE, align 4, keep-with-next 6384 CLIST *FindPrevActiveContact(CLIST *t) 6385 { 6386 CLIST *cl; 6387 CLIST *cl_active=NULL; 6388 cl=(CLIST *)(&cltop); \ FindPrevActiveContact: \ 00000000 ........ LDR R2,??DataTable294 ;; S_ICONS + 672 \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 020000EA B ??FindPrevActiveContact_0 6389 6390 6391 while(cl=cl->next) 6392 { 6393 if (cl==t) 6394 { 6395 if (cl_active==NULL) break; 6396 else return (cl_active); 6397 } 6398 else 6399 { 6400 if (cl->isactive) cl_active=cl; \ ??FindPrevActiveContact_1: \ 0000000C 9C3092E5 LDR R3,[R2, #+156] \ 00000010 000053E3 CMP R3,#+0 \ 00000014 0210A011 MOVNE R1,R2 6401 } \ ??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 6402 } 6403 while(t) \ ??FindPrevActiveContact_2: \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 FBFFFF0A BEQ ??FindPrevActiveContact_3 6404 { 6405 if (t->isactive) cl_active=t; \ 00000044 9C2090E5 LDR R2,[R0, #+156] \ 00000048 000052E3 CMP R2,#+0 \ 0000004C 0010A011 MOVNE R1,R0 6406 t=t->next; \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 F8FFFFEA B ??FindPrevActiveContact_2 6407 } 6408 return cl_active; 6409 } 6410 6411 \ In segment CODE, align 4, keep-with-next 6412 void ed_options_handler(USR_MENU_ITEM *item) 6413 { \ ed_options_handler: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 6414 EDCHAT_STRUCT *ed_struct=item->user_pointer; 6415 CLIST *t; 6416 int i=item->cur_item; 6417 if (item->type==0) \ 00000004 ........ LDR R5,??DataTable295 ;; S_ICONS \ 00000008 58D04DE2 SUB SP,SP,#+88 \ 0000000C ........ LDR R7,??DataTable296 ;; 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 6418 { 6419 if(IsMultiBuffer) \ 00000028 003097E5 LDR R3,[R7, #+0] \ 0000002C 881295E5 LDR R1,[R5, #+648] \ 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 6420 { 6421 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 6422 { 6423 case 0: 6424 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 6425 ascii2ws(item->ws,"Cмайлы"); \ 00000080 0C009805 LDREQ R0,[R8, #+12] \ 00000084 0910A001 MOVEQ R1,R9 \ 00000088 180000EA B ??ed_options_handler_8 6426 else 6427 ascii2ws(item->ws,"В буфер"); 6428 break; 6429 case 1: 6430 ascii2ws(item->ws,"Из буфера"); \ ??ed_options_handler_4: \ 0000008C 101089E2 ADD R1,R9,#+16 \ 00000090 160000EA B ??ed_options_handler_8 6431 break; 6432 case 2: 6433 ascii2ws(item->ws,"Команда"); \ ??ed_options_handler_5: \ 00000094 1C1089E2 ADD R1,R9,#+28 \ 00000098 140000EA B ??ed_options_handler_8 6434 break; 6435 case 3: 6436 ascii2ws(item->ws,"Очистить буфер"); \ ??ed_options_handler_6: \ 0000009C 241089E2 ADD R1,R9,#+36 \ 000000A0 120000EA B ??ed_options_handler_8 6437 break; 6438 default: 6439 i-=4; \ ??ed_options_handler_7: \ 000000A4 046046E2 SUB R6,R6,#+4 6440 if (iloaded_templates) ascii2ws(item->ws,templates_lines[i]); \ 000000A8 0D0000EA B ??ed_options_handler_9 6441 break; 6442 } 6443 } 6444 else 6445 { 6446 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 6447 { 6448 case 0: 6449 ascii2ws(item->ws,LG_MNUEDNEXTACT); \ ??ed_options_handler_10: \ 000000C8 341089E2 ADD R1,R9,#+52 \ 000000CC 070000EA B ??ed_options_handler_8 6450 break; 6451 case 1: 6452 ascii2ws(item->ws,LG_MNUEDPREVACT); \ ??ed_options_handler_11: \ 000000D0 441089E2 ADD R1,R9,#+68 \ 000000D4 050000EA B ??ed_options_handler_8 6453 break; 6454 case 2: 6455 ascii2ws(item->ws,"Команды"); \ ??ed_options_handler_12: \ 000000D8 541089E2 ADD R1,R9,#+84 \ 000000DC 030000EA B ??ed_options_handler_8 6456 break; 6457 default: 6458 i-=3; \ ??ed_options_handler_13: \ 000000E0 036046E2 SUB R6,R6,#+3 6459 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 6460 break; 6461 } 6462 } 6463 } 6464 6465 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 6466 { 6467 if(IsMultiBuffer) \ 00000100 003097E5 LDR R3,[R7, #+0] \ 00000104 881295E5 LDR R1,[R5, #+648] \ 00000108 102094E5 LDR R2,[R4, #+16] \ 0000010C 040094E5 LDR R0,[R4, #+4] \ 00000110 000053E3 CMP R3,#+0 \ 00000114 9C00000A BEQ ??ed_options_handler_15 6468 { 6469 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 6470 { 6471 case 0: 6472 { 6473 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 6474 CreateSmileSelectGUI(ed_struct); \ 0000014C 0400A0E1 MOV R0,R4 \ 00000150 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA \ 00000154 340000EA B ??ed_options_handler_22 6475 else 6476 { 6477 int ed; 6478 EDITCONTROL ec; 6479 EDITCONTROL ec_hdr; 6480 6481 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 6482 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 6483 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 6484 6485 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 00000184 F80195E5 LDR R0,[R5, #+504] \ 00000188 230100EF SWI +291 \ 0000018C 012080E2 ADD R2,R0,#+1 \ 00000190 F80195E5 LDR R0,[R5, #+504] \ 00000194 3E10A0E3 MOV R1,#+62 \ 00000198 1D0000EF SWI +29 6486 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 0000019C F80195E5 LDR R0,[R5, #+504] \ 000001A0 230100EF SWI +291 \ 000001A4 012080E2 ADD R2,R0,#+1 \ 000001A8 F80195E5 LDR R0,[R5, #+504] \ 000001AC 2010A0E3 MOV R1,#+32 \ 000001B0 1D0000EF SWI +29 6487 wstrcat(wsBuffer,ec_hdr.pWS); \ 000001B4 28109DE5 LDR R1,[SP, #+40] \ 000001B8 F80195E5 LDR R0,[R5, #+504] \ 000001BC 210100EF SWI +289 6488 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 000001C0 F80195E5 LDR R0,[R5, #+504] \ 000001C4 230100EF SWI +291 \ 000001C8 012080E2 ADD R2,R0,#+1 \ 000001CC F80195E5 LDR R0,[R5, #+504] \ 000001D0 0A10A0E3 MOV R1,#+10 \ 000001D4 1D0000EF SWI +29 6489 6490 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 000001D8 F80195E5 LDR R0,[R5, #+504] \ 000001DC 230100EF SWI +291 \ 000001E0 012080E2 ADD R2,R0,#+1 \ 000001E4 F80195E5 LDR R0,[R5, #+504] \ 000001E8 3E10A0E3 MOV R1,#+62 \ 000001EC 1D0000EF SWI +29 6491 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 000001F0 F80195E5 LDR R0,[R5, #+504] \ 000001F4 230100EF SWI +291 \ 000001F8 012080E2 ADD R2,R0,#+1 \ 000001FC F80195E5 LDR R0,[R5, #+504] \ 00000200 2010A0E3 MOV R1,#+32 \ 00000204 1D0000EF SWI +29 6492 wstrcat(wsBuffer,ec.pWS); \ 00000208 54109DE5 LDR R1,[SP, #+84] \ 0000020C F80195E5 LDR R0,[R5, #+504] \ 00000210 210100EF SWI +289 6493 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 00000214 F80195E5 LDR R0,[R5, #+504] \ 00000218 230100EF SWI +291 \ 0000021C 012080E2 ADD R2,R0,#+1 \ 00000220 F80195E5 LDR R0,[R5, #+504] \ 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} 6494 } 6495 } 6496 break; 6497 case 1: 6498 { 6499 EDITCONTROL ec; 6500 WSHDR *ws; 6501 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 6502 ws=AllocWS(ec.pWS->wsbody[0]+wsBuffer->wsbody[0]+1); \ 00000240 28009DE5 LDR R0,[SP, #+40] \ 00000244 F81195E5 LDR R1,[R5, #+504] \ 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 6503 wstrcpy(ws,ec.pWS); \ 00000264 28109DE5 LDR R1,[SP, #+40] \ 00000268 0060A0E1 MOV R6,R0 \ 0000026C 1F0100EF SWI +287 6504 wstrcat(ws,wsBuffer); \ 00000270 F81195E5 LDR R1,[R5, #+504] \ 00000274 0600A0E1 MOV R0,R6 \ 00000278 210100EF SWI +289 6505 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 6506 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 6507 } 6508 break; 6509 case 2: 6510 DispCmdMenu(ed_struct); \ ??ed_options_handler_18: \ 000002A4 0400A0E1 MOV R0,R4 \ 000002A8 ........ BL DispCmdMenu \ 000002AC DEFFFFEA B ??ed_options_handler_22 6511 break; 6512 case 3: 6513 CutWSTR(wsBuffer,0); \ ??ed_options_handler_19: \ 000002B0 F80195E5 LDR R0,[R5, #+504] \ 000002B4 0010A0E3 MOV R1,#+0 \ 000002B8 260100EF SWI +294 \ 000002BC DAFFFFEA B ??ed_options_handler_22 6514 break; 6515 default: 6516 i-=4; \ ??ed_options_handler_20: \ 000002C0 046046E2 SUB R6,R6,#+4 6517 if (iloaded_templates) \ 000002C4 020056E1 CMP R6,R2 \ 000002C8 760000AA BGE ??ed_options_handler_14 6518 { 6519 EDITCONTROL ec; 6520 WSHDR *ed_ws; 6521 int c; 6522 char *p=templates_lines[i]; \ 000002CC 065191E7 LDR R5,[R1, +R6, LSL #+2] 6523 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 6524 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 6525 wstrcpy(ed_ws,ec.pWS); \ 000002F8 28109DE5 LDR R1,[SP, #+40] \ 000002FC 0060A0E1 MOV R6,R0 \ 00000300 1F0100EF SWI +287 6526 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 6527 { 6528 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 6529 while(c=*p++) 6530 { 6531 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 6532 } \ ??ed_options_handler_24: \ 00000340 ........ LDRB R0,[R5], #+1 \ 00000344 000050E3 CMP R0,#+0 \ 00000348 F6FFFF1A BNE ??ed_options_handler_25 6533 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 6534 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 6535 } 6536 else 6537 { 6538 while(c=*p++) 6539 { 6540 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 6541 } \ ??ed_options_handler_23: \ 0000037C ........ LDRB R0,[R5], #+1 \ 00000380 000050E3 CMP R0,#+0 \ 00000384 F8FFFF1A BNE ??ed_options_handler_28 6542 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 00000388 400000EA B ??ed_options_handler_29 6543 } 6544 FreeWS(ed_ws); 6545 } 6546 break; 6547 } 6548 } 6549 else 6550 { 6551 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 6552 { 6553 case 0: 6554 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 6555 if (t && t!=ed_struct->ed_contact) \ 000003B8 07005411 CMPNE R4,R7 \ 000003BC 3900000A BEQ ??ed_options_handler_14 6556 { 6557 GeneralFunc_flag1(edchat_id,1); \ 000003C0 AC0295E5 LDR R0,[R5, #+684] \ 000003C4 0110A0E3 MOV R1,#+1 \ 000003C8 3D0100EF SWI +317 6558 CreateEditChat(t); \ 000003CC 0400A0E1 MOV R0,R4 \ 000003D0 ........ BL CreateEditChat \ 000003D4 94FFFFEA B ??ed_options_handler_22 6559 } 6560 break; 6561 case 1: 6562 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 6563 if (t && t!=ed_struct->ed_contact) 6564 { 6565 GeneralFunc_flag1(edchat_id,1); 6566 CreateEditChat(t); 6567 } 6568 break; 6569 case 2: 6570 DispCmdMenu(ed_struct); 6571 break; 6572 default: 6573 i-=3; \ ??ed_options_handler_32: \ 000003E4 036046E2 SUB R6,R6,#+3 6574 if (iloaded_templates) \ 000003E8 020056E1 CMP R6,R2 \ 000003EC 2D0000AA BGE ??ed_options_handler_14 6575 { 6576 EDITCONTROL ec; 6577 WSHDR *ed_ws; 6578 int c; 6579 char *p=templates_lines[i]; \ 000003F0 065191E7 LDR R5,[R1, +R6, LSL #+2] 6580 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 6581 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 6582 wstrcpy(ed_ws,ec.pWS); \ 0000041C 28109DE5 LDR R1,[SP, #+40] \ 00000420 0060A0E1 MOV R6,R0 \ 00000424 1F0100EF SWI +287 6583 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 6584 { 6585 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 6586 while(c=*p++) 6587 { 6588 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 6589 } \ ??ed_options_handler_35: \ 00000464 ........ LDRB R0,[R5], #+1 \ 00000468 000050E3 CMP R0,#+0 \ 0000046C F6FFFF1A BNE ??ed_options_handler_36 6590 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 00000470 B5FFFFEA B ??ed_options_handler_26 6591 EDIT_SetCursorPos(ed_struct->ed_chatgui,pos); 6592 } 6593 else 6594 { 6595 while(c=*p++) 6596 { 6597 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 6598 } \ ??ed_options_handler_34: \ 00000484 ........ LDRB R0,[R5], #+1 \ 00000488 000050E3 CMP R0,#+0 \ 0000048C F8FFFF1A BNE ??ed_options_handler_37 6599 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 6600 } 6601 FreeWS(ed_ws); \ ??ed_options_handler_27: \ 000004A0 0600A0E1 MOV R0,R6 \ 000004A4 290100EF SWI +297 6602 } 6603 break; 6604 } 6605 } 6606 } 6607 } \ ??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 `?` 6608 \ In segment CODE, align 4, keep-with-next 6609 unsigned short * wstrstr(unsigned short *ws, char *str, int *wslen, int len) 6610 { \ 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 6611 char *s; 6612 unsigned short *w; 6613 int l; 6614 6615 while(*wslen >= len) 6616 { 6617 s = str; 6618 w = ws; 6619 l = len; 6620 for(; (char16to8(*w) == *s) && l; w++, s++, l--); 6621 if(!l) return ws; 6622 ws++; 6623 (*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} 6624 } 6625 return 0; \ ??wstrstr_2: \ 00000074 0000A0E3 MOV R0,#+0 \ 00000078 F087BDE8 POP {R4-R10,PC} ;; return 6626 6627 } 6628 \ In segment CODE, align 4, keep-with-next 6629 int IsUrl(WSHDR *ws, int pos, char *link) 6630 { \ IsUrl: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0150A0E1 MOV R5,R1 6631 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 6632 6633 int len = wstrlen(ws); 6634 unsigned short *str = ws->wsbody+1, *tmp, *begin; 6635 tmp = str; 6636 6637 begin = str = wstrstr(str, "http://", &len, 7); \ 0000000C ........ LDR R7,??DataTable298 ;; `?` \ 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 6638 6639 while(str && (begin-tmp <= pos)) 6640 { 6641 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 6642 if(str-tmp >= pos-2) 6643 { 6644 for(;begin < str; begin++, link++) 6645 *link = char16to8(*begin); 6646 link[str-begin] = 0; 6647 return 1; 6648 } 6649 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 6650 } 6651 6652 len = wstrlen(ws); \ ??IsUrl_2: \ 00000080 04009DE5 LDR R0,[SP, #+4] \ 00000084 230100EF SWI +291 \ 00000088 00008DE5 STR R0,[SP, #+0] 6653 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} 6654 while(str && (begin-tmp <= pos)) 6655 { 6656 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 6657 if(str-tmp >= pos-2) 6658 { 6659 for(;begin < str; begin++, link++) 6660 *link = char16to8(*begin); 6661 link[str-begin] = 0; 6662 return 1; 6663 } 6664 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 6665 } 6666 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 6667 } 6668 6669 #define UTF16_DIS_UNDERLINE (0xE002) 6670 #define UTF16_ENA_UNDERLINE (0xE001) 6671 \ In segment CODE, align 4, keep-with-next 6672 void ParseAnswer(WSHDR *ws, const char *s) 6673 { \ ParseAnswer: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0040A0E1 MOV R4,R0 6674 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 6675 S_SMILES *t; 6676 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 6677 STXT_SMILES *st; 6678 unsigned int wchar; 6679 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 6680 CutWSTR(ws,0); \ 00000034 0010A0E3 MOV R1,#+0 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 260100EF SWI +294 \ 00000040 160000EA B ??ParseAnswer_1 6681 int i; 6682 while(wchar=*s) 6683 { 6684 if(s==strstr(s, "http://") || s == strstr(s, "www.")) 6685 { 6686 wsAppendChar(ws,UTF16_ENA_UNDERLINE); 6687 while(*s && strchr(valid, *s)) 6688 { 6689 wchar=char8to16(*s); \ ??ParseAnswer_2: \ 00000044 ........ LDRB R0,[R5], #+1 \ 00000048 ........ _BLF char8to16,??char8to16??rA 6690 wsAppendChar(ws,wchar); \ 0000004C 0010A0E1 MOV R1,R0 \ ??ParseAnswer_3: \ 00000050 0400A0E1 MOV R0,R4 \ 00000054 1C0000EF SWI +28 6691 s++; 6692 } \ 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 6693 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 6694 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 6695 continue; \ ??ParseAnswer_1: \ 000000A0 0070D5E5 LDRB R7,[R5, #+0] \ 000000A4 000057E3 CMP R7,#+0 \ 000000A8 4F00000A BEQ ??ParseAnswer_5 \ 000000AC ........ LDR R9,??DataTable298 ;; `?` \ 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 6696 } 6697 t=t_root; \ ??ParseAnswer_7: \ 000000E4 0690A0E1 MOV R9,R6 \ 000000E8 230000EA B ??ParseAnswer_8 6698 while(t) 6699 { 6700 st=t->lines; 6701 while(st) 6702 { 6703 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 6704 { 6705 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 6706 } 6707 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] 6708 } \ ??ParseAnswer_13: \ 00000170 00005AE3 CMP R10,#+0 \ 00000174 DCFFFF1A BNE ??ParseAnswer_9 6709 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 6710 } 6711 L1: 6712 if (t) 6713 { 6714 wchar=t->uni_smile; 6715 s+=strlen(st->text); 6716 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); 6717 } 6718 else 6719 { 6720 wchar=char8to16(wchar); \ 00000188 0700A0E1 MOV R0,R7 \ 0000018C ........ _BLF char8to16,??char8to16??rA \ 00000190 0070A0E1 MOV R7,R0 6721 s++; 6722 ulb>>=8; 6723 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 6724 } \ ??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 6725 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 6726 } 6727 i=ws->wsbody[0]; \ ??ParseAnswer_5: \ 000001EC 000094E5 LDR R0,[R4, #+0] \ 000001F0 B010D0E1 LDRH R1,[R0, #+0] \ 000001F4 000000EA B ??ParseAnswer_15 6728 while(i>1) 6729 { 6730 if (ws->wsbody[i--]!=13) break; 6731 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 6732 } 6733 } \ 0000021C F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??ParseAnswer_0: \ 00000220 ........ DC32 s_top 6734 \ In segment CODE, align 4, keep-with-next 6735 void SaveAnswer(CLIST *cl, WSHDR *ws) 6736 { \ SaveAnswer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0100A0E1 MOV R0,R1 6737 char *p=ExtractAnswer(ws); \ 0000000C ........ BL ExtractAnswer \ 00000010 0050A0E1 MOV R5,R0 6738 mfree(cl->answer); \ 00000014 940094E5 LDR R0,[R4, #+148] \ 00000018 150000EF SWI +21 6739 cl->answer=p; \ 0000001C 945084E5 STR R5,[R4, #+148] 6740 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 6741 6742 //links applicator 6743 6744 \ In segment CODE, align 4, keep-with-next 6745 int GetTempName(void) 6746 { \ GetTempName: \ 00000000 00402DE9 PUSH {LR} \ 00000004 10D04DE2 SUB SP,SP,#+16 6747 static const int DMonth[]={0,31,59,90,120,151,181,212,243,273,304,334,365}; 6748 unsigned long iday; 6749 TTime tt; 6750 TDate dd; 6751 GetDateTime(&dd,&tt); \ 00000008 08108DE2 ADD R1,SP,#+8 \ 0000000C 0D00A0E1 MOV R0,SP \ 00000010 B40000EF SWI +180 6752 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 6753 iday=365*dd.year+DMonth[dd.month-1]+(dd.day - 1); 6754 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] 6755 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 6756 iday++; \ ??GetTempName_1: \ 00000078 011081E2 ADD R1,R1,#+1 6757 iday=(tt.sec+60*(tt.min+60*(tt.hour+24* iday))); 6758 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 6759 } \ 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 6760 6761 \ In segment CODE, align 4, keep-with-next 6762 void recon() 6763 { 6764 SUBPROC((void*)end_socket); \ recon: \ 00000000 ........ LDR R0,??DataTable299 ;; end_socket \ 00000004 00402DE9 PUSH {LR} \ 00000008 710100EF SWI +369 6765 GBS_DelTimer(&reconnect_tmr); \ 0000000C ........ LDR R0,??DataTable300 ;; S_ICONS + 6620 \ 00000010 8C0100EF SWI +396 6766 DNR_TRIES=3; \ 00000014 10009FE5 LDR R0,??recon_0 ;; MAINCSM + 124 \ 00000018 0310A0E3 MOV R1,#+3 \ 0000001C 001080E5 STR R1,[R0, #+0] 6767 SUBPROC((void *)create_connect); \ 00000020 ........ LDR R0,??DataTable301 ;; create_connect \ 00000024 710100EF SWI +369 6768 } \ 00000028 0080BDE8 POP {PC} ;; return \ ??recon_0: \ 0000002C ........ DC32 MAINCSM + 124 6769 \ In segment CODE, align 4, keep-with-next 6770 int edchat_onkey(GUI *data, GUI_MSG *msg) 6771 { \ edchat_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 6772 //-1 - do redraw 6773 GBS_DelTimer(&tmr_illumination); \ 00000004 ........ LDR R6,??DataTable311 ;; S_ICONS \ 00000008 4CDF4DE2 SUB SP,SP,#+304 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0170A0E1 MOV R7,R1 \ 00000014 BC00A0E3 MOV R0,#+188 \ 00000018 640D80E3 ORR R0,R0,#0x1900 \ 0000001C 060080E0 ADD R0,R0,R6 \ 00000020 8C0100EF SWI +396 6774 CLIST *t; 6775 TPKT *p; 6776 EDITCONTROL ec; 6777 int len, f;//2026rev 6778 unsigned err;//2026rev 6779 char *s; 6780 int l=msg->gbsmsg->submess; \ 00000024 040097E5 LDR R0,[R7, #+4] \ 00000028 088090E5 LDR R8,[R0, #+8] 6781 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 DF0100EF SWI +479 \ 00000034 0050A0E1 MOV R5,R0 6782 char fn[256]; 6783 6784 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 6785 { 6786 void ec_menu(EDCHAT_STRUCT *); 6787 ec_menu(ed_struct); \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 ........ BL ec_menu 6788 return(-1); \ ??edchat_onkey_1: \ 00000054 8C0000EA B ??edchat_onkey_2 6789 } 6790 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 6791 6792 void AddSmile(GUI *data); 6793 if (msg->gbsmsg->msg==LONG_PRESS) 6794 { 6795 if (l==RIGHT_BUTTON) \ 00000080 3E0058E3 CMP R8,#+62 \ 00000084 3B00001A BNE ??edchat_onkey_6 6796 { 6797 if(LongRightAction==2 && EDIT_GetFocus(data)==ed_struct->ed_answer) \ 00000088 60959FE5 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 6798 CreateSmileSelectGUI(ed_struct); \ 000000AC 0500A0E1 MOV R0,R5 \ 000000B0 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 6799 else 6800 if(LongRightAction==1) 6801 { 6802 if (EDIT_GetFocus(data)==ed_struct->ed_answer) 6803 { 6804 ExtractEditControl(data,ed_struct->ed_answer,&ec); 6805 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) 6806 { 6807 t=FindNextActiveContact(ed_struct->ed_contact); 6808 if (t && t!=ed_struct->ed_contact) 6809 { 6810 CreateEditChat(t); 6811 return(1); 6812 } 6813 } 6814 } 6815 } 6816 } 6817 if (l==LEFT_BUTTON && LongLeftAction) 6818 { 6819 if (EDIT_GetFocus(data)==ed_struct->ed_answer) 6820 { 6821 ExtractEditControl(data,ed_struct->ed_answer,&ec); 6822 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) 6823 { 6824 t=FindPrevActiveContact(ed_struct->ed_contact); 6825 if (t && t!=ed_struct->ed_contact) 6826 { 6827 CreateEditChat(t); 6828 return(1); 6829 } 6830 } 6831 } 6832 } 6833 //#ifdef ELKA 6834 if (l==VOL_DOWN_BUTTON) 6835 { 6836 #ifdef kluchnik 6837 if((EDIT_GetFocus(data)==ed_struct->ed_answer)) 6838 #else 6839 if(LongVolDownAction) 6840 #endif 6841 { 6842 WSHDR *ws; 6843 ExtractEditControl(data,ed_struct->ed_answer,&ec); 6844 if(wstrlen(ec.pWS)>0) 6845 { 6846 ws=AllocWS(1); 6847 CutWSTR(ws,0); 6848 6849 EDIT_SetFocus(data,ed_struct->ed_answer); 6850 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 6851 6852 FreeWS(ws); 6853 RefreshGUI(); 6854 } 6855 } 6856 else 6857 { 6858 int pos; 6859 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 6860 { 6861 EDIT_SetFocus(data, pos); 6862 EDIT_SetCursorPos(data, 1); 6863 } 6864 return (-1); 6865 } 6866 6867 } 6868 6869 if (l==VOL_UP_BUTTON) 6870 { 6871 if(LongVolUpAction) 6872 { 6873 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); 6874 ascii2ws(ws,last_msg_buffer); 6875 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); 6876 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 6877 FreeWS(ws); 6878 RefreshGUI(); 6879 } 6880 else 6881 { 6882 int pos; 6883 if ((pos=EDIT_GetFocus(data)-2)>=2) 6884 { 6885 EDIT_SetFocus(data, pos); 6886 EDIT_SetCursorPos(data, 1); 6887 } 6888 return (-1); 6889 } 6890 } 6891 //#endif 6892 #ifdef kluchnik 6893 if(l==LEFT_BUTTON && EDIT_GetFocus(ed_struct->ed_chatgui)!=ed_struct->ed_answer && EDIT_GetCursorPos(data)==1) 6894 { 6895 int ed; 6896 EDITCONTROL ec; 6897 ed=EDIT_GetFocus(ed_struct->ed_chatgui); 6898 ExtractEditControl(ed_struct->ed_chatgui,ed,&ec); 6899 6900 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); 6901 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); 6902 wstrcat(wsBuffer,ec.pWS); 6903 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); 6904 6905 ShowMSG(1,(int)"Message add to buffer"); 6906 } 6907 #endif 6908 } 6909 6910 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 6911 { 6912 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 6913 { 6914 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 6915 EDIT_SetFocus(data,ed_struct->ed_answer); \ 000000F0 0400A0E1 MOV R0,R4 \ 000000F4 9B0100EF SWI +411 6916 } 6917 6918 if (l==GREEN_BUTTON) 6919 { 6920 if (connect_state==3) 6921 { 6922 if ((t=ed_struct->ed_contact)) 6923 { 6924 ExtractEditControl(data,ed_struct->ed_answer,&ec); 6925 SaveAnswer(t,ec.pWS); 6926 if ((s=t->answer)) 6927 { 6928 if ((len=strlen(s))) 6929 { 6930 msg_away_timer=0; 6931 away_m=0; 6932 t->automsgcount=0; 6933 if(change_back_status) 6934 { 6935 CurrentStatus=status_rem; 6936 set_my_status(); 6937 change_back_status=0; 6938 } 6939 if(SHOW_ACTIVE) 6940 t->isactive=ACTIVE_TIME; 6941 p=malloc(sizeof(PKT)+len+1); 6942 p->pkt.uin=t->uin; 6943 p->pkt.type=T_SENDMSG; 6944 p->pkt.data_len=len; 6945 strcpy(p->data,s); 6946 //#ifdef ELKA 6947 strcpy(last_msg_buffer, s); 6948 //#endif 6949 AddStringToLog(t,0x01,p->data,I_str,(++SENDMSGCOUNT)&0x7FFF,1); //Номер сообщения 6950 SUBPROC((void *)SendAnswer,0,p); 6951 main2_count++; 6952 mfree(t->answer); 6953 t->answer=NULL; 6954 // request_remake_edchat=1; 6955 EDIT_SetFocus(data,ed_struct->ed_answer); 6956 CutWSTR(ews,0); 6957 EDIT_SetTextToFocused(data,ews); 6958 AddMsgToChat(data); 6959 RecountMenu(t,1); 6960 return(-1); 6961 } 6962 } 6963 } 6964 } 6965 } 6966 //================2026rev-begin 6967 if (l==ENTER_BUTTON) 6968 { 6969 if (!EDIT_IsMarkModeActive(data)) // ?????? ???? ?? ????????? 6970 { 6971 int pos, len; 6972 char *link; 6973 ExtractEditControl(ed_struct->ed_chatgui,EDIT_GetFocus(ed_struct->ed_chatgui),&ec); 6974 wstrcpy(ews,ec.pWS); 6975 pos = EDIT_GetCursorPos(data); 6976 len = wstrlen(ews); 6977 link = malloc(len+1); 6978 6979 if(IsUrl(ews, pos, link) && IsOpenBrowser) 6980 { 6981 snprintf(fn, 255, "%s\\tmp%u.url", TEMPLATES_PATH, GetTempName); 6982 if ((f=fopen(fn,A_WriteOnly+A_BIN+A_Create+A_Truncate,P_WRITE,&err))!=-1) 6983 { 6984 fwrite(f,link,strlen(link),&err); 6985 fclose(f,&err); 6986 str_2ws(ews,fn,256); 6987 ExecuteFile(ews,0,0); 6988 unlink(fn, &err); 6989 } 6990 mfree(link); 6991 return (-1); 6992 } 6993 else 6994 { 6995 int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 6996 6997 if(IsMultiBuffer) 6998 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+4); 6999 else 7000 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+3); 7001 7002 mfree(link); 7003 return (-1); 7004 } 7005 } 7006 } 7007 7008 //================ 2026rev-end =================// 7009 7010 if (l==VOL_UP_BUTTON) 7011 { 7012 int pos; 7013 7014 if ((pos=EDIT_GetFocus(data)-2)>=2) 7015 { 7016 EDIT_SetFocus(data, pos); 7017 EDIT_SetCursorPos(data, 1); 7018 } 7019 return (-1); 7020 } 7021 if (l==VOL_DOWN_BUTTON) 7022 { 7023 int pos; 7024 7025 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 7026 { 7027 EDIT_SetFocus(data, pos); 7028 EDIT_SetCursorPos(data, 1); 7029 } 7030 return (-1); 7031 } 7032 } 7033 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 6C049FE5 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 FC039FE5 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 54039FE5 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 6400A0E3 MOV R0,#+100 \ 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 6400A0E3 MOV R0,#+100 \ 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 5C00001A BNE ??edchat_onkey_18 \ 00000308 ........ LDR R11,??DataTable303 ;; MAINCSM \ 0000030C 58009BE5 LDR R0,[R11, #+88] \ 00000310 030050E3 CMP R0,#+3 \ 00000314 77FFFF1A BNE ??edchat_onkey_9 \ 00000318 009095E5 LDR R9,[R5, #+0] \ 0000031C 000059E3 CMP R9,#+0 \ 00000320 74FFFF0A BEQ ??edchat_onkey_9 \ 00000324 081095E5 LDR R1,[R5, #+8] \ 00000328 04208DE2 ADD R2,SP,#+4 \ 0000032C 0400A0E1 MOV R0,R4 \ 00000330 690100EF SWI +361 \ 00000334 2C109DE5 LDR R1,[SP, #+44] \ 00000338 0900A0E1 MOV R0,R9 \ 0000033C ........ BL SaveAnswer \ 00000340 947099E5 LDR R7,[R9, #+148] \ 00000344 000057E3 CMP R7,#+0 \ 00000348 6AFFFF0A BEQ ??edchat_onkey_9 \ 0000034C 0700A0E1 MOV R0,R7 \ 00000350 1B0000EF SWI +27 \ 00000354 0080B0E1 MOVS R8,R0 \ 00000358 66FFFF0A BEQ ??edchat_onkey_9 \ 0000035C 00A0A0E3 MOV R10,#+0 \ 00000360 50A08BE5 STR R10,[R11, #+80] \ 00000364 40A286E5 STR R10,[R6, #+576] \ 00000368 78A089E5 STR R10,[R9, #+120] \ 0000036C 480296E5 LDR R0,[R6, #+584] \ 00000370 000050E3 CMP R0,#+0 \ 00000374 0300000A BEQ ??edchat_onkey_19 \ 00000378 440296E5 LDR R0,[R6, #+580] \ 0000037C 300286E5 STR R0,[R6, #+560] \ 00000380 ........ BL set_my_status \ 00000384 48A286E5 STR R10,[R6, #+584] \ ??edchat_onkey_19: \ 00000388 ........ LDR R0,??DataTable304 ;; SHOW_ACTIVE \ 0000038C 000090E5 LDR R0,[R0, #+0] \ 00000390 000050E3 CMP R0,#+0 \ 00000394 5A0FA013 MOVNE R0,#+360 \ 00000398 9C008915 STRNE R0,[R9, #+156] \ 0000039C 090088E2 ADD R0,R8,#+9 \ 000003A0 140000EF SWI +20 \ 000003A4 00B0A0E1 MOV R11,R0 \ 000003A8 0C0099E5 LDR R0,[R9, #+12] \ 000003AC 0710A0E1 MOV R1,R7 \ 000003B0 00008BE5 STR R0,[R11, #+0] \ 000003B4 0200A0E3 MOV R0,#+2 \ 000003B8 B400CBE1 STRH R0,[R11, #+4] \ 000003BC B680CBE1 STRH R8,[R11, #+6] \ 000003C0 08008BE2 ADD R0,R11,#+8 \ 000003C4 1A0000EF SWI +26 \ 000003C8 0710A0E1 MOV R1,R7 \ 000003CC 6400A0E3 MOV R0,#+100 \ 000003D0 500E80E3 ORR R0,R0,#0x500 \ 000003D4 060080E0 ADD R0,R0,R6 \ 000003D8 1A0000EF SWI +26 \ 000003DC 240296E5 LDR R0,[R6, #+548] \ 000003E0 ........ LDR R3,??DataTable340 ;; I_str \ 000003E4 010080E2 ADD R0,R0,#+1 \ 000003E8 240286E5 STR R0,[R6, #+548] \ 000003EC 0110A0E3 MOV R1,#+1 \ 000003F0 02002DE9 PUSH {R1} \ 000003F4 8008A0E1 LSL R0,R0,#+17 \ 000003F8 A008A0E1 LSR R0,R0,#+17 \ 000003FC 01002DE9 PUSH {R0} \ 00000400 08208BE2 ADD R2,R11,#+8 \ 00000404 0900A0E1 MOV R0,R9 \ 00000408 ........ BL AddStringToLog \ 0000040C ........ LDR R0,??DataTable341 ;; SendAnswer \ 00000410 0B20A0E1 MOV R2,R11 \ 00000414 0010A0E3 MOV R1,#+0 \ 00000418 710100EF SWI +369 \ 0000041C ........ LDR R0,??DataTable307 ;; main2_count \ 00000420 001090E5 LDR R1,[R0, #+0] \ 00000424 011081E2 ADD R1,R1,#+1 \ 00000428 001080E5 STR R1,[R0, #+0] \ 0000042C 940099E5 LDR R0,[R9, #+148] \ 00000430 150000EF SWI +21 \ 00000434 94A089E5 STR R10,[R9, #+148] \ 00000438 081095E5 LDR R1,[R5, #+8] \ 0000043C 0400A0E1 MOV R0,R4 \ 00000440 9B0100EF SWI +411 \ 00000444 380296E5 LDR R0,[R6, #+568] \ 00000448 0A10A0E1 MOV R1,R10 \ 0000044C 260100EF SWI +294 \ 00000450 381296E5 LDR R1,[R6, #+568] \ 00000454 0400A0E1 MOV R0,R4 \ 00000458 810100EF SWI +385 \ 0000045C 0400A0E1 MOV R0,R4 \ 00000460 ........ BL AddMsgToChat \ 00000464 0110A0E3 MOV R1,#+1 \ 00000468 0900A0E1 MOV R0,R9 \ 0000046C ........ BL RecountMenu \ 00000470 0A00E0E1 MVN R0,R10 \ 00000474 08D08DE2 ADD SP,SP,#+8 \ 00000478 84FFFFEA B ??edchat_onkey_4 \ ??edchat_onkey_18: \ 0000047C 1A0058E3 CMP R8,#+26 \ 00000480 5500001A BNE ??edchat_onkey_20 \ 00000484 0400A0E1 MOV R0,R4 \ 00000488 D80100EF SWI +472 \ 0000048C 000050E3 CMP R0,#+0 \ 00000490 18FFFF1A BNE ??edchat_onkey_9 \ 00000494 040095E5 LDR R0,[R5, #+4] \ 00000498 820100EF SWI +386 \ 0000049C 04208DE2 ADD R2,SP,#+4 \ 000004A0 0010A0E1 MOV R1,R0 \ 000004A4 040095E5 LDR R0,[R5, #+4] \ 000004A8 690100EF SWI +361 \ 000004AC 380296E5 LDR R0,[R6, #+568] \ 000004B0 2C109DE5 LDR R1,[SP, #+44] \ 000004B4 1F0100EF SWI +287 \ 000004B8 0400A0E1 MOV R0,R4 \ 000004BC D30100EF SWI +467 \ 000004C0 0080A0E1 MOV R8,R0 \ 000004C4 380296E5 LDR R0,[R6, #+568] \ 000004C8 230100EF SWI +291 \ 000004CC 010080E2 ADD R0,R0,#+1 \ 000004D0 140000EF SWI +20 \ 000004D4 0070A0E1 MOV R7,R0 \ 000004D8 380296E5 LDR R0,[R6, #+568] \ 000004DC 0720A0E1 MOV R2,R7 \ 000004E0 0810A0E1 MOV R1,R8 \ 000004E4 ........ BL IsUrl \ 000004E8 000050E3 CMP R0,#+0 \ 000004EC 2C00000A BEQ ??edchat_onkey_21 \ 000004F0 08019FE5 LDR R0,??edchat_onkey_7+0x10 ;; IsOpenBrowser \ 000004F4 000090E5 LDR R0,[R0, #+0] \ 000004F8 000050E3 CMP R0,#+0 \ 000004FC 2800000A BEQ ??edchat_onkey_21 \ 00000500 FC009FE5 LDR R0,??edchat_onkey_7+0x14 ;; GetTempName \ 00000504 ........ LDR R3,??DataTable308 ;; TEMPLATES_PATH \ 00000508 F8209FE5 LDR R2,??edchat_onkey_7+0x18 ;; `?` \ 0000050C 01002DE9 PUSH {R0} \ 00000510 FF10A0E3 MOV R1,#+255 \ 00000514 34008DE2 ADD R0,SP,#+52 \ 00000518 1B0100EF SWI +283 \ 0000051C 04308DE2 ADD R3,SP,#+4 \ 00000520 402FA0E3 MOV R2,#+256 \ 00000524 0110A0E3 MOV R1,#+1 \ 00000528 831C81E3 ORR R1,R1,#0x8300 \ 0000052C 34008DE2 ADD R0,SP,#+52 \ 00000530 0A0000EF SWI +10 \ 00000534 0040A0E1 MOV R4,R0 \ 00000538 010074E3 CMN R4,#+1 \ 0000053C 04D08DE2 ADD SP,SP,#+4 \ 00000540 1400000A BEQ ??edchat_onkey_22 \ 00000544 0700A0E1 MOV R0,R7 \ 00000548 1B0000EF SWI +27 \ 0000054C 0020A0E1 MOV R2,R0 \ 00000550 0D30A0E1 MOV R3,SP \ 00000554 0710A0E1 MOV R1,R7 \ 00000558 0400A0E1 MOV R0,R4 \ 0000055C 0C0000EF SWI +12 \ 00000560 0D10A0E1 MOV R1,SP \ 00000564 0400A0E1 MOV R0,R4 \ 00000568 0D0000EF SWI +13 \ 0000056C 380296E5 LDR R0,[R6, #+568] \ 00000570 402FA0E3 MOV R2,#+256 \ 00000574 30108DE2 ADD R1,SP,#+48 \ 00000578 6C0100EF SWI +364 \ 0000057C 380296E5 LDR R0,[R6, #+568] \ 00000580 0020A0E3 MOV R2,#+0 \ 00000584 0010A0E3 MOV R1,#+0 \ 00000588 940000EF SWI +148 \ 0000058C 0D10A0E1 MOV R1,SP \ 00000590 30008DE2 ADD R0,SP,#+48 \ 00000594 6B0100EF SWI +363 \ ??edchat_onkey_22: \ 00000598 0700A0E1 MOV R0,R7 \ 0000059C 150000EF SWI +21 \ 000005A0 39FFFFEA B ??edchat_onkey_2 \ ??edchat_onkey_21: \ 000005A4 000095E5 LDR R0,[R5, #+0] \ 000005A8 0C0090E5 LDR R0,[R0, #+12] \ 000005AC ........ BL LoadTemplates \ 000005B0 ........ LDR R2,??DataTable309 ;; IsMultiBuffer \ 000005B4 50109FE5 LDR R1,??edchat_onkey_7+0x1C ;; ed_options_handler \ 000005B8 100085E5 STR R0,[R5, #+16] \ 000005BC 002092E5 LDR R2,[R2, #+0] \ 000005C0 000052E3 CMP R2,#+0 \ 000005C4 03308002 ADDEQ R3,R0,#+3 \ 000005C8 04308012 ADDNE R3,R0,#+4 \ 000005CC 0520A0E1 MOV R2,R5 \ 000005D0 0400A0E1 MOV R0,R4 \ 000005D4 E50100EF SWI +485 \ 000005D8 EEFFFFEA B ??edchat_onkey_22 \ ??edchat_onkey_20: \ 000005DC 0D0058E3 CMP R8,#+13 \ 000005E0 41FFFF0A BEQ ??edchat_onkey_17 \ ??edchat_onkey_23: \ 000005E4 0E0058E3 CMP R8,#+14 \ 000005E8 C2FEFF1A BNE ??edchat_onkey_9 \ 000005EC 1BFFFFEA B ??edchat_onkey_14 \ ??edchat_onkey_7: \ 000005F0 ........ DC32 LongRightAction \ 000005F4 ........ DC32 LongLeftAction \ 000005F8 ........ DC32 LongVolDownAction \ 000005FC ........ DC32 LongVolUpAction \ 00000600 ........ DC32 IsOpenBrowser \ 00000604 ........ DC32 GetTempName \ 00000608 ........ DC32 `?` \ 0000060C ........ DC32 ed_options_handler 7034 //1: close 7035 } 7036 7037 static const HEADER_DESC edchat_hdr={0,0,NULL,NULL,NULL,0,LGP_NULL}; 7038 7039 void (*old_ed_redraw)(void *data); \ In segment CODE, align 4, keep-with-next 7040 void my_ed_redraw(void *data) 7041 { \ my_ed_redraw: \ 00000000 30402DE9 PUSH {R4,R5,LR} 7042 void *edchat_gui; 7043 EDCHAT_STRUCT *ed_struct; 7044 if (old_ed_redraw) old_ed_redraw(data); \ 00000004 ........ LDR R4,??DataTable312 ;; S_ICONS \ 00000008 401394E5 LDR R1,[R4, #+832] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0100000A BEQ ??my_ed_redraw_0 \ 00000014 31FF2FE1 BLX R1 7045 edchat_gui=FindGUIbyId(edchat_id,NULL); \ 00000018 0010A0E3 MOV R1,#+0 \ ??my_ed_redraw_0: \ 0000001C AC0294E5 LDR R0,[R4, #+684] \ 00000020 090200EF SWI +521 7046 if (edchat_gui) \ 00000024 000050E3 CMP R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 7047 { 7048 ed_struct=EDIT_GetUserPointer(edchat_gui); \ 0000002C DF0100EF SWI +479 7049 if (ed_struct) \ 00000030 000050E3 CMP R0,#+0 \ 00000034 3080BD08 POPEQ {R4,R5,PC} 7050 { 7051 int icon, width; 7052 #ifndef NEWSGOLD 7053 icon=*(S_ICONS+GetIconIndex(ed_struct->ed_contact)); 7054 ((HEADER_DESC *)&edchat_hdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); 7055 DrawImg(ScreenW()-1-width,1,icon); 7056 #else 7057 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] 7058 width=GetImgWidth(icon); \ 00000044 0400A0E1 MOV R0,R4 \ 00000048 220000EF SWI +34 \ 0000004C 0050A0E1 MOV R5,R0 7059 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 7060 /* DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 7061 GetPaletteAdrByColorIndex(0), 7062 GetPaletteAdrByColorIndex(EDIT_IsBusy(edchat_gui)?3:4));*/ 7063 #endif 7064 } 7065 } 7066 } \ 00000068 3080BDE8 POP {R4,R5,PC} ;; return 7067 \ In segment CODE, align 4, keep-with-next 7068 void edchat_ghook(GUI *data, int cmd) 7069 { \ edchat_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 7070 7071 static const SOFTKEY_DESC sk={0x0FFF,0x0000,(int)LG_MENU}; 7072 static const SOFTKEY_DESC sk_cancel={0x0FF0,0x0000,(int)LG_CLOSE}; 7073 // static SOFTKEY_DESC sk={0x0018,0x0000,(int)"Menu"}; 7074 int j; 7075 EDITCONTROL ec; 7076 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); 7077 PNGTOP_DESC *pltop=PNG_TOP(); 7078 if (cmd==9) \ 00000004 ........ LDR R4,??DataTable311 ;; 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 7079 { 7080 GBS_DelTimer(&tmr_illumination); //by BoBa 25.06.07 \ 00000030 BC00A0E3 MOV R0,#+188 \ 00000034 640D80E3 ORR R0,R0,#0x1900 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 8C0100EF SWI +396 7081 pltop->dyn_pltop=NULL; \ 00000040 086088E5 STR R6,[R8, #+8] \ 00000044 170000EA B ??edchat_ghook_1 7082 } 7083 if (cmd==2) \ ??edchat_ghook_0: \ 00000048 081097E5 LDR R1,[R7, #+8] \ 0000004C 020059E3 CMP R9,#+2 \ 00000050 1600001A BNE ??edchat_ghook_2 7084 { 7085 ed_struct->ed_chatgui=data; \ 00000054 045087E5 STR R5,[R7, #+4] 7086 // edgui_data=data; 7087 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000058 0500A0E1 MOV R0,R5 \ 0000005C 9B0100EF SWI +411 7088 7089 static void *methods[16]; 7090 void **m=GetDataOfItemByID(data,2); \ 00000060 0210A0E3 MOV R1,#+2 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 4F0100EF SWI +335 \ 0000006C 0050B0E1 MOVS R5,R0 7091 if (m) 7092 { 7093 if (m[1]) \ 00000070 04009515 LDRNE R0,[R5, #+4] \ 00000074 00005013 CMPNE R0,#+0 \ 00000078 6300000A BEQ ??edchat_ghook_3 7094 { 7095 memcpy(methods,m[1],sizeof(methods)); \ 0000007C D16FA0E3 MOV R6,#+836 \ 00000080 4020A0E3 MOV R2,#+64 \ 00000084 0010A0E1 MOV R1,R0 \ 00000088 040086E0 ADD R0,R6,R4 \ 0000008C 1E0100EF SWI +286 7096 old_ed_redraw=(void (*)(void *))(methods[0]); \ 00000090 040096E7 LDR R0,[R6, +R4] \ 00000094 400384E5 STR R0,[R4, #+832] 7097 methods[0]=(void *)my_ed_redraw; \ 00000098 74019FE5 LDR R0,??edchat_ghook_4 ;; my_ed_redraw \ 0000009C 040086E7 STR R0,[R6, +R4] 7098 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} 7099 } 7100 } 7101 } 7102 if (cmd==3) \ ??edchat_ghook_2: \ 000000B0 030059E3 CMP R9,#+3 \ 000000B4 0E00001A BNE ??edchat_ghook_5 7103 { 7104 // if (edgui_data==data) edgui_data=NULL; 7105 if (ed_struct->ed_contact) \ 000000B8 000097E5 LDR R0,[R7, #+0] \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 0500000A BEQ ??edchat_ghook_6 7106 { 7107 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C4 0D20A0E1 MOV R2,SP \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 690100EF SWI +361 7108 SaveAnswer(ed_struct->ed_contact,ec.pWS); \ 000000D0 28109DE5 LDR R1,[SP, #+40] \ 000000D4 000097E5 LDR R0,[R7, #+0] \ 000000D8 ........ BL SaveAnswer 7109 } 7110 RecountMenu(ed_struct->ed_contact,1); \ ??edchat_ghook_6: \ 000000DC 000097E5 LDR R0,[R7, #+0] \ 000000E0 0110A0E3 MOV R1,#+1 \ 000000E4 ........ BL RecountMenu 7111 mfree(ed_struct); \ 000000E8 0700A0E1 MOV R0,R7 \ 000000EC 150000EF SWI +21 \ 000000F0 ECFFFFEA B ??edchat_ghook_1 7112 } 7113 if (cmd==0x0A) \ ??edchat_ghook_5: \ 000000F4 0A0059E3 CMP R9,#+10 \ 000000F8 0900001A BNE ??edchat_ghook_7 7114 { 7115 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] 7116 DisableIDLETMR(); \ 00000108 7F0100EF SWI +383 7117 total_unread-=ed_struct->requested_decrement_total_unread; \ 0000010C 9C0294E5 LDR R0,[R4, #+668] \ 00000110 0C1097E5 LDR R1,[R7, #+12] \ 00000114 010040E0 SUB R0,R0,R1 \ 00000118 9C0284E5 STR R0,[R4, #+668] 7118 ed_struct->requested_decrement_total_unread=0; \ 0000011C 0C6087E5 STR R6,[R7, #+12] \ 00000120 E0FFFFEA B ??edchat_ghook_1 7119 #ifdef ELKA 7120 if (!total_unread) 7121 { 7122 SLI_Off(); 7123 } 7124 #endif 7125 /* if (request_close_edchat) 7126 { 7127 request_close_edchat=0; 7128 GeneralFunc_flag1(edchat_id,1); 7129 return; 7130 }*/ 7131 } 7132 if (cmd==7) \ ??edchat_ghook_7: \ 00000124 070059E3 CMP R9,#+7 \ 00000128 2800001A BNE ??edchat_ghook_8 7133 { 7134 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 7135 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 7136 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 7137 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 7138 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 7139 { 7140 time_to_stop_t9=0; \ 00000184 306384E5 STR R6,[R4, #+816] 7141 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 7142 { 7143 ed_struct->ed_contact->req_add=0; \ 00000198 886080E5 STR R6,[R0, #+136] 7144 AddMsgToChat(data); \ 0000019C 0500A0E1 MOV R0,R5 \ 000001A0 ........ BL AddMsgToChat 7145 RecountMenu(ed_struct->ed_contact,1); \ 000001A4 000097E5 LDR R0,[R7, #+0] \ 000001A8 0110A0E3 MOV R1,#+1 \ 000001AC ........ BL RecountMenu 7146 } 7147 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 7148 { 7149 ed_struct->ed_contact->req_drawack=0; \ 000001C0 8C6080E5 STR R6,[R0, #+140] 7150 DrawAck(data); \ 000001C4 0500A0E1 MOV R0,R5 \ 000001C8 ........ BL DrawAck \ 000001CC B5FFFFEA B ??edchat_ghook_1 7151 } 7152 } 7153 } 7154 if (cmd==0x0C) \ ??edchat_ghook_8: \ 000001D0 0C0059E3 CMP R9,#+12 \ 000001D4 0C00001A BNE ??edchat_ghook_3 7155 { 7156 j=EDIT_GetFocus(data); \ 000001D8 0500A0E1 MOV R0,R5 \ 000001DC 820100EF SWI +386 \ 000001E0 0040A0E1 MOV R4,R0 7157 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 7158 EDIT_SetCursorPos(data,1); \ 00000200 0110A0E3 MOV R1,#+1 \ 00000204 0500A0E1 MOV R0,R5 \ 00000208 D40100EF SWI +468 7159 } 7160 } \ ??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_Z, align 4, align-sorted \ S_ICONS: \ 00000000 DS8 116 \ gipc: \ 00000074 DS8 12 \ tmr_gipc: \ 00000080 DS8 12 \ def_set: \ 0000008C DS8 352 \ main_d: \ 000001EC DS8 4 \ canvasdata: \ 000001F0 DS8 4 \ paused_height: \ 000001F4 DS8 4 \ wsBuffer: \ 000001F8 DS8 4 \ uins: \ 000001FC DS8 4 \ saver_on: \ 00000200 DS8 4 \ Is_PING_On: \ 00000204 DS8 4 \ Is_SMARTCPU_On: \ 00000208 DS8 4 \ Is_INC_On: \ 0000020C DS8 4 \ Is_ILU_On: \ 00000210 DS8 4 \ Is_Double_Vibra_On: \ 00000214 DS8 4 \ total_unread2: \ 00000218 DS8 4 \ maincsm_id: \ 0000021C DS8 4 \ maingui_id: \ 00000220 DS8 4 \ SENDMSGCOUNT: \ 00000224 DS8 4 \ Is_Vibra_Enabled: \ 00000228 DS8 4 \ Is_Id3tag_Enabled: \ 0000022C DS8 4 \ CurrentStatus: \ 00000230 DS8 4 \ CurrentXStatus: \ 00000234 DS8 4 \ ews: \ 00000238 DS8 4 \ scrsTime: \ 0000023C DS8 4 \ away_m: \ 00000240 DS8 4 \ status_rem: \ 00000244 DS8 4 \ change_back_status: \ 00000248 DS8 4 \ Show_XTX: \ 0000024C DS8 4 \ Is_UPTIME_On: \ 00000250 DS8 4 \ uptimeHour: \ 00000254 DS8 4 \ uptimeMin: \ 00000258 DS8 4 \ uptimeSec: \ 0000025C DS8 4 \ tracktimer: \ 00000260 DS8 4 \ input_awaymsg_id: \ 00000264 DS8 4 \ silenthide: \ 00000268 DS8 4 \ disautorecconect: \ 0000026C DS8 4 \ Is_Sounds_Enabled: \ 00000270 DS8 4 \ Is_Show_Offline: \ 00000274 DS8 4 \ Is_Show_Groups: \ 00000278 DS8 4 \ CurrentPrivateStatus: \ 0000027C DS8 4 \ vibra_count: \ 00000280 DS8 4 \ templates_chars: \ 00000284 DS8 4 \ templates_lines: \ 00000288 DS8 4 \ TOTALRECEIVED: \ 0000028C DS8 4 \ TOTALSENDED: \ 00000290 DS8 4 \ ALLTOTALRECEIVED: \ 00000294 DS8 4 \ ALLTOTALSENDED: \ 00000298 DS8 4 \ total_unread: \ 0000029C DS8 4 \ cltop: \ 000002A0 DS8 4 \ GROUP_CACHE: \ 000002A4 DS8 4 \ contactlist_menu_id: \ 000002A8 DS8 4 \ edchat_id: \ 000002AC DS8 4 \ 000002B0 DS8 4 \ tenseconds_to_ping: \ 000002B4 DS8 4 \ kopa_online: \ 000002B8 DS8 4 \ kopa_kontaktu: \ 000002BC DS8 4 \ gui_methods2: \ 000002C0 DS8 96 \ old_redraw: \ 00000320 DS8 4 \ ping_time: \ 00000324 DS8 4 \ main_msg_timer2: \ 00000328 DS8 4 \ NEW_MSG: \ 0000032C DS8 4 \ time_to_stop_t9: \ 00000330 DS8 4 \ comanda: \ 00000334 DS8 4 \ INC_show: \ 00000338 DS8 4 \ INC_show2: \ 0000033C DS8 4 \ old_ed_redraw: \ 00000340 DS8 4 \ 00000344 DS8 64 \ elf_path: \ 00000384 DS8 256 \ ContactT9Key: \ 00000484 DS8 32 \ talk_sound: \ 000004A4 DS8 128 \ unread_msg_info: \ 00000524 DS8 64 \ last_msg_buffer: \ 00000564 DS8 4096 \ ping_tmr: \ 00001564 DS8 16 \ PINGO: \ 00001574 DS8 256 \ scrsTmr: \ 00001674 DS8 16 \ away_msg: \ 00001684 DS8 264 \ away_msg_time: \ 0000178C DS8 64 \ away_msg_time_dace: \ 000017CC DS8 16 \ tim_zone: \ 000017DC DS8 16 \ away_tmr: \ 000017EC DS8 16 \ autoChangeStatus: \ 000017FC DS8 16 \ remind_tmr: \ 0000180C DS8 16 \ uptime_tmr: \ 0000181C DS8 16 \ tracktmr: \ 0000182C DS8 16 \ onlineTime: \ 0000183C DS8 128 \ logmsg: \ 000018BC DS8 256 \ tmr_illumination: \ 000019BC DS8 16 \ tmr_vibra: \ 000019CC DS8 16 \ reconnect_tmr: \ 000019DC DS8 16 \ tmr_active: \ 000019EC DS8 16 \ clm_hdr_text: \ 000019FC DS8 64 \ clmenu_sk_r: \ 00001A3C DS8 16 \ on_off_buf: \ 00001A4C DS8 128 \ status: \ 00001ACC DS8 64 \ hostbuf2: \ 00001B0C DS8 128 \ hostname: \ 00001B8C DS8 128 \ I_UIN: \ 00001C0C DS8 12 \ a_txt: \ 00001C18 DS8 48 \ s_txt: \ 00001C48 DS8 48 \ d_txt: \ 00001C78 DS8 48 \ f_txt: \ 00001CA8 DS8 48 \ g_txt: \ 00001CD8 DS8 48 \ develop: \ 00001D08 DS8 16 \ mod_info: \ 00001D18 DS8 264 \ show_nick: \ 00001E20 DS8 32 \ onContact: \ 00001E40 DS8 64 \ incs2: \ 00001E80 DS8 16 \ tm22: \ 00001E90 DS8 16 \ In segment DATA_Z, align 4, align-sorted \ timeh: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted \ timemin: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted \ RXbuf: \ 00000000 DS8 16392 \ In segment DATA_Z, align 4, align-sorted \ TXbuf: \ 00000000 DS8 16392 \ In segment DATA_Z, align 4, align-sorted \ icon_array: \ 00000000 DS8 8 \ 00000008 DS8 4 \ cont_hdr: \ 0000000C DS8 64 \ In segment DATA_Z, align 4, align-sorted \ cmd_chars: \ 00000000 DS8 4 \ cmd_lines: \ 00000004 DS8 4 \ In segment DATA_Z, align 4, align-sorted \ errornumber: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted \ INC_Nick: \ 00000000 DS8 32 \ In segment DATA_Z, align 4, align-sorted \ itemFromDisp: \ 00000000 DS8 4 \ totalItems: \ 00000004 DS8 4 \ In segment DATA_Z, align 4, align-sorted \ maincsm_name_body: \ 00000000 DS8 280 \ In segment DATA_C, align 4, align-sorted 7161 7162 7163 7164 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 `?` 7165 { 7166 1, 7167 edchat_onkey, 7168 edchat_ghook, 7169 (void *)edchat_locret, 7170 0, 7171 &menu_skt, 7172 {0,NULL,NULL,NULL}, 7173 FONT_SMALL, 7174 100, 7175 101, 7176 0, 7177 // 0x00000001 - Выровнять по правому краю 7178 // 0x00000002 - Выровнять по центру 7179 // 0x00000004 - Инверсия знакомест 7180 // 0x00000008 - UnderLine 7181 // 0x00000020 - Не переносить слова 7182 // 0x00000200 - bold 7183 0, 7184 // 0x00000002 - ReadOnly 7185 // 0x00000004 - Не двигается курсор 7186 // 0x40000000 - Поменять местами софт-кнопки 7187 0x40000000 7188 }; 7189 \ In segment CODE, align 4, keep-with-next 7190 void CreateEditChat(CLIST *t) 7191 { \ CreateEditChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 7192 7193 void *ma=malloc_adr(); 7194 void *eq; 7195 EDITCONTROL ec; 7196 EDITC_OPTIONS ec_options; 7197 int color, font, type; 7198 int zc; 7199 7200 LOGQ *lp; 7201 int edchat_toitem; 7202 // edcontact=t; 7203 7204 *((int *)(&edchat_hdr.lgp_id))=(int)t->name; \ 00000004 58649FE5 LDR R6,??CreateEditChat_0 ;; edchat_desc 7205 // *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+GetIconIndex(t); 7206 *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+IS_NULLICON; \ 00000008 ........ LDR R7,??DataTable312 ;; 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] 7207 7208 eq=AllocEQueue(ma,mfree_adr()); \ 0000002C 158000EF SWI +32789 \ 00000030 0010A0E1 MOV R1,R0 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 630100EF SWI +355 7209 7210 /* hist = malloc(256); 7211 if(!GetHistory(hist, 256, t->uin)) 7212 { 7213 ascii2ws(ews,hist); 7214 PrepareEditControl(&ec); 7215 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL|ECF_DISABLE_T9,ews,ews->wsbody[0]); 7216 } 7217 mfree(hist); 7218 7219 AddEditControlToEditQend(eq,&ec,ma); */ 7220 lp=t->log; \ 0000003C 909094E5 LDR R9,[R4, #+144] \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 000059E3 CMP R9,#+0 \ 00000048 8F00000A BEQ ??CreateEditChat_1 7221 7222 while(lp) 7223 { 7224 font = ED_H_FONT_SIZE; \ ??CreateEditChat_2: \ 0000004C ........ LDR R0,??DataTable313 ;; ED_H_FONT_SIZE 7225 if ((zc=lp->acked&3)) \ 00000050 ........ LDR R1,??DataTable314 ;; 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 7226 { 7227 if (zc==1) \ 00000068 010050E3 CMP R0,#+1 \ 0000006C 2200001A BNE ??CreateEditChat_4 7228 color=ACK_COLOR; //Зеленый \ 00000070 ........ LDR R0,??DataTable315 ;; ACK_COLOR \ 00000074 1F0000EA B ??CreateEditChat_5 7229 else 7230 color=I_COLOR; 7231 } 7232 else 7233 { 7234 if (lp->ID==0xFFFFFFFF) \ ??CreateEditChat_3: \ 00000078 080099E5 LDR R0,[R9, #+8] \ 0000007C 010070E3 CMN R0,#+1 \ 00000080 1B00001A BNE ??CreateEditChat_6 7235 { 7236 type = lp->type&0x0F; \ 00000084 0C0099E5 LDR R0,[R9, #+12] \ 00000088 0F1000E2 AND R1,R0,#0xF 7237 if(lp->type&0x10) \ 0000008C 100010E3 TST R0,#0x10 \ 00000090 0D00000A BEQ ??CreateEditChat_7 7238 { 7239 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 00000094 010051E3 CMP R1,#+1 \ 00000098 ........ LDREQ R0,??DataTable316 ;; O_I_COLOR \ 0000009C 0700000A BEQ ??CreateEditChat_8 \ 000000A0 030051E3 CMP R1,#+3 \ 000000A4 0400001A BNE ??CreateEditChat_9 \ 000000A8 ........ LDR R0,??DataTable329 ;; O_X_COLOR \ 000000AC 00B090E5 LDR R11,[R0, #+0] \ 000000B0 ........ LDR R0,??DataTable331 ;; O_ED_X_FONT_SIZE \ ??CreateEditChat_10: \ 000000B4 00A090E5 LDR R10,[R0, #+0] \ 000000B8 0F0000EA B ??CreateEditChat_4 \ ??CreateEditChat_9: \ 000000BC ........ LDR R0,??DataTable319 ;; O_TO_COLOR \ ??CreateEditChat_8: \ 000000C0 00B090E5 LDR R11,[R0, #+0] \ 000000C4 ........ LDR R0,??DataTable320 ;; O_ED_H_FONT_SIZE \ 000000C8 F9FFFFEA B ??CreateEditChat_10 7240 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 7241 } 7242 else 7243 { 7244 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,??DataTable330 ;; X_COLOR \ 000000E0 00B090E5 LDR R11,[R0, #+0] \ 000000E4 ........ LDR R0,??DataTable332 ;; ED_X_FONT_SIZE \ 000000E8 F1FFFFEA B ??CreateEditChat_10 \ ??CreateEditChat_11: \ 000000EC ........ LDR R0,??DataTable323 ;; TO_COLOR \ 000000F0 000000EA B ??CreateEditChat_5 7245 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 7246 } 7247 } 7248 else 7249 color=UNACK_COLOR; //????? \ ??CreateEditChat_6: \ 000000F4 ........ LDR R0,??DataTable324 ;; UNACK_COLOR \ ??CreateEditChat_5: \ 000000F8 00B090E5 LDR R11,[R0, #+0] 7250 } 7251 PrepareEditControl(&ec); \ ??CreateEditChat_4: \ 000000FC 10008DE2 ADD R0,SP,#+16 \ 00000100 640100EF SWI +356 7252 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 7253 { 7254 ascii2ws(ews,lp->hdr); \ 00000114 380297E5 LDR R0,[R7, #+568] \ 00000118 101089E2 ADD R1,R9,#+16 \ 0000011C ........ _BLF ascii2ws,??ascii2ws??rA 7255 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000120 383297E5 LDR R3,[R7, #+568] \ 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 7256 } 7257 else 7258 { 7259 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??CreateEditChat_12: \ 00000138 0000A0E3 MOV R0,#+0 \ 0000013C 01002DE9 PUSH {R0} \ 00000140 383297E5 LDR R3,[R7, #+568] \ 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 7260 } 7261 PrepareEditCOptions(&ec_options); \ 00000158 0D00A0E1 MOV R0,SP \ 0000015C C80100EF SWI +456 7262 SetPenColorToEditCOptions(&ec_options,color); \ 00000160 0B10A0E1 MOV R1,R11 \ 00000164 0D00A0E1 MOV R0,SP \ 00000168 CC0100EF SWI +460 7263 SetFontToEditCOptions(&ec_options,font); \ 0000016C 0A10A0E1 MOV R1,R10 \ 00000170 0D00A0E1 MOV R0,SP \ 00000174 CA0100EF SWI +458 7264 CopyOptionsToEditControl(&ec,&ec_options); \ 00000178 0D10A0E1 MOV R1,SP \ 0000017C 10008DE2 ADD R0,SP,#+16 \ 00000180 CE0100EF SWI +462 7265 AddEditControlToEditQend(eq,&ec,ma); \ 00000184 0520A0E1 MOV R2,R5 \ 00000188 10108DE2 ADD R1,SP,#+16 \ 0000018C 0800A0E1 MOV R0,R8 \ 00000190 660100EF SWI +358 7266 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 7267 { 7268 ParseAnswer(ews,lp->text); \ 000001A4 380297E5 LDR R0,[R7, #+568] \ 000001A8 601089E2 ADD R1,R9,#+96 \ 000001AC ........ BL ParseAnswer \ 000001B0 060000EA B ??CreateEditChat_15 7269 } 7270 else 7271 { 7272 ParseXStatusText(ews,lp->text,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_14: \ 000001B4 100010E3 TST R0,#0x10 \ 000001B8 ........ LDRNE R0,??DataTable329 ;; O_X_COLOR \ 000001BC 601089E2 ADD R1,R9,#+96 \ 000001C0 ........ LDREQ R0,??DataTable330 ;; X_COLOR \ 000001C4 002090E5 LDR R2,[R0, #+0] \ 000001C8 380297E5 LDR R0,[R7, #+568] \ 000001CC ........ BL ParseXStatusText 7273 } 7274 PrepareEditControl(&ec); \ ??CreateEditChat_15: \ 000001D0 10008DE2 ADD R0,SP,#+16 \ 000001D4 640100EF SWI +356 7275 ConstructEditControl(&ec, 7276 ECT_NORMAL_TEXT, 7277 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 7278 ews,ews->wsbody[0]); \ 000001D8 383297E5 LDR R3,[R7, #+568] \ 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 7279 PrepareEditCOptions(&ec_options); \ 00000204 04008DE2 ADD R0,SP,#+4 \ 00000208 C80100EF SWI +456 7280 //#ifdef M75 7281 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 7282 { 7283 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000220 100010E3 TST R0,#0x10 \ 00000224 ........ LDRNE R0,??DataTable327 ;; O_ED_FONT_SIZE \ 00000228 ........ LDREQ R0,??DataTable334 ;; ED_FONT_SIZE \ 0000022C 090000EA B ??CreateEditChat_17 7284 } 7285 else 7286 { 7287 SetPenColorToEditCOptions(&ec_options,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_16: \ 00000230 100010E3 TST R0,#0x10 \ 00000234 ........ LDRNE R0,??DataTable329 ;; O_X_COLOR \ 00000238 ........ LDREQ R0,??DataTable330 ;; X_COLOR \ 0000023C 001090E5 LDR R1,[R0, #+0] \ 00000240 0D00A0E1 MOV R0,SP \ 00000244 CC0100EF SWI +460 7288 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,??DataTable331 ;; O_ED_X_FONT_SIZE \ 00000254 ........ LDREQ R0,??DataTable332 ;; ED_X_FONT_SIZE \ ??CreateEditChat_17: \ 00000258 001090E5 LDR R1,[R0, #+0] \ 0000025C 0D00A0E1 MOV R0,SP \ 00000260 CA0100EF SWI +458 7289 } 7290 //#else 7291 // SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 7292 //#endif 7293 CopyOptionsToEditControl(&ec,&ec_options); \ 00000264 0D10A0E1 MOV R1,SP \ 00000268 10008DE2 ADD R0,SP,#+16 \ 0000026C CE0100EF SWI +462 7294 AddEditControlToEditQend(eq,&ec,ma); \ 00000270 0520A0E1 MOV R2,R5 \ 00000274 10108DE2 ADD R1,SP,#+16 \ 00000278 0800A0E1 MOV R0,R8 \ 0000027C 660100EF SWI +358 7295 lp=lp->next; \ 00000280 009099E5 LDR R9,[R9, #+0] 7296 } \ 00000284 000059E3 CMP R9,#+0 \ 00000288 6FFFFF1A BNE ??CreateEditChat_2 7297 if (t->isunread) total_unread--; \ ??CreateEditChat_1: \ 0000028C 800094E5 LDR R0,[R4, #+128] 7298 total_unread2=total_unread2-t->unread_msg; 7299 t->unread_msg=0; \ 00000290 0090A0E3 MOV R9,#+0 \ 00000294 000050E3 CMP R0,#+0 \ 00000298 9C029715 LDRNE R0,[R7, #+668] \ 0000029C 01004012 SUBNE R0,R0,#+1 \ 000002A0 9C028715 STRNE R0,[R7, #+668] \ 000002A4 180297E5 LDR R0,[R7, #+536] \ 000002A8 841094E5 LDR R1,[R4, #+132] \ 000002AC 010040E0 SUB R0,R0,R1 \ 000002B0 180287E5 STR R0,[R7, #+536] \ 000002B4 849084E5 STR R9,[R4, #+132] 7300 t->isunread=0; \ 000002B8 809084E5 STR R9,[R4, #+128] 7301 ChangeContactPos(t); \ 000002BC 0400A0E1 MOV R0,R4 \ 000002C0 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 7302 wsprintf(ews, "-------"); \ 000002C4 380297E5 LDR R0,[R7, #+568] \ 000002C8 4C1086E2 ADD R1,R6,#+76 \ 000002CC 240100EF SWI +292 7303 PrepareEditControl(&ec); \ 000002D0 10008DE2 ADD R0,SP,#+16 \ 000002D4 640100EF SWI +356 7304 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000002D8 383297E5 LDR R3,[R7, #+568] \ 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 7305 PrepareEditCOptions(&ec_options); \ 000002F8 04008DE2 ADD R0,SP,#+4 \ 000002FC C80100EF SWI +456 7306 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000300 ........ LDR R0,??DataTable334 ;; ED_FONT_SIZE \ 00000304 001090E5 LDR R1,[R0, #+0] \ 00000308 04008DE2 ADD R0,SP,#+4 \ 0000030C CA0100EF SWI +458 7307 CopyOptionsToEditControl(&ec,&ec_options); \ 00000310 04108DE2 ADD R1,SP,#+4 \ 00000314 14008DE2 ADD R0,SP,#+20 \ 00000318 CE0100EF SWI +462 7308 AddEditControlToEditQend(eq,&ec,ma); \ 0000031C 0520A0E1 MOV R2,R5 \ 00000320 14108DE2 ADD R1,SP,#+20 \ 00000324 0800A0E1 MOV R0,R8 \ 00000328 660100EF SWI +358 7309 7310 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 380297E5 LDR R0,[R7, #+568] \ 00000340 ........ BL ParseAnswer \ 00000344 020000EA B ??CreateEditChat_19 7311 else CutWSTR(ews,0); \ ??CreateEditChat_18: \ 00000348 380297E5 LDR R0,[R7, #+568] \ 0000034C 0010A0E3 MOV R1,#+0 \ 00000350 260100EF SWI +294 7312 PrepareEditControl(&ec); \ ??CreateEditChat_19: \ 00000354 10008DE2 ADD R0,SP,#+16 \ 00000358 640100EF SWI +356 7313 // ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,1024); 7314 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 383297E5 LDR R3,[R7, #+568] \ 00000378 402DA013 MOVNE R2,#+4096 \ 0000037C 0020A003 MOVEQ R2,#+0 \ 00000380 14008DE2 ADD R0,SP,#+20 \ 00000384 650100EF SWI +357 7315 7316 PrepareEditCOptions(&ec_options); \ 00000388 04008DE2 ADD R0,SP,#+4 \ 0000038C C80100EF SWI +456 7317 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000390 ........ LDR R0,??DataTable334 ;; ED_FONT_SIZE \ 00000394 001090E5 LDR R1,[R0, #+0] \ 00000398 04008DE2 ADD R0,SP,#+4 \ 0000039C CA0100EF SWI +458 7318 CopyOptionsToEditControl(&ec,&ec_options); \ 000003A0 04108DE2 ADD R1,SP,#+4 \ 000003A4 14008DE2 ADD R0,SP,#+20 \ 000003A8 CE0100EF SWI +462 7319 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 7320 7321 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 7322 { 7323 FreeXText(t); \ 000003D0 0400A0E1 MOV R0,R4 \ 000003D4 ........ _BLF FreeXText,??FreeXText??rA 7324 t->req_xtext=0; \ 000003D8 AC9084E5 STR R9,[R4, #+172] 7325 RequestXText(t->uin); \ 000003DC 0C0094E5 LDR R0,[R4, #+12] \ 000003E0 ........ BL RequestXText 7326 } 7327 7328 EDCHAT_STRUCT *ed_struct=malloc(sizeof(EDCHAT_STRUCT)); \ ??CreateEditChat_20: \ 000003E4 1400A0E3 MOV R0,#+20 \ 000003E8 140000EF SWI +20 \ 000003EC 0050A0E1 MOV R5,R0 7329 ed_struct->ed_contact=t; \ 000003F0 004085E5 STR R4,[R5, #+0] 7330 ed_struct->ed_answer=edchat_toitem; \ 000003F4 08A085E5 STR R10,[R5, #+8] 7331 ed_struct->requested_decrement_total_unread=0; \ 000003F8 0C9085E5 STR R9,[R5, #+12] 7332 t->req_add=0; \ 000003FC 889084E5 STR R9,[R4, #+136] 7333 t->last_log=NULL; \ 00000400 989084E5 STR R9,[R4, #+152] 7334 7335 // int scr_w=ScreenW(); 7336 // int scr_h=ScreenH(); 7337 // int head_h=HeaderH(); 7338 7339 patch_header(&edchat_hdr); \ 00000404 380086E2 ADD R0,R6,#+56 \ 00000408 ........ _BLF patch_header,??patch_header??rA 7340 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] 7341 // edchat_desc.font=ED_FONT_SIZE; 7342 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 AC0287E5 STR R0,[R7, #+684] 7343 } \ 0000045C 40D08DE2 ADD SP,SP,#+64 \ 00000460 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CreateEditChat_0: \ 00000464 ........ DC32 edchat_desc \ 00000468 ........ DC32 FIRST_LETTER 7344 7345 //----------------------------------------------------------------------------- 7346 7347 #define EC_MNU_MAX 9 7348 \ In segment CODE, align 4, keep-with-next 7349 void Quote(GUI *data) 7350 { \ Quote: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 7351 int q_n; 7352 EDITCONTROL ec, ec_hdr; 7353 EDITCONTROL ec_ed; 7354 WSHDR *ed_ws; 7355 WSHDR *ws; 7356 7357 EDCHAT_STRUCT *ed_struct; 7358 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 7359 7360 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 7361 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 7362 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 7363 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 7364 7365 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 7366 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 7367 { 7368 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 7369 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote_1 7370 } 7371 else 7372 CutWSTR(ed_ws,0); \ ??Quote_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 7373 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 7374 { 7375 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 7376 } 7377 else 7378 { 7379 wstrcat(ed_ws,ec.pWS); \ ??Quote_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 7380 } 7381 int ed_pos=0; \ ??Quote_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 7382 do 7383 { 7384 ed_pos++; \ ??Quote_4: \ 000000D0 017080E2 ADD R7,R0,#+1 7385 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 7386 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 7387 } 7388 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 7389 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 7390 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 7391 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 7392 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 7393 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 7394 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 7395 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 7396 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 7397 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 0000017C 040094E5 LDR R0,[R4, #+4] \ 00000180 0610A0E1 MOV R1,R6 \ 00000184 810100EF SWI +385 7398 FreeWS(ws); \ 00000188 0600A0E1 MOV R0,R6 \ 0000018C 290100EF SWI +297 7399 GeneralFuncF1(1); \ 00000190 0100A0E3 MOV R0,#+1 \ 00000194 3B0100EF SWI +315 7400 } \ 00000198 84D08DE2 ADD SP,SP,#+132 \ 0000019C F080BDE8 POP {R4-R7,PC} ;; return 7401 \ In segment CODE, align 4, keep-with-next 7402 void Quote2(GUI *data)//цитирование без фокуса на ответ 7403 { \ Quote2: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 7404 int q_n; 7405 EDITCONTROL ec, ec_hdr; 7406 EDITCONTROL ec_ed; 7407 WSHDR *ed_ws; 7408 WSHDR *ws; 7409 7410 EDCHAT_STRUCT *ed_struct; 7411 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 7412 7413 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 7414 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 7415 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 7416 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 7417 7418 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 7419 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 7420 { 7421 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 7422 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote2_1 7423 } 7424 else 7425 CutWSTR(ed_ws,0); \ ??Quote2_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 7426 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 7427 { 7428 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 7429 } 7430 else 7431 { 7432 wstrcat(ed_ws,ec.pWS); \ ??Quote2_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 7433 } 7434 int ed_pos=0; \ ??Quote2_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 7435 do 7436 { 7437 ed_pos++; \ ??Quote2_4: \ 000000D0 017080E2 ADD R7,R0,#+1 7438 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 7439 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 7440 } 7441 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 7442 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 7443 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 7444 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 7445 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 7446 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 7447 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 7448 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 7449 int ii=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000170 040094E5 LDR R0,[R4, #+4] \ 00000174 820100EF SWI +386 7450 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 7451 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000188 040094E5 LDR R0,[R4, #+4] \ 0000018C 0610A0E1 MOV R1,R6 \ 00000190 810100EF SWI +385 7452 EDIT_SetFocus(ed_struct->ed_chatgui,ii); \ 00000194 040094E5 LDR R0,[R4, #+4] \ 00000198 0510A0E1 MOV R1,R5 \ 0000019C 9B0100EF SWI +411 7453 FreeWS(ws); \ 000001A0 0600A0E1 MOV R0,R6 \ 000001A4 290100EF SWI +297 7454 GeneralFuncF1(1); \ 000001A8 0100A0E3 MOV R0,#+1 \ 000001AC 3B0100EF SWI +315 7455 } \ 000001B0 84D08DE2 ADD SP,SP,#+132 \ 000001B4 F080BDE8 POP {R4-R7,PC} ;; return 7456 7457 \ In segment CODE, align 4, keep-with-next 7458 void GetShortInfo(GUI *data) 7459 { \ GetShortInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} 7460 EDCHAT_STRUCT *ed_struct; 7461 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 7462 7463 TPKT *p; 7464 CLIST *t; 7465 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,??DataTable346 ;; MAINCSM + 88 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 030050E3 CMP R0,#+3 \ 00000024 1B00001A BNE ??GetShortInfo_0 7466 { 7467 p=malloc(sizeof(PKT)); \ 00000028 0800A0E3 MOV R0,#+8 \ 0000002C 140000EF SWI +20 7468 p->pkt.uin=t->uin; 7469 p->pkt.type=T_REQINFOSHORT; 7470 p->pkt.data_len=0; 7471 AddStringToLog(t, 0x01, "Request info...", I_str,0xFFFFFFFF,1); \ 00000030 ........ LDR R3,??DataTable340 ;; 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 7472 AddMsgToChat(ed_struct->ed_chatgui); \ 00000070 040094E5 LDR R0,[R4, #+4] \ 00000074 ........ BL AddMsgToChat 7473 RecountMenu(t,1); \ 00000078 0110A0E3 MOV R1,#+1 \ 0000007C 0500A0E1 MOV R0,R5 \ 00000080 ........ BL RecountMenu 7474 SUBPROC((void *)SendAnswer,0,p); \ 00000084 ........ LDR R0,??DataTable341 ;; SendAnswer \ 00000088 0620A0E1 MOV R2,R6 \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 710100EF SWI +369 \ 00000094 08D08DE2 ADD SP,SP,#+8 7475 } 7476 GeneralFuncF1(1); \ ??GetShortInfo_0: \ 00000098 0100A0E3 MOV R0,#+1 \ 0000009C 3B0100EF SWI +315 7477 } \ 000000A0 7080BDE8 POP {R4-R6,PC} ;; return \ ??GetShortInfo_1: \ 000000A4 ........ DC32 `?` 7478 7479 void AskNickAndAddContact(EDCHAT_STRUCT *); \ In segment CODE, align 4, keep-with-next 7480 void AddCurContact(GUI *data) 7481 { \ AddCurContact: \ 00000000 00402DE9 PUSH {LR} 7482 EDCHAT_STRUCT *ed_struct; 7483 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 7484 7485 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,??DataTable346 ;; MAINCSM + 88 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0000001A BNE ??AddCurContact_0 \ 00000024 ........ _BLF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA 7486 GeneralFuncF1(1); \ ??AddCurContact_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 3B0100EF SWI +315 7487 } \ 00000030 0080BDE8 POP {PC} ;; return 7488 \ In segment CODE, align 4, keep-with-next 7489 void SendAuthReq(GUI *data) 7490 { \ SendAuthReq: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 14D04DE2 SUB SP,SP,#+20 7491 EDCHAT_STRUCT *ed_struct; 7492 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 7493 7494 TPKT *p; 7495 CLIST *t; 7496 int l; 7497 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,??DataTable346 ;; MAINCSM + 88 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthReq_1 7499 { 7500 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 7501 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 7502 p->pkt.type=T_AUTHREQ; 7503 p->pkt.data_len=l; 7504 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 7505 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 ........ LDR R3,??DataTable340 ;; 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 7506 AddMsgToChat(ed_struct->ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 7507 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 ........ BL RecountMenu 7508 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable341 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 7509 } 7510 GeneralFuncF1(1); \ ??SendAuthReq_1: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 7511 } \ 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,??DataTable346 ;; MAINCSM + 88 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthGrant_1 7523 { 7524 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 7525 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 7526 p->pkt.type=T_AUTHGRANT; 7527 p->pkt.data_len=l; 7528 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 7529 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 ........ LDR R3,??DataTable343 ;; 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 7530 AddMsgToChat(ed_struct->ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 7531 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 ........ BL RecountMenu 7532 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable344 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 7533 } 7534 GeneralFuncF1(1); \ ??SendAuthGrant_1: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 7535 } \ 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 7545 { 7546 if(HISTORY_SAVE_TYPE) \ 00000024 ........ LDR R1,??DataTable345 ;; 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 7547 { 7548 if(HISTORY_TYPE) \ 00000050 01002DE9 PUSH {R0} \ 00000054 00005CE3 CMP R12,#+0 \ 00000058 0500000A BEQ ??OpenLogfile_3 7549 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 7550 else 7551 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 7552 } 7553 else 7554 { 7555 if(HISTORY_TYPE) \ ??OpenLogfile_2: \ 0000008C 00005CE3 CMP R12,#+0 \ 00000090 0200000A BEQ ??OpenLogfile_6 7556 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 7557 else 7558 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 7559 } 7560 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 7561 } 7562 FreeWS(ws); \ ??OpenLogfile_0: \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 290100EF SWI +297 7563 GeneralFuncF1(1); \ 000000C8 0100A0E3 MOV R0,#+1 \ 000000CC 3B0100EF SWI +315 7564 } \ 000000D0 3080BDE8 POP {R4,R5,PC} ;; return \ ??OpenLogfile_1: \ 000000D4 ........ DC32 HISTORY_SAVE_TYPE \ 000000D8 ........ DC32 HISTORY_TYPE \ 000000DC ........ DC32 `?` \ 000000E0 ........ DC32 HIST_PATH 7565 \ In segment CODE, align 4, keep-with-next 7566 void ClearLog(GUI *data/*,void *dummy*/) 7567 { \ ClearLog: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 7568 EDITCONTROL ec; 7569 EDCHAT_STRUCT *ed_struct; 7570 WSHDR *ws; 7571 CLIST *t; 7572 7573 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 7574 7575 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 7576 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 7577 { 7578 ws=AllocWS(1); \ 00000030 0100A0E3 MOV R0,#+1 \ 00000034 250100EF SWI +293 \ 00000038 0050A0E1 MOV R5,R0 7579 CutWSTR(ws,0); \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 260100EF SWI +294 7580 7581 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 7582 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000050 040094E5 LDR R0,[R4, #+4] \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 810100EF SWI +385 7583 7584 FreeWS(ws); \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 290100EF SWI +297 7585 GeneralFuncF1(1); \ 00000064 1D0000EA B ??ClearLog_1 7586 } 7587 else 7588 { 7589 7590 if ((t=ed_struct->ed_contact)) \ ??ClearLog_0: \ 00000068 005094E5 LDR R5,[R4, #+0] \ 0000006C 000055E3 CMP R5,#+0 \ 00000070 1C00000A BEQ ??ClearLog_2 7591 { 7592 if (t->log) \ 00000074 900095E5 LDR R0,[R5, #+144] \ 00000078 0060A0E3 MOV R6,#+0 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 1200000A BEQ ??ClearLog_3 7593 { 7594 FreeLOGQ(&t->log); \ 00000084 900085E2 ADD R0,R5,#+144 \ 00000088 ........ BL FreeLOGQ 7595 t->msg_count=0; \ 0000008C A06085E5 STR R6,[R5, #+160] 7596 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 7597 { 7598 while(ed_struct->ed_answer!=2) 7599 { 7600 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??ClearLog_5: \ 000000AC 040094E5 LDR R0,[R4, #+4] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 D10100EF SWI +465 7601 ed_struct->ed_answer--; \ 000000B8 080094E5 LDR R0,[R4, #+8] \ 000000BC 010040E2 SUB R0,R0,#+1 \ 000000C0 080084E5 STR R0,[R4, #+8] 7602 } \ ??ClearLog_4: \ 000000C4 080094E5 LDR R0,[R4, #+8] \ 000000C8 020050E3 CMP R0,#+2 \ 000000CC F6FFFF1A BNE ??ClearLog_5 7603 } 7604 } 7605 t->isactive=0; //by BoBa 18.06.07 \ ??ClearLog_3: \ 000000D0 9C6085E5 STR R6,[R5, #+156] 7606 RecountMenu(t,1); \ 000000D4 0110A0E3 MOV R1,#+1 \ 000000D8 0500A0E1 MOV R0,R5 \ 000000DC ........ BL RecountMenu 7607 GeneralFuncF1(1); \ ??ClearLog_1: \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 3B0100EF SWI +315 7608 } 7609 } 7610 } \ ??ClearLog_2: \ 000000E8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000EC 7080BDE8 POP {R4-R6,PC} ;; return 7611 \ In segment CODE, align 4, keep-with-next 7612 void ecmenu_ghook(void *data, int cmd) 7613 { \ ecmenu_ghook: \ 00000000 00402DE9 PUSH {LR} 7614 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 7615 { 7616 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 7617 } 7618 } \ 00000010 0080BDE8 POP {PC} ;; return 7619 \ In segment DATA_C, align 4, align-sorted 7620 static const MENUITEM_DESC ecmenu_ITEMS[EC_MNU_MAX]= \ ecmenu_ITEMS: \ 00000000 00000000.... DC32 0H, `?ed_contact)) \ 0000000C 001094E5 LDR R1,[R4, #+0] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 4600000A BEQ ??ec_menu_0 7669 { 7670 if (t->name) \ 00000018 20019FE5 LDR R0,??ec_menu_1+0x4 ;; ecm_contactname \ 0000001C 142091E2 ADDS R2,R1,#+20 \ 00000020 0300000A BEQ ??ec_menu_2 7671 { 7672 strncpy(ecm_contactname,t->name,63); \ 00000024 3F20A0E3 MOV R2,#+63 \ 00000028 141081E2 ADD R1,R1,#+20 \ 0000002C 160100EF SWI +278 \ 00000030 020000EA B ??ec_menu_3 7673 } 7674 else 7675 { 7676 sprintf(ecm_contactname,"%u",t->uin); \ ??ec_menu_2: \ 00000034 0C2091E5 LDR R2,[R1, #+12] \ 00000038 3F1F8FE2 ADR R1,??ec_menu_1 ;; "%u" \ 0000003C 160000EF SWI +22 7677 } 7678 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ec_menu_3: \ 00000040 040094E5 LDR R0,[R4, #+4] \ 00000044 820100EF SWI +386 \ 00000048 082094E5 LDR R2,[R4, #+8] \ 0000004C 0210A0E3 MOV R1,#+2 \ 00000050 020050E1 CMP R0,R2 \ 00000054 0500001A BNE ??ec_menu_4 7679 { 7680 to_remove[++remove]=0; \ 00000058 0020A0E3 MOV R2,#+0 \ 0000005C 04208DE5 STR R2,[SP, #+4] 7681 to_remove[++remove]=1; \ 00000060 0250A0E3 MOV R5,#+2 \ 00000064 0120A0E3 MOV R2,#+1 \ 00000068 08208DE5 STR R2,[SP, #+8] \ 0000006C 010000EA B ??ec_menu_5 7682 } 7683 else 7684 { 7685 // to_remove[++remove]=1; 7686 to_remove[++remove]=2; \ ??ec_menu_4: \ 00000070 0150A0E3 MOV R5,#+1 \ 00000074 04108DE5 STR R1,[SP, #+4] 7687 } 7688 7689 if (ed_struct->ed_answer<=2) \ ??ec_menu_5: \ 00000078 080094E5 LDR R0,[R4, #+8] \ 0000007C 030050E3 CMP R0,#+3 \ 00000080 030000AA BGE ??ec_menu_6 7690 to_remove[++remove]=7; \ 00000084 015085E2 ADD R5,R5,#+1 \ 00000088 0D00A0E1 MOV R0,SP \ 0000008C 0720A0E3 MOV R2,#+7 \ 00000090 052180E7 STR R2,[R0, +R5, LSL #+2] 7691 7692 if (!ed_struct->ed_contact || connect_state!=3) \ ??ec_menu_6: \ 00000094 000094E5 LDR R0,[R4, #+0] \ 00000098 000050E3 CMP R0,#+0 \ 0000009C 0300000A BEQ ??ec_menu_7 \ 000000A0 ........ LDR R0,??DataTable346 ;; MAINCSM + 88 \ 000000A4 000090E5 LDR R0,[R0, #+0] \ 000000A8 030050E3 CMP R0,#+3 \ 000000AC 1000000A BEQ ??ec_menu_8 7693 { 7694 to_remove[++remove]=2; \ ??ec_menu_7: \ 000000B0 010085E2 ADD R0,R5,#+1 \ 000000B4 0D20A0E1 MOV R2,SP \ 000000B8 001182E7 STR R1,[R2, +R0, LSL #+2] 7695 to_remove[++remove]=3; \ 000000BC 010080E2 ADD R0,R0,#+1 \ 000000C0 0D10A0E1 MOV R1,SP \ 000000C4 0320A0E3 MOV R2,#+3 \ 000000C8 002181E7 STR R2,[R1, +R0, LSL #+2] 7696 to_remove[++remove]=4; \ 000000CC 010080E2 ADD R0,R0,#+1 \ 000000D0 0420A0E3 MOV R2,#+4 \ 000000D4 002181E7 STR R2,[R1, +R0, LSL #+2] 7697 to_remove[++remove]=5; \ 000000D8 010080E2 ADD R0,R0,#+1 \ 000000DC 0520A0E3 MOV R2,#+5 \ 000000E0 002181E7 STR R2,[R1, +R0, LSL #+2] 7698 to_remove[++remove]=6; \ 000000E4 015080E2 ADD R5,R0,#+1 \ 000000E8 0D00A0E1 MOV R0,SP \ 000000EC 0610A0E3 MOV R1,#+6 \ 000000F0 051180E7 STR R1,[R0, +R5, LSL #+2] 7699 } 7700 7701 patch_header(&ecmenu_HDR); \ ??ec_menu_8: \ 000000F4 48609FE5 LDR R6,??ec_menu_1+0x8 ;; ecmenu_HDR \ 000000F8 0600A0E1 MOV R0,R6 \ 000000FC ........ _BLF patch_header,??patch_header??rA 7702 to_remove[0]=remove; \ 00000100 00508DE5 STR R5,[SP, #+0] 7703 CreateMenu(0,0,&ecmenu_STRUCT,&ecmenu_HDR,0,EC_MNU_MAX,ed_struct,to_remove); \ 00000104 0D00A0E1 MOV R0,SP \ 00000108 01002DE9 PUSH {R0} \ 0000010C 10002DE9 PUSH {R4} \ 00000110 0630A0E1 MOV R3,R6 \ 00000114 0900A0E3 MOV R0,#+9 \ 00000118 01002DE9 PUSH {R0} \ 0000011C 142086E2 ADD R2,R6,#+20 \ 00000120 0010A0E3 MOV R1,#+0 \ 00000124 0000A0E3 MOV R0,#+0 \ 00000128 01002DE9 PUSH {R0} \ 0000012C 520100EF SWI +338 \ 00000130 10D08DE2 ADD SP,SP,#+16 7704 } 7705 } \ ??ec_menu_0: \ 00000134 28D08DE2 ADD SP,SP,#+40 ;; stack cleaning \ 00000138 7080BDE8 POP {R4-R6,PC} ;; return \ ??ec_menu_1: \ 0000013C 25750000 DC8 "%u",+0 \ 00000140 ........ DC32 ecm_contactname \ 00000144 ........ DC32 ecmenu_HDR 7706 7707 \ In segment CODE, align 4, keep-with-next 7708 void AskNickAndAddContact(EDCHAT_STRUCT *ed_struct) 7709 { 7710 CreateAddContactGrpDialog(ed_struct->ed_contact); \ AskNickAndAddContact: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 ........ _BF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA ;; tailcall 7711 } 7712 \ In segment CODE, align 4, keep-with-next 7713 void AddSmile(GUI *data) 7714 { \ AddSmile: \ 00000000 00402DE9 PUSH {LR} 7715 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 7716 CreateSmileSelectGUI(ed_struct); \ 00000008 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 7717 GeneralFuncF1(1); \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0100EF SWI +315 7718 } \ 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 \ ??DataTable8: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable9: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable16: \ 00000000 ........ DC32 Remind_Timer2 \ In segment CODE, align 4, keep-with-next \ ??DataTable19: \ 00000000 ........ DC32 MAINCSM + 88 \ In segment CODE, align 4, keep-with-next \ ??DataTable20: \ 00000000 ........ DC32 GetTags \ In segment CODE, align 4, keep-with-next \ ??DataTable26: \ 00000000 ........ DC32 showAwayIdle \ In segment CODE, align 4, keep-with-next \ ??DataTable27: \ 00000000 ........ DC32 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable28: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable29: \ 00000000 ........ DC32 MAINCSM + 72 \ In segment CODE, align 4, keep-with-next \ ??DataTable30: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable31: \ 00000000 ........ DC32 MAINCSM \ In segment CODE, align 4, keep-with-next \ ??DataTable33: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable34: \ 00000000 ........ DC32 awayMsg \ In segment CODE, align 4, keep-with-next \ ??DataTable37: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable42: \ 00000000 ........ DC32 def_setting \ In segment CODE, align 4, keep-with-next \ ??DataTable43: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable45: \ 00000000 ........ DC32 ind_set_xstatus \ In segment CODE, align 4, keep-with-next \ ??DataTable51: \ 00000000 ........ DC32 vibraPower \ In segment CODE, align 4, keep-with-next \ ??DataTable54: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable60: \ 00000000 ........ DC32 S_ICONS + 672 \ In segment CODE, align 4, keep-with-next \ ??DataTable61: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable62: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable63: \ 00000000 ........ DC32 ICON_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable64: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable68: \ 00000000 ........ DC32 MAINCSM + 108 \ In segment CODE, align 4, keep-with-next \ ??DataTable69: \ 00000000 ........ DC32 MAINCSM + 96 \ In segment CODE, align 4, keep-with-next \ ??DataTable75: \ 00000000 ........ DC32 TIME_OR_MSG \ In segment CODE, align 4, keep-with-next \ ??DataTable76: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable82: \ 00000000 ........ DC32 icon_array + 8 \ In segment CODE, align 4, keep-with-next \ ??DataTable85: \ 00000000 ........ DC32 icon_array \ In segment CODE, align 4, keep-with-next \ ??DataTable86: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable87: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable88: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable90: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable91: \ 00000000 ........ DC32 suc_config_name \ In segment CODE, align 4, keep-with-next \ ??DataTable92: \ 00000000 ........ DC32 suc_config_name_mod \ In segment CODE, align 4, keep-with-next \ ??DataTable93: \ 00000000 ........ DC32 janis \ In segment CODE, align 4, keep-with-next \ ??DataTable94: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable96: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable97: \ 00000000 ........ DC32 MAINCSM \ In segment CODE, align 4, keep-with-next \ ??DataTable99: \ 00000000 ........ DC32 S_ICONS + 672 \ In segment CODE, align 4, keep-with-next \ ??DataTable101: \ 00000000 ........ DC32 isLogStatusChange \ In segment CODE, align 4, keep-with-next \ ??DataTable102: \ 00000000 ........ DC32 total_xstatuses \ In segment CODE, align 4, keep-with-next \ ??DataTable103: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable106: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable107: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable108: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable112: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable115: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable116: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable117: \ 00000000 ........ DC32 MAINCSM \ In segment CODE, align 4, keep-with-next \ ??DataTable119: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable120: \ 00000000 ........ DC32 ignor_list \ In segment CODE, align 4, keep-with-next \ ??DataTable121: \ 00000000 ........ DC32 extended_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable122: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable123: \ 00000000 ........ DC32 janis \ In segment CODE, align 4, keep-with-next \ ??DataTable124: \ 00000000 ........ DC32 main_count \ In segment CODE, align 4, keep-with-next \ ??DataTable126: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable128: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable129: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable130: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable131: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable141: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable142: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable143: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable145: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable146: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable147: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable148: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable149: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable150: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable151: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable152: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable158: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable161: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable162: \ 00000000 ........ DC32 cmd_chars \ In segment CODE, align 4, keep-with-next \ ??DataTable164: \ 00000000 ........ DC32 cmd_chars + 4 \ In segment CODE, align 4, keep-with-next \ ??DataTable165: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable166: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable168: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable171: \ 00000000 ........ DC32 MAINCSM + 96 \ In segment CODE, align 4, keep-with-next \ ??DataTable172: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable173: \ 00000000 ........ DC32 main_count \ In segment CODE, align 4, keep-with-next \ ??DataTable174: \ 00000000 ........ DC32 main2_count \ In segment CODE, align 4, keep-with-next \ ??DataTable175: \ 00000000 ........ DC32 ignor_list \ In segment CODE, align 4, keep-with-next \ ??DataTable176: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable177: \ 00000000 ........ DC32 awayMsg \ In segment CODE, align 4, keep-with-next \ ??DataTable182: \ 00000000 ........ DC32 PopupFont \ In segment CODE, align 4, keep-with-next \ ??DataTable183: \ 00000000 ........ DC32 NumStatusToIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable184: \ 00000000 ........ DC32 PopupBGCl \ In segment CODE, align 4, keep-with-next \ ??DataTable186: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable189: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable190: \ 00000000 ........ DC32 isLogStatusChange \ In segment CODE, align 4, keep-with-next \ ??DataTable192: \ 00000000 ........ DC32 extended_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable193: \ 00000000 ........ DC32 TIME_OR_MSG \ In segment CODE, align 4, keep-with-next \ ??DataTable194: \ 00000000 ........ DC32 MAINCSM + 108 \ In segment CODE, align 4, keep-with-next \ ??DataTable195: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable196: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable197: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable200: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable201: \ 00000000 ........ DC32 main_count \ In segment CODE, align 4, keep-with-next \ ??DataTable202: \ 00000000 ........ DC32 MAINCSM + 88 \ In segment CODE, align 4, keep-with-next \ ??DataTable207: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable209: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable214: \ 00000000 ........ DC32 itemFromDisp \ In segment CODE, align 4, keep-with-next \ ??DataTable216: \ 00000000 ........ DC32 addonuin \ In segment CODE, align 4, keep-with-next \ ??DataTable220: \ 00000000 ........ DC32 PASS \ In segment CODE, align 4, keep-with-next \ ??DataTable222: \ 00000000 ........ DC32 S_ICONS + 6620 \ In segment CODE, align 4, keep-with-next \ ??DataTable224: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable227: \ 00000000 ........ DC32 total_xstatuses \ In segment CODE, align 4, keep-with-next \ ??DataTable230: \ 00000000 ........ DC32 IsInvertSoftKey \ In segment CODE, align 4, keep-with-next \ ??DataTable233: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable238: \ 00000000 ........ DC32 process_active_timer \ In segment CODE, align 4, keep-with-next \ ??DataTable239: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable241: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable242: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable244: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable246: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable247: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable248: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable249: \ 00000000 ........ DC32 MAINCSM \ In segment CODE, align 4, keep-with-next \ ??DataTable250: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable252: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable253: \ 00000000 ........ DC32 PASS \ In segment CODE, align 4, keep-with-next \ ??DataTable257: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable258: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable259: \ 00000000 ........ DC32 showAwayIdle \ In segment CODE, align 4, keep-with-next \ ??DataTable260: \ 00000000 ........ DC32 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable262: \ 00000000 ........ DC32 suc_config_name_mod \ In segment CODE, align 4, keep-with-next \ ??DataTable266: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable267: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable268: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable271: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable272: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable273: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable274: \ 00000000 ........ DC32 ClearSendQ \ In segment CODE, align 4, keep-with-next \ ??DataTable275: \ 00000000 ........ DC32 NumStatusToIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable276: \ 00000000 ........ DC32 MAINCSM \ In segment CODE, align 4, keep-with-next \ ??DataTable278: \ 00000000 ........ DC32 ShowStatusIcon \ In segment CODE, align 4, keep-with-next \ ??DataTable282: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable283: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable284: \ 00000000 ........ DC32 suc_config_name \ In segment CODE, align 4, keep-with-next \ ??DataTable285: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable286: \ 00000000 ........ DC32 fontpath \ In segment CODE, align 4, keep-with-next \ ??DataTable287: \ 00000000 ........ DC32 bgrColor \ In segment CODE, align 4, keep-with-next \ ??DataTable288: \ 00000000 ........ DC32 fontColor \ In segment CODE, align 4, keep-with-next \ ??DataTable289: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable290: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable291: \ 00000000 ........ DC32 Pinger2 \ In segment CODE, align 4, keep-with-next \ ??DataTable292: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable294: \ 00000000 ........ DC32 S_ICONS + 672 \ In segment CODE, align 4, keep-with-next \ ??DataTable295: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable296: \ 00000000 ........ DC32 IsMultiBuffer \ In segment CODE, align 4, keep-with-next \ ??DataTable298: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable299: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable300: \ 00000000 ........ DC32 S_ICONS + 6620 \ In segment CODE, align 4, keep-with-next \ ??DataTable301: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable303: \ 00000000 ........ DC32 MAINCSM \ In segment CODE, align 4, keep-with-next \ ??DataTable304: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable307: \ 00000000 ........ DC32 main2_count \ In segment CODE, align 4, keep-with-next \ ??DataTable308: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable309: \ 00000000 ........ DC32 IsMultiBuffer \ In segment CODE, align 4, keep-with-next \ ??DataTable311: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable312: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable313: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable314: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable315: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable316: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable319: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable320: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable323: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable324: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable327: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable329: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable330: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable331: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable332: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable334: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable340: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable341: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable343: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable344: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable345: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable346: \ 00000000 ........ DC32 MAINCSM + 88 \ In segment CODE, align 4, keep-with-next \ ??DataTable347: \ 00000000 ........ DC32 GetTags \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 ............ DC32 maincsm_onmessage, maincsm_oncreate, 0, 0, 0, 0, maincsm_onclose \ ....00000000 \ 000000000000 \ 000000000000 \ ........ \ 0000001C 2C0000000100 DC32 44, 1, minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ 0000........ \ ........CCCC \ AA5555AA3333 \ 00000000 \ 00000038 8B00 DC16 139 \ 0000003A 0000 DC8 0, 0 \ 0000003C 49636F6E4261 DC8 "IconBar" \ 7200 \ 00000044 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000048 00000000 DC32 0 \ `?`: \ 0000004C 00000000 DC32 0 \ `?`: \ 00000050 00000000 DC32 0 \ `?`: \ 00000054 F6FFFFFF DC32 -10 \ `?`: \ 00000058 00000000 DC32 0 \ `?`: \ 0000005C FFFFFFFF DC32 -1 \ `?`: \ 00000060 00000000 DC32 0 \ `?`: \ 00000064 00000000 DC32 0H \ `?`: \ 00000068 01000000 DC32 1 \ `?`: \ 0000006C 00000000 DC32 0 \ `?`: \ 00000070 01000000 DC32 1 \ `?`: \ 00000074 01000000 DC32 1 \ `?`: \ 00000078 00000000 DC32 0 \ `?`: \ 0000007C 03000000 DC32 3 \ `?`: \ 00000080 00000000 DC32 0 \ `?`: \ 00000084 00000000 DC32 0 \ `?`: \ 00000088 01000000 DC32 1 \ `?`: \ 0000008C 00000000 DC32 0 \ `?`: \ 00000090 53656E64696E DC8 "Sending online time..." \ 67206F6E6C69 \ 6E652074696D \ 652E2E2E00 \ 000000A7 00 DC8 0 \ `?`: \ 000000A8 53656E64696E DC8 "Sending msg info..." \ 67206D736720 \ 696E666F2E2E \ 2E00 \ `?`: \ 000000BC 53656E64696E DC8 "Sending battery info..." \ 672062617474 \ 65727920696E \ 666F2E2E2E00 \ `?`: \ 000000D4 53656E64696E DC8 "Sending mod info..." \ 67206D6F6420 \ 696E666F2E2E \ 2E00 \ `?`: \ 000000E8 53656E64696E DC8 "Sending offline info..." \ 67206F66666C \ 696E6520696E \ 666F2E2E2E00 \ `?`: \ 00000100 FFFFFF64 DC8 255, 255, 255, 100 \ 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 ............ DC32 ChangeVibraContact, ChangeSoundContact, ChangeAutoMsg \ ............ \ 0000000C ........ DC32 ChangeShowXstatus \ 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 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 446563203139 DC8 "Dec 19 2010" \ 203230313000 \ 00000058 31363A34353A DC8 "16:45:02" \ 303200 \ 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 76 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 32 SendAuthGrant 44 SendAuthReq 48 SendData 16 SendMSGACK 8 SetIconBarHandler 0 SetIndividStatus 0 UpdateCLheader 192 UpdateCSMname 4 UptimeMinHour 0 WriteDefSettings 176 addIconBar 20 ask_my_info 0 atoi 4 away_timer 52 begin_to_develop 4 checkGui 8 cmdFree 8 contact_keyhook 8 contact_list_ghook 4 contacthandler 28 contactlist_menu_ghook 32 contactlist_menu_iconhndl 668 contactlist_menu_onkey 36 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 1100 init_time_zone 4 input_awaymsg_ghook 4 input_awaymsg_locret 0 input_awaymsg_onkey 76 main 64 maincsm_onclose 8 maincsm_oncreate 20 maincsm_onmessage 112 method0 92 method1 8 method2 8 method3 8 method4 0 method5 48 method8 0 method9 0 my_ed_redraw 12 my_keyhook 12 new_redraw 100 patch_header 8 process_active_timer 12 recon 4 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 FreeXText2 36 away_timer 428 init_time_zone 356 AutoChangeStatus_timer 1072 DrawPing 76 Remind_Timer2 68 Reminder_timer 32 UptimeMinHour 64 upTime 160 DrawOnlineTime 152 DrawAutoMSG 144 input_awaymsg_onkey 260 input_awaymsg_ghook 68 input_awaymsg_locret 4 InputAwayMsg 316 setup_ICONS 68 free_ICONS 44 IlluminationOff 56 IlluminationOn 120 ReadDefSettings 612 WriteDefSettings 616 Play 304 start_vibra 100 stop_vibra 88 start_vibra2 60 stop_vibra2 88 ChangeVibra 56 ChangeSound 56 FreeTemplates 56 LoadTemplates 396 ElfKiller 28 NewLOGQ 52 LastLOGQ 36 FreeLOGQ 48 RemoveLOGQ 52 AddLOGQ 44 GetLastXTextLOGQ 72 GetIconIndex 228 FindContactLOGQByAck 88 CreateCLFile 236 new_redraw 136 UpdateCLheader 1468 ClearContactT9Key 24 AddContactT9Key 44 BackSpaceContactT9 44 create_contactlist_menu 76 contactlist_menu_ghook 188 RecountMenu 160 ChangeVibraContact 44 ChangeSoundContact 44 ChangeAutoMsg 44 ChangeShowXstatus 44 contact_list_ghook 20 contact_keyhook 76 contacthandler 196 CreateContactMenu 136 LongPressActionOnChat 848 LongPressAction 236 contactlist_menu_onkey 1120 GetOnTotalContact 92 contactlist_menu_iconhndl 688 GetHost 192 atoi 84 GetPort 276 GetHostsCount 120 create_connect 760 ClearSendQ 32 end_socket 40 SendAnswer 392 send_login 148 do_ping 52 SendMSGACK 52 RequestXText 52 get_answer 1576 AddToMain 572 AddStringToLog 588 ParseXStatusText 152 AddMsgToChat 812 DrawAck 340 ask_my_info 4 set_my_status 72 set_my_xstatus 528 set_my_xstatus2 244 to_develop 80 ReqAddMsgToChat 120 begin_to_develop 52 cmdFree 56 LoadCmd 280 CmdMenuItemHandler 88 CmdMenuGHook 36 CmdMenuKeyHook 160 DispCmdMenu 124 GetStatusByIconIndex 176 SendData 120 CheckComand 2852 show_on_contact 340 show_pp_sender 432 Get_Online_total 92 SetIndividStatus 76 ProcessPacket 2948 process_active_timer 148 OneSecTmr 100 DrawList 564 MoveUp 120 MoveDown 100 Enter 136 method0 1276 method1 44 method2 36 method3 24 method4 20 method5 456 method8 8 method9 8 my_keyhook 100 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 308 maincsm_onclose 336 do_reconnect 40 CheckDoubleRun 136 checkGui 76 maincsm_onmessage 3164 addIconBar 332 minus11 4 MAINCSM 260 sk 8 input_awaymsg_sk 24 input_awaymsg_skt 8 prozr 4 menuproc 16 CmdMenuHeader 24 clrBlack 4 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 48 edchat_onkey 1552 my_ed_redraw 108 edchat_ghook 544 S_ICONS 7840 timeh 4 timemin 4 RXbuf 16392 TXbuf 16392 icon_array 76 cmd_chars 8 errornumber 4 INC_Nick 32 itemFromDisp 8 maincsm_name_body 280 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 ecm_contactname 64 ecmenu_HDR 64 ec_menu 328 AskNickAndAddContact 8 AddSmile 24 ??DataTable1 4 ??DataTable2 4 ??DataTable8 4 ??DataTable9 4 ??DataTable16 4 ??DataTable19 4 ??DataTable20 4 ??DataTable26 4 ??DataTable27 4 ??DataTable28 4 ??DataTable29 4 ??DataTable30 4 ??DataTable31 4 ??DataTable33 4 ??DataTable34 4 ??DataTable37 4 ??DataTable42 4 ??DataTable43 4 ??DataTable45 4 ??DataTable51 4 ??DataTable54 4 ??DataTable60 4 ??DataTable61 4 ??DataTable62 4 ??DataTable63 4 ??DataTable64 4 ??DataTable68 4 ??DataTable69 4 ??DataTable75 4 ??DataTable76 4 ??DataTable82 4 ??DataTable85 4 ??DataTable86 4 ??DataTable87 4 ??DataTable88 4 ??DataTable90 4 ??DataTable91 4 ??DataTable92 4 ??DataTable93 4 ??DataTable94 4 ??DataTable96 4 ??DataTable97 4 ??DataTable99 4 ??DataTable101 4 ??DataTable102 4 ??DataTable103 4 ??DataTable106 4 ??DataTable107 4 ??DataTable108 4 ??DataTable112 4 ??DataTable115 4 ??DataTable116 4 ??DataTable117 4 ??DataTable119 4 ??DataTable120 4 ??DataTable121 4 ??DataTable122 4 ??DataTable123 4 ??DataTable124 4 ??DataTable126 4 ??DataTable128 4 ??DataTable129 4 ??DataTable130 4 ??DataTable131 4 ??DataTable141 4 ??DataTable142 4 ??DataTable143 4 ??DataTable145 4 ??DataTable146 4 ??DataTable147 4 ??DataTable148 4 ??DataTable149 4 ??DataTable150 4 ??DataTable151 4 ??DataTable152 4 ??DataTable158 4 ??DataTable161 4 ??DataTable162 4 ??DataTable164 4 ??DataTable165 4 ??DataTable166 4 ??DataTable168 4 ??DataTable171 4 ??DataTable172 4 ??DataTable173 4 ??DataTable174 4 ??DataTable175 4 ??DataTable176 4 ??DataTable177 4 ??DataTable182 4 ??DataTable183 4 ??DataTable184 4 ??DataTable186 4 ??DataTable189 4 ??DataTable190 4 ??DataTable192 4 ??DataTable193 4 ??DataTable194 4 ??DataTable195 4 ??DataTable196 4 ??DataTable197 4 ??DataTable200 4 ??DataTable201 4 ??DataTable202 4 ??DataTable207 4 ??DataTable209 4 ??DataTable214 4 ??DataTable216 4 ??DataTable220 4 ??DataTable222 4 ??DataTable224 4 ??DataTable227 4 ??DataTable230 4 ??DataTable233 4 ??DataTable238 4 ??DataTable239 4 ??DataTable241 4 ??DataTable242 4 ??DataTable244 4 ??DataTable246 4 ??DataTable247 4 ??DataTable248 4 ??DataTable249 4 ??DataTable250 4 ??DataTable252 4 ??DataTable253 4 ??DataTable257 4 ??DataTable258 4 ??DataTable259 4 ??DataTable260 4 ??DataTable262 4 ??DataTable266 4 ??DataTable267 4 ??DataTable268 4 ??DataTable271 4 ??DataTable272 4 ??DataTable273 4 ??DataTable274 4 ??DataTable275 4 ??DataTable276 4 ??DataTable278 4 ??DataTable282 4 ??DataTable283 4 ??DataTable284 4 ??DataTable285 4 ??DataTable286 4 ??DataTable287 4 ??DataTable288 4 ??DataTable289 4 ??DataTable290 4 ??DataTable291 4 ??DataTable292 4 ??DataTable294 4 ??DataTable295 4 ??DataTable296 4 ??DataTable298 4 ??DataTable299 4 ??DataTable300 4 ??DataTable301 4 ??DataTable303 4 ??DataTable304 4 ??DataTable307 4 ??DataTable308 4 ??DataTable309 4 ??DataTable311 4 ??DataTable312 4 ??DataTable313 4 ??DataTable314 4 ??DataTable315 4 ??DataTable316 4 ??DataTable319 4 ??DataTable320 4 ??DataTable323 4 ??DataTable324 4 ??DataTable327 4 ??DataTable329 4 ??DataTable330 4 ??DataTable331 4 ??DataTable332 4 ??DataTable334 4 ??DataTable340 4 ??DataTable341 4 ??DataTable343 4 ??DataTable344 4 ??DataTable345 4 ??DataTable346 4 ??DataTable347 4 ? 260 ? 8 ? 24 ? 8 ? 4 ? 16 ? 24 ? 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 1204 46 696 bytes in segment CODE 5 666 bytes in segment DATA_C 348 bytes in segment DATA_I 348 bytes in segment DATA_ID 41 104 bytes in segment DATA_Z 24 bytes in segment INITTAB 45 468 bytes of CODE memory (+ 1 252 bytes shared) 6 014 bytes of CONST memory 41 452 bytes of DATA memory Errors: none Warnings: none