############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 06/Aug/2008 20:09:41 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\main.c # # Command line = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\main.c -D # # NEWSGOLD -D ELKA -D UIN_WRITE --preprocess # # D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\Release_ELKA\L # # ist\ -lC D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\Relea # # se_ELKA\List\ -o D:\Pasha\elf\_MY_PROJECT_\naticq_mo # # d2\Release_ELKA\Obj\ -s9 --no_unroll --cpu_mode arm # # --endian little --cpu ARM926EJ-S --stack_align 4 # # --interwork -e --fpu None --dlib_config # # "D:\Pasha\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_mod2\Release_ELKA\L # # ist\main.lst # # Object file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\Release_ELKA\O # # bj\main.r79 # # # # # ############################################################################## D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\main.c 1 #include "../inc/swilib.h" 2 #include "../inc/cfg_items.h" 3 #include "../inc/pnglist.h" 4 #include "configs.h" 5 #include "NatICQ.h" 6 #include "history.h" 7 #include "conf_loader.h" 8 #include "mainmenu.h" 9 #include "main.h" 10 #include "language.h" 11 #include "../inc/xtask_ipc.h" 12 #include "smiles.h" 13 #include "naticq_ipc.h" 14 #include "status_change.h" 15 #include "strings.h" 16 #include "manage_cl.h" 17 #include "cl_work.h" 18 #include "select_smile.h" 19 #include "revision.h" 20 #include "print.h" 21 #ifdef NEWSGOLD 22 #include "screen_save.h" 23 #include "player_tags.h" 24 #endif 25 #include "swilib2.h" 26 #include "rect_patcher.h" \ In segment CODE, align 4, keep-with-next \ __??Code32?? __code __interwork __atpcs void patch_header(HEADER_DESC const *) \ patch_header: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0000A0E3 MOV R0,#+0 \ 0000000C B000C4E1 STRH R0,[R4, #+0] \ 00000010 1800A0E3 MOV R0,#+24 \ 00000014 B200C4E1 STRH R0,[R4, #+2] \ 00000018 888100EF SWI +33160 \ 0000001C 010040E2 SUB R0,R0,#+1 \ 00000020 B400C4E1 STRH R0,[R4, #+4] \ 00000024 8A8100EF SWI +33162 \ 00000028 170080E2 ADD R0,R0,#+23 \ 0000002C B600C4E1 STRH R0,[R4, #+6] \ 00000030 1080BDE8 POP {R4,PC} ;; return 27 #include "addon.h" 28 29 extern int *XStatusesIconArray; 30 31 #ifndef NEWSGOLD 32 #define SEND_TIMER 33 #endif 34 35 #define IN_TICKS(sec) (sec * TMR_SECOND) 36 37 38 //------------- ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ -------------// 39 40 int main_d; 41 int align=0; 42 //int space=1; 43 void *canvasdata; 44 int paused_height; 45 WSHDR *wsBuffer;//мультибуффер 46 47 char talk_sound[128]; 48 int uins; 49 //char m_1[]="unofficial! private use only"; 50 //char m_2[]="mod by (c)Evilfox 315384924"; 51 char unread_msg_info[64]; 52 53 int saver_on; 54 55 #ifdef NEWSGOLD 56 extern char teast2[256]; 57 #endif 58 59 //#ifdef ELKA 60 char last_msg_buffer[4096]; 61 //#endif 62 63 //-------------------------------------------------// 64 65 66 67 //-------------------- AUTOPING -------------------// 68 69 GBSTMR ping_tmr; 70 static void PingToServer2(void) 71 { 72 TPKT *p; 73 p=malloc(sizeof(PKT)+sizeof(TTime)); 74 GetDateTime(NULL,(TTime *)p->data); 75 p->pkt.uin=0; 76 p->pkt.type=T_ECHO; 77 p->pkt.data_len=sizeof(TTime); 78 SUBPROC((void *)SendAnswer,0,p); 79 } 80 81 int Is_PING_On; 82 \ In segment CODE, align 4, keep-with-next 83 void Pinger2() 84 { 85 if(Is_PING_On) \ Pinger2: \ 00000000 ........ LDR R0,??DataTable33 ;; icons \ 00000004 70402DE9 PUSH {R4-R6,LR} \ 00000008 ........ LDR R5,??DataTable1 ;; Pinger2 \ 0000000C 3010A0E3 MOV R1,#+48 \ 00000010 581D81E3 ORR R1,R1,#0x1600 \ 00000014 004081E0 ADD R4,R1,R0 \ 00000018 E40290E5 LDR R0,[R0, #+740] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1500000A BEQ ??Pinger2_0 86 { 87 PingToServer2(); \ 00000024 1000A0E3 MOV R0,#+16 \ 00000028 140000EF SWI +20 \ 0000002C 0060A0E1 MOV R6,R0 \ 00000030 081086E2 ADD R1,R6,#+8 \ 00000034 0000A0E3 MOV R0,#+0 \ 00000038 B40000EF SWI +180 \ 0000003C 0000A0E3 MOV R0,#+0 \ 00000040 000086E5 STR R0,[R6, #+0] \ 00000044 1200A0E3 MOV R0,#+18 \ 00000048 B400C6E1 STRH R0,[R6, #+4] \ 0000004C 0800A0E3 MOV R0,#+8 \ 00000050 B600C6E1 STRH R0,[R6, #+6] \ 00000054 ........ LDR R0,??DataTable2 ;; SendAnswer \ 00000058 0620A0E1 MOV R2,R6 \ 0000005C 0010A0E3 MOV R1,#+0 \ 00000060 710100EF SWI +369 88 GBS_StartTimerProc(&ping_tmr, 12960, Pinger2); \ 00000064 0520A0E1 MOV R2,R5 \ 00000068 A010A0E3 MOV R1,#+160 \ 0000006C C81D81E3 ORR R1,R1,#0x3200 \ 00000070 0400A0E1 MOV R0,R4 \ 00000074 4D0000EF SWI +77 \ 00000078 7080BDE8 POP {R4-R6,PC} 89 } 90 else 91 GBS_StartTimerProc(&ping_tmr, 2160, Pinger2); \ ??Pinger2_0: \ 0000007C 0520A0E1 MOV R2,R5 \ 00000080 871EA0E3 MOV R1,#+2160 \ 00000084 0400A0E1 MOV R0,R4 \ 00000088 4D0000EF SWI +77 92 } \ 0000008C 7080BDE8 POP {R4-R6,PC} ;; return 93 94 //-------------------------------------------------// 95 96 97 98 extern volatile int total_smiles; 99 extern volatile int total_xstatuses; 100 extern volatile int xstatuses_load; 101 extern volatile int pictures_max; //2026rev 102 extern volatile int pictures_loaded; //2026rev 103 104 #ifdef ELKA 105 int Is_SLI_On;//мигаем светодиодом 106 #endif 107 108 int Is_SMARTCPU_On;//Вывод сообщений на гэ 109 int Is_INC_On;//Popup message 110 int Is_ILU_On;//Режим подсветки 111 int Is_Double_Vibra_On;//Режим напоминания 112 int total_unread; 113 int total_unread2; 114 115 #ifdef ELKA \ In segment DATA_C, align 4, align-sorted 116 const int SLI_TYPE=1; \ SLI_TYPE: \ 00000000 01000000 DC32 1 117 #endif 118 119 char PINGO[256]; 120 121 #ifdef ELKA 122 extern const unsigned int SLI_time; 123 extern const unsigned int SLI_time2; 124 #endif 125 //#define USE_MLMENU 126 #define USE_GUI //графический интерфейс 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 ;; icons + 772 \ 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 icons + 772 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 kluchnik1 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 { 229 if(scrsTime==screenSaverTime) \ ScreenSaverTimer: \ 00000000 68009FE5 LDR R0,??ScreenSaverTimer_0 ;; screenSaverTime \ 00000004 70402DE9 PUSH {R4-R6,LR} \ 00000008 ........ LDR R4,??DataTable33 ;; icons \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 241394E5 LDR R1,[R4, #+804] \ 00000014 58609FE5 LDR R6,??ScreenSaverTimer_0+0x4 ;; ScreenSaverTimer \ 00000018 5D5D84E2 ADD R5,R4,#+5952 \ 0000001C 000051E1 CMP R1,R0 \ 00000020 0600001A BNE ??ScreenSaverTimer_1 230 { 231 scrsTime=screenSaverTime;//на всякий случай \ 00000024 240384E5 STR R0,[R4, #+804] 232 CloseScreensaver(); \ 00000028 9C0000EF SWI +156 233 DrawScreenSaver(); \ 0000002C 200000EF SWI +32 234 GBS_StartTimerProc(&scrsTmr, 216*10, ScreenSaverTimer); \ 00000030 0620A0E1 MOV R2,R6 \ 00000034 871EA0E3 MOV R1,#+2160 \ 00000038 0500A0E1 MOV R0,R5 \ 0000003C 4D0000EF SWI +77 235 } 236 if(isScreenSaverEna) \ ??ScreenSaverTimer_1: \ 00000040 30009FE5 LDR R0,??ScreenSaverTimer_0+0x8 ;; isScreenSaverEna 237 scrsTime++; 238 GBS_StartTimerProc(&scrsTmr, 216*5, ScreenSaverTimer); \ 00000044 0620A0E1 MOV R2,R6 \ 00000048 000090E5 LDR R0,[R0, #+0] \ 0000004C 3810A0E3 MOV R1,#+56 \ 00000050 000050E3 CMP R0,#+0 \ 00000054 24039415 LDRNE R0,[R4, #+804] \ 00000058 401E81E3 ORR R1,R1,#0x400 \ 0000005C 01008012 ADDNE R0,R0,#+1 \ 00000060 24038415 STRNE R0,[R4, #+804] \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 4D0000EF SWI +77 239 } \ 0000006C 7080BDE8 POP {R4-R6,PC} ;; return \ ??ScreenSaverTimer_0: \ 00000070 ........ DC32 screenSaverTime \ 00000074 ........ DC32 ScreenSaverTimer \ 00000078 ........ 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]; \ In segment DATA_Z, align 4, align-sorted 252 int timeh; \ timeh: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 253 int timemin; \ timemin: \ 00000000 DS8 4 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 AC0094E5 LDR R0,[R4, #+172] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} \ 00000014 150000EF SWI +21 \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C AC0084E5 STR R0,[R4, #+172] 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 R4,??DataTable33 ;; icons \ 00000008 ........ LDR R10,??DataTable30 ;; AUTO_ENGADE \ 0000000C ........ LDR R9,??DataTable6 ;; `?` \ 00000010 0CD04DE2 SUB SP,SP,#+12 \ 00000014 00109AE5 LDR R1,[R10, #+0] \ 00000018 5800A0E3 MOV R0,#+88 \ 0000001C 600D80E3 ORR R0,R0,#0x1800 \ 00000020 045080E0 ADD R5,R0,R4 \ 00000024 500080E2 ADD R0,R0,#+80 \ 00000028 046080E0 ADD R6,R0,R4 \ 0000002C 100040E2 SUB R0,R0,#+16 \ 00000030 047080E0 ADD R7,R0,R4 \ 00000034 280394E5 LDR R0,[R4, #+808] \ 00000038 0C20A0E3 MOV R2,#+12 \ 0000003C 920101E0 MUL R1,R2,R1 \ 00000040 4A8FA0E3 MOV R8,#+296 \ 00000044 010050E1 CMP R0,R1 \ 00000048 1F00001A BNE ??away_timer_0 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 041089E2 ADD R1,R9,#+4 \ 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 101089E2 ADD R1,R9,#+16 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 160000EF SWI +22 274 away_m=1; 275 if(CurrentStatus!=2 && CurrentStatus!=isAutoStatusOn) \ 00000088 180394E5 LDR R0,[R4, #+792] \ 0000008C 01B0A0E3 MOV R11,#+1 \ 00000090 2CB384E5 STR R11,[R4, #+812] \ 00000094 020050E3 CMP R0,#+2 \ 00000098 04D08DE2 ADD SP,SP,#+4 \ 0000009C 0A00000A BEQ ??away_timer_0 \ 000000A0 E8109FE5 LDR R1,??away_timer_1 ;; isAutoStatusOn \ 000000A4 001091E5 LDR R1,[R1, #+0] \ 000000A8 010050E1 CMP R0,R1 \ 000000AC 0600000A BEQ ??away_timer_0 276 { 277 status_rem=CurrentStatus; \ 000000B0 300384E5 STR R0,[R4, #+816] 278 CurrentStatus=2; \ 000000B4 0200A0E3 MOV R0,#+2 \ 000000B8 180384E5 STR R0,[R4, #+792] 279 set_my_status(); \ 000000BC ........ BL set_my_status 280 #ifdef NEWSGOLD 281 void SetIconBarHandler(); 282 SetIconBarHandler(); \ 000000C0 ........ LDR R0,??DataTable11 ;; addIconBar 283 #endif 284 change_back_status=1; \ 000000C4 34B384E5 STR R11,[R4, #+820] \ 000000C8 040088E7 STR R0,[R8, +R4] 285 } 286 } 287 288 if( (IsOnNAStatus) && (msg_away_timer==((AUTO_ENGADE*12)+(NAStatusTime*12))) )//Включить переключение на недоступен,в минутах \ ??away_timer_0: \ 000000CC C0009FE5 LDR R0,??away_timer_1+0x4 ;; IsOnNAStatus \ 000000D0 000090E5 LDR R0,[R0, #+0] \ 000000D4 000050E3 CMP R0,#+0 \ 000000D8 2000000A BEQ ??away_timer_2 \ 000000DC B4209FE5 LDR R2,??away_timer_1+0x8 ;; NAStatusTime \ 000000E0 00109AE5 LDR R1,[R10, #+0] \ 000000E4 002092E5 LDR R2,[R2, #+0] \ 000000E8 280394E5 LDR R0,[R4, #+808] \ 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 041089E2 ADD R1,R9,#+4 \ 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 3C1089E2 ADD R1,R9,#+60 \ 00000130 0500A0E1 MOV R0,R5 \ 00000134 160000EF SWI +22 294 if(CurrentStatus!=3) \ 00000138 180394E5 LDR R0,[R4, #+792] \ 0000013C 04D08DE2 ADD SP,SP,#+4 \ 00000140 030050E3 CMP R0,#+3 \ 00000144 0500000A BEQ ??away_timer_2 295 { 296 status_rem=CurrentStatus; \ 00000148 300384E5 STR R0,[R4, #+816] 297 CurrentStatus=3; \ 0000014C 0300A0E3 MOV R0,#+3 \ 00000150 180384E5 STR R0,[R4, #+792] 298 set_my_status(); \ 00000154 ........ BL set_my_status 299 #ifdef NEWSGOLD 300 void SetIconBarHandler(); 301 SetIconBarHandler(); \ 00000158 ........ LDR R0,??DataTable11 ;; addIconBar \ 0000015C 040088E7 STR R0,[R8, +R4] 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 30209FE5 LDR R2,??away_timer_1+0xC ;; away_timer \ 00000168 000090E5 LDR R0,[R0, #+0] \ 0000016C C41F88E2 ADD R1,R8,#+784 \ 00000170 000050E3 CMP R0,#+0 \ 00000174 28039415 LDRNE R0,[R4, #+808] \ 00000178 01008012 ADDNE R0,R0,#+1 \ 0000017C 28038415 STRNE R0,[R4, #+808] \ 00000180 520D81E2 ADD R0,R1,#+5248 \ 00000184 040080E0 ADD R0,R0,R4 \ 00000188 4D0000EF SWI +77 309 } \ 0000018C F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return \ ??away_timer_1: \ 00000190 ........ DC32 isAutoStatusOn \ 00000194 ........ DC32 IsOnNAStatus \ 00000198 ........ DC32 NAStatusTime \ 0000019C ........ 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 ;; icons + 6312 \ 00000008 50119FE5 LDR R1,??init_time_zone_1+0x8 ;; `?` \ 0000000C 00402DE9 PUSH {LR} \ 00000010 002092E5 LDR R2,[R2, #+0] \ 00000014 200052E3 CMP R2,#+32 \ 00000018 0080BD88 POPHI {PC} \ 0000001C 013F8FE2 ADR R3,??init_time_zone_0 \ 00000020 0230D3E7 LDRB R3,[R3, R2] \ 00000024 03F18FE0 ADD PC,PC,R3, LSL #+2 \ ??init_time_zone_0: \ 00000028 0C080B0E DC8 +12,+8,+11,+14 \ 0000002C 10121416 DC8 +16,+18,+20,+22 \ 00000030 181A1C1E DC8 +24,+26,+28,+30 \ 00000034 20222426 DC8 +32,+34,+36,+38 \ 00000038 282A2C2E DC8 +40,+42,+44,+46 \ 0000003C 30323436 DC8 +48,+50,+52,+54 \ 00000040 383A3C3E DC8 +56,+58,+60,+62 \ 00000044 40424446 DC8 +64,+66,+68,+70 \ 00000048 48000000 DC8 +72,+0,+0,+0 315 { 316 case 0: 317 sprintf(tim_zone, "GMT -12:00"); 318 break; 319 case 1: 320 sprintf(tim_zone, "GMT -11:00"); \ ??init_time_zone_2: \ 0000004C 0C1081E2 ADD R1,R1,#+12 \ 00000050 160000EF SWI +22 \ 00000054 0080BDE8 POP {PC} 321 break; 322 case 2: 323 sprintf(tim_zone, "GMT -10:00"); \ ??init_time_zone_3: \ 00000058 181081E2 ADD R1,R1,#+24 \ ??init_time_zone_4: \ 0000005C 160000EF SWI +22 \ 00000060 0080BDE8 POP {PC} 324 break; 325 case 3: 326 sprintf(tim_zone, "GMT -09:00"); \ ??init_time_zone_5: \ 00000064 241081E2 ADD R1,R1,#+36 \ 00000068 FBFFFFEA B ??init_time_zone_4 327 break; 328 case 4: 329 sprintf(tim_zone, "GMT -08:00"); \ ??init_time_zone_6: \ 0000006C 301081E2 ADD R1,R1,#+48 \ 00000070 F9FFFFEA B ??init_time_zone_4 330 break; 331 case 5: 332 sprintf(tim_zone, "GMT -07:00"); \ ??init_time_zone_7: \ 00000074 3C1081E2 ADD R1,R1,#+60 \ 00000078 F7FFFFEA B ??init_time_zone_4 333 break; 334 case 6: 335 sprintf(tim_zone, "GMT -06:00"); \ ??init_time_zone_8: \ 0000007C 481081E2 ADD R1,R1,#+72 \ 00000080 F5FFFFEA B ??init_time_zone_4 336 break; 337 case 7: 338 sprintf(tim_zone, "GMT -05:00"); \ ??init_time_zone_9: \ 00000084 541081E2 ADD R1,R1,#+84 \ 00000088 F3FFFFEA B ??init_time_zone_4 339 break; 340 case 8: 341 sprintf(tim_zone, "GMT -04:00"); \ ??init_time_zone_10: \ 0000008C 601081E2 ADD R1,R1,#+96 \ 00000090 F1FFFFEA B ??init_time_zone_4 342 break; 343 case 9: 344 sprintf(tim_zone, "GMT -03:30"); \ ??init_time_zone_11: \ 00000094 6C1081E2 ADD R1,R1,#+108 \ 00000098 EFFFFFEA B ??init_time_zone_4 345 break; 346 case 10: 347 sprintf(tim_zone, "GMT -03:00"); \ ??init_time_zone_12: \ 0000009C 781081E2 ADD R1,R1,#+120 \ 000000A0 EDFFFFEA B ??init_time_zone_4 348 break; 349 case 11: 350 sprintf(tim_zone, "GMT -02:00"); \ ??init_time_zone_13: \ 000000A4 841081E2 ADD R1,R1,#+132 \ 000000A8 EBFFFFEA B ??init_time_zone_4 351 break; 352 case 12: 353 sprintf(tim_zone, "GMT -01:00"); \ ??init_time_zone_14: \ 000000AC 901081E2 ADD R1,R1,#+144 \ 000000B0 E9FFFFEA B ??init_time_zone_4 354 break; 355 case 13: 356 sprintf(tim_zone, "GMT 00:00"); \ ??init_time_zone_15: \ 000000B4 9C1081E2 ADD R1,R1,#+156 \ 000000B8 E7FFFFEA B ??init_time_zone_4 357 break; 358 case 14: 359 sprintf(tim_zone, "GMT +01:00"); \ ??init_time_zone_16: \ 000000BC A81081E2 ADD R1,R1,#+168 \ 000000C0 E5FFFFEA B ??init_time_zone_4 360 break; 361 case 15: 362 sprintf(tim_zone, "GMT +02:00"); \ ??init_time_zone_17: \ 000000C4 B41081E2 ADD R1,R1,#+180 \ 000000C8 E3FFFFEA B ??init_time_zone_4 363 break; 364 case 16: 365 sprintf(tim_zone, "GMT +03:00"); \ ??init_time_zone_18: \ 000000CC C01081E2 ADD R1,R1,#+192 \ 000000D0 E1FFFFEA B ??init_time_zone_4 366 break; 367 case 17: 368 sprintf(tim_zone, "GMT +03:30"); \ ??init_time_zone_19: \ 000000D4 CC1081E2 ADD R1,R1,#+204 \ 000000D8 DFFFFFEA B ??init_time_zone_4 369 break; 370 case 18: 371 sprintf(tim_zone, "GMT +04:00"); \ ??init_time_zone_20: \ 000000DC D81081E2 ADD R1,R1,#+216 \ 000000E0 DDFFFFEA B ??init_time_zone_4 372 break; 373 case 19: 374 sprintf(tim_zone, "GMT +04:30"); \ ??init_time_zone_21: \ 000000E4 E41081E2 ADD R1,R1,#+228 \ 000000E8 DBFFFFEA B ??init_time_zone_4 375 break; 376 case 20: 377 sprintf(tim_zone, "GMT +05:00"); \ ??init_time_zone_22: \ 000000EC F01081E2 ADD R1,R1,#+240 \ 000000F0 D9FFFFEA B ??init_time_zone_4 378 break; 379 case 21: 380 sprintf(tim_zone, "GMT +05:30"); \ ??init_time_zone_23: \ 000000F4 FC1081E2 ADD R1,R1,#+252 \ 000000F8 D7FFFFEA B ??init_time_zone_4 381 break; 382 case 22: 383 sprintf(tim_zone, "GMT +05:45"); \ ??init_time_zone_24: \ 000000FC 421F81E2 ADD R1,R1,#+264 \ 00000100 D5FFFFEA B ??init_time_zone_4 384 break; 385 case 23: 386 sprintf(tim_zone, "GMT +06:00"); \ ??init_time_zone_25: \ 00000104 451F81E2 ADD R1,R1,#+276 \ 00000108 D3FFFFEA B ??init_time_zone_4 387 break; 388 case 24: 389 sprintf(tim_zone, "GMT +06:30"); \ ??init_time_zone_26: \ 0000010C 481F81E2 ADD R1,R1,#+288 \ 00000110 D1FFFFEA B ??init_time_zone_4 390 break; 391 case 25: 392 sprintf(tim_zone, "GMT +07:00"); \ ??init_time_zone_27: \ 00000114 4B1F81E2 ADD R1,R1,#+300 \ 00000118 CFFFFFEA B ??init_time_zone_4 393 break; 394 case 26: 395 sprintf(tim_zone, "GMT +08:00"); \ ??init_time_zone_28: \ 0000011C 4E1F81E2 ADD R1,R1,#+312 \ 00000120 CDFFFFEA B ??init_time_zone_4 396 break; 397 case 27: 398 sprintf(tim_zone, "GMT +09:00"); \ ??init_time_zone_29: \ 00000124 511F81E2 ADD R1,R1,#+324 \ 00000128 CBFFFFEA B ??init_time_zone_4 399 break; 400 case 28: 401 sprintf(tim_zone, "GMT +09:30"); \ ??init_time_zone_30: \ 0000012C 541F81E2 ADD R1,R1,#+336 \ 00000130 C9FFFFEA B ??init_time_zone_4 402 break; 403 case 29: 404 sprintf(tim_zone, "GMT +10:00"); \ ??init_time_zone_31: \ 00000134 571F81E2 ADD R1,R1,#+348 \ 00000138 C7FFFFEA B ??init_time_zone_4 405 break; 406 case 30: 407 sprintf(tim_zone, "GMT +11:00"); \ ??init_time_zone_32: \ 0000013C 5A1F81E2 ADD R1,R1,#+360 \ 00000140 C5FFFFEA B ??init_time_zone_4 408 break; 409 case 31: 410 sprintf(tim_zone, "GMT +12:00"); \ ??init_time_zone_33: \ 00000144 5D1F81E2 ADD R1,R1,#+372 \ 00000148 C3FFFFEA B ??init_time_zone_4 411 break; 412 case 32: 413 sprintf(tim_zone, "GMT +13:00"); \ ??init_time_zone_34: \ 0000014C 601F81E2 ADD R1,R1,#+384 \ 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 icons + 6312 \ 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,??DataTable33 ;; icons \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 B40000EF SWI +180 \ 00000018 EC039FE5 LDR R0,??AutoChangeStatus_timer_5 ;; status_1 \ 0000001C 0150A0E3 MOV R5,#+1 \ 00000020 000090E5 LDR R0,[R0, #+0] \ 00000024 000050E3 CMP R0,#+0 \ 00000028 2C00000A BEQ ??AutoChangeStatus_timer_6 \ 0000002C DC139FE5 LDR R1,??AutoChangeStatus_timer_5+0x4 ;; tm_status_1 \ 00000030 0020DDE5 LDRB R2,[SP, #+0] \ 00000034 0030D1E5 LDRB R3,[R1, #+0] \ 00000038 030052E1 CMP R2,R3 \ 0000003C 2700001A BNE ??AutoChangeStatus_timer_6 \ 00000040 0120DDE5 LDRB R2,[SP, #+1] \ 00000044 0110D1E5 LDRB R1,[R1, #+1] \ 00000048 010052E1 CMP R2,R1 \ 0000004C 2300001A BNE ??AutoChangeStatus_timer_6 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 180384E5 STR R0,[R4, #+792] 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 2C039FE5 LDR R0,??AutoChangeStatus_timer_5+0x8 ;; status_2 \ 000000E4 000090E5 LDR R0,[R0, #+0] \ 000000E8 000050E3 CMP R0,#+0 \ 000000EC 2C00000A BEQ ??AutoChangeStatus_timer_21 \ 000000F0 20139FE5 LDR R1,??AutoChangeStatus_timer_5+0xC ;; tm_status_2 \ 000000F4 0020DDE5 LDRB R2,[SP, #+0] \ 000000F8 0030D1E5 LDRB R3,[R1, #+0] \ 000000FC 030052E1 CMP R2,R3 \ 00000100 2700001A BNE ??AutoChangeStatus_timer_21 \ 00000104 0120DDE5 LDRB R2,[SP, #+1] \ 00000108 0110D1E5 LDRB R1,[R1, #+1] \ 0000010C 010052E1 CMP R2,R1 \ 00000110 2300001A BNE ??AutoChangeStatus_timer_21 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 180384E5 STR R0,[R4, #+792] 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 70029FE5 LDR R0,??AutoChangeStatus_timer_5+0x10 ;; status_3 \ 000001A8 000090E5 LDR R0,[R0, #+0] \ 000001AC 000050E3 CMP R0,#+0 \ 000001B0 2C00000A BEQ ??AutoChangeStatus_timer_36 \ 000001B4 64129FE5 LDR R1,??AutoChangeStatus_timer_5+0x14 ;; tm_status_3 \ 000001B8 0020DDE5 LDRB R2,[SP, #+0] \ 000001BC 0030D1E5 LDRB R3,[R1, #+0] \ 000001C0 030052E1 CMP R2,R3 \ 000001C4 2700001A BNE ??AutoChangeStatus_timer_36 \ 000001C8 0120DDE5 LDRB R2,[SP, #+1] \ 000001CC 0110D1E5 LDRB R1,[R1, #+1] \ 000001D0 010052E1 CMP R2,R1 \ 000001D4 2300001A BNE ??AutoChangeStatus_timer_36 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 180384E5 STR R0,[R4, #+792] 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 B4019FE5 LDR R0,??AutoChangeStatus_timer_5+0x18 ;; status_4 \ 0000026C 000090E5 LDR R0,[R0, #+0] \ 00000270 000050E3 CMP R0,#+0 \ 00000274 2C00000A BEQ ??AutoChangeStatus_timer_51 \ 00000278 A8119FE5 LDR R1,??AutoChangeStatus_timer_5+0x1C ;; tm_status_4 \ 0000027C 0020DDE5 LDRB R2,[SP, #+0] \ 00000280 0030D1E5 LDRB R3,[R1, #+0] \ 00000284 030052E1 CMP R2,R3 \ 00000288 2700001A BNE ??AutoChangeStatus_timer_51 \ 0000028C 0120DDE5 LDRB R2,[SP, #+1] \ 00000290 0110D1E5 LDRB R1,[R1, #+1] \ 00000294 010052E1 CMP R2,R1 \ 00000298 2300001A BNE ??AutoChangeStatus_timer_51 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 180384E5 STR R0,[R4, #+792] 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 F8009FE5 LDR R0,??AutoChangeStatus_timer_5+0x20 ;; status_5 \ 00000330 000090E5 LDR R0,[R0, #+0] \ 00000334 000050E3 CMP R0,#+0 \ 00000338 2A00000A BEQ ??AutoChangeStatus_timer_66 \ 0000033C EC109FE5 LDR R1,??AutoChangeStatus_timer_5+0x24 ;; tm_status_5 \ 00000340 0020DDE5 LDRB R2,[SP, #+0] \ 00000344 0030D1E5 LDRB R3,[R1, #+0] \ 00000348 030052E1 CMP R2,R3 \ 0000034C 2500001A BNE ??AutoChangeStatus_timer_66 \ 00000350 0120DDE5 LDRB R2,[SP, #+1] \ 00000354 0110D1E5 LDRB R1,[R1, #+1] \ 00000358 010052E1 CMP R2,R1 \ 0000035C 2100001A BNE ??AutoChangeStatus_timer_66 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 185384E5 STR R5,[R4, #+792] 488 set_my_status(); \ 000003E4 ........ BL set_my_status 489 } 490 #ifdef ELKA 491 SetIconBarHandler(); \ ??AutoChangeStatus_timer_66: \ 000003E8 ........ LDR R0,??DataTable11 ;; addIconBar 492 #endif 493 494 GBS_StartTimerProc(&autoChangeStatus, 216*10, AutoChangeStatus_timer); \ 000003EC 40209FE5 LDR R2,??AutoChangeStatus_timer_5+0x28 ;; AutoChangeStatus_timer \ 000003F0 280184E5 STR R0,[R4, #+296] \ 000003F4 871EA0E3 MOV R1,#+2160 \ 000003F8 C800A0E3 MOV R0,#+200 \ 000003FC 600D80E3 ORR R0,R0,#0x1800 \ 00000400 040080E0 ADD R0,R0,R4 \ 00000404 4D0000EF SWI +77 495 } \ 00000408 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??AutoChangeStatus_timer_5: \ 0000040C ........ DC32 status_1 \ 00000410 ........ DC32 tm_status_1 \ 00000414 ........ DC32 status_2 \ 00000418 ........ DC32 tm_status_2 \ 0000041C ........ DC32 status_3 \ 00000420 ........ DC32 tm_status_3 \ 00000424 ........ DC32 status_4 \ 00000428 ........ DC32 tm_status_4 \ 0000042C ........ DC32 status_5 \ 00000430 ........ DC32 tm_status_5 \ 00000434 ........ DC32 AutoChangeStatus_timer 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 R1,??DataTable26 ;; spaco1 \ 00000004 ........ LDR R0,??DataTable33 ;; icons \ 00000008 00402DE9 PUSH {LR} \ 0000000C 001091E5 LDR R1,[R1, #+0] \ 00000010 592D80E2 ADD R2,R0,#+5696 \ 00000014 02002DE9 PUSH {R1} \ 00000018 ........ LDR R1,??DataTable27 ;; fonto \ 0000001C 001091E5 LDR R1,[R1, #+0] \ 00000020 02002DE9 PUSH {R1} \ 00000024 CC3290E5 LDR R3,[R0, #+716] \ 00000028 10009FE5 LDR R0,??DrawPing_0 ;; Ping_Y \ 0000002C 001090E5 LDR R1,[R0, #+0] \ 00000030 0C009FE5 LDR R0,??DrawPing_0+0x4 ;; Ping_X \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 ........ _BLF PrintField,??PrintField??rA 502 } \ 0000003C 0380BDE8 POP {R0,R1,PC} ;; return \ ??DrawPing_0: \ 00000040 ........ DC32 Ping_Y \ 00000044 ........ 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,??DataTable33 ;; icons \ 00000008 A00394E5 LDR R0,[R4, #+928] \ 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 6C0384E5 STR R0,[R4, #+876] 520 start_vibra2(); \ 00000020 ........ BL start_vibra2 521 GBS_StartTimerProc(&remind_tmr, 6480, Remind_Timer2); \ 00000024 ........ LDR R2,??DataTable17 ;; Remind_Timer2 \ 00000028 5010A0E3 MOV R1,#+80 \ 0000002C 641D81E3 ORR R1,R1,#0x1900 \ 00000030 780041E2 SUB R0,R1,#+120 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 4D0000EF SWI +77 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,??DataTable17 ;; Remind_Timer2 \ 00000004 10009FE5 LDR R0,??Reminder_timer_0 ;; icons + 6360 \ 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 icons + 6360 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,??DataTable33 ;; icons \ 00000004 481390E5 LDR R1,[R0, #+840] 540 if(uptimeSec==60) \ 00000008 442390E5 LDR R2,[R0, #+836] \ 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 481380E5 STR R1,[R0, #+840] 544 } 545 if(uptimeMin==60) \ 00000020 3C0052E3 CMP R2,#+60 \ 00000024 0300001A BNE ??UptimeMinHour_0 546 { 547 uptimeMin=0; 548 uptimeHour++; \ 00000028 401390E5 LDR R1,[R0, #+832] \ 0000002C 0020A0E3 MOV R2,#+0 \ 00000030 011081E2 ADD R1,R1,#+1 \ 00000034 401380E5 STR R1,[R0, #+832] \ ??UptimeMinHour_0: \ 00000038 442380E5 STR R2,[R0, #+836] 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,??DataTable33 ;; icons \ 00000008 80609FE5 LDR R6,??upTime_0 ;; upTime \ 0000000C E800A0E3 MOV R0,#+232 \ 00000010 600D80E3 ORR R0,R0,#0x1800 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 7C0394E5 LDR R0,[R4, #+892] \ 0000001C 0070A0E3 MOV R7,#+0 \ 00000020 030050E3 CMP R0,#+3 \ 00000024 0E00001A BNE ??upTime_1 561 { 562 UptimeMinHour(); \ 00000028 ........ BL UptimeMinHour 563 #ifdef NEWSGOLD 564 if (tracktimer>=10)/*&&(_GetPlayStatus()!=1))*/ \ 0000002C 4C0394E5 LDR R0,[R4, #+844] \ 00000030 0A0050E3 CMP R0,#+10 \ 00000034 060000BA BLT ??upTime_2 565 { 566 GBS_StartTimerProc(&tracktmr, 216*5, GetTags); \ 00000038 ........ LDR R2,??DataTable20 ;; GetTags \ 0000003C 3810A0E3 MOV R1,#+56 \ 00000040 401E81E3 ORR R1,R1,#0x400 \ 00000044 530D81E2 ADD R0,R1,#+5312 \ 00000048 040080E0 ADD R0,R0,R4 \ 0000004C 4D0000EF SWI +77 567 tracktimer=0; \ 00000050 4C7384E5 STR R7,[R4, #+844] 568 } 569 tracktimer++; \ ??upTime_2: \ 00000054 4C0394E5 LDR R0,[R4, #+844] \ 00000058 010080E2 ADD R0,R0,#+1 \ 0000005C 4C0384E5 STR R0,[R4, #+844] 570 #endif 571 GBS_StartTimerProc(&uptime_tmr, 216, upTime); \ 00000060 050000EA B ??upTime_3 572 } 573 else 574 { 575 if(!Pause_Time) \ ??upTime_1: \ 00000064 28009FE5 LDR R0,??upTime_0+0x4 ;; Pause_Time \ 00000068 000090E5 LDR R0,[R0, #+0] \ 0000006C 000050E3 CMP R0,#+0 576 { 577 uptimeHour=0; \ 00000070 40738405 STREQ R7,[R4, #+832] 578 uptimeMin=0; \ 00000074 44738405 STREQ R7,[R4, #+836] 579 uptimeSec=0; \ 00000078 48738405 STREQ R7,[R4, #+840] 580 } 581 GBS_StartTimerProc(&uptime_tmr, 216, upTime); \ ??upTime_3: \ 0000007C 0620A0E1 MOV R2,R6 \ 00000080 D810A0E3 MOV R1,#+216 \ 00000084 0500A0E1 MOV R0,R5 \ 00000088 4D0000EF SWI +77 582 } 583 } \ 0000008C F080BDE8 POP {R4-R7,PC} ;; return \ ??upTime_0: \ 00000090 ........ DC32 upTime \ 00000094 ........ 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 80109FE5 LDR R1,??DrawOnlineTime_0 ;; `?` \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 ........ LDR R4,??DataTable33 ;; icons \ 0000000C 0800A0E3 MOV R0,#+8 \ 00000010 640D80E3 ORR R0,R0,#0x1900 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 7C0394E5 LDR R0,[R4, #+892] \ 0000001C 030050E3 CMP R0,#+3 \ 00000020 0700001A BNE ??DrawOnlineTime_1 589 { 590 sprintf(onlineTime,"Online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); \ 00000024 480394E5 LDR R0,[R4, #+840] \ 00000028 01002DE9 PUSH {R0} \ 0000002C 443394E5 LDR R3,[R4, #+836] \ 00000030 402394E5 LDR R2,[R4, #+832] \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 160000EF SWI +22 \ 0000003C 04D08DE2 ADD SP,SP,#+4 \ 00000040 020000EA B ??DrawOnlineTime_2 591 } 592 else 593 sprintf(onlineTime,"Offline"); \ ??DrawOnlineTime_1: \ 00000044 181081E2 ADD R1,R1,#+24 \ 00000048 0500A0E1 MOV R0,R5 \ 0000004C 160000EF SWI +22 594 PrintField(onlineTime_x,onlineTime_y, onlineTime, align, fonto, spaco1); \ ??DrawOnlineTime_2: \ 00000050 ........ LDR R0,??DataTable26 ;; spaco1 \ 00000054 0520A0E1 MOV R2,R5 \ 00000058 000090E5 LDR R0,[R0, #+0] \ 0000005C 01002DE9 PUSH {R0} \ 00000060 ........ LDR R0,??DataTable27 ;; fonto \ 00000064 000090E5 LDR R0,[R0, #+0] \ 00000068 01002DE9 PUSH {R0} \ 0000006C CC3294E5 LDR R3,[R4, #+716] \ 00000070 14009FE5 LDR R0,??DrawOnlineTime_0+0x4 ;; onlineTime_y \ 00000074 001090E5 LDR R1,[R0, #+0] \ 00000078 10009FE5 LDR R0,??DrawOnlineTime_0+0x8 ;; onlineTime_x \ 0000007C 000090E5 LDR R0,[R0, #+0] \ 00000080 ........ _BLF PrintField,??PrintField??rA 595 } \ 00000084 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??DrawOnlineTime_0: \ 00000088 ........ DC32 `?` \ 0000008C ........ DC32 onlineTime_y \ 00000090 ........ DC32 onlineTime_x 596 597 598 //---------------------- Вывод времени на идле ---------------------// 599 600 \ In segment CODE, align 4, keep-with-next 601 void DrawAutoMSG(void *canv) 602 { \ DrawAutoMSG: \ 00000000 10402DE9 PUSH {R4,LR} 603 char awayTime[64]; 604 if(away_m && showAwayIdle) \ 00000004 ........ LDR R4,??DataTable33 ;; icons \ 00000008 40D04DE2 SUB SP,SP,#+64 \ 0000000C 2C0394E5 LDR R0,[R4, #+812] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 1700000A BEQ ??DrawAutoMSG_0 \ 00000018 ........ LDR R0,??DataTable25 ;; showAwayIdle \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 1300000A BEQ ??DrawAutoMSG_0 605 { 606 sprintf(awayTime,"Away from [%s]",away_msg_time_dace); \ 00000028 50109FE5 LDR R1,??DrawAutoMSG_1 ;; `?` \ 0000002C 9800A0E3 MOV R0,#+152 \ 00000030 600D80E3 ORR R0,R0,#0x1800 \ 00000034 042080E0 ADD R2,R0,R4 \ 00000038 0D00A0E1 MOV R0,SP \ 0000003C 160000EF SWI +22 607 PrintField(auto_x,auto_y, awayTime, align, fonto, spaco1); \ 00000040 ........ LDR R0,??DataTable26 ;; spaco1 \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 01002DE9 PUSH {R0} \ 0000004C ........ LDR R0,??DataTable27 ;; fonto \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 01002DE9 PUSH {R0} \ 00000058 CC3294E5 LDR R3,[R4, #+716] \ 0000005C 20009FE5 LDR R0,??DrawAutoMSG_1+0x4 ;; auto_y \ 00000060 08208DE2 ADD R2,SP,#+8 \ 00000064 001090E5 LDR R1,[R0, #+0] \ 00000068 18009FE5 LDR R0,??DrawAutoMSG_1+0x8 ;; auto_x \ 0000006C 000090E5 LDR R0,[R0, #+0] \ 00000070 ........ _BLF PrintField,??PrintField??rA \ 00000074 08D08DE2 ADD SP,SP,#+8 608 } 609 } \ ??DrawAutoMSG_0: \ 00000078 40D08DE2 ADD SP,SP,#+64 ;; stack cleaning \ 0000007C 1080BDE8 POP {R4,PC} ;; return \ ??DrawAutoMSG_1: \ 00000080 ........ DC32 `?` \ 00000084 ........ DC32 auto_y \ 00000088 ........ DC32 auto_x 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 F0432DE9 PUSH {R4-R9,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 621 WSHDR *ws; 622 if (msg->keys==0x0FFF || msg->keys==VOL_DOWN_BUTTON) \ 00000008 ........ LDR R4,??DataTable33 ;; icons \ 0000000C 0160A0E1 MOV R6,R1 \ 00000010 F210D6E1 LDRSH R1,[R6, #+2] \ 00000014 0050A0E3 MOV R5,#+0 \ 00000018 FF20A0E3 MOV R2,#+255 \ 0000001C F02E82E3 ORR R2,R2,#0xF00 \ 00000020 020051E1 CMP R1,R2 \ 00000024 0E005113 CMPNE R1,#+14 \ 00000028 2200001A BNE ??input_awaymsg_onkey_0 623 { 624 EDITCONTROL ec; 625 ExtractEditControl(data,2,&ec); 626 ws=ec.pWS; 627 zeromem(awayMsg,256); \ 0000002C ........ LDR R8,??DataTable31 ;; awayMsg \ 00000030 0D20A0E1 MOV R2,SP \ 00000034 0210A0E3 MOV R1,#+2 \ 00000038 690100EF SWI +361 \ 0000003C 28709DE5 LDR R7,[SP, #+40] \ 00000040 401FA0E3 MOV R1,#+256 \ 00000044 0800A0E1 MOV R0,R8 \ 00000048 1D0100EF SWI +285 628 int i=0; 629 for(i=0;iwsbody[0];i++) \ 0000004C 000097E5 LDR R0,[R7, #+0] \ 00000050 0090A0E3 MOV R9,#+0 \ 00000054 B000D0E1 LDRH R0,[R0, #+0] \ 00000058 000050E3 CMP R0,#+0 \ 0000005C 0500001A BNE ??input_awaymsg_onkey_1 \ 00000060 080000EA B ??input_awaymsg_onkey_2 630 awayMsg[i]=char16to8(ws->wsbody[i+1]); \ ??input_awaymsg_onkey_3: \ 00000064 890080E0 ADD R0,R0,R9, LSL #+1 \ 00000068 B200D0E1 LDRH R0,[R0, #+2] \ 0000006C ........ _BLF char16to8,??char16to8??rA \ 00000070 0800C9E7 STRB R0,[R9, +R8] \ 00000074 019089E2 ADD R9,R9,#+1 \ ??input_awaymsg_onkey_1: \ 00000078 000097E5 LDR R0,[R7, #+0] \ 0000007C B010D0E1 LDRH R1,[R0, #+0] \ 00000080 010059E1 CMP R9,R1 \ 00000084 F6FFFFBA BLT ??input_awaymsg_onkey_3 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: \ 00000088 ........ LDR R0,??DataTable30 ;; AUTO_ENGADE \ 0000008C 0850C9E7 STRB R5,[R9, +R8] \ 00000090 000090E5 LDR R0,[R0, #+0] \ 00000094 0C10A0E3 MOV R1,#+12 \ 00000098 910000E0 MUL R0,R1,R0 \ 0000009C 280384E5 STR R0,[R4, #+808] 646 away_m=1; \ 000000A0 0100A0E3 MOV R0,#+1 \ 000000A4 2C0384E5 STR R0,[R4, #+812] 647 away_timer(); \ 000000A8 ........ BL away_timer 648 UpdateCLheader(); 649 GeneralFunc_flag1(input_awaymsg_id,1); \ 000000AC 500394E5 LDR R0,[R4, #+848] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 3D0100EF SWI +317 650 // GeneralFuncF1(1); 651 } 652 653 if(msg->keys==LEFT_SOFT || msg->keys==RED_BUTTON) \ ??input_awaymsg_onkey_0: \ 000000B8 F200D6E1 LDRSH R0,[R6, #+2] \ 000000BC 010050E3 CMP R0,#+1 \ 000000C0 0C005013 CMPNE R0,#+12 \ 000000C4 0800001A BNE ??input_awaymsg_onkey_4 654 { 655 msg_away_timer=0; 656 away_m=0; 657 if(change_back_status) \ 000000C8 340394E5 LDR R0,[R4, #+820] \ 000000CC 285384E5 STR R5,[R4, #+808] \ 000000D0 2C5384E5 STR R5,[R4, #+812] \ 000000D4 000050E3 CMP R0,#+0 \ 000000D8 0400000A BEQ ??input_awaymsg_onkey_5 658 { 659 CurrentStatus=status_rem; \ 000000DC 300394E5 LDR R0,[R4, #+816] \ 000000E0 180384E5 STR R0,[R4, #+792] 660 set_my_status(); \ 000000E4 ........ BL set_my_status 661 change_back_status=0; \ 000000E8 345384E5 STR R5,[R4, #+820] 662 } 663 UpdateCLheader(); 664 } 665 return(0); \ ??input_awaymsg_onkey_4: \ 000000EC 0000A0E3 MOV R0,#+0 \ ??input_awaymsg_onkey_5: \ 000000F0 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000F4 F083BDE8 POP {R4-R9,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,??DataTable31 ;; 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 190080E2 ADD R0,R0,#+25 \ 000000DC BA01C5E1 STRH R0,[R5, #+26] \ 000000E0 888100EF SWI +33160 \ 000000E4 010040E2 SUB R0,R0,#+1 \ 000000E8 BC01C5E1 STRH R0,[R5, #+28] \ 000000EC 898100EF SWI +33161 \ 000000F0 0060A0E1 MOV R6,R0 \ 000000F4 8B8100EF SWI +33163 \ 000000F8 000046E0 SUB R0,R6,R0 \ 000000FC 010040E2 SUB R0,R0,#+1 \ 00000100 BE01C5E1 STRH R0,[R5, #+30] 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 ;; icons + 848 \ 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 icons + 848 748 749 750 //////////////////////////uptime////////////////////////// 751 #ifdef ELKA 752 GBSTMR sli_tmr; \ In segment CODE, align 4, keep-with-next 753 void SLI_On() 754 { \ SLI_On: \ 00000000 10402DE9 PUSH {R4,LR} 755 if(Is_SLI_On) \ 00000004 ........ LDR R4,??DataTable33 ;; icons \ 00000008 E80294E5 LDR R0,[R4, #+744] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0100000A BEQ ??SLI_On_0 756 SLI_SetState(1); \ 00000014 0100A0E3 MOV R0,#+1 \ 00000018 360000EF SWI +54 757 GBS_StartTimerProc(&sli_tmr, IN_TICKS(2) / 20, SLI_Off); \ ??SLI_On_0: \ 0000001C 14209FE5 LDR R2,??SLI_On_1 ;; SLI_Off \ 00000020 1510A0E3 MOV R1,#+21 \ 00000024 8800A0E3 MOV R0,#+136 \ 00000028 640D80E3 ORR R0,R0,#0x1900 \ 0000002C 040080E0 ADD R0,R0,R4 \ 00000030 4D0000EF SWI +77 758 } \ 00000034 1080BDE8 POP {R4,PC} ;; return \ ??SLI_On_1: \ 00000038 ........ DC32 SLI_Off 759 \ In segment CODE, align 4, keep-with-next 760 void SLI_Off() 761 { \ SLI_Off: \ 00000000 00402DE9 PUSH {LR} 762 SLI_SetState(2); \ 00000004 0200A0E3 MOV R0,#+2 \ 00000008 360000EF SWI +54 763 if(total_unread) \ 0000000C ........ LDR R0,??DataTable33 ;; icons \ 00000010 A01390E5 LDR R1,[R0, #+928] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0600000A BEQ ??SLI_Off_0 764 GBS_StartTimerProc(&sli_tmr, IN_TICKS(2) / 20, SLI_On); //26*SLI_time2 \ 0000001C 20209FE5 LDR R2,??SLI_Off_1 ;; SLI_On \ 00000020 1510A0E3 MOV R1,#+21 \ 00000024 8830A0E3 MOV R3,#+136 \ 00000028 643D83E3 ORR R3,R3,#0x1900 \ 0000002C 000083E0 ADD R0,R3,R0 \ 00000030 4D0000EF SWI +77 \ 00000034 0080BDE8 POP {PC} 765 else 766 SLI_SetState(0); \ ??SLI_Off_0: \ 00000038 0000A0E3 MOV R0,#+0 \ 0000003C 360000EF SWI +54 767 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??SLI_Off_1: \ 00000044 ........ DC32 SLI_On 768 \ In segment CODE, align 4, keep-with-next 769 void SLI_check() 770 { 771 if (total_unread) \ SLI_check: \ 00000000 14009FE5 LDR R0,??SLI_check_0 ;; icons + 928 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0080BD08 POPEQ {PC} 772 SLI_On(); \ 00000014 ........ BL SLI_On 773 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??SLI_check_0: \ 0000001C ........ DC32 icons + 928 774 \ In segment CODE, align 4, keep-with-next 775 void SLI_Timer() 776 { 777 GBS_StartTimerProc(&sli_tmr, 262, SLI_check); //262*SLI_time \ SLI_Timer: \ 00000000 14209FE5 LDR R2,??SLI_Timer_0 ;; SLI_check \ 00000004 14009FE5 LDR R0,??SLI_Timer_0+0x4 ;; icons + 6536 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 0610A0E3 MOV R1,#+6 \ 00000010 401F81E3 ORR R1,R1,#0x100 \ 00000014 4D0000EF SWI +77 778 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??SLI_Timer_0: \ 0000001C ........ DC32 SLI_check \ 00000020 ........ DC32 icons + 6536 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 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: \ 00000008 ........ LDR R0,??DataTable61 ;; icons \ 0000000C 045180E0 ADD R5,R0,R4, LSL #+2 \ 00000010 700095E5 LDR R0,[R5, #+112] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0500001A BNE ??setup_ICONS_1 \ 0000001C ........ LDR R0,??DataTable37 ;; icons_names \ 00000020 5C10A0E3 MOV R1,#+92 \ 00000024 042190E7 LDR R2,[R0, +R4, LSL #+2] \ 00000028 14009FE5 LDR R0,??setup_ICONS_2 ;; ICON_PATH \ 0000002C ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 00000030 700085E5 STR R0,[R5, #+112] 787 i++; \ ??setup_ICONS_1: \ 00000034 014084E2 ADD R4,R4,#+1 788 } 789 while(ibitmap); \ ??FreeStatusToIMGHDR_0: \ 0000000C 040195E7 LDR R0,[R5, +R4, LSL #+2] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 0100000A BEQ ??FreeStatusToIMGHDR_1 \ 00000018 080090E5 LDR R0,[R0, #+8] \ 0000001C 150000EF SWI +21 815 i++; \ ??FreeStatusToIMGHDR_1: \ 00000020 014084E2 ADD R4,R4,#+1 816 } 817 while(i>2,stop_vibra); \ 0000004C 3610A0E3 MOV R1,#+54 \ 00000050 000000EA B ??start_vibra_2 1095 else 1096 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra); \ ??start_vibra_1: \ 00000054 6C10A0E3 MOV R1,#+108 \ ??start_vibra_2: \ 00000058 4D0000EF SWI +77 1097 } 1098 } \ 0000005C 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra_0: \ 00000060 ........ DC32 stop_vibra 1099 \ In segment CODE, align 4, keep-with-next 1100 void stop_vibra(void) 1101 { \ stop_vibra: \ 00000000 00402DE9 PUSH {LR} 1102 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1103 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable61 ;; icons \ 00000010 6C1390E5 LDR R1,[R0, #+876] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 6C1380E5 STR R1,[R0, #+876] \ 0000001C 0080BD08 POPEQ {PC} 1104 { 1105 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra_0 ;; start_vibra \ 00000024 A810A0E3 MOV R1,#+168 \ 00000028 681D81E3 ORR R1,R1,#0x1A00 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable56 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra_1 1106 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra_2 1107 else 1108 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra); \ ??stop_vibra_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra_2: \ 0000004C 4D0000EF SWI +77 1109 } 1110 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra_0: \ 00000054 ........ DC32 start_vibra 1111 \ In segment CODE, align 4, keep-with-next 1112 void start_vibra2(void) 1113 { 1114 void stop_vibra2(void); 1115 1116 SetVibration(vibraPower); \ start_vibra2: \ 00000000 ........ LDR R0,??DataTable53 ;; vibraPower \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 7C0000EF SWI +124 1117 if(VIBR_TYPE) \ 00000010 ........ LDR R1,??DataTable56 ;; VIBR_TYPE \ 00000014 18009FE5 LDR R0,??start_vibra2_0 ;; icons + 6824 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 14209FE5 LDR R2,??start_vibra2_0+0x4 ;; stop_vibra2 \ 00000020 000051E3 CMP R1,#+0 1118 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>2,stop_vibra2); \ 00000024 3610A013 MOVNE R1,#+54 1119 else 1120 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra2); \ 00000028 6C10A003 MOVEQ R1,#+108 \ 0000002C 4D0000EF SWI +77 1121 } \ 00000030 0080BDE8 POP {PC} ;; return \ ??start_vibra2_0: \ 00000034 ........ DC32 icons + 6824 \ 00000038 ........ DC32 stop_vibra2 1122 \ In segment CODE, align 4, keep-with-next 1123 void stop_vibra2(void) 1124 { \ stop_vibra2: \ 00000000 00402DE9 PUSH {LR} 1125 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1126 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable61 ;; icons \ 00000010 6C1390E5 LDR R1,[R0, #+876] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 6C1380E5 STR R1,[R0, #+876] \ 0000001C 0080BD08 POPEQ {PC} 1127 { 1128 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra2_0 ;; start_vibra2 \ 00000024 A810A0E3 MOV R1,#+168 \ 00000028 681D81E3 ORR R1,R1,#0x1A00 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable56 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra2_1 1129 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra2); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra2_2 1130 else 1131 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra2); \ ??stop_vibra2_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra2_2: \ 0000004C 4D0000EF SWI +77 1132 } 1133 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra2_0: \ 00000054 ........ DC32 start_vibra2 1134 \ In segment CODE, align 4, keep-with-next 1135 void ChangeVibra(void) 1136 { 1137 if (!(Is_Vibra_Enabled=!(Is_Vibra_Enabled))) \ ChangeVibra: \ 00000000 ........ LDR R0,??DataTable61 ;; icons \ 00000004 00402DE9 PUSH {LR} \ 00000008 101390E5 LDR R1,[R0, #+784] \ 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,??DataTable63 ;; 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 1179 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 1180 if ((fsize=stat.size)<=0) goto L1; \ 00000060 08709DE5 LDR R7,[SP, #+8] \ 00000064 010057E3 CMP R7,#+1 \ 00000068 070000BA BLT ??LoadTemplates_1 1181 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 1182 { 1183 L1: 1184 strcpy(fn+i,"\\0.txt"); \ ??LoadTemplates_1: \ 0000008C 081086E2 ADD R1,R6,#+8 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 1A0000EF SWI +26 1185 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 1186 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 1187 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 1188 } 1189 if (f==-1) return 0; \ ??LoadTemplates_2: \ 000000E0 040058E1 CMP R8,R4 \ 000000E4 F1FFFF0A BEQ ??LoadTemplates_4 1190 p=templates_chars=malloc(fsize+1); \ 000000E8 ........ LDR R4,??DataTable61 ;; icons \ 000000EC 010087E2 ADD R0,R7,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 700384E5 STR R0,[R4, #+880] \ 000000F8 0060A0E1 MOV R6,R0 1191 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] 1192 fclose(f,&ul); \ 00000118 0D10A0E1 MOV R1,SP \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 0D0000EF SWI +13 1193 i=0; \ 00000124 0070A0E3 MOV R7,#+0 1194 pp=p; \ 00000128 0680A0E1 MOV R8,R6 \ 0000012C 020000EA B ??LoadTemplates_6 1195 for(;;) 1196 { 1197 c=*p; 1198 if (c<32) 1199 { 1200 if (pp&&(pp!=p)) 1201 { 1202 templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 1203 templates_lines[i++]=pp; 1204 } 1205 pp=NULL; 1206 if (!c) break; 1207 *p=0; 1208 } 1209 else 1210 { 1211 if (pp==NULL) pp=p; \ ??LoadTemplates_7: \ 00000130 000058E3 CMP R8,#+0 \ 00000134 0680A001 MOVEQ R8,R6 1212 } 1213 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 740394E5 LDR R0,[R4, #+884] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 740384E5 STR R0,[R4, #+884] \ 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 1214 } 1215 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 `?` 1216 } 1217 1218 1219 1220 //---------------------- AUTOBOT MESSAGE -------------------------// 1221 1222 1223 #ifdef kluchnik 1224 char *bot_chars; //Собственно файл 1225 char **bot_lines; //Массив указателей на строки 1226 1227 void FreeBotMessage(void) 1228 { 1229 if (bot_lines) mfree(bot_lines); 1230 if (bot_chars) mfree(bot_chars); 1231 bot_lines=NULL; 1232 bot_chars=NULL; 1233 } 1234 1235 int LoadBotMessage(unsigned int uin) 1236 { 1237 FSTATS stat; 1238 char fn[256]; 1239 int f; 1240 unsigned int ul; 1241 int i; 1242 int fsize; 1243 char *p; 1244 char *pp; 1245 int c; 1246 FreeBotMessage(); 1247 strcpy(fn,TEMPLATES_PATH); 1248 i=strlen(fn); 1249 sprintf(fn+i,"\\bot_%d.txt",uin); 1250 if (GetFileStats(fn,&stat,&ul)==-1) goto L1; 1251 if ((fsize=stat.size)<=0) goto L1; 1252 if ((f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul))==-1) 1253 { 1254 L1: 1255 strcpy(fn+i,"\\bot.txt"); 1256 if (GetFileStats(fn,&stat,&ul)==-1) return 0; 1257 if ((fsize=stat.size)<=0) return 0; 1258 f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul); 1259 } 1260 if (f==-1) return 0; 1261 p=bot_chars=malloc(fsize+1); 1262 p[fread(f,p,fsize,&ul)]=0; 1263 fclose(f,&ul); 1264 i=0; 1265 pp=p; 1266 for(;;) 1267 { 1268 c=*p; 1269 if (c<32) 1270 { 1271 if (pp&&(pp!=p)) 1272 { 1273 bot_lines=realloc(bot_lines,(i+1)*sizeof(char *)); 1274 bot_lines[i++]=pp; 1275 } 1276 pp=NULL; 1277 if (!c) break; 1278 *p=0; 1279 } 1280 else 1281 { 1282 if (pp==NULL) pp=p; 1283 } 1284 p++; 1285 } 1286 return i; 1287 } 1288 #endif 1289 1290 //=================================================================== 1291 1292 int RXstate=EOP; //-sizeof(RXpkt)..-1 - receive header, 0..RXpkt.data_len - receive data 1293 \ In segment DATA_Z, align 4, align-sorted 1294 TPKT RXbuf; \ RXbuf: \ 00000000 DS8 16392 \ In segment DATA_Z, align 4, align-sorted 1295 TPKT TXbuf; \ TXbuf: \ 00000000 DS8 16392 1296 1297 int connect_state=0; 1298 1299 int sock=-1; 1300 1301 volatile unsigned long TOTALRECEIVED; 1302 volatile unsigned long TOTALSENDED; 1303 volatile unsigned long ALLTOTALRECEIVED; //by BoBa 10.07 1304 volatile unsigned long ALLTOTALSENDED; 1305 1306 volatile int sendq_l=0; //Длинна очереди для send 1307 volatile void *sendq_p=NULL; //указатель очереди 1308 1309 volatile int is_gprs_online=1; 1310 1311 GBSTMR reconnect_tmr; 1312 1313 extern void kill_data(void *p,void (*func_p)(void *)); 1314 \ In segment CODE, align 4, keep-with-next 1315 void ElfKiller(void) 1316 { \ ElfKiller: \ 00000000 00402DE9 PUSH {LR} 1317 extern void *ELF_BEGIN; 1318 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 1319 } 1320 1321 int total_unread; 1322 1323 volatile CLIST *cltop; 1324 1325 volatile unsigned int GROUP_CACHE; //Текущая группа для добавления 1326 1327 volatile int contactlist_menu_id; 1328 1329 GBSTMR tmr_active; 1330 1331 volatile int edchat_id; 1332 1333 //Применяется для добавления сообщений 1334 //CLIST *edcontact; 1335 //void *edgui_data; 1336 1337 //static int prev_clmenu_itemcount; 1338 \ In segment DATA_Z, align 4, align-sorted 1339 char clm_hdr_text[64]; \ clm_hdr_text: \ 00000000 DS8 64 1340 //static const char def_clm_hdr_text[] = LG_CLTITLE; 1341 static const char key_clm_hdr_text[] = LG_CLT9INP; 1342 #ifdef kluchnik 1343 int ICON_HD; 1344 //static const HEADER_DESC contactlist_menuhdr = {0, 0, 0, 0, S_ICONS+IS_NULLICON, (int)clm_hdr_text, LGP_NULL}; 1345 #else 1346 static const HEADER_DESC contactlist_menuhdr = {0, 0, 0, 0, S_ICONS+ICON_HEAD, (int)clm_hdr_text, LGP_NULL}; ^ Warning[Pe177]: variable "contactlist_menuhdr" was declared but never referenced 1347 #endif 1348 1349 static const int menusoftkeys[] = {0,1,2}; 1350 static const SOFTKEY_DESC menu_sk[] = 1351 { 1352 {0x0018, 0x0000, (int)LG_SELECT}, 1353 {0x0001, 0x0000, (int)LG_CLOSE}, 1354 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 1355 }; 1356 1357 char clmenu_sk_r[16]; 1358 static const char def_clmenu_sk_r[] = LG_CLOSE; 1359 static const char key_clmenu_sk_r[] = LG_CLEAR; 1360 1361 /*static const SOFTKEY_DESC clmenu_sk[]= 1362 { 1363 {0x0018, 0x0000, (int)LG_OPTIONS}, 1364 {0x0001, 0x0000, (int)clmenu_sk_r}, 1365 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 1366 }; 1367 */ 1368 const SOFTKEYSTAB menu_skt = 1369 { 1370 menu_sk, 0 1371 }; 1372 1373 /*static const SOFTKEYSTAB clmenu_skt = 1374 { 1375 clmenu_sk, 0 1376 };*/ 1377 1378 void contactlist_menu_ghook(void *data, int cmd); 1379 int contactlist_menu_onkey(void *data, GUI_MSG *msg); 1380 void contactlist_menu_iconhndl(void *data, int curitem, void *unk); 1381 1382 #ifdef USE_MLMENU 1383 static const ML_MENU_DESC contactlist_menu= 1384 { 1385 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 1386 menusoftkeys, 1387 &clmenu_skt, 1388 0x11, //+0x400 1389 contactlist_menu_iconhndl, 1390 NULL, //Items 1391 NULL, //Procs 1392 0, //n 1393 1 //Добавочных строк 1394 }; 1395 #endif 1396 1397 //GBSTMR tmr_ping; 1398 int tenseconds_to_ping; 1399 \ In segment CODE, align 4, keep-with-next 1400 LOGQ *NewLOGQ(const char *s) 1401 { \ NewLOGQ: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1402 LOGQ *p=malloc(sizeof(LOGQ)+1+strlen(s)); \ 00000008 1B0000EF SWI +27 \ 0000000C 610080E2 ADD R0,R0,#+97 \ 00000010 140000EF SWI +20 \ 00000014 0050A0E1 MOV R5,R0 1403 zeromem(p,sizeof(LOGQ)); \ 00000018 6010A0E3 MOV R1,#+96 \ 0000001C 1D0100EF SWI +285 1404 strcpy(p->text,s); \ 00000020 0410A0E1 MOV R1,R4 \ 00000024 600085E2 ADD R0,R5,#+96 \ 00000028 1A0000EF SWI +26 1405 return p; \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 3080BDE8 POP {R4,R5,PC} ;; return 1406 } 1407 \ In segment CODE, align 4, keep-with-next 1408 LOGQ *LastLOGQ(LOGQ **pp) 1409 { 1410 LOGQ *q=*pp; \ LastLOGQ: \ 00000000 000090E5 LDR R0,[R0, #+0] 1411 if (q) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 1EFF2F01 BXEQ LR \ 0000000C 000000EA B ??LastLOGQ_0 1412 { 1413 while(q->next) q=q->next; \ ??LastLOGQ_1: \ 00000010 0100A0E1 MOV R0,R1 \ ??LastLOGQ_0: \ 00000014 001090E5 LDR R1,[R0, #+0] \ 00000018 000051E3 CMP R1,#+0 \ 0000001C FBFFFF1A BNE ??LastLOGQ_1 1414 } 1415 return(q); \ 00000020 1EFF2FE1 BX LR ;; return 1416 } 1417 1418 //Уничтожить лог \ In segment CODE, align 4, keep-with-next 1419 void FreeLOGQ(LOGQ **pp) 1420 { \ FreeLOGQ: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0010A0E1 MOV R1,R0 1421 LOGQ *p=*pp; \ 00000008 000091E5 LDR R0,[R1, #+0] 1422 *pp=NULL; //Сразу обрежем \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 002081E5 STR R2,[R1, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 1080BD08 POPEQ {R4,PC} 1423 while(p) 1424 { 1425 LOGQ *np=p->next; \ ??FreeLOGQ_0: \ 0000001C 004090E5 LDR R4,[R0, #+0] 1426 mfree(p); \ 00000020 150000EF SWI +21 1427 p=np; \ 00000024 0400B0E1 MOVS R0,R4 1428 } \ 00000028 FBFFFF1A BNE ??FreeLOGQ_0 1429 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 1430 1431 //Удалить элемент из лога \ In segment CODE, align 4, keep-with-next 1432 void RemoveLOGQ(LOGQ **queue, LOGQ *p) 1433 { \ RemoveLOGQ: \ 00000000 00402DE9 PUSH {LR} 1434 LOGQ *q=(LOGQ *)queue; \ 00000004 000000EA B ??RemoveLOGQ_0 1435 LOGQ *qp; 1436 while(qp=q->next) 1437 { 1438 if (qp==p) 1439 { 1440 q->next=p->next; 1441 break; 1442 } 1443 q=qp; \ ??RemoveLOGQ_1: \ 00000008 0200A0E1 MOV R0,R2 \ ??RemoveLOGQ_0: \ 0000000C 002090E5 LDR R2,[R0, #+0] \ 00000010 000052E3 CMP R2,#+0 \ 00000014 0300000A BEQ ??RemoveLOGQ_2 \ 00000018 010052E1 CMP R2,R1 \ 0000001C F9FFFF1A BNE ??RemoveLOGQ_1 \ 00000020 002091E5 LDR R2,[R1, #+0] \ 00000024 002080E5 STR R2,[R0, #+0] 1444 } 1445 mfree(p); //Если элемент вообще не в логе \ ??RemoveLOGQ_2: \ 00000028 0100A0E1 MOV R0,R1 \ 0000002C 150000EF SWI +21 1446 } \ 00000030 0080BDE8 POP {PC} ;; return 1447 1448 //Добавить элемент в лог \ In segment CODE, align 4, keep-with-next 1449 int AddLOGQ(LOGQ **queue, LOGQ *p) 1450 { 1451 LOGQ *q=(LOGQ *)queue; 1452 LOGQ *qp; 1453 int i=0; \ AddLOGQ: \ 00000000 0020A0E3 MOV R2,#+0 \ 00000004 000000EA B ??AddLOGQ_0 1454 while(qp=q->next) {q=qp;i++;} \ ??AddLOGQ_1: \ 00000008 0300A0E1 MOV R0,R3 \ ??AddLOGQ_0: \ 0000000C 003090E5 LDR R3,[R0, #+0] \ 00000010 012082E2 ADD R2,R2,#+1 \ 00000014 000053E3 CMP R3,#+0 \ 00000018 FAFFFF1A BNE ??AddLOGQ_1 1455 p->next=NULL; \ 0000001C 003081E5 STR R3,[R1, #+0] 1456 q->next=p; \ 00000020 001080E5 STR R1,[R0, #+0] 1457 return(i+1); //Теперь всего в логе элементов \ 00000024 0200A0E1 MOV R0,R2 \ 00000028 1EFF2FE1 BX LR ;; return 1458 } 1459 \ In segment CODE, align 4, keep-with-next 1460 char *GetLastXTextLOGQ(CLIST *t) 1461 { 1462 LOGQ *p = t->log; \ GetLastXTextLOGQ: \ 00000000 941090E5 LDR R1,[R0, #+148] 1463 char *s = 0; \ 00000004 0000A0E3 MOV R0,#+0 1464 if(!p) return 0; \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 0500001A BNE ??GetLastXTextLOGQ_0 \ 00000010 1EFF2FE1 BX LR 1465 while(p->next) 1466 { 1467 if((p->type&0x0F)==3) \ ??GetLastXTextLOGQ_1: \ 00000014 0C3091E5 LDR R3,[R1, #+12] \ 00000018 0F3003E2 AND R3,R3,#0xF \ 0000001C 030053E3 CMP R3,#+3 1468 s = p->text; \ 00000020 60008102 ADDEQ R0,R1,#+96 1469 p = p->next; \ 00000024 0210A0E1 MOV R1,R2 1470 } \ ??GetLastXTextLOGQ_0: \ 00000028 002091E5 LDR R2,[R1, #+0] \ 0000002C 000052E3 CMP R2,#+0 \ 00000030 F7FFFF1A BNE ??GetLastXTextLOGQ_1 1471 if((p->type&0x0F)==3) \ 00000034 0C2091E5 LDR R2,[R1, #+12] \ 00000038 0F2002E2 AND R2,R2,#0xF \ 0000003C 030052E3 CMP R2,#+3 1472 s = p->text; \ 00000040 60008102 ADDEQ R0,R1,#+96 1473 return s; \ 00000044 1EFF2FE1 BX LR ;; return 1474 } 1475 \ In segment CODE, align 4, keep-with-next 1476 int GetIconIndex(CLIST *t) 1477 { 1478 unsigned short s; 1479 if (t) \ GetIconIndex: \ 00000000 000050E3 CMP R0,#+0 \ 00000004 3400000A BEQ ??GetIconIndex_0 1480 { 1481 s=t->state; 1482 if (t->isgroup) return(IS_GROUP); \ 00000008 082090E5 LDR R2,[R0, #+8] \ 0000000C B415D0E1 LDRH R1,[R0, #+84] \ 00000010 000052E3 CMP R2,#+0 \ 00000014 0F00A013 MOVNE R0,#+15 \ 00000018 1EFF2F11 BXNE LR 1483 if (t->isunread) \ 0000001C 840090E5 LDR R0,[R0, #+132] \ 00000020 000050E3 CMP R0,#+0 1484 return(IS_MSG); \ 00000024 0D00A013 MOVNE R0,#+13 \ 00000028 1EFF2F11 BXNE LR 1485 else 1486 { 1487 if (s==0xFFFF) return(IS_OFFLINE); \ 0000002C FF20A0E3 MOV R2,#+255 \ 00000030 FF2C82E3 ORR R2,R2,#0xFF00 \ 00000034 020051E1 CMP R1,R2 \ 00000038 1EFF2F01 BXEQ LR 1488 if ((s&0xF000)==0x2000) return (IS_LUNCH); \ 0000003C F02C01E2 AND R2,R1,#0xF000 \ 00000040 800D52E3 CMP R2,#+8192 \ 00000044 0900A003 MOVEQ R0,#+9 \ 00000048 1EFF2F01 BXEQ LR 1489 if ((s&0xF000)==0x3000) return (IS_EVIL); \ 0000004C C00D52E3 CMP R2,#+12288 \ 00000050 0700A003 MOVEQ R0,#+7 \ 00000054 1EFF2F01 BXEQ LR 1490 if ((s&0xF000)==0x4000) return (IS_DEPRESSION); \ 00000058 400C52E3 CMP R2,#+16384 \ 0000005C 0600A003 MOVEQ R0,#+6 \ 00000060 1EFF2F01 BXEQ LR 1491 if ((s&0xF000)==0x5000) return (IS_HOME); \ 00000064 500C52E3 CMP R2,#+20480 \ 00000068 0800A003 MOVEQ R0,#+8 \ 0000006C 1EFF2F01 BXEQ LR 1492 if ((s&0xF000)==0x6000) return (IS_WORK); \ 00000070 F00C01E2 AND R0,R1,#0xF000 \ 00000074 600C50E3 CMP R0,#+24576 \ 00000078 0A00A003 MOVEQ R0,#+10 \ 0000007C 1EFF2F01 BXEQ LR 1493 if (s & 0x0020) return(IS_FFC); \ 00000080 200011E3 TST R1,#0x20 \ 00000084 0100000A BEQ ??GetIconIndex_1 \ ??GetIconIndex_2: \ 00000088 0C00A0E3 MOV R0,#+12 \ 0000008C 1EFF2FE1 BX LR 1494 if (s & 0x0001) return(IS_AWAY); \ ??GetIconIndex_1: \ 00000090 010011E3 TST R1,#0x1 \ 00000094 0200A013 MOVNE R0,#+2 \ 00000098 1EFF2F11 BXNE LR 1495 if (s & 0x0005) return(IS_NA); \ 0000009C 050011E3 TST R1,#0x5 \ 000000A0 0300A013 MOVNE R0,#+3 \ 000000A4 1EFF2F11 BXNE LR 1496 if (s & 0x0011) return(IS_OCCUPIED); \ 000000A8 110011E3 TST R1,#0x11 \ 000000AC 0400A013 MOVNE R0,#+4 \ 000000B0 1EFF2F11 BXNE LR 1497 if (s & 0x0013) return(IS_DND); \ 000000B4 130011E3 TST R1,#0x13 \ 000000B8 0500A013 MOVNE R0,#+5 \ 000000BC 1EFF2F11 BXNE LR 1498 if (s & 0x0002) return(IS_FFC); \ 000000C0 020011E3 TST R1,#0x2 \ 000000C4 EFFFFF1A BNE ??GetIconIndex_2 1499 if (s & 0x0100) return(IS_INVISIBLE); \ 000000C8 400F11E3 TST R1,#0x100 \ 000000CC 0100A013 MOVNE R0,#+1 \ 000000D0 1EFF2F11 BXNE LR 1500 } 1501 } 1502 else 1503 { 1504 return(IS_UNKNOWN); 1505 } 1506 return(IS_ONLINE); \ 000000D4 0B00A0E3 MOV R0,#+11 \ 000000D8 1EFF2FE1 BX LR \ ??GetIconIndex_0: \ 000000DC 0E00A0E3 MOV R0,#+14 \ 000000E0 1EFF2FE1 BX LR ;; return 1507 } 1508 \ In segment CODE, align 4, keep-with-next 1509 LOGQ *FindContactLOGQByAck(TPKT *p) 1510 { \ FindContactLOGQByAck: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1511 CLIST *t; 1512 LockSched(); \ 00000008 460100EF SWI +326 1513 t=FindContactByUin(p->pkt.uin); \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000014 0050A0E1 MOV R5,R0 1514 UnlockSched(); \ 00000018 470100EF SWI +327 1515 unsigned int id=*((unsigned short*)(p->data)); \ 0000001C B840D4E1 LDRH R4,[R4, #+8] 1516 LOGQ *q; 1517 if (!t) return NULL; \ 00000020 000055E3 CMP R5,#+0 \ 00000024 0000A003 MOVEQ R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 1518 LockSched(); \ 0000002C 460100EF SWI +326 1519 q=t->log; \ 00000030 945095E5 LDR R5,[R5, #+148] \ 00000034 000000EA B ??FindContactLOGQByAck_0 1520 while(q) 1521 { 1522 if (q->ID==id) break; 1523 q=q->next; \ ??FindContactLOGQByAck_1: \ 00000038 005095E5 LDR R5,[R5, #+0] \ ??FindContactLOGQByAck_0: \ 0000003C 000055E3 CMP R5,#+0 \ 00000040 08009515 LDRNE R0,[R5, #+8] \ 00000044 04005011 CMPNE R0,R4 \ 00000048 FAFFFF1A BNE ??FindContactLOGQByAck_1 1524 } 1525 UnlockSched(); \ 0000004C 470100EF SWI +327 1526 return q; \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 3080BDE8 POP {R4,R5,PC} ;; return 1527 } 1528 1529 1530 1531 1532 /*----------------------------- SAVE CONTACT LIST TO FILE --------------------------------*/ 1533 \ In segment CODE, align 4, keep-with-next 1534 void CreateCLFile(void) 1535 { \ CreateCLFile: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 42DF4DE2 SUB SP,SP,#+264 1536 CLIST *t; 1537 t=(CLIST *)(&cltop); \ 00000008 ........ LDR R5,??DataTable81 ;; icons + 932 1538 char *s=malloc(128); 1539 volatile int hFile_cl; 1540 unsigned int io_error_cl = 0; 1541 char fn[256]; 1542 strcpy(fn,TEMPLATES_PATH); 1543 strcat(fn,"\\local.cl"); \ 0000000C E4609FE5 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,??DataTable63 ;; TEMPLATES_PATH \ 00000024 0040A0E1 MOV R4,R0 \ 00000028 08008DE2 ADD R0,SP,#+8 \ 0000002C 1A0000EF SWI +26 \ 00000030 0610A0E1 MOV R1,R6 \ 00000034 08008DE2 ADD R0,SP,#+8 \ 00000038 170000EF SWI +23 1544 unlink(fn,&io_error_cl); \ 0000003C 0D10A0E1 MOV R1,SP \ 00000040 08008DE2 ADD R0,SP,#+8 \ 00000044 6B0100EF SWI +363 1545 hFile_cl = fopen(fn,A_ReadWrite + A_Create + A_Append + A_BIN,P_READ+P_WRITE, &io_error_cl); \ 00000048 0D30A0E1 MOV R3,SP \ 0000004C 602FA0E3 MOV R2,#+384 \ 00000050 0A10A0E3 MOV R1,#+10 \ 00000054 811C81E3 ORR R1,R1,#0x8100 \ 00000058 08008DE2 ADD R0,SP,#+8 \ 0000005C 0A0000EF SWI +10 \ 00000060 04008DE5 STR R0,[SP, #+4] 1546 if(hFile_cl!=-1) \ 00000064 04009DE5 LDR R0,[SP, #+4] \ 00000068 010070E3 CMN R0,#+1 \ 0000006C 1C00001A BNE ??CreateCLFile_1 1547 { 1548 while(t=(CLIST *)(t->next)) 1549 { 1550 if(!t->isgroup && t->uin!=UIN) 1551 { 1552 sprintf(s, ";%d;%s;;;\r\n", t->uin, t->name); 1553 fwrite(hFile_cl, s, strlen(s), &io_error_cl); 1554 } 1555 } 1556 ShowMSG(2,(int)"Saved local.cl"); 1557 } 1558 else ShowMSG(2,(int)"Can't save local.cl"); \ 00000070 281086E2 ADD R1,R6,#+40 \ ??CreateCLFile_2: \ 00000074 0200A0E3 MOV R0,#+2 \ 00000078 480100EF SWI +328 1559 fclose(hFile_cl, &io_error_cl); \ 0000007C 04009DE5 LDR R0,[SP, #+4] \ 00000080 0D10A0E1 MOV R1,SP \ 00000084 0D0000EF SWI +13 1560 mfree(s); \ 00000088 0400A0E1 MOV R0,R4 \ 0000008C 150000EF SWI +21 1561 } \ 00000090 42DF8DE2 ADD SP,SP,#+264 \ 00000094 7080BDE8 POP {R4-R6,PC} ;; return \ ??CreateCLFile_3: \ 00000098 080095E5 LDR R0,[R5, #+8] \ 0000009C 000050E3 CMP R0,#+0 \ 000000A0 0F00001A BNE ??CreateCLFile_1 \ 000000A4 ........ LDR R0,??DataTable64 ;; UIN \ 000000A8 0C2095E5 LDR R2,[R5, #+12] \ 000000AC 000090E5 LDR R0,[R0, #+0] \ 000000B0 000052E1 CMP R2,R0 \ 000000B4 0A00000A BEQ ??CreateCLFile_1 \ 000000B8 143085E2 ADD R3,R5,#+20 \ 000000BC 0C1086E2 ADD R1,R6,#+12 \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 160000EF SWI +22 \ 000000C8 0400A0E1 MOV R0,R4 \ 000000CC 1B0000EF SWI +27 \ 000000D0 0D30A0E1 MOV R3,SP \ 000000D4 0020A0E1 MOV R2,R0 \ 000000D8 04009DE5 LDR R0,[SP, #+4] \ 000000DC 0410A0E1 MOV R1,R4 \ 000000E0 0C0000EF SWI +12 \ ??CreateCLFile_1: \ 000000E4 005095E5 LDR R5,[R5, #+0] \ 000000E8 000055E3 CMP R5,#+0 \ 000000EC E9FFFF1A BNE ??CreateCLFile_3 \ 000000F0 181086E2 ADD R1,R6,#+24 \ 000000F4 DEFFFFEA B ??CreateCLFile_2 \ ??CreateCLFile_0: \ 000000F8 ........ DC32 `?` 1562 1563 /*-----------------------------------------------------------------------------------------*/ 1564 1565 char on_off_buf[128]; 1566 int on_off_timer=0; 1567 char ContactT9Key[32]; 1568 int kopa_online; 1569 int kopa_kontaktu; \ In segment DATA_Z, align 4, align-sorted 1570 char status[64]; \ status: \ 00000000 DS8 64 \ In segment CODE, align 4, keep-with-next 1571 void UpdateCLheader(void){}; \ UpdateCLheader: \ 00000000 1EFF2FE1 BX LR ;; return 1572 1573 #ifdef USE_MLMENU 1574 #define nmeth 24 1575 1576 void * gui_methods2[nmeth]; 1577 void * old_redraw; 1578 1579 typedef void (*tredraw)(void *data); 1580 char prozr[]={0x00,0x00,0x00,0x64}; 1581 void new_redraw(void *data) 1582 { 1583 ((tredraw)old_redraw)(data); 1584 char s[64]; 1585 sprintf(s,"%s\\HEAD.png",ICON_PATH); 1586 int x=GetImgWidth((int)s); 1587 /*#ifdef ELKA 1588 #else 1589 DrawRectangle(0,YDISP,ScreenW()-1,ScreenH()-1,0,prozr,prozr); 1590 #endif*/ 1591 PrintText(x+7,YDISP+2,status,0,fonto,1,1,0,0,ScreenW()-x); 1592 #ifdef kluchnik 1593 switch(CurrentPrivateStatus) 1594 { 1595 case 0: ICON_HD=ICON_ALL_CAN_SEE; break; 1596 case 1: ICON_HD=ICON_NOBODY_CAN_SEE; break; 1597 case 2: ICON_HD=ICON_VISLIST_CAN_SEE; break; 1598 case 3: ICON_HD=ICON_INVISLIST_CANNOT_SEE; break; 1599 case 4: ICON_HD=ICON_CONTACTLIST_CAN_SEE; break; 1600 default : ICON_HD=ICON_HEAD; break; 1601 } 1602 int icon; 1603 icon=*(S_ICONS+ICON_HD); 1604 DrawImg(3,YDISP+3,icon); 1605 #endif 1606 } 1607 1608 /* 1609 void (*old_ed_redraw)(void *data); 1610 void my_ed_redraw2(void *data) 1611 { 1612 void *gui; 1613 char s[128]; 1614 sprintf(s,"%s\\HEAD.png",ICON_PATH); 1615 int x=GetImgWidth((int)s); 1616 if (old_ed_redraw) old_ed_redraw(data); 1617 gui=FindGUIbyId(contactlist_menu_id,NULL); 1618 if (gui) 1619 { 1620 ClearScreen(); 1621 // canvasdata=BuildCanvas(); 1622 PrintText(x+7,YDISP+2,status,0,fonto,1,1,0,0,ScreenW()-x); 1623 switch(CurrentPrivateStatus) 1624 { 1625 case 0: ICON_HD=ICON_ALL_CAN_SEE; break; 1626 case 1: ICON_HD=ICON_NOBODY_CAN_SEE; break; 1627 case 2: ICON_HD=ICON_VISLIST_CAN_SEE; break; 1628 case 3: ICON_HD=ICON_INVISLIST_CANNOT_SEE; break; 1629 case 4: ICON_HD=ICON_CONTACTLIST_CAN_SEE; break; 1630 default : ICON_HD=ICON_HEAD; break; 1631 } 1632 int icon, width; 1633 #ifdef NEWSGOLD 1634 icon=*(S_ICONS+ICON_HD); 1635 ((HEADER_DESC *)&contactlist_menuhdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); 1636 DrawImg(ScreenW()-1-width,1,icon); 1637 #else 1638 icon=*(S_ICONS+ICON_HD); 1639 width=GetImgWidth(icon); 1640 DrawImg(2,((HeaderH()-width)>>1)+YDISP,icon); 1641 #endif 1642 1643 } 1644 }*/ 1645 1646 void UpdateCLheader(void) 1647 { 1648 if (strlen(ContactT9Key)) 1649 { 1650 zeromem(status,64); 1651 strcpy(clm_hdr_text,key_clm_hdr_text); 1652 strcat(clm_hdr_text,ContactT9Key); 1653 strcpy(clmenu_sk_r,key_clmenu_sk_r); 1654 } 1655 else 1656 { 1657 TTime the; 1658 GetDateTime(NULL,&the); 1659 char t[64]; 1660 char s[32]; 1661 void Get_Online_total(); 1662 Get_Online_total(); 1663 zeromem(clm_hdr_text,64); 1664 zeromem(status,64); 1665 switch(TIME_OR_MSG) 1666 { 1667 case 0: 1668 sprintf(clm_hdr_text, "%s(%02d:%02d)",def_clm_hdr_text,the.hour,the.min); 1669 break; 1670 case 1: 1671 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,total_unread,total_unread2); 1672 break; 1673 case 2: 1674 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,kopa_kontaktu,kopa_online); 1675 break; 1676 case 3: 1677 { 1678 if(isShowTime) { sprintf(t,"[%02d:%02d]",the.hour,the.min); strcat(status,t); } 1679 if(isShowCont) { sprintf(s,"[%d/%d]",kopa_kontaktu,kopa_online); strcat(clm_hdr_text,s); } 1680 if(isShowUnread) { sprintf(s,"[%d/%d]",total_unread,total_unread2); strcat(clm_hdr_text,s); } 1681 if(isShowTime) strcat(clm_hdr_text,t); 1682 if(away_m && isShowA) strcat(clm_hdr_text,"[A]"); 1683 if(CurrentPrivateStatus==1 && isShowI) strcat(clm_hdr_text,"[I]") ; 1684 if(Is_Vibra_Enabled && isShowV) strcat(clm_hdr_text,"[V]") ; 1685 if(Is_Sounds_Enabled && isShowS) strcat(clm_hdr_text,"[S]") ; 1686 if(Is_Double_Vibra_On && isShowR) strcat(clm_hdr_text,"[R]") ; 1687 if(Show_XTX && isShowTmXs) strcat(clm_hdr_text,"[Xs]"); 1688 else if(isShowTmXs) strcat(clm_hdr_text,"[Tm]"); 1689 if(isShowBat) 1690 { 1691 int bat=*RamCap(); 1692 char s[4]; 1693 sprintf(s,"[%d%%]",bat); 1694 strcat(clm_hdr_text,s); 1695 } 1696 1697 } 1698 break; 1699 case 4://png 1700 { 1701 #ifdef kluchnik 1702 char A_s[]="[A [%s] ]"; 1703 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l 1704 if(on_off_timer > 0 && strlen(on_off_buf)!=0) 1705 sprintf(status,on_off_buf); 1706 else 1707 { 1708 sprintf(status, "[Rx:%db/Tx:%db/Queue:%db]\n",RX,TX,sendq_l); 1709 } 1710 sprintf(t,"[%d/%d] [%d/%d] ",kopa_kontaktu, kopa_online,total_unread,total_unread2); 1711 strcat(status,t); 1712 char A_s[]="[A [%s] ]"; 1713 if(away_m && isShowA) { sprintf(t,A_s,away_msg_time_dace); strcat(status,t); } 1714 #else 1715 char s[32]; 1716 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l 1717 #ifdef NEWSGOLD 1718 if(on_off_timer>0 && strlen(on_off_buf)!=0) 1719 sprintf(status,on_off_buf); 1720 else 1721 if(ShowTraff) 1722 sprintf(status, "[T:%db/Queue:%db]\n",RX+TX,sendq_l); 1723 #else 1724 if(on_off_timer>0 && strlen(on_off_buf)!=0) 1725 sprintf(status,on_off_buf); 1726 else 1727 if(ShowTraff) 1728 sprintf(status, "[T:%db/Q:%db]\n",RX+TX,sendq_l); 1729 #endif 1730 //sprintf(status, "%s\n",def_clm_hdr_text); 1731 if(isShowTime) { sprintf(t,"[%02d:%02d]",the.hour,the.min); strcat(status,t); } 1732 if(isShowCont) { sprintf(s,"[%d/%d]",kopa_kontaktu,kopa_online); strcat(status,s); } 1733 if(isShowUnread) { sprintf(s,"[%d/%d]",total_unread,total_unread2); strcat(status,s); } 1734 if(away_m && isShowA) { strcat(status,"[A]"); } 1735 #endif 1736 1737 if(CurrentPrivateStatus==1 && isShowI) strcat(status,"[I]"); 1738 if(Is_Vibra_Enabled && isShowV) strcat(status,"[V]"); 1739 if(Is_Sounds_Enabled && isShowS) strcat(status,"[S]"); 1740 if(Is_Double_Vibra_On && isShowR) strcat(status,"[R]"); 1741 if(Show_XTX && isShowTmXs) strcat(status,"[Xs]"); 1742 else 1743 if(isShowTmXs) strcat(status,"[Tm]"); 1744 if(isShowBat) 1745 { 1746 int bat=*RamCap(); 1747 char s[4]; 1748 sprintf(s,"[%d%%]",bat); 1749 strcat(status,s); 1750 } 1751 zeromem(clm_hdr_text,64); 1752 } 1753 break; 1754 default : 1755 sprintf(clm_hdr_text, percent_s,def_clm_hdr_text); 1756 break; 1757 } 1758 strcpy(clmenu_sk_r,def_clmenu_sk_r); 1759 } 1760 } 1761 #endif //USE_MLMENU 1762 \ In segment CODE, align 4, keep-with-next 1763 void ClearContactT9Key(void) 1764 { 1765 zeromem(ContactT9Key,sizeof(ContactT9Key)); \ ClearContactT9Key: \ 00000000 0C009FE5 LDR R0,??ClearContactT9Key_0 ;; icons + 1360 \ 00000004 00402DE9 PUSH {LR} \ 00000008 2010A0E3 MOV R1,#+32 \ 0000000C 1D0100EF SWI +285 1766 } \ 00000010 0080BDE8 POP {PC} ;; return \ ??ClearContactT9Key_0: \ 00000014 ........ DC32 icons + 1360 1767 \ In segment CODE, align 4, keep-with-next 1768 void AddContactT9Key(int chr) 1769 { \ AddContactT9Key: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1770 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R5,??DataTable85 ;; icons \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 550E85E2 ADD R0,R5,#+1360 \ 00000010 1B0000EF SWI +27 1771 if (l<(sizeof(ContactT9Key)-1)) \ 00000014 1F0050E3 CMP R0,#+31 1772 { 1773 ContactT9Key[l]=chr; \ 00000018 05008030 ADDCC R0,R0,R5 \ 0000001C 5045C035 STRBCC R4,[R0, #+1360] 1774 } 1775 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 1776 \ In segment CODE, align 4, keep-with-next 1777 void BackSpaceContactT9(void) 1778 { \ BackSpaceContactT9: \ 00000000 10402DE9 PUSH {R4,LR} 1779 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R4,??DataTable85 ;; icons \ 00000008 550E84E2 ADD R0,R4,#+1360 \ 0000000C 1B0000EF SWI +27 1780 if (l) \ 00000010 000050E3 CMP R0,#+0 1781 { 1782 l--; 1783 ContactT9Key[l]=0; \ 00000014 04008010 ADDNE R0,R0,R4 \ 00000018 0010A013 MOVNE R1,#+0 \ 0000001C 4F15C015 STRBNE R1,[R0, #+1359] 1784 } 1785 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 1786 1787 #ifdef USE_MLMENU 1788 void create_contactlist_menu(void) 1789 { 1790 int i; 1791 i=CountContacts(); 1792 prev_clmenu_itemcount=i; 1793 UpdateCLheader(); 1794 patch_header(&contactlist_menuhdr); 1795 contactlist_menu_id=CreateMultiLinesMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i); 1796 } 1797 1798 static int unhooked2=1; 1799 1800 void contactlist_menu_ghook(void *data, int cmd) 1801 { 1802 PNGTOP_DESC *pltop=PNG_TOP(); 1803 if (cmd==9) 1804 { 1805 pltop->dyn_pltop=NULL; 1806 } 1807 static int unhooked=1; 1808 if( ((unhooked) || (unhooked2)) && (TIME_OR_MSG==4) ) 1809 { 1810 if(!(strlen(ContactT9Key))) 1811 { 1812 GUI * gui=(GUI*)data; 1813 memcpy(&gui_methods2,gui->methods,nmeth*4); 1814 gui->methods=&gui_methods2; 1815 old_redraw=gui_methods2[0]; 1816 gui_methods2[0]=(void*)&new_redraw; 1817 } 1818 unhooked=0; 1819 unhooked2=0; 1820 } 1821 /* 1822 if (cmd==2) 1823 { 1824 static void *methods[16]; 1825 void **m=GetDataOfItemByID(data,2); 1826 if (m) 1827 { 1828 if (m[1]) 1829 { 1830 memcpy(methods,m[1],sizeof(methods)); 1831 old_ed_redraw=(void (*)(void *))(methods[0]); 1832 methods[0]=(void *)my_ed_redraw2; 1833 m[1]=methods; 1834 } 1835 } 1836 }*/ 1837 1838 if (cmd==0x0A) 1839 { 1840 silenthide=0; 1841 pltop->dyn_pltop=XStatusesImgList; 1842 DisableIDLETMR(); 1843 } 1844 } 1845 1846 void RecountMenu(CLIST *req, int needfocus) 1847 { 1848 int i; 1849 int j; 1850 void *data; 1851 UpdateCLheader(); 1852 if (!contactlist_menu_id) return; //Нечего считать 1853 data=FindGUIbyId(contactlist_menu_id,NULL); 1854 if (req==NULL) 1855 { 1856 j=0; 1857 } 1858 else 1859 { 1860 j=FindContactByContact(req); 1861 } 1862 i=CountContacts(); 1863 if (j>=i) j=i-1; 1864 if (j<0) j=0; 1865 if (i!=prev_clmenu_itemcount) 1866 { 1867 prev_clmenu_itemcount=i; 1868 Menu_SetItemCountDyn(data,i); 1869 } 1870 if(needfocus) SetCursorToMenuItem(data,j); //2058 1871 if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); 1872 } 1873 1874 #endif //USE_MLMENU 1875 1876 void RecountMenu(CLIST *req, int needfocus); 1877 //-------------------- MANAGE CONTACT MENU --------------------------// 1878 1879 1880 #ifdef kluchnik 1881 #define _MAX 8 1882 #else 1883 #define _MAX 4 1884 #endif 1885 1886 static int uinContact; 1887 \ In segment CODE, align 4, keep-with-next 1888 static void ChangeVibraContact(GUI *data) 1889 { 1890 CLIST *t; 1891 t=FindContactByUin(uinContact); \ ChangeVibraContact: \ 00000000 ........ LDR R0,??DataTable70 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1892 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] 1893 RefreshGUI(); \ 00000024 960100EF SWI +406 1894 } \ 00000028 0080BDE8 POP {PC} ;; return 1895 \ In segment CODE, align 4, keep-with-next 1896 static void ChangeSoundContact(GUI *data) 1897 { 1898 CLIST *t; 1899 t=FindContactByUin(uinContact); \ ChangeSoundContact: \ 00000000 ........ LDR R0,??DataTable70 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1900 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] 1901 RefreshGUI(); \ 00000024 960100EF SWI +406 1902 } \ 00000028 0080BDE8 POP {PC} ;; return 1903 \ In segment CODE, align 4, keep-with-next 1904 static void ChangeAutoMsg(GUI *data) 1905 { 1906 CLIST *t; 1907 t=FindContactByUin(uinContact); \ ChangeAutoMsg: \ 00000000 ........ LDR R0,??DataTable70 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1908 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] 1909 RefreshGUI(); \ 00000024 960100EF SWI +406 1910 } \ 00000028 0080BDE8 POP {PC} ;; return 1911 \ In segment CODE, align 4, keep-with-next 1912 static void ChangeShowXstatus(GUI *data) 1913 { 1914 CLIST *t; 1915 t=FindContactByUin(uinContact); \ ChangeShowXstatus: \ 00000000 ........ LDR R0,??DataTable70 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1916 t->isShowXst=!(t->isShowXst); \ 00000010 701090E5 LDR R1,[R0, #+112] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 701080E5 STR R1,[R0, #+112] 1917 RefreshGUI(); \ 00000024 960100EF SWI +406 1918 } \ 00000028 0080BDE8 POP {PC} ;; return 1919 1920 #ifdef kluchnik 1921 1922 static void ChangeAccess(GUI *data) 1923 { 1924 CLIST *t; 1925 t=FindContactByUin(uinContact); 1926 t->isaccess=!(t->isaccess); 1927 RefreshGUI(); 1928 } 1929 1930 1931 static void ChangeAwaySignal(GUI *data) 1932 { 1933 CLIST *t; 1934 t=FindContactByUin(uinContact); 1935 t->automsgcount=automsgcount; 1936 RefreshGUI(); 1937 } 1938 1939 static void ChangeAutobot(GUI *data) 1940 { 1941 CLIST *t; 1942 t=FindContactByUin(uinContact); 1943 t->isautobot=!(t->isautobot); 1944 RefreshGUI(); 1945 } 1946 1947 static void ChangeLoadHistory(GUI *data) 1948 { 1949 CLIST *t; 1950 t=FindContactByUin(uinContact); 1951 t->isLoadHistory=!(t->isLoadHistory); 1952 RefreshGUI(); 1953 } 1954 #endif //kluchnik 1955 /* 1956 static void RqtXText(GUI *data) 1957 { 1958 void RequestXText(unsigned int uin); 1959 RequestXText(uinContact); 1960 GeneralFuncF1(1); 1961 } 1962 */ \ In segment CODE, align 4, keep-with-next 1963 static void contact_list_ghook(void *data, int cmd) 1964 { \ contact_list_ghook: \ 00000000 00402DE9 PUSH {LR} 1965 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 1966 { 1967 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 1968 } 1969 } \ 00000010 0080BDE8 POP {PC} ;; return 1970 static int icon_array[2]; 1971 1972 static const void *menuproc[_MAX]= 1973 { 1974 (void *)ChangeVibraContact, 1975 (void *)ChangeSoundContact, 1976 (void *)ChangeAutoMsg, 1977 (void *)ChangeShowXstatus, 1978 #ifdef kluchnik 1979 (void *)ChangeAccess, 1980 (void *)ChangeAwaySignal, 1981 (void *)ChangeLoadHistory, 1982 (void *)ChangeAutobot, 1983 #endif 1984 }; 1985 1986 static const char * const menutext[_MAX]= 1987 { 1988 "Вибра", 1989 "Звук", 1990 "Автоответчик", 1991 "Показ.хстатус", 1992 #ifdef kluchnik 1993 "Удаленное управление", 1994 "Синалы автоответчика", 1995 "Загруж.историю", 1996 "Aвтобот" 1997 #endif 1998 }; 1999 \ In segment CODE, align 4, keep-with-next 2000 static int contact_keyhook(void *data, GUI_MSG *msg) 2001 { \ contact_keyhook: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 2002 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 2003 { 2004 CLIST *t; 2005 t=FindContactByUin(uinContact); 2006 t->isIndividSet=1; \ 00000018 28509FE5 LDR R5,??contact_keyhook_1 ;; icon_array \ 0000001C 080095E5 LDR R0,[R5, #+8] \ 00000020 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000024 0110A0E3 MOV R1,#+1 \ 00000028 581080E5 STR R1,[R0, #+88] 2007 ((void (*)(void))(menuproc[GetCurMenuItem(data)]))(); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 8F0100EF SWI +399 \ 00000034 000185E0 ADD R0,R5,R0, LSL #+2 \ 00000038 0C0090E5 LDR R0,[R0, #+12] \ 0000003C 30FF2FE1 BLX R0 2008 } 2009 //if(msg->keys==LEFT_BUTTON) GeneralFuncF1(1); 2010 return(0); \ ??contact_keyhook_0: \ 00000040 0000A0E3 MOV R0,#+0 \ 00000044 3080BDE8 POP {R4,R5,PC} ;; return \ ??contact_keyhook_1: \ 00000048 ........ DC32 icon_array 2011 } 2012 \ In segment CODE, align 4, keep-with-next 2013 static void contacthandler(void *data, int curitem, void *unk) 2014 { \ contacthandler: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 2015 WSHDR *ws; 2016 void *item=AllocMenuItem(data); 2017 extern const char percent_t[]; 2018 ws=AllocMenuWS(data,strlen(menutext[curitem])); \ 00000004 B4809FE5 LDR R8,??contacthandler_0 ;; menutext \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 970100EF SWI +407 \ 00000014 059198E7 LDR R9,[R8, +R5, LSL #+2] \ 00000018 0060A0E1 MOV R6,R0 \ 0000001C 0900A0E1 MOV R0,R9 \ 00000020 1B0000EF SWI +27 \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0400A0E1 MOV R0,R4 \ 0000002C 980100EF SWI +408 2019 wsprintf(ws,percent_t,menutext[curitem]); \ 00000030 101088E2 ADD R1,R8,#+16 2020 CLIST *t; 2021 t=FindContactByUin(uinContact); \ 00000034 ........ LDR R8,??DataTable72 ;; icon_array \ 00000038 0070A0E1 MOV R7,R0 \ 0000003C 0920A0E1 MOV R2,R9 \ 00000040 240100EF SWI +292 \ 00000044 080098E5 LDR R0,[R8, #+8] \ 00000048 ........ _BLF FindContactByUin,??FindContactByUin??rA 2022 switch(curitem) \ 0000004C 0510B0E1 MOVS R1,R5 \ 00000050 0600000A BEQ ??contacthandler_1 \ 00000054 011055E2 SUBS R1,R5,#+1 \ 00000058 0600000A BEQ ??contacthandler_2 \ 0000005C 011051E2 SUBS R1,R1,#+1 \ 00000060 0600000A BEQ ??contacthandler_3 \ 00000064 011051E2 SUBS R1,R1,#+1 \ 00000068 0600000A BEQ ??contacthandler_4 \ 0000006C 0D0000EA B ??contacthandler_5 2023 { 2024 case 0: 2025 SetMenuItemIconArray(data,item,icon_array+(t->isvibra?0:1)); \ ??contacthandler_1: \ 00000070 5C0090E5 LDR R0,[R0, #+92] \ 00000074 040000EA B ??contacthandler_6 2026 break; 2027 case 1: 2028 SetMenuItemIconArray(data,item,icon_array+(t->issound?0:1)); \ ??contacthandler_2: \ 00000078 600090E5 LDR R0,[R0, #+96] \ 0000007C 020000EA B ??contacthandler_6 2029 break; 2030 case 2: 2031 SetMenuItemIconArray(data,item,icon_array+(t->isautomsg?0:1)); \ ??contacthandler_3: \ 00000080 640090E5 LDR R0,[R0, #+100] \ 00000084 000000EA B ??contacthandler_6 2032 break; 2033 case 3: 2034 SetMenuItemIconArray(data,item,icon_array+(t->isShowXst?0:1)); \ ??contacthandler_4: \ 00000088 700090E5 LDR R0,[R0, #+112] \ ??contacthandler_6: \ 0000008C 0610A0E1 MOV R1,R6 \ 00000090 000050E3 CMP R0,#+0 \ 00000094 0000A013 MOVNE R0,#+0 \ 00000098 0100A003 MOVEQ R0,#+1 \ 0000009C 002188E0 ADD R2,R8,R0, LSL #+2 \ 000000A0 0400A0E1 MOV R0,R4 \ 000000A4 990100EF SWI +409 2035 break; 2036 #ifdef kluchnik 2037 case 4: 2038 SetMenuItemIconArray(data,item,icon_array+(t->isaccess?0:1)); 2039 break; 2040 case 5: 2041 SetMenuItemIconArray(data,item,icon_array+(t->automsgcount?0:1)); 2042 break; 2043 case 6: 2044 SetMenuItemIconArray(data,item,icon_array+(t->isLoadHistory?0:1)); 2045 break; 2046 case 7: 2047 SetMenuItemIconArray(data,item,icon_array+(t->isautobot?0:1)); 2048 break; 2049 #endif 2050 } 2051 SetMenuItemText(data, item, ws, curitem); \ ??contacthandler_5: \ 000000A8 0530A0E1 MOV R3,R5 \ 000000AC 0720A0E1 MOV R2,R7 \ 000000B0 0610A0E1 MOV R1,R6 \ 000000B4 0400A0E1 MOV R0,R4 \ 000000B8 9A0100EF SWI +410 2052 } \ 000000BC F083BDE8 POP {R4-R9,PC} ;; return \ ??contacthandler_0: \ 000000C0 ........ DC32 menutext 2053 2054 char cont_hdr[64]; 2055 static const HEADER_DESC contact_list_HDR={0,0,NULL,NULL,NULL,(int)cont_hdr,LGP_NULL}; 2056 static const int _softkeys[] = {0,1,2}; 2057 2058 static const SOFTKEY_DESC _sk[] = 2059 { 2060 {0x0018, 0x0000, (int)"Выбрать"}, 2061 {0x0001, 0x0000, (int)LG_CLOSE}, 2062 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 2063 }; 2064 2065 const SOFTKEYSTAB _skt = 2066 { 2067 _sk, 0 2068 }; 2069 static const MENU_DESC contact_list_MNU= 2070 { 2071 8,contact_keyhook,contact_list_ghook,NULL, 2072 _softkeys, 2073 &_skt, 2074 0x11, 2075 contacthandler, 2076 NULL, 2077 NULL, 2078 _MAX 2079 }; 2080 2081 \ In segment CODE, align 4, keep-with-next 2082 int CreateContactMenu(CLIST *t) 2083 { \ CreateContactMenu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 2084 uinContact=t->uin; \ 00000004 ........ LDR R5,??DataTable72 ;; icon_array 2085 icon_array[0]=GetPicNByUnicodeSymbol(CBOX_CHECKED); 2086 icon_array[1]=GetPicNByUnicodeSymbol(CBOX_UNCHECKED); 2087 sprintf(cont_hdr,"Меню кoнт. %s",t->name); \ 00000008 74609FE5 LDR R6,??CreateContactMenu_0 ;; `?next)) 2140 { 2141 if(cl->log) \ ??LongPressActionOnChat_10: \ 00000120 940098E5 LDR R0,[R8, #+148] \ 00000124 000050E3 CMP R0,#+0 \ 00000128 0300000A BEQ ??LongPressActionOnChat_9 2142 { 2143 FreeLOGQ(&cl->log); \ 0000012C 940088E2 ADD R0,R8,#+148 \ 00000130 ........ BL FreeLOGQ 2144 cl->msg_count=0; \ 00000134 A44088E5 STR R4,[R8, #+164] 2145 cl->isactive=0; \ 00000138 A04088E5 STR R4,[R8, #+160] 2146 } 2147 } \ ??LongPressActionOnChat_9: \ 0000013C 008098E5 LDR R8,[R8, #+0] \ 00000140 000058E3 CMP R8,#+0 \ 00000144 F5FFFF1A BNE ??LongPressActionOnChat_10 2148 if(strlen(ContactT9Key)) ClearContactT9Key(); \ 00000148 070086E0 ADD R0,R6,R7 \ 0000014C 1B0000EF SWI +27 \ 00000150 000050E3 CMP R0,#+0 \ 00000154 0200000A BEQ ??LongPressActionOnChat_11 \ 00000158 2010A0E3 MOV R1,#+32 \ 0000015C 070086E0 ADD R0,R6,R7 \ 00000160 1D0100EF SWI +285 2149 RecountMenu(NULL,1); \ ??LongPressActionOnChat_11: \ 00000164 0110A0E3 MOV R1,#+1 \ 00000168 0400A0E1 MOV R0,R4 \ 0000016C ........ BL RecountMenu 2150 ShowMSG(1,(int)"All chat clear!"); \ 00000170 801085E2 ADD R1,R5,#+128 \ ??LongPressActionOnChat_5: \ 00000174 0B00A0E1 MOV R0,R11 \ ??LongPressActionOnChat_6: \ 00000178 480100EF SWI +328 \ 0000017C F18FBDE8 POP {R0,R4-R11,PC} 2151 break; 2152 } 2153 case 6: 2154 if(!away_m) \ ??LongPressActionOnChat_12: \ 00000180 2C0397E5 LDR R0,[R7, #+812] \ 00000184 000050E3 CMP R0,#+0 \ 00000188 0B00001A BNE ??LongPressActionOnChat_13 2155 { 2156 away_m=!away_m; \ 0000018C 2CB387E5 STR R11,[R7, #+812] 2157 GBS_StopTimer(&away_tmr); \ 00000190 B800A0E3 MOV R0,#+184 \ 00000194 600D80E3 ORR R0,R0,#0x1800 \ 00000198 070080E0 ADD R0,R0,R7 \ 0000019C 440100EF SWI +324 2158 msg_away_timer=AUTO_ENGADE*12; \ 000001A0 ........ LDR R0,??DataTable76 ;; AUTO_ENGADE \ 000001A4 0C10A0E3 MOV R1,#+12 \ 000001A8 000090E5 LDR R0,[R0, #+0] \ 000001AC 910000E0 MUL R0,R1,R0 \ 000001B0 280387E5 STR R0,[R7, #+808] 2159 InputAwayMsg(); \ 000001B4 ........ BL InputAwayMsg \ 000001B8 F18FBDE8 POP {R0,R4-R11,PC} 2160 2161 } 2162 else 2163 { 2164 msg_away_timer=0; 2165 away_m=!away_m; 2166 if(change_back_status) \ ??LongPressActionOnChat_13: \ 000001BC 340397E5 LDR R0,[R7, #+820] \ 000001C0 284387E5 STR R4,[R7, #+808] \ 000001C4 2C4387E5 STR R4,[R7, #+812] \ 000001C8 000050E3 CMP R0,#+0 \ 000001CC F18FBD08 POPEQ {R0,R4-R11,PC} 2167 { 2168 CurrentStatus=status_rem; \ 000001D0 300397E5 LDR R0,[R7, #+816] \ 000001D4 180387E5 STR R0,[R7, #+792] 2169 set_my_status(); \ 000001D8 ........ BL set_my_status 2170 change_back_status=0; \ 000001DC 344387E5 STR R4,[R7, #+820] \ 000001E0 F18FBDE8 POP {R0,R4-R11,PC} 2171 } 2172 } 2173 UpdateCLheader(); 2174 break; 2175 case 7: 2176 { 2177 Show_XTX=!(Show_XTX); \ ??LongPressActionOnChat_14: \ 000001E4 380397E5 LDR R0,[R7, #+824] \ 000001E8 000050E3 CMP R0,#+0 \ 000001EC 00B0A013 MOVNE R11,#+0 \ 000001F0 38B387E5 STR R11,[R7, #+824] 2178 if(Show_XTX) \ 000001F4 00005BE3 CMP R11,#+0 \ 000001F8 A8108502 ADDEQ R1,R5,#+168 2179 ShowMSG(1,(int)"Default show x-status"); \ 000001FC 90108512 ADDNE R1,R5,#+144 \ 00000200 0100A0E3 MOV R0,#+1 \ 00000204 DBFFFFEA B ??LongPressActionOnChat_6 2180 else 2181 ShowMSG(1,(int)"Default show time"); 2182 } 2183 break; 2184 case 8: 2185 { 2186 WSHDR *ws; 2187 ws=AllocWS(150); \ ??LongPressActionOnChat_15: \ 00000208 9600A0E3 MOV R0,#+150 \ 0000020C 250100EF SWI +293 2188 str_2ws(ws,suc_config_name,128); \ 00000210 ........ LDR R1,??DataTable77 ;; suc_config_name \ 00000214 020000EA B ??LongPressActionOnChat_16 2189 ExecuteFile(ws,0,0); 2190 FreeWS(ws); 2191 } 2192 break; 2193 case 9: 2194 { 2195 WSHDR *ws; 2196 ws=AllocWS(150); \ ??LongPressActionOnChat_17: \ 00000218 9600A0E3 MOV R0,#+150 \ 0000021C 250100EF SWI +293 2197 str_2ws(ws,suc_config_name_mod,128); \ 00000220 ........ LDR R1,??DataTable78 ;; suc_config_name_mod \ ??LongPressActionOnChat_16: \ 00000224 0040A0E1 MOV R4,R0 \ 00000228 8020A0E3 MOV R2,#+128 \ 0000022C 6C0100EF SWI +364 2198 ExecuteFile(ws,0,0); \ 00000230 0020A0E3 MOV R2,#+0 \ 00000234 0010A0E3 MOV R1,#+0 \ 00000238 0400A0E1 MOV R0,R4 \ 0000023C 940000EF SWI +148 2199 FreeWS(ws); \ 00000240 0400A0E1 MOV R0,R4 \ 00000244 290100EF SWI +297 \ 00000248 F18FBDE8 POP {R0,R4-R11,PC} 2200 } 2201 break; 2202 case 10://ping 2203 { 2204 janis=1; \ ??LongPressActionOnChat_18: \ 0000024C ........ LDR R0,??DataTable79 ;; janis \ 00000250 00B080E5 STR R11,[R0, #+0] 2205 TPKT *p; 2206 p=malloc(sizeof(PKT)+sizeof(TTime)); \ 00000254 1000A0E3 MOV R0,#+16 \ 00000258 140000EF SWI +20 \ 0000025C 0050A0E1 MOV R5,R0 2207 GetDateTime(NULL,(TTime *)p->data); \ 00000260 081085E2 ADD R1,R5,#+8 \ 00000264 0000A0E3 MOV R0,#+0 \ 00000268 B40000EF SWI +180 2208 p->pkt.uin=0; \ 0000026C 004085E5 STR R4,[R5, #+0] 2209 p->pkt.type=T_ECHO; \ 00000270 1200A0E3 MOV R0,#+18 \ 00000274 B400C5E1 STRH R0,[R5, #+4] 2210 p->pkt.data_len=sizeof(TTime); \ 00000278 0800A0E3 MOV R0,#+8 \ 0000027C B600C5E1 STRH R0,[R5, #+6] 2211 SUBPROC((void *)SendAnswer,0,p); \ 00000280 ........ LDR R0,??DataTable80 ;; SendAnswer \ 00000284 0520A0E1 MOV R2,R5 \ 00000288 0410A0E1 MOV R1,R4 \ 0000028C 710100EF SWI +369 \ 00000290 F18FBDE8 POP {R0,R4-R11,PC} 2212 } 2213 break; 2214 case 11://go to idle 2215 { 2216 ClearContactT9Key(); \ ??LongPressActionOnChat_19: \ 00000294 2010A0E3 MOV R1,#+32 \ 00000298 070086E0 ADD R0,R6,R7 \ 0000029C 1D0100EF SWI +285 2217 RecountMenu(NULL,1); \ 000002A0 0110A0E3 MOV R1,#+1 \ 000002A4 0400A0E1 MOV R0,R4 \ 000002A8 ........ BL RecountMenu 2218 silenthide=1; \ 000002AC 54B387E5 STR R11,[R7, #+852] 2219 gipc.name_to=ipc_xtask_name; \ 000002B0 E70F85E2 ADD R0,R5,#+924 \ 000002B4 07008AE7 STR R0,[R10, +R7] 2220 gipc.name_from=ipc_my_name; \ 000002B8 DF0F85E2 ADD R0,R5,#+892 \ 000002BC 300187E5 STR R0,[R7, #+304] 2221 gipc.data=0; \ 000002C0 344187E5 STR R4,[R7, #+308] 2222 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 000002C4 07308AE0 ADD R3,R10,R7 \ 000002C8 0B20A0E1 MOV R2,R11 \ 000002CC 0910A0E1 MOV R1,R9 \ 000002D0 0900A0E3 MOV R0,#+9 \ 000002D4 420C80E3 ORR R0,R0,#0x4200 \ 000002D8 000100EF SWI +256 \ 000002DC F18FBDE8 POP {R0,R4-R11,PC} 2223 } 2224 break; 2225 case 12://hide & lock 2226 { 2227 ClearContactT9Key(); \ ??LongPressActionOnChat_20: \ 000002E0 2010A0E3 MOV R1,#+32 \ 000002E4 070086E0 ADD R0,R6,R7 \ 000002E8 1D0100EF SWI +285 2228 RecountMenu(NULL,1); \ 000002EC 0110A0E3 MOV R1,#+1 \ 000002F0 0400A0E1 MOV R0,R4 \ 000002F4 ........ BL RecountMenu 2229 gipc.name_to=ipc_xtask_name; \ 000002F8 E70F85E2 ADD R0,R5,#+924 \ 000002FC 07008AE7 STR R0,[R10, +R7] 2230 gipc.name_from=ipc_my_name; \ 00000300 DF0F85E2 ADD R0,R5,#+892 \ 00000304 300187E5 STR R0,[R7, #+304] 2231 gipc.data=0; \ 00000308 344187E5 STR R4,[R7, #+308] 2232 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 0000030C 07308AE0 ADD R3,R10,R7 \ 00000310 0B20A0E1 MOV R2,R11 \ 00000314 0910A0E1 MOV R1,R9 \ 00000318 0900A0E3 MOV R0,#+9 \ 0000031C 420C80E3 ORR R0,R0,#0x4200 \ 00000320 000100EF SWI +256 2233 if (IsUnlocked()) \ 00000324 430000EF SWI +67 \ 00000328 000050E3 CMP R0,#+0 \ 0000032C F18FBD08 POPEQ {R0,R4-R11,PC} 2234 { 2235 KbdLock(); \ 00000330 A90000EF SWI +169 \ 00000334 F18FBDE8 POP {R0,R4-R11,PC} 2236 } 2237 // return(-1); 2238 } 2239 break; 2240 case 13://users menu 2241 { 2242 if(!t->isgroup) \ ??LongPressActionOnChat_21: \ 00000338 081090E5 LDR R1,[R0, #+8] \ 0000033C 000051E3 CMP R1,#+0 \ 00000340 F18FBD18 POPNE {R0,R4-R11,PC} 2243 CreateContactMenu(t); \ 00000344 ........ BL CreateContactMenu 2244 } 2245 break; 2246 }//switch() 2247 } \ ??LongPressActionOnChat_22: \ 00000348 F18FBDE8 POP {R0,R4-R11,PC} ;; return 2248 2249 //{"Без действия","Звук","Вибра","Инвиз","Реж.напоминания","Очистить чаты","Автоответчик","Показ.хстат/время","Конфиг","Конфиг мода","Пинг","Заблокировать","На гэ","Меню юзера"} 2250 \ In segment CODE, align 4, keep-with-next 2251 void LongPressAction(CLIST *t,int key) 2252 { \ LongPressAction: \ 00000000 00402DE9 PUSH {LR} 2253 switch(key) \ 00000004 041041E2 SUB R1,R1,#+4 \ 00000008 350051E3 CMP R1,#+53 \ 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 292C2C2C DC8 +41,+44,+44,+44 \ 00000020 2C2C2C2C DC8 +44,+44,+44,+44 \ 00000024 2C2C2C2C DC8 +44,+44,+44,+44 \ 00000028 2C2C2C2C DC8 +44,+44,+44,+44 \ 0000002C 2C2C2C2C DC8 +44,+44,+44,+44 \ 00000030 2C2C2C2C DC8 +44,+44,+44,+44 \ 00000034 2C2C2C2C DC8 +44,+44,+44,+44 \ 00000038 2C2C2C27 DC8 +44,+44,+44,+39 \ 0000003C 2C2C2C2C DC8 +44,+44,+44,+44 \ 00000040 2C2C252C DC8 +44,+44,+37,+44 \ 00000044 2C2C2C2C DC8 +44,+44,+44,+44 \ 00000048 0D0F1317 DC8 +13,+15,+19,+23 \ 0000004C 191B1D1F DC8 +25,+27,+29,+31 \ 00000050 21230000 DC8 +33,+35,+0,+0 2254 { 2255 case '0': LongPressActionOnChat(t,longAct_0); break; \ ??LongPressAction_1: \ 00000054 78109FE5 LDR R1,??LongPressAction_2 ;; longAct_0 \ 00000058 040000EA B ??LongPressAction_3 2256 case '1': LongPressActionOnChat(t,longAct_1); break; \ ??LongPressAction_4: \ 0000005C 74109FE5 LDR R1,??LongPressAction_2+0x4 ;; longAct_1 \ 00000060 001091E5 LDR R1,[R1, #+0] \ 00000064 ........ BL LongPressActionOnChat \ 00000068 0080BDE8 POP {PC} 2257 case '2': LongPressActionOnChat(t,longAct_2); break; \ ??LongPressAction_5: \ 0000006C 68109FE5 LDR R1,??LongPressAction_2+0x8 ;; longAct_2 \ ??LongPressAction_3: \ 00000070 001091E5 LDR R1,[R1, #+0] \ 00000074 ........ BL LongPressActionOnChat \ 00000078 0080BDE8 POP {PC} 2258 case '3': LongPressActionOnChat(t,longAct_3); break; \ ??LongPressAction_6: \ 0000007C 5C109FE5 LDR R1,??LongPressAction_2+0xC ;; longAct_3 \ 00000080 FAFFFFEA B ??LongPressAction_3 2259 case '4': LongPressActionOnChat(t,longAct_4); break; \ ??LongPressAction_7: \ 00000084 58109FE5 LDR R1,??LongPressAction_2+0x10 ;; longAct_4 \ 00000088 F8FFFFEA B ??LongPressAction_3 2260 case '5': LongPressActionOnChat(t,longAct_5); break; \ ??LongPressAction_8: \ 0000008C 54109FE5 LDR R1,??LongPressAction_2+0x14 ;; longAct_5 \ 00000090 F6FFFFEA B ??LongPressAction_3 2261 case '6': LongPressActionOnChat(t,longAct_6); break; \ ??LongPressAction_9: \ 00000094 50109FE5 LDR R1,??LongPressAction_2+0x18 ;; longAct_6 \ 00000098 F4FFFFEA B ??LongPressAction_3 2262 case '7': LongPressActionOnChat(t,longAct_7); break; \ ??LongPressAction_10: \ 0000009C 4C109FE5 LDR R1,??LongPressAction_2+0x1C ;; longAct_7 \ 000000A0 F2FFFFEA B ??LongPressAction_3 2263 case '8': LongPressActionOnChat(t,longAct_8); break; \ ??LongPressAction_11: \ 000000A4 48109FE5 LDR R1,??LongPressAction_2+0x20 ;; longAct_8 \ 000000A8 F0FFFFEA B ??LongPressAction_3 2264 case '9': LongPressActionOnChat(t,longAct_9); break; \ ??LongPressAction_12: \ 000000AC 44109FE5 LDR R1,??LongPressAction_2+0x24 ;; longAct_9 \ 000000B0 EEFFFFEA B ??LongPressAction_3 2265 case '*': LongPressActionOnChat(t,longAct_10); break; \ ??LongPressAction_13: \ 000000B4 40109FE5 LDR R1,??LongPressAction_2+0x28 ;; longAct_10 \ 000000B8 ECFFFFEA B ??LongPressAction_3 2266 case '#': LongPressActionOnChat(t,longAct_11); break; \ ??LongPressAction_14: \ 000000BC 3C109FE5 LDR R1,??LongPressAction_2+0x2C ;; longAct_11 \ 000000C0 EAFFFFEA B ??LongPressAction_3 2267 case RIGHT_SOFT: LongPressActionOnChat(t,longAct_RB); break; \ ??LongPressAction_15: \ 000000C4 38109FE5 LDR R1,??LongPressAction_2+0x30 ;; longAct_RB \ 000000C8 001091E5 LDR R1,[R1, #+0] \ 000000CC ........ BL LongPressActionOnChat 2268 } 2269 } \ ??LongPressAction_16: \ 000000D0 0080BDE8 POP {PC} ;; return \ ??LongPressAction_2: \ 000000D4 ........ DC32 longAct_0 \ 000000D8 ........ DC32 longAct_1 \ 000000DC ........ DC32 longAct_2 \ 000000E0 ........ DC32 longAct_3 \ 000000E4 ........ DC32 longAct_4 \ 000000E8 ........ DC32 longAct_5 \ 000000EC ........ DC32 longAct_6 \ 000000F0 ........ DC32 longAct_7 \ 000000F4 ........ DC32 longAct_8 \ 000000F8 ........ DC32 longAct_9 \ 000000FC ........ DC32 longAct_10 \ 00000100 ........ DC32 longAct_11 \ 00000104 ........ DC32 longAct_RB 2270 2271 char hostbuf2[128]; 2272 #ifdef USE_MLMENU 2273 int contactlist_menu_onkey(void *data, GUI_MSG *msg) 2274 { 2275 #ifdef NEWSGOLD 2276 scrsTime=0; 2277 #endif 2278 2279 CLIST *t; 2280 int i; 2281 i=GetCurMenuItem(data); 2282 t=FindContactByN(i); 2283 2284 if (msg->keys==0x18) 2285 { 2286 ShowMainMenu(); 2287 return(-1); 2288 } 2289 2290 if (msg->keys==0x3D) 2291 { 2292 if (t) 2293 { 2294 if (t->isgroup) 2295 { 2296 t->state^=0xFFFF; 2297 RecountMenu(t,1); 2298 return(-1); 2299 } 2300 if (strlen(ContactT9Key)) 2301 { 2302 ClearContactT9Key(); 2303 RecountMenu(NULL,1); 2304 } 2305 #ifdef kluchnik 2306 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) 2318 { 2319 if (strlen(ContactT9Key)) 2320 { 2321 BackSpaceContactT9(); 2322 RecountMenu(NULL,1); 2323 return(-1); 2324 } 2325 } 2326 2327 if (msg->gbsmsg->msg==KEY_DOWN) 2328 { 2329 int key=msg->gbsmsg->submess; 2330 if ((key>='0')&&(key<='9')) 2331 { 2332 AddContactT9Key(key); 2333 RecountMenu(NULL,1); 2334 return(-1); 2335 } 2336 2337 if (key==VOL_UP_BUTTON && isVolUpButton) 2338 { 2339 #ifdef NEWSGOLD 2340 CreateScreenSelectGUI(); 2341 #else 2342 char *small_info=malloc(256); 2343 sprintf(small_info, "Время в онлайн:\n" 2344 "%02d:%02d:%02d\n" 2345 "Сервер:\n%s" 2346 ,uptimeHour, uptimeMin, uptimeSec, hostbuf2); 2347 ShowMSG(1,(int)small_info); 2348 mfree(small_info); 2349 #endif 2350 } 2351 2352 if(msg->gbsmsg->submess==VOL_DOWN_BUTTON && isVolDownButton) 2353 { 2354 if(!away_m) 2355 { 2356 away_m=!away_m; 2357 /* GBS_StopTimer(&away_tmr); 2358 msg_away_timer=AUTO_ENGADE; 2359 away_timer();*/ 2360 main_d=1; 2361 InputAwayMsg(); 2362 } 2363 else 2364 { 2365 msg_away_timer=0; 2366 away_m=!away_m; 2367 if(change_back_status) 2368 { 2369 CurrentStatus=status_rem; 2370 set_my_status(); 2371 change_back_status=0; 2372 } 2373 } 2374 UpdateCLheader(); 2375 RefreshGUI(); 2376 } 2377 2378 if(key==GREEN_BUTTON) 2379 { 2380 IsActiveUp=!IsActiveUp; 2381 RecountMenu(NULL,1); 2382 return(-1); 2383 } 2384 2385 if(key==LEFT_BUTTON && (CountContacts()>0)) 2386 { 2387 while(t=(CLIST *)(t->next)) 2388 { 2389 if (t->isunread) goto doit; 2390 } 2391 t=(CLIST *)(&cltop); 2392 while(t=(CLIST *)(t->next)) 2393 { 2394 if (t->isunread) goto doit; 2395 } 2396 if (t && Is_Show_Groups) { 2397 if (!t->isgroup) 2398 t=FindGroupByID(t->group); 2399 if (t && !t->state) { 2400 t->state^=0xFFFF; 2401 goto does; 2402 } 2403 } 2404 doit: 2405 { 2406 CLIST *g=FindGroupByID(t->group); 2407 if (g) 2408 { 2409 if (g->state) 2410 { 2411 g->state=0; 2412 } 2413 } 2414 } 2415 does: 2416 RecountMenu(t,1); 2417 return(-1); 2418 } 2419 2420 if (key=='*' && (CountContacts()>0)) 2421 { 2422 while(t=(CLIST *)(t->next)) 2423 { 2424 if (t->just_now) goto doit3; 2425 } 2426 t=(CLIST *)(&cltop); 2427 while(t=(CLIST *)(t->next)) 2428 { 2429 if (t->just_now) goto doit3; 2430 } 2431 return(-1); 2432 doit3: 2433 { 2434 CLIST *g=FindGroupByID(t->group); 2435 if (g) 2436 { 2437 if (g->state) 2438 { 2439 g->state=0; 2440 } 2441 } 2442 } 2443 RecountMenu(t,1); 2444 return(-1); 2445 } 2446 2447 if (key=='#' && (CountContacts()>0))//Если есть хоть один контакт то выполнять,иначе возможен пикофф 2448 { 2449 if(ActionResh) 2450 { 2451 while(t=(CLIST *)(t->next)) 2452 { 2453 if (t->isactive) goto doit4; 2454 } 2455 t=(CLIST *)(&cltop); 2456 while(t=(CLIST *)(t->next)) 2457 { 2458 if (t->isactive) goto doit4; 2459 } 2460 return(-1); 2461 doit4: 2462 { 2463 CLIST *g=FindGroupByID(t->group); 2464 if (g) 2465 { 2466 if (g->state) 2467 { 2468 g->state=0; 2469 } 2470 } 2471 } 2472 RecountMenu(t,1); 2473 } 2474 else 2475 { 2476 if(t->log && !(t->just_now))//очистить лог 2477 { 2478 FreeLOGQ(&t->log); 2479 t->msg_count=0; 2480 t->isactive=0; 2481 } 2482 2483 if(t->just_now)//если контакт тока зашел,то обнуляем 2484 { 2485 CLIST *tt; 2486 tt=FindContactByUin(t->uin); 2487 tt->just_now=0; 2488 } 2489 2490 if(t->uin==UIN)//если нажали на Loopback, то обнуляем все just_now'ы 2491 { 2492 CLIST *tt; 2493 tt=(CLIST *)(&cltop); 2494 while(tt=(CLIST *)(tt->next)) 2495 { 2496 if(tt->just_now) tt->just_now=0; 2497 } 2498 } 2499 2500 if(strlen(ContactT9Key)) ClearContactT9Key(); 2501 RecountMenu(NULL,0); 2502 } 2503 return(-1); 2504 } 2505 2506 if (key==RIGHT_BUTTON) 2507 { 2508 //Послать запрос текста XStatus 2509 if (t) 2510 { 2511 if (!t->isgroup) 2512 { 2513 FreeXText(t); 2514 t->req_xtext=0; 2515 RequestXText(t->uin); 2516 RefreshGUI(); 2517 return(-1); 2518 } 2519 } 2520 } 2521 } 2522 2523 if (msg->gbsmsg->msg==LONG_PRESS) 2524 { 2525 LongPressAction(t,msg->gbsmsg->submess); 2526 2527 int key=msg->gbsmsg->submess; 2528 if ((key>='0')&&(key<='9')) 2529 { 2530 ClearContactT9Key(); 2531 UpdateCLheader(); 2532 RecountMenu(NULL,1); 2533 } 2534 } 2535 return(0); 2536 } 2537 #endif //USE_MLMENU 2538 \ In segment CODE, align 4, keep-with-next 2539 void GetOnTotalContact(int group_id,int *_onlinetotal) 2540 { 2541 CLIST *t; 2542 t=(CLIST *)&cltop; \ GetOnTotalContact: \ 00000000 ........ LDR R2,??DataTable81 ;; icons + 932 \ 00000004 30002DE9 PUSH {R4,R5} 2543 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 2544 while((t=t->next)) 2545 { 2546 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 2547 { 2548 total++; 2549 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 2550 } 2551 } \ ??GetOnTotalContact_0: \ 00000040 002092E5 LDR R2,[R2, #+0] \ 00000044 000052E3 CMP R2,#+0 \ 00000048 F3FFFF1A BNE ??GetOnTotalContact_1 2552 _onlinetotal[0]=online; \ 0000004C 003081E5 STR R3,[R1, #+0] 2553 _onlinetotal[1]=total; \ 00000050 04C081E5 STR R12,[R1, #+4] 2554 } \ 00000054 3000BDE8 POP {R4,R5} \ 00000058 1EFF2FE1 BX LR ;; return 2555 2556 #ifdef USE_MLMENU 2557 void contactlist_menu_iconhndl(void *data, int curitem, void *unk) 2558 { 2559 CLIST *t; 2560 #ifdef USE_MLMENU 2561 void *item=AllocMLMenuItem(data); 2562 #else 2563 void *item=AllocMenuItem(data); 2564 #endif 2565 int icon; 2566 2567 WSHDR *ws2; 2568 #ifdef USE_MLMENU 2569 WSHDR *ws4; 2570 #endif 2571 WSHDR ws1loc, *ws1; 2572 unsigned short num[128]; 2573 ws1=CreateLocalWS(&ws1loc,num,128); 2574 #ifdef USE_MLMENU 2575 WSHDR ws3loc, *ws3; 2576 unsigned short num3[128]; 2577 ws3=CreateLocalWS(&ws3loc,num3,128); 2578 char s[64]; 2579 #endif 2580 t=FindContactByN(curitem); 2581 if (t) 2582 { 2583 icon=GetIconIndex(t); 2584 if (icon!=IS_GROUP) 2585 { 2586 if(t->just_now) 2587 { 2588 char *test=malloc(64); 2589 sprintf(test, ">> %s <<", t->name); 2590 wsprintf(ws1,percent_t,test); 2591 mfree(test); 2592 } 2593 else 2594 wsprintf(ws1,percent_t,t->name); 2595 if (t->just_now) 2596 { 2597 wsInsertChar(ws1,0x0004,1); 2598 wsInsertChar(ws1,0xE008,1); 2599 } 2600 else 2601 if (t->isactive) 2602 { 2603 wsInsertChar(ws1,0x0002,1); 2604 wsInsertChar(ws1,0xE008,1); 2605 } 2606 2607 #ifdef USE_MLMENU 2608 if ((t->xtext && t->xtext[0]!=0) && (t->isShowXst) && (t->state!=0xFFFF))//Если контакт онлайн и показывать хстату 2609 { 2610 int i; 2611 zeromem(s,64); 2612 i=t->xtext[0]; 2613 if (i>63) i=63; 2614 strncpy(s,t->xtext+1,i); 2615 wsprintf(ws3,"%c%t",0xE012,s); 2616 } 2617 else 2618 if(t->xtext2 && t->xtext2[0]!=0 && isLogStatusChange) 2619 { 2620 int i; 2621 zeromem(s,64); 2622 i=t->xtext2[0]; 2623 if (i>63) i=63; 2624 strncpy(s,t->xtext2+1,i); 2625 wsprintf(ws3,"%c%t",0xE012,s); 2626 } 2627 else 2628 wsprintf(ws3,percent_d,t->uin); 2629 if ((t->xstatexstate)) 2630 { 2631 wsInsertChar(ws3,FIRST_UCS2_BITMAP+t->xstate,1); 2632 } 2633 #endif 2634 } 2635 else 2636 { 2637 int onlinetotal[2]; 2638 GetOnTotalContact(t->group,onlinetotal); 2639 #ifdef USE_MLMENU 2640 wsprintf(ws1,percent_t,t->name); 2641 wsprintf(ws3,"(%d/%d)",onlinetotal[0],onlinetotal[1]); 2642 #else 2643 wsprintf(ws1,"%t%c%c(%d/%d)",t->name,0xE01D,0xE012,onlinetotal[0],onlinetotal[1]); 2644 #endif 2645 if (t->state) icon++; //Модификация иконки группы 2646 } 2647 } 2648 else 2649 { 2650 wsprintf(ws1, LG_CLERROR); 2651 } 2652 ws2=AllocMenuWS(data,ws1->wsbody[0]+1); 2653 wstrcpy(ws2,ws1); 2654 2655 /* 2656 #ifdef kluchnik 2657 if ((t->xstatexstate)) 2658 { 2659 wsInsertChar(ws2,NumXStatusToIconBar+t->xstate,1); 2660 } 2661 #endif 2662 */ 2663 2664 SetMenuItemIconArray(data, item, S_ICONS+icon); 2665 #ifdef USE_MLMENU 2666 ws4=AllocMenuWS(data,ws3->wsbody[0]); 2667 wstrcpy(ws4,ws3); 2668 SetMLMenuItemText(data, item, ws2, ws4, curitem); 2669 #else 2670 SetMenuItemText(data, item, ws2, curitem); 2671 #endif 2672 } 2673 #endif //USE_MLMENU 2674 2675 /************************************************************************************************/ 2676 2677 /*------------------------------------------------------------------------*/ 2678 /*-------------------- Весь процесс отрисовки списка ---------------------*/ 2679 /*------------------------------------------------------------------------*/ 2680 2681 int itemFromDisp;//кол-во на экране 2682 int totalItems;//общее количество итемов 2683 int curpos=0;//позичия курсора 2684 int curpage=1;//текущая страница 2685 int collum=0;//столбцы))) 0 - первый, 1- второй 2686 2687 const char clrSelect[4]={0xFF,0x00,0x00,0x20}; 2688 const char fntSelect[4]={0xFF,0xFF,0x00,0x60}; 2689 const char bordSelect[4]={0x00,0x00,0x00,0x60}; 2690 2691 const char clrNotSelect[4]={0x00,0x00,0x00,0x00}; 2692 const char bordNotSelect[4]={0x00,0x00,0x00,0x00}; 2693 const char fntNotSelect[4]={0xFF,0xFF,0xFF,0x60}; 2694 2695 char clrBlack[]={0x00,0x00,0x00,0x64}; 2696 char clrWhite[]={0xFF,0xFF,0xFF,0x64}; 2697 char clrRed[]={0xFF,0x00,0x00,0x64}; 2698 char transparent[]={0x00,0x00,0x00,0x00}; 2699 char blue[]="\x00\x00\xFF\x64"; 2700 2701 const int clfont=(FONT_SMALL+100);//ибо библа пнг 2702 const char _t[]="%t"; 2703 const char _d[]="%d"; 2704 2705 #ifdef ELKA 2706 #undef YDISP 2707 #define YDISP 0 2708 #endif 2709 2710 #define CLIST_Y1 (YDISP+FontH(clfont)+4) 2711 2712 \ In segment CODE, align 4, keep-with-next 2713 void RecountMenu(CLIST *req, int needfocus) 2714 { \ RecountMenu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 2715 int i; 2716 int j; 2717 if (!maingui_id) return; //Нечего считать \ 00000004 ........ LDR R5,??DataTable85 ;; icons \ 00000008 0140A0E1 MOV R4,R1 \ 0000000C 041395E5 LDR R1,[R5, #+772] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 7080BD08 POPEQ {R4-R6,PC} 2718 if (req==NULL) \ 00000018 000050E3 CMP R0,#+0 2719 { 2720 j=0; \ 0000001C 0060A003 MOVEQ R6,#+0 \ 00000020 0100000A BEQ ??RecountMenu_0 2721 } 2722 else 2723 { 2724 j=FindContactByContact(req); \ 00000024 ........ _BLF FindContactByContact,??FindContactByContact??rA \ 00000028 0060A0E1 MOV R6,R0 2725 } 2726 i=CountContacts(); \ ??RecountMenu_0: \ 0000002C ........ _BLF CountContacts,??CountContacts??rA 2727 if (j>=i) j=i-1; \ 00000030 000056E1 CMP R6,R0 \ 00000034 016040A2 SUBGE R6,R0,#+1 2728 if (j<0) j=0; \ 00000038 000056E3 CMP R6,#+0 \ 0000003C 0060A043 MOVMI R6,#+0 2729 if(needfocus) curpos=j; \ 00000040 000054E3 CMP R4,#+0 \ 00000044 CC638515 STRNE R6,[R5, #+972] 2730 // if (IsGuiOnTop(contactlist_menu_id)) 2731 SMART_REDRAW();//DirectRedrawGUI_ID(contactlist_menu_id);//contactlist_menu_id \ 00000048 ........ BL SMART_REDRAW 2732 } \ 0000004C 7080BDE8 POP {R4-R6,PC} ;; return 2733 2734 \ In segment CODE, align 4, keep-with-next 2735 void DrawStr(int x,int y,char*s,char *color,int font,int align) 2736 { \ DrawStr: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 18709DE5 LDR R7,[SP, #+24] \ 0000000C 1C809DE5 LDR R8,[SP, #+28] \ 00000010 0150A0E1 MOV R5,R1 2737 SetFontColor(color,transparent,0); \ 00000014 ........ LDR R1,??DataTable84 ;; icons + 7156 \ 00000018 0260A0E1 MOV R6,R2 \ 0000001C 0300A0E1 MOV R0,R3 \ 00000020 0020A0E3 MOV R2,#+0 \ 00000024 ........ _BLF SetFontColor,??SetFontColor??rA 2738 PrintField(x,y,s,align,font,1);//capacity in header \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 01002DE9 PUSH {R0} \ 00000030 80002DE9 PUSH {R7} \ 00000034 0830A0E1 MOV R3,R8 \ 00000038 0620A0E1 MOV R2,R6 \ 0000003C 0510A0E1 MOV R1,R5 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 ........ _BLF PrintField,??PrintField??rA 2739 //void PrintText( int x, int y, char *str, int align, int font, int space, int lineSpace, int isScroll, short fixSize, int maxLen); 2740 } \ 00000048 F381BDE8 POP {R0,R1,R4-R8,PC} ;; return 2741 \ In segment CODE, align 4, keep-with-next 2742 void DrawText(int x,int y,int x2,char*s,char *color,int font,int align,int isScroll) 2743 { \ DrawText: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 24809DE5 LDR R8,[SP, #+36] \ 00000008 28909DE5 LDR R9,[SP, #+40] \ 0000000C 2CA09DE5 LDR R10,[SP, #+44] \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 20009DE5 LDR R0,[SP, #+32] \ 00000018 0150A0E1 MOV R5,R1 2744 SetFontColor(color,transparent,0); \ 0000001C ........ LDR R1,??DataTable84 ;; icons + 7156 \ 00000020 0260A0E1 MOV R6,R2 \ 00000024 0370A0E1 MOV R7,R3 \ 00000028 0020A0E3 MOV R2,#+0 \ 0000002C ........ _BLF SetFontColor,??SetFontColor??rA 2745 // SetScrollEdgeDelay(0); 2746 PrintText(x,y,s,align,font,1,350,isScroll,0,x2-x); \ 00000030 040046E0 SUB R0,R6,R4 \ 00000034 01002DE9 PUSH {R0} \ 00000038 0930A0E1 MOV R3,R9 \ 0000003C 0720A0E1 MOV R2,R7 \ 00000040 0510A0E1 MOV R1,R5 \ 00000044 0000A0E3 MOV R0,#+0 \ 00000048 01002DE9 PUSH {R0} \ 0000004C 00042DE9 PUSH {R10} \ 00000050 5E00A0E3 MOV R0,#+94 \ 00000054 400F80E3 ORR R0,R0,#0x100 \ 00000058 01002DE9 PUSH {R0} \ 0000005C 0100A0E3 MOV R0,#+1 \ 00000060 01002DE9 PUSH {R0} \ 00000064 00012DE9 PUSH {R8} \ 00000068 0400A0E1 MOV R0,R4 \ 0000006C ........ _BLF PrintText,??PrintText??rA 2747 //int x, int y, char *str, int align, int font, int space, int lineSpace, int isScroll, short fixSize, int maxLen); 2748 } \ 00000070 18D08DE2 ADD SP,SP,#+24 \ 00000074 F087BDE8 POP {R4-R10,PC} ;; return 2749 \ In segment CODE, align 4, keep-with-next 2750 void DrawSoftKeys(char *right,char *left) 2751 { \ DrawSoftKeys: \ 00000000 F34F2DE9 PUSH {R0,R1,R4-R11,LR} \ 00000004 0CD04DE2 SUB SP,SP,#+12 2752 TTime t; 2753 char *s=malloc(32); 2754 int FntH=FontH(clfont); 2755 int scr_w=ScreenW()-1; 2756 int scr_h=ScreenH()-1; 2757 char clrRed[]={0xFF,0x00,0x00,0x15}; 2758 LockSched(); 2759 DrawRoundedFrame(0,ScreenH()-1-FntH-2,ScreenW()-1,ScreenH()-1,0,0,0,clrBlack,clrBlack); \ 00000008 ........ LDR R8,??DataTable85 ;; icons \ 0000000C 2000A0E3 MOV R0,#+32 \ 00000010 140000EF SWI +20 \ 00000014 0040A0E1 MOV R4,R0 \ 00000018 6C00A0E3 MOV R0,#+108 \ 0000001C ........ _BLF FontH,??FontH??rA \ 00000020 0050A0E1 MOV R5,R0 \ 00000024 888100EF SWI +33160 \ 00000028 016040E2 SUB R6,R0,#+1 \ 0000002C 898100EF SWI +33161 \ 00000030 ........ LDR R1,??DataTable86 ;; `?` \ 00000034 017040E2 SUB R7,R0,#+1 \ 00000038 002091E5 LDR R2,[R1, #0] \ 0000003C 0D00A0E1 MOV R0,SP \ 00000040 002080E5 STR R2,[R0, #+0] \ 00000044 460100EF SWI +326 \ 00000048 898100EF SWI +33161 \ 0000004C 0090A0E1 MOV R9,R0 \ 00000050 888100EF SWI +33160 \ 00000054 00A0A0E1 MOV R10,R0 \ 00000058 898100EF SWI +33161 \ 0000005C E810A0E3 MOV R1,#+232 \ 00000060 6C1D81E3 ORR R1,R1,#0x1B00 \ 00000064 081081E0 ADD R1,R1,R8 \ 00000068 0120A0E1 MOV R2,R1 \ 0000006C 04002DE9 PUSH {R2} \ 00000070 02002DE9 PUSH {R1} \ 00000074 013049E2 SUB R3,R9,#+1 \ 00000078 01204AE2 SUB R2,R10,#+1 \ 0000007C 010040E2 SUB R0,R0,#+1 \ 00000080 0010A0E3 MOV R1,#+0 \ 00000084 02002DE9 PUSH {R1} \ 00000088 02002DE9 PUSH {R1} \ 0000008C 02002DE9 PUSH {R1} \ 00000090 050040E0 SUB R0,R0,R5 \ 00000094 021040E2 SUB R1,R0,#+2 \ 00000098 0000A0E3 MOV R0,#+0 \ 0000009C 500100EF SWI +336 2760 for(int i=FontH(clfont);i>0;i-=2) \ 000000A0 6C00A0E3 MOV R0,#+108 \ 000000A4 ........ _BLF FontH,??FontH??rA \ 000000A8 0090A0E1 MOV R9,R0 \ 000000AC 010059E3 CMP R9,#+1 \ 000000B0 14D08DE2 ADD SP,SP,#+20 \ 000000B4 100000BA BLT ??DrawSoftKeys_0 \ 000000B8 05A047E0 SUB R10,R7,R5 \ 000000BC 02B04AE2 SUB R11,R10,#+2 2761 { 2762 DrawRoundedFrame(0,scr_h-FntH-2,scr_w,scr_h-FntH+i,0,0,0,clrRed,clrRed); \ ??DrawSoftKeys_1: \ 000000C0 0D00A0E1 MOV R0,SP \ 000000C4 01002DE9 PUSH {R0} \ 000000C8 01002DE9 PUSH {R0} \ 000000CC 0A3089E0 ADD R3,R9,R10 \ 000000D0 0620A0E1 MOV R2,R6 \ 000000D4 0B10A0E1 MOV R1,R11 \ 000000D8 0000A0E3 MOV R0,#+0 \ 000000DC 01002DE9 PUSH {R0} \ 000000E0 01002DE9 PUSH {R0} \ 000000E4 01002DE9 PUSH {R0} 2763 } \ 000000E8 029049E2 SUB R9,R9,#+2 \ 000000EC 500100EF SWI +336 \ 000000F0 010059E3 CMP R9,#+1 \ 000000F4 14D08DE2 ADD SP,SP,#+20 \ 000000F8 F0FFFFAA BGE ??DrawSoftKeys_1 2764 // DrawRoundedFrame(0,scr_h-FontH(font)-2,ScreenW()-1,ScreenH()-1,0,0,0,clrRed,clrRed); 2765 // SetFontColor(clrWhite,transparent,0); 2766 //PrintField(2,scr_h-1-FntH,right,0,clfont,1); 2767 DrawStr(2,scr_h-1-FntH,right,clrWhite,clfont,0); \ ??DrawSoftKeys_0: \ 000000FC 0020A0E3 MOV R2,#+0 \ 00000100 F400A0E3 MOV R0,#+244 \ 00000104 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000108 081080E0 ADD R1,R0,R8 \ 0000010C 080040E2 SUB R0,R0,#+8 \ 00000110 080080E0 ADD R0,R0,R8 \ 00000114 ........ _BLF SetFontColor,??SetFontColor??rA \ 00000118 010047E2 SUB R0,R7,#+1 \ 0000011C 055040E0 SUB R5,R0,R5 \ 00000120 0100A0E3 MOV R0,#+1 \ 00000124 01002DE9 PUSH {R0} \ 00000128 0030A0E3 MOV R3,#+0 \ 0000012C 0510A0E1 MOV R1,R5 \ 00000130 6C00A0E3 MOV R0,#+108 \ 00000134 01002DE9 PUSH {R0} \ 00000138 14209DE5 LDR R2,[SP, #+20] \ 0000013C 0200A0E3 MOV R0,#+2 \ 00000140 ........ _BLF PrintField,??PrintField??rA 2768 // DrawStr(scr_w,scr_h-1-FntH,left,clrWhite,2); 2769 PrintField(scr_w,scr_h-1-FntH,left,2,clfont,1); \ 00000144 0100A0E3 MOV R0,#+1 \ 00000148 01002DE9 PUSH {R0} \ 0000014C 0230A0E3 MOV R3,#+2 \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 6C00A0E3 MOV R0,#+108 \ 00000158 01002DE9 PUSH {R0} \ 0000015C 20209DE5 LDR R2,[SP, #+32] \ 00000160 0600A0E1 MOV R0,R6 \ 00000164 ........ _BLF PrintField,??PrintField??rA 2770 GetDateTime(0,&t); \ 00000168 14108DE2 ADD R1,SP,#+20 \ 0000016C 0000A0E3 MOV R0,#+0 \ 00000170 B40000EF SWI +180 2771 sprintf(s,"%02d:%02d",t.hour,t.min); \ 00000174 1530DDE5 LDRB R3,[SP, #+21] \ 00000178 1420DDE5 LDRB R2,[SP, #+20] \ 0000017C 40109FE5 LDR R1,??DrawSoftKeys_2 ;; `?` + 4 \ 00000180 0400A0E1 MOV R0,R4 \ 00000184 160000EF SWI +22 2772 PrintField(scr_w/2,scr_h-1-FntH,s,1,clfont,1); \ 00000188 0100A0E3 MOV R0,#+1 \ 0000018C 01002DE9 PUSH {R0} \ 00000190 0130A0E3 MOV R3,#+1 \ 00000194 0420A0E1 MOV R2,R4 \ 00000198 0510A0E1 MOV R1,R5 \ 0000019C 6C00A0E3 MOV R0,#+108 \ 000001A0 01002DE9 PUSH {R0} \ 000001A4 A60F86E0 ADD R0,R6,R6, LSR #+31 \ 000001A8 C000A0E1 ASR R0,R0,#+1 \ 000001AC ........ _BLF PrintField,??PrintField??rA 2773 UnlockSched(); \ 000001B0 470100EF SWI +327 2774 2775 mfree(s); \ 000001B4 0400A0E1 MOV R0,R4 \ 000001B8 150000EF SWI +21 2776 } \ 000001BC 2CD08DE2 ADD SP,SP,#+44 \ 000001C0 F08FBDE8 POP {R4-R11,PC} ;; return \ ??DrawSoftKeys_2: \ 000001C4 ........ DC32 `?` + 4 2777 2778 extern DYNPNGICONLIST *GetXSByItem(int curitem); 2779 \ In segment CODE, align 4, keep-with-next 2780 void DrawHeader() 2781 { \ DrawHeader: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2782 int scr_w=ScreenW()-1; 2783 int scr_h=ScreenH()-1; 2784 char *s=malloc(128); 2785 char clrRed[]={0xFF,0x00,0x00,0x15}; \ 00000004 28659FE5 LDR R6,??DrawHeader_0+0x10 ;; `?_1` 2786 // char clrRed[]={0xFF,0x00,0x00,0x64}; 2787 LockSched(); 2788 // DrawRoundedFrame(0,0,scr_w,FontH(font)+1,0,0,0,clrRed,clrRed); 2789 SetFontColor(clrWhite,transparent,0); \ 00000008 ........ LDR R7,??DataTable90 ;; icons \ 0000000C 30D04DE2 SUB SP,SP,#+48 \ 00000010 888100EF SWI +33160 \ 00000014 014040E2 SUB R4,R0,#+1 \ 00000018 898100EF SWI +33161 \ 0000001C 8000A0E3 MOV R0,#+128 \ 00000020 140000EF SWI +20 \ 00000024 001096E5 LDR R1,[R6, #0] \ 00000028 0050A0E1 MOV R5,R0 \ 0000002C 0D00A0E1 MOV R0,SP \ 00000030 001080E5 STR R1,[R0, #+0] \ 00000034 460100EF SWI +326 \ 00000038 EC00A0E3 MOV R0,#+236 \ 0000003C 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000040 078080E0 ADD R8,R0,R7 \ 00000044 080080E2 ADD R0,R0,#+8 \ 00000048 079080E0 ADD R9,R0,R7 \ 0000004C 0020A0E3 MOV R2,#+0 \ 00000050 0910A0E1 MOV R1,R9 \ 00000054 0800A0E1 MOV R0,R8 \ 00000058 ........ _BLF SetFontColor,??SetFontColor??rA 2790 DrawRoundedFrame(0,0,scr_w,FontH(clfont)+2,0,0,0,clrBlack,clrBlack); \ 0000005C 6C00A0E3 MOV R0,#+108 \ 00000060 ........ _BLF FontH,??FontH??rA \ 00000064 E810A0E3 MOV R1,#+232 \ 00000068 6C1D81E3 ORR R1,R1,#0x1B00 \ 0000006C 071081E0 ADD R1,R1,R7 \ 00000070 0120A0E1 MOV R2,R1 \ 00000074 04002DE9 PUSH {R2} \ 00000078 02002DE9 PUSH {R1} \ 0000007C 023080E2 ADD R3,R0,#+2 \ 00000080 0420A0E1 MOV R2,R4 \ 00000084 0000A0E3 MOV R0,#+0 \ 00000088 0010A0E3 MOV R1,#+0 \ 0000008C 02002DE9 PUSH {R1} \ 00000090 02002DE9 PUSH {R1} \ 00000094 02002DE9 PUSH {R1} \ 00000098 500100EF SWI +336 2791 2792 for(int i=FontH(clfont);i>0;i-=2) \ 0000009C 6C00A0E3 MOV R0,#+108 \ 000000A0 ........ _BLF FontH,??FontH??rA \ 000000A4 00A0A0E1 MOV R10,R0 \ 000000A8 01005AE3 CMP R10,#+1 \ 000000AC 14D08DE2 ADD SP,SP,#+20 \ 000000B0 110000BA BLT ??DrawHeader_1 2793 { 2794 DrawRoundedFrame(0,0,scr_w,FontH(clfont)-i+2,0,0,0,clrRed,clrRed); \ ??DrawHeader_2: \ 000000B4 6C00A0E3 MOV R0,#+108 \ 000000B8 ........ _BLF FontH,??FontH??rA \ 000000BC 0D10A0E1 MOV R1,SP \ 000000C0 02002DE9 PUSH {R1} \ 000000C4 02002DE9 PUSH {R1} \ 000000C8 0A0040E0 SUB R0,R0,R10 \ 000000CC 023080E2 ADD R3,R0,#+2 \ 000000D0 0420A0E1 MOV R2,R4 \ 000000D4 0010A0E3 MOV R1,#+0 \ 000000D8 02002DE9 PUSH {R1} \ 000000DC 02002DE9 PUSH {R1} \ 000000E0 02002DE9 PUSH {R1} \ 000000E4 0000A0E3 MOV R0,#+0 2795 } \ 000000E8 02A04AE2 SUB R10,R10,#+2 \ 000000EC 500100EF SWI +336 \ 000000F0 01005AE3 CMP R10,#+1 \ 000000F4 14D08DE2 ADD SP,SP,#+20 \ 000000F8 EDFFFFAA BGE ??DrawHeader_2 2796 2797 int x=1; 2798 int icon; 2799 if(total_unread) icon = IS_MSG; \ ??DrawHeader_1: \ 000000FC A00397E5 LDR R0,[R7, #+928] \ 00000100 000050E3 CMP R0,#+0 \ 00000104 0D00A013 MOVNE R0,#+13 \ 00000108 0500001A BNE ??DrawHeader_3 2800 else 2801 { 2802 switch(connect_state) \ 0000010C 7C0397E5 LDR R0,[R7, #+892] \ 00000110 000050E3 CMP R0,#+0 \ 00000114 0200000A BEQ ??DrawHeader_3 \ 00000118 030050E2 SUBS R0,R0,#+3 2803 { 2804 case 0: icon=IS_OFFLINE; break; 2805 case 3: icon=CurrentStatus; break; \ 0000011C 18039705 LDREQ R0,[R7, #+792] 2806 default: icon=IS_UNKNOWN; break; \ 00000120 0E00A013 MOVNE R0,#+14 2807 } 2808 } 2809 2810 // DrawImg(x,YDISP+1,NumStatusToIconBar+icon);//status 2811 DrwImage(icons[icon],x,YDISP+1,0,0); \ ??DrawHeader_3: \ 00000124 00A187E0 ADD R10,R7,R0, LSL #+2 \ 00000128 0000A0E3 MOV R0,#+0 \ 0000012C 01002DE9 PUSH {R0} \ 00000130 0030A0E3 MOV R3,#+0 \ 00000134 00009AE5 LDR R0,[R10, #+0] \ 00000138 0120A0E3 MOV R2,#+1 \ 0000013C 0210A0E1 MOV R1,R2 \ 00000140 ........ BL DrwImage 2812 x+=icons[icon]->w+2;//GetImgWidth(NumStatusToIconBar+icon)+2;// + смещение по х \ 00000144 00009AE5 LDR R0,[R10, #+0] 2813 2814 // SetFontColor(clrWhite,transparent,0); 2815 if(total_unread) \ 00000148 A02397E5 LDR R2,[R7, #+928] \ 0000014C B000D0E1 LDRH R0,[R0, #+0] \ 00000150 000052E3 CMP R2,#+0 \ 00000154 04D08DE2 ADD SP,SP,#+4 \ 00000158 03A080E2 ADD R10,R0,#+3 \ 0000015C 1600000A BEQ ??DrawHeader_4 2816 { 2817 sprintf(s,"%d/%d",total_unread,total_unread2); \ 00000160 FC3297E5 LDR R3,[R7, #+764] \ 00000164 081086E2 ADD R1,R6,#+8 \ 00000168 0500A0E1 MOV R0,R5 \ 0000016C 160000EF SWI +22 2818 // PrintField(x,YDISP+1,s,0,clfont,1); 2819 DrawStr(x,YDISP+1,s,clrWhite,clfont,0); \ 00000170 0020A0E3 MOV R2,#+0 \ 00000174 0910A0E1 MOV R1,R9 \ 00000178 0800A0E1 MOV R0,R8 \ 0000017C ........ _BLF SetFontColor,??SetFontColor??rA \ 00000180 0100A0E3 MOV R0,#+1 \ 00000184 01002DE9 PUSH {R0} \ 00000188 0030A0E3 MOV R3,#+0 \ 0000018C 0520A0E1 MOV R2,R5 \ 00000190 0110A0E3 MOV R1,#+1 \ 00000194 6C00A0E3 MOV R0,#+108 \ 00000198 01002DE9 PUSH {R0} \ 0000019C 0A00A0E1 MOV R0,R10 \ 000001A0 ........ _BLF PrintField,??PrintField??rA 2820 x+=GetWidth(x,YDISP+1)+1; \ 000001A4 0110A0E3 MOV R1,#+1 \ 000001A8 0A00A0E1 MOV R0,R10 \ 000001AC ........ _BLF GetWidth,??GetWidth??rA \ 000001B0 010080E2 ADD R0,R0,#+1 \ 000001B4 0AA080E0 ADD R10,R0,R10 \ 000001B8 08D08DE2 ADD SP,SP,#+8 2821 } 2822 2823 if(CurrentXStatus!=0)//если есть хстатус \ ??DrawHeader_4: \ 000001BC 1C0397E5 LDR R0,[R7, #+796] \ 000001C0 000050E3 CMP R0,#+0 \ 000001C4 0E00000A BEQ ??DrawHeader_5 2824 { 2825 DYNPNGICONLIST *xs=GetXSByItem(CurrentXStatus); \ 000001C8 ........ _BLF GetXSByItem,??GetXSByItem??rA \ 000001CC 00B0A0E1 MOV R11,R0 2826 DrwImage(xs->img,x,YDISP+1,0,0); \ 000001D0 0000A0E3 MOV R0,#+0 \ 000001D4 01002DE9 PUSH {R0} \ 000001D8 0030A0E3 MOV R3,#+0 \ 000001DC 0120A0E3 MOV R2,#+1 \ 000001E0 08009BE5 LDR R0,[R11, #+8] \ 000001E4 0A10A0E1 MOV R1,R10 \ 000001E8 ........ BL DrwImage 2827 x+=xs->img->w+1; \ 000001EC 08009BE5 LDR R0,[R11, #+8] \ 000001F0 B000D0E1 LDRH R0,[R0, #+0] \ 000001F4 04D08DE2 ADD SP,SP,#+4 \ 000001F8 010080E2 ADD R0,R0,#+1 \ 000001FC 0AA080E0 ADD R10,R0,R10 2828 //DrawImg(x,YDISP+1,NumXStatusToIconBar+CurrentXStatus);//xstatus 2829 //x+=GetImgWidth(NumXStatusToIconBar+CurrentXStatus)+2;// + смещение по х 2830 } 2831 2832 int priv=0; \ 00000200 0000A0E3 MOV R0,#+0 2833 char A_s[]="[A [%s] ]"; \ ??DrawHeader_5: \ 00000204 2C239FE5 LDR R2,??DrawHeader_0+0x14 ;; `?` \ 00000208 04108DE2 ADD R1,SP,#+4 \ 0000020C 081892E8 LDM R2,{R3,R11,R12} \ 00000210 081881E8 STM R1,{R3,R11,R12} 2834 char t[32]; 2835 2836 switch(CurrentPrivateStatus) \ 00000214 681397E5 LDR R1,[R7, #+872] \ 00000218 011051E2 SUBS R1,R1,#+1 \ 0000021C 0600000A BEQ ??DrawHeader_6 \ 00000220 011051E2 SUBS R1,R1,#+1 \ 00000224 0600000A BEQ ??DrawHeader_7 \ 00000228 011051E2 SUBS R1,R1,#+1 \ 0000022C 0600000A BEQ ??DrawHeader_8 \ 00000230 011051E2 SUBS R1,R1,#+1 \ 00000234 0100A003 MOVEQ R0,#+1 \ 00000238 040000EA B ??DrawHeader_9 2837 { 2838 case 0: priv=0; break;//ICON_ALL_CAN_SEE; 2839 case 1: priv=4; break;//ICON_NOBODY_CAN_SEE; \ ??DrawHeader_6: \ 0000023C 0400A0E3 MOV R0,#+4 \ 00000240 020000EA B ??DrawHeader_9 2840 case 2: priv=3; break;//ICON_VISLIST_CAN_SEE; \ ??DrawHeader_7: \ 00000244 0300A0E3 MOV R0,#+3 \ 00000248 000000EA B ??DrawHeader_9 2841 case 3: priv=2; break;//ICON_INVISLIST_CANNOT_SEE; \ ??DrawHeader_8: \ 0000024C 0200A0E3 MOV R0,#+2 2842 case 4: priv=1; break;//ICON_CONTACTLIST_CAN_SEE; 2843 //default : priv=ICON_HEAD; break; 2844 } 2845 2846 // icon=8030+priv; 2847 //DrawImg(x,YDISP+1,icon); 2848 // x+=GetImgWidth(icon); 2849 DrwImage(icons[TOTAL_ICONS-(5-priv)],x,YDISP+1,0,0); \ ??DrawHeader_9: \ 00000250 00B187E0 ADD R11,R7,R0, LSL #+2 \ 00000254 0000A0E3 MOV R0,#+0 \ 00000258 01002DE9 PUSH {R0} \ 0000025C 0030A0E3 MOV R3,#+0 \ 00000260 0120A0E3 MOV R2,#+1 \ 00000264 5C009BE5 LDR R0,[R11, #+92] \ 00000268 0A10A0E1 MOV R1,R10 \ 0000026C ........ BL DrwImage 2850 x+=icons[TOTAL_ICONS-(5-priv)]->w; \ 00000270 5C009BE5 LDR R0,[R11, #+92] \ 00000274 B000D0E1 LDRH R0,[R0, #+0] \ 00000278 0AB080E0 ADD R11,R0,R10 2851 int cap; 2852 int x2=scr_w; 2853 //x2=scr_w-GetWidth(scr_w,YDISP+1); 2854 if(on_off_timer > 0 && strlen(on_off_buf)!=0)//если кто то подключился/отключился \ 0000027C B80397E5 LDR R0,[R7, #+952] \ 00000280 04D08DE2 ADD SP,SP,#+4 \ 00000284 010050E3 CMP R0,#+1 \ 00000288 210000BA BLT ??DrawHeader_10 \ 0000028C E800A0E3 MOV R0,#+232 \ 00000290 680D80E3 ORR R0,R0,#0x1A00 \ 00000294 07A080E0 ADD R10,R0,R7 \ 00000298 0A00A0E1 MOV R0,R10 \ 0000029C 1B0000EF SWI +27 \ 000002A0 000050E3 CMP R0,#+0 \ 000002A4 1A00000A BEQ ??DrawHeader_10 2855 { 2856 SetScrollEdgeDelay(1); \ 000002A8 0100A0E3 MOV R0,#+1 \ 000002AC ........ _BLF SetScrollEdgeDelay,??SetScrollEdgeDelay??rA 2857 DrawText(x+2,YDISP+1,scr_w,on_off_buf,clrWhite,clfont,0,1); \ 000002B0 02608BE2 ADD R6,R11,#+2 \ 000002B4 0020A0E3 MOV R2,#+0 \ 000002B8 0910A0E1 MOV R1,R9 \ 000002BC 0800A0E1 MOV R0,R8 \ 000002C0 ........ _BLF SetFontColor,??SetFontColor??rA \ 000002C4 060044E0 SUB R0,R4,R6 \ 000002C8 01002DE9 PUSH {R0} \ 000002CC 0030A0E3 MOV R3,#+0 \ 000002D0 0A20A0E1 MOV R2,R10 \ 000002D4 0110A0E3 MOV R1,#+1 \ 000002D8 0000A0E3 MOV R0,#+0 \ 000002DC 01002DE9 PUSH {R0} \ 000002E0 0100A0E3 MOV R0,#+1 \ 000002E4 01002DE9 PUSH {R0} \ 000002E8 5E00A0E3 MOV R0,#+94 \ 000002EC 400F80E3 ORR R0,R0,#0x100 \ 000002F0 01002DE9 PUSH {R0} \ 000002F4 0100A0E3 MOV R0,#+1 \ 000002F8 01002DE9 PUSH {R0} \ 000002FC 6C00A0E3 MOV R0,#+108 \ 00000300 01002DE9 PUSH {R0} \ 00000304 0600A0E1 MOV R0,R6 \ 00000308 ........ _BLF PrintText,??PrintText??rA \ 0000030C 18D08DE2 ADD SP,SP,#+24 \ 00000310 7E0000EA B ??DrawHeader_11 2858 } 2859 else 2860 if(strlen(ContactT9Key)) \ ??DrawHeader_10: \ 00000314 D800A0E3 MOV R0,#+216 \ 00000318 680D80E3 ORR R0,R0,#0x1A00 \ 0000031C 078080E0 ADD R8,R0,R7 \ 00000320 559EA0E3 MOV R9,#+1360 \ 00000324 070089E0 ADD R0,R9,R7 \ 00000328 1B0000EF SWI +27 \ 0000032C 000050E3 CMP R0,#+0 \ 00000330 1100000A BEQ ??DrawHeader_12 2861 { 2862 sprintf(s,key_clm_hdr_text); \ 00000334 201086E2 ADD R1,R6,#+32 \ 00000338 0500A0E1 MOV R0,R5 \ 0000033C 160000EF SWI +22 2863 strcat(s,ContactT9Key); \ 00000340 071089E0 ADD R1,R9,R7 \ 00000344 0500A0E1 MOV R0,R5 \ 00000348 170000EF SWI +23 2864 // strcat(s,"|"); 2865 strcpy(clmenu_sk_r,key_clmenu_sk_r); \ 0000034C 041086E2 ADD R1,R6,#+4 \ 00000350 0800A0E1 MOV R0,R8 \ 00000354 1A0000EF SWI +26 2866 PrintField(scr_w,YDISP+1,s,2,clfont,1); \ 00000358 0100A0E3 MOV R0,#+1 \ 0000035C 01002DE9 PUSH {R0} \ 00000360 0230A0E3 MOV R3,#+2 \ 00000364 0520A0E1 MOV R2,R5 \ 00000368 0110A0E3 MOV R1,#+1 \ 0000036C 6C00A0E3 MOV R0,#+108 \ 00000370 01002DE9 PUSH {R0} \ 00000374 0400A0E1 MOV R0,R4 \ 00000378 620000EA B ??DrawHeader_13 2867 } 2868 else 2869 { 2870 x2=scr_w; 2871 cap=*RamCap(); \ ??DrawHeader_12: \ 0000037C C88000EF SWI +32968 \ 00000380 B020D0E1 LDRH R2,[R0, #+0] 2872 sprintf(s,"%d%%",cap); \ 00000384 101086E2 ADD R1,R6,#+16 \ 00000388 0500A0E1 MOV R0,R5 \ 0000038C 160000EF SWI +22 2873 PrintField(scr_w,YDISP+1,s,2,clfont,1);//capacity in header \ 00000390 0100A0E3 MOV R0,#+1 \ 00000394 01002DE9 PUSH {R0} \ 00000398 0230A0E3 MOV R3,#+2 \ 0000039C 0520A0E1 MOV R2,R5 \ 000003A0 0110A0E3 MOV R1,#+1 \ 000003A4 6C00A0E3 MOV R0,#+108 \ 000003A8 01002DE9 PUSH {R0} \ 000003AC 0400A0E1 MOV R0,R4 \ 000003B0 ........ _BLF PrintField,??PrintField??rA 2874 x2=scr_w-GetWidth(scr_w,YDISP+1); \ 000003B4 0110A0E3 MOV R1,#+1 \ 000003B8 0400A0E1 MOV R0,R4 \ 000003BC ........ _BLF GetWidth,??GetWidth??rA \ 000003C0 004044E0 SUB R4,R4,R0 2875 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ 000003C4 2C1086E2 ADD R1,R6,#+44 \ 000003C8 0800A0E1 MOV R0,R8 \ 000003CC 1A0000EF SWI +26 2876 Get_Online_total(); \ 000003D0 ........ BL Get_Online_total 2877 sprintf(s,"[%d/%d]",kopa_kontaktu,kopa_online); \ 000003D4 BC3397E5 LDR R3,[R7, #+956] \ 000003D8 C02397E5 LDR R2,[R7, #+960] \ 000003DC 181086E2 ADD R1,R6,#+24 \ 000003E0 0500A0E1 MOV R0,R5 \ 000003E4 160000EF SWI +22 2878 PrintField(x2-2,YDISP+1,s,2,clfont,1); \ 000003E8 0100A0E3 MOV R0,#+1 \ 000003EC 01002DE9 PUSH {R0} \ 000003F0 026044E2 SUB R6,R4,#+2 \ 000003F4 0230A0E3 MOV R3,#+2 \ 000003F8 0520A0E1 MOV R2,R5 \ 000003FC 6C00A0E3 MOV R0,#+108 \ 00000400 01002DE9 PUSH {R0} \ 00000404 0110A0E3 MOV R1,#+1 \ 00000408 0600A0E1 MOV R0,R6 \ 0000040C ........ _BLF PrintField,??PrintField??rA 2879 x2-=GetWidth(x2-2,YDISP+1); \ 00000410 0110A0E3 MOV R1,#+1 \ 00000414 0600A0E1 MOV R0,R6 \ 00000418 ........ _BLF GetWidth,??GetWidth??rA \ 0000041C 004044E0 SUB R4,R4,R0 2880 sprintf(s,""); \ 00000420 3F1F8FE2 ADR R1,??DrawHeader_0 ;; "" \ 00000424 0500A0E1 MOV R0,R5 \ 00000428 160000EF SWI +22 2881 if(away_m && isShowA) { sprintf(t,A_s,away_msg_time_dace); strcat(s,t); } \ 0000042C 2C0397E5 LDR R0,[R7, #+812] \ 00000430 10D08DE2 ADD SP,SP,#+16 \ 00000434 000050E3 CMP R0,#+0 \ 00000438 0C00000A BEQ ??DrawHeader_14 \ 0000043C F8009FE5 LDR R0,??DrawHeader_0+0x18 ;; isShowA \ 00000440 000090E5 LDR R0,[R0, #+0] \ 00000444 000050E3 CMP R0,#+0 \ 00000448 0800000A BEQ ??DrawHeader_14 \ 0000044C 9800A0E3 MOV R0,#+152 \ 00000450 600D80E3 ORR R0,R0,#0x1800 \ 00000454 072080E0 ADD R2,R0,R7 \ 00000458 04108DE2 ADD R1,SP,#+4 \ 0000045C 10008DE2 ADD R0,SP,#+16 \ 00000460 160000EF SWI +22 \ 00000464 10108DE2 ADD R1,SP,#+16 \ 00000468 0500A0E1 MOV R0,R5 \ 0000046C 170000EF SWI +23 2882 if(Is_Vibra_Enabled && isShowV) strcat(s,"[V]") ; \ ??DrawHeader_14: \ 00000470 100397E5 LDR R0,[R7, #+784] \ 00000474 000050E3 CMP R0,#+0 \ 00000478 0600000A BEQ ??DrawHeader_15 \ 0000047C BC009FE5 LDR R0,??DrawHeader_0+0x1C ;; isShowV \ 00000480 000090E5 LDR R0,[R0, #+0] \ 00000484 000050E3 CMP R0,#+0 \ 00000488 0200000A BEQ ??DrawHeader_15 \ 0000048C 251F8FE2 ADR R1,??DrawHeader_0+0x4 ;; "[V]" \ 00000490 0500A0E1 MOV R0,R5 \ 00000494 170000EF SWI +23 2883 if(Is_Sounds_Enabled && isShowS) strcat(s,"[S]") ; \ ??DrawHeader_15: \ 00000498 5C0397E5 LDR R0,[R7, #+860] \ 0000049C 000050E3 CMP R0,#+0 \ 000004A0 0600000A BEQ ??DrawHeader_16 \ 000004A4 98009FE5 LDR R0,??DrawHeader_0+0x20 ;; isShowS \ 000004A8 000090E5 LDR R0,[R0, #+0] \ 000004AC 000050E3 CMP R0,#+0 \ 000004B0 0200000A BEQ ??DrawHeader_16 \ 000004B4 1C1F8FE2 ADR R1,??DrawHeader_0+0x8 ;; "[S]" \ 000004B8 0500A0E1 MOV R0,R5 \ 000004BC 170000EF SWI +23 2884 if(Is_Double_Vibra_On && isShowR) strcat(s,"[R]") ; \ ??DrawHeader_16: \ 000004C0 F80297E5 LDR R0,[R7, #+760] \ 000004C4 000050E3 CMP R0,#+0 \ 000004C8 0600000A BEQ ??DrawHeader_17 \ 000004CC 74009FE5 LDR R0,??DrawHeader_0+0x24 ;; isShowR \ 000004D0 000090E5 LDR R0,[R0, #+0] \ 000004D4 000050E3 CMP R0,#+0 \ 000004D8 0200000A BEQ ??DrawHeader_17 \ 000004DC 131F8FE2 ADR R1,??DrawHeader_0+0xC ;; "[R]" \ 000004E0 0500A0E1 MOV R0,R5 \ 000004E4 170000EF SWI +23 2885 PrintField(x2-2,YDISP+1,s,2,clfont,1); \ ??DrawHeader_17: \ 000004E8 0100A0E3 MOV R0,#+1 \ 000004EC 01002DE9 PUSH {R0} \ 000004F0 0230A0E3 MOV R3,#+2 \ 000004F4 0520A0E1 MOV R2,R5 \ 000004F8 0110A0E3 MOV R1,#+1 \ 000004FC 6C00A0E3 MOV R0,#+108 \ 00000500 01002DE9 PUSH {R0} \ 00000504 020044E2 SUB R0,R4,#+2 \ ??DrawHeader_13: \ 00000508 ........ _BLF PrintField,??PrintField??rA \ 0000050C 08D08DE2 ADD SP,SP,#+8 2886 } 2887 /* x2=scr_w-strlen(s)-2; 2888 RAMNET *rn=RamNet(); 2889 sprintf(s,"%d db",rn->power); 2890 x2-=strlen(s); 2891 PrintField(x2,YDISP+1,s,0,font,1);//capacity in header */ 2892 UnlockSched(); \ ??DrawHeader_11: \ 00000510 470100EF SWI +327 2893 mfree(s); \ 00000514 0500A0E1 MOV R0,R5 \ 00000518 150000EF SWI +21 2894 } \ 0000051C 30D08DE2 ADD SP,SP,#+48 \ 00000520 F08FBDE8 POP {R4-R11,PC} ;; return \ ??DrawHeader_0: \ 00000524 00000000 DC8 "",+0,+0,+0 \ 00000528 5B565D00 DC8 "[V]" \ 0000052C 5B535D00 DC8 "[S]" \ 00000530 5B525D00 DC8 "[R]" \ 00000534 ........ DC32 `?_1` \ 00000538 ........ DC32 `?` \ 0000053C ........ DC32 isShowA \ 00000540 ........ DC32 isShowV \ 00000544 ........ DC32 isShowS \ 00000548 ........ DC32 isShowR 2895 \ In segment CODE, align 4, keep-with-next 2896 void DrawScrollBar(int cur,int total) 2897 { \ DrawScrollBar: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0060A0E1 MOV R6,R0 2898 int scr_h=ScreenH()-1; 2899 int scr_w=ScreenW()-1; 2900 int y=scr_h-CLIST_Y1-FontH(clfont)-2; 2901 int pos=y*cur/total; 2902 int y2=y/total; 2903 DrawLine(scr_w-2,CLIST_Y1,scr_w-2,scr_h-FontH(clfont)-2,1,clrBlack); \ 00000008 ........ LDR R9,??DataTable95 ;; icons \ 0000000C 0170A0E1 MOV R7,R1 \ 00000010 898100EF SWI +33161 \ 00000014 014040E2 SUB R4,R0,#+1 \ 00000018 888100EF SWI +33160 \ 0000001C 015040E2 SUB R5,R0,#+1 \ 00000020 6C00A0E3 MOV R0,#+108 \ 00000024 ........ _BLF FontH,??FontH??rA \ 00000028 000044E0 SUB R0,R4,R0 \ 0000002C 048040E2 SUB R8,R0,#+4 \ 00000030 6C00A0E3 MOV R0,#+108 \ 00000034 ........ _BLF FontH,??FontH??rA \ 00000038 000048E0 SUB R0,R8,R0 \ 0000003C 022040E2 SUB R2,R0,#+2 \ 00000040 960200E0 MUL R0,R6,R2 \ 00000044 0710A0E1 MOV R1,R7 \ 00000048 ........ _BLF ??div32_a,??rA??div32_a \ 0000004C 0160A0E1 MOV R6,R1 \ 00000050 0200A0E1 MOV R0,R2 \ 00000054 0710A0E1 MOV R1,R7 \ 00000058 ........ _BLF ??div32_a,??rA??div32_a \ 0000005C 0170A0E1 MOV R7,R1 \ 00000060 6C00A0E3 MOV R0,#+108 \ 00000064 ........ _BLF FontH,??FontH??rA \ 00000068 0080A0E1 MOV R8,R0 \ 0000006C 6C00A0E3 MOV R0,#+108 \ 00000070 ........ _BLF FontH,??FontH??rA \ 00000074 E820A0E3 MOV R2,#+232 \ 00000078 6C2D82E3 ORR R2,R2,#0x1B00 \ 0000007C 09A082E0 ADD R10,R2,R9 \ 00000080 0A20A0E1 MOV R2,R10 \ 00000084 04002DE9 PUSH {R2} \ 00000088 0010A0E1 MOV R1,R0 \ 0000008C 020045E2 SUB R0,R5,#+2 \ 00000090 041081E2 ADD R1,R1,#+4 \ 00000094 0120A0E3 MOV R2,#+1 \ 00000098 04002DE9 PUSH {R2} \ 0000009C 082044E0 SUB R2,R4,R8 \ 000000A0 023042E2 SUB R3,R2,#+2 2904 int i=0; 2905 DrawRoundedFrame(scr_w-4,CLIST_Y1+pos+1,scr_w,CLIST_Y1+pos+y2,0,0,0,clrBlack,clrBlack); \ 000000A4 044045E2 SUB R4,R5,#+4 \ 000000A8 0020A0E1 MOV R2,R0 \ 000000AC B30100EF SWI +435 \ 000000B0 6C00A0E3 MOV R0,#+108 \ 000000B4 ........ _BLF FontH,??FontH??rA \ 000000B8 0080A0E1 MOV R8,R0 \ 000000BC 6C00A0E3 MOV R0,#+108 \ 000000C0 ........ _BLF FontH,??FontH??rA \ 000000C4 0A10A0E1 MOV R1,R10 \ 000000C8 02002DE9 PUSH {R1} \ 000000CC 00042DE9 PUSH {R10} \ 000000D0 0520A0E1 MOV R2,R5 \ 000000D4 0010A0E3 MOV R1,#+0 \ 000000D8 02002DE9 PUSH {R1} \ 000000DC 02002DE9 PUSH {R1} \ 000000E0 02002DE9 PUSH {R1} \ 000000E4 000086E0 ADD R0,R6,R0 \ 000000E8 081086E0 ADD R1,R6,R8 2906 for(i=0;iw,img->h); \ 00000010 B200D4E1 LDRH R0,[R4, #+2] \ 00000014 0350A0E1 MOV R5,R3 \ 00000018 01002DE9 PUSH {R0} \ 0000001C B030D4E1 LDRH R3,[R4, #+0] \ 00000020 04008DE2 ADD R0,SP,#+4 \ 00000024 330100EF SWI +307 2918 SetPropTo_Obj5(&drwobj,&rc,0,img); \ 00000028 0430A0E1 MOV R3,R4 \ 0000002C 0020A0E3 MOV R2,#+0 \ 00000030 04108DE2 ADD R1,SP,#+4 \ 00000034 0C008DE2 ADD R0,SP,#+12 \ 00000038 510100EF SWI +337 2919 SetColor(&drwobj,pen,brush); \ 0000003C 0620A0E1 MOV R2,R6 \ 00000040 0510A0E1 MOV R1,R5 \ 00000044 0C008DE2 ADD R0,SP,#+12 \ 00000048 4B0100EF SWI +331 2920 DrawObject(&drwobj); \ 0000004C 0C008DE2 ADD R0,SP,#+12 \ 00000050 2A0100EF SWI +298 2921 } \ 00000054 30D08DE2 ADD SP,SP,#+48 \ 00000058 7080BDE8 POP {R4-R6,PC} ;; return 2922 2923 2924 int LINE_MODE=0; 2925 int VIEW_MODE=1; 2926 2927 \ In segment DATA_Z, align 4, align-sorted 2928 GBSTMR cltmr; \ cltmr: \ 00000000 DS8 16 \ In segment CODE, align 4, keep-with-next 2929 void MyRedraw() 2930 { 2931 //DirectRedrawGUI_ID(contactlist_menu_id); 2932 SMART_REDRAW(); \ MyRedraw: \ 00000000 ........ B SMART_REDRAW ;; tailcall 2933 } 2934 2935 \ In segment CODE, align 4, keep-with-next 2936 void DrawJust(RECT *rc,CLIST *cl,char *name) 2937 { \ DrawJust: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 F440D0E1 LDRSH R4,[R0, #+4] \ 00000008 F280D0E1 LDRSH R8,[R0, #+2] \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 F010D0E1 LDRSH R1,[R0, #+0] \ 00000014 ........ LDR R0,??DataTable95 ;; icons \ 00000018 0260A0E1 MOV R6,R2 \ 0000001C 6C2095E5 LDR R2,[R5, #+108] \ 00000020 019081E2 ADD R9,R1,#+1 \ 00000024 F410A0E3 MOV R1,#+244 \ 00000028 6C1D81E3 ORR R1,R1,#0x1B00 \ 0000002C 001081E0 ADD R1,R1,R0 \ 00000030 000052E3 CMP R2,#+0 \ 00000034 0020A0E3 MOV R2,#+0 2938 //char *s=malloc(256); 2939 // sprintf(s,"%s <<<",name); 2940 //int x=0; 2941 if(!cl->just_i) 2942 { 2943 DrawText(rc->x+1,rc->y,rc->x2,name,blue,clfont+1,0,0); \ 00000038 F830A003 MOVEQ R3,#+248 2944 2945 /* x=GetWidth(rc->x+1,rc->y); 2946 DrawText(rc->x+x,rc->y,rc->x2,"<",clrRed,clfont+1,0); 2947 2948 x=GetWidth(rc->x+x,rc->y); 2949 DrawText(rc->x+x,rc->y,rc->x2,"<",blue,clfont+1,0);*/ 2950 // DrawStr(rc->x+1,rc->y,name,blue,0); 2951 } 2952 else 2953 { 2954 DrawText(rc->x+1,rc->y,rc->x2,name,clrRed,clfont+1,0,0); \ 0000003C F030A013 MOVNE R3,#+240 \ 00000040 6C3D83E3 ORR R3,R3,#0x1B00 \ 00000044 000083E0 ADD R0,R3,R0 \ 00000048 ........ _BLF SetFontColor,??SetFontColor??rA \ 0000004C 090044E0 SUB R0,R4,R9 \ 00000050 01002DE9 PUSH {R0} \ 00000054 5E70A0E3 MOV R7,#+94 \ 00000058 407F87E3 ORR R7,R7,#0x100 \ 0000005C 0030A0E3 MOV R3,#+0 \ 00000060 0000A0E3 MOV R0,#+0 \ 00000064 01002DE9 PUSH {R0} \ 00000068 01002DE9 PUSH {R0} \ 0000006C 80002DE9 PUSH {R7} \ 00000070 0620A0E1 MOV R2,R6 \ 00000074 0100A0E3 MOV R0,#+1 \ 00000078 01002DE9 PUSH {R0} \ 0000007C 0810A0E1 MOV R1,R8 \ 00000080 6D00A0E3 MOV R0,#+109 \ 00000084 01002DE9 PUSH {R0} \ 00000088 0900A0E1 MOV R0,R9 \ 0000008C ........ _BLF PrintText,??PrintText??rA \ 00000090 18D08DE2 ADD SP,SP,#+24 2955 2956 /* x=GetWidth(rc->x+1,rc->y)+1; 2957 DrawText(rc->x+x,rc->y,rc->x2,"<",blue,clfont+1,0); 2958 2959 x=GetWidth(rc->x+x,rc->y); 2960 DrawText(rc->x+x,rc->y,rc->x2,"<",clrRed,clfont+1,0);*/ 2961 } 2962 // DrawStr(rc->x+1,rc->y,name,clrRed,0); 2963 2964 2965 cl->just_i=!cl->just_i; \ 00000094 6C0095E5 LDR R0,[R5, #+108] \ 00000098 000050E3 CMP R0,#+0 \ 0000009C 0100A003 MOVEQ R0,#+1 \ 000000A0 0000A013 MOVNE R0,#+0 \ 000000A4 6C0085E5 STR R0,[R5, #+108] 2966 // GBS_StartTimerProc(&cltmr, 216, MyRedraw); 2967 } \ 000000A8 F083BDE8 POP {R4-R9,PC} ;; return 2968 2969 \ In segment CODE, align 4, keep-with-next 2970 void DrawList() 2971 { \ DrawList: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2972 if(!cltop) return; \ 00000004 ........ LDR R4,??DataTable90 ;; icons \ 00000008 68D04DE2 SUB SP,SP,#+104 \ 0000000C A40394E5 LDR R0,[R4, #+932] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 9C01000A BEQ ??DrawList_0 2973 int font_y = FontH(clfont)+2;//16+2 \ 00000018 6C00A0E3 MOV R0,#+108 \ 0000001C ........ _BLF FontH,??FontH??rA \ 00000020 020080E2 ADD R0,R0,#+2 \ 00000024 08008DE5 STR R0,[SP, #+8] 2974 int scr_w=ScreenW()-1; \ 00000028 888100EF SWI +33160 \ 0000002C 010040E2 SUB R0,R0,#+1 \ 00000030 18008DE5 STR R0,[SP, #+24] 2975 int scr_h=ScreenH()-1; \ 00000034 898100EF SWI +33161 2976 int y2; 2977 #ifdef ELKA 2978 if(VIEW_MODE) \ 00000038 DC0394E5 LDR R0,[R4, #+988] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 0E00000A BEQ ??DrawList_1 2979 itemFromDisp = (sdiv(font_y,ScreenH()-CLIST_Y1-FontH(clfont)-2)*2)-1;//((font_y/(ScreenH()-CLIST_Y1-FontH(clfont)-2))*2)-1; \ 00000044 898100EF SWI +33161 \ 00000048 0050A0E1 MOV R5,R0 \ 0000004C 6C00A0E3 MOV R0,#+108 \ 00000050 ........ _BLF FontH,??FontH??rA \ 00000054 0060A0E1 MOV R6,R0 \ 00000058 6C00A0E3 MOV R0,#+108 \ 0000005C ........ _BLF FontH,??FontH??rA \ 00000060 061045E0 SUB R1,R5,R6 \ 00000064 041041E2 SUB R1,R1,#+4 \ 00000068 000041E0 SUB R0,R1,R0 \ 0000006C 021040E2 SUB R1,R0,#+2 \ 00000070 08009DE5 LDR R0,[SP, #+8] \ 00000074 B80000EF SWI +184 \ 00000078 8000A0E1 LSL R0,R0,#+1 \ 0000007C 0C0000EA B ??DrawList_2 2980 else 2981 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-FontH(clfont)-2)-1; \ ??DrawList_1: \ 00000080 898100EF SWI +33161 \ 00000084 0050A0E1 MOV R5,R0 \ 00000088 6C00A0E3 MOV R0,#+108 \ 0000008C ........ _BLF FontH,??FontH??rA \ 00000090 0060A0E1 MOV R6,R0 \ 00000094 6C00A0E3 MOV R0,#+108 \ 00000098 ........ _BLF FontH,??FontH??rA \ 0000009C 061045E0 SUB R1,R5,R6 \ 000000A0 041041E2 SUB R1,R1,#+4 \ 000000A4 000041E0 SUB R0,R1,R0 \ 000000A8 021040E2 SUB R1,R0,#+2 \ 000000AC 08009DE5 LDR R0,[SP, #+8] \ 000000B0 B80000EF SWI +184 \ ??DrawList_2: \ 000000B4 010040E2 SUB R0,R0,#+1 \ 000000B8 C40384E5 STR R0,[R4, #+964] 2982 #else 2983 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-FontH(clfont)-2); 2984 #endif 2985 CLIST *cl; 2986 int i=0; \ 000000BC 0050A0E3 MOV R5,#+0 \ 000000C0 0000A0E3 MOV R0,#+0 \ 000000C4 D40384E5 STR R0,[R4, #+980] 2987 int start_y; 2988 int x=0; 2989 RECT rc; 2990 int icon; 2991 collum=0; 2992 int clfont=108; 2993 char *name=malloc(128); \ 000000C8 8000A0E3 MOV R0,#+128 \ 000000CC 140000EF SWI +20 \ 000000D0 0060A0E1 MOV R6,R0 2994 int yy=0; \ 000000D4 0510A0E1 MOV R1,R5 \ 000000D8 1C108DE5 STR R1,[SP, #+28] 2995 DYNPNGICONLIST *xs; 2996 2997 LockSched(); \ 000000DC 460100EF SWI +326 2998 totalItems = CountContacts(); //TotalBmk(); \ 000000E0 ........ _BLF CountContacts,??CountContacts??rA \ 000000E4 C80384E5 STR R0,[R4, #+968] 2999 3000 // Определяем количество страниц списка контактов 3001 int pageNum = sdiv(itemFromDisp, totalItems);//itemFromDisp/totalItems; \ 000000E8 0010A0E1 MOV R1,R0 \ 000000EC C40394E5 LDR R0,[R4, #+964] \ 000000F0 B80000EF SWI +184 3002 3003 if(itemFromDisp > (CLIST_Y1 - (2-FontH(clfont)))) itemFromDisp--; //Вдруг надпись будет налазить на софты ;) \ 000000F4 6C00A0E3 MOV R0,#+108 \ 000000F8 ........ _BLF FontH,??FontH??rA \ 000000FC 0070A0E1 MOV R7,R0 \ 00000100 6C00A0E3 MOV R0,#+108 \ 00000104 ........ _BLF FontH,??FontH??rA \ 00000108 C41394E5 LDR R1,[R4, #+964] \ 0000010C 070080E0 ADD R0,R0,R7 \ 00000110 020080E2 ADD R0,R0,#+2 \ 00000114 010050E1 CMP R0,R1 \ 00000118 010041B2 SUBLT R0,R1,#+1 \ 0000011C C40384B5 STRLT R0,[R4, #+964] 3004 if(LINE_MODE) itemFromDisp--; \ 00000120 D80394E5 LDR R0,[R4, #+984] \ 00000124 000050E3 CMP R0,#+0 \ 00000128 C4039415 LDRNE R0,[R4, #+964] \ 0000012C 01004012 SUBNE R0,R0,#+1 \ 00000130 C4038415 STRNE R0,[R4, #+964] 3005 3006 3007 if( itemFromDisp*pageNum < totalItems ) pageNum++; //На всяк,вдруг еще страница нужна 3008 3009 while(i=(curpage-1)*itemFromDisp) && (i<=itemFromDisp*curpage))//если те итемы который нужно выводить на экран со страници curpage \ 00000140 C40394E5 LDR R0,[R4, #+964] \ 00000144 D01394E5 LDR R1,[R4, #+976] \ 00000148 012041E2 SUB R2,R1,#+1 \ 0000014C 900202E0 MUL R2,R0,R2 \ 00000150 020055E1 CMP R5,R2 \ 00000154 910000A0 MULGE R0,R1,R0 \ 00000158 050050A1 CMPGE R0,R5 \ 0000015C 410100BA BLT ??DrawList_5 3012 { 3013 cl=FindContactByN(i); \ 00000160 0500A0E1 MOV R0,R5 \ 00000164 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000168 0070B0E1 MOVS R7,R0 3014 //if(!cl) return; 3015 if(cl)//если такой есть то рисуем его \ 0000016C 3D01000A BEQ ??DrawList_5 3016 { 3017 start_y=0; 3018 if(LINE_MODE) \ 00000170 D80394E5 LDR R0,[R4, #+984] \ 00000174 0080A0E3 MOV R8,#+0 \ 00000178 000050E3 CMP R0,#+0 \ 0000017C 0500000A BEQ ??DrawList_6 3019 { 3020 if(i>curpos) start_y+=font_y+3; \ 00000180 CC0394E5 LDR R0,[R4, #+972] \ 00000184 050050E1 CMP R0,R5 \ 00000188 08009DB5 LDRLT R0,[SP, #+8] \ 0000018C 038080B2 ADDLT R8,R0,#+3 3021 y2=2; \ 00000190 0200A0E3 MOV R0,#+2 \ 00000194 000000EA B ??DrawList_7 3022 } 3023 else y2=1; \ ??DrawList_6: \ 00000198 0100A0E3 MOV R0,#+1 3024 3025 if(VIEW_MODE) \ ??DrawList_7: \ 0000019C 18209DE5 LDR R2,[SP, #+24] \ 000001A0 052042E2 SUB R2,R2,#+5 \ 000001A4 0C208DE5 STR R2,[SP, #+12] \ 000001A8 08109DE5 LDR R1,[SP, #+8] \ 000001AC 900109E0 MUL R9,R0,R1 \ 000001B0 DC0394E5 LDR R0,[R4, #+988] \ 000001B4 000050E3 CMP R0,#+0 \ 000001B8 2800000A BEQ ??DrawList_8 3026 { 3027 if(!collum)//если первая колонка \ 000001BC 18009DE5 LDR R0,[SP, #+24] \ 000001C0 A00F80E0 ADD R0,R0,R0, LSR #+31 \ 000001C4 C0A0A0E1 ASR R10,R0,#+1 \ 000001C8 D40394E5 LDR R0,[R4, #+980] \ 000001CC 000050E3 CMP R0,#+0 \ 000001D0 1300001A BNE ??DrawList_9 3028 { 3029 start_y += (CLIST_Y1 + (((i - (curpage-1)*itemFromDisp)*font_y)/2) ); //определяем начальное смещение по у \ 000001D4 6C00A0E3 MOV R0,#+108 \ 000001D8 ........ _BLF FontH,??FontH??rA \ 000001DC D01394E5 LDR R1,[R4, #+976] \ 000001E0 C42394E5 LDR R2,[R4, #+964] \ 000001E4 011041E2 SUB R1,R1,#+1 \ 000001E8 920101E0 MUL R1,R2,R1 \ 000001EC 08209DE5 LDR R2,[SP, #+8] \ 000001F0 011045E0 SUB R1,R5,R1 \ 000001F4 920101E0 MUL R1,R2,R1 3030 yy=start_y; 3031 StoreXYXYtoRECT(&rc, 1, start_y, (scr_w/2)-1, start_y+(font_y*y2)); \ 000001F8 01304AE2 SUB R3,R10,#+1 \ 000001FC A11F81E0 ADD R1,R1,R1, LSR #+31 \ 00000200 C10080E0 ADD R0,R0,R1, ASR #+1 \ 00000204 040080E2 ADD R0,R0,#+4 \ 00000208 088080E0 ADD R8,R0,R8 \ 0000020C 1C808DE5 STR R8,[SP, #+28] \ 00000210 080089E0 ADD R0,R9,R8 \ 00000214 01002DE9 PUSH {R0} \ 00000218 0820A0E1 MOV R2,R8 \ 0000021C 0110A0E3 MOV R1,#+1 \ 00000220 050000EA B ??DrawList_10 3032 } 3033 else//если вторая 3034 { 3035 StoreXYXYtoRECT(&rc, scr_w/2, yy, scr_w-5, yy+(font_y*y2)); \ ??DrawList_9: \ 00000224 1C009DE5 LDR R0,[SP, #+28] \ 00000228 0230A0E1 MOV R3,R2 \ 0000022C 000089E0 ADD R0,R9,R0 \ 00000230 01002DE9 PUSH {R0} \ 00000234 20209DE5 LDR R2,[SP, #+32] \ 00000238 0A10A0E1 MOV R1,R10 \ ??DrawList_10: \ 0000023C 04008DE2 ADD R0,SP,#+4 \ 00000240 340100EF SWI +308 \ 00000244 04D08DE2 ADD SP,SP,#+4 3036 } 3037 collum=!collum; \ 00000248 D40394E5 LDR R0,[R4, #+980] \ 0000024C 000050E3 CMP R0,#+0 \ 00000250 0100A003 MOVEQ R0,#+1 \ 00000254 0000A013 MOVNE R0,#+0 \ 00000258 D40384E5 STR R0,[R4, #+980] \ 0000025C 120000EA B ??DrawList_11 3038 } 3039 else 3040 { 3041 start_y += (CLIST_Y1 + 2 + (i - (curpage-1)*itemFromDisp)*font_y); //?????????? ????????? ???????? ?? ? \ ??DrawList_8: \ 00000260 6C00A0E3 MOV R0,#+108 \ 00000264 ........ _BLF FontH,??FontH??rA \ 00000268 D01394E5 LDR R1,[R4, #+976] \ 0000026C C42394E5 LDR R2,[R4, #+964] \ 00000270 011041E2 SUB R1,R1,#+1 \ 00000274 920101E0 MUL R1,R2,R1 \ 00000278 08209DE5 LDR R2,[SP, #+8] \ 0000027C 011045E0 SUB R1,R5,R1 \ 00000280 920120E0 MLA R0,R2,R1,R0 3042 StoreXYXYtoRECT(&rc,2,start_y,scr_w-5,start_y+(font_y*y2)); \ 00000284 0210A0E3 MOV R1,#+2 \ 00000288 060080E2 ADD R0,R0,#+6 \ 0000028C 088080E0 ADD R8,R0,R8 \ 00000290 080089E0 ADD R0,R9,R8 \ 00000294 01002DE9 PUSH {R0} \ 00000298 10309DE5 LDR R3,[SP, #+16] \ 0000029C 0820A0E1 MOV R2,R8 \ 000002A0 04008DE2 ADD R0,SP,#+4 \ 000002A4 340100EF SWI +308 \ 000002A8 04D08DE2 ADD SP,SP,#+4 3043 } 3044 3045 icon=GetIconIndex(cl); 3046 if (icon!=IS_GROUP) \ ??DrawList_11: \ 000002AC ........ LDR R9,??DataTable91 ;; Canvas \ 000002B0 0700A0E1 MOV R0,R7 \ 000002B4 ........ BL GetIconIndex \ 000002B8 00A0A0E1 MOV R10,R0 \ 000002BC E810A0E3 MOV R1,#+232 \ 000002C0 6C1D81E3 ORR R1,R1,#0x1B00 \ 000002C4 041081E0 ADD R1,R1,R4 \ 000002C8 10108DE5 STR R1,[SP, #+16] \ 000002CC F410A0E3 MOV R1,#+244 \ 000002D0 6C1D81E3 ORR R1,R1,#0x1B00 \ 000002D4 041081E0 ADD R1,R1,R4 \ 000002D8 14108DE5 STR R1,[SP, #+20] \ 000002DC 0F005AE3 CMP R10,#+15 \ 000002E0 0400000A BEQ ??DrawList_12 3047 { 3048 sprintf(name,percent_s,cl->name); \ 000002E4 142087E2 ADD R2,R7,#+20 \ 000002E8 081089E2 ADD R1,R9,#+8 \ 000002EC 0600A0E1 MOV R0,R6 \ 000002F0 160000EF SWI +22 \ 000002F4 330000EA B ??DrawList_13 3049 } 3050 else 3051 { 3052 int onlinetotal[2]; 3053 GetOnTotalContact(cl->group,onlinetotal); \ ??DrawList_12: \ 000002F8 100097E5 LDR R0,[R7, #+16] \ 000002FC 20108DE2 ADD R1,SP,#+32 \ 00000300 ........ BL GetOnTotalContact 3054 if(!VIEW_MODE) \ 00000304 DC0394E5 LDR R0,[R4, #+988] \ 00000308 000050E3 CMP R0,#+0 \ 0000030C 1C00001A BNE ??DrawList_14 3055 { 3056 char *s=malloc(32); \ 00000310 2000A0E3 MOV R0,#+32 \ 00000314 140000EF SWI +20 \ 00000318 00B0A0E1 MOV R11,R0 3057 sprintf(name,percent_s,cl->name); \ 0000031C 142087E2 ADD R2,R7,#+20 \ 00000320 081089E2 ADD R1,R9,#+8 \ 00000324 0600A0E1 MOV R0,R6 \ 00000328 160000EF SWI +22 3058 sprintf(s,"(%d/%d)",onlinetotal[0],onlinetotal[1]); \ 0000032C 24309DE5 LDR R3,[SP, #+36] \ 00000330 20209DE5 LDR R2,[SP, #+32] \ 00000334 BC1089E2 ADD R1,R9,#+188 \ 00000338 0B00A0E1 MOV R0,R11 \ 0000033C 160000EF SWI +22 3059 SetFontColor((char*)clrBlack,transparent,0); \ 00000340 14109DE5 LDR R1,[SP, #+20] \ 00000344 10009DE5 LDR R0,[SP, #+16] \ 00000348 0020A0E3 MOV R2,#+0 \ 0000034C ........ _BLF SetFontColor,??SetFontColor??rA 3060 PrintField(scr_w-5,start_y,s,2,clfont,1);//capacity in header \ 00000350 0100A0E3 MOV R0,#+1 \ 00000354 01002DE9 PUSH {R0} \ 00000358 0230A0E3 MOV R3,#+2 \ 0000035C 0B20A0E1 MOV R2,R11 \ 00000360 0810A0E1 MOV R1,R8 \ 00000364 6C00A0E3 MOV R0,#+108 \ 00000368 01002DE9 PUSH {R0} \ 0000036C 14009DE5 LDR R0,[SP, #+20] \ 00000370 ........ _BLF PrintField,??PrintField??rA 3061 mfree(s); \ 00000374 0B00A0E1 MOV R0,R11 \ 00000378 150000EF SWI +21 \ 0000037C 08D08DE2 ADD SP,SP,#+8 \ 00000380 0C0000EA B ??DrawList_15 3062 } 3063 else 3064 sprintf(name,"%s%c%c(%d/%d)",cl->name,0xE01D,0xE012,onlinetotal[0],onlinetotal[1]); \ ??DrawList_14: \ 00000384 24009DE5 LDR R0,[SP, #+36] \ 00000388 142087E2 ADD R2,R7,#+20 \ 0000038C 01002DE9 PUSH {R0} \ 00000390 24009DE5 LDR R0,[SP, #+36] \ 00000394 C41089E2 ADD R1,R9,#+196 \ 00000398 01002DE9 PUSH {R0} \ 0000039C 1200A0E3 MOV R0,#+18 \ 000003A0 E00C80E3 ORR R0,R0,#0xE000 \ 000003A4 01002DE9 PUSH {R0} \ 000003A8 0B3080E2 ADD R3,R0,#+11 \ 000003AC 0600A0E1 MOV R0,R6 \ 000003B0 160000EF SWI +22 \ 000003B4 0CD08DE2 ADD SP,SP,#+12 3065 if (cl->state) icon++; //Модификация иконки группы \ ??DrawList_15: \ 000003B8 B405D7E1 LDRH R0,[R7, #+84] \ 000003BC 000050E3 CMP R0,#+0 \ 000003C0 0100000A BEQ ??DrawList_16 \ 000003C4 01A08AE2 ADD R10,R10,#+1 3066 } 3067 3068 // DrawImg(rc.x,rc.y,NumStatusToIconBar+icon);//status 3069 DrwImage(icons[icon],rc.x,rc.y,0,0);//draw imghdr! \ ??DrawList_13: \ 000003C8 0000A0E3 MOV R0,#+0 \ ??DrawList_16: \ 000003CC 01002DE9 PUSH {R0} \ 000003D0 F620DDE1 LDRSH R2,[SP, #+6] \ 000003D4 F410DDE1 LDRSH R1,[SP, #+4] \ 000003D8 0A0194E7 LDR R0,[R4, +R10, LSL #+2] \ 000003DC 0030A0E3 MOV R3,#+0 \ 000003E0 ........ BL DrwImage 3070 // DrwImage(NumStatusToIconBar+icon,rc.x,rc.y,0,0);//draw imghdr! 3071 rc.x+=icons[i]->w+2;//GetImgWidth(NumStatusToIconBar+icon)+2;// + смещение по х \ 000003E4 052194E7 LDR R2,[R4, +R5, LSL #+2] \ 000003E8 F410DDE1 LDRSH R1,[SP, #+4] \ 000003EC F020D2E1 LDRSH R2,[R2, #+0] \ 000003F0 022082E2 ADD R2,R2,#+2 \ 000003F4 011082E0 ADD R1,R2,R1 \ 000003F8 B410CDE1 STRH R1,[SP, #+4] 3072 3073 if(i==curpos)//Если наш итем то выделяем \ 000003FC CC0394E5 LDR R0,[R4, #+972] \ 00000400 04D08DE2 ADD SP,SP,#+4 \ 00000404 000055E1 CMP R5,R0 \ 00000408 5A00001A BNE ??DrawList_17 3074 { 3075 DrawRoundedFrame(rc.x-1,rc.y-1,rc.x2-1,rc.y2-1,0,0,0,bordSelect,clrSelect); \ 0000040C ED0F89E2 ADD R0,R9,#+948 \ 00000410 01002DE9 PUSH {R0} \ 00000414 EE0F89E2 ADD R0,R9,#+952 \ 00000418 01002DE9 PUSH {R0} \ 0000041C 0000A0E3 MOV R0,#+0 \ 00000420 01002DE9 PUSH {R0} \ 00000424 01002DE9 PUSH {R0} \ 00000428 01002DE9 PUSH {R0} \ 0000042C FA01DDE1 LDRSH R0,[SP, #+26] \ 00000430 013040E2 SUB R3,R0,#+1 \ 00000434 F801DDE1 LDRSH R0,[SP, #+24] \ 00000438 012040E2 SUB R2,R0,#+1 \ 0000043C F601DDE1 LDRSH R0,[SP, #+22] \ 00000440 011040E2 SUB R1,R0,#+1 \ 00000444 F401DDE1 LDRSH R0,[SP, #+20] \ 00000448 010040E2 SUB R0,R0,#+1 \ 0000044C 500100EF SWI +336 3076 if(LINE_MODE && icon!=IS_GROUP) \ 00000450 D80394E5 LDR R0,[R4, #+984] \ 00000454 14D08DE2 ADD SP,SP,#+20 \ 00000458 000050E3 CMP R0,#+0 \ 0000045C 0F005A13 CMPNE R10,#+15 \ 00000460 3F00000A BEQ ??DrawList_18 3077 { 3078 char s[64]; 3079 if ((cl->xtext && cl->xtext[0]!=0) && (cl->isShowXst) && (cl->state!=0xFFFF))//Если контакт онлайн и показывать хстату \ 00000464 A80097E5 LDR R0,[R7, #+168] \ 00000468 000050E3 CMP R0,#+0 \ 0000046C 0000D015 LDRBNE R0,[R0, #+0] \ 00000470 00005013 CMPNE R0,#+0 \ 00000474 70009715 LDRNE R0,[R7, #+112] \ 00000478 00005013 CMPNE R0,#+0 \ 0000047C 0F00000A BEQ ??DrawList_19 \ 00000480 B405D7E1 LDRH R0,[R7, #+84] \ 00000484 FF10A0E3 MOV R1,#+255 \ 00000488 FF1C81E3 ORR R1,R1,#0xFF00 \ 0000048C 010050E1 CMP R0,R1 \ 00000490 0A00000A BEQ ??DrawList_19 3080 { 3081 int i; 3082 zeromem(s,64); \ 00000494 4010A0E3 MOV R1,#+64 \ 00000498 28008DE2 ADD R0,SP,#+40 \ 0000049C 1D0100EF SWI +285 3083 i=cl->xtext[0]; \ 000004A0 A80097E5 LDR R0,[R7, #+168] \ ??DrawList_20: \ 000004A4 0020D0E5 LDRB R2,[R0, #+0] 3084 if (i>63) i=63; 3085 strncpy(s,cl->xtext+1,i); \ 000004A8 011080E2 ADD R1,R0,#+1 \ 000004AC 28008DE2 ADD R0,SP,#+40 \ 000004B0 400052E3 CMP R2,#+64 \ 000004B4 3F20A0A3 MOVGE R2,#+63 \ 000004B8 160100EF SWI +278 \ 000004BC 110000EA B ??DrawList_21 3086 } 3087 else 3088 if(cl->xtext2 && cl->xtext2[0]!=0 && isLogStatusChange) \ ??DrawList_19: \ 000004C0 AC0097E5 LDR R0,[R7, #+172] \ 000004C4 000050E3 CMP R0,#+0 \ 000004C8 0000D015 LDRBNE R0,[R0, #+0] \ 000004CC 00005013 CMPNE R0,#+0 \ 000004D0 0800000A BEQ ??DrawList_22 \ 000004D4 ........ LDR R0,??DataTable92 ;; isLogStatusChange \ 000004D8 000090E5 LDR R0,[R0, #+0] \ 000004DC 000050E3 CMP R0,#+0 \ 000004E0 0400000A BEQ ??DrawList_22 3089 { 3090 int i; 3091 zeromem(s,64); \ 000004E4 4010A0E3 MOV R1,#+64 \ 000004E8 28008DE2 ADD R0,SP,#+40 \ 000004EC 1D0100EF SWI +285 3092 i=cl->xtext2[0]; \ 000004F0 AC0097E5 LDR R0,[R7, #+172] \ 000004F4 EAFFFFEA B ??DrawList_20 3093 if (i>63) i=63; 3094 strncpy(s,cl->xtext2+1,i); 3095 } 3096 else 3097 sprintf(s,percent_d,cl->uin); \ ??DrawList_22: \ 000004F8 0C2097E5 LDR R2,[R7, #+12] \ 000004FC 0B1089E2 ADD R1,R9,#+11 \ 00000500 28008DE2 ADD R0,SP,#+40 \ 00000504 160000EF SWI +22 3098 SetFontColor((char*)clrBlack,transparent,0); \ ??DrawList_21: \ 00000508 14109DE5 LDR R1,[SP, #+20] \ 0000050C 10009DE5 LDR R0,[SP, #+16] \ 00000510 0020A0E3 MOV R2,#+0 \ 00000514 ........ _BLF SetFontColor,??SetFontColor??rA 3099 PrintText(rc.x+x+1,rc.y+font_y,s,0,clfont,1,0,0,0,rc.x2);//description under item name \ 00000518 F400DDE1 LDRSH R0,[SP, #+4] \ 0000051C 0030A0E3 MOV R3,#+0 \ 00000520 01002DE9 PUSH {R0} \ 00000524 0000A0E3 MOV R0,#+0 \ 00000528 01002DE9 PUSH {R0} \ 0000052C 01002DE9 PUSH {R0} \ 00000530 01002DE9 PUSH {R0} \ 00000534 0100A0E3 MOV R0,#+1 \ 00000538 01002DE9 PUSH {R0} \ 0000053C 6C00A0E3 MOV R0,#+108 \ 00000540 01002DE9 PUSH {R0} \ 00000544 20109DE5 LDR R1,[SP, #+32] \ 00000548 FA01DDE1 LDRSH R0,[SP, #+26] \ 0000054C 40208DE2 ADD R2,SP,#+64 \ 00000550 001081E0 ADD R1,R1,R0 \ 00000554 F801DDE1 LDRSH R0,[SP, #+24] \ 00000558 010080E2 ADD R0,R0,#+1 \ 0000055C ........ _BLF PrintText,??PrintText??rA \ 00000560 18D08DE2 ADD SP,SP,#+24 3100 } 3101 3102 if(totalItems>1) \ ??DrawList_18: \ 00000564 C81394E5 LDR R1,[R4, #+968] \ 00000568 020051E3 CMP R1,#+2 \ 0000056C 010000BA BLT ??DrawList_17 3103 DrawScrollBar(i,totalItems); \ 00000570 0500A0E1 MOV R0,R5 \ 00000574 ........ BL DrawScrollBar 3104 } 3105 3106 if(cl->xstate!=0)//если есть хстатус \ ??DrawList_17: \ 00000578 B605D7E1 LDRH R0,[R7, #+86] \ 0000057C 000050E3 CMP R0,#+0 \ 00000580 0F00000A BEQ ??DrawList_23 3107 { 3108 xs=GetXSByItem(cl->xstate); \ 00000584 ........ _BLF GetXSByItem,??GetXSByItem??rA \ 00000588 0080B0E1 MOVS R8,R0 3109 if(xs) \ 0000058C 0C00000A BEQ ??DrawList_23 3110 { 3111 DrwImage(xs->img,rc.x-x,rc.y,0,0); \ 00000590 0000A0E3 MOV R0,#+0 \ 00000594 01002DE9 PUSH {R0} \ 00000598 F620DDE1 LDRSH R2,[SP, #+6] \ 0000059C F410DDE1 LDRSH R1,[SP, #+4] \ 000005A0 080098E5 LDR R0,[R8, #+8] \ 000005A4 0030A0E3 MOV R3,#+0 \ 000005A8 ........ BL DrwImage 3112 rc.x+=xs->img->w; \ 000005AC 082098E5 LDR R2,[R8, #+8] \ 000005B0 F410DDE1 LDRSH R1,[SP, #+4] \ 000005B4 F020D2E1 LDRSH R2,[R2, #+0] \ 000005B8 011082E0 ADD R1,R2,R1 \ 000005BC B410CDE1 STRH R1,[SP, #+4] \ 000005C0 04D08DE2 ADD SP,SP,#+4 3113 } 3114 // DrawImg(rc.x-x,rc.y,NumXStatusToIconBar+cl->xstate);//xstatus 3115 // rc.x+=GetImgWidth(NumXStatusToIconBar+cl->xstate)+2;// + смещение по х 3116 } 3117 3118 if(cl->just_now) \ ??DrawList_23: \ 000005C4 680097E5 LDR R0,[R7, #+104] \ 000005C8 000050E3 CMP R0,#+0 \ 000005CC 0400000A BEQ ??DrawList_24 3119 { 3120 DrawJust(&rc,cl,name); \ 000005D0 0620A0E1 MOV R2,R6 \ 000005D4 0710A0E1 MOV R1,R7 \ 000005D8 0D00A0E1 MOV R0,SP \ 000005DC ........ BL DrawJust \ 000005E0 200000EA B ??DrawList_5 3121 } 3122 else 3123 // if(cl->isactive) 3124 DrawText(rc.x+1,rc.y,rc.x2,name,(cl->isactive!=0)?(clrRed):(clrBlack),clfont,0,0); \ ??DrawList_24: \ 000005E4 A00097E5 LDR R0,[R7, #+160] \ 000005E8 000050E3 CMP R0,#+0 \ 000005EC 0300000A BEQ ??DrawList_25 \ 000005F0 F000A0E3 MOV R0,#+240 \ 000005F4 6C0D80E3 ORR R0,R0,#0x1B00 \ 000005F8 040080E0 ADD R0,R0,R4 \ 000005FC 000000EA B ??DrawList_26 \ ??DrawList_25: \ 00000600 10009DE5 LDR R0,[SP, #+16] \ ??DrawList_26: \ 00000604 F470DDE1 LDRSH R7,[SP, #+4] \ 00000608 F010DDE1 LDRSH R1,[SP, #+0] \ 0000060C F280DDE1 LDRSH R8,[SP, #+2] \ 00000610 0020A0E3 MOV R2,#+0 \ 00000614 019081E2 ADD R9,R1,#+1 \ 00000618 14109DE5 LDR R1,[SP, #+20] \ 0000061C ........ _BLF SetFontColor,??SetFontColor??rA \ 00000620 090047E0 SUB R0,R7,R9 \ 00000624 01002DE9 PUSH {R0} \ 00000628 0030A0E3 MOV R3,#+0 \ 0000062C 0620A0E1 MOV R2,R6 \ 00000630 0810A0E1 MOV R1,R8 \ 00000634 0000A0E3 MOV R0,#+0 \ 00000638 01002DE9 PUSH {R0} \ 0000063C 01002DE9 PUSH {R0} \ 00000640 5E00A0E3 MOV R0,#+94 \ 00000644 400F80E3 ORR R0,R0,#0x100 \ 00000648 01002DE9 PUSH {R0} \ 0000064C 0100A0E3 MOV R0,#+1 \ 00000650 01002DE9 PUSH {R0} \ 00000654 6C00A0E3 MOV R0,#+108 \ 00000658 01002DE9 PUSH {R0} \ 0000065C 0900A0E1 MOV R0,R9 \ 00000660 ........ _BLF PrintText,??PrintText??rA \ 00000664 18D08DE2 ADD SP,SP,#+24 3125 //DrawStr(rc.x+1,rc.y,name,clrRed,0); 3126 // SetFontColor((char*)clrRed,transparent,0); 3127 // else 3128 // DrawText(rc.x+1,rc.y,rc.x2,name,clrBlack,clfont,0,0); 3129 // DrawStr(rc.x+1,rc.y,name,clrBlack,0); 3130 // SetFontColor((char*)clrBlack,transparent,0); 3131 3132 // PrintText(rc.x+1,rc.y,name,0,clfont,1,1,0,0,rc.x2); 3133 } 3134 } 3135 i++; 3136 if(i > (itemFromDisp*curpage)) break; \ ??DrawList_5: \ 00000668 C40394E5 LDR R0,[R4, #+964] \ 0000066C D01394E5 LDR R1,[R4, #+976] \ 00000670 015085E2 ADD R5,R5,#+1 \ 00000674 910000E0 MUL R0,R1,R0 \ 00000678 050050E1 CMP R0,R5 \ 0000067C ACFEFFAA BGE ??DrawList_3 3137 } 3138 UnlockSched(); \ ??DrawList_4: \ 00000680 470100EF SWI +327 3139 mfree(name); \ 00000684 0600A0E1 MOV R0,R6 \ 00000688 150000EF SWI +21 3140 } \ ??DrawList_0: \ 0000068C 68D08DE2 ADD SP,SP,#+104 ;; stack cleaning \ 00000690 F08FBDE8 POP {R4-R11,PC} ;; return 3141 3142 3143 3144 // Управление курсором \ In segment CODE, align 4, keep-with-next 3145 void MoveUp(int i) 3146 { \ MoveUp: \ 00000000 10402DE9 PUSH {R4,LR} 3147 if(!itemFromDisp)return; \ 00000004 ........ LDR R4,??DataTable95 ;; icons \ 00000008 C42394E5 LDR R2,[R4, #+964] \ 0000000C 000052E3 CMP R2,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} 3148 /* if(i) curpos-=2; 3149 else curpos--; 3150 if(curpos<1) { curpos=totalItems-1; curpage=sdiv(itemFromDisp,totalItems)+1; } 3151 if(curpage*itemFromDisp>curpos){ curpos++; curpage--; } */ 3152 3153 if(i) curpos-=2; \ 00000014 CC1394E5 LDR R1,[R4, #+972] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 02104112 SUBNE R1,R1,#+2 3154 else curpos--; \ 00000020 01104102 SUBEQ R1,R1,#+1 \ 00000024 CC1384E5 STR R1,[R4, #+972] 3155 3156 if(i && curpos+2==2) \ 00000028 0130A0E3 MOV R3,#+1 \ 0000002C 0200000A BEQ ??MoveUp_0 \ 00000030 000051E3 CMP R1,#+0 3157 { 3158 curpos=0; 3159 curpage=1; \ 00000034 D0338405 STREQ R3,[R4, #+976] \ 00000038 1080BD08 POPEQ {R4,PC} 3160 } 3161 else 3162 if(curpos<0) \ ??MoveUp_0: \ 0000003C 000051E3 CMP R1,#+0 \ 00000040 1080BD58 POPPL {R4,PC} 3163 { 3164 curpos=totalItems-1; \ 00000044 C81394E5 LDR R1,[R4, #+968] \ 00000048 010041E2 SUB R0,R1,#+1 \ 0000004C CC0384E5 STR R0,[R4, #+972] 3165 3166 if(itemFromDisp!=totalItems) \ 00000050 010052E1 CMP R2,R1 \ 00000054 0400000A BEQ ??MoveUp_1 3167 { 3168 curpage = /*(itemFromDisp/totalItems)+1;*/sdiv(itemFromDisp,totalItems)+1; \ 00000058 0200A0E1 MOV R0,R2 \ 0000005C B80000EF SWI +184 \ 00000060 010080E2 ADD R0,R0,#+1 \ 00000064 D00384E5 STR R0,[R4, #+976] \ 00000068 1080BDE8 POP {R4,PC} 3169 } 3170 else 3171 curpage = 1; \ ??MoveUp_1: \ 0000006C D03384E5 STR R3,[R4, #+976] \ 00000070 1080BDE8 POP {R4,PC} ;; return 3172 } 3173 /* else 3174 { 3175 if(i) curpos-=2; 3176 else curpos--; 3177 // if(curpos<(curpage-1)*itemFromDisp){ curpos++; curpage--; } 3178 }*/ 3179 } 3180 3181 \ In segment CODE, align 4, keep-with-next 3182 void MoveDown(int i) 3183 { 3184 if(!totalItems)return; \ MoveDown: \ 00000000 ........ LDR R1,??DataTable95 ;; icons \ 00000004 C82391E5 LDR R2,[R1, #+968] \ 00000008 000052E3 CMP R2,#+0 \ 0000000C 1EFF2F01 BXEQ LR 3185 if(i) curpos+=2; \ 00000010 CC3391E5 LDR R3,[R1, #+972] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 02008312 ADDNE R0,R3,#+2 3186 else curpos++; \ 0000001C 01008302 ADDEQ R0,R3,#+1 3187 if(curpos>=totalItems) { curpos=0; curpage=1; } 3188 if(curpage*itemFromDisp` \ 00000060 ........ BL DrawSoftKeys 3197 DrawHeader(); \ 00000064 ........ BL DrawHeader 3198 // UnlockSched(); 3199 DrawList(); \ 00000068 ........ BL DrawList 3200 } \ 0000006C 14D08DE2 ADD SP,SP,#+20 \ 00000070 3080BDE8 POP {R4,R5,PC} ;; return \ ??DrawContactList_0: \ 00000074 ........ DC32 `?` 3201 /* 3202 static void OnRedraw(MAIN_GUI *data) 3203 { 3204 DrawContactList(); 3205 } 3206 3207 static void onCreate(MAIN_GUI *data, void *(*malloc_adr)(int)) 3208 { 3209 #ifdef ELKA 3210 DisableIconBar(1); 3211 #endif 3212 StatusToIMGHDR(); 3213 data->gui.state=1; 3214 } 3215 3216 static void onClose(MAIN_GUI *data, void (*mfree_adr)(void *)) 3217 { 3218 #ifdef ELKA 3219 DisableIconBar(0); 3220 #endif 3221 FreeStatusToIMGHDR(); 3222 GBS_DelTimer(&cltmr); 3223 data->gui.state=0; 3224 } 3225 3226 static void onFocus(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *)) 3227 { 3228 #ifdef ELKA 3229 DisableIconBar(1); 3230 #endif 3231 SetCanvasFlag(1); 3232 // ResortCL(); 3233 data->gui.state=2; 3234 DisableIDLETMR(); 3235 } 3236 3237 static void onUnfocus(MAIN_GUI *data, void (*mfree_adr)(void *)) 3238 { 3239 #ifdef ELKA 3240 DisableIconBar(0); 3241 #endif 3242 GBS_DelTimer(&cltmr); 3243 if (data->gui.state!=2) return; 3244 data->gui.state=1; 3245 } 3246 */ 3247 //IMGHDR *screen; 3248 int ShowLoadScreen=1; 3249 \ In segment CODE, align 4, keep-with-next 3250 int ClOnKey(GUI_MSG *msg) 3251 { \ ClOnKey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3252 int key=msg->gbsmsg->submess; 3253 CLIST *t; 3254 t=FindContactByN(curpos); \ 00000004 ........ LDR R8,??DataTable106 ;; icons \ 00000008 0060A0E1 MOV R6,R0 \ 0000000C 040096E5 LDR R0,[R6, #+4] 3255 3256 if (msg->gbsmsg->msg==LONG_PRESS) \ 00000010 559EA0E3 MOV R9,#+1360 \ 00000014 087090E5 LDR R7,[R0, #+8] \ 00000018 CC0398E5 LDR R0,[R8, #+972] \ 0000001C ........ _BLF FindContactByN,??FindContactByN??rA \ 00000020 0040A0E1 MOV R4,R0 \ 00000024 040096E5 LDR R0,[R6, #+4] \ 00000028 9520A0E3 MOV R2,#+149 \ 0000002C 041090E5 LDR R1,[R0, #+4] \ 00000030 402F82E3 ORR R2,R2,#0x100 \ 00000034 020051E1 CMP R1,R2 \ 00000038 2E00001A BNE ??ClOnKey_1 3257 { 3258 switch(msg->gbsmsg->submess) \ 0000003C 080090E5 LDR R0,[R0, #+8] \ 00000040 DC1398E5 LDR R1,[R8, #+988] \ 00000044 3B0050E2 SUBS R0,R0,#+59 \ 00000048 0600000A BEQ ??ClOnKey_2 \ 0000004C 010050E2 SUBS R0,R0,#+1 \ 00000050 0800000A BEQ ??ClOnKey_3 \ 00000054 010050E2 SUBS R0,R0,#+1 \ 00000058 1100000A BEQ ??ClOnKey_4 \ 0000005C 010050E2 SUBS R0,R0,#+1 \ 00000060 0900000A BEQ ??ClOnKey_5 \ 00000064 130000EA B ??ClOnKey_6 3259 { 3260 case UP_BUTTON: if(VIEW_MODE) MoveUp(1); else MoveUp(0); break; \ ??ClOnKey_2: \ 00000068 000051E3 CMP R1,#+0 \ 0000006C 0F00001A BNE ??ClOnKey_7 \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 0E0000EA B ??ClOnKey_8 3261 case DOWN_BUTTON: if(VIEW_MODE) MoveDown(1); else MoveDown(0); break; \ ??ClOnKey_3: \ 00000078 000051E3 CMP R1,#+0 \ 0000007C 0000A003 MOVEQ R0,#+0 \ 00000080 0100A013 MOVNE R0,#+1 \ ??ClOnKey_9: \ 00000084 ........ BL MoveDown \ 00000088 0A0000EA B ??ClOnKey_6 3262 case RIGHT_BUTTON: if(VIEW_MODE) MoveDown(0); else MoveDown(1); break; \ ??ClOnKey_5: \ 0000008C 000051E3 CMP R1,#+0 \ 00000090 0100000A BEQ ??ClOnKey_10 \ 00000094 0000A0E3 MOV R0,#+0 \ 00000098 F9FFFFEA B ??ClOnKey_9 \ ??ClOnKey_10: \ 0000009C 0100A0E3 MOV R0,#+1 \ 000000A0 F7FFFFEA B ??ClOnKey_9 3263 case LEFT_BUTTON: if(VIEW_MODE) MoveUp(0); else MoveUp(1); break; \ ??ClOnKey_4: \ 000000A4 000051E3 CMP R1,#+0 \ 000000A8 0000A013 MOVNE R0,#+0 \ 000000AC 0000001A BNE ??ClOnKey_8 \ ??ClOnKey_7: \ 000000B0 0100A0E3 MOV R0,#+1 \ ??ClOnKey_8: \ 000000B4 ........ BL MoveUp 3264 } 3265 3266 LongPressAction(t,msg->gbsmsg->submess); \ ??ClOnKey_6: \ 000000B8 040096E5 LDR R0,[R6, #+4] \ 000000BC 081090E5 LDR R1,[R0, #+8] \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 ........ BL LongPressAction 3267 3268 int key=msg->gbsmsg->submess; \ 000000C8 040096E5 LDR R0,[R6, #+4] \ 000000CC 080090E5 LDR R0,[R0, #+8] 3269 if ((key>='0')&&(key<='9')) \ 000000D0 300050E3 CMP R0,#+48 \ 000000D4 070000BA BLT ??ClOnKey_1 \ 000000D8 3A0050E3 CMP R0,#+58 \ 000000DC 050000AA BGE ??ClOnKey_1 3270 { 3271 ClearContactT9Key(); \ 000000E0 2010A0E3 MOV R1,#+32 \ 000000E4 080089E0 ADD R0,R9,R8 \ 000000E8 1D0100EF SWI +285 3272 RecountMenu(NULL,1); \ 000000EC 0110A0E3 MOV R1,#+1 \ 000000F0 0000A0E3 MOV R0,#+0 \ 000000F4 ........ BL RecountMenu 3273 } 3274 } 3275 3276 3277 if (msg->gbsmsg->msg==KEY_DOWN) \ ??ClOnKey_1: \ 000000F8 040096E5 LDR R0,[R6, #+4] \ 000000FC 93A0A0E3 MOV R10,#+147 \ 00000100 041090E5 LDR R1,[R0, #+4] \ 00000104 40AF8AE3 ORR R10,R10,#0x100 \ 00000108 0A0051E1 CMP R1,R10 \ 0000010C E400001A BNE ??ClOnKey_11 3278 { 3279 switch(msg->gbsmsg->submess) \ 00000110 080090E5 LDR R0,[R0, #+8] \ 00000114 DC1398E5 LDR R1,[R8, #+988] \ 00000118 01B0A0E3 MOV R11,#+1 \ 0000011C 0050A0E3 MOV R5,#+0 \ 00000120 010040E2 SUB R0,R0,#+1 \ 00000124 3D0050E3 CMP R0,#+61 \ 00000128 9500008A BHI ??ClOnKey_12 \ 0000012C 012F8FE2 ADR R2,??ClOnKey_0 \ 00000130 0020D2E7 LDRB R2,[R2, R0] \ 00000134 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??ClOnKey_0: \ 00000138 24929226 DC8 +36,+146,+146,+38 \ 0000013C 92929292 DC8 +146,+146,+146,+146 \ 00000140 92927026 DC8 +146,+146,+112,+38 \ 00000144 787E9292 DC8 +120,+126,+146,+146 \ 00000148 92929292 DC8 +146,+146,+146,+146 \ 0000014C 92929292 DC8 +146,+146,+146,+146 \ 00000150 92309292 DC8 +146,+48,+146,+146 \ 00000154 92929292 DC8 +146,+146,+146,+146 \ 00000158 92929292 DC8 +146,+146,+146,+146 \ 0000015C 92929292 DC8 +146,+146,+146,+146 \ 00000160 92549292 DC8 +146,+84,+146,+146 \ 00000164 92929292 DC8 +146,+146,+146,+146 \ 00000168 92929292 DC8 +146,+146,+146,+146 \ 0000016C 92929292 DC8 +146,+146,+146,+146 \ 00000170 92920F14 DC8 +146,+146,+15,+20 \ 00000174 1F190000 DC8 +31,+25,+0,+0 3280 { 3281 case UP_BUTTON: if(VIEW_MODE) MoveUp(1); else MoveUp(0); break; \ ??ClOnKey_13: \ 00000178 000051E3 CMP R1,#+0 \ 0000017C 0000A003 MOVEQ R0,#+0 \ 00000180 0100A013 MOVNE R0,#+1 \ ??ClOnKey_14: \ 00000184 ........ BL MoveUp \ 00000188 7D0000EA B ??ClOnKey_12 3282 case DOWN_BUTTON: if(VIEW_MODE) MoveDown(1); else MoveDown(0); break; \ ??ClOnKey_15: \ 0000018C 000051E3 CMP R1,#+0 \ 00000190 0000A003 MOVEQ R0,#+0 \ 00000194 0100A013 MOVNE R0,#+1 \ ??ClOnKey_16: \ 00000198 ........ BL MoveDown \ 0000019C 780000EA B ??ClOnKey_12 3283 case RIGHT_BUTTON: if(VIEW_MODE) MoveDown(0); else MoveDown(1); break; \ ??ClOnKey_17: \ 000001A0 000051E3 CMP R1,#+0 \ 000001A4 0100000A BEQ ??ClOnKey_18 \ 000001A8 0000A0E3 MOV R0,#+0 \ 000001AC F9FFFFEA B ??ClOnKey_16 \ ??ClOnKey_18: \ 000001B0 0100A0E3 MOV R0,#+1 \ 000001B4 F7FFFFEA B ??ClOnKey_16 3284 case LEFT_BUTTON: if(VIEW_MODE) MoveUp(0); else MoveUp(1); break; \ ??ClOnKey_19: \ 000001B8 000051E3 CMP R1,#+0 \ 000001BC 0000A013 MOVNE R0,#+0 \ 000001C0 EFFFFF1A BNE ??ClOnKey_14 \ 000001C4 0100A0E3 MOV R0,#+1 \ 000001C8 EDFFFFEA B ??ClOnKey_14 3285 case LEFT_SOFT: 3286 { 3287 extern void CreateMainMenu(); 3288 // DoScreen(); 3289 CreateMainMenu(); \ ??ClOnKey_20: \ 000001CC ........ _BLF CreateMainMenu,??CreateMainMenu??rA \ 000001D0 6B0000EA B ??ClOnKey_12 3290 // ShowMainMenu(); 3291 }break; 3292 case RIGHT_SOFT: 3293 case RED_BUTTON: 3294 if (strlen(ContactT9Key)) \ ??ClOnKey_21: \ 000001D4 080089E0 ADD R0,R9,R8 \ 000001D8 1B0000EF SWI +27 \ 000001DC 000050E3 CMP R0,#+0 \ 000001E0 0300000A BEQ ??ClOnKey_22 3295 { 3296 BackSpaceContactT9(); \ 000001E4 ........ BL BackSpaceContactT9 3297 RecountMenu(NULL,1); \ 000001E8 0110A0E3 MOV R1,#+1 \ 000001EC 0500A0E1 MOV R0,R5 \ 000001F0 3E0000EA B ??ClOnKey_23 3298 return(-1); 3299 } 3300 else ShowLoadScreen=1;//return 1; \ ??ClOnKey_22: \ 000001F4 E0B388E5 STR R11,[R8, #+992] \ 000001F8 610000EA B ??ClOnKey_12 3301 break; 3302 case ENTER_BUTTON: 3303 { 3304 if (t) \ ??ClOnKey_24: \ 000001FC 000054E3 CMP R4,#+0 \ 00000200 3B00000A BEQ ??ClOnKey_25 3305 { 3306 if (t->isgroup) \ 00000204 080094E5 LDR R0,[R4, #+8] \ 00000208 000050E3 CMP R0,#+0 \ 0000020C 0500000A BEQ ??ClOnKey_26 3307 { 3308 t->state^=0xFFFF; \ 00000210 B405D4E1 LDRH R0,[R4, #+84] \ 00000214 FF10A0E3 MOV R1,#+255 \ 00000218 FF1C81E3 ORR R1,R1,#0xFF00 \ 0000021C 000021E0 EOR R0,R1,R0 \ 00000220 B405C4E1 STRH R0,[R4, #+84] 3309 RecountMenu(t,1); \ 00000224 2F0000EA B ??ClOnKey_27 3310 return(-1); 3311 } 3312 if (strlen(ContactT9Key)) \ ??ClOnKey_26: \ 00000228 080089E0 ADD R0,R9,R8 \ 0000022C 1B0000EF SWI +27 \ 00000230 000050E3 CMP R0,#+0 \ 00000234 0500000A BEQ ??ClOnKey_28 3313 { 3314 ClearContactT9Key(); \ 00000238 2010A0E3 MOV R1,#+32 \ 0000023C 080089E0 ADD R0,R9,R8 \ 00000240 1D0100EF SWI +285 3315 RecountMenu(NULL,1); \ 00000244 0110A0E3 MOV R1,#+1 \ 00000248 0500A0E1 MOV R0,R5 \ 0000024C ........ BL RecountMenu 3316 } 3317 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<0) \ ??ClOnKey_30: \ 0000028C ........ _BLF CountContacts,??CountContacts??rA \ 00000290 010050E3 CMP R0,#+1 \ 00000294 3A0000BA BLT ??ClOnKey_12 \ 00000298 020000EA B ??ClOnKey_31 3324 { 3325 while(t=(CLIST *)(t->next)) 3326 { 3327 if (t->isunread) goto doit; \ ??ClOnKey_32: \ 0000029C 840094E5 LDR R0,[R4, #+132] \ 000002A0 000050E3 CMP R0,#+0 \ 000002A4 0900001A BNE ??ClOnKey_33 3328 } \ ??ClOnKey_31: \ 000002A8 004094E5 LDR R4,[R4, #+0] \ 000002AC 000054E3 CMP R4,#+0 \ 000002B0 F9FFFF1A BNE ??ClOnKey_32 3329 t=(CLIST *)(&cltop); \ 000002B4 E94F88E2 ADD R4,R8,#+932 3330 while(t=(CLIST *)(t->next)) \ ??ClOnKey_34: \ 000002B8 004094E5 LDR R4,[R4, #+0] \ 000002BC 000054E3 CMP R4,#+0 \ 000002C0 0200000A BEQ ??ClOnKey_33 3331 { 3332 if (t->isunread) goto doit; \ 000002C4 840094E5 LDR R0,[R4, #+132] \ 000002C8 000050E3 CMP R0,#+0 \ 000002CC F9FFFF0A BEQ ??ClOnKey_34 3333 } 3334 if (t && Is_Show_Groups) 3335 { 3336 if (!t->isgroup) t=FindGroupByID(t->group); 3337 if (t && !t->state) 3338 { 3339 t->state^=0xFFFF; 3340 goto does; 3341 } 3342 } 3343 3344 /* while(t=(CLIST *)(t->next)) 3345 { 3346 if (t->isactive) goto doit; 3347 } 3348 t=(CLIST *)(&cltop); 3349 3350 while(t=(CLIST *)(t->next)) 3351 { 3352 if (t->isactive) goto doit; 3353 } 3354 return(-1);*/ 3355 doit: 3356 { 3357 CLIST *g=FindGroupByID(t->group); \ ??ClOnKey_33: \ 000002D0 100094E5 LDR R0,[R4, #+16] \ 000002D4 ........ _BLF FindGroupByID,??FindGroupByID??rA 3358 if (g) \ 000002D8 000050E3 CMP R0,#+0 3359 { 3360 if (g->state) \ 000002DC B415D011 LDRHNE R1,[R0, #+84] \ 000002E0 00005113 CMPNE R1,#+0 3361 { 3362 g->state=0; \ 000002E4 B455C011 STRHNE R5,[R0, #+84] 3363 } 3364 } 3365 } 3366 does: 3367 RecountMenu(t,1); \ ??ClOnKey_27: \ 000002E8 0110A0E3 MOV R1,#+1 \ 000002EC 0400A0E1 MOV R0,R4 \ ??ClOnKey_23: \ 000002F0 ........ BL RecountMenu 3368 return(-1); \ ??ClOnKey_25: \ 000002F4 0500E0E1 MVN R0,R5 \ 000002F8 F08FBDE8 POP {R4-R11,PC} 3369 } 3370 break; 3371 case GREEN_BUTTON: 3372 { 3373 IsActiveUp=!IsActiveUp; \ ??ClOnKey_35: \ 000002FC 0C0398E5 LDR R0,[R8, #+780] 3374 RecountMenu(NULL,1); \ 00000300 0110A0E3 MOV R1,#+1 \ 00000304 000050E3 CMP R0,#+0 \ 00000308 00B0A013 MOVNE R11,#+0 \ 0000030C 0CB388E5 STR R11,[R8, #+780] \ 00000310 0000A0E3 MOV R0,#+0 \ 00000314 ........ BL RecountMenu \ 00000318 190000EA B ??ClOnKey_12 3375 } 3376 break; 3377 // case RED_BUTTON: return (1); 3378 case VOL_UP_BUTTON: 3379 #ifdef NEWSGOLD 3380 if(isVolUpButton) \ ??ClOnKey_36: \ 0000031C BC019FE5 LDR R0,??ClOnKey_37 ;; isVolUpButton \ 00000320 000090E5 LDR R0,[R0, #+0] \ 00000324 000050E3 CMP R0,#+0 \ 00000328 1500000A BEQ ??ClOnKey_12 3381 CreateScreenSelectGUI(); \ 0000032C ........ _BLF CreateScreenSelectGUI,??CreateScreenSelectGUI??rA \ 00000330 130000EA B ??ClOnKey_12 3382 #endif 3383 break; 3384 case VOL_DOWN_BUTTON: 3385 { 3386 if(isVolDownButton) \ ??ClOnKey_38: \ 00000334 A8019FE5 LDR R0,??ClOnKey_37+0x4 ;; isVolDownButton \ 00000338 000090E5 LDR R0,[R0, #+0] \ 0000033C 000050E3 CMP R0,#+0 \ 00000340 0F00000A BEQ ??ClOnKey_12 3387 { 3388 if(!away_m) \ 00000344 2C0398E5 LDR R0,[R8, #+812] \ 00000348 000050E3 CMP R0,#+0 \ 0000034C 0300001A BNE ??ClOnKey_39 3389 { 3390 away_m=!away_m; \ 00000350 2CB388E5 STR R11,[R8, #+812] 3391 main_d=1; \ 00000354 C8B288E5 STR R11,[R8, #+712] 3392 InputAwayMsg(); \ 00000358 ........ BL InputAwayMsg \ 0000035C 080000EA B ??ClOnKey_12 3393 } 3394 else 3395 { 3396 msg_away_timer=0; 3397 away_m=!away_m; 3398 if(change_back_status) \ ??ClOnKey_39: \ 00000360 340398E5 LDR R0,[R8, #+820] \ 00000364 285388E5 STR R5,[R8, #+808] \ 00000368 2C5388E5 STR R5,[R8, #+812] \ 0000036C 000050E3 CMP R0,#+0 \ 00000370 0300000A BEQ ??ClOnKey_12 3399 { 3400 CurrentStatus=status_rem; \ 00000374 300398E5 LDR R0,[R8, #+816] \ 00000378 180388E5 STR R0,[R8, #+792] 3401 set_my_status(); \ 0000037C ........ BL set_my_status 3402 change_back_status=0; \ 00000380 345388E5 STR R5,[R8, #+820] 3403 } 3404 } 3405 } 3406 } 3407 break; 3408 } 3409 3410 if (key=='#' && (CountContacts()>0))//Если есть хоть один контакт то выполнять,иначе возможен пикофф \ ??ClOnKey_12: \ 00000384 230057E3 CMP R7,#+35 \ 00000388 4500001A BNE ??ClOnKey_11 \ 0000038C ........ _BLF CountContacts,??CountContacts??rA \ 00000390 010050E3 CMP R0,#+1 \ 00000394 300000BA BLT ??ClOnKey_40 3411 { 3412 if(ActionResh) \ 00000398 48019FE5 LDR R0,??ClOnKey_37+0x8 ;; ActionResh \ 0000039C 000090E5 LDR R0,[R0, #+0] \ 000003A0 000050E3 CMP R0,#+0 \ 000003A4 1900001A BNE ??ClOnKey_41 3413 { 3414 while(t=(CLIST *)(t->next)) 3415 { 3416 if (t->isactive) goto doit4; 3417 } 3418 t=(CLIST *)(&cltop); 3419 while(t=(CLIST *)(t->next)) 3420 { 3421 if (t->isactive) goto doit4; 3422 } 3423 return(-1); 3424 doit4: 3425 { 3426 CLIST *g=FindGroupByID(t->group); 3427 if (g) 3428 { 3429 if (g->state) 3430 { 3431 g->state=0; 3432 } 3433 } 3434 } 3435 RecountMenu(t,1); 3436 } 3437 else 3438 { 3439 if(t->log && !(t->just_now))//очистить лог \ 000003A8 940094E5 LDR R0,[R4, #+148] \ 000003AC 000050E3 CMP R0,#+0 \ 000003B0 0600000A BEQ ??ClOnKey_42 \ 000003B4 680094E5 LDR R0,[R4, #+104] \ 000003B8 000050E3 CMP R0,#+0 \ 000003BC 0300001A BNE ??ClOnKey_42 3440 { 3441 FreeLOGQ(&t->log); \ 000003C0 940084E2 ADD R0,R4,#+148 \ 000003C4 ........ BL FreeLOGQ 3442 t->msg_count=0; \ 000003C8 A45084E5 STR R5,[R4, #+164] 3443 t->isactive=0; \ 000003CC A05084E5 STR R5,[R4, #+160] 3444 } 3445 3446 if(t->just_now)//если контакт тока зашел,то обнуляем \ ??ClOnKey_42: \ 000003D0 680094E5 LDR R0,[R4, #+104] \ 000003D4 000050E3 CMP R0,#+0 \ 000003D8 0200000A BEQ ??ClOnKey_43 3447 { 3448 CLIST *tt; 3449 tt=FindContactByUin(t->uin); 3450 tt->just_now=0; \ 000003DC 0C0094E5 LDR R0,[R4, #+12] \ 000003E0 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000003E4 685080E5 STR R5,[R0, #+104] 3451 } 3452 3453 if(t->uin==UIN)//если нажали на Loopback, то обнуляем все just_now'ы \ ??ClOnKey_43: \ 000003E8 ........ LDR R1,??DataTable108 ;; UIN \ 000003EC 0C0094E5 LDR R0,[R4, #+12] \ 000003F0 001091E5 LDR R1,[R1, #+0] \ 000003F4 010050E1 CMP R0,R1 \ 000003F8 1F00001A BNE ??ClOnKey_44 3454 { 3455 CLIST *tt; 3456 tt=(CLIST *)(&cltop); \ 000003FC E90F88E2 ADD R0,R8,#+932 \ 00000400 1A0000EA B ??ClOnKey_45 \ ??ClOnKey_46: \ 00000404 A00094E5 LDR R0,[R4, #+160] \ 00000408 000050E3 CMP R0,#+0 \ 0000040C 0900001A BNE ??ClOnKey_47 \ ??ClOnKey_41: \ 00000410 004094E5 LDR R4,[R4, #+0] \ 00000414 000054E3 CMP R4,#+0 \ 00000418 F9FFFF1A BNE ??ClOnKey_46 \ 0000041C E94F88E2 ADD R4,R8,#+932 \ ??ClOnKey_48: \ 00000420 004094E5 LDR R4,[R4, #+0] \ 00000424 000054E3 CMP R4,#+0 \ 00000428 B1FFFF0A BEQ ??ClOnKey_25 \ 0000042C A00094E5 LDR R0,[R4, #+160] \ 00000430 000050E3 CMP R0,#+0 \ 00000434 F9FFFF0A BEQ ??ClOnKey_48 \ ??ClOnKey_47: \ 00000438 100094E5 LDR R0,[R4, #+16] \ 0000043C ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000440 000050E3 CMP R0,#+0 \ 00000444 B415D011 LDRHNE R1,[R0, #+84] \ 00000448 00005113 CMPNE R1,#+0 \ 0000044C B455C011 STRHNE R5,[R0, #+84] \ 00000450 0110A0E3 MOV R1,#+1 \ 00000454 0400A0E1 MOV R0,R4 \ ??ClOnKey_49: \ 00000458 ........ BL RecountMenu 3457 while(tt=(CLIST *)(tt->next)) 3458 { 3459 if(tt->just_now) tt->just_now=0; 3460 } 3461 } 3462 if(strlen(ContactT9Key)) ClearContactT9Key(); 3463 RecountMenu(NULL,0); 3464 } 3465 } 3466 } 3467 3468 if ((key>='0')&&(key<='9') && msg->gbsmsg->msg==KEY_DOWN) 3469 { 3470 AddContactT9Key(key); 3471 RecountMenu(NULL,1); 3472 return(-1); 3473 } 3474 return 0; \ ??ClOnKey_40: \ 0000045C 0000A0E3 MOV R0,#+0 \ 00000460 F08FBDE8 POP {R4-R11,PC} ;; return \ ??ClOnKey_50: \ 00000464 681090E5 LDR R1,[R0, #+104] \ 00000468 000051E3 CMP R1,#+0 \ 0000046C 68508015 STRNE R5,[R0, #+104] \ ??ClOnKey_45: \ 00000470 000090E5 LDR R0,[R0, #+0] \ 00000474 000050E3 CMP R0,#+0 \ 00000478 F9FFFF1A BNE ??ClOnKey_50 \ ??ClOnKey_44: \ 0000047C 080089E0 ADD R0,R9,R8 \ 00000480 1B0000EF SWI +27 \ 00000484 000050E3 CMP R0,#+0 \ 00000488 0200000A BEQ ??ClOnKey_51 \ 0000048C 2010A0E3 MOV R1,#+32 \ 00000490 080089E0 ADD R0,R9,R8 \ 00000494 1D0100EF SWI +285 \ ??ClOnKey_51: \ 00000498 0010A0E3 MOV R1,#+0 \ 0000049C 0100A0E1 MOV R0,R1 \ 000004A0 ECFFFFEA B ??ClOnKey_49 \ ??ClOnKey_11: \ 000004A4 300057E3 CMP R7,#+48 \ 000004A8 EBFFFFBA BLT ??ClOnKey_40 \ 000004AC 3A0057E3 CMP R7,#+58 \ 000004B0 E9FFFFAA BGE ??ClOnKey_40 \ 000004B4 040096E5 LDR R0,[R6, #+4] \ 000004B8 040090E5 LDR R0,[R0, #+4] \ 000004BC 0A0050E1 CMP R0,R10 \ 000004C0 E5FFFF1A BNE ??ClOnKey_40 \ 000004C4 0700A0E1 MOV R0,R7 \ 000004C8 ........ BL AddContactT9Key \ 000004CC 0110A0E3 MOV R1,#+1 \ 000004D0 0000A0E3 MOV R0,#+0 \ 000004D4 ........ BL RecountMenu \ 000004D8 0000E0E3 MVN R0,#+0 \ 000004DC F08FBDE8 POP {R4-R11,PC} \ ??ClOnKey_37: \ 000004E0 ........ DC32 isVolUpButton \ 000004E4 ........ DC32 isVolDownButton \ 000004E8 ........ DC32 ActionResh 3475 } 3476 3477 3478 /* 3479 static int OnKey(MAIN_GUI *data, GUI_MSG *msg) 3480 { 3481 DirectRedrawGUI(); 3482 // int k=msg->gbsmsg->submess; 3483 ClOnKey(msg); 3484 return(0); 3485 } 3486 3487 extern void kill_data(void *p, void (*func_p)(void *)); 3488 3489 int method8(void){return(0);} 3490 int method9(void){return(0);} 3491 3492 const void * const gui_methods2[11]={ 3493 (void *)OnRedraw, 3494 (void *)onCreate, 3495 (void *)onClose, 3496 (void *)onFocus, 3497 (void *)onUnfocus, 3498 (void *)OnKey, 3499 0, 3500 (void *)kill_data, 3501 (void *)method8, 3502 (void *)method9, 3503 0 3504 }; 3505 3506 3507 const RECT Canvas={0,0,0,0}; 3508 static void CreateCL() 3509 { 3510 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); 3511 zeromem(main_gui,sizeof(MAIN_GUI)); 3512 main_gui->gui.canvas=(void *)(&Canvas); 3513 main_gui->gui.methods=(void *)gui_methods2; 3514 // main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); 3515 //patch_rect((RECT*)&Canvas,0,YDISP,ScreenW()-1,ScreenH()-1); 3516 contactlist_menu_id=CreateGUI(main_gui); 3517 } 3518 3519 */ 3520 3521 3522 #ifdef ELKA 3523 #undef YDISP 3524 #define YDISP 24 3525 #endif 3526 3527 3528 /************************************************************************************************/ 3529 3530 3531 3532 //=============================================================================================== 3533 3534 int DNR_ID=0; 3535 int DNR_TRIES=3; 3536 3537 char hostname[128]; //2058 che toka 128? :) 3538 3539 int host_counter = 0; 3540 3541 //--------------------------------------------------------------------------- 3542 \ In segment CODE, align 4, keep-with-next 3543 const char *GetHost(int cnt, const char *str, char *buf) 3544 { 3545 const char *tmp = str, *begin, *end; \ GetHost: \ 00000000 0130A0E1 MOV R3,R1 3546 if(cnt) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0100001A BNE ??GetHost_0 \ 0000000C 180000EA B ??GetHost_1 3547 { 3548 for(;cnt;cnt--) 3549 { 3550 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 3551 if(!*str) str = tmp; \ 00000030 00005CE3 CMP R12,#+0 \ 00000034 0200001A BNE ??GetHost_3 \ 00000038 0310A0E1 MOV R1,R3 \ 0000003C 000000EA B ??GetHost_3 3552 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 3553 if(!*str) str = tmp; \ ??GetHost_5: \ 00000064 00005CE3 CMP R12,#+0 \ 00000068 0310A001 MOVEQ R1,R3 3554 } \ 0000006C 010050E2 SUBS R0,R0,#+1 \ 00000070 E7FFFF1A BNE ??GetHost_0 3555 } 3556 tmp = buf; \ ??GetHost_1: \ 00000074 0200A0E1 MOV R0,R2 3557 begin = str; \ 00000078 0130A0E1 MOV R3,R1 \ 0000007C 000000EA B ??GetHost_6 3558 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 3559 end = str; 3560 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 3572 } 3573 } 3574 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 3575 int GetPort(int cnt, const char *str) 3576 { \ GetPort: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 3577 const char *tmp = str; \ 00000008 01C0A0E1 MOV R12,R1 3578 char numbuf[6], numcnt = 0; \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 0030A0E3 MOV R3,#+0 3579 if(cnt) \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0100001A BNE ??GetPort_0 \ 0000001C 180000EA B ??GetPort_1 3580 { 3581 for(;cnt;cnt--) 3582 { 3583 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 3584 if(!*str) str = tmp; \ 00000040 000054E3 CMP R4,#+0 \ 00000044 0200001A BNE ??GetPort_3 \ 00000048 0C10A0E1 MOV R1,R12 \ 0000004C 000000EA B ??GetPort_3 3585 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 3586 if(!*str) str = tmp; \ ??GetPort_5: \ 00000074 000054E3 CMP R4,#+0 \ 00000078 0C10A001 MOVEQ R1,R12 3587 } \ 0000007C 010050E2 SUBS R0,R0,#+1 \ 00000080 E7FFFF1A BNE ??GetPort_0 3588 } 3589 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 3590 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} 3591 str++; 3592 numbuf[5] = 0; \ 000000BC 0520CDE5 STRB R2,[SP, #+5] \ 000000C0 030000EA B ??GetPort_7 3593 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 3594 numbuf[numcnt] = 0; //2058 \ ??GetPort_9: \ 00000100 0020C0E5 STRB R2,[R0, #+0] 3595 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 3596 3597 } 3598 // 3599 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 3600 int GetHostsCount(const char *str) 3601 { 3602 char cnt = 1; \ GetHostsCount: \ 00000000 0110A0E3 MOV R1,#+1 \ 00000004 000000EA B ??GetHostsCount_0 3603 for(;cnt;cnt++) 3604 { 3605 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 3606 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 3607 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 3608 if(!*str) return cnt; \ ??GetHostsCount_5: \ 0000005C 000052E3 CMP R2,#+0 \ 00000060 F2FFFF0A BEQ ??GetHostsCount_3 3609 } \ 00000064 011081E2 ADD R1,R1,#+1 \ 00000068 FF1011E2 ANDS R1,R1,#0xFF \ 0000006C E6FFFF1A BNE ??GetHostsCount_0 3610 return 0; \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 1EFF2FE1 BX LR ;; return 3611 } 3612 //--------------------------------------------------------------------------- 3613 \ In segment CODE, align 4, keep-with-next 3614 void create_connect(void) 3615 { \ create_connect: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3616 // static int host_counter = 0; 3617 char hostbuf[128], buf[128]; 3618 int hostport; 3619 int ***p_res=NULL; 3620 void do_reconnect(void); 3621 SOCK_ADDR sa; 3622 //Устанавливаем соединение 3623 connect_state = 0; \ 00000004 ........ LDR R5,??DataTable106 ;; icons 3624 int err; 3625 unsigned int ip; 3626 GBS_DelTimer(&reconnect_tmr); 3627 if (!IsGPRSEnabled()) \ 00000008 ........ LDR R8,??DataTable100 ;; Canvas \ 0000000C 45DF4DE2 SUB SP,SP,#+276 \ 00000010 0040A0E3 MOV R4,#+0 \ 00000014 00408DE5 STR R4,[SP, #+0] \ 00000018 7C4385E5 STR R4,[R5, #+892] \ 0000001C B800A0E3 MOV R0,#+184 \ 00000020 680D80E3 ORR R0,R0,#0x1A00 \ 00000024 056080E0 ADD R6,R0,R5 \ 00000028 0600A0E1 MOV R0,R6 \ 0000002C 8C0100EF SWI +396 \ 00000030 9800A0E3 MOV R0,#+152 \ 00000034 640D80E3 ORR R0,R0,#0x1900 \ 00000038 057080E0 ADD R7,R0,R5 \ 0000003C A70000EF SWI +167 \ 00000040 000050E3 CMP R0,#+0 \ 00000044 0400001A BNE ??create_connect_0 3628 { 3629 is_gprs_online=0; \ 00000048 9C4385E5 STR R4,[R5, #+924] 3630 strcpy(logmsg,LG_GRWAITFORGPRS); \ 0000004C D41088E2 ADD R1,R8,#+212 \ 00000050 0700A0E1 MOV R0,R7 \ 00000054 1A0000EF SWI +26 3631 SMART_REDRAW(); \ 00000058 830000EA B ??create_connect_1 3632 return; 3633 } 3634 DNR_ID=0; 3635 *socklasterr()=0; 3636 if(host_counter > GetHostsCount(NATICQ_HOST)-1) host_counter = 0; //2058 \ ??create_connect_0: \ 0000005C 88929FE5 LDR R9,??create_connect_2+0x4 ;; NATICQ_HOST \ 00000060 E44385E5 STR R4,[R5, #+996] \ 00000064 7C8100EF SWI +33148 \ 00000068 004080E5 STR R4,[R0, #+0] \ 0000006C 0900A0E1 MOV R0,R9 \ 00000070 ........ BL GetHostsCount \ 00000074 EC1395E5 LDR R1,[R5, #+1004] \ 00000078 010040E2 SUB R0,R0,#+1 \ 0000007C 010050E1 CMP R0,R1 \ 00000080 EC4385B5 STRLT R4,[R5, #+1004] 3637 GetHost(host_counter, NATICQ_HOST, hostbuf); \ 00000084 EC0395E5 LDR R0,[R5, #+1004] \ 00000088 14208DE2 ADD R2,SP,#+20 \ 0000008C 0910A0E1 MOV R1,R9 \ 00000090 ........ BL GetHost 3638 hostport = GetPort(host_counter, NATICQ_HOST); \ 00000094 EC0395E5 LDR R0,[R5, #+1004] \ 00000098 0910A0E1 MOV R1,R9 \ 0000009C ........ BL GetPort \ 000000A0 0090A0E1 MOV R9,R0 3639 host_counter++; \ 000000A4 EC0395E5 LDR R0,[R5, #+1004] 3640 3641 sprintf(hostname, "Connect to %s:%d", hostbuf, hostport); //2058 - stavim hostname, izbavlyaemsya ot buf \ 000000A8 0930A0E1 MOV R3,R9 \ 000000AC 010080E2 ADD R0,R0,#+1 \ 000000B0 EC0385E5 STR R0,[R5, #+1004] \ 000000B4 14208DE2 ADD R2,SP,#+20 \ 000000B8 EC1088E2 ADD R1,R8,#+236 \ 000000BC 700D85E2 ADD R0,R5,#+7168 \ 000000C0 160000EF SWI +22 3642 //strcpy(hostbuf2, hostbuf); //vyvod host v get_online_time 3643 zeromem(hostbuf2,128); \ 000000C4 6800A0E3 MOV R0,#+104 \ 000000C8 6C0D80E3 ORR R0,R0,#0x1B00 \ 000000CC 05A080E0 ADD R10,R0,R5 \ 000000D0 8010A0E3 MOV R1,#+128 \ 000000D4 0A00A0E1 MOV R0,R10 \ 000000D8 1D0100EF SWI +285 3644 sprintf(hostbuf2, percent_s,hostbuf); \ 000000DC 14208DE2 ADD R2,SP,#+20 \ 000000E0 081088E2 ADD R1,R8,#+8 \ 000000E4 0A00A0E1 MOV R0,R10 3645 strcpy(logmsg,buf); 3646 SMART_REDRAW(); 3647 3648 ip=str2ip(hostbuf); \ 000000E8 ........ LDR R10,??DataTable101 ;; do_reconnect \ 000000EC 160000EF SWI +22 \ 000000F0 94108DE2 ADD R1,SP,#+148 \ 000000F4 0700A0E1 MOV R0,R7 \ 000000F8 1A0000EF SWI +26 \ 000000FC ........ BL SMART_REDRAW \ 00000100 14008DE2 ADD R0,SP,#+20 \ 00000104 B70100EF SWI +439 \ 00000108 04B0E0E1 MVN R11,R4 \ 0000010C 0B0050E1 CMP R0,R11 \ 00000110 0500000A BEQ ??create_connect_3 3649 if (ip!=0xFFFFFFFF) 3650 { 3651 sa.ip=ip; \ 00000114 08008DE5 STR R0,[SP, #+8] 3652 strcpy(logmsg,"\nConnect by IP!"); //strcat->strcpy \ 00000118 401F88E2 ADD R1,R8,#+256 \ 0000011C 0700A0E1 MOV R0,R7 \ 00000120 1A0000EF SWI +26 3653 SMART_REDRAW(); \ 00000124 ........ BL SMART_REDRAW 3654 goto L_CONNECT; \ 00000128 390000EA B ??create_connect_4 3655 } \ ??create_connect_3: \ 0000012C 6D1F8FE2 ADR R1,??create_connect_2 ;; "\n" \ 00000130 0700A0E1 MOV R0,R7 3656 strcat(logmsg,"\n"); \ 00000134 170000EF SWI +23 3657 strcpy(logmsg,LG_GRSENDDNR); //strcat->strcpy \ 00000138 441F88E2 ADD R1,R8,#+272 \ 0000013C 0700A0E1 MOV R0,R7 \ 00000140 1A0000EF SWI +26 3658 SMART_REDRAW(); \ 00000144 ........ BL SMART_REDRAW 3659 err=async_gethostbyname(hostbuf,&p_res,&DNR_ID); //03461351 3<70<19<81 \ 00000148 F92F85E2 ADD R2,R5,#+996 \ 0000014C 0D10A0E1 MOV R1,SP \ 00000150 14008DE2 ADD R0,SP,#+20 \ 00000154 B60100EF SWI +438 \ 00000158 0030B0E1 MOVS R3,R0 3660 if (err) \ 0000015C 1600000A BEQ ??create_connect_5 3661 { 3662 if ((err==0xC9)||(err==0xD6)) \ 00000160 C90053E3 CMP R3,#+201 \ 00000164 D6005313 CMPNE R3,#+214 \ 00000168 0600001A BNE ??create_connect_6 3663 { 3664 if (DNR_ID) \ 0000016C E40395E5 LDR R0,[R5, #+996] \ 00000170 000050E3 CMP R0,#+0 \ 00000174 1000000A BEQ ??create_connect_5 3665 { 3666 host_counter--; \ 00000178 EC0395E5 LDR R0,[R5, #+1004] \ 0000017C 010040E2 SUB R0,R0,#+1 \ 00000180 EC0385E5 STR R0,[R5, #+1004] 3667 return; //Ждем готовности DNR \ 00000184 390000EA B ??create_connect_7 3668 } 3669 } 3670 else 3671 { 3672 snprintf(logmsg,255,LG_GRDNRERROR,err); \ ??create_connect_6: \ 00000188 472F88E2 ADD R2,R8,#+284 \ 0000018C FF10A0E3 MOV R1,#+255 \ 00000190 0700A0E1 MOV R0,R7 \ 00000194 1B0100EF SWI +283 3673 SMART_REDRAW(); \ 00000198 ........ BL SMART_REDRAW 3674 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ ??create_connect_8: \ 0000019C ........ LDR R0,??DataTable102 ;; RECONNECT_TIME \ 000001A0 0A20A0E1 MOV R2,R10 \ 000001A4 000090E5 LDR R0,[R0, #+0] \ 000001A8 D830A0E3 MOV R3,#+216 \ 000001AC 930001E0 MUL R1,R3,R0 \ 000001B0 0600A0E1 MOV R0,R6 \ 000001B4 4D0000EF SWI +77 3675 return; \ 000001B8 2C0000EA B ??create_connect_7 3676 } 3677 } 3678 if (p_res) \ ??create_connect_5: \ 000001BC 00009DE5 LDR R0,[SP, #+0] \ 000001C0 000050E3 CMP R0,#+0 \ 000001C4 3D00000A BEQ ??create_connect_9 3679 { 3680 if (p_res[3]) \ 000001C8 0C0090E5 LDR R0,[R0, #+12] \ 000001CC 000050E3 CMP R0,#+0 \ 000001D0 4200000A BEQ ??create_connect_10 3681 { 3682 strcpy(logmsg,buf); \ 000001D4 94108DE2 ADD R1,SP,#+148 \ 000001D8 0700A0E1 MOV R0,R7 \ 000001DC 1A0000EF SWI +26 3683 strcat(logmsg,"\n"); \ 000001E0 401F8FE2 ADR R1,??create_connect_2 ;; "\n" \ 000001E4 0700A0E1 MOV R0,R7 \ 000001E8 170000EF SWI +23 3684 strcpy(logmsg,LG_GRDNROK); \ 000001EC 4B1F88E2 ADD R1,R8,#+300 \ 000001F0 0700A0E1 MOV R0,R7 \ 000001F4 1A0000EF SWI +26 3685 SMART_REDRAW(); \ 000001F8 ........ BL SMART_REDRAW 3686 DNR_TRIES=0; \ 000001FC E84385E5 STR R4,[R5, #+1000] 3687 sa.ip=p_res[3][0][0]; \ 00000200 00109DE5 LDR R1,[SP, #+0] \ 00000204 0C1091E5 LDR R1,[R1, #+12] \ 00000208 001091E5 LDR R1,[R1, #+0] \ 0000020C 001091E5 LDR R1,[R1, #+0] \ 00000210 08108DE5 STR R1,[SP, #+8] 3688 L_CONNECT: 3689 sock=socket(1,1,0); \ ??create_connect_4: \ 00000214 0020A0E3 MOV R2,#+0 \ 00000218 0110A0E3 MOV R1,#+1 \ 0000021C 0100A0E1 MOV R0,R1 \ 00000220 730100EF SWI +371 \ 00000224 800385E5 STR R0,[R5, #+896] 3690 if (sock!=-1) \ 00000228 0B0050E1 CMP R0,R11 \ 0000022C 1A00000A BEQ ??create_connect_11 3691 { 3692 sa.family=1; \ 00000230 0170A0E3 MOV R7,#+1 \ 00000234 B470CDE1 STRH R7,[SP, #+4] 3693 sa.port=htons(hostport); \ 00000238 0908A0E1 MOV R0,R9, LSL #+16 \ 0000023C 2008A0E1 MOV R0,R0, LSR #+16 \ 00000240 7A0100EF SWI +378 \ 00000244 B600CDE1 STRH R0,[SP, #+6] 3694 // sa.ip=htonl(IP_ADDR(82,207,89,182)); 3695 if (connect(sock,&sa,sizeof(sa))!=-1) \ 00000248 800395E5 LDR R0,[R5, #+896] \ 0000024C 1020A0E3 MOV R2,#+16 \ 00000250 04108DE2 ADD R1,SP,#+4 \ 00000254 740100EF SWI +372 \ 00000258 0B0050E1 CMP R0,R11 \ 0000025C 0500000A BEQ ??create_connect_12 3696 { 3697 connect_state=1; \ 00000260 7C7385E5 STR R7,[R5, #+892] 3698 TOTALRECEIVED=0; \ 00000264 844385E5 STR R4,[R5, #+900] 3699 TOTALSENDED=0; \ 00000268 884385E5 STR R4,[R5, #+904] 3700 SMART_REDRAW(); \ ??create_connect_1: \ 0000026C ........ BL SMART_REDRAW \ ??create_connect_7: \ 00000270 45DF8DE2 ADD SP,SP,#+276 \ 00000274 F08FBDE8 POP {R4-R11,PC} 3701 } 3702 else 3703 { 3704 closesocket(sock); \ ??create_connect_12: \ 00000278 800395E5 LDR R0,[R5, #+896] \ 0000027C 760100EF SWI +374 3705 sock=-1; \ 00000280 80B385E5 STR R11,[R5, #+896] 3706 LockSched(); \ 00000284 460100EF SWI +326 3707 ShowMSG(1,(int)LG_MSGCANTCONN); \ 00000288 511F88E2 ADD R1,R8,#+324 \ 0000028C 0100A0E3 MOV R0,#+1 \ 00000290 480100EF SWI +328 3708 UnlockSched(); \ 00000294 470100EF SWI +327 3709 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000298 BFFFFFEA B ??create_connect_8 3710 3711 } 3712 } 3713 else 3714 { 3715 LockSched(); \ ??create_connect_11: \ 0000029C 460100EF SWI +326 3716 ShowMSG(1,(int)LG_MSGCANTCRSC); \ 000002A0 581F88E2 ADD R1,R8,#+352 \ 000002A4 0100A0E3 MOV R0,#+1 \ 000002A8 480100EF SWI +328 3717 UnlockSched(); \ 000002AC 470100EF SWI +327 3718 //Не осилили создания сокета, закрываем GPRS-сессию 3719 GPRS_OnOff(0,1); \ 000002B0 0110A0E3 MOV R1,#+1 \ 000002B4 0000A0E3 MOV R0,#+0 \ 000002B8 8E0100EF SWI +398 \ 000002BC EBFFFFEA B ??create_connect_7 3720 } 3721 } 3722 } 3723 else 3724 { 3725 DNR_TRIES--; \ ??create_connect_9: \ 000002C0 E80395E5 LDR R0,[R5, #+1000] \ 000002C4 010040E2 SUB R0,R0,#+1 \ 000002C8 E80385E5 STR R0,[R5, #+1000] 3726 LockSched(); \ 000002CC 460100EF SWI +326 3727 ShowMSG(1,(int)LG_MSGHOSTNFND); \ 000002D0 631F88E2 ADD R1,R8,#+396 \ 000002D4 0100A0E3 MOV R0,#+1 \ 000002D8 480100EF SWI +328 3728 UnlockSched(); \ 000002DC 470100EF SWI +327 \ ??create_connect_10: \ 000002E0 45DF8DE2 ADD SP,SP,#+276 ;; stack cleaning \ 000002E4 F08FBDE8 POP {R4-R11,PC} ;; return \ ??create_connect_2: \ 000002E8 0A000000 DC8 "\n",+0,+0 \ 000002EC ........ DC32 NATICQ_HOST 3729 } 3730 } 3731 3732 #ifdef SEND_TIMER 3733 GBSTMR send_tmr; 3734 #endif 3735 \ In segment CODE, align 4, keep-with-next 3736 void ClearSendQ(void) 3737 { \ ClearSendQ: \ 00000000 10402DE9 PUSH {R4,LR} 3738 mfree((void *)sendq_p); \ 00000004 ........ LDR R4,??DataTable106 ;; icons \ 00000008 980394E5 LDR R0,[R4, #+920] \ 0000000C 150000EF SWI +21 3739 sendq_p=NULL; \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 980384E5 STR R0,[R4, #+920] 3740 sendq_l=NULL; \ 00000018 940384E5 STR R0,[R4, #+916] 3741 #ifdef SEND_TIMER 3742 GBS_DelTimer(&send_tmr); 3743 #endif 3744 } \ 0000001C 1080BDE8 POP {R4,PC} ;; return 3745 \ In segment CODE, align 4, keep-with-next 3746 void end_socket(void) 3747 { \ end_socket: \ 00000000 10402DE9 PUSH {R4,LR} 3748 if (sock>=0) \ 00000004 ........ LDR R4,??DataTable106 ;; icons \ 00000008 800394E5 LDR R0,[R4, #+896] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD48 POPMI {R4,PC} 3749 { 3750 shutdown(sock,2); \ 00000014 0210A0E3 MOV R1,#+2 \ 00000018 770100EF SWI +375 3751 closesocket(sock); \ 0000001C 800394E5 LDR R0,[R4, #+896] \ 00000020 760100EF SWI +374 3752 } 3753 #ifdef SEND_TIMER 3754 GBS_DelTimer(&send_tmr); 3755 #endif 3756 } \ 00000024 1080BDE8 POP {R4,PC} ;; return 3757 3758 #ifdef SEND_TIMER 3759 static void resend(void) 3760 { 3761 void SendAnswer(int dummy, TPKT *p); 3762 SUBPROC((void*)SendAnswer,0,0); 3763 } 3764 #endif 3765 \ In segment CODE, align 4, keep-with-next 3766 void SendAnswer(int dummy, TPKT *p) 3767 { \ SendAnswer: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 3768 int i; 3769 int j; 3770 if (connect_state<2) \ 00000004 ........ LDR R4,??DataTable106 ;; icons \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C 7C0394E5 LDR R0,[R4, #+892] \ 00000010 020050E3 CMP R0,#+2 \ 00000014 020000AA BGE ??SendAnswer_0 3771 { 3772 mfree(p); \ 00000018 0600A0E1 MOV R0,R6 \ 0000001C 150000EF SWI +21 3773 return; \ 00000020 F083BDE8 POP {R4-R9,PC} 3774 } 3775 if (p) \ ??SendAnswer_0: \ 00000024 000056E3 CMP R6,#+0 \ 00000028 2600000A BEQ ??SendAnswer_1 3776 { 3777 j=sizeof(PKT)+p->pkt.data_len; //Размер пакета \ 0000002C B600D6E1 LDRH R0,[R6, #+6] \ 00000030 085080E2 ADD R5,R0,#+8 3778 TOTALSENDED+=j; \ 00000034 880394E5 LDR R0,[R4, #+904] \ 00000038 000085E0 ADD R0,R5,R0 \ 0000003C 880384E5 STR R0,[R4, #+904] 3779 ALLTOTALSENDED+=j; //by BoBa 10.07 \ 00000040 900394E5 LDR R0,[R4, #+912] \ 00000044 000085E0 ADD R0,R5,R0 \ 00000048 900384E5 STR R0,[R4, #+912] 3780 //Проверяем, не надо ли добавить в очередь 3781 if (sendq_p) \ 0000004C 980394E5 LDR R0,[R4, #+920] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0F00000A BEQ ??SendAnswer_2 3782 { 3783 //Есть очередь, добавляем в нее 3784 sendq_p=realloc((void *)sendq_p,sendq_l+j); \ 00000058 941394E5 LDR R1,[R4, #+916] \ 0000005C 011085E0 ADD R1,R5,R1 \ 00000060 BA0000EF SWI +186 \ 00000064 980384E5 STR R0,[R4, #+920] 3785 memcpy((char *)sendq_p+sendq_l,p,j); \ 00000068 940394E5 LDR R0,[R4, #+916] \ 0000006C 983394E5 LDR R3,[R4, #+920] \ 00000070 0520A0E1 MOV R2,R5 \ 00000074 0610A0E1 MOV R1,R6 \ 00000078 030080E0 ADD R0,R0,R3 \ 0000007C 1E0100EF SWI +286 3786 mfree(p); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 150000EF SWI +21 3787 sendq_l+=j; \ 00000088 940394E5 LDR R0,[R4, #+916] \ 0000008C 000085E0 ADD R0,R5,R0 \ 00000090 940384E5 STR R0,[R4, #+916] 3788 return; \ 00000094 F083BDE8 POP {R4-R9,PC} 3789 } 3790 sendq_p=p; \ ??SendAnswer_2: \ 00000098 986384E5 STR R6,[R4, #+920] 3791 sendq_l=j; \ 0000009C 945384E5 STR R5,[R4, #+916] \ 000000A0 080000EA B ??SendAnswer_1 3792 } 3793 //Отправляем уже существующее в очереди 3794 while((i=sendq_l)!=0) 3795 { 3796 if (i>0x400) i=0x400; 3797 j=send(sock,(void *)sendq_p,i,0); 3798 snprintf(logmsg,255,"send res %d",j); 3799 SMART_REDRAW(); 3800 if (j<0) 3801 { 3802 j=*socklasterr(); 3803 if ((j==0xC9)||(j==0xD6)) 3804 { 3805 //Передали что хотели 3806 strcpy(logmsg,"Send delayed..."); 3807 return; //Видимо, надо ждать сообщения ENIP_BUFFER_FREE 3808 } 3809 else 3810 { 3811 //Ошибка 3812 LockSched(); 3813 ShowMSG(1,(int)"Send error!"); 3814 UnlockSched(); 3815 end_socket(); 3816 return; 3817 } 3818 } 3819 memcpy((void *)sendq_p,(char *)sendq_p+j,sendq_l-=j); //Удалили переданное \ ??SendAnswer_3: \ 000000A4 940394E5 LDR R0,[R4, #+916] \ 000000A8 052040E0 SUB R2,R0,R5 \ 000000AC 942384E5 STR R2,[R4, #+916] \ 000000B0 980394E5 LDR R0,[R4, #+920] \ 000000B4 001085E0 ADD R1,R5,R0 \ 000000B8 1E0100EF SWI +286 3820 if (j` \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 400E80E3 ORR R0,R0,#0x400 \ 000000E8 000057E1 CMP R7,R0 \ 000000EC 800394E5 LDR R0,[R4, #+896] \ 000000F0 407EA0A3 MOVGE R7,#+1024 \ 000000F4 0030A0E3 MOV R3,#+0 \ 000000F8 0720A0E1 MOV R2,R7 \ 000000FC 790100EF SWI +377 \ 00000100 0050A0E1 MOV R5,R0 \ 00000104 9800A0E3 MOV R0,#+152 \ 00000108 640D80E3 ORR R0,R0,#0x1900 \ 0000010C 048080E0 ADD R8,R0,R4 \ 00000110 0530A0E1 MOV R3,R5 \ 00000114 0920A0E1 MOV R2,R9 \ 00000118 FF10A0E3 MOV R1,#+255 \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 1B0100EF SWI +283 \ 00000124 ........ BL SMART_REDRAW \ 00000128 000055E3 CMP R5,#+0 \ 0000012C DCFFFF5A BPL ??SendAnswer_3 \ 00000130 7C8100EF SWI +33148 \ 00000134 005090E5 LDR R5,[R0, #+0] \ 00000138 C90055E3 CMP R5,#+201 \ 0000013C D6005513 CMPNE R5,#+214 \ 00000140 0300001A BNE ??SendAnswer_6 \ 00000144 0C1089E2 ADD R1,R9,#+12 \ 00000148 0800A0E1 MOV R0,R8 \ 0000014C 1A0000EF SWI +26 \ 00000150 F083BDE8 POP {R4-R9,PC} \ ??SendAnswer_6: \ 00000154 460100EF SWI +326 \ 00000158 1C1089E2 ADD R1,R9,#+28 \ 0000015C 0100A0E3 MOV R0,#+1 \ 00000160 480100EF SWI +328 \ 00000164 470100EF SWI +327 \ 00000168 ........ BL end_socket \ 0000016C F083BDE8 POP {R4-R9,PC} 3829 } 3830 mfree((void *)sendq_p); \ ??SendAnswer_4: \ 00000170 0100A0E1 MOV R0,R1 \ 00000174 150000EF SWI +21 3831 sendq_p=NULL; \ 00000178 986384E5 STR R6,[R4, #+920] 3832 } \ 0000017C F083BDE8 POP {R4-R9,PC} ;; return \ ??SendAnswer_5: \ 00000180 ........ DC32 `?` 3833 3834 \ In segment CODE, align 4, keep-with-next 3835 void send_login(int dummy, TPKT *p) 3836 { 3837 connect_state=2; 3838 char rev[16]; 3839 //Кто будет менять в этом месте идентификатор клиента, буду банить на уровне сервера!!! 3840 //А Вова будет банить на форуме! 3841 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,??DataTable106 ;; icons \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 0200A0E3 MOV R0,#+2 \ 0000001C 7C0386E5 STR R0,[R6, #+892] \ 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 3842 3843 TPKT *p2=malloc(sizeof(PKT)+8); \ 00000034 1000A0E3 MOV R0,#+16 \ 00000038 140000EF SWI +20 \ 0000003C 0070A0E1 MOV R7,R0 3844 p2->pkt.uin=UIN; \ 00000040 ........ LDR R0,??DataTable108 ;; UIN 3845 p2->pkt.type=T_SETCLIENT_ID; 3846 p2->pkt.data_len=8; 3847 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 3848 SendAnswer(0,p2); \ 0000006C 0710A0E1 MOV R1,R7 \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 ........ BL SendAnswer 3849 SendAnswer(dummy,p); \ 00000078 0510A0E1 MOV R1,R5 \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 ........ BL SendAnswer 3850 RXstate=-(int)sizeof(PKT); \ 00000084 0700E0E3 MVN R0,#+7 \ 00000088 780386E5 STR R0,[R6, #+888] 3851 } \ 0000008C FF80BDE8 POP {R0-R7,PC} ;; return \ ??send_login_0: \ 00000090 ........ DC32 `?` 3852 \ In segment CODE, align 4, keep-with-next 3853 void do_ping(void) 3854 { \ do_ping: \ 00000000 00402DE9 PUSH {LR} 3855 TPKT *pingp=malloc(sizeof(PKT)); \ 00000004 0800A0E3 MOV R0,#+8 \ 00000008 140000EF SWI +20 3856 pingp->pkt.uin=UIN; \ 0000000C ........ LDR R1,??DataTable108 ;; UIN \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 3857 pingp->pkt.type=0; \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C B410C0E1 STRH R1,[R0, #+4] 3858 pingp->pkt.data_len=0; \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3859 SendAnswer(0,pingp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 0040BDE8 POP {LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 3860 } 3861 \ In segment CODE, align 4, keep-with-next 3862 void SendMSGACK(int i) 3863 { \ SendMSGACK: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3864 TPKT *ackp=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 3865 ackp->pkt.uin=i; \ 00000010 004080E5 STR R4,[R0, #+0] 3866 ackp->pkt.type=T_MSGACK; \ 00000014 1710A0E3 MOV R1,#+23 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 3867 ackp->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3868 SendAnswer(0,ackp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 1040BDE8 POP {R4,LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 3869 } 3870 \ In segment CODE, align 4, keep-with-next 3871 void RequestXText(unsigned int uin) 3872 { \ RequestXText: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3873 TPKT *p=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 3874 p->pkt.uin=uin; \ 00000010 004080E5 STR R4,[R0, #+0] 3875 p->pkt.type=T_XTEXT_REQ; \ 00000014 1810A0E3 MOV R1,#+24 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 3876 p->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3877 SUBPROC((void *)SendAnswer,0,p); \ 00000024 0020A0E1 MOV R2,R0 \ 00000028 ........ LDR R0,??DataTable109 ;; SendAnswer \ 0000002C 710100EF SWI +369 3878 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 3879 3880 extern int main2_count; 3881 3882 int ping_time; 3883 char I_UIN[9]; 3884 \ In segment CODE, align 4, keep-with-next 3885 void get_answer(void) 3886 { \ get_answer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3887 void *p; 3888 int i=RXstate; \ 00000004 ........ LDR R5,??DataTable120 ;; icons \ 00000008 1CD04DE2 SUB SP,SP,#+28 \ 0000000C 40DE4DE2 SUB SP,SP,#+1024 3889 int j; 3890 int n; 3891 char rb[1024]; 3892 char *rp=rb; 3893 if (connect_state<2) return; \ 00000010 7C0395E5 LDR R0,[R5, #+892] \ 00000014 788395E5 LDR R8,[R5, #+888] \ 00000018 1C108DE2 ADD R1,SP,#+28 \ 0000001C 00108DE5 STR R1,[SP, #+0] \ 00000020 020050E3 CMP R0,#+2 \ 00000024 5F0100BA BLT ??get_answer_1 \ 00000028 0A0078E3 CMN R8,#+10 \ 0000002C 5D01000A BEQ ??get_answer_1 3894 if (i==EOP) return; 3895 j=recv(sock,rb,sizeof(rb),0); \ 00000030 800395E5 LDR R0,[R5, #+896] \ 00000034 0030A0E3 MOV R3,#+0 \ 00000038 402EA0E3 MOV R2,#+1024 \ 0000003C 780100EF SWI +376 \ 00000040 0060A0E1 MOV R6,R0 \ 00000044 0990A0E3 MOV R9,#+9 \ 00000048 429C89E3 ORR R9,R9,#0x4200 \ 0000004C 0E0000EA B ??get_answer_2 3896 while(j>0) 3897 { 3898 if (i<0) 3899 { 3900 //Принимаем заголовок 3901 n=-i; //Требуемое количество байт 3902 if (j=0) 3909 { 3910 //Принимаем тельце ;) 3911 n=RXbuf.pkt.data_len; //Всего в тельце 3912 if (n>16383) 3913 { 3914 //Слишком много 3915 strcpy(logmsg,LG_GRBADPACKET); 3916 end_socket(); 3917 RXstate=EOP; 3918 return; 3919 } 3920 n-=i; //Количество требуемых байт (общая длинна тельца-текущая позиция) 3921 if (n>0) 3922 { 3923 if (jisIndividSet)//Если индивидуальные натсройки(меню на долгое вправо) 4008 { 4009 if(t->issound) Play(sndMsg);//если звук включен то играем 4010 break; 4011 } 4012 else 4013 if(t->automsgcount < automsgcount && away_m)//если сигналы автоответчика 4014 { 4015 Play(sndMsg); 4016 break; 4017 } 4018 else 4019 if(t->isaccess)//если удаленный доступ ;) 4020 { 4021 if(t->signals) Play(sndMsg); 4022 break; 4023 } 4024 else//в остальный случаях 4025 Play(sndMsg); 4026 } 4027 else 4028 { 4029 uins=RXbuf.pkt.uin; 4030 volatile int hFile_ex; 4031 unsigned int io_error_ex = 0; 4032 sprintf(talk_sound, "%s%d.wav", sndMsg2, uins); 4033 hFile_ex = fopen(talk_sound,A_ReadOnly + A_BIN,P_READ, &io_error_ex); 4034 if(hFile_ex!=-1) 4035 { 4036 fclose(hFile_ex, &io_error_ex); 4037 Play(talk_sound); 4038 } 4039 else 4040 Play(sndMsg); 4041 } 4042 } 4043 break; 4044 case T_SSLRESP: 4045 LockSched(); 4046 ShowMSG(1,(int)RXbuf.data); 4047 UnlockSched(); 4048 break; 4049 case T_SRV_ACK: 4050 if (FindContactLOGQByAck(&RXbuf)) Play(sndMsgSent); 4051 case T_CLIENT_ACK: 4052 p=malloc(sizeof(PKT)+2); 4053 memcpy(p,&RXbuf,sizeof(PKT)+2); 4054 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); 4055 break; 4056 case T_ECHORET: 4057 { 4058 TDate d; 4059 TTime t; 4060 TTime *pt=(TTime *)(RXbuf.data); 4061 int s1; 4062 int s2; 4063 GetDateTime(&d,&t); 4064 s1=t.hour*3600+t.min*60+t.sec; 4065 s2=pt->hour*3600+pt->min*60+pt->sec; 4066 s1-=s2; 4067 if (s1<0) s1+=86400; 4068 snprintf(logmsg,255,"Ping %d-%d seconds!",s1,s1+1); 4069 sprintf(PINGO, "Ping: %d sec",s1); 4070 LockSched(); 4071 if(janis==1) 4072 { 4073 ShowMSG(1,(int)logmsg); 4074 Play(pingsnd); 4075 janis=0; 4076 } 4077 else 4078 { 4079 if(ping_time==0) 4080 { 4081 ping_time=ping_time_config; 4082 Play(pingsnd); 4083 } 4084 else 4085 ping_time--; 4086 } 4087 UnlockSched(); 4088 } 4089 break; 4090 case T_LASTPRIVACY: 4091 n=i+sizeof(PKT); \ ??get_answer_3: \ 00000050 0040A0E1 MOV R4,R0 4092 p=malloc(n); \ ??get_answer_4: \ 00000054 140000EF SWI +20 \ 00000058 00B0A0E1 MOV R11,R0 4093 memcpy(p,&RXbuf,n); \ 0000005C 0420A0E1 MOV R2,R4 \ ??get_answer_5: \ 00000060 0710A0E1 MOV R1,R7 \ 00000064 1E0100EF SWI +286 4094 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); \ 00000068 800395E5 LDR R0,[R5, #+896] \ 0000006C 0B30A0E1 MOV R3,R11 \ 00000070 01002DE9 PUSH {R0} \ 00000074 0020A0E3 MOV R2,#+0 \ 00000078 0810A0E1 MOV R1,R8 \ 0000007C 0900A0E1 MOV R0,R9 \ 00000080 000100EF SWI +256 \ ??get_answer_6: \ 00000084 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning 4095 break; 4096 } 4097 i=-(int)sizeof(PKT); //А может еще есть данные \ ??get_answer_7: \ 00000088 0780E0E3 MVN R8,#+7 \ ??get_answer_2: \ 0000008C 010056E3 CMP R6,#+1 \ 00000090 430100BA BLT ??get_answer_8 \ 00000094 1C759FE5 LDR R7,??get_answer_9+0x4 ;; RXbuf \ 00000098 000058E3 CMP R8,#+0 \ 0000009C 0C00005A BPL ??get_answer_10 \ 000000A0 00109DE5 LDR R1,[SP, #+0] \ 000000A4 004068E2 RSB R4,R8,#+0 \ 000000A8 040056E1 CMP R6,R4 \ 000000AC 0640A0B1 MOVLT R4,R6 \ 000000B0 0420A0E1 MOV R2,R4 \ 000000B4 070088E0 ADD R0,R8,R7 \ 000000B8 080080E2 ADD R0,R0,#+8 \ 000000BC 1E0100EF SWI +286 \ 000000C0 00109DE5 LDR R1,[SP, #+0] \ 000000C4 088084E0 ADD R8,R4,R8 \ 000000C8 046046E0 SUB R6,R6,R4 \ 000000CC 011084E0 ADD R1,R4,R1 \ 000000D0 00108DE5 STR R1,[SP, #+0] \ ??get_answer_10: \ 000000D4 000058E3 CMP R8,#+0 \ 000000D8 EBFFFF4A BMI ??get_answer_2 \ 000000DC B640D7E1 LDRH R4,[R7, #+6] \ 000000E0 9800A0E3 MOV R0,#+152 \ 000000E4 640D80E3 ORR R0,R0,#0x1900 \ 000000E8 05A080E0 ADD R10,R0,R5 \ 000000EC 400C54E3 CMP R4,#+16384 \ 000000F0 080000BA BLT ??get_answer_11 \ 000000F4 C0149FE5 LDR R1,??get_answer_9+0x8 ;; Canvas + 416 \ 000000F8 0A00A0E1 MOV R0,R10 \ 000000FC 1A0000EF SWI +26 \ 00000100 ........ BL end_socket \ 00000104 0900E0E3 MVN R0,#+9 \ 00000108 780385E5 STR R0,[R5, #+888] \ 0000010C 1CD08DE2 ADD SP,SP,#+28 \ 00000110 40DE8DE2 ADD SP,SP,#+1024 \ 00000114 F08FBDE8 POP {R4-R11,PC} \ ??get_answer_11: \ 00000118 084044E0 SUB R4,R4,R8 \ 0000011C 010054E3 CMP R4,#+1 \ 00000120 0B0000BA BLT ??get_answer_12 \ 00000124 00109DE5 LDR R1,[SP, #+0] \ 00000128 040056E1 CMP R6,R4 \ 0000012C 0640A0B1 MOVLT R4,R6 \ 00000130 0420A0E1 MOV R2,R4 \ 00000134 070088E0 ADD R0,R8,R7 \ 00000138 080080E2 ADD R0,R0,#+8 \ 0000013C 1E0100EF SWI +286 \ 00000140 00109DE5 LDR R1,[SP, #+0] \ 00000144 088084E0 ADD R8,R4,R8 \ 00000148 046046E0 SUB R6,R6,R4 \ 0000014C 011084E0 ADD R1,R4,R1 \ 00000150 00108DE5 STR R1,[SP, #+0] \ ??get_answer_12: \ 00000154 B600D7E1 LDRH R0,[R7, #+6] \ 00000158 080050E1 CMP R0,R8 \ 0000015C CAFFFF1A BNE ??get_answer_2 \ 00000160 841395E5 LDR R1,[R5, #+900] \ 00000164 080088E2 ADD R0,R8,#+8 \ 00000168 011080E0 ADD R1,R0,R1 \ 0000016C 841385E5 STR R1,[R5, #+900] \ 00000170 8C1395E5 LDR R1,[R5, #+908] \ 00000174 0020A0E3 MOV R2,#+0 \ 00000178 011080E0 ADD R1,R0,R1 \ 0000017C 8C1385E5 STR R1,[R5, #+908] \ 00000180 071088E0 ADD R1,R8,R7 \ 00000184 0820C1E5 STRB R2,[R1, #+8] \ 00000188 B410D7E1 LDRH R1,[R7, #+4] \ 0000018C 094088E2 ADD R4,R8,#+9 \ 00000190 AE80A0E3 MOV R8,#+174 \ 00000194 DE8C88E3 ORR R8,R8,#0xDE00 \ 00000198 031041E2 SUB R1,R1,#+3 \ 0000019C 1C0051E3 CMP R1,#+28 \ 000001A0 B8FFFF8A BHI ??get_answer_7 \ 000001A4 022F8FE2 ADR R2,??get_answer_0 \ 000001A8 8110A0E1 MOV R1,R1, LSL #+1 \ 000001AC F12092E1 LDRSH R2,[R2, R1] \ 000001B0 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??get_answer_0: \ 000001B4 48000E00B4FF DC16 +72,+14,+65460,+65 \ 4100 \ 000001BC 2900B4FF2B00 DC16 +41,+65460,+43,+65460 \ B4FF \ 000001C4 B4FFB4FFAD00 DC16 +65460,+65460,+173,+65460 \ B4FF \ 000001CC B4FFB300B900 DC16 +65460,+179,+185,+65460 \ B4FF \ 000001D4 BE0029002900 DC16 +190,+41,+41,+65460 \ B4FF \ 000001DC B4FFB4FF2900 DC16 +65460,+65460,+41,+65460 \ B4FF \ 000001E4 B4FFB4FFB4FF DC16 +65460,+65460,+65460,+65460 \ B4FF \ 000001EC A6FF0000 DC16 +65446,+0 \ ??get_answer_13: \ 000001F0 0400A0E1 MOV R0,R4 \ 000001F4 140000EF SWI +20 \ 000001F8 00B0A0E1 MOV R11,R0 \ 000001FC 0420A0E1 MOV R2,R4 \ 00000200 0710A0E1 MOV R1,R7 \ 00000204 1E0100EF SWI +286 \ 00000208 800395E5 LDR R0,[R5, #+896] \ 0000020C 0B30A0E1 MOV R3,R11 \ 00000210 01002DE9 PUSH {R0} \ 00000214 0020A0E3 MOV R2,#+0 \ 00000218 0810A0E1 MOV R1,R8 \ 0000021C 0900A0E1 MOV R0,R9 \ 00000220 000100EF SWI +256 \ 00000224 94039FE5 LDR R0,??get_answer_9+0xC ;; sndStartup \ 00000228 ........ BL Play \ 0000022C 083087E2 ADD R3,R7,#+8 \ 00000230 DF2F8FE2 ADR R2,??get_answer_9 ;; "%s" \ 00000234 FF10A0E3 MOV R1,#+255 \ 00000238 0A00A0E1 MOV R0,R10 \ 0000023C 1B0100EF SWI +283 \ 00000240 0300A0E3 MOV R0,#+3 \ 00000244 7C0385E5 STR R0,[R5, #+892] \ 00000248 EC0395E5 LDR R0,[R5, #+1004] \ 0000024C 010040E2 SUB R0,R0,#+1 \ 00000250 EC0385E5 STR R0,[R5, #+1004] \ 00000254 ........ BL SMART_REDRAW \ 00000258 89FFFFEA B ??get_answer_6 \ ??get_answer_14: \ 0000025C 0400A0E1 MOV R0,R4 \ 00000260 7BFFFFEA B ??get_answer_4 \ ??get_answer_15: \ 00000264 0040A0E1 MOV R4,R0 \ 00000268 140000EF SWI +20 \ 0000026C 00B0A0E1 MOV R11,R0 \ 00000270 0420A0E1 MOV R2,R4 \ 00000274 0710A0E1 MOV R1,R7 \ 00000278 1E0100EF SWI +286 \ 0000027C B800D7E1 LDRH R0,[R7, #+8] \ 00000280 3C239FE5 LDR R2,??get_answer_9+0x10 ;; Canvas + 428 \ 00000284 FF10A0E3 MOV R1,#+255 \ 00000288 01002DE9 PUSH {R0} \ 0000028C 003097E5 LDR R3,[R7, #+0] \ 00000290 0A00A0E1 MOV R0,R10 \ 00000294 1B0100EF SWI +283 \ 00000298 800395E5 LDR R0,[R5, #+896] \ 0000029C 0B30A0E1 MOV R3,R11 \ 000002A0 01002DE9 PUSH {R0} \ 000002A4 0020A0E3 MOV R2,#+0 \ 000002A8 0810A0E1 MOV R1,R8 \ 000002AC 0900A0E1 MOV R0,R9 \ 000002B0 000100EF SWI +256 \ 000002B4 08D08DE2 ADD SP,SP,#+8 \ 000002B8 72FFFFEA B ??get_answer_7 \ ??get_answer_16: \ 000002BC 04239FE5 LDR R2,??get_answer_9+0x14 ;; Canvas + 440 \ 000002C0 083087E2 ADD R3,R7,#+8 \ 000002C4 FF10A0E3 MOV R1,#+255 \ 000002C8 0A00A0E1 MOV R0,R10 \ 000002CC 1B0100EF SWI +283 \ 000002D0 ........ BL SMART_REDRAW \ 000002D4 6BFFFFEA B ??get_answer_7 \ ??get_answer_17: \ 000002D8 0400A0E1 MOV R0,R4 \ 000002DC 140000EF SWI +20 \ 000002E0 00B0A0E1 MOV R11,R0 \ 000002E4 0420A0E1 MOV R2,R4 \ 000002E8 0710A0E1 MOV R1,R7 \ 000002EC 1E0100EF SWI +286 \ 000002F0 08008BE2 ADD R0,R11,#+8 \ 000002F4 030000EA B ??get_answer_18 \ ??get_answer_19: \ 000002F8 030051E3 CMP R1,#+3 \ 000002FC 2010A0B3 MOVLT R1,#+32 \ 00000300 0010C0B5 STRBLT R1,[R0, #+0] \ 00000304 010080E2 ADD R0,R0,#+1 \ ??get_answer_18: \ 00000308 0010D0E5 LDRB R1,[R0, #+0] \ 0000030C 000051E3 CMP R1,#+0 \ 00000310 F8FFFF1A BNE ??get_answer_19 \ 00000314 ........ LDR R0,??DataTable111 ;; addIconBar \ 00000318 002097E5 LDR R2,[R7, #+0] \ 0000031C A8129FE5 LDR R1,??get_answer_9+0x18 ;; Canvas + 448 \ 00000320 280185E5 STR R0,[R5, #+296] \ 00000324 724D85E2 ADD R4,R5,#+7296 \ 00000328 0400A0E1 MOV R0,R4 \ 0000032C 160000EF SWI +22 \ 00000330 ........ LDR R0,??DataTable112 ;; ignor_list \ 00000334 0410A0E1 MOV R1,R4 \ 00000338 180100EF SWI +280 \ 0000033C 000050E3 CMP R0,#+0 \ 00000340 50FFFF1A BNE ??get_answer_7 \ 00000344 84229FE5 LDR R2,??get_answer_9+0x1C ;; Canvas + 456 \ 00000348 84429FE5 LDR R4,??get_answer_9+0x20 ;; sndMsg \ 0000034C 080087E2 ADD R0,R7,#+8 \ 00000350 01002DE9 PUSH {R0} \ 00000354 003097E5 LDR R3,[R7, #+0] \ 00000358 FF10A0E3 MOV R1,#+255 \ 0000035C 0A00A0E1 MOV R0,R10 \ 00000360 1B0100EF SWI +283 \ 00000364 840395E5 LDR R0,[R5, #+900] \ 00000368 ........ BL SendMSGACK \ 0000036C 800395E5 LDR R0,[R5, #+896] \ 00000370 0B30A0E1 MOV R3,R11 \ 00000374 01002DE9 PUSH {R0} \ 00000378 0020A0E3 MOV R2,#+0 \ 0000037C 0810A0E1 MOV R1,R8 \ 00000380 0900A0E1 MOV R0,R9 \ 00000384 000100EF SWI +256 \ 00000388 ........ BL SMART_REDRAW \ 0000038C ........ LDR R0,??DataTable113 ;; extended_sounds \ 00000390 000090E5 LDR R0,[R0, #+0] \ 00000394 08D08DE2 ADD SP,SP,#+8 \ 00000398 000050E3 CMP R0,#+0 \ 0000039C 000097E5 LDR R0,[R7, #+0] \ 000003A0 1A00001A BNE ??get_answer_20 \ 000003A4 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000003A8 581090E5 LDR R1,[R0, #+88] \ 000003AC 000051E3 CMP R1,#+0 \ 000003B0 0500000A BEQ ??get_answer_21 \ 000003B4 600090E5 LDR R0,[R0, #+96] \ 000003B8 000050E3 CMP R0,#+0 \ 000003BC 31FFFF0A BEQ ??get_answer_7 \ ??get_answer_22: \ 000003C0 0400A0E1 MOV R0,R4 \ ??get_answer_23: \ 000003C4 ........ BL Play \ 000003C8 2EFFFFEA B ??get_answer_7 \ ??get_answer_21: \ 000003CC ........ LDR R2,??DataTable114 ;; automsgcount \ 000003D0 7C1090E5 LDR R1,[R0, #+124] \ 000003D4 002092E5 LDR R2,[R2, #+0] \ 000003D8 020051E1 CMP R1,R2 \ 000003DC 0200002A BCS ??get_answer_24 \ 000003E0 2C1395E5 LDR R1,[R5, #+812] \ 000003E4 000051E3 CMP R1,#+0 \ 000003E8 F4FFFF1A BNE ??get_answer_22 \ ??get_answer_24: \ 000003EC 781090E5 LDR R1,[R0, #+120] \ 000003F0 000051E3 CMP R1,#+0 \ 000003F4 0300000A BEQ ??get_answer_25 \ 000003F8 740090E5 LDR R0,[R0, #+116] \ 000003FC 000050E3 CMP R0,#+0 \ 00000400 20FFFF0A BEQ ??get_answer_7 \ 00000404 EDFFFFEA B ??get_answer_22 \ ??get_answer_25: \ 00000408 0400A0E1 MOV R0,R4 \ 0000040C ECFFFFEA B ??get_answer_23 \ ??get_answer_20: \ 00000410 C0219FE5 LDR R2,??get_answer_9+0x24 ;; sndMsg2 \ 00000414 DC0285E5 STR R0,[R5, #+732] \ 00000418 0010A0E3 MOV R1,#+0 \ 0000041C 08108DE5 STR R1,[SP, #+8] \ 00000420 DC3295E5 LDR R3,[R5, #+732] \ 00000424 B0119FE5 LDR R1,??get_answer_9+0x28 ;; Canvas + 468 \ 00000428 577EA0E3 MOV R7,#+1392 \ 0000042C 050087E0 ADD R0,R7,R5 \ 00000430 160000EF SWI +22 \ 00000434 08308DE2 ADD R3,SP,#+8 \ 00000438 8020A0E3 MOV R2,#+128 \ 0000043C 801CA0E3 MOV R1,#+32768 \ 00000440 050087E0 ADD R0,R7,R5 \ 00000444 0A0000EF SWI +10 \ 00000448 04008DE5 STR R0,[SP, #+4] \ 0000044C 04009DE5 LDR R0,[SP, #+4] \ 00000450 010070E3 CMN R0,#+1 \ 00000454 EBFFFF0A BEQ ??get_answer_25 \ 00000458 04009DE5 LDR R0,[SP, #+4] \ 0000045C 08108DE2 ADD R1,SP,#+8 \ 00000460 0D0000EF SWI +13 \ 00000464 050087E0 ADD R0,R7,R5 \ 00000468 D5FFFFEA B ??get_answer_23 \ ??get_answer_26: \ 0000046C 460100EF SWI +326 \ 00000470 081087E2 ADD R1,R7,#+8 \ 00000474 0100A0E3 MOV R0,#+1 \ 00000478 480100EF SWI +328 \ ??get_answer_27: \ 0000047C 470100EF SWI +327 \ 00000480 00FFFFEA B ??get_answer_7 \ ??get_answer_28: \ 00000484 0700A0E1 MOV R0,R7 \ 00000488 ........ BL FindContactLOGQByAck \ 0000048C 000050E3 CMP R0,#+0 \ 00000490 0100000A BEQ ??get_answer_29 \ 00000494 44019FE5 LDR R0,??get_answer_9+0x2C ;; sndMsgSent \ 00000498 ........ BL Play \ ??get_answer_29: \ 0000049C 0A00A0E3 MOV R0,#+10 \ 000004A0 140000EF SWI +20 \ 000004A4 00B0A0E1 MOV R11,R0 \ 000004A8 0A20A0E3 MOV R2,#+10 \ 000004AC EBFEFFEA B ??get_answer_5 \ ??get_answer_30: \ 000004B0 0C108DE2 ADD R1,SP,#+12 \ 000004B4 14008DE2 ADD R0,SP,#+20 \ 000004B8 B40000EF SWI +180 \ 000004BC 0C00DDE5 LDRB R0,[SP, #+12] \ 000004C0 0D20DDE5 LDRB R2,[SP, #+13] \ 000004C4 E11EA0E3 MOV R1,#+3600 \ 000004C8 3C30A0E3 MOV R3,#+60 \ 000004CC 930202E0 MUL R2,R3,R2 \ 000004D0 912020E0 MLA R0,R1,R0,R2 \ 000004D4 0E10DDE5 LDRB R1,[SP, #+14] \ 000004D8 E12EA0E3 MOV R2,#+3600 \ 000004DC 000081E0 ADD R0,R1,R0 \ 000004E0 0810D7E5 LDRB R1,[R7, #+8] \ 000004E4 920101E0 MUL R1,R2,R1 \ 000004E8 F4209FE5 LDR R2,??get_answer_9+0x30 ;; Canvas + 480 \ 000004EC 010040E0 SUB R0,R0,R1 \ 000004F0 0910D7E5 LDRB R1,[R7, #+9] \ 000004F4 930101E0 MUL R1,R3,R1 \ 000004F8 010040E0 SUB R0,R0,R1 \ 000004FC 0A10D7E5 LDRB R1,[R7, #+10] \ 00000500 ........ LDR R7,??DataTable115 ;; janis \ 00000504 014050E0 SUBS R4,R0,R1 \ 00000508 500BA043 MOVMI R0,#+81920 \ 0000050C 460D8043 ORRMI R0,R0,#0x1180 \ 00000510 04408040 ADDMI R4,R0,R4 \ 00000514 010084E2 ADD R0,R4,#+1 \ 00000518 01002DE9 PUSH {R0} \ 0000051C 0430A0E1 MOV R3,R4 \ 00000520 FF10A0E3 MOV R1,#+255 \ 00000524 0A00A0E1 MOV R0,R10 \ 00000528 1B0100EF SWI +283 \ 0000052C B4109FE5 LDR R1,??get_answer_9+0x34 ;; Canvas + 500 \ 00000530 0420A0E1 MOV R2,R4 \ 00000534 B0409FE5 LDR R4,??get_answer_9+0x38 ;; pingsnd \ 00000538 590D85E2 ADD R0,R5,#+5696 \ 0000053C 160000EF SWI +22 \ 00000540 460100EF SWI +326 \ 00000544 000097E5 LDR R0,[R7, #+0] \ 00000548 04D08DE2 ADD SP,SP,#+4 \ 0000054C 010050E3 CMP R0,#+1 \ 00000550 0700001A BNE ??get_answer_31 \ 00000554 0A10A0E1 MOV R1,R10 \ 00000558 0100A0E3 MOV R0,#+1 \ 0000055C 480100EF SWI +328 \ 00000560 0400A0E1 MOV R0,R4 \ 00000564 ........ BL Play \ 00000568 0000A0E3 MOV R0,#+0 \ 0000056C 000087E5 STR R0,[R7, #+0] \ 00000570 C1FFFFEA B ??get_answer_27 \ ??get_answer_31: \ 00000574 F00395E5 LDR R0,[R5, #+1008] \ 00000578 000050E3 CMP R0,#+0 \ 0000057C 0500001A BNE ??get_answer_32 \ 00000580 68009FE5 LDR R0,??get_answer_9+0x3C ;; ping_time_config \ 00000584 000090E5 LDR R0,[R0, #+0] \ 00000588 F00385E5 STR R0,[R5, #+1008] \ 0000058C 0400A0E1 MOV R0,R4 \ 00000590 ........ BL Play \ 00000594 B8FFFFEA B ??get_answer_27 \ ??get_answer_32: \ 00000598 010040E2 SUB R0,R0,#+1 \ 0000059C F00385E5 STR R0,[R5, #+1008] \ 000005A0 B5FFFFEA B ??get_answer_27 4098 } 4099 } 4100 } 4101 RXstate=i; \ ??get_answer_8: \ 000005A4 788385E5 STR R8,[R5, #+888] 4102 // GBS_StartTimerProc(&tmr_dorecv,3000,dorecv); 4103 // SMART_REDRAW(); 4104 } \ ??get_answer_1: \ 000005A8 1CD08DE2 ADD SP,SP,#+28 \ 000005AC 40DE8DE2 ADD SP,SP,#+1024 \ 000005B0 F08FBDE8 POP {R4-R11,PC} ;; return \ ??get_answer_9: \ 000005B4 25730000 DC8 "%s",+0 \ 000005B8 ........ DC32 RXbuf \ 000005BC ........ DC32 Canvas + 416 \ 000005C0 ........ DC32 sndStartup \ 000005C4 ........ DC32 Canvas + 428 \ 000005C8 ........ DC32 Canvas + 440 \ 000005CC ........ DC32 Canvas + 448 \ 000005D0 ........ DC32 Canvas + 456 \ 000005D4 ........ DC32 sndMsg \ 000005D8 ........ DC32 sndMsg2 \ 000005DC ........ DC32 Canvas + 468 \ 000005E0 ........ DC32 sndMsgSent \ 000005E4 ........ DC32 Canvas + 480 \ 000005E8 ........ DC32 Canvas + 500 \ 000005EC ........ DC32 pingsnd \ 000005F0 ........ DC32 ping_time_config 4105 4106 4107 extern int main_count; 4108 4109 //=====================add to main info==================== 4110 4111 //Сюда я не лез...и че та желания нет...kluchnik ;) 4112 4113 char a_txt[45]; 4114 char s_txt[45]; 4115 char d_txt[45]; 4116 char f_txt[45]; 4117 char g_txt[45]; 4118 unsigned int main_msg_timer2; \ In segment CODE, align 4, keep-with-next 4119 void AddToMain(const char *nameu,char *si) 4120 { \ AddToMain: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0180A0E1 MOV R8,R1 4121 char *de=malloc(64); \ 00000010 4000A0E3 MOV R0,#+64 \ 00000014 140000EF SWI +20 \ 00000018 0050A0E1 MOV R5,R0 4122 int text_l; 4123 int iz; 4124 int name_l; 4125 name_l=0; 4126 text_l=0; 4127 name_l=strlen(nameu); \ 0000001C 0400A0E1 MOV R0,R4 \ 00000020 1B0000EF SWI +27 4128 iz=0; 4129 #ifdef ELKA 4130 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] 4131 #else 4132 text_l=main_lenght-name_l; 4133 #endif 4134 4135 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 4136 { 4137 while(text_l!=0) 4138 { 4139 de[iz]=si[iz]; 4140 iz++; 4141 text_l--; 4142 } 4143 if(use_cutter) 4144 { 4145 de[iz]='.'; 4146 iz++; 4147 de[iz]='.'; 4148 iz++; 4149 de[iz]='.'; 4150 iz++; 4151 } 4152 de[iz]='\0'; 4153 } 4154 else 4155 strcpy(de, si); \ 00000048 0810A0E1 MOV R1,R8 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 1A0000EF SWI +26 4156 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 4157 while(strlen(de)!=iz) 4158 { 4159 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] 4160 if(de[iz]==0x0A) de[iz]=0x20; \ 000000B8 0510D7E7 LDRB R1,[R7, +R5] \ 000000BC 0A0051E3 CMP R1,#+10 \ 000000C0 0500C707 STRBEQ R0,[R7, +R5] 4161 iz++; \ 000000C4 017087E2 ADD R7,R7,#+1 4162 } \ ??AddToMain_3: \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 1B0000EF SWI +27 \ 000000D0 070050E1 CMP R0,R7 \ 000000D4 F3FFFF1A BNE ??AddToMain_6 4163 de[iz]='\0'; 4164 if(main_count==0) sprintf(a_txt, "%s: %s", nameu,de); \ 000000D8 ........ LDR R8,??DataTable116 ;; main_count \ 000000DC 0560C7E7 STRB R6,[R7, +R5] \ 000000E0 ........ LDR R6,??DataTable120 ;; icons \ 000000E4 4C719FE5 LDR R7,??AddToMain_0+0x8 ;; `?` \ 000000E8 8C10A0E3 MOV R1,#+140 \ 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 4165 if(main_count==1) sprintf(s_txt, "%s: %s", nameu,de); \ ??AddToMain_7: \ 00000118 BC10A0E3 MOV R1,#+188 \ 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 4166 if(main_count==2) sprintf(d_txt, "%s: %s", nameu,de); \ ??AddToMain_8: \ 00000148 EC00A0E3 MOV R0,#+236 \ 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 4167 if(main_count==3) sprintf(f_txt, "%s: %s", nameu,de); \ ??AddToMain_9: \ 00000174 1C00A0E3 MOV R0,#+28 \ 00000178 740D80E3 ORR R0,R0,#0x1D00 \ 0000017C 06A080E0 ADD R10,R0,R6 \ 00000180 000098E5 LDR R0,[R8, #+0] \ 00000184 030050E3 CMP R0,#+3 \ 00000188 0400001A BNE ??AddToMain_10 \ 0000018C 0530A0E1 MOV R3,R5 \ 00000190 0420A0E1 MOV R2,R4 \ 00000194 0710A0E1 MOV R1,R7 \ 00000198 0A00A0E1 MOV R0,R10 \ 0000019C 160000EF SWI +22 4168 if(main_count==4) sprintf(g_txt, "%s: %s", nameu,de); \ ??AddToMain_10: \ 000001A0 4C00A0E3 MOV R0,#+76 \ 000001A4 740D80E3 ORR R0,R0,#0x1D00 \ 000001A8 06B080E0 ADD R11,R0,R6 \ 000001AC 000098E5 LDR R0,[R8, #+0] \ 000001B0 040050E3 CMP R0,#+4 \ 000001B4 0400001A BNE ??AddToMain_11 \ 000001B8 0530A0E1 MOV R3,R5 \ 000001BC 0420A0E1 MOV R2,R4 \ 000001C0 0710A0E1 MOV R1,R7 \ 000001C4 0B00A0E1 MOV R0,R11 \ 000001C8 160000EF SWI +22 4169 if(main_count>4) \ ??AddToMain_11: \ 000001CC 000098E5 LDR R0,[R8, #+0] \ 000001D0 050050E3 CMP R0,#+5 \ 000001D4 100000BA BLT ??AddToMain_12 4170 { 4171 strcpy(a_txt, s_txt); \ 000001D8 00109DE5 LDR R1,[SP, #+0] \ 000001DC 04009DE5 LDR R0,[SP, #+4] \ 000001E0 1A0000EF SWI +26 4172 strcpy(s_txt, d_txt); \ 000001E4 00009DE5 LDR R0,[SP, #+0] \ 000001E8 0910A0E1 MOV R1,R9 \ 000001EC 1A0000EF SWI +26 4173 strcpy(d_txt, f_txt); \ 000001F0 0A10A0E1 MOV R1,R10 \ 000001F4 0900A0E1 MOV R0,R9 \ 000001F8 1A0000EF SWI +26 4174 strcpy(f_txt, g_txt); \ 000001FC 0B10A0E1 MOV R1,R11 \ 00000200 0A00A0E1 MOV R0,R10 \ 00000204 1A0000EF SWI +26 4175 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 4176 } 4177 mfree(de); \ ??AddToMain_12: \ 0000021C 0500A0E1 MOV R0,R5 \ 00000220 150000EF SWI +21 4178 main_d=1; \ 00000224 0100A0E3 MOV R0,#+1 \ 00000228 C80286E5 STR R0,[R6, #+712] 4179 } \ 0000022C F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??AddToMain_0: \ 00000230 ........ DC32 main_lenght \ 00000234 ........ DC32 use_cutter \ 00000238 ........ DC32 `?` 4180 4181 //======================add to main info================ 4182 4183 int NEW_MSG; 4184 \ In segment CODE, align 4, keep-with-next 4185 void AddStringToLog(CLIST *t, int code, char *s, const char *name, unsigned int IDforACK,int flag) 4186 { \ 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 4187 char hs[128], *lastX; 4188 TTime tt; 4189 TDate d; 4190 GetDateTime(&d,&tt); \ 00000020 0D10A0E1 MOV R1,SP \ 00000024 08008DE2 ADD R0,SP,#+8 \ 00000028 B40000EF SWI +180 4191 int i; 4192 4193 // if(code == 3 && !LOG_XTXT) return; //Нl нуcно nоodrн?nь cennnrnуn 4194 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 4195 { 4196 #ifdef kluchnik 4197 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 4208 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 4209 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 4210 4211 LOGQ *p=NewLOGQ(s); \ ??AddStringToLog_5: \ 00000104 0800A0E1 MOV R0,R8 \ 00000108 ........ BL NewLOGQ \ 0000010C 0080A0E1 MOV R8,R0 4212 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 4213 p->type=code; \ 00000148 0C5088E5 STR R5,[R8, #+12] 4214 p->ID=IDforACK; //0-32767 \ 0000014C 087088E5 STR R7,[R8, #+8] 4215 i=AddLOGQ(&t->log,p); \ 00000150 0810A0E1 MOV R1,R8 \ 00000154 940084E2 ADD R0,R4,#+148 \ 00000158 ........ BL AddLOGQ \ 0000015C 0060A0E1 MOV R6,R0 \ 00000160 150056E3 CMP R6,#+21 \ 00000164 14D08DE2 ADD SP,SP,#+20 \ 00000168 090000BA BLT ??AddStringToLog_6 4216 while(i>MAXLOGMSG) 4217 { 4218 if (t->log==t->last_log) t->last_log=t->last_log->next; \ ??AddStringToLog_7: \ 0000016C 9C0094E5 LDR R0,[R4, #+156] \ 00000170 941094E5 LDR R1,[R4, #+148] 4219 RemoveLOGQ(&t->log,t->log); 4220 i--; \ 00000174 016046E2 SUB R6,R6,#+1 \ 00000178 000051E1 CMP R1,R0 \ 0000017C 00009005 LDREQ R0,[R0, #+0] \ 00000180 9C008405 STREQ R0,[R4, #+156] \ 00000184 940084E2 ADD R0,R4,#+148 \ 00000188 ........ BL RemoveLOGQ 4221 } \ 0000018C 150056E3 CMP R6,#+21 \ 00000190 F5FFFFAA BGE ??AddStringToLog_7 4222 t->msg_count=i; \ ??AddStringToLog_6: \ 00000194 A46084E5 STR R6,[R4, #+164] 4223 if (!t->last_log) t->last_log=p; \ 00000198 9C0094E5 LDR R0,[R4, #+156] 4224 if (code==3) \ 0000019C ........ LDR R6,??DataTable120 ;; icons \ 000001A0 000050E3 CMP R0,#+0 \ 000001A4 9C808405 STREQ R8,[R4, #+156] \ 000001A8 030055E3 CMP R5,#+3 \ 000001AC 0D00001A BNE ??AddStringToLog_8 4225 { 4226 if (edchat_id) \ 000001B0 B00396E5 LDR R0,[R6, #+944] \ 000001B4 000050E3 CMP R0,#+0 \ 000001B8 1C00000A BEQ ??AddStringToLog_9 4227 { 4228 void *data=FindGUIbyId(edchat_id,NULL); \ 000001BC B00396E5 LDR R0,[R6, #+944] \ 000001C0 0010A0E3 MOV R1,#+0 \ 000001C4 090200EF SWI +521 4229 if (data) \ 000001C8 000050E3 CMP R0,#+0 \ 000001CC 1700000A BEQ ??AddStringToLog_9 4230 { 4231 EDCHAT_STRUCT *ed_struct; 4232 ed_struct=EDIT_GetUserPointer(data); \ 000001D0 DF0100EF SWI +479 4233 if (ed_struct) \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 1400000A BEQ ??AddStringToLog_9 4234 { 4235 if (ed_struct->ed_contact==t) \ 000001DC 000090E5 LDR R0,[R0, #+0] \ 000001E0 040050E1 CMP R0,R4 \ 000001E4 1100001A BNE ??AddStringToLog_9 4236 { 4237 goto L_INC; 4238 } 4239 } 4240 } 4241 } 4242 goto L_NOINC; 4243 } 4244 L_INC: 4245 if (!t->isunread) total_unread++; \ ??AddStringToLog_8: \ 000001E8 840094E5 LDR R0,[R4, #+132] \ 000001EC 000050E3 CMP R0,#+0 \ 000001F0 A0039605 LDREQ R0,[R6, #+928] \ 000001F4 01008002 ADDEQ R0,R0,#+1 \ 000001F8 A0038605 STREQ R0,[R6, #+928] 4246 if(NEW_MSG==1) \ 000001FC F80396E5 LDR R0,[R6, #+1016] \ 00000200 010050E3 CMP R0,#+1 \ 00000204 0700001A BNE ??AddStringToLog_10 4247 { 4248 t->unread_msg++; \ 00000208 880094E5 LDR R0,[R4, #+136] \ 0000020C 010080E2 ADD R0,R0,#+1 \ 00000210 880084E5 STR R0,[R4, #+136] 4249 total_unread2++; \ 00000214 FC0296E5 LDR R0,[R6, #+764] \ 00000218 010080E2 ADD R0,R0,#+1 \ 0000021C FC0286E5 STR R0,[R6, #+764] 4250 NEW_MSG=0; \ 00000220 0000A0E3 MOV R0,#+0 \ 00000224 F80386E5 STR R0,[R6, #+1016] 4251 } 4252 t->isunread=1; \ ??AddStringToLog_10: \ 00000228 0100A0E3 MOV R0,#+1 \ 0000022C 840084E5 STR R0,[R4, #+132] 4253 L_NOINC: 4254 ChangeContactPos(t); \ ??AddStringToLog_9: \ 00000230 0400A0E1 MOV R0,R4 \ 00000234 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4255 } \ ??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 4256 4257 void ParseAnswer(WSHDR *ws, const char *s); 4258 4259 int time_to_stop_t9; 4260 \ In segment CODE, align 4, keep-with-next 4261 void ParseXStatusText(WSHDR *ws, const char *s, int color) 4262 { \ ParseXStatusText: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 4263 int c; 4264 int flag=0; \ 00000010 0070A0E3 MOV R7,#+0 4265 CutWSTR(ws,0); \ 00000014 0010A0E3 MOV R1,#+0 \ 00000018 260100EF SWI +294 4266 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} 4267 wsAppendChar(ws,0xE008); \ 0000002C 0810A0E3 MOV R1,#+8 \ 00000030 E01C81E3 ORR R1,R1,#0xE000 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 1C0000EF SWI +28 4268 wsAppendChar(ws,color); \ 0000003C 0610A0E1 MOV R1,R6 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1C0000EF SWI +28 4269 wsAppendChar(ws,0xE013); \ 00000048 1310A0E3 MOV R1,#+19 \ 0000004C E01C81E3 ORR R1,R1,#0xE000 \ 00000050 0A0000EA B ??ParseXStatusText_0 4270 while((c=*s++)) 4271 { 4272 if (c==13) \ ??ParseXStatusText_1: \ 00000054 0D0050E3 CMP R0,#+13 4273 { 4274 if (!flag) \ 00000058 00005703 CMPEQ R7,#+0 \ 0000005C 0500001A BNE ??ParseXStatusText_2 4275 { 4276 flag=1; \ 00000060 0170A0E3 MOV R7,#+1 4277 wsAppendChar(ws,0xE012); \ 00000064 1210A0E3 MOV R1,#+18 \ 00000068 E01C81E3 ORR R1,R1,#0xE000 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 1C0000EF SWI +28 4278 c=' '; \ 00000074 2000A0E3 MOV R0,#+32 4279 } 4280 } 4281 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 4282 } \ 00000088 ........ LDRB R0,[R5], #+1 \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 EFFFFF1A BNE ??ParseXStatusText_1 \ 00000094 F080BDE8 POP {R4-R7,PC} ;; return 4283 } 4284 4285 //Добавление итемов в чат при получении нового сообщения \ In segment CODE, align 4, keep-with-next 4286 void AddMsgToChat(void *data) 4287 { \ AddMsgToChat: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 4288 LOGQ *p; 4289 EDITCONTROL ec; 4290 EDITC_OPTIONS ec_options; 4291 EDCHAT_STRUCT *ed_struct; 4292 int j; 4293 int color, font, type; 4294 int zc; 4295 if (!data) return; \ 00000008 000050E3 CMP R0,#+0 \ 0000000C C400000A BEQ ??AddMsgToChat_0 4296 ed_struct=EDIT_GetUserPointer(data); \ 00000010 DF0100EF SWI +479 \ 00000014 0040B0E1 MOVS R4,R0 4297 if (!ed_struct) return; \ 00000018 C100000A BEQ ??AddMsgToChat_0 4298 if (!ed_struct->ed_contact->isunread) return; \ 0000001C 000094E5 LDR R0,[R4, #+0] \ 00000020 841090E5 LDR R1,[R0, #+132] \ 00000024 000051E3 CMP R1,#+0 \ 00000028 BD00000A BEQ ??AddMsgToChat_0 4299 4300 p=ed_struct->ed_contact->last_log; \ 0000002C 9C5090E5 LDR R5,[R0, #+156] 4301 if (p) \ 00000030 ........ LDR R6,??DataTable120 ;; icons \ 00000034 ........ LDR R7,??DataTable121 ;; O_ED_X_FONT_SIZE \ 00000038 ........ LDR R8,??DataTable122 ;; X_COLOR \ 0000003C ........ LDR R9,??DataTable123 ;; O_X_COLOR \ 00000040 000055E3 CMP R5,#+0 \ 00000044 A100000A BEQ ??AddMsgToChat_1 4302 { 4303 while(p) 4304 { 4305 font = ED_H_FONT_SIZE; \ ??AddMsgToChat_2: \ 00000048 ........ LDR R0,??DataTable144 ;; ED_H_FONT_SIZE 4306 if ((zc=p->acked&3)) \ 0000004C ........ LDR R1,??DataTable141 ;; 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 4307 { 4308 if (zc==1) \ 00000064 010050E3 CMP R0,#+1 \ 00000068 1E00001A BNE ??AddMsgToChat_4 4309 color=ACK_COLOR; //Зеленый \ 0000006C ........ LDR R0,??DataTable137 ;; ACK_COLOR \ 00000070 1B0000EA B ??AddMsgToChat_5 4310 else 4311 color=I_COLOR; 4312 } 4313 else 4314 { 4315 if (p->ID==0xFFFFFFFF) \ ??AddMsgToChat_3: \ 00000074 080095E5 LDR R0,[R5, #+8] \ 00000078 010070E3 CMN R0,#+1 \ 0000007C 1700001A BNE ??AddMsgToChat_6 4316 { 4317 type = p->type&0x0F; \ 00000080 0C0095E5 LDR R0,[R5, #+12] \ 00000084 0F1000E2 AND R1,R0,#0xF 4318 if(p->type&0x10) \ 00000088 100010E3 TST R0,#0x10 \ 0000008C 0B00000A BEQ ??AddMsgToChat_7 4319 { 4320 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 00000090 010051E3 CMP R1,#+1 \ 00000094 ........ LDREQ R0,??DataTable139 ;; 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,??DataTable138 ;; O_TO_COLOR \ ??AddMsgToChat_8: \ 000000B0 00B090E5 LDR R11,[R0, #+0] \ 000000B4 ........ LDR R0,??DataTable143 ;; O_ED_H_FONT_SIZE \ ??AddMsgToChat_9: \ 000000B8 00A090E5 LDR R10,[R0, #+0] \ 000000BC 090000EA B ??AddMsgToChat_4 4321 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 4322 } 4323 else 4324 { 4325 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,??DataTable135 ;; ED_X_FONT_SIZE \ 000000D4 F7FFFF0A BEQ ??AddMsgToChat_9 \ 000000D8 ........ LDR R0,??DataTable140 ;; TO_COLOR \ 000000DC 000000EA B ??AddMsgToChat_5 4326 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 4327 } 4328 } 4329 else 4330 color=UNACK_COLOR; //????? \ ??AddMsgToChat_6: \ 000000E0 ........ LDR R0,??DataTable142 ;; UNACK_COLOR \ ??AddMsgToChat_5: \ 000000E4 00B090E5 LDR R11,[R0, #+0] 4331 } 4332 PrepareEditControl(&ec); \ ??AddMsgToChat_4: \ 000000E8 10008DE2 ADD R0,SP,#+16 \ 000000EC 640100EF SWI +356 4333 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 4334 { 4335 ascii2ws(ews,p->hdr); \ 00000100 200396E5 LDR R0,[R6, #+800] \ 00000104 101085E2 ADD R1,R5,#+16 \ 00000108 ........ _BLF ascii2ws,??ascii2ws??rA 4336 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 0000010C 203396E5 LDR R3,[R6, #+800] \ 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 4337 } 4338 else 4339 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??AddMsgToChat_10: \ 00000124 0000A0E3 MOV R0,#+0 \ 00000128 01002DE9 PUSH {R0} \ 0000012C 203396E5 LDR R3,[R6, #+800] \ 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 4340 PrepareEditCOptions(&ec_options); \ 00000144 0D00A0E1 MOV R0,SP \ 00000148 C80100EF SWI +456 4341 SetPenColorToEditCOptions(&ec_options,color); \ 0000014C 0B10A0E1 MOV R1,R11 \ 00000150 0D00A0E1 MOV R0,SP \ 00000154 CC0100EF SWI +460 4342 SetFontToEditCOptions(&ec_options,font); \ 00000158 0A10A0E1 MOV R1,R10 \ 0000015C 0D00A0E1 MOV R0,SP \ 00000160 CA0100EF SWI +458 4343 CopyOptionsToEditControl(&ec,&ec_options); \ 00000164 0D10A0E1 MOV R1,SP \ 00000168 10008DE2 ADD R0,SP,#+16 \ 0000016C CE0100EF SWI +462 4344 //AddEditControlToEditQend(eq,&ec,ma); 4345 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 4346 ed_struct->ed_answer++; \ 00000184 080094E5 LDR R0,[R4, #+8] \ 00000188 010080E2 ADD R0,R0,#+1 \ 0000018C 080084E5 STR R0,[R4, #+8] 4347 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 4348 { 4349 ParseAnswer(ews,p->text); \ 000001A0 200396E5 LDR R0,[R6, #+800] \ 000001A4 601085E2 ADD R1,R5,#+96 \ 000001A8 ........ BL ParseAnswer \ 000001AC 050000EA B ??AddMsgToChat_13 4350 } 4351 else 4352 { 4353 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 200396E5 LDR R0,[R6, #+800] \ 000001BC 00209805 LDREQ R2,[R8, #+0] \ 000001C0 601085E2 ADD R1,R5,#+96 \ 000001C4 ........ BL ParseXStatusText 4354 } 4355 PrepareEditControl(&ec); \ ??AddMsgToChat_13: \ 000001C8 10008DE2 ADD R0,SP,#+16 \ 000001CC 640100EF SWI +356 4356 ConstructEditControl(&ec, 4357 ECT_NORMAL_TEXT, 4358 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 4359 ews,ews->wsbody[0]); \ 000001D0 203396E5 LDR R3,[R6, #+800] \ 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 4360 PrepareEditCOptions(&ec_options); \ 000001FC 04008DE2 ADD R0,SP,#+4 \ 00000200 C80100EF SWI +456 4361 //#ifdef M75 4362 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 4363 { 4364 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000218 100010E3 TST R0,#0x10 \ 0000021C ........ LDRNE R0,??DataTable133 ;; O_ED_FONT_SIZE \ 00000220 ........ LDREQ R0,??DataTable134 ;; ED_FONT_SIZE \ 00000224 001090E5 LDR R1,[R0, #+0] \ 00000228 090000EA B ??AddMsgToChat_15 4365 } 4366 else 4367 { 4368 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 4369 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,??DataTable135 ;; 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 4370 } 4371 //#else 4372 // SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 4373 //#endif 4374 CopyOptionsToEditControl(&ec,&ec_options); \ 0000025C 0D10A0E1 MOV R1,SP \ 00000260 10008DE2 ADD R0,SP,#+16 \ 00000264 CE0100EF SWI +462 4375 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 4376 ed_struct->ed_answer++; \ 0000027C 080094E5 LDR R0,[R4, #+8] \ 00000280 010080E2 ADD R0,R0,#+1 \ 00000284 080084E5 STR R0,[R4, #+8] 4377 p=p->next; \ 00000288 005095E5 LDR R5,[R5, #+0] 4378 } \ 0000028C 000055E3 CMP R5,#+0 \ 00000290 6CFFFF1A BNE ??AddMsgToChat_2 4379 j=((ed_struct->ed_contact->msg_count+1)*2); //Ожидаемый ed_answer \ 00000294 001094E5 LDR R1,[R4, #+0] \ 00000298 A41091E5 LDR R1,[R1, #+164] \ 0000029C 011081E2 ADD R1,R1,#+1 \ 000002A0 8150A0E1 LSL R5,R1,#+1 \ 000002A4 000055E1 CMP R5,R0 \ 000002A8 070000AA BGE ??AddMsgToChat_16 4380 while(jed_answer) 4381 { 4382 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??AddMsgToChat_17: \ 000002AC 040094E5 LDR R0,[R4, #+4] \ 000002B0 0110A0E3 MOV R1,#+1 \ 000002B4 D10100EF SWI +465 4383 ed_struct->ed_answer--; \ 000002B8 080094E5 LDR R0,[R4, #+8] \ 000002BC 010040E2 SUB R0,R0,#+1 \ 000002C0 080084E5 STR R0,[R4, #+8] 4384 } \ 000002C4 000055E1 CMP R5,R0 \ 000002C8 F7FFFFBA BLT ??AddMsgToChat_17 4385 } 4386 ed_struct->ed_contact->last_log=NULL; \ ??AddMsgToChat_16: \ 000002CC 0050A0E3 MOV R5,#+0 \ ??AddMsgToChat_1: \ 000002D0 000094E5 LDR R0,[R4, #+0] \ 000002D4 9C5080E5 STR R5,[R0, #+156] 4387 if (IsGuiOnTop(edchat_id)) \ 000002D8 B00396E5 LDR R0,[R6, #+944] \ 000002DC 350100EF SWI +309 \ 000002E0 000050E3 CMP R0,#+0 \ 000002E4 0300000A BEQ ??AddMsgToChat_18 4388 { 4389 total_unread--; \ 000002E8 A00396E5 LDR R0,[R6, #+928] \ 000002EC 010040E2 SUB R0,R0,#+1 \ 000002F0 A00386E5 STR R0,[R6, #+928] \ 000002F4 020000EA B ??AddMsgToChat_19 4390 } 4391 else 4392 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] 4393 ed_struct->ed_contact->isunread=0; \ ??AddMsgToChat_19: \ 00000304 000094E5 LDR R0,[R4, #+0] \ 00000308 845080E5 STR R5,[R0, #+132] 4394 total_unread2=total_unread2-ed_struct->ed_contact->unread_msg; \ 0000030C FC1296E5 LDR R1,[R6, #+764] \ 00000310 882090E5 LDR R2,[R0, #+136] \ 00000314 021041E0 SUB R1,R1,R2 \ 00000318 FC1286E5 STR R1,[R6, #+764] 4395 ed_struct->ed_contact->unread_msg=0; \ 0000031C 885080E5 STR R5,[R0, #+136] 4396 ChangeContactPos(ed_struct->ed_contact); \ 00000320 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4397 // EDIT_SetFocus(data,ed_struct->ed_answer); 4398 } \ ??AddMsgToChat_0: \ 00000324 40D08DE2 ADD SP,SP,#+64 ;; stack cleaning \ 00000328 F08FBDE8 POP {R4-R11,PC} ;; return 4399 4400 //Рисуем подтверждения непосредственно \ In segment CODE, align 4, keep-with-next 4401 void DrawAck(void *data) 4402 { \ DrawAck: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 4403 LOGQ *p; 4404 EDITCONTROL ec; 4405 EDITC_OPTIONS ec_options; 4406 EDCHAT_STRUCT *ed_struct; 4407 int j; 4408 int color; 4409 int dorefresh=0; \ 0000000C 0060A0E3 MOV R6,#+0 4410 if (!data) return; \ 00000010 4C00000A BEQ ??DrawAck_0 4411 ed_struct=EDIT_GetUserPointer(data); \ 00000014 DF0100EF SWI +479 4412 if (!ed_struct) return; \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 4900000A BEQ ??DrawAck_0 4413 p=ed_struct->ed_contact->log; \ 00000020 001090E5 LDR R1,[R0, #+0] 4414 j=ed_struct->ed_answer; 4415 j-=(ed_struct->ed_contact->msg_count*2)+1; //Номер собственно хедера верхнего итема \ 00000024 080090E5 LDR R0,[R0, #+8] \ 00000028 945091E5 LDR R5,[R1, #+148] \ 0000002C A41091E5 LDR R1,[R1, #+164] \ 00000030 000055E3 CMP R5,#+0 \ 00000034 810040E0 SUB R0,R0,R1, LSL #+1 \ 00000038 017040E2 SUB R7,R0,#+1 \ 0000003C 3A00000A BEQ ??DrawAck_1 4416 while(p) 4417 { 4418 if (j>=1) //Пока возможно лишнее \ ??DrawAck_2: \ 00000040 010057E3 CMP R7,#+1 \ 00000044 340000BA BLT ??DrawAck_3 4419 { 4420 if (!(p->acked&4)) \ 00000048 040095E5 LDR R0,[R5, #+4] \ 0000004C 040010E3 TST R0,#0x4 \ 00000050 3100001A BNE ??DrawAck_3 4421 { 4422 ExtractEditControl(data,j,&ec); \ 00000054 10208DE2 ADD R2,SP,#+16 \ 00000058 0710A0E1 MOV R1,R7 \ 0000005C 0400A0E1 MOV R0,R4 \ 00000060 690100EF SWI +361 4423 PrepareEditCOptions(&ec_options); \ 00000064 0D00A0E1 MOV R0,SP \ 00000068 C80100EF SWI +456 4424 if (p->acked) \ 0000006C 040095E5 LDR R0,[R5, #+4] \ 00000070 000050E3 CMP R0,#+0 \ 00000074 0300000A BEQ ??DrawAck_4 4425 { 4426 if (p->acked==1) \ 00000078 010050E3 CMP R0,#+1 \ 0000007C ........ LDRNE R0,??DataTable141 ;; I_COLOR 4427 color=ACK_COLOR; //Зеленый \ 00000080 ........ LDREQ R0,??DataTable137 ;; ACK_COLOR \ 00000084 0F0000EA B ??DrawAck_5 4428 else 4429 color=I_COLOR; 4430 } 4431 else 4432 { 4433 if (p->ID==0xFFFFFFFF) \ ??DrawAck_4: \ 00000088 080095E5 LDR R0,[R5, #+8] \ 0000008C 010070E3 CMN R0,#+1 \ 00000090 0B00001A BNE ??DrawAck_6 4434 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,??DataTable138 ;; O_TO_COLOR \ 000000AC ........ LDREQ R0,??DataTable139 ;; O_I_COLOR \ 000000B0 040000EA B ??DrawAck_5 \ ??DrawAck_7: \ 000000B4 010050E3 CMP R0,#+1 \ 000000B8 ........ LDRNE R0,??DataTable140 ;; TO_COLOR \ 000000BC ........ LDREQ R0,??DataTable141 ;; I_COLOR \ 000000C0 000000EA B ??DrawAck_5 4435 else 4436 color=UNACK_COLOR; //Серый \ ??DrawAck_6: \ 000000C4 ........ LDR R0,??DataTable142 ;; UNACK_COLOR 4437 } 4438 SetPenColorToEditCOptions(&ec_options,color/*p->type==1?I_COLOR:TO_COLOR*/); 4439 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_H_FONT_SIZE:ED_H_FONT_SIZE); 4440 CopyOptionsToEditControl(&ec,&ec_options); 4441 StoreEditControl(data,j,&ec); 4442 p->acked|=4; //Обработали 4443 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,??DataTable143 ;; O_ED_H_FONT_SIZE \ 000000E4 ........ LDREQ R0,??DataTable144 ;; 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] 4444 } 4445 } 4446 j+=2; 4447 p=p->next; \ ??DrawAck_3: \ 0000011C 005095E5 LDR R5,[R5, #+0] \ 00000120 027087E2 ADD R7,R7,#+2 4448 } \ 00000124 000055E3 CMP R5,#+0 \ 00000128 C4FFFF1A BNE ??DrawAck_2 4449 if (IsGuiOnTop(edchat_id)&&dorefresh) RefreshGUI(); \ ??DrawAck_1: \ 0000012C 1C009FE5 LDR R0,??DrawAck_8 ;; icons + 944 \ 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 icons + 944 4450 } 4451 \ In segment CODE, align 4, keep-with-next 4452 void ask_my_info(void) 4453 { 4454 /* TPKT *p; 4455 CLIST *t; 4456 p=malloc(sizeof(PKT)); 4457 p->pkt.uin=UIN; 4458 p->pkt.type=T_REQINFOSHORT; 4459 p->pkt.data_len=0; 4460 // AddStringToLog(t,0x01,"Request info...",I_str); 4461 SUBPROC((void *)SendAnswer,0,p);*/ 4462 } \ ask_my_info: \ 00000000 1EFF2FE1 BX LR ;; return 4463 \ In segment CODE, align 4, keep-with-next 4464 void set_my_status(void) 4465 { \ set_my_status: \ 00000000 00402DE9 PUSH {LR} 4466 TPKT *p; 4467 p=malloc(sizeof(PKT)+1); \ 00000004 0900A0E3 MOV R0,#+9 \ 00000008 140000EF SWI +20 4468 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 001080E5 STR R1,[R0, #+0] 4469 p->pkt.type=T_MY_STATUS_CH; // Тип пакета: изменение статуса \ 00000014 0F10A0E3 MOV R1,#+15 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 4470 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000001C 0110A0E3 MOV R1,#+1 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 4471 p->data[0]=CurrentStatus; \ 00000024 18109FE5 LDR R1,??set_my_status_0 ;; icons + 792 4472 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,??DataTable157 ;; SendAnswer \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 710100EF SWI +369 4473 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??set_my_status_0: \ 00000044 ........ DC32 icons + 792 4474 4475 extern int Send0; 4476 \ In segment CODE, align 4, keep-with-next 4477 void set_my_xstatus(void) 4478 { \ set_my_xstatus: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 4479 #ifdef NEWSGOLD 4480 if(Is_Id3tag_Enabled) \ 00000004 ........ LDR R7,??DataTable156 ;; icons \ 00000008 ........ LDR R4,??DataTable157 ;; SendAnswer \ 0000000C 0CD04DE2 SUB SP,SP,#+12 \ 00000010 140397E5 LDR R0,[R7, #+788] \ 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 4481 { 4482 if(CurrentXStatus!=11) \ 0000002C 1C0397E5 LDR R0,[R7, #+796] \ 00000030 0B0050E3 CMP R0,#+11 \ 00000034 7200000A BEQ ??set_my_xstatus_1 4483 { 4484 #endif 4485 TPKT *p; 4486 char *s1; 4487 char *s2; 4488 int l1; 4489 int l2; 4490 p=malloc(sizeof(PKT)+1); \ 00000038 0900A0E3 MOV R0,#+9 \ 0000003C 140000EF SWI +20 \ 00000040 0080A0E1 MOV R8,R0 4491 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 00000044 006088E5 STR R6,[R8, #+0] 4492 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 00000048 B4A0C8E1 STRH R10,[R8, #+4] 4493 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000004C B690C8E1 STRH R9,[R8, #+6] 4494 p->data[0]=CurrentXStatus; \ 00000050 1C0397E5 LDR R0,[R7, #+796] 4495 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 4496 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 00000068 1C0397E5 LDR R0,[R7, #+796] \ 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 4497 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000080 1C0397E5 LDR R0,[R7, #+796] \ 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 4498 if ((!s1)||(!s2)) return; \ 00000098 000059E3 CMP R9,#+0 \ 0000009C 00005713 CMPNE R7,#+0 \ 000000A0 F787BD08 POPEQ {R0-R2,R4-R10,PC} 4499 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 4500 p->pkt.uin=0; \ 000000BC 006088E5 STR R6,[R8, #+0] 4501 p->pkt.type=T_XTEXT_SET; \ 000000C0 B450C8E1 STRH R5,[R8, #+4] 4502 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] 4503 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 4504 p->data[l1]=0; \ 000000E8 00009DE5 LDR R0,[SP, #+0] 4505 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 4506 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} 4507 #ifdef NEWSGOLD 4508 } 4509 else 4510 { 4511 tracktimer=0; 4512 GetTags(); 4513 } 4514 } 4515 else 4516 { 4517 TPKT *p; 4518 char *s1; 4519 char *s2; 4520 int l1; 4521 int l2; 4522 p=malloc(sizeof(PKT)+1); \ ??set_my_xstatus_0: \ 00000120 0900A0E3 MOV R0,#+9 \ 00000124 140000EF SWI +20 \ 00000128 0080A0E1 MOV R8,R0 4523 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000012C 006088E5 STR R6,[R8, #+0] 4524 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 00000130 B4A0C8E1 STRH R10,[R8, #+4] 4525 p->pkt.data_len=1; // Длина пакета: 1 байт \ 00000134 B690C8E1 STRH R9,[R8, #+6] 4526 p->data[0]=CurrentXStatus; \ 00000138 1C0397E5 LDR R0,[R7, #+796] 4527 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 4528 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 00000150 1C0397E5 LDR R0,[R7, #+796] \ 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 4529 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000168 1C0397E5 LDR R0,[R7, #+796] \ 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 4530 if ((!s1)||(!s2)) return; \ 00000180 000059E3 CMP R9,#+0 \ 00000184 00005A13 CMPNE R10,#+0 \ 00000188 F787BD08 POPEQ {R0-R2,R4-R10,PC} 4531 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 4532 p->pkt.uin=0; \ 000001A4 006088E5 STR R6,[R8, #+0] 4533 p->pkt.type=T_XTEXT_SET; \ 000001A8 B450C8E1 STRH R5,[R8, #+4] 4534 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] 4535 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 4536 p->data[l1]=0; \ 000001D0 00009DE5 LDR R0,[SP, #+0] 4537 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 4538 SUBPROC((void *)SendAnswer,0,p); \ 000001F4 0820A0E1 MOV R2,R8 \ 000001F8 0010A0E3 MOV R1,#+0 \ 000001FC 0400A0E1 MOV R0,R4 \ 00000200 710100EF SWI +369 4539 tracktimer=0; \ ??set_my_xstatus_1: \ 00000204 4C6387E5 STR R6,[R7, #+844] 4540 GetTags(); \ 00000208 ........ _BLF GetTags,??GetTags??rA \ 0000020C F787BDE8 POP {R0-R2,R4-R10,PC} ;; return 4541 } 4542 #endif 4543 } 4544 4545 #ifdef NEWSGOLD 4546 \ In segment CODE, align 4, keep-with-next 4547 void set_my_xstatus2(void) 4548 { \ set_my_xstatus2: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 4549 TPKT *p; 4550 // char *s1; 4551 // char *s2; 4552 int l1; 4553 int l2; 4554 p=malloc(sizeof(PKT)+1); 4555 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 4556 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 4557 p->pkt.data_len=1; // Длина пакета: 1 байт 4558 p->data[0]=11; 4559 SUBPROC((void *)SendAnswer,0,p); \ 00000004 ........ LDR R6,??DataTable157 ;; SendAnswer 4560 // char *s1; 4561 char *sk2=malloc(256); 4562 // strcpy(s1, playing); 4563 // s1="Now playing:"; 4564 strcpy(sk2,teast2); 4565 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 4566 l2=strlen(sk2); \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 1B0000EF SWI +27 \ 00000074 00A0A0E1 MOV R10,R0 4567 if ((!playing)||(!sk2)) return; \ 00000078 000057E3 CMP R7,#+0 \ 0000007C F187BD08 POPEQ {R0,R4-R10,PC} 4568 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 4569 p->pkt.uin=0; \ 00000090 005084E5 STR R5,[R4, #+0] 4570 p->pkt.type=T_XTEXT_SET; \ 00000094 1A00A0E3 MOV R0,#+26 \ 00000098 B400C4E1 STRH R0,[R4, #+4] 4571 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] 4572 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 4573 p->data[l1]=0; \ 000000B8 040089E0 ADD R0,R9,R4 \ 000000BC 0850C0E5 STRB R5,[R0, #+8] 4574 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 4575 mfree(sk2); \ 000000D0 0700A0E1 MOV R0,R7 \ 000000D4 150000EF SWI +21 4576 SUBPROC((void *)SendAnswer,0,p); \ 000000D8 0420A0E1 MOV R2,R4 \ 000000DC 0010A0E3 MOV R1,#+0 \ 000000E0 0600A0E1 MOV R0,R6 \ 000000E4 710100EF SWI +369 4577 // mfree(s1); 4578 // mfree(s2); 4579 } \ 000000E8 F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??set_my_xstatus2_0: \ 000000EC ........ DC32 playing \ 000000F0 ........ DC32 teast2 4580 #endif \ In segment CODE, align 4, keep-with-next 4581 void to_develop(void) 4582 { 4583 if (silenthide) return; \ to_develop: \ 00000000 ........ LDR R0,??DataTable156 ;; icons \ 00000004 00402DE9 PUSH {LR} \ 00000008 541390E5 LDR R1,[R0, #+852] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD18 POPNE {PC} 4584 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R2,??DataTable150 ;; Canvas \ 00000018 4B1FA0E3 MOV R1,#+300 \ 0000001C E73F82E2 ADD R3,R2,#+924 4585 gipc.name_from=ipc_my_name; \ 00000020 DF2F82E2 ADD R2,R2,#+892 \ 00000024 302180E5 STR R2,[R0, #+304] 4586 gipc.data=(void *)maincsm_id; \ 00000028 002390E5 LDR R2,[R0, #+768] \ 0000002C 003081E7 STR R3,[R1, +R0] \ 00000030 342180E5 STR R2,[R0, #+308] 4587 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 00000034 003081E0 ADD R3,R1,R0 \ 00000038 0220A0E3 MOV R2,#+2 \ 0000003C B010A0E3 MOV R1,#+176 \ 00000040 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000044 0900A0E3 MOV R0,#+9 \ 00000048 420C80E3 ORR R0,R0,#0x4200 \ 0000004C 000100EF SWI +256 4588 } \ 00000050 0080BDE8 POP {PC} ;; return 4589 \ In segment CODE, align 4, keep-with-next 4590 void ReqAddMsgToChat(CLIST *t) 4591 { \ ReqAddMsgToChat: \ 00000000 70402DE9 PUSH {R4-R6,LR} 4592 if (edchat_id) \ 00000004 ........ LDR R5,??DataTable156 ;; icons \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C B00395E5 LDR R0,[R5, #+944] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 7080BD08 POPEQ {R4-R6,PC} 4593 { 4594 void *data=FindGUIbyId(edchat_id,NULL); \ 00000018 B00395E5 LDR R0,[R5, #+944] \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 090200EF SWI +521 \ 00000024 0060A0E1 MOV R6,R0 4595 { 4596 EDCHAT_STRUCT *ed_struct; 4597 ed_struct=EDIT_GetUserPointer(data); \ 00000028 DF0100EF SWI +479 4598 if (ed_struct) \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 7080BD08 POPEQ {R4-R6,PC} 4599 { 4600 if (ed_struct->ed_contact==t) \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 040050E1 CMP R0,R4 \ 0000003C 7080BD18 POPNE {R4-R6,PC} 4601 { 4602 if (EDIT_IsBusy(data)) \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 1C0200EF SWI +540 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0400000A BEQ ??ReqAddMsgToChat_0 4603 { 4604 t->req_add=1; \ 00000050 0100A0E3 MOV R0,#+1 \ 00000054 8C0084E5 STR R0,[R4, #+140] 4605 #ifdef EVILFOX 4606 time_to_stop_t9=2; 4607 #else 4608 time_to_stop_t9=3; \ 00000058 0300A0E3 MOV R0,#+3 \ 0000005C FC0385E5 STR R0,[R5, #+1020] \ 00000060 7080BDE8 POP {R4-R6,PC} 4609 #endif 4610 } 4611 else 4612 { 4613 AddMsgToChat(data); \ ??ReqAddMsgToChat_0: \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 ........ BL AddMsgToChat 4614 DirectRedrawGUI_ID(edchat_id); \ 0000006C B00395E5 LDR R0,[R5, #+944] \ 00000070 400100EF SWI +320 4615 } 4616 } 4617 } 4618 } 4619 } 4620 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 4621 4622 GBSTMR develop; 4623 \ In segment CODE, align 4, keep-with-next 4624 void begin_to_develop() 4625 { \ begin_to_develop: \ 00000000 00402DE9 PUSH {LR} 4626 if(IsUnlocked()) \ 00000004 430000EF SWI +67 \ 00000008 000050E3 CMP R0,#+0 \ 0000000C 0100000A BEQ ??begin_to_develop_0 4627 to_develop(); \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ B to_develop ;; tailcall 4628 else 4629 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 ;; icons + 7548 \ 00000020 6410A0E3 MOV R1,#+100 \ 00000024 4D0000EF SWI +77 4630 } \ 00000028 0080BDE8 POP {PC} ;; return \ ??begin_to_develop_1: \ 0000002C ........ DC32 begin_to_develop \ 00000030 ........ DC32 icons + 7548 4631 4632 4633 4634 //----------------------------- LOAD COMMANDS -----------------------------// 4635 //Templates 4636 char *cmd_chars; //Собственно файл 4637 char **cmd_lines; //Массив указателей на строки 4638 \ In segment CODE, align 4, keep-with-next 4639 void cmdFree(void) 4640 { \ cmdFree: \ 00000000 10402DE9 PUSH {R4,LR} 4641 if (cmd_lines) mfree(cmd_lines); \ 00000004 ........ LDR R4,??DataTable155 ;; CmdMenuHeader \ 00000008 180094E5 LDR R0,[R4, #+24] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0000000A BEQ ??cmdFree_0 \ 00000014 150000EF SWI +21 4642 if (cmd_chars) mfree(cmd_chars); \ ??cmdFree_0: \ 00000018 140094E5 LDR R0,[R4, #+20] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0100000A BEQ ??cmdFree_1 \ 00000024 150000EF SWI +21 4643 cmd_lines=NULL; \ 00000028 0000A0E3 MOV R0,#+0 \ ??cmdFree_1: \ 0000002C 180084E5 STR R0,[R4, #+24] 4644 cmd_chars=NULL; \ 00000030 140084E5 STR R0,[R4, #+20] 4645 } \ 00000034 1080BDE8 POP {R4,PC} ;; return 4646 \ In segment CODE, align 4, keep-with-next 4647 int LoadCmd() 4648 { \ LoadCmd: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 4BDF4DE2 SUB SP,SP,#+300 4649 FSTATS stat; 4650 char fn[256]; 4651 int f; 4652 unsigned int ul; 4653 int i; 4654 int fsize; 4655 char *p; 4656 char *pp; 4657 int c; 4658 cmdFree(); \ 00000008 ........ BL cmdFree 4659 strcpy(fn,TEMPLATES_PATH); \ 0000000C ........ LDR R1,??DataTable153 ;; TEMPLATES_PATH \ 00000010 04008DE2 ADD R0,SP,#+4 \ 00000014 1A0000EF SWI +26 4660 i=strlen(fn); \ 00000018 04008DE2 ADD R0,SP,#+4 \ 0000001C 1B0000EF SWI +27 4661 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 4662 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 4663 fsize=stat.size; \ 00000044 08719DE5 LDR R7,[SP, #+264] 4664 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 4665 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 4666 p=cmd_chars=malloc(fsize+1); \ ??LoadCmd_1: \ 00000074 ........ LDR R4,??DataTable155 ;; CmdMenuHeader \ 00000078 010087E2 ADD R0,R7,#+1 \ 0000007C 140000EF SWI +20 \ 00000080 140084E5 STR R0,[R4, #+20] \ 00000084 0060A0E1 MOV R6,R0 4667 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] 4668 fclose(f,&ul); \ 000000A4 0D10A0E1 MOV R1,SP \ 000000A8 0800A0E1 MOV R0,R8 \ 000000AC 0D0000EF SWI +13 4669 i=0; \ 000000B0 0070A0E3 MOV R7,#+0 4670 pp=p; \ 000000B4 0680A0E1 MOV R8,R6 \ 000000B8 020000EA B ??LoadCmd_3 4671 for(;;) 4672 { 4673 c=*p; 4674 if (c<32) 4675 { 4676 if (pp&&(pp!=p)) 4677 { 4678 cmd_lines=realloc(cmd_lines,(i+1)*sizeof(char *)); 4679 cmd_lines[i++]=pp; 4680 } 4681 pp=NULL; 4682 if (!c) break; 4683 *p=0; 4684 } 4685 else 4686 { 4687 if (pp==NULL) pp=p; \ ??LoadCmd_4: \ 000000BC 000058E3 CMP R8,#+0 \ 000000C0 0680A001 MOVEQ R8,R6 4688 } 4689 p++; \ ??LoadCmd_5: \ 000000C4 016086E2 ADD R6,R6,#+1 \ ??LoadCmd_3: \ 000000C8 0090D6E5 LDRB R9,[R6, #+0] \ 000000CC 200059E3 CMP R9,#+32 \ 000000D0 F9FFFFAA BGE ??LoadCmd_4 \ 000000D4 000058E3 CMP R8,#+0 \ 000000D8 06005811 CMPNE R8,R6 \ 000000DC 0600000A BEQ ??LoadCmd_6 \ 000000E0 180094E5 LDR R0,[R4, #+24] \ 000000E4 01A087E2 ADD R10,R7,#+1 \ 000000E8 0A11A0E1 LSL R1,R10,#+2 \ 000000EC BA0000EF SWI +186 \ 000000F0 180084E5 STR R0,[R4, #+24] \ 000000F4 078180E7 STR R8,[R0, +R7, LSL #+2] \ 000000F8 0A70A0E1 MOV R7,R10 \ ??LoadCmd_6: \ 000000FC 0080A0E3 MOV R8,#+0 \ 00000100 000059E3 CMP R9,#+0 4690 } 4691 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 `?` 4692 } 4693 4694 int NumOfItems=0; 4695 HEADER_DESC CmdMenuHeader={NULL,NULL,NULL,NULL,NULL,NULL,LGP_NULL}; 4696 \ In segment CODE, align 4, keep-with-next 4697 void CmdMenuItemHandler(void *data, int curitem, void *unk) 4698 { \ CmdMenuItemHandler: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 4699 void *item=AllocMenuItem(data); \ 0000000C 970100EF SWI +407 \ 00000010 0060A0E1 MOV R6,R0 4700 char *p=cmd_lines[curitem]; \ 00000014 3C009FE5 LDR R0,??CmdMenuItemHandler_0 ;; CmdMenuHeader + 24 \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 057190E7 LDR R7,[R0, +R5, LSL #+2] 4701 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 4702 ascii2ws(ws,p); \ 00000038 0710A0E1 MOV R1,R7 \ 0000003C ........ _BLF ascii2ws,??ascii2ws??rA 4703 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 4704 } \ 00000054 F081BDE8 POP {R4-R8,PC} ;; return \ ??CmdMenuItemHandler_0: \ 00000058 ........ DC32 CmdMenuHeader + 24 4705 \ In segment CODE, align 4, keep-with-next 4706 void CmdMenuGHook(void *data, int cmd) 4707 { \ CmdMenuGHook: \ 00000000 00402DE9 PUSH {LR} 4708 if (cmd==TI_CMD_FOCUS) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0100001A BNE ??CmdMenuGHook_0 4709 { 4710 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 \ 00000010 0080BDE8 POP {PC} 4711 } 4712 if (cmd==TI_CMD_DESTROY) \ ??CmdMenuGHook_0: \ 00000014 030051E3 CMP R1,#+3 \ 00000018 0080BD18 POPNE {PC} 4713 { 4714 cmdFree(); \ 0000001C 0040BDE8 POP {LR} ;; Pop \ 00000020 ........ B cmdFree ;; tailcall 4715 } 4716 } 4717 \ In segment CODE, align 4, keep-with-next 4718 static int CmdMenuKeyHook(void *data, GUI_MSG *msg) 4719 { \ CmdMenuKeyHook: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 4720 int Selected=GetCurMenuItem(data); \ 0000000C 8F0100EF SWI +399 \ 00000010 0060A0E1 MOV R6,R0 4721 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000014 0400A0E1 MOV R0,R4 \ 00000018 E00100EF SWI +480 \ 0000001C 0040A0E1 MOV R4,R0 4722 if ((msg->keys==0x18)||(msg->keys==0x3D)) \ 00000020 F200D5E1 LDRSH R0,[R5, #+2] \ 00000024 180050E3 CMP R0,#+24 \ 00000028 3D005013 CMPNE R0,#+61 \ 0000002C 1700001A BNE ??CmdMenuKeyHook_0 4723 { 4724 if (NumOfItems) \ 00000030 ........ LDR R0,??DataTable155 ;; CmdMenuHeader \ 00000034 1C1090E5 LDR R1,[R0, #+28] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 1300000A BEQ ??CmdMenuKeyHook_0 4725 { 4726 const char *p=cmd_lines[Selected]; \ 00000040 180090E5 LDR R0,[R0, #+24] \ 00000044 065190E7 LDR R5,[R0, +R6, LSL #+2] 4727 WSHDR *ws; 4728 ws=AllocWS(256); \ 00000048 400FA0E3 MOV R0,#+256 \ 0000004C 250100EF SWI +293 \ 00000050 0060A0E1 MOV R6,R0 4729 wsprintf(ws,p); \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 240100EF SWI +292 4730 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ws); \ 0000005C 040094E5 LDR R0,[R4, #+4] \ 00000060 081094E5 LDR R1,[R4, #+8] \ 00000064 0620A0E1 MOV R2,R6 \ 00000068 DE0100EF SWI +478 4731 EDIT_SetCursorPos(ed_struct->ed_chatgui,wstrlen(ws)+1); \ 0000006C 0600A0E1 MOV R0,R6 \ 00000070 230100EF SWI +291 \ 00000074 011080E2 ADD R1,R0,#+1 \ 00000078 040094E5 LDR R0,[R4, #+4] \ 0000007C D40100EF SWI +468 4732 4733 FreeWS(ws); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 290100EF SWI +297 4734 return(1); \ 00000088 0100A0E3 MOV R0,#+1 \ 0000008C 7080BDE8 POP {R4-R6,PC} 4735 } 4736 } 4737 return(0); \ ??CmdMenuKeyHook_0: \ 00000090 0000A0E3 MOV R0,#+0 \ 00000094 7080BDE8 POP {R4-R6,PC} ;; return 4738 } 4739 4740 const int CmdSoftkeys[]={0,1,2}; 4741 4742 const SOFTKEY_DESC cmd_sk[]= 4743 { 4744 {0x0004,0x0000,(int)""}, 4745 {0x0001,0x0000,(int)LG_CLOSE}, 4746 {0x003D,0x0000,(int)LGP_DOIT_PIC} 4747 }; 4748 const SOFTKEYSTAB cmd_Back_skt= 4749 { 4750 cmd_sk,0 4751 }; 4752 static const MENU_DESC CmdMenuStruct= 4753 { 4754 8,CmdMenuKeyHook,CmdMenuGHook,NULL, 4755 CmdSoftkeys, 4756 &cmd_Back_skt, 4757 0x10, 4758 CmdMenuItemHandler, 4759 NULL, //menuitems, 4760 NULL, //menuprocs, 4761 NULL 4762 }; 4763 \ In segment CODE, align 4, keep-with-next 4764 int DispCmdMenu(void *ed_gui) 4765 { \ DispCmdMenu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 4766 NumOfItems=LoadCmd(); \ 00000004 68509FE5 LDR R5,??DispCmdMenu_0 ;; CmdMenuHeader 4767 if(NumOfItems) \ 00000008 68609FE5 LDR R6,??DispCmdMenu_0+0x4 ;; `?` \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ BL LoadCmd \ 00000014 1C0085E5 STR R0,[R5, #+28] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 0F00000A BEQ ??DispCmdMenu_1 4768 { 4769 *((int *)(&CmdMenuHeader.lgp_id))=(int)"Select command"; \ 00000020 0C6085E5 STR R6,[R5, #+12] 4770 patch_header(&CmdMenuHeader); \ 00000024 0500A0E1 MOV R0,R5 \ 00000028 ........ _BLF patch_header,??patch_header??rA 4771 return CreateMenu(0,0,&CmdMenuStruct,&CmdMenuHeader,0,NumOfItems,ed_gui,0); \ 0000002C 0000A0E3 MOV R0,#+0 \ 00000030 01002DE9 PUSH {R0} \ 00000034 10002DE9 PUSH {R4} \ 00000038 1C0095E5 LDR R0,[R5, #+28] \ 0000003C 0530A0E1 MOV R3,R5 \ 00000040 01002DE9 PUSH {R0} \ 00000044 202086E2 ADD R2,R6,#+32 \ 00000048 0010A0E3 MOV R1,#+0 \ 0000004C 0000A0E3 MOV R0,#+0 \ 00000050 01002DE9 PUSH {R0} \ 00000054 520100EF SWI +338 \ 00000058 10D08DE2 ADD SP,SP,#+16 \ 0000005C 7080BDE8 POP {R4-R6,PC} 4772 } 4773 MsgBoxError(1, (int)"FILE NOT FOUND!"); \ ??DispCmdMenu_1: \ 00000060 101086E2 ADD R1,R6,#+16 \ 00000064 0100A0E3 MOV R0,#+1 \ 00000068 4E0000EF SWI +78 4774 return(0); \ 0000006C 0000A0E3 MOV R0,#+0 \ 00000070 7080BDE8 POP {R4-R6,PC} ;; return \ ??DispCmdMenu_0: \ 00000074 ........ DC32 CmdMenuHeader \ 00000078 ........ DC32 `?` 4775 } 4776 /* 4777 char *GetStatusByIconIndex(int icon) 4778 { 4779 char *stat=malloc(32); 4780 switch(icon) 4781 { 4782 case IS_OFFLINE : sprintf(stat,"Offline"); break; 4783 case IS_INVISIBLE : sprintf(stat,"Invisable"); break; 4784 case IS_AWAY : sprintf(stat,"Away"); break; 4785 case IS_NA : sprintf(stat,"N/A"); break; 4786 case IS_OCCUPIED: sprintf(stat,"Occupied"); break; 4787 case IS_DND : sprintf(stat,"DND"); break; 4788 case IS_DEPRESSION : sprintf(stat,"Depression"); break; 4789 case IS_EVIL : sprintf(stat,"Evil"); break; 4790 case IS_HOME : sprintf(stat,"Home"); break; 4791 case IS_LUNCH : sprintf(stat,"Lunch"); break; 4792 case IS_WORK : sprintf(stat,"Work"); break; 4793 case IS_ONLINE : sprintf(stat,"Online"); break; 4794 case IS_FFC : sprintf(stat,"FFC"); break; 4795 default : sprintf(stat,"Error status"); break; 4796 } 4797 return stat; 4798 } 4799 */ 4800 \ In segment CODE, align 4, keep-with-next 4801 char *GetStatusByIconIndex(int icon) 4802 { \ GetStatusByIconIndex: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 4803 char *stat=malloc(32); \ 00000008 2000A0E3 MOV R0,#+32 \ 0000000C 140000EF SWI +20 4804 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 4805 { 4806 case IS_OFFLINE : sprintf(stat,"Отключен"); break; 4807 case IS_INVISIBLE : sprintf(stat,"Невидимый"); break; \ ??GetStatusByIconIndex_3: \ 0000003C 0C1081E2 ADD R1,R1,#+12 \ 00000040 140000EA B ??GetStatusByIconIndex_4 4808 case IS_AWAY : sprintf(stat,"Отсутсвует"); break; \ ??GetStatusByIconIndex_5: \ 00000044 181081E2 ADD R1,R1,#+24 \ 00000048 120000EA B ??GetStatusByIconIndex_4 4809 case IS_NA : sprintf(stat,"Не доступен"); break; \ ??GetStatusByIconIndex_6: \ 0000004C 241081E2 ADD R1,R1,#+36 \ 00000050 100000EA B ??GetStatusByIconIndex_4 4810 case IS_OCCUPIED: sprintf(stat,"Занят"); break; \ ??GetStatusByIconIndex_7: \ 00000054 301081E2 ADD R1,R1,#+48 \ 00000058 0E0000EA B ??GetStatusByIconIndex_4 4811 case IS_DND : sprintf(stat,"Не беспокоить");break; \ ??GetStatusByIconIndex_8: \ 0000005C 381081E2 ADD R1,R1,#+56 \ 00000060 0C0000EA B ??GetStatusByIconIndex_4 4812 case IS_DEPRESSION : sprintf(stat,"Депрессия"); break; \ ??GetStatusByIconIndex_9: \ 00000064 481081E2 ADD R1,R1,#+72 \ 00000068 0A0000EA B ??GetStatusByIconIndex_4 4813 case IS_EVIL : sprintf(stat,"Злой"); break; \ ??GetStatusByIconIndex_10: \ 0000006C 541081E2 ADD R1,R1,#+84 \ 00000070 080000EA B ??GetStatusByIconIndex_4 4814 case IS_HOME : sprintf(stat,"Дома"); break; \ ??GetStatusByIconIndex_11: \ 00000074 5C1081E2 ADD R1,R1,#+92 \ 00000078 060000EA B ??GetStatusByIconIndex_4 4815 case IS_LUNCH : sprintf(stat,"Жру"); break; \ ??GetStatusByIconIndex_12: \ 0000007C 091F8FE2 ADR R1,??GetStatusByIconIndex_1 ;; "Жру" \ 00000080 040000EA B ??GetStatusByIconIndex_4 4816 case IS_WORK : sprintf(stat,"Работа"); break; \ ??GetStatusByIconIndex_13: \ 00000084 641081E2 ADD R1,R1,#+100 \ 00000088 020000EA B ??GetStatusByIconIndex_4 4817 case IS_ONLINE : sprintf(stat,"В сети"); break; \ ??GetStatusByIconIndex_2: \ 0000008C 6C1081E2 ADD R1,R1,#+108 \ 00000090 000000EA B ??GetStatusByIconIndex_4 4818 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 4819 default : sprintf(stat,"В сети"); break; 4820 } 4821 return stat; \ 000000A0 0500A0E1 MOV R0,R5 \ 000000A4 3080BDE8 POP {R4,R5,PC} ;; return \ ??GetStatusByIconIndex_1: \ 000000A8 C6F0F300 DC8 "Жру" \ 000000AC ........ DC32 `?` 4822 } 4823 //----------------------------- CHECK COMMANDS -----------------------------// 4824 4825 4826 int comanda; 4827 4828 char requests1[]="Sending online time..."; 4829 char requests2[]="Sending msg info..."; 4830 char requests3[]="Sending battery info..."; 4831 char requests4[]="Sending mod info..."; 4832 char requests6[]="Sending offline info..."; 4833 char mod_info[264]; 4834 #ifdef NEWSGOLD 4835 #ifdef ELKA 4836 #ifdef ole64//kluchnik 4837 #define PLATFORM "Plяtform from ОлежкО" 4838 #else 4839 #define PLATFORM "Platform: ЁLKA" 4840 #endif 4841 #else 4842 #define PLATFORM "Platform: NEWЫGOLD" 4843 #endif 4844 #else 4845 #define PLATFORM "Platform: ЫGOLD" 4846 #endif 4847 4848 #define ENA_SIGNAL 1 //для команд, активировать сигналы,али нет 4849 #define DIS_SIGNAL 0 4850 4851 4852 \ In segment CODE, align 4, keep-with-next 4853 void SendData(CLIST *t,char *s,int signal,int count) 4854 { \ SendData: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0140A0E1 MOV R4,R1 \ 00000008 0050A0E1 MOV R5,R0 4855 comanda=0; \ 0000000C ........ LDR R0,??DataTable156 ;; icons \ 00000010 0010A0E3 MOV R1,#+0 \ 00000014 001480E5 STR R1,[R0, #+1024] 4856 t->signals=signal; \ 00000018 742085E5 STR R2,[R5, #+116] 4857 TPKT *p; 4858 SENDMSGCOUNT+=count; \ 0000001C 081390E5 LDR R1,[R0, #+776] \ 00000020 011083E0 ADD R1,R3,R1 \ 00000024 081380E5 STR R1,[R0, #+776] 4859 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 4860 p->pkt.uin=t->uin; \ 0000003C 0C0095E5 LDR R0,[R5, #+12] \ 00000040 000086E5 STR R0,[R6, #+0] 4861 p->pkt.type=T_SENDMSG; \ 00000044 0200A0E3 MOV R0,#+2 \ 00000048 B400C6E1 STRH R0,[R6, #+4] 4862 p->pkt.data_len=strlen(s); \ 0000004C 0400A0E1 MOV R0,R4 \ 00000050 1B0000EF SWI +27 \ 00000054 B600C6E1 STRH R0,[R6, #+6] 4863 strcpy(p->data,s); \ 00000058 0410A0E1 MOV R1,R4 \ 0000005C 080086E2 ADD R0,R6,#+8 \ 00000060 1A0000EF SWI +26 4864 SUBPROC((void *)SendAnswer,0,p); \ 00000064 ........ LDR R0,??DataTable157 ;; SendAnswer \ 00000068 0620A0E1 MOV R2,R6 \ 0000006C 0010A0E3 MOV R1,#+0 \ 00000070 710100EF SWI +369 4865 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 4866 \ In segment DATA_Z, align 4, align-sorted 4867 unsigned int *errornumber; \ errornumber: \ 00000000 DS8 4 4868 \ In segment CODE, align 4, keep-with-next 4869 void CheckComand(char *txt, CLIST *t) 4870 { \ CheckComand: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 4871 comanda=1; \ 00000004 ........ LDR R5,??DataTable176 ;; icons 4872 #ifdef ole64 4873 sprintf(mod_info,"mod by Evilfox,kluchnik,windes based on revision 2058 from ОлежкО64, mod date: %s at %s ",__DATE__,__TIME__); 4874 #else 4875 sprintf(mod_info,"mod by Evilfox,kluchnik,windes based on revision 2058, mod date: %s at %s ",__DATE__,__TIME__); \ 00000008 086B9FE5 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 000485E5 STR R0,[R5, #+1024] 4876 #endif 4877 // sprintf(mod_info,"mod by %s based on revision 2058, mod date: Apr 21 2008 ",devel); 4878 t->signals=1; 4879 if(!strcmp(txt, "__TEXTINFO") || !strcmp(txt, "__TI")) \ 00000020 ........ LDR R7,??DataTable159 ;; I_str \ 00000024 F08A9FE5 LDR R8,??CheckComand_0+0x4 ;; show_send_info \ 00000028 FC10A0E3 MOV R1,#+252 \ 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 740084E5 STR R0,[R4, #+116] \ 00000054 6810A0E3 MOV R1,#+104 \ 00000058 6C1D81E3 ORR R1,R1,#0x1B00 \ 0000005C 051081E0 ADD R1,R1,R5 \ 00000060 14108DE5 STR R1,[SP, #+20] \ 00000064 0090A0E3 MOV R9,#+0 \ 00000068 6B1F86E2 ADD R1,R6,#+428 \ 0000006C 0B00A0E1 MOV R0,R11 \ 00000070 190000EF SWI +25 \ 00000074 000050E3 CMP R0,#+0 \ 00000078 0400000A BEQ ??CheckComand_1 \ 0000007C 6E1F86E2 ADD R1,R6,#+440 \ 00000080 0B00A0E1 MOV R0,R11 \ 00000084 190000EF SWI +25 \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 8300001A BNE ??CheckComand_2 4880 { 4881 char *s=malloc(16384); \ ??CheckComand_1: \ 00000090 400CA0E3 MOV R0,#+16384 \ 00000094 140000EF SWI +20 \ 00000098 00A0A0E1 MOV R10,R0 4882 char pl[256]; 4883 *s=0; \ 0000009C 0090CAE5 STRB R9,[R10, #+0] 4884 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 4885 strcat(s,pl); \ 000000D0 30108DE2 ADD R1,SP,#+48 \ 000000D4 0A00A0E1 MOV R0,R10 \ 000000D8 170000EF SWI +23 4886 char online[256]; 4887 sprintf(online,"Время в онлайн: %02d:%02d:%02d \r\n" 4888 "Сервер: %s \r\n%s \r\n", uptimeHour, uptimeMin, uptimeSec, hostbuf2,PINGO); \ 000000DC 590D85E2 ADD R0,R5,#+5696 \ 000000E0 01002DE9 PUSH {R0} \ 000000E4 20009DE5 LDR R0,[SP, #+32] \ 000000E8 8C1086E2 ADD R1,R6,#+140 \ 000000EC 01002DE9 PUSH {R0} \ 000000F0 480395E5 LDR R0,[R5, #+840] \ 000000F4 01002DE9 PUSH {R0} \ 000000F8 443395E5 LDR R3,[R5, #+836] \ 000000FC 402395E5 LDR R2,[R5, #+832] \ 00000100 4F0F8DE2 ADD R0,SP,#+316 \ 00000104 160000EF SWI +22 4889 strcat(s,online); \ 00000108 4F1F8DE2 ADD R1,SP,#+316 \ 0000010C 0A00A0E1 MOV R0,R10 \ 00000110 170000EF SWI +23 4890 char *send_txt=malloc(64); \ 00000114 4000A0E3 MOV R0,#+64 \ 00000118 140000EF SWI +20 \ 0000011C 00B0A0E1 MOV R11,R0 4891 sprintf(send_txt, "Отправлено сообщений: %d \r\n" 4892 "Принято сообщений: %d \r\n", main2_count, main_count); \ 00000120 ........ LDR R0,??DataTable163 ;; main_count \ 00000124 C01086E2 ADD R1,R6,#+192 \ 00000128 003090E5 LDR R3,[R0, #+0] \ 0000012C ........ LDR R0,??DataTable164 ;; main2_count \ 00000130 002090E5 LDR R2,[R0, #+0] \ 00000134 0B00A0E1 MOV R0,R11 \ 00000138 160000EF SWI +22 4893 strcat(s,send_txt); \ 0000013C 0B10A0E1 MOV R1,R11 \ 00000140 0A00A0E1 MOV R0,R10 \ 00000144 170000EF SWI +23 4894 4895 WSHDR *ws=AllocWS(64); \ 00000148 4000A0E3 MOV R0,#+64 \ 0000014C 250100EF SWI +293 \ 00000150 14008DE5 STR R0,[SP, #+20] 4896 GetProvider(ws,0); \ 00000154 0010A0E3 MOV R1,#+0 \ 00000158 410000EF SWI +65 4897 char prov[16]; 4898 ws_2str(ws,prov,wstrlen(ws)); \ 0000015C 14009DE5 LDR R0,[SP, #+20] \ 00000160 230100EF SWI +291 \ 00000164 0020A0E1 MOV R2,R0 \ 00000168 14009DE5 LDR R0,[SP, #+20] \ 0000016C 2C108DE2 ADD R1,SP,#+44 \ 00000170 A30000EF SWI +163 4899 sprintf(send_txt, "Оператор: %s \r\n", prov); \ 00000174 2C208DE2 ADD R2,SP,#+44 \ 00000178 F41086E2 ADD R1,R6,#+244 \ 0000017C 0B00A0E1 MOV R0,R11 \ 00000180 160000EF SWI +22 4900 FreeWS(ws); \ 00000184 14009DE5 LDR R0,[SP, #+20] \ 00000188 290100EF SWI +297 4901 strcat(s,send_txt); \ 0000018C 0B10A0E1 MOV R1,R11 \ 00000190 0A00A0E1 MOV R0,R10 \ 00000194 170000EF SWI +23 4902 4903 int bat; 4904 bat=*RamCap(); \ 00000198 C88000EF SWI +32968 \ 0000019C B020D0E1 LDRH R2,[R0, #+0] 4905 sprintf(send_txt, "Заряд батареи: %d процентов \r\n", bat); \ 000001A0 411F86E2 ADD R1,R6,#+260 \ 000001A4 0B00A0E1 MOV R0,R11 \ 000001A8 160000EF SWI +22 4906 strcat(s,send_txt); \ 000001AC 0B10A0E1 MOV R1,R11 \ 000001B0 0A00A0E1 MOV R0,R10 \ 000001B4 170000EF SWI +23 4907 4908 char *status=malloc(256); \ 000001B8 400FA0E3 MOV R0,#+256 \ 000001BC 140000EF SWI +20 \ 000001C0 14008DE5 STR R0,[SP, #+20] 4909 TTime the; 4910 GetDateTime(NULL,&the); \ 000001C4 1C108DE2 ADD R1,SP,#+28 \ 000001C8 0900A0E1 MOV R0,R9 \ 000001CC B40000EF SWI +180 4911 void Get_Online_total(); 4912 Get_Online_total(); \ 000001D0 ........ BL Get_Online_total 4913 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l \ 000001D4 8C2395E5 LDR R2,[R5, #+908] \ 000001D8 903395E5 LDR R3,[R5, #+912] 4914 sprintf(status, "Traffic: Rx : %db Tx : %db Queue: %db \r\nTime: %02d:%02d\r\n" 4915 "Online contact: %d [total: %d] \r\nUnread message: %d/%d ", 4916 RX,TX,sendq_l, 4917 the.hour, the.min, 4918 kopa_kontaktu, kopa_online, 4919 total_unread,total_unread2); \ 000001DC FC0295E5 LDR R0,[R5, #+764] \ 000001E0 491F86E2 ADD R1,R6,#+292 \ 000001E4 01002DE9 PUSH {R0} \ 000001E8 A00395E5 LDR R0,[R5, #+928] \ 000001EC 01002DE9 PUSH {R0} \ 000001F0 BC0395E5 LDR R0,[R5, #+956] \ 000001F4 01002DE9 PUSH {R0} \ 000001F8 C00395E5 LDR R0,[R5, #+960] \ 000001FC 01002DE9 PUSH {R0} \ 00000200 2D00DDE5 LDRB R0,[SP, #+45] \ 00000204 01002DE9 PUSH {R0} \ 00000208 3000DDE5 LDRB R0,[SP, #+48] \ 0000020C 01002DE9 PUSH {R0} \ 00000210 940395E5 LDR R0,[R5, #+916] \ 00000214 01002DE9 PUSH {R0} \ 00000218 30009DE5 LDR R0,[SP, #+48] \ 0000021C 160000EF SWI +22 \ 00000220 30D08DE2 ADD SP,SP,#+48 4920 strcat(s,status); \ 00000224 00109DE5 LDR R1,[SP, #+0] \ 00000228 0A00A0E1 MOV R0,R10 \ 0000022C 170000EF SWI +23 4921 comanda=0; 4922 if(show_send_info) \ 00000230 000098E5 LDR R0,[R8, #+0] \ 00000234 009485E5 STR R9,[R5, #+1024] \ 00000238 000050E3 CMP R0,#+0 \ 0000023C 080395E5 LDR R0,[R5, #+776] \ 00000240 010080E2 ADD R0,R0,#+1 \ 00000244 080385E5 STR R0,[R5, #+776] \ 00000248 0900000A BEQ ??CheckComand_3 4923 AddStringToLog(t,0x01,"Sending textinfo...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 0000024C 0110A0E3 MOV R1,#+1 \ 00000250 02002DE9 PUSH {R1} \ 00000254 8008A0E1 LSL R0,R0,#+17 \ 00000258 A008A0E1 LSR R0,R0,#+17 \ 0000025C 01002DE9 PUSH {R0} \ 00000260 0730A0E1 MOV R3,R7 \ 00000264 662F86E2 ADD R2,R6,#+408 \ 00000268 0400A0E1 MOV R0,R4 \ 0000026C ........ BL AddStringToLog \ 00000270 08D08DE2 ADD SP,SP,#+8 4924 else 4925 SENDMSGCOUNT++; 4926 SendData(t,s,ENA_SIGNAL,0); \ ??CheckComand_3: \ 00000274 0030A0E3 MOV R3,#+0 \ 00000278 0120A0E3 MOV R2,#+1 \ 0000027C 0A10A0E1 MOV R1,R10 \ 00000280 0400A0E1 MOV R0,R4 \ 00000284 ........ BL SendData 4927 mfree(s); \ 00000288 0A00A0E1 MOV R0,R10 \ 0000028C 150000EF SWI +21 4928 mfree(send_txt); \ 00000290 0B00A0E1 MOV R0,R11 \ 00000294 150000EF SWI +21 4929 mfree(status); \ 00000298 00009DE5 LDR R0,[SP, #+0] \ 0000029C 670100EA B ??CheckComand_4 4930 return; 4931 } 4932 4933 if(!strcmp(txt, "__TIME") || !strcmp(txt, "__T") || !strcmp(txt, "GET_TIME")) \ ??CheckComand_2: \ 000002A0 781F86E2 ADD R1,R6,#+480 \ 000002A4 0B00A0E1 MOV R0,R11 \ 000002A8 190000EF SWI +25 \ 000002AC 000050E3 CMP R0,#+0 \ 000002B0 0900000A BEQ ??CheckComand_5 \ 000002B4 DC1F8FE2 ADR R1,??CheckComand_6 ;; "__T" \ 000002B8 0B00A0E1 MOV R0,R11 \ 000002BC 190000EF SWI +25 \ 000002C0 000050E3 CMP R0,#+0 \ 000002C4 0400000A BEQ ??CheckComand_5 \ 000002C8 7A1F86E2 ADD R1,R6,#+488 \ 000002CC 0B00A0E1 MOV R0,R11 \ 000002D0 190000EF SWI +25 \ 000002D4 000050E3 CMP R0,#+0 \ 000002D8 2200001A BNE ??CheckComand_7 4934 { 4935 char *status=malloc(256); \ ??CheckComand_5: \ 000002DC 400FA0E3 MOV R0,#+256 \ 000002E0 140000EF SWI +20 \ 000002E4 00A0A0E1 MOV R10,R0 4936 TTime the; 4937 GetDateTime(NULL,&the); \ 000002E8 08108DE2 ADD R1,SP,#+8 \ 000002EC 0000A0E3 MOV R0,#+0 \ 000002F0 B40000EF SWI +180 4938 sprintf(status, "Time: %02d:%02d",the.hour, the.min); \ 000002F4 0930DDE5 LDRB R3,[SP, #+9] \ 000002F8 0820DDE5 LDRB R2,[SP, #+8] \ 000002FC 701F86E2 ADD R1,R6,#+448 \ 00000300 0A00A0E1 MOV R0,R10 \ 00000304 160000EF SWI +22 4939 comanda=0; 4940 if(show_send_info) \ 00000308 000098E5 LDR R0,[R8, #+0] \ 0000030C 009485E5 STR R9,[R5, #+1024] \ 00000310 000050E3 CMP R0,#+0 \ 00000314 080395E5 LDR R0,[R5, #+776] \ 00000318 010080E2 ADD R0,R0,#+1 \ 0000031C 080385E5 STR R0,[R5, #+776] \ 00000320 0900000A BEQ ??CheckComand_8 4941 AddStringToLog(t,0x01,"Sending time...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000324 0110A0E3 MOV R1,#+1 \ 00000328 02002DE9 PUSH {R1} \ 0000032C 8008A0E1 LSL R0,R0,#+17 \ 00000330 A008A0E1 LSR R0,R0,#+17 \ 00000334 01002DE9 PUSH {R0} \ 00000338 0730A0E1 MOV R3,R7 \ 0000033C 742F86E2 ADD R2,R6,#+464 \ 00000340 0400A0E1 MOV R0,R4 \ 00000344 ........ BL AddStringToLog \ 00000348 08D08DE2 ADD SP,SP,#+8 4942 else 4943 SENDMSGCOUNT++; 4944 SendData(t,status,ENA_SIGNAL,0); \ ??CheckComand_8: \ 0000034C 0030A0E3 MOV R3,#+0 \ 00000350 0120A0E3 MOV R2,#+1 \ 00000354 0A10A0E1 MOV R1,R10 \ 00000358 0400A0E1 MOV R0,R4 \ 0000035C ........ BL SendData 4945 mfree(status); \ 00000360 0A00A0E1 MOV R0,R10 \ 00000364 350100EA B ??CheckComand_4 4946 return; 4947 } 4948 4949 if(!strcmp(txt, "GET_PLATFORM_INFO") || !strcmp(txt, "__PLATFORM") || !strcmp(txt,"__HW")) \ ??CheckComand_7: \ 00000368 ........ LDR R10,??DataTable162 ;; SendAnswer \ 0000036C 891F86E2 ADD R1,R6,#+548 \ 00000370 0B00A0E1 MOV R0,R11 \ 00000374 190000EF SWI +25 \ 00000378 000050E3 CMP R0,#+0 \ 0000037C 0900000A BEQ ??CheckComand_9 \ 00000380 8E1F86E2 ADD R1,R6,#+568 \ 00000384 0B00A0E1 MOV R0,R11 \ 00000388 190000EF SWI +25 \ 0000038C 000050E3 CMP R0,#+0 \ 00000390 0400000A BEQ ??CheckComand_9 \ 00000394 911F86E2 ADD R1,R6,#+580 \ 00000398 0B00A0E1 MOV R0,R11 \ 0000039C 190000EF SWI +25 \ 000003A0 000050E3 CMP R0,#+0 \ 000003A4 3100001A BNE ??CheckComand_10 4950 { 4951 comanda=0; \ ??CheckComand_9: \ 000003A8 009485E5 STR R9,[R5, #+1024] 4952 TPKT *p; 4953 char pl[256]; 4954 snprintf(pl,256,"%s model: %s sw: %s",PLATFORM,Get_Phone_Info(PI_MODEL),Get_Phone_Info(PI_SW_NUMBER)); \ 000003AC 0700A0E3 MOV R0,#+7 \ 000003B0 D50100EF SWI +469 \ 000003B4 0090A0E1 MOV R9,R0 \ 000003B8 0900A0E3 MOV R0,#+9 \ 000003BC D50100EF SWI +469 \ 000003C0 00022DE9 PUSH {R9} \ 000003C4 01002DE9 PUSH {R0} \ 000003C8 7C3086E2 ADD R3,R6,#+124 \ 000003CC 7D2F86E2 ADD R2,R6,#+500 \ 000003D0 401FA0E3 MOV R1,#+256 \ 000003D4 4C0F8DE2 ADD R0,SP,#+304 \ 000003D8 1B0100EF SWI +283 4955 p=malloc(sizeof(PKT)+strlen(pl)+1); \ 000003DC 4C0F8DE2 ADD R0,SP,#+304 \ 000003E0 1B0000EF SWI +27 \ 000003E4 090080E2 ADD R0,R0,#+9 \ 000003E8 140000EF SWI +20 \ 000003EC 0090A0E1 MOV R9,R0 4956 p->pkt.uin=t->uin; \ 000003F0 0C0094E5 LDR R0,[R4, #+12] \ 000003F4 000089E5 STR R0,[R9, #+0] 4957 p->pkt.type=T_SENDMSG; \ 000003F8 0200A0E3 MOV R0,#+2 \ 000003FC B400C9E1 STRH R0,[R9, #+4] 4958 p->pkt.data_len=strlen(pl); \ 00000400 4C0F8DE2 ADD R0,SP,#+304 \ 00000404 1B0000EF SWI +27 \ 00000408 B600C9E1 STRH R0,[R9, #+6] 4959 strcpy(p->data,pl); \ 0000040C 4C1F8DE2 ADD R1,SP,#+304 \ 00000410 080089E2 ADD R0,R9,#+8 \ 00000414 1A0000EF SWI +26 4960 if(show_send_info) \ 00000418 000098E5 LDR R0,[R8, #+0] \ 0000041C 08D08DE2 ADD SP,SP,#+8 \ 00000420 000050E3 CMP R0,#+0 \ 00000424 080395E5 LDR R0,[R5, #+776] \ 00000428 010080E2 ADD R0,R0,#+1 \ 0000042C 080385E5 STR R0,[R5, #+776] \ 00000430 0900000A BEQ ??CheckComand_11 4961 AddStringToLog(t,0x01,"Sending platform info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000434 0110A0E3 MOV R1,#+1 \ 00000438 02002DE9 PUSH {R1} \ 0000043C 8008A0E1 LSL R0,R0,#+17 \ 00000440 A008A0E1 LSR R0,R0,#+17 \ 00000444 01002DE9 PUSH {R0} \ 00000448 0730A0E1 MOV R3,R7 \ 0000044C 822F86E2 ADD R2,R6,#+520 \ 00000450 0400A0E1 MOV R0,R4 \ 00000454 ........ BL AddStringToLog \ 00000458 08D08DE2 ADD SP,SP,#+8 4962 else 4963 SENDMSGCOUNT++; 4964 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_11: \ 0000045C 0920A0E1 MOV R2,R9 \ ??CheckComand_12: \ 00000460 0010A0E3 MOV R1,#+0 \ 00000464 0A00A0E1 MOV R0,R10 \ 00000468 710100EF SWI +369 4965 return; \ 0000046C F40000EA B ??CheckComand_13 4966 } 4967 4968 if(!strcmp(txt, "GET_ONLINE_TIME") || !strcmp(txt, "__ONLINE")) \ ??CheckComand_10: \ 00000470 9E1F86E2 ADD R1,R6,#+632 \ 00000474 0B00A0E1 MOV R0,R11 \ 00000478 190000EF SWI +25 \ 0000047C 000050E3 CMP R0,#+0 \ 00000480 0400000A BEQ ??CheckComand_14 \ 00000484 A21F86E2 ADD R1,R6,#+648 \ 00000488 0B00A0E1 MOV R0,R11 \ 0000048C 190000EF SWI +25 \ 00000490 000050E3 CMP R0,#+0 \ 00000494 2D00001A BNE ??CheckComand_15 4969 { 4970 comanda=0; \ ??CheckComand_14: \ 00000498 009485E5 STR R9,[R5, #+1024] 4971 TPKT *p; 4972 char online[256]; 4973 sprintf(online,"Время в онлайн: %02d:%02d:%02d \n" 4974 "Сервер: %s", uptimeHour, uptimeMin, uptimeSec, hostbuf2); \ 0000049C 14009DE5 LDR R0,[SP, #+20] \ 000004A0 931F86E2 ADD R1,R6,#+588 \ 000004A4 01002DE9 PUSH {R0} \ 000004A8 480395E5 LDR R0,[R5, #+840] \ 000004AC 01002DE9 PUSH {R0} \ 000004B0 443395E5 LDR R3,[R5, #+836] \ 000004B4 402395E5 LDR R2,[R5, #+832] \ 000004B8 4C0F8DE2 ADD R0,SP,#+304 \ 000004BC 160000EF SWI +22 4975 p=malloc(sizeof(PKT)+strlen(online)+1); \ 000004C0 4C0F8DE2 ADD R0,SP,#+304 \ 000004C4 1B0000EF SWI +27 \ 000004C8 090080E2 ADD R0,R0,#+9 \ 000004CC 140000EF SWI +20 \ 000004D0 0060A0E1 MOV R6,R0 4976 p->pkt.uin=t->uin; \ 000004D4 0C0094E5 LDR R0,[R4, #+12] \ 000004D8 000086E5 STR R0,[R6, #+0] 4977 p->pkt.type=T_SENDMSG; \ 000004DC 0200A0E3 MOV R0,#+2 \ 000004E0 B400C6E1 STRH R0,[R6, #+4] 4978 p->pkt.data_len=strlen(online); \ 000004E4 4C0F8DE2 ADD R0,SP,#+304 \ 000004E8 1B0000EF SWI +27 \ 000004EC B600C6E1 STRH R0,[R6, #+6] 4979 strcpy(p->data,online); \ 000004F0 4C1F8DE2 ADD R1,SP,#+304 \ 000004F4 080086E2 ADD R0,R6,#+8 \ 000004F8 1A0000EF SWI +26 4980 if(show_send_info) \ 000004FC 000098E5 LDR R0,[R8, #+0] \ 00000500 08D08DE2 ADD SP,SP,#+8 \ 00000504 000050E3 CMP R0,#+0 \ 00000508 080395E5 LDR R0,[R5, #+776] \ 0000050C 010080E2 ADD R0,R0,#+1 \ 00000510 080385E5 STR R0,[R5, #+776] \ 00000514 0B00000A BEQ ??CheckComand_16 4981 AddStringToLog(t,0x01,requests1,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000518 0110A0E3 MOV R1,#+1 \ 0000051C 02002DE9 PUSH {R1} \ 00000520 8008A0E1 LSL R0,R0,#+17 \ 00000524 A008A0E1 LSR R0,R0,#+17 \ 00000528 01002DE9 PUSH {R0} \ 0000052C 0730A0E1 MOV R3,R7 \ 00000530 8C00A0E3 MOV R0,#+140 \ 00000534 740D80E3 ORR R0,R0,#0x1D00 \ 00000538 052080E0 ADD R2,R0,R5 \ 0000053C 0400A0E1 MOV R0,R4 \ 00000540 ........ BL AddStringToLog \ 00000544 08D08DE2 ADD SP,SP,#+8 4982 else 4983 SENDMSGCOUNT++; 4984 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_16: \ 00000548 0620A0E1 MOV R2,R6 \ 0000054C C3FFFFEA B ??CheckComand_12 4985 return; 4986 } 4987 4988 if(!strcmp(txt, "GET_MSG_INFO") || !strcmp(txt, "__MSG")) \ ??CheckComand_15: \ 00000550 B11F86E2 ADD R1,R6,#+708 \ 00000554 0B00A0E1 MOV R0,R11 \ 00000558 190000EF SWI +25 \ 0000055C 000050E3 CMP R0,#+0 \ 00000560 0400000A BEQ ??CheckComand_17 \ 00000564 B51F86E2 ADD R1,R6,#+724 \ 00000568 0B00A0E1 MOV R0,R11 \ 0000056C 190000EF SWI +25 \ 00000570 000050E3 CMP R0,#+0 \ 00000574 2D00001A BNE ??CheckComand_18 4989 { 4990 comanda=0; \ ??CheckComand_17: \ 00000578 009485E5 STR R9,[R5, #+1024] 4991 TPKT *p; 4992 char *send_txt=malloc(64); \ 0000057C 4000A0E3 MOV R0,#+64 \ 00000580 140000EF SWI +20 \ 00000584 0090A0E1 MOV R9,R0 4993 sprintf(send_txt, "Отправлено сообщений: %d \n" 4994 "Принято сообщений: %d" 4995 , main2_count, main_count); \ 00000588 ........ LDR R0,??DataTable163 ;; main_count \ 0000058C A51F86E2 ADD R1,R6,#+660 \ 00000590 003090E5 LDR R3,[R0, #+0] \ 00000594 ........ LDR R0,??DataTable164 ;; main2_count \ 00000598 002090E5 LDR R2,[R0, #+0] \ 0000059C 0900A0E1 MOV R0,R9 \ 000005A0 160000EF SWI +22 4996 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000005A4 0900A0E1 MOV R0,R9 \ 000005A8 1B0000EF SWI +27 \ 000005AC 090080E2 ADD R0,R0,#+9 \ 000005B0 140000EF SWI +20 \ 000005B4 0060A0E1 MOV R6,R0 4997 p->pkt.uin=t->uin; \ 000005B8 0C0094E5 LDR R0,[R4, #+12] \ 000005BC 000086E5 STR R0,[R6, #+0] 4998 p->pkt.type=T_SENDMSG; \ 000005C0 0200A0E3 MOV R0,#+2 \ 000005C4 B400C6E1 STRH R0,[R6, #+4] 4999 p->pkt.data_len=strlen(send_txt); \ 000005C8 0900A0E1 MOV R0,R9 \ 000005CC 1B0000EF SWI +27 \ 000005D0 B600C6E1 STRH R0,[R6, #+6] 5000 strcpy(p->data,send_txt); \ 000005D4 0910A0E1 MOV R1,R9 \ 000005D8 080086E2 ADD R0,R6,#+8 \ 000005DC 1A0000EF SWI +26 5001 if(show_send_info) \ 000005E0 000098E5 LDR R0,[R8, #+0] \ 000005E4 000050E3 CMP R0,#+0 \ 000005E8 080395E5 LDR R0,[R5, #+776] \ 000005EC 010080E2 ADD R0,R0,#+1 \ 000005F0 080385E5 STR R0,[R5, #+776] \ 000005F4 8C00000A BEQ ??CheckComand_19 5002 AddStringToLog(t,0x01,requests2,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000005F8 0110A0E3 MOV R1,#+1 \ 000005FC 02002DE9 PUSH {R1} \ 00000600 8008A0E1 LSL R0,R0,#+17 \ 00000604 A008A0E1 LSR R0,R0,#+17 \ 00000608 01002DE9 PUSH {R0} \ 0000060C 0730A0E1 MOV R3,R7 \ 00000610 A400A0E3 MOV R0,#+164 \ 00000614 740D80E3 ORR R0,R0,#0x1D00 \ 00000618 052080E0 ADD R2,R0,R5 \ 0000061C 0400A0E1 MOV R0,R4 \ 00000620 ........ BL AddStringToLog \ 00000624 08D08DE2 ADD SP,SP,#+8 5003 else 5004 SENDMSGCOUNT++; 5005 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_20: \ 00000628 7F0000EA B ??CheckComand_19 \ ??CheckComand_6: \ 0000062C 5F5F5400 DC8 "__T" 5006 mfree(send_txt); 5007 return; 5008 } 5009 5010 //==========================windes commands begin ===================== 5011 5012 if(!strcmp(txt, "GET_PROVIDER") || !strcmp(txt, "__PROVIDER")) \ ??CheckComand_18: \ 00000630 C21F86E2 ADD R1,R6,#+776 \ 00000634 0B00A0E1 MOV R0,R11 \ 00000638 190000EF SWI +25 \ 0000063C 000050E3 CMP R0,#+0 \ 00000640 0400000A BEQ ??CheckComand_21 \ 00000644 C61F86E2 ADD R1,R6,#+792 \ 00000648 0B00A0E1 MOV R0,R11 \ 0000064C 190000EF SWI +25 \ 00000650 000050E3 CMP R0,#+0 \ 00000654 3600001A BNE ??CheckComand_22 5013 { 5014 comanda=0; \ ??CheckComand_21: \ 00000658 009485E5 STR R9,[R5, #+1024] 5015 TPKT *p; 5016 5017 WSHDR *ws=AllocWS(32); \ 0000065C 2000A0E3 MOV R0,#+32 \ 00000660 250100EF SWI +293 \ 00000664 0090A0E1 MOV R9,R0 5018 GetProvider(ws,0); \ 00000668 0010A0E3 MOV R1,#+0 \ 0000066C 410000EF SWI +65 5019 char prov[16]; 5020 ws_2str(ws,prov,wstrlen(ws)); \ 00000670 0900A0E1 MOV R0,R9 \ 00000674 230100EF SWI +291 \ 00000678 0020A0E1 MOV R2,R0 \ 0000067C 18108DE2 ADD R1,SP,#+24 \ 00000680 0900A0E1 MOV R0,R9 \ 00000684 A30000EF SWI +163 5021 char *send_txt=malloc(32); \ 00000688 2000A0E3 MOV R0,#+32 \ 0000068C 140000EF SWI +20 \ 00000690 00B0A0E1 MOV R11,R0 5022 sprintf(send_txt, "Оператор: %s", prov); \ 00000694 18208DE2 ADD R2,SP,#+24 \ 00000698 B71F86E2 ADD R1,R6,#+732 \ 0000069C 160000EF SWI +22 5023 FreeWS(ws); \ 000006A0 0900A0E1 MOV R0,R9 \ 000006A4 290100EF SWI +297 5024 5025 p=malloc(sizeof(PKT)+28+1); \ 000006A8 2500A0E3 MOV R0,#+37 \ 000006AC 140000EF SWI +20 \ 000006B0 0090A0E1 MOV R9,R0 5026 p->pkt.uin=t->uin; \ 000006B4 0C0094E5 LDR R0,[R4, #+12] \ 000006B8 000089E5 STR R0,[R9, #+0] 5027 p->pkt.type=T_SENDMSG; \ 000006BC 0200A0E3 MOV R0,#+2 \ 000006C0 B400C9E1 STRH R0,[R9, #+4] 5028 p->pkt.data_len=strlen(send_txt); \ 000006C4 0B00A0E1 MOV R0,R11 \ 000006C8 1B0000EF SWI +27 \ 000006CC B600C9E1 STRH R0,[R9, #+6] 5029 strcpy(p->data,send_txt); \ 000006D0 0B10A0E1 MOV R1,R11 \ 000006D4 080089E2 ADD R0,R9,#+8 \ 000006D8 1A0000EF SWI +26 5030 if(show_send_info) \ 000006DC 000098E5 LDR R0,[R8, #+0] \ 000006E0 000050E3 CMP R0,#+0 \ 000006E4 080395E5 LDR R0,[R5, #+776] \ 000006E8 010080E2 ADD R0,R0,#+1 \ 000006EC 080385E5 STR R0,[R5, #+776] \ 000006F0 0900000A BEQ ??CheckComand_23 5031 AddStringToLog(t,0x01,"Sending provider name...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000006F4 0110A0E3 MOV R1,#+1 \ 000006F8 02002DE9 PUSH {R1} \ 000006FC 8008A0E1 LSL R0,R0,#+17 \ 00000700 A008A0E1 LSR R0,R0,#+17 \ 00000704 01002DE9 PUSH {R0} \ 00000708 0730A0E1 MOV R3,R7 \ 0000070C BB2F86E2 ADD R2,R6,#+748 \ 00000710 0400A0E1 MOV R0,R4 \ 00000714 ........ BL AddStringToLog \ 00000718 08D08DE2 ADD SP,SP,#+8 5032 else 5033 SENDMSGCOUNT++; 5034 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_23: \ 0000071C 0920A0E1 MOV R2,R9 \ 00000720 0010A0E3 MOV R1,#+0 \ 00000724 0A00A0E1 MOV R0,R10 \ 00000728 710100EF SWI +369 5035 mfree(send_txt); \ 0000072C 0B00A0E1 MOV R0,R11 \ 00000730 420000EA B ??CheckComand_4 5036 return; 5037 } 5038 5039 5040 //----------------------------------------------------------------------- 5041 5042 5043 if(!strcmp(txt, "GET_MOD_INFO") || !strcmp(txt, "__MOD")) \ ??CheckComand_22: \ 00000734 CE1F86E2 ADD R1,R6,#+824 \ 00000738 0B00A0E1 MOV R0,R11 \ 0000073C 190000EF SWI +25 \ 00000740 000050E3 CMP R0,#+0 \ 00000744 0400000A BEQ ??CheckComand_24 \ 00000748 D21F86E2 ADD R1,R6,#+840 \ 0000074C 0B00A0E1 MOV R0,R11 \ 00000750 190000EF SWI +25 \ 00000754 000050E3 CMP R0,#+0 \ 00000758 3B00001A BNE ??CheckComand_25 5044 { 5045 comanda=0; \ ??CheckComand_24: \ 0000075C 009485E5 STR R9,[R5, #+1024] 5046 TPKT *p; 5047 char *send_txt=malloc(256); \ 00000760 400FA0E3 MOV R0,#+256 \ 00000764 140000EF SWI +20 \ 00000768 0090A0E1 MOV R9,R0 5048 // sprintf(I_UIN, "uin%d", t->uin); 5049 strcpy(I_UIN, t->name); \ 0000076C 72BD85E2 ADD R11,R5,#+7296 \ 00000770 141084E2 ADD R1,R4,#+20 \ 00000774 0B00A0E1 MOV R0,R11 \ 00000778 1A0000EF SWI +26 5050 if(strstr(ignor_list,I_UIN)==0) \ 0000077C ........ LDR R0,??DataTable165 ;; ignor_list \ 00000780 0B10A0E1 MOV R1,R11 \ 00000784 180100EF SWI +280 \ 00000788 000050E3 CMP R0,#+0 5051 { 5052 strcpy(send_txt, mod_info); \ 0000078C 10109D05 LDREQ R1,[SP, #+16] 5053 } 5054 else 5055 strcpy(send_txt, "***Access denied***"); \ 00000790 0900A0E1 MOV R0,R9 \ 00000794 C91F8612 ADDNE R1,R6,#+804 \ 00000798 1A0000EF SWI +26 5056 5057 strcpy(send_txt, mod_info); \ 0000079C 10109DE5 LDR R1,[SP, #+16] \ 000007A0 0900A0E1 MOV R0,R9 \ 000007A4 1A0000EF SWI +26 5058 5059 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000007A8 0900A0E1 MOV R0,R9 \ 000007AC 1B0000EF SWI +27 \ 000007B0 090080E2 ADD R0,R0,#+9 \ 000007B4 140000EF SWI +20 \ 000007B8 0060A0E1 MOV R6,R0 5060 p->pkt.uin=t->uin; \ 000007BC 0C0094E5 LDR R0,[R4, #+12] \ 000007C0 000086E5 STR R0,[R6, #+0] 5061 p->pkt.type=T_SENDMSG; \ 000007C4 0200A0E3 MOV R0,#+2 \ 000007C8 B400C6E1 STRH R0,[R6, #+4] 5062 p->pkt.data_len=strlen(send_txt); \ 000007CC 0900A0E1 MOV R0,R9 \ 000007D0 1B0000EF SWI +27 \ 000007D4 B600C6E1 STRH R0,[R6, #+6] 5063 strcpy(p->data,send_txt); \ 000007D8 0910A0E1 MOV R1,R9 \ 000007DC 080086E2 ADD R0,R6,#+8 \ 000007E0 1A0000EF SWI +26 5064 #ifdef EVILFOX 5065 SENDMSGCOUNT++; 5066 #else 5067 if(show_send_info) \ 000007E4 000098E5 LDR R0,[R8, #+0] \ 000007E8 000050E3 CMP R0,#+0 \ 000007EC 080395E5 LDR R0,[R5, #+776] \ 000007F0 010080E2 ADD R0,R0,#+1 \ 000007F4 080385E5 STR R0,[R5, #+776] \ 000007F8 0B00000A BEQ ??CheckComand_19 5068 AddStringToLog(t,0x01,requests4,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000007FC 0110A0E3 MOV R1,#+1 \ 00000800 02002DE9 PUSH {R1} \ 00000804 8008A0E1 LSL R0,R0,#+17 \ 00000808 A008A0E1 LSR R0,R0,#+17 \ 0000080C 01002DE9 PUSH {R0} \ 00000810 0730A0E1 MOV R3,R7 \ 00000814 D000A0E3 MOV R0,#+208 \ 00000818 740D80E3 ORR R0,R0,#0x1D00 \ 0000081C 052080E0 ADD R2,R0,R5 \ 00000820 0400A0E1 MOV R0,R4 \ 00000824 ........ BL AddStringToLog \ 00000828 08D08DE2 ADD SP,SP,#+8 5069 else 5070 SENDMSGCOUNT++; 5071 #endif 5072 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_19: \ 0000082C 0620A0E1 MOV R2,R6 \ ??CheckComand_26: \ 00000830 0010A0E3 MOV R1,#+0 \ 00000834 0A00A0E1 MOV R0,R10 \ 00000838 710100EF SWI +369 5073 mfree(send_txt); \ 0000083C 0900A0E1 MOV R0,R9 \ ??CheckComand_4: \ 00000840 150000EF SWI +21 \ ??CheckComand_13: \ 00000844 8ADF8DE2 ADD SP,SP,#+552 \ 00000848 F08FBDE8 POP {R4-R11,PC} 5074 return; 5075 } 5076 5077 if(!strcmp(txt, "GET_BAT_INFO") || !strcmp(txt, "__BAT")) \ ??CheckComand_25: \ 0000084C D41F86E2 ADD R1,R6,#+848 \ 00000850 0B00A0E1 MOV R0,R11 \ 00000854 190000EF SWI +25 \ 00000858 000050E3 CMP R0,#+0 \ 0000085C 0400000A BEQ ??CheckComand_27 \ 00000860 D81F86E2 ADD R1,R6,#+864 \ 00000864 0B00A0E1 MOV R0,R11 \ 00000868 190000EF SWI +25 \ 0000086C 000050E3 CMP R0,#+0 \ 00000870 2800001A BNE ??CheckComand_28 5078 { 5079 comanda=0; \ ??CheckComand_27: \ 00000874 009485E5 STR R9,[R5, #+1024] 5080 TPKT *p; 5081 int bat; 5082 bat=*RamCap(); \ 00000878 C88000EF SWI +32968 \ 0000087C B0B0D0E1 LDRH R11,[R0, #+0] 5083 char *send_txt=malloc(64); \ 00000880 4000A0E3 MOV R0,#+64 \ 00000884 140000EF SWI +20 \ 00000888 0090A0E1 MOV R9,R0 5084 sprintf(send_txt, "Заряд батареи: %d процентов", bat); \ 0000088C 0B20A0E1 MOV R2,R11 \ 00000890 FF1F86E2 ADD R1,R6,#+1020 \ 00000894 160000EF SWI +22 5085 p=malloc(sizeof(PKT)+28+1); \ 00000898 2500A0E3 MOV R0,#+37 \ 0000089C 140000EF SWI +20 \ 000008A0 0060A0E1 MOV R6,R0 5086 p->pkt.uin=t->uin; \ 000008A4 0C0094E5 LDR R0,[R4, #+12] \ 000008A8 000086E5 STR R0,[R6, #+0] 5087 p->pkt.type=T_SENDMSG; \ 000008AC 0200A0E3 MOV R0,#+2 \ 000008B0 B400C6E1 STRH R0,[R6, #+4] 5088 p->pkt.data_len=strlen(send_txt); \ 000008B4 0900A0E1 MOV R0,R9 \ 000008B8 1B0000EF SWI +27 \ 000008BC B600C6E1 STRH R0,[R6, #+6] 5089 strcpy(p->data,send_txt); \ 000008C0 0910A0E1 MOV R1,R9 \ 000008C4 080086E2 ADD R0,R6,#+8 \ 000008C8 1A0000EF SWI +26 5090 #ifdef EVILFOX 5091 SENDMSGCOUNT++; 5092 #else 5093 if(show_send_info) \ 000008CC 000098E5 LDR R0,[R8, #+0] \ 000008D0 000050E3 CMP R0,#+0 \ 000008D4 080395E5 LDR R0,[R5, #+776] \ 000008D8 010080E2 ADD R0,R0,#+1 \ 000008DC 080385E5 STR R0,[R5, #+776] \ 000008E0 D1FFFF0A BEQ ??CheckComand_19 5094 AddStringToLog(t,0x01,requests3,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000008E4 0110A0E3 MOV R1,#+1 \ 000008E8 02002DE9 PUSH {R1} \ 000008EC 8008A0E1 LSL R0,R0,#+17 \ 000008F0 A008A0E1 LSR R0,R0,#+17 \ 000008F4 01002DE9 PUSH {R0} \ 000008F8 0730A0E1 MOV R3,R7 \ 000008FC B800A0E3 MOV R0,#+184 \ 00000900 740D80E3 ORR R0,R0,#0x1D00 \ 00000904 052080E0 ADD R2,R0,R5 \ 00000908 0400A0E1 MOV R0,R4 \ 0000090C ........ BL AddStringToLog \ 00000910 08D08DE2 ADD SP,SP,#+8 5095 else 5096 SENDMSGCOUNT++; 5097 #endif 5098 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_29: \ 00000914 C4FFFFEA B ??CheckComand_19 5099 mfree(send_txt); 5100 return; 5101 } 5102 5103 if((away_m==1 || t->isautomsg) && (t->automsgcount < automsgcount)) \ ??CheckComand_28: \ 00000918 2C1395E5 LDR R1,[R5, #+812] \ 0000091C ........ LDR R2,??DataTable166 ;; automsgcount \ 00000920 640094E5 LDR R0,[R4, #+100] \ 00000924 002092E5 LDR R2,[R2, #+0] \ 00000928 010051E3 CMP R1,#+1 \ 0000092C 0100000A BEQ ??CheckComand_30 \ 00000930 000050E3 CMP R0,#+0 \ 00000934 3900000A BEQ ??CheckComand_31 \ ??CheckComand_30: \ 00000938 7C3094E5 LDR R3,[R4, #+124] \ 0000093C 020053E1 CMP R3,R2 \ 00000940 3400002A BCS ??CheckComand_32 5104 { 5105 t->automsgcount++; 5106 comanda=1; 5107 TPKT *p; 5108 // sprintf(hah,"online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); 5109 sprintf(away_msg, "Автоответчик: %s %s! %s %s", awayHelloMsg, t->name, awayMsg, away_msg_time); \ 00000944 D4219FE5 LDR R2,??CheckComand_0+0x8 ;; awayHelloMsg \ 00000948 010083E2 ADD R0,R3,#+1 \ 0000094C 7C0084E5 STR R0,[R4, #+124] \ 00000950 0100A0E3 MOV R0,#+1 \ 00000954 000485E5 STR R0,[R5, #+1024] \ 00000958 5000A0E3 MOV R0,#+80 \ 0000095C 5C0D80E3 ORR R0,R0,#0x1700 \ 00000960 059080E0 ADD R9,R0,R5 \ 00000964 420F80E2 ADD R0,R0,#+264 \ 00000968 050080E0 ADD R0,R0,R5 \ 0000096C 01002DE9 PUSH {R0} \ 00000970 ........ LDR R0,??DataTable167 ;; awayMsg \ 00000974 143084E2 ADD R3,R4,#+20 \ 00000978 01002DE9 PUSH {R0} \ 0000097C DA1F86E2 ADD R1,R6,#+872 \ 00000980 0900A0E1 MOV R0,R9 \ 00000984 160000EF SWI +22 5110 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 00000988 0900A0E1 MOV R0,R9 \ 0000098C 1B0000EF SWI +27 \ 00000990 090080E2 ADD R0,R0,#+9 \ 00000994 140000EF SWI +20 \ 00000998 0060A0E1 MOV R6,R0 5111 p->pkt.uin=t->uin; \ 0000099C 0C0094E5 LDR R0,[R4, #+12] \ 000009A0 000086E5 STR R0,[R6, #+0] 5112 p->pkt.type=T_SENDMSG; \ 000009A4 0200A0E3 MOV R0,#+2 \ 000009A8 B400C6E1 STRH R0,[R6, #+4] 5113 p->pkt.data_len=strlen(away_msg); \ 000009AC 0900A0E1 MOV R0,R9 \ 000009B0 1B0000EF SWI +27 \ 000009B4 B600C6E1 STRH R0,[R6, #+6] 5114 strcpy(p->data,away_msg); \ 000009B8 0910A0E1 MOV R1,R9 \ 000009BC 080086E2 ADD R0,R6,#+8 \ 000009C0 1A0000EF SWI +26 5115 if(show_send_info) \ 000009C4 000098E5 LDR R0,[R8, #+0] \ 000009C8 08D08DE2 ADD SP,SP,#+8 \ 000009CC 000050E3 CMP R0,#+0 \ 000009D0 080395E5 LDR R0,[R5, #+776] \ 000009D4 010080E2 ADD R0,R0,#+1 \ 000009D8 080385E5 STR R0,[R5, #+776] \ 000009DC 0B00000A BEQ ??CheckComand_33 5116 #ifdef kluchnik 5117 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF,1); 5118 #else 5119 AddStringToLog(t,0x01,requests6,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000009E0 0110A0E3 MOV R1,#+1 \ 000009E4 02002DE9 PUSH {R1} \ 000009E8 8008A0E1 LSL R0,R0,#+17 \ 000009EC A008A0E1 LSR R0,R0,#+17 \ 000009F0 01002DE9 PUSH {R0} \ 000009F4 0730A0E1 MOV R3,R7 \ 000009F8 E400A0E3 MOV R0,#+228 \ 000009FC 740D80E3 ORR R0,R0,#0x1D00 \ 00000A00 052080E0 ADD R2,R0,R5 \ 00000A04 0400A0E1 MOV R0,R4 \ 00000A08 ........ BL AddStringToLog \ 00000A0C 08D08DE2 ADD SP,SP,#+8 5120 #endif 5121 else 5122 SENDMSGCOUNT++; 5123 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_33: \ 00000A10 0620A0E1 MOV R2,R6 \ 00000A14 91FEFFEA B ??CheckComand_12 5124 return; 5125 } 5126 #ifdef kluchnik 5127 else 5128 if((away_m==1 || t->isautomsg) && (t->uin==438532198)){ t->automsgcount=0;/* t->awaysignal=1;*/ return; } 5129 /* else 5130 if((away_m==1 || t->isautomsg) && (t->automsgcount<=(automsgcount+3)) ) 5131 { 5132 t->awaysignal=0; 5133 t->automsgcount++; 5134 sprintf(away_msg,"Бля,ну русским ж языком написали,НЕТУ МЕНЯ!!!че по сто сообщений слать?тем более если тебе делать нех..."); 5135 if(show_send_info) 5136 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF,1); 5137 else 5138 SENDMSGCOUNT++; 5139 SendData(t,away_msg,ENA_SIGNAL,0); 5140 return; 5141 }*/ 5142 #endif 5143 else 5144 if(away_m==1 || t->isautomsg) \ ??CheckComand_32: \ 00000A18 010051E3 CMP R1,#+1 \ 00000A1C 0100000A BEQ ??CheckComand_34 \ ??CheckComand_31: \ 00000A20 000050E3 CMP R0,#+0 \ 00000A24 0100000A BEQ ??CheckComand_35 5145 { 5146 t->automsgcount=automsgcount; \ ??CheckComand_34: \ 00000A28 7C2084E5 STR R2,[R4, #+124] 5147 return; \ 00000A2C 84FFFFEA B ??CheckComand_13 5148 } 5149 5150 5151 //---------------------------------------------------------------------------// 5152 5153 5154 if(!strcmp(txt, "GET_URL_INFO") || !strcmp(txt, "__URL"))// by kluchnik 26.03.08 \ ??CheckComand_35: \ 00000A30 F91F86E2 ADD R1,R6,#+996 \ 00000A34 0B00A0E1 MOV R0,R11 \ 00000A38 190000EF SWI +25 \ 00000A3C 000050E3 CMP R0,#+0 \ 00000A40 0400000A BEQ ??CheckComand_36 \ 00000A44 FD1F86E2 ADD R1,R6,#+1012 \ 00000A48 0B00A0E1 MOV R0,R11 \ 00000A4C 190000EF SWI +25 \ 00000A50 000050E3 CMP R0,#+0 \ 00000A54 2A00001A BNE ??CheckComand_37 5155 { 5156 comanda=0; \ ??CheckComand_36: \ 00000A58 009485E5 STR R9,[R5, #+1024] 5157 TPKT *p; 5158 5159 char *send_txt=malloc(256); \ 00000A5C 400FA0E3 MOV R0,#+256 \ 00000A60 140000EF SWI +20 \ 00000A64 0090A0E1 MOV R9,R0 5160 sprintf(send_txt,"revision 2058, mod date: %s at %s ", 5161 "http://kluchnik.jino-net.ru/naticqmod/",__DATE__,__TIME__); \ 00000A68 580086E2 ADD R0,R6,#+88 \ 00000A6C 01002DE9 PUSH {R0} \ 00000A70 4C3086E2 ADD R3,R6,#+76 \ 00000A74 EA2F86E2 ADD R2,R6,#+936 \ 00000A78 E11F86E2 ADD R1,R6,#+900 \ 00000A7C 0900A0E1 MOV R0,R9 \ 00000A80 160000EF SWI +22 5162 5163 p=malloc(sizeof(PKT)+256); \ 00000A84 420FA0E3 MOV R0,#+264 \ 00000A88 140000EF SWI +20 \ 00000A8C 00B0A0E1 MOV R11,R0 5164 p->pkt.uin=t->uin; \ 00000A90 0C0094E5 LDR R0,[R4, #+12] \ 00000A94 00008BE5 STR R0,[R11, #+0] 5165 p->pkt.type=T_SENDMSG; \ 00000A98 0200A0E3 MOV R0,#+2 \ 00000A9C B400CBE1 STRH R0,[R11, #+4] 5166 p->pkt.data_len=strlen(send_txt); \ 00000AA0 0900A0E1 MOV R0,R9 \ 00000AA4 1B0000EF SWI +27 \ 00000AA8 B600CBE1 STRH R0,[R11, #+6] 5167 strcpy(p->data,send_txt); \ 00000AAC 0910A0E1 MOV R1,R9 \ 00000AB0 08008BE2 ADD R0,R11,#+8 \ 00000AB4 1A0000EF SWI +26 5168 if(show_send_info) \ 00000AB8 000098E5 LDR R0,[R8, #+0] \ 00000ABC 04D08DE2 ADD SP,SP,#+4 \ 00000AC0 000050E3 CMP R0,#+0 \ 00000AC4 080395E5 LDR R0,[R5, #+776] \ 00000AC8 010080E2 ADD R0,R0,#+1 \ 00000ACC 080385E5 STR R0,[R5, #+776] \ 00000AD0 0900000A BEQ ??CheckComand_38 5169 AddStringToLog(t,0x01,"Sending url info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000AD4 0110A0E3 MOV R1,#+1 \ 00000AD8 02002DE9 PUSH {R1} \ 00000ADC 8008A0E1 LSL R0,R0,#+17 \ 00000AE0 A008A0E1 LSR R0,R0,#+17 \ 00000AE4 01002DE9 PUSH {R0} \ 00000AE8 0730A0E1 MOV R3,R7 \ 00000AEC F42F86E2 ADD R2,R6,#+976 \ 00000AF0 0400A0E1 MOV R0,R4 \ 00000AF4 ........ BL AddStringToLog \ 00000AF8 08D08DE2 ADD SP,SP,#+8 5170 else 5171 SENDMSGCOUNT++; 5172 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_38: \ 00000AFC 0B20A0E1 MOV R2,R11 \ 00000B00 4AFFFFEA B ??CheckComand_26 5173 mfree(send_txt); 5174 return; 5175 } 5176 5177 #ifdef kluchnik // не доступно для всех,потому что имхо,будет еще большая перегрузка серверов!!!а оно нам надо? 5178 if(t->isautobot) 5179 { 5180 TPKT *p; 5181 int i=LoadBotMessage(t->uin); 5182 if(i==0) return;//если нет никаких файлов то просто возвращаемся 5183 char *pp=bot_lines[t->bot_msg]; 5184 t->bot_msg++; 5185 if(t->bot_msg==i) 5186 t->bot_msg=0; 5187 p=malloc(sizeof(PKT)+strlen(pp)+1); 5188 p->pkt.uin=t->uin; 5189 p->pkt.type=T_SENDMSG; 5190 p->pkt.data_len=strlen(pp); 5191 strcpy(p->data,pp); 5192 AddStringToLog(t,0x01,pp,"Autobot",(++SENDMSGCOUNT)&0x7FFF,1); 5193 SUBPROC((void *)SendAnswer,0,p); 5194 return; 5195 } 5196 #endif 5197 5198 CheckComand2(txt,t); \ ??CheckComand_37: \ 00000B04 0410A0E1 MOV R1,R4 \ 00000B08 0B00A0E1 MOV R0,R11 \ 00000B0C ........ _BLF CheckComand2,??CheckComand2??rA 5199 } \ 00000B10 8ADF8DE2 ADD SP,SP,#+552 \ 00000B14 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CheckComand_0: \ 00000B18 ........ DC32 `?` \ 00000B1C ........ DC32 show_send_info \ 00000B20 ........ DC32 awayHelloMsg 5200 5201 //------------- Попап месаже для подключившегося контакта -----------// 5202 \ In segment DATA_Z, align 4, align-sorted 5203 char INC_Nick[32]; \ INC_Nick: \ 00000000 DS8 32 5204 char show_nick[32]; 5205 int INC_show; 5206 5207 char onContact[64]; 5208 int INC_show2; 5209 GBSTMR incs2; 5210 extern void DrawScreenShot(); 5211 \ In segment CODE, align 4, keep-with-next 5212 void show_on_contact() 5213 { \ show_on_contact: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 5214 if(INC_show2>0) \ 00000004 ........ LDR R4,??DataTable176 ;; icons \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 080494E5 LDR R0,[R4, #+1032] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 4E0000BA BLT ??show_on_contact_0 5215 { 5216 WSHDR *ws=AllocWS(64); \ 00000018 4000A0E3 MOV R0,#+64 \ 0000001C 250100EF SWI +293 \ 00000020 0050A0E1 MOV R5,R0 5217 ascii2ws(ws,onContact); \ 00000024 2400A0E3 MOV R0,#+36 \ 00000028 7C0D80E3 ORR R0,R0,#0x1F00 \ 0000002C 041080E0 ADD R1,R0,R4 \ 00000030 0500A0E1 MOV R0,R5 \ 00000034 ........ _BLF ascii2ws,??ascii2ws??rA 5218 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] 5219 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 00000040 14219FE5 LDR R2,??show_on_contact_1 ;; `?` \ 00000044 0C0090E5 LDR R0,[R0, #+12] \ 00000048 480092E8 LDM R2,{R3,R6} \ 0000004C 080090E5 LDR R0,[R0, #+8] \ 00000050 0D10A0E1 MOV R1,SP \ 00000054 040090E5 LDR R0,[R0, #+4] \ 00000058 480081E8 STM R1,{R3,R6} \ 0000005C 010040E2 SUB R0,R0,#+1 5220 if(!(memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8))) \ 00000060 0820A0E3 MOV R2,#+8 \ 00000064 1C0100EF SWI +284 \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 0300001A BNE ??show_on_contact_2 5221 { 5222 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 5223 INC_show2-=2; \ 00000074 080494E5 LDR R0,[R4, #+1032] \ 00000078 020040E2 SUB R0,R0,#+2 \ 0000007C 010000EA B ??show_on_contact_3 5224 } 5225 else 5226 INC_show2--; \ ??show_on_contact_2: \ 00000080 080494E5 LDR R0,[R4, #+1032] \ 00000084 010040E2 SUB R0,R0,#+1 5227 DrawRectangle(0,0,Get_WS_width(ws,PopupFont)+2,GetFontYSIZE(PopupFont)+2,0,PopupBGCl,PopupBGCl); \ ??show_on_contact_3: \ 00000088 ........ LDR R6,??DataTable172 ;; PopupFont \ 0000008C 080484E5 STR R0,[R4, #+1032] \ 00000090 000096E5 LDR R0,[R6, #+0] \ 00000094 C50100EF SWI +453 \ 00000098 001096E5 LDR R1,[R6, #+0] \ 0000009C 0070A0E1 MOV R7,R0 \ 000000A0 0500A0E1 MOV R0,R5 \ 000000A4 080200EF SWI +520 \ 000000A8 ........ LDR R1,??DataTable174 ;; PopupBGCl \ 000000AC 023087E2 ADD R3,R7,#+2 \ 000000B0 0120A0E1 MOV R2,R1 \ 000000B4 04002DE9 PUSH {R2} \ 000000B8 02002DE9 PUSH {R1} \ 000000BC 0010A0E3 MOV R1,#+0 \ 000000C0 02002DE9 PUSH {R1} \ 000000C4 022080E2 ADD R2,R0,#+2 \ 000000C8 0000A0E3 MOV R0,#+0 \ 000000CC B40100EF SWI +436 5228 DrawString(ws,1,1,1+Get_WS_width(ws,PopupFont)+2,1+GetFontYSIZE(PopupFont),PopupFont,0,PopupOnlineCl,GetPaletteAdrByColorIndex(23)); \ 000000D0 1700A0E3 MOV R0,#+23 \ 000000D4 2E0100EF SWI +302 \ 000000D8 0080A0E1 MOV R8,R0 \ 000000DC 000096E5 LDR R0,[R6, #+0] \ 000000E0 C50100EF SWI +453 \ 000000E4 001096E5 LDR R1,[R6, #+0] \ 000000E8 0070A0E1 MOV R7,R0 \ 000000EC 0500A0E1 MOV R0,R5 \ 000000F0 080200EF SWI +520 \ 000000F4 64109FE5 LDR R1,??show_on_contact_1+0x4 ;; PopupOnlineCl \ 000000F8 00012DE9 PUSH {R8} \ 000000FC 02002DE9 PUSH {R1} \ 00000100 033080E2 ADD R3,R0,#+3 \ 00000104 0120A0E3 MOV R2,#+1 \ 00000108 0500A0E1 MOV R0,R5 \ 0000010C 0010A0E3 MOV R1,#+0 \ 00000110 02002DE9 PUSH {R1} \ 00000114 001096E5 LDR R1,[R6, #+0] \ 00000118 02002DE9 PUSH {R1} \ 0000011C 011087E2 ADD R1,R7,#+1 \ 00000120 02002DE9 PUSH {R1} \ 00000124 0210A0E1 MOV R1,R2 \ 00000128 4C0100EF SWI +332 5229 FreeWS(ws); \ 0000012C 0500A0E1 MOV R0,R5 \ 00000130 290100EF SWI +297 5230 GBS_StartTimerProc(&incs2, 15, show_on_contact); \ 00000134 28209FE5 LDR R2,??show_on_contact_1+0x8 ;; show_on_contact \ 00000138 0F10A0E3 MOV R1,#+15 \ 0000013C 6400A0E3 MOV R0,#+100 \ 00000140 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000144 040080E0 ADD R0,R0,R4 \ 00000148 4D0000EF SWI +77 \ 0000014C 20D08DE2 ADD SP,SP,#+32 \ 00000150 F381BDE8 POP {R0,R1,R4-R8,PC} 5231 } 5232 else 5233 RefreshGUI(); \ ??show_on_contact_0: \ 00000154 960100EF SWI +406 5234 } \ 00000158 F381BDE8 POP {R0,R1,R4-R8,PC} ;; return \ ??show_on_contact_1: \ 0000015C ........ DC32 `?` \ 00000160 ........ DC32 PopupOnlineCl \ 00000164 ........ DC32 show_on_contact 5235 5236 5237 //---------------------------- popup message ---------------------------// 5238 5239 \ In segment CODE, align 4, keep-with-next 5240 void show_pp_sender() 5241 { \ show_pp_sender: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 5242 if(INC_show>0) \ 00000004 ........ LDR R4,??DataTable176 ;; icons \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 040494E5 LDR R0,[R4, #+1028] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 F38FBDB8 POPLT {R0,R1,R4-R11,PC} 5243 { 5244 WSHDR *ws=AllocWS(256); \ 00000018 400FA0E3 MOV R0,#+256 \ 0000001C 250100EF SWI +293 \ 00000020 0050A0E1 MOV R5,R0 5245 ascii2ws(ws,show_nick); \ 00000024 0400A0E3 MOV R0,#+4 \ 00000028 7C0D80E3 ORR R0,R0,#0x1F00 \ 0000002C 041080E0 ADD R1,R0,R4 \ 00000030 0500A0E1 MOV R0,R5 \ 00000034 ........ _BLF ascii2ws,??ascii2ws??rA 5246 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] 5247 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 5248 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 5249 { 5250 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 5251 INC_show-=2; \ 00000074 040494E5 LDR R0,[R4, #+1028] \ 00000078 020040E2 SUB R0,R0,#+2 \ 0000007C 010000EA B ??show_pp_sender_2 5252 } 5253 else 5254 INC_show--; \ ??show_pp_sender_1: \ 00000080 040494E5 LDR R0,[R4, #+1028] \ 00000084 010040E2 SUB R0,R0,#+1 5255 #ifdef NEWSGOLD 5256 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,??DataTable172 ;; PopupFont \ 0000008C ........ LDR R11,??DataTable173 ;; NumStatusToIconBar \ 00000090 040484E5 STR R0,[R4, #+1028] \ 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,??DataTable174 ;; 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 5257 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 5258 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 5259 #else 5260 DrawRectangle(0,0,Get_WS_width(ws,PopupFont)+2,GetFontYSIZE(PopupFont)+2,0,PopupBGCl,PopupBGCl); 5261 DrawString(ws,1,1,1+Get_WS_width(ws,PopupFont)+2,1+GetFontYSIZE(PopupFont),PopupFont,0,PopupMsgCl,GetPaletteAdrByColorIndex(23)); 5262 #endif 5263 FreeWS(ws); \ 0000017C 0500A0E1 MOV R0,R5 \ 00000180 290100EF SWI +297 5264 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 7C00A0E3 MOV R0,#+124 \ 00000190 740D80E3 ORR R0,R0,#0x1D00 \ 00000194 040080E0 ADD R0,R0,R4 \ 00000198 4D0000EF SWI +77 \ 0000019C 20D08DE2 ADD SP,SP,#+32 5265 } 5266 } \ 000001A0 F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??show_pp_sender_0: \ 000001A4 ........ DC32 `?_1` \ 000001A8 ........ DC32 PopupMsgCl \ 000001AC ........ DC32 show_pp_sender 5267 5268 5269 //----------------------------------------------------------------------------------------// 5270 5271 \ In segment CODE, align 4, keep-with-next 5272 void Get_Online_total() 5273 { 5274 CLIST *t; 5275 kopa_online=0; \ Get_Online_total: \ 00000000 ........ LDR R0,??DataTable176 ;; icons \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 BC1380E5 STR R1,[R0, #+956] 5276 kopa_kontaktu=0; \ 0000000C C01380E5 STR R1,[R0, #+960] 5277 t=(CLIST *)(&cltop); \ 00000010 E91F80E2 ADD R1,R0,#+932 \ 00000014 FF30A0E3 MOV R3,#+255 \ 00000018 FF3C83E3 ORR R3,R3,#0xFF00 \ 0000001C 0A0000EA B ??Get_Online_total_0 5278 while(t=(CLIST *)(t->next)) 5279 { 5280 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 5281 { 5282 kopa_online++; \ 0000002C BC2390E5 LDR R2,[R0, #+956] \ 00000030 012082E2 ADD R2,R2,#+1 \ 00000034 BC2380E5 STR R2,[R0, #+956] 5283 if (t->state!=65535) kopa_kontaktu++; \ 00000038 B425D1E1 LDRH R2,[R1, #+84] \ 0000003C 030052E1 CMP R2,R3 \ 00000040 C0239015 LDRNE R2,[R0, #+960] \ 00000044 01208212 ADDNE R2,R2,#+1 \ 00000048 C0238015 STRNE R2,[R0, #+960] 5284 } 5285 } \ ??Get_Online_total_0: \ 0000004C 001091E5 LDR R1,[R1, #+0] \ 00000050 000051E3 CMP R1,#+0 \ 00000054 F1FFFF1A BNE ??Get_Online_total_1 5286 } \ 00000058 1EFF2FE1 BX LR ;; return 5287 5288 5289 //-------------------------------------------------------------------------------------------// 5290 5291 \ In segment CODE, align 4, keep-with-next 5292 void SetIndividStatus()//set to all contact to default vibra, sound and other by kluchnik 04.04.08 5293 { 5294 CLIST *t; 5295 t=(CLIST *)(&cltop); \ SetIndividStatus: \ 00000000 ........ LDR R0,??DataTable176 ;; icons \ 00000004 E91F80E2 ADD R1,R0,#+932 \ 00000008 0B0000EA B ??SetIndividStatus_0 5296 while(t=(CLIST *)(t->next)) 5297 { 5298 if (!t->isgroup) \ ??SetIndividStatus_1: \ 0000000C 082091E5 LDR R2,[R1, #+8] \ 00000010 000052E3 CMP R2,#+0 \ 00000014 0800001A BNE ??SetIndividStatus_0 5299 { 5300 t->isvibra=1; \ 00000018 0120A0E3 MOV R2,#+1 \ 0000001C 5C2081E5 STR R2,[R1, #+92] 5301 t->issound=1; \ 00000020 602081E5 STR R2,[R1, #+96] 5302 t->isShowXst=Show_XTX; \ 00000024 383390E5 LDR R3,[R0, #+824] \ 00000028 703081E5 STR R3,[R1, #+112] 5303 #ifdef kluchnik 5304 t->isLoadHistory=1; 5305 #endif 5306 t->signals=1; \ 0000002C 742081E5 STR R2,[R1, #+116] 5307 t->isaccess=1; \ 00000030 782081E5 STR R2,[R1, #+120] 5308 5309 t->automsgcount=0; \ 00000034 0020A0E3 MOV R2,#+0 \ 00000038 7C2081E5 STR R2,[R1, #+124] 5310 } 5311 } \ ??SetIndividStatus_0: \ 0000003C 001091E5 LDR R1,[R1, #+0] \ 00000040 000051E3 CMP R1,#+0 \ 00000044 F0FFFF1A BNE ??SetIndividStatus_1 5312 } \ 00000048 1EFF2FE1 BX LR ;; return 5313 5314 //-------------------------------------------------------------------------------------------// 5315 5316 \ In segment CODE, align 4, keep-with-next 5317 ProcessPacket(TPKT *p) 5318 { \ ProcessPacket: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 4EDF4DE2 SUB SP,SP,#+312 5319 CLIST *t; 5320 LOGQ *q; 5321 char s[256]; 5322 switch(p->pkt.type) \ 00000008 20AB9FE5 LDR R10,??ProcessPacket_1+0x4 ;; ILL_RECV_FADE \ 0000000C ........ LDR R5,??DataTable192 ;; Canvas \ 00000010 ........ LDR R7,??DataTable193 ;; 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 B902008A 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 31010E00B502 DC16 +305,+14,+693,+693 \ B502 \ 0000004C 1100B5024D00 DC16 +17,+693,+77,+693 \ B502 \ 00000054 B502B502B502 DC16 +693,+693,+693,+693 \ B502 \ 0000005C B5021D021D02 DC16 +693,+541,+541,+693 \ B502 \ 00000064 B5023D004B00 DC16 +693,+61,+75,+693 \ B502 \ 0000006C B502B5024D02 DC16 +693,+693,+589,+693 \ B502 \ 00000074 B502B502B502 DC16 +693,+693,+693,+693 \ B502 \ 0000007C B3020000 DC16 +691,+0 5323 { 5324 case T_LOGIN: 5325 set_my_status(); \ ??ProcessPacket_3: \ 00000080 ........ BL set_my_status 5326 set_my_xstatus(); \ 00000084 ........ BL set_my_xstatus \ 00000088 A30200EA B ??ProcessPacket_2 5327 break; 5328 case T_CLENTRY: 5329 if (p->pkt.uin) \ ??ProcessPacket_4: \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 1800000A BEQ ??ProcessPacket_5 5330 { 5331 if ((t=FindContactByUin(p->pkt.uin))) \ 00000094 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000098 0080B0E1 MOVS R8,R0 \ 0000009C 0E00000A BEQ ??ProcessPacket_6 5332 { 5333 // t->state=0xFFFF; 5334 if (!t->local) strncpy(t->name,p->data,63); \ 000000A0 B40098E5 LDR R0,[R8, #+180] \ 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 5335 t->group=GROUP_CACHE; \ ??ProcessPacket_7: \ 000000BC A80397E5 LDR R0,[R7, #+936] \ 000000C0 100088E5 STR R0,[R8, #+16] 5336 ChangeContactPos(t); \ ??ProcessPacket_8: \ 000000C4 0800A0E1 MOV R0,R8 \ 000000C8 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 5337 RecountMenu(t,1); \ 000000CC 0110A0E3 MOV R1,#+1 \ 000000D0 0800A0E1 MOV R0,R8 \ ??ProcessPacket_9: \ 000000D4 ........ BL RecountMenu \ 000000D8 8F0200EA B ??ProcessPacket_2 5338 } 5339 else 5340 { 5341 RecountMenu(AddContact(p->pkt.uin,p->data, GROUP_CACHE, 0),1); \ ??ProcessPacket_6: \ 000000DC A82397E5 LDR R2,[R7, #+936] \ 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 5342 } 5343 } 5344 else 5345 { 5346 if(VIBR_ON_CONNECT) \ ??ProcessPacket_5: \ 000000F8 ........ LDR R0,??DataTable179 ;; VIBR_ON_CONNECT \ 000000FC 000090E5 LDR R0,[R0, #+0] \ 00000100 000050E3 CMP R0,#+0 \ 00000104 0100000A BEQ ??ProcessPacket_10 5347 { 5348 vibra_count=1; \ 00000108 6C6387E5 STR R6,[R7, #+876] 5349 start_vibra(); \ 0000010C ........ BL start_vibra 5350 } 5351 GROUP_CACHE=0; \ ??ProcessPacket_10: \ 00000110 A89387E5 STR R9,[R7, #+936] 5352 ask_my_info(); 5353 if (maingui_id/*contactlist_menu_id*/) \ 00000114 040397E5 LDR R0,[R7, #+772] \ 00000118 000050E3 CMP R0,#+0 \ 0000011C 0200000A BEQ ??ProcessPacket_11 5354 { 5355 RecountMenu(NULL,1); \ 00000120 0110A0E3 MOV R1,#+1 \ 00000124 0900A0E1 MOV R0,R9 \ ??ProcessPacket_12: \ 00000128 E9FFFFEA B ??ProcessPacket_9 5356 } 5357 else 5358 { 5359 #ifdef USE_MLMENU 5360 unhooked2=1; 5361 create_contactlist_menu(); 5362 #endif 5363 // CreateCL(); 5364 // if(ShowLoadScreen) 5365 SetIndividStatus(); \ ??ProcessPacket_11: \ 0000012C ........ BL SetIndividStatus 5366 ShowLoadScreen=0; \ 00000130 E09387E5 STR R9,[R7, #+992] 5367 SMART_REDRAW(); \ 00000134 ........ BL SMART_REDRAW \ 00000138 770200EA B ??ProcessPacket_2 5368 } 5369 } 5370 break; 5371 case T_GROUPID: 5372 if (t=FindGroupByID(GROUP_CACHE=p->pkt.uin)) \ ??ProcessPacket_13: \ 0000013C A80387E5 STR R0,[R7, #+936] \ 00000140 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000144 0080B0E1 MOVS R8,R0 \ 00000148 0400000A BEQ ??ProcessPacket_14 5373 { 5374 strncpy(t->name,p->data,63); \ 0000014C 3F20A0E3 MOV R2,#+63 \ 00000150 081084E2 ADD R1,R4,#+8 \ 00000154 140088E2 ADD R0,R8,#+20 \ 00000158 160100EF SWI +278 5375 ChangeContactPos(t); \ 0000015C D8FFFFEA B ??ProcessPacket_8 5376 RecountMenu(t,1); 5377 } 5378 else 5379 { 5380 RecountMenu(AddGroup(p->pkt.uin,p->data),1); \ ??ProcessPacket_14: \ 00000160 000094E5 LDR R0,[R4, #+0] \ 00000164 081084E2 ADD R1,R4,#+8 \ 00000168 ........ _BLF AddGroup,??AddGroup??rA \ 0000016C 0110A0E3 MOV R1,#+1 \ 00000170 D7FFFFEA B ??ProcessPacket_9 5381 } 5382 break; 5383 case T_GROUPFOLLOW: 5384 GROUP_CACHE=p->pkt.uin; \ ??ProcessPacket_15: \ 00000174 A80387E5 STR R0,[R7, #+936] \ 00000178 670200EA B ??ProcessPacket_2 5385 break; 5386 case T_STATUSCHANGE: 5387 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_16: \ 0000017C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000180 0080B0E1 MOVS R8,R0 5388 if (t) \ 00000184 6402000A BEQ ??ProcessPacket_2 5389 { 5390 int i=t->state; \ 00000188 B415D8E1 LDRH R1,[R8, #+84] 5391 CLIST *oldt=NULL; \ 0000018C 00B0A0E3 MOV R11,#+0 \ 00000190 04108DE5 STR R1,[SP, #+4] \ 00000194 0A00D4E5 LDRB R0,[R4, #+10] \ 00000198 B615D8E1 LDRH R1,[R8, #+86] \ 0000019C 000051E1 CMP R1,R0 \ 000001A0 1D00000A BEQ ??ProcessPacket_17 5392 if (t->xstate!=p->data[2]) // Если картинка икс статуса сменилась 5393 { 5394 t->xstate=p->data[2]; \ 000001A4 B605C8E1 STRH R0,[R8, #+86] 5395 FreeXText(t); \ 000001A8 0800A0E1 MOV R0,R8 \ 000001AC ........ _BLF FreeXText,??FreeXText??rA 5396 if (t->xstate && ENA_AUTO_XTXT) // Если установлен икс статус и можно запрашивать по смене икс статуса :) \ 000001B0 B605D8E1 LDRH R0,[R8, #+86] \ 000001B4 000050E3 CMP R0,#+0 \ 000001B8 1600000A BEQ ??ProcessPacket_18 \ 000001BC 70099FE5 LDR R0,??ProcessPacket_1+0x8 ;; ENA_AUTO_XTXT \ 000001C0 000090E5 LDR R0,[R0, #+0] \ 000001C4 000050E3 CMP R0,#+0 \ 000001C8 1200000A BEQ ??ProcessPacket_18 5397 { 5398 t->req_xtext=1; \ 000001CC B06088E5 STR R6,[R8, #+176] 5399 if (edchat_id) // Если открыт чат \ 000001D0 B00397E5 LDR R0,[R7, #+944] \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 0F00000A BEQ ??ProcessPacket_17 5400 { 5401 void *data=FindGUIbyId(edchat_id,NULL); \ 000001DC B00397E5 LDR R0,[R7, #+944] \ 000001E0 0010A0E3 MOV R1,#+0 \ 000001E4 090200EF SWI +521 5402 if (data) \ 000001E8 000050E3 CMP R0,#+0 \ 000001EC 0A00000A BEQ ??ProcessPacket_17 5403 { 5404 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 000001F0 DF0100EF SWI +479 5405 if (ed_struct) \ 000001F4 000050E3 CMP R0,#+0 \ 000001F8 0700000A BEQ ??ProcessPacket_17 5406 { 5407 if (ed_struct->ed_contact==t) // Если наш чат то запрашиваем текст статуса \ 000001FC 000090E5 LDR R0,[R0, #+0] \ 00000200 080050E1 CMP R0,R8 \ 00000204 0400001A BNE ??ProcessPacket_17 5408 { 5409 t->req_xtext=0; \ 00000208 B09088E5 STR R9,[R8, #+176] 5410 RequestXText(t->uin); \ 0000020C 0C0098E5 LDR R0,[R8, #+12] \ 00000210 ........ BL RequestXText \ 00000214 000000EA B ??ProcessPacket_17 5411 } 5412 } 5413 } 5414 } 5415 } 5416 else // Если икс статус не установлен то на всякий случай снимаем флаг получения текста 5417 { 5418 t->req_xtext=0; \ ??ProcessPacket_18: \ 00000218 B09088E5 STR R9,[R8, #+176] 5419 } 5420 } 5421 if (contactlist_menu_id) \ ??ProcessPacket_17: \ 0000021C AC0397E5 LDR R0,[R7, #+940] \ 00000220 000050E3 CMP R0,#+0 \ 00000224 0500000A BEQ ??ProcessPacket_19 5422 { 5423 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 00000228 AC0397E5 LDR R0,[R7, #+940] \ 0000022C 0010A0E3 MOV R1,#+0 \ 00000230 090200EF SWI +521 \ 00000234 8F0100EF SWI +399 \ 00000238 ........ _BLF FindContactByN,??FindContactByN??rA \ 0000023C 00B0A0E1 MOV R11,R0 5424 } 5425 if(t->state==65535) t->change=1; \ ??ProcessPacket_19: \ 00000240 B405D8E1 LDRH R0,[R8, #+84] \ 00000244 FFA0A0E3 MOV R10,#+255 \ 00000248 FFAC8AE3 ORR R10,R10,#0xFF00 \ 0000024C 0A0050E1 CMP R0,R10 \ 00000250 80608805 STREQ R6,[R8, #+128] 5426 t->state=*((unsigned short *)(p->data)); \ 00000254 B800D4E1 LDRH R0,[R4, #+8] \ 00000258 B405C8E1 STRH R0,[R8, #+84] 5427 if((t->state!=65535)&&(t->change==1)) \ 0000025C 0A0050E1 CMP R0,R10 \ 00000260 0400000A BEQ ??ProcessPacket_20 \ 00000264 800098E5 LDR R0,[R8, #+128] \ 00000268 010050E3 CMP R0,#+1 5428 { 5429 t->just_now=2; \ 0000026C 0200A003 MOVEQ R0,#+2 \ 00000270 68008805 STREQ R0,[R8, #+104] 5430 t->change=0; \ 00000274 80908805 STREQ R9,[R8, #+128] 5431 } 5432 LogStatusChange(t); \ ??ProcessPacket_20: \ 00000278 0800A0E1 MOV R0,R8 \ 0000027C ........ _BLF LogStatusChange,??LogStatusChange??rA 5433 ChangeContactPos(t); \ 00000280 0800A0E1 MOV R0,R8 \ 00000284 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 5434 RecountMenu(oldt,1); \ 00000288 0110A0E3 MOV R1,#+1 \ 0000028C 0B00A0E1 MOV R0,R11 \ 00000290 ........ BL RecountMenu 5435 5436 if(isLogStatusChange)//isLogStatusChange // by kluchnik 05.04.08 \ 00000294 ........ LDR R0,??DataTable180 ;; isLogStatusChange \ 00000298 000090E5 LDR R0,[R0, #+0] \ 0000029C 000050E3 CMP R0,#+0 \ 000002A0 2B00000A BEQ ??ProcessPacket_21 5437 { 5438 char *s=GetStatusByIconIndex(GetIconIndex(t)); \ 000002A4 0800A0E1 MOV R0,R8 \ 000002A8 ........ BL GetIconIndex \ 000002AC ........ BL GetStatusByIconIndex \ 000002B0 00008DE5 STR R0,[SP, #+0] 5439 FreeXText2(t); \ 000002B4 0800A0E1 MOV R0,R8 \ 000002B8 ........ BL FreeXText2 5440 TTime time; 5441 GetDateTime(NULL,&time); \ 000002BC 08108DE2 ADD R1,SP,#+8 \ 000002C0 0000A0E3 MOV R0,#+0 \ 000002C4 B40000EF SWI +180 5442 char *txt=malloc(64); \ 000002C8 4000A0E3 MOV R0,#+64 \ 000002CC 140000EF SWI +20 \ 000002D0 00B0A0E1 MOV R11,R0 5443 sprintf(txt," %s: %02d:%02d:%02d",s,time.hour,time.min,time.sec); \ 000002D4 0A00DDE5 LDRB R0,[SP, #+10] \ 000002D8 811F85E2 ADD R1,R5,#+516 \ 000002DC 01002DE9 PUSH {R0} \ 000002E0 0D00DDE5 LDRB R0,[SP, #+13] \ 000002E4 01002DE9 PUSH {R0} \ 000002E8 1030DDE5 LDRB R3,[SP, #+16] \ 000002EC 08209DE5 LDR R2,[SP, #+8] \ 000002F0 0B00A0E1 MOV R0,R11 \ 000002F4 160000EF SWI +22 5444 t->xtext2=malloc(64); \ 000002F8 4000A0E3 MOV R0,#+64 \ 000002FC 140000EF SWI +20 \ 00000300 AC0088E5 STR R0,[R8, #+172] 5445 snprintf(t->xtext2,64,txt); \ 00000304 0B20A0E1 MOV R2,R11 \ 00000308 4010A0E3 MOV R1,#+64 \ 0000030C 1B0100EF SWI +283 5446 AddStringToLog(t,0x03,txt,"Status change",0xFFFFFFFF, 0); \ 00000310 0900A0E1 MOV R0,R9 \ 00000314 01002DE9 PUSH {R0} \ 00000318 863F85E2 ADD R3,R5,#+536 \ 0000031C 0B20A0E1 MOV R2,R11 \ 00000320 0310A0E3 MOV R1,#+3 \ 00000324 0000E0E1 MVN R0,R0 \ 00000328 01002DE9 PUSH {R0} \ 0000032C 0800A0E1 MOV R0,R8 \ 00000330 ........ BL AddStringToLog 5447 ReqAddMsgToChat(t); \ 00000334 0800A0E1 MOV R0,R8 \ 00000338 ........ BL ReqAddMsgToChat 5448 RecountMenu(NULL, 0); \ 0000033C 0910A0E1 MOV R1,R9 \ 00000340 0100A0E1 MOV R0,R1 \ 00000344 ........ BL RecountMenu 5449 mfree(txt); \ 00000348 0B00A0E1 MOV R0,R11 \ 0000034C 150000EF SWI +21 \ 00000350 10D08DE2 ADD SP,SP,#+16 5450 } 5451 5452 if ((t->state!=0xFFFF)&&(i==0xFFFF))//Звук \ ??ProcessPacket_21: \ 00000354 B405D8E1 LDRH R0,[R8, #+84] \ 00000358 E810A0E3 MOV R1,#+232 \ 0000035C 681D81E3 ORR R1,R1,#0x1A00 \ 00000360 07B081E0 ADD R11,R1,R7 \ 00000364 0A0050E1 CMP R0,R10 \ 00000368 4100000A BEQ ??ProcessPacket_22 \ 0000036C 04109DE5 LDR R1,[SP, #+4] \ 00000370 0A0051E1 CMP R1,R10 \ 00000374 3E00001A BNE ??ProcessPacket_22 5453 { 5454 if(Is_INC_On && (PopupShow==2 || PopupShow==3)) \ 00000378 F00297E5 LDR R0,[R7, #+752] \ 0000037C 000050E3 CMP R0,#+0 \ 00000380 1700000A BEQ ??ProcessPacket_23 \ 00000384 AC079FE5 LDR R0,??ProcessPacket_1+0xC ;; PopupShow \ 00000388 000090E5 LDR R0,[R0, #+0] \ 0000038C 020050E3 CMP R0,#+2 \ 00000390 03005013 CMPNE R0,#+3 \ 00000394 1200001A BNE ??ProcessPacket_23 5455 { 5456 INC_show2=20; 5457 sprintf(onContact,PopupOnlineString,t->name); \ 00000398 9C179FE5 LDR R1,??ProcessPacket_1+0x10 ;; PopupOnlineString \ 0000039C 1400A0E3 MOV R0,#+20 \ 000003A0 080487E5 STR R0,[R7, #+1032] \ 000003A4 142088E2 ADD R2,R8,#+20 \ 000003A8 2400A0E3 MOV R0,#+36 \ 000003AC 7C0D80E3 ORR R0,R0,#0x1F00 \ 000003B0 070080E0 ADD R0,R0,R7 \ 000003B4 160000EF SWI +22 5458 sprintf(on_off_buf,"[%s: %s]\n",t->xtext2+1,t->name); \ 000003B8 AC0098E5 LDR R0,[R8, #+172] \ 000003BC 143088E2 ADD R3,R8,#+20 \ 000003C0 012080E2 ADD R2,R0,#+1 \ 000003C4 8A1F85E2 ADD R1,R5,#+552 \ 000003C8 0B00A0E1 MOV R0,R11 \ 000003CC 160000EF SWI +22 5459 on_off_timer=ON_OFF_TIME; \ 000003D0 68079FE5 LDR R0,??ProcessPacket_1+0x14 ;; ON_OFF_TIME \ 000003D4 000090E5 LDR R0,[R0, #+0] \ 000003D8 B80387E5 STR R0,[R7, #+952] 5460 UpdateCLheader(); 5461 show_on_contact(); \ 000003DC ........ BL show_on_contact \ 000003E0 030000EA B ??ProcessPacket_24 5462 } 5463 else 5464 GBS_DelTimer(&incs2);//на всяк \ ??ProcessPacket_23: \ 000003E4 6400A0E3 MOV R0,#+100 \ 000003E8 7C0D80E3 ORR R0,R0,#0x1F00 \ 000003EC 070080E0 ADD R0,R0,R7 \ 000003F0 8C0100EF SWI +396 5465 if(!extended_sounds) \ ??ProcessPacket_24: \ 000003F4 ........ LDR R0,??DataTable181 ;; extended_sounds \ 000003F8 44A79FE5 LDR R10,??ProcessPacket_1+0x18 ;; sndGlobal \ 000003FC 000090E5 LDR R0,[R0, #+0] \ 00000400 000050E3 CMP R0,#+0 \ 00000404 0200001A BNE ??ProcessPacket_25 5466 { 5467 Play(sndGlobal); \ 00000408 0A00A0E1 MOV R0,R10 \ 0000040C ........ BL Play \ 00000410 2E0000EA B ??ProcessPacket_26 5468 } 5469 else 5470 { 5471 FSTATS stat; 5472 int fsize; 5473 unsigned int ul = 0; 5474 uins=t->uin; 5475 sprintf(talk_sound, "%s%d.wav", sndGlobal2, uins); \ ??ProcessPacket_25: \ 00000414 2C279FE5 LDR R2,??ProcessPacket_1+0x1C ;; sndGlobal2 \ 00000418 00908DE5 STR R9,[SP, #+0] \ 0000041C 0C0098E5 LDR R0,[R8, #+12] \ 00000420 579EA0E3 MOV R9,#+1392 \ 00000424 DC0287E5 STR R0,[R7, #+732] \ 00000428 0030A0E1 MOV R3,R0 \ 0000042C 751F85E2 ADD R1,R5,#+468 \ 00000430 070089E0 ADD R0,R9,R7 \ 00000434 160000EF SWI +22 5476 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 5477 fsize=stat.size; 5478 if(fsize>0) \ 00000448 14019DE5 LDR R0,[SP, #+276] \ 0000044C 010050E3 CMP R0,#+1 5479 Play(talk_sound); \ 00000450 070089A0 ADDGE R0,R9,R7 5480 else 5481 Play(sndGlobal); \ 00000454 0A00A0B1 MOVLT R0,R10 \ 00000458 ........ BL Play 5482 t->isvibra=1; \ 0000045C 5C6088E5 STR R6,[R8, #+92] 5483 t->issound=1; \ 00000460 606088E5 STR R6,[R8, #+96] 5484 t->isShowXst=Show_XTX; \ 00000464 380397E5 LDR R0,[R7, #+824] \ 00000468 700088E5 STR R0,[R8, #+112] 5485 #ifdef kluchnik 5486 t->isLoadHistory=1; 5487 #endif 5488 t->signals=1; \ 0000046C 746088E5 STR R6,[R8, #+116] \ 00000470 160000EA B ??ProcessPacket_26 5489 } 5490 } 5491 5492 if ((i!=0xFFFF)&&(t->state==0xFFFF))//Звук \ ??ProcessPacket_22: \ 00000474 04109DE5 LDR R1,[SP, #+4] \ 00000478 0A0051E1 CMP R1,R10 \ 0000047C 1300000A BEQ ??ProcessPacket_26 \ 00000480 0A0050E1 CMP R0,R10 \ 00000484 1100001A BNE ??ProcessPacket_26 5493 { 5494 Play(sndSrvMsg); \ 00000488 BC069FE5 LDR R0,??ProcessPacket_1+0x20 ;; sndSrvMsg \ 0000048C ........ BL Play 5495 if(TIME_OR_MSG==2 || TIME_OR_MSG==3 | TIME_OR_MSG==4) \ 00000490 B8069FE5 LDR R0,??ProcessPacket_1+0x24 ;; 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 5496 Get_Online_total(); \ 000004A8 ........ BL Get_Online_total 5497 sprintf(on_off_buf,"[%s: %s]\n",t->xtext2+1,t->name); \ ??ProcessPacket_27: \ 000004AC AC0098E5 LDR R0,[R8, #+172] \ 000004B0 143088E2 ADD R3,R8,#+20 \ 000004B4 012080E2 ADD R2,R0,#+1 \ 000004B8 8A1F85E2 ADD R1,R5,#+552 \ 000004BC 0B00A0E1 MOV R0,R11 \ 000004C0 160000EF SWI +22 5498 on_off_timer=ON_OFF_TIME; \ 000004C4 74069FE5 LDR R0,??ProcessPacket_1+0x14 ;; ON_OFF_TIME \ 000004C8 000090E5 LDR R0,[R0, #+0] \ 000004CC B80387E5 STR R0,[R7, #+952] 5499 UpdateCLheader(); 5500 } 5501 5502 if (edchat_id) \ ??ProcessPacket_26: \ 000004D0 B00397E5 LDR R0,[R7, #+944] \ 000004D4 000050E3 CMP R0,#+0 \ 000004D8 8F01000A BEQ ??ProcessPacket_2 5503 { 5504 void *data=FindGUIbyId(edchat_id,NULL); \ 000004DC B00397E5 LDR R0,[R7, #+944] \ 000004E0 0010A0E3 MOV R1,#+0 \ 000004E4 090200EF SWI +521 5505 { 5506 EDCHAT_STRUCT *ed_struct; 5507 ed_struct=EDIT_GetUserPointer(data); \ 000004E8 DF0100EF SWI +479 5508 if (ed_struct) \ 000004EC 000050E3 CMP R0,#+0 \ 000004F0 8901000A BEQ ??ProcessPacket_2 5509 { 5510 if (ed_struct->ed_contact==t) \ 000004F4 000090E5 LDR R0,[R0, #+0] \ 000004F8 080050E1 CMP R0,R8 \ 000004FC 8601001A BNE ??ProcessPacket_2 5511 { 5512 DirectRedrawGUI_ID(edchat_id); \ 00000500 B00397E5 LDR R0,[R7, #+944] \ 00000504 400100EF SWI +320 \ 00000508 830100EA B ??ProcessPacket_2 5513 } 5514 } 5515 } 5516 } 5517 } 5518 break; 5519 case T_RECVMSG: 5520 NEW_MSG=1; \ ??ProcessPacket_28: \ 0000050C F86387E5 STR R6,[R7, #+1016] 5521 t=FindContactByUin(p->pkt.uin); \ 00000510 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000514 0080B0E1 MOVS R8,R0 5522 if (!t) \ 00000518 0900001A BNE ??ProcessPacket_29 5523 { 5524 sprintf(s,percent_d,p->pkt.uin); \ 0000051C 002094E5 LDR R2,[R4, #+0] \ 00000520 0B1085E2 ADD R1,R5,#+11 \ 00000524 10008DE2 ADD R0,SP,#+16 \ 00000528 160000EF SWI +22 5525 t=AddContact(p->pkt.uin,s,GROUP_CACHE,0); \ 0000052C A82397E5 LDR R2,[R7, #+936] \ 00000530 000094E5 LDR R0,[R4, #+0] \ 00000534 0030A0E3 MOV R3,#+0 \ 00000538 10108DE2 ADD R1,SP,#+16 \ 0000053C ........ _BLF AddContact,??AddContact??rA \ 00000540 0080A0E1 MOV R8,R0 5526 } 5527 #ifdef kluchnik 5528 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: \ 00000570 7C10A0E3 MOV R1,#+124 \ 00000574 741D81E3 ORR R1,R1,#0x1D00 \ 00000578 071081E0 ADD R1,R1,R7 \ 0000057C 00108DE5 STR R1,[SP, #+0] \ 00000580 1400D8E5 LDRB R0,[R8, #+20] \ 00000584 230050E3 CMP R0,#+35 \ 00000588 1700001A BNE ??ProcessPacket_31 5535 { 5536 //Если это конференция, патчим имя 5537 char *s=strchr(p->data,'>'); \ 0000058C 3E10A0E3 MOV R1,#+62 \ 00000590 080084E2 ADD R0,R4,#+8 \ 00000594 180000EF SWI +24 5538 //Если нашли символ > и после него пробел и ник короче 16 символов 5539 if (s) \ 00000598 000050E3 CMP R0,#+0 \ 0000059C 1200000A BEQ ??ProcessPacket_31 5540 { 5541 if ((s[1]==' ')&&((s-p->data)<16)) \ 000005A0 0110D0E5 LDRB R1,[R0, #+1] \ 000005A4 200051E3 CMP R1,#+32 \ 000005A8 0F00001A BNE ??ProcessPacket_31 \ 000005AC 081084E2 ADD R1,R4,#+8 \ 000005B0 011040E0 SUB R1,R0,R1 \ 000005B4 100051E3 CMP R1,#+16 \ 000005B8 0B0000AA BGE ??ProcessPacket_31 5542 { 5543 *s=0; //Режем строку \ 000005BC 0090C0E5 STRB R9,[R0, #+0] 5544 AddStringToLog(t,0x02,s+2,p->data,0xFFFFFFFF,1); //Добавляем имя из текста сообщения \ 000005C0 0110A0E3 MOV R1,#+1 \ 000005C4 02002DE9 PUSH {R1} \ 000005C8 083084E2 ADD R3,R4,#+8 \ 000005CC 022080E2 ADD R2,R0,#+2 \ 000005D0 0800A0E1 MOV R0,R8 \ 000005D4 001061E2 RSB R1,R1,#+0 \ 000005D8 02002DE9 PUSH {R1} \ 000005DC 0210A0E3 MOV R1,#+2 \ 000005E0 ........ BL AddStringToLog 5545 goto L1; \ 000005E4 08D08DE2 ADD SP,SP,#+8 \ 000005E8 7E0000EA B ??ProcessPacket_32 5546 } 5547 } 5548 } 5549 5550 //=================== tas bus jautri ===================// 5551 5552 comanda=1; \ ??ProcessPacket_31: \ 000005EC 006487E5 STR R6,[R7, #+1024] 5553 CheckComand(p->data, t); \ 000005F0 0810A0E1 MOV R1,R8 \ 000005F4 58559FE5 LDR R5,??ProcessPacket_1+0x28 ;; ILL_KEYS_RECV \ 000005F8 58B59FE5 LDR R11,??ProcessPacket_1+0x2C ;; ILL_RECV_TMR \ 000005FC 080084E2 ADD R0,R4,#+8 \ 00000600 ........ BL CheckComand \ 00000604 743098E5 LDR R3,[R8, #+116] \ 00000608 ........ LDR R0,??DataTable183 ;; automsgcount \ 0000060C ........ LDR R1,??DataTable184 ;; VIBR_TYPE \ 00000610 000053E3 CMP R3,#+0 \ 00000614 78309815 LDRNE R3,[R8, #+120] \ 00000618 5A2FA0E3 MOV R2,#+360 \ 0000061C 00005313 CMPNE R3,#+0 \ 00000620 1100000A BEQ ??ProcessPacket_33 5554 if(t->signals && t->isaccess) 5555 { 5556 #ifdef NEWSGOLD 5557 scrsTime=0; 5558 #endif 5559 if(SHOW_ACTIVE) \ 00000624 ........ LDR R3,??DataTable187 ;; SHOW_ACTIVE \ 00000628 249387E5 STR R9,[R7, #+804] \ 0000062C 003093E5 LDR R3,[R3, #+0] \ 00000630 000053E3 CMP R3,#+0 5560 t->isactive=ACTIVE_TIME; \ 00000634 A0208815 STRNE R2,[R8, #+160] 5561 if(t->isvibra) \ 00000638 5C2098E5 LDR R2,[R8, #+92] \ 0000063C 000052E3 CMP R2,#+0 \ 00000640 2800000A BEQ ??ProcessPacket_34 5562 { 5563 if(VIBR_TYPE) \ 00000644 001091E5 LDR R1,[R1, #+0] \ 00000648 000051E3 CMP R1,#+0 5564 vibra_count=2; \ 0000064C 0210A013 MOVNE R1,#+2 \ 00000650 6C138715 STRNE R1,[R7, #+876] 5565 else 5566 vibra_count=1; \ 00000654 6C638705 STREQ R6,[R7, #+876] 5567 if(t->automsgcountisIndividSet) \ ??ProcessPacket_33: \ 0000066C 583098E5 LDR R3,[R8, #+88] \ 00000670 249387E5 STR R9,[R7, #+804] \ 00000674 000053E3 CMP R3,#+0 \ 00000678 0C00000A BEQ ??ProcessPacket_36 5584 { 5585 #ifdef NEWSGOLD 5586 scrsTime=0; 5587 #endif 5588 if(SHOW_ACTIVE) \ 0000067C ........ LDR R0,??DataTable187 ;; SHOW_ACTIVE \ 00000680 000090E5 LDR R0,[R0, #+0] \ 00000684 000050E3 CMP R0,#+0 5589 t->isactive=ACTIVE_TIME; \ 00000688 A0208815 STRNE R2,[R8, #+160] 5590 if(t->isvibra) \ 0000068C 5C0098E5 LDR R0,[R8, #+92] \ 00000690 000050E3 CMP R0,#+0 \ 00000694 1300000A BEQ ??ProcessPacket_34 5591 { 5592 if(VIBR_TYPE) \ 00000698 000091E5 LDR R0,[R1, #+0] \ 0000069C 000050E3 CMP R0,#+0 5593 vibra_count=2; \ 000006A0 0200A013 MOVNE R0,#+2 \ 000006A4 6C038715 STRNE R0,[R7, #+876] 5594 else 5595 vibra_count=1; \ 000006A8 6C638705 STREQ R6,[R7, #+876] 5596 if(t->automsgcount < automsgcount && away_m) 5597 start_vibra(); \ 000006AC 0C0000EA B ??ProcessPacket_35 5598 else 5599 start_vibra(); 5600 } 5601 #ifdef ELKA 5602 if(SLI_TYPE) 5603 SLI_Timer(); 5604 #endif 5605 if(Is_Double_Vibra_On) 5606 { 5607 Reminder_timer(); 5608 } 5609 5610 if (Is_ILU_On) 5611 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 5612 } 5613 else 5614 { 5615 #ifdef NEWSGOLD 5616 scrsTime=0; 5617 #endif 5618 if(SHOW_ACTIVE) \ ??ProcessPacket_36: \ 000006B0 ........ LDR R3,??DataTable187 ;; SHOW_ACTIVE \ 000006B4 003093E5 LDR R3,[R3, #+0] \ 000006B8 000053E3 CMP R3,#+0 5619 t->isactive=ACTIVE_TIME; \ 000006BC A0208815 STRNE R2,[R8, #+160] 5620 if(VIBR_TYPE) \ 000006C0 001091E5 LDR R1,[R1, #+0] \ 000006C4 000051E3 CMP R1,#+0 5621 vibra_count=2; \ 000006C8 0210A013 MOVNE R1,#+2 \ 000006CC 6C138715 STRNE R1,[R7, #+876] 5622 else 5623 vibra_count=1; \ 000006D0 6C638705 STREQ R6,[R7, #+876] 5624 if(t->automsgcount >= automsgcount) vibra_count=0; \ 000006D4 7C1098E5 LDR R1,[R8, #+124] \ 000006D8 000090E5 LDR R0,[R0, #+0] \ 000006DC 000051E1 CMP R1,R0 \ 000006E0 6C938725 STRCS R9,[R7, #+876] 5625 start_vibra(); \ ??ProcessPacket_35: \ 000006E4 ........ BL start_vibra 5626 #ifdef ELKA 5627 if(SLI_TYPE) 5628 SLI_Timer(); \ ??ProcessPacket_34: \ 000006E8 ........ BL SLI_Timer 5629 #endif 5630 if(Is_Double_Vibra_On) \ 000006EC F80297E5 LDR R0,[R7, #+760] \ 000006F0 000050E3 CMP R0,#+0 \ 000006F4 0000000A BEQ ??ProcessPacket_37 5631 { 5632 Reminder_timer(); \ 000006F8 ........ BL Reminder_timer 5633 } 5634 5635 if (Is_ILU_On) \ ??ProcessPacket_37: \ 000006FC F40297E5 LDR R0,[R7, #+756] \ 00000700 000050E3 CMP R0,#+0 \ 00000704 0500000A BEQ ??ProcessPacket_38 5636 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 00000708 4C049FE5 LDR R0,??ProcessPacket_1+0x30 ;; ILL_DISP_RECV \ 0000070C 00309AE5 LDR R3,[R10, #+0] \ 00000710 00209BE5 LDR R2,[R11, #+0] \ 00000714 001095E5 LDR R1,[R5, #+0] \ 00000718 000090E5 LDR R0,[R0, #+0] \ 0000071C ........ BL IlluminationOn 5637 } 5638 5639 if(comanda==1) \ ??ProcessPacket_38: \ 00000720 000497E5 LDR R0,[R7, #+1024] \ 00000724 010050E3 CMP R0,#+1 \ 00000728 2E00001A BNE ??ProcessPacket_32 5640 { 5641 AddStringToLog(t,0x02,p->data,t->name,0xFFFFFFFF,1); \ 0000072C 01002DE9 PUSH {R0} \ 00000730 143088E2 ADD R3,R8,#+20 \ 00000734 082084E2 ADD R2,R4,#+8 \ 00000738 0210A0E3 MOV R1,#+2 \ 0000073C 000066E2 RSB R0,R6,#+0 \ 00000740 01002DE9 PUSH {R0} \ 00000744 0800A0E1 MOV R0,R8 \ 00000748 ........ BL AddStringToLog 5642 main_count++; \ 0000074C ........ LDR R0,??DataTable188 ;; main_count \ 00000750 001090E5 LDR R1,[R0, #+0] \ 00000754 011081E2 ADD R1,R1,#+1 \ 00000758 001080E5 STR R1,[R0, #+0] 5643 if(Is_INC_On && (PopupShow==1 || PopupShow==3)) \ 0000075C F00297E5 LDR R0,[R7, #+752] \ 00000760 08D08DE2 ADD SP,SP,#+8 \ 00000764 000050E3 CMP R0,#+0 \ 00000768 1300000A BEQ ??ProcessPacket_39 \ 0000076C C4039FE5 LDR R0,??ProcessPacket_1+0xC ;; PopupShow \ 00000770 000090E5 LDR R0,[R0, #+0] \ 00000774 010050E3 CMP R0,#+1 \ 00000778 03005013 CMPNE R0,#+3 \ 0000077C 0E00001A BNE ??ProcessPacket_39 5644 { 5645 sprintf(show_nick,PopupMsgString,t->name); \ 00000780 D8139FE5 LDR R1,??ProcessPacket_1+0x34 ;; PopupMsgString \ 00000784 142088E2 ADD R2,R8,#+20 \ 00000788 0400A0E3 MOV R0,#+4 \ 0000078C 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000790 070080E0 ADD R0,R0,R7 \ 00000794 160000EF SWI +22 5646 if(!IsIdleUiOnTop()&&(!saver_on)) \ 00000798 C50000EF SWI +197 \ 0000079C 000050E3 CMP R0,#+0 \ 000007A0 E0029705 LDREQ R0,[R7, #+736] \ 000007A4 00005003 CMPEQ R0,#+0 \ 000007A8 0500001A BNE ??ProcessPacket_40 5647 { 5648 INC_show=20; \ 000007AC 1400A0E3 MOV R0,#+20 \ 000007B0 040487E5 STR R0,[R7, #+1028] 5649 show_pp_sender(); \ 000007B4 ........ BL show_pp_sender \ 000007B8 010000EA B ??ProcessPacket_40 5650 } 5651 } 5652 else 5653 GBS_DelTimer(&develop); \ ??ProcessPacket_39: \ 000007BC 00009DE5 LDR R0,[SP, #+0] \ 000007C0 8C0100EF SWI +396 5654 5655 main_msg_timer2=main_msg_timer;//при получении сообщения восстанавливаем таймер \ ??ProcessPacket_40: \ 000007C4 98039FE5 LDR R0,??ProcessPacket_1+0x38 ;; main_msg_timer \ 000007C8 000090E5 LDR R0,[R0, #+0] \ 000007CC F40387E5 STR R0,[R7, #+1012] 5656 if(Is_SMARTCPU_On) \ 000007D0 EC0297E5 LDR R0,[R7, #+748] \ 000007D4 000050E3 CMP R0,#+0 \ 000007D8 0200000A BEQ ??ProcessPacket_32 5657 AddToMain(t->name,p->data); \ 000007DC 081084E2 ADD R1,R4,#+8 \ 000007E0 140088E2 ADD R0,R8,#+20 \ 000007E4 ........ BL AddToMain 5658 } 5659 L1: 5660 //Разворачиваем группу, в которой пришло сообщение 5661 { 5662 CLIST *g=FindGroupByID(t->group); \ ??ProcessPacket_32: \ 000007E8 100098E5 LDR R0,[R8, #+16] \ 000007EC ........ _BLF FindGroupByID,??FindGroupByID??rA 5663 if (g) \ 000007F0 000050E3 CMP R0,#+0 5664 { 5665 if (g->state) \ 000007F4 B415D011 LDRHNE R1,[R0, #+84] \ 000007F8 00005113 CMPNE R1,#+0 5666 { 5667 g->state=0; \ 000007FC B495C011 STRHNE R9,[R0, #+84] 5668 } 5669 } 5670 } 5671 5672 ReqAddMsgToChat(t); \ 00000800 0800A0E1 MOV R0,R8 \ 00000804 ........ BL ReqAddMsgToChat 5673 RecountMenu(t,1); \ 00000808 0110A0E3 MOV R1,#+1 \ 0000080C 0800A0E1 MOV R0,R8 \ 00000810 ........ BL RecountMenu 5674 5675 switch (DEVELOP_IF) \ 00000814 4C039FE5 LDR R0,??ProcessPacket_1+0x3C ;; DEVELOP_IF \ 00000818 000090E5 LDR R0,[R0, #+0] \ 0000081C 000050E3 CMP R0,#+0 \ 00000820 0400000A BEQ ??ProcessPacket_41 \ 00000824 010050E2 SUBS R0,R0,#+1 \ 00000828 0B00000A BEQ ??ProcessPacket_42 \ 0000082C 020050E2 SUBS R0,R0,#+2 \ 00000830 1300000A BEQ ??ProcessPacket_43 \ 00000834 B80000EA B ??ProcessPacket_2 5676 { 5677 case 0: 5678 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) to_develop(); \ ??ProcessPacket_41: \ 00000838 068100EF SWI +33030 \ 0000083C 080090E5 LDR R0,[R0, #+8] \ 00000840 001397E5 LDR R1,[R7, #+768] \ 00000844 0C0090E5 LDR R0,[R0, #+12] \ 00000848 0C0090E5 LDR R0,[R0, #+12] \ 0000084C 010050E1 CMP R0,R1 \ ??ProcessPacket_44: \ 00000850 B100000A BEQ ??ProcessPacket_2 \ 00000854 ........ BL to_develop \ 00000858 AF0000EA B ??ProcessPacket_2 5679 break; 5680 case 1: 5681 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) to_develop(); \ ??ProcessPacket_42: \ 0000085C 068100EF SWI +33030 \ 00000860 080090E5 LDR R0,[R0, #+8] \ 00000864 001397E5 LDR R1,[R7, #+768] \ 00000868 0C0090E5 LDR R0,[R0, #+12] \ 0000086C 0C0090E5 LDR R0,[R0, #+12] \ 00000870 010050E1 CMP R0,R1 \ 00000874 A800000A BEQ ??ProcessPacket_2 \ 00000878 430000EF SWI +67 \ 0000087C 000050E3 CMP R0,#+0 \ 00000880 F2FFFFEA B ??ProcessPacket_44 5682 break; 5683 case 2: 5684 break; 5685 case 3: 5686 GBS_DelTimer(&develop); \ ??ProcessPacket_43: \ 00000884 00009DE5 LDR R0,[SP, #+0] \ 00000888 8C0100EF SWI +396 5687 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(!IsUnlocked())) begin_to_develop(); \ 0000088C 068100EF SWI +33030 \ 00000890 080090E5 LDR R0,[R0, #+8] \ 00000894 001397E5 LDR R1,[R7, #+768] \ 00000898 0C0090E5 LDR R0,[R0, #+12] \ 0000089C 0C0090E5 LDR R0,[R0, #+12] \ 000008A0 010050E1 CMP R0,R1 \ 000008A4 9C00000A BEQ ??ProcessPacket_2 \ 000008A8 430000EF SWI +67 \ 000008AC 000050E3 CMP R0,#+0 \ 000008B0 9900001A BNE ??ProcessPacket_2 \ 000008B4 ........ BL begin_to_develop \ 000008B8 970000EA B ??ProcessPacket_2 5688 break; 5689 } 5690 break; 5691 case T_SRV_ACK: 5692 case T_CLIENT_ACK: 5693 q=FindContactLOGQByAck(p); \ ??ProcessPacket_45: \ 000008BC 0400A0E1 MOV R0,R4 \ 000008C0 ........ BL FindContactLOGQByAck 5694 if (q) \ 000008C4 000050E3 CMP R0,#+0 \ 000008C8 9300000A BEQ ??ProcessPacket_2 5695 { 5696 q->acked=p->pkt.type==T_SRV_ACK?1:2; \ 000008CC B410D4E1 LDRH R1,[R4, #+4] \ 000008D0 100051E3 CMP R1,#+16 \ 000008D4 0110A003 MOVEQ R1,#+1 \ 000008D8 0210A013 MOVNE R1,#+2 \ 000008DC 041080E5 STR R1,[R0, #+4] 5697 t=FindContactByUin(p->pkt.uin); \ 000008E0 000094E5 LDR R0,[R4, #+0] \ 000008E4 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000008E8 0080A0E1 MOV R8,R0 5698 if (edchat_id) \ 000008EC B00397E5 LDR R0,[R7, #+944] \ 000008F0 000050E3 CMP R0,#+0 \ 000008F4 8800000A BEQ ??ProcessPacket_2 5699 { 5700 void *data=FindGUIbyId(edchat_id,NULL); \ 000008F8 B00397E5 LDR R0,[R7, #+944] \ 000008FC 0010A0E3 MOV R1,#+0 \ 00000900 090200EF SWI +521 \ 00000904 0050B0E1 MOVS R5,R0 5701 if (data) \ 00000908 8300000A BEQ ??ProcessPacket_2 5702 { 5703 EDCHAT_STRUCT *ed_struct; 5704 ed_struct=EDIT_GetUserPointer(data); \ 0000090C DF0100EF SWI +479 5705 if (ed_struct) \ 00000910 000050E3 CMP R0,#+0 \ 00000914 8000000A BEQ ??ProcessPacket_2 5706 { 5707 if (ed_struct->ed_contact==t) \ 00000918 000090E5 LDR R0,[R0, #+0] \ 0000091C 080050E1 CMP R0,R8 \ 00000920 7D00001A BNE ??ProcessPacket_2 5708 { 5709 if (EDIT_IsBusy(data)) \ 00000924 0500A0E1 MOV R0,R5 \ 00000928 1C0200EF SWI +540 \ 0000092C 000050E3 CMP R0,#+0 \ 00000930 0300000A BEQ ??ProcessPacket_46 5710 { 5711 t->req_drawack=1; \ 00000934 906088E5 STR R6,[R8, #+144] 5712 time_to_stop_t9=3; \ 00000938 0300A0E3 MOV R0,#+3 \ 0000093C FC0387E5 STR R0,[R7, #+1020] \ 00000940 750000EA B ??ProcessPacket_2 5713 } 5714 else { 5715 DrawAck(data); \ ??ProcessPacket_46: \ 00000944 0500A0E1 MOV R0,R5 \ 00000948 ........ BL DrawAck 5716 if (p->pkt.type==T_SRV_ACK) \ 0000094C B400D4E1 LDRH R0,[R4, #+4] \ 00000950 100050E3 CMP R0,#+16 \ 00000954 7000001A BNE ??ProcessPacket_2 5717 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 00000958 0C029FE5 LDR R0,??ProcessPacket_1+0x40 ;; ILL_SEND_TMR \ 0000095C 00309AE5 LDR R3,[R10, #+0] \ 00000960 002090E5 LDR R2,[R0, #+0] \ 00000964 04029FE5 LDR R0,??ProcessPacket_1+0x44 ;; ILL_KEYS_SEND \ 00000968 001090E5 LDR R1,[R0, #+0] \ 0000096C 00029FE5 LDR R0,??ProcessPacket_1+0x48 ;; ILL_DISP_SEND \ 00000970 000090E5 LDR R0,[R0, #+0] \ 00000974 ........ BL IlluminationOn \ 00000978 670000EA B ??ProcessPacket_2 5718 } 5719 } 5720 } 5721 } 5722 } 5723 } 5724 break; 5725 case T_XTEXT_ACK: 5726 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_47: \ 0000097C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000980 0080B0E1 MOVS R8,R0 5727 if (t) \ 00000984 6400000A BEQ ??ProcessPacket_2 5728 { 5729 int i; 5730 int j; 5731 FreeXText(t); \ 00000988 ........ _BLF FreeXText,??FreeXText??rA 5732 i=p->pkt.data_len; \ 0000098C B660D4E1 LDRH R6,[R4, #+6] 5733 memcpy(t->xtext=malloc(i),p->data,i); \ 00000990 0600A0E1 MOV R0,R6 \ 00000994 140000EF SWI +20 \ 00000998 A80088E5 STR R0,[R8, #+168] \ 0000099C 0620A0E1 MOV R2,R6 \ 000009A0 081084E2 ADD R1,R4,#+8 \ 000009A4 1E0100EF SWI +286 5734 zeromem(s,256); \ 000009A8 401FA0E3 MOV R1,#+256 \ 000009AC 10008DE2 ADD R0,SP,#+16 \ 000009B0 1D0100EF SWI +285 5735 strcpy(s,t->name); \ 000009B4 141088E2 ADD R1,R8,#+20 \ 000009B8 10008DE2 ADD R0,SP,#+16 \ 000009BC 1A0000EF SWI +26 5736 strcat(s,":\n"); \ 000009C0 591F8FE2 ADR R1,??ProcessPacket_1 ;; ":\n" \ 000009C4 10008DE2 ADD R0,SP,#+16 \ 000009C8 170000EF SWI +23 5737 i=strlen(s); \ 000009CC 10008DE2 ADD R0,SP,#+16 \ 000009D0 1B0000EF SWI +27 5738 j=p->data[0]; \ 000009D4 0860D4E5 LDRB R6,[R4, #+8] \ 000009D8 0070A0E1 MOV R7,R0 5739 if (j>(255-i)) j=255-i; \ 000009DC FF0067E2 RSB R0,R7,#+255 \ 000009E0 060050E1 CMP R0,R6 \ 000009E4 0060A0B1 MOVLT R6,R0 5740 strncpy(s+i,p->data+1,j); \ 000009E8 0620A0E1 MOV R2,R6 \ 000009EC 091084E2 ADD R1,R4,#+9 \ 000009F0 10008DE2 ADD R0,SP,#+16 \ 000009F4 000087E0 ADD R0,R7,R0 \ 000009F8 160100EF SWI +278 5741 i+=j; \ 000009FC 070086E0 ADD R0,R6,R7 5742 if (i<255) \ 00000A00 FF0050E3 CMP R0,#+255 \ 00000A04 100000AA BGE ??ProcessPacket_48 5743 { 5744 s[i]='\n'; \ 00000A08 10108DE2 ADD R1,SP,#+16 \ 00000A0C 0A20A0E3 MOV R2,#+10 \ 00000A10 0120C0E7 STRB R2,[R0, +R1] 5745 i++; \ 00000A14 0810D4E5 LDRB R1,[R4, #+8] \ 00000A18 B620D4E1 LDRH R2,[R4, #+6] \ 00000A1C 010080E2 ADD R0,R0,#+1 5746 j=p->pkt.data_len-p->data[0]-1; 5747 if (j>(255-i)) j=255-i; 5748 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000A20 10308DE2 ADD R3,SP,#+16 \ 00000A24 012042E0 SUB R2,R2,R1 \ 00000A28 016042E2 SUB R6,R2,#+1 \ 00000A2C FF2060E2 RSB R2,R0,#+255 \ 00000A30 060052E1 CMP R2,R6 \ 00000A34 0260A0B1 MOVLT R6,R2 \ 00000A38 0620A0E1 MOV R2,R6 \ 00000A3C 041081E0 ADD R1,R1,R4 \ 00000A40 091081E2 ADD R1,R1,#+9 \ 00000A44 030080E0 ADD R0,R0,R3 \ 00000A48 160100EF SWI +278 5749 } 5750 5751 zeromem(s,256); \ ??ProcessPacket_48: \ 00000A4C 401FA0E3 MOV R1,#+256 \ 00000A50 10008DE2 ADD R0,SP,#+16 \ 00000A54 1D0100EF SWI +285 5752 i=0; 5753 j=p->data[0]; \ 00000A58 0860D4E5 LDRB R6,[R4, #+8] 5754 if (j>(255-i)) j=255-i; 5755 strncpy(s,p->data+1,j); \ 00000A5C 091084E2 ADD R1,R4,#+9 \ 00000A60 10008DE2 ADD R0,SP,#+16 \ 00000A64 400F56E3 CMP R6,#+256 \ 00000A68 FF60A0A3 MOVGE R6,#+255 \ 00000A6C 0620A0E1 MOV R2,R6 \ 00000A70 160100EF SWI +278 5756 i+=j; 5757 if (i<255) \ 00000A74 FF0056E3 CMP R6,#+255 \ 00000A78 100000AA BGE ??ProcessPacket_49 5758 { 5759 s[i++]=13; \ 00000A7C 10108DE2 ADD R1,SP,#+16 \ 00000A80 0D20A0E3 MOV R2,#+13 \ 00000A84 0120C6E7 STRB R2,[R6, +R1] \ 00000A88 0810D4E5 LDRB R1,[R4, #+8] \ 00000A8C B620D4E1 LDRH R2,[R4, #+6] \ 00000A90 010086E2 ADD R0,R6,#+1 5760 j=p->pkt.data_len-p->data[0]-1; 5761 if (j>(255-i)) j=255-i; 5762 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000A94 10308DE2 ADD R3,SP,#+16 \ 00000A98 012042E0 SUB R2,R2,R1 \ 00000A9C 016042E2 SUB R6,R2,#+1 \ 00000AA0 FF2060E2 RSB R2,R0,#+255 \ 00000AA4 060052E1 CMP R2,R6 \ 00000AA8 0260A0B1 MOVLT R6,R2 \ 00000AAC 0620A0E1 MOV R2,R6 \ 00000AB0 041081E0 ADD R1,R1,R4 \ 00000AB4 091081E2 ADD R1,R1,#+9 \ 00000AB8 030080E0 ADD R0,R0,R3 \ 00000ABC 160100EF SWI +278 5763 } 5764 AddStringToLog(t,0x03,s,x_status_change,0xFFFFFFFF,1); \ ??ProcessPacket_49: \ 00000AC0 0100A0E3 MOV R0,#+1 \ 00000AC4 01002DE9 PUSH {R0} \ 00000AC8 E93F85E2 ADD R3,R5,#+932 \ 00000ACC 0310A0E3 MOV R1,#+3 \ 00000AD0 000060E2 RSB R0,R0,#+0 \ 00000AD4 01002DE9 PUSH {R0} \ 00000AD8 18208DE2 ADD R2,SP,#+24 \ 00000ADC 0800A0E1 MOV R0,R8 \ 00000AE0 ........ BL AddStringToLog 5765 ReqAddMsgToChat(t); \ 00000AE4 0800A0E1 MOV R0,R8 \ 00000AE8 ........ BL ReqAddMsgToChat 5766 if (strlen(p->data)) // Если x-status не пустой \ 00000AEC 080084E2 ADD R0,R4,#+8 \ 00000AF0 1B0000EF SWI +27 \ 00000AF4 000050E3 CMP R0,#+0 \ 00000AF8 08D08DE2 ADD SP,SP,#+8 5767 RecountMenu(t, 1); \ 00000AFC 0110A013 MOVNE R1,#+1 \ 00000B00 0800A011 MOVNE R0,R8 \ 00000B04 72FDFF1A BNE ??ProcessPacket_9 5768 else 5769 RecountMenu(NULL, 0); \ 00000B08 0010A0E3 MOV R1,#+0 \ 00000B0C 0100A0E1 MOV R0,R1 \ 00000B10 6FFDFFEA B ??ProcessPacket_9 5770 } 5771 break; 5772 case T_LASTPRIVACY: 5773 CurrentPrivateStatus=p->data[0]; \ ??ProcessPacket_50: \ 00000B14 0800D4E5 LDRB R0,[R4, #+8] \ 00000B18 680387E5 STR R0,[R7, #+872] 5774 break; 5775 } 5776 mfree(p); \ ??ProcessPacket_2: \ 00000B1C 0400A0E1 MOV R0,R4 \ 00000B20 150000EF SWI +21 5777 } \ 00000B24 4EDF8DE2 ADD SP,SP,#+312 \ 00000B28 F08FBDE8 POP {R4-R11,PC} ;; return \ ??ProcessPacket_1: \ 00000B2C 3A0A0000 DC8 ":\n",+0 \ 00000B30 ........ DC32 ILL_RECV_FADE \ 00000B34 ........ DC32 ENA_AUTO_XTXT \ 00000B38 ........ DC32 PopupShow \ 00000B3C ........ DC32 PopupOnlineString \ 00000B40 ........ DC32 ON_OFF_TIME \ 00000B44 ........ DC32 sndGlobal \ 00000B48 ........ DC32 sndGlobal2 \ 00000B4C ........ DC32 sndSrvMsg \ 00000B50 ........ DC32 TIME_OR_MSG \ 00000B54 ........ DC32 ILL_KEYS_RECV \ 00000B58 ........ DC32 ILL_RECV_TMR \ 00000B5C ........ DC32 ILL_DISP_RECV \ 00000B60 ........ DC32 PopupMsgString \ 00000B64 ........ DC32 main_msg_timer \ 00000B68 ........ DC32 DEVELOP_IF \ 00000B6C ........ DC32 ILL_SEND_TMR \ 00000B70 ........ DC32 ILL_KEYS_SEND \ 00000B74 ........ DC32 ILL_DISP_SEND 5778 5779 5780 IPC_REQ tmr_gipc; \ In segment CODE, align 4, keep-with-next 5781 void process_active_timer(void) 5782 { \ process_active_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} 5783 if (connect_state>2) \ 00000004 ........ LDR R5,??DataTable193 ;; icons \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C 7C0395E5 LDR R0,[R5, #+892] \ 00000010 030050E3 CMP R0,#+3 \ 00000014 070000BA BLT ??process_active_timer_0 5784 { 5785 if (++tenseconds_to_ping>12) \ 00000018 B40395E5 LDR R0,[R5, #+948] \ 0000001C 010080E2 ADD R0,R0,#+1 \ 00000020 B40385E5 STR R0,[R5, #+948] \ 00000024 0D0050E3 CMP R0,#+13 \ 00000028 020000BA BLT ??process_active_timer_0 5786 { 5787 tenseconds_to_ping=0; 5788 SUBPROC((void *)do_ping); \ 0000002C 5C009FE5 LDR R0,??process_active_timer_1 ;; do_ping \ 00000030 B44385E5 STR R4,[R5, #+948] \ 00000034 710100EF SWI +369 5789 } 5790 } 5791 tmr_gipc.name_to=ipc_my_name; \ ??process_active_timer_0: \ 00000038 ........ LDR R1,??DataTable192 ;; Canvas \ 0000003C 4E0FA0E3 MOV R0,#+312 \ 00000040 DF2FA0E3 MOV R2,#+892 \ 00000044 013082E0 ADD R3,R2,R1 \ 00000048 053080E7 STR R3,[R0, +R5] 5792 tmr_gipc.name_from=ipc_my_name; \ 0000004C 011082E0 ADD R1,R2,R1 \ 00000050 3C1185E5 STR R1,[R5, #+316] 5793 tmr_gipc.data=NULL; \ 00000054 404185E5 STR R4,[R5, #+320] 5794 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_TENSECONDS,&tmr_gipc); \ 00000058 053080E0 ADD R3,R0,R5 \ 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 5795 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000074 ........ LDR R2,??DataTable205 ;; process_active_timer \ 00000078 871EA0E3 MOV R1,#+2160 \ 0000007C C800A0E3 MOV R0,#+200 \ 00000080 680D80E3 ORR R0,R0,#0x1A00 \ 00000084 050080E0 ADD R0,R0,R5 \ 00000088 4D0000EF SWI +77 5796 } \ 0000008C 3080BDE8 POP {R4,R5,PC} ;; return \ ??process_active_timer_1: \ 00000090 ........ DC32 do_ping 5797 5798 GBSTMR tm22; \ In segment CODE, align 4, keep-with-next 5799 void OneSecTmr() 5800 { 5801 tmr_gipc.name_to=ipc_my_name; \ OneSecTmr: \ 00000000 ........ LDR R2,??DataTable192 ;; Canvas \ 00000004 10402DE9 PUSH {R4,LR} \ 00000008 ........ LDR R4,??DataTable193 ;; icons \ 0000000C 4E0FA0E3 MOV R0,#+312 \ 00000010 DF1FA0E3 MOV R1,#+892 \ 00000014 023081E0 ADD R3,R1,R2 \ 00000018 043080E7 STR R3,[R0, +R4] 5802 tmr_gipc.name_from=ipc_my_name; \ 0000001C 021081E0 ADD R1,R1,R2 \ 00000020 3C1184E5 STR R1,[R4, #+316] 5803 tmr_gipc.data=NULL; \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 401184E5 STR R1,[R4, #+320] 5804 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_ONESECOND,&tmr_gipc); \ 0000002C 043080E0 ADD R3,R0,R4 \ 00000030 0620A0E3 MOV R2,#+6 \ 00000034 B010A0E3 MOV R1,#+176 \ 00000038 DE1C81E3 ORR R1,R1,#0xDE00 \ 0000003C 0900A0E3 MOV R0,#+9 \ 00000040 420C80E3 ORR R0,R0,#0x4200 \ 00000044 000100EF SWI +256 5805 GBS_StartTimerProc(&tm22,TMR_SECOND,OneSecTmr); \ 00000048 14209FE5 LDR R2,??OneSecTmr_0 ;; OneSecTmr \ 0000004C D810A0E3 MOV R1,#+216 \ 00000050 7400A0E3 MOV R0,#+116 \ 00000054 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000058 040080E0 ADD R0,R0,R4 \ 0000005C 4D0000EF SWI +77 5806 } \ 00000060 1080BDE8 POP {R4,PC} ;; return \ ??OneSecTmr_0: \ 00000064 ........ DC32 OneSecTmr 5807 5808 5809 //=============================================================================================== 5810 /* 5811 extern ADDUIN addonuin[]; 5812 5813 int itemFromDisp;//кол-во на экране 5814 int totalItems;//общее количество итемов 5815 int curpos=0;//позичия курсора 5816 int curpage=1;//текущая страница 5817 5818 const char clrSelect[4]={0xFF,0x00,0x00,0x60}; 5819 const char fntSelect[4]={0xFF,0xFF,0x00,0x60}; 5820 const char bordSelect[4]={0x00,0x00,0x00,0x60}; 5821 5822 const char clrNotSelect[4]={0x00,0x00,0x00,0x60}; 5823 const char bordNotSelect[4]={0x00,0x00,0x00,0x60}; 5824 const char fntNotSelect[4]={0xFF,0xFF,0xFF,0x60}; 5825 5826 char clrBlack[]={0x00,0x00,0x00,0x64}; 5827 char clrWhite[]={0xFF,0xFF,0xFF,0x64}; 5828 //char prozr[]={0x00,0x00,0x00,0x00}; 5829 const int font=FONT_SMALL; 5830 const char _t[]="%t"; 5831 5832 extern int ParseUINS(); 5833 int USE_ADD_UIN=0; 5834 #define CLIST_Y1 (YDISP+GetFontYSIZE(font)+8) 5835 5836 static void DrawList() 5837 { 5838 int font_y = GetFontYSIZE(font)+2;//16+2 5839 int scr_w=ScreenW(); 5840 int scr_h=ScreenH()-1; 5841 // int y2=scr_w-(GetFontYSIZE(font)+2); 5842 #ifdef ELKA 5843 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-GetFontYSIZE(font)-2)-1; 5844 #else 5845 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-GetFontYSIZE(font)-2); 5846 #endif 5847 5848 LockSched(); 5849 totalItems = ParseUINS(); 5850 // Определяем количество страниц списка контактов 5851 int pageNum = sdiv(itemFromDisp, totalItems); 5852 if( itemFromDisp*pageNum < totalItems) pageNum++; //На всяк,вдруг еще страница нужна 5853 WSHDR* out_ws = AllocWS(256); 5854 int i=0; 5855 int start_y; 5856 int x=1; 5857 while(i<=totalItems) 5858 { 5859 if((i>=(curpage-1)*itemFromDisp) && (i<=itemFromDisp*curpage))//если те итемы который нужно выводить на экран со страници curpage 5860 { 5861 wsprintf(out_ws,"%d. %d",i+1,addonuin[i].uin);//имя закладки 5862 start_y = (CLIST_Y1 + (i - (curpage-1)*itemFromDisp)*font_y); //определяем начальное смещение по у 5863 5864 if(i==curpos) 5865 { 5866 DrawRoundedFrame(x-4,start_y,scr_w-1,start_y+font_y,5,5,0,bordSelect,clrSelect); 5867 DrawString(out_ws,x,start_y+2,scr_w-1,start_y+font_y,font,0,fntSelect,0); 5868 } 5869 else 5870 { 5871 DrawRoundedFrame(x,start_y+1,scr_w-1,start_y+font_y,0,0,0,bordNotSelect,clrNotSelect);//clrBlack 5872 DrawString(out_ws,x,start_y+2,scr_w-1,start_y+font_y,font,0,fntNotSelect,0); 5873 } 5874 } 5875 i++; 5876 if(i>(pageNum*itemFromDisp)) break; 5877 } 5878 UnlockSched(); 5879 FreeWS(out_ws); 5880 } 5881 5882 // Управление курсором 5883 void MoveUp() 5884 { 5885 if(!itemFromDisp)return; 5886 if(curpos<1) 5887 { 5888 curpos=totalItems; 5889 if(itemFromDisp!=totalItems) 5890 { 5891 curpage = sdiv(itemFromDisp,totalItems)+1; 5892 } 5893 else 5894 curpage = 1; 5895 } 5896 else 5897 { 5898 curpos--; 5899 if(curpos<(curpage-1)*itemFromDisp){ curpos++; curpage--; } 5900 } 5901 // REDRAW(); 5902 } 5903 5904 5905 void MoveDown() 5906 { 5907 if(!totalItems)return; 5908 curpos++; 5909 if(curpos>totalItems) { curpos=0; curpage=1; } 5910 if(curpage*itemFromDispws1,LG_GRSTATESTRING,connect_state,RXstate,RX,TX,sendq_l,hostname,logmsg); \ 000000B8 9820A0E3 MOV R2,#+152 \ 000000BC 642D82E3 ORR R2,R2,#0x1900 \ 000000C0 052082E0 ADD R2,R2,R5 \ 000000C4 04002DE9 PUSH {R2} \ 000000C8 702D85E2 ADD R2,R5,#+7168 \ 000000CC 04002DE9 PUSH {R2} \ 000000D0 942395E5 LDR R2,[R5, #+916] \ 000000D4 04002DE9 PUSH {R2} \ 000000D8 02002DE9 PUSH {R1} \ 000000DC 01002DE9 PUSH {R0} \ 000000E0 783395E5 LDR R3,[R5, #+888] \ 000000E4 7C2395E5 LDR R2,[R5, #+892] \ 000000E8 340094E5 LDR R0,[R4, #+52] \ 000000EC 141086E2 ADD R1,R6,#+20 \ 000000F0 240100EF SWI +292 5951 if(pm != pl) \ 000000F4 14009DE5 LDR R0,[SP, #+20] \ 000000F8 18109DE5 LDR R1,[SP, #+24] \ 000000FC 14D08DE2 ADD SP,SP,#+20 \ 00000100 010050E1 CMP R0,R1 \ 00000104 3400000A BEQ ??DrawLoadScreen_2 \ 00000108 14039FE5 LDR R0,??DrawLoadScreen_0+0x14 ;; BGPBcolor \ 0000010C 0B30A0E1 MOV R3,R11 \ 00000110 0010A0E1 MOV R1,R0 \ 00000114 02002DE9 PUSH {R1} \ 00000118 01002DE9 PUSH {R0} \ 0000011C 0A20A0E1 MOV R2,R10 \ 00000120 0810A0E1 MOV R1,R8 \ 00000124 0000A0E3 MOV R0,#+0 \ 00000128 01002DE9 PUSH {R0} \ 0000012C 0700A0E1 MOV R0,R7 5952 { 5953 /* DrawRectangle(0,scr_h-4-2*GetFontYSIZE(FONT_SMALL_BOLD),scr_w-1,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-2,0, 5954 GetPaletteAdrByColorIndex(0), 5955 GetPaletteAdrByColorIndex(0));*/ 5956 // pos_status = ((scr_w-1) * pl) / pm; 5957 /* DrawRectangle(1,scr_h-4-2*GetFontYSIZE(FONT_SMALL_BOLD)+1,pos_status,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-3,0, 5958 GetPaletteAdrByColorIndex(14), 5959 GetPaletteAdrByColorIndex(14)); */ 5960 // wstrcatprintf(data->ws1,"\nLoading images..."); 5961 5962 DrawRectangle(rc.x,rc.y,rc.x2,rc.y2,0,BGPBcolor,BGPBcolor); \ 00000130 B40100EF SWI +436 5963 pos_status = (((rc.x2-rc.x)-1) * pl) / pm; \ 00000134 10109DE5 LDR R1,[SP, #+16] \ 00000138 07004AE0 SUB R0,R10,R7 \ 0000013C 010040E2 SUB R0,R0,#+1 \ 00000140 910000E0 MUL R0,R1,R0 \ 00000144 0C109DE5 LDR R1,[SP, #+12] 5964 DrawRectangle(rc.x+2,rc.y+2,rc.x+pos_status+2,rc.y2-2,0,PBcolor,PBcolor); \ 00000148 02304BE2 SUB R3,R11,#+2 \ 0000014C ........ _BLF ??div32_a,??rA??div32_a \ 00000150 D0029FE5 LDR R0,??DrawLoadScreen_0+0x18 ;; PBcolor \ 00000154 0020A0E1 MOV R2,R0 \ 00000158 04002DE9 PUSH {R2} \ 0000015C 01002DE9 PUSH {R0} \ 00000160 0000A0E3 MOV R0,#+0 \ 00000164 01002DE9 PUSH {R0} \ 00000168 070081E0 ADD R0,R1,R7 \ 0000016C 022080E2 ADD R2,R0,#+2 \ 00000170 021088E2 ADD R1,R8,#+2 \ 00000174 020087E2 ADD R0,R7,#+2 \ 00000178 B40100EF SWI +436 5965 5966 if(total_smiles) \ 0000017C A8029FE5 LDR R0,??DrawLoadScreen_0+0x1C ;; total_smiles \ 00000180 001090E5 LDR R1,[R0, #+0] \ 00000184 18D08DE2 ADD SP,SP,#+24 \ 00000188 000051E3 CMP R1,#+0 \ 0000018C 0300000A BEQ ??DrawLoadScreen_3 5967 { 5968 wstrcatprintf(data->ws1,"\nLoaded %d smiles",total_smiles); \ 00000190 002090E5 LDR R2,[R0, #+0] \ 00000194 340094E5 LDR R0,[R4, #+52] \ 00000198 4C1086E2 ADD R1,R6,#+76 \ 0000019C 160200EF SWI +534 5969 } 5970 if (xstatuses_load) \ ??DrawLoadScreen_3: \ 000001A0 88029FE5 LDR R0,??DrawLoadScreen_0+0x20 ;; xstatuses_load \ 000001A4 000090E5 LDR R0,[R0, #+0] \ 000001A8 000050E3 CMP R0,#+0 \ 000001AC 0A00000A BEQ ??DrawLoadScreen_2 5971 { 5972 wstrcatprintf(data->ws1,"\nLoaded %d xstatus",total_xstatuses); \ 000001B0 7C029FE5 LDR R0,??DrawLoadScreen_0+0x24 ;; total_xstatuses \ 000001B4 601086E2 ADD R1,R6,#+96 \ 000001B8 002090E5 LDR R2,[R0, #+0] \ 000001BC 340094E5 LDR R0,[R4, #+52] \ 000001C0 160200EF SWI +534 \ 000001C4 040000EA B ??DrawLoadScreen_2 5973 } 5974 } 5975 } 5976 else 5977 { 5978 wsprintf(data->ws1,"State: %d, RXstate: %d",connect_state,RXstate); \ ??DrawLoadScreen_1: \ 000001C8 783395E5 LDR R3,[R5, #+888] \ 000001CC 7C2395E5 LDR R2,[R5, #+892] \ 000001D0 340094E5 LDR R0,[R4, #+52] \ 000001D4 741086E2 ADD R1,R6,#+116 \ 000001D8 240100EF SWI +292 5979 } 5980 5981 DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD),FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ ??DrawLoadScreen_2: \ 000001DC 1700A0E3 MOV R0,#+23 \ 000001E0 2E0100EF SWI +302 \ 000001E4 00A0A0E1 MOV R10,R0 \ 000001E8 0000A0E3 MOV R0,#+0 \ 000001EC 2E0100EF SWI +302 \ 000001F0 00B0A0E1 MOV R11,R0 \ 000001F4 0500A0E3 MOV R0,#+5 \ 000001F8 C50100EF SWI +453 \ 000001FC 08109DE5 LDR R1,[SP, #+8] \ 00000200 00042DE9 PUSH {R10} \ 00000204 048041E2 SUB R8,R1,#+4 \ 00000208 00082DE9 PUSH {R11} \ 0000020C 0010A0E3 MOV R1,#+0 \ 00000210 02002DE9 PUSH {R1} \ 00000214 000048E0 SUB R0,R8,R0 \ 00000218 047049E2 SUB R7,R9,#+4 \ 0000021C 0730A0E1 MOV R3,R7 \ 00000220 0810A0E3 MOV R1,#+8 \ 00000224 02002DE9 PUSH {R1} \ 00000228 01002DE9 PUSH {R0} \ 0000022C 340094E5 LDR R0,[R4, #+52] \ 00000230 1B20A0E3 MOV R2,#+27 \ 00000234 0310A0E3 MOV R1,#+3 \ 00000238 4C0100EF SWI +332 5982 /*} 5983 else 5984 { 5985 wsprintf(data->ws1,"%t UIN!","Выберите"); 5986 DrawLine(0,CLIST_Y1-3,ScreenW()-1,CLIST_Y1-3,0,clrWhite); 5987 DrawString(data->ws1,2,YDISP+2,scr_w-1,YDISP+GetFontYSIZE(FONT_SMALL),FONT_SMALL,0,fntSelect,0); 5988 // DrawList(); 5989 } 5990 */ 5991 5992 #ifdef kluchnik 5993 int y=140; 5994 char A[]="[A] %s"; 5995 char I[]="[I]"; 5996 char V[]="[V]"; 5997 char S[]="[S]"; 5998 5999 if(CurrentPrivateStatus==1) 6000 { 6001 wsprintf(data->ws2,I); 6002 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 6003 y+=GetFontYSIZE(11)+5; 6004 } 6005 6006 if(Is_Vibra_Enabled) 6007 { 6008 wsprintf(data->ws2,V); 6009 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 6010 y+=GetFontYSIZE(11)+5; 6011 } 6012 6013 if(Is_Sounds_Enabled) 6014 { 6015 wsprintf(data->ws2,S); 6016 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 6017 y+=GetFontYSIZE(11)+5; 6018 } 6019 6020 if(Is_Double_Vibra_On) 6021 { 6022 wsprintf(data->ws2,"[Vr]"); 6023 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 6024 } 6025 6026 if(away_m) 6027 { 6028 wsprintf(data->ws2,A,away_msg_time_dace); 6029 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 6030 y+=GetFontYSIZE(11)+5; 6031 } 6032 6033 if(connect_state==3) 6034 { 6035 wsprintf(data->ws2,"Online: %02d:%02d:%02d not action %d sec", uptimeHour, uptimeMin, uptimeSec,msg_away_timer*5); 6036 } 6037 else 6038 wsprintf(data->ws2,"Offline"); 6039 DrawString(data->ws2,1,scr_h-10-3*GetFontYSIZE(FONT_SMALL_BOLD)+1,ScreenW()-1,scr_h-10-GetFontYSIZE(FONT_MEDIUM_BOLD)-3 6040 ,FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 6041 #endif 6042 6043 if(IsInvertSoftKey) \ 0000023C ........ LDR R0,??DataTable198 ;; IsInvertSoftKey \ 00000240 C990A0E1 ASR R9,R9,#+1 \ 00000244 000090E5 LDR R0,[R0, #+0] \ 00000248 14D08DE2 ADD SP,SP,#+20 \ 0000024C 000050E3 CMP R0,#+0 \ 00000250 3700000A BEQ ??DrawLoadScreen_4 6044 { 6045 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 00000254 380094E5 LDR R0,[R4, #+56] \ 00000258 8C2086E2 ADD R2,R6,#+140 \ 0000025C 101086E2 ADD R1,R6,#+16 \ 00000260 240100EF SWI +292 6046 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)); \ 00000264 1700A0E3 MOV R0,#+23 \ 00000268 2E0100EF SWI +302 \ 0000026C 00A0A0E1 MOV R10,R0 \ 00000270 0000A0E3 MOV R0,#+0 \ 00000274 2E0100EF SWI +302 \ 00000278 00B0A0E1 MOV R11,R0 \ 0000027C 0500A0E3 MOV R0,#+5 \ 00000280 C50100EF SWI +453 \ 00000284 00042DE9 PUSH {R10} \ 00000288 00082DE9 PUSH {R11} \ 0000028C 0410A0E3 MOV R1,#+4 \ 00000290 02002DE9 PUSH {R1} \ 00000294 0730A0E1 MOV R3,R7 \ 00000298 002048E0 SUB R2,R8,R0 \ 0000029C 0510A0E3 MOV R1,#+5 \ 000002A0 02002DE9 PUSH {R1} \ 000002A4 0810A0E1 MOV R1,R8 \ 000002A8 02002DE9 PUSH {R1} \ 000002AC 380094E5 LDR R0,[R4, #+56] \ 000002B0 0910A0E1 MOV R1,R9 \ 000002B4 4C0100EF SWI +332 6047 6048 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ 000002B8 A40395E5 LDR R0,[R5, #+932] \ 000002BC 14D08DE2 ADD SP,SP,#+20 \ 000002C0 000050E3 CMP R0,#+0 \ 000002C4 380094E5 LDR R0,[R4, #+56] \ 000002C8 94208612 ADDNE R2,R6,#+148 \ 000002CC 13208602 ADDEQ R2,R6,#+19 \ 000002D0 101086E2 ADD R1,R6,#+16 \ 000002D4 240100EF SWI +292 6049 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)); \ 000002D8 1700A0E3 MOV R0,#+23 \ 000002DC 2E0100EF SWI +302 \ 000002E0 0050A0E1 MOV R5,R0 \ 000002E4 0000A0E3 MOV R0,#+0 \ 000002E8 2E0100EF SWI +302 \ 000002EC 0060A0E1 MOV R6,R0 \ 000002F0 0500A0E3 MOV R0,#+5 \ 000002F4 C50100EF SWI +453 \ 000002F8 20002DE9 PUSH {R5} \ 000002FC 40002DE9 PUSH {R6} \ 00000300 0110A0E3 MOV R1,#+1 \ 00000304 02002DE9 PUSH {R1} \ 00000308 0930A0E1 MOV R3,R9 \ 0000030C 002048E0 SUB R2,R8,R0 \ 00000310 0510A0E3 MOV R1,#+5 \ 00000314 02002DE9 PUSH {R1} \ 00000318 0810A0E1 MOV R1,R8 \ 0000031C 02002DE9 PUSH {R1} \ 00000320 380094E5 LDR R0,[R4, #+56] \ 00000324 0310A0E3 MOV R1,#+3 \ 00000328 4C0100EF SWI +332 \ 0000032C 14D08DE2 ADD SP,SP,#+20 \ 00000330 F78FBDE8 POP {R0-R2,R4-R11,PC} 6050 } 6051 else 6052 { 6053 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ ??DrawLoadScreen_4: \ 00000334 A40395E5 LDR R0,[R5, #+932] \ 00000338 101086E2 ADD R1,R6,#+16 \ 0000033C 000050E3 CMP R0,#+0 \ 00000340 380094E5 LDR R0,[R4, #+56] \ 00000344 94208612 ADDNE R2,R6,#+148 \ 00000348 13208602 ADDEQ R2,R6,#+19 \ 0000034C 240100EF SWI +292 6054 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)); \ 00000350 1700A0E3 MOV R0,#+23 \ 00000354 2E0100EF SWI +302 \ 00000358 0050A0E1 MOV R5,R0 \ 0000035C 0000A0E3 MOV R0,#+0 \ 00000360 2E0100EF SWI +302 \ 00000364 00A0A0E1 MOV R10,R0 \ 00000368 0500A0E3 MOV R0,#+5 \ 0000036C C50100EF SWI +453 \ 00000370 20002DE9 PUSH {R5} \ 00000374 00042DE9 PUSH {R10} \ 00000378 0410A0E3 MOV R1,#+4 \ 0000037C 02002DE9 PUSH {R1} \ 00000380 0730A0E1 MOV R3,R7 \ 00000384 002048E0 SUB R2,R8,R0 \ 00000388 0510A0E3 MOV R1,#+5 \ 0000038C 02002DE9 PUSH {R1} \ 00000390 0810A0E1 MOV R1,R8 \ 00000394 02002DE9 PUSH {R1} \ 00000398 380094E5 LDR R0,[R4, #+56] \ 0000039C 0910A0E1 MOV R1,R9 \ 000003A0 4C0100EF SWI +332 6055 6056 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 000003A4 380094E5 LDR R0,[R4, #+56] \ 000003A8 8C2086E2 ADD R2,R6,#+140 \ 000003AC 101086E2 ADD R1,R6,#+16 \ 000003B0 240100EF SWI +292 6057 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)); \ 000003B4 1700A0E3 MOV R0,#+23 \ 000003B8 2E0100EF SWI +302 \ 000003BC 0050A0E1 MOV R5,R0 \ 000003C0 0000A0E3 MOV R0,#+0 \ 000003C4 2E0100EF SWI +302 \ 000003C8 0060A0E1 MOV R6,R0 \ 000003CC 0500A0E3 MOV R0,#+5 \ 000003D0 C50100EF SWI +453 \ 000003D4 20002DE9 PUSH {R5} \ 000003D8 40002DE9 PUSH {R6} \ 000003DC 0110A0E3 MOV R1,#+1 \ 000003E0 02002DE9 PUSH {R1} \ 000003E4 0930A0E1 MOV R3,R9 \ 000003E8 002048E0 SUB R2,R8,R0 \ 000003EC 0510A0E3 MOV R1,#+5 \ 000003F0 02002DE9 PUSH {R1} \ 000003F4 0810A0E1 MOV R1,R8 \ 000003F8 02002DE9 PUSH {R1} \ 000003FC 380094E5 LDR R0,[R4, #+56] \ 00000400 0310A0E3 MOV R1,#+3 \ 00000404 4C0100EF SWI +332 \ 00000408 28D08DE2 ADD SP,SP,#+40 6058 } 6059 /* 6060 wsprintf(data->ws2,"%d %s",addonuin[0].uin,addonuin[0].pass); 6061 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)); 6062 */ 6063 } \ 0000040C F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return \ ??DrawLoadScreen_0: \ 00000410 ........ DC32 menutext \ 00000414 ........ DC32 pictures_max \ 00000418 ........ DC32 PBRECT \ 0000041C ........ DC32 pictures_loaded \ 00000420 ........ DC32 IsShowInfo \ 00000424 ........ DC32 BGPBcolor \ 00000428 ........ DC32 PBcolor \ 0000042C ........ DC32 total_smiles \ 00000430 ........ DC32 xstatuses_load \ 00000434 ........ DC32 total_xstatuses 6064 6065 //int ShowLoadScreen=1; \ In segment CODE, align 4, keep-with-next 6066 void method0(MAIN_GUI *data) 6067 { \ method0: \ 00000000 30402DE9 PUSH {R4,R5,LR} 6068 if(IsGuiOnTop(maingui_id)) \ 00000004 ........ LDR R5,??DataTable214 ;; icons \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 040395E5 LDR R0,[R5, #+772] \ 00000010 350100EF SWI +309 \ 00000014 000050E3 CMP R0,#+0 \ 00000018 3080BD08 POPEQ {R4,R5,PC} 6069 { 6070 if(ShowLoadScreen) \ 0000001C E00395E5 LDR R0,[R5, #+992] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 0400000A BEQ ??method0_0 6071 { 6072 #ifdef ELKA 6073 DisableIconBar(0); \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 3B0200EF SWI +571 6074 #endif 6075 DrawLoadScreen(data); \ 00000030 0400A0E1 MOV R0,R4 \ 00000034 3040BDE8 POP {R4,R5,LR} ;; Pop \ 00000038 ........ B DrawLoadScreen ;; tailcall 6076 } 6077 else 6078 { 6079 #ifdef ELKA 6080 DisableIconBar(1); \ ??method0_0: \ 0000003C 0100A0E3 MOV R0,#+1 \ 00000040 3B0200EF SWI +571 6081 #endif 6082 SetCanvasFlag(1); \ 00000044 0100A0E3 MOV R0,#+1 \ 00000048 ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 6083 DrawContactList(); \ 0000004C 3040BDE8 POP {R4,R5,LR} ;; Pop \ 00000050 ........ B DrawContactList ;; tailcall 6084 } 6085 } 6086 } 6087 \ In segment CODE, align 4, keep-with-next 6088 void method1(MAIN_GUI *data,void *(*malloc_adr)(int)) 6089 { \ method1: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 6090 /*#ifdef ELKA 6091 if(!ShowLoadScreen) 6092 DisableIconBar(1); 6093 #endif*/ 6094 data->ws1=AllocWS(256); \ 00000008 400FA0E3 MOV R0,#+256 \ 0000000C 250100EF SWI +293 \ 00000010 340084E5 STR R0,[R4, #+52] 6095 data->ws2=AllocWS(256); \ 00000014 400FA0E3 MOV R0,#+256 \ 00000018 250100EF SWI +293 \ 0000001C 380084E5 STR R0,[R4, #+56] 6096 StatusToIMGHDR(); \ 00000020 ........ BL StatusToIMGHDR 6097 data->gui.state=1; \ 00000024 0100A0E3 MOV R0,#+1 \ 00000028 0C00C4E5 STRB R0,[R4, #+12] 6098 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 6099 \ In segment CODE, align 4, keep-with-next 6100 void method2(MAIN_GUI *data,void (*mfree_adr)(void *)) 6101 {/* \ method2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 6102 #ifdef ELKA 6103 DisableIconBar(0); 6104 #endif*/ 6105 FreeStatusToIMGHDR(); \ 00000008 ........ BL FreeStatusToIMGHDR 6106 FreeWS(data->ws1); \ 0000000C 340094E5 LDR R0,[R4, #+52] \ 00000010 290100EF SWI +297 6107 FreeWS(data->ws2); \ 00000014 380094E5 LDR R0,[R4, #+56] \ 00000018 290100EF SWI +297 6108 data->gui.state=0; \ 0000001C 0000A0E3 MOV R0,#+0 \ 00000020 0C00C4E5 STRB R0,[R4, #+12] 6109 } \ 00000024 1080BDE8 POP {R4,PC} ;; return 6110 \ In segment CODE, align 4, keep-with-next 6111 void method3(MAIN_GUI *data,void *(*malloc_adr)(int),void (*mfree_adr)(void *)) 6112 {/* \ method3: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 6113 #ifdef ELKA 6114 if(!ShowLoadScreen) 6115 DisableIconBar(1); 6116 #endif*/ 6117 // SetCanvasFlag(1); 6118 DisableIDLETMR(); \ 00000008 7F0100EF SWI +383 6119 data->gui.state=2; \ 0000000C 0200A0E3 MOV R0,#+2 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 6120 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 6121 \ In segment CODE, align 4, keep-with-next 6122 void method4(MAIN_GUI *data,void (*mfree_adr)(void *)) 6123 { \ method4: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 6124 if (data->gui.state!=2) \ 00000008 0C00D4E5 LDRB R0,[R4, #+12] \ 0000000C 020050E3 CMP R0,#+2 \ 00000010 1080BD18 POPNE {R4,PC} 6125 return;/* 6126 #ifdef ELKA 6127 DisableIconBar(0); 6128 #endif*/ 6129 GBS_DelTimer(&cltmr); \ 00000014 0C009FE5 LDR R0,??method4_0 ;; cltmr \ 00000018 8C0100EF SWI +396 6130 data->gui.state=1; \ 0000001C 0100A0E3 MOV R0,#+1 \ 00000020 0C00C4E5 STRB R0,[R4, #+12] 6131 } \ 00000024 1080BDE8 POP {R4,PC} ;; return \ ??method4_0: \ 00000028 ........ DC32 cltmr 6132 6133 \ In segment CODE, align 4, keep-with-next 6134 int LoadOnKey(GUI_MSG *msg) 6135 { \ LoadOnKey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 0CD04DE2 SUB SP,SP,#+12 6136 if (msg->gbsmsg->msg==KEY_DOWN) \ 00000008 042090E5 LDR R2,[R0, #+4] \ 0000000C 9310A0E3 MOV R1,#+147 \ 00000010 040092E5 LDR R0,[R2, #+4] \ 00000014 401F81E3 ORR R1,R1,#0x100 \ 00000018 010050E1 CMP R0,R1 \ 0000001C 6600001A BNE ??LoadOnKey_1 6137 { 6138 switch(msg->gbsmsg->submess) \ 00000020 ........ LDR R4,??DataTable214 ;; icons \ 00000024 ........ LDR R0,??DataTable198 ;; IsInvertSoftKey \ 00000028 082092E5 LDR R2,[R2, #+8] \ 0000002C E03394E5 LDR R3,[R4, #+992] \ 00000030 80C394E5 LDR R12,[R4, #+896] \ 00000034 00E090E5 LDR LR,[R0, #+0] \ 00000038 ........ LDR R5,??DataTable213 ;; create_connect \ 0000003C ........ LDR R1,??DataTable209 ;; end_socket \ 00000040 B800A0E3 MOV R0,#+184 \ 00000044 680D80E3 ORR R0,R0,#0x1A00 \ 00000048 046080E0 ADD R6,R0,R4 \ 0000004C ........ LDR R0,??DataTable201 ;; WriteDefSettings \ 00000050 0080E0E3 MVN R8,#+0 \ 00000054 0370A0E3 MOV R7,#+3 \ 00000058 0190A0E3 MOV R9,#+1 \ 0000005C 00A0A0E3 MOV R10,#+0 \ 00000060 012042E2 SUB R2,R2,#+1 \ 00000064 350052E3 CMP R2,#+53 \ 00000068 5300008A BHI ??LoadOnKey_1 \ 0000006C 01BF8FE2 ADR R11,??LoadOnKey_0 \ 00000070 02B0DBE7 LDRB R11,[R11, R2] \ 00000074 0BF18FE0 ADD PC,PC,R11, LSL #+2 \ ??LoadOnKey_0: \ 00000078 0D50501A DC8 +13,+80,+80,+26 \ 0000007C 50505050 DC8 +80,+80,+80,+80 \ 00000080 50502026 DC8 +80,+80,+32,+38 \ 00000084 50505050 DC8 +80,+80,+80,+80 \ 00000088 50505050 DC8 +80,+80,+80,+80 \ 0000008C 50505050 DC8 +80,+80,+80,+80 \ 00000090 50505050 DC8 +80,+80,+80,+80 \ 00000094 50505050 DC8 +80,+80,+80,+80 \ 00000098 50505050 DC8 +80,+80,+80,+80 \ 0000009C 50505050 DC8 +80,+80,+80,+80 \ 000000A0 50505050 DC8 +80,+80,+80,+80 \ 000000A4 50505029 DC8 +80,+80,+80,+41 \ 000000A8 32373C42 DC8 +50,+55,+60,+66 \ 000000AC 474C0000 DC8 +71,+76,+0,+0 6139 { 6140 // case ENTER_BUTTON: Enter(); break; 6141 case LEFT_SOFT: 6142 if(IsInvertSoftKey) \ ??LoadOnKey_2: \ 000000B0 00005EE3 CMP LR,#+0 \ 000000B4 0C00000A BEQ ??LoadOnKey_3 6143 { 6144 if(ShowLoadScreen && (cltop || sock==-1)) ShowLoadScreen=0;//показывть контакт лист \ ??LoadOnKey_4: \ 000000B8 000053E3 CMP R3,#+0 \ 000000BC 3E00000A BEQ ??LoadOnKey_1 \ 000000C0 A40394E5 LDR R0,[R4, #+932] \ 000000C4 000050E3 CMP R0,#+0 \ 000000C8 0100001A BNE ??LoadOnKey_5 \ 000000CC 08005CE1 CMP R12,R8 \ 000000D0 3900001A BNE ??LoadOnKey_1 \ ??LoadOnKey_5: \ 000000D4 E0A384E5 STR R10,[R4, #+992] \ 000000D8 170000EA B ??LoadOnKey_6 6145 //if (cltop || sock==-1) CreateCL();//create_contactlist_menu(); 6146 //unhooked2=1; 6147 } 6148 else// return 1; 6149 { 6150 if(ShowLoadScreen) 6151 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 6152 else 6153 ShowLoadScreen=1; \ ??LoadOnKey_7: \ 000000DC E09384E5 STR R9,[R4, #+992] \ 000000E0 150000EA B ??LoadOnKey_6 6154 } 6155 // if (cltop) remake_clmenu(); 6156 break; 6157 case RIGHT_SOFT: 6158 if(IsInvertSoftKey) \ ??LoadOnKey_8: \ 000000E4 00005EE3 CMP LR,#+0 \ 000000E8 F2FFFF0A BEQ ??LoadOnKey_4 \ ??LoadOnKey_3: \ 000000EC 000053E3 CMP R3,#+0 \ 000000F0 F9FFFF0A BEQ ??LoadOnKey_7 \ 000000F4 0100A0E3 MOV R0,#+1 \ 000000F8 FE8FBDE8 POP {R1-R11,PC} 6159 { 6160 if(ShowLoadScreen) 6161 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 6162 else 6163 ShowLoadScreen=1; 6164 } 6165 else 6166 { 6167 if(ShowLoadScreen && (cltop || sock==-1)) ShowLoadScreen=0;//показывть контакт лист 6168 // if (cltop || sock==-1)CreateCL(); //create_contactlist_menu(); 6169 // unhooked2=1; 6170 } 6171 break; 6172 case GREEN_BUTTON: 6173 disautorecconect=0; \ ??LoadOnKey_9: \ 000000FC 58A384E5 STR R10,[R4, #+856] 6174 if ((connect_state==0)&&(sock==-1)) \ 00000100 7C0394E5 LDR R0,[R4, #+892] \ 00000104 000050E3 CMP R0,#+0 \ 00000108 08005C01 CMPEQ R12,R8 \ 0000010C 2A00001A BNE ??LoadOnKey_1 6175 { 6176 GBS_DelTimer(&reconnect_tmr); \ 00000110 040000EA B ??LoadOnKey_10 6177 DNR_TRIES=3; 6178 SUBPROC((void *)create_connect); 6179 } 6180 break; 6181 case RED_BUTTON: 6182 // extern volatile int disautorecconect; 6183 disautorecconect=1; \ ??LoadOnKey_11: \ 00000114 589384E5 STR R9,[R4, #+856] 6184 // extern void end_socket(void); 6185 SUBPROC((void*)end_socket); \ 00000118 0100A0E1 MOV R0,R1 \ 0000011C 050000EA B ??LoadOnKey_12 6186 break; 6187 case '0': 6188 SUBPROC((void*)end_socket); \ ??LoadOnKey_13: \ 00000120 0100A0E1 MOV R0,R1 \ 00000124 710100EF SWI +369 6189 GBS_DelTimer(&reconnect_tmr); \ ??LoadOnKey_10: \ 00000128 0600A0E1 MOV R0,R6 \ 0000012C 8C0100EF SWI +396 6190 DNR_TRIES=3; \ 00000130 E87384E5 STR R7,[R4, #+1000] 6191 SUBPROC((void *)create_connect); \ 00000134 0500A0E1 MOV R0,R5 \ ??LoadOnKey_12: \ 00000138 710100EF SWI +369 \ ??LoadOnKey_6: \ 0000013C 0000A0E3 MOV R0,#+0 \ 00000140 FE8FBDE8 POP {R1-R11,PC} 6192 break; 6193 6194 //------------------------------------------------------// 6195 6196 case '1': 6197 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??LoadOnKey_14: \ 00000144 5C1394E5 LDR R1,[R4, #+860] \ 00000148 000051E3 CMP R1,#+0 \ 0000014C 0090A013 MOVNE R9,#+0 \ 00000150 5C9384E5 STR R9,[R4, #+860] 6198 SUBPROC((void*)WriteDefSettings); \ 00000154 F7FFFFEA B ??LoadOnKey_12 6199 break; 6200 case '2': 6201 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??LoadOnKey_15: \ 00000158 101394E5 LDR R1,[R4, #+784] \ 0000015C 000051E3 CMP R1,#+0 \ 00000160 0090A013 MOVNE R9,#+0 \ 00000164 109384E5 STR R9,[R4, #+784] 6202 SUBPROC((void*)WriteDefSettings); \ 00000168 F2FFFFEA B ??LoadOnKey_12 6203 break; 6204 case '3': 6205 if(CurrentPrivateStatus!=1) \ ??LoadOnKey_16: \ 0000016C 680394E5 LDR R0,[R4, #+872] \ 00000170 010050E3 CMP R0,#+1 \ 00000174 0300A003 MOVEQ R0,#+3 6206 SetPrivateStatus(1);//Инвиз \ 00000178 0100A013 MOVNE R0,#+1 \ 0000017C ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA \ 00000180 EDFFFFEA B ??LoadOnKey_6 6207 else 6208 SetPrivateStatus(3); 6209 break; 6210 case '4': 6211 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??LoadOnKey_17: \ 00000184 F81294E5 LDR R1,[R4, #+760] \ 00000188 000051E3 CMP R1,#+0 \ 0000018C 0090A013 MOVNE R9,#+0 \ 00000190 F89284E5 STR R9,[R4, #+760] 6212 SUBPROC((void*)WriteDefSettings); \ 00000194 E7FFFFEA B ??LoadOnKey_12 6213 break; 6214 case '5': LINE_MODE=!LINE_MODE; break; \ ??LoadOnKey_18: \ 00000198 D80394E5 LDR R0,[R4, #+984] \ 0000019C 000050E3 CMP R0,#+0 \ 000001A0 0090A013 MOVNE R9,#+0 \ 000001A4 D89384E5 STR R9,[R4, #+984] \ 000001A8 E3FFFFEA B ??LoadOnKey_6 6215 case '6': VIEW_MODE=!VIEW_MODE; break; \ ??LoadOnKey_19: \ 000001AC DC0394E5 LDR R0,[R4, #+988] \ 000001B0 000050E3 CMP R0,#+0 \ 000001B4 0090A013 MOVNE R9,#+0 \ 000001B8 DC9384E5 STR R9,[R4, #+988] 6216 } 6217 } 6218 return 0; \ ??LoadOnKey_1: \ 000001BC 0000A0E3 MOV R0,#+0 \ 000001C0 FE8FBDE8 POP {R1-R11,PC} ;; return 6219 } 6220 6221 \ In segment CODE, align 4, keep-with-next 6222 int method5(MAIN_GUI *data,GUI_MSG *msg) 6223 { \ method5: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0140A0E1 MOV R4,R1 6224 DirectRedrawGUI(); \ 00000008 3F0100EF SWI +319 6225 if(ShowLoadScreen) \ 0000000C 20009FE5 LDR R0,??method5_0 ;; icons + 992 \ 00000010 000090E5 LDR R0,[R0, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0400A0E1 MOV R0,R4 \ 0000001C 0100000A BEQ ??method5_1 6226 return LoadOnKey(msg); \ 00000020 1040BDE8 POP {R4,LR} ;; Pop \ 00000024 ........ B LoadOnKey ;; tailcall 6227 else 6228 ClOnKey(msg); \ ??method5_1: \ 00000028 ........ BL ClOnKey 6229 /* 6230 if(msg->gbsmsg->msg==LONG_PRESS || msg->gbsmsg->msg==KEY_DOWN) 6231 { 6232 switch(msg->gbsmsg->submess) 6233 { 6234 case UP_BUTTON: MoveUp(); break; 6235 case DOWN_BUTTON: MoveDown(); break; 6236 } 6237 }*/ 6238 6239 return(0); \ 0000002C 0000A0E3 MOV R0,#+0 \ 00000030 1080BDE8 POP {R4,PC} ;; return \ ??method5_0: \ 00000034 ........ DC32 icons + 992 6240 } 6241 \ In segment CODE, align 4, keep-with-next 6242 int method8(void){return(0);} \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return \ In segment CODE, align 4, keep-with-next 6243 int method9(void){return(0);} \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 6244 6245 6246 6247 const void * const gui_methods[11]={ 6248 (void *)method0, //Redraw 6249 (void *)method1, //Create 6250 (void *)method2, //Close 6251 (void *)method3, //Focus 6252 (void *)method4, //Unfocus 6253 (void *)method5, //OnKey 6254 0, 6255 (void *)kill_data, //method7, //Destroy 6256 (void *)method8, 6257 (void *)method9, 6258 0 6259 }; 6260 6261 6262 6263 int checkGui(int id); 6264 #define idlegui_id(icsm) (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 6265 \ In segment CODE, align 4, keep-with-next 6266 int my_keyhook(int key, int m) 6267 { \ my_keyhook: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0050A0E1 MOV R5,R0 6268 if(m==KEY_DOWN) \ 00000008 9300A0E3 MOV R0,#+147 \ 0000000C 400F80E3 ORR R0,R0,#0x100 \ 00000010 000051E1 CMP R1,R0 \ 00000014 2200001A BNE ??my_keyhook_0 6269 { 6270 #ifdef ELKA 6271 if ((key==CAMERA_BUTTON)&&(!IsUnlocked())) \ 00000018 ........ LDR R4,??DataTable214 ;; icons \ 0000001C 140055E3 CMP R5,#+20 \ 00000020 0F00001A BNE ??my_keyhook_1 \ 00000024 430000EF SWI +67 \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 0C00001A BNE ??my_keyhook_1 6272 { 6273 GBS_StopTimer(&away_tmr); \ 00000030 B800A0E3 MOV R0,#+184 \ 00000034 600D80E3 ORR R0,R0,#0x1800 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 440100EF SWI +324 6274 msg_away_timer=AUTO_ENGADE*12; \ 00000040 ........ LDR R0,??DataTable203 ;; AUTO_ENGADE \ 00000044 0C10A0E3 MOV R1,#+12 \ 00000048 000090E5 LDR R0,[R0, #+0] \ 0000004C 910000E0 MUL R0,R1,R0 \ 00000050 280384E5 STR R0,[R4, #+808] 6275 away_timer(); \ 00000054 ........ BL away_timer 6276 main_d=1; \ 00000058 0100A0E3 MOV R0,#+1 \ 0000005C C80284E5 STR R0,[R4, #+712] \ 00000060 0D0000EA B ??my_keyhook_2 6277 } 6278 else 6279 { 6280 #endif 6281 if(Reset_timer) \ ??my_keyhook_1: \ 00000064 84009FE5 LDR R0,??my_keyhook_3 ;; Reset_timer \ 00000068 000090E5 LDR R0,[R0, #+0] \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 3080BD08 POPEQ {R4,R5,PC} 6282 { 6283 msg_away_timer=0; 6284 away_m=0; 6285 if(change_back_status) \ 00000074 340394E5 LDR R0,[R4, #+820] \ 00000078 0050A0E3 MOV R5,#+0 \ 0000007C 285384E5 STR R5,[R4, #+808] \ 00000080 2C5384E5 STR R5,[R4, #+812] \ 00000084 000050E3 CMP R0,#+0 \ 00000088 3080BD08 POPEQ {R4,R5,PC} 6286 { 6287 CurrentStatus=status_rem; \ 0000008C 300394E5 LDR R0,[R4, #+816] \ 00000090 180384E5 STR R0,[R4, #+792] 6288 set_my_status(); \ 00000094 ........ BL set_my_status 6289 change_back_status=0; \ 00000098 345384E5 STR R5,[R4, #+820] \ ??my_keyhook_2: \ 0000009C 0000A0E3 MOV R0,#+0 \ 000000A0 3080BDE8 POP {R4,R5,PC} 6290 } 6291 } 6292 #ifdef ELKA 6293 } 6294 #endif 6295 } 6296 6297 void *icsm; 6298 if(m==LONG_PRESS) \ ??my_keyhook_0: \ 000000A4 020080E2 ADD R0,R0,#+2 \ 000000A8 000051E1 CMP R1,R0 \ 000000AC 0D00001A BNE ??my_keyhook_4 6299 { 6300 icsm=FindCSMbyID(CSM_root()->idle_id); \ 000000B0 068100EF SWI +33030 \ 000000B4 040090E5 LDR R0,[R0, #+4] \ 000000B8 080100EF SWI +264 \ 000000BC 0040A0E1 MOV R4,R0 6301 if(key==VOL_DOWN_BUTTON && IsUnlocked() && !(checkGui(idlegui_id(icsm))) ) \ 000000C0 0E0055E3 CMP R5,#+14 \ 000000C4 0700001A BNE ??my_keyhook_4 \ 000000C8 430000EF SWI +67 \ 000000CC 000050E3 CMP R0,#+0 \ 000000D0 3080BD08 POPEQ {R4,R5,PC} \ 000000D4 2C0094E5 LDR R0,[R4, #+44] \ 000000D8 ........ BL checkGui \ 000000DC 000050E3 CMP R0,#+0 \ 000000E0 0000001A BNE ??my_keyhook_4 6302 { 6303 to_develop(); \ 000000E4 ........ BL to_develop 6304 } 6305 } 6306 return 0; \ ??my_keyhook_4: \ 000000E8 0000A0E3 MOV R0,#+0 \ 000000EC 3080BDE8 POP {R4,R5,PC} ;; return \ ??my_keyhook_3: \ 000000F0 ........ DC32 Reset_timer 6307 } \ In segment DATA_C, align 4, align-sorted 6308 /* 6309 int mode_enter; 6310 int mode; 6311 6312 int my_keyhook(int submsg, int msg) 6313 { 6314 if(Reset_timer) 6315 { 6316 msg_away_timer=0; 6317 away_m=0; 6318 if(change_back_status) 6319 { 6320 CurrentStatus=status_rem; 6321 set_my_status(); 6322 change_back_status=0; 6323 } 6324 } 6325 if (submsg!=VOL_DOWN_BUTTON) return(0); 6326 switch(msg) 6327 { 6328 case KEY_DOWN: 6329 if (mode_enter==2) 6330 { 6331 GBS_SendMessage(MMI_CEPID,KEY_UP,VOL_DOWN_BUTTON); 6332 return (0); 6333 } 6334 mode_enter=0; 6335 return (2); 6336 case KEY_UP: 6337 if (mode==1)mode=0; 6338 if (mode_enter==0) 6339 { 6340 mode_enter=2; 6341 GBS_SendMessage(MMI_CEPID,KEY_DOWN,VOL_DOWN_BUTTON); 6342 return (2); 6343 } 6344 if (mode_enter==2) 6345 { 6346 mode_enter=0; 6347 return (0); 6348 } 6349 mode_enter=0; 6350 return (2); 6351 case LONG_PRESS: 6352 mode_enter=1; 6353 if(mode==0) 6354 { 6355 void *icsm; 6356 icsm=FindCSMbyID(CSM_root()->idle_id); 6357 if(!(checkGui(idlegui_id(icsm))) && IsUnlocked()) 6358 { 6359 to_develop(); 6360 } 6361 } 6362 mode=1; 6363 break; 6364 } 6365 return(2); 6366 }*/ 6367 const RECT Canvas={0,0,0,0}; \ Canvas: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ percent_s: \ 00000008 257300 DC8 "%s" \ percent_d: \ 0000000B 256400 DC8 "%d" \ 0000000E 0000 DC8 0, 0 \ 00000010 536F756E6420 DC8 "Sound 0n" \ 306E00 \ 00000019 000000 DC8 0, 0, 0 \ 0000001C 536F756E6420 DC8 "Sound Off" \ 4F666600 \ 00000026 0000 DC8 0, 0 \ 00000028 566962726120 DC8 "Vibra On" \ 4F6E00 \ 00000031 000000 DC8 0, 0, 0 \ 00000034 566962726120 DC8 "Vibra Off" \ 4F666600 \ 0000003E 0000 DC8 0, 0 \ 00000040 C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\352\353\376\367\345\355" \ E2EAEBFEF7E5 \ ED00 \ 0000004E 0000 DC8 0, 0 \ 00000050 C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\373\352\353\376\367\345\355" \ E2FBEAEBFEF7 \ E5ED00 \ 0000005F 00 DC8 0 \ 00000060 566962726120 DC8 "Vibra rem On" \ 72656D204F6E \ 00 \ 0000006D 000000 DC8 0, 0, 0 \ 00000070 566962726120 DC8 "Vibra rem Off" \ 72656D204F66 \ 6600 \ 0000007E 0000 DC8 0, 0 \ 00000080 416C6C206368 DC8 "All chat clear!" \ 617420636C65 \ 61722100 \ 00000090 44656661756C DC8 "Default show x-status" \ 742073686F77 \ 20782D737461 \ 74757300 \ 000000A6 0000 DC8 0, 0 \ 000000A8 44656661756C DC8 "Default show time" \ 742073686F77 \ 2074696D6500 \ 000000BA 0000 DC8 0, 0 \ 000000BC 2825642F2564 DC8 "(%d/%d)" \ 2900 \ 000000C4 257325632563 DC8 "%s%c%c(%d/%d)" \ 2825642F2564 \ 2900 \ 000000D2 0000 DC8 0, 0 \ 000000D4 57616974696E DC8 "Waiting for GPRS up..." \ 6720666F7220 \ 475052532075 \ 702E2E2E00 \ 000000EB 00 DC8 0 \ 000000EC 436F6E6E6563 DC8 "Connect to %s:%d" \ 7420746F2025 \ 733A256400 \ 000000FD 000000 DC8 0, 0, 0 \ 00000100 0A436F6E6E65 DC8 "\012Connect by IP!" \ 637420627920 \ 49502100 \ 00000110 53656E642044 DC8 "Send DNR..." \ 4E522E2E2E00 \ 0000011C 444E52204552 DC8 "DNR ERROR %d!" \ 524F52202564 \ 2100 \ 0000012A 0000 DC8 0, 0 \ 0000012C 444E52204F6B DC8 "DNR Ok, connecting..." \ 2C20636F6E6E \ 656374696E67 \ 2E2E2E00 \ 00000142 0000 DC8 0, 0 \ 00000144 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 \ 0000015D 000000 DC8 0, 0, 0 \ 00000160 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 \ 0000018B 00 DC8 0 \ 0000018C D1E5F0E2E5F0 DC8 "\321\345\360\342\345\360 \355\345 \355\340\351\344\345\355!" \ 20EDE520EDE0 \ E9E4E5ED2100 \ 0000019E 0000 DC8 0, 0 \ 000001A0 426164207061 DC8 "Bad packet" \ 636B657400 \ 000001AB 00 DC8 0 \ 000001AC 534325643A20 DC8 "SC%d: %04X" \ 2530345800 \ 000001B7 00 DC8 0 \ 000001B8 4552523A2025 DC8 "ERR: %s" \ 7300 \ 000001C0 75696E256400 DC8 "uin%d" \ 000001C6 0000 DC8 0, 0 \ 000001C8 4D534725643A DC8 "MSG%d: %s" \ 20257300 \ 000001D2 0000 DC8 0, 0 \ 000001D4 257325642E77 DC8 "%s%d.wav" \ 617600 \ 000001DD 000000 DC8 0, 0, 0 \ 000001E0 50696E672025 DC8 "Ping %d-%d seconds!" \ 642D25642073 \ 65636F6E6473 \ 2100 \ 000001F4 50696E673A20 DC8 "Ping: %d sec" \ 256420736563 \ 00 \ 00000201 000000 DC8 0, 0, 0 \ 00000204 2025733A2025 DC8 " %s: %02d:%02d:%02d" \ 3032643A2530 \ 32643A253032 \ 6400 \ 00000218 537461747573 DC8 "Status change" \ 206368616E67 \ 6500 \ 00000226 0000 DC8 0, 0 \ 00000228 5B25733A2025 DC8 "[%s: %s]\012" \ 735D0A00 \ 00000232 0000 DC8 0, 0 \ 00000234 4675636B2079 DC8 "Fuck you hacker! my password sux ur ass" \ 6F7520686163 \ 6B657221206D \ 792070617373 \ 776F72642073 \ 757820757220 \ 61737300 \ 0000025C 556E72656164 DC8 "Unread: %d" \ 3A20256400 \ 00000267 00 DC8 0 \ 00000268 4E6174494351 DC8 "NatICQ config updated!" \ 20636F6E6669 \ 672075706461 \ 7465642100 \ 0000027F 00 DC8 0 \ 00000280 257332323430 DC8 "%s2240.png" \ 2E706E6700 \ 0000028B 00 DC8 0 \ 0000028C 475052532075 DC8 "GPRS up, wait 10 sec..." \ 702C20776169 \ 742031302073 \ 65632E2E2E00 \ 000002A4 54727920746F DC8 "Try to login..." \ 206C6F67696E \ 2E2E2E00 \ 000002B4 CDE520E220F1 DC8 "\315\345 \342 \361\357\350\361\352\345" \ EFE8F1EAE500 \ 000002C0 4C6F6F706261 DC8 "Loopback" \ 636B00 \ 000002C9 000000 DC8 0, 0, 0 \ 000002CC 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 \ 000002F4 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 \ 00000316 0000 DC8 0, 0 \ 00000318 446973636F6E DC8 "Disconnected, %d bytes not sended!" \ 6E6563746564 \ 2C2025642062 \ 79746573206E \ 6F742073656E \ 6465642100 \ 0000033B 00 DC8 0 \ 0000033C 25730A526563 DC8 "%s\012Reconect after %d second..." \ 6F6E65637420 \ 616674657220 \ 256420736563 \ 6F6E642E2E2E \ 00 \ 0000035B 00 DC8 0 \ 0000035C 50696E67204E DC8 "Ping None" \ 6F6E6500 \ 00000366 0000 DC8 0, 0 \ 00000368 C2E2E5E4E8F2 DC8 "\302\342\345\344\350\362\345 UIN/\357\340\360\356\353\374!" \ E52055494E2F \ EFE0F0EEEBFC \ 2100 \ ipc_my_name: \ 0000037C 4E6174494351 DC8 "NatICQ" \ 00 \ 00000383 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000393 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000 \ ipc_xtask_name: \ 0000039C 585461736B00 DC8 "XTask" \ 000003A2 0000 DC8 0, 0 \ x_status_change: \ 000003A4 582D53746174 DC8 "X-Status change" \ 757320636861 \ 6E676500 \ clrSelect: \ 000003B4 FF000020 DC8 255, 0, 0, 32 \ bordSelect: \ 000003B8 00000060 DC8 0, 0, 0, 96 \ gui_methods: \ 000003BC ............ DC32 method0, method1, method2, method3, method4, method5, 0H \ ............ \ ............ \ ............ \ 00000000 \ 000003D8 ............ 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 `?`, `?` \ .... \ 00000070 343A5C5A4269 DC8 "4:\\ZBin\\NatICQ\\img2" \ 6E5C4E617449 \ 43515C696D67 \ 3200 \ In segment DATA_C, align 4, align-sorted \ input_awaymsg_desc: \ 00000000 01000000.... DC32 1, input_awaymsg_onkey, input_awaymsg_ghook, input_awaymsg_locret \ ............ \ ........ \ 00000010 00000000.... DC32 0, input_awaymsg_skt \ .... \ 00000018 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000020 080000006400 DC32 8, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ 00000038 D1EEEEE1F9E5 DC8 "\321\356\356\341\371\345\355\350\345:\012" \ EDE8E53A0A00 \ input_awaymsg_hdr: \ 00000044 000000008300 DC16 0, 0, 131, 21 \ 1500 \ 0000004C 00000000.... DC32 0H, `?` \ 00000004 ........ DC32 `?` \ 00000008 ........ DC32 `?_1`: \ 00000000 FF000015 DC8 255, 0, 0, 21 \ 00000004 3C4300 DC8 "` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ menu_skt: \ 00000000 ........0000 DC32 menu_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 \ fntSelect: \ 00000000 FFFF0060 DC8 255, 255, 0, 96 \ In segment DATA_C, align 4, align-sorted \ clrNotSelect: \ 00000000 00000000 DC8 0, 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ bordNotSelect: \ 00000000 00000000 DC8 0, 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ fntNotSelect: \ 00000000 FFFFFF60 DC8 255, 255, 255, 96 \ In segment DATA_C, align 4, align-sorted \ clfont: \ 00000000 6C000000 DC32 108 \ In segment DATA_C, align 1, align-sorted \ _t: \ 00000000 257400 DC8 "%t" \ In segment DATA_C, align 1, align-sorted \ _d: \ 00000000 256400 DC8 "%d" \ 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 6368 \ In segment CODE, align 4, keep-with-next 6369 void maincsm_oncreate(CSM_RAM *data) 6370 { \ maincsm_oncreate: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0050A0E1 MOV R5,R0 6371 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000008 4000A0E3 MOV R0,#+64 6372 MAIN_CSM*csm=(MAIN_CSM*)data; 6373 zeromem(main_gui,sizeof(MAIN_GUI)); 6374 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 D4409FE5 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] 6375 main_gui->gui.canvas=(void *)(&Canvas); \ 00000044 004086E5 STR R4,[R6, #+0] 6376 // main_gui->gui.flag30=2; 6377 main_gui->gui.methods=(void *)gui_methods; \ 00000048 EF0F84E2 ADD R0,R4,#+956 \ 0000004C 040086E5 STR R0,[R6, #+4] 6378 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 00000050 158000EF SWI +32789 \ 00000054 200086E5 STR R0,[R6, #+32] 6379 csm->csm.state=0; \ 00000058 107085E5 STR R7,[R5, #+16] 6380 csm->csm.unk1=0; \ 0000005C 147085E5 STR R7,[R5, #+20] 6381 maingui_id=csm->gui_id=CreateGUI(main_gui); \ 00000060 0600A0E1 MOV R0,R6 \ 00000064 370100EF SWI +311 \ 00000068 280085E5 STR R0,[R5, #+40] \ 0000006C ........ LDR R5,??DataTable214 ;; icons \ 00000070 040385E5 STR R0,[R5, #+772] 6382 ews=AllocWS(16384); \ 00000074 400CA0E3 MOV R0,#+16384 \ 00000078 250100EF SWI +293 \ 0000007C 200385E5 STR R0,[R5, #+800] 6383 // MutexCreate(&contactlist_mtx); 6384 DNR_TRIES=3; \ 00000080 0300A0E3 MOV R0,#+3 \ 00000084 E80385E5 STR R0,[R5, #+1000] 6385 // SUBPROC((void *)InitSmiles); 6386 // SUBPROC((void *)create_connect); 6387 wsBuffer=AllocWS(4096); \ 00000088 400DA0E3 MOV R0,#+4096 \ 0000008C 250100EF SWI +293 \ 00000090 D80285E5 STR R0,[R5, #+728] 6388 OneSecTmr(); \ 00000094 ........ BL OneSecTmr 6389 /* 6390 if(ParseUINS()!=0) 6391 { 6392 USE_ADD_UIN=1; 6393 InitXStatusesImg(); 6394 }*/ 6395 6396 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000098 ........ LDR R2,??DataTable205 ;; process_active_timer \ 0000009C 871EA0E3 MOV R1,#+2160 \ 000000A0 C800A0E3 MOV R0,#+200 \ 000000A4 680D80E3 ORR R0,R0,#0x1A00 \ 000000A8 050080E0 ADD R0,R0,R5 \ 000000AC 4D0000EF SWI +77 6397 6398 // if(!USE_ADD_UIN) 6399 // { 6400 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000000B0 ........ LDR R0,??DataTable206 ;; UIN \ 000000B4 0B1084E2 ADD R1,R4,#+11 \ 000000B8 002090E5 LDR R2,[R0, #+0] \ 000000BC 8200A0E3 MOV R0,#+130 \ 000000C0 C00F80E3 ORR R0,R0,#0x300 \ 000000C4 040080E0 ADD R0,R0,R4 \ 000000C8 160000EF SWI +22 6401 gipc.name_to=ipc_my_name; \ 000000CC 4B0FA0E3 MOV R0,#+300 \ 000000D0 DF1FA0E3 MOV R1,#+892 \ 000000D4 042081E0 ADD R2,R1,R4 \ 000000D8 052080E7 STR R2,[R0, +R5] 6402 gipc.name_from=ipc_my_name; \ 000000DC 041081E0 ADD R1,R1,R4 \ 000000E0 301185E5 STR R1,[R5, #+304] 6403 gipc.data=(void *)-1; \ 000000E4 0710E0E1 MVN R1,R7 \ 000000E8 341185E5 STR R1,[R5, #+308] 6404 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 000000EC 053080E0 ADD R3,R0,R5 \ 000000F0 0120A0E3 MOV R2,#+1 \ 000000F4 B010A0E3 MOV R1,#+176 \ 000000F8 DE1C81E3 ORR R1,R1,#0xDE00 \ 000000FC 0900A0E3 MOV R0,#+9 \ 00000100 420C80E3 ORR R0,R0,#0x4200 \ 00000104 000100EF SWI +256 6405 //} 6406 /* 6407 InitXStatusesImg(); 6408 //InitSmiles(); Это вызовется из InitXStatusesImg 6409 create_connect(); 6410 silenthide=1; 6411 gipc.name_to=ipc_xtask_name; 6412 gipc.name_from=ipc_my_name; 6413 gipc.data=0; 6414 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); 6415 */ 6416 } \ 00000108 F080BDE8 POP {R4-R7,PC} ;; return \ ??maincsm_oncreate_0: \ 0000010C ........ DC32 Canvas 6417 \ In segment CODE, align 4, keep-with-next 6418 void maincsm_onclose(CSM_RAM *csm) 6419 { \ maincsm_onclose: \ 00000000 10402DE9 PUSH {R4,LR} 6420 WriteDefSettings(); 6421 FreeWS(wsBuffer); \ 00000004 ........ LDR R4,??DataTable214 ;; icons \ 00000008 ........ BL WriteDefSettings \ 0000000C D80294E5 LDR R0,[R4, #+728] \ 00000010 290100EF SWI +297 6422 //GBS_DelTimer(&tmr_dorecv); 6423 RemoveKeybMsgHook((void *)my_keyhook); \ 00000014 ........ LDR R0,??DataTable208 ;; my_keyhook \ 00000018 2D0100EF SWI +301 6424 GBS_DelTimer(&tmr_active); \ 0000001C C800A0E3 MOV R0,#+200 \ 00000020 680D80E3 ORR R0,R0,#0x1A00 \ 00000024 040080E0 ADD R0,R0,R4 \ 00000028 8C0100EF SWI +396 6425 GBS_DelTimer(&tmr_vibra); \ 0000002C A800A0E3 MOV R0,#+168 \ 00000030 680D80E3 ORR R0,R0,#0x1A00 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 8C0100EF SWI +396 6426 GBS_DelTimer(&reconnect_tmr); \ 0000003C B800A0E3 MOV R0,#+184 \ 00000040 680D80E3 ORR R0,R0,#0x1A00 \ 00000044 040080E0 ADD R0,R0,R4 \ 00000048 8C0100EF SWI +396 6427 GBS_DelTimer(&tmr_illumination); \ 0000004C 9800A0E3 MOV R0,#+152 \ 00000050 680D80E3 ORR R0,R0,#0x1A00 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 8C0100EF SWI +396 6428 GBS_DelTimer(&tm22); \ 0000005C 7400A0E3 MOV R0,#+116 \ 00000060 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000064 040080E0 ADD R0,R0,R4 \ 00000068 8C0100EF SWI +396 6429 #ifdef ELKA 6430 GBS_DelTimer(&sli_tmr); \ 0000006C 8800A0E3 MOV R0,#+136 \ 00000070 640D80E3 ORR R0,R0,#0x1900 \ 00000074 040080E0 ADD R0,R0,R4 \ 00000078 8C0100EF SWI +396 6431 #endif 6432 GBS_DelTimer(&remind_tmr); \ 0000007C D800A0E3 MOV R0,#+216 \ 00000080 600D80E3 ORR R0,R0,#0x1800 \ 00000084 040080E0 ADD R0,R0,R4 \ 00000088 8C0100EF SWI +396 6433 GBS_DelTimer(&ping_tmr); \ 0000008C 3000A0E3 MOV R0,#+48 \ 00000090 580D80E3 ORR R0,R0,#0x1600 \ 00000094 040080E0 ADD R0,R0,R4 \ 00000098 8C0100EF SWI +396 6434 GBS_DelTimer(&uptime_tmr); \ 0000009C E800A0E3 MOV R0,#+232 \ 000000A0 600D80E3 ORR R0,R0,#0x1800 \ 000000A4 040080E0 ADD R0,R0,R4 \ 000000A8 8C0100EF SWI +396 6435 GBS_DelTimer(&autoChangeStatus); \ 000000AC C800A0E3 MOV R0,#+200 \ 000000B0 600D80E3 ORR R0,R0,#0x1800 \ 000000B4 040080E0 ADD R0,R0,R4 \ 000000B8 8C0100EF SWI +396 6436 #ifdef NEWSGOLD 6437 GBS_DelTimer(&tracktmr); \ 000000BC F800A0E3 MOV R0,#+248 \ 000000C0 600D80E3 ORR R0,R0,#0x1800 \ 000000C4 040080E0 ADD R0,R0,R4 \ 000000C8 8C0100EF SWI +396 6438 GBS_DelTimer(&scrsTmr); \ 000000CC 5D0D84E2 ADD R0,R4,#+5952 \ 000000D0 8C0100EF SWI +396 6439 #endif 6440 GBS_DelTimer(&incs2); \ 000000D4 6400A0E3 MOV R0,#+100 \ 000000D8 7C0D80E3 ORR R0,R0,#0x1F00 \ 000000DC 040080E0 ADD R0,R0,R4 \ 000000E0 8C0100EF SWI +396 6441 GBS_DelTimer(&develop); \ 000000E4 7C00A0E3 MOV R0,#+124 \ 000000E8 740D80E3 ORR R0,R0,#0x1D00 \ 000000EC 040080E0 ADD R0,R0,R4 \ 000000F0 8C0100EF SWI +396 6442 GBS_DelTimer(&away_tmr); \ 000000F4 B800A0E3 MOV R0,#+184 \ 000000F8 600D80E3 ORR R0,R0,#0x1800 \ 000000FC 040080E0 ADD R0,R0,R4 \ 00000100 8C0100EF SWI +396 6443 SetVibration(0); \ 00000104 0000A0E3 MOV R0,#+0 \ 00000108 7C0000EF SWI +124 6444 FreeTemplates(); \ 0000010C ........ BL FreeTemplates 6445 cmdFree(); \ 00000110 ........ BL cmdFree 6446 #ifdef kluchnik 6447 FreeBotMessage(); 6448 #endif 6449 FreeCLIST(); \ 00000114 ........ _BLF FreeCLIST,??FreeCLIST??rA 6450 free_ICONS(); \ 00000118 ........ BL free_ICONS 6451 // FreeSmiles(); 6452 FreeWS(ews); \ 0000011C 200394E5 LDR R0,[R4, #+800] \ 00000120 290100EF SWI +297 6453 FreeXStatusText(); \ 00000124 ........ _BLF FreeXStatusText,??FreeXStatusText??rA 6454 PrintLibFree(); \ 00000128 ........ _BLF PrintLibFree,??PrintLibFree??rA 6455 SUBPROC((void *)FreeSmiles); \ 0000012C 24009FE5 LDR R0,??maincsm_onclose_0 ;; FreeSmiles \ 00000130 710100EF SWI +369 6456 SUBPROC((void *)FreeXStatusesImg); \ 00000134 20009FE5 LDR R0,??maincsm_onclose_0+0x4 ;; FreeXStatusesImg \ 00000138 710100EF SWI +369 6457 SUBPROC((void *)end_socket); \ 0000013C ........ LDR R0,??DataTable209 ;; end_socket \ 00000140 710100EF SWI +369 6458 SUBPROC((void *)ClearSendQ); \ 00000144 ........ LDR R0,??DataTable236 ;; ClearSendQ \ 00000148 710100EF SWI +369 6459 SUBPROC((void *)ElfKiller); \ 0000014C ........ LDR R0,??DataTable211 ;; ElfKiller \ 00000150 710100EF SWI +369 6460 } \ 00000154 1080BDE8 POP {R4,PC} ;; return \ ??maincsm_onclose_0: \ 00000158 ........ DC32 FreeSmiles \ 0000015C ........ DC32 FreeXStatusesImg 6461 \ In segment CODE, align 4, keep-with-next 6462 void do_reconnect(void) 6463 { 6464 if (is_gprs_online) \ do_reconnect: \ 00000000 ........ LDR R0,??DataTable214 ;; icons \ 00000004 00402DE9 PUSH {LR} \ 00000008 9C1390E5 LDR R1,[R0, #+924] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 6465 { 6466 DNR_TRIES=3; \ 00000014 0310A0E3 MOV R1,#+3 \ 00000018 E81380E5 STR R1,[R0, #+1000] 6467 SUBPROC((void*)create_connect); \ 0000001C ........ LDR R0,??DataTable213 ;; create_connect \ 00000020 710100EF SWI +369 6468 } 6469 } \ 00000024 0080BDE8 POP {PC} ;; return 6470 \ In segment CODE, align 4, keep-with-next 6471 void CheckDoubleRun(void) 6472 { \ CheckDoubleRun: \ 00000000 10402DE9 PUSH {R4,LR} 6473 int csm_id; 6474 if ((csm_id=(int)(gipc.data))!=-1) \ 00000004 ........ LDR R4,??DataTable214 ;; icons \ 00000008 4D0FA0E3 MOV R0,#+308 \ 0000000C 041090E7 LDR R1,[R0, +R4] \ 00000010 010071E3 CMN R1,#+1 \ 00000014 1200000A BEQ ??CheckDoubleRun_0 6475 { 6476 gipc.name_to=ipc_xtask_name; \ 00000018 ........ LDR R3,??DataTable217 ;; Canvas \ 0000001C 4B2FA0E3 MOV R2,#+300 \ 00000020 E7CF83E2 ADD R12,R3,#+924 \ 00000024 04C082E7 STR R12,[R2, +R4] 6477 gipc.name_from=ipc_my_name; \ 00000028 DF3F83E2 ADD R3,R3,#+892 \ 0000002C 303184E5 STR R3,[R4, #+304] 6478 gipc.data=(void *)csm_id; \ 00000030 041080E7 STR R1,[R0, +R4] 6479 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 00000034 043082E0 ADD R3,R2,R4 \ 00000038 0220A0E3 MOV R2,#+2 \ 0000003C B010A0E3 MOV R1,#+176 \ 00000040 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000044 0900A0E3 MOV R0,#+9 \ 00000048 420C80E3 ORR R0,R0,#0x4200 \ 0000004C 000100EF SWI +256 6480 LockSched(); \ 00000050 460100EF SWI +326 6481 CloseCSM(maincsm_id); \ 00000054 000394E5 LDR R0,[R4, #+768] \ 00000058 FC0100EF SWI +508 6482 //ShowMSG(1,(int)LG_ALREADY_STARTED); 6483 UnlockSched(); \ 0000005C 470100EF SWI +327 \ 00000060 1080BDE8 POP {R4,PC} 6484 } 6485 else 6486 // if(!USE_ADD_UIN) 6487 { 6488 InitXStatusesImg(); \ ??CheckDoubleRun_0: \ 00000064 ........ _BLF InitXStatusesImg,??InitXStatusesImg??rA 6489 //InitSmiles(); Это вызовется из InitXStatusesImg 6490 create_connect(); \ 00000068 ........ BL create_connect 6491 } 6492 /*else 6493 { 6494 InitXStatusesImg(); 6495 USE_ADD_UIN=1; 6496 }*/ 6497 6498 } \ 0000006C 1080BDE8 POP {R4,PC} ;; return 6499 6500 6501 6502 //------------------------------------------------------------// 6503 \ In segment CODE, align 4, keep-with-next 6504 int checkGui(int id) 6505 { \ checkGui: \ 00000000 10402DE9 PUSH {R4,LR} 6506 int retval = 0; \ 00000004 0040A0E3 MOV R4,#+0 6507 if (IsGuiOnTop(id)) \ 00000008 350100EF SWI +309 \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0600000A BEQ ??checkGui_0 6508 { 6509 GUI* igui = GetTopGUI(); 6510 if (igui) \ 00000014 4D0100EF SWI +333 \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 0300000A BEQ ??checkGui_0 6511 { 6512 #ifdef ELKA 6513 canvasdata = BuildCanvas(); \ 00000020 F18000EF SWI +33009 \ 00000024 0C109FE5 LDR R1,??checkGui_1 ;; icons + 720 6514 retval = 1; \ 00000028 0140A0E3 MOV R4,#+1 \ 0000002C 000081E5 STR R0,[R1, #+0] 6515 #else 6516 void *idata = GetDataOfItemByID(igui, 2); 6517 if (idata) 6518 { 6519 canvasdata = ((void **)idata)[DISPLACE_OF_IDLECANVAS / 4]; 6520 retval = 1; 6521 } 6522 #endif 6523 } 6524 } 6525 return retval; \ ??checkGui_0: \ 00000030 0400A0E1 MOV R0,R4 \ 00000034 1080BDE8 POP {R4,PC} ;; return \ ??checkGui_1: \ 00000038 ........ DC32 icons + 720 6526 } 6527 6528 6529 //-------------------------------------------------------------// 6530 #define IPC_GAME 7 6531 6532 typedef struct{ 6533 unsigned long uin; 6534 char *msg; 6535 }IPCmsg; 6536 \ In segment CODE, align 4, keep-with-next 6537 int maincsm_onmessage(CSM_RAM *data,GBS_MSG *msg) 6538 { \ maincsm_onmessage: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} 6539 6540 // char ss[100]; 6541 MAIN_CSM *csm=(MAIN_CSM*)data; 6542 { 6543 //IPC 6544 if (msg->msg==MSG_IPC) \ 00000004 ........ LDR R5,??DataTable238 ;; icons \ 00000008 20D04DE2 SUB SP,SP,#+32 \ 0000000C ........ LDR R7,??DataTable217 ;; Canvas \ 00000010 0140A0E1 MOV R4,R1 \ 00000014 E810A0E3 MOV R1,#+232 \ 00000018 681D81E3 ORR R1,R1,#0x1A00 \ 0000001C 051081E0 ADD R1,R1,R5 \ 00000020 00108DE5 STR R1,[SP, #+0] \ 00000024 040094E5 LDR R0,[R4, #+4] \ 00000028 0060A0E3 MOV R6,#+0 \ 0000002C B010A0E3 MOV R1,#+176 \ 00000030 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000034 010050E1 CMP R0,R1 \ 00000038 A700001A BNE ??maincsm_onmessage_2 6545 { 6546 IPC_REQ *ipc; 6547 if ((ipc=(IPC_REQ*)msg->data0)) \ 0000003C 0C8094E5 LDR R8,[R4, #+12] \ 00000040 000058E3 CMP R8,#+0 \ 00000044 A400000A BEQ ??maincsm_onmessage_2 6548 { 6549 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 00000048 000098E5 LDR R0,[R8, #+0] \ 0000004C DF9FA0E3 MOV R9,#+892 \ 00000050 071089E0 ADD R1,R9,R7 \ 00000054 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000058 000050E3 CMP R0,#+0 \ 0000005C 9E00001A BNE ??maincsm_onmessage_2 6550 { 6551 switch (msg->submess) \ 00000060 081094E5 LDR R1,[R4, #+8] \ 00000064 040098E5 LDR R0,[R8, #+4] \ 00000068 011041E2 SUB R1,R1,#+1 \ 0000006C 050051E3 CMP R1,#+5 \ 00000070 9900008A BHI ??maincsm_onmessage_2 \ 00000074 012F8FE2 ADR R2,??maincsm_onmessage_0 \ 00000078 0120D2E7 LDRB R2,[R2, R1] \ 0000007C 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_0: \ 00000080 010A1436 DC8 +1,+10,+20,+54 \ 00000084 73190000 DC8 +115,+25,+0,+0 6552 { 6553 case IPC_CHECK_DOUBLERUN: 6554 //Если приняли свое собственное сообщение, значит запускаем чекер 6555 if (ipc->name_from==ipc_my_name) SUBPROC((void *)CheckDoubleRun); \ ??maincsm_onmessage_3: \ 00000088 071089E0 ADD R1,R9,R7 \ 0000008C 010050E1 CMP R0,R1 \ 00000090 0200001A BNE ??maincsm_onmessage_4 \ 00000094 B40B9FE5 LDR R0,??maincsm_onmessage_5 ;; CheckDoubleRun \ 00000098 710100EF SWI +369 \ 0000009C 8E0000EA B ??maincsm_onmessage_2 6556 else ipc->data=(void *)maincsm_id; \ ??maincsm_onmessage_4: \ 000000A0 000395E5 LDR R0,[R5, #+768] \ 000000A4 080088E5 STR R0,[R8, #+8] \ 000000A8 8B0000EA B ??maincsm_onmessage_2 6557 break; 6558 case IPC_SMILE_PROCESSED: 6559 //Только собственные смайлы ;) 6560 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextSmile); \ ??maincsm_onmessage_6: \ 000000AC 071089E0 ADD R1,R9,R7 \ 000000B0 010050E1 CMP R0,R1 \ 000000B4 0100001A BNE ??maincsm_onmessage_7 \ 000000B8 940B9FE5 LDR R0,??maincsm_onmessage_5+0x4 ;; ProcessNextSmile \ ??maincsm_onmessage_8: \ 000000BC 710100EF SWI +369 6561 if(ShowLoadScreen) SMART_REDRAW(); \ ??maincsm_onmessage_7: \ 000000C0 E00395E5 LDR R0,[R5, #+992] \ ??maincsm_onmessage_9: \ 000000C4 000050E3 CMP R0,#+0 \ 000000C8 8300000A BEQ ??maincsm_onmessage_2 \ ??maincsm_onmessage_10: \ 000000CC ........ BL SMART_REDRAW \ 000000D0 810000EA B ??maincsm_onmessage_2 6562 break; 6563 case IPC_XSTATUSIMG_PROCESSED: 6564 //Только собственные иксстатусы ;) 6565 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextXStatImg); \ ??maincsm_onmessage_11: \ 000000D4 071089E0 ADD R1,R9,R7 \ 000000D8 010050E1 CMP R0,R1 \ 000000DC F7FFFF1A BNE ??maincsm_onmessage_7 \ 000000E0 700B9FE5 LDR R0,??maincsm_onmessage_5+0x8 ;; ProcessNextXStatImg \ 000000E4 F4FFFFEA B ??maincsm_onmessage_8 6566 if(ShowLoadScreen) SMART_REDRAW(); 6567 break; 6568 case IPC_ONESECOND: 6569 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_12: \ 000000E8 071089E0 ADD R1,R9,R7 \ 000000EC 010050E1 CMP R0,R1 \ 000000F0 7900001A BNE ??maincsm_onmessage_2 6570 { 6571 //if(!(--on_off_timer)) on_off_timer=0;//таймер показа подключившихся/отключившихся 6572 if(on_off_timer>0) \ 000000F4 B80395E5 LDR R0,[R5, #+952] \ 000000F8 010050E3 CMP R0,#+1 \ 000000FC 020000BA BLT ??maincsm_onmessage_13 6573 { 6574 on_off_timer--; \ 00000100 010040E2 SUB R0,R0,#+1 \ 00000104 B80385E5 STR R0,[R5, #+952] 6575 SMART_REDRAW(); \ 00000108 EFFFFFEA B ??maincsm_onmessage_10 6576 break; 6577 } 6578 else 6579 if(on_off_timer!=-1) \ ??maincsm_onmessage_13: \ 0000010C 010070E3 CMN R0,#+1 \ 00000110 0500000A BEQ ??maincsm_onmessage_14 6580 { 6581 on_off_timer=-1; \ 00000114 0600E0E1 MVN R0,R6 \ 00000118 B80385E5 STR R0,[R5, #+952] 6582 zeromem(on_off_buf,128); \ 0000011C 00009DE5 LDR R0,[SP, #+0] \ 00000120 8010A0E3 MOV R1,#+128 \ 00000124 1D0100EF SWI +285 6583 SMART_REDRAW(); \ 00000128 ........ BL SMART_REDRAW 6584 // UpdateCLheader(); 6585 } 6586 int f=0; 6587 CLIST *t=(CLIST*)cltop; \ ??maincsm_onmessage_14: \ 0000012C A41395E5 LDR R1,[R5, #+932] \ 00000130 0000A0E3 MOV R0,#+0 \ 00000134 030000EA B ??maincsm_onmessage_15 6588 while(t && !f) 6589 { 6590 if(t->just_now) f=1; \ ??maincsm_onmessage_16: \ 00000138 682091E5 LDR R2,[R1, #+104] 6591 t=t->next; \ 0000013C 001091E5 LDR R1,[R1, #+0] \ 00000140 000052E3 CMP R2,#+0 \ 00000144 0100A013 MOVNE R0,#+1 6592 } \ ??maincsm_onmessage_15: \ 00000148 000051E3 CMP R1,#+0 \ 0000014C DCFFFF0A BEQ ??maincsm_onmessage_9 \ 00000150 000050E3 CMP R0,#+0 \ 00000154 F7FFFF0A BEQ ??maincsm_onmessage_16 6593 if(f)/* GBS_StartTimerProc(&cltmr, 216, MyRedraw);*/MyRedraw(); \ 00000158 D9FFFFEA B ??maincsm_onmessage_9 6594 } 6595 break; 6596 case IPC_TENSECONDS: 6597 //Только свое сообщение 6598 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_17: \ 0000015C 071089E0 ADD R1,R9,R7 \ 00000160 010050E1 CMP R0,R1 \ 00000164 5C00001A BNE ??maincsm_onmessage_2 6599 { 6600 CLIST *t=(CLIST *)cltop; 6601 int f=0; 6602 if(main_msg_timer2!=0) main_msg_timer2--; else main_msg_timer2=0; \ 00000168 F40395E5 LDR R0,[R5, #+1012] \ 0000016C A48395E5 LDR R8,[R5, #+932] \ 00000170 0090A0E3 MOV R9,#+0 \ 00000174 000050E3 CMP R0,#+0 \ 00000178 1900000A BEQ ??maincsm_onmessage_18 \ 0000017C 010040E2 SUB R0,R0,#+1 \ 00000180 F40385E5 STR R0,[R5, #+1012] \ 00000184 160000EA B ??maincsm_onmessage_18 6603 while(t) 6604 { 6605 if(t->just_now) \ ??maincsm_onmessage_19: \ 00000188 680098E5 LDR R0,[R8, #+104] \ 0000018C 000050E3 CMP R0,#+0 \ 00000190 0200000A BEQ ??maincsm_onmessage_20 6606 { 6607 if (!(--(t->just_now))) f=1; \ 00000194 010050E2 SUBS R0,R0,#+1 \ 00000198 680088E5 STR R0,[R8, #+104] \ 0000019C 0190A003 MOVEQ R9,#+1 6608 } 6609 if (t->isactive) \ ??maincsm_onmessage_20: \ 000001A0 A00098E5 LDR R0,[R8, #+160] \ 000001A4 000050E3 CMP R0,#+0 \ 000001A8 0C00000A BEQ ??maincsm_onmessage_21 6610 { 6611 if (!(--(t->isactive))) \ 000001AC 010050E2 SUBS R0,R0,#+1 \ 000001B0 A00088E5 STR R0,[R8, #+160] \ 000001B4 0900001A BNE ??maincsm_onmessage_21 6612 { 6613 f=1; //Если дошли до 0 хотя бы один раз - надо перерисовать меню 6614 if ((t->log)&&(!t->isunread)) \ 000001B8 940098E5 LDR R0,[R8, #+148] \ 000001BC 0190A0E3 MOV R9,#+1 \ 000001C0 000050E3 CMP R0,#+0 \ 000001C4 0500000A BEQ ??maincsm_onmessage_21 \ 000001C8 840098E5 LDR R0,[R8, #+132] \ 000001CC 000050E3 CMP R0,#+0 \ 000001D0 0200001A BNE ??maincsm_onmessage_21 6615 { 6616 FreeLOGQ(&t->log); \ 000001D4 940088E2 ADD R0,R8,#+148 \ 000001D8 ........ BL FreeLOGQ 6617 t->msg_count=0; \ 000001DC A46088E5 STR R6,[R8, #+164] 6618 } 6619 } 6620 } 6621 t=(CLIST *)(t->next); \ ??maincsm_onmessage_21: \ 000001E0 008098E5 LDR R8,[R8, #+0] 6622 } \ ??maincsm_onmessage_18: \ 000001E4 000058E3 CMP R8,#+0 \ 000001E8 E6FFFF1A BNE ??maincsm_onmessage_19 6623 if (f) \ 000001EC 000059E3 CMP R9,#+0 \ 000001F0 0A00000A BEQ ??maincsm_onmessage_22 6624 { 6625 CLIST *oldt=NULL; 6626 if (contactlist_menu_id) \ 000001F4 AC1395E5 LDR R1,[R5, #+940] \ 000001F8 0000A0E3 MOV R0,#+0 \ 000001FC 000051E3 CMP R1,#+0 \ 00000200 0400000A BEQ ??maincsm_onmessage_23 6627 { 6628 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 00000204 AC0395E5 LDR R0,[R5, #+940] \ 00000208 0010A0E3 MOV R1,#+0 \ 0000020C 090200EF SWI +521 \ 00000210 8F0100EF SWI +399 \ 00000214 ........ _BLF FindContactByN,??FindContactByN??rA 6629 } 6630 RecountMenu(oldt,1); \ ??maincsm_onmessage_23: \ 00000218 0110A0E3 MOV R1,#+1 \ 0000021C ........ BL RecountMenu 6631 } 6632 if (time_to_stop_t9) \ ??maincsm_onmessage_22: \ 00000220 FC0395E5 LDR R0,[R5, #+1020] \ 00000224 000050E3 CMP R0,#+0 \ 00000228 2B00000A BEQ ??maincsm_onmessage_2 6633 { 6634 if (!(--time_to_stop_t9)) \ 0000022C 010050E2 SUBS R0,R0,#+1 \ 00000230 FC0385E5 STR R0,[R5, #+1020] \ 00000234 2800001A BNE ??maincsm_onmessage_2 6635 { 6636 if (IsGuiOnTop(edchat_id)) RefreshGUI(); \ 00000238 B00395E5 LDR R0,[R5, #+944] \ 0000023C 350100EF SWI +309 \ 00000240 000050E3 CMP R0,#+0 \ 00000244 2400000A BEQ ??maincsm_onmessage_2 \ 00000248 960100EF SWI +406 \ 0000024C 220000EA B ??maincsm_onmessage_2 6637 } 6638 } 6639 } 6640 break; 6641 case IPC_SENDMSG: ; //IPC_SENDMSG by BoBa 26.06.07 6642 int l=strlen(((IPCMsg *)(ipc->data))->msg); \ ??maincsm_onmessage_24: \ 00000250 080098E5 LDR R0,[R8, #+8] \ 00000254 040090E5 LDR R0,[R0, #+4] \ 00000258 1B0000EF SWI +27 \ 0000025C 0090A0E1 MOV R9,R0 6643 TPKT *msg=malloc(sizeof(PKT)+l+30); \ 00000260 260089E2 ADD R0,R9,#+38 \ 00000264 140000EF SWI +20 \ 00000268 00A0A0E1 MOV R10,R0 6644 msg->pkt.uin=((IPCMsg *)(ipc->data))->uin; \ 0000026C 080098E5 LDR R0,[R8, #+8] 6645 msg->pkt.type=T_SENDMSG; 6646 msg->pkt.data_len=l; 6647 memcpy(msg->data,((IPCMsg *)(ipc->data))->msg,l); \ 00000270 0920A0E1 MOV R2,R9 \ 00000274 000090E5 LDR R0,[R0, #+0] \ 00000278 00008AE5 STR R0,[R10, #+0] \ 0000027C 0200A0E3 MOV R0,#+2 \ 00000280 B400CAE1 STRH R0,[R10, #+4] \ 00000284 B690CAE1 STRH R9,[R10, #+6] \ 00000288 080098E5 LDR R0,[R8, #+8] \ 0000028C 041090E5 LDR R1,[R0, #+4] \ 00000290 08008AE2 ADD R0,R10,#+8 \ 00000294 1E0100EF SWI +286 6648 //slientsend=1; 6649 if(strstr(msg->data,PASS)==0) \ 00000298 BC199FE5 LDR R1,??maincsm_onmessage_5+0xC ;; PASS \ 0000029C 08008AE2 ADD R0,R10,#+8 \ 000002A0 180100EF SWI +280 \ 000002A4 000050E3 CMP R0,#+0 \ 000002A8 0400000A BEQ ??maincsm_onmessage_25 6650 { 6651 SENDMSGCOUNT++; //Номер сообщения 6652 SUBPROC((void *)SendAnswer,0,msg); 6653 } 6654 else 6655 { 6656 msg->pkt.data_len=40; \ 000002AC 2800A0E3 MOV R0,#+40 \ 000002B0 B600CAE1 STRH R0,[R10, #+6] 6657 strcpy(msg->data, "Fuck you hacker! my password sux ur ass"); \ 000002B4 8D1F87E2 ADD R1,R7,#+564 \ 000002B8 08008AE2 ADD R0,R10,#+8 \ 000002BC 1A0000EF SWI +26 6658 SENDMSGCOUNT++; //Номер сообщения \ ??maincsm_onmessage_25: \ 000002C0 080395E5 LDR R0,[R5, #+776] 6659 SUBPROC((void *)SendAnswer,0,msg); \ 000002C4 0A20A0E1 MOV R2,R10 \ 000002C8 010080E2 ADD R0,R0,#+1 \ 000002CC 080385E5 STR R0,[R5, #+776] \ 000002D0 ........ LDR R0,??DataTable234 ;; SendAnswer \ 000002D4 0010A0E3 MOV R1,#+0 \ 000002D8 710100EF SWI +369 6660 } 6661 break; 6662 } 6663 } 6664 } 6665 } 6666 //Нарисуем иконочку моего статуса 6667 //#define idlegui_id (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 6668 //CSM_RAM *icsm=FindCSMbyID(CSM_root()->idle_id); 6669 // if (IsGuiOnTop(idlegui_id)/*&&IsUnlocked()*/) //Если IdleGui на самом верху 6670 // { 6671 void *icsm; 6672 icsm=FindCSMbyID(CSM_root()->idle_id); \ ??maincsm_onmessage_2: \ 000002DC 068100EF SWI +33030 \ 000002E0 040090E5 LDR R0,[R0, #+4] \ 000002E4 080100EF SWI +264 \ 000002E8 000050E3 CMP R0,#+0 \ 000002EC 0B00000A BEQ ??maincsm_onmessage_26 \ 000002F0 2C0090E5 LDR R0,[R0, #+44] 6673 if (icsm && checkGui(idlegui_id(icsm))) \ 000002F4 ........ BL checkGui \ 000002F8 000050E3 CMP R0,#+0 \ 000002FC 0700000A BEQ ??maincsm_onmessage_26 6674 { 6675 // GUI *igui=GetTopGUI(); 6676 // if (igui) //И он существует 6677 //{ 6678 INC_show=0; \ 00000300 046485E5 STR R6,[R5, #+1028] 6679 canvasdata=BuildCanvas(); //void * - belyj fon! \ 00000304 F18000EF SWI +33009 \ 00000308 D00285E5 STR R0,[R5, #+720] 6680 //Тут трохи поменял 6681 // by Rainmaker: Рисуем канву только для иконки и выводим в своих координатах 6682 #ifdef ELKA 6683 if (total_unread) \ 0000030C A00395E5 LDR R0,[R5, #+928] \ 00000310 000050E3 CMP R0,#+0 \ 00000314 0300000A BEQ ??maincsm_onmessage_27 6684 SLI_On(); \ 00000318 ........ BL SLI_On \ 0000031C 010000EA B ??maincsm_onmessage_27 6685 #endif 6686 } 6687 //} 6688 else 6689 { 6690 main_d=1; \ ??maincsm_onmessage_26: \ 00000320 0100A0E3 MOV R0,#+1 \ 00000324 C80285E5 STR R0,[R5, #+712] 6691 } 6692 } 6693 6694 //---------------------------------------------------// 6695 void *icsm; 6696 icsm=FindCSMbyID(CSM_root()->idle_id); 6697 if (icsm && checkGui(idlegui_id(icsm))) \ ??maincsm_onmessage_27: \ 00000328 ........ LDR R8,??DataTable251 ;; fonto \ 0000032C 068100EF SWI +33030 \ 00000330 040090E5 LDR R0,[R0, #+4] \ 00000334 080100EF SWI +264 \ 00000338 000050E3 CMP R0,#+0 \ 0000033C 4001000A BEQ ??maincsm_onmessage_28 \ 00000340 2C0090E5 LDR R0,[R0, #+44] \ 00000344 ........ BL checkGui \ 00000348 000050E3 CMP R0,#+0 \ 0000034C 3C01000A BEQ ??maincsm_onmessage_28 6698 { 6699 int icn; 6700 if(total_unread) \ 00000350 A00395E5 LDR R0,[R5, #+928] \ 00000354 000050E3 CMP R0,#+0 6701 icn=IS_MSG; \ 00000358 0D90A013 MOVNE R9,#+13 \ 0000035C 0A00001A BNE ??maincsm_onmessage_29 6702 else 6703 { 6704 switch(connect_state) \ 00000360 7C0395E5 LDR R0,[R5, #+892] \ 00000364 000050E3 CMP R0,#+0 \ 00000368 0200000A BEQ ??maincsm_onmessage_30 \ 0000036C 030050E2 SUBS R0,R0,#+3 \ 00000370 0200000A BEQ ??maincsm_onmessage_31 \ 00000374 030000EA B ??maincsm_onmessage_32 6705 { 6706 case 0: 6707 icn=IS_OFFLINE; break; \ ??maincsm_onmessage_30: \ 00000378 0090A0E3 MOV R9,#+0 \ 0000037C 020000EA B ??maincsm_onmessage_29 6708 case 3: 6709 icn=CurrentStatus; //IS_ONLINE; \ ??maincsm_onmessage_31: \ 00000380 189395E5 LDR R9,[R5, #+792] \ 00000384 000000EA B ??maincsm_onmessage_29 6710 break; 6711 default: 6712 icn=IS_UNKNOWN; break; \ ??maincsm_onmessage_32: \ 00000388 0E90A0E3 MOV R9,#+14 6713 } 6714 } 6715 6716 #ifdef NEWSGOLD 6717 if(ShowStatusIcon==0 || ShowStatusIcon==2 || ShowStatusIcon==3) //kluchnik 26.03.08 \ ??maincsm_onmessage_29: \ 0000038C ........ LDR R0,??DataTable239 ;; ShowStatusIcon \ 00000390 000090E5 LDR R0,[R0, #+0] \ 00000394 000050E3 CMP R0,#+0 \ 00000398 02005013 CMPNE R0,#+2 \ 0000039C 03005013 CMPNE R0,#+3 \ 000003A0 2100001A BNE ??maincsm_onmessage_33 6718 { 6719 #endif 6720 if((IsUnlocked()) || (!IsUnlocked()) || (IsScreenSaver())) \ 000003A4 430000EF SWI +67 \ 000003A8 000050E3 CMP R0,#+0 \ 000003AC 0500001A BNE ??maincsm_onmessage_34 \ 000003B0 430000EF SWI +67 \ 000003B4 000050E3 CMP R0,#+0 \ 000003B8 0200000A BEQ ??maincsm_onmessage_34 \ 000003BC 420000EF SWI +66 \ 000003C0 000050E3 CMP R0,#+0 \ 000003C4 1800000A BEQ ??maincsm_onmessage_33 6721 { 6722 DrawCanvas(canvasdata,IDLEICON_X,IDLEICON_Y,IDLEICON_X+GetImgWidth((int)S_ICONS[icn])-1, 6723 IDLEICON_Y+GetImgHeight((int)S_ICONS[icn])-1,1); \ ??maincsm_onmessage_34: \ 000003C8 90B89FE5 LDR R11,??maincsm_onmessage_5+0x10 ;; IDLEICON_Y \ 000003CC 099185E0 ADD R9,R5,R9, LSL #+2 \ 000003D0 700099E5 LDR R0,[R9, #+112] \ 000003D4 210000EF SWI +33 \ 000003D8 00A0A0E1 MOV R10,R0 \ 000003DC 700099E5 LDR R0,[R9, #+112] \ 000003E0 220000EF SWI +34 \ 000003E4 78189FE5 LDR R1,??maincsm_onmessage_5+0x14 ;; IDLEICON_X \ 000003E8 00209BE5 LDR R2,[R11, #+0] \ 000003EC 001091E5 LDR R1,[R1, #+0] \ 000003F0 0130A0E3 MOV R3,#+1 \ 000003F4 08002DE9 PUSH {R3} \ 000003F8 010080E0 ADD R0,R0,R1 \ 000003FC 02308AE0 ADD R3,R10,R2 \ 00000400 013043E2 SUB R3,R3,#+1 \ 00000404 08002DE9 PUSH {R3} \ 00000408 013040E2 SUB R3,R0,#+1 \ 0000040C D00295E5 LDR R0,[R5, #+720] \ 00000410 250000EF SWI +37 6724 DrawImg(IDLEICON_X,IDLEICON_Y,S_ICONS[icn]); \ 00000414 48089FE5 LDR R0,??maincsm_onmessage_5+0x14 ;; IDLEICON_X \ 00000418 702099E5 LDR R2,[R9, #+112] \ 0000041C 00109BE5 LDR R1,[R11, #+0] \ 00000420 000090E5 LDR R0,[R0, #+0] \ 00000424 230000EF SWI +35 \ 00000428 08D08DE2 ADD SP,SP,#+8 6725 } 6726 #ifdef NEWSGOLD 6727 } 6728 #ifdef kluchnik 6729 if(show_xstatus==1) 6730 #else 6731 if(show_xstatus==1 || show_xstatus==3) //kluchnik 26.03.08 \ ??maincsm_onmessage_33: \ 0000042C 34089FE5 LDR R0,??maincsm_onmessage_5+0x18 ;; show_xstatus \ 00000430 000090E5 LDR R0,[R0, #+0] \ 00000434 010050E3 CMP R0,#+1 \ 00000438 03005013 CMPNE R0,#+3 \ 0000043C 2300001A BNE ??maincsm_onmessage_35 6732 #endif 6733 #else 6734 if(show_xstatus==1) //kluchnik 26.03.08 6735 #endif 6736 { 6737 PNGTOP_DESC *pltop=PNG_TOP(); 6738 pltop->dyn_pltop=XStatusesImgList; 6739 DisableIDLETMR(); 6740 DrawCanvas(canvasdata,IDLEICON_XX,IDLEICON_YX,IDLEICON_XX+GetImgWidth((int)XStatusesIconArray[CurrentXStatus])-1, 6741 IDLEICON_YX+GetImgHeight((int)XStatusesIconArray[CurrentXStatus])-1,1); \ 00000440 24989FE5 LDR R9,??maincsm_onmessage_5+0x1C ;; XStatusesIconArray \ 00000444 24B89FE5 LDR R11,??maincsm_onmessage_5+0x20 ;; IDLEICON_YX \ 00000448 B98100EF SWI +33209 \ 0000044C 20189FE5 LDR R1,??maincsm_onmessage_5+0x24 ;; XStatusesImgList \ 00000450 001091E5 LDR R1,[R1, #+0] \ 00000454 081080E5 STR R1,[R0, #+8] \ 00000458 7F0100EF SWI +383 \ 0000045C 1C0395E5 LDR R0,[R5, #+796] \ 00000460 001099E5 LDR R1,[R9, #+0] \ 00000464 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 00000468 210000EF SWI +33 \ 0000046C 001099E5 LDR R1,[R9, #+0] \ 00000470 00A0A0E1 MOV R10,R0 \ 00000474 1C0395E5 LDR R0,[R5, #+796] \ 00000478 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 0000047C 220000EF SWI +34 \ 00000480 F0179FE5 LDR R1,??maincsm_onmessage_5+0x28 ;; IDLEICON_XX \ 00000484 00209BE5 LDR R2,[R11, #+0] \ 00000488 001091E5 LDR R1,[R1, #+0] \ 0000048C 0130A0E3 MOV R3,#+1 \ 00000490 08002DE9 PUSH {R3} \ 00000494 010080E0 ADD R0,R0,R1 \ 00000498 02308AE0 ADD R3,R10,R2 \ 0000049C 013043E2 SUB R3,R3,#+1 \ 000004A0 08002DE9 PUSH {R3} \ 000004A4 013040E2 SUB R3,R0,#+1 \ 000004A8 D00295E5 LDR R0,[R5, #+720] \ 000004AC 250000EF SWI +37 6742 DrawImg(IDLEICON_XX,IDLEICON_YX,XStatusesIconArray[CurrentXStatus]); \ 000004B0 1C0395E5 LDR R0,[R5, #+796] \ 000004B4 001099E5 LDR R1,[R9, #+0] \ 000004B8 002191E7 LDR R2,[R1, +R0, LSL #+2] \ 000004BC B4079FE5 LDR R0,??maincsm_onmessage_5+0x28 ;; IDLEICON_XX \ 000004C0 00109BE5 LDR R1,[R11, #+0] \ 000004C4 000090E5 LDR R0,[R0, #+0] \ 000004C8 230000EF SWI +35 \ 000004CC 08D08DE2 ADD SP,SP,#+8 6743 } 6744 6745 6746 if(IsUnlocked()) \ ??maincsm_onmessage_35: \ 000004D0 430000EF SWI +67 \ 000004D4 000050E3 CMP R0,#+0 \ 000004D8 D900000A BEQ ??maincsm_onmessage_28 6747 { 6748 SetCanvasFlag(0); \ 000004DC 0000A0E3 MOV R0,#+0 \ 000004E0 ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 6749 if (main_d==1) \ 000004E4 C80295E5 LDR R0,[R5, #+712] \ 000004E8 010050E3 CMP R0,#+1 \ 000004EC 8A00001A BNE ??maincsm_onmessage_36 6750 { 6751 if(Is_SMARTCPU_On && main_msg_timer2) \ 000004F0 EC0295E5 LDR R0,[R5, #+748] \ 000004F4 000050E3 CMP R0,#+0 \ 000004F8 F4039515 LDRNE R0,[R5, #+1012] \ 000004FC 00005013 CMPNE R0,#+0 \ 00000500 8400000A BEQ ??maincsm_onmessage_37 6752 { 6753 if(fonto==1) \ 00000504 70979FE5 LDR R9,??maincsm_onmessage_5+0x2C ;; msg_d_x \ 00000508 70A79FE5 LDR R10,??maincsm_onmessage_5+0x30 ;; msg_d_y \ 0000050C 70B79FE5 LDR R11,??maincsm_onmessage_5+0x34 ;; spaco2 \ 00000510 CC3295E5 LDR R3,[R5, #+716] \ 00000514 4C10A0E3 MOV R1,#+76 \ 00000518 741D81E3 ORR R1,R1,#0x1D00 \ 0000051C 051081E0 ADD R1,R1,R5 \ 00000520 18108DE5 STR R1,[SP, #+24] \ 00000524 1C10A0E3 MOV R1,#+28 \ 00000528 741D81E3 ORR R1,R1,#0x1D00 \ 0000052C 051081E0 ADD R1,R1,R5 \ 00000530 14108DE5 STR R1,[SP, #+20] \ 00000534 EC10A0E3 MOV R1,#+236 \ 00000538 701D81E3 ORR R1,R1,#0x1C00 \ 0000053C 051081E0 ADD R1,R1,R5 \ 00000540 10108DE5 STR R1,[SP, #+16] \ 00000544 BC10A0E3 MOV R1,#+188 \ 00000548 701D81E3 ORR R1,R1,#0x1C00 \ 0000054C 051081E0 ADD R1,R1,R5 \ 00000550 0C108DE5 STR R1,[SP, #+12] \ 00000554 000099E5 LDR R0,[R9, #+0] \ 00000558 00109AE5 LDR R1,[R10, #+0] \ 0000055C 00C09BE5 LDR R12,[R11, #+0] \ 00000560 00E098E5 LDR LR,[R8, #+0] \ 00000564 00102DE9 PUSH {R12} \ 00000568 8C20A0E3 MOV R2,#+140 \ 0000056C 702D82E3 ORR R2,R2,#0x1C00 \ 00000570 052082E0 ADD R2,R2,R5 \ 00000574 01005EE3 CMP LR,#+1 \ 00000578 2E00001A BNE ??maincsm_onmessage_38 6754 { 6755 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ 0000057C 01C0A0E3 MOV R12,#+1 \ 00000580 00102DE9 PUSH {R12} \ 00000584 ........ _BLF PrintField,??PrintField??rA 6756 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, spaco2); \ 00000588 00009BE5 LDR R0,[R11, #+0] \ 0000058C 01002DE9 PUSH {R0} \ 00000590 000098E5 LDR R0,[R8, #+0] \ 00000594 01002DE9 PUSH {R0} \ 00000598 D41295E5 LDR R1,[R5, #+724] \ 0000059C CC3295E5 LDR R3,[R5, #+716] \ 000005A0 1C209DE5 LDR R2,[SP, #+28] \ 000005A4 00009AE5 LDR R0,[R10, #+0] \ 000005A8 001081E0 ADD R1,R1,R0 \ 000005AC 000099E5 LDR R0,[R9, #+0] \ 000005B0 ........ _BLF PrintField,??PrintField??rA 6757 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, spaco2); \ 000005B4 00009BE5 LDR R0,[R11, #+0] \ 000005B8 01002DE9 PUSH {R0} \ 000005BC 000098E5 LDR R0,[R8, #+0] \ 000005C0 01002DE9 PUSH {R0} \ 000005C4 D41295E5 LDR R1,[R5, #+724] \ 000005C8 CC3295E5 LDR R3,[R5, #+716] \ 000005CC 28209DE5 LDR R2,[SP, #+40] \ 000005D0 00009AE5 LDR R0,[R10, #+0] \ 000005D4 811080E0 ADD R1,R0,R1, LSL #+1 \ 000005D8 000099E5 LDR R0,[R9, #+0] \ 000005DC ........ _BLF PrintField,??PrintField??rA 6758 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, spaco2); \ 000005E0 00009BE5 LDR R0,[R11, #+0] \ 000005E4 01002DE9 PUSH {R0} \ 000005E8 000098E5 LDR R0,[R8, #+0] \ 000005EC 01002DE9 PUSH {R0} \ 000005F0 D41295E5 LDR R1,[R5, #+724] \ 000005F4 CC3295E5 LDR R3,[R5, #+716] \ 000005F8 34209DE5 LDR R2,[SP, #+52] \ 000005FC 00009AE5 LDR R0,[R10, #+0] \ 00000600 811081E0 ADD R1,R1,R1, LSL #+1 \ 00000604 001081E0 ADD R1,R1,R0 \ 00000608 000099E5 LDR R0,[R9, #+0] \ 0000060C ........ _BLF PrintField,??PrintField??rA 6759 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, spaco2); \ 00000610 00009BE5 LDR R0,[R11, #+0] \ 00000614 01002DE9 PUSH {R0} \ 00000618 000098E5 LDR R0,[R8, #+0] \ 0000061C 01002DE9 PUSH {R0} \ 00000620 D41295E5 LDR R1,[R5, #+724] \ 00000624 CC3295E5 LDR R3,[R5, #+716] \ 00000628 40209DE5 LDR R2,[SP, #+64] \ 0000062C 00009AE5 LDR R0,[R10, #+0] \ 00000630 011180E0 ADD R1,R0,R1, LSL #+2 \ 00000634 340000EA B ??maincsm_onmessage_39 6760 } 6761 else 6762 { 6763 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ ??maincsm_onmessage_38: \ 00000638 00402DE9 PUSH {LR} \ 0000063C ........ _BLF PrintField,??PrintField??rA 6764 PrintField(msg_d_x,msg_d_y+GetFontYSIZE(paused_height)+1, s_txt, align, fonto, spaco2); \ 00000640 D40295E5 LDR R0,[R5, #+724] \ 00000644 C50100EF SWI +453 \ 00000648 00109BE5 LDR R1,[R11, #+0] \ 0000064C 02002DE9 PUSH {R1} \ 00000650 001098E5 LDR R1,[R8, #+0] \ 00000654 02002DE9 PUSH {R1} \ 00000658 CC3295E5 LDR R3,[R5, #+716] \ 0000065C 1C209DE5 LDR R2,[SP, #+28] \ 00000660 00109AE5 LDR R1,[R10, #+0] \ 00000664 010080E0 ADD R0,R0,R1 \ 00000668 011080E2 ADD R1,R0,#+1 \ 0000066C 000099E5 LDR R0,[R9, #+0] \ 00000670 ........ _BLF PrintField,??PrintField??rA 6765 PrintField(msg_d_x,msg_d_y+(2*GetFontYSIZE(paused_height))+2, d_txt, align, fonto, spaco2); \ 00000674 D40295E5 LDR R0,[R5, #+724] \ 00000678 C50100EF SWI +453 \ 0000067C 00109BE5 LDR R1,[R11, #+0] \ 00000680 02002DE9 PUSH {R1} \ 00000684 001098E5 LDR R1,[R8, #+0] \ 00000688 02002DE9 PUSH {R1} \ 0000068C CC3295E5 LDR R3,[R5, #+716] \ 00000690 28209DE5 LDR R2,[SP, #+40] \ 00000694 00109AE5 LDR R1,[R10, #+0] \ 00000698 800081E0 ADD R0,R1,R0, LSL #+1 \ 0000069C 021080E2 ADD R1,R0,#+2 \ 000006A0 000099E5 LDR R0,[R9, #+0] \ 000006A4 ........ _BLF PrintField,??PrintField??rA 6766 PrintField(msg_d_x,msg_d_y+(3*GetFontYSIZE(paused_height))+3, f_txt, align, fonto, spaco2); \ 000006A8 D40295E5 LDR R0,[R5, #+724] \ 000006AC C50100EF SWI +453 \ 000006B0 00109BE5 LDR R1,[R11, #+0] \ 000006B4 800080E0 ADD R0,R0,R0, LSL #+1 \ 000006B8 02002DE9 PUSH {R1} \ 000006BC 001098E5 LDR R1,[R8, #+0] \ 000006C0 02002DE9 PUSH {R1} \ 000006C4 CC3295E5 LDR R3,[R5, #+716] \ 000006C8 34209DE5 LDR R2,[SP, #+52] \ 000006CC 00109AE5 LDR R1,[R10, #+0] \ 000006D0 010080E0 ADD R0,R0,R1 \ 000006D4 031080E2 ADD R1,R0,#+3 \ 000006D8 000099E5 LDR R0,[R9, #+0] \ 000006DC ........ _BLF PrintField,??PrintField??rA 6767 PrintField(msg_d_x,msg_d_y+(4*GetFontYSIZE(paused_height))+4, g_txt, align, fonto, spaco2); \ 000006E0 D40295E5 LDR R0,[R5, #+724] \ 000006E4 C50100EF SWI +453 \ 000006E8 00109BE5 LDR R1,[R11, #+0] \ 000006EC 02002DE9 PUSH {R1} \ 000006F0 001098E5 LDR R1,[R8, #+0] \ 000006F4 02002DE9 PUSH {R1} \ 000006F8 CC3295E5 LDR R3,[R5, #+716] \ 000006FC 40209DE5 LDR R2,[SP, #+64] \ 00000700 00109AE5 LDR R1,[R10, #+0] \ 00000704 000181E0 ADD R0,R1,R0, LSL #+2 \ 00000708 041080E2 ADD R1,R0,#+4 \ ??maincsm_onmessage_39: \ 0000070C 000099E5 LDR R0,[R9, #+0] \ 00000710 ........ _BLF PrintField,??PrintField??rA \ 00000714 28D08DE2 ADD SP,SP,#+40 6768 } 6769 } 6770 main_d=0; \ ??maincsm_onmessage_37: \ 00000718 C86285E5 STR R6,[R5, #+712] 6771 } 6772 6773 if(Is_UPTIME_On) DrawOnlineTime(canvasdata); \ ??maincsm_onmessage_36: \ 0000071C 3C0395E5 LDR R0,[R5, #+828] \ 00000720 000050E3 CMP R0,#+0 \ 00000724 0100000A BEQ ??maincsm_onmessage_40 \ 00000728 D00295E5 LDR R0,[R5, #+720] \ 0000072C ........ BL DrawOnlineTime 6774 if(Is_PING_On) DrawPing(canvasdata); \ ??maincsm_onmessage_40: \ 00000730 E40295E5 LDR R0,[R5, #+740] \ 00000734 000050E3 CMP R0,#+0 \ 00000738 0100000A BEQ ??maincsm_onmessage_41 \ 0000073C D00295E5 LDR R0,[R5, #+720] \ 00000740 ........ BL DrawPing 6775 if(Auto_Status && showAwayIdle) DrawAutoMSG(canvasdata); \ ??maincsm_onmessage_41: \ 00000744 ........ LDR R0,??DataTable221 ;; Auto_Status \ 00000748 000090E5 LDR R0,[R0, #+0] \ 0000074C 000050E3 CMP R0,#+0 \ 00000750 0500000A BEQ ??maincsm_onmessage_42 \ 00000754 ........ LDR R0,??DataTable222 ;; showAwayIdle \ 00000758 000090E5 LDR R0,[R0, #+0] \ 0000075C 000050E3 CMP R0,#+0 \ 00000760 0100000A BEQ ??maincsm_onmessage_42 \ 00000764 D00295E5 LDR R0,[R5, #+720] \ 00000768 ........ BL DrawAutoMSG 6776 if(Is_Unread_On) \ ??maincsm_onmessage_42: \ 0000076C 14059FE5 LDR R0,??maincsm_onmessage_5+0x38 ;; Is_Unread_On \ 00000770 ........ LDR R9,??DataTable223 ;; spaco1 \ 00000774 000090E5 LDR R0,[R0, #+0] \ 00000778 000050E3 CMP R0,#+0 \ 0000077C 1000000A BEQ ??maincsm_onmessage_43 6777 { 6778 sprintf(unread_msg_info, "Unread: %d", total_unread2); \ 00000780 FC2295E5 LDR R2,[R5, #+764] \ 00000784 5FAEA0E3 MOV R10,#+1520 \ 00000788 971F87E2 ADD R1,R7,#+604 \ 0000078C 05008AE0 ADD R0,R10,R5 \ 00000790 160000EF SWI +22 6779 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, spaco1); \ 00000794 000099E5 LDR R0,[R9, #+0] \ 00000798 05208AE0 ADD R2,R10,R5 \ 0000079C 01002DE9 PUSH {R0} \ 000007A0 000098E5 LDR R0,[R8, #+0] \ 000007A4 01002DE9 PUSH {R0} \ 000007A8 CC3295E5 LDR R3,[R5, #+716] \ 000007AC D8049FE5 LDR R0,??maincsm_onmessage_5+0x3C ;; unread_Y \ 000007B0 001090E5 LDR R1,[R0, #+0] \ 000007B4 D4049FE5 LDR R0,??maincsm_onmessage_5+0x40 ;; unread_X \ 000007B8 000090E5 LDR R0,[R0, #+0] \ 000007BC ........ _BLF PrintField,??PrintField??rA \ 000007C0 08D08DE2 ADD SP,SP,#+8 6780 } 6781 6782 if(Is_Online_On && strlen(on_off_buf)!=0) \ ??maincsm_onmessage_43: \ 000007C4 C8049FE5 LDR R0,??maincsm_onmessage_5+0x44 ;; Is_Online_On \ 000007C8 000090E5 LDR R0,[R0, #+0] \ 000007CC 000050E3 CMP R0,#+0 \ 000007D0 1B00000A BEQ ??maincsm_onmessage_28 \ 000007D4 00009DE5 LDR R0,[SP, #+0] \ 000007D8 1B0000EF SWI +27 \ 000007DC 000050E3 CMP R0,#+0 \ 000007E0 1700000A BEQ ??maincsm_onmessage_28 6783 { 6784 char *s=malloc(128); \ 000007E4 8000A0E3 MOV R0,#+128 \ 000007E8 140000EF SWI +20 6785 sprintf(s,percent_s,on_off_buf); \ 000007EC 00209DE5 LDR R2,[SP, #+0] \ 000007F0 00A0A0E1 MOV R10,R0 \ 000007F4 081087E2 ADD R1,R7,#+8 \ 000007F8 160000EF SWI +22 6786 s[strlen(s)-1]=0; \ 000007FC 0A00A0E1 MOV R0,R10 \ 00000800 1B0000EF SWI +27 \ 00000804 0A0080E0 ADD R0,R0,R10 \ 00000808 016040E5 STRB R6,[R0, #-1] 6787 PrintField(online_x,online_y,s, align, fonto, spaco1); \ 0000080C 000099E5 LDR R0,[R9, #+0] \ 00000810 0A20A0E1 MOV R2,R10 \ 00000814 01002DE9 PUSH {R0} \ 00000818 000098E5 LDR R0,[R8, #+0] \ 0000081C 01002DE9 PUSH {R0} \ 00000820 CC3295E5 LDR R3,[R5, #+716] \ 00000824 6C049FE5 LDR R0,??maincsm_onmessage_5+0x48 ;; online_y \ 00000828 001090E5 LDR R1,[R0, #+0] \ 0000082C 68049FE5 LDR R0,??maincsm_onmessage_5+0x4C ;; online_x \ 00000830 000090E5 LDR R0,[R0, #+0] \ 00000834 ........ _BLF PrintField,??PrintField??rA 6788 mfree(s); \ 00000838 0A00A0E1 MOV R0,R10 \ 0000083C 150000EF SWI +21 \ 00000840 08D08DE2 ADD SP,SP,#+8 6789 } 6790 }//if(IsUnlocked()) 6791 } 6792 6793 6794 //-----------------------------------------------------------// 6795 6796 6797 if (msg->msg==MSG_RECONFIGURE_REQ) \ ??maincsm_onmessage_28: \ 00000844 040094E5 LDR R0,[R4, #+4] \ 00000848 AF10A0E3 MOV R1,#+175 \ 0000084C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000850 010050E1 CMP R0,R1 \ 00000854 3000001A BNE ??maincsm_onmessage_44 6798 { 6799 //if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) 6800 if( (strcmp_nocase(suc_config_name,(char *)msg->data0)==0) 6801 || (strcmp_nocase(suc_config_name_mod,(char *)msg->data0)==0)) \ 00000858 ........ LDR R0,??DataTable245 ;; suc_config_name \ 0000085C 0C1094E5 LDR R1,[R4, #+12] \ 00000860 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000864 000050E3 CMP R0,#+0 \ 00000868 0400000A BEQ ??maincsm_onmessage_45 \ 0000086C ........ LDR R0,??DataTable225 ;; suc_config_name_mod \ 00000870 0C1094E5 LDR R1,[R4, #+12] \ 00000874 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000878 000050E3 CMP R0,#+0 \ 0000087C 2600001A BNE ??maincsm_onmessage_44 6802 { 6803 ShowMSG(1,(int)"NatICQ config updated!"); 6804 // InitConfig(); 6805 UpdateConfig(); 6806 #ifdef NEWSGOLD 6807 initTags(); 6808 #endif 6809 PrintLibInit(1); 6810 FontPathInit((char *)fontpath, 1); \ ??maincsm_onmessage_45: \ 00000880 ........ LDR R9,??DataTable247 ;; fontpath \ 00000884 9A1F87E2 ADD R1,R7,#+616 \ 00000888 0100A0E3 MOV R0,#+1 \ 0000088C 480100EF SWI +328 \ 00000890 ........ _BLF UpdateConfig,??UpdateConfig??rA \ 00000894 ........ _BLF initTags,??initTags??rA \ 00000898 0100A0E3 MOV R0,#+1 \ 0000089C ........ _BLF PrintLibInit,??PrintLibInit??rA \ 000008A0 0110A0E3 MOV R1,#+1 \ 000008A4 0900A0E1 MOV R0,R9 \ 000008A8 ........ _BLF FontPathInit,??FontPathInit??rA 6811 SetFontColor((char*)fontColor,(char*)bgrColor,1); \ 000008AC ........ LDR R1,??DataTable248 ;; bgrColor \ 000008B0 ........ LDR R0,??DataTable249 ;; fontColor \ 000008B4 0120A0E3 MOV R2,#+1 \ 000008B8 ........ _BLF SetFontColor,??SetFontColor??rA 6812 //#ifdef ELKA 6813 if(fonto==1) \ 000008BC 000098E5 LDR R0,[R8, #+0] \ 000008C0 010050E3 CMP R0,#+1 \ 000008C4 0B00001A BNE ??maincsm_onmessage_46 6814 { 6815 char *heght=malloc(64); \ 000008C8 4000A0E3 MOV R0,#+64 \ 000008CC 140000EF SWI +20 \ 000008D0 0080A0E1 MOV R8,R0 6816 sprintf(heght, "%s2240.png", fontpath); \ 000008D4 0920A0E1 MOV R2,R9 \ 000008D8 A01F87E2 ADD R1,R7,#+640 \ 000008DC 160000EF SWI +22 6817 paused_height=GetImgHeight((int)heght); \ 000008E0 0800A0E1 MOV R0,R8 \ 000008E4 210000EF SWI +33 \ 000008E8 D40285E5 STR R0,[R5, #+724] 6818 mfree(heght); \ 000008EC 0800A0E1 MOV R0,R8 \ 000008F0 150000EF SWI +21 \ 000008F4 010000EA B ??maincsm_onmessage_47 6819 } 6820 else 6821 paused_height=fonto-100; \ ??maincsm_onmessage_46: \ 000008F8 640040E2 SUB R0,R0,#+100 \ 000008FC D40285E5 STR R0,[R5, #+724] 6822 //#endif 6823 free_ICONS(); \ ??maincsm_onmessage_47: \ 00000900 ........ BL free_ICONS 6824 setup_ICONS(); \ 00000904 ........ BL setup_ICONS 6825 ResortCL(); \ 00000908 ........ _BLF ResortCL,??ResortCL??rA 6826 RecountMenu(NULL,1); \ 0000090C 0110A0E3 MOV R1,#+1 \ 00000910 0000A0E3 MOV R0,#+0 \ 00000914 ........ BL RecountMenu 6827 init_time_zone(); \ 00000918 ........ BL init_time_zone 6828 // InitSmiles(); 6829 } 6830 } 6831 6832 if (msg->msg==MSG_GUI_DESTROYED) \ ??maincsm_onmessage_44: \ 0000091C 040094E5 LDR R0,[R4, #+4] \ 00000920 0E10A0E3 MOV R1,#+14 \ 00000924 641C81E3 ORR R1,R1,#0x6400 \ 00000928 010050E1 CMP R0,R1 \ 0000092C 0D00001A BNE ??maincsm_onmessage_48 6833 { 6834 if ((int)msg->data0==csm->gui_id) \ 00000930 20109DE5 LDR R1,[SP, #+32] \ 00000934 0C0094E5 LDR R0,[R4, #+12] \ 00000938 281091E5 LDR R1,[R1, #+40] \ 0000093C 010050E1 CMP R0,R1 6835 { 6836 csm->csm.state=-3; \ 00000940 20009D05 LDREQ R0,[SP, #+32] \ 00000944 0210E003 MVNEQ R1,#+2 \ 00000948 10108005 STREQ R1,[R0, #+16] 6837 } 6838 if ((int)msg->data0==contactlist_menu_id) \ 0000094C 0C0094E5 LDR R0,[R4, #+12] \ 00000950 AC1395E5 LDR R1,[R5, #+940] \ 00000954 010050E1 CMP R0,R1 6839 { 6840 contactlist_menu_id=0; \ 00000958 AC638505 STREQ R6,[R5, #+940] 6841 //prev_clmenu_itemcount=0; 6842 } 6843 if ((int)msg->data0==edchat_id) \ 0000095C B01395E5 LDR R1,[R5, #+944] \ 00000960 010050E1 CMP R0,R1 6844 { 6845 edchat_id=0; \ 00000964 B0638505 STREQ R6,[R5, #+944] 6846 } 6847 } 6848 6849 if (msg->msg==MSG_HELPER_TRANSLATOR) \ ??maincsm_onmessage_48: \ 00000968 040094E5 LDR R0,[R4, #+4] \ 0000096C AE10A0E3 MOV R1,#+174 \ 00000970 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000974 010050E1 CMP R0,R1 \ 00000978 1000001A BNE ??maincsm_onmessage_49 6850 { 6851 switch((int)msg->data0) \ 0000097C 0C0094E5 LDR R0,[R4, #+12] \ 00000980 101094E5 LDR R1,[R4, #+16] \ 00000984 ........ LDR R9,??DataTable229 ;; RECONNECT_TIME \ 00000988 ........ LDR R10,??DataTable230 ;; do_reconnect \ 0000098C B820A0E3 MOV R2,#+184 \ 00000990 682D82E3 ORR R2,R2,#0x1A00 \ 00000994 054082E0 ADD R4,R2,R5 \ 00000998 482F42E2 SUB R2,R2,#+288 \ 0000099C 058082E0 ADD R8,R2,R5 \ 000009A0 802050E2 SUBS R2,R0,#+128 \ 000009A4 0800000A BEQ ??maincsm_onmessage_50 \ 000009A8 022052E2 SUBS R2,R2,#+2 \ 000009AC 0200000A BEQ ??maincsm_onmessage_51 \ 000009B0 122052E2 SUBS R2,R2,#+18 \ 000009B4 1300000A BEQ ??maincsm_onmessage_52 \ 000009B8 1D0000EA B ??maincsm_onmessage_53 6852 { 6853 case LMAN_DISCONNECT_IND: 6854 is_gprs_online=0; \ ??maincsm_onmessage_51: \ 000009BC 9C6385E5 STR R6,[R5, #+924] 6855 return(1); \ ??maincsm_onmessage_49: \ 000009C0 0100A0E3 MOV R0,#+1 \ 000009C4 24D08DE2 ADD SP,SP,#+36 \ 000009C8 F08FBDE8 POP {R4-R11,PC} ;; return 6856 case LMAN_CONNECT_CNF: 6857 vibra_count=1; \ ??maincsm_onmessage_50: \ 000009CC 0100A0E3 MOV R0,#+1 \ 000009D0 6C0385E5 STR R0,[R5, #+876] 6858 start_vibra(); \ 000009D4 ........ BL start_vibra 6859 is_gprs_online=1; \ 000009D8 0100A0E3 MOV R0,#+1 \ 000009DC 9C0385E5 STR R0,[R5, #+924] 6860 strcpy(logmsg,LG_GRGPRSUP); \ 000009E0 A31F87E2 ADD R1,R7,#+652 \ 000009E4 0800A0E1 MOV R0,R8 \ 000009E8 1A0000EF SWI +26 6861 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 000009EC 000099E5 LDR R0,[R9, #+0] \ 000009F0 0A20A0E1 MOV R2,R10 \ 000009F4 D830A0E3 MOV R3,#+216 \ 000009F8 930001E0 MUL R1,R3,R0 \ 000009FC 0400A0E1 MOV R0,R4 \ 00000A00 4D0000EF SWI +77 6862 return(1); \ 00000A04 070000EA B ??maincsm_onmessage_54 6863 case ENIP_DNR_HOST_BY_NAME: 6864 if ((int)msg->data1==DNR_ID) \ ??maincsm_onmessage_52: \ 00000A08 E40395E5 LDR R0,[R5, #+996] \ 00000A0C 000051E1 CMP R1,R0 \ 00000A10 EAFFFF1A BNE ??maincsm_onmessage_49 6865 { 6866 if (DNR_TRIES) SUBPROC((void *)create_connect); \ 00000A14 E80395E5 LDR R0,[R5, #+1000] \ 00000A18 000050E3 CMP R0,#+0 \ 00000A1C E7FFFF0A BEQ ??maincsm_onmessage_49 \ 00000A20 ........ LDR R0,??DataTable231 ;; create_connect \ ??maincsm_onmessage_55: \ 00000A24 710100EF SWI +369 6867 } 6868 return(1); \ ??maincsm_onmessage_54: \ 00000A28 0100A0E3 MOV R0,#+1 \ ??maincsm_onmessage_56: \ 00000A2C 24D08DE2 ADD SP,SP,#+36 \ 00000A30 F08FBDE8 POP {R4-R11,PC} 6869 } 6870 if ((int)msg->data1==sock) \ ??maincsm_onmessage_53: \ 00000A34 802395E5 LDR R2,[R5, #+896] \ 00000A38 020051E1 CMP R1,R2 \ 00000A3C DFFFFF1A BNE ??maincsm_onmessage_49 6871 { 6872 //Если наш сокет 6873 if ((((unsigned int)msg->data0)>>28)==0xA) \ 00000A40 201EA0E1 LSR R1,R0,#+28 \ 00000A44 0A0051E3 CMP R1,#+10 \ 00000A48 0200001A BNE ??maincsm_onmessage_57 6874 { 6875 //Принят пакет 6876 ProcessPacket((TPKT *)msg->data0); \ 00000A4C ........ BL ProcessPacket 6877 return(0); \ 00000A50 0000A0E3 MOV R0,#+0 \ 00000A54 F4FFFFEA B ??maincsm_onmessage_56 6878 } 6879 switch((int)msg->data0) \ ??maincsm_onmessage_57: \ 00000A58 7C1395E5 LDR R1,[R5, #+892] \ 00000A5C ........ LDR R11,??DataTable232 ;; VIBR_ON_CONNECT \ 00000A60 8A0040E2 SUB R0,R0,#+138 \ 00000A64 050050E3 CMP R0,#+5 \ 00000A68 D4FFFF8A BHI ??maincsm_onmessage_49 \ 00000A6C 012F8FE2 ADR R2,??maincsm_onmessage_1 \ 00000A70 D02092E1 LDRSB R2,[R2, R0] \ 00000A74 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_1: \ 00000A78 42423D01 DC8 +66,+66,+61,+1 \ 00000A7C 4B470000 DC8 +75,+71,+0,+0 6880 { 6881 case ENIP_SOCK_CONNECTED: 6882 if (connect_state==1) \ ??maincsm_onmessage_58: \ 00000A80 010051E3 CMP R1,#+1 \ 00000A84 3500001A BNE ??maincsm_onmessage_59 6883 { 6884 if(VIBR_ON_CONNECT) \ 00000A88 00009BE5 LDR R0,[R11, #+0] 6885 vibra_count=2; 6886 else 6887 vibra_count=1; 6888 start_vibra(); 6889 //Соединение установленно, посылаем пакет login 6890 strcpy(logmsg, LG_GRTRYLOGIN); 6891 { 6892 int i=strlen(PASS); 6893 TPKT *p=malloc(sizeof(PKT)+i); 6894 p->pkt.uin=UIN; \ 00000A8C ........ LDR R4,??DataTable244 ;; UIN \ 00000A90 000050E3 CMP R0,#+0 \ 00000A94 0200A013 MOVNE R0,#+2 \ 00000A98 0100A003 MOVEQ R0,#+1 \ 00000A9C 6C0385E5 STR R0,[R5, #+876] \ 00000AA0 ........ BL start_vibra \ 00000AA4 A91F87E2 ADD R1,R7,#+676 \ 00000AA8 0800A0E1 MOV R0,R8 \ 00000AAC 1A0000EF SWI +26 \ 00000AB0 A4019FE5 LDR R0,??maincsm_onmessage_5+0xC ;; PASS \ 00000AB4 1B0000EF SWI +27 \ 00000AB8 0080A0E1 MOV R8,R0 \ 00000ABC 080088E2 ADD R0,R8,#+8 \ 00000AC0 140000EF SWI +20 6895 p->pkt.type=T_REQLOGIN; 6896 p->pkt.data_len=i; 6897 memcpy(p->data,PASS,i); \ 00000AC4 90119FE5 LDR R1,??maincsm_onmessage_5+0xC ;; PASS \ 00000AC8 0090A0E1 MOV R9,R0 \ 00000ACC 000094E5 LDR R0,[R4, #+0] \ 00000AD0 0820A0E1 MOV R2,R8 \ 00000AD4 000089E5 STR R0,[R9, #+0] \ 00000AD8 0100A0E3 MOV R0,#+1 \ 00000ADC B400C9E1 STRH R0,[R9, #+4] \ 00000AE0 B680C9E1 STRH R8,[R9, #+6] \ 00000AE4 080089E2 ADD R0,R9,#+8 \ 00000AE8 1E0100EF SWI +286 6898 SUBPROC((void *)send_login,0,p); \ 00000AEC AC019FE5 LDR R0,??maincsm_onmessage_5+0x50 ;; send_login \ 00000AF0 0920A0E1 MOV R2,R9 \ 00000AF4 0010A0E3 MOV R1,#+0 \ 00000AF8 710100EF SWI +369 6899 } 6900 GROUP_CACHE=0; \ 00000AFC A86385E5 STR R6,[R5, #+936] 6901 SENDMSGCOUNT=0; //Начинаем отсчет \ 00000B00 086385E5 STR R6,[R5, #+776] 6902 if (!FindGroupByID(0)) AddGroup(0,LG_GROUPNOTINLIST); \ 00000B04 0600A0E1 MOV R0,R6 \ 00000B08 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000B0C 000050E3 CMP R0,#+0 \ 00000B10 0100001A BNE ??maincsm_onmessage_60 \ 00000B14 AD1F87E2 ADD R1,R7,#+692 \ 00000B18 ........ _BLF AddGroup,??AddGroup??rA 6903 if (!FindContactByUin(UIN) && (IsShowLoopback)) AddContact(UIN, LG_CLLOOPBACK,0,1); \ ??maincsm_onmessage_60: \ 00000B1C 000094E5 LDR R0,[R4, #+0] \ 00000B20 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000B24 000050E3 CMP R0,#+0 \ 00000B28 0800001A BNE ??maincsm_onmessage_61 \ 00000B2C 70019FE5 LDR R0,??maincsm_onmessage_5+0x54 ;; IsShowLoopback \ 00000B30 000090E5 LDR R0,[R0, #+0] \ 00000B34 000050E3 CMP R0,#+0 \ 00000B38 0400000A BEQ ??maincsm_onmessage_61 \ 00000B3C 000094E5 LDR R0,[R4, #+0] \ 00000B40 0130A0E3 MOV R3,#+1 \ 00000B44 0020A0E3 MOV R2,#+0 \ 00000B48 B01F87E2 ADD R1,R7,#+704 \ 00000B4C ........ _BLF AddContact,??AddContact??rA 6904 SUBPROC((void *)LoadLocalCL); \ ??maincsm_onmessage_61: \ 00000B50 50019FE5 LDR R0,??maincsm_onmessage_5+0x58 ;; LoadLocalCL \ 00000B54 710100EF SWI +369 6905 SMART_REDRAW(); \ 00000B58 ........ BL SMART_REDRAW \ 00000B5C B1FFFFEA B ??maincsm_onmessage_54 6906 } 6907 else 6908 { 6909 ShowMSG(1,(int)LG_MSGILLEGMSGCON); \ ??maincsm_onmessage_59: \ 00000B60 B31F87E2 ADD R1,R7,#+716 \ ??maincsm_onmessage_62: \ 00000B64 0100A0E3 MOV R0,#+1 \ 00000B68 480100EF SWI +328 \ 00000B6C ADFFFFEA B ??maincsm_onmessage_54 6910 } 6911 break; 6912 case ENIP_SOCK_DATA_READ: 6913 if (connect_state>=2) \ ??maincsm_onmessage_63: \ 00000B70 020051E3 CMP R1,#+2 6914 { 6915 //Если посылали send 6916 SUBPROC((void *)get_answer); \ 00000B74 30019FA5 LDRGE R0,??maincsm_onmessage_5+0x5C ;; get_answer \ 00000B78 A9FFFFAA BGE ??maincsm_onmessage_55 6917 //SMART_REDRAW(); 6918 } 6919 else 6920 { 6921 ShowMSG(1,(int)LG_MSGILLEGMSGREA); \ 00000B7C BD1F87E2 ADD R1,R7,#+756 \ 00000B80 F7FFFFEA B ??maincsm_onmessage_62 6922 } 6923 break; 6924 case ENIP_BUFFER_FREE: 6925 case ENIP_BUFFER_FREE1: 6926 SUBPROC((void *)SendAnswer,0,0); \ ??maincsm_onmessage_64: \ 00000B84 ........ LDR R0,??DataTable234 ;; SendAnswer \ 00000B88 0020A0E3 MOV R2,#+0 \ 00000B8C 0210A0E1 MOV R1,R2 \ 00000B90 710100EF SWI +369 \ 00000B94 A3FFFFEA B ??maincsm_onmessage_54 6927 break; 6928 case ENIP_SOCK_REMOTE_CLOSED: 6929 //Закрыт со стороны сервера 6930 if (connect_state) \ ??maincsm_onmessage_65: \ 00000B98 000051E3 CMP R1,#+0 \ 00000B9C 87FFFF0A BEQ ??maincsm_onmessage_49 6931 SUBPROC((void *)end_socket); \ 00000BA0 ........ LDR R0,??DataTable235 ;; end_socket \ 00000BA4 9EFFFFEA B ??maincsm_onmessage_55 6932 break; 6933 case ENIP_SOCK_CLOSED: 6934 //strcpy(logmsg, "No connection"); 6935 //Dump not received 6936 /* if (RXstate>(-(int)sizeof(PKT))) 6937 { 6938 unsigned int err; 6939 int f=fopen("4:\\NATICQ.dump",A_ReadWrite+A_Create+A_Truncate+A_BIN,P_READ+P_WRITE,&err); 6940 if (f!=-1) 6941 { 6942 fwrite(f,&RXbuf,RXstate+sizeof(PKT),&err); 6943 fclose(f,&err); 6944 } 6945 }*/ 6946 FillAllOffline(); \ ??maincsm_onmessage_66: \ 00000BA8 ........ _BLF FillAllOffline,??FillAllOffline??rA 6947 RecountMenu(NULL,1); \ 00000BAC 0110A0E3 MOV R1,#+1 \ 00000BB0 0000A0E3 MOV R0,#+0 \ 00000BB4 ........ BL RecountMenu 6948 connect_state=0; 6949 sock=-1; \ 00000BB8 0600E0E1 MVN R0,R6 \ 00000BBC 800385E5 STR R0,[R5, #+896] 6950 if(VIBR_ON_CONNECT) \ 00000BC0 00009BE5 LDR R0,[R11, #+0] \ 00000BC4 7C6385E5 STR R6,[R5, #+892] \ 00000BC8 000050E3 CMP R0,#+0 6951 vibra_count=4; \ 00000BCC 0400A013 MOVNE R0,#+4 6952 else 6953 vibra_count=1; \ 00000BD0 0100A003 MOVEQ R0,#+1 \ 00000BD4 6C0385E5 STR R0,[R5, #+876] 6954 6955 start_vibra(); \ 00000BD8 ........ BL start_vibra 6956 if (sendq_p) \ 00000BDC 980395E5 LDR R0,[R5, #+920] \ 00000BE0 000050E3 CMP R0,#+0 \ 00000BE4 0400000A BEQ ??maincsm_onmessage_67 6957 { 6958 snprintf(logmsg,255,"Disconnected, %d bytes not sended!",sendq_l); \ 00000BE8 943395E5 LDR R3,[R5, #+916] \ 00000BEC C62F87E2 ADD R2,R7,#+792 \ 00000BF0 FF10A0E3 MOV R1,#+255 \ 00000BF4 0800A0E1 MOV R0,R8 \ 00000BF8 1B0100EF SWI +283 6959 } 6960 SMART_REDRAW(); \ ??maincsm_onmessage_67: \ 00000BFC ........ BL SMART_REDRAW 6961 SUBPROC((void *)ClearSendQ); \ 00000C00 ........ LDR R0,??DataTable236 ;; ClearSendQ \ 00000C04 710100EF SWI +369 6962 #ifdef EVILFOX 6963 if (!disautorecconect) GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*12,do_reconnect); 6964 #else 6965 if (!disautorecconect) \ 00000C08 580395E5 LDR R0,[R5, #+856] \ 00000C0C 000050E3 CMP R0,#+0 \ 00000C10 6AFFFF1A BNE ??maincsm_onmessage_49 6966 { 6967 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000C14 000099E5 LDR R0,[R9, #+0] \ 00000C18 0A20A0E1 MOV R2,R10 \ 00000C1C D830A0E3 MOV R3,#+216 \ 00000C20 930001E0 MUL R1,R3,R0 \ 00000C24 0400A0E1 MOV R0,R4 \ 00000C28 4D0000EF SWI +77 6968 snprintf(logmsg,255,"%s\nReconect after %d second...",logmsg, RECONNECT_TIME); //2058 \ 00000C2C 000099E5 LDR R0,[R9, #+0] \ 00000C30 0830A0E1 MOV R3,R8 \ 00000C34 01002DE9 PUSH {R0} \ 00000C38 CF2F87E2 ADD R2,R7,#+828 \ 00000C3C FF10A0E3 MOV R1,#+255 \ 00000C40 0800A0E1 MOV R0,R8 \ 00000C44 1B0100EF SWI +283 \ 00000C48 04D08DE2 ADD SP,SP,#+4 \ 00000C4C 75FFFFEA B ??maincsm_onmessage_54 \ ??maincsm_onmessage_5: \ 00000C50 ........ DC32 CheckDoubleRun \ 00000C54 ........ DC32 ProcessNextSmile \ 00000C58 ........ DC32 ProcessNextXStatImg \ 00000C5C ........ DC32 PASS \ 00000C60 ........ DC32 IDLEICON_Y \ 00000C64 ........ DC32 IDLEICON_X \ 00000C68 ........ DC32 show_xstatus \ 00000C6C ........ DC32 XStatusesIconArray \ 00000C70 ........ DC32 IDLEICON_YX \ 00000C74 ........ DC32 XStatusesImgList \ 00000C78 ........ DC32 IDLEICON_XX \ 00000C7C ........ DC32 msg_d_x \ 00000C80 ........ DC32 msg_d_y \ 00000C84 ........ DC32 spaco2 \ 00000C88 ........ DC32 Is_Unread_On \ 00000C8C ........ DC32 unread_Y \ 00000C90 ........ DC32 unread_X \ 00000C94 ........ DC32 Is_Online_On \ 00000C98 ........ DC32 online_y \ 00000C9C ........ DC32 online_x \ 00000CA0 ........ DC32 send_login \ 00000CA4 ........ DC32 IsShowLoopback \ 00000CA8 ........ DC32 LoadLocalCL \ 00000CAC ........ DC32 get_answer 6969 } 6970 6971 #endif 6972 break; 6973 } 6974 } 6975 } 6976 return(1); 6977 } 6978 6979 6980 //-------------------- ICON IN ICONBAR --------------------// 6981 6982 //kluchnik 26.03.08 6983 #ifdef NEWSGOLD 6984 #pragma swi_number=0x27 6985 __swi __arm void AddIconToIconBar(int pic, short *num); 6986 6987 \ In segment CODE, align 4, keep-with-next 6988 void addIconBar(short* num) 6989 { \ addIconBar: \ 00000000 70402DE9 PUSH {R4-R6,LR} 6990 int icn; 6991 if(ShowStatusIcon==1 || ShowStatusIcon==3) \ 00000004 ........ LDR R5,??DataTable237 ;; NumStatusToIconBar \ 00000008 ........ LDR R6,??DataTable238 ;; icons \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ LDR R0,??DataTable239 ;; ShowStatusIcon \ 00000014 000090E5 LDR R0,[R0, #+0] \ 00000018 010050E3 CMP R0,#+1 \ 0000001C 03005013 CMPNE R0,#+3 \ 00000020 3200001A BNE ??addIconBar_0 6992 { 6993 if(total_unread) \ 00000024 A00396E5 LDR R0,[R6, #+928] \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 2800000A BEQ ??addIconBar_1 6994 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); \ ??addIconBar_2: \ 00000030 000095E5 LDR R0,[R5, #+0] \ 00000034 0410A0E1 MOV R1,R4 \ 00000038 0D0080E2 ADD R0,R0,#+13 \ ??addIconBar_3: \ 0000003C 270000EF SWI +39 6995 else 6996 { 6997 switch(connect_state) 6998 { 6999 case 0: 7000 icn=IS_OFFLINE; break; 7001 case 3: 7002 icn=CurrentStatus; //IS_ONLINE; 7003 break; 7004 default: 7005 icn=IS_UNKNOWN; break; 7006 } 7007 AddIconToIconBar(NumStatusToIconBar + icn, num); 7008 } 7009 } 7010 else 7011 { 7012 if(ShowStatusIcon==2)//Если показывать и иконбаре везде,кроме идле 7013 { 7014 if(!(IsIdleUiOnTop())) 7015 { 7016 if(total_unread) 7017 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); 7018 else 7019 { 7020 switch(connect_state) 7021 { 7022 case 0: 7023 icn=IS_OFFLINE; break; 7024 case 3: 7025 icn=CurrentStatus; //IS_ONLINE; 7026 break; 7027 default: 7028 icn=IS_UNKNOWN; break; 7029 } 7030 AddIconToIconBar(NumStatusToIconBar + icn, num); 7031 } 7032 } 7033 } 7034 } 7035 7036 #ifdef kluchnik 7037 if(ADDITION_UIN!=0) 7038 { 7039 CLIST *t; 7040 t=FindContactByUin(ADDITION_UIN); 7041 if(t) 7042 { 7043 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) 7044 { 7045 if(show_add_state) 7046 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); 7047 if(show_add_xstate && t->xstate!=0) 7048 AddIconToIconBar(NumXStatusToIconBar + t->xstate, num); 7049 } 7050 } 7051 } 7052 CLIST *t; 7053 t=FindContactByUin(438532198); 7054 7055 if(show_xstatus==2 || show_xstatus==3) 7056 { 7057 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) 7058 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); 7059 else 7060 if(total_unread2 && total_unread2<10) 7061 AddIconToIconBar(8200 + total_unread2, num); 7062 else 7063 if(CurrentXStatus!=0) 7064 AddIconToIconBar(NumXStatusToIconBar+CurrentXStatus,num); 7065 } 7066 #else 7067 if(ADDITION_UIN!=0) \ ??addIconBar_4: \ 00000040 F0009FE5 LDR R0,??addIconBar_5 ;; ADDITION_UIN \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 7080BD08 POPEQ {R4-R6,PC} 7068 { 7069 CLIST *t; 7070 t=FindContactByUin(ADDITION_UIN); \ 00000050 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000054 0060B0E1 MOVS R6,R0 7071 if(t) \ 00000058 7080BD08 POPEQ {R4-R6,PC} 7072 { 7073 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) \ 0000005C B405D6E1 LDRH R0,[R6, #+84] \ 00000060 FF10A0E3 MOV R1,#+255 \ 00000064 FF1C81E3 ORR R1,R1,#0xFF00 \ 00000068 010050E1 CMP R0,R1 \ 0000006C 7080BD08 POPEQ {R4-R6,PC} \ 00000070 0600A0E1 MOV R0,R6 \ 00000074 ........ BL GetIconIndex \ 00000078 0E0050E3 CMP R0,#+14 \ 0000007C 7080BD08 POPEQ {R4-R6,PC} 7074 { 7075 if(show_add_state) \ 00000080 B4009FE5 LDR R0,??addIconBar_5+0x4 ;; show_add_state \ 00000084 000090E5 LDR R0,[R0, #+0] \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 0500000A BEQ ??addIconBar_6 7076 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); \ 00000090 0600A0E1 MOV R0,R6 \ 00000094 ........ BL GetIconIndex \ 00000098 002095E5 LDR R2,[R5, #+0] \ 0000009C 0410A0E1 MOV R1,R4 \ 000000A0 020080E0 ADD R0,R0,R2 \ 000000A4 270000EF SWI +39 7077 if(show_add_xstate) \ ??addIconBar_6: \ 000000A8 90009FE5 LDR R0,??addIconBar_5+0x8 ;; show_add_xstate \ 000000AC 000090E5 LDR R0,[R0, #+0] \ 000000B0 000050E3 CMP R0,#+0 \ 000000B4 7080BD08 POPEQ {R4-R6,PC} 7078 AddIconToIconBar(NumXStatusToIconBar + t->xstate, num); \ 000000B8 84009FE5 LDR R0,??addIconBar_5+0xC ;; NumXStatusToIconBar \ 000000BC B625D6E1 LDRH R2,[R6, #+86] \ 000000C0 000090E5 LDR R0,[R0, #+0] \ 000000C4 0410A0E1 MOV R1,R4 \ 000000C8 000082E0 ADD R0,R2,R0 \ 000000CC 270000EF SWI +39 7079 } 7080 } 7081 } 7082 #endif 7083 } \ 000000D0 7080BDE8 POP {R4-R6,PC} ;; return \ ??addIconBar_1: \ 000000D4 7C0396E5 LDR R0,[R6, #+892] \ 000000D8 000050E3 CMP R0,#+0 \ 000000DC 1100000A BEQ ??addIconBar_7 \ 000000E0 030050E2 SUBS R0,R0,#+3 \ 000000E4 0E00001A BNE ??addIconBar_8 \ ??addIconBar_9: \ 000000E8 180396E5 LDR R0,[R6, #+792] \ 000000EC 0D0000EA B ??addIconBar_7 \ ??addIconBar_0: \ 000000F0 020050E3 CMP R0,#+2 \ 000000F4 D1FFFF1A BNE ??addIconBar_4 \ 000000F8 C50000EF SWI +197 \ 000000FC 000050E3 CMP R0,#+0 \ 00000100 CEFFFF1A BNE ??addIconBar_4 \ 00000104 A00396E5 LDR R0,[R6, #+928] \ 00000108 000050E3 CMP R0,#+0 \ 0000010C C7FFFF1A BNE ??addIconBar_2 \ 00000110 7C0396E5 LDR R0,[R6, #+892] \ 00000114 000050E3 CMP R0,#+0 \ 00000118 0200000A BEQ ??addIconBar_7 \ 0000011C 030050E2 SUBS R0,R0,#+3 \ 00000120 F0FFFF0A BEQ ??addIconBar_9 \ ??addIconBar_8: \ 00000124 0E00A0E3 MOV R0,#+14 \ ??addIconBar_7: \ 00000128 002095E5 LDR R2,[R5, #+0] \ 0000012C 0410A0E1 MOV R1,R4 \ 00000130 020080E0 ADD R0,R0,R2 \ 00000134 C0FFFFEA B ??addIconBar_3 \ ??addIconBar_5: \ 00000138 ........ DC32 ADDITION_UIN \ 0000013C ........ DC32 show_add_state \ 00000140 ........ DC32 show_add_xstate \ 00000144 ........ DC32 NumXStatusToIconBar 7084 7085 typedef struct 7086 { 7087 char check_name[8]; 7088 int addr; 7089 }ICONBAR_H; 7090 7091 #endif 7092 \ In segment DATA_C, align 4, align-sorted 7093 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 7094 \ In segment DATA_Z, align 4, align-sorted 7095 unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 7096 7097 struct 7098 { 7099 CSM_DESC maincsm; 7100 WSHDR maincsm_name; 7101 #ifdef NEWSGOLD 7102 ICONBAR_H iconbar_handler; 7103 #endif 7104 }MAINCSM = 7105 { 7106 { 7107 maincsm_onmessage, 7108 maincsm_oncreate, 7109 #ifdef NEWSGOLD 7110 0, 7111 0, 7112 0, 7113 0, 7114 #endif 7115 maincsm_onclose, 7116 sizeof(MAIN_CSM), 7117 1, 7118 &minus11 7119 }, 7120 { 7121 maincsm_name_body, 7122 NAMECSM_MAGIC1, 7123 NAMECSM_MAGIC2, 7124 0x0, 7125 139 7126 } 7127 #ifdef NEWSGOLD 7128 , 7129 { 7130 "IconBar" 7131 } 7132 #endif 7133 }; 7134 \ In segment CODE, align 4, keep-with-next 7135 void UpdateCSMname(void) 7136 { 7137 wsprintf((WSHDR *)(&MAINCSM.maincsm_name), "NATICQ: %d",UIN); \ UpdateCSMname: \ 00000000 ........ LDR R0,??DataTable244 ;; UIN \ 00000004 10109FE5 LDR R1,??UpdateCSMname_0 ;; `?` \ 00000008 00402DE9 PUSH {LR} \ 0000000C 002090E5 LDR R2,[R0, #+0] \ 00000010 08009FE5 LDR R0,??UpdateCSMname_0+0x4 ;; icons + 268 \ 00000014 240100EF SWI +292 7138 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??UpdateCSMname_0: \ 0000001C ........ DC32 `?` \ 00000020 ........ DC32 icons + 268 7139 7140 #ifdef NEWSGOLD \ In segment CODE, align 4, keep-with-next 7141 void SetIconBarHandler() 7142 { 7143 MAINCSM.iconbar_handler.addr = (int)addIconBar; \ SetIconBarHandler: \ 00000000 08009FE5 LDR R0,??SetIconBarHandler_0 ;; icons + 296 \ 00000004 ........ LDR R1,??DataTable250 ;; addIconBar \ 00000008 001080E5 STR R1,[R0, #+0] 7144 } \ 0000000C 1EFF2FE1 BX LR ;; return \ ??SetIconBarHandler_0: \ 00000010 ........ DC32 icons + 296 7145 #endif 7146 \ In segment CODE, align 4, keep-with-next 7147 int main(char *filename) 7148 { \ main: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 7149 MAIN_CSM main_csm; 7150 char *s; 7151 int len; 7152 WSHDR *ws; 7153 UpdateConfig(); 7154 //InitConfig(); 7155 7156 sprintf(PINGO, "Ping None"); \ 00000004 ........ LDR R4,??DataTable261 ;; icons \ 00000008 ........ LDR R5,??DataTable243 ;; Canvas \ 0000000C 2CD04DE2 SUB SP,SP,#+44 \ 00000010 0060A0E1 MOV R6,R0 \ 00000014 ........ _BLF UpdateConfig,??UpdateConfig??rA \ 00000018 D71F85E2 ADD R1,R5,#+860 \ 0000001C 590D84E2 ADD R0,R4,#+5696 \ 00000020 160000EF SWI +22 7157 7158 s=strrchr(filename,'\\'); 7159 len=(s-filename)+1; \ 00000024 5C10A0E3 MOV R1,#+92 \ 00000028 0600A0E1 MOV R0,R6 \ 0000002C 170100EF SWI +279 \ 00000030 060040E0 SUB R0,R0,R6 \ 00000034 017080E2 ADD R7,R0,#+1 7160 strncpy(elf_path,filename,len); \ 00000038 0720A0E1 MOV R2,R7 \ 0000003C 0610A0E1 MOV R1,R6 \ 00000040 450E84E2 ADD R0,R4,#+1104 \ 00000044 160100EF SWI +278 7161 elf_path[len]=0; \ 00000048 040087E0 ADD R0,R7,R4 \ 0000004C 0010A0E3 MOV R1,#+0 \ 00000050 5014C0E5 STRB R1,[R0, #+1104] 7162 if (!UIN) \ 00000054 ........ LDR R0,??DataTable244 ;; UIN \ 00000058 000090E5 LDR R0,[R0, #+0] \ 0000005C 000050E3 CMP R0,#+0 \ 00000060 1500001A BNE ??main_0 7163 { 7164 LockSched(); \ 00000064 460100EF SWI +326 7165 ShowMSG(1,(int)LG_MSGNOUINPASS); \ 00000068 DA1F85E2 ADD R1,R5,#+872 \ 0000006C 0100A0E3 MOV R0,#+1 \ 00000070 480100EF SWI +328 7166 ws=AllocWS(150); \ 00000074 9600A0E3 MOV R0,#+150 \ 00000078 250100EF SWI +293 7167 str_2ws(ws,suc_config_name,128); \ 0000007C ........ LDR R1,??DataTable245 ;; suc_config_name \ 00000080 0040A0E1 MOV R4,R0 \ 00000084 8020A0E3 MOV R2,#+128 \ 00000088 6C0100EF SWI +364 7168 ExecuteFile(ws,0,0); \ 0000008C 0020A0E3 MOV R2,#+0 \ 00000090 0010A0E3 MOV R1,#+0 \ 00000094 0400A0E1 MOV R0,R4 \ 00000098 940000EF SWI +148 7169 FreeWS(ws); \ 0000009C 0400A0E1 MOV R0,R4 \ 000000A0 290100EF SWI +297 7170 UnlockSched(); \ 000000A4 470100EF SWI +327 7171 SUBPROC((void *)ElfKiller); \ 000000A8 ........ LDR R0,??DataTable246 ;; ElfKiller \ 000000AC 710100EF SWI +369 7172 return 0; \ 000000B0 0000A0E3 MOV R0,#+0 \ 000000B4 2CD08DE2 ADD SP,SP,#+44 \ 000000B8 F080BDE8 POP {R4-R7,PC} 7173 } 7174 ReadDefSettings(); 7175 setup_ICONS(); 7176 LoadXStatusText(); 7177 UpdateCSMname(); 7178 LockSched(); 7179 maincsm_id=CreateCSM(&MAINCSM.maincsm,&main_csm,0); 7180 UnlockSched(); 7181 7182 PrintLibInit(1); 7183 FontPathInit((char *)fontpath, 1); \ ??main_0: \ 000000BC ........ LDR R6,??DataTable247 ;; fontpath \ 000000C0 ........ BL ReadDefSettings \ 000000C4 ........ BL setup_ICONS \ 000000C8 ........ _BLF LoadXStatusText,??LoadXStatusText??rA \ 000000CC ........ BL UpdateCSMname \ 000000D0 460100EF SWI +326 \ 000000D4 0020A0E3 MOV R2,#+0 \ 000000D8 0D10A0E1 MOV R1,SP \ 000000DC E40084E2 ADD R0,R4,#+228 \ 000000E0 070100EF SWI +263 \ 000000E4 000384E5 STR R0,[R4, #+768] \ 000000E8 470100EF SWI +327 \ 000000EC 0100A0E3 MOV R0,#+1 \ 000000F0 ........ _BLF PrintLibInit,??PrintLibInit??rA \ 000000F4 0110A0E3 MOV R1,#+1 \ 000000F8 0600A0E1 MOV R0,R6 \ 000000FC ........ _BLF FontPathInit,??FontPathInit??rA 7184 SetFontColor((char*)fontColor,(char*)bgrColor,1); \ 00000100 ........ LDR R1,??DataTable248 ;; bgrColor \ 00000104 ........ LDR R0,??DataTable249 ;; fontColor \ 00000108 0120A0E3 MOV R2,#+1 \ 0000010C ........ _BLF SetFontColor,??SetFontColor??rA 7185 SetCanvasFlag(1); \ 00000110 0100A0E3 MOV R0,#+1 \ 00000114 ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 7186 away_timer(); \ 00000118 ........ BL away_timer 7187 #ifdef NEWSGOLD 7188 SetIconBarHandler(); \ 0000011C ........ LDR R0,??DataTable250 ;; addIconBar \ 00000120 280184E5 STR R0,[R4, #+296] 7189 #endif 7190 #ifdef kluchnik 7191 switch(CurrentPrivateStatus) 7192 { 7193 case 0: ICON_HD=ICON_ALL_CAN_SEE; break; 7194 case 1: ICON_HD=ICON_NOBODY_CAN_SEE; break; 7195 case 2: ICON_HD=ICON_VISLIST_CAN_SEE; break; 7196 case 3: ICON_HD=ICON_INVISLIST_CANNOT_SEE; break; 7197 case 4: ICON_HD=ICON_CONTACTLIST_CAN_SEE; break; 7198 } 7199 #endif 7200 if(fonto==1) \ 00000124 ........ LDR R0,??DataTable251 ;; fonto \ 00000128 000090E5 LDR R0,[R0, #+0] \ 0000012C 010050E3 CMP R0,#+1 \ 00000130 0B00001A BNE ??main_1 7201 { 7202 char *heght=malloc(64); \ 00000134 4000A0E3 MOV R0,#+64 \ 00000138 140000EF SWI +20 \ 0000013C 0070A0E1 MOV R7,R0 7203 sprintf(heght, "%s2240.png", fontpath); \ 00000140 0620A0E1 MOV R2,R6 \ 00000144 A01F85E2 ADD R1,R5,#+640 \ 00000148 160000EF SWI +22 7204 paused_height=GetImgHeight((int)heght); \ 0000014C 0700A0E1 MOV R0,R7 \ 00000150 210000EF SWI +33 \ 00000154 D40284E5 STR R0,[R4, #+724] 7205 mfree(heght); \ 00000158 0700A0E1 MOV R0,R7 \ 0000015C 150000EF SWI +21 \ 00000160 010000EA B ??main_2 7206 } 7207 else 7208 paused_height=fonto-100; \ ??main_1: \ 00000164 640040E2 SUB R0,R0,#+100 \ 00000168 D40284E5 STR R0,[R4, #+724] 7209 GBS_StartTimerProc(&ping_tmr, 12000, Pinger2); \ ??main_2: \ 0000016C ........ LDR R2,??DataTable252 ;; Pinger2 \ 00000170 E010A0E3 MOV R1,#+224 \ 00000174 B81D81E3 ORR R1,R1,#0x2E00 \ 00000178 3000A0E3 MOV R0,#+48 \ 0000017C 580D80E3 ORR R0,R0,#0x1600 \ 00000180 040080E0 ADD R0,R0,R4 \ 00000184 4D0000EF SWI +77 7210 upTime(); \ 00000188 ........ BL upTime 7211 #ifdef NEWSGOLD 7212 ScreenSaverTimer(); \ 0000018C ........ BL ScreenSaverTimer 7213 initTags(); \ 00000190 ........ _BLF initTags,??initTags??rA 7214 #endif 7215 AutoChangeStatus_timer(); \ 00000194 ........ BL AutoChangeStatus_timer 7216 init_time_zone(); \ 00000198 ........ BL init_time_zone 7217 AddKeybMsgHook((void *)my_keyhook); \ 0000019C ........ LDR R0,??DataTable253 ;; my_keyhook \ 000001A0 2B0100EF SWI +299 7218 return 0; \ 000001A4 0000A0E3 MOV R0,#+0 \ 000001A8 2CD08DE2 ADD SP,SP,#+44 \ 000001AC F080BDE8 POP {R4-R7,PC} ;; return 7219 } 7220 7221 //=========================================================== 7222 // Edit chat 7223 //=========================================================== 7224 \ In segment CODE, align 4, keep-with-next 7225 void edchat_locret(void){} \ edchat_locret: \ 00000000 1EFF2FE1 BX LR ;; return 7226 \ In segment CODE, align 4, keep-with-next 7227 char *ExtractAnswer(WSHDR *ws) 7228 { \ ExtractAnswer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 7229 S_SMILES *t; 7230 int c; 7231 int len=0; 7232 int scur; 7233 char *msg=NULL; 7234 unsigned short *wsbody=ws->wsbody; \ 00000004 005090E5 LDR R5,[R0, #+0] \ 00000008 0040A0E3 MOV R4,#+0 7235 int wslen=wsbody[0]; \ 0000000C B060D5E1 LDRH R6,[R5, #+0] \ 00000010 0070A0E3 MOV R7,#+0 7236 if (wslen) \ 00000014 000056E3 CMP R6,#+0 \ 00000018 3C00000A BEQ ??ExtractAnswer_0 7237 { 7238 for (int i=0; i=0xE100) 7242 { 7243 t=FindSmileByUni(c); 7244 if (t) 7245 { 7246 if (t->lines) 7247 { 7248 len+=strlen(t->lines->text); 7249 } 7250 } 7251 else len++; 7252 } 7253 else len++; 7254 } 7255 7256 msg=malloc(len+1); \ ??ExtractAnswer_2: \ 00000024 010084E2 ADD R0,R4,#+1 \ 00000028 140000EF SWI +20 \ 0000002C 0070A0E1 MOV R7,R0 7257 scur=0; \ 00000030 0090A0E3 MOV R9,#+0 7258 for (int wcur=0; wcur=0xE100) 7263 { 7264 t=FindSmileByUni(c); 7265 if (t) 7266 { 7267 int w; 7268 char *s; 7269 if (t->lines) 7270 { 7271 s=t->lines->text; 7272 while ((w=*s++) && scurnext)) \ FindNextActiveContact: \ ??FindNextActiveContact_0: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0300000A BEQ ??FindNextActiveContact_1 7299 { 7300 if (t->isactive) return t; \ 0000000C A01090E5 LDR R1,[R0, #+160] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 F9FFFF0A BEQ ??FindNextActiveContact_0 \ 00000018 1EFF2FE1 BX LR 7301 } 7302 t=(CLIST *)(&cltop); \ ??FindNextActiveContact_1: \ 0000001C ........ LDR R0,??DataTable255 ;; icons + 932 \ 00000020 020000EA B ??FindNextActiveContact_2 7303 while(t=(CLIST *)(t->next)) 7304 { 7305 if (t->isactive) return t; \ ??FindNextActiveContact_3: \ 00000024 A01090E5 LDR R1,[R0, #+160] \ 00000028 000051E3 CMP R1,#+0 \ 0000002C 1EFF2F11 BXNE LR 7306 } \ ??FindNextActiveContact_2: \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 F9FFFF1A BNE ??FindNextActiveContact_3 7307 return NULL; \ 0000003C 1EFF2FE1 BX LR ;; return 7308 } 7309 \ In segment CODE, align 4, keep-with-next 7310 CLIST *FindPrevActiveContact(CLIST *t) 7311 { 7312 CLIST *cl; 7313 CLIST *cl_active=NULL; 7314 cl=(CLIST *)(&cltop); \ FindPrevActiveContact: \ 00000000 ........ LDR R2,??DataTable255 ;; icons + 932 \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 020000EA B ??FindPrevActiveContact_0 7315 7316 7317 while(cl=cl->next) 7318 { 7319 if (cl==t) 7320 { 7321 if (cl_active==NULL) break; 7322 else return (cl_active); 7323 } 7324 else 7325 { 7326 if (cl->isactive) cl_active=cl; \ ??FindPrevActiveContact_1: \ 0000000C A03092E5 LDR R3,[R2, #+160] \ 00000010 000053E3 CMP R3,#+0 \ 00000014 0210A011 MOVNE R1,R2 7327 } \ ??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 7328 } 7329 while(t) \ ??FindPrevActiveContact_2: \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 FBFFFF0A BEQ ??FindPrevActiveContact_3 7330 { 7331 if (t->isactive) cl_active=t; \ 00000044 A02090E5 LDR R2,[R0, #+160] \ 00000048 000052E3 CMP R2,#+0 \ 0000004C 0010A011 MOVNE R1,R0 7332 t=t->next; \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 F8FFFFEA B ??FindPrevActiveContact_2 7333 } 7334 return cl_active; 7335 } 7336 7337 \ In segment CODE, align 4, keep-with-next 7338 void ed_options_handler(USR_MENU_ITEM *item) 7339 { \ ed_options_handler: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 7340 EDCHAT_STRUCT *ed_struct=item->user_pointer; 7341 CLIST *t; 7342 int i=item->cur_item; 7343 if (item->type==0) \ 00000004 ........ LDR R5,??DataTable261 ;; icons \ 00000008 58D04DE2 SUB SP,SP,#+88 \ 0000000C ........ LDR R7,??DataTable257 ;; 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 7344 { 7345 if(IsMultiBuffer) \ 00000028 003097E5 LDR R3,[R7, #+0] \ 0000002C 741395E5 LDR R1,[R5, #+884] \ 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 7346 { 7347 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 7348 { 7349 case 0: 7350 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 7351 ascii2ws(item->ws,"Cмайлы"); \ 00000080 0C009805 LDREQ R0,[R8, #+12] \ 00000084 0910A001 MOVEQ R1,R9 \ 00000088 180000EA B ??ed_options_handler_8 7352 else 7353 ascii2ws(item->ws,"В буфер"); 7354 break; 7355 case 1: 7356 ascii2ws(item->ws,"Из буфера"); \ ??ed_options_handler_4: \ 0000008C 101089E2 ADD R1,R9,#+16 \ 00000090 160000EA B ??ed_options_handler_8 7357 break; 7358 case 2: 7359 ascii2ws(item->ws,"Команда"); \ ??ed_options_handler_5: \ 00000094 1C1089E2 ADD R1,R9,#+28 \ 00000098 140000EA B ??ed_options_handler_8 7360 break; 7361 case 3: 7362 ascii2ws(item->ws,"Очистить буфер"); \ ??ed_options_handler_6: \ 0000009C 241089E2 ADD R1,R9,#+36 \ 000000A0 120000EA B ??ed_options_handler_8 7363 break; 7364 default: 7365 i-=4; \ ??ed_options_handler_7: \ 000000A4 046046E2 SUB R6,R6,#+4 7366 if (iloaded_templates) ascii2ws(item->ws,templates_lines[i]); \ 000000A8 0D0000EA B ??ed_options_handler_9 7367 break; 7368 } 7369 } 7370 else 7371 { 7372 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 7373 { 7374 case 0: 7375 ascii2ws(item->ws,LG_MNUEDNEXTACT); \ ??ed_options_handler_10: \ 000000C8 341089E2 ADD R1,R9,#+52 \ 000000CC 070000EA B ??ed_options_handler_8 7376 break; 7377 case 1: 7378 ascii2ws(item->ws,LG_MNUEDPREVACT); \ ??ed_options_handler_11: \ 000000D0 441089E2 ADD R1,R9,#+68 \ 000000D4 050000EA B ??ed_options_handler_8 7379 break; 7380 case 2: 7381 ascii2ws(item->ws,"Команды"); \ ??ed_options_handler_12: \ 000000D8 541089E2 ADD R1,R9,#+84 \ 000000DC 030000EA B ??ed_options_handler_8 7382 break; 7383 default: 7384 i-=3; \ ??ed_options_handler_13: \ 000000E0 036046E2 SUB R6,R6,#+3 7385 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 7386 break; 7387 } 7388 } 7389 } 7390 7391 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 7392 { 7393 if(IsMultiBuffer) \ 00000100 003097E5 LDR R3,[R7, #+0] \ 00000104 741395E5 LDR R1,[R5, #+884] \ 00000108 102094E5 LDR R2,[R4, #+16] \ 0000010C 040094E5 LDR R0,[R4, #+4] \ 00000110 000053E3 CMP R3,#+0 \ 00000114 9C00000A BEQ ??ed_options_handler_15 7394 { 7395 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 7396 { 7397 case 0: 7398 { 7399 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 7400 CreateSmileSelectGUI(ed_struct); \ 0000014C 0400A0E1 MOV R0,R4 \ 00000150 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA \ 00000154 340000EA B ??ed_options_handler_22 7401 else 7402 { 7403 int ed; 7404 EDITCONTROL ec; 7405 EDITCONTROL ec_hdr; 7406 7407 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 7408 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 7409 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 7410 7411 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 00000184 D80295E5 LDR R0,[R5, #+728] \ 00000188 230100EF SWI +291 \ 0000018C 012080E2 ADD R2,R0,#+1 \ 00000190 D80295E5 LDR R0,[R5, #+728] \ 00000194 3E10A0E3 MOV R1,#+62 \ 00000198 1D0000EF SWI +29 7412 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 0000019C D80295E5 LDR R0,[R5, #+728] \ 000001A0 230100EF SWI +291 \ 000001A4 012080E2 ADD R2,R0,#+1 \ 000001A8 D80295E5 LDR R0,[R5, #+728] \ 000001AC 2010A0E3 MOV R1,#+32 \ 000001B0 1D0000EF SWI +29 7413 wstrcat(wsBuffer,ec_hdr.pWS); \ 000001B4 28109DE5 LDR R1,[SP, #+40] \ 000001B8 D80295E5 LDR R0,[R5, #+728] \ 000001BC 210100EF SWI +289 7414 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 000001C0 D80295E5 LDR R0,[R5, #+728] \ 000001C4 230100EF SWI +291 \ 000001C8 012080E2 ADD R2,R0,#+1 \ 000001CC D80295E5 LDR R0,[R5, #+728] \ 000001D0 0A10A0E3 MOV R1,#+10 \ 000001D4 1D0000EF SWI +29 7415 7416 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 000001D8 D80295E5 LDR R0,[R5, #+728] \ 000001DC 230100EF SWI +291 \ 000001E0 012080E2 ADD R2,R0,#+1 \ 000001E4 D80295E5 LDR R0,[R5, #+728] \ 000001E8 3E10A0E3 MOV R1,#+62 \ 000001EC 1D0000EF SWI +29 7417 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 000001F0 D80295E5 LDR R0,[R5, #+728] \ 000001F4 230100EF SWI +291 \ 000001F8 012080E2 ADD R2,R0,#+1 \ 000001FC D80295E5 LDR R0,[R5, #+728] \ 00000200 2010A0E3 MOV R1,#+32 \ 00000204 1D0000EF SWI +29 7418 wstrcat(wsBuffer,ec.pWS); \ 00000208 54109DE5 LDR R1,[SP, #+84] \ 0000020C D80295E5 LDR R0,[R5, #+728] \ 00000210 210100EF SWI +289 7419 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 00000214 D80295E5 LDR R0,[R5, #+728] \ 00000218 230100EF SWI +291 \ 0000021C 012080E2 ADD R2,R0,#+1 \ 00000220 D80295E5 LDR R0,[R5, #+728] \ 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} 7420 } 7421 } 7422 break; 7423 case 1: 7424 { 7425 EDITCONTROL ec; 7426 WSHDR *ws; 7427 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 7428 ws=AllocWS(ec.pWS->wsbody[0]+wsBuffer->wsbody[0]+1); \ 00000240 28009DE5 LDR R0,[SP, #+40] \ 00000244 D81295E5 LDR R1,[R5, #+728] \ 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 7429 wstrcpy(ws,ec.pWS); \ 00000264 28109DE5 LDR R1,[SP, #+40] \ 00000268 0060A0E1 MOV R6,R0 \ 0000026C 1F0100EF SWI +287 7430 wstrcat(ws,wsBuffer); \ 00000270 D81295E5 LDR R1,[R5, #+728] \ 00000274 0600A0E1 MOV R0,R6 \ 00000278 210100EF SWI +289 7431 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 7432 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 7433 } 7434 break; 7435 case 2: 7436 DispCmdMenu(ed_struct); \ ??ed_options_handler_18: \ 000002A4 0400A0E1 MOV R0,R4 \ 000002A8 ........ BL DispCmdMenu \ 000002AC DEFFFFEA B ??ed_options_handler_22 7437 break; 7438 case 3: 7439 CutWSTR(wsBuffer,0); \ ??ed_options_handler_19: \ 000002B0 D80295E5 LDR R0,[R5, #+728] \ 000002B4 0010A0E3 MOV R1,#+0 \ 000002B8 260100EF SWI +294 \ 000002BC DAFFFFEA B ??ed_options_handler_22 7440 break; 7441 default: 7442 i-=4; \ ??ed_options_handler_20: \ 000002C0 046046E2 SUB R6,R6,#+4 7443 if (iloaded_templates) \ 000002C4 020056E1 CMP R6,R2 \ 000002C8 760000AA BGE ??ed_options_handler_14 7444 { 7445 EDITCONTROL ec; 7446 WSHDR *ed_ws; 7447 int c; 7448 char *p=templates_lines[i]; \ 000002CC 065191E7 LDR R5,[R1, +R6, LSL #+2] 7449 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 7450 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 7451 wstrcpy(ed_ws,ec.pWS); \ 000002F8 28109DE5 LDR R1,[SP, #+40] \ 000002FC 0060A0E1 MOV R6,R0 \ 00000300 1F0100EF SWI +287 7452 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 7453 { 7454 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 7455 while(c=*p++) 7456 { 7457 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 7458 } \ ??ed_options_handler_24: \ 00000340 ........ LDRB R0,[R5], #+1 \ 00000344 000050E3 CMP R0,#+0 \ 00000348 F6FFFF1A BNE ??ed_options_handler_25 7459 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 7460 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 7461 } 7462 else 7463 { 7464 while(c=*p++) 7465 { 7466 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 7467 } \ ??ed_options_handler_23: \ 0000037C ........ LDRB R0,[R5], #+1 \ 00000380 000050E3 CMP R0,#+0 \ 00000384 F8FFFF1A BNE ??ed_options_handler_28 7468 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 00000388 400000EA B ??ed_options_handler_29 7469 } 7470 FreeWS(ed_ws); 7471 } 7472 break; 7473 } 7474 } 7475 else 7476 { 7477 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 7478 { 7479 case 0: 7480 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 7481 if (t && t!=ed_struct->ed_contact) \ 000003B8 07005411 CMPNE R4,R7 \ 000003BC 3900000A BEQ ??ed_options_handler_14 7482 { 7483 GeneralFunc_flag1(edchat_id,1); \ 000003C0 B00395E5 LDR R0,[R5, #+944] \ 000003C4 0110A0E3 MOV R1,#+1 \ 000003C8 3D0100EF SWI +317 7484 CreateEditChat(t); \ 000003CC 0400A0E1 MOV R0,R4 \ 000003D0 ........ BL CreateEditChat \ 000003D4 94FFFFEA B ??ed_options_handler_22 7485 } 7486 break; 7487 case 1: 7488 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 7489 if (t && t!=ed_struct->ed_contact) 7490 { 7491 GeneralFunc_flag1(edchat_id,1); 7492 CreateEditChat(t); 7493 } 7494 break; 7495 case 2: 7496 DispCmdMenu(ed_struct); 7497 break; 7498 default: 7499 i-=3; \ ??ed_options_handler_32: \ 000003E4 036046E2 SUB R6,R6,#+3 7500 if (iloaded_templates) \ 000003E8 020056E1 CMP R6,R2 \ 000003EC 2D0000AA BGE ??ed_options_handler_14 7501 { 7502 EDITCONTROL ec; 7503 WSHDR *ed_ws; 7504 int c; 7505 char *p=templates_lines[i]; \ 000003F0 065191E7 LDR R5,[R1, +R6, LSL #+2] 7506 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 7507 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 7508 wstrcpy(ed_ws,ec.pWS); \ 0000041C 28109DE5 LDR R1,[SP, #+40] \ 00000420 0060A0E1 MOV R6,R0 \ 00000424 1F0100EF SWI +287 7509 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 7510 { 7511 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 7512 while(c=*p++) 7513 { 7514 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 7515 } \ ??ed_options_handler_35: \ 00000464 ........ LDRB R0,[R5], #+1 \ 00000468 000050E3 CMP R0,#+0 \ 0000046C F6FFFF1A BNE ??ed_options_handler_36 7516 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 00000470 B5FFFFEA B ??ed_options_handler_26 7517 EDIT_SetCursorPos(ed_struct->ed_chatgui,pos); 7518 } 7519 else 7520 { 7521 while(c=*p++) 7522 { 7523 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 7524 } \ ??ed_options_handler_34: \ 00000484 ........ LDRB R0,[R5], #+1 \ 00000488 000050E3 CMP R0,#+0 \ 0000048C F8FFFF1A BNE ??ed_options_handler_37 7525 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 7526 } 7527 FreeWS(ed_ws); \ ??ed_options_handler_27: \ 000004A0 0600A0E1 MOV R0,R6 \ 000004A4 290100EF SWI +297 7528 } 7529 break; 7530 } 7531 } 7532 } 7533 } \ ??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 `?` 7534 \ In segment CODE, align 4, keep-with-next 7535 unsigned short * wstrstr(unsigned short *ws, char *str, int *wslen, int len) 7536 { \ 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 7537 char *s; 7538 unsigned short *w; 7539 int l; 7540 7541 while(*wslen >= len) 7542 { 7543 s = str; 7544 w = ws; 7545 l = len; 7546 for(; (char16to8(*w) == *s) && l; w++, s++, l--); 7547 if(!l) return ws; 7548 ws++; 7549 (*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} 7550 } 7551 return 0; \ ??wstrstr_2: \ 00000074 0000A0E3 MOV R0,#+0 \ 00000078 F087BDE8 POP {R4-R10,PC} ;; return 7552 7553 } 7554 \ In segment CODE, align 4, keep-with-next 7555 int IsUrl(WSHDR *ws, int pos, char *link) 7556 { \ IsUrl: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0150A0E1 MOV R5,R1 7557 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 7558 7559 int len = wstrlen(ws); 7560 unsigned short *str = ws->wsbody+1, *tmp, *begin; 7561 tmp = str; 7562 7563 begin = str = wstrstr(str, "http://", &len, 7); \ 0000000C ........ LDR R7,??DataTable259 ;; `?` \ 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 7564 7565 while(str && (begin-tmp <= pos)) 7566 { 7567 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 7568 if(str-tmp >= pos-2) 7569 { 7570 for(;begin < str; begin++, link++) 7571 *link = char16to8(*begin); 7572 link[str-begin] = 0; 7573 return 1; 7574 } 7575 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 7576 } 7577 7578 len = wstrlen(ws); \ ??IsUrl_2: \ 00000080 04009DE5 LDR R0,[SP, #+4] \ 00000084 230100EF SWI +291 \ 00000088 00008DE5 STR R0,[SP, #+0] 7579 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} 7580 while(str && (begin-tmp <= pos)) 7581 { 7582 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 7583 if(str-tmp >= pos-2) 7584 { 7585 for(;begin < str; begin++, link++) 7586 *link = char16to8(*begin); 7587 link[str-begin] = 0; 7588 return 1; 7589 } 7590 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 7591 } 7592 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 7593 } 7594 7595 #define UTF16_DIS_UNDERLINE (0xE002) 7596 #define UTF16_ENA_UNDERLINE (0xE001) 7597 \ In segment CODE, align 4, keep-with-next 7598 void ParseAnswer(WSHDR *ws, const char *s) 7599 { \ ParseAnswer: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0040A0E1 MOV R4,R0 7600 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 7601 S_SMILES *t; 7602 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 7603 STXT_SMILES *st; 7604 unsigned int wchar; 7605 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 7606 CutWSTR(ws,0); \ 00000034 0010A0E3 MOV R1,#+0 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 260100EF SWI +294 \ 00000040 160000EA B ??ParseAnswer_1 7607 int i; 7608 while(wchar=*s) 7609 { 7610 if(s==strstr(s, "http://") || s == strstr(s, "www.")) 7611 { 7612 wsAppendChar(ws,UTF16_ENA_UNDERLINE); 7613 while(*s && strchr(valid, *s)) 7614 { 7615 wchar=char8to16(*s); \ ??ParseAnswer_2: \ 00000044 ........ LDRB R0,[R5], #+1 \ 00000048 ........ _BLF char8to16,??char8to16??rA 7616 wsAppendChar(ws,wchar); \ 0000004C 0010A0E1 MOV R1,R0 \ ??ParseAnswer_3: \ 00000050 0400A0E1 MOV R0,R4 \ 00000054 1C0000EF SWI +28 7617 s++; 7618 } \ 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 7619 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 7620 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 7621 continue; \ ??ParseAnswer_1: \ 000000A0 0070D5E5 LDRB R7,[R5, #+0] \ 000000A4 000057E3 CMP R7,#+0 \ 000000A8 4F00000A BEQ ??ParseAnswer_5 \ 000000AC ........ LDR R9,??DataTable259 ;; `?` \ 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 7622 } 7623 t=t_root; \ ??ParseAnswer_7: \ 000000E4 0690A0E1 MOV R9,R6 \ 000000E8 230000EA B ??ParseAnswer_8 7624 while(t) 7625 { 7626 st=t->lines; 7627 while(st) 7628 { 7629 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 7630 { 7631 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 7632 } 7633 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] 7634 } \ ??ParseAnswer_13: \ 00000170 00005AE3 CMP R10,#+0 \ 00000174 DCFFFF1A BNE ??ParseAnswer_9 7635 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 7636 } 7637 L1: 7638 if (t) 7639 { 7640 wchar=t->uni_smile; 7641 s+=strlen(st->text); 7642 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); 7643 } 7644 else 7645 { 7646 wchar=char8to16(wchar); \ 00000188 0700A0E1 MOV R0,R7 \ 0000018C ........ _BLF char8to16,??char8to16??rA \ 00000190 0070A0E1 MOV R7,R0 7647 s++; 7648 ulb>>=8; 7649 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 7650 } \ ??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 7651 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 7652 } 7653 i=ws->wsbody[0]; \ ??ParseAnswer_5: \ 000001EC 000094E5 LDR R0,[R4, #+0] \ 000001F0 B010D0E1 LDRH R1,[R0, #+0] \ 000001F4 000000EA B ??ParseAnswer_15 7654 while(i>1) 7655 { 7656 if (ws->wsbody[i--]!=13) break; 7657 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 7658 } 7659 } \ 0000021C F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??ParseAnswer_0: \ 00000220 ........ DC32 s_top 7660 \ In segment CODE, align 4, keep-with-next 7661 void SaveAnswer(CLIST *cl, WSHDR *ws) 7662 { \ SaveAnswer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0100A0E1 MOV R0,R1 7663 char *p=ExtractAnswer(ws); \ 0000000C ........ BL ExtractAnswer \ 00000010 0050A0E1 MOV R5,R0 7664 mfree(cl->answer); \ 00000014 980094E5 LDR R0,[R4, #+152] \ 00000018 150000EF SWI +21 7665 cl->answer=p; \ 0000001C 985084E5 STR R5,[R4, #+152] 7666 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 7667 7668 //links applicator 7669 7670 \ In segment CODE, align 4, keep-with-next 7671 int GetTempName(void) 7672 { \ GetTempName: \ 00000000 00402DE9 PUSH {LR} \ 00000004 10D04DE2 SUB SP,SP,#+16 7673 static const int DMonth[]={0,31,59,90,120,151,181,212,243,273,304,334,365}; 7674 unsigned long iday; 7675 TTime tt; 7676 TDate dd; 7677 GetDateTime(&dd,&tt); \ 00000008 08108DE2 ADD R1,SP,#+8 \ 0000000C 0D00A0E1 MOV R0,SP \ 00000010 B40000EF SWI +180 7678 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 7679 iday=365*dd.year+DMonth[dd.month-1]+(dd.day - 1); 7680 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] 7681 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 7682 iday++; \ ??GetTempName_1: \ 00000078 011081E2 ADD R1,R1,#+1 7683 iday=(tt.sec+60*(tt.min+60*(tt.hour+24* iday))); 7684 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 7685 } \ 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 7686 7687 \ In segment CODE, align 4, keep-with-next 7688 void recon() 7689 { 7690 SUBPROC((void*)end_socket); \ recon: \ 00000000 ........ LDR R0,??DataTable260 ;; end_socket \ 00000004 10402DE9 PUSH {R4,LR} 7691 GBS_DelTimer(&reconnect_tmr); \ 00000008 ........ LDR R4,??DataTable261 ;; icons \ 0000000C 710100EF SWI +369 \ 00000010 B800A0E3 MOV R0,#+184 \ 00000014 680D80E3 ORR R0,R0,#0x1A00 \ 00000018 040080E0 ADD R0,R0,R4 \ 0000001C 8C0100EF SWI +396 7692 DNR_TRIES=3; \ 00000020 0300A0E3 MOV R0,#+3 \ 00000024 E80384E5 STR R0,[R4, #+1000] 7693 SUBPROC((void *)create_connect); \ 00000028 ........ LDR R0,??DataTable262 ;; create_connect \ 0000002C 710100EF SWI +369 7694 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 7695 \ In segment CODE, align 4, keep-with-next 7696 int edchat_onkey(GUI *data, GUI_MSG *msg) 7697 { \ edchat_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 7698 //-1 - do redraw 7699 GBS_DelTimer(&tmr_illumination); \ 00000004 ........ LDR R6,??DataTable272 ;; icons \ 00000008 4CDF4DE2 SUB SP,SP,#+304 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0170A0E1 MOV R7,R1 \ 00000014 9800A0E3 MOV R0,#+152 \ 00000018 680D80E3 ORR R0,R0,#0x1A00 \ 0000001C 060080E0 ADD R0,R0,R6 \ 00000020 8C0100EF SWI +396 7700 CLIST *t; 7701 TPKT *p; 7702 EDITCONTROL ec; 7703 int len, f;//2026rev 7704 unsigned err;//2026rev 7705 char *s; 7706 int l=msg->gbsmsg->submess; \ 00000024 040097E5 LDR R0,[R7, #+4] \ 00000028 088090E5 LDR R8,[R0, #+8] 7707 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 DF0100EF SWI +479 \ 00000034 0050A0E1 MOV R5,R0 7708 char fn[256]; 7709 7710 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 7711 { 7712 void ec_menu(EDCHAT_STRUCT *); 7713 ec_menu(ed_struct); \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 ........ BL ec_menu 7714 return(-1); \ ??edchat_onkey_1: \ 00000054 8C0000EA B ??edchat_onkey_2 7715 } 7716 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 7717 7718 void AddSmile(GUI *data); 7719 if (msg->gbsmsg->msg==LONG_PRESS) 7720 { 7721 if (l==RIGHT_BUTTON) \ 00000080 3E0058E3 CMP R8,#+62 \ 00000084 3B00001A BNE ??edchat_onkey_6 7722 { 7723 if(LongRightAction==2 && EDIT_GetFocus(data)==ed_struct->ed_answer) \ 00000088 40959FE5 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 7724 CreateSmileSelectGUI(ed_struct); \ 000000AC 0500A0E1 MOV R0,R5 \ 000000B0 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 7725 else 7726 if(LongRightAction==1) 7727 { 7728 if (EDIT_GetFocus(data)==ed_struct->ed_answer) 7729 { 7730 ExtractEditControl(data,ed_struct->ed_answer,&ec); 7731 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) 7732 { 7733 t=FindNextActiveContact(ed_struct->ed_contact); 7734 if (t && t!=ed_struct->ed_contact) 7735 { 7736 CreateEditChat(t); 7737 return(1); 7738 } 7739 } 7740 } 7741 } 7742 } 7743 if (l==LEFT_BUTTON && LongLeftAction) 7744 { 7745 if (EDIT_GetFocus(data)==ed_struct->ed_answer) 7746 { 7747 ExtractEditControl(data,ed_struct->ed_answer,&ec); 7748 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) 7749 { 7750 t=FindPrevActiveContact(ed_struct->ed_contact); 7751 if (t && t!=ed_struct->ed_contact) 7752 { 7753 CreateEditChat(t); 7754 return(1); 7755 } 7756 } 7757 } 7758 } 7759 //#ifdef ELKA 7760 if (l==VOL_DOWN_BUTTON) 7761 { 7762 #ifdef kluchnik 7763 if((EDIT_GetFocus(data)==ed_struct->ed_answer)) 7764 #else 7765 if(LongVolDownAction) 7766 #endif 7767 { 7768 WSHDR *ws; 7769 ExtractEditControl(data,ed_struct->ed_answer,&ec); 7770 if(wstrlen(ec.pWS)>0) 7771 { 7772 ws=AllocWS(1); 7773 CutWSTR(ws,0); 7774 7775 EDIT_SetFocus(data,ed_struct->ed_answer); 7776 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 7777 7778 FreeWS(ws); 7779 RefreshGUI(); 7780 } 7781 } 7782 else 7783 { 7784 int pos; 7785 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 7786 { 7787 EDIT_SetFocus(data, pos); 7788 EDIT_SetCursorPos(data, 1); 7789 } 7790 return (-1); 7791 } 7792 7793 } 7794 7795 if (l==VOL_UP_BUTTON) 7796 { 7797 if(LongVolUpAction) 7798 { 7799 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); 7800 ascii2ws(ws,last_msg_buffer); 7801 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); 7802 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 7803 FreeWS(ws); 7804 RefreshGUI(); 7805 } 7806 else 7807 { 7808 int pos; 7809 if ((pos=EDIT_GetFocus(data)-2)>=2) 7810 { 7811 EDIT_SetFocus(data, pos); 7812 EDIT_SetCursorPos(data, 1); 7813 } 7814 return (-1); 7815 } 7816 } 7817 //#endif 7818 #ifdef kluchnik 7819 if(l==LEFT_BUTTON && EDIT_GetFocus(ed_struct->ed_chatgui)!=ed_struct->ed_answer && EDIT_GetCursorPos(data)==1) 7820 { 7821 int ed; 7822 EDITCONTROL ec; 7823 ed=EDIT_GetFocus(ed_struct->ed_chatgui); 7824 ExtractEditControl(ed_struct->ed_chatgui,ed,&ec); 7825 7826 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); 7827 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); 7828 wstrcat(wsBuffer,ec.pWS); 7829 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); 7830 7831 ShowMSG(1,(int)"Message add to buffer"); 7832 } 7833 #endif 7834 } 7835 7836 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 7837 { 7838 if ((l>='0')&&(l<='9')) \ 000000CC 300058E3 CMP R8,#+48 \ 000000D0 850000BA BLT ??edchat_onkey_10 \ 000000D4 3A0058E3 CMP R8,#+58 \ 000000D8 060000AA BGE ??edchat_onkey_9 7839 { 7840 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 7841 EDIT_SetFocus(data,ed_struct->ed_answer); \ 000000F0 0400A0E1 MOV R0,R4 \ 000000F4 9B0100EF SWI +411 7842 } 7843 7844 if (l==GREEN_BUTTON) 7845 { 7846 if (connect_state==3) 7847 { 7848 if ((t=ed_struct->ed_contact)) 7849 { 7850 ExtractEditControl(data,ed_struct->ed_answer,&ec); 7851 SaveAnswer(t,ec.pWS); 7852 if ((s=t->answer)) 7853 { 7854 if ((len=strlen(s))) 7855 { 7856 msg_away_timer=0; 7857 away_m=0; 7858 t->automsgcount=0; 7859 if(change_back_status) 7860 { 7861 CurrentStatus=status_rem; 7862 set_my_status(); 7863 change_back_status=0; 7864 } 7865 if(SHOW_ACTIVE) 7866 t->isactive=ACTIVE_TIME; 7867 p=malloc(sizeof(PKT)+len+1); 7868 p->pkt.uin=t->uin; 7869 p->pkt.type=T_SENDMSG; 7870 p->pkt.data_len=len; 7871 strcpy(p->data,s); 7872 //#ifdef ELKA 7873 strcpy(last_msg_buffer, s); 7874 //#endif 7875 AddStringToLog(t,0x01,p->data,I_str,(++SENDMSGCOUNT)&0x7FFF,1); //Номер сообщения 7876 SUBPROC((void *)SendAnswer,0,p); 7877 main2_count++; 7878 mfree(t->answer); 7879 t->answer=NULL; 7880 // request_remake_edchat=1; 7881 EDIT_SetFocus(data,ed_struct->ed_answer); 7882 CutWSTR(ews,0); 7883 EDIT_SetTextToFocused(data,ews); 7884 AddMsgToChat(data); 7885 RecountMenu(t,1); 7886 return(-1); 7887 } 7888 } 7889 } 7890 } 7891 } 7892 //================2026rev-begin 7893 if (l==ENTER_BUTTON) 7894 { 7895 if (!EDIT_IsMarkModeActive(data)) // ?????? ???? ?? ????????? 7896 { 7897 int pos, len; 7898 char *link; 7899 ExtractEditControl(ed_struct->ed_chatgui,EDIT_GetFocus(ed_struct->ed_chatgui),&ec); 7900 wstrcpy(ews,ec.pWS); 7901 pos = EDIT_GetCursorPos(data); 7902 len = wstrlen(ews); 7903 link = malloc(len+1); 7904 7905 if(IsUrl(ews, pos, link) && IsOpenBrowser) 7906 { 7907 snprintf(fn, 255, "%s\\tmp%u.url", TEMPLATES_PATH, GetTempName); 7908 if ((f=fopen(fn,A_WriteOnly+A_BIN+A_Create+A_Truncate,P_WRITE,&err))!=-1) 7909 { 7910 fwrite(f,link,strlen(link),&err); 7911 fclose(f,&err); 7912 str_2ws(ews,fn,256); 7913 ExecuteFile(ews,0,0); 7914 unlink(fn, &err); 7915 } 7916 mfree(link); 7917 return (-1); 7918 } 7919 else 7920 { 7921 int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 7922 7923 if(IsMultiBuffer) 7924 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+4); 7925 else 7926 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+3); 7927 7928 mfree(link); 7929 return (-1); 7930 } 7931 } 7932 } 7933 7934 //================ 2026rev-end =================// 7935 7936 if (l==VOL_UP_BUTTON) 7937 { 7938 int pos; 7939 7940 if ((pos=EDIT_GetFocus(data)-2)>=2) 7941 { 7942 EDIT_SetFocus(data, pos); 7943 EDIT_SetCursorPos(data, 1); 7944 } 7945 return (-1); 7946 } 7947 if (l==VOL_DOWN_BUTTON) 7948 { 7949 int pos; 7950 7951 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 7952 { 7953 EDIT_SetFocus(data, pos); 7954 EDIT_SetCursorPos(data, 1); 7955 } 7956 return (-1); 7957 } 7958 } 7959 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 4C049FE5 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 DC039FE5 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 34039FE5 LDR R0,??edchat_onkey_7+0xC ;; LongVolUpAction \ 000002A4 000090E5 LDR R0,[R0, #+0] \ 000002A8 000050E3 CMP R0,#+0 \ 000002AC 0900000A BEQ ??edchat_onkey_17 \ 000002B0 630E86E2 ADD R0,R6,#+1584 \ 000002B4 1B0000EF SWI +27 \ 000002B8 010080E2 ADD R0,R0,#+1 \ 000002BC 250100EF SWI +293 \ 000002C0 0090A0E1 MOV R9,R0 \ 000002C4 631E86E2 ADD R1,R6,#+1584 \ 000002C8 ........ _BLF ascii2ws,??ascii2ws??rA \ 000002CC 081095E5 LDR R1,[R5, #+8] \ 000002D0 040095E5 LDR R0,[R5, #+4] \ 000002D4 D9FFFFEA B ??edchat_onkey_15 \ ??edchat_onkey_17: \ 000002D8 0400A0E1 MOV R0,R4 \ 000002DC 820100EF SWI +386 \ 000002E0 021040E2 SUB R1,R0,#+2 \ 000002E4 020051E3 CMP R1,#+2 \ 000002E8 E1FFFFEA B ??edchat_onkey_16 \ ??edchat_onkey_10: \ 000002EC 0B0058E3 CMP R8,#+11 \ 000002F0 5900001A BNE ??edchat_onkey_18 \ 000002F4 7C0396E5 LDR R0,[R6, #+892] \ 000002F8 030050E3 CMP R0,#+3 \ 000002FC 7DFFFF1A BNE ??edchat_onkey_9 \ 00000300 009095E5 LDR R9,[R5, #+0] \ 00000304 000059E3 CMP R9,#+0 \ 00000308 7AFFFF0A BEQ ??edchat_onkey_9 \ 0000030C 081095E5 LDR R1,[R5, #+8] \ 00000310 04208DE2 ADD R2,SP,#+4 \ 00000314 0400A0E1 MOV R0,R4 \ 00000318 690100EF SWI +361 \ 0000031C 2C109DE5 LDR R1,[SP, #+44] \ 00000320 0900A0E1 MOV R0,R9 \ 00000324 ........ BL SaveAnswer \ 00000328 98A099E5 LDR R10,[R9, #+152] \ 0000032C 00005AE3 CMP R10,#+0 \ 00000330 70FFFF0A BEQ ??edchat_onkey_9 \ 00000334 0A00A0E1 MOV R0,R10 \ 00000338 1B0000EF SWI +27 \ 0000033C 00B0B0E1 MOVS R11,R0 \ 00000340 6CFFFF0A BEQ ??edchat_onkey_9 \ 00000344 0070A0E3 MOV R7,#+0 \ 00000348 287386E5 STR R7,[R6, #+808] \ 0000034C 2C7386E5 STR R7,[R6, #+812] \ 00000350 7C7089E5 STR R7,[R9, #+124] \ 00000354 340396E5 LDR R0,[R6, #+820] \ 00000358 000050E3 CMP R0,#+0 \ 0000035C 0300000A BEQ ??edchat_onkey_19 \ 00000360 300396E5 LDR R0,[R6, #+816] \ 00000364 180386E5 STR R0,[R6, #+792] \ 00000368 ........ BL set_my_status \ 0000036C 347386E5 STR R7,[R6, #+820] \ ??edchat_onkey_19: \ 00000370 ........ LDR R0,??DataTable264 ;; SHOW_ACTIVE \ 00000374 000090E5 LDR R0,[R0, #+0] \ 00000378 000050E3 CMP R0,#+0 \ 0000037C 5A0FA013 MOVNE R0,#+360 \ 00000380 A0008915 STRNE R0,[R9, #+160] \ 00000384 09008BE2 ADD R0,R11,#+9 \ 00000388 140000EF SWI +20 \ 0000038C 0080A0E1 MOV R8,R0 \ 00000390 0C0099E5 LDR R0,[R9, #+12] \ 00000394 0A10A0E1 MOV R1,R10 \ 00000398 000088E5 STR R0,[R8, #+0] \ 0000039C 0200A0E3 MOV R0,#+2 \ 000003A0 B400C8E1 STRH R0,[R8, #+4] \ 000003A4 B6B0C8E1 STRH R11,[R8, #+6] \ 000003A8 080088E2 ADD R0,R8,#+8 \ 000003AC 1A0000EF SWI +26 \ 000003B0 0A10A0E1 MOV R1,R10 \ 000003B4 630E86E2 ADD R0,R6,#+1584 \ 000003B8 1A0000EF SWI +26 \ 000003BC 080396E5 LDR R0,[R6, #+776] \ 000003C0 ........ LDR R3,??DataTable300 ;; I_str \ 000003C4 010080E2 ADD R0,R0,#+1 \ 000003C8 080386E5 STR R0,[R6, #+776] \ 000003CC 0110A0E3 MOV R1,#+1 \ 000003D0 02002DE9 PUSH {R1} \ 000003D4 8008A0E1 LSL R0,R0,#+17 \ 000003D8 A008A0E1 LSR R0,R0,#+17 \ 000003DC 01002DE9 PUSH {R0} \ 000003E0 082088E2 ADD R2,R8,#+8 \ 000003E4 0900A0E1 MOV R0,R9 \ 000003E8 ........ BL AddStringToLog \ 000003EC ........ LDR R0,??DataTable301 ;; SendAnswer \ 000003F0 0820A0E1 MOV R2,R8 \ 000003F4 0010A0E3 MOV R1,#+0 \ 000003F8 710100EF SWI +369 \ 000003FC ........ LDR R0,??DataTable267 ;; main2_count \ 00000400 001090E5 LDR R1,[R0, #+0] \ 00000404 011081E2 ADD R1,R1,#+1 \ 00000408 001080E5 STR R1,[R0, #+0] \ 0000040C 980099E5 LDR R0,[R9, #+152] \ 00000410 150000EF SWI +21 \ 00000414 987089E5 STR R7,[R9, #+152] \ 00000418 081095E5 LDR R1,[R5, #+8] \ 0000041C 0400A0E1 MOV R0,R4 \ 00000420 9B0100EF SWI +411 \ 00000424 200396E5 LDR R0,[R6, #+800] \ 00000428 0710A0E1 MOV R1,R7 \ 0000042C 260100EF SWI +294 \ 00000430 201396E5 LDR R1,[R6, #+800] \ 00000434 0400A0E1 MOV R0,R4 \ 00000438 810100EF SWI +385 \ 0000043C 0400A0E1 MOV R0,R4 \ 00000440 ........ BL AddMsgToChat \ 00000444 0110A0E3 MOV R1,#+1 \ 00000448 0900A0E1 MOV R0,R9 \ 0000044C ........ BL RecountMenu \ 00000450 0700E0E1 MVN R0,R7 \ 00000454 08D08DE2 ADD SP,SP,#+8 \ 00000458 8CFFFFEA B ??edchat_onkey_4 \ ??edchat_onkey_18: \ 0000045C 1A0058E3 CMP R8,#+26 \ 00000460 5500001A BNE ??edchat_onkey_20 \ 00000464 0400A0E1 MOV R0,R4 \ 00000468 D80100EF SWI +472 \ 0000046C 000050E3 CMP R0,#+0 \ 00000470 20FFFF1A BNE ??edchat_onkey_9 \ 00000474 040095E5 LDR R0,[R5, #+4] \ 00000478 820100EF SWI +386 \ 0000047C 04208DE2 ADD R2,SP,#+4 \ 00000480 0010A0E1 MOV R1,R0 \ 00000484 040095E5 LDR R0,[R5, #+4] \ 00000488 690100EF SWI +361 \ 0000048C 200396E5 LDR R0,[R6, #+800] \ 00000490 2C109DE5 LDR R1,[SP, #+44] \ 00000494 1F0100EF SWI +287 \ 00000498 0400A0E1 MOV R0,R4 \ 0000049C D30100EF SWI +467 \ 000004A0 0080A0E1 MOV R8,R0 \ 000004A4 200396E5 LDR R0,[R6, #+800] \ 000004A8 230100EF SWI +291 \ 000004AC 010080E2 ADD R0,R0,#+1 \ 000004B0 140000EF SWI +20 \ 000004B4 0070A0E1 MOV R7,R0 \ 000004B8 200396E5 LDR R0,[R6, #+800] \ 000004BC 0720A0E1 MOV R2,R7 \ 000004C0 0810A0E1 MOV R1,R8 \ 000004C4 ........ BL IsUrl \ 000004C8 000050E3 CMP R0,#+0 \ 000004CC 2C00000A BEQ ??edchat_onkey_21 \ 000004D0 08019FE5 LDR R0,??edchat_onkey_7+0x10 ;; IsOpenBrowser \ 000004D4 000090E5 LDR R0,[R0, #+0] \ 000004D8 000050E3 CMP R0,#+0 \ 000004DC 2800000A BEQ ??edchat_onkey_21 \ 000004E0 FC009FE5 LDR R0,??edchat_onkey_7+0x14 ;; GetTempName \ 000004E4 ........ LDR R3,??DataTable268 ;; TEMPLATES_PATH \ 000004E8 F8209FE5 LDR R2,??edchat_onkey_7+0x18 ;; `?` \ 000004EC 01002DE9 PUSH {R0} \ 000004F0 FF10A0E3 MOV R1,#+255 \ 000004F4 34008DE2 ADD R0,SP,#+52 \ 000004F8 1B0100EF SWI +283 \ 000004FC 04308DE2 ADD R3,SP,#+4 \ 00000500 402FA0E3 MOV R2,#+256 \ 00000504 0110A0E3 MOV R1,#+1 \ 00000508 831C81E3 ORR R1,R1,#0x8300 \ 0000050C 34008DE2 ADD R0,SP,#+52 \ 00000510 0A0000EF SWI +10 \ 00000514 0040A0E1 MOV R4,R0 \ 00000518 010074E3 CMN R4,#+1 \ 0000051C 04D08DE2 ADD SP,SP,#+4 \ 00000520 1400000A BEQ ??edchat_onkey_22 \ 00000524 0700A0E1 MOV R0,R7 \ 00000528 1B0000EF SWI +27 \ 0000052C 0020A0E1 MOV R2,R0 \ 00000530 0D30A0E1 MOV R3,SP \ 00000534 0710A0E1 MOV R1,R7 \ 00000538 0400A0E1 MOV R0,R4 \ 0000053C 0C0000EF SWI +12 \ 00000540 0D10A0E1 MOV R1,SP \ 00000544 0400A0E1 MOV R0,R4 \ 00000548 0D0000EF SWI +13 \ 0000054C 200396E5 LDR R0,[R6, #+800] \ 00000550 402FA0E3 MOV R2,#+256 \ 00000554 30108DE2 ADD R1,SP,#+48 \ 00000558 6C0100EF SWI +364 \ 0000055C 200396E5 LDR R0,[R6, #+800] \ 00000560 0020A0E3 MOV R2,#+0 \ 00000564 0010A0E3 MOV R1,#+0 \ 00000568 940000EF SWI +148 \ 0000056C 0D10A0E1 MOV R1,SP \ 00000570 30008DE2 ADD R0,SP,#+48 \ 00000574 6B0100EF SWI +363 \ ??edchat_onkey_22: \ 00000578 0700A0E1 MOV R0,R7 \ 0000057C 150000EF SWI +21 \ 00000580 41FFFFEA B ??edchat_onkey_2 \ ??edchat_onkey_21: \ 00000584 000095E5 LDR R0,[R5, #+0] \ 00000588 0C0090E5 LDR R0,[R0, #+12] \ 0000058C ........ BL LoadTemplates \ 00000590 ........ LDR R2,??DataTable269 ;; IsMultiBuffer \ 00000594 50109FE5 LDR R1,??edchat_onkey_7+0x1C ;; ed_options_handler \ 00000598 100085E5 STR R0,[R5, #+16] \ 0000059C 002092E5 LDR R2,[R2, #+0] \ 000005A0 000052E3 CMP R2,#+0 \ 000005A4 03308002 ADDEQ R3,R0,#+3 \ 000005A8 04308012 ADDNE R3,R0,#+4 \ 000005AC 0520A0E1 MOV R2,R5 \ 000005B0 0400A0E1 MOV R0,R4 \ 000005B4 E50100EF SWI +485 \ 000005B8 EEFFFFEA B ??edchat_onkey_22 \ ??edchat_onkey_20: \ 000005BC 0D0058E3 CMP R8,#+13 \ 000005C0 44FFFF0A BEQ ??edchat_onkey_17 \ ??edchat_onkey_23: \ 000005C4 0E0058E3 CMP R8,#+14 \ 000005C8 CAFEFF1A BNE ??edchat_onkey_9 \ 000005CC 23FFFFEA B ??edchat_onkey_14 \ ??edchat_onkey_7: \ 000005D0 ........ DC32 LongRightAction \ 000005D4 ........ DC32 LongLeftAction \ 000005D8 ........ DC32 LongVolDownAction \ 000005DC ........ DC32 LongVolUpAction \ 000005E0 ........ DC32 IsOpenBrowser \ 000005E4 ........ DC32 GetTempName \ 000005E8 ........ DC32 `?` \ 000005EC ........ DC32 ed_options_handler 7960 //1: close 7961 } 7962 7963 static const HEADER_DESC edchat_hdr={0,0,NULL,NULL,NULL,0,LGP_NULL}; 7964 7965 void (*old_ed_redraw)(void *data); \ In segment CODE, align 4, keep-with-next 7966 void my_ed_redraw(void *data) 7967 { \ my_ed_redraw: \ 00000000 30402DE9 PUSH {R4,R5,LR} 7968 void *edchat_gui; 7969 EDCHAT_STRUCT *ed_struct; 7970 if (old_ed_redraw) old_ed_redraw(data); \ 00000004 ........ LDR R4,??DataTable272 ;; icons \ 00000008 0C1494E5 LDR R1,[R4, #+1036] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0100000A BEQ ??my_ed_redraw_0 \ 00000014 31FF2FE1 BLX R1 7971 edchat_gui=FindGUIbyId(edchat_id,NULL); \ 00000018 0010A0E3 MOV R1,#+0 \ ??my_ed_redraw_0: \ 0000001C B00394E5 LDR R0,[R4, #+944] \ 00000020 090200EF SWI +521 7972 if (edchat_gui) \ 00000024 000050E3 CMP R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 7973 { 7974 ed_struct=EDIT_GetUserPointer(edchat_gui); \ 0000002C DF0100EF SWI +479 7975 if (ed_struct) \ 00000030 000050E3 CMP R0,#+0 \ 00000034 3080BD08 POPEQ {R4,R5,PC} 7976 { 7977 int icon, width; 7978 #ifndef NEWSGOLD 7979 icon=*(S_ICONS+GetIconIndex(ed_struct->ed_contact)); 7980 ((HEADER_DESC *)&edchat_hdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); 7981 DrawImg(ScreenW()-1-width,1,icon); 7982 #else 7983 icon=*(S_ICONS+GetIconIndex(ed_struct->ed_contact)); \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C ........ BL GetIconIndex \ 00000040 000184E0 ADD R0,R4,R0, LSL #+2 \ 00000044 704090E5 LDR R4,[R0, #+112] 7984 width=GetImgWidth(icon); \ 00000048 0400A0E1 MOV R0,R4 \ 0000004C 220000EF SWI +34 \ 00000050 0050A0E1 MOV R5,R0 7985 DrawImg(2,((HeaderH()-width)>>1)+YDISP,icon); \ 00000054 8A8100EF SWI +33162 \ 00000058 0420A0E1 MOV R2,R4 \ 0000005C 050040E0 SUB R0,R0,R5 \ 00000060 1810A0E3 MOV R1,#+24 \ 00000064 C01081E0 ADD R1,R1,R0, ASR #+1 \ 00000068 0200A0E3 MOV R0,#+2 \ 0000006C 230000EF SWI +35 7986 /* DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 7987 GetPaletteAdrByColorIndex(0), 7988 GetPaletteAdrByColorIndex(EDIT_IsBusy(edchat_gui)?3:4));*/ 7989 #endif 7990 } 7991 } 7992 } \ 00000070 3080BDE8 POP {R4,R5,PC} ;; return 7993 \ In segment CODE, align 4, keep-with-next 7994 void edchat_ghook(GUI *data, int cmd) 7995 { \ edchat_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 7996 7997 static const SOFTKEY_DESC sk={0x0FFF,0x0000,(int)LG_MENU}; 7998 static const SOFTKEY_DESC sk_cancel={0x0FF0,0x0000,(int)LG_CLOSE}; 7999 // static SOFTKEY_DESC sk={0x0018,0x0000,(int)"Menu"}; 8000 int j; 8001 EDITCONTROL ec; 8002 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); 8003 PNGTOP_DESC *pltop=PNG_TOP(); 8004 if (cmd==9) \ 00000004 ........ LDR R4,??DataTable272 ;; 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 8005 { 8006 GBS_DelTimer(&tmr_illumination); //by BoBa 25.06.07 \ 00000030 9800A0E3 MOV R0,#+152 \ 00000034 680D80E3 ORR R0,R0,#0x1A00 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 8C0100EF SWI +396 8007 pltop->dyn_pltop=NULL; \ 00000040 086088E5 STR R6,[R8, #+8] \ 00000044 170000EA B ??edchat_ghook_1 8008 } 8009 if (cmd==2) \ ??edchat_ghook_0: \ 00000048 081097E5 LDR R1,[R7, #+8] \ 0000004C 020059E3 CMP R9,#+2 \ 00000050 1600001A BNE ??edchat_ghook_2 8010 { 8011 ed_struct->ed_chatgui=data; \ 00000054 045087E5 STR R5,[R7, #+4] 8012 // edgui_data=data; 8013 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000058 0500A0E1 MOV R0,R5 \ 0000005C 9B0100EF SWI +411 8014 8015 static void *methods[16]; 8016 void **m=GetDataOfItemByID(data,2); \ 00000060 0210A0E3 MOV R1,#+2 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 4F0100EF SWI +335 \ 0000006C 0050B0E1 MOVS R5,R0 8017 if (m) 8018 { 8019 if (m[1]) \ 00000070 04009515 LDRNE R0,[R5, #+4] \ 00000074 00005013 CMPNE R0,#+0 \ 00000078 6700000A BEQ ??edchat_ghook_3 8020 { 8021 memcpy(methods,m[1],sizeof(methods)); \ 0000007C 416EA0E3 MOV R6,#+1040 \ 00000080 4020A0E3 MOV R2,#+64 \ 00000084 0010A0E1 MOV R1,R0 \ 00000088 040086E0 ADD R0,R6,R4 \ 0000008C 1E0100EF SWI +286 8022 old_ed_redraw=(void (*)(void *))(methods[0]); \ 00000090 040096E7 LDR R0,[R6, +R4] \ 00000094 0C0484E5 STR R0,[R4, #+1036] 8023 methods[0]=(void *)my_ed_redraw; \ 00000098 84019FE5 LDR R0,??edchat_ghook_4 ;; my_ed_redraw \ 0000009C 040086E7 STR R0,[R6, +R4] 8024 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} 8025 } 8026 } 8027 } 8028 if (cmd==3) \ ??edchat_ghook_2: \ 000000B0 030059E3 CMP R9,#+3 \ 000000B4 0E00001A BNE ??edchat_ghook_5 8029 { 8030 // if (edgui_data==data) edgui_data=NULL; 8031 if (ed_struct->ed_contact) \ 000000B8 000097E5 LDR R0,[R7, #+0] \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 0500000A BEQ ??edchat_ghook_6 8032 { 8033 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C4 0D20A0E1 MOV R2,SP \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 690100EF SWI +361 8034 SaveAnswer(ed_struct->ed_contact,ec.pWS); \ 000000D0 28109DE5 LDR R1,[SP, #+40] \ 000000D4 000097E5 LDR R0,[R7, #+0] \ 000000D8 ........ BL SaveAnswer 8035 } 8036 RecountMenu(ed_struct->ed_contact,1); \ ??edchat_ghook_6: \ 000000DC 000097E5 LDR R0,[R7, #+0] \ 000000E0 0110A0E3 MOV R1,#+1 \ 000000E4 ........ BL RecountMenu 8037 mfree(ed_struct); \ 000000E8 0700A0E1 MOV R0,R7 \ 000000EC 150000EF SWI +21 \ 000000F0 ECFFFFEA B ??edchat_ghook_1 8038 } 8039 if (cmd==0x0A) \ ??edchat_ghook_5: \ 000000F4 0A0059E3 CMP R9,#+10 \ 000000F8 0D00001A BNE ??edchat_ghook_7 8040 { 8041 pltop->dyn_pltop=SmilesImgList; \ 000000FC 24019FE5 LDR R0,??edchat_ghook_4+0x4 ;; SmilesImgList \ 00000100 000090E5 LDR R0,[R0, #+0] \ 00000104 080088E5 STR R0,[R8, #+8] 8042 DisableIDLETMR(); \ 00000108 7F0100EF SWI +383 8043 total_unread-=ed_struct->requested_decrement_total_unread; \ 0000010C A00394E5 LDR R0,[R4, #+928] \ 00000110 0C1097E5 LDR R1,[R7, #+12] \ 00000114 010040E0 SUB R0,R0,R1 \ 00000118 A00384E5 STR R0,[R4, #+928] 8044 ed_struct->requested_decrement_total_unread=0; \ 0000011C 0C6087E5 STR R6,[R7, #+12] 8045 #ifdef ELKA 8046 if (!total_unread) \ 00000120 A00394E5 LDR R0,[R4, #+928] \ 00000124 000050E3 CMP R0,#+0 \ 00000128 3B00001A BNE ??edchat_ghook_3 8047 { 8048 SLI_Off(); \ 0000012C ........ BL SLI_Off \ 00000130 DCFFFFEA B ??edchat_ghook_1 8049 } 8050 #endif 8051 /* if (request_close_edchat) 8052 { 8053 request_close_edchat=0; 8054 GeneralFunc_flag1(edchat_id,1); 8055 return; 8056 }*/ 8057 } 8058 if (cmd==7) \ ??edchat_ghook_7: \ 00000134 070059E3 CMP R9,#+7 \ 00000138 2800001A BNE ??edchat_ghook_8 8059 { 8060 SetSoftKey(data,&sk,SET_SOFT_KEY_N); \ 0000013C E8809FE5 LDR R8,??edchat_ghook_4+0x8 ;; ??sk_1 \ 00000140 0020A0E3 MOV R2,#+0 \ 00000144 0810A0E1 MOV R1,R8 \ 00000148 0500A0E1 MOV R0,R5 \ 0000014C 680100EF SWI +360 8061 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000150 081097E5 LDR R1,[R7, #+8] \ 00000154 0D20A0E1 MOV R2,SP \ 00000158 0500A0E1 MOV R0,R5 \ 0000015C 690100EF SWI +361 8062 if (ec.pWS->wsbody[0]==0) \ 00000160 28009DE5 LDR R0,[SP, #+40] \ 00000164 000090E5 LDR R0,[R0, #+0] \ 00000168 B000D0E1 LDRH R0,[R0, #+0] \ 0000016C 000050E3 CMP R0,#+0 \ 00000170 0300001A BNE ??edchat_ghook_9 8063 SetSoftKey(data,&sk_cancel,SET_SOFT_KEY_N==0?1:0); \ 00000174 0120A0E3 MOV R2,#+1 \ 00000178 081088E2 ADD R1,R8,#+8 \ 0000017C 0500A0E1 MOV R0,R5 \ 00000180 680100EF SWI +360 8064 if (!EDIT_IsBusy(data)) \ ??edchat_ghook_9: \ 00000184 0500A0E1 MOV R0,R5 \ 00000188 1C0200EF SWI +540 \ 0000018C 000050E3 CMP R0,#+0 \ 00000190 2100001A BNE ??edchat_ghook_3 8065 { 8066 time_to_stop_t9=0; \ 00000194 FC6384E5 STR R6,[R4, #+1020] 8067 if (ed_struct->ed_contact->req_add) \ 00000198 000097E5 LDR R0,[R7, #+0] \ 0000019C 8C1090E5 LDR R1,[R0, #+140] \ 000001A0 000051E3 CMP R1,#+0 \ 000001A4 0500000A BEQ ??edchat_ghook_10 8068 { 8069 ed_struct->ed_contact->req_add=0; \ 000001A8 8C6080E5 STR R6,[R0, #+140] 8070 AddMsgToChat(data); \ 000001AC 0500A0E1 MOV R0,R5 \ 000001B0 ........ BL AddMsgToChat 8071 RecountMenu(ed_struct->ed_contact,1); \ 000001B4 000097E5 LDR R0,[R7, #+0] \ 000001B8 0110A0E3 MOV R1,#+1 \ 000001BC ........ BL RecountMenu 8072 } 8073 if (ed_struct->ed_contact->req_drawack) \ ??edchat_ghook_10: \ 000001C0 000097E5 LDR R0,[R7, #+0] \ 000001C4 901090E5 LDR R1,[R0, #+144] \ 000001C8 000051E3 CMP R1,#+0 \ 000001CC 1200000A BEQ ??edchat_ghook_3 8074 { 8075 ed_struct->ed_contact->req_drawack=0; \ 000001D0 906080E5 STR R6,[R0, #+144] 8076 DrawAck(data); \ 000001D4 0500A0E1 MOV R0,R5 \ 000001D8 ........ BL DrawAck \ 000001DC B1FFFFEA B ??edchat_ghook_1 8077 } 8078 } 8079 } 8080 if (cmd==0x0C) \ ??edchat_ghook_8: \ 000001E0 0C0059E3 CMP R9,#+12 \ 000001E4 0C00001A BNE ??edchat_ghook_3 8081 { 8082 j=EDIT_GetFocus(data); \ 000001E8 0500A0E1 MOV R0,R5 \ 000001EC 820100EF SWI +386 \ 000001F0 0040A0E1 MOV R4,R0 8083 if ((EDIT_GetUnFocus(data)ed_answer)) \ 000001F4 0500A0E1 MOV R0,R5 \ 000001F8 830100EF SWI +387 \ 000001FC 040050E1 CMP R0,R4 \ 00000200 050000AA BGE ??edchat_ghook_3 \ 00000204 080097E5 LDR R0,[R7, #+8] \ 00000208 000054E1 CMP R4,R0 \ 0000020C 0200000A BEQ ??edchat_ghook_3 8084 EDIT_SetCursorPos(data,1); \ 00000210 0110A0E3 MOV R1,#+1 \ 00000214 0500A0E1 MOV R0,R5 \ 00000218 D40100EF SWI +468 8085 } 8086 } \ ??edchat_ghook_3: \ 0000021C 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 00000220 F083BDE8 POP {R4-R9,PC} ;; return \ ??edchat_ghook_4: \ 00000224 ........ DC32 my_ed_redraw \ 00000228 ........ DC32 SmilesImgList \ 0000022C ........ DC32 ??sk_1 \ In segment DATA_C, align 4, align-sorted 8087 8088 8089 8090 static const INPUTDIA_DESC edchat_desc = \ edchat_desc: \ 00000000 01000000.... DC32 1, edchat_onkey, edchat_ghook, edchat_locret, 0, menu_skt \ ............ \ ........0000 \ 0000........ \ 00000018 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000020 080000006400 DC32 8, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ 00000038 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000040 000000000000 DC32 0H, 0, 2147483647 \ 0000FFFFFF7F \ 0000004C 2D2D2D2D2D2D DC8 "-------" \ 2D00 \ In segment DATA_C, align 4, align-sorted \ ??sk_1: \ 00000000 FF0F0000 DC16 4095, 0 \ 00000004 ........ DC32 `?` \ 00000008 F00F0000 DC16 4080, 0 \ 0000000C ........ DC32 `?` 8091 { 8092 1, 8093 edchat_onkey, 8094 edchat_ghook, 8095 (void *)edchat_locret, 8096 0, 8097 &menu_skt, 8098 {0,NULL,NULL,NULL}, 8099 FONT_SMALL, 8100 100, 8101 101, 8102 0, 8103 // 0x00000001 - Выровнять по правому краю 8104 // 0x00000002 - Выровнять по центру 8105 // 0x00000004 - Инверсия знакомест 8106 // 0x00000008 - UnderLine 8107 // 0x00000020 - Не переносить слова 8108 // 0x00000200 - bold 8109 0, 8110 // 0x00000002 - ReadOnly 8111 // 0x00000004 - Не двигается курсор 8112 // 0x40000000 - Поменять местами софт-кнопки 8113 0x40000000 8114 }; 8115 \ In segment CODE, align 4, keep-with-next 8116 void CreateEditChat(CLIST *t) 8117 { \ CreateEditChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 8118 8119 void *ma=malloc_adr(); 8120 void *eq; 8121 EDITCONTROL ec; 8122 EDITC_OPTIONS ec_options; 8123 int color, font, type; 8124 int zc; 8125 8126 LOGQ *lp; 8127 int edchat_toitem; 8128 // edcontact=t; 8129 8130 *((int *)(&edchat_hdr.lgp_id))=(int)t->name; \ 00000004 58649FE5 LDR R6,??CreateEditChat_0 ;; edchat_desc 8131 // *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+GetIconIndex(t); 8132 *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+IS_NULLICON; \ 00000008 ........ LDR R7,??DataTable272 ;; 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 B40087E2 ADD R0,R7,#+180 \ 00000028 400086E5 STR R0,[R6, #+64] 8133 8134 eq=AllocEQueue(ma,mfree_adr()); \ 0000002C 158000EF SWI +32789 \ 00000030 0010A0E1 MOV R1,R0 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 630100EF SWI +355 8135 8136 /* hist = malloc(256); 8137 if(!GetHistory(hist, 256, t->uin)) 8138 { 8139 ascii2ws(ews,hist); 8140 PrepareEditControl(&ec); 8141 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL|ECF_DISABLE_T9,ews,ews->wsbody[0]); 8142 } 8143 mfree(hist); 8144 8145 AddEditControlToEditQend(eq,&ec,ma); */ 8146 lp=t->log; \ 0000003C 949094E5 LDR R9,[R4, #+148] \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 000059E3 CMP R9,#+0 \ 00000048 8F00000A BEQ ??CreateEditChat_1 8147 8148 while(lp) 8149 { 8150 font = ED_H_FONT_SIZE; \ ??CreateEditChat_2: \ 0000004C ........ LDR R0,??DataTable273 ;; ED_H_FONT_SIZE 8151 if ((zc=lp->acked&3)) \ 00000050 ........ LDR R1,??DataTable274 ;; 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 8152 { 8153 if (zc==1) \ 00000068 010050E3 CMP R0,#+1 \ 0000006C 2200001A BNE ??CreateEditChat_4 8154 color=ACK_COLOR; //Зеленый \ 00000070 ........ LDR R0,??DataTable275 ;; ACK_COLOR \ 00000074 1F0000EA B ??CreateEditChat_5 8155 else 8156 color=I_COLOR; 8157 } 8158 else 8159 { 8160 if (lp->ID==0xFFFFFFFF) \ ??CreateEditChat_3: \ 00000078 080099E5 LDR R0,[R9, #+8] \ 0000007C 010070E3 CMN R0,#+1 \ 00000080 1B00001A BNE ??CreateEditChat_6 8161 { 8162 type = lp->type&0x0F; \ 00000084 0C0099E5 LDR R0,[R9, #+12] \ 00000088 0F1000E2 AND R1,R0,#0xF 8163 if(lp->type&0x10) \ 0000008C 100010E3 TST R0,#0x10 \ 00000090 0D00000A BEQ ??CreateEditChat_7 8164 { 8165 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 00000094 010051E3 CMP R1,#+1 \ 00000098 ........ LDREQ R0,??DataTable276 ;; O_I_COLOR \ 0000009C 0700000A BEQ ??CreateEditChat_8 \ 000000A0 030051E3 CMP R1,#+3 \ 000000A4 0400001A BNE ??CreateEditChat_9 \ 000000A8 ........ LDR R0,??DataTable289 ;; O_X_COLOR \ 000000AC 00B090E5 LDR R11,[R0, #+0] \ 000000B0 ........ LDR R0,??DataTable291 ;; O_ED_X_FONT_SIZE \ ??CreateEditChat_10: \ 000000B4 00A090E5 LDR R10,[R0, #+0] \ 000000B8 0F0000EA B ??CreateEditChat_4 \ ??CreateEditChat_9: \ 000000BC ........ LDR R0,??DataTable279 ;; O_TO_COLOR \ ??CreateEditChat_8: \ 000000C0 00B090E5 LDR R11,[R0, #+0] \ 000000C4 ........ LDR R0,??DataTable280 ;; O_ED_H_FONT_SIZE \ 000000C8 F9FFFFEA B ??CreateEditChat_10 8166 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 8167 } 8168 else 8169 { 8170 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,??DataTable290 ;; X_COLOR \ 000000E0 00B090E5 LDR R11,[R0, #+0] \ 000000E4 ........ LDR R0,??DataTable292 ;; ED_X_FONT_SIZE \ 000000E8 F1FFFFEA B ??CreateEditChat_10 \ ??CreateEditChat_11: \ 000000EC ........ LDR R0,??DataTable283 ;; TO_COLOR \ 000000F0 000000EA B ??CreateEditChat_5 8171 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 8172 } 8173 } 8174 else 8175 color=UNACK_COLOR; //????? \ ??CreateEditChat_6: \ 000000F4 ........ LDR R0,??DataTable284 ;; UNACK_COLOR \ ??CreateEditChat_5: \ 000000F8 00B090E5 LDR R11,[R0, #+0] 8176 } 8177 PrepareEditControl(&ec); \ ??CreateEditChat_4: \ 000000FC 10008DE2 ADD R0,SP,#+16 \ 00000100 640100EF SWI +356 8178 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 8179 { 8180 ascii2ws(ews,lp->hdr); \ 00000114 200397E5 LDR R0,[R7, #+800] \ 00000118 101089E2 ADD R1,R9,#+16 \ 0000011C ........ _BLF ascii2ws,??ascii2ws??rA 8181 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000120 203397E5 LDR R3,[R7, #+800] \ 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 8182 } 8183 else 8184 { 8185 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??CreateEditChat_12: \ 00000138 0000A0E3 MOV R0,#+0 \ 0000013C 01002DE9 PUSH {R0} \ 00000140 203397E5 LDR R3,[R7, #+800] \ 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 8186 } 8187 PrepareEditCOptions(&ec_options); \ 00000158 0D00A0E1 MOV R0,SP \ 0000015C C80100EF SWI +456 8188 SetPenColorToEditCOptions(&ec_options,color); \ 00000160 0B10A0E1 MOV R1,R11 \ 00000164 0D00A0E1 MOV R0,SP \ 00000168 CC0100EF SWI +460 8189 SetFontToEditCOptions(&ec_options,font); \ 0000016C 0A10A0E1 MOV R1,R10 \ 00000170 0D00A0E1 MOV R0,SP \ 00000174 CA0100EF SWI +458 8190 CopyOptionsToEditControl(&ec,&ec_options); \ 00000178 0D10A0E1 MOV R1,SP \ 0000017C 10008DE2 ADD R0,SP,#+16 \ 00000180 CE0100EF SWI +462 8191 AddEditControlToEditQend(eq,&ec,ma); \ 00000184 0520A0E1 MOV R2,R5 \ 00000188 10108DE2 ADD R1,SP,#+16 \ 0000018C 0800A0E1 MOV R0,R8 \ 00000190 660100EF SWI +358 8192 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 8193 { 8194 ParseAnswer(ews,lp->text); \ 000001A4 200397E5 LDR R0,[R7, #+800] \ 000001A8 601089E2 ADD R1,R9,#+96 \ 000001AC ........ BL ParseAnswer \ 000001B0 060000EA B ??CreateEditChat_15 8195 } 8196 else 8197 { 8198 ParseXStatusText(ews,lp->text,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_14: \ 000001B4 100010E3 TST R0,#0x10 \ 000001B8 ........ LDRNE R0,??DataTable289 ;; O_X_COLOR \ 000001BC 601089E2 ADD R1,R9,#+96 \ 000001C0 ........ LDREQ R0,??DataTable290 ;; X_COLOR \ 000001C4 002090E5 LDR R2,[R0, #+0] \ 000001C8 200397E5 LDR R0,[R7, #+800] \ 000001CC ........ BL ParseXStatusText 8199 } 8200 PrepareEditControl(&ec); \ ??CreateEditChat_15: \ 000001D0 10008DE2 ADD R0,SP,#+16 \ 000001D4 640100EF SWI +356 8201 ConstructEditControl(&ec, 8202 ECT_NORMAL_TEXT, 8203 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 8204 ews,ews->wsbody[0]); \ 000001D8 203397E5 LDR R3,[R7, #+800] \ 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 8205 PrepareEditCOptions(&ec_options); \ 00000204 04008DE2 ADD R0,SP,#+4 \ 00000208 C80100EF SWI +456 8206 //#ifdef M75 8207 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 8208 { 8209 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000220 100010E3 TST R0,#0x10 \ 00000224 ........ LDRNE R0,??DataTable287 ;; O_ED_FONT_SIZE \ 00000228 ........ LDREQ R0,??DataTable294 ;; ED_FONT_SIZE \ 0000022C 090000EA B ??CreateEditChat_17 8210 } 8211 else 8212 { 8213 SetPenColorToEditCOptions(&ec_options,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_16: \ 00000230 100010E3 TST R0,#0x10 \ 00000234 ........ LDRNE R0,??DataTable289 ;; O_X_COLOR \ 00000238 ........ LDREQ R0,??DataTable290 ;; X_COLOR \ 0000023C 001090E5 LDR R1,[R0, #+0] \ 00000240 0D00A0E1 MOV R0,SP \ 00000244 CC0100EF SWI +460 8214 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,??DataTable291 ;; O_ED_X_FONT_SIZE \ 00000254 ........ LDREQ R0,??DataTable292 ;; ED_X_FONT_SIZE \ ??CreateEditChat_17: \ 00000258 001090E5 LDR R1,[R0, #+0] \ 0000025C 0D00A0E1 MOV R0,SP \ 00000260 CA0100EF SWI +458 8215 } 8216 //#else 8217 // SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 8218 //#endif 8219 CopyOptionsToEditControl(&ec,&ec_options); \ 00000264 0D10A0E1 MOV R1,SP \ 00000268 10008DE2 ADD R0,SP,#+16 \ 0000026C CE0100EF SWI +462 8220 AddEditControlToEditQend(eq,&ec,ma); \ 00000270 0520A0E1 MOV R2,R5 \ 00000274 10108DE2 ADD R1,SP,#+16 \ 00000278 0800A0E1 MOV R0,R8 \ 0000027C 660100EF SWI +358 8221 lp=lp->next; \ 00000280 009099E5 LDR R9,[R9, #+0] 8222 } \ 00000284 000059E3 CMP R9,#+0 \ 00000288 6FFFFF1A BNE ??CreateEditChat_2 8223 if (t->isunread) total_unread--; \ ??CreateEditChat_1: \ 0000028C 840094E5 LDR R0,[R4, #+132] 8224 total_unread2=total_unread2-t->unread_msg; 8225 t->unread_msg=0; \ 00000290 0090A0E3 MOV R9,#+0 \ 00000294 000050E3 CMP R0,#+0 \ 00000298 A0039715 LDRNE R0,[R7, #+928] \ 0000029C 01004012 SUBNE R0,R0,#+1 \ 000002A0 A0038715 STRNE R0,[R7, #+928] \ 000002A4 FC0297E5 LDR R0,[R7, #+764] \ 000002A8 881094E5 LDR R1,[R4, #+136] \ 000002AC 010040E0 SUB R0,R0,R1 \ 000002B0 FC0287E5 STR R0,[R7, #+764] \ 000002B4 889084E5 STR R9,[R4, #+136] 8226 t->isunread=0; \ 000002B8 849084E5 STR R9,[R4, #+132] 8227 ChangeContactPos(t); \ 000002BC 0400A0E1 MOV R0,R4 \ 000002C0 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 8228 wsprintf(ews, "-------"); \ 000002C4 200397E5 LDR R0,[R7, #+800] \ 000002C8 4C1086E2 ADD R1,R6,#+76 \ 000002CC 240100EF SWI +292 8229 PrepareEditControl(&ec); \ 000002D0 10008DE2 ADD R0,SP,#+16 \ 000002D4 640100EF SWI +356 8230 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000002D8 203397E5 LDR R3,[R7, #+800] \ 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 8231 PrepareEditCOptions(&ec_options); \ 000002F8 04008DE2 ADD R0,SP,#+4 \ 000002FC C80100EF SWI +456 8232 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000300 ........ LDR R0,??DataTable294 ;; ED_FONT_SIZE \ 00000304 001090E5 LDR R1,[R0, #+0] \ 00000308 04008DE2 ADD R0,SP,#+4 \ 0000030C CA0100EF SWI +458 8233 CopyOptionsToEditControl(&ec,&ec_options); \ 00000310 04108DE2 ADD R1,SP,#+4 \ 00000314 14008DE2 ADD R0,SP,#+20 \ 00000318 CE0100EF SWI +462 8234 AddEditControlToEditQend(eq,&ec,ma); \ 0000031C 0520A0E1 MOV R2,R5 \ 00000320 14108DE2 ADD R1,SP,#+20 \ 00000324 0800A0E1 MOV R0,R8 \ 00000328 660100EF SWI +358 8235 8236 if (t->answer) ParseAnswer(ews,t->answer); \ 0000032C 981094E5 LDR R1,[R4, #+152] \ 00000330 04D08DE2 ADD SP,SP,#+4 \ 00000334 000051E3 CMP R1,#+0 \ 00000338 0200000A BEQ ??CreateEditChat_18 \ 0000033C 200397E5 LDR R0,[R7, #+800] \ 00000340 ........ BL ParseAnswer \ 00000344 020000EA B ??CreateEditChat_19 8237 else CutWSTR(ews,0); \ ??CreateEditChat_18: \ 00000348 200397E5 LDR R0,[R7, #+800] \ 0000034C 0010A0E3 MOV R1,#+0 \ 00000350 260100EF SWI +294 8238 PrepareEditControl(&ec); \ ??CreateEditChat_19: \ 00000354 10008DE2 ADD R0,SP,#+16 \ 00000358 640100EF SWI +356 8239 // ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,1024); 8240 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 203397E5 LDR R3,[R7, #+800] \ 00000378 402DA013 MOVNE R2,#+4096 \ 0000037C 0020A003 MOVEQ R2,#+0 \ 00000380 14008DE2 ADD R0,SP,#+20 \ 00000384 650100EF SWI +357 8241 8242 PrepareEditCOptions(&ec_options); \ 00000388 04008DE2 ADD R0,SP,#+4 \ 0000038C C80100EF SWI +456 8243 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000390 ........ LDR R0,??DataTable294 ;; ED_FONT_SIZE \ 00000394 001090E5 LDR R1,[R0, #+0] \ 00000398 04008DE2 ADD R0,SP,#+4 \ 0000039C CA0100EF SWI +458 8244 CopyOptionsToEditControl(&ec,&ec_options); \ 000003A0 04108DE2 ADD R1,SP,#+4 \ 000003A4 14008DE2 ADD R0,SP,#+20 \ 000003A8 CE0100EF SWI +462 8245 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 8246 8247 if (t->req_xtext) \ 000003C0 B00094E5 LDR R0,[R4, #+176] \ 000003C4 04D08DE2 ADD SP,SP,#+4 \ 000003C8 000050E3 CMP R0,#+0 \ 000003CC 0400000A BEQ ??CreateEditChat_20 8248 { 8249 FreeXText(t); \ 000003D0 0400A0E1 MOV R0,R4 \ 000003D4 ........ _BLF FreeXText,??FreeXText??rA 8250 t->req_xtext=0; \ 000003D8 B09084E5 STR R9,[R4, #+176] 8251 RequestXText(t->uin); \ 000003DC 0C0094E5 LDR R0,[R4, #+12] \ 000003E0 ........ BL RequestXText 8252 } 8253 8254 EDCHAT_STRUCT *ed_struct=malloc(sizeof(EDCHAT_STRUCT)); \ ??CreateEditChat_20: \ 000003E4 1400A0E3 MOV R0,#+20 \ 000003E8 140000EF SWI +20 \ 000003EC 0050A0E1 MOV R5,R0 8255 ed_struct->ed_contact=t; \ 000003F0 004085E5 STR R4,[R5, #+0] 8256 ed_struct->ed_answer=edchat_toitem; \ 000003F4 08A085E5 STR R10,[R5, #+8] 8257 ed_struct->requested_decrement_total_unread=0; \ 000003F8 0C9085E5 STR R9,[R5, #+12] 8258 t->req_add=0; \ 000003FC 8C9084E5 STR R9,[R4, #+140] 8259 t->last_log=NULL; \ 00000400 9C9084E5 STR R9,[R4, #+156] 8260 8261 // int scr_w=ScreenW(); 8262 // int scr_h=ScreenH(); 8263 // int head_h=HeaderH(); 8264 8265 patch_header(&edchat_hdr); \ 00000404 380086E2 ADD R0,R6,#+56 \ 00000408 ........ _BLF patch_header,??patch_header??rA 8266 patch_input(&edchat_desc); \ 0000040C B891C6E1 STRH R9,[R6, #+24] \ 00000410 8A8100EF SWI +33162 \ 00000414 190080E2 ADD R0,R0,#+25 \ 00000418 BA01C6E1 STRH R0,[R6, #+26] \ 0000041C 888100EF SWI +33160 \ 00000420 010040E2 SUB R0,R0,#+1 \ 00000424 BC01C6E1 STRH R0,[R6, #+28] \ 00000428 898100EF SWI +33161 \ 0000042C 0040A0E1 MOV R4,R0 \ 00000430 8B8100EF SWI +33163 \ 00000434 000044E0 SUB R0,R4,R0 \ 00000438 010040E2 SUB R0,R0,#+1 \ 0000043C BE01C6E1 STRH R0,[R6, #+30] 8267 // edchat_desc.font=ED_FONT_SIZE; 8268 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 B00387E5 STR R0,[R7, #+944] 8269 } \ 0000045C 40D08DE2 ADD SP,SP,#+64 \ 00000460 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CreateEditChat_0: \ 00000464 ........ DC32 edchat_desc \ 00000468 ........ DC32 FIRST_LETTER 8270 8271 //----------------------------------------------------------------------------- 8272 8273 #define EC_MNU_MAX 9 8274 \ In segment CODE, align 4, keep-with-next 8275 void Quote(GUI *data) 8276 { \ Quote: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 8277 int q_n; 8278 EDITCONTROL ec, ec_hdr; 8279 EDITCONTROL ec_ed; 8280 WSHDR *ed_ws; 8281 WSHDR *ws; 8282 8283 EDCHAT_STRUCT *ed_struct; 8284 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 8285 8286 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 8287 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 8288 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 8289 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 8290 8291 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 8292 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 8293 { 8294 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 8295 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote_1 8296 } 8297 else 8298 CutWSTR(ed_ws,0); \ ??Quote_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 8299 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 8300 { 8301 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 8302 } 8303 else 8304 { 8305 wstrcat(ed_ws,ec.pWS); \ ??Quote_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 8306 } 8307 int ed_pos=0; \ ??Quote_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 8308 do 8309 { 8310 ed_pos++; \ ??Quote_4: \ 000000D0 017080E2 ADD R7,R0,#+1 8311 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 8312 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 8313 } 8314 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 8315 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 8316 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 8317 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 8318 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 8319 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 8320 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 8321 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 8322 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 8323 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 0000017C 040094E5 LDR R0,[R4, #+4] \ 00000180 0610A0E1 MOV R1,R6 \ 00000184 810100EF SWI +385 8324 FreeWS(ws); \ 00000188 0600A0E1 MOV R0,R6 \ 0000018C 290100EF SWI +297 8325 GeneralFuncF1(1); \ 00000190 0100A0E3 MOV R0,#+1 \ 00000194 3B0100EF SWI +315 8326 } \ 00000198 84D08DE2 ADD SP,SP,#+132 \ 0000019C F080BDE8 POP {R4-R7,PC} ;; return 8327 \ In segment CODE, align 4, keep-with-next 8328 void Quote2(GUI *data)//цитирование без фокуса на ответ 8329 { \ Quote2: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 8330 int q_n; 8331 EDITCONTROL ec, ec_hdr; 8332 EDITCONTROL ec_ed; 8333 WSHDR *ed_ws; 8334 WSHDR *ws; 8335 8336 EDCHAT_STRUCT *ed_struct; 8337 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 8338 8339 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 8340 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 8341 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 8342 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 8343 8344 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 8345 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 8346 { 8347 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 8348 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote2_1 8349 } 8350 else 8351 CutWSTR(ed_ws,0); \ ??Quote2_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 8352 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 8353 { 8354 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 8355 } 8356 else 8357 { 8358 wstrcat(ed_ws,ec.pWS); \ ??Quote2_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 8359 } 8360 int ed_pos=0; \ ??Quote2_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 8361 do 8362 { 8363 ed_pos++; \ ??Quote2_4: \ 000000D0 017080E2 ADD R7,R0,#+1 8364 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 8365 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 8366 } 8367 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 8368 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 8369 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 8370 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 8371 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 8372 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 8373 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 8374 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 8375 int ii=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000170 040094E5 LDR R0,[R4, #+4] \ 00000174 820100EF SWI +386 8376 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 8377 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000188 040094E5 LDR R0,[R4, #+4] \ 0000018C 0610A0E1 MOV R1,R6 \ 00000190 810100EF SWI +385 8378 EDIT_SetFocus(ed_struct->ed_chatgui,ii); \ 00000194 040094E5 LDR R0,[R4, #+4] \ 00000198 0510A0E1 MOV R1,R5 \ 0000019C 9B0100EF SWI +411 8379 FreeWS(ws); \ 000001A0 0600A0E1 MOV R0,R6 \ 000001A4 290100EF SWI +297 8380 GeneralFuncF1(1); \ 000001A8 0100A0E3 MOV R0,#+1 \ 000001AC 3B0100EF SWI +315 8381 } \ 000001B0 84D08DE2 ADD SP,SP,#+132 \ 000001B4 F080BDE8 POP {R4-R7,PC} ;; return 8382 8383 \ In segment CODE, align 4, keep-with-next 8384 void GetShortInfo(GUI *data) 8385 { \ GetShortInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} 8386 EDCHAT_STRUCT *ed_struct; 8387 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 8388 8389 TPKT *p; 8390 CLIST *t; 8391 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,??DataTable302 ;; icons + 892 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 030050E3 CMP R0,#+3 \ 00000024 1B00001A BNE ??GetShortInfo_0 8392 { 8393 p=malloc(sizeof(PKT)); \ 00000028 0800A0E3 MOV R0,#+8 \ 0000002C 140000EF SWI +20 8394 p->pkt.uin=t->uin; 8395 p->pkt.type=T_REQINFOSHORT; 8396 p->pkt.data_len=0; 8397 AddStringToLog(t, 0x01, "Request info...", I_str,0xFFFFFFFF,1); \ 00000030 ........ LDR R3,??DataTable300 ;; 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 8398 AddMsgToChat(ed_struct->ed_chatgui); \ 00000070 040094E5 LDR R0,[R4, #+4] \ 00000074 ........ BL AddMsgToChat 8399 RecountMenu(t,1); \ 00000078 0110A0E3 MOV R1,#+1 \ 0000007C 0500A0E1 MOV R0,R5 \ 00000080 ........ BL RecountMenu 8400 SUBPROC((void *)SendAnswer,0,p); \ 00000084 ........ LDR R0,??DataTable301 ;; SendAnswer \ 00000088 0620A0E1 MOV R2,R6 \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 710100EF SWI +369 \ 00000094 08D08DE2 ADD SP,SP,#+8 8401 } 8402 GeneralFuncF1(1); \ ??GetShortInfo_0: \ 00000098 0100A0E3 MOV R0,#+1 \ 0000009C 3B0100EF SWI +315 8403 } \ 000000A0 7080BDE8 POP {R4-R6,PC} ;; return \ ??GetShortInfo_1: \ 000000A4 ........ DC32 `?` 8404 8405 void AskNickAndAddContact(EDCHAT_STRUCT *); \ In segment CODE, align 4, keep-with-next 8406 void AddCurContact(GUI *data) 8407 { \ AddCurContact: \ 00000000 00402DE9 PUSH {LR} 8408 EDCHAT_STRUCT *ed_struct; 8409 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 8410 8411 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,??DataTable302 ;; icons + 892 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0000001A BNE ??AddCurContact_0 \ 00000024 ........ _BLF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA 8412 GeneralFuncF1(1); \ ??AddCurContact_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 3B0100EF SWI +315 8413 } \ 00000030 0080BDE8 POP {PC} ;; return 8414 \ In segment CODE, align 4, keep-with-next 8415 void SendAuthReq(GUI *data) 8416 { \ SendAuthReq: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 14D04DE2 SUB SP,SP,#+20 8417 EDCHAT_STRUCT *ed_struct; 8418 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 8419 8420 TPKT *p; 8421 CLIST *t; 8422 int l; 8423 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,??DataTable302 ;; icons + 892 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthReq_1 8425 { 8426 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 8427 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 8428 p->pkt.type=T_AUTHREQ; 8429 p->pkt.data_len=l; 8430 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 8431 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 ........ LDR R3,??DataTable300 ;; 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 8432 AddMsgToChat(ed_struct->ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 8433 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 ........ BL RecountMenu 8434 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable301 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 8435 } 8436 GeneralFuncF1(1); \ ??SendAuthReq_1: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 8437 } \ 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,??DataTable302 ;; icons + 892 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthGrant_1 8449 { 8450 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 8451 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 8452 p->pkt.type=T_AUTHGRANT; 8453 p->pkt.data_len=l; 8454 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 8455 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 ........ LDR R3,??DataTable303 ;; 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 8456 AddMsgToChat(ed_struct->ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 8457 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 ........ BL RecountMenu 8458 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable304 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 8459 } 8460 GeneralFuncF1(1); \ ??SendAuthGrant_1: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 8461 } \ 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 8471 { 8472 if(HISTORY_SAVE_TYPE) \ 00000024 ........ LDR R1,??DataTable305 ;; 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 8473 { 8474 if(HISTORY_TYPE) \ 00000050 01002DE9 PUSH {R0} \ 00000054 00005CE3 CMP R12,#+0 \ 00000058 0500000A BEQ ??OpenLogfile_3 8475 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 8476 else 8477 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 8478 } 8479 else 8480 { 8481 if(HISTORY_TYPE) \ ??OpenLogfile_2: \ 0000008C 00005CE3 CMP R12,#+0 \ 00000090 0200000A BEQ ??OpenLogfile_6 8482 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 8483 else 8484 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 8485 } 8486 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 8487 } 8488 FreeWS(ws); \ ??OpenLogfile_0: \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 290100EF SWI +297 8489 GeneralFuncF1(1); \ 000000C8 0100A0E3 MOV R0,#+1 \ 000000CC 3B0100EF SWI +315 8490 } \ 000000D0 3080BDE8 POP {R4,R5,PC} ;; return \ ??OpenLogfile_1: \ 000000D4 ........ DC32 HISTORY_SAVE_TYPE \ 000000D8 ........ DC32 HISTORY_TYPE \ 000000DC ........ DC32 `?` \ 000000E0 ........ DC32 HIST_PATH 8491 \ In segment CODE, align 4, keep-with-next 8492 void ClearLog(GUI *data/*,void *dummy*/) 8493 { \ ClearLog: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 8494 EDITCONTROL ec; 8495 EDCHAT_STRUCT *ed_struct; 8496 WSHDR *ws; 8497 CLIST *t; 8498 8499 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 8500 8501 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 8502 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 8503 { 8504 ws=AllocWS(1); \ 00000030 0100A0E3 MOV R0,#+1 \ 00000034 250100EF SWI +293 \ 00000038 0050A0E1 MOV R5,R0 8505 CutWSTR(ws,0); \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 260100EF SWI +294 8506 8507 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 8508 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000050 040094E5 LDR R0,[R4, #+4] \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 810100EF SWI +385 8509 8510 FreeWS(ws); \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 290100EF SWI +297 8511 GeneralFuncF1(1); \ 00000064 1D0000EA B ??ClearLog_1 8512 } 8513 else 8514 { 8515 8516 if ((t=ed_struct->ed_contact)) \ ??ClearLog_0: \ 00000068 005094E5 LDR R5,[R4, #+0] \ 0000006C 000055E3 CMP R5,#+0 \ 00000070 1C00000A BEQ ??ClearLog_2 8517 { 8518 if (t->log) \ 00000074 940095E5 LDR R0,[R5, #+148] \ 00000078 0060A0E3 MOV R6,#+0 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 1200000A BEQ ??ClearLog_3 8519 { 8520 FreeLOGQ(&t->log); \ 00000084 940085E2 ADD R0,R5,#+148 \ 00000088 ........ BL FreeLOGQ 8521 t->msg_count=0; \ 0000008C A46085E5 STR R6,[R5, #+164] 8522 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 8523 { 8524 while(ed_struct->ed_answer!=2) 8525 { 8526 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??ClearLog_5: \ 000000AC 040094E5 LDR R0,[R4, #+4] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 D10100EF SWI +465 8527 ed_struct->ed_answer--; \ 000000B8 080094E5 LDR R0,[R4, #+8] \ 000000BC 010040E2 SUB R0,R0,#+1 \ 000000C0 080084E5 STR R0,[R4, #+8] 8528 } \ ??ClearLog_4: \ 000000C4 080094E5 LDR R0,[R4, #+8] \ 000000C8 020050E3 CMP R0,#+2 \ 000000CC F6FFFF1A BNE ??ClearLog_5 8529 } 8530 } 8531 t->isactive=0; //by BoBa 18.06.07 \ ??ClearLog_3: \ 000000D0 A06085E5 STR R6,[R5, #+160] 8532 RecountMenu(t,1); \ 000000D4 0110A0E3 MOV R1,#+1 \ 000000D8 0500A0E1 MOV R0,R5 \ 000000DC ........ BL RecountMenu 8533 GeneralFuncF1(1); \ ??ClearLog_1: \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 3B0100EF SWI +315 8534 } 8535 } 8536 } \ ??ClearLog_2: \ 000000E8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000EC 7080BDE8 POP {R4-R6,PC} ;; return 8537 \ In segment CODE, align 4, keep-with-next 8538 void ecmenu_ghook(void *data, int cmd) 8539 { \ ecmenu_ghook: \ 00000000 00402DE9 PUSH {LR} 8540 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 8541 { 8542 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 8543 } 8544 } \ 00000010 0080BDE8 POP {PC} ;; return 8545 \ In segment DATA_C, align 4, align-sorted 8546 static const MENUITEM_DESC ecmenu_ITEMS[EC_MNU_MAX]= \ ecmenu_ITEMS: \ 00000000 00000000.... DC32 0H, `?` \ S_ICONS: \ 00000070 DS8 116 \ 000000E4 REQUIRE `?` \ MAINCSM: \ 000000E4 DS8 72 \ 0000012C REQUIRE `?` \ gipc: \ 0000012C DS8 12 \ 00000138 REQUIRE `?` \ tmr_gipc: \ 00000138 DS8 12 \ 00000144 REQUIRE `?` \ def_set: \ 00000144 DS8 388 \ 000002C8 REQUIRE `?` \ main_d: \ 000002C8 DS8 4 \ 000002CC REQUIRE `?` \ align: \ 000002CC DS8 4 \ 000002D0 REQUIRE `?` \ canvasdata: \ 000002D0 DS8 4 \ 000002D4 REQUIRE `?` \ paused_height: \ 000002D4 DS8 4 \ 000002D8 REQUIRE `?` \ wsBuffer: \ 000002D8 DS8 4 \ 000002DC REQUIRE `?` \ uins: \ 000002DC DS8 4 \ 000002E0 REQUIRE `?` \ saver_on: \ 000002E0 DS8 4 \ 000002E4 REQUIRE `?` \ Is_PING_On: \ 000002E4 DS8 4 \ 000002E8 REQUIRE `?` \ Is_SLI_On: \ 000002E8 DS8 4 \ 000002EC REQUIRE `?` \ Is_SMARTCPU_On: \ 000002EC DS8 4 \ 000002F0 REQUIRE `?` \ Is_INC_On: \ 000002F0 DS8 4 \ 000002F4 REQUIRE `?` \ Is_ILU_On: \ 000002F4 DS8 4 \ 000002F8 REQUIRE `?` \ Is_Double_Vibra_On: \ 000002F8 DS8 4 \ 000002FC REQUIRE `?` \ total_unread2: \ 000002FC DS8 4 \ 00000300 REQUIRE `?` \ maincsm_id: \ 00000300 DS8 4 \ 00000304 REQUIRE `?` \ maingui_id: \ 00000304 DS8 4 \ 00000308 REQUIRE `?` \ SENDMSGCOUNT: \ 00000308 DS8 4 \ 0000030C REQUIRE `?` \ IsActiveUp: \ 0000030C DS8 4 \ 00000310 REQUIRE `?` \ Is_Vibra_Enabled: \ 00000310 DS8 4 \ 00000314 REQUIRE `?` \ Is_Id3tag_Enabled: \ 00000314 DS8 4 \ 00000318 REQUIRE `?` \ CurrentStatus: \ 00000318 DS8 4 \ 0000031C REQUIRE `?` \ CurrentXStatus: \ 0000031C DS8 4 \ 00000320 REQUIRE `?` \ ews: \ 00000320 DS8 4 \ 00000324 REQUIRE `?` \ scrsTime: \ 00000324 DS8 4 \ 00000328 REQUIRE `?` \ msg_away_timer: \ 00000328 DS8 4 \ 0000032C REQUIRE `?` \ away_m: \ 0000032C DS8 4 \ 00000330 REQUIRE `?` \ status_rem: \ 00000330 DS8 4 \ 00000334 REQUIRE `?` \ change_back_status: \ 00000334 DS8 4 \ 00000338 REQUIRE `?` \ Show_XTX: \ 00000338 DS8 4 \ 0000033C REQUIRE `?` \ Is_UPTIME_On: \ 0000033C DS8 4 \ 00000340 REQUIRE `?` \ uptimeHour: \ 00000340 DS8 4 \ 00000344 REQUIRE `?` \ uptimeMin: \ 00000344 DS8 4 \ 00000348 REQUIRE `?` \ uptimeSec: \ 00000348 DS8 4 \ 0000034C REQUIRE `?` \ tracktimer: \ 0000034C DS8 4 \ 00000350 REQUIRE `?` \ input_awaymsg_id: \ 00000350 DS8 4 \ 00000354 REQUIRE `?` \ silenthide: \ 00000354 DS8 4 \ 00000358 REQUIRE `?` \ disautorecconect: \ 00000358 DS8 4 \ 0000035C REQUIRE `?` \ Is_Sounds_Enabled: \ 0000035C DS8 4 \ 00000360 REQUIRE `?` \ Is_Show_Offline: \ 00000360 DS8 4 \ 00000364 REQUIRE `?` \ Is_Show_Groups: \ 00000364 DS8 4 \ 00000368 REQUIRE `?` \ CurrentPrivateStatus: \ 00000368 DS8 4 \ 0000036C REQUIRE `?` \ vibra_count: \ 0000036C DS8 4 \ 00000370 REQUIRE `?` \ templates_chars: \ 00000370 DS8 4 \ 00000374 REQUIRE `?` \ templates_lines: \ 00000374 DS8 4 \ 00000378 REQUIRE `?` \ RXstate: \ 00000378 DS8 4 \ 0000037C REQUIRE `?` \ connect_state: \ 0000037C DS8 4 \ 00000380 REQUIRE `?` \ sock: \ 00000380 DS8 4 \ 00000384 REQUIRE `?` \ TOTALRECEIVED: \ 00000384 DS8 4 \ 00000388 REQUIRE `?` \ TOTALSENDED: \ 00000388 DS8 4 \ 0000038C REQUIRE `?` \ ALLTOTALRECEIVED: \ 0000038C DS8 4 \ 00000390 REQUIRE `?` \ ALLTOTALSENDED: \ 00000390 DS8 4 \ 00000394 REQUIRE `?` \ sendq_l: \ 00000394 DS8 4 \ 00000398 REQUIRE `?` \ sendq_p: \ 00000398 DS8 4 \ 0000039C REQUIRE `?` \ is_gprs_online: \ 0000039C DS8 4 \ 000003A0 REQUIRE `?` \ total_unread: \ 000003A0 DS8 4 \ 000003A4 REQUIRE `?` \ cltop: \ 000003A4 DS8 4 \ 000003A8 REQUIRE `?` \ GROUP_CACHE: \ 000003A8 DS8 4 \ 000003AC REQUIRE `?` \ contactlist_menu_id: \ 000003AC DS8 4 \ 000003B0 REQUIRE `?` \ edchat_id: \ 000003B0 DS8 4 \ 000003B4 REQUIRE `?` \ tenseconds_to_ping: \ 000003B4 DS8 4 \ 000003B8 REQUIRE `?` \ on_off_timer: \ 000003B8 DS8 4 \ 000003BC REQUIRE `?` \ kopa_online: \ 000003BC DS8 4 \ 000003C0 REQUIRE `?` \ kopa_kontaktu: \ 000003C0 DS8 4 \ 000003C4 REQUIRE `?` \ itemFromDisp: \ 000003C4 DS8 4 \ 000003C8 REQUIRE `?` \ totalItems: \ 000003C8 DS8 4 \ 000003CC REQUIRE `?` \ curpos: \ 000003CC DS8 4 \ 000003D0 REQUIRE `?` \ curpage: \ 000003D0 DS8 4 \ 000003D4 REQUIRE `?` \ collum: \ 000003D4 DS8 4 \ 000003D8 REQUIRE `?` \ LINE_MODE: \ 000003D8 DS8 4 \ 000003DC REQUIRE `?` \ VIEW_MODE: \ 000003DC DS8 4 \ 000003E0 REQUIRE `?` \ ShowLoadScreen: \ 000003E0 DS8 4 \ 000003E4 REQUIRE `?` \ DNR_ID: \ 000003E4 DS8 4 \ 000003E8 REQUIRE `?` \ DNR_TRIES: \ 000003E8 DS8 4 \ 000003EC REQUIRE `?` \ host_counter: \ 000003EC DS8 4 \ 000003F0 REQUIRE `?` \ ping_time: \ 000003F0 DS8 4 \ 000003F4 REQUIRE `?` \ main_msg_timer2: \ 000003F4 DS8 4 \ 000003F8 REQUIRE `?` \ NEW_MSG: \ 000003F8 DS8 4 \ 000003FC REQUIRE `?` \ time_to_stop_t9: \ 000003FC DS8 4 \ 00000400 REQUIRE `?` \ comanda: \ 00000400 DS8 4 \ 00000404 REQUIRE `?` \ INC_show: \ 00000404 DS8 4 \ 00000408 REQUIRE `?` \ INC_show2: \ 00000408 DS8 4 \ 0000040C REQUIRE `?` \ old_ed_redraw: \ 0000040C DS8 4 \ 00000410 REQUIRE `?` \ 00000410 DS8 64 \ 00000450 REQUIRE `?` \ elf_path: \ 00000450 DS8 256 \ 00000550 REQUIRE `?` \ ContactT9Key: \ 00000550 DS8 32 \ 00000570 REQUIRE `?` \ talk_sound: \ 00000570 DS8 128 \ 000005F0 REQUIRE `?` \ unread_msg_info: \ 000005F0 DS8 64 \ 00000630 REQUIRE `?` \ last_msg_buffer: \ 00000630 DS8 4096 \ 00001630 REQUIRE `?` \ ping_tmr: \ 00001630 DS8 16 \ 00001640 REQUIRE `?` \ PINGO: \ 00001640 DS8 256 \ 00001740 REQUIRE `?` \ scrsTmr: \ 00001740 DS8 16 \ 00001750 REQUIRE `?` \ away_msg: \ 00001750 DS8 264 \ 00001858 REQUIRE `?` \ away_msg_time: \ 00001858 DS8 64 \ 00001898 REQUIRE `?` \ away_msg_time_dace: \ 00001898 DS8 16 \ 000018A8 REQUIRE `?` \ tim_zone: \ 000018A8 DS8 16 \ 000018B8 REQUIRE `?` \ away_tmr: \ 000018B8 DS8 16 \ 000018C8 REQUIRE `?` \ autoChangeStatus: \ 000018C8 DS8 16 \ 000018D8 REQUIRE `?` \ remind_tmr: \ 000018D8 DS8 16 \ 000018E8 REQUIRE `?` \ uptime_tmr: \ 000018E8 DS8 16 \ 000018F8 REQUIRE `?` \ tracktmr: \ 000018F8 DS8 16 \ 00001908 REQUIRE `?` \ onlineTime: \ 00001908 DS8 128 \ 00001988 REQUIRE `?` \ sli_tmr: \ 00001988 DS8 16 \ 00001998 REQUIRE `?` \ logmsg: \ 00001998 DS8 256 \ 00001A98 REQUIRE `?` \ tmr_illumination: \ 00001A98 DS8 16 \ 00001AA8 REQUIRE `?` \ tmr_vibra: \ 00001AA8 DS8 16 \ 00001AB8 REQUIRE `?` \ reconnect_tmr: \ 00001AB8 DS8 16 \ 00001AC8 REQUIRE `?` \ tmr_active: \ 00001AC8 DS8 16 \ 00001AD8 REQUIRE `?` \ clmenu_sk_r: \ 00001AD8 DS8 16 \ 00001AE8 REQUIRE `?` \ on_off_buf: \ 00001AE8 DS8 128 \ 00001B68 REQUIRE `?` \ hostbuf2: \ 00001B68 DS8 128 \ 00001BE8 REQUIRE `?` \ clrBlack: \ 00001BE8 DS8 4 \ 00001BEC REQUIRE `?` \ clrWhite: \ 00001BEC DS8 4 \ 00001BF0 REQUIRE `?` \ clrRed: \ 00001BF0 DS8 4 \ 00001BF4 REQUIRE `?` \ transparent: \ 00001BF4 DS8 4 \ 00001BF8 REQUIRE `?` \ blue: \ 00001BF8 DS8 8 \ 00001C00 REQUIRE `?` \ hostname: \ 00001C00 DS8 128 \ 00001C80 REQUIRE `?` \ I_UIN: \ 00001C80 DS8 12 \ 00001C8C REQUIRE `?` \ a_txt: \ 00001C8C DS8 48 \ 00001CBC REQUIRE `?` \ s_txt: \ 00001CBC DS8 48 \ 00001CEC REQUIRE `?` \ d_txt: \ 00001CEC DS8 48 \ 00001D1C REQUIRE `?` \ f_txt: \ 00001D1C DS8 48 \ 00001D4C REQUIRE `?` \ g_txt: \ 00001D4C DS8 48 \ 00001D7C REQUIRE `?` \ develop: \ 00001D7C DS8 16 \ 00001D8C REQUIRE `?` \ requests1: \ 00001D8C DS8 24 \ 00001DA4 REQUIRE `?` \ requests2: \ 00001DA4 DS8 20 \ 00001DB8 REQUIRE `?` \ requests3: \ 00001DB8 DS8 24 \ 00001DD0 REQUIRE `?` \ requests4: \ 00001DD0 DS8 20 \ 00001DE4 REQUIRE `?` \ requests6: \ 00001DE4 DS8 24 \ 00001DFC REQUIRE `?` \ mod_info: \ 00001DFC DS8 264 \ 00001F04 REQUIRE `?` \ show_nick: \ 00001F04 DS8 32 \ 00001F24 REQUIRE `?` \ onContact: \ 00001F24 DS8 64 \ 00001F64 REQUIRE `?` \ incs2: \ 00001F64 DS8 16 \ 00001F74 REQUIRE `?` \ tm22: \ 00001F74 DS8 16 \ 00001F84 REQUIRE `?` 8561 { 8562 Quote, 8563 Quote2, 8564 AddSmile, 8565 GetShortInfo, 8566 AddCurContact, 8567 SendAuthReq, 8568 SendAuthGrant, 8569 OpenLogfile, 8570 ClearLog, 8571 }; 8572 8573 char ecm_contactname[64]; \ ecm_contactname: \ 00001F84 DS8 64 \ 00001FC4 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 \ icon_array: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ 00000008 DS8 4 \ 0000000C REQUIRE `?` \ 0000000C DS8 16 \ 0000001C REQUIRE `?` \ cont_hdr: \ 0000001C DS8 64 \ 0000005C REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ CmdMenuHeader: \ 00000000 DS8 20 \ 00000014 REQUIRE `?` \ cmd_chars: \ 00000014 DS8 4 \ 00000018 REQUIRE `?` \ cmd_lines: \ 00000018 DS8 4 \ 0000001C REQUIRE `?` \ NumOfItems: \ 0000001C DS8 4 \ 00000020 REQUIRE `?` 8574 \ In segment DATA_C, align 4, align-sorted 8575 static const HEADER_DESC ecmenu_HDR={0,0,NULL,NULL,NULL,(int)ecm_contactname,LGP_NULL}; \ ecmenu_HDR: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000008 00000000.... DC32 0H, ecm_contactname, 2147483647 \ ....FFFFFF7F \ 00000014 080000000000 DC32 8, 0H, ecmenu_ghook, 0H, menusoftkeys, menu_skt, 0, 0H \ 0000........ \ 00000000.... \ ............ \ 000000000000 \ 0000 \ 00000034 ............ DC32 ecmenu_ITEMS, ecmenu_HNDLS, 9 \ ....09000000 8576 8577 static const MENU_DESC ecmenu_STRUCT= 8578 { 8579 8,NULL,ecmenu_ghook,NULL, 8580 menusoftkeys, 8581 &menu_skt, 8582 0, 8583 NULL, 8584 ecmenu_ITEMS, 8585 ecmenu_HNDLS, 8586 EC_MNU_MAX 8587 }; 8588 \ In segment CODE, align 4, keep-with-next 8589 void ec_menu(EDCHAT_STRUCT *ed_struct) 8590 { \ ec_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 28D04DE2 SUB SP,SP,#+40 \ 00000008 0040A0E1 MOV R4,R0 8591 CLIST *t; 8592 int to_remove[EC_MNU_MAX+1]; 8593 int remove=0; 8594 if ((t=ed_struct->ed_contact)) \ 0000000C 001094E5 LDR R1,[R4, #+0] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 4800000A BEQ ??ec_menu_0 8595 { 8596 if (t->name) \ 00000018 ........ LDR R5,??DataTable306 ;; icons \ 0000001C 8400A0E3 MOV R0,#+132 \ 00000020 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000024 050080E0 ADD R0,R0,R5 \ 00000028 142091E2 ADDS R2,R1,#+20 \ 0000002C 0300000A BEQ ??ec_menu_1 8597 { 8598 strncpy(ecm_contactname,t->name,63); \ 00000030 3F20A0E3 MOV R2,#+63 \ 00000034 141081E2 ADD R1,R1,#+20 \ 00000038 160100EF SWI +278 \ 0000003C 020000EA B ??ec_menu_2 8599 } 8600 else 8601 { 8602 sprintf(ecm_contactname,"%u",t->uin); \ ??ec_menu_1: \ 00000040 0C2091E5 LDR R2,[R1, #+12] \ 00000044 3E1F8FE2 ADR R1,??ec_menu_3 ;; "%u" \ 00000048 160000EF SWI +22 8603 } 8604 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ec_menu_2: \ 0000004C 040094E5 LDR R0,[R4, #+4] \ 00000050 820100EF SWI +386 \ 00000054 082094E5 LDR R2,[R4, #+8] \ 00000058 0210A0E3 MOV R1,#+2 \ 0000005C 020050E1 CMP R0,R2 \ 00000060 0500001A BNE ??ec_menu_4 8605 { 8606 to_remove[++remove]=0; \ 00000064 0020A0E3 MOV R2,#+0 \ 00000068 04208DE5 STR R2,[SP, #+4] 8607 to_remove[++remove]=1; \ 0000006C 0260A0E3 MOV R6,#+2 \ 00000070 0120A0E3 MOV R2,#+1 \ 00000074 08208DE5 STR R2,[SP, #+8] \ 00000078 010000EA B ??ec_menu_5 8608 } 8609 else 8610 { 8611 // to_remove[++remove]=1; 8612 to_remove[++remove]=2; \ ??ec_menu_4: \ 0000007C 0160A0E3 MOV R6,#+1 \ 00000080 04108DE5 STR R1,[SP, #+4] 8613 } 8614 8615 if (ed_struct->ed_answer<=2) \ ??ec_menu_5: \ 00000084 080094E5 LDR R0,[R4, #+8] \ 00000088 030050E3 CMP R0,#+3 \ 0000008C 030000AA BGE ??ec_menu_6 8616 to_remove[++remove]=7; \ 00000090 016086E2 ADD R6,R6,#+1 \ 00000094 0D00A0E1 MOV R0,SP \ 00000098 0720A0E3 MOV R2,#+7 \ 0000009C 062180E7 STR R2,[R0, +R6, LSL #+2] 8617 8618 if (!ed_struct->ed_contact || connect_state!=3) \ ??ec_menu_6: \ 000000A0 000094E5 LDR R0,[R4, #+0] \ 000000A4 000050E3 CMP R0,#+0 \ 000000A8 0200000A BEQ ??ec_menu_7 \ 000000AC 7C0395E5 LDR R0,[R5, #+892] \ 000000B0 030050E3 CMP R0,#+3 \ 000000B4 1000000A BEQ ??ec_menu_8 8619 { 8620 to_remove[++remove]=2; \ ??ec_menu_7: \ 000000B8 010086E2 ADD R0,R6,#+1 \ 000000BC 0D20A0E1 MOV R2,SP \ 000000C0 001182E7 STR R1,[R2, +R0, LSL #+2] 8621 to_remove[++remove]=3; \ 000000C4 010080E2 ADD R0,R0,#+1 \ 000000C8 0D10A0E1 MOV R1,SP \ 000000CC 0320A0E3 MOV R2,#+3 \ 000000D0 002181E7 STR R2,[R1, +R0, LSL #+2] 8622 to_remove[++remove]=4; \ 000000D4 010080E2 ADD R0,R0,#+1 \ 000000D8 0420A0E3 MOV R2,#+4 \ 000000DC 002181E7 STR R2,[R1, +R0, LSL #+2] 8623 to_remove[++remove]=5; \ 000000E0 010080E2 ADD R0,R0,#+1 \ 000000E4 0520A0E3 MOV R2,#+5 \ 000000E8 002181E7 STR R2,[R1, +R0, LSL #+2] 8624 to_remove[++remove]=6; \ 000000EC 016080E2 ADD R6,R0,#+1 \ 000000F0 0D00A0E1 MOV R0,SP \ 000000F4 0610A0E3 MOV R1,#+6 \ 000000F8 061180E7 STR R1,[R0, +R6, LSL #+2] 8625 } 8626 8627 patch_header(&ecmenu_HDR); \ ??ec_menu_8: \ 000000FC 44509FE5 LDR R5,??ec_menu_3+0x4 ;; ecmenu_HDR \ 00000100 0500A0E1 MOV R0,R5 \ 00000104 ........ _BLF patch_header,??patch_header??rA 8628 to_remove[0]=remove; \ 00000108 00608DE5 STR R6,[SP, #+0] 8629 CreateMenu(0,0,&ecmenu_STRUCT,&ecmenu_HDR,0,EC_MNU_MAX,ed_struct,to_remove); \ 0000010C 0D00A0E1 MOV R0,SP \ 00000110 01002DE9 PUSH {R0} \ 00000114 10002DE9 PUSH {R4} \ 00000118 0530A0E1 MOV R3,R5 \ 0000011C 0900A0E3 MOV R0,#+9 \ 00000120 01002DE9 PUSH {R0} \ 00000124 142085E2 ADD R2,R5,#+20 \ 00000128 0010A0E3 MOV R1,#+0 \ 0000012C 0000A0E3 MOV R0,#+0 \ 00000130 01002DE9 PUSH {R0} \ 00000134 520100EF SWI +338 \ 00000138 10D08DE2 ADD SP,SP,#+16 8630 } 8631 } \ ??ec_menu_0: \ 0000013C 28D08DE2 ADD SP,SP,#+40 ;; stack cleaning \ 00000140 7080BDE8 POP {R4-R6,PC} ;; return \ ??ec_menu_3: \ 00000144 25750000 DC8 "%u",+0 \ 00000148 ........ DC32 ecmenu_HDR 8632 8633 \ In segment CODE, align 4, keep-with-next 8634 void AskNickAndAddContact(EDCHAT_STRUCT *ed_struct) 8635 { 8636 CreateAddContactGrpDialog(ed_struct->ed_contact); \ AskNickAndAddContact: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 ........ _BF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA ;; tailcall 8637 } 8638 \ In segment CODE, align 4, keep-with-next 8639 void AddSmile(GUI *data) 8640 { \ AddSmile: \ 00000000 00402DE9 PUSH {LR} 8641 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 8642 CreateSmileSelectGUI(ed_struct); \ 00000008 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 8643 GeneralFuncF1(1); \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0100EF SWI +315 8644 } \ 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 \ ??DataTable6: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable9: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable11: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable17: \ 00000000 ........ DC32 Remind_Timer2 \ In segment CODE, align 4, keep-with-next \ ??DataTable20: \ 00000000 ........ DC32 GetTags \ In segment CODE, align 4, keep-with-next \ ??DataTable25: \ 00000000 ........ DC32 showAwayIdle \ In segment CODE, align 4, keep-with-next \ ??DataTable26: \ 00000000 ........ DC32 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable27: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable30: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable31: \ 00000000 ........ DC32 awayMsg \ In segment CODE, align 4, keep-with-next \ ??DataTable33: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable37: \ 00000000 ........ DC32 icons_names \ In segment CODE, align 4, keep-with-next \ ??DataTable38: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable44: \ 00000000 ........ DC32 def_setting \ In segment CODE, align 4, keep-with-next \ ??DataTable47: \ 00000000 ........ DC32 ind_set_xstatus \ In segment CODE, align 4, keep-with-next \ ??DataTable53: \ 00000000 ........ DC32 vibraPower \ In segment CODE, align 4, keep-with-next \ ??DataTable56: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable61: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable63: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable64: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable70: \ 00000000 ........ DC32 icon_array + 8 \ In segment CODE, align 4, keep-with-next \ ??DataTable72: \ 00000000 ........ DC32 icon_array \ In segment CODE, align 4, keep-with-next \ ??DataTable73: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable74: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable76: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable77: \ 00000000 ........ DC32 suc_config_name \ In segment CODE, align 4, keep-with-next \ ??DataTable78: \ 00000000 ........ DC32 suc_config_name_mod \ In segment CODE, align 4, keep-with-next \ ??DataTable79: \ 00000000 ........ DC32 janis \ In segment CODE, align 4, keep-with-next \ ??DataTable80: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable81: \ 00000000 ........ DC32 icons + 932 \ In segment CODE, align 4, keep-with-next \ ??DataTable84: \ 00000000 ........ DC32 icons + 7156 \ In segment CODE, align 4, keep-with-next \ ??DataTable85: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable86: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable90: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable91: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable92: \ 00000000 ........ DC32 isLogStatusChange \ In segment CODE, align 4, keep-with-next \ ??DataTable95: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable97: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable100: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable101: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable102: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable106: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable108: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable109: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable111: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable112: \ 00000000 ........ DC32 ignor_list \ In segment CODE, align 4, keep-with-next \ ??DataTable113: \ 00000000 ........ DC32 extended_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable114: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable115: \ 00000000 ........ DC32 janis \ In segment CODE, align 4, keep-with-next \ ??DataTable116: \ 00000000 ........ DC32 main_count \ In segment CODE, align 4, keep-with-next \ ??DataTable118: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable120: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable121: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable122: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable123: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable133: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable134: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable135: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable137: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable138: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable139: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable140: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable141: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable142: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable143: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable144: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable150: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable153: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable155: \ 00000000 ........ DC32 CmdMenuHeader \ In segment CODE, align 4, keep-with-next \ ??DataTable156: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable157: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable159: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable162: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable163: \ 00000000 ........ DC32 main_count \ In segment CODE, align 4, keep-with-next \ ??DataTable164: \ 00000000 ........ DC32 main2_count \ In segment CODE, align 4, keep-with-next \ ??DataTable165: \ 00000000 ........ DC32 ignor_list \ In segment CODE, align 4, keep-with-next \ ??DataTable166: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable167: \ 00000000 ........ DC32 awayMsg \ In segment CODE, align 4, keep-with-next \ ??DataTable172: \ 00000000 ........ DC32 PopupFont \ In segment CODE, align 4, keep-with-next \ ??DataTable173: \ 00000000 ........ DC32 NumStatusToIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable174: \ 00000000 ........ DC32 PopupBGCl \ In segment CODE, align 4, keep-with-next \ ??DataTable176: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable179: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable180: \ 00000000 ........ DC32 isLogStatusChange \ In segment CODE, align 4, keep-with-next \ ??DataTable181: \ 00000000 ........ DC32 extended_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable182: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable183: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable184: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable187: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable188: \ 00000000 ........ DC32 main_count \ In segment CODE, align 4, keep-with-next \ ??DataTable192: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable193: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable198: \ 00000000 ........ DC32 IsInvertSoftKey \ In segment CODE, align 4, keep-with-next \ ??DataTable201: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable203: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable205: \ 00000000 ........ DC32 process_active_timer \ In segment CODE, align 4, keep-with-next \ ??DataTable206: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable208: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable209: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable211: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable213: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable214: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable217: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable221: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable222: \ 00000000 ........ DC32 showAwayIdle \ In segment CODE, align 4, keep-with-next \ ??DataTable223: \ 00000000 ........ DC32 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable225: \ 00000000 ........ DC32 suc_config_name_mod \ In segment CODE, align 4, keep-with-next \ ??DataTable229: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable230: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable231: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable232: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable234: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable235: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable236: \ 00000000 ........ DC32 ClearSendQ \ In segment CODE, align 4, keep-with-next \ ??DataTable237: \ 00000000 ........ DC32 NumStatusToIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable238: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable239: \ 00000000 ........ DC32 ShowStatusIcon \ In segment CODE, align 4, keep-with-next \ ??DataTable243: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable244: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable245: \ 00000000 ........ DC32 suc_config_name \ In segment CODE, align 4, keep-with-next \ ??DataTable246: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable247: \ 00000000 ........ DC32 fontpath \ In segment CODE, align 4, keep-with-next \ ??DataTable248: \ 00000000 ........ DC32 bgrColor \ In segment CODE, align 4, keep-with-next \ ??DataTable249: \ 00000000 ........ DC32 fontColor \ In segment CODE, align 4, keep-with-next \ ??DataTable250: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable251: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable252: \ 00000000 ........ DC32 Pinger2 \ In segment CODE, align 4, keep-with-next \ ??DataTable253: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable255: \ 00000000 ........ DC32 icons + 932 \ In segment CODE, align 4, keep-with-next \ ??DataTable257: \ 00000000 ........ DC32 IsMultiBuffer \ In segment CODE, align 4, keep-with-next \ ??DataTable259: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable260: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable261: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable262: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable264: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable267: \ 00000000 ........ DC32 main2_count \ In segment CODE, align 4, keep-with-next \ ??DataTable268: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable269: \ 00000000 ........ DC32 IsMultiBuffer \ In segment CODE, align 4, keep-with-next \ ??DataTable272: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable273: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable274: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable275: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable276: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable279: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable280: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable283: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable284: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable287: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable289: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable290: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable291: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable292: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable294: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable300: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable301: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable302: \ 00000000 ........ DC32 icons + 892 \ In segment CODE, align 4, keep-with-next \ ??DataTable303: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable304: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable305: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable306: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable307: \ 00000000 ........ DC32 GetTags \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000010 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000020 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000030 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000040 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000050 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000060 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000070 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000080 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000090 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000000000 \ 0000 \ `?`: \ 000000E4 ............ DC32 maincsm_onmessage, maincsm_oncreate, 0, 0, 0, 0, maincsm_onclose \ ....00000000 \ 000000000000 \ 000000000000 \ ........ \ 00000100 2C0000000100 DC32 44, 1, minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ 0000........ \ ........CCCC \ AA5555AA3333 \ 00000000 \ 0000011C 8B00 DC16 139 \ 0000011E 0000 DC8 0, 0 \ 00000120 49636F6E4261 DC8 "IconBar" \ 7200 \ 00000128 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000012C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00000138 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00000144 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000154 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000164 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000174 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000184 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000194 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000204 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000214 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000224 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000234 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000244 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000254 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000264 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000274 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000284 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000294 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000000000 \ 0000 \ `?`: \ 000002C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002CC 00000000 DC32 0 \ `?`: \ 000002D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002D4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002D8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002DC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002E0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002E4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002E8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002EC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002F4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002FC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000300 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000304 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000308 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000030C 00000000 DC32 0 \ `?`: \ 00000310 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000314 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000318 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000031C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000320 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000324 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000328 00000000 DC32 0 \ `?`: \ 0000032C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000330 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000334 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000338 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000033C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000340 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000344 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000348 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000034C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000350 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000354 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000358 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000035C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000360 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000364 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000368 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000036C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000370 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000374 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000378 F6FFFFFF DC32 -10 \ `?`: \ 0000037C 00000000 DC32 0 \ `?`: \ 00000380 FFFFFFFF DC32 -1 \ `?`: \ 00000384 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000388 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000038C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000390 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000394 00000000 DC32 0 \ `?`: \ 00000398 00000000 DC32 0H \ `?`: \ 0000039C 01000000 DC32 1 \ `?`: \ 000003A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003A4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003A8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003AC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003B8 00000000 DC32 0 \ `?`: \ 000003BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003CC 00000000 DC32 0 \ `?`: \ 000003D0 01000000 DC32 1 \ `?`: \ 000003D4 00000000 DC32 0 \ `?`: \ 000003D8 00000000 DC32 0 \ `?`: \ 000003DC 01000000 DC32 1 \ `?`: \ 000003E0 01000000 DC32 1 \ `?`: \ 000003E4 00000000 DC32 0 \ `?`: \ 000003E8 03000000 DC32 3 \ `?`: \ 000003EC 00000000 DC32 0 \ `?`: \ 000003F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003F4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003FC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000400 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000404 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000408 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000040C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000410 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000420 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000430 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000440 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000450 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000460 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000470 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000480 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000490 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000500 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000510 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000520 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000530 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000540 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000550 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000560 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000570 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000580 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000590 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000005F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000600 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000610 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000620 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000630 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000640 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000650 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000660 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000670 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000680 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000690 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000700 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000710 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000720 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000730 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000740 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000750 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000760 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000770 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000780 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000790 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000800 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000810 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000820 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000830 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000840 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000850 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000860 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000870 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000880 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000890 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000900 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000910 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000920 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000930 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000940 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000950 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000960 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000970 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000980 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000990 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ED0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001000 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001010 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001020 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001030 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001040 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001050 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001060 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001070 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001080 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001090 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001100 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001110 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001120 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001130 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001140 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001150 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001160 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001170 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001180 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001190 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001200 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001210 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001220 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001230 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001240 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001250 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001260 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001270 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001280 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001290 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001300 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001310 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001320 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001330 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001340 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001350 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001360 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001370 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001380 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001390 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001400 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001410 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001420 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001430 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001440 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001450 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001460 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001470 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001480 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001490 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001500 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001510 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001520 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001530 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001540 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001550 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001560 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001570 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001580 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001590 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001600 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001610 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001620 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001630 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001640 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001650 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001660 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001670 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001680 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001690 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001700 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001710 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001720 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001730 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001740 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001750 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001760 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001770 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001780 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001790 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001800 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001810 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001820 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001830 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001840 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001850 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00001858 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001868 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001878 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001888 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001898 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001908 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001918 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001928 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001938 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001948 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001958 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001968 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001978 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001988 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001998 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001AA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001AB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001AC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001AD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001AE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001B68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001BE8 00000064 DC8 0, 0, 0, 100 \ `?`: \ 00001BEC FFFFFF64 DC8 255, 255, 255, 100 \ `?`: \ 00001BF0 FF000064 DC8 255, 0, 0, 100 \ `?`: \ 00001BF4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00001BF8 0000FF6400 DC8 0, 0, 0FFH, 64H, 0 \ 00001BFD 000000 DC8 0, 0, 0 \ `?`: \ 00001C00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001C80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00001C8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001CBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001CEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001D1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001D4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001D7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001D8C 53656E64696E DC8 "Sending online time..." \ 67206F6E6C69 \ 6E652074696D \ 652E2E2E00 \ 00001DA3 00 DC8 0 \ `?`: \ 00001DA4 53656E64696E DC8 "Sending msg info..." \ 67206D736720 \ 696E666F2E2E \ 2E00 \ `?`: \ 00001DB8 53656E64696E DC8 "Sending battery info..." \ 672062617474 \ 65727920696E \ 666F2E2E2E00 \ `?`: \ 00001DD0 53656E64696E DC8 "Sending mod info..." \ 67206D6F6420 \ 696E666F2E2E \ 2E00 \ `?`: \ 00001DE4 53656E64696E DC8 "Sending offline info..." \ 67206F66666C \ 696E6520696E \ 666F2E2E2E00 \ `?`: \ 00001DFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001ECC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00001F04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001F24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001F64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001F74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001F84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 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 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00000008 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000000C ............ DC32 ChangeVibraContact, ChangeSoundContact, ChangeAutoMsg \ ............ \ 00000018 ........ DC32 ChangeShowXstatus \ `?`: \ 0000001C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000002C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000003C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000004C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000008 000000000000 DC32 0H, 0, 2147483647 \ 0000FFFFFF7F \ `?`: \ 00000014 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000018 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000001C 00000000 DC32 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 FF000015 DC8 255, 0, 0, 21 \ 00000004 253032643A25 DC8 "%02d:%02d" \ 30326400 \ 0000000E 0000 DC8 0, 0 \ 00000010 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 \ 00000039 000000 DC8 0, 0, 0 \ 0000003C 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 \ 00000065 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 474D54202D31 DC8 "GMT -12:00" \ 323A303000 \ 0000000B 00 DC8 0 \ 0000000C 474D54202D31 DC8 "GMT -11:00" \ 313A303000 \ 00000017 00 DC8 0 \ 00000018 474D54202D31 DC8 "GMT -10:00" \ 303A303000 \ 00000023 00 DC8 0 \ 00000024 474D54202D30 DC8 "GMT -09:00" \ 393A303000 \ 0000002F 00 DC8 0 \ 00000030 474D54202D30 DC8 "GMT -08:00" \ 383A303000 \ 0000003B 00 DC8 0 \ 0000003C 474D54202D30 DC8 "GMT -07:00" \ 373A303000 \ 00000047 00 DC8 0 \ 00000048 474D54202D30 DC8 "GMT -06:00" \ 363A303000 \ 00000053 00 DC8 0 \ 00000054 474D54202D30 DC8 "GMT -05:00" \ 353A303000 \ 0000005F 00 DC8 0 \ 00000060 474D54202D30 DC8 "GMT -04:00" \ 343A303000 \ 0000006B 00 DC8 0 \ 0000006C 474D54202D30 DC8 "GMT -03:30" \ 333A333000 \ 00000077 00 DC8 0 \ 00000078 474D54202D30 DC8 "GMT -03:00" \ 333A303000 \ 00000083 00 DC8 0 \ 00000084 474D54202D30 DC8 "GMT -02:00" \ 323A303000 \ 0000008F 00 DC8 0 \ 00000090 474D54202D30 DC8 "GMT -01:00" \ 313A303000 \ 0000009B 00 DC8 0 \ 0000009C 474D54203030 DC8 "GMT 00:00" \ 3A303000 \ 000000A6 0000 DC8 0, 0 \ 000000A8 474D54202B30 DC8 "GMT +01:00" \ 313A303000 \ 000000B3 00 DC8 0 \ 000000B4 474D54202B30 DC8 "GMT +02:00" \ 323A303000 \ 000000BF 00 DC8 0 \ 000000C0 474D54202B30 DC8 "GMT +03:00" \ 333A303000 \ 000000CB 00 DC8 0 \ 000000CC 474D54202B30 DC8 "GMT +03:30" \ 333A333000 \ 000000D7 00 DC8 0 \ 000000D8 474D54202B30 DC8 "GMT +04:00" \ 343A303000 \ 000000E3 00 DC8 0 \ 000000E4 474D54202B30 DC8 "GMT +04:30" \ 343A333000 \ 000000EF 00 DC8 0 \ 000000F0 474D54202B30 DC8 "GMT +05:00" \ 353A303000 \ 000000FB 00 DC8 0 \ 000000FC 474D54202B30 DC8 "GMT +05:30" \ 353A333000 \ 00000107 00 DC8 0 \ 00000108 474D54202B30 DC8 "GMT +05:45" \ 353A343500 \ 00000113 00 DC8 0 \ 00000114 474D54202B30 DC8 "GMT +06:00" \ 363A303000 \ 0000011F 00 DC8 0 \ 00000120 474D54202B30 DC8 "GMT +06:30" \ 363A333000 \ 0000012B 00 DC8 0 \ 0000012C 474D54202B30 DC8 "GMT +07:00" \ 373A303000 \ 00000137 00 DC8 0 \ 00000138 474D54202B30 DC8 "GMT +08:00" \ 383A303000 \ 00000143 00 DC8 0 \ 00000144 474D54202B30 DC8 "GMT +09:00" \ 393A303000 \ 0000014F 00 DC8 0 \ 00000150 474D54202B30 DC8 "GMT +09:30" \ 393A333000 \ 0000015B 00 DC8 0 \ 0000015C 474D54202B31 DC8 "GMT +10:00" \ 303A303000 \ 00000167 00 DC8 0 \ 00000168 474D54202B31 DC8 "GMT +11:00" \ 313A303000 \ 00000173 00 DC8 0 \ 00000174 474D54202B31 DC8 "GMT +12:00" \ 323A303000 \ 0000017F 00 DC8 0 \ 00000180 474D54202B31 DC8 "GMT +13:00" \ 333A303000 \ 0000018B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4F6E6C696E65 DC8 "Online: %02d:%02d:%02d" \ 3A2025303264 \ 3A253032643A \ 2530326400 \ 00000017 00 DC8 0 \ 00000018 4F66666C696E DC8 "Offline" \ 6500 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 417761792066 DC8 "Away from [%s]" \ 726F6D205B25 \ 735D00 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5C25642E7478 DC8 "\\%d.txt" \ 7400 \ 00000008 5C302E747874 DC8 "\\0.txt" \ 00 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 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 5B41205B2573 DC8 "[A [%s] ]" \ 5D205D00 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ 00000000 5B565D00 DC8 "[V]" \ In segment DATA_C, align 4, align-sorted \ 00000000 5B535D00 DC8 "[S]" \ In segment DATA_C, align 4, align-sorted \ 00000000 5B525D00 DC8 "[R]" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CCE5EDFE00 DC8 "\314\345\355\376" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 0A00 DC8 "\012" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 73656E642072 DC8 "send res %d" \ 657320256400 \ 0000000C 53656E642064 DC8 "Send delayed..." \ 656C61796564 \ 2E2E2E00 \ 0000001C 53656E642065 DC8 "Send error!" \ 72726F722100 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5369655F2530 DC8 "Sie_%04d" \ 346400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 257300 DC8 "%s" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25733A202573 DC8 "%s: %s" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 253032643A25 DC8 "%02d:%02d:%02d %02d.%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 417567202036 DC8 "Aug 6 2008" \ 203230303800 \ 00000058 32303A30393A DC8 "20:09:04" \ 303400 \ 00000061 000000 DC8 0, 0, 0 \ 00000064 2573206D6F64 DC8 "%s model: %s sw: %s\015\012" \ 656C3A202573 \ 2073773A2025 \ 730D0A00 \ 0000007A 0000 DC8 0, 0 \ 0000007C 506C6174666F DC8 "Platform: \250LKA" \ 726D3A20A84C \ 4B4100 \ 0000008B 00 DC8 0 \ 0000008C C2F0E5ECFF20 DC8 0C2H, 0F0H, 0E5H, 0ECH, 0FFH, 20H, 0E2H, 20H \ E220 \ 00000094 EEEDEBE0E9ED DC8 0EEH, 0EDH, 0EBH, 0E0H, 0E9H, 0EDH, 3AH, 20H \ 3A20 \ 0000009C 253032643A25 DC8 25H, 30H, 32H, 64H, 3AH, 25H, 30H, 32H \ 3032 \ 000000A4 643A25303264 DC8 64H, 3AH, 25H, 30H, 32H, 64H, 20H, 0DH \ 200D \ 000000AC 0AD1E5F0E2E5 DC8 0AH, 0D1H, 0E5H, 0F0H, 0E2H, 0E5H, 0F0H, 3AH \ F03A \ 000000B4 202573200D0A DC8 20H, 25H, 73H, 20H, 0DH, 0AH, 25H, 73H \ 2573 \ 000000BC 200D0A00 DC8 20H, 0DH, 0AH, 0 \ 000000C0 CEF2EFF0E0E2 DC8 0CEH, 0F2H, 0EFH, 0F0H, 0E0H, 0E2H, 0EBH, 0E5H \ EBE5 \ 000000C8 EDEE20F1EEEE DC8 0EDH, 0EEH, 20H, 0F1H, 0EEH, 0EEH, 0E1H, 0F9H \ E1F9 \ 000000D0 E5EDE8E93A20 DC8 0E5H, 0EDH, 0E8H, 0E9H, 3AH, 20H, 25H, 64H \ 2564 \ 000000D8 200D0ACFF0E8 DC8 20H, 0DH, 0AH, 0CFH, 0F0H, 0E8H, 0EDH, 0FFH \ EDFF \ 000000E0 F2EE20F1EEEE DC8 0F2H, 0EEH, 20H, 0F1H, 0EEH, 0EEH, 0E1H, 0F9H \ E1F9 \ 000000E8 E5EDE8E93A20 DC8 0E5H, 0EDH, 0E8H, 0E9H, 3AH, 20H, 25H, 64H \ 2564 \ 000000F0 200D0A00 DC8 20H, 0DH, 0AH, 0 \ 000000F4 CEEFE5F0E0F2 DC8 "\316\357\345\360\340\362\356\360: %s \015\012" \ EEF03A202573 \ 200D0A00 \ 00000104 C7E0F0FFE420 DC8 "\307\340\360\377\344 \341\340\362\340\360\345\350: %d \357\360\356\366\345\355\362\356\342 \015\012" \ E1E0F2E0F0E5 \ E83A20256420 \ EFF0EEF6E5ED \ F2EEE2200D0A \ 00 \ 00000123 00 DC8 0 \ 00000124 547261666669 DC8 54H, 72H, 61H, 66H, 66H, 69H, 63H, 3AH \ 633A \ 0000012C 205278203A20 DC8 20H, 52H, 78H, 20H, 3AH, 20H, 25H, 64H \ 2564 \ 00000134 62205478203A DC8 62H, 20H, 54H, 78H, 20H, 3AH, 20H, 25H \ 2025 \ 0000013C 646220517565 DC8 64H, 62H, 20H, 51H, 75H, 65H, 75H, 65H \ 7565 \ 00000144 3A2025646220 DC8 3AH, 20H, 25H, 64H, 62H, 20H, 0DH, 0AH \ 0D0A \ 0000014C 54696D653A20 DC8 54H, 69H, 6DH, 65H, 3AH, 20H, 25H, 30H \ 2530 \ 00000154 32643A253032 DC8 32H, 64H, 3AH, 25H, 30H, 32H, 64H, 0DH \ 640D \ 0000015C 0A4F6E6C696E DC8 0AH, 4FH, 6EH, 6CH, 69H, 6EH, 65H, 20H \ 6520 \ 00000164 636F6E746163 DC8 63H, 6FH, 6EH, 74H, 61H, 63H, 74H, 3AH \ 743A \ 0000016C 202564205B74 DC8 20H, 25H, 64H, 20H, 5BH, 74H, 6FH, 74H \ 6F74 \ 00000174 616C3A202564 DC8 61H, 6CH, 3AH, 20H, 25H, 64H, 5DH, 20H \ 5D20 \ 0000017C 0D0A556E7265 DC8 0DH, 0AH, 55H, 6EH, 72H, 65H, 61H, 64H \ 6164 \ 00000184 206D65737361 DC8 20H, 6DH, 65H, 73H, 73H, 61H, 67H, 65H \ 6765 \ 0000018C 3A2025642F25 DC8 3AH, 20H, 25H, 64H, 2FH, 25H, 64H, 20H \ 6420 \ 00000194 00 DC8 0 \ 00000195 000000 DC8 0, 0, 0 \ 00000198 53656E64696E DC8 "Sending textinfo..." \ 672074657874 \ 696E666F2E2E \ 2E00 \ 000001AC 5F5F54455854 DC8 "__TEXTINFO" \ 494E464F00 \ 000001B7 00 DC8 0 \ 000001B8 5F5F544900 DC8 "__TI" \ 000001BD 000000 DC8 0, 0, 0 \ 000001C0 54696D653A20 DC8 "Time: %02d:%02d" \ 253032643A25 \ 30326400 \ 000001D0 53656E64696E DC8 "Sending time..." \ 672074696D65 \ 2E2E2E00 \ 000001E0 5F5F54494D45 DC8 "__TIME" \ 00 \ 000001E7 00 DC8 0 \ 000001E8 4745545F5449 DC8 "GET_TIME" \ 4D4500 \ 000001F1 000000 DC8 0, 0, 0 \ 000001F4 2573206D6F64 DC8 "%s model: %s sw: %s" \ 656C3A202573 \ 2073773A2025 \ 7300 \ 00000208 53656E64696E DC8 "Sending platform info..." \ 6720706C6174 \ 666F726D2069 \ 6E666F2E2E2E \ 00 \ 00000221 000000 DC8 0, 0, 0 \ 00000224 4745545F504C DC8 "GET_PLATFORM_INFO" \ 4154464F524D \ 5F494E464F00 \ 00000236 0000 DC8 0, 0 \ 00000238 5F5F504C4154 DC8 "__PLATFORM" \ 464F524D00 \ 00000243 00 DC8 0 \ 00000244 5F5F485700 DC8 "__HW" \ 00000249 000000 DC8 0, 0, 0 \ 0000024C C2F0E5ECFF20 DC8 "\302\360\345\354\377 \342 \356\355\353\340\351\355: %02d:%02d:%02d \012\321\345\360\342\345\360: %s" \ E220EEEDEBE0 \ E9ED3A202530 \ 32643A253032 \ 643A25303264 \ 200AD1E5F0E2 \ E5F03A202573 \ 00 \ 00000277 00 DC8 0 \ 00000278 4745545F4F4E DC8 "GET_ONLINE_TIME" \ 4C494E455F54 \ 494D4500 \ 00000288 5F5F4F4E4C49 DC8 "__ONLINE" \ 4E4500 \ 00000291 000000 DC8 0, 0, 0 \ 00000294 CEF2EFF0E0E2 DC8 "\316\362\357\360\340\342\353\345\355\356 \361\356\356\341\371\345\355\350\351: %d \012\317\360\350\355\377\362\356 \361\356\356\341\371\345\355\350\351: %d" \ EBE5EDEE20F1 \ EEEEE1F9E5ED \ E8E93A202564 \ 200ACFF0E8ED \ FFF2EE20F1EE \ EEE1F9E5EDE8 \ E93A20256400 \ 000002C4 4745545F4D53 DC8 "GET_MSG_INFO" \ 475F494E464F \ 00 \ 000002D1 000000 DC8 0, 0, 0 \ 000002D4 5F5F4D534700 DC8 "__MSG" \ 000002DA 0000 DC8 0, 0 \ 000002DC CEEFE5F0E0F2 DC8 "\316\357\345\360\340\362\356\360: %s" \ EEF03A202573 \ 00 \ 000002E9 000000 DC8 0, 0, 0 \ 000002EC 53656E64696E DC8 "Sending provider name..." \ 672070726F76 \ 69646572206E \ 616D652E2E2E \ 00 \ 00000305 000000 DC8 0, 0, 0 \ 00000308 4745545F5052 DC8 "GET_PROVIDER" \ 4F5649444552 \ 00 \ 00000315 000000 DC8 0, 0, 0 \ 00000318 5F5F50524F56 DC8 "__PROVIDER" \ 4944455200 \ 00000323 00 DC8 0 \ 00000324 2A2A2A416363 DC8 "***Access denied***" \ 657373206465 \ 6E6965642A2A \ 2A00 \ 00000338 4745545F4D4F DC8 "GET_MOD_INFO" \ 445F494E464F \ 00 \ 00000345 000000 DC8 0, 0, 0 \ 00000348 5F5F4D4F4400 DC8 "__MOD" \ 0000034E 0000 DC8 0, 0 \ 00000350 4745545F4241 DC8 "GET_BAT_INFO" \ 545F494E464F \ 00 \ 0000035D 000000 DC8 0, 0, 0 \ 00000360 5F5F42415400 DC8 "__BAT" \ 00000366 0000 DC8 0, 0 \ 00000368 C0E2F2EEEEF2 DC8 "\300\342\362\356\356\362\342\345\362\367\350\352: %s %s! %s %s" \ E2E5F2F7E8EA \ 3A2025732025 \ 732120257320 \ 257300 \ 00000383 00 DC8 0 \ 00000384 726576697369 DC8 "revision 2058, mod date: %s at %s " \ 6F6E20323035 \ 382C206D6F64 \ 20646174653A \ 202573206174 \ 2025732000 \ 000003A7 00 DC8 0 \ 000003A8 687474703A2F DC8 "http://kluchnik.jino-net.ru/naticqmod/" \ 2F6B6C756368 \ 6E696B2E6A69 \ 6E6F2D6E6574 \ 2E72752F6E61 \ 746963716D6F \ 642F00 \ 000003CF 00 DC8 0 \ 000003D0 53656E64696E DC8 "Sending url info..." \ 672075726C20 \ 696E666F2E2E \ 2E00 \ 000003E4 4745545F5552 DC8 "GET_URL_INFO" \ 4C5F494E464F \ 00 \ 000003F1 000000 DC8 0, 0, 0 \ 000003F4 5F5F55524C00 DC8 "__URL" \ 000003FA 0000 DC8 0, 0 \ 000003FC 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 \ 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 766973332E70 DC8 "vis3.png" \ 6E6700 \ 00000009 000000 DC8 0, 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 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 766973342E70 DC8 "vis4.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973352E70 DC8 "vis5.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CBE5E200 DC8 "\313\345\342" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CFF0E0E200 DC8 "\317\360\340\342" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2FBE1EEF000 DC8 "\302\373\341\356\360" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7E0EAF0FBF2 DC8 "\307\340\352\360\373\362\374" \ FC00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2E8E1F0E000 DC8 "\302\350\341\360\340" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7E2F3EA00 DC8 "\307\342\363\352" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 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 \ `?_1 52 menusoftkeys 12 menu_sk 24 menu_skt 8 ? 76 maincsm_oncreate 272 maincsm_onclose 352 do_reconnect 40 CheckDoubleRun 112 checkGui 60 maincsm_onmessage 3248 addIconBar 328 minus11 4 maincsm_name_body 280 UpdateCSMname 36 SetIconBarHandler 20 main 432 edchat_locret 4 ExtractAnswer 280 ??FindNextActiveContact_0 64 FindPrevActiveContact 88 ed_options_handler 1204 wstrstr 124 IsUrl 424 ParseAnswer 548 SaveAnswer 36 GetTempName 172 DMonth 52 recon 52 edchat_onkey 1520 my_ed_redraw 116 edchat_ghook 560 edchat_desc 84 sk 16 CreateEditChat 1132 Quote 416 Quote2 440 GetShortInfo 168 AddCurContact 52 SendAuthReq 212 SendAuthGrant 208 OpenLogfile 228 ClearLog 240 ecmenu_ghook 20 ecmenu_ITEMS 252 ecmenu_HNDLS 36 icons 8132 sk 8 input_awaymsg_sk 24 input_awaymsg_skt 8 icon_array 92 CmdMenuHeader 32 ecmenu_HDR 64 ec_menu 332 AskNickAndAddContact 8 AddSmile 24 ??DataTable1 4 ??DataTable2 4 ??DataTable6 4 ??DataTable9 4 ??DataTable11 4 ??DataTable17 4 ??DataTable20 4 ??DataTable25 4 ??DataTable26 4 ??DataTable27 4 ??DataTable30 4 ??DataTable31 4 ??DataTable33 4 ??DataTable37 4 ??DataTable38 4 ??DataTable44 4 ??DataTable47 4 ??DataTable53 4 ??DataTable56 4 ??DataTable61 4 ??DataTable63 4 ??DataTable64 4 ??DataTable70 4 ??DataTable72 4 ??DataTable73 4 ??DataTable74 4 ??DataTable76 4 ??DataTable77 4 ??DataTable78 4 ??DataTable79 4 ??DataTable80 4 ??DataTable81 4 ??DataTable84 4 ??DataTable85 4 ??DataTable86 4 ??DataTable90 4 ??DataTable91 4 ??DataTable92 4 ??DataTable95 4 ??DataTable97 4 ??DataTable100 4 ??DataTable101 4 ??DataTable102 4 ??DataTable106 4 ??DataTable108 4 ??DataTable109 4 ??DataTable111 4 ??DataTable112 4 ??DataTable113 4 ??DataTable114 4 ??DataTable115 4 ??DataTable116 4 ??DataTable118 4 ??DataTable120 4 ??DataTable121 4 ??DataTable122 4 ??DataTable123 4 ??DataTable133 4 ??DataTable134 4 ??DataTable135 4 ??DataTable137 4 ??DataTable138 4 ??DataTable139 4 ??DataTable140 4 ??DataTable141 4 ??DataTable142 4 ??DataTable143 4 ??DataTable144 4 ??DataTable150 4 ??DataTable153 4 ??DataTable155 4 ??DataTable156 4 ??DataTable157 4 ??DataTable159 4 ??DataTable162 4 ??DataTable163 4 ??DataTable164 4 ??DataTable165 4 ??DataTable166 4 ??DataTable167 4 ??DataTable172 4 ??DataTable173 4 ??DataTable174 4 ??DataTable176 4 ??DataTable179 4 ??DataTable180 4 ??DataTable181 4 ??DataTable182 4 ??DataTable183 4 ??DataTable184 4 ??DataTable187 4 ??DataTable188 4 ??DataTable192 4 ??DataTable193 4 ??DataTable198 4 ??DataTable201 4 ??DataTable203 4 ??DataTable205 4 ??DataTable206 4 ??DataTable208 4 ??DataTable209 4 ??DataTable211 4 ??DataTable213 4 ??DataTable214 4 ??DataTable217 4 ??DataTable221 4 ??DataTable222 4 ??DataTable223 4 ??DataTable225 4 ??DataTable229 4 ??DataTable230 4 ??DataTable231 4 ??DataTable232 4 ??DataTable234 4 ??DataTable235 4 ??DataTable236 4 ??DataTable237 4 ??DataTable238 4 ??DataTable239 4 ??DataTable243 4 ??DataTable244 4 ??DataTable245 4 ??DataTable246 4 ??DataTable247 4 ??DataTable248 4 ??DataTable249 4 ??DataTable250 4 ??DataTable251 4 ??DataTable252 4 ??DataTable253 4 ??DataTable255 4 ??DataTable257 4 ??DataTable259 4 ??DataTable260 4 ??DataTable261 4 ??DataTable262 4 ??DataTable264 4 ??DataTable267 4 ??DataTable268 4 ??DataTable269 4 ??DataTable272 4 ??DataTable273 4 ??DataTable274 4 ??DataTable275 4 ??DataTable276 4 ??DataTable279 4 ??DataTable280 4 ??DataTable283 4 ??DataTable284 4 ??DataTable287 4 ??DataTable289 4 ??DataTable290 4 ??DataTable291 4 ??DataTable292 4 ??DataTable294 4 ??DataTable300 4 ??DataTable301 4 ??DataTable302 4 ??DataTable303 4 ??DataTable304 4 ??DataTable305 4 ??DataTable306 4 ??DataTable307 4 ? 8132 ? 8 ? 24 ? 8 ? 92 ? 32 ? 104 ? 396 ? 32 ? 16 ? 3 ? 16 ? 60 ? 12 ? 4 ? 4 ? 4 ? 8 ? 2 ? 40 ? 12 ? 3 ? 8 ? 64 ? 12 ? 132 ? 4 ? 1048 ? 4 ? 8 ?_1 8 ? 3 ? 12 ? 12 ? 92 ? 164 ? 16 ? 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 ? 4 ? 8 ? 8 ? 8 ? 8 ? 8 ? 8 ? 1 ?