############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 07/Feb/2009 14:43:55 # # 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 kluchnik -D BCFG -D ICONBAR # # --preprocess D:\pasha\elf\_MY_PROJECT_\naticq_mod2\k # # luchnik_iconbar\List\ -lC # # D:\pasha\elf\_MY_PROJECT_\naticq_mod2\kluchnik_iconb # # ar\List\ -o D:\pasha\elf\_MY_PROJECT_\naticq_mod2\kl # # uchnik_iconbar\Obj\ -s9 --cpu_mode arm --endian # # little --cpu ARM926EJ-S --stack_align 4 --interwork # # -e --fpu None --dlib_config "D:\Embedded Workbench # # 4.0 Evaluation2\ARM\LIB\dl5tpainl8n.h" -I # # "D:\Embedded Workbench 4.0 Evaluation2\ARM\INC\" # # --inline_threshold=2 # # List file = D:\pasha\elf\_MY_PROJECT_\naticq_mod2\kluchnik_iconb # # ar\List\main.lst # # Object file = D:\pasha\elf\_MY_PROJECT_\naticq_mod2\kluchnik_iconb # # ar\Obj\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" 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 //#define LOG 38 39 #ifdef LOG 40 const char _rn[]="\r\n"; 41 static void logwrite(char *text) 42 { 43 int hFile; 44 unsigned int io_error = 0; 45 hFile = fopen("4:\\natlog.txt",A_ReadWrite + A_Create + A_Append,P_READ+P_WRITE, &io_error); 46 if(hFile!=-1) 47 { 48 fwrite(hFile, text, strlen(text), &io_error); 49 fwrite(hFile, _rn, 2, &io_error); 50 fclose(hFile, &io_error); 51 } 52 else 53 ShowMSG(1,(int)"Error!"); 54 // mfree(text); 55 } 56 #endif 57 58 //------------- ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ -------------// 59 60 int main_d; 61 int align=0; 62 //int space=1; 63 void *canvasdata; 64 int paused_height; 65 WSHDR *wsBuffer;//мультибуффер 66 67 char talk_sound[128]; 68 int uins; 69 //char m_1[]="unofficial! private use only"; 70 //char m_2[]="mod by (c)Evilfox 315384924"; 71 char unread_msg_info[64]; 72 73 int saver_on; 74 75 #ifdef NEWSGOLD 76 extern char teast2[256]; 77 #endif 78 79 //#ifdef ELKA 80 char last_msg_buffer[4096]; 81 //#endif 82 83 84 //-------------------------------------------------// 85 86 char prmsg[256];//вывод попап в контакт листе 87 int PrintTimer=0;//время попап 88 int curping=0; //тукущий пинг 89 90 volatile int sendq_l=0; //Длинна очереди для send 91 volatile void *sendq_p=NULL; //указатель очереди 92 93 extern const char *suc_config_name_mod; 94 95 96 int main_count; 97 int main2_count; 98 99 int DoRefreshCL=0;//Если нада обновить КЛ \ In segment CODE, align 4, keep-with-next 100 void RefreshCL() 101 { 102 DoRefreshCL=1; \ RefreshCL: \ 00000000 08009FE5 LDR R0,??RefreshCL_0 ;; i_rc + 732 \ 00000004 0110A0E3 MOV R1,#+1 \ 00000008 001080E5 STR R1,[R0, #+0] 103 } \ 0000000C 1EFF2FE1 BX LR ;; return \ ??RefreshCL_0: \ 00000010 ........ DC32 i_rc + 732 104 105 int ifJustNowRefresh=0;//Надо обновить поключившихся \ In segment CODE, align 4, keep-with-next 106 void RefreshJustNow() 107 { 108 ifJustNowRefresh=1; \ RefreshJustNow: \ 00000000 08009FE5 LDR R0,??RefreshJustNow_0 ;; i_rc + 736 \ 00000004 0110A0E3 MOV R1,#+1 \ 00000008 001080E5 STR R1,[R0, #+0] 109 } \ 0000000C 1EFF2FE1 BX LR ;; return \ ??RefreshJustNow_0: \ 00000010 ........ DC32 i_rc + 736 110 //-------------------- AUTOPING -------------------// 111 112 GBSTMR ping_tmr; 113 static void PingToServer2(void) 114 { 115 TPKT *p; 116 p=malloc(sizeof(PKT)+sizeof(TTime)); 117 GetDateTime(NULL,(TTime *)p->data); 118 p->pkt.uin=0; 119 p->pkt.type=T_ECHO; 120 p->pkt.data_len=sizeof(TTime); 121 SUBPROC((void *)SendAnswer,0,p); 122 } 123 124 int Is_PING_On; 125 \ In segment CODE, align 4, keep-with-next 126 void Pinger2() 127 { 128 if(Is_PING_On) \ Pinger2: \ 00000000 ........ LDR R0,??DataTable30 ;; i_rc \ 00000004 70402DE9 PUSH {R4-R6,LR} \ 00000008 ........ LDR R5,??DataTable1 ;; Pinger2 \ 0000000C 8C10A0E3 MOV R1,#+140 \ 00000010 641D81E3 ORR R1,R1,#0x1900 \ 00000014 004081E0 ADD R4,R1,R0 \ 00000018 E41290E5 LDR R1,[R0, #+740] \ 0000001C 000051E3 CMP R1,#+0 \ 00000020 1800000A BEQ ??Pinger2_0 129 { 130 if(sendq_l<32)//если буфер для отправки меньше 32 байт то пингуем,чтобы не забивать очередь, тест... \ 00000024 CC0290E5 LDR R0,[R0, #+716] \ 00000028 200050E3 CMP R0,#+32 \ 0000002C 0F0000AA BGE ??Pinger2_1 131 PingToServer2(); \ 00000030 1000A0E3 MOV R0,#+16 \ 00000034 140000EF SWI +20 \ 00000038 0060A0E1 MOV R6,R0 \ 0000003C 081086E2 ADD R1,R6,#+8 \ 00000040 0000A0E3 MOV R0,#+0 \ 00000044 B40000EF SWI +180 \ 00000048 0000A0E3 MOV R0,#+0 \ 0000004C 000086E5 STR R0,[R6, #+0] \ 00000050 1200A0E3 MOV R0,#+18 \ 00000054 B400C6E1 STRH R0,[R6, #+4] \ 00000058 0800A0E3 MOV R0,#+8 \ 0000005C B600C6E1 STRH R0,[R6, #+6] \ 00000060 ........ LDR R0,??DataTable2 ;; SendAnswer \ 00000064 0620A0E1 MOV R2,R6 \ 00000068 0010A0E3 MOV R1,#+0 \ 0000006C 710100EF SWI +369 132 GBS_StartTimerProc(&ping_tmr, 60*216, Pinger2); \ ??Pinger2_1: \ 00000070 0520A0E1 MOV R2,R5 \ 00000074 A010A0E3 MOV R1,#+160 \ 00000078 C81D81E3 ORR R1,R1,#0x3200 \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 4D0000EF SWI +77 \ 00000084 7080BDE8 POP {R4-R6,PC} 133 } 134 else 135 GBS_StartTimerProc(&ping_tmr, 216*10, Pinger2); \ ??Pinger2_0: \ 00000088 0520A0E1 MOV R2,R5 \ 0000008C 871EA0E3 MOV R1,#+2160 \ 00000090 0400A0E1 MOV R0,R4 \ 00000094 4D0000EF SWI +77 136 } \ 00000098 7080BDE8 POP {R4-R6,PC} ;; return 137 138 //-------------------------------------------------// 139 140 141 142 extern volatile int total_smiles; 143 extern volatile int total_xstatuses; 144 extern volatile int xstatuses_load; 145 extern volatile int pictures_max; //2026rev 146 extern volatile int pictures_loaded; //2026rev 147 148 #ifdef ELKA 149 int Is_SLI_On;//мигаем светодиодом 150 #endif 151 152 //int Is_SMARTCPU_On;//Вывод сообщений на гэ 153 int Is_INC_On;//Popup message 154 int Is_ILU_On;//Режим подсветки 155 int Is_Double_Vibra_On;//Режим напоминания 156 int total_unread; 157 int total_unread2; 158 159 #ifdef ELKA \ In segment DATA_C, align 4, align-sorted 160 const int SLI_TYPE=1; \ SLI_TYPE: \ 00000000 01000000 DC32 1 161 #endif 162 163 char PINGO[256]; 164 165 #ifdef ELKA 166 extern const unsigned int SLI_time; 167 extern const unsigned int SLI_time2; 168 #endif 169 //#define USE_MLMENU 170 #define USE_GUI //графический интерфейс 171 172 #define TMR_SECOND 216 173 174 //IPC 175 const char ipc_my_name[32]=IPC_NATICQ_NAME; 176 const char ipc_xtask_name[]=IPC_XTASK_NAME; 177 const char ipc_test_name[]="test"; 178 IPC_REQ gipc; 179 180 181 char elf_path[256]; 182 int maincsm_id; 183 int maingui_id; 184 volatile int contactlist_menu_id; \ In segment CODE, align 4, keep-with-next 185 void SMART_REDRAW(void) 186 { \ SMART_REDRAW: \ 00000000 10402DE9 PUSH {R4,LR} 187 #ifdef DEBUG 188 int f; 189 int t; 190 LockSched(); 191 f=IsGuiOnTop(maingui_id); 192 t=IsGuiOnTop(contactlist_menu_id); 193 UnlockSched(); 194 if (f || t) REDRAW(); 195 #else 196 int f; 197 LockSched(); \ 00000004 460100EF SWI +326 198 f=IsGuiOnTop(maingui_id); \ 00000008 1C009FE5 LDR R0,??SMART_REDRAW_0 ;; i_rc + 768 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 350100EF SWI +309 \ 00000014 0040A0E1 MOV R4,R0 199 UnlockSched(); \ 00000018 470100EF SWI +327 200 if (f) REDRAW(); \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} \ 00000024 720100EF SWI +370 201 #endif 202 203 } \ 00000028 1080BDE8 POP {R4,PC} ;; return \ ??SMART_REDRAW_0: \ 0000002C ........ DC32 i_rc + 768 204 205 //По 10 секунд 206 #define ACTIVE_TIME 360 207 208 //Максимальное количество сообщений в логе 209 //#define MAXLOGMSG (20) 210 211 // Строковые описания статусов 212 213 const char S_OFFLINE[]="Offline"; 214 const char S_INVISIBLE[]="Invisible"; 215 const char S_AWAY[]="Away"; 216 const char S_NA[]="N/A"; 217 const char S_OCCUPIED[]="Occupied"; 218 const char S_DND[]="DND"; 219 const char S_ONLINE[]="Online"; 220 const char S_FFC[]="FFC"; 221 222 volatile int SENDMSGCOUNT; 223 #ifdef kluchnik1 224 int IsActiveUp=1; 225 #else 226 int IsActiveUp=0; 227 #endif 228 int Is_Vibra_Enabled; 229 int Is_Id3tag_Enabled; 230 unsigned int Is_Sounds_Enabled; 231 int Is_Show_Offline; 232 int Is_Show_Groups; 233 234 int S_ICONS[TOTAL_ICONS+1]; 235 236 #define EOP -10 237 int CurrentStatus; 238 int CurrentXStatus; 239 240 WSHDR *ews; 241 242 static const char * const icons_names[TOTAL_ICONS]= 243 { 244 "offline.png", 245 "invisible.png", 246 "away.png", 247 "na.png", 248 "occupied.png", 249 "dnd.png", 250 "depression.png", 251 "evil.png", 252 "home.png", 253 "lunch.png", 254 "work.png", 255 "online.png", 256 "ffc.png", 257 "message.png", 258 "unknown.png", 259 "groupon.png", 260 "groupoff.png", 261 "null.png", 262 "addcont.png", 263 "head.png", 264 "logo.png", 265 "ping.png", 266 "settings.png", 267 "vis1.png", 268 "vis2.png", 269 "vis3.png", 270 "vis4.png", 271 "vis5.png", 272 "ping1.png", 273 "ping2.png", 274 "ping3.png", 275 "ping4.png", 276 "bg.png" 277 }; 278 279 280 281 282 //------------------------ SCREEN SAVER TIMER ---------------------------// 283 /* 284 #ifdef NEWSGOLD 285 GBSTMR scrsTmr; 286 int scrsTime; 287 void ScreenSaverTimer() 288 { 289 if(scrsTime==screenSaverTime) 290 { 291 scrsTime=screenSaverTime;//на всякий случай 292 CloseScreensaver(); 293 DrawScreenSaver(); 294 GBS_StartTimerProc(&scrsTmr, 216*10, ScreenSaverTimer); 295 } 296 if(isScreenSaverEna) 297 scrsTime++; 298 GBS_StartTimerProc(&scrsTmr, 216*5, ScreenSaverTimer); 299 } 300 #endif 301 */ 302 303 //-----------------------------------------------------------------------// 304 305 306 int msg_away_timer=0;//Счетчик для автостатуса 307 char away_msg[264];//Само сообщение для ответа 308 char away_msg_time[64];//Время когда сработал таймер 309 char away_msg_time_dace[16];//время отсутвтвия для вывода на идле 310 //char *inp_away_msg2;//Текст сообщения,если будем писать сами(на долгую 6 или VOL_DOWN_BUTTON),а не брать из конфига 311 char tim_zone[16]; \ In segment DATA_Z, align 4, align-sorted 312 int timeh; \ timeh: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 313 int timemin; \ timemin: \ 00000000 DS8 4 314 int away_m;//состояние автоответчика 315 int status_rem;//Для сохранения текущего статуса 316 int change_back_status;//вернуть предыдущий статус или нет 317 GBSTMR away_tmr; 318 319 320 int Show_XTX;//Показывать хстатус или время он лайн \ In segment CODE, align 4, keep-with-next 321 void FreeXText2(CLIST *t) 322 { \ FreeXText2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 323 if (t->xtext2) { mfree(t->xtext2); t->xtext2=NULL; } \ 00000008 B80094E5 LDR R0,[R4, #+184] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} \ 00000014 150000EF SWI +21 \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C B80084E5 STR R0,[R4, #+184] 324 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 325 \ In segment CODE, align 4, keep-with-next 326 void away_timer()//Таймер автостатуса 327 { \ away_timer: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 328 TTime tt; 329 if(msg_away_timer==(AUTO_ENGADE*12)) \ 00000004 ........ LDR R4,??DataTable30 ;; i_rc \ 00000008 ........ LDR R9,??DataTable4 ;; menutext \ 0000000C A400A0E3 MOV R0,#+164 \ 00000010 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 500080E3 ORR R0,R0,#0x50 \ 0000001C 046080E0 ADD R6,R0,R4 \ 00000020 1000C0E3 BIC R0,R0,#0x10 \ 00000024 047080E0 ADD R7,R0,R4 \ 00000028 ........ LDR R0,??DataTable26 ;; AUTO_ENGADE \ 0000002C 08D04DE2 SUB SP,SP,#+8 \ 00000030 008090E5 LDR R8,[R0, #+0] \ 00000034 AC0394E5 LDR R0,[R4, #+940] \ 00000038 0C10A0E3 MOV R1,#+12 \ 0000003C 910802E0 MUL R2,R1,R8 \ 00000040 020050E1 CMP R0,R2 \ 00000044 1D00001A BNE ??away_timer_0 330 { 331 GetDateTime(NULL,&tt); \ 00000048 0D10A0E1 MOV R1,SP \ 0000004C 0000A0E3 MOV R0,#+0 \ 00000050 B40000EF SWI +180 332 sprintf(away_msg_time_dace, "%02d:%02d", tt.hour, tt.min); \ 00000054 0130DDE5 LDRB R3,[SP, #+1] \ 00000058 0020DDE5 LDRB R2,[SP, #+0] \ 0000005C 801089E2 ADD R1,R9,#+128 \ 00000060 0700A0E1 MOV R0,R7 \ 00000064 160000EF SWI +22 333 sprintf(away_msg_time, "( Отсутствую примерно с %02d:%02d [%s] )", tt.hour, tt.min, tim_zone); \ 00000068 0600A0E1 MOV R0,R6 \ 0000006C 01002DE9 PUSH {R0} \ 00000070 0530DDE5 LDRB R3,[SP, #+5] \ 00000074 0420DDE5 LDRB R2,[SP, #+4] \ 00000078 8C1089E2 ADD R1,R9,#+140 \ 0000007C 0500A0E1 MOV R0,R5 \ 00000080 160000EF SWI +22 334 away_m=1; 335 336 if(CurrentStatus!=2 && CurrentStatus!=isAutoStatusOn) \ 00000084 A00394E5 LDR R0,[R4, #+928] \ 00000088 01A0A0E3 MOV R10,#+1 \ 0000008C B0A384E5 STR R10,[R4, #+944] \ 00000090 020050E3 CMP R0,#+2 \ 00000094 04D08DE2 ADD SP,SP,#+4 \ 00000098 0800000A BEQ ??away_timer_0 \ 0000009C D8109FE5 LDR R1,??away_timer_1 ;; isAutoStatusOn \ 000000A0 001091E5 LDR R1,[R1, #+0] \ 000000A4 010050E1 CMP R0,R1 \ 000000A8 0400000A BEQ ??away_timer_0 337 { 338 status_rem=CurrentStatus; \ 000000AC B40384E5 STR R0,[R4, #+948] 339 CurrentStatus=2; \ 000000B0 0200A0E3 MOV R0,#+2 \ 000000B4 A00384E5 STR R0,[R4, #+928] 340 set_my_status(); \ 000000B8 ........ BL set_my_status 341 change_back_status=1; \ 000000BC B8A384E5 STR R10,[R4, #+952] 342 } 343 } 344 345 if( (IsOnNAStatus) && (msg_away_timer==((AUTO_ENGADE*12)+(NAStatusTime*12))) )//Включить переключение на недоступен,в минутах \ ??away_timer_0: \ 000000C0 B8009FE5 LDR R0,??away_timer_1+0x4 ;; IsOnNAStatus \ 000000C4 000090E5 LDR R0,[R0, #+0] \ 000000C8 000050E3 CMP R0,#+0 \ 000000CC 1C00000A BEQ ??away_timer_2 \ 000000D0 AC109FE5 LDR R1,??away_timer_1+0x8 ;; NAStatusTime \ 000000D4 AC0394E5 LDR R0,[R4, #+940] \ 000000D8 001091E5 LDR R1,[R1, #+0] \ 000000DC 0C20A0E3 MOV R2,#+12 \ 000000E0 081081E0 ADD R1,R1,R8 \ 000000E4 920101E0 MUL R1,R2,R1 \ 000000E8 010050E1 CMP R0,R1 \ 000000EC 1400001A BNE ??away_timer_2 346 { 347 GetDateTime(NULL,&tt); \ 000000F0 0D10A0E1 MOV R1,SP \ 000000F4 0000A0E3 MOV R0,#+0 \ 000000F8 B40000EF SWI +180 348 sprintf(away_msg_time_dace, "%02d:%02d", tt.hour, tt.min); \ 000000FC 0130DDE5 LDRB R3,[SP, #+1] \ 00000100 0020DDE5 LDRB R2,[SP, #+0] \ 00000104 801089E2 ADD R1,R9,#+128 \ 00000108 0700A0E1 MOV R0,R7 \ 0000010C 160000EF SWI +22 349 sprintf(away_msg_time, "( Недоступен примерно с %02d:%02d [%s] )", tt.hour, tt.min, tim_zone); \ 00000110 40002DE9 PUSH {R6} \ 00000114 0530DDE5 LDRB R3,[SP, #+5] \ 00000118 0420DDE5 LDRB R2,[SP, #+4] \ 0000011C B81089E2 ADD R1,R9,#+184 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 160000EF SWI +22 350 if(CurrentStatus!=3) \ 00000128 A00394E5 LDR R0,[R4, #+928] \ 0000012C 04D08DE2 ADD SP,SP,#+4 \ 00000130 030050E3 CMP R0,#+3 \ 00000134 0200000A BEQ ??away_timer_2 351 { 352 CurrentStatus=3; \ 00000138 0300A0E3 MOV R0,#+3 \ 0000013C A00384E5 STR R0,[R4, #+928] 353 set_my_status(); \ 00000140 ........ BL set_my_status 354 } 355 } 356 357 if(Auto_Status) \ ??away_timer_2: \ 00000144 ........ LDR R0,??DataTable6 ;; Auto_Status 358 msg_away_timer++; 359 GBS_StartTimerProc(&away_tmr, 216*5, away_timer); \ 00000148 38209FE5 LDR R2,??away_timer_1+0xC ;; away_timer \ 0000014C 000090E5 LDR R0,[R0, #+0] \ 00000150 3810A0E3 MOV R1,#+56 \ 00000154 000050E3 CMP R0,#+0 \ 00000158 AC039415 LDRNE R0,[R4, #+940] \ 0000015C 401E81E3 ORR R1,R1,#0x400 \ 00000160 01008012 ADDNE R0,R0,#+1 \ 00000164 AC038415 STRNE R0,[R4, #+940] \ 00000168 0400A0E3 MOV R0,#+4 \ 0000016C 700D80E3 ORR R0,R0,#0x1C00 \ 00000170 040080E0 ADD R0,R0,R4 \ 00000174 4D0000EF SWI +77 360 } \ 00000178 F387BDE8 POP {R0,R1,R4-R10,PC} ;; return \ ??away_timer_1: \ 0000017C ........ DC32 isAutoStatusOn \ 00000180 ........ DC32 IsOnNAStatus \ 00000184 ........ DC32 NAStatusTime \ 00000188 ........ DC32 away_timer 361 362 \ In segment CODE, align 4, keep-with-next 363 void init_time_zone() 364 { 365 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 ;; i_rc + 7156 \ 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 08090B0D DC8 +8,+9,+11,+13 \ 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 366 { 367 case 0: 368 sprintf(tim_zone, "GMT -12:00"); \ ??init_time_zone_2: \ 0000004C 601F81E2 ADD R1,R1,#+384 369 break; 370 case 1: 371 sprintf(tim_zone, "GMT -11:00"); \ ??init_time_zone_3: \ 00000050 160000EF SWI +22 \ 00000054 0080BDE8 POP {PC} 372 break; 373 case 2: 374 sprintf(tim_zone, "GMT -10:00"); \ ??init_time_zone_4: \ 00000058 0C1081E2 ADD R1,R1,#+12 \ 0000005C 000000EA B ??init_time_zone_5 375 break; 376 case 3: 377 sprintf(tim_zone, "GMT -09:00"); \ ??init_time_zone_6: \ 00000060 181081E2 ADD R1,R1,#+24 \ ??init_time_zone_5: \ 00000064 160000EF SWI +22 \ 00000068 0080BDE8 POP {PC} 378 break; 379 case 4: 380 sprintf(tim_zone, "GMT -08:00"); \ ??init_time_zone_7: \ 0000006C 241081E2 ADD R1,R1,#+36 \ 00000070 FBFFFFEA B ??init_time_zone_5 381 break; 382 case 5: 383 sprintf(tim_zone, "GMT -07:00"); \ ??init_time_zone_8: \ 00000074 301081E2 ADD R1,R1,#+48 \ 00000078 F9FFFFEA B ??init_time_zone_5 384 break; 385 case 6: 386 sprintf(tim_zone, "GMT -06:00"); \ ??init_time_zone_9: \ 0000007C 3C1081E2 ADD R1,R1,#+60 \ 00000080 F7FFFFEA B ??init_time_zone_5 387 break; 388 case 7: 389 sprintf(tim_zone, "GMT -05:00"); \ ??init_time_zone_10: \ 00000084 481081E2 ADD R1,R1,#+72 \ 00000088 F5FFFFEA B ??init_time_zone_5 390 break; 391 case 8: 392 sprintf(tim_zone, "GMT -04:00"); \ ??init_time_zone_11: \ 0000008C 541081E2 ADD R1,R1,#+84 \ 00000090 F3FFFFEA B ??init_time_zone_5 393 break; 394 case 9: 395 sprintf(tim_zone, "GMT -03:30"); \ ??init_time_zone_12: \ 00000094 601081E2 ADD R1,R1,#+96 \ 00000098 F1FFFFEA B ??init_time_zone_5 396 break; 397 case 10: 398 sprintf(tim_zone, "GMT -03:00"); \ ??init_time_zone_13: \ 0000009C 6C1081E2 ADD R1,R1,#+108 \ 000000A0 EFFFFFEA B ??init_time_zone_5 399 break; 400 case 11: 401 sprintf(tim_zone, "GMT -02:00"); \ ??init_time_zone_14: \ 000000A4 781081E2 ADD R1,R1,#+120 \ 000000A8 EDFFFFEA B ??init_time_zone_5 402 break; 403 case 12: 404 sprintf(tim_zone, "GMT -01:00"); \ ??init_time_zone_15: \ 000000AC 841081E2 ADD R1,R1,#+132 \ 000000B0 EBFFFFEA B ??init_time_zone_5 405 break; 406 case 13: 407 sprintf(tim_zone, "GMT 00:00"); \ ??init_time_zone_16: \ 000000B4 901081E2 ADD R1,R1,#+144 \ 000000B8 E9FFFFEA B ??init_time_zone_5 408 break; 409 case 14: 410 sprintf(tim_zone, "GMT +01:00"); \ ??init_time_zone_17: \ 000000BC 9C1081E2 ADD R1,R1,#+156 \ 000000C0 E7FFFFEA B ??init_time_zone_5 411 break; 412 case 15: 413 sprintf(tim_zone, "GMT +02:00"); \ ??init_time_zone_18: \ 000000C4 A81081E2 ADD R1,R1,#+168 \ 000000C8 E5FFFFEA B ??init_time_zone_5 414 break; 415 case 16: 416 sprintf(tim_zone, "GMT +03:00"); \ ??init_time_zone_19: \ 000000CC B41081E2 ADD R1,R1,#+180 \ 000000D0 E3FFFFEA B ??init_time_zone_5 417 break; 418 case 17: 419 sprintf(tim_zone, "GMT +03:30"); \ ??init_time_zone_20: \ 000000D4 C01081E2 ADD R1,R1,#+192 \ 000000D8 E1FFFFEA B ??init_time_zone_5 420 break; 421 case 18: 422 sprintf(tim_zone, "GMT +04:00"); \ ??init_time_zone_21: \ 000000DC CC1081E2 ADD R1,R1,#+204 \ 000000E0 DFFFFFEA B ??init_time_zone_5 423 break; 424 case 19: 425 sprintf(tim_zone, "GMT +04:30"); \ ??init_time_zone_22: \ 000000E4 D81081E2 ADD R1,R1,#+216 \ 000000E8 DDFFFFEA B ??init_time_zone_5 426 break; 427 case 20: 428 sprintf(tim_zone, "GMT +05:00"); \ ??init_time_zone_23: \ 000000EC E41081E2 ADD R1,R1,#+228 \ 000000F0 DBFFFFEA B ??init_time_zone_5 429 break; 430 case 21: 431 sprintf(tim_zone, "GMT +05:30"); \ ??init_time_zone_24: \ 000000F4 F01081E2 ADD R1,R1,#+240 \ 000000F8 D9FFFFEA B ??init_time_zone_5 432 break; 433 case 22: 434 sprintf(tim_zone, "GMT +05:45"); \ ??init_time_zone_25: \ 000000FC FC1081E2 ADD R1,R1,#+252 \ 00000100 D7FFFFEA B ??init_time_zone_5 435 break; 436 case 23: 437 sprintf(tim_zone, "GMT +06:00"); \ ??init_time_zone_26: \ 00000104 421F81E2 ADD R1,R1,#+264 \ 00000108 D5FFFFEA B ??init_time_zone_5 438 break; 439 case 24: 440 sprintf(tim_zone, "GMT +06:30"); \ ??init_time_zone_27: \ 0000010C 451F81E2 ADD R1,R1,#+276 \ 00000110 D3FFFFEA B ??init_time_zone_5 441 break; 442 case 25: 443 sprintf(tim_zone, "GMT +07:00"); \ ??init_time_zone_28: \ 00000114 481F81E2 ADD R1,R1,#+288 \ 00000118 D1FFFFEA B ??init_time_zone_5 444 break; 445 case 26: 446 sprintf(tim_zone, "GMT +08:00"); \ ??init_time_zone_29: \ 0000011C 4B1F81E2 ADD R1,R1,#+300 \ 00000120 CFFFFFEA B ??init_time_zone_5 447 break; 448 case 27: 449 sprintf(tim_zone, "GMT +09:00"); \ ??init_time_zone_30: \ 00000124 4E1F81E2 ADD R1,R1,#+312 \ 00000128 CDFFFFEA B ??init_time_zone_5 450 break; 451 case 28: 452 sprintf(tim_zone, "GMT +09:30"); \ ??init_time_zone_31: \ 0000012C 511F81E2 ADD R1,R1,#+324 \ 00000130 CBFFFFEA B ??init_time_zone_5 453 break; 454 case 29: 455 sprintf(tim_zone, "GMT +10:00"); \ ??init_time_zone_32: \ 00000134 541F81E2 ADD R1,R1,#+336 \ 00000138 C9FFFFEA B ??init_time_zone_5 456 break; 457 case 30: 458 sprintf(tim_zone, "GMT +11:00"); \ ??init_time_zone_33: \ 0000013C 571F81E2 ADD R1,R1,#+348 \ 00000140 C7FFFFEA B ??init_time_zone_5 459 break; 460 case 31: 461 sprintf(tim_zone, "GMT +12:00"); \ ??init_time_zone_34: \ 00000144 5A1F81E2 ADD R1,R1,#+360 \ 00000148 C5FFFFEA B ??init_time_zone_5 462 break; 463 case 32: 464 sprintf(tim_zone, "GMT +13:00"); \ ??init_time_zone_35: \ 0000014C 5D1F81E2 ADD R1,R1,#+372 \ 00000150 160000EF SWI +22 465 break; 466 } 467 } \ ??init_time_zone_36: \ 00000154 0080BDE8 POP {PC} ;; return \ ??init_time_zone_1: \ 00000158 ........ DC32 time_zone \ 0000015C ........ DC32 i_rc + 7156 \ 00000160 ........ DC32 `?` 468 469 470 //------------------------ AUTO CHANGE STATUS ------------------------------// 471 472 void SetIconBarHandler(); 473 GBSTMR autoChangeStatus; 474 #pragma inline 475 static unsigned int GetStatusByIndex(int pos) 476 { 477 switch(pos) 478 { 479 case 1: 480 return IS_ONLINE; 481 case 2: 482 return IS_AWAY; 483 case 3: 484 return IS_NA; 485 case 4: 486 return IS_DND; 487 case 5: 488 return IS_OCCUPIED; 489 case 6: 490 return IS_FFC; 491 case 7: 492 return IS_INVISIBLE; 493 case 8: 494 return IS_DEPRESSION; 495 case 9: 496 return IS_EVIL; 497 case 10: 498 return IS_HOME; 499 case 11: 500 return IS_LUNCH; 501 case 12: 502 return IS_WORK; 503 } 504 return IS_UNKNOWN; 505 } 506 507 #ifndef DEBUG \ In segment CODE, align 4, keep-with-next 508 void AutoChangeStatus_timer()//Таймер автосмены статуса 509 { \ AutoChangeStatus_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 510 TTime tt; 511 GetDateTime(NULL,&tt); \ 00000008 0D10A0E1 MOV R1,SP 512 513 if(status_1!=0 && tt.hour==tm_status_1.hour && tt.min==tm_status_1.min) \ 0000000C ........ LDR R4,??DataTable30 ;; i_rc \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 B40000EF SWI +180 \ 00000018 E4039FE5 LDR R0,??AutoChangeStatus_timer_5 ;; status_1 \ 0000001C 0150A0E3 MOV R5,#+1 \ 00000020 000090E5 LDR R0,[R0, #+0] \ 00000024 000050E3 CMP R0,#+0 \ 00000028 2C00000A BEQ ??AutoChangeStatus_timer_6 \ 0000002C D4139FE5 LDR R1,??AutoChangeStatus_timer_5+0x4 ;; tm_status_1 \ 00000030 0020DDE5 LDRB R2,[SP, #+0] \ 00000034 0030D1E5 LDRB R3,[R1, #+0] \ 00000038 030052E1 CMP R2,R3 \ 0000003C 2700001A BNE ??AutoChangeStatus_timer_6 \ 00000040 0120DDE5 LDRB R2,[SP, #+1] \ 00000044 0110D1E5 LDRB R1,[R1, #+1] \ 00000048 010052E1 CMP R2,R1 \ 0000004C 2300001A BNE ??AutoChangeStatus_timer_6 514 { 515 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 A00384E5 STR R0,[R4, #+928] 516 set_my_status(); \ 000000DC ........ BL set_my_status 517 } 518 519 if(status_2!=0 && tt.hour==tm_status_2.hour && tt.min==tm_status_2.min) \ ??AutoChangeStatus_timer_6: \ 000000E0 24039FE5 LDR R0,??AutoChangeStatus_timer_5+0x8 ;; status_2 \ 000000E4 000090E5 LDR R0,[R0, #+0] \ 000000E8 000050E3 CMP R0,#+0 \ 000000EC 2C00000A BEQ ??AutoChangeStatus_timer_21 \ 000000F0 18139FE5 LDR R1,??AutoChangeStatus_timer_5+0xC ;; tm_status_2 \ 000000F4 0020DDE5 LDRB R2,[SP, #+0] \ 000000F8 0030D1E5 LDRB R3,[R1, #+0] \ 000000FC 030052E1 CMP R2,R3 \ 00000100 2700001A BNE ??AutoChangeStatus_timer_21 \ 00000104 0120DDE5 LDRB R2,[SP, #+1] \ 00000108 0110D1E5 LDRB R1,[R1, #+1] \ 0000010C 010052E1 CMP R2,R1 \ 00000110 2300001A BNE ??AutoChangeStatus_timer_21 520 { 521 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 A00384E5 STR R0,[R4, #+928] 522 set_my_status(); \ 000001A0 ........ BL set_my_status 523 } 524 525 if(status_3!=0 && tt.hour==tm_status_3.hour && tt.min==tm_status_3.min) \ ??AutoChangeStatus_timer_21: \ 000001A4 68029FE5 LDR R0,??AutoChangeStatus_timer_5+0x10 ;; status_3 \ 000001A8 000090E5 LDR R0,[R0, #+0] \ 000001AC 000050E3 CMP R0,#+0 \ 000001B0 2C00000A BEQ ??AutoChangeStatus_timer_36 \ 000001B4 5C129FE5 LDR R1,??AutoChangeStatus_timer_5+0x14 ;; tm_status_3 \ 000001B8 0020DDE5 LDRB R2,[SP, #+0] \ 000001BC 0030D1E5 LDRB R3,[R1, #+0] \ 000001C0 030052E1 CMP R2,R3 \ 000001C4 2700001A BNE ??AutoChangeStatus_timer_36 \ 000001C8 0120DDE5 LDRB R2,[SP, #+1] \ 000001CC 0110D1E5 LDRB R1,[R1, #+1] \ 000001D0 010052E1 CMP R2,R1 \ 000001D4 2300001A BNE ??AutoChangeStatus_timer_36 526 { 527 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 A00384E5 STR R0,[R4, #+928] 528 set_my_status(); \ 00000264 ........ BL set_my_status 529 } 530 531 if(status_4!=0 && tt.hour==tm_status_4.hour && tt.min==tm_status_4.min) \ ??AutoChangeStatus_timer_36: \ 00000268 AC019FE5 LDR R0,??AutoChangeStatus_timer_5+0x18 ;; status_4 \ 0000026C 000090E5 LDR R0,[R0, #+0] \ 00000270 000050E3 CMP R0,#+0 \ 00000274 2C00000A BEQ ??AutoChangeStatus_timer_51 \ 00000278 A0119FE5 LDR R1,??AutoChangeStatus_timer_5+0x1C ;; tm_status_4 \ 0000027C 0020DDE5 LDRB R2,[SP, #+0] \ 00000280 0030D1E5 LDRB R3,[R1, #+0] \ 00000284 030052E1 CMP R2,R3 \ 00000288 2700001A BNE ??AutoChangeStatus_timer_51 \ 0000028C 0120DDE5 LDRB R2,[SP, #+1] \ 00000290 0110D1E5 LDRB R1,[R1, #+1] \ 00000294 010052E1 CMP R2,R1 \ 00000298 2300001A BNE ??AutoChangeStatus_timer_51 532 { 533 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 A00384E5 STR R0,[R4, #+928] 534 set_my_status(); \ 00000328 ........ BL set_my_status 535 } 536 537 if(status_5!=0 && tt.hour==tm_status_5.hour && tt.min==tm_status_5.min) \ ??AutoChangeStatus_timer_51: \ 0000032C F0009FE5 LDR R0,??AutoChangeStatus_timer_5+0x20 ;; status_5 \ 00000330 000090E5 LDR R0,[R0, #+0] \ 00000334 000050E3 CMP R0,#+0 \ 00000338 2A00000A BEQ ??AutoChangeStatus_timer_66 \ 0000033C E4109FE5 LDR R1,??AutoChangeStatus_timer_5+0x24 ;; tm_status_5 \ 00000340 0020DDE5 LDRB R2,[SP, #+0] \ 00000344 0030D1E5 LDRB R3,[R1, #+0] \ 00000348 030052E1 CMP R2,R3 \ 0000034C 2500001A BNE ??AutoChangeStatus_timer_66 \ 00000350 0120DDE5 LDRB R2,[SP, #+1] \ 00000354 0110D1E5 LDRB R1,[R1, #+1] \ 00000358 010052E1 CMP R2,R1 \ 0000035C 2100001A BNE ??AutoChangeStatus_timer_66 538 { 539 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 A05384E5 STR R5,[R4, #+928] 540 set_my_status(); \ 000003E4 ........ BL set_my_status 541 } 542 543 GBS_StartTimerProc(&autoChangeStatus, 216*30, AutoChangeStatus_timer); \ ??AutoChangeStatus_timer_66: \ 000003E8 3C209FE5 LDR R2,??AutoChangeStatus_timer_5+0x28 ;; AutoChangeStatus_timer \ 000003EC 5010A0E3 MOV R1,#+80 \ 000003F0 641D81E3 ORR R1,R1,#0x1900 \ 000003F4 B10F81E2 ADD R0,R1,#+708 \ 000003F8 040080E0 ADD R0,R0,R4 \ 000003FC 4D0000EF SWI +77 544 } \ 00000400 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??AutoChangeStatus_timer_5: \ 00000404 ........ DC32 status_1 \ 00000408 ........ DC32 tm_status_1 \ 0000040C ........ DC32 status_2 \ 00000410 ........ DC32 tm_status_2 \ 00000414 ........ DC32 status_3 \ 00000418 ........ DC32 tm_status_3 \ 0000041C ........ DC32 status_4 \ 00000420 ........ DC32 tm_status_4 \ 00000424 ........ DC32 status_5 \ 00000428 ........ DC32 tm_status_5 \ 0000042C ........ DC32 AutoChangeStatus_timer 545 #endif 546 //=================================away_msg=============== 547 //////////////////////////////////////////tozhe dlja auto ping/////////////// 548 \ In segment CODE, align 4, keep-with-next 549 void DrawPing(void *canv) 550 { 551 PrintField(Ping_X,Ping_Y, PINGO, align, fonto, spaco1); \ DrawPing: \ 00000000 ........ LDR R1,??DataTable22 ;; spaco1 \ 00000004 ........ LDR R0,??DataTable30 ;; i_rc \ 00000008 00402DE9 PUSH {LR} \ 0000000C 001091E5 LDR R1,[R1, #+0] \ 00000010 02002DE9 PUSH {R1} \ 00000014 ........ LDR R1,??DataTable23 ;; fonto \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 02002DE9 PUSH {R1} \ 00000020 AC3290E5 LDR R3,[R0, #+684] \ 00000024 9C10A0E3 MOV R1,#+156 \ 00000028 641D81E3 ORR R1,R1,#0x1900 \ 0000002C 002081E0 ADD R2,R1,R0 \ 00000030 10009FE5 LDR R0,??DrawPing_0 ;; Ping_Y \ 00000034 001090E5 LDR R1,[R0, #+0] \ 00000038 0C009FE5 LDR R0,??DrawPing_0+0x4 ;; Ping_X \ 0000003C 000090E5 LDR R0,[R0, #+0] \ 00000040 ........ _BLF PrintField,??PrintField??rA 552 } \ 00000044 0380BDE8 POP {R0,R1,PC} ;; return \ ??DrawPing_0: \ 00000048 ........ DC32 Ping_Y \ 0000004C ........ DC32 Ping_X 553 554 //////////////////////////////////////////tozhe dlja auto ping/////////////// 555 556 GBSTMR remind_tmr; 557 volatile int vibra_count; 558 #ifdef ELKA 559 void SLI_Off(void); 560 #endif 561 void start_vibra2(void); 562 563 //////////////////////////reminder timer///////////////////////// 564 \ In segment CODE, align 4, keep-with-next 565 void Remind_Timer2() 566 { \ Remind_Timer2: \ 00000000 10402DE9 PUSH {R4,LR} 567 if (total_unread) \ 00000004 ........ LDR R4,??DataTable30 ;; i_rc \ 00000008 AC0494E5 LDR R0,[R4, #+1196] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} 568 { 569 vibra_count=Vibra_cc; \ 00000014 24009FE5 LDR R0,??Remind_Timer2_0 ;; Vibra_cc \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 780484E5 STR R0,[R4, #+1144] 570 start_vibra2(); \ 00000020 ........ BL start_vibra2 571 GBS_StartTimerProc(&remind_tmr, 216*30, Remind_Timer2); \ 00000024 ........ LDR R2,??DataTable13 ;; Remind_Timer2 \ 00000028 5010A0E3 MOV R1,#+80 \ 0000002C 641D81E3 ORR R1,R1,#0x1900 \ 00000030 B50F81E2 ADD R0,R1,#+724 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 4D0000EF SWI +77 572 } 573 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return \ ??Remind_Timer2_0: \ 00000040 ........ DC32 Vibra_cc 574 \ In segment CODE, align 4, keep-with-next 575 void Reminder_timer() 576 { 577 GBS_StartTimerProc(&remind_tmr, 216*30, Remind_Timer2); \ Reminder_timer: \ 00000000 ........ LDR R2,??DataTable13 ;; Remind_Timer2 \ 00000004 10009FE5 LDR R0,??Reminder_timer_0 ;; i_rc + 7204 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 5010A0E3 MOV R1,#+80 \ 00000010 641D81E3 ORR R1,R1,#0x1900 \ 00000014 4D0000EF SWI +77 578 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??Reminder_timer_0: \ 0000001C ........ DC32 i_rc + 7204 579 //////////////////////////reminder timer///////////////////////// 580 581 //////////////////////////uptime////////////////////////// 582 //int Is_UPTIME_On; 583 int uptimeHour; 584 int uptimeMin; 585 int uptimeSec; 586 \ In segment CODE, align 4, keep-with-next 587 void UptimeMinHour() 588 { 589 uptimeSec++; \ UptimeMinHour: \ 00000000 ........ LDR R0,??DataTable30 ;; i_rc \ 00000004 C81390E5 LDR R1,[R0, #+968] 590 if(uptimeSec==60) \ 00000008 C42390E5 LDR R2,[R0, #+964] \ 0000000C 011081E2 ADD R1,R1,#+1 \ 00000010 3C0051E3 CMP R1,#+60 591 { 592 uptimeSec=0; \ 00000014 0010A003 MOVEQ R1,#+0 593 uptimeMin++; \ 00000018 01208202 ADDEQ R2,R2,#+1 \ 0000001C C81380E5 STR R1,[R0, #+968] 594 } 595 if(uptimeMin==60) \ 00000020 3C0052E3 CMP R2,#+60 \ 00000024 0300001A BNE ??UptimeMinHour_0 596 { 597 uptimeMin=0; 598 uptimeHour++; \ 00000028 C01390E5 LDR R1,[R0, #+960] \ 0000002C 0020A0E3 MOV R2,#+0 \ 00000030 011081E2 ADD R1,R1,#+1 \ 00000034 C01380E5 STR R1,[R0, #+960] \ ??UptimeMinHour_0: \ 00000038 C42380E5 STR R2,[R0, #+964] 599 } 600 } \ 0000003C 1EFF2FE1 BX LR ;; return 601 602 GBSTMR uptime_tmr; 603 #ifdef NEWSGOLD 604 GBSTMR tracktmr; 605 int tracktimer; 606 #endif 607 \ In segment CODE, align 4, keep-with-next 608 void upTime() 609 { \ upTime: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 610 if(connect_state==3) \ 00000004 ........ LDR R4,??DataTable30 ;; i_rc \ 00000008 84609FE5 LDR R6,??upTime_0 ;; upTime \ 0000000C 3400A0E3 MOV R0,#+52 \ 00000010 700D80E3 ORR R0,R0,#0x1C00 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 900494E5 LDR R0,[R4, #+1168] \ 0000001C 0070A0E3 MOV R7,#+0 \ 00000020 030050E3 CMP R0,#+3 \ 00000024 0F00001A BNE ??upTime_1 611 { 612 UptimeMinHour(); \ 00000028 ........ BL UptimeMinHour 613 #ifdef NEWSGOLD 614 if (tracktimer>=10)/*&&(_GetPlayStatus()!=1))*/ \ 0000002C CC0394E5 LDR R0,[R4, #+972] \ 00000030 0A0050E3 CMP R0,#+10 \ 00000034 070000BA BLT ??upTime_2 615 { 616 GBS_StartTimerProc(&tracktmr, 216*5, GetTags); \ 00000038 ........ LDR R2,??DataTable16 ;; GetTags \ 0000003C 3810A0E3 MOV R1,#+56 \ 00000040 401E81E3 ORR R1,R1,#0x400 \ 00000044 4400A0E3 MOV R0,#+68 \ 00000048 700D80E3 ORR R0,R0,#0x1C00 \ 0000004C 040080E0 ADD R0,R0,R4 \ 00000050 4D0000EF SWI +77 617 tracktimer=0; \ 00000054 CC7384E5 STR R7,[R4, #+972] 618 } 619 tracktimer++; \ ??upTime_2: \ 00000058 CC0394E5 LDR R0,[R4, #+972] \ 0000005C 010080E2 ADD R0,R0,#+1 \ 00000060 CC0384E5 STR R0,[R4, #+972] 620 #endif 621 GBS_StartTimerProc(&uptime_tmr, 216, upTime); \ 00000064 050000EA B ??upTime_3 622 } 623 else 624 { 625 if(!Pause_Time) \ ??upTime_1: \ 00000068 28009FE5 LDR R0,??upTime_0+0x4 ;; Pause_Time \ 0000006C 000090E5 LDR R0,[R0, #+0] \ 00000070 000050E3 CMP R0,#+0 626 { 627 uptimeHour=0; \ 00000074 C0738405 STREQ R7,[R4, #+960] 628 uptimeMin=0; \ 00000078 C4738405 STREQ R7,[R4, #+964] 629 uptimeSec=0; \ 0000007C C8738405 STREQ R7,[R4, #+968] 630 } 631 GBS_StartTimerProc(&uptime_tmr, 216, upTime); \ ??upTime_3: \ 00000080 0620A0E1 MOV R2,R6 \ 00000084 D810A0E3 MOV R1,#+216 \ 00000088 0500A0E1 MOV R0,R5 \ 0000008C 4D0000EF SWI +77 632 } 633 } \ 00000090 F080BDE8 POP {R4-R7,PC} ;; return \ ??upTime_0: \ 00000094 ........ DC32 upTime \ 00000098 ........ DC32 Pause_Time 634 635 char onlineTime[128]; \ In segment CODE, align 4, keep-with-next 636 void DrawOnlineTime(void *canv) 637 { 638 if(connect_state==3) \ DrawOnlineTime: \ 00000000 80109FE5 LDR R1,??DrawOnlineTime_0 ;; `?` \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 ........ LDR R4,??DataTable30 ;; i_rc \ 0000000C 5400A0E3 MOV R0,#+84 \ 00000010 700D80E3 ORR R0,R0,#0x1C00 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 900494E5 LDR R0,[R4, #+1168] \ 0000001C 030050E3 CMP R0,#+3 \ 00000020 0700001A BNE ??DrawOnlineTime_1 639 { 640 sprintf(onlineTime,"Online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); \ 00000024 C80394E5 LDR R0,[R4, #+968] \ 00000028 01002DE9 PUSH {R0} \ 0000002C C43394E5 LDR R3,[R4, #+964] \ 00000030 C02394E5 LDR R2,[R4, #+960] \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 160000EF SWI +22 \ 0000003C 04D08DE2 ADD SP,SP,#+4 \ 00000040 020000EA B ??DrawOnlineTime_2 641 } 642 else 643 sprintf(onlineTime,"Offline"); \ ??DrawOnlineTime_1: \ 00000044 181081E2 ADD R1,R1,#+24 \ 00000048 0500A0E1 MOV R0,R5 \ 0000004C 160000EF SWI +22 644 PrintField(onlineTime_x,onlineTime_y, onlineTime, align, fonto, spaco1); \ ??DrawOnlineTime_2: \ 00000050 ........ LDR R0,??DataTable22 ;; spaco1 \ 00000054 0520A0E1 MOV R2,R5 \ 00000058 000090E5 LDR R0,[R0, #+0] \ 0000005C 01002DE9 PUSH {R0} \ 00000060 ........ LDR R0,??DataTable23 ;; fonto \ 00000064 000090E5 LDR R0,[R0, #+0] \ 00000068 01002DE9 PUSH {R0} \ 0000006C AC3294E5 LDR R3,[R4, #+684] \ 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 645 } \ 00000084 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??DrawOnlineTime_0: \ 00000088 ........ DC32 `?` \ 0000008C ........ DC32 onlineTime_y \ 00000090 ........ DC32 onlineTime_x 646 647 648 //---------------------- Вывод времени на идле ---------------------// 649 650 \ In segment CODE, align 4, keep-with-next 651 void DrawAutoMSG(void *canv) 652 { \ DrawAutoMSG: \ 00000000 10402DE9 PUSH {R4,LR} 653 char awayTime[64]; 654 if(away_m && showAwayIdle) \ 00000004 ........ LDR R4,??DataTable30 ;; i_rc \ 00000008 40D04DE2 SUB SP,SP,#+64 \ 0000000C B00394E5 LDR R0,[R4, #+944] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 1700000A BEQ ??DrawAutoMSG_0 \ 00000018 ........ LDR R0,??DataTable21 ;; showAwayIdle \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 1300000A BEQ ??DrawAutoMSG_0 655 { 656 sprintf(awayTime,"Away from [%s]",away_msg_time_dace); \ 00000028 50109FE5 LDR R1,??DrawAutoMSG_1 ;; `?` \ 0000002C E400A0E3 MOV R0,#+228 \ 00000030 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000034 042080E0 ADD R2,R0,R4 \ 00000038 0D00A0E1 MOV R0,SP \ 0000003C 160000EF SWI +22 657 PrintField(auto_x,auto_y, awayTime, align, fonto, spaco1); \ 00000040 ........ LDR R0,??DataTable22 ;; spaco1 \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 01002DE9 PUSH {R0} \ 0000004C ........ LDR R0,??DataTable23 ;; fonto \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 01002DE9 PUSH {R0} \ 00000058 AC3294E5 LDR R3,[R4, #+684] \ 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 658 } 659 } \ ??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 660 661 662 //---------------------------- Input away msg ---------------------------// 663 664 //Вводим сообщение какое хотим,а не то что прописали в конфиге 665 int input_awaymsg_id; 666 667 const HEADER_DESC input_awaymsg_hdr={0,0,131,21,NULL,(int)"Ввод автосообщения",LGP_NULL}; 668 //void UpdateCLheader(void); \ In segment CODE, align 4, keep-with-next 669 int input_awaymsg_onkey(GUI *data, GUI_MSG *msg) 670 { \ input_awaymsg_onkey: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 671 WSHDR *ws; 672 if (msg->keys==0x0FFF || msg->keys==VOL_DOWN_BUTTON) \ 00000008 ........ LDR R4,??DataTable30 ;; i_rc \ 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 673 { 674 EDITCONTROL ec; 675 ExtractEditControl(data,2,&ec); 676 ws=ec.pWS; 677 zeromem(awayMsg,256); \ 0000002C ........ LDR R8,??DataTable27 ;; 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 678 int i=0; 679 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 680 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 681 awayMsg[i]=0; 682 683 #ifdef kluchnik2 684 char *s; 685 ExtractEditControl(data,4,&ec); 686 ws=ec.pWS; 687 s=malloc(ws->wsbody[0]); 688 *s=0; 689 for(i=0;iwsbody[0];i++) 690 *(s+i)=char16to8(ws->wsbody[i+1]); 691 *(s+i)=0; 692 strcat(awayMsg,s); 693 mfree(s); 694 #endif 695 msg_away_timer=(AUTO_ENGADE*12); \ ??input_awaymsg_onkey_2: \ 00000088 ........ LDR R0,??DataTable26 ;; 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 AC0384E5 STR R0,[R4, #+940] 696 away_m=1; \ 000000A0 0100A0E3 MOV R0,#+1 \ 000000A4 B00384E5 STR R0,[R4, #+944] 697 away_timer(); \ 000000A8 ........ BL away_timer 698 // UpdateCLheader(); 699 GeneralFunc_flag1(input_awaymsg_id,1); \ 000000AC D00394E5 LDR R0,[R4, #+976] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 3D0100EF SWI +317 700 // GeneralFuncF1(1); 701 } 702 703 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 704 { 705 msg_away_timer=0; 706 away_m=0; 707 if(change_back_status) \ 000000C8 B80394E5 LDR R0,[R4, #+952] \ 000000CC AC5384E5 STR R5,[R4, #+940] \ 000000D0 B05384E5 STR R5,[R4, #+944] \ 000000D4 000050E3 CMP R0,#+0 \ 000000D8 0400000A BEQ ??input_awaymsg_onkey_5 708 { 709 CurrentStatus=status_rem; \ 000000DC B40394E5 LDR R0,[R4, #+948] \ 000000E0 A00384E5 STR R0,[R4, #+928] 710 set_my_status(); \ 000000E4 ........ BL set_my_status 711 change_back_status=0; \ 000000E8 B85384E5 STR R5,[R4, #+952] 712 } 713 // UpdateCLheader(); 714 } 715 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 716 } 717 \ In segment CODE, align 4, keep-with-next 718 void input_awaymsg_ghook(GUI *gui, int cmd) 719 { \ input_awaymsg_ghook: \ 00000000 00402DE9 PUSH {LR} 720 static SOFTKEY_DESC sk={0x0FFF,0x0000,(int)"Сохранить"}; 721 if (cmd==7) \ 00000004 070051E3 CMP R1,#+7 \ 00000008 0300001A BNE ??input_awaymsg_ghook_0 722 { 723 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} 724 } 725 if(cmd==0xA) \ ??input_awaymsg_ghook_0: \ 0000001C 0A0051E3 CMP R1,#+10 \ 00000020 0100001A BNE ??input_awaymsg_ghook_2 726 { 727 DisableIDLETMR(); // Отключаем таймер выхода по таймауту \ 00000024 7F0100EF SWI +383 \ 00000028 0080BDE8 POP {PC} 728 } 729 if (cmd==0x0C) \ ??input_awaymsg_ghook_2: \ 0000002C 0C0051E3 CMP R1,#+12 \ 00000030 0080BD18 POPNE {PC} 730 { 731 EDIT_SetCursorPos(gui,1); \ 00000034 0110A0E3 MOV R1,#+1 \ 00000038 D40100EF SWI +468 732 } 733 if(cmd==0x03){} 734 } \ 0000003C 0080BDE8 POP {PC} ;; return \ ??input_awaymsg_ghook_1: \ 00000040 ........ DC32 ??sk 735 \ In segment CODE, align 4, keep-with-next 736 void input_awaymsg_locret(void){} \ input_awaymsg_locret: \ 00000000 1EFF2FE1 BX LR ;; return 737 738 SOFTKEY_DESC input_awaymsg_sk[]= 739 { 740 {0x0018,0x0000,(int)"Лев"}, 741 {0x0001,0x0000,(int)"Прав"}, 742 {0x003D,0x0000,(int)LGP_DOIT_PIC} 743 }; 744 745 SOFTKEYSTAB input_awaymsg_skt= 746 { 747 input_awaymsg_sk,0 748 }; 749 750 const INPUTDIA_DESC input_awaymsg_desc= 751 { 752 1, 753 input_awaymsg_onkey, 754 input_awaymsg_ghook, 755 (void *)input_awaymsg_locret, 756 0, 757 &input_awaymsg_skt, 758 {0,NULL,NULL,NULL}, 759 FONT_SMALL, 760 100, 761 101, 762 0, 763 0x00000000, 764 0x40000000 765 }; 766 \ In segment CODE, align 4, keep-with-next 767 void InputAwayMsg() 768 { \ InputAwayMsg: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 769 WSHDR *wss=AllocWS(256); 770 void *ma=malloc_adr(); 771 void *eq=AllocEQueue(ma, mfree_adr()); 772 EDITCONTROL ec; 773 PrepareEditControl(&ec); 774 wsprintf(wss,"%t","Сообщение:\n"); \ 00000004 44519FE5 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 4C2085E2 ADD R2,R5,#+76 \ 00000040 411F8FE2 ADR R1,??InputAwayMsg_0 ;; "%t" \ 00000044 0600A0E1 MOV R0,R6 \ 00000048 240100EF SWI +292 775 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 776 AddEditControlToEditQend(eq,&ec,ma); \ 00000068 0720A0E1 MOV R2,R7 \ 0000006C 04108DE2 ADD R1,SP,#+4 \ 00000070 0400A0E1 MOV R0,R4 \ 00000074 660100EF SWI +358 777 778 PrepareEditControl(&ec); \ 00000078 04008DE2 ADD R0,SP,#+4 \ 0000007C 640100EF SWI +356 779 CutWSTR(wss,0); \ 00000080 0010A0E3 MOV R1,#+0 \ 00000084 0600A0E1 MOV R0,R6 \ 00000088 260100EF SWI +294 780 ascii2ws(wss,awayMsg); \ 0000008C ........ LDR R1,??DataTable27 ;; awayMsg \ 00000090 0600A0E1 MOV R0,R6 \ 00000094 ........ _BLF ascii2ws,??ascii2ws??rA 781 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 782 AddEditControlToEditQend(eq,&ec,ma); \ 000000B4 0720A0E1 MOV R2,R7 \ 000000B8 08108DE2 ADD R1,SP,#+8 \ 000000BC 0400A0E1 MOV R0,R4 \ 000000C0 660100EF SWI +358 783 #ifdef kluchnik2 784 PrepareEditControl(&ec); 785 wsprintf(wss,"%t","Сообщение 2:\n"); 786 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); 787 AddEditControlToEditQend(eq,&ec,ma); 788 789 ascii2ws(wss,"когда смогу отвечу:)"); 790 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); 791 AddEditControlToEditQend(eq,&ec,ma); 792 #endif 793 patch_header(&input_awaymsg_hdr); \ 000000C4 0060A0E3 MOV R6,#+0 \ 000000C8 B863C5E1 STRH R6,[R5, #+56] \ 000000CC 1800A0E3 MOV R0,#+24 \ 000000D0 BA03C5E1 STRH R0,[R5, #+58] \ 000000D4 888100EF SWI +33160 \ 000000D8 010040E2 SUB R0,R0,#+1 \ 000000DC BC03C5E1 STRH R0,[R5, #+60] \ 000000E0 8A8100EF SWI +33162 \ 000000E4 170080E2 ADD R0,R0,#+23 \ 000000E8 BE03C5E1 STRH R0,[R5, #+62] 794 patch_input(&input_awaymsg_desc); \ 000000EC B861C5E1 STRH R6,[R5, #+24] \ 000000F0 8A8100EF SWI +33162 \ 000000F4 190080E2 ADD R0,R0,#+25 \ 000000F8 BA01C5E1 STRH R0,[R5, #+26] \ 000000FC 888100EF SWI +33160 \ 00000100 010040E2 SUB R0,R0,#+1 \ 00000104 BC01C5E1 STRH R0,[R5, #+28] \ 00000108 898100EF SWI +33161 \ 0000010C 0060A0E1 MOV R6,R0 \ 00000110 8B8100EF SWI +33163 \ 00000114 000046E0 SUB R0,R6,R0 \ 00000118 010040E2 SUB R0,R0,#+1 \ 0000011C BE01C5E1 STRH R0,[R5, #+30] 795 796 input_awaymsg_id=CreateInputTextDialog(&input_awaymsg_desc,&input_awaymsg_hdr,eq,1,0);//создаем диалоговое окно \ 00000120 0000A0E3 MOV R0,#+0 \ 00000124 01002DE9 PUSH {R0} \ 00000128 0130A0E3 MOV R3,#+1 \ 0000012C 0420A0E1 MOV R2,R4 \ 00000130 381085E2 ADD R1,R5,#+56 \ 00000134 0500A0E1 MOV R0,R5 \ 00000138 670100EF SWI +359 \ 0000013C 10109FE5 LDR R1,??InputAwayMsg_0+0x8 ;; i_rc + 976 \ 00000140 000081E5 STR R0,[R1, #+0] 797 } \ 00000144 38D08DE2 ADD SP,SP,#+56 \ 00000148 F080BDE8 POP {R4-R7,PC} ;; return \ ??InputAwayMsg_0: \ 0000014C 25740000 DC8 "%t",+0 \ 00000150 ........ DC32 input_awaymsg_desc \ 00000154 ........ DC32 i_rc + 976 798 799 800 //////////////////////////uptime////////////////////////// 801 #ifdef ELKA 802 GBSTMR sli_tmr; \ In segment CODE, align 4, keep-with-next 803 void SLI_On() 804 { \ SLI_On: \ 00000000 10402DE9 PUSH {R4,LR} 805 if(Is_SLI_On) \ 00000004 ........ LDR R4,??DataTable30 ;; i_rc \ 00000008 E80294E5 LDR R0,[R4, #+744] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0100000A BEQ ??SLI_On_0 806 SLI_SetState(1); \ 00000014 0100A0E3 MOV R0,#+1 \ 00000018 360000EF SWI +54 807 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 D400A0E3 MOV R0,#+212 \ 00000028 700D80E3 ORR R0,R0,#0x1C00 \ 0000002C 040080E0 ADD R0,R0,R4 \ 00000030 4D0000EF SWI +77 808 } \ 00000034 1080BDE8 POP {R4,PC} ;; return \ ??SLI_On_1: \ 00000038 ........ DC32 SLI_Off 809 \ In segment CODE, align 4, keep-with-next 810 void SLI_Off() 811 { \ SLI_Off: \ 00000000 00402DE9 PUSH {LR} 812 SLI_SetState(2); \ 00000004 0200A0E3 MOV R0,#+2 \ 00000008 360000EF SWI +54 813 if(total_unread) \ 0000000C ........ LDR R0,??DataTable30 ;; i_rc \ 00000010 AC1490E5 LDR R1,[R0, #+1196] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0600000A BEQ ??SLI_Off_0 814 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 D430A0E3 MOV R3,#+212 \ 00000028 703D83E3 ORR R3,R3,#0x1C00 \ 0000002C 000083E0 ADD R0,R3,R0 \ 00000030 4D0000EF SWI +77 \ 00000034 0080BDE8 POP {PC} 815 else 816 SLI_SetState(0); \ ??SLI_Off_0: \ 00000038 0000A0E3 MOV R0,#+0 \ 0000003C 360000EF SWI +54 817 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??SLI_Off_1: \ 00000044 ........ DC32 SLI_On 818 \ In segment CODE, align 4, keep-with-next 819 void SLI_check() 820 { 821 if (total_unread) \ SLI_check: \ 00000000 14009FE5 LDR R0,??SLI_check_0 ;; i_rc + 1196 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0080BD08 POPEQ {PC} 822 SLI_On(); \ 00000014 ........ BL SLI_On 823 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??SLI_check_0: \ 0000001C ........ DC32 i_rc + 1196 824 \ In segment CODE, align 4, keep-with-next 825 void SLI_Timer() 826 { 827 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 ;; i_rc + 7380 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 0610A0E3 MOV R1,#+6 \ 00000010 401F81E3 ORR R1,R1,#0x100 \ 00000014 4D0000EF SWI +77 828 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??SLI_Timer_0: \ 0000001C ........ DC32 SLI_check \ 00000020 ........ DC32 i_rc + 7380 829 #endif 830 \ In segment CODE, align 4, keep-with-next 831 void setup_ICONS(void) 832 { \ setup_ICONS: \ 00000000 30402DE9 PUSH {R4,R5,LR} 833 int i=0; \ 00000004 0040A0E3 MOV R4,#+0 834 do 835 { 836 if (!S_ICONS[i]) S_ICONS[i]=(int)MakeGlobalString(ICON_PATH,'\\',icons_names[i]); \ ??setup_ICONS_0: \ 00000008 ........ LDR R0,??DataTable30 ;; i_rc \ 0000000C 045180E0 ADD R5,R0,R4, LSL #+2 \ 00000010 180395E5 LDR R0,[R5, #+792] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0500001A BNE ??setup_ICONS_1 \ 0000001C ........ LDR R0,??DataTable33 ;; 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 180385E5 STR R0,[R5, #+792] 837 i++; \ ??setup_ICONS_1: \ 00000034 014084E2 ADD R4,R4,#+1 838 } 839 while(i` \ 0000000C 58709FE5 LDR R7,??XStatusToIMGHDR_0+0x4 ;; XSTATUSES_PATH \ 00000010 400FA0E3 MOV R0,#+256 \ 00000014 140000EF SWI +20 \ 00000018 0050A0E1 MOV R5,R0 858 do 859 { 860 sprintf(s,"%s\\%d.png",XSTATUSES_PATH,i); \ ??XStatusToIMGHDR_1: \ 0000001C 0430A0E1 MOV R3,R4 \ 00000020 0720A0E1 MOV R2,R7 \ 00000024 0610A0E1 MOV R1,R6 \ 00000028 0500A0E1 MOV R0,R5 \ 0000002C 160000EF SWI +22 861 if(get_file_size(s)!=0) \ 00000030 0500A0E1 MOV R0,R5 \ 00000034 ........ BL get_file_size \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 0500000A BEQ ??XStatusToIMGHDR_2 862 XStatusImg[i]=CreateIMGHDRFromPngFile(s,2); \ 00000040 0210A0E3 MOV R1,#+2 \ 00000044 0500A0E1 MOV R0,R5 \ 00000048 E90100EF SWI +489 \ 0000004C ........ LDR R1,??DataTable61 ;; i_rc \ 00000050 041181E0 ADD R1,R1,R4, LSL #+2 \ 00000054 D40381E5 STR R0,[R1, #+980] 863 864 i++; \ ??XStatusToIMGHDR_2: \ 00000058 014084E2 ADD R4,R4,#+1 865 } 866 while(i<35); \ 0000005C 230054E3 CMP R4,#+35 \ 00000060 EDFFFFBA BLT ??XStatusToIMGHDR_1 867 } \ 00000064 F080BDE8 POP {R4-R7,PC} ;; return \ ??XStatusToIMGHDR_0: \ 00000068 ........ DC32 `?` \ 0000006C ........ DC32 XSTATUSES_PATH 868 869 \ In segment CODE, align 4, keep-with-next 870 void StatusToIMGHDR() 871 { \ StatusToIMGHDR: \ 00000000 70402DE9 PUSH {R4-R6,LR} 872 int i=0; \ 00000004 38509FE5 LDR R5,??StatusToIMGHDR_0 ;; ICON_PATH2 \ 00000008 ........ LDR R6,??DataTable33 ;; icons_names \ 0000000C 0040A0E3 MOV R4,#+0 873 do 874 { 875 #ifdef ELKA 876 icons[i]=CreateIMGHDRFromPngFile( MakeGlobalString(ICON_PATH2,'\\',icons_names[i]),2); \ ??StatusToIMGHDR_1: \ 00000010 5C10A0E3 MOV R1,#+92 \ 00000014 042196E7 LDR R2,[R6, +R4, LSL #+2] \ 00000018 0500A0E1 MOV R0,R5 \ 0000001C ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 00000020 0210A0E3 MOV R1,#+2 \ 00000024 E90100EF SWI +489 \ 00000028 ........ LDR R1,??DataTable61 ;; i_rc \ 0000002C 041181E0 ADD R1,R1,R4, LSL #+2 \ 00000030 200081E5 STR R0,[R1, #+32] 877 #else 878 icons[i]=CreateIMGHDRFromPngFile( MakeGlobalString(ICON_PATH,'\\',icons_names[i]),2); 879 #endif 880 i++; \ 00000034 014084E2 ADD R4,R4,#+1 881 } 882 while(ibitmap); \ ??FreeStatusToIMGHDR_0: \ 0000000C 040185E0 ADD R0,R5,R4, LSL #+2 \ 00000010 200090E5 LDR R0,[R0, #+32] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0100000A BEQ ??FreeStatusToIMGHDR_1 \ 0000001C 080090E5 LDR R0,[R0, #+8] \ 00000020 150000EF SWI +21 895 i++; \ ??FreeStatusToIMGHDR_1: \ 00000024 014084E2 ADD R4,R4,#+1 896 } 897 while(ibitmap) mfree(XStatusImg[i]->bitmap); \ 00000048 0100A0E1 MOV R0,R1 \ 0000004C 150000EF SWI +21 903 i++; \ ??FreeStatusToIMGHDR_3: \ 00000050 014084E2 ADD R4,R4,#+1 904 } 905 while(i<35); \ 00000054 230054E3 CMP R4,#+35 \ 00000058 F5FFFFBA BLT ??FreeStatusToIMGHDR_2 906 } \ 0000005C 3080BDE8 POP {R4,R5,PC} ;; return 907 \ In segment CODE, align 4, keep-with-next 908 void free_ICONS(void) 909 { \ free_ICONS: \ 00000000 70402DE9 PUSH {R4-R6,LR} 910 int i=0; \ 00000004 0040A0E3 MOV R4,#+0 \ 00000008 0050A0E3 MOV R5,#+0 911 do 912 { 913 mfree((void*)S_ICONS[i]); \ ??free_ICONS_0: \ 0000000C ........ LDR R0,??DataTable61 ;; i_rc \ 00000010 046180E0 ADD R6,R0,R4, LSL #+2 \ 00000014 180396E5 LDR R0,[R6, #+792] 914 S_ICONS[i]=0; 915 i++; \ 00000018 014084E2 ADD R4,R4,#+1 \ 0000001C 150000EF SWI +21 \ 00000020 185386E5 STR R5,[R6, #+792] 916 } 917 while(i>2,stop_vibra); \ 0000004C 3610A0E3 MOV R1,#+54 \ 00000050 000000EA B ??start_vibra_2 1188 else 1189 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra); \ ??start_vibra_1: \ 00000054 6C10A0E3 MOV R1,#+108 \ ??start_vibra_2: \ 00000058 4D0000EF SWI +77 1190 } 1191 } \ 0000005C 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra_0: \ 00000060 ........ DC32 stop_vibra 1192 \ In segment CODE, align 4, keep-with-next 1193 void stop_vibra(void) 1194 { \ stop_vibra: \ 00000000 00402DE9 PUSH {LR} 1195 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1196 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable61 ;; i_rc \ 00000010 781490E5 LDR R1,[R0, #+1144] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 781480E5 STR R1,[R0, #+1144] \ 0000001C 0080BD08 POPEQ {PC} 1197 { 1198 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra_0 ;; start_vibra \ 00000024 F410A0E3 MOV R1,#+244 \ 00000028 781D81E3 ORR R1,R1,#0x1E00 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable53 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra_1 1199 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra_2 1200 else 1201 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra); \ ??stop_vibra_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra_2: \ 0000004C 4D0000EF SWI +77 1202 } 1203 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra_0: \ 00000054 ........ DC32 start_vibra 1204 \ In segment CODE, align 4, keep-with-next 1205 void start_vibra2(void) 1206 { 1207 void stop_vibra2(void); 1208 1209 SetVibration(vibraPower); \ start_vibra2: \ 00000000 ........ LDR R0,??DataTable50 ;; vibraPower \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 7C0000EF SWI +124 1210 if(VIBR_TYPE) \ 00000010 ........ LDR R1,??DataTable53 ;; VIBR_TYPE \ 00000014 18009FE5 LDR R0,??start_vibra2_0 ;; i_rc + 7924 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 14209FE5 LDR R2,??start_vibra2_0+0x4 ;; stop_vibra2 \ 00000020 000051E3 CMP R1,#+0 1211 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>2,stop_vibra2); \ 00000024 3610A013 MOVNE R1,#+54 1212 else 1213 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra2); \ 00000028 6C10A003 MOVEQ R1,#+108 \ 0000002C 4D0000EF SWI +77 1214 } \ 00000030 0080BDE8 POP {PC} ;; return \ ??start_vibra2_0: \ 00000034 ........ DC32 i_rc + 7924 \ 00000038 ........ DC32 stop_vibra2 1215 \ In segment CODE, align 4, keep-with-next 1216 void stop_vibra2(void) 1217 { \ stop_vibra2: \ 00000000 00402DE9 PUSH {LR} 1218 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1219 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable61 ;; i_rc \ 00000010 781490E5 LDR R1,[R0, #+1144] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 781480E5 STR R1,[R0, #+1144] \ 0000001C 0080BD08 POPEQ {PC} 1220 { 1221 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra2_0 ;; start_vibra2 \ 00000024 F410A0E3 MOV R1,#+244 \ 00000028 781D81E3 ORR R1,R1,#0x1E00 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable53 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra2_1 1222 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra2); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra2_2 1223 else 1224 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra2); \ ??stop_vibra2_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra2_2: \ 0000004C 4D0000EF SWI +77 1225 } 1226 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra2_0: \ 00000054 ........ DC32 start_vibra2 1227 \ In segment CODE, align 4, keep-with-next 1228 void ChangeVibra(void) 1229 { 1230 if (!(Is_Vibra_Enabled=!(Is_Vibra_Enabled))) \ ChangeVibra: \ 00000000 ........ LDR R0,??DataTable61 ;; i_rc \ 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 1272 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 1273 if ((fsize=stat.size)<=0) goto L1; \ 00000060 08709DE5 LDR R7,[SP, #+8] \ 00000064 010057E3 CMP R7,#+1 \ 00000068 070000BA BLT ??LoadTemplates_1 1274 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 1275 { 1276 L1: 1277 strcpy(fn+i,"\\0.txt"); \ ??LoadTemplates_1: \ 0000008C 081086E2 ADD R1,R6,#+8 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 1A0000EF SWI +26 1278 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 1279 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 1280 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 1281 } 1282 if (f==-1) return 0; \ ??LoadTemplates_2: \ 000000E0 040058E1 CMP R8,R4 \ 000000E4 F1FFFF0A BEQ ??LoadTemplates_4 1283 p=templates_chars=malloc(fsize+1); \ 000000E8 ........ LDR R4,??DataTable61 ;; i_rc \ 000000EC 010087E2 ADD R0,R7,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 7C0484E5 STR R0,[R4, #+1148] \ 000000F8 0060A0E1 MOV R6,R0 1284 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] 1285 fclose(f,&ul); \ 00000118 0D10A0E1 MOV R1,SP \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 0D0000EF SWI +13 1286 i=0; \ 00000124 0070A0E3 MOV R7,#+0 1287 pp=p; \ 00000128 0680A0E1 MOV R8,R6 \ 0000012C 020000EA B ??LoadTemplates_6 1288 for(;;) 1289 { 1290 c=*p; 1291 if (c<32) 1292 { 1293 if (pp&&(pp!=p)) 1294 { 1295 templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 1296 templates_lines[i++]=pp; 1297 } 1298 pp=NULL; 1299 if (!c) break; 1300 *p=0; 1301 } 1302 else 1303 { 1304 if (pp==NULL) pp=p; \ ??LoadTemplates_7: \ 00000130 000058E3 CMP R8,#+0 \ 00000134 0680A001 MOVEQ R8,R6 1305 } 1306 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 800494E5 LDR R0,[R4, #+1152] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 800484E5 STR R0,[R4, #+1152] \ 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 1307 } 1308 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 `?` 1309 } 1310 1311 1312 1313 //---------------------- AUTOBOT MESSAGE -------------------------// 1314 1315 1316 #ifdef kluchnik 1317 char *bot_chars; //Собственно файл 1318 char **bot_lines; //Массив указателей на строки 1319 \ In segment CODE, align 4, keep-with-next 1320 void FreeBotMessage(void) 1321 { \ FreeBotMessage: \ 00000000 10402DE9 PUSH {R4,LR} 1322 if (bot_lines) mfree(bot_lines); \ 00000004 ........ LDR R4,??DataTable61 ;; i_rc \ 00000008 880494E5 LDR R0,[R4, #+1160] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0000000A BEQ ??FreeBotMessage_0 \ 00000014 150000EF SWI +21 1323 if (bot_chars) mfree(bot_chars); \ ??FreeBotMessage_0: \ 00000018 840494E5 LDR R0,[R4, #+1156] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0100000A BEQ ??FreeBotMessage_1 \ 00000024 150000EF SWI +21 1324 bot_lines=NULL; \ 00000028 0000A0E3 MOV R0,#+0 \ ??FreeBotMessage_1: \ 0000002C 880484E5 STR R0,[R4, #+1160] 1325 bot_chars=NULL; \ 00000030 840484E5 STR R0,[R4, #+1156] 1326 } \ 00000034 1080BDE8 POP {R4,PC} ;; return 1327 \ In segment CODE, align 4, keep-with-next 1328 int LoadBotMessage(unsigned int uin) 1329 { \ LoadBotMessage: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 1330 FSTATS stat; 1331 char fn[256]; 1332 int f; 1333 unsigned int ul; 1334 int i; 1335 int fsize; 1336 char *p; 1337 char *pp; 1338 int c; 1339 FreeBotMessage(); 1340 strcpy(fn,TEMPLATES_PATH); 1341 i=strlen(fn); 1342 sprintf(fn+i,"\\bot_%d.txt",uin); \ 00000004 7C619FE5 LDR R6,??LoadBotMessage_0 ;; `?` \ 00000008 4BDF4DE2 SUB SP,SP,#+300 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ BL FreeBotMessage \ 00000014 ........ LDR R1,??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 1343 if (GetFileStats(fn,&stat,&ul)==-1) goto L1; \ 00000044 0040E0E3 MVN R4,#+0 \ 00000048 0D20A0E1 MOV R2,SP \ 0000004C 04108DE2 ADD R1,SP,#+4 \ 00000050 2C008DE2 ADD R0,SP,#+44 \ 00000054 840000EF SWI +132 \ 00000058 040050E1 CMP R0,R4 \ 0000005C 0A00000A BEQ ??LoadBotMessage_1 1344 if ((fsize=stat.size)<=0) goto L1; \ 00000060 08709DE5 LDR R7,[SP, #+8] \ 00000064 010057E3 CMP R7,#+1 \ 00000068 070000BA BLT ??LoadBotMessage_1 1345 if ((f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul))==-1) \ 0000006C 0D30A0E1 MOV R3,SP \ 00000070 8020A0E3 MOV R2,#+128 \ 00000074 801CA0E3 MOV R1,#+32768 \ 00000078 2C008DE2 ADD R0,SP,#+44 \ 0000007C 0A0000EF SWI +10 \ 00000080 0080A0E1 MOV R8,R0 \ 00000084 040058E1 CMP R8,R4 \ 00000088 1400001A BNE ??LoadBotMessage_2 1346 { 1347 L1: 1348 strcpy(fn+i,"\\bot.txt"); \ ??LoadBotMessage_1: \ 0000008C 0C1086E2 ADD R1,R6,#+12 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 1A0000EF SWI +26 1349 if (GetFileStats(fn,&stat,&ul)==-1) return 0; \ 00000098 0D20A0E1 MOV R2,SP \ 0000009C 04108DE2 ADD R1,SP,#+4 \ 000000A0 2C008DE2 ADD R0,SP,#+44 \ 000000A4 840000EF SWI +132 \ 000000A8 040050E1 CMP R0,R4 \ 000000AC 0200001A BNE ??LoadBotMessage_3 \ ??LoadBotMessage_4: \ 000000B0 0000A0E3 MOV R0,#+0 \ ??LoadBotMessage_5: \ 000000B4 4BDF8DE2 ADD SP,SP,#+300 ;; stack cleaning \ 000000B8 F087BDE8 POP {R4-R10,PC} ;; return 1350 if ((fsize=stat.size)<=0) return 0; \ ??LoadBotMessage_3: \ 000000BC 08709DE5 LDR R7,[SP, #+8] \ 000000C0 010057E3 CMP R7,#+1 \ 000000C4 F9FFFFBA BLT ??LoadBotMessage_4 1351 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 1352 } 1353 if (f==-1) return 0; \ ??LoadBotMessage_2: \ 000000E0 040058E1 CMP R8,R4 \ 000000E4 F1FFFF0A BEQ ??LoadBotMessage_4 1354 p=bot_chars=malloc(fsize+1); \ 000000E8 ........ LDR R4,??DataTable61 ;; i_rc \ 000000EC 010087E2 ADD R0,R7,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 840484E5 STR R0,[R4, #+1156] \ 000000F8 0060A0E1 MOV R6,R0 1355 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] 1356 fclose(f,&ul); \ 00000118 0D10A0E1 MOV R1,SP \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 0D0000EF SWI +13 1357 i=0; \ 00000124 0070A0E3 MOV R7,#+0 1358 pp=p; \ 00000128 0680A0E1 MOV R8,R6 \ 0000012C 020000EA B ??LoadBotMessage_6 1359 for(;;) 1360 { 1361 c=*p; 1362 if (c<32) 1363 { 1364 if (pp&&(pp!=p)) 1365 { 1366 bot_lines=realloc(bot_lines,(i+1)*sizeof(char *)); 1367 bot_lines[i++]=pp; 1368 } 1369 pp=NULL; 1370 if (!c) break; 1371 *p=0; 1372 } 1373 else 1374 { 1375 if (pp==NULL) pp=p; \ ??LoadBotMessage_7: \ 00000130 000058E3 CMP R8,#+0 \ 00000134 0680A001 MOVEQ R8,R6 1376 } 1377 p++; \ ??LoadBotMessage_8: \ 00000138 016086E2 ADD R6,R6,#+1 \ ??LoadBotMessage_6: \ 0000013C 0090D6E5 LDRB R9,[R6, #+0] \ 00000140 200059E3 CMP R9,#+32 \ 00000144 F9FFFFAA BGE ??LoadBotMessage_7 \ 00000148 000058E3 CMP R8,#+0 \ 0000014C 06005811 CMPNE R8,R6 \ 00000150 0600000A BEQ ??LoadBotMessage_9 \ 00000154 880494E5 LDR R0,[R4, #+1160] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 880484E5 STR R0,[R4, #+1160] \ 00000168 078180E7 STR R8,[R0, +R7, LSL #+2] \ 0000016C 0A70A0E1 MOV R7,R10 \ ??LoadBotMessage_9: \ 00000170 0080A0E3 MOV R8,#+0 \ 00000174 000059E3 CMP R9,#+0 1378 } 1379 return i; \ 00000178 0700A001 MOVEQ R0,R7 \ 0000017C CCFFFF0A BEQ ??LoadBotMessage_5 \ 00000180 0050C6E5 STRB R5,[R6, #+0] \ 00000184 EBFFFFEA B ??LoadBotMessage_8 \ ??LoadBotMessage_0: \ 00000188 ........ DC32 `?` 1380 } 1381 #endif 1382 1383 //=================================================================== 1384 1385 int RXstate=EOP; //-sizeof(RXpkt)..-1 - receive header, 0..RXpkt.data_len - receive data 1386 \ In segment DATA_Z, align 4, align-sorted 1387 TPKT RXbuf; \ RXbuf: \ 00000000 DS8 16392 \ In segment DATA_Z, align 4, align-sorted 1388 TPKT TXbuf; \ TXbuf: \ 00000000 DS8 16392 1389 1390 int connect_state=0; 1391 1392 int sock=-1; 1393 1394 volatile unsigned long TOTALRECEIVED; 1395 volatile unsigned long TOTALSENDED; 1396 volatile unsigned long ALLTOTALRECEIVED; //by BoBa 10.07 1397 volatile unsigned long ALLTOTALSENDED; 1398 1399 //volatile int sendq_l=0; //Длинна очереди для send 1400 //volatile void *sendq_p=NULL; //указатель очереди 1401 1402 volatile int is_gprs_online=1; 1403 1404 GBSTMR reconnect_tmr; 1405 1406 extern void kill_data(void *p,void (*func_p)(void *)); 1407 \ In segment CODE, align 4, keep-with-next 1408 void ElfKiller(void) 1409 { \ ElfKiller: \ 00000000 00402DE9 PUSH {LR} 1410 extern void *ELF_BEGIN; 1411 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 1412 } 1413 1414 int total_unread; 1415 1416 volatile CLIST *cltop; 1417 1418 volatile unsigned int GROUP_CACHE; //Текущая группа для добавления 1419 1420 //volatile int contactlist_menu_id; 1421 1422 GBSTMR tmr_active; 1423 1424 volatile int edchat_id; 1425 1426 //Применяется для добавления сообщений 1427 //CLIST *edcontact; 1428 //void *edgui_data; 1429 1430 //static int prev_clmenu_itemcount; 1431 \ In segment DATA_Z, align 4, align-sorted 1432 char clm_hdr_text[64]; \ clm_hdr_text: \ 00000000 DS8 64 1433 1434 static const char key_clm_hdr_text[] = LG_CLT9INP; 1435 1436 static const int menusoftkeys[] = {0,1,2}; 1437 static const SOFTKEY_DESC menu_sk[] = 1438 { 1439 {0x0018, 0x0000, (int)LG_SELECT}, 1440 {0x0001, 0x0000, (int)LG_CLOSE}, 1441 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 1442 }; 1443 1444 char clmenu_sk_r[16]; 1445 static const char def_clmenu_sk_r[] = LG_CLOSE; 1446 static const char key_clmenu_sk_r[] = LG_CLEAR; 1447 1448 const SOFTKEYSTAB menu_skt = 1449 { 1450 menu_sk, 0 1451 }; 1452 1453 int tenseconds_to_ping; 1454 \ In segment CODE, align 4, keep-with-next 1455 LOGQ *NewLOGQ(const char *s) 1456 { \ NewLOGQ: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1457 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 1458 zeromem(p,sizeof(LOGQ)); \ 00000018 6010A0E3 MOV R1,#+96 \ 0000001C 1D0100EF SWI +285 1459 strcpy(p->text,s); \ 00000020 0410A0E1 MOV R1,R4 \ 00000024 600085E2 ADD R0,R5,#+96 \ 00000028 1A0000EF SWI +26 1460 return p; \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 3080BDE8 POP {R4,R5,PC} ;; return 1461 } 1462 \ In segment CODE, align 4, keep-with-next 1463 LOGQ *LastLOGQ(LOGQ **pp) 1464 { 1465 LOGQ *q=*pp; \ LastLOGQ: \ 00000000 000090E5 LDR R0,[R0, #+0] 1466 if (q) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 1EFF2F01 BXEQ LR \ 0000000C 000000EA B ??LastLOGQ_0 1467 { 1468 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 1469 } 1470 return(q); \ 00000020 1EFF2FE1 BX LR ;; return 1471 } 1472 1473 //Уничтожить лог \ In segment CODE, align 4, keep-with-next 1474 void FreeLOGQ(LOGQ **pp) 1475 { \ FreeLOGQ: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0010A0E1 MOV R1,R0 1476 LOGQ *p=*pp; \ 00000008 000091E5 LDR R0,[R1, #+0] 1477 *pp=NULL; //Сразу обрежем \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 002081E5 STR R2,[R1, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 1080BD08 POPEQ {R4,PC} 1478 while(p) 1479 { 1480 LOGQ *np=p->next; \ ??FreeLOGQ_0: \ 0000001C 004090E5 LDR R4,[R0, #+0] 1481 mfree(p); \ 00000020 150000EF SWI +21 1482 p=np; \ 00000024 0400B0E1 MOVS R0,R4 1483 } \ 00000028 FBFFFF1A BNE ??FreeLOGQ_0 1484 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 1485 1486 //Удалить элемент из лога \ In segment CODE, align 4, keep-with-next 1487 void RemoveLOGQ(LOGQ **queue, LOGQ *p) 1488 { \ RemoveLOGQ: \ 00000000 00402DE9 PUSH {LR} 1489 LOGQ *q=(LOGQ *)queue; \ 00000004 000000EA B ??RemoveLOGQ_0 1490 LOGQ *qp; 1491 while(qp=q->next) 1492 { 1493 if (qp==p) 1494 { 1495 q->next=p->next; 1496 break; 1497 } 1498 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] 1499 } 1500 mfree(p); //Если элемент вообще не в логе \ ??RemoveLOGQ_2: \ 00000028 0100A0E1 MOV R0,R1 \ 0000002C 150000EF SWI +21 1501 } \ 00000030 0080BDE8 POP {PC} ;; return 1502 1503 //Добавить элемент в лог \ In segment CODE, align 4, keep-with-next 1504 int AddLOGQ(LOGQ **queue, LOGQ *p) 1505 { 1506 LOGQ *q=(LOGQ *)queue; 1507 LOGQ *qp; 1508 int i=0; \ AddLOGQ: \ 00000000 0020A0E3 MOV R2,#+0 \ 00000004 000000EA B ??AddLOGQ_0 1509 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 1510 p->next=NULL; \ 0000001C 003081E5 STR R3,[R1, #+0] 1511 q->next=p; \ 00000020 001080E5 STR R1,[R0, #+0] 1512 return(i+1); //Теперь всего в логе элементов \ 00000024 0200A0E1 MOV R0,R2 \ 00000028 1EFF2FE1 BX LR ;; return 1513 } 1514 \ In segment CODE, align 4, keep-with-next 1515 char *GetLastXTextLOGQ(CLIST *t) 1516 { 1517 LOGQ *p = t->log; \ GetLastXTextLOGQ: \ 00000000 A01090E5 LDR R1,[R0, #+160] 1518 char *s = 0; \ 00000004 0000A0E3 MOV R0,#+0 1519 if(!p) return 0; \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 0500001A BNE ??GetLastXTextLOGQ_0 \ 00000010 1EFF2FE1 BX LR 1520 while(p->next) 1521 { 1522 if((p->type&0x0F)==3) \ ??GetLastXTextLOGQ_1: \ 00000014 0C3091E5 LDR R3,[R1, #+12] \ 00000018 0F3003E2 AND R3,R3,#0xF \ 0000001C 030053E3 CMP R3,#+3 1523 s = p->text; \ 00000020 60008102 ADDEQ R0,R1,#+96 1524 p = p->next; \ 00000024 0210A0E1 MOV R1,R2 1525 } \ ??GetLastXTextLOGQ_0: \ 00000028 002091E5 LDR R2,[R1, #+0] \ 0000002C 000052E3 CMP R2,#+0 \ 00000030 F7FFFF1A BNE ??GetLastXTextLOGQ_1 1526 if((p->type&0x0F)==3) \ 00000034 0C2091E5 LDR R2,[R1, #+12] \ 00000038 0F2002E2 AND R2,R2,#0xF \ 0000003C 030052E3 CMP R2,#+3 1527 s = p->text; \ 00000040 60008102 ADDEQ R0,R1,#+96 1528 return s; \ 00000044 1EFF2FE1 BX LR ;; return 1529 } 1530 \ In segment CODE, align 4, keep-with-next 1531 int GetIconIndex(CLIST *t) 1532 { 1533 unsigned short s; 1534 if (t) \ GetIconIndex: \ 00000000 000050E3 CMP R0,#+0 \ 00000004 3400000A BEQ ??GetIconIndex_0 1535 { 1536 s=t->state; 1537 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 1538 if (t->isunread) \ 0000001C 900090E5 LDR R0,[R0, #+144] \ 00000020 000050E3 CMP R0,#+0 1539 return(IS_MSG); \ 00000024 0D00A013 MOVNE R0,#+13 \ 00000028 1EFF2F11 BXNE LR 1540 else 1541 { 1542 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 1543 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 1544 if ((s&0xF000)==0x3000) return (IS_EVIL); \ 0000004C C00D52E3 CMP R2,#+12288 \ 00000050 0700A003 MOVEQ R0,#+7 \ 00000054 1EFF2F01 BXEQ LR 1545 if ((s&0xF000)==0x4000) return (IS_DEPRESSION); \ 00000058 400C52E3 CMP R2,#+16384 \ 0000005C 0600A003 MOVEQ R0,#+6 \ 00000060 1EFF2F01 BXEQ LR 1546 if ((s&0xF000)==0x5000) return (IS_HOME); \ 00000064 500C52E3 CMP R2,#+20480 \ 00000068 0800A003 MOVEQ R0,#+8 \ 0000006C 1EFF2F01 BXEQ LR 1547 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 1548 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 1549 if (s & 0x0001) return(IS_AWAY); \ ??GetIconIndex_1: \ 00000090 010011E3 TST R1,#0x1 \ 00000094 0200A013 MOVNE R0,#+2 \ 00000098 1EFF2F11 BXNE LR 1550 if (s & 0x0005) return(IS_NA); \ 0000009C 050011E3 TST R1,#0x5 \ 000000A0 0300A013 MOVNE R0,#+3 \ 000000A4 1EFF2F11 BXNE LR 1551 if (s & 0x0011) return(IS_OCCUPIED); \ 000000A8 110011E3 TST R1,#0x11 \ 000000AC 0400A013 MOVNE R0,#+4 \ 000000B0 1EFF2F11 BXNE LR 1552 if (s & 0x0013) return(IS_DND); \ 000000B4 130011E3 TST R1,#0x13 \ 000000B8 0500A013 MOVNE R0,#+5 \ 000000BC 1EFF2F11 BXNE LR 1553 if (s & 0x0002) return(IS_FFC); \ 000000C0 020011E3 TST R1,#0x2 \ 000000C4 EFFFFF1A BNE ??GetIconIndex_2 1554 if (s & 0x0100) return(IS_INVISIBLE); \ 000000C8 400F11E3 TST R1,#0x100 \ 000000CC 0100A013 MOVNE R0,#+1 \ 000000D0 1EFF2F11 BXNE LR 1555 } 1556 } 1557 else 1558 { 1559 return(IS_UNKNOWN); 1560 } 1561 return(IS_ONLINE); \ 000000D4 0B00A0E3 MOV R0,#+11 \ 000000D8 1EFF2FE1 BX LR \ ??GetIconIndex_0: \ 000000DC 0E00A0E3 MOV R0,#+14 \ 000000E0 1EFF2FE1 BX LR ;; return 1562 } 1563 \ In segment CODE, align 4, keep-with-next 1564 LOGQ *FindContactLOGQByAck(TPKT *p) 1565 { \ FindContactLOGQByAck: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1566 CLIST *t; 1567 LockSched(); \ 00000008 460100EF SWI +326 1568 t=FindContactByUin(p->pkt.uin); \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000014 0050A0E1 MOV R5,R0 1569 UnlockSched(); \ 00000018 470100EF SWI +327 1570 unsigned int id=*((unsigned short*)(p->data)); \ 0000001C B840D4E1 LDRH R4,[R4, #+8] 1571 LOGQ *q; 1572 if (!t) return NULL; \ 00000020 000055E3 CMP R5,#+0 \ 00000024 0000A003 MOVEQ R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 1573 LockSched(); \ 0000002C 460100EF SWI +326 1574 q=t->log; \ 00000030 A05095E5 LDR R5,[R5, #+160] \ 00000034 000000EA B ??FindContactLOGQByAck_0 1575 while(q) 1576 { 1577 if (q->ID==id) break; 1578 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 1579 } 1580 UnlockSched(); \ 0000004C 470100EF SWI +327 1581 return q; \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 3080BDE8 POP {R4,R5,PC} ;; return 1582 } 1583 1584 1585 1586 1587 /*----------------------------- SAVE CONTACT LIST TO FILE --------------------------------*/ 1588 \ In segment CODE, align 4, keep-with-next 1589 void CreateCLFile(void) 1590 { \ CreateCLFile: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 42DF4DE2 SUB SP,SP,#+264 1591 CLIST *t; 1592 t=(CLIST *)(&cltop); \ 00000008 ........ LDR R5,??DataTable75 ;; i_rc + 1200 1593 char *s=malloc(128); 1594 volatile int hFile_cl; 1595 unsigned int io_error_cl = 0; 1596 char fn[256]; 1597 strcpy(fn,TEMPLATES_PATH); 1598 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 1599 unlink(fn,&io_error_cl); \ 0000003C 0D10A0E1 MOV R1,SP \ 00000040 08008DE2 ADD R0,SP,#+8 \ 00000044 6B0100EF SWI +363 1600 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] 1601 if(hFile_cl!=-1) \ 00000064 04009DE5 LDR R0,[SP, #+4] \ 00000068 010070E3 CMN R0,#+1 \ 0000006C 1C00001A BNE ??CreateCLFile_1 1602 { 1603 while(t=(CLIST *)(t->next)) 1604 { 1605 if(!t->isgroup && t->uin!=UIN) 1606 { 1607 sprintf(s, ";%d;%s;;;\r\n", t->uin, t->name); 1608 fwrite(hFile_cl, s, strlen(s), &io_error_cl); 1609 } 1610 } 1611 ShowMSG(2,(int)"Saved local.cl"); 1612 } 1613 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 1614 fclose(hFile_cl, &io_error_cl); \ 0000007C 04009DE5 LDR R0,[SP, #+4] \ 00000080 0D10A0E1 MOV R1,SP \ 00000084 0D0000EF SWI +13 1615 mfree(s); \ 00000088 0400A0E1 MOV R0,R4 \ 0000008C 150000EF SWI +21 1616 } \ 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,??DataTable86 ;; 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 `?` 1617 1618 /*-----------------------------------------------------------------------------------------*/ 1619 1620 char on_off_buf[128]; 1621 int on_off_timer=0; 1622 char ContactT9Key[32]; 1623 int kopa_online; 1624 int kopa_kontaktu; \ In segment DATA_Z, align 4, align-sorted 1625 char status[64]; \ status: \ 00000000 DS8 64 1626 //void UpdateCLheader(void){}; 1627 1628 \ In segment CODE, align 4, keep-with-next 1629 void ClearContactT9Key(void) 1630 { 1631 zeromem(ContactT9Key,sizeof(ContactT9Key)); \ ClearContactT9Key: \ 00000000 0C009FE5 LDR R0,??ClearContactT9Key_0 ;; i_rc + 1668 \ 00000004 00402DE9 PUSH {LR} \ 00000008 2010A0E3 MOV R1,#+32 \ 0000000C 1D0100EF SWI +285 1632 } \ 00000010 0080BDE8 POP {PC} ;; return \ ??ClearContactT9Key_0: \ 00000014 ........ DC32 i_rc + 1668 1633 \ In segment CODE, align 4, keep-with-next 1634 void AddContactT9Key(int chr) 1635 { \ AddContactT9Key: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1636 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R5,??DataTable84 ;; i_rc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 8400A0E3 MOV R0,#+132 \ 00000010 600E80E3 ORR R0,R0,#0x600 \ 00000014 050080E0 ADD R0,R0,R5 \ 00000018 1B0000EF SWI +27 1637 if (l<(sizeof(ContactT9Key)-1)) \ 0000001C 1F0050E3 CMP R0,#+31 1638 { 1639 ContactT9Key[l]=chr; \ 00000020 05008030 ADDCC R0,R0,R5 \ 00000024 8446C035 STRBCC R4,[R0, #+1668] 1640 } 1641 } \ 00000028 3080BDE8 POP {R4,R5,PC} ;; return 1642 \ In segment CODE, align 4, keep-with-next 1643 void BackSpaceContactT9(void) 1644 { \ BackSpaceContactT9: \ 00000000 10402DE9 PUSH {R4,LR} 1645 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R4,??DataTable84 ;; i_rc \ 00000008 8400A0E3 MOV R0,#+132 \ 0000000C 600E80E3 ORR R0,R0,#0x600 \ 00000010 040080E0 ADD R0,R0,R4 \ 00000014 1B0000EF SWI +27 1646 if (l) \ 00000018 000050E3 CMP R0,#+0 1647 { 1648 l--; 1649 ContactT9Key[l]=0; \ 0000001C 04008010 ADDNE R0,R0,R4 \ 00000020 0010A013 MOVNE R1,#+0 \ 00000024 8316C015 STRBNE R1,[R0, #+1667] 1650 } 1651 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 1652 1653 1654 void RecountMenu(CLIST *req, int needfocus); 1655 1656 //--------------------------------------------------------------------// 1657 1658 \ In segment CODE, align 4, keep-with-next 1659 void LongPressActionOnChat(CLIST *t,int i) 1660 { \ LongPressActionOnChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 1661 switch(i) \ 00000004 ........ LDR R4,??DataTable84 ;; i_rc \ 00000008 ........ LDR R9,??DataTable68 ;; WriteDefSettings \ 0000000C ........ LDR R7,??DataTable77 ;; Canvas \ 00000010 04D04DE2 SUB SP,SP,#+4 \ 00000014 8C20A0E3 MOV R2,#+140 \ 00000018 602D82E3 ORR R2,R2,#0x1800 \ 0000001C 045082E0 ADD R5,R2,R4 \ 00000020 02A0A0E3 MOV R10,#+2 \ 00000024 0060A0E3 MOV R6,#+0 \ 00000028 01B0A0E3 MOV R11,#+1 \ 0000002C 8480A0E3 MOV R8,#+132 \ 00000030 608E88E3 ORR R8,R8,#0x600 \ 00000034 011041E2 SUB R1,R1,#+1 \ 00000038 0C0051E3 CMP R1,#+12 \ 0000003C CB00008A BHI ??LongPressActionOnChat_1 \ 00000040 012F8FE2 ADR R2,??LongPressActionOnChat_0 \ 00000044 0120D2E7 LDRB R2,[R2, R1] \ 00000048 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??LongPressActionOnChat_0: \ 0000004C 03101E29 DC8 +3,+16,+30,+41 \ 00000050 35516972 DC8 +53,+81,+105,+114 \ 00000054 7F8799AD DC8 +127,+135,+153,+173 \ 00000058 C4000000 DC8 +196,+0,+0,+0 1662 { 1663 case 1: 1664 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??LongPressActionOnChat_2: \ 0000005C 680494E5 LDR R0,[R4, #+1128] \ 00000060 000050E3 CMP R0,#+0 \ 00000064 00B0A013 MOVNE R11,#+0 \ 00000068 68B484E5 STR R11,[R4, #+1128] 1665 if(Is_Sounds_Enabled) \ 0000006C 00005BE3 CMP R11,#+0 1666 { 1667 // ShowMSG(1,(int)"Sound 0n"); 1668 strcpy(prmsg,"Sound 0n"); \ 00000070 14108712 ADDNE R1,R7,#+20 1669 PrintTimer=2; 1670 } 1671 else 1672 { 1673 // ShowMSG(1,(int)"Sound Off"); 1674 strcpy(prmsg,"Sound Off"); \ 00000074 20108702 ADDEQ R1,R7,#+32 \ 00000078 0500A0E1 MOV R0,R5 \ 0000007C 1A0000EF SWI +26 1675 PrintTimer=2; \ 00000080 C4A284E5 STR R10,[R4, #+708] 1676 } 1677 SUBPROC((void*)WriteDefSettings); \ 00000084 0900A0E1 MOV R0,R9 \ 00000088 710100EF SWI +369 \ 0000008C B70000EA B ??LongPressActionOnChat_1 1678 break; 1679 case 2: 1680 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??LongPressActionOnChat_3: \ 00000090 100394E5 LDR R0,[R4, #+784] \ 00000094 000050E3 CMP R0,#+0 \ 00000098 00B0A013 MOVNE R11,#+0 \ 0000009C 10B384E5 STR R11,[R4, #+784] 1681 SUBPROC((void*)WriteDefSettings); \ 000000A0 0900A0E1 MOV R0,R9 \ 000000A4 710100EF SWI +369 1682 if(Is_Vibra_Enabled) \ 000000A8 100394E5 LDR R0,[R4, #+784] \ 000000AC 000050E3 CMP R0,#+0 \ 000000B0 38108702 ADDEQ R1,R7,#+56 1683 { 1684 // ShowMSG(1,(int)"Vibra On"); 1685 strcpy(prmsg,"Vibra On"); \ 000000B4 2C108712 ADDNE R1,R7,#+44 \ ??LongPressActionOnChat_4: \ 000000B8 0500A0E1 MOV R0,R5 \ 000000BC 1A0000EF SWI +26 1686 PrintTimer=2; \ 000000C0 C4A284E5 STR R10,[R4, #+708] \ 000000C4 A90000EA B ??LongPressActionOnChat_1 1687 } 1688 else 1689 { 1690 // ShowMSG(1,(int)"Vibra Off"); 1691 strcpy(prmsg,"Vibra Off"); 1692 PrintTimer=2; 1693 } 1694 break; 1695 case 3: 1696 if(CurrentPrivateStatus!=1) \ ??LongPressActionOnChat_5: \ 000000C8 740494E5 LDR R0,[R4, #+1140] \ 000000CC 010050E3 CMP R0,#+1 \ 000000D0 0300000A BEQ ??LongPressActionOnChat_6 1697 { 1698 SetPrivateStatus(1);//Инвиз \ 000000D4 0100A0E3 MOV R0,#+1 \ 000000D8 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 1699 // ShowMSG(1,(int)"Инвиз включен"); 1700 strcpy(prmsg,"Инвиз включен"); \ 000000DC 441087E2 ADD R1,R7,#+68 \ ??LongPressActionOnChat_7: \ 000000E0 F4FFFFEA B ??LongPressActionOnChat_4 1701 PrintTimer=2; 1702 } 1703 else 1704 { 1705 SetPrivateStatus(3); \ ??LongPressActionOnChat_6: \ 000000E4 0300A0E3 MOV R0,#+3 \ 000000E8 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 1706 // ShowMSG(1,(int)"Инвиз выключен"); 1707 strcpy(prmsg,"Инвиз выключен"); \ 000000EC 541087E2 ADD R1,R7,#+84 \ 000000F0 F0FFFFEA B ??LongPressActionOnChat_4 1708 PrintTimer=2; 1709 } 1710 break; 1711 case 4: 1712 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??LongPressActionOnChat_8: \ 000000F4 F40294E5 LDR R0,[R4, #+756] \ 000000F8 000050E3 CMP R0,#+0 \ 000000FC 00B0A013 MOVNE R11,#+0 \ 00000100 F4B284E5 STR R11,[R4, #+756] 1713 SUBPROC((void*)WriteDefSettings); \ 00000104 0900A0E1 MOV R0,R9 \ 00000108 710100EF SWI +369 1714 if(Is_Double_Vibra_On) \ 0000010C F40294E5 LDR R0,[R4, #+756] \ 00000110 000050E3 CMP R0,#+0 1715 { 1716 // ShowMSG(1,(int)"Vibra rem On"); 1717 strcpy(prmsg,"Vibra rem On"); \ 00000114 64108712 ADDNE R1,R7,#+100 \ 00000118 E6FFFF1A BNE ??LongPressActionOnChat_4 1718 PrintTimer=2; 1719 } 1720 else 1721 { 1722 // ShowMSG(1,(int)"Vibra rem Off"); 1723 strcpy(prmsg,"Vibra rem Off"); \ 0000011C 741087E2 ADD R1,R7,#+116 \ 00000120 E4FFFFEA B ??LongPressActionOnChat_4 1724 PrintTimer=2; 1725 } 1726 break; 1727 case 5: 1728 { 1729 CLIST *cl; 1730 cl=(CLIST *)(&cltop); \ ??LongPressActionOnChat_9: \ 00000124 4B9E84E2 ADD R9,R4,#+1200 \ 00000128 060000EA B ??LongPressActionOnChat_10 1731 while(cl=(CLIST *)(cl->next)) 1732 { 1733 if(cl->log) \ ??LongPressActionOnChat_11: \ 0000012C A00099E5 LDR R0,[R9, #+160] \ 00000130 000050E3 CMP R0,#+0 \ 00000134 0300000A BEQ ??LongPressActionOnChat_10 1734 { 1735 FreeLOGQ(&cl->log); \ 00000138 A00089E2 ADD R0,R9,#+160 \ 0000013C ........ BL FreeLOGQ 1736 cl->msg_count=0; \ 00000140 B06089E5 STR R6,[R9, #+176] 1737 cl->isactive=0; \ 00000144 AC6089E5 STR R6,[R9, #+172] 1738 } 1739 } \ ??LongPressActionOnChat_10: \ 00000148 009099E5 LDR R9,[R9, #+0] \ 0000014C 000059E3 CMP R9,#+0 \ 00000150 F5FFFF1A BNE ??LongPressActionOnChat_11 1740 if(strlen(ContactT9Key)) ClearContactT9Key(); \ 00000154 040088E0 ADD R0,R8,R4 \ 00000158 1B0000EF SWI +27 \ 0000015C 000050E3 CMP R0,#+0 \ 00000160 0200000A BEQ ??LongPressActionOnChat_12 \ 00000164 2010A0E3 MOV R1,#+32 \ 00000168 040088E0 ADD R0,R8,R4 \ 0000016C 1D0100EF SWI +285 1741 RecountMenu(NULL,1); \ ??LongPressActionOnChat_12: \ 00000170 0110A0E3 MOV R1,#+1 \ 00000174 0600A0E1 MOV R0,R6 \ 00000178 ........ BL RecountMenu 1742 // ShowMSG(1,(int)"All chat clear!"); 1743 strcpy(prmsg,"All chat clear!"); \ 0000017C 841087E2 ADD R1,R7,#+132 \ 00000180 0500A0E1 MOV R0,R5 \ 00000184 1A0000EF SWI +26 1744 PrintTimer=3; \ 00000188 0300A0E3 MOV R0,#+3 \ 0000018C C40284E5 STR R0,[R4, #+708] 1745 break; \ 00000190 760000EA B ??LongPressActionOnChat_1 1746 } 1747 case 6: 1748 if(!away_m) \ ??LongPressActionOnChat_13: \ 00000194 B00394E5 LDR R0,[R4, #+944] \ 00000198 000050E3 CMP R0,#+0 \ 0000019C 0A00001A BNE ??LongPressActionOnChat_14 1749 { 1750 away_m=!away_m; \ 000001A0 B0B384E5 STR R11,[R4, #+944] 1751 GBS_StopTimer(&away_tmr); \ 000001A4 560D88E2 ADD R0,R8,#+5504 \ 000001A8 040080E0 ADD R0,R0,R4 \ 000001AC 440100EF SWI +324 1752 msg_away_timer=AUTO_ENGADE*12; \ 000001B0 ........ LDR R0,??DataTable70 ;; AUTO_ENGADE \ 000001B4 0C10A0E3 MOV R1,#+12 \ 000001B8 000090E5 LDR R0,[R0, #+0] \ 000001BC 910000E0 MUL R0,R1,R0 \ 000001C0 AC0384E5 STR R0,[R4, #+940] 1753 InputAwayMsg(); \ 000001C4 ........ BL InputAwayMsg \ 000001C8 680000EA B ??LongPressActionOnChat_1 1754 1755 } 1756 else 1757 { 1758 msg_away_timer=0; 1759 away_m=!away_m; 1760 if(change_back_status) \ ??LongPressActionOnChat_14: \ 000001CC B80394E5 LDR R0,[R4, #+952] \ 000001D0 AC6384E5 STR R6,[R4, #+940] \ 000001D4 B06384E5 STR R6,[R4, #+944] \ 000001D8 000050E3 CMP R0,#+0 \ 000001DC 6400000A BEQ ??LongPressActionOnChat_15 1761 { 1762 CurrentStatus=status_rem; \ 000001E0 B40394E5 LDR R0,[R4, #+948] \ 000001E4 A00384E5 STR R0,[R4, #+928] 1763 set_my_status(); \ 000001E8 ........ BL set_my_status 1764 change_back_status=0; \ 000001EC B86384E5 STR R6,[R4, #+952] \ 000001F0 5E0000EA B ??LongPressActionOnChat_1 1765 } 1766 } 1767 // UpdateCLheader(); 1768 break; 1769 case 7: 1770 { 1771 Show_XTX=!(Show_XTX); \ ??LongPressActionOnChat_16: \ 000001F4 BC0394E5 LDR R0,[R4, #+956] \ 000001F8 000050E3 CMP R0,#+0 \ 000001FC 00B0A013 MOVNE R11,#+0 \ 00000200 BCB384E5 STR R11,[R4, #+956] 1772 if(Show_XTX) \ 00000204 00005BE3 CMP R11,#+0 1773 { 1774 // ShowMSG(1,(int)"Default show x-status"); 1775 strcpy(prmsg,"Default show x-status"); \ 00000208 94108712 ADDNE R1,R7,#+148 \ 0000020C A9FFFF1A BNE ??LongPressActionOnChat_4 1776 PrintTimer=2; 1777 } 1778 else 1779 { 1780 // ShowMSG(1,(int)"Default show time"); 1781 strcpy(prmsg,"Default show time"); \ 00000210 AC1087E2 ADD R1,R7,#+172 \ 00000214 A7FFFFEA B ??LongPressActionOnChat_4 1782 PrintTimer=2; 1783 } 1784 } 1785 break; 1786 case 8: 1787 { 1788 WSHDR *ws; 1789 ws=AllocWS(150); \ ??LongPressActionOnChat_17: \ 00000218 9600A0E3 MOV R0,#+150 \ 0000021C 250100EF SWI +293 1790 str_2ws(ws,suc_config_name,128); \ 00000220 ........ LDR R1,??DataTable71 ;; suc_config_name \ 00000224 0040A0E1 MOV R4,R0 \ 00000228 8020A0E3 MOV R2,#+128 \ ??LongPressActionOnChat_18: \ 0000022C 6C0100EF SWI +364 1791 ExecuteFile(ws,0,0); \ 00000230 0020A0E3 MOV R2,#+0 \ 00000234 0210A0E1 MOV R1,R2 \ 00000238 0400A0E1 MOV R0,R4 \ 0000023C 940000EF SWI +148 1792 FreeWS(ws); \ 00000240 0400A0E1 MOV R0,R4 \ 00000244 290100EF SWI +297 \ 00000248 480000EA B ??LongPressActionOnChat_1 1793 } 1794 break; 1795 case 9: 1796 { 1797 WSHDR *ws; 1798 ws=AllocWS(150); \ ??LongPressActionOnChat_19: \ 0000024C 9600A0E3 MOV R0,#+150 \ 00000250 250100EF SWI +293 \ 00000254 0040A0E1 MOV R4,R0 1799 str_2ws(ws,suc_config_name_mod,128); \ 00000258 ........ LDR R0,??DataTable72 ;; suc_config_name_mod \ 0000025C 8020A0E3 MOV R2,#+128 \ 00000260 001090E5 LDR R1,[R0, #+0] \ 00000264 0400A0E1 MOV R0,R4 \ 00000268 EFFFFFEA B ??LongPressActionOnChat_18 1800 ExecuteFile(ws,0,0); 1801 FreeWS(ws); 1802 } 1803 break; 1804 case 10://ping 1805 { 1806 janis=1; \ ??LongPressActionOnChat_20: \ 0000026C ........ LDR R0,??DataTable73 ;; janis \ 00000270 00B080E5 STR R11,[R0, #+0] 1807 TPKT *p; 1808 p=malloc(sizeof(PKT)+sizeof(TTime)); \ 00000274 1000A0E3 MOV R0,#+16 \ 00000278 140000EF SWI +20 \ 0000027C 0040A0E1 MOV R4,R0 1809 GetDateTime(NULL,(TTime *)p->data); \ 00000280 081084E2 ADD R1,R4,#+8 \ 00000284 0000A0E3 MOV R0,#+0 \ 00000288 B40000EF SWI +180 1810 p->pkt.uin=0; \ 0000028C 006084E5 STR R6,[R4, #+0] 1811 p->pkt.type=T_ECHO; \ 00000290 1200A0E3 MOV R0,#+18 \ 00000294 B400C4E1 STRH R0,[R4, #+4] 1812 p->pkt.data_len=sizeof(TTime); \ 00000298 0800A0E3 MOV R0,#+8 \ 0000029C B600C4E1 STRH R0,[R4, #+6] 1813 SUBPROC((void *)SendAnswer,0,p); \ 000002A0 ........ LDR R0,??DataTable87 ;; SendAnswer \ 000002A4 0420A0E1 MOV R2,R4 \ 000002A8 0610A0E1 MOV R1,R6 \ 000002AC 710100EF SWI +369 \ 000002B0 2E0000EA B ??LongPressActionOnChat_1 1814 } 1815 break; 1816 case 11://go to idle 1817 { 1818 ClearContactT9Key(); \ ??LongPressActionOnChat_21: \ 000002B4 2010A0E3 MOV R1,#+32 \ 000002B8 040088E0 ADD R0,R8,R4 \ 000002BC 1D0100EF SWI +285 1819 RecountMenu(NULL,1); \ 000002C0 0110A0E3 MOV R1,#+1 \ 000002C4 0600A0E1 MOV R0,R6 \ 000002C8 ........ BL RecountMenu 1820 silenthide=1; \ 000002CC 60B484E5 STR R11,[R4, #+1120] 1821 gipc.name_to=ipc_xtask_name; \ 000002D0 DE0F87E2 ADD R0,R7,#+888 \ 000002D4 EC0084E5 STR R0,[R4, #+236] 1822 gipc.name_from=ipc_my_name; \ 000002D8 D60F87E2 ADD R0,R7,#+856 \ 000002DC F00084E5 STR R0,[R4, #+240] 1823 gipc.data=0; \ 000002E0 F46084E5 STR R6,[R4, #+244] 1824 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 000002E4 EC3084E2 ADD R3,R4,#+236 \ 000002E8 0B20A0E1 MOV R2,R11 \ 000002EC B010A0E3 MOV R1,#+176 \ 000002F0 DE1C81E3 ORR R1,R1,#0xDE00 \ 000002F4 0900A0E3 MOV R0,#+9 \ 000002F8 420C80E3 ORR R0,R0,#0x4200 \ 000002FC 000100EF SWI +256 \ 00000300 1A0000EA B ??LongPressActionOnChat_1 1825 } 1826 break; 1827 case 12://hide & lock 1828 { 1829 ClearContactT9Key(); \ ??LongPressActionOnChat_22: \ 00000304 2010A0E3 MOV R1,#+32 \ 00000308 040088E0 ADD R0,R8,R4 \ 0000030C 1D0100EF SWI +285 1830 RecountMenu(NULL,1); \ 00000310 0110A0E3 MOV R1,#+1 \ 00000314 0600A0E1 MOV R0,R6 \ 00000318 ........ BL RecountMenu 1831 gipc.name_to=ipc_xtask_name; \ 0000031C DE0F87E2 ADD R0,R7,#+888 \ 00000320 EC0084E5 STR R0,[R4, #+236] 1832 gipc.name_from=ipc_my_name; \ 00000324 D60F87E2 ADD R0,R7,#+856 \ 00000328 F00084E5 STR R0,[R4, #+240] 1833 gipc.data=0; \ 0000032C F46084E5 STR R6,[R4, #+244] 1834 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 00000330 EC3084E2 ADD R3,R4,#+236 \ 00000334 0B20A0E1 MOV R2,R11 \ 00000338 B010A0E3 MOV R1,#+176 \ 0000033C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000340 0900A0E3 MOV R0,#+9 \ 00000344 420C80E3 ORR R0,R0,#0x4200 \ 00000348 000100EF SWI +256 1835 if (IsUnlocked()) \ 0000034C 430000EF SWI +67 \ 00000350 000050E3 CMP R0,#+0 \ 00000354 0600000A BEQ ??LongPressActionOnChat_15 1836 { 1837 KbdLock(); \ 00000358 A90000EF SWI +169 \ 0000035C 030000EA B ??LongPressActionOnChat_1 1838 } 1839 // return(-1); 1840 } 1841 break; 1842 case 13://users menu 1843 { 1844 int CreateContactMenu(CLIST *t); 1845 if(!t->isgroup) \ ??LongPressActionOnChat_23: \ 00000360 081090E5 LDR R1,[R0, #+8] \ 00000364 000051E3 CMP R1,#+0 \ 00000368 0000001A BNE ??LongPressActionOnChat_1 1846 CreateContactMenu(t); \ 0000036C ........ BL CreateContactMenu 1847 } 1848 break; 1849 }//switch() 1850 1851 for(int j=0;j<1000;) j++; \ ??LongPressActionOnChat_1: \ 00000370 0000A0E3 MOV R0,#+0 \ ??LongPressActionOnChat_15: \ 00000374 010080E2 ADD R0,R0,#+1 \ 00000378 FA0F50E3 CMP R0,#+1000 \ 0000037C FCFFFFBA BLT ??LongPressActionOnChat_15 1852 1853 } \ 00000380 F18FBDE8 POP {R0,R4-R11,PC} ;; return 1854 1855 //{"Без действия","Звук","Вибра","Инвиз","Реж.напоминания","Очистить чаты","Автоответчик","Показ.хстат/время","Конфиг","Конфиг мода","Пинг","Заблокировать","На гэ","Меню юзера"} 1856 \ In segment CODE, align 4, keep-with-next 1857 void LongPressAction(CLIST *t,int key) 1858 { \ LongPressAction: \ 00000000 00402DE9 PUSH {LR} 1859 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 1860 { 1861 case '0': LongPressActionOnChat(t,longAct_0); break; \ ??LongPressAction_1: \ 00000054 78109FE5 LDR R1,??LongPressAction_2 ;; longAct_0 \ 00000058 040000EA B ??LongPressAction_3 1862 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} 1863 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} 1864 case '3': LongPressActionOnChat(t,longAct_3); break; \ ??LongPressAction_6: \ 0000007C 5C109FE5 LDR R1,??LongPressAction_2+0xC ;; longAct_3 \ 00000080 FAFFFFEA B ??LongPressAction_3 1865 case '4': LongPressActionOnChat(t,longAct_4); break; \ ??LongPressAction_7: \ 00000084 58109FE5 LDR R1,??LongPressAction_2+0x10 ;; longAct_4 \ 00000088 F8FFFFEA B ??LongPressAction_3 1866 case '5': LongPressActionOnChat(t,longAct_5); break; \ ??LongPressAction_8: \ 0000008C 54109FE5 LDR R1,??LongPressAction_2+0x14 ;; longAct_5 \ 00000090 F6FFFFEA B ??LongPressAction_3 1867 case '6': LongPressActionOnChat(t,longAct_6); break; \ ??LongPressAction_9: \ 00000094 50109FE5 LDR R1,??LongPressAction_2+0x18 ;; longAct_6 \ 00000098 F4FFFFEA B ??LongPressAction_3 1868 case '7': LongPressActionOnChat(t,longAct_7); break; \ ??LongPressAction_10: \ 0000009C 4C109FE5 LDR R1,??LongPressAction_2+0x1C ;; longAct_7 \ 000000A0 F2FFFFEA B ??LongPressAction_3 1869 case '8': LongPressActionOnChat(t,longAct_8); break; \ ??LongPressAction_11: \ 000000A4 48109FE5 LDR R1,??LongPressAction_2+0x20 ;; longAct_8 \ 000000A8 F0FFFFEA B ??LongPressAction_3 1870 case '9': LongPressActionOnChat(t,longAct_9); break; \ ??LongPressAction_12: \ 000000AC 44109FE5 LDR R1,??LongPressAction_2+0x24 ;; longAct_9 \ 000000B0 EEFFFFEA B ??LongPressAction_3 1871 case '*': LongPressActionOnChat(t,longAct_10); break; \ ??LongPressAction_13: \ 000000B4 40109FE5 LDR R1,??LongPressAction_2+0x28 ;; longAct_10 \ 000000B8 ECFFFFEA B ??LongPressAction_3 1872 case '#': LongPressActionOnChat(t,longAct_11); break; \ ??LongPressAction_14: \ 000000BC 3C109FE5 LDR R1,??LongPressAction_2+0x2C ;; longAct_11 \ 000000C0 EAFFFFEA B ??LongPressAction_3 1873 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 1874 } 1875 } \ ??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 1876 1877 char hostbuf2[128]; 1878 1879 \ In segment CODE, align 4, keep-with-next 1880 void GetOnTotalContact(int group_id,int *_onlinetotal) 1881 { 1882 CLIST *t; 1883 t=(CLIST *)&cltop; \ GetOnTotalContact: \ 00000000 ........ LDR R2,??DataTable75 ;; i_rc + 1200 \ 00000004 30002DE9 PUSH {R4,R5} 1884 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 1885 while((t=t->next)) 1886 { 1887 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 1888 { 1889 total++; 1890 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 1891 } 1892 } \ ??GetOnTotalContact_0: \ 00000040 002092E5 LDR R2,[R2, #+0] \ 00000044 000052E3 CMP R2,#+0 \ 00000048 F3FFFF1A BNE ??GetOnTotalContact_1 1893 _onlinetotal[0]=online; \ 0000004C 003081E5 STR R3,[R1, #+0] 1894 _onlinetotal[1]=total; \ 00000050 04C081E5 STR R12,[R1, #+4] 1895 } \ 00000054 3000BDE8 POP {R4,R5} \ 00000058 1EFF2FE1 BX LR ;; return 1896 1897 //=============================================================================================== 1898 1899 int DNR_ID=0; 1900 int DNR_TRIES=3; 1901 1902 char hostname[128]; //2058 che toka 128? :) 1903 1904 int host_counter = 0; 1905 1906 //--------------------------------------------------------------------------- 1907 \ In segment CODE, align 4, keep-with-next 1908 const char *GetHost(int cnt, const char *str, char *buf) 1909 { 1910 const char *tmp = str, *begin, *end; \ GetHost: \ 00000000 0130A0E1 MOV R3,R1 1911 if(cnt) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0100001A BNE ??GetHost_0 \ 0000000C 180000EA B ??GetHost_1 1912 { 1913 for(;cnt;cnt--) 1914 { 1915 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 1916 if(!*str) str = tmp; \ 00000030 00005CE3 CMP R12,#+0 \ 00000034 0200001A BNE ??GetHost_3 \ 00000038 0310A0E1 MOV R1,R3 \ 0000003C 000000EA B ??GetHost_3 1917 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 1918 if(!*str) str = tmp; \ ??GetHost_5: \ 00000064 00005CE3 CMP R12,#+0 \ 00000068 0310A001 MOVEQ R1,R3 1919 } \ 0000006C 010050E2 SUBS R0,R0,#+1 \ 00000070 E7FFFF1A BNE ??GetHost_0 1920 } 1921 tmp = buf; \ ??GetHost_1: \ 00000074 0200A0E1 MOV R0,R2 1922 begin = str; \ 00000078 0130A0E1 MOV R3,R1 \ 0000007C 000000EA B ??GetHost_6 1923 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 1924 end = str; 1925 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 1937 } 1938 } 1939 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 1940 int GetPort(int cnt, const char *str) 1941 { \ GetPort: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 1942 const char *tmp = str; \ 00000008 01C0A0E1 MOV R12,R1 1943 char numbuf[6], numcnt = 0; \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 0030A0E3 MOV R3,#+0 1944 if(cnt) \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0100001A BNE ??GetPort_0 \ 0000001C 180000EA B ??GetPort_1 1945 { 1946 for(;cnt;cnt--) 1947 { 1948 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 1949 if(!*str) str = tmp; \ 00000040 000054E3 CMP R4,#+0 \ 00000044 0200001A BNE ??GetPort_3 \ 00000048 0C10A0E1 MOV R1,R12 \ 0000004C 000000EA B ??GetPort_3 1950 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 1951 if(!*str) str = tmp; \ ??GetPort_5: \ 00000074 000054E3 CMP R4,#+0 \ 00000078 0C10A001 MOVEQ R1,R12 1952 } \ 0000007C 010050E2 SUBS R0,R0,#+1 \ 00000080 E7FFFF1A BNE ??GetPort_0 1953 } 1954 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 1955 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} 1956 str++; 1957 numbuf[5] = 0; \ 000000BC 0520CDE5 STRB R2,[SP, #+5] \ 000000C0 030000EA B ??GetPort_7 1958 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 1959 numbuf[numcnt] = 0; //2058 \ ??GetPort_9: \ 00000100 0020C0E5 STRB R2,[R0, #+0] 1960 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 1961 1962 } 1963 // 1964 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 1965 int GetHostsCount(const char *str) 1966 { 1967 char cnt = 1; \ GetHostsCount: \ 00000000 0110A0E3 MOV R1,#+1 \ 00000004 000000EA B ??GetHostsCount_0 1968 for(;cnt;cnt++) 1969 { 1970 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 1971 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 1972 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 1973 if(!*str) return cnt; \ ??GetHostsCount_5: \ 0000005C 000052E3 CMP R2,#+0 \ 00000060 F2FFFF0A BEQ ??GetHostsCount_3 1974 } \ 00000064 011081E2 ADD R1,R1,#+1 \ 00000068 FF1011E2 ANDS R1,R1,#0xFF \ 0000006C E6FFFF1A BNE ??GetHostsCount_0 1975 return 0; \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 1EFF2FE1 BX LR ;; return 1976 } 1977 //--------------------------------------------------------------------------- 1978 \ In segment CODE, align 4, keep-with-next 1979 void create_connect(void) 1980 { \ create_connect: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 1981 // static int host_counter = 0; 1982 char hostbuf[128], buf[128]; 1983 int hostport; 1984 int ***p_res=NULL; 1985 void do_reconnect(void); 1986 SOCK_ADDR sa; 1987 //Устанавливаем соединение 1988 connect_state = 0; \ 00000004 ........ LDR R5,??DataTable84 ;; i_rc 1989 int err; 1990 unsigned int ip; 1991 GBS_DelTimer(&reconnect_tmr); 1992 if (!IsGPRSEnabled()) \ 00000008 ........ LDR R8,??DataTable77 ;; Canvas \ 0000000C 45DF4DE2 SUB SP,SP,#+276 \ 00000010 0040A0E3 MOV R4,#+0 \ 00000014 00408DE5 STR R4,[SP, #+0] \ 00000018 904485E5 STR R4,[R5, #+1168] \ 0000001C 0400A0E3 MOV R0,#+4 \ 00000020 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000024 056080E0 ADD R6,R0,R5 \ 00000028 0600A0E1 MOV R0,R6 \ 0000002C 8C0100EF SWI +396 \ 00000030 E400A0E3 MOV R0,#+228 \ 00000034 700D80E3 ORR R0,R0,#0x1C00 \ 00000038 057080E0 ADD R7,R0,R5 \ 0000003C A70000EF SWI +167 \ 00000040 000050E3 CMP R0,#+0 \ 00000044 0400001A BNE ??create_connect_0 1993 { 1994 is_gprs_online=0; \ 00000048 A84485E5 STR R4,[R5, #+1192] 1995 strcpy(logmsg,LG_GRWAITFORGPRS); \ 0000004C C01088E2 ADD R1,R8,#+192 \ 00000050 0700A0E1 MOV R0,R7 \ 00000054 1A0000EF SWI +26 1996 SMART_REDRAW(); \ 00000058 870000EA B ??create_connect_1 1997 return; 1998 } 1999 DNR_ID=0; 2000 *socklasterr()=0; 2001 if(host_counter > GetHostsCount(NATICQ_HOST)-1) host_counter = 0; //2058 \ ??create_connect_0: \ 0000005C 98929FE5 LDR R9,??create_connect_2+0x4 ;; NATICQ_HOST \ 00000060 CC4485E5 STR R4,[R5, #+1228] \ 00000064 7C8100EF SWI +33148 \ 00000068 004080E5 STR R4,[R0, #+0] \ 0000006C 0900A0E1 MOV R0,R9 \ 00000070 ........ BL GetHostsCount \ 00000074 D41495E5 LDR R1,[R5, #+1236] \ 00000078 010040E2 SUB R0,R0,#+1 \ 0000007C 010050E1 CMP R0,R1 \ 00000080 D44485B5 STRLT R4,[R5, #+1236] 2002 GetHost(host_counter, NATICQ_HOST, hostbuf); \ 00000084 D40495E5 LDR R0,[R5, #+1236] \ 00000088 14208DE2 ADD R2,SP,#+20 \ 0000008C 0910A0E1 MOV R1,R9 \ 00000090 ........ BL GetHost 2003 hostport = GetPort(host_counter, NATICQ_HOST); \ 00000094 D40495E5 LDR R0,[R5, #+1236] \ 00000098 0910A0E1 MOV R1,R9 \ 0000009C ........ BL GetPort \ 000000A0 0090A0E1 MOV R9,R0 2004 host_counter++; \ 000000A4 D40495E5 LDR R0,[R5, #+1236] 2005 2006 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 D40485E5 STR R0,[R5, #+1236] \ 000000B4 14208DE2 ADD R2,SP,#+20 \ 000000B8 D81088E2 ADD R1,R8,#+216 \ 000000BC 3400A0E3 MOV R0,#+52 \ 000000C0 800D80E3 ORR R0,R0,#0x2000 \ 000000C4 050080E0 ADD R0,R0,R5 \ 000000C8 160000EF SWI +22 2007 //strcpy(hostbuf2, hostbuf); //vyvod host v get_online_time 2008 zeromem(hostbuf2,128); \ 000000CC B400A0E3 MOV R0,#+180 \ 000000D0 7C0D80E3 ORR R0,R0,#0x1F00 \ 000000D4 05A080E0 ADD R10,R0,R5 \ 000000D8 8010A0E3 MOV R1,#+128 \ 000000DC 0A00A0E1 MOV R0,R10 \ 000000E0 1D0100EF SWI +285 2009 sprintf(hostbuf2, percent_s,hostbuf); \ 000000E4 14208DE2 ADD R2,SP,#+20 \ 000000E8 081088E2 ADD R1,R8,#+8 \ 000000EC 0A00A0E1 MOV R0,R10 2010 strcpy(logmsg,buf); 2011 SMART_REDRAW(); 2012 2013 ip=str2ip(hostbuf); \ 000000F0 ........ LDR R10,??DataTable78 ;; do_reconnect \ 000000F4 160000EF SWI +22 \ 000000F8 94108DE2 ADD R1,SP,#+148 \ 000000FC 0700A0E1 MOV R0,R7 \ 00000100 1A0000EF SWI +26 \ 00000104 ........ BL SMART_REDRAW \ 00000108 14008DE2 ADD R0,SP,#+20 \ 0000010C B70100EF SWI +439 \ 00000110 04B0E0E1 MVN R11,R4 \ 00000114 0B0050E1 CMP R0,R11 \ 00000118 0500000A BEQ ??create_connect_3 2014 if (ip!=0xFFFFFFFF) 2015 { 2016 sa.ip=ip; \ 0000011C 08008DE5 STR R0,[SP, #+8] 2017 strcpy(logmsg,"\nConnect by IP!"); //strcat->strcpy \ 00000120 EC1088E2 ADD R1,R8,#+236 \ 00000124 0700A0E1 MOV R0,R7 \ 00000128 1A0000EF SWI +26 2018 SMART_REDRAW(); \ 0000012C ........ BL SMART_REDRAW 2019 goto L_CONNECT; \ 00000130 3B0000EA B ??create_connect_4 2020 } \ ??create_connect_3: \ 00000134 6F1F8FE2 ADR R1,??create_connect_2 ;; "\n" \ 00000138 0700A0E1 MOV R0,R7 2021 strcat(logmsg,"\n"); \ 0000013C 170000EF SWI +23 2022 strcpy(logmsg,LG_GRSENDDNR); //strcat->strcpy \ 00000140 FC1088E2 ADD R1,R8,#+252 \ 00000144 0700A0E1 MOV R0,R7 \ 00000148 1A0000EF SWI +26 2023 SMART_REDRAW(); \ 0000014C ........ BL SMART_REDRAW 2024 err=async_gethostbyname(hostbuf,&p_res,&DNR_ID); //03461351 3<70<19<81 \ 00000150 CC00A0E3 MOV R0,#+204 \ 00000154 400E80E3 ORR R0,R0,#0x400 \ 00000158 052080E0 ADD R2,R0,R5 \ 0000015C 0D10A0E1 MOV R1,SP \ 00000160 14008DE2 ADD R0,SP,#+20 \ 00000164 B60100EF SWI +438 \ 00000168 0030B0E1 MOVS R3,R0 2025 if (err) \ 0000016C 1600000A BEQ ??create_connect_5 2026 { 2027 if ((err==0xC9)||(err==0xD6)) \ 00000170 C90053E3 CMP R3,#+201 \ 00000174 D6005313 CMPNE R3,#+214 \ 00000178 0600001A BNE ??create_connect_6 2028 { 2029 if (DNR_ID) \ 0000017C CC0495E5 LDR R0,[R5, #+1228] \ 00000180 000050E3 CMP R0,#+0 \ 00000184 1000000A BEQ ??create_connect_5 2030 { 2031 host_counter--; \ 00000188 D40495E5 LDR R0,[R5, #+1236] \ 0000018C 010040E2 SUB R0,R0,#+1 \ 00000190 D40485E5 STR R0,[R5, #+1236] 2032 return; //Ждем готовности DNR \ 00000194 390000EA B ??create_connect_7 2033 } 2034 } 2035 else 2036 { 2037 snprintf(logmsg,255,LG_GRDNRERROR,err); \ ??create_connect_6: \ 00000198 422F88E2 ADD R2,R8,#+264 \ 0000019C FF10A0E3 MOV R1,#+255 \ 000001A0 0700A0E1 MOV R0,R7 \ 000001A4 1B0100EF SWI +283 2038 SMART_REDRAW(); \ 000001A8 ........ BL SMART_REDRAW 2039 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ ??create_connect_8: \ 000001AC ........ LDR R0,??DataTable79 ;; RECONNECT_TIME \ 000001B0 0A20A0E1 MOV R2,R10 \ 000001B4 000090E5 LDR R0,[R0, #+0] \ 000001B8 D830A0E3 MOV R3,#+216 \ 000001BC 930001E0 MUL R1,R3,R0 \ 000001C0 0600A0E1 MOV R0,R6 \ 000001C4 4D0000EF SWI +77 2040 return; \ 000001C8 2C0000EA B ??create_connect_7 2041 } 2042 } 2043 if (p_res) \ ??create_connect_5: \ 000001CC 00009DE5 LDR R0,[SP, #+0] \ 000001D0 000050E3 CMP R0,#+0 \ 000001D4 3D00000A BEQ ??create_connect_9 2044 { 2045 if (p_res[3]) \ 000001D8 0C0090E5 LDR R0,[R0, #+12] \ 000001DC 000050E3 CMP R0,#+0 \ 000001E0 4200000A BEQ ??create_connect_10 2046 { 2047 strcpy(logmsg,buf); \ 000001E4 94108DE2 ADD R1,SP,#+148 \ 000001E8 0700A0E1 MOV R0,R7 \ 000001EC 1A0000EF SWI +26 2048 strcat(logmsg,"\n"); \ 000001F0 401F8FE2 ADR R1,??create_connect_2 ;; "\n" \ 000001F4 0700A0E1 MOV R0,R7 \ 000001F8 170000EF SWI +23 2049 strcpy(logmsg,LG_GRDNROK); \ 000001FC 461F88E2 ADD R1,R8,#+280 \ 00000200 0700A0E1 MOV R0,R7 \ 00000204 1A0000EF SWI +26 2050 SMART_REDRAW(); \ 00000208 ........ BL SMART_REDRAW 2051 DNR_TRIES=0; \ 0000020C D04485E5 STR R4,[R5, #+1232] 2052 sa.ip=p_res[3][0][0]; \ 00000210 00109DE5 LDR R1,[SP, #+0] \ 00000214 0C1091E5 LDR R1,[R1, #+12] \ 00000218 001091E5 LDR R1,[R1, #+0] \ 0000021C 001091E5 LDR R1,[R1, #+0] \ 00000220 08108DE5 STR R1,[SP, #+8] 2053 L_CONNECT: 2054 sock=socket(1,1,0); \ ??create_connect_4: \ 00000224 0020A0E3 MOV R2,#+0 \ 00000228 0110A0E3 MOV R1,#+1 \ 0000022C 0100A0E1 MOV R0,R1 \ 00000230 730100EF SWI +371 \ 00000234 940485E5 STR R0,[R5, #+1172] 2055 if (sock!=-1) \ 00000238 0B0050E1 CMP R0,R11 \ 0000023C 1A00000A BEQ ??create_connect_11 2056 { 2057 sa.family=1; \ 00000240 0170A0E3 MOV R7,#+1 \ 00000244 B470CDE1 STRH R7,[SP, #+4] 2058 sa.port=htons(hostport); \ 00000248 0908A0E1 MOV R0,R9, LSL #+16 \ 0000024C 2008A0E1 MOV R0,R0, LSR #+16 \ 00000250 7A0100EF SWI +378 \ 00000254 B600CDE1 STRH R0,[SP, #+6] 2059 // sa.ip=htonl(IP_ADDR(82,207,89,182)); 2060 if (connect(sock,&sa,sizeof(sa))!=-1) \ 00000258 940495E5 LDR R0,[R5, #+1172] \ 0000025C 1020A0E3 MOV R2,#+16 \ 00000260 04108DE2 ADD R1,SP,#+4 \ 00000264 740100EF SWI +372 \ 00000268 0B0050E1 CMP R0,R11 \ 0000026C 0500000A BEQ ??create_connect_12 2061 { 2062 connect_state=1; \ 00000270 907485E5 STR R7,[R5, #+1168] 2063 TOTALRECEIVED=0; \ 00000274 984485E5 STR R4,[R5, #+1176] 2064 TOTALSENDED=0; \ 00000278 9C4485E5 STR R4,[R5, #+1180] 2065 SMART_REDRAW(); \ ??create_connect_1: \ 0000027C ........ BL SMART_REDRAW \ ??create_connect_7: \ 00000280 45DF8DE2 ADD SP,SP,#+276 \ 00000284 F08FBDE8 POP {R4-R11,PC} 2066 } 2067 else 2068 { 2069 closesocket(sock); \ ??create_connect_12: \ 00000288 940495E5 LDR R0,[R5, #+1172] \ 0000028C 760100EF SWI +374 2070 sock=-1; \ 00000290 94B485E5 STR R11,[R5, #+1172] 2071 LockSched(); \ 00000294 460100EF SWI +326 2072 ShowMSG(1,(int)LG_MSGCANTCONN); \ 00000298 4C1F88E2 ADD R1,R8,#+304 \ 0000029C 0100A0E3 MOV R0,#+1 \ 000002A0 480100EF SWI +328 2073 UnlockSched(); \ 000002A4 470100EF SWI +327 2074 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 000002A8 BFFFFFEA B ??create_connect_8 2075 2076 } 2077 } 2078 else 2079 { 2080 LockSched(); \ ??create_connect_11: \ 000002AC 460100EF SWI +326 2081 ShowMSG(1,(int)LG_MSGCANTCRSC); \ 000002B0 531F88E2 ADD R1,R8,#+332 \ 000002B4 0100A0E3 MOV R0,#+1 \ 000002B8 480100EF SWI +328 2082 UnlockSched(); \ 000002BC 470100EF SWI +327 2083 //Не осилили создания сокета, закрываем GPRS-сессию 2084 GPRS_OnOff(0,1); \ 000002C0 0110A0E3 MOV R1,#+1 \ 000002C4 0000A0E3 MOV R0,#+0 \ 000002C8 8E0100EF SWI +398 \ 000002CC EBFFFFEA B ??create_connect_7 2085 } 2086 } 2087 } 2088 else 2089 { 2090 DNR_TRIES--; \ ??create_connect_9: \ 000002D0 D00495E5 LDR R0,[R5, #+1232] \ 000002D4 010040E2 SUB R0,R0,#+1 \ 000002D8 D00485E5 STR R0,[R5, #+1232] 2091 LockSched(); \ 000002DC 460100EF SWI +326 2092 ShowMSG(1,(int)LG_MSGHOSTNFND); \ 000002E0 5E1F88E2 ADD R1,R8,#+376 \ 000002E4 0100A0E3 MOV R0,#+1 \ 000002E8 480100EF SWI +328 2093 UnlockSched(); \ 000002EC 470100EF SWI +327 \ ??create_connect_10: \ 000002F0 45DF8DE2 ADD SP,SP,#+276 ;; stack cleaning \ 000002F4 F08FBDE8 POP {R4-R11,PC} ;; return \ ??create_connect_2: \ 000002F8 0A000000 DC8 "\n",+0,+0 \ 000002FC ........ DC32 NATICQ_HOST 2094 } 2095 } 2096 2097 #ifdef SEND_TIMER 2098 GBSTMR send_tmr; 2099 #endif 2100 \ In segment CODE, align 4, keep-with-next 2101 void ClearSendQ(void) 2102 { \ ClearSendQ: \ 00000000 10402DE9 PUSH {R4,LR} 2103 mfree((void *)sendq_p); \ 00000004 ........ LDR R4,??DataTable84 ;; i_rc \ 00000008 D00294E5 LDR R0,[R4, #+720] \ 0000000C 150000EF SWI +21 2104 sendq_p=NULL; \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 D00284E5 STR R0,[R4, #+720] 2105 sendq_l=NULL; \ 00000018 CC0284E5 STR R0,[R4, #+716] 2106 #ifdef SEND_TIMER 2107 GBS_DelTimer(&send_tmr); 2108 #endif 2109 } \ 0000001C 1080BDE8 POP {R4,PC} ;; return 2110 \ In segment CODE, align 4, keep-with-next 2111 void end_socket(void) 2112 { \ end_socket: \ 00000000 10402DE9 PUSH {R4,LR} 2113 if (sock>=0) \ 00000004 ........ LDR R4,??DataTable84 ;; i_rc \ 00000008 940494E5 LDR R0,[R4, #+1172] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0300004A BMI ??end_socket_0 2114 { 2115 shutdown(sock,2); \ 00000014 0210A0E3 MOV R1,#+2 \ 00000018 770100EF SWI +375 2116 closesocket(sock); \ 0000001C 940494E5 LDR R0,[R4, #+1172] \ 00000020 760100EF SWI +374 2117 } 2118 #ifdef SEND_TIMER 2119 GBS_DelTimer(&send_tmr); 2120 #endif 2121 2122 Play(sndLostConn); \ ??end_socket_0: \ 00000024 ........ LDR R0,??DataTable82 ;; sndLostConn \ 00000028 1040BDE8 POP {R4,LR} ;; Pop \ 0000002C ........ B Play ;; tailcall 2123 } 2124 2125 #ifdef SEND_TIMER 2126 static void resend(void) 2127 { 2128 void SendAnswer(int dummy, TPKT *p); 2129 SUBPROC((void*)SendAnswer,0,0); 2130 } 2131 #endif 2132 \ In segment CODE, align 4, keep-with-next 2133 void SendAnswer(int dummy, TPKT *p) 2134 { \ SendAnswer: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 2135 int i; 2136 int j; 2137 if (connect_state<2) \ 00000004 ........ LDR R4,??DataTable84 ;; i_rc \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C 900494E5 LDR R0,[R4, #+1168] \ 00000010 020050E3 CMP R0,#+2 \ 00000014 020000AA BGE ??SendAnswer_0 2138 { 2139 mfree(p); \ 00000018 0600A0E1 MOV R0,R6 \ 0000001C 150000EF SWI +21 2140 return; \ 00000020 F083BDE8 POP {R4-R9,PC} 2141 } 2142 if (p) \ ??SendAnswer_0: \ 00000024 000056E3 CMP R6,#+0 \ 00000028 2600000A BEQ ??SendAnswer_1 2143 { 2144 j=sizeof(PKT)+p->pkt.data_len; //Размер пакета \ 0000002C B600D6E1 LDRH R0,[R6, #+6] \ 00000030 085080E2 ADD R5,R0,#+8 2145 TOTALSENDED+=j; \ 00000034 9C0494E5 LDR R0,[R4, #+1180] \ 00000038 000085E0 ADD R0,R5,R0 \ 0000003C 9C0484E5 STR R0,[R4, #+1180] 2146 ALLTOTALSENDED+=j; //by BoBa 10.07 \ 00000040 A40494E5 LDR R0,[R4, #+1188] \ 00000044 000085E0 ADD R0,R5,R0 \ 00000048 A40484E5 STR R0,[R4, #+1188] 2147 //Проверяем, не надо ли добавить в очередь 2148 if (sendq_p) \ 0000004C D00294E5 LDR R0,[R4, #+720] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0F00000A BEQ ??SendAnswer_2 2149 { 2150 //Есть очередь, добавляем в нее 2151 sendq_p=realloc((void *)sendq_p,sendq_l+j); \ 00000058 CC1294E5 LDR R1,[R4, #+716] \ 0000005C 011085E0 ADD R1,R5,R1 \ 00000060 BA0000EF SWI +186 \ 00000064 D00284E5 STR R0,[R4, #+720] 2152 memcpy((char *)sendq_p+sendq_l,p,j); \ 00000068 CC0294E5 LDR R0,[R4, #+716] \ 0000006C D03294E5 LDR R3,[R4, #+720] \ 00000070 0520A0E1 MOV R2,R5 \ 00000074 0610A0E1 MOV R1,R6 \ 00000078 030080E0 ADD R0,R0,R3 \ 0000007C 1E0100EF SWI +286 2153 mfree(p); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 150000EF SWI +21 2154 sendq_l+=j; \ 00000088 CC0294E5 LDR R0,[R4, #+716] \ 0000008C 000085E0 ADD R0,R5,R0 \ 00000090 CC0284E5 STR R0,[R4, #+716] 2155 return; \ 00000094 F083BDE8 POP {R4-R9,PC} 2156 } 2157 sendq_p=p; \ ??SendAnswer_2: \ 00000098 D06284E5 STR R6,[R4, #+720] 2158 sendq_l=j; \ 0000009C CC5284E5 STR R5,[R4, #+716] \ 000000A0 080000EA B ??SendAnswer_1 2159 } 2160 //Отправляем уже существующее в очереди 2161 while((i=sendq_l)!=0) 2162 { 2163 if (i>0x400) i=0x400; 2164 j=send(sock,(void *)sendq_p,i,0); 2165 snprintf(logmsg,255,"send res %d",j); 2166 SMART_REDRAW(); 2167 if (j<0) 2168 { 2169 j=*socklasterr(); 2170 if ((j==0xC9)||(j==0xD6)) 2171 { 2172 //Передали что хотели 2173 strcpy(logmsg,"Send delayed..."); 2174 return; //Видимо, надо ждать сообщения ENIP_BUFFER_FREE 2175 } 2176 else 2177 { 2178 //Ошибка 2179 LockSched(); 2180 ShowMSG(1,(int)"Send error!"); 2181 UnlockSched(); 2182 end_socket(); 2183 return; 2184 } 2185 } 2186 memcpy((void *)sendq_p,(char *)sendq_p+j,sendq_l-=j); //Удалили переданное \ ??SendAnswer_3: \ 000000A4 CC0294E5 LDR R0,[R4, #+716] \ 000000A8 052040E0 SUB R2,R0,R5 \ 000000AC CC2284E5 STR R2,[R4, #+716] \ 000000B0 D00294E5 LDR R0,[R4, #+720] \ 000000B4 001085E0 ADD R1,R5,R0 \ 000000B8 1E0100EF SWI +286 2187 if (j` \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 400E80E3 ORR R0,R0,#0x400 \ 000000E8 000057E1 CMP R7,R0 \ 000000EC 940494E5 LDR R0,[R4, #+1172] \ 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 E400A0E3 MOV R0,#+228 \ 00000108 700D80E3 ORR R0,R0,#0x1C00 \ 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} 2196 } 2197 mfree((void *)sendq_p); \ ??SendAnswer_4: \ 00000170 0100A0E1 MOV R0,R1 \ 00000174 150000EF SWI +21 2198 sendq_p=NULL; \ 00000178 D06284E5 STR R6,[R4, #+720] 2199 } \ 0000017C F083BDE8 POP {R4-R9,PC} ;; return \ ??SendAnswer_5: \ 00000180 ........ DC32 `?` 2200 2201 \ In segment CODE, align 4, keep-with-next 2202 void send_login(int dummy, TPKT *p) 2203 { 2204 connect_state=2; 2205 char rev[16]; 2206 //Кто будет менять в этом месте идентификатор клиента, буду банить на уровне сервера!!! 2207 //А Вова будет банить на форуме! 2208 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,??DataTable84 ;; i_rc \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 0200A0E3 MOV R0,#+2 \ 0000001C 900486E5 STR R0,[R6, #+1168] \ 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 2209 2210 TPKT *p2=malloc(sizeof(PKT)+8); \ 00000034 1000A0E3 MOV R0,#+16 \ 00000038 140000EF SWI +20 \ 0000003C 0070A0E1 MOV R7,R0 2211 p2->pkt.uin=UIN; \ 00000040 ........ LDR R0,??DataTable86 ;; UIN 2212 p2->pkt.type=T_SETCLIENT_ID; 2213 p2->pkt.data_len=8; 2214 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 2215 SendAnswer(0,p2); \ 0000006C 0710A0E1 MOV R1,R7 \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 ........ BL SendAnswer 2216 SendAnswer(dummy,p); \ 00000078 0510A0E1 MOV R1,R5 \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 ........ BL SendAnswer 2217 RXstate=-(int)sizeof(PKT); \ 00000084 0700E0E3 MVN R0,#+7 \ 00000088 8C0486E5 STR R0,[R6, #+1164] 2218 } \ 0000008C FF80BDE8 POP {R0-R7,PC} ;; return \ ??send_login_0: \ 00000090 ........ DC32 `?` 2219 \ In segment CODE, align 4, keep-with-next 2220 void do_ping(void) 2221 { \ do_ping: \ 00000000 00402DE9 PUSH {LR} 2222 TPKT *pingp=malloc(sizeof(PKT)); \ 00000004 0800A0E3 MOV R0,#+8 \ 00000008 140000EF SWI +20 2223 pingp->pkt.uin=UIN; \ 0000000C ........ LDR R1,??DataTable86 ;; UIN \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 2224 pingp->pkt.type=0; \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C B410C0E1 STRH R1,[R0, #+4] 2225 pingp->pkt.data_len=0; \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2226 SendAnswer(0,pingp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 0040BDE8 POP {LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 2227 } 2228 \ In segment CODE, align 4, keep-with-next 2229 void SendMSGACK(int i) 2230 { \ SendMSGACK: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 2231 TPKT *ackp=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 2232 ackp->pkt.uin=i; \ 00000010 004080E5 STR R4,[R0, #+0] 2233 ackp->pkt.type=T_MSGACK; \ 00000014 1710A0E3 MOV R1,#+23 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2234 ackp->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2235 SendAnswer(0,ackp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 1040BDE8 POP {R4,LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 2236 } 2237 \ In segment CODE, align 4, keep-with-next 2238 void RequestXText(unsigned int uin) 2239 { \ RequestXText: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 2240 TPKT *p=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 2241 p->pkt.uin=uin; \ 00000010 004080E5 STR R4,[R0, #+0] 2242 p->pkt.type=T_XTEXT_REQ; \ 00000014 1810A0E3 MOV R1,#+24 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2243 p->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2244 SUBPROC((void *)SendAnswer,0,p); \ 00000024 0020A0E1 MOV R2,R0 \ 00000028 ........ LDR R0,??DataTable87 ;; SendAnswer \ 0000002C 710100EF SWI +369 2245 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 2246 2247 int ping_time; 2248 char I_UIN[9]; 2249 char sds[]="%s%d.%s"; 2250 char mp3[]="mp3"; 2251 char wav[]="wav"; 2252 char amr[]="amr"; 2253 int ShowLoadScreen=1; 2254 \ In segment CODE, align 4, keep-with-next 2255 void get_answer(void) 2256 { \ get_answer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2257 void *p; 2258 int i=RXstate; \ 00000004 ........ LDR R5,??DataTable98 ;; i_rc \ 00000008 42DE4DE2 SUB SP,SP,#+1056 2259 int j; 2260 int n; 2261 char rb[1024]; 2262 char *rp=rb; 2263 if (connect_state<2) return; \ 0000000C 900495E5 LDR R0,[R5, #+1168] \ 00000010 8C8495E5 LDR R8,[R5, #+1164] \ 00000014 20108DE2 ADD R1,SP,#+32 \ 00000018 00108DE5 STR R1,[SP, #+0] \ 0000001C 020050E3 CMP R0,#+2 \ 00000020 7C0100BA BLT ??get_answer_1 \ 00000024 0A0078E3 CMN R8,#+10 \ 00000028 7A01000A BEQ ??get_answer_1 2264 if (i==EOP) return; 2265 j=recv(sock,rb,sizeof(rb),0); \ 0000002C 940495E5 LDR R0,[R5, #+1172] \ 00000030 0030A0E3 MOV R3,#+0 \ 00000034 402EA0E3 MOV R2,#+1024 \ 00000038 780100EF SWI +376 \ 0000003C 0060A0E1 MOV R6,R0 \ 00000040 0990A0E3 MOV R9,#+9 \ 00000044 429C89E3 ORR R9,R9,#0x4200 \ 00000048 0E0000EA B ??get_answer_2 2266 while(j>0) 2267 { 2268 if (i<0) 2269 { 2270 //Принимаем заголовок 2271 n=-i; //Требуемое количество байт 2272 if (j=0) 2279 { 2280 //Принимаем тельце ;) 2281 n=RXbuf.pkt.data_len; //Всего в тельце 2282 if (n>16383) 2283 { 2284 //Слишком много 2285 strcpy(logmsg,LG_GRBADPACKET); 2286 end_socket(); 2287 RXstate=EOP; 2288 return; 2289 } 2290 n-=i; //Количество требуемых байт (общая длинна тельца-текущая позиция) 2291 if (n>0) 2292 { 2293 if (jisIndividSet)//Если индивидуальные натсройки(меню на долгое вправо) 2373 { 2374 if(t->issound) Play(sndMsg);//если звук включен то играем 2375 break; 2376 } 2377 else 2378 if(t->automsgcount < automsgcount && away_m)//если сигналы автоответчика 2379 { 2380 Play(sndMsg); 2381 break; 2382 } 2383 else 2384 if(t->isaccess)//если удаленный доступ ;) 2385 { 2386 if(t->signals) Play(sndMsg); 2387 break; 2388 } 2389 else//в остальный случаях 2390 Play(sndMsg); 2391 } 2392 else 2393 { 2394 uins=RXbuf.pkt.uin; 2395 volatile int hFile_ex; 2396 unsigned int io_error_ex = 0; 2397 char ext[4]; 2398 // __root const CFG_CBOX_ITEM cfgcbox18_3_2[2]={"Mp3","Wav","Amr"}; 2399 switch(ext_type_sounds) 2400 { 2401 case 0: sprintf(ext,percent_s,mp3); break; 2402 case 1: sprintf(ext,percent_s,wav); break; 2403 case 2: sprintf(ext,percent_s,amr); break; 2404 default : sprintf(ext,percent_s,mp3); break; 2405 } 2406 2407 sprintf(talk_sound, sds, sndMsg2, uins, ext); 2408 hFile_ex = fopen(talk_sound,A_ReadOnly + A_BIN,P_READ, &io_error_ex); 2409 if(hFile_ex!=-1) 2410 { 2411 fclose(hFile_ex, &io_error_ex); 2412 Play(talk_sound); 2413 } 2414 else 2415 Play(sndMsg); 2416 } 2417 } 2418 break; 2419 case T_SSLRESP: 2420 LockSched(); 2421 ShowMSG(1,(int)RXbuf.data); 2422 UnlockSched(); 2423 break; 2424 case T_SRV_ACK: 2425 if (FindContactLOGQByAck(&RXbuf)) 2426 { 2427 Play(sndMsgSent); 2428 if(!ShowLoadScreen) SMART_REDRAW(); 2429 } 2430 case T_CLIENT_ACK: 2431 p=malloc(sizeof(PKT)+2); 2432 memcpy(p,&RXbuf,sizeof(PKT)+2); 2433 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); 2434 break; 2435 case T_ECHORET: 2436 { 2437 TDate d; 2438 TTime t; 2439 TTime *pt=(TTime *)(RXbuf.data); 2440 int s1; 2441 int s2; 2442 GetDateTime(&d,&t); 2443 s1=t.hour*3600+t.min*60+t.sec; 2444 s2=pt->hour*3600+pt->min*60+pt->sec; 2445 s1-=s2; 2446 if (s1<0) s1+=86400; 2447 curping=s1; 2448 snprintf(logmsg,255,"Ping %d-%d seconds!",s1,s1+1); 2449 sprintf(PINGO, "Ping: %d sec",s1); 2450 LockSched(); 2451 if(janis==1) 2452 { 2453 // ShowMSG(1,(int)logmsg); 2454 PrintTimer=5; 2455 strcpy(prmsg,logmsg); 2456 Play(pingsnd); 2457 janis=0; 2458 } 2459 else 2460 { 2461 if(ping_time==0) 2462 { 2463 ping_time=ping_time_config; 2464 Play(pingsnd); 2465 } 2466 else 2467 ping_time--; 2468 } 2469 UnlockSched(); 2470 } 2471 break; 2472 case T_LASTPRIVACY: 2473 n=i+sizeof(PKT); \ ??get_answer_3: \ 0000004C 0040A0E1 MOV R4,R0 2474 p=malloc(n); \ ??get_answer_4: \ 00000050 140000EF SWI +20 \ 00000054 00B0A0E1 MOV R11,R0 2475 memcpy(p,&RXbuf,n); \ 00000058 0420A0E1 MOV R2,R4 \ ??get_answer_5: \ 0000005C 0710A0E1 MOV R1,R7 \ 00000060 1E0100EF SWI +286 2476 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); \ 00000064 940495E5 LDR R0,[R5, #+1172] \ 00000068 0B30A0E1 MOV R3,R11 \ 0000006C 01002DE9 PUSH {R0} \ 00000070 0020A0E3 MOV R2,#+0 \ 00000074 0810A0E1 MOV R1,R8 \ 00000078 0900A0E1 MOV R0,R9 \ 0000007C 000100EF SWI +256 \ ??get_answer_6: \ 00000080 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning 2477 break; 2478 } 2479 i=-(int)sizeof(PKT); //А может еще есть данные \ ??get_answer_7: \ 00000084 0780E0E3 MVN R8,#+7 \ ??get_answer_2: \ 00000088 010056E3 CMP R6,#+1 \ 0000008C 600100BA BLT ??get_answer_8 \ 00000090 88759FE5 LDR R7,??get_answer_9 ;; RXbuf \ 00000094 000058E3 CMP R8,#+0 \ 00000098 0C00005A BPL ??get_answer_10 \ 0000009C 00109DE5 LDR R1,[SP, #+0] \ 000000A0 004068E2 RSB R4,R8,#+0 \ 000000A4 040056E1 CMP R6,R4 \ 000000A8 0640A0B1 MOVLT R4,R6 \ 000000AC 0420A0E1 MOV R2,R4 \ 000000B0 070088E0 ADD R0,R8,R7 \ 000000B4 080080E2 ADD R0,R0,#+8 \ 000000B8 1E0100EF SWI +286 \ 000000BC 00109DE5 LDR R1,[SP, #+0] \ 000000C0 088084E0 ADD R8,R4,R8 \ 000000C4 046046E0 SUB R6,R6,R4 \ 000000C8 011084E0 ADD R1,R4,R1 \ 000000CC 00108DE5 STR R1,[SP, #+0] \ ??get_answer_10: \ 000000D0 000058E3 CMP R8,#+0 \ 000000D4 EBFFFF4A BMI ??get_answer_2 \ 000000D8 B640D7E1 LDRH R4,[R7, #+6] \ 000000DC E400A0E3 MOV R0,#+228 \ 000000E0 700D80E3 ORR R0,R0,#0x1C00 \ 000000E4 05A080E0 ADD R10,R0,R5 \ 000000E8 400C54E3 CMP R4,#+16384 \ 000000EC 070000BA BLT ??get_answer_11 \ 000000F0 2C159FE5 LDR R1,??get_answer_9+0x4 ;; Canvas + 396 \ 000000F4 0A00A0E1 MOV R0,R10 \ 000000F8 1A0000EF SWI +26 \ 000000FC ........ BL end_socket \ 00000100 0900E0E3 MVN R0,#+9 \ 00000104 8C0485E5 STR R0,[R5, #+1164] \ 00000108 42DE8DE2 ADD SP,SP,#+1056 \ 0000010C F08FBDE8 POP {R4-R11,PC} \ ??get_answer_11: \ 00000110 084044E0 SUB R4,R4,R8 \ 00000114 010054E3 CMP R4,#+1 \ 00000118 0B0000BA BLT ??get_answer_12 \ 0000011C 00109DE5 LDR R1,[SP, #+0] \ 00000120 040056E1 CMP R6,R4 \ 00000124 0640A0B1 MOVLT R4,R6 \ 00000128 0420A0E1 MOV R2,R4 \ 0000012C 070088E0 ADD R0,R8,R7 \ 00000130 080080E2 ADD R0,R0,#+8 \ 00000134 1E0100EF SWI +286 \ 00000138 00109DE5 LDR R1,[SP, #+0] \ 0000013C 088084E0 ADD R8,R4,R8 \ 00000140 046046E0 SUB R6,R6,R4 \ 00000144 011084E0 ADD R1,R4,R1 \ 00000148 00108DE5 STR R1,[SP, #+0] \ ??get_answer_12: \ 0000014C B600D7E1 LDRH R0,[R7, #+6] \ 00000150 080050E1 CMP R0,R8 \ 00000154 CBFFFF1A BNE ??get_answer_2 \ 00000158 981495E5 LDR R1,[R5, #+1176] \ 0000015C 080088E2 ADD R0,R8,#+8 \ 00000160 011080E0 ADD R1,R0,R1 \ 00000164 981485E5 STR R1,[R5, #+1176] \ 00000168 A01495E5 LDR R1,[R5, #+1184] \ 0000016C 0020A0E3 MOV R2,#+0 \ 00000170 011080E0 ADD R1,R0,R1 \ 00000174 A01485E5 STR R1,[R5, #+1184] \ 00000178 071088E0 ADD R1,R8,R7 \ 0000017C 0820C1E5 STRB R2,[R1, #+8] \ 00000180 B410D7E1 LDRH R1,[R7, #+4] \ 00000184 094088E2 ADD R4,R8,#+9 \ 00000188 AE80A0E3 MOV R8,#+174 \ 0000018C DE8C88E3 ORR R8,R8,#0xDE00 \ 00000190 031041E2 SUB R1,R1,#+3 \ 00000194 1C0051E3 CMP R1,#+28 \ 00000198 B9FFFF8A BHI ??get_answer_7 \ 0000019C 022F8FE2 ADR R2,??get_answer_0 \ 000001A0 8110A0E1 MOV R1,R1, LSL #+1 \ 000001A4 F12092E1 LDRSH R2,[R2, R1] \ 000001A8 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??get_answer_0: \ 000001AC 48000E00B5FF DC16 +72,+14,+65461,+65 \ 4100 \ 000001B4 2900B5FF2B00 DC16 +41,+65461,+43,+65461 \ B5FF \ 000001BC B5FFB5FFBF00 DC16 +65461,+65461,+191,+65461 \ B5FF \ 000001C4 B5FFC500CF00 DC16 +65461,+197,+207,+65461 \ B5FF \ 000001CC D40029002900 DC16 +212,+41,+41,+65461 \ B5FF \ 000001D4 B5FFB5FF2900 DC16 +65461,+65461,+41,+65461 \ B5FF \ 000001DC B5FFB5FFB5FF DC16 +65461,+65461,+65461,+65461 \ B5FF \ 000001E4 A7FF0000 DC16 +65447,+0 \ ??get_answer_13: \ 000001E8 0400A0E1 MOV R0,R4 \ 000001EC 140000EF SWI +20 \ 000001F0 00B0A0E1 MOV R11,R0 \ 000001F4 0420A0E1 MOV R2,R4 \ 000001F8 0710A0E1 MOV R1,R7 \ 000001FC 1E0100EF SWI +286 \ 00000200 940495E5 LDR R0,[R5, #+1172] \ 00000204 0B30A0E1 MOV R3,R11 \ 00000208 01002DE9 PUSH {R0} \ 0000020C 0020A0E3 MOV R2,#+0 \ 00000210 0810A0E1 MOV R1,R8 \ 00000214 0900A0E1 MOV R0,R9 \ 00000218 000100EF SWI +256 \ 0000021C 04049FE5 LDR R0,??get_answer_9+0x8 ;; sndStartup \ 00000220 ........ BL Play \ 00000224 083087E2 ADD R3,R7,#+8 \ 00000228 EC2F8FE2 ADR R2,??get_answer_14 ;; "%s" \ 0000022C FF10A0E3 MOV R1,#+255 \ 00000230 0A00A0E1 MOV R0,R10 \ 00000234 1B0100EF SWI +283 \ 00000238 0300A0E3 MOV R0,#+3 \ 0000023C 900485E5 STR R0,[R5, #+1168] \ 00000240 D40495E5 LDR R0,[R5, #+1236] \ 00000244 010040E2 SUB R0,R0,#+1 \ 00000248 D40485E5 STR R0,[R5, #+1236] \ 0000024C ........ BL SMART_REDRAW \ 00000250 8AFFFFEA B ??get_answer_6 \ ??get_answer_15: \ 00000254 0400A0E1 MOV R0,R4 \ 00000258 7CFFFFEA B ??get_answer_4 \ ??get_answer_16: \ 0000025C 0040A0E1 MOV R4,R0 \ 00000260 140000EF SWI +20 \ 00000264 00B0A0E1 MOV R11,R0 \ 00000268 0420A0E1 MOV R2,R4 \ 0000026C 0710A0E1 MOV R1,R7 \ 00000270 1E0100EF SWI +286 \ 00000274 B800D7E1 LDRH R0,[R7, #+8] \ 00000278 AC239FE5 LDR R2,??get_answer_9+0xC ;; Canvas + 408 \ 0000027C FF10A0E3 MOV R1,#+255 \ 00000280 01002DE9 PUSH {R0} \ 00000284 003097E5 LDR R3,[R7, #+0] \ 00000288 0A00A0E1 MOV R0,R10 \ 0000028C 1B0100EF SWI +283 \ 00000290 940495E5 LDR R0,[R5, #+1172] \ 00000294 0B30A0E1 MOV R3,R11 \ 00000298 01002DE9 PUSH {R0} \ 0000029C 0020A0E3 MOV R2,#+0 \ 000002A0 0810A0E1 MOV R1,R8 \ 000002A4 0900A0E1 MOV R0,R9 \ 000002A8 000100EF SWI +256 \ 000002AC 08D08DE2 ADD SP,SP,#+8 \ 000002B0 73FFFFEA B ??get_answer_7 \ ??get_answer_17: \ 000002B4 74239FE5 LDR R2,??get_answer_9+0x10 ;; Canvas + 420 \ 000002B8 083087E2 ADD R3,R7,#+8 \ 000002BC FF10A0E3 MOV R1,#+255 \ 000002C0 0A00A0E1 MOV R0,R10 \ 000002C4 1B0100EF SWI +283 \ 000002C8 ........ BL SMART_REDRAW \ 000002CC 6CFFFFEA B ??get_answer_7 \ ??get_answer_18: \ 000002D0 0400A0E1 MOV R0,R4 \ 000002D4 140000EF SWI +20 \ 000002D8 00B0A0E1 MOV R11,R0 \ 000002DC 0420A0E1 MOV R2,R4 \ 000002E0 0710A0E1 MOV R1,R7 \ 000002E4 1E0100EF SWI +286 \ 000002E8 08008BE2 ADD R0,R11,#+8 \ 000002EC 030000EA B ??get_answer_19 \ ??get_answer_20: \ 000002F0 030051E3 CMP R1,#+3 \ 000002F4 2010A0B3 MOVLT R1,#+32 \ 000002F8 0010C0B5 STRBLT R1,[R0, #+0] \ 000002FC 010080E2 ADD R0,R0,#+1 \ ??get_answer_19: \ 00000300 0010D0E5 LDRB R1,[R0, #+0] \ 00000304 000051E3 CMP R1,#+0 \ 00000308 F8FFFF1A BNE ??get_answer_20 \ 0000030C 002097E5 LDR R2,[R7, #+0] \ 00000310 1C139FE5 LDR R1,??get_answer_9+0x14 ;; Canvas + 428 \ 00000314 B400A0E3 MOV R0,#+180 \ 00000318 800D80E3 ORR R0,R0,#0x2000 \ 0000031C 054080E0 ADD R4,R0,R5 \ 00000320 0400A0E1 MOV R0,R4 \ 00000324 160000EF SWI +22 \ 00000328 ........ LDR R0,??DataTable89 ;; ignor_list \ 0000032C 0410A0E1 MOV R1,R4 \ 00000330 180100EF SWI +280 \ 00000334 000050E3 CMP R0,#+0 \ 00000338 51FFFF1A BNE ??get_answer_7 \ 0000033C F4229FE5 LDR R2,??get_answer_9+0x18 ;; Canvas + 436 \ 00000340 F4429FE5 LDR R4,??get_answer_9+0x1C ;; sndMsg \ 00000344 080087E2 ADD R0,R7,#+8 \ 00000348 01002DE9 PUSH {R0} \ 0000034C 003097E5 LDR R3,[R7, #+0] \ 00000350 FF10A0E3 MOV R1,#+255 \ 00000354 0A00A0E1 MOV R0,R10 \ 00000358 1B0100EF SWI +283 \ 0000035C 980495E5 LDR R0,[R5, #+1176] \ 00000360 ........ BL SendMSGACK \ 00000364 940495E5 LDR R0,[R5, #+1172] \ 00000368 0B30A0E1 MOV R3,R11 \ 0000036C 01002DE9 PUSH {R0} \ 00000370 0020A0E3 MOV R2,#+0 \ 00000374 0810A0E1 MOV R1,R8 \ 00000378 0900A0E1 MOV R0,R9 \ 0000037C 000100EF SWI +256 \ 00000380 ........ BL SMART_REDRAW \ 00000384 ........ LDR R0,??DataTable90 ;; extended_sounds \ 00000388 000090E5 LDR R0,[R0, #+0] \ 0000038C 08D08DE2 ADD SP,SP,#+8 \ 00000390 000050E3 CMP R0,#+0 \ 00000394 000097E5 LDR R0,[R7, #+0] \ 00000398 1A00001A BNE ??get_answer_21 \ 0000039C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000003A0 641090E5 LDR R1,[R0, #+100] \ 000003A4 000051E3 CMP R1,#+0 \ 000003A8 0500000A BEQ ??get_answer_22 \ 000003AC 6C0090E5 LDR R0,[R0, #+108] \ 000003B0 000050E3 CMP R0,#+0 \ 000003B4 32FFFF0A BEQ ??get_answer_7 \ ??get_answer_23: \ 000003B8 0400A0E1 MOV R0,R4 \ ??get_answer_24: \ 000003BC ........ BL Play \ 000003C0 2FFFFFEA B ??get_answer_7 \ ??get_answer_22: \ 000003C4 ........ LDR R2,??DataTable91 ;; automsgcount \ 000003C8 881090E5 LDR R1,[R0, #+136] \ 000003CC 002092E5 LDR R2,[R2, #+0] \ 000003D0 020051E1 CMP R1,R2 \ 000003D4 0200002A BCS ??get_answer_25 \ 000003D8 B01395E5 LDR R1,[R5, #+944] \ 000003DC 000051E3 CMP R1,#+0 \ 000003E0 F4FFFF1A BNE ??get_answer_23 \ ??get_answer_25: \ 000003E4 841090E5 LDR R1,[R0, #+132] \ 000003E8 000051E3 CMP R1,#+0 \ 000003EC 0300000A BEQ ??get_answer_26 \ 000003F0 800090E5 LDR R0,[R0, #+128] \ 000003F4 000050E3 CMP R0,#+0 \ 000003F8 21FFFF0A BEQ ??get_answer_7 \ 000003FC EDFFFFEA B ??get_answer_23 \ ??get_answer_26: \ 00000400 0400A0E1 MOV R0,R4 \ 00000404 ECFFFFEA B ??get_answer_24 \ ??get_answer_21: \ 00000408 BC0285E5 STR R0,[R5, #+700] \ 0000040C ........ LDR R0,??DataTable92 ;; ext_type_sounds \ 00000410 0010A0E3 MOV R1,#+0 \ 00000414 0C108DE5 STR R1,[SP, #+12] \ 00000418 000090E5 LDR R0,[R0, #+0] \ 0000041C 010050E2 SUBS R0,R0,#+1 \ 00000420 0300000A BEQ ??get_answer_27 \ 00000424 010050E2 SUBS R0,R0,#+1 \ 00000428 D000A003 MOVEQ R0,#+208 \ 0000042C C800A013 MOVNE R0,#+200 \ 00000430 000000EA B ??get_answer_28 \ ??get_answer_27: \ 00000434 CC00A0E3 MOV R0,#+204 \ ??get_answer_28: \ 00000438 ........ LDR R1,??DataTable93 ;; Canvas + 8 \ 0000043C 800D80E3 ORR R0,R0,#0x2000 \ 00000440 052080E0 ADD R2,R0,R5 \ 00000444 04008DE2 ADD R0,SP,#+4 \ 00000448 160000EF SWI +22 \ 0000044C EC219FE5 LDR R2,??get_answer_9+0x20 ;; sndMsg2 \ 00000450 04008DE2 ADD R0,SP,#+4 \ 00000454 01002DE9 PUSH {R0} \ 00000458 BC3295E5 LDR R3,[R5, #+700] \ 0000045C CC70A0E3 MOV R7,#+204 \ 00000460 707E87E3 ORR R7,R7,#0x700 \ 00000464 831D85E2 ADD R1,R5,#+8384 \ 00000468 050087E0 ADD R0,R7,R5 \ 0000046C 160000EF SWI +22 \ 00000470 10308DE2 ADD R3,SP,#+16 \ 00000474 8020A0E3 MOV R2,#+128 \ 00000478 801CA0E3 MOV R1,#+32768 \ 0000047C 050087E0 ADD R0,R7,R5 \ 00000480 0A0000EF SWI +10 \ 00000484 0C008DE5 STR R0,[SP, #+12] \ 00000488 0C009DE5 LDR R0,[SP, #+12] \ 0000048C 04D08DE2 ADD SP,SP,#+4 \ 00000490 010070E3 CMN R0,#+1 \ 00000494 D9FFFF0A BEQ ??get_answer_26 \ 00000498 08009DE5 LDR R0,[SP, #+8] \ 0000049C 0C108DE2 ADD R1,SP,#+12 \ 000004A0 0D0000EF SWI +13 \ 000004A4 050087E0 ADD R0,R7,R5 \ 000004A8 C3FFFFEA B ??get_answer_24 \ ??get_answer_29: \ 000004AC 460100EF SWI +326 \ 000004B0 081087E2 ADD R1,R7,#+8 \ 000004B4 0100A0E3 MOV R0,#+1 \ 000004B8 480100EF SWI +328 \ ??get_answer_30: \ 000004BC 470100EF SWI +327 \ 000004C0 EFFEFFEA B ??get_answer_7 \ ??get_answer_31: \ 000004C4 0700A0E1 MOV R0,R7 \ 000004C8 ........ BL FindContactLOGQByAck \ 000004CC 000050E3 CMP R0,#+0 \ 000004D0 0500000A BEQ ??get_answer_32 \ 000004D4 68019FE5 LDR R0,??get_answer_9+0x24 ;; sndMsgSent \ 000004D8 ........ BL Play \ 000004DC DC0495E5 LDR R0,[R5, #+1244] \ 000004E0 000050E3 CMP R0,#+0 \ 000004E4 0000001A BNE ??get_answer_32 \ 000004E8 ........ BL SMART_REDRAW \ ??get_answer_32: \ 000004EC 0A00A0E3 MOV R0,#+10 \ 000004F0 140000EF SWI +20 \ 000004F4 00B0A0E1 MOV R11,R0 \ 000004F8 0A20A0E3 MOV R2,#+10 \ 000004FC D6FEFFEA B ??get_answer_5 \ ??get_answer_33: \ 00000500 10108DE2 ADD R1,SP,#+16 \ 00000504 18008DE2 ADD R0,SP,#+24 \ 00000508 B40000EF SWI +180 \ 0000050C 1000DDE5 LDRB R0,[SP, #+16] \ 00000510 1120DDE5 LDRB R2,[SP, #+17] \ 00000514 E11EA0E3 MOV R1,#+3600 \ 00000518 3C30A0E3 MOV R3,#+60 \ 0000051C 930202E0 MUL R2,R3,R2 \ 00000520 912020E0 MLA R0,R1,R0,R2 \ 00000524 1210DDE5 LDRB R1,[SP, #+18] \ 00000528 E12EA0E3 MOV R2,#+3600 \ 0000052C 000081E0 ADD R0,R1,R0 \ 00000530 0810D7E5 LDRB R1,[R7, #+8] \ 00000534 920101E0 MUL R1,R2,R1 \ 00000538 08219FE5 LDR R2,??get_answer_9+0x28 ;; Canvas + 448 \ 0000053C 010040E0 SUB R0,R0,R1 \ 00000540 0910D7E5 LDRB R1,[R7, #+9] \ 00000544 930101E0 MUL R1,R3,R1 \ 00000548 010040E0 SUB R0,R0,R1 \ 0000054C 0A10D7E5 LDRB R1,[R7, #+10] \ 00000550 ........ LDR R7,??DataTable94 ;; janis \ 00000554 014050E0 SUBS R4,R0,R1 \ 00000558 500BA043 MOVMI R0,#+81920 \ 0000055C 460D8043 ORRMI R0,R0,#0x1180 \ 00000560 04408040 ADDMI R4,R0,R4 \ 00000564 C84285E5 STR R4,[R5, #+712] \ 00000568 010084E2 ADD R0,R4,#+1 \ 0000056C 01002DE9 PUSH {R0} \ 00000570 0430A0E1 MOV R3,R4 \ 00000574 FF10A0E3 MOV R1,#+255 \ 00000578 0A00A0E1 MOV R0,R10 \ 0000057C 1B0100EF SWI +283 \ 00000580 C4109FE5 LDR R1,??get_answer_9+0x2C ;; Canvas + 468 \ 00000584 0420A0E1 MOV R2,R4 \ 00000588 C0409FE5 LDR R4,??get_answer_9+0x30 ;; pingsnd \ 0000058C 9C00A0E3 MOV R0,#+156 \ 00000590 640D80E3 ORR R0,R0,#0x1900 \ 00000594 050080E0 ADD R0,R0,R5 \ 00000598 160000EF SWI +22 \ 0000059C 460100EF SWI +326 \ 000005A0 000097E5 LDR R0,[R7, #+0] \ 000005A4 04D08DE2 ADD SP,SP,#+4 \ 000005A8 010050E3 CMP R0,#+1 \ 000005AC 0C00001A BNE ??get_answer_34 \ 000005B0 0500A0E3 MOV R0,#+5 \ 000005B4 C40285E5 STR R0,[R5, #+708] \ 000005B8 0A10A0E1 MOV R1,R10 \ 000005BC 8C00A0E3 MOV R0,#+140 \ 000005C0 600D80E3 ORR R0,R0,#0x1800 \ 000005C4 050080E0 ADD R0,R0,R5 \ 000005C8 1A0000EF SWI +26 \ 000005CC 0400A0E1 MOV R0,R4 \ 000005D0 ........ BL Play \ 000005D4 0000A0E3 MOV R0,#+0 \ 000005D8 000087E5 STR R0,[R7, #+0] \ 000005DC B6FFFFEA B ??get_answer_30 \ ??get_answer_14: \ 000005E0 25730000 DC8 "%s",+0 \ ??get_answer_34: \ 000005E4 D80495E5 LDR R0,[R5, #+1240] \ 000005E8 000050E3 CMP R0,#+0 \ 000005EC 0500001A BNE ??get_answer_35 \ 000005F0 5C009FE5 LDR R0,??get_answer_9+0x34 ;; ping_time_config \ 000005F4 000090E5 LDR R0,[R0, #+0] \ 000005F8 D80485E5 STR R0,[R5, #+1240] \ 000005FC 0400A0E1 MOV R0,R4 \ 00000600 ........ BL Play \ 00000604 ACFFFFEA B ??get_answer_30 \ ??get_answer_35: \ 00000608 010040E2 SUB R0,R0,#+1 \ 0000060C D80485E5 STR R0,[R5, #+1240] \ 00000610 A9FFFFEA B ??get_answer_30 2480 } 2481 } 2482 } 2483 RXstate=i; \ ??get_answer_8: \ 00000614 8C8485E5 STR R8,[R5, #+1164] 2484 // GBS_StartTimerProc(&tmr_dorecv,3000,dorecv); 2485 // SMART_REDRAW(); 2486 } \ ??get_answer_1: \ 00000618 42DE8DE2 ADD SP,SP,#+1056 ;; stack cleaning \ 0000061C F08FBDE8 POP {R4-R11,PC} ;; return \ ??get_answer_9: \ 00000620 ........ DC32 RXbuf \ 00000624 ........ DC32 Canvas + 396 \ 00000628 ........ DC32 sndStartup \ 0000062C ........ DC32 Canvas + 408 \ 00000630 ........ DC32 Canvas + 420 \ 00000634 ........ DC32 Canvas + 428 \ 00000638 ........ DC32 Canvas + 436 \ 0000063C ........ DC32 sndMsg \ 00000640 ........ DC32 sndMsg2 \ 00000644 ........ DC32 sndMsgSent \ 00000648 ........ DC32 Canvas + 448 \ 0000064C ........ DC32 Canvas + 468 \ 00000650 ........ DC32 pingsnd \ 00000654 ........ DC32 ping_time_config 2487 2488 2489 //=====================add to main info==================== 2490 2491 //Сюда я не лез...и че та желания нет...kluchnik ;) 2492 2493 char a_txt[45]; 2494 char s_txt[45]; 2495 char d_txt[45]; 2496 char f_txt[45]; 2497 char g_txt[45]; 2498 unsigned int main_msg_timer2; \ In segment CODE, align 4, keep-with-next 2499 void AddToMain(const char *nameu,char *si) 2500 { \ AddToMain: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0180A0E1 MOV R8,R1 2501 char *de=malloc(64); \ 00000010 4000A0E3 MOV R0,#+64 \ 00000014 140000EF SWI +20 \ 00000018 0050A0E1 MOV R5,R0 2502 int text_l; 2503 int iz; 2504 int name_l; 2505 name_l=0; 2506 text_l=0; 2507 name_l=strlen(nameu); \ 0000001C 0400A0E1 MOV R0,R4 \ 00000020 1B0000EF SWI +27 2508 iz=0; 2509 #ifdef ELKA 2510 text_l=main_lenght-name_l; \ 00000024 FC119FE5 LDR R1,??AddToMain_0 ;; main_lenght \ 00000028 0070A0E3 MOV R7,#+0 \ 0000002C 001091E5 LDR R1,[R1, #+0] 2511 #else 2512 text_l=main_lenght-name_l; 2513 #endif 2514 2515 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 2516 { 2517 while(text_l!=0) 2518 { 2519 de[iz]=si[iz]; 2520 iz++; 2521 text_l--; 2522 } 2523 if(use_cutter) 2524 { 2525 de[iz]='.'; 2526 iz++; 2527 de[iz]='.'; 2528 iz++; 2529 de[iz]='.'; 2530 iz++; 2531 } 2532 de[iz]='\0'; 2533 } 2534 else 2535 strcpy(de, si); \ 00000048 0810A0E1 MOV R1,R8 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 1A0000EF SWI +26 2536 iz=0; \ ??AddToMain_2: \ 00000054 0070A0E3 MOV R7,#+0 \ 00000058 1A0000EA B ??AddToMain_3 \ ??AddToMain_4: \ 0000005C 0810D7E7 LDRB R1,[R7, +R8] \ 00000060 019049E2 SUB R9,R9,#+1 \ 00000064 0510C7E7 STRB R1,[R7, +R5] \ 00000068 0070A0E1 MOV R7,R0 \ ??AddToMain_1: \ 0000006C 010087E2 ADD R0,R7,#+1 \ 00000070 000059E3 CMP R9,#+0 \ 00000074 F8FFFF1A BNE ??AddToMain_4 \ 00000078 AC119FE5 LDR R1,??AddToMain_0+0x4 ;; use_cutter \ 0000007C 001091E5 LDR R1,[R1, #+0] \ 00000080 000051E3 CMP R1,#+0 \ 00000084 0500000A BEQ ??AddToMain_5 \ 00000088 2E10A0E3 MOV R1,#+46 \ 0000008C 0510C7E7 STRB R1,[R7, +R5] \ 00000090 0510C0E7 STRB R1,[R0, +R5] \ 00000094 010080E2 ADD R0,R0,#+1 \ 00000098 0510C0E7 STRB R1,[R0, +R5] \ 0000009C 017080E2 ADD R7,R0,#+1 \ ??AddToMain_5: \ 000000A0 0560C7E7 STRB R6,[R7, +R5] \ 000000A4 EAFFFFEA B ??AddToMain_2 2537 while(strlen(de)!=iz) 2538 { 2539 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] 2540 if(de[iz]==0x0A) de[iz]=0x20; \ 000000B8 0510D7E7 LDRB R1,[R7, +R5] \ 000000BC 0A0051E3 CMP R1,#+10 \ 000000C0 0500C707 STRBEQ R0,[R7, +R5] 2541 iz++; \ 000000C4 017087E2 ADD R7,R7,#+1 2542 } \ ??AddToMain_3: \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 1B0000EF SWI +27 \ 000000D0 070050E1 CMP R0,R7 \ 000000D4 F3FFFF1A BNE ??AddToMain_6 2543 de[iz]='\0'; \ 000000D8 0560C7E7 STRB R6,[R7, +R5] 2544 if(main_count==0) sprintf(a_txt, "%s: %s", nameu,de); \ 000000DC ........ LDR R6,??DataTable98 ;; i_rc \ 000000E0 48719FE5 LDR R7,??AddToMain_0+0x8 ;; `?` \ 000000E4 D410A0E3 MOV R1,#+212 \ 000000E8 801D81E3 ORR R1,R1,#0x2000 \ 000000EC 061081E0 ADD R1,R1,R6 \ 000000F0 00108DE5 STR R1,[SP, #+0] \ 000000F4 D40296E5 LDR R0,[R6, #+724] \ 000000F8 000050E3 CMP R0,#+0 \ 000000FC 0400001A BNE ??AddToMain_7 \ 00000100 00009DE5 LDR R0,[SP, #+0] \ 00000104 0530A0E1 MOV R3,R5 \ 00000108 0420A0E1 MOV R2,R4 \ 0000010C 0710A0E1 MOV R1,R7 \ 00000110 160000EF SWI +22 2545 if(main_count==1) sprintf(s_txt, "%s: %s", nameu,de); \ ??AddToMain_7: \ 00000114 0400A0E3 MOV R0,#+4 \ 00000118 840D80E3 ORR R0,R0,#0x2100 \ 0000011C 068080E0 ADD R8,R0,R6 \ 00000120 D40296E5 LDR R0,[R6, #+724] \ 00000124 010050E3 CMP R0,#+1 \ 00000128 0400001A BNE ??AddToMain_8 \ 0000012C 0530A0E1 MOV R3,R5 \ 00000130 0420A0E1 MOV R2,R4 \ 00000134 0710A0E1 MOV R1,R7 \ 00000138 0800A0E1 MOV R0,R8 \ 0000013C 160000EF SWI +22 2546 if(main_count==2) sprintf(d_txt, "%s: %s", nameu,de); \ ??AddToMain_8: \ 00000140 3400A0E3 MOV R0,#+52 \ 00000144 840D80E3 ORR R0,R0,#0x2100 \ 00000148 069080E0 ADD R9,R0,R6 \ 0000014C D40296E5 LDR R0,[R6, #+724] \ 00000150 020050E3 CMP R0,#+2 \ 00000154 0400001A BNE ??AddToMain_9 \ 00000158 0530A0E1 MOV R3,R5 \ 0000015C 0420A0E1 MOV R2,R4 \ 00000160 0710A0E1 MOV R1,R7 \ 00000164 0900A0E1 MOV R0,R9 \ 00000168 160000EF SWI +22 2547 if(main_count==3) sprintf(f_txt, "%s: %s", nameu,de); \ ??AddToMain_9: \ 0000016C 6400A0E3 MOV R0,#+100 \ 00000170 840D80E3 ORR R0,R0,#0x2100 \ 00000174 06A080E0 ADD R10,R0,R6 \ 00000178 D40296E5 LDR R0,[R6, #+724] \ 0000017C 030050E3 CMP R0,#+3 \ 00000180 0400001A BNE ??AddToMain_10 \ 00000184 0530A0E1 MOV R3,R5 \ 00000188 0420A0E1 MOV R2,R4 \ 0000018C 0710A0E1 MOV R1,R7 \ 00000190 0A00A0E1 MOV R0,R10 \ 00000194 160000EF SWI +22 2548 if(main_count==4) sprintf(g_txt, "%s: %s", nameu,de); \ ??AddToMain_10: \ 00000198 9400A0E3 MOV R0,#+148 \ 0000019C 840D80E3 ORR R0,R0,#0x2100 \ 000001A0 06B080E0 ADD R11,R0,R6 \ 000001A4 D40296E5 LDR R0,[R6, #+724] \ 000001A8 040050E3 CMP R0,#+4 \ 000001AC 0400001A BNE ??AddToMain_11 \ 000001B0 0530A0E1 MOV R3,R5 \ 000001B4 0420A0E1 MOV R2,R4 \ 000001B8 0710A0E1 MOV R1,R7 \ 000001BC 0B00A0E1 MOV R0,R11 \ 000001C0 160000EF SWI +22 2549 if(main_count>4) \ ??AddToMain_11: \ 000001C4 D40296E5 LDR R0,[R6, #+724] \ 000001C8 050050E3 CMP R0,#+5 \ 000001CC 100000BA BLT ??AddToMain_12 2550 { 2551 strcpy(a_txt, s_txt); \ 000001D0 00009DE5 LDR R0,[SP, #+0] \ 000001D4 0810A0E1 MOV R1,R8 \ 000001D8 1A0000EF SWI +26 2552 strcpy(s_txt, d_txt); \ 000001DC 0910A0E1 MOV R1,R9 \ 000001E0 0800A0E1 MOV R0,R8 \ 000001E4 1A0000EF SWI +26 2553 strcpy(d_txt, f_txt); \ 000001E8 0A10A0E1 MOV R1,R10 \ 000001EC 0900A0E1 MOV R0,R9 \ 000001F0 1A0000EF SWI +26 2554 strcpy(f_txt, g_txt); \ 000001F4 0B10A0E1 MOV R1,R11 \ 000001F8 0A00A0E1 MOV R0,R10 \ 000001FC 1A0000EF SWI +26 2555 sprintf(g_txt, "%s: %s", nameu,de); \ 00000200 0530A0E1 MOV R3,R5 \ 00000204 0420A0E1 MOV R2,R4 \ 00000208 0710A0E1 MOV R1,R7 \ 0000020C 0B00A0E1 MOV R0,R11 \ 00000210 160000EF SWI +22 2556 } 2557 mfree(de); \ ??AddToMain_12: \ 00000214 0500A0E1 MOV R0,R5 \ 00000218 150000EF SWI +21 2558 main_d=1; \ 0000021C 0100A0E3 MOV R0,#+1 \ 00000220 A80286E5 STR R0,[R6, #+680] 2559 } \ 00000224 F18FBDE8 POP {R0,R4-R11,PC} ;; return \ ??AddToMain_0: \ 00000228 ........ DC32 main_lenght \ 0000022C ........ DC32 use_cutter \ 00000230 ........ DC32 `?` 2560 2561 //======================add to main info================ 2562 2563 int NEW_MSG; 2564 \ In segment CODE, align 4, keep-with-next 2565 void AddStringToLog(CLIST *t, int code, char *s, const char *name, unsigned int IDforACK,int flag) 2566 { \ 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 2567 char hs[128], *lastX; 2568 TTime tt; 2569 TDate d; 2570 GetDateTime(&d,&tt); \ 00000020 0D10A0E1 MOV R1,SP \ 00000024 08008DE2 ADD R0,SP,#+8 \ 00000028 B40000EF SWI +180 2571 int i; 2572 2573 // if(code == 3 && !LOG_XTXT) return; //Нl нуcно nоodrн?nь cennnrnуn 2574 if ( code==3 && NOT_LOG_SAME_XTXT ) \ 0000002C 030055E3 CMP R5,#+3 \ 00000030 1600001A BNE ??AddStringToLog_0 \ 00000034 0C029FE5 LDR R0,??AddStringToLog_1 ;; NOT_LOG_SAME_XTXT \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 1200000A BEQ ??AddStringToLog_0 2575 { 2576 #ifdef kluchnik 2577 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 2588 if(code != 3 || ((LOG_XTXT) && (flag)))//Нужно сохранять иксстатус \ 000000D0 030055E3 CMP R5,#+3 \ 000000D4 14D08DE2 ADD SP,SP,#+20 \ 000000D8 0400001A BNE ??AddStringToLog_4 \ 000000DC 6C019FE5 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 2589 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 2590 2591 LOGQ *p=NewLOGQ(s); \ ??AddStringToLog_5: \ 00000104 0800A0E1 MOV R0,R8 \ 00000108 ........ BL NewLOGQ \ 0000010C 0080A0E1 MOV R8,R0 2592 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 2593 p->type=code; \ 00000148 0C5088E5 STR R5,[R8, #+12] 2594 p->ID=IDforACK; //0-32767 \ 0000014C 087088E5 STR R7,[R8, #+8] 2595 i=AddLOGQ(&t->log,p); \ 00000150 0810A0E1 MOV R1,R8 \ 00000154 A00084E2 ADD R0,R4,#+160 \ 00000158 ........ BL AddLOGQ \ 0000015C 0060A0E1 MOV R6,R0 \ 00000160 EC009FE5 LDR R0,??AddStringToLog_1+0xC ;; MAXLOGMSG \ 00000164 007090E5 LDR R7,[R0, #+0] \ 00000168 14D08DE2 ADD SP,SP,#+20 \ 0000016C 060057E1 CMP R7,R6 \ 00000170 0900002A BCS ??AddStringToLog_6 2596 while(i>MAXLOGMSG) 2597 { 2598 if (t->log==t->last_log) t->last_log=t->last_log->next; \ ??AddStringToLog_7: \ 00000174 A80094E5 LDR R0,[R4, #+168] \ 00000178 A01094E5 LDR R1,[R4, #+160] 2599 RemoveLOGQ(&t->log,t->log); 2600 i--; \ 0000017C 016046E2 SUB R6,R6,#+1 \ 00000180 000051E1 CMP R1,R0 \ 00000184 00009005 LDREQ R0,[R0, #+0] \ 00000188 A8008405 STREQ R0,[R4, #+168] \ 0000018C A00084E2 ADD R0,R4,#+160 \ 00000190 ........ BL RemoveLOGQ 2601 } \ 00000194 060057E1 CMP R7,R6 \ 00000198 F5FFFF3A BCC ??AddStringToLog_7 2602 t->msg_count=i; \ ??AddStringToLog_6: \ 0000019C B06084E5 STR R6,[R4, #+176] 2603 if (!t->last_log) t->last_log=p; \ 000001A0 A80094E5 LDR R0,[R4, #+168] 2604 if (code==3) \ 000001A4 ........ LDR R6,??DataTable98 ;; i_rc \ 000001A8 000050E3 CMP R0,#+0 \ 000001AC A8808405 STREQ R8,[R4, #+168] \ 000001B0 030055E3 CMP R5,#+3 \ 000001B4 0D00001A BNE ??AddStringToLog_8 2605 { 2606 if (edchat_id) \ 000001B8 B80496E5 LDR R0,[R6, #+1208] \ 000001BC 000050E3 CMP R0,#+0 \ 000001C0 1C00000A BEQ ??AddStringToLog_9 2607 { 2608 void *data=FindGUIbyId(edchat_id,NULL); \ 000001C4 B80496E5 LDR R0,[R6, #+1208] \ 000001C8 0010A0E3 MOV R1,#+0 \ 000001CC 090200EF SWI +521 2609 if (data) \ 000001D0 000050E3 CMP R0,#+0 \ 000001D4 1700000A BEQ ??AddStringToLog_9 2610 { 2611 EDCHAT_STRUCT *ed_struct; 2612 ed_struct=EDIT_GetUserPointer(data); \ 000001D8 DF0100EF SWI +479 2613 if (ed_struct) \ 000001DC 000050E3 CMP R0,#+0 \ 000001E0 1400000A BEQ ??AddStringToLog_9 2614 { 2615 if (ed_struct->ed_contact==t) \ 000001E4 000090E5 LDR R0,[R0, #+0] \ 000001E8 040050E1 CMP R0,R4 \ 000001EC 1100001A BNE ??AddStringToLog_9 2616 { 2617 goto L_INC; 2618 } 2619 } 2620 } 2621 } 2622 goto L_NOINC; 2623 } 2624 L_INC: 2625 if (!t->isunread) total_unread++; \ ??AddStringToLog_8: \ 000001F0 900094E5 LDR R0,[R4, #+144] \ 000001F4 000050E3 CMP R0,#+0 \ 000001F8 AC049605 LDREQ R0,[R6, #+1196] \ 000001FC 01008002 ADDEQ R0,R0,#+1 \ 00000200 AC048605 STREQ R0,[R6, #+1196] 2626 if(NEW_MSG==1) \ 00000204 E40496E5 LDR R0,[R6, #+1252] \ 00000208 010050E3 CMP R0,#+1 \ 0000020C 0700001A BNE ??AddStringToLog_10 2627 { 2628 t->unread_msg++; \ 00000210 940094E5 LDR R0,[R4, #+148] \ 00000214 010080E2 ADD R0,R0,#+1 \ 00000218 940084E5 STR R0,[R4, #+148] 2629 total_unread2++; \ 0000021C F80296E5 LDR R0,[R6, #+760] \ 00000220 010080E2 ADD R0,R0,#+1 \ 00000224 F80286E5 STR R0,[R6, #+760] 2630 NEW_MSG=0; \ 00000228 0000A0E3 MOV R0,#+0 \ 0000022C E40486E5 STR R0,[R6, #+1252] 2631 } 2632 t->isunread=1; \ ??AddStringToLog_10: \ 00000230 0100A0E3 MOV R0,#+1 \ 00000234 900084E5 STR R0,[R4, #+144] 2633 L_NOINC: 2634 ChangeContactPos(t); \ ??AddStringToLog_9: \ 00000238 0400A0E1 MOV R0,R4 \ 0000023C ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2635 } \ ??AddStringToLog_3: \ 00000240 90D08DE2 ADD SP,SP,#+144 ;; stack cleaning \ 00000244 F087BDE8 POP {R4-R10,PC} ;; return \ ??AddStringToLog_1: \ 00000248 ........ DC32 NOT_LOG_SAME_XTXT \ 0000024C ........ DC32 `?` \ 00000250 ........ DC32 LOG_XTXT \ 00000254 ........ DC32 MAXLOGMSG 2636 2637 void ParseAnswer(WSHDR *ws, const char *s); 2638 2639 int time_to_stop_t9; 2640 \ In segment CODE, align 4, keep-with-next 2641 void ParseXStatusText(WSHDR *ws, const char *s, int color) 2642 { \ ParseXStatusText: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 2643 int c; 2644 int flag=0; \ 00000010 0070A0E3 MOV R7,#+0 2645 CutWSTR(ws,0); \ 00000014 0010A0E3 MOV R1,#+0 \ 00000018 260100EF SWI +294 2646 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} 2647 wsAppendChar(ws,0xE008); \ 0000002C 0810A0E3 MOV R1,#+8 \ 00000030 E01C81E3 ORR R1,R1,#0xE000 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 1C0000EF SWI +28 2648 wsAppendChar(ws,color); \ 0000003C 0610A0E1 MOV R1,R6 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1C0000EF SWI +28 2649 wsAppendChar(ws,0xE013); \ 00000048 1310A0E3 MOV R1,#+19 \ 0000004C E01C81E3 ORR R1,R1,#0xE000 \ 00000050 0A0000EA B ??ParseXStatusText_0 2650 while((c=*s++)) 2651 { 2652 if (c==13) \ ??ParseXStatusText_1: \ 00000054 0D0050E3 CMP R0,#+13 2653 { 2654 if (!flag) \ 00000058 00005703 CMPEQ R7,#+0 \ 0000005C 0500001A BNE ??ParseXStatusText_2 2655 { 2656 flag=1; \ 00000060 0170A0E3 MOV R7,#+1 2657 wsAppendChar(ws,0xE012); \ 00000064 1210A0E3 MOV R1,#+18 \ 00000068 E01C81E3 ORR R1,R1,#0xE000 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 1C0000EF SWI +28 2658 c=' '; \ 00000074 2000A0E3 MOV R0,#+32 2659 } 2660 } 2661 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 2662 } \ 00000088 ........ LDRB R0,[R5], #+1 \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 EFFFFF1A BNE ??ParseXStatusText_1 \ 00000094 F080BDE8 POP {R4-R7,PC} ;; return 2663 } 2664 2665 //Добавление итемов в чат при получении нового сообщения \ In segment CODE, align 4, keep-with-next 2666 void AddMsgToChat(void *data) 2667 { \ AddMsgToChat: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 2668 LOGQ *p; 2669 EDITCONTROL ec; 2670 EDITC_OPTIONS ec_options; 2671 EDCHAT_STRUCT *ed_struct; 2672 int j; 2673 int color, font, type; 2674 int zc; 2675 if (!data) return; \ 00000008 000050E3 CMP R0,#+0 \ 0000000C C400000A BEQ ??AddMsgToChat_0 2676 ed_struct=EDIT_GetUserPointer(data); \ 00000010 DF0100EF SWI +479 \ 00000014 0040B0E1 MOVS R4,R0 2677 if (!ed_struct) return; \ 00000018 C100000A BEQ ??AddMsgToChat_0 2678 if (!ed_struct->ed_contact->isunread) return; \ 0000001C 000094E5 LDR R0,[R4, #+0] \ 00000020 901090E5 LDR R1,[R0, #+144] \ 00000024 000051E3 CMP R1,#+0 \ 00000028 BD00000A BEQ ??AddMsgToChat_0 2679 2680 p=ed_struct->ed_contact->last_log; \ 0000002C A85090E5 LDR R5,[R0, #+168] 2681 if (p) \ 00000030 ........ LDR R6,??DataTable98 ;; i_rc \ 00000034 ........ LDR R7,??DataTable99 ;; O_ED_X_FONT_SIZE \ 00000038 ........ LDR R8,??DataTable100 ;; X_COLOR \ 0000003C ........ LDR R9,??DataTable101 ;; O_X_COLOR \ 00000040 000055E3 CMP R5,#+0 \ 00000044 A100000A BEQ ??AddMsgToChat_1 2682 { 2683 while(p) 2684 { 2685 font = ED_H_FONT_SIZE; \ ??AddMsgToChat_2: \ 00000048 ........ LDR R0,??DataTable122 ;; ED_H_FONT_SIZE 2686 if ((zc=p->acked&3)) \ 0000004C ........ LDR R1,??DataTable119 ;; 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 2687 { 2688 if (zc==1) \ 00000064 010050E3 CMP R0,#+1 \ 00000068 1E00001A BNE ??AddMsgToChat_4 2689 color=ACK_COLOR; //Зеленый \ 0000006C ........ LDR R0,??DataTable115 ;; ACK_COLOR \ 00000070 1B0000EA B ??AddMsgToChat_5 2690 else 2691 color=I_COLOR; 2692 } 2693 else 2694 { 2695 if (p->ID==0xFFFFFFFF) \ ??AddMsgToChat_3: \ 00000074 080095E5 LDR R0,[R5, #+8] \ 00000078 010070E3 CMN R0,#+1 \ 0000007C 1700001A BNE ??AddMsgToChat_6 2696 { 2697 type = p->type&0x0F; \ 00000080 0C0095E5 LDR R0,[R5, #+12] \ 00000084 0F1000E2 AND R1,R0,#0xF 2698 if(p->type&0x10) \ 00000088 100010E3 TST R0,#0x10 \ 0000008C 0B00000A BEQ ??AddMsgToChat_7 2699 { 2700 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 00000090 010051E3 CMP R1,#+1 \ 00000094 ........ LDREQ R0,??DataTable117 ;; 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,??DataTable116 ;; O_TO_COLOR \ ??AddMsgToChat_8: \ 000000B0 00B090E5 LDR R11,[R0, #+0] \ 000000B4 ........ LDR R0,??DataTable121 ;; O_ED_H_FONT_SIZE \ ??AddMsgToChat_9: \ 000000B8 00A090E5 LDR R10,[R0, #+0] \ 000000BC 090000EA B ??AddMsgToChat_4 2701 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 2702 } 2703 else 2704 { 2705 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,??DataTable113 ;; ED_X_FONT_SIZE \ 000000D4 F7FFFF0A BEQ ??AddMsgToChat_9 \ 000000D8 ........ LDR R0,??DataTable118 ;; TO_COLOR \ 000000DC 000000EA B ??AddMsgToChat_5 2706 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 2707 } 2708 } 2709 else 2710 color=UNACK_COLOR; //????? \ ??AddMsgToChat_6: \ 000000E0 ........ LDR R0,??DataTable120 ;; UNACK_COLOR \ ??AddMsgToChat_5: \ 000000E4 00B090E5 LDR R11,[R0, #+0] 2711 } 2712 PrepareEditControl(&ec); \ ??AddMsgToChat_4: \ 000000E8 10008DE2 ADD R0,SP,#+16 \ 000000EC 640100EF SWI +356 2713 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 2714 { 2715 ascii2ws(ews,p->hdr); \ 00000100 A80396E5 LDR R0,[R6, #+936] \ 00000104 101085E2 ADD R1,R5,#+16 \ 00000108 ........ _BLF ascii2ws,??ascii2ws??rA 2716 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 0000010C A83396E5 LDR R3,[R6, #+936] \ 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 2717 } 2718 else 2719 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??AddMsgToChat_10: \ 00000124 0000A0E3 MOV R0,#+0 \ 00000128 01002DE9 PUSH {R0} \ 0000012C A83396E5 LDR R3,[R6, #+936] \ 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 2720 PrepareEditCOptions(&ec_options); \ 00000144 0D00A0E1 MOV R0,SP \ 00000148 C80100EF SWI +456 2721 SetPenColorToEditCOptions(&ec_options,color); \ 0000014C 0B10A0E1 MOV R1,R11 \ 00000150 0D00A0E1 MOV R0,SP \ 00000154 CC0100EF SWI +460 2722 SetFontToEditCOptions(&ec_options,font); \ 00000158 0A10A0E1 MOV R1,R10 \ 0000015C 0D00A0E1 MOV R0,SP \ 00000160 CA0100EF SWI +458 2723 CopyOptionsToEditControl(&ec,&ec_options); \ 00000164 0D10A0E1 MOV R1,SP \ 00000168 10008DE2 ADD R0,SP,#+16 \ 0000016C CE0100EF SWI +462 2724 //AddEditControlToEditQend(eq,&ec,ma); 2725 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 2726 ed_struct->ed_answer++; \ 00000184 080094E5 LDR R0,[R4, #+8] \ 00000188 010080E2 ADD R0,R0,#+1 \ 0000018C 080084E5 STR R0,[R4, #+8] 2727 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 2728 { 2729 ParseAnswer(ews,p->text); \ 000001A0 A80396E5 LDR R0,[R6, #+936] \ 000001A4 601085E2 ADD R1,R5,#+96 \ 000001A8 ........ BL ParseAnswer \ 000001AC 050000EA B ??AddMsgToChat_13 2730 } 2731 else 2732 { 2733 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 A80396E5 LDR R0,[R6, #+936] \ 000001BC 00209805 LDREQ R2,[R8, #+0] \ 000001C0 601085E2 ADD R1,R5,#+96 \ 000001C4 ........ BL ParseXStatusText 2734 } 2735 PrepareEditControl(&ec); \ ??AddMsgToChat_13: \ 000001C8 10008DE2 ADD R0,SP,#+16 \ 000001CC 640100EF SWI +356 2736 ConstructEditControl(&ec, 2737 ECT_NORMAL_TEXT, 2738 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 2739 ews,ews->wsbody[0]); \ 000001D0 A83396E5 LDR R3,[R6, #+936] \ 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 2740 PrepareEditCOptions(&ec_options); \ 000001FC 04008DE2 ADD R0,SP,#+4 \ 00000200 C80100EF SWI +456 2741 //#ifdef M75 2742 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 2743 { 2744 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000218 100010E3 TST R0,#0x10 \ 0000021C ........ LDRNE R0,??DataTable111 ;; O_ED_FONT_SIZE \ 00000220 ........ LDREQ R0,??DataTable112 ;; ED_FONT_SIZE \ 00000224 001090E5 LDR R1,[R0, #+0] \ 00000228 090000EA B ??AddMsgToChat_15 2745 } 2746 else 2747 { 2748 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 2749 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,??DataTable113 ;; 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 2750 } 2751 //#else 2752 // SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 2753 //#endif 2754 CopyOptionsToEditControl(&ec,&ec_options); \ 0000025C 0D10A0E1 MOV R1,SP \ 00000260 10008DE2 ADD R0,SP,#+16 \ 00000264 CE0100EF SWI +462 2755 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 2756 ed_struct->ed_answer++; \ 0000027C 080094E5 LDR R0,[R4, #+8] \ 00000280 010080E2 ADD R0,R0,#+1 \ 00000284 080084E5 STR R0,[R4, #+8] 2757 p=p->next; \ 00000288 005095E5 LDR R5,[R5, #+0] 2758 } \ 0000028C 000055E3 CMP R5,#+0 \ 00000290 6CFFFF1A BNE ??AddMsgToChat_2 2759 j=((ed_struct->ed_contact->msg_count+1)*2); //Ожидаемый ed_answer \ 00000294 001094E5 LDR R1,[R4, #+0] \ 00000298 B01091E5 LDR R1,[R1, #+176] \ 0000029C 011081E2 ADD R1,R1,#+1 \ 000002A0 8150A0E1 LSL R5,R1,#+1 \ 000002A4 000055E1 CMP R5,R0 \ 000002A8 070000AA BGE ??AddMsgToChat_16 2760 while(jed_answer) 2761 { 2762 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??AddMsgToChat_17: \ 000002AC 040094E5 LDR R0,[R4, #+4] \ 000002B0 0110A0E3 MOV R1,#+1 \ 000002B4 D10100EF SWI +465 2763 ed_struct->ed_answer--; \ 000002B8 080094E5 LDR R0,[R4, #+8] \ 000002BC 010040E2 SUB R0,R0,#+1 \ 000002C0 080084E5 STR R0,[R4, #+8] 2764 } \ 000002C4 000055E1 CMP R5,R0 \ 000002C8 F7FFFFBA BLT ??AddMsgToChat_17 2765 } 2766 ed_struct->ed_contact->last_log=NULL; \ ??AddMsgToChat_16: \ 000002CC 0050A0E3 MOV R5,#+0 \ ??AddMsgToChat_1: \ 000002D0 000094E5 LDR R0,[R4, #+0] \ 000002D4 A85080E5 STR R5,[R0, #+168] 2767 if (IsGuiOnTop(edchat_id)) \ 000002D8 B80496E5 LDR R0,[R6, #+1208] \ 000002DC 350100EF SWI +309 \ 000002E0 000050E3 CMP R0,#+0 \ 000002E4 0300000A BEQ ??AddMsgToChat_18 2768 { 2769 total_unread--; \ 000002E8 AC0496E5 LDR R0,[R6, #+1196] \ 000002EC 010040E2 SUB R0,R0,#+1 \ 000002F0 AC0486E5 STR R0,[R6, #+1196] \ 000002F4 020000EA B ??AddMsgToChat_19 2770 } 2771 else 2772 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] 2773 ed_struct->ed_contact->isunread=0; \ ??AddMsgToChat_19: \ 00000304 000094E5 LDR R0,[R4, #+0] \ 00000308 905080E5 STR R5,[R0, #+144] 2774 total_unread2=total_unread2-ed_struct->ed_contact->unread_msg; \ 0000030C F81296E5 LDR R1,[R6, #+760] \ 00000310 942090E5 LDR R2,[R0, #+148] \ 00000314 021041E0 SUB R1,R1,R2 \ 00000318 F81286E5 STR R1,[R6, #+760] 2775 ed_struct->ed_contact->unread_msg=0; \ 0000031C 945080E5 STR R5,[R0, #+148] 2776 ChangeContactPos(ed_struct->ed_contact); \ 00000320 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2777 // EDIT_SetFocus(data,ed_struct->ed_answer); 2778 } \ ??AddMsgToChat_0: \ 00000324 40D08DE2 ADD SP,SP,#+64 ;; stack cleaning \ 00000328 F08FBDE8 POP {R4-R11,PC} ;; return 2779 2780 //Рисуем подтверждения непосредственно \ In segment CODE, align 4, keep-with-next 2781 void DrawAck(void *data) 2782 { \ DrawAck: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 2783 LOGQ *p; 2784 EDITCONTROL ec; 2785 EDITC_OPTIONS ec_options; 2786 EDCHAT_STRUCT *ed_struct; 2787 int j; 2788 int color; 2789 int dorefresh=0; \ 0000000C 0060A0E3 MOV R6,#+0 2790 if (!data) return; \ 00000010 4C00000A BEQ ??DrawAck_0 2791 ed_struct=EDIT_GetUserPointer(data); \ 00000014 DF0100EF SWI +479 2792 if (!ed_struct) return; \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 4900000A BEQ ??DrawAck_0 2793 p=ed_struct->ed_contact->log; \ 00000020 001090E5 LDR R1,[R0, #+0] 2794 j=ed_struct->ed_answer; 2795 j-=(ed_struct->ed_contact->msg_count*2)+1; //Номер собственно хедера верхнего итема \ 00000024 080090E5 LDR R0,[R0, #+8] \ 00000028 A05091E5 LDR R5,[R1, #+160] \ 0000002C B01091E5 LDR R1,[R1, #+176] \ 00000030 000055E3 CMP R5,#+0 \ 00000034 810040E0 SUB R0,R0,R1, LSL #+1 \ 00000038 017040E2 SUB R7,R0,#+1 \ 0000003C 3A00000A BEQ ??DrawAck_1 2796 while(p) 2797 { 2798 if (j>=1) //Пока возможно лишнее \ ??DrawAck_2: \ 00000040 010057E3 CMP R7,#+1 \ 00000044 340000BA BLT ??DrawAck_3 2799 { 2800 if (!(p->acked&4)) \ 00000048 040095E5 LDR R0,[R5, #+4] \ 0000004C 040010E3 TST R0,#0x4 \ 00000050 3100001A BNE ??DrawAck_3 2801 { 2802 ExtractEditControl(data,j,&ec); \ 00000054 10208DE2 ADD R2,SP,#+16 \ 00000058 0710A0E1 MOV R1,R7 \ 0000005C 0400A0E1 MOV R0,R4 \ 00000060 690100EF SWI +361 2803 PrepareEditCOptions(&ec_options); \ 00000064 0D00A0E1 MOV R0,SP \ 00000068 C80100EF SWI +456 2804 if (p->acked) \ 0000006C 040095E5 LDR R0,[R5, #+4] \ 00000070 000050E3 CMP R0,#+0 \ 00000074 0300000A BEQ ??DrawAck_4 2805 { 2806 if (p->acked==1) \ 00000078 010050E3 CMP R0,#+1 \ 0000007C ........ LDRNE R0,??DataTable119 ;; I_COLOR 2807 color=ACK_COLOR; //Зеленый \ 00000080 ........ LDREQ R0,??DataTable115 ;; ACK_COLOR \ 00000084 0F0000EA B ??DrawAck_5 2808 else 2809 color=I_COLOR; 2810 } 2811 else 2812 { 2813 if (p->ID==0xFFFFFFFF) \ ??DrawAck_4: \ 00000088 080095E5 LDR R0,[R5, #+8] \ 0000008C 010070E3 CMN R0,#+1 \ 00000090 0B00001A BNE ??DrawAck_6 2814 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,??DataTable116 ;; O_TO_COLOR \ 000000AC ........ LDREQ R0,??DataTable117 ;; O_I_COLOR \ 000000B0 040000EA B ??DrawAck_5 \ ??DrawAck_7: \ 000000B4 010050E3 CMP R0,#+1 \ 000000B8 ........ LDRNE R0,??DataTable118 ;; TO_COLOR \ 000000BC ........ LDREQ R0,??DataTable119 ;; I_COLOR \ 000000C0 000000EA B ??DrawAck_5 2815 else 2816 color=UNACK_COLOR; //Серый \ ??DrawAck_6: \ 000000C4 ........ LDR R0,??DataTable120 ;; UNACK_COLOR 2817 } 2818 SetPenColorToEditCOptions(&ec_options,color/*p->type==1?I_COLOR:TO_COLOR*/); 2819 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_H_FONT_SIZE:ED_H_FONT_SIZE); 2820 CopyOptionsToEditControl(&ec,&ec_options); 2821 StoreEditControl(data,j,&ec); 2822 p->acked|=4; //Обработали 2823 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,??DataTable121 ;; O_ED_H_FONT_SIZE \ 000000E4 ........ LDREQ R0,??DataTable122 ;; 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] 2824 } 2825 } 2826 j+=2; 2827 p=p->next; \ ??DrawAck_3: \ 0000011C 005095E5 LDR R5,[R5, #+0] \ 00000120 027087E2 ADD R7,R7,#+2 2828 } \ 00000124 000055E3 CMP R5,#+0 \ 00000128 C4FFFF1A BNE ??DrawAck_2 2829 if (IsGuiOnTop(edchat_id)&&dorefresh) RefreshGUI(); \ ??DrawAck_1: \ 0000012C 1C009FE5 LDR R0,??DrawAck_8 ;; i_rc + 1208 \ 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 i_rc + 1208 2830 } 2831 \ In segment CODE, align 4, keep-with-next 2832 void ask_my_info(void) 2833 { 2834 /* TPKT *p; 2835 CLIST *t; 2836 p=malloc(sizeof(PKT)); 2837 p->pkt.uin=UIN; 2838 p->pkt.type=T_REQINFOSHORT; 2839 p->pkt.data_len=0; 2840 // AddStringToLog(t,0x01,"Request info...",I_str); 2841 SUBPROC((void *)SendAnswer,0,p);*/ 2842 } \ ask_my_info: \ 00000000 1EFF2FE1 BX LR ;; return 2843 \ In segment CODE, align 4, keep-with-next 2844 void set_my_status(void) 2845 { \ set_my_status: \ 00000000 00402DE9 PUSH {LR} 2846 TPKT *p; 2847 p=malloc(sizeof(PKT)+1); \ 00000004 0900A0E3 MOV R0,#+9 \ 00000008 140000EF SWI +20 2848 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 001080E5 STR R1,[R0, #+0] 2849 p->pkt.type=T_MY_STATUS_CH; // Тип пакета: изменение статуса \ 00000014 0F10A0E3 MOV R1,#+15 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2850 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000001C 0110A0E3 MOV R1,#+1 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2851 p->data[0]=CurrentStatus; \ 00000024 18109FE5 LDR R1,??set_my_status_0 ;; i_rc + 928 2852 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,??DataTable135 ;; SendAnswer \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 710100EF SWI +369 2853 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??set_my_status_0: \ 00000044 ........ DC32 i_rc + 928 2854 2855 extern int Send0; 2856 \ In segment CODE, align 4, keep-with-next 2857 void set_my_xstatus(void) 2858 { \ set_my_xstatus: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 2859 #ifdef NEWSGOLD 2860 if(Is_Id3tag_Enabled) \ 00000004 ........ LDR R7,??DataTable134 ;; i_rc \ 00000008 ........ LDR R4,??DataTable135 ;; 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 4000000A BEQ ??set_my_xstatus_0 2861 { 2862 if(CurrentXStatus!=11 || !Is_ID3_ANY_STATUS) \ 0000002C A40397E5 LDR R0,[R7, #+932] \ 00000030 0B0050E3 CMP R0,#+11 \ 00000034 0300001A BNE ??set_my_xstatus_1 \ 00000038 E0019FE5 LDR R0,??set_my_xstatus_2 ;; Is_ID3_ANY_STATUS \ 0000003C 000090E5 LDR R0,[R0, #+0] \ 00000040 000050E3 CMP R0,#+0 \ 00000044 7200001A BNE ??set_my_xstatus_3 2863 { 2864 #endif 2865 TPKT *p; 2866 char *s1; 2867 char *s2; 2868 int l1; 2869 int l2; 2870 p=malloc(sizeof(PKT)+1); \ ??set_my_xstatus_1: \ 00000048 0900A0E3 MOV R0,#+9 \ 0000004C 140000EF SWI +20 \ 00000050 0080A0E1 MOV R8,R0 2871 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 00000054 006088E5 STR R6,[R8, #+0] 2872 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 00000058 B4A0C8E1 STRH R10,[R8, #+4] 2873 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000005C B690C8E1 STRH R9,[R8, #+6] 2874 p->data[0]=CurrentXStatus; \ 00000060 A40397E5 LDR R0,[R7, #+932] 2875 SUBPROC((void *)SendAnswer,0,p); \ 00000064 0820A0E1 MOV R2,R8 \ 00000068 0800C8E5 STRB R0,[R8, #+8] \ 0000006C 0010A0E3 MOV R1,#+0 \ 00000070 0400A0E1 MOV R0,R4 \ 00000074 710100EF SWI +369 2876 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 00000078 A40397E5 LDR R0,[R7, #+932] \ 0000007C 0D10A0E1 MOV R1,SP \ 00000080 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000084 010080E2 ADD R0,R0,#+1 \ 00000088 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 0000008C 0090A0E1 MOV R9,R0 2877 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000090 A40397E5 LDR R0,[R7, #+932] \ 00000094 04108DE2 ADD R1,SP,#+4 \ 00000098 800080E0 ADD R0,R0,R0, LSL #+1 \ 0000009C 020080E2 ADD R0,R0,#+2 \ 000000A0 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 000000A4 0070A0E1 MOV R7,R0 2878 if ((!s1)||(!s2)) return; \ 000000A8 000059E3 CMP R9,#+0 \ 000000AC 00005713 CMPNE R7,#+0 \ 000000B0 F787BD08 POPEQ {R0-R2,R4-R10,PC} 2879 p=malloc(sizeof(PKT)+l1+l2+1); \ 000000B4 00009DE5 LDR R0,[SP, #+0] \ 000000B8 04109DE5 LDR R1,[SP, #+4] \ 000000BC 000081E0 ADD R0,R1,R0 \ 000000C0 090080E2 ADD R0,R0,#+9 \ 000000C4 140000EF SWI +20 \ 000000C8 0080A0E1 MOV R8,R0 2880 p->pkt.uin=0; \ 000000CC 006088E5 STR R6,[R8, #+0] 2881 p->pkt.type=T_XTEXT_SET; \ 000000D0 B450C8E1 STRH R5,[R8, #+4] 2882 p->pkt.data_len=l1+l2+1; \ 000000D4 00009DE5 LDR R0,[SP, #+0] \ 000000D8 04109DE5 LDR R1,[SP, #+4] \ 000000DC 000081E0 ADD R0,R1,R0 \ 000000E0 010080E2 ADD R0,R0,#+1 \ 000000E4 B600C8E1 STRH R0,[R8, #+6] 2883 strncpy(p->data+0,s1,l1); \ 000000E8 00209DE5 LDR R2,[SP, #+0] \ 000000EC 0910A0E1 MOV R1,R9 \ 000000F0 080088E2 ADD R0,R8,#+8 \ 000000F4 160100EF SWI +278 2884 p->data[l1]=0; \ 000000F8 00009DE5 LDR R0,[SP, #+0] 2885 strncpy(p->data+l1+1,s2,l2); \ 000000FC 0710A0E1 MOV R1,R7 \ 00000100 080080E0 ADD R0,R0,R8 \ 00000104 0860C0E5 STRB R6,[R0, #+8] \ 00000108 00009DE5 LDR R0,[SP, #+0] \ 0000010C 04209DE5 LDR R2,[SP, #+4] \ 00000110 080080E0 ADD R0,R0,R8 \ 00000114 090080E2 ADD R0,R0,#+9 \ 00000118 160100EF SWI +278 2886 SUBPROC((void *)SendAnswer,0,p); \ 0000011C 0820A0E1 MOV R2,R8 \ 00000120 0010A0E3 MOV R1,#+0 \ 00000124 0400A0E1 MOV R0,R4 \ 00000128 710100EF SWI +369 \ 0000012C F787BDE8 POP {R0-R2,R4-R10,PC} 2887 #ifdef NEWSGOLD 2888 } 2889 else 2890 { 2891 tracktimer=0; 2892 GetTags(); 2893 } 2894 } 2895 else 2896 { 2897 TPKT *p; 2898 char *s1; 2899 char *s2; 2900 int l1; 2901 int l2; 2902 p=malloc(sizeof(PKT)+1); \ ??set_my_xstatus_0: \ 00000130 0900A0E3 MOV R0,#+9 \ 00000134 140000EF SWI +20 \ 00000138 0080A0E1 MOV R8,R0 2903 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000013C 006088E5 STR R6,[R8, #+0] 2904 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 00000140 B4A0C8E1 STRH R10,[R8, #+4] 2905 p->pkt.data_len=1; // Длина пакета: 1 байт \ 00000144 B690C8E1 STRH R9,[R8, #+6] 2906 p->data[0]=CurrentXStatus; \ 00000148 A40397E5 LDR R0,[R7, #+932] 2907 SUBPROC((void *)SendAnswer,0,p); \ 0000014C 0820A0E1 MOV R2,R8 \ 00000150 0800C8E5 STRB R0,[R8, #+8] \ 00000154 0010A0E3 MOV R1,#+0 \ 00000158 0400A0E1 MOV R0,R4 \ 0000015C 710100EF SWI +369 2908 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 00000160 A40397E5 LDR R0,[R7, #+932] \ 00000164 0D10A0E1 MOV R1,SP \ 00000168 800080E0 ADD R0,R0,R0, LSL #+1 \ 0000016C 010080E2 ADD R0,R0,#+1 \ 00000170 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000174 0090A0E1 MOV R9,R0 2909 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000178 A40397E5 LDR R0,[R7, #+932] \ 0000017C 04108DE2 ADD R1,SP,#+4 \ 00000180 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000184 020080E2 ADD R0,R0,#+2 \ 00000188 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 0000018C 00A0A0E1 MOV R10,R0 2910 if ((!s1)||(!s2)) return; \ 00000190 000059E3 CMP R9,#+0 \ 00000194 00005A13 CMPNE R10,#+0 \ 00000198 F787BD08 POPEQ {R0-R2,R4-R10,PC} 2911 p=malloc(sizeof(PKT)+l1+l2+1); \ 0000019C 00009DE5 LDR R0,[SP, #+0] \ 000001A0 04109DE5 LDR R1,[SP, #+4] \ 000001A4 000081E0 ADD R0,R1,R0 \ 000001A8 090080E2 ADD R0,R0,#+9 \ 000001AC 140000EF SWI +20 \ 000001B0 0080A0E1 MOV R8,R0 2912 p->pkt.uin=0; \ 000001B4 006088E5 STR R6,[R8, #+0] 2913 p->pkt.type=T_XTEXT_SET; \ 000001B8 B450C8E1 STRH R5,[R8, #+4] 2914 p->pkt.data_len=l1+l2+1; \ 000001BC 00009DE5 LDR R0,[SP, #+0] \ 000001C0 04109DE5 LDR R1,[SP, #+4] \ 000001C4 000081E0 ADD R0,R1,R0 \ 000001C8 010080E2 ADD R0,R0,#+1 \ 000001CC B600C8E1 STRH R0,[R8, #+6] 2915 strncpy(p->data+0,s1,l1); \ 000001D0 00209DE5 LDR R2,[SP, #+0] \ 000001D4 0910A0E1 MOV R1,R9 \ 000001D8 080088E2 ADD R0,R8,#+8 \ 000001DC 160100EF SWI +278 2916 p->data[l1]=0; \ 000001E0 00009DE5 LDR R0,[SP, #+0] 2917 strncpy(p->data+l1+1,s2,l2); \ 000001E4 0A10A0E1 MOV R1,R10 \ 000001E8 080080E0 ADD R0,R0,R8 \ 000001EC 0860C0E5 STRB R6,[R0, #+8] \ 000001F0 00009DE5 LDR R0,[SP, #+0] \ 000001F4 04209DE5 LDR R2,[SP, #+4] \ 000001F8 080080E0 ADD R0,R0,R8 \ 000001FC 090080E2 ADD R0,R0,#+9 \ 00000200 160100EF SWI +278 2918 SUBPROC((void *)SendAnswer,0,p); \ 00000204 0820A0E1 MOV R2,R8 \ 00000208 0010A0E3 MOV R1,#+0 \ 0000020C 0400A0E1 MOV R0,R4 \ 00000210 710100EF SWI +369 2919 tracktimer=0; \ ??set_my_xstatus_3: \ 00000214 CC6387E5 STR R6,[R7, #+972] 2920 GetTags(); \ 00000218 ........ _BLF GetTags,??GetTags??rA \ 0000021C F787BDE8 POP {R0-R2,R4-R10,PC} ;; return \ ??set_my_xstatus_2: \ 00000220 ........ DC32 Is_ID3_ANY_STATUS 2921 } 2922 #endif 2923 } 2924 2925 #ifdef NEWSGOLD 2926 \ In segment CODE, align 4, keep-with-next 2927 void set_my_xstatus2(void) 2928 { \ set_my_xstatus2: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 2929 TPKT *p; 2930 // char *s1; 2931 // char *s2; 2932 int l1; 2933 int l2; 2934 p=malloc(sizeof(PKT)+1); 2935 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 2936 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 2937 p->pkt.data_len=1; // Длина пакета: 1 байт 2938 p->data[0]=11; 2939 SUBPROC((void *)SendAnswer,0,p); \ 00000004 ........ LDR R6,??DataTable135 ;; SendAnswer 2940 // char *s1; 2941 char *sk2=malloc(256); 2942 // strcpy(s1, playing); 2943 // s1="Now playing:"; 2944 strcpy(sk2,teast2); 2945 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 2946 l2=strlen(sk2); \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 1B0000EF SWI +27 \ 00000074 00A0A0E1 MOV R10,R0 2947 if ((!playing)||(!sk2)) return; \ 00000078 000057E3 CMP R7,#+0 \ 0000007C F187BD08 POPEQ {R0,R4-R10,PC} 2948 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 2949 p->pkt.uin=0; \ 00000090 005084E5 STR R5,[R4, #+0] 2950 p->pkt.type=T_XTEXT_SET; \ 00000094 1A00A0E3 MOV R0,#+26 \ 00000098 B400C4E1 STRH R0,[R4, #+4] 2951 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] 2952 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 2953 p->data[l1]=0; \ 000000B8 040089E0 ADD R0,R9,R4 \ 000000BC 0850C0E5 STRB R5,[R0, #+8] 2954 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 2955 mfree(sk2); \ 000000D0 0700A0E1 MOV R0,R7 \ 000000D4 150000EF SWI +21 2956 SUBPROC((void *)SendAnswer,0,p); \ 000000D8 0420A0E1 MOV R2,R4 \ 000000DC 0010A0E3 MOV R1,#+0 \ 000000E0 0600A0E1 MOV R0,R6 \ 000000E4 710100EF SWI +369 2957 // mfree(s1); 2958 // mfree(s2); 2959 } \ 000000E8 F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??set_my_xstatus2_0: \ 000000EC ........ DC32 playing \ 000000F0 ........ DC32 teast2 2960 #endif \ In segment CODE, align 4, keep-with-next 2961 void to_develop(void) 2962 { 2963 if (silenthide) return; \ to_develop: \ 00000000 ........ LDR R0,??DataTable134 ;; i_rc \ 00000004 00402DE9 PUSH {LR} \ 00000008 601490E5 LDR R1,[R0, #+1120] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD18 POPNE {PC} 2964 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable128 ;; Canvas 2965 gipc.name_from=ipc_my_name; 2966 gipc.data=(void *)maincsm_id; 2967 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 00000018 EC3080E2 ADD R3,R0,#+236 \ 0000001C DE2F81E2 ADD R2,R1,#+888 \ 00000020 D61F81E2 ADD R1,R1,#+856 \ 00000024 F01080E5 STR R1,[R0, #+240] \ 00000028 FC1290E5 LDR R1,[R0, #+764] \ 0000002C EC2080E5 STR R2,[R0, #+236] \ 00000030 F41080E5 STR R1,[R0, #+244] \ 00000034 0220A0E3 MOV R2,#+2 \ 00000038 B010A0E3 MOV R1,#+176 \ 0000003C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000040 0900A0E3 MOV R0,#+9 \ 00000044 420C80E3 ORR R0,R0,#0x4200 \ 00000048 000100EF SWI +256 2968 } \ 0000004C 0080BDE8 POP {PC} ;; return 2969 \ In segment CODE, align 4, keep-with-next 2970 void ReqAddMsgToChat(CLIST *t) 2971 { \ ReqAddMsgToChat: \ 00000000 70402DE9 PUSH {R4-R6,LR} 2972 if (edchat_id) \ 00000004 ........ LDR R5,??DataTable134 ;; i_rc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C B80495E5 LDR R0,[R5, #+1208] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 7080BD08 POPEQ {R4-R6,PC} 2973 { 2974 void *data=FindGUIbyId(edchat_id,NULL); \ 00000018 B80495E5 LDR R0,[R5, #+1208] \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 090200EF SWI +521 \ 00000024 0060A0E1 MOV R6,R0 2975 { 2976 EDCHAT_STRUCT *ed_struct; 2977 ed_struct=EDIT_GetUserPointer(data); \ 00000028 DF0100EF SWI +479 2978 if (ed_struct) \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 7080BD08 POPEQ {R4-R6,PC} 2979 { 2980 if (ed_struct->ed_contact==t) \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 040050E1 CMP R0,R4 \ 0000003C 7080BD18 POPNE {R4-R6,PC} 2981 { 2982 if (EDIT_IsBusy(data)) \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 1C0200EF SWI +540 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0400000A BEQ ??ReqAddMsgToChat_0 2983 { 2984 t->req_add=1; \ 00000050 0100A0E3 MOV R0,#+1 \ 00000054 980084E5 STR R0,[R4, #+152] 2985 #ifdef EVILFOX 2986 time_to_stop_t9=2; 2987 #else 2988 time_to_stop_t9=3; \ 00000058 0300A0E3 MOV R0,#+3 \ 0000005C E80485E5 STR R0,[R5, #+1256] \ 00000060 7080BDE8 POP {R4-R6,PC} 2989 #endif 2990 } 2991 else 2992 { 2993 AddMsgToChat(data); \ ??ReqAddMsgToChat_0: \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 ........ BL AddMsgToChat 2994 DirectRedrawGUI_ID(edchat_id); \ 0000006C B80495E5 LDR R0,[R5, #+1208] \ 00000070 400100EF SWI +320 2995 } 2996 } 2997 } 2998 } 2999 } 3000 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 3001 3002 GBSTMR develop; 3003 \ In segment CODE, align 4, keep-with-next 3004 void begin_to_develop() 3005 { \ begin_to_develop: \ 00000000 00402DE9 PUSH {LR} 3006 if(IsUnlocked()) \ 00000004 430000EF SWI +67 \ 00000008 000050E3 CMP R0,#+0 \ 0000000C 0100000A BEQ ??begin_to_develop_0 3007 to_develop(); \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ B to_develop ;; tailcall 3008 else 3009 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 ;; i_rc + 8644 \ 00000020 6410A0E3 MOV R1,#+100 \ 00000024 4D0000EF SWI +77 3010 } \ 00000028 0080BDE8 POP {PC} ;; return \ ??begin_to_develop_1: \ 0000002C ........ DC32 begin_to_develop \ 00000030 ........ DC32 i_rc + 8644 3011 3012 3013 3014 //----------------------------- LOAD COMMANDS -----------------------------// 3015 //Templates 3016 char *cmd_chars; //Собственно файл 3017 char **cmd_lines; //Массив указателей на строки 3018 \ In segment CODE, align 4, keep-with-next 3019 void cmdFree(void) 3020 { \ cmdFree: \ 00000000 10402DE9 PUSH {R4,LR} 3021 if (cmd_lines) mfree(cmd_lines); \ 00000004 ........ LDR R4,??DataTable133 ;; CmdMenuHeader \ 00000008 180094E5 LDR R0,[R4, #+24] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0000000A BEQ ??cmdFree_0 \ 00000014 150000EF SWI +21 3022 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 3023 cmd_lines=NULL; \ 00000028 0000A0E3 MOV R0,#+0 \ ??cmdFree_1: \ 0000002C 180084E5 STR R0,[R4, #+24] 3024 cmd_chars=NULL; \ 00000030 140084E5 STR R0,[R4, #+20] 3025 } \ 00000034 1080BDE8 POP {R4,PC} ;; return 3026 \ In segment CODE, align 4, keep-with-next 3027 int LoadCmd() 3028 { \ LoadCmd: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 4BDF4DE2 SUB SP,SP,#+300 3029 FSTATS stat; 3030 char fn[256]; 3031 int f; 3032 unsigned int ul; 3033 int i; 3034 int fsize; 3035 char *p; 3036 char *pp; 3037 int c; 3038 cmdFree(); \ 00000008 ........ BL cmdFree 3039 strcpy(fn,TEMPLATES_PATH); \ 0000000C ........ LDR R1,??DataTable131 ;; TEMPLATES_PATH \ 00000010 04008DE2 ADD R0,SP,#+4 \ 00000014 1A0000EF SWI +26 3040 i=strlen(fn); \ 00000018 04008DE2 ADD R0,SP,#+4 \ 0000001C 1B0000EF SWI +27 3041 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 3042 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 3043 fsize=stat.size; \ 00000044 08719DE5 LDR R7,[SP, #+264] 3044 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 3045 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 3046 p=cmd_chars=malloc(fsize+1); \ ??LoadCmd_1: \ 00000074 ........ LDR R4,??DataTable133 ;; CmdMenuHeader \ 00000078 010087E2 ADD R0,R7,#+1 \ 0000007C 140000EF SWI +20 \ 00000080 140084E5 STR R0,[R4, #+20] \ 00000084 0060A0E1 MOV R6,R0 3047 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] 3048 fclose(f,&ul); \ 000000A4 0D10A0E1 MOV R1,SP \ 000000A8 0800A0E1 MOV R0,R8 \ 000000AC 0D0000EF SWI +13 3049 i=0; \ 000000B0 0070A0E3 MOV R7,#+0 3050 pp=p; \ 000000B4 0680A0E1 MOV R8,R6 \ 000000B8 020000EA B ??LoadCmd_3 3051 for(;;) 3052 { 3053 c=*p; 3054 if (c<32) 3055 { 3056 if (pp&&(pp!=p)) 3057 { 3058 cmd_lines=realloc(cmd_lines,(i+1)*sizeof(char *)); 3059 cmd_lines[i++]=pp; 3060 } 3061 pp=NULL; 3062 if (!c) break; 3063 *p=0; 3064 } 3065 else 3066 { 3067 if (pp==NULL) pp=p; \ ??LoadCmd_4: \ 000000BC 000058E3 CMP R8,#+0 \ 000000C0 0680A001 MOVEQ R8,R6 3068 } 3069 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 3070 } 3071 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 `?` 3072 } 3073 3074 int NumOfItems=0; 3075 HEADER_DESC CmdMenuHeader={NULL,NULL,NULL,NULL,NULL,NULL,LGP_NULL}; 3076 \ In segment CODE, align 4, keep-with-next 3077 void CmdMenuItemHandler(void *data, int curitem, void *unk) 3078 { \ CmdMenuItemHandler: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 3079 void *item=AllocMenuItem(data); \ 0000000C 970100EF SWI +407 \ 00000010 0060A0E1 MOV R6,R0 3080 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] 3081 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 3082 ascii2ws(ws,p); \ 00000038 0710A0E1 MOV R1,R7 \ 0000003C ........ _BLF ascii2ws,??ascii2ws??rA 3083 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 3084 } \ 00000054 F081BDE8 POP {R4-R8,PC} ;; return \ ??CmdMenuItemHandler_0: \ 00000058 ........ DC32 CmdMenuHeader + 24 3085 \ In segment CODE, align 4, keep-with-next 3086 void CmdMenuGHook(void *data, int cmd) 3087 { \ CmdMenuGHook: \ 00000000 00402DE9 PUSH {LR} 3088 if (cmd==TI_CMD_FOCUS) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0100001A BNE ??CmdMenuGHook_0 3089 { 3090 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 \ 00000010 0080BDE8 POP {PC} 3091 } 3092 if (cmd==TI_CMD_DESTROY) \ ??CmdMenuGHook_0: \ 00000014 030051E3 CMP R1,#+3 \ 00000018 0080BD18 POPNE {PC} 3093 { 3094 cmdFree(); \ 0000001C 0040BDE8 POP {LR} ;; Pop \ 00000020 ........ B cmdFree ;; tailcall 3095 } 3096 } 3097 \ In segment CODE, align 4, keep-with-next 3098 static int CmdMenuKeyHook(void *data, GUI_MSG *msg) 3099 { \ CmdMenuKeyHook: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 3100 int Selected=GetCurMenuItem(data); \ 0000000C 8F0100EF SWI +399 \ 00000010 0060A0E1 MOV R6,R0 3101 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000014 0400A0E1 MOV R0,R4 \ 00000018 E00100EF SWI +480 \ 0000001C 0040A0E1 MOV R4,R0 3102 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 3103 { 3104 if (NumOfItems) \ 00000030 ........ LDR R0,??DataTable133 ;; CmdMenuHeader \ 00000034 1C1090E5 LDR R1,[R0, #+28] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 1300000A BEQ ??CmdMenuKeyHook_0 3105 { 3106 const char *p=cmd_lines[Selected]; \ 00000040 180090E5 LDR R0,[R0, #+24] \ 00000044 065190E7 LDR R5,[R0, +R6, LSL #+2] 3107 WSHDR *ws; 3108 ws=AllocWS(256); \ 00000048 400FA0E3 MOV R0,#+256 \ 0000004C 250100EF SWI +293 \ 00000050 0060A0E1 MOV R6,R0 3109 // wsprintf(ws,percent_t,p); 3110 ascii2ws(ws,p); \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 ........ _BLF ascii2ws,??ascii2ws??rA 3111 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 3112 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 3113 FreeWS(ws); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 290100EF SWI +297 3114 return(1); \ 00000088 0100A0E3 MOV R0,#+1 \ 0000008C 7080BDE8 POP {R4-R6,PC} 3115 } 3116 } 3117 return(0); \ ??CmdMenuKeyHook_0: \ 00000090 0000A0E3 MOV R0,#+0 \ 00000094 7080BDE8 POP {R4-R6,PC} ;; return 3118 } 3119 3120 const int CmdSoftkeys[]={0,1,2}; 3121 3122 const SOFTKEY_DESC cmd_sk[]= 3123 { 3124 {0x0004,0x0000,(int)""}, 3125 {0x0001,0x0000,(int)LG_CLOSE}, 3126 {0x003D,0x0000,(int)LGP_DOIT_PIC} 3127 }; 3128 const SOFTKEYSTAB cmd_Back_skt= 3129 { 3130 cmd_sk,0 3131 }; 3132 static const MENU_DESC CmdMenuStruct= 3133 { 3134 8,CmdMenuKeyHook,CmdMenuGHook,NULL, 3135 CmdSoftkeys, 3136 &cmd_Back_skt, 3137 0x10, 3138 CmdMenuItemHandler, 3139 NULL, //menuitems, 3140 NULL, //menuprocs, 3141 NULL 3142 }; 3143 \ In segment CODE, align 4, keep-with-next 3144 int DispCmdMenu(void *ed_gui) 3145 { \ DispCmdMenu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 3146 NumOfItems=LoadCmd(); \ 00000004 88509FE5 LDR R5,??DispCmdMenu_0 ;; CmdMenuHeader 3147 if(NumOfItems) \ 00000008 88609FE5 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 1700000A BEQ ??DispCmdMenu_1 3148 { 3149 *((int *)(&CmdMenuHeader.lgp_id))=(int)"Select command"; \ 00000020 0C6085E5 STR R6,[R5, #+12] 3150 patch_header(&CmdMenuHeader); \ 00000024 0000A0E3 MOV R0,#+0 \ 00000028 B000C5E1 STRH R0,[R5, #+0] \ 0000002C 1800A0E3 MOV R0,#+24 \ 00000030 B200C5E1 STRH R0,[R5, #+2] \ 00000034 888100EF SWI +33160 \ 00000038 010040E2 SUB R0,R0,#+1 \ 0000003C B400C5E1 STRH R0,[R5, #+4] \ 00000040 8A8100EF SWI +33162 \ 00000044 170080E2 ADD R0,R0,#+23 \ 00000048 B600C5E1 STRH R0,[R5, #+6] 3151 return CreateMenu(0,0,&CmdMenuStruct,&CmdMenuHeader,0,NumOfItems,ed_gui,0); \ 0000004C 0000A0E3 MOV R0,#+0 \ 00000050 01002DE9 PUSH {R0} \ 00000054 10002DE9 PUSH {R4} \ 00000058 1C0095E5 LDR R0,[R5, #+28] \ 0000005C 0530A0E1 MOV R3,R5 \ 00000060 01002DE9 PUSH {R0} \ 00000064 202086E2 ADD R2,R6,#+32 \ 00000068 0010A0E3 MOV R1,#+0 \ 0000006C 0000A0E3 MOV R0,#+0 \ 00000070 01002DE9 PUSH {R0} \ 00000074 520100EF SWI +338 \ 00000078 10D08DE2 ADD SP,SP,#+16 \ 0000007C 7080BDE8 POP {R4-R6,PC} 3152 } 3153 MsgBoxError(1, (int)"FILE NOT FOUND!"); \ ??DispCmdMenu_1: \ 00000080 101086E2 ADD R1,R6,#+16 \ 00000084 0100A0E3 MOV R0,#+1 \ 00000088 4E0000EF SWI +78 3154 return(0); \ 0000008C 0000A0E3 MOV R0,#+0 \ 00000090 7080BDE8 POP {R4-R6,PC} ;; return \ ??DispCmdMenu_0: \ 00000094 ........ DC32 CmdMenuHeader \ 00000098 ........ DC32 `?` 3155 } 3156 /* 3157 char *GetStatusByIconIndex(int icon) 3158 { 3159 char *stat=malloc(32); 3160 switch(icon) 3161 { 3162 case IS_OFFLINE : sprintf(stat,"Offline"); break; 3163 case IS_INVISIBLE : sprintf(stat,"Invisable"); break; 3164 case IS_AWAY : sprintf(stat,"Away"); break; 3165 case IS_NA : sprintf(stat,"N/A"); break; 3166 case IS_OCCUPIED: sprintf(stat,"Occupied"); break; 3167 case IS_DND : sprintf(stat,"DND"); break; 3168 case IS_DEPRESSION : sprintf(stat,"Depression"); break; 3169 case IS_EVIL : sprintf(stat,"Evil"); break; 3170 case IS_HOME : sprintf(stat,"Home"); break; 3171 case IS_LUNCH : sprintf(stat,"Lunch"); break; 3172 case IS_WORK : sprintf(stat,"Work"); break; 3173 case IS_ONLINE : sprintf(stat,"Online"); break; 3174 case IS_FFC : sprintf(stat,"FFC"); break; 3175 default : sprintf(stat,"Error status"); break; 3176 } 3177 return stat; 3178 } 3179 */ 3180 \ In segment CODE, align 4, keep-with-next 3181 char *GetStatusByIconIndex(int icon) 3182 { \ GetStatusByIconIndex: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 3183 char *stat=malloc(32); \ 00000008 2000A0E3 MOV R0,#+32 \ 0000000C 140000EF SWI +20 3184 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 3185 { 3186 case IS_OFFLINE : sprintf(stat,"Отключен"); break; 3187 case IS_INVISIBLE : sprintf(stat,"Невидимый"); break; \ ??GetStatusByIconIndex_3: \ 0000003C 0C1081E2 ADD R1,R1,#+12 \ 00000040 140000EA B ??GetStatusByIconIndex_4 3188 case IS_AWAY : sprintf(stat,"Отсутсвует"); break; \ ??GetStatusByIconIndex_5: \ 00000044 181081E2 ADD R1,R1,#+24 \ 00000048 120000EA B ??GetStatusByIconIndex_4 3189 case IS_NA : sprintf(stat,"Не доступен"); break; \ ??GetStatusByIconIndex_6: \ 0000004C 241081E2 ADD R1,R1,#+36 \ 00000050 100000EA B ??GetStatusByIconIndex_4 3190 case IS_OCCUPIED: sprintf(stat,"Занят"); break; \ ??GetStatusByIconIndex_7: \ 00000054 301081E2 ADD R1,R1,#+48 \ 00000058 0E0000EA B ??GetStatusByIconIndex_4 3191 case IS_DND : sprintf(stat,"Не беспокоить");break; \ ??GetStatusByIconIndex_8: \ 0000005C 381081E2 ADD R1,R1,#+56 \ 00000060 0C0000EA B ??GetStatusByIconIndex_4 3192 case IS_DEPRESSION : sprintf(stat,"Депрессия"); break; \ ??GetStatusByIconIndex_9: \ 00000064 481081E2 ADD R1,R1,#+72 \ 00000068 0A0000EA B ??GetStatusByIconIndex_4 3193 case IS_EVIL : sprintf(stat,"Злой"); break; \ ??GetStatusByIconIndex_10: \ 0000006C 541081E2 ADD R1,R1,#+84 \ 00000070 080000EA B ??GetStatusByIconIndex_4 3194 case IS_HOME : sprintf(stat,"Дома"); break; \ ??GetStatusByIconIndex_11: \ 00000074 5C1081E2 ADD R1,R1,#+92 \ 00000078 060000EA B ??GetStatusByIconIndex_4 3195 case IS_LUNCH : sprintf(stat,"Жру"); break; \ ??GetStatusByIconIndex_12: \ 0000007C 091F8FE2 ADR R1,??GetStatusByIconIndex_1 ;; "Жру" \ 00000080 040000EA B ??GetStatusByIconIndex_4 3196 case IS_WORK : sprintf(stat,"Работа"); break; \ ??GetStatusByIconIndex_13: \ 00000084 641081E2 ADD R1,R1,#+100 \ 00000088 020000EA B ??GetStatusByIconIndex_4 3197 case IS_ONLINE : sprintf(stat,"В сети"); break; \ ??GetStatusByIconIndex_2: \ 0000008C 6C1081E2 ADD R1,R1,#+108 \ 00000090 000000EA B ??GetStatusByIconIndex_4 3198 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 3199 default : sprintf(stat,"В сети"); break; 3200 } 3201 return stat; \ 000000A0 0500A0E1 MOV R0,R5 \ 000000A4 3080BDE8 POP {R4,R5,PC} ;; return \ ??GetStatusByIconIndex_1: \ 000000A8 C6F0F300 DC8 "Жру" \ 000000AC ........ DC32 `?` 3202 } 3203 //----------------------------- CHECK COMMANDS -----------------------------// 3204 3205 3206 int comanda; 3207 3208 char requests1[]="Sending online time..."; 3209 char requests2[]="Sending msg info..."; 3210 char requests3[]="Sending battery info..."; 3211 char requests4[]="Sending mod info..."; 3212 char requests6[]="Sending offline info..."; 3213 char mod_info[264]; 3214 #ifdef NEWSGOLD 3215 #ifdef ELKA 3216 #ifdef ole64//kluchnik 3217 #define PLATFORM "Plяtform from ОлежкО" 3218 #else 3219 #define PLATFORM "Platform: ЁLKA" 3220 #endif 3221 #else 3222 #define PLATFORM "Platform: NEWЫGOLD" 3223 #endif 3224 #else 3225 #define PLATFORM "Platform: ЫGOLD" 3226 #endif 3227 3228 #define ENA_SIGNAL 1 //для команд, активировать сигналы,али нет 3229 #define DIS_SIGNAL 0 3230 3231 3232 \ In segment CODE, align 4, keep-with-next 3233 void SendData(CLIST *t,char *s,int signal,int count) 3234 { \ SendData: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0140A0E1 MOV R4,R1 \ 00000008 0050A0E1 MOV R5,R0 3235 comanda=0; \ 0000000C ........ LDR R0,??DataTable134 ;; i_rc \ 00000010 0010A0E3 MOV R1,#+0 \ 00000014 EC1480E5 STR R1,[R0, #+1260] 3236 t->signals=signal; \ 00000018 802085E5 STR R2,[R5, #+128] 3237 TPKT *p; 3238 SENDMSGCOUNT+=count; \ 0000001C 081390E5 LDR R1,[R0, #+776] \ 00000020 011083E0 ADD R1,R3,R1 \ 00000024 081380E5 STR R1,[R0, #+776] 3239 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 3240 p->pkt.uin=t->uin; \ 0000003C 0C0095E5 LDR R0,[R5, #+12] \ 00000040 000086E5 STR R0,[R6, #+0] 3241 p->pkt.type=T_SENDMSG; \ 00000044 0200A0E3 MOV R0,#+2 \ 00000048 B400C6E1 STRH R0,[R6, #+4] 3242 p->pkt.data_len=strlen(s); \ 0000004C 0400A0E1 MOV R0,R4 \ 00000050 1B0000EF SWI +27 \ 00000054 B600C6E1 STRH R0,[R6, #+6] 3243 strcpy(p->data,s); \ 00000058 0410A0E1 MOV R1,R4 \ 0000005C 080086E2 ADD R0,R6,#+8 \ 00000060 1A0000EF SWI +26 3244 SUBPROC((void *)SendAnswer,0,p); \ 00000064 ........ LDR R0,??DataTable135 ;; SendAnswer \ 00000068 0620A0E1 MOV R2,R6 \ 0000006C 0010A0E3 MOV R1,#+0 \ 00000070 710100EF SWI +369 3245 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 3246 3247 unsigned int *errornumber; 3248 \ In segment CODE, align 4, keep-with-next 3249 void CheckComand(char *txt, CLIST *t) 3250 { \ CheckComand: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3251 if(CurrentPrivateStatus==2) return; \ 00000004 ........ LDR R5,??DataTable142 ;; i_rc \ 00000008 8ADF4DE2 SUB SP,SP,#+552 \ 0000000C 00B0A0E1 MOV R11,R0 \ 00000010 740495E5 LDR R0,[R5, #+1140] \ 00000014 0140A0E1 MOV R4,R1 \ 00000018 020050E3 CMP R0,#+2 \ 0000001C 3703000A BEQ ??CheckComand_0 3252 comanda=1; 3253 #ifdef kluchnik 3254 sprintf(mod_info,"mod by Evilfox,kluchnik,windes based on revision 2058, mod date: Jule 13 2008 at 14:03:59"); \ 00000020 E06C9FE5 LDR R6,??CheckComand_1 ;; `?` \ 00000024 0100A0E3 MOV R0,#+1 \ 00000028 EC0485E5 STR R0,[R5, #+1260] 3255 #else 3256 sprintf(mod_info,"mod by Evilfox,kluchnik,windes based on revision 2058, mod date: %s at %s ",__DATE__,__TIME__); 3257 #endif 3258 // sprintf(mod_info,"mod by %s based on revision 2058, mod date: Apr 21 2008 ",devel); 3259 t->signals=1; 3260 3261 if(!strcmp_nocase(txt, "__PING") || !strcmp_nocase(txt, "ping") || !strcmp_nocase(txt, "Ping")|| !strcmp_nocase(txt, "Пинг")|| !strcmp_nocase(txt, "Зштп")) \ 0000002C ........ LDR R7,??DataTable137 ;; I_str \ 00000030 2C10A0E3 MOV R1,#+44 \ 00000034 881D81E3 ORR R1,R1,#0x2200 \ 00000038 051081E0 ADD R1,R1,R5 \ 0000003C 10108DE5 STR R1,[SP, #+16] \ 00000040 10009DE5 LDR R0,[SP, #+16] \ 00000044 0610A0E1 MOV R1,R6 \ 00000048 160000EF SWI +22 \ 0000004C 0100A0E3 MOV R0,#+1 \ 00000050 800084E5 STR R0,[R4, #+128] \ 00000054 FF80A0E3 MOV R8,#+255 \ 00000058 7F8C88E3 ORR R8,R8,#0x7F00 \ 0000005C 0090A0E3 MOV R9,#+0 \ 00000060 8C1086E2 ADD R1,R6,#+140 \ 00000064 0B00A0E1 MOV R0,R11 \ 00000068 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 1300000A BEQ ??CheckComand_2 \ 00000074 941086E2 ADD R1,R6,#+148 \ 00000078 0B00A0E1 MOV R0,R11 \ 0000007C ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000080 000050E3 CMP R0,#+0 \ 00000084 0E00000A BEQ ??CheckComand_2 \ 00000088 9C1086E2 ADD R1,R6,#+156 \ 0000008C 0B00A0E1 MOV R0,R11 \ 00000090 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000094 000050E3 CMP R0,#+0 \ 00000098 0900000A BEQ ??CheckComand_2 \ 0000009C A41086E2 ADD R1,R6,#+164 \ 000000A0 0B00A0E1 MOV R0,R11 \ 000000A4 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 000000A8 000050E3 CMP R0,#+0 \ 000000AC 0400000A BEQ ??CheckComand_2 \ 000000B0 AC1086E2 ADD R1,R6,#+172 \ 000000B4 0B00A0E1 MOV R0,R11 \ 000000B8 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 1F00001A BNE ??CheckComand_3 3262 { 3263 char *status=malloc(256); \ ??CheckComand_2: \ 000000C4 400FA0E3 MOV R0,#+256 \ 000000C8 140000EF SWI +20 \ 000000CC 00A0A0E1 MOV R10,R0 3264 TTime the; 3265 GetDateTime(NULL,&the); \ 000000D0 08108DE2 ADD R1,SP,#+8 \ 000000D4 0000A0E3 MOV R0,#+0 \ 000000D8 B40000EF SWI +180 3266 sprintf(status, "Автосообщение: Запрос пинга в %02d:%02d:%02d",the.hour, the.min,the.sec); \ 000000DC 0A00DDE5 LDRB R0,[SP, #+10] \ 000000E0 5C1086E2 ADD R1,R6,#+92 \ 000000E4 01002DE9 PUSH {R0} \ 000000E8 0D30DDE5 LDRB R3,[SP, #+13] \ 000000EC 0C20DDE5 LDRB R2,[SP, #+12] \ 000000F0 0A00A0E1 MOV R0,R10 \ 000000F4 160000EF SWI +22 3267 comanda=0; 3268 if(show_send_info) \ 000000F8 0C0C9FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 000000FC EC9485E5 STR R9,[R5, #+1260] \ 00000100 000090E5 LDR R0,[R0, #+0] \ 00000104 04D08DE2 ADD SP,SP,#+4 \ 00000108 000050E3 CMP R0,#+0 \ 0000010C 080395E5 LDR R0,[R5, #+776] \ 00000110 010080E2 ADD R0,R0,#+1 \ 00000114 080385E5 STR R0,[R5, #+776] \ 00000118 C500000A BEQ ??CheckComand_4 3269 AddStringToLog(t,0x01,status,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 0000011C 0110A0E3 MOV R1,#+1 \ 00000120 02002DE9 PUSH {R1} \ 00000124 000008E0 AND R0,R8,R0 \ 00000128 01002DE9 PUSH {R0} \ 0000012C 0730A0E1 MOV R3,R7 \ 00000130 0A20A0E1 MOV R2,R10 \ 00000134 0400A0E1 MOV R0,R4 \ 00000138 ........ BL AddStringToLog \ 0000013C 08D08DE2 ADD SP,SP,#+8 3270 else 3271 SENDMSGCOUNT++; 3272 SendData(t,status,ENA_SIGNAL,0); \ ??CheckComand_5: \ 00000140 BB0000EA B ??CheckComand_4 3273 mfree(status); 3274 return; 3275 } 3276 3277 if(!strcmp(txt, "__TEXTINFO") || !strcmp(txt, "__TI")) \ ??CheckComand_3: \ 00000144 B410A0E3 MOV R1,#+180 \ 00000148 7C1D81E3 ORR R1,R1,#0x1F00 \ 0000014C 051081E0 ADD R1,R1,R5 \ 00000150 14108DE5 STR R1,[SP, #+20] \ 00000154 7F1F86E2 ADD R1,R6,#+508 \ 00000158 0B00A0E1 MOV R0,R11 \ 0000015C 190000EF SWI +25 \ 00000160 000050E3 CMP R0,#+0 \ 00000164 0400000A BEQ ??CheckComand_6 \ 00000168 821F86E2 ADD R1,R6,#+520 \ 0000016C 0B00A0E1 MOV R0,R11 \ 00000170 190000EF SWI +25 \ 00000174 000050E3 CMP R0,#+0 \ 00000178 8200001A BNE ??CheckComand_7 3278 { 3279 char *s=malloc(16384); \ ??CheckComand_6: \ 0000017C 400CA0E3 MOV R0,#+16384 \ 00000180 140000EF SWI +20 \ 00000184 00A0A0E1 MOV R10,R0 3280 char pl[256]; 3281 *s=0; \ 00000188 0090CAE5 STRB R9,[R10, #+0] 3282 snprintf(pl,256,"%s model: %s sw: %s\r\n",PLATFORM,Get_Phone_Info(PI_MODEL),Get_Phone_Info(PI_SW_NUMBER)); \ 0000018C 0700A0E3 MOV R0,#+7 \ 00000190 D50100EF SWI +469 \ 00000194 00B0A0E1 MOV R11,R0 \ 00000198 0900A0E3 MOV R0,#+9 \ 0000019C D50100EF SWI +469 \ 000001A0 00082DE9 PUSH {R11} \ 000001A4 01002DE9 PUSH {R0} \ 000001A8 CC3086E2 ADD R3,R6,#+204 \ 000001AC B42086E2 ADD R2,R6,#+180 \ 000001B0 401FA0E3 MOV R1,#+256 \ 000001B4 30008DE2 ADD R0,SP,#+48 \ 000001B8 1B0100EF SWI +283 3283 strcat(s,pl); \ 000001BC 30108DE2 ADD R1,SP,#+48 \ 000001C0 0A00A0E1 MOV R0,R10 \ 000001C4 170000EF SWI +23 3284 char online[256]; 3285 sprintf(online,"Время в онлайн: %02d:%02d:%02d \r\n" 3286 "Сервер: %s \r\n%s \r\n", uptimeHour, uptimeMin, uptimeSec, hostbuf2,PINGO); \ 000001C8 9C00A0E3 MOV R0,#+156 \ 000001CC 640D80E3 ORR R0,R0,#0x1900 \ 000001D0 050080E0 ADD R0,R0,R5 \ 000001D4 01002DE9 PUSH {R0} \ 000001D8 20009DE5 LDR R0,[SP, #+32] \ 000001DC DC1086E2 ADD R1,R6,#+220 \ 000001E0 01002DE9 PUSH {R0} \ 000001E4 C80395E5 LDR R0,[R5, #+968] \ 000001E8 01002DE9 PUSH {R0} \ 000001EC C43395E5 LDR R3,[R5, #+964] \ 000001F0 C02395E5 LDR R2,[R5, #+960] \ 000001F4 4F0F8DE2 ADD R0,SP,#+316 \ 000001F8 160000EF SWI +22 3287 strcat(s,online); \ 000001FC 4F1F8DE2 ADD R1,SP,#+316 \ 00000200 0A00A0E1 MOV R0,R10 \ 00000204 170000EF SWI +23 3288 char *send_txt=malloc(64); \ 00000208 4000A0E3 MOV R0,#+64 \ 0000020C 140000EF SWI +20 3289 sprintf(send_txt, "Отправлено сообщений: %d \r\n" 3290 "Принято сообщений: %d \r\n", main2_count, main_count); \ 00000210 D43295E5 LDR R3,[R5, #+724] \ 00000214 D82295E5 LDR R2,[R5, #+728] \ 00000218 00B0A0E1 MOV R11,R0 \ 0000021C 441F86E2 ADD R1,R6,#+272 \ 00000220 160000EF SWI +22 3291 strcat(s,send_txt); \ 00000224 0B10A0E1 MOV R1,R11 \ 00000228 0A00A0E1 MOV R0,R10 \ 0000022C 170000EF SWI +23 3292 3293 WSHDR *ws=AllocWS(64); \ 00000230 4000A0E3 MOV R0,#+64 \ 00000234 250100EF SWI +293 \ 00000238 18008DE5 STR R0,[SP, #+24] 3294 GetProvider(ws,0); \ 0000023C 0010A0E3 MOV R1,#+0 \ 00000240 410000EF SWI +65 3295 char prov[16]; 3296 ws_2str(ws,prov,wstrlen(ws)); \ 00000244 18009DE5 LDR R0,[SP, #+24] \ 00000248 230100EF SWI +291 \ 0000024C 0020A0E1 MOV R2,R0 \ 00000250 18009DE5 LDR R0,[SP, #+24] \ 00000254 2C108DE2 ADD R1,SP,#+44 \ 00000258 A30000EF SWI +163 3297 sprintf(send_txt, "Оператор: %s \r\n", prov); \ 0000025C 2C208DE2 ADD R2,SP,#+44 \ 00000260 511F86E2 ADD R1,R6,#+324 \ 00000264 0B00A0E1 MOV R0,R11 \ 00000268 160000EF SWI +22 3298 FreeWS(ws); \ 0000026C 18009DE5 LDR R0,[SP, #+24] \ 00000270 290100EF SWI +297 3299 strcat(s,send_txt); \ 00000274 0B10A0E1 MOV R1,R11 \ 00000278 0A00A0E1 MOV R0,R10 \ 0000027C 170000EF SWI +23 3300 3301 int bat; 3302 bat=*RamCap(); \ 00000280 C88000EF SWI +32968 \ 00000284 B020D0E1 LDRH R2,[R0, #+0] 3303 sprintf(send_txt, "Заряд батареи: %d процентов \r\n", bat); \ 00000288 551F86E2 ADD R1,R6,#+340 \ 0000028C 0B00A0E1 MOV R0,R11 \ 00000290 160000EF SWI +22 3304 strcat(s,send_txt); \ 00000294 0B10A0E1 MOV R1,R11 \ 00000298 0A00A0E1 MOV R0,R10 \ 0000029C 170000EF SWI +23 3305 3306 char *status=malloc(256); \ 000002A0 400FA0E3 MOV R0,#+256 \ 000002A4 140000EF SWI +20 \ 000002A8 18008DE5 STR R0,[SP, #+24] 3307 TTime the; 3308 GetDateTime(NULL,&the); \ 000002AC 1C108DE2 ADD R1,SP,#+28 \ 000002B0 0900A0E1 MOV R0,R9 \ 000002B4 B40000EF SWI +180 3309 void Get_Online_total(); 3310 Get_Online_total(); \ 000002B8 ........ BL Get_Online_total 3311 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l \ 000002BC A02495E5 LDR R2,[R5, #+1184] \ 000002C0 A43495E5 LDR R3,[R5, #+1188] 3312 sprintf(status, "Traffic: Rx : %db Tx : %db Queue: %db \r\nTime: %02d:%02d\r\n" 3313 "Online contact: %d [total: %d] \r\nUnread message: %d/%d ", 3314 RX,TX,sendq_l, 3315 the.hour, the.min, 3316 kopa_kontaktu, kopa_online, 3317 total_unread,total_unread2); \ 000002C4 F80295E5 LDR R0,[R5, #+760] \ 000002C8 5D1F86E2 ADD R1,R6,#+372 \ 000002CC 01002DE9 PUSH {R0} \ 000002D0 AC0495E5 LDR R0,[R5, #+1196] \ 000002D4 01002DE9 PUSH {R0} \ 000002D8 C40495E5 LDR R0,[R5, #+1220] \ 000002DC 01002DE9 PUSH {R0} \ 000002E0 C80495E5 LDR R0,[R5, #+1224] \ 000002E4 01002DE9 PUSH {R0} \ 000002E8 2D00DDE5 LDRB R0,[SP, #+45] \ 000002EC 01002DE9 PUSH {R0} \ 000002F0 3000DDE5 LDRB R0,[SP, #+48] \ 000002F4 01002DE9 PUSH {R0} \ 000002F8 CC0295E5 LDR R0,[R5, #+716] \ 000002FC 01002DE9 PUSH {R0} \ 00000300 34009DE5 LDR R0,[SP, #+52] \ 00000304 160000EF SWI +22 \ 00000308 30D08DE2 ADD SP,SP,#+48 3318 strcat(s,status); \ 0000030C 04109DE5 LDR R1,[SP, #+4] \ 00000310 0A00A0E1 MOV R0,R10 \ 00000314 170000EF SWI +23 3319 comanda=0; 3320 if(show_send_info) \ 00000318 EC099FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 0000031C EC9485E5 STR R9,[R5, #+1260] \ 00000320 000090E5 LDR R0,[R0, #+0] \ 00000324 000050E3 CMP R0,#+0 \ 00000328 080395E5 LDR R0,[R5, #+776] \ 0000032C 010080E2 ADD R0,R0,#+1 \ 00000330 080385E5 STR R0,[R5, #+776] \ 00000334 0800000A BEQ ??CheckComand_8 3321 AddStringToLog(t,0x01,"Sending textinfo...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000338 0110A0E3 MOV R1,#+1 \ 0000033C 02002DE9 PUSH {R1} \ 00000340 000008E0 AND R0,R8,R0 \ 00000344 01002DE9 PUSH {R0} \ 00000348 0730A0E1 MOV R3,R7 \ 0000034C 7A2F86E2 ADD R2,R6,#+488 \ 00000350 0400A0E1 MOV R0,R4 \ 00000354 ........ BL AddStringToLog \ 00000358 08D08DE2 ADD SP,SP,#+8 3322 else 3323 SENDMSGCOUNT++; 3324 SendData(t,s,ENA_SIGNAL,0); \ ??CheckComand_8: \ 0000035C 0030A0E3 MOV R3,#+0 \ 00000360 0120A0E3 MOV R2,#+1 \ 00000364 0A10A0E1 MOV R1,R10 \ 00000368 0400A0E1 MOV R0,R4 \ 0000036C ........ BL SendData 3325 mfree(s); \ 00000370 0A00A0E1 MOV R0,R10 \ 00000374 150000EF SWI +21 3326 mfree(send_txt); \ 00000378 0B00A0E1 MOV R0,R11 \ 0000037C 150000EF SWI +21 3327 mfree(status); \ 00000380 04009DE5 LDR R0,[SP, #+4] \ 00000384 300000EA B ??CheckComand_9 3328 return; 3329 } 3330 3331 if(!strcmp(txt, "__TIME") || !strcmp(txt, "__T") || !strcmp(txt, "GET_TIME")) \ ??CheckComand_7: \ 00000388 8C1F86E2 ADD R1,R6,#+560 \ 0000038C 0B00A0E1 MOV R0,R11 \ 00000390 190000EF SWI +25 \ 00000394 000050E3 CMP R0,#+0 \ 00000398 0900000A BEQ ??CheckComand_10 \ 0000039C E01F8FE2 ADR R1,??CheckComand_11 ;; "__T" \ 000003A0 0B00A0E1 MOV R0,R11 \ 000003A4 190000EF SWI +25 \ 000003A8 000050E3 CMP R0,#+0 \ 000003AC 0400000A BEQ ??CheckComand_10 \ 000003B0 8E1F86E2 ADD R1,R6,#+568 \ 000003B4 0B00A0E1 MOV R0,R11 \ 000003B8 190000EF SWI +25 \ 000003BC 000050E3 CMP R0,#+0 \ 000003C0 2400001A BNE ??CheckComand_12 3332 { 3333 char *status=malloc(256); \ ??CheckComand_10: \ 000003C4 400FA0E3 MOV R0,#+256 \ 000003C8 140000EF SWI +20 \ 000003CC 00A0A0E1 MOV R10,R0 3334 TTime the; 3335 GetDateTime(NULL,&the); \ 000003D0 08108DE2 ADD R1,SP,#+8 \ 000003D4 0000A0E3 MOV R0,#+0 \ 000003D8 B40000EF SWI +180 3336 sprintf(status, "Time: %02d:%02d",the.hour, the.min); \ 000003DC 0930DDE5 LDRB R3,[SP, #+9] \ 000003E0 0820DDE5 LDRB R2,[SP, #+8] \ 000003E4 841F86E2 ADD R1,R6,#+528 \ 000003E8 0A00A0E1 MOV R0,R10 \ 000003EC 160000EF SWI +22 3337 comanda=0; 3338 if(show_send_info) \ 000003F0 14099FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 000003F4 EC9485E5 STR R9,[R5, #+1260] \ 000003F8 000090E5 LDR R0,[R0, #+0] \ 000003FC 000050E3 CMP R0,#+0 \ 00000400 080395E5 LDR R0,[R5, #+776] \ 00000404 010080E2 ADD R0,R0,#+1 \ 00000408 080385E5 STR R0,[R5, #+776] \ 0000040C 0800000A BEQ ??CheckComand_4 3339 AddStringToLog(t,0x01,"Sending time...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000410 0110A0E3 MOV R1,#+1 \ 00000414 02002DE9 PUSH {R1} \ 00000418 000008E0 AND R0,R8,R0 \ 0000041C 01002DE9 PUSH {R0} \ 00000420 0730A0E1 MOV R3,R7 \ 00000424 882F86E2 ADD R2,R6,#+544 \ 00000428 0400A0E1 MOV R0,R4 \ 0000042C ........ BL AddStringToLog \ 00000430 08D08DE2 ADD SP,SP,#+8 3340 else 3341 SENDMSGCOUNT++; 3342 SendData(t,status,ENA_SIGNAL,0); \ ??CheckComand_4: \ 00000434 0030A0E3 MOV R3,#+0 \ 00000438 0120A0E3 MOV R2,#+1 \ 0000043C 0A10A0E1 MOV R1,R10 \ 00000440 0400A0E1 MOV R0,R4 \ 00000444 ........ BL SendData 3343 mfree(status); \ 00000448 0A00A0E1 MOV R0,R10 \ ??CheckComand_9: \ 0000044C 150000EF SWI +21 3344 return; \ ??CheckComand_13: \ 00000450 8ADF8DE2 ADD SP,SP,#+552 \ 00000454 F08FBDE8 POP {R4-R11,PC} 3345 } 3346 3347 if(!strcmp(txt, "GET_PLATFORM_INFO") || !strcmp(txt, "__PLATFORM") || !strcmp(txt,"__HW")) \ ??CheckComand_12: \ 00000458 ........ LDR R10,??DataTable138 ;; SendAnswer \ 0000045C 9D1F86E2 ADD R1,R6,#+628 \ 00000460 0B00A0E1 MOV R0,R11 \ 00000464 190000EF SWI +25 \ 00000468 000050E3 CMP R0,#+0 \ 0000046C 0900000A BEQ ??CheckComand_14 \ 00000470 A21F86E2 ADD R1,R6,#+648 \ 00000474 0B00A0E1 MOV R0,R11 \ 00000478 190000EF SWI +25 \ 0000047C 000050E3 CMP R0,#+0 \ 00000480 0400000A BEQ ??CheckComand_14 \ 00000484 A51F86E2 ADD R1,R6,#+660 \ 00000488 0B00A0E1 MOV R0,R11 \ 0000048C 190000EF SWI +25 \ 00000490 000050E3 CMP R0,#+0 \ 00000494 3100001A BNE ??CheckComand_15 3348 { 3349 comanda=0; \ ??CheckComand_14: \ 00000498 EC9485E5 STR R9,[R5, #+1260] 3350 TPKT *p; 3351 char pl[256]; 3352 snprintf(pl,256,"%s model: %s sw: %s",PLATFORM,Get_Phone_Info(PI_MODEL),Get_Phone_Info(PI_SW_NUMBER)); \ 0000049C 0700A0E3 MOV R0,#+7 \ 000004A0 D50100EF SWI +469 \ 000004A4 0090A0E1 MOV R9,R0 \ 000004A8 0900A0E3 MOV R0,#+9 \ 000004AC D50100EF SWI +469 \ 000004B0 00022DE9 PUSH {R9} \ 000004B4 01002DE9 PUSH {R0} \ 000004B8 CC3086E2 ADD R3,R6,#+204 \ 000004BC 912F86E2 ADD R2,R6,#+580 \ 000004C0 401FA0E3 MOV R1,#+256 \ 000004C4 4C0F8DE2 ADD R0,SP,#+304 \ 000004C8 1B0100EF SWI +283 3353 p=malloc(sizeof(PKT)+strlen(pl)+1); \ 000004CC 4C0F8DE2 ADD R0,SP,#+304 \ 000004D0 1B0000EF SWI +27 \ 000004D4 090080E2 ADD R0,R0,#+9 \ 000004D8 140000EF SWI +20 \ 000004DC 0090A0E1 MOV R9,R0 3354 p->pkt.uin=t->uin; \ 000004E0 0C0094E5 LDR R0,[R4, #+12] \ 000004E4 000089E5 STR R0,[R9, #+0] 3355 p->pkt.type=T_SENDMSG; \ 000004E8 0200A0E3 MOV R0,#+2 \ 000004EC B400C9E1 STRH R0,[R9, #+4] 3356 p->pkt.data_len=strlen(pl); \ 000004F0 4C0F8DE2 ADD R0,SP,#+304 \ 000004F4 1B0000EF SWI +27 \ 000004F8 B600C9E1 STRH R0,[R9, #+6] 3357 strcpy(p->data,pl); \ 000004FC 4C1F8DE2 ADD R1,SP,#+304 \ 00000500 080089E2 ADD R0,R9,#+8 \ 00000504 1A0000EF SWI +26 3358 if(show_send_info) \ 00000508 FC079FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 0000050C 000090E5 LDR R0,[R0, #+0] \ 00000510 08D08DE2 ADD SP,SP,#+8 \ 00000514 000050E3 CMP R0,#+0 \ 00000518 080395E5 LDR R0,[R5, #+776] \ 0000051C 010080E2 ADD R0,R0,#+1 \ 00000520 080385E5 STR R0,[R5, #+776] \ 00000524 0800000A BEQ ??CheckComand_16 3359 AddStringToLog(t,0x01,"Sending platform info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000528 0110A0E3 MOV R1,#+1 \ 0000052C 02002DE9 PUSH {R1} \ 00000530 000008E0 AND R0,R8,R0 \ 00000534 01002DE9 PUSH {R0} \ 00000538 0730A0E1 MOV R3,R7 \ 0000053C 962F86E2 ADD R2,R6,#+600 \ 00000540 0400A0E1 MOV R0,R4 \ 00000544 ........ BL AddStringToLog \ 00000548 08D08DE2 ADD SP,SP,#+8 3360 else 3361 SENDMSGCOUNT++; 3362 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_16: \ 0000054C 0920A0E1 MOV R2,R9 \ ??CheckComand_17: \ 00000550 0010A0E3 MOV R1,#+0 \ 00000554 0A00A0E1 MOV R0,R10 \ 00000558 710100EF SWI +369 3363 return; \ 0000055C BBFFFFEA B ??CheckComand_13 3364 } 3365 3366 if(!strcmp(txt, "GET_ONLINE_TIME") || !strcmp(txt, "__ONLINE")) \ ??CheckComand_15: \ 00000560 B21F86E2 ADD R1,R6,#+712 \ 00000564 0B00A0E1 MOV R0,R11 \ 00000568 190000EF SWI +25 \ 0000056C 000050E3 CMP R0,#+0 \ 00000570 0400000A BEQ ??CheckComand_18 \ 00000574 B61F86E2 ADD R1,R6,#+728 \ 00000578 0B00A0E1 MOV R0,R11 \ 0000057C 190000EF SWI +25 \ 00000580 000050E3 CMP R0,#+0 \ 00000584 2D00001A BNE ??CheckComand_19 3367 { 3368 comanda=0; \ ??CheckComand_18: \ 00000588 EC9485E5 STR R9,[R5, #+1260] 3369 TPKT *p; 3370 char online[256]; 3371 sprintf(online,"Время в онлайн: %02d:%02d:%02d \n" 3372 "Сервер: %s", uptimeHour, uptimeMin, uptimeSec, hostbuf2); \ 0000058C 14009DE5 LDR R0,[SP, #+20] \ 00000590 A71F86E2 ADD R1,R6,#+668 \ 00000594 01002DE9 PUSH {R0} \ 00000598 C80395E5 LDR R0,[R5, #+968] \ 0000059C 01002DE9 PUSH {R0} \ 000005A0 C43395E5 LDR R3,[R5, #+964] \ 000005A4 C02395E5 LDR R2,[R5, #+960] \ 000005A8 4C0F8DE2 ADD R0,SP,#+304 \ 000005AC 160000EF SWI +22 3373 p=malloc(sizeof(PKT)+strlen(online)+1); \ 000005B0 4C0F8DE2 ADD R0,SP,#+304 \ 000005B4 1B0000EF SWI +27 \ 000005B8 090080E2 ADD R0,R0,#+9 \ 000005BC 140000EF SWI +20 \ 000005C0 0060A0E1 MOV R6,R0 3374 p->pkt.uin=t->uin; \ 000005C4 0C0094E5 LDR R0,[R4, #+12] \ 000005C8 000086E5 STR R0,[R6, #+0] 3375 p->pkt.type=T_SENDMSG; \ 000005CC 0200A0E3 MOV R0,#+2 \ 000005D0 B400C6E1 STRH R0,[R6, #+4] 3376 p->pkt.data_len=strlen(online); \ 000005D4 4C0F8DE2 ADD R0,SP,#+304 \ 000005D8 1B0000EF SWI +27 \ 000005DC B600C6E1 STRH R0,[R6, #+6] 3377 strcpy(p->data,online); \ 000005E0 4C1F8DE2 ADD R1,SP,#+304 \ 000005E4 080086E2 ADD R0,R6,#+8 \ 000005E8 1A0000EF SWI +26 3378 if(show_send_info) \ 000005EC 18079FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 000005F0 000090E5 LDR R0,[R0, #+0] \ 000005F4 08D08DE2 ADD SP,SP,#+8 \ 000005F8 000050E3 CMP R0,#+0 \ 000005FC 080395E5 LDR R0,[R5, #+776] \ 00000600 010080E2 ADD R0,R0,#+1 \ 00000604 080385E5 STR R0,[R5, #+776] \ 00000608 0A00000A BEQ ??CheckComand_20 3379 AddStringToLog(t,0x01,requests1,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 0000060C 0110A0E3 MOV R1,#+1 \ 00000610 02002DE9 PUSH {R1} \ 00000614 000008E0 AND R0,R8,R0 \ 00000618 01002DE9 PUSH {R0} \ 0000061C 0730A0E1 MOV R3,R7 \ 00000620 D400A0E3 MOV R0,#+212 \ 00000624 840D80E3 ORR R0,R0,#0x2100 \ 00000628 052080E0 ADD R2,R0,R5 \ 0000062C 0400A0E1 MOV R0,R4 \ 00000630 ........ BL AddStringToLog \ 00000634 08D08DE2 ADD SP,SP,#+8 3380 else 3381 SENDMSGCOUNT++; 3382 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_20: \ 00000638 0620A0E1 MOV R2,R6 \ 0000063C C3FFFFEA B ??CheckComand_17 3383 return; 3384 } 3385 3386 if(!strcmp(txt, "GET_MSG_INFO") || !strcmp(txt, "__MSG")) \ ??CheckComand_19: \ 00000640 C51F86E2 ADD R1,R6,#+788 \ 00000644 0B00A0E1 MOV R0,R11 \ 00000648 190000EF SWI +25 \ 0000064C 000050E3 CMP R0,#+0 \ 00000650 0400000A BEQ ??CheckComand_21 \ 00000654 C91F86E2 ADD R1,R6,#+804 \ 00000658 0B00A0E1 MOV R0,R11 \ 0000065C 190000EF SWI +25 \ 00000660 000050E3 CMP R0,#+0 \ 00000664 2F00001A BNE ??CheckComand_22 3387 { 3388 comanda=0; \ ??CheckComand_21: \ 00000668 EC9485E5 STR R9,[R5, #+1260] 3389 TPKT *p; 3390 char *send_txt=malloc(64); \ 0000066C 4000A0E3 MOV R0,#+64 \ 00000670 140000EF SWI +20 3391 sprintf(send_txt, "Отправлено сообщений: %d \n" 3392 "Принято сообщений: %d" 3393 , main2_count, main_count); \ 00000674 D43295E5 LDR R3,[R5, #+724] \ 00000678 D82295E5 LDR R2,[R5, #+728] \ 0000067C 0090A0E1 MOV R9,R0 \ 00000680 B91F86E2 ADD R1,R6,#+740 \ 00000684 160000EF SWI +22 3394 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 00000688 0900A0E1 MOV R0,R9 \ 0000068C 1B0000EF SWI +27 \ 00000690 090080E2 ADD R0,R0,#+9 \ 00000694 140000EF SWI +20 \ 00000698 0060A0E1 MOV R6,R0 3395 p->pkt.uin=t->uin; \ 0000069C 0C0094E5 LDR R0,[R4, #+12] \ 000006A0 000086E5 STR R0,[R6, #+0] 3396 p->pkt.type=T_SENDMSG; \ 000006A4 0200A0E3 MOV R0,#+2 \ 000006A8 B400C6E1 STRH R0,[R6, #+4] 3397 p->pkt.data_len=strlen(send_txt); \ 000006AC 0900A0E1 MOV R0,R9 \ 000006B0 1B0000EF SWI +27 \ 000006B4 B600C6E1 STRH R0,[R6, #+6] 3398 strcpy(p->data,send_txt); \ 000006B8 0910A0E1 MOV R1,R9 \ 000006BC 080086E2 ADD R0,R6,#+8 \ 000006C0 1A0000EF SWI +26 3399 if(show_send_info) \ 000006C4 40069FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 000006C8 000090E5 LDR R0,[R0, #+0] \ 000006CC 000050E3 CMP R0,#+0 \ 000006D0 080395E5 LDR R0,[R5, #+776] \ 000006D4 010080E2 ADD R0,R0,#+1 \ 000006D8 080385E5 STR R0,[R5, #+776] \ 000006DC 0A00000A BEQ ??CheckComand_23 3400 AddStringToLog(t,0x01,requests2,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000006E0 0110A0E3 MOV R1,#+1 \ 000006E4 02002DE9 PUSH {R1} \ 000006E8 000008E0 AND R0,R8,R0 \ 000006EC 01002DE9 PUSH {R0} \ 000006F0 0730A0E1 MOV R3,R7 \ 000006F4 EC00A0E3 MOV R0,#+236 \ 000006F8 840D80E3 ORR R0,R0,#0x2100 \ 000006FC 052080E0 ADD R2,R0,R5 \ 00000700 0400A0E1 MOV R0,R4 \ 00000704 ........ BL AddStringToLog \ 00000708 08D08DE2 ADD SP,SP,#+8 3401 else 3402 SENDMSGCOUNT++; 3403 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_23: \ 0000070C 0620A0E1 MOV R2,R6 \ 00000710 0010A0E3 MOV R1,#+0 \ 00000714 0A00A0E1 MOV R0,R10 \ 00000718 710100EF SWI +369 3404 mfree(send_txt); \ 0000071C 0900A0E1 MOV R0,R9 \ 00000720 49FFFFEA B ??CheckComand_9 \ ??CheckComand_11: \ 00000724 5F5F5400 DC8 "__T" 3405 return; 3406 } 3407 3408 //==========================windes commands begin ===================== 3409 3410 if(!strcmp(txt, "GET_PROVIDER") || !strcmp(txt, "__PROVIDER")) \ ??CheckComand_22: \ 00000728 D61F86E2 ADD R1,R6,#+856 \ 0000072C 0B00A0E1 MOV R0,R11 \ 00000730 190000EF SWI +25 \ 00000734 000050E3 CMP R0,#+0 \ 00000738 0400000A BEQ ??CheckComand_24 \ 0000073C DA1F86E2 ADD R1,R6,#+872 \ 00000740 0B00A0E1 MOV R0,R11 \ 00000744 190000EF SWI +25 \ 00000748 000050E3 CMP R0,#+0 \ 0000074C 3600001A BNE ??CheckComand_25 3411 { 3412 comanda=0; \ ??CheckComand_24: \ 00000750 EC9485E5 STR R9,[R5, #+1260] 3413 TPKT *p; 3414 3415 WSHDR *ws=AllocWS(32); \ 00000754 2000A0E3 MOV R0,#+32 \ 00000758 250100EF SWI +293 \ 0000075C 0090A0E1 MOV R9,R0 3416 GetProvider(ws,0); \ 00000760 0010A0E3 MOV R1,#+0 \ 00000764 410000EF SWI +65 3417 char prov[16]; 3418 ws_2str(ws,prov,wstrlen(ws)); \ 00000768 0900A0E1 MOV R0,R9 \ 0000076C 230100EF SWI +291 \ 00000770 0020A0E1 MOV R2,R0 \ 00000774 18108DE2 ADD R1,SP,#+24 \ 00000778 0900A0E1 MOV R0,R9 \ 0000077C A30000EF SWI +163 3419 char *send_txt=malloc(32); \ 00000780 2000A0E3 MOV R0,#+32 \ 00000784 140000EF SWI +20 \ 00000788 00B0A0E1 MOV R11,R0 3420 sprintf(send_txt, "Оператор: %s", prov); \ 0000078C 18208DE2 ADD R2,SP,#+24 \ 00000790 CB1F86E2 ADD R1,R6,#+812 \ 00000794 160000EF SWI +22 3421 FreeWS(ws); \ 00000798 0900A0E1 MOV R0,R9 \ 0000079C 290100EF SWI +297 3422 3423 p=malloc(sizeof(PKT)+28+1); \ 000007A0 2500A0E3 MOV R0,#+37 \ 000007A4 140000EF SWI +20 \ 000007A8 0090A0E1 MOV R9,R0 3424 p->pkt.uin=t->uin; \ 000007AC 0C0094E5 LDR R0,[R4, #+12] \ 000007B0 000089E5 STR R0,[R9, #+0] 3425 p->pkt.type=T_SENDMSG; \ 000007B4 0200A0E3 MOV R0,#+2 \ 000007B8 B400C9E1 STRH R0,[R9, #+4] 3426 p->pkt.data_len=strlen(send_txt); \ 000007BC 0B00A0E1 MOV R0,R11 \ 000007C0 1B0000EF SWI +27 \ 000007C4 B600C9E1 STRH R0,[R9, #+6] 3427 strcpy(p->data,send_txt); \ 000007C8 0B10A0E1 MOV R1,R11 \ 000007CC 080089E2 ADD R0,R9,#+8 \ 000007D0 1A0000EF SWI +26 3428 if(show_send_info) \ 000007D4 30059FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 000007D8 000090E5 LDR R0,[R0, #+0] \ 000007DC 000050E3 CMP R0,#+0 \ 000007E0 080395E5 LDR R0,[R5, #+776] \ 000007E4 010080E2 ADD R0,R0,#+1 \ 000007E8 080385E5 STR R0,[R5, #+776] \ 000007EC 0800000A BEQ ??CheckComand_26 3429 AddStringToLog(t,0x01,"Sending provider name...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000007F0 0110A0E3 MOV R1,#+1 \ 000007F4 02002DE9 PUSH {R1} \ 000007F8 000008E0 AND R0,R8,R0 \ 000007FC 01002DE9 PUSH {R0} \ 00000800 0730A0E1 MOV R3,R7 \ 00000804 CF2F86E2 ADD R2,R6,#+828 \ 00000808 0400A0E1 MOV R0,R4 \ 0000080C ........ BL AddStringToLog \ 00000810 08D08DE2 ADD SP,SP,#+8 3430 else 3431 SENDMSGCOUNT++; 3432 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_26: \ 00000814 0920A0E1 MOV R2,R9 \ 00000818 0010A0E3 MOV R1,#+0 \ 0000081C 0A00A0E1 MOV R0,R10 \ 00000820 710100EF SWI +369 3433 mfree(send_txt); \ 00000824 0B00A0E1 MOV R0,R11 \ 00000828 07FFFFEA B ??CheckComand_9 3434 return; 3435 } 3436 3437 3438 //----------------------------------------------------------------------- 3439 3440 3441 if(!strcmp(txt, "GET_MOD_INFO") || !strcmp(txt, "__MOD")) \ ??CheckComand_25: \ 0000082C E21F86E2 ADD R1,R6,#+904 \ 00000830 0B00A0E1 MOV R0,R11 \ 00000834 190000EF SWI +25 \ 00000838 000050E3 CMP R0,#+0 \ 0000083C 0400000A BEQ ??CheckComand_27 \ 00000840 E61F86E2 ADD R1,R6,#+920 \ 00000844 0B00A0E1 MOV R0,R11 \ 00000848 190000EF SWI +25 \ 0000084C 000050E3 CMP R0,#+0 \ 00000850 3B00001A BNE ??CheckComand_28 3442 { 3443 comanda=0; \ ??CheckComand_27: \ 00000854 EC9485E5 STR R9,[R5, #+1260] 3444 TPKT *p; 3445 char *send_txt=malloc(256); \ 00000858 400FA0E3 MOV R0,#+256 \ 0000085C 140000EF SWI +20 \ 00000860 0090A0E1 MOV R9,R0 3446 // sprintf(I_UIN, "uin%d", t->uin); 3447 strcpy(I_UIN, t->name); \ 00000864 B400A0E3 MOV R0,#+180 \ 00000868 800D80E3 ORR R0,R0,#0x2000 \ 0000086C 05B080E0 ADD R11,R0,R5 \ 00000870 141084E2 ADD R1,R4,#+20 \ 00000874 0B00A0E1 MOV R0,R11 \ 00000878 1A0000EF SWI +26 3448 if(strstr(ignor_list,I_UIN)==0) \ 0000087C ........ LDR R0,??DataTable139 ;; ignor_list \ 00000880 0B10A0E1 MOV R1,R11 \ 00000884 180100EF SWI +280 \ 00000888 000050E3 CMP R0,#+0 3449 { 3450 strcpy(send_txt, mod_info); \ 0000088C 10109D05 LDREQ R1,[SP, #+16] 3451 } 3452 else 3453 strcpy(send_txt, "***Access denied***"); \ 00000890 0900A0E1 MOV R0,R9 \ 00000894 DD1F8612 ADDNE R1,R6,#+884 \ 00000898 1A0000EF SWI +26 3454 3455 strcpy(send_txt, mod_info); \ 0000089C 10109DE5 LDR R1,[SP, #+16] \ 000008A0 0900A0E1 MOV R0,R9 \ 000008A4 1A0000EF SWI +26 3456 3457 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000008A8 0900A0E1 MOV R0,R9 \ 000008AC 1B0000EF SWI +27 \ 000008B0 090080E2 ADD R0,R0,#+9 \ 000008B4 140000EF SWI +20 \ 000008B8 0060A0E1 MOV R6,R0 3458 p->pkt.uin=t->uin; \ 000008BC 0C0094E5 LDR R0,[R4, #+12] \ 000008C0 000086E5 STR R0,[R6, #+0] 3459 p->pkt.type=T_SENDMSG; \ 000008C4 0200A0E3 MOV R0,#+2 \ 000008C8 B400C6E1 STRH R0,[R6, #+4] 3460 p->pkt.data_len=strlen(send_txt); \ 000008CC 0900A0E1 MOV R0,R9 \ 000008D0 1B0000EF SWI +27 \ 000008D4 B600C6E1 STRH R0,[R6, #+6] 3461 strcpy(p->data,send_txt); \ 000008D8 0910A0E1 MOV R1,R9 \ 000008DC 080086E2 ADD R0,R6,#+8 \ 000008E0 1A0000EF SWI +26 3462 #ifdef EVILFOX 3463 SENDMSGCOUNT++; 3464 #else 3465 if(show_send_info) \ 000008E4 20049FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 000008E8 000090E5 LDR R0,[R0, #+0] \ 000008EC 000050E3 CMP R0,#+0 \ 000008F0 080395E5 LDR R0,[R5, #+776] \ 000008F4 010080E2 ADD R0,R0,#+1 \ 000008F8 080385E5 STR R0,[R5, #+776] \ 000008FC 0A00000A BEQ ??CheckComand_29 3466 AddStringToLog(t,0x01,requests4,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000900 0110A0E3 MOV R1,#+1 \ 00000904 02002DE9 PUSH {R1} \ 00000908 000008E0 AND R0,R8,R0 \ 0000090C 01002DE9 PUSH {R0} \ 00000910 0730A0E1 MOV R3,R7 \ 00000914 1800A0E3 MOV R0,#+24 \ 00000918 880D80E3 ORR R0,R0,#0x2200 \ 0000091C 052080E0 ADD R2,R0,R5 \ 00000920 0400A0E1 MOV R0,R4 \ 00000924 ........ BL AddStringToLog \ 00000928 08D08DE2 ADD SP,SP,#+8 3467 else 3468 SENDMSGCOUNT++; 3469 #endif 3470 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_29: \ 0000092C 0620A0E1 MOV R2,R6 \ 00000930 0010A0E3 MOV R1,#+0 \ 00000934 0A00A0E1 MOV R0,R10 \ 00000938 710100EF SWI +369 3471 mfree(send_txt); \ 0000093C 0900A0E1 MOV R0,R9 \ 00000940 C1FEFFEA B ??CheckComand_9 3472 return; 3473 } 3474 3475 if(!strcmp(txt, "GET_BAT_INFO") || !strcmp(txt, "__BAT")) \ ??CheckComand_28: \ 00000944 EF1F86E2 ADD R1,R6,#+956 \ 00000948 0B00A0E1 MOV R0,R11 \ 0000094C 190000EF SWI +25 \ 00000950 000050E3 CMP R0,#+0 \ 00000954 0400000A BEQ ??CheckComand_30 \ 00000958 F31F86E2 ADD R1,R6,#+972 \ 0000095C 0B00A0E1 MOV R0,R11 \ 00000960 190000EF SWI +25 \ 00000964 000050E3 CMP R0,#+0 \ 00000968 2B00001A BNE ??CheckComand_31 3476 { 3477 comanda=0; \ ??CheckComand_30: \ 0000096C EC9485E5 STR R9,[R5, #+1260] 3478 TPKT *p; 3479 int bat; 3480 bat=*RamCap(); \ 00000970 C88000EF SWI +32968 \ 00000974 B0B0D0E1 LDRH R11,[R0, #+0] 3481 char *send_txt=malloc(64); \ 00000978 4000A0E3 MOV R0,#+64 \ 0000097C 140000EF SWI +20 \ 00000980 0090A0E1 MOV R9,R0 3482 sprintf(send_txt, "Заряд батареи: %d процентов", bat); \ 00000984 0B20A0E1 MOV R2,R11 \ 00000988 E81F86E2 ADD R1,R6,#+928 \ 0000098C 160000EF SWI +22 3483 p=malloc(sizeof(PKT)+28+1); \ 00000990 2500A0E3 MOV R0,#+37 \ 00000994 140000EF SWI +20 \ 00000998 0060A0E1 MOV R6,R0 3484 p->pkt.uin=t->uin; \ 0000099C 0C0094E5 LDR R0,[R4, #+12] \ 000009A0 000086E5 STR R0,[R6, #+0] 3485 p->pkt.type=T_SENDMSG; \ 000009A4 0200A0E3 MOV R0,#+2 \ 000009A8 B400C6E1 STRH R0,[R6, #+4] 3486 p->pkt.data_len=strlen(send_txt); \ 000009AC 0900A0E1 MOV R0,R9 \ 000009B0 1B0000EF SWI +27 \ 000009B4 B600C6E1 STRH R0,[R6, #+6] 3487 strcpy(p->data,send_txt); \ 000009B8 0910A0E1 MOV R1,R9 \ 000009BC 080086E2 ADD R0,R6,#+8 \ 000009C0 1A0000EF SWI +26 3488 #ifdef EVILFOX 3489 SENDMSGCOUNT++; 3490 #else 3491 if(show_send_info) \ 000009C4 40039FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 000009C8 000090E5 LDR R0,[R0, #+0] \ 000009CC 000050E3 CMP R0,#+0 \ 000009D0 080395E5 LDR R0,[R5, #+776] \ 000009D4 010080E2 ADD R0,R0,#+1 \ 000009D8 080385E5 STR R0,[R5, #+776] \ 000009DC 0800000A BEQ ??CheckComand_32 3492 AddStringToLog(t,0x01,requests3,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000009E0 0110A0E3 MOV R1,#+1 \ 000009E4 02002DE9 PUSH {R1} \ 000009E8 000008E0 AND R0,R8,R0 \ 000009EC 01002DE9 PUSH {R0} \ 000009F0 0730A0E1 MOV R3,R7 \ 000009F4 882D85E2 ADD R2,R5,#+8704 \ 000009F8 0400A0E1 MOV R0,R4 \ 000009FC ........ BL AddStringToLog \ 00000A00 08D08DE2 ADD SP,SP,#+8 3493 else 3494 SENDMSGCOUNT++; 3495 #endif 3496 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_32: \ 00000A04 0620A0E1 MOV R2,R6 \ 00000A08 0010A0E3 MOV R1,#+0 \ 00000A0C 0A00A0E1 MOV R0,R10 \ 00000A10 710100EF SWI +369 3497 mfree(send_txt); \ 00000A14 0900A0E1 MOV R0,R9 \ 00000A18 8BFEFFEA B ??CheckComand_9 3498 return; 3499 } 3500 3501 if((away_m==1 || t->isautomsg) && (t->automsgcount < automsgcount)) \ ??CheckComand_31: \ 00000A1C B01395E5 LDR R1,[R5, #+944] \ 00000A20 ........ LDR R2,??DataTable140 ;; automsgcount \ 00000A24 700094E5 LDR R0,[R4, #+112] \ 00000A28 002092E5 LDR R2,[R2, #+0] \ 00000A2C 010051E3 CMP R1,#+1 \ 00000A30 0100000A BEQ ??CheckComand_33 \ 00000A34 000050E3 CMP R0,#+0 \ 00000A38 3700000A BEQ ??CheckComand_34 \ ??CheckComand_33: \ 00000A3C 883094E5 LDR R3,[R4, #+136] \ 00000A40 020053E1 CMP R3,R2 \ 00000A44 3200002A BCS ??CheckComand_35 3502 { 3503 t->automsgcount++; 3504 comanda=1; 3505 TPKT *p; 3506 // sprintf(hah,"online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); 3507 sprintf(away_msg, "Автоответчик: %s %s! %s %s", awayHelloMsg, t->name, awayMsg, away_msg_time); \ 00000A48 C0229FE5 LDR R2,??CheckComand_1+0x8 ;; awayHelloMsg \ 00000A4C 010083E2 ADD R0,R3,#+1 \ 00000A50 880084E5 STR R0,[R4, #+136] \ 00000A54 0100A0E3 MOV R0,#+1 \ 00000A58 EC0485E5 STR R0,[R5, #+1260] \ 00000A5C 9C00A0E3 MOV R0,#+156 \ 00000A60 680D80E3 ORR R0,R0,#0x1A00 \ 00000A64 059080E0 ADD R9,R0,R5 \ 00000A68 420F80E2 ADD R0,R0,#+264 \ 00000A6C 050080E0 ADD R0,R0,R5 \ 00000A70 01002DE9 PUSH {R0} \ 00000A74 ........ LDR R0,??DataTable141 ;; awayMsg \ 00000A78 143084E2 ADD R3,R4,#+20 \ 00000A7C 01002DE9 PUSH {R0} \ 00000A80 F51F86E2 ADD R1,R6,#+980 \ 00000A84 0900A0E1 MOV R0,R9 \ 00000A88 160000EF SWI +22 3508 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 00000A8C 0900A0E1 MOV R0,R9 \ 00000A90 1B0000EF SWI +27 \ 00000A94 090080E2 ADD R0,R0,#+9 \ 00000A98 140000EF SWI +20 \ 00000A9C 0060A0E1 MOV R6,R0 3509 p->pkt.uin=t->uin; \ 00000AA0 0C0094E5 LDR R0,[R4, #+12] \ 00000AA4 000086E5 STR R0,[R6, #+0] 3510 p->pkt.type=T_SENDMSG; \ 00000AA8 0200A0E3 MOV R0,#+2 \ 00000AAC B400C6E1 STRH R0,[R6, #+4] 3511 p->pkt.data_len=strlen(away_msg); \ 00000AB0 0900A0E1 MOV R0,R9 \ 00000AB4 1B0000EF SWI +27 \ 00000AB8 B600C6E1 STRH R0,[R6, #+6] 3512 strcpy(p->data,away_msg); \ 00000ABC 0910A0E1 MOV R1,R9 \ 00000AC0 080086E2 ADD R0,R6,#+8 \ 00000AC4 1A0000EF SWI +26 3513 if(show_send_info) \ 00000AC8 3C029FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 00000ACC 000090E5 LDR R0,[R0, #+0] \ 00000AD0 08D08DE2 ADD SP,SP,#+8 \ 00000AD4 000050E3 CMP R0,#+0 \ 00000AD8 080395E5 LDR R0,[R5, #+776] \ 00000ADC 010080E2 ADD R0,R0,#+1 \ 00000AE0 080385E5 STR R0,[R5, #+776] \ 00000AE4 0800000A BEQ ??CheckComand_36 3514 { 3515 #ifdef kluchnik 3516 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000AE8 0110A0E3 MOV R1,#+1 \ 00000AEC 02002DE9 PUSH {R1} \ 00000AF0 000008E0 AND R0,R8,R0 \ 00000AF4 01002DE9 PUSH {R0} \ 00000AF8 0730A0E1 MOV R3,R7 \ 00000AFC 0920A0E1 MOV R2,R9 \ 00000B00 0400A0E1 MOV R0,R4 \ 00000B04 ........ BL AddStringToLog \ 00000B08 08D08DE2 ADD SP,SP,#+8 3517 #else 3518 AddStringToLog(t,0x01,requests6,I_str,(++SENDMSGCOUNT)&0x7FFF,1); 3519 #endif 3520 } 3521 else 3522 SENDMSGCOUNT++; 3523 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_36: \ 00000B0C 0620A0E1 MOV R2,R6 \ 00000B10 8EFEFFEA B ??CheckComand_17 3524 return; 3525 } 3526 /* else 3527 if((away_m==1 || t->isautomsg) && (t->automsgcount<=(automsgcount+3)) ) 3528 { 3529 t->awaysignal=0; 3530 t->automsgcount++; 3531 sprintf(away_msg,"Бля,ну русским ж языком написали,НЕТУ МЕНЯ!!!че по сто сообщений слать?тем более если тебе делать нех..."); 3532 if(show_send_info) 3533 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF,1); 3534 else 3535 SENDMSGCOUNT++; 3536 SendData(t,away_msg,ENA_SIGNAL,0); 3537 return; 3538 }*/ 3539 else 3540 if(away_m==1 || t->isautomsg) \ ??CheckComand_35: \ 00000B14 010051E3 CMP R1,#+1 \ 00000B18 0100000A BEQ ??CheckComand_37 \ ??CheckComand_34: \ 00000B1C 000050E3 CMP R0,#+0 \ 00000B20 0100000A BEQ ??CheckComand_38 3541 { 3542 t->automsgcount=automsgcount; \ ??CheckComand_37: \ 00000B24 882084E5 STR R2,[R4, #+136] 3543 return; \ 00000B28 48FEFFEA B ??CheckComand_13 3544 } 3545 3546 3547 //---------------------------------------------------------------------------// 3548 3549 3550 if(!strcmp(txt, "GET_URL_INFO") || !strcmp(txt, "__URL"))// by kluchnik 26.03.08 \ ??CheckComand_38: \ 00000B2C 6800A0E3 MOV R0,#+104 \ 00000B30 400E80E3 ORR R0,R0,#0x400 \ 00000B34 061080E0 ADD R1,R0,R6 \ 00000B38 0B00A0E1 MOV R0,R11 \ 00000B3C 190000EF SWI +25 \ 00000B40 000050E3 CMP R0,#+0 \ 00000B44 0600000A BEQ ??CheckComand_39 \ 00000B48 7800A0E3 MOV R0,#+120 \ 00000B4C 400E80E3 ORR R0,R0,#0x400 \ 00000B50 061080E0 ADD R1,R0,R6 \ 00000B54 0B00A0E1 MOV R0,R11 \ 00000B58 190000EF SWI +25 \ 00000B5C 000050E3 CMP R0,#+0 \ 00000B60 3500001A BNE ??CheckComand_40 3551 { 3552 comanda=0; \ ??CheckComand_39: \ 00000B64 EC9485E5 STR R9,[R5, #+1260] 3553 TPKT *p; 3554 3555 char *send_txt=malloc(256); \ 00000B68 400FA0E3 MOV R0,#+256 \ 00000B6C 140000EF SWI +20 \ 00000B70 0090A0E1 MOV R9,R0 3556 sprintf(send_txt,"revision 2058, mod date: %s at %s ", 3557 "http://kluchnik.jino-net.ru/naticqmod/",__DATE__,__TIME__); \ 00000B74 4800A0E3 MOV R0,#+72 \ 00000B78 400E80E3 ORR R0,R0,#0x400 \ 00000B7C 060080E0 ADD R0,R0,R6 \ 00000B80 01002DE9 PUSH {R0} \ 00000B84 FC1F86E2 ADD R1,R6,#+1008 \ 00000B88 3C00A0E3 MOV R0,#+60 \ 00000B8C 400E80E3 ORR R0,R0,#0x400 \ 00000B90 063080E0 ADD R3,R0,R6 \ 00000B94 2800C0E3 BIC R0,R0,#0x28 \ 00000B98 062080E0 ADD R2,R0,R6 \ 00000B9C 0900A0E1 MOV R0,R9 \ 00000BA0 160000EF SWI +22 3558 3559 p=malloc(sizeof(PKT)+256); \ 00000BA4 420FA0E3 MOV R0,#+264 \ 00000BA8 140000EF SWI +20 \ 00000BAC 00B0A0E1 MOV R11,R0 3560 p->pkt.uin=t->uin; \ 00000BB0 0C0094E5 LDR R0,[R4, #+12] \ 00000BB4 00008BE5 STR R0,[R11, #+0] 3561 p->pkt.type=T_SENDMSG; \ 00000BB8 0200A0E3 MOV R0,#+2 \ 00000BBC B400CBE1 STRH R0,[R11, #+4] 3562 p->pkt.data_len=strlen(send_txt); \ 00000BC0 0900A0E1 MOV R0,R9 \ 00000BC4 1B0000EF SWI +27 \ 00000BC8 B600CBE1 STRH R0,[R11, #+6] 3563 strcpy(p->data,send_txt); \ 00000BCC 0910A0E1 MOV R1,R9 \ 00000BD0 08008BE2 ADD R0,R11,#+8 \ 00000BD4 1A0000EF SWI +26 3564 if(show_send_info) \ 00000BD8 2C019FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 00000BDC 000090E5 LDR R0,[R0, #+0] \ 00000BE0 04D08DE2 ADD SP,SP,#+4 \ 00000BE4 000050E3 CMP R0,#+0 \ 00000BE8 080395E5 LDR R0,[R5, #+776] \ 00000BEC 010080E2 ADD R0,R0,#+1 \ 00000BF0 080385E5 STR R0,[R5, #+776] \ 00000BF4 0A00000A BEQ ??CheckComand_41 3565 AddStringToLog(t,0x01,"Sending url info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000BF8 0110A0E3 MOV R1,#+1 \ 00000BFC 02002DE9 PUSH {R1} \ 00000C00 000008E0 AND R0,R8,R0 \ 00000C04 01002DE9 PUSH {R0} \ 00000C08 0730A0E1 MOV R3,R7 \ 00000C0C 5400A0E3 MOV R0,#+84 \ 00000C10 400E80E3 ORR R0,R0,#0x400 \ 00000C14 062080E0 ADD R2,R0,R6 \ 00000C18 0400A0E1 MOV R0,R4 \ 00000C1C ........ BL AddStringToLog \ 00000C20 08D08DE2 ADD SP,SP,#+8 3566 else 3567 SENDMSGCOUNT++; 3568 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_41: \ 00000C24 0B20A0E1 MOV R2,R11 \ 00000C28 0010A0E3 MOV R1,#+0 \ 00000C2C 0A00A0E1 MOV R0,R10 \ 00000C30 710100EF SWI +369 3569 mfree(send_txt); \ 00000C34 0900A0E1 MOV R0,R9 \ 00000C38 03FEFFEA B ??CheckComand_9 3570 return; 3571 } 3572 3573 #ifdef kluchnik // не доступно для всех,потому что имхо,будет еще большая перегрузка серверов!!!а оно нам надо? 3574 if(t->isautobot) \ ??CheckComand_40: \ 00000C3C 5C0094E5 LDR R0,[R4, #+92] \ 00000C40 000050E3 CMP R0,#+0 \ 00000C44 2A00000A BEQ ??CheckComand_42 3575 { 3576 TPKT *p; 3577 int i=LoadBotMessage(t->uin); \ 00000C48 0C0094E5 LDR R0,[R4, #+12] \ 00000C4C ........ BL LoadBotMessage 3578 if(i==0) return;//если нет никаких файлов то просто возвращаемся \ 00000C50 000050E3 CMP R0,#+0 \ 00000C54 2900000A BEQ ??CheckComand_0 3579 char *pp=bot_lines[t->bot_msg]; \ 00000C58 581094E5 LDR R1,[R4, #+88] \ 00000C5C 882495E5 LDR R2,[R5, #+1160] \ 00000C60 017192E7 LDR R7,[R2, +R1, LSL #+2] 3580 t->bot_msg++; \ 00000C64 011081E2 ADD R1,R1,#+1 \ 00000C68 581084E5 STR R1,[R4, #+88] 3581 if(t->bot_msg==i) \ 00000C6C 000051E1 CMP R1,R0 3582 t->bot_msg=0; \ 00000C70 58908405 STREQ R9,[R4, #+88] 3583 p=malloc(sizeof(PKT)+strlen(pp)+1); \ 00000C74 0700A0E1 MOV R0,R7 \ 00000C78 1B0000EF SWI +27 \ 00000C7C 090080E2 ADD R0,R0,#+9 \ 00000C80 140000EF SWI +20 \ 00000C84 0090A0E1 MOV R9,R0 3584 p->pkt.uin=t->uin; \ 00000C88 0C0094E5 LDR R0,[R4, #+12] \ 00000C8C 000089E5 STR R0,[R9, #+0] 3585 p->pkt.type=T_SENDMSG; \ 00000C90 0200A0E3 MOV R0,#+2 \ 00000C94 B400C9E1 STRH R0,[R9, #+4] 3586 p->pkt.data_len=strlen(pp); \ 00000C98 0700A0E1 MOV R0,R7 \ 00000C9C 1B0000EF SWI +27 \ 00000CA0 B600C9E1 STRH R0,[R9, #+6] 3587 strcpy(p->data,pp); \ 00000CA4 0710A0E1 MOV R1,R7 \ 00000CA8 080089E2 ADD R0,R9,#+8 \ 00000CAC 1A0000EF SWI +26 3588 AddStringToLog(t,0x01,pp,"Autobot",(++SENDMSGCOUNT)&0x7FFF,1); \ 00000CB0 080395E5 LDR R0,[R5, #+776] \ 00000CB4 0110A0E3 MOV R1,#+1 \ 00000CB8 010080E2 ADD R0,R0,#+1 \ 00000CBC 080385E5 STR R0,[R5, #+776] \ 00000CC0 02002DE9 PUSH {R1} \ 00000CC4 000008E0 AND R0,R8,R0 \ 00000CC8 01002DE9 PUSH {R0} \ 00000CCC 483E86E2 ADD R3,R6,#+1152 \ 00000CD0 0720A0E1 MOV R2,R7 \ 00000CD4 0400A0E1 MOV R0,R4 \ 00000CD8 ........ BL AddStringToLog 3589 SUBPROC((void *)SendAnswer,0,p); \ 00000CDC 0920A0E1 MOV R2,R9 \ 00000CE0 0010A0E3 MOV R1,#+0 \ 00000CE4 0A00A0E1 MOV R0,R10 \ 00000CE8 710100EF SWI +369 3590 return; \ 00000CEC 08D08DE2 ADD SP,SP,#+8 \ 00000CF0 D6FDFFEA B ??CheckComand_13 3591 } 3592 #endif 3593 3594 CheckComand2(txt,t); \ ??CheckComand_42: \ 00000CF4 0410A0E1 MOV R1,R4 \ 00000CF8 0B00A0E1 MOV R0,R11 \ 00000CFC ........ _BLF CheckComand2,??CheckComand2??rA 3595 } \ ??CheckComand_0: \ 00000D00 8ADF8DE2 ADD SP,SP,#+552 ;; stack cleaning \ 00000D04 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CheckComand_1: \ 00000D08 ........ DC32 `?` \ 00000D0C ........ DC32 show_send_info \ 00000D10 ........ DC32 awayHelloMsg 3596 3597 //------------- Попап месаже для подключившегося контакта -----------// 3598 extern DYNPNGICONLIST *GetXSByItem(int curitem); \ In segment DATA_Z, align 4, align-sorted 3599 char INC_Nick[32]; \ INC_Nick: \ 00000000 DS8 32 3600 char show_nick[32]; 3601 int INC_show; 3602 3603 char onContact[64]; 3604 int INC_show2; 3605 GBSTMR incs2; 3606 extern void DrawScreenShot(); 3607 int pp_icon; 3608 int pp_xicon; \ In segment CODE, align 4, keep-with-next 3609 void show_on_contact() 3610 { \ show_on_contact: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 3611 if(INC_show2>0/* && !(IsGuiOnTop(maingui_id))*/) \ 00000004 ........ LDR R4,??DataTable142 ;; i_rc \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C F40494E5 LDR R0,[R4, #+1268] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 F387BDB8 POPLT {R0,R1,R4-R10,PC} 3612 { 3613 WSHDR *ws=AllocWS(64); \ 00000018 4000A0E3 MOV R0,#+64 \ 0000001C 250100EF SWI +293 \ 00000020 0050A0E1 MOV R5,R0 3614 ascii2ws(ws,onContact); \ 00000024 5400A0E3 MOV R0,#+84 \ 00000028 8C0D80E3 ORR R0,R0,#0x2300 \ 0000002C 041080E0 ADD R1,R0,R4 \ 00000030 0500A0E1 MOV R0,R5 \ 00000034 ........ _BLF ascii2ws,??ascii2ws??rA 3615 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] 3616 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 00000040 98219FE5 LDR R2,??show_on_contact_0 ;; `?` \ 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 3617 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_1 3618 { 3619 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 3620 INC_show2-=2; \ 00000074 F40494E5 LDR R0,[R4, #+1268] \ 00000078 020040E2 SUB R0,R0,#+2 \ 0000007C 010000EA B ??show_on_contact_2 3621 } 3622 else 3623 INC_show2--; \ ??show_on_contact_1: \ 00000080 F40494E5 LDR R0,[R4, #+1268] \ 00000084 010040E2 SUB R0,R0,#+1 \ ??show_on_contact_2: \ 00000088 F40484E5 STR R0,[R4, #+1268] 3624 3625 int x=0; \ 0000008C F80494E5 LDR R0,[R4, #+1272] \ 00000090 0060A0E3 MOV R6,#+0 \ 00000094 000184E0 ADD R0,R4,R0, LSL #+2 \ 00000098 200090E5 LDR R0,[R0, #+32] \ 0000009C 000050E3 CMP R0,#+0 3626 if(icons[pp_icon]) 3627 x=icons[pp_icon]->w; \ 000000A0 B060D011 LDRHNE R6,[R0, #+0] 3628 3629 if(pp_xicon!=0 && XStatusImg[pp_xicon]) \ 000000A4 FC0494E5 LDR R0,[R4, #+1276] \ 000000A8 000050E3 CMP R0,#+0 \ 000000AC 0400000A BEQ ??show_on_contact_3 \ 000000B0 000184E0 ADD R0,R4,R0, LSL #+2 \ 000000B4 D40390E5 LDR R0,[R0, #+980] \ 000000B8 000050E3 CMP R0,#+0 3630 x+=XStatusImg[pp_xicon]->w; \ 000000BC B000D011 LDRHNE R0,[R0, #+0] \ 000000C0 06608010 ADDNE R6,R0,R6 3631 3632 DrawRectangle(0,0,Get_WS_width(ws,PopupFont)+x+5,GetFontYSIZE(PopupFont)+5,0,PopupOnlineCl,PopupBGCl); \ ??show_on_contact_3: \ 000000C4 ........ LDR R0,??DataTable148 ;; PopupFont \ 000000C8 14819FE5 LDR R8,??show_on_contact_0+0x4 ;; PopupOnlineCl \ 000000CC 007090E5 LDR R7,[R0, #+0] \ 000000D0 0700A0E1 MOV R0,R7 \ 000000D4 C50100EF SWI +453 \ 000000D8 0090A0E1 MOV R9,R0 \ 000000DC 0710A0E1 MOV R1,R7 \ 000000E0 0500A0E1 MOV R0,R5 \ 000000E4 080200EF SWI +520 \ 000000E8 ........ LDR R1,??DataTable150 ;; PopupBGCl \ 000000EC 053089E2 ADD R3,R9,#+5 \ 000000F0 02002DE9 PUSH {R1} \ 000000F4 000086E0 ADD R0,R6,R0 \ 000000F8 052080E2 ADD R2,R0,#+5 \ 000000FC 0000A0E3 MOV R0,#+0 \ 00000100 0810A0E1 MOV R1,R8 \ 00000104 02002DE9 PUSH {R1} \ 00000108 0010A0E3 MOV R1,#+0 \ 0000010C 02002DE9 PUSH {R1} \ 00000110 B40100EF SWI +436 \ 00000114 F80494E5 LDR R0,[R4, #+1272] \ 00000118 000184E0 ADD R0,R4,R0, LSL #+2 \ 0000011C 200090E5 LDR R0,[R0, #+32] \ 00000120 0CD08DE2 ADD SP,SP,#+12 \ 00000124 000050E3 CMP R0,#+0 \ 00000128 0C00000A BEQ ??show_on_contact_4 3633 3634 if(icons[pp_icon]) 3635 { 3636 DrwImage(icons[pp_icon],2,3); \ 0000012C 0320A0E3 MOV R2,#+3 \ 00000130 0210A0E3 MOV R1,#+2 \ 00000134 ........ BL DrwImage 3637 DrwImage(XStatusImg[pp_xicon],4+icons[pp_icon]->w,3); \ 00000138 F80494E5 LDR R0,[R4, #+1272] \ 0000013C 0320A0E3 MOV R2,#+3 \ 00000140 000184E0 ADD R0,R4,R0, LSL #+2 \ 00000144 200090E5 LDR R0,[R0, #+32] \ 00000148 B000D0E1 LDRH R0,[R0, #+0] \ 0000014C 041080E2 ADD R1,R0,#+4 \ 00000150 FC0494E5 LDR R0,[R4, #+1276] \ 00000154 000184E0 ADD R0,R4,R0, LSL #+2 \ 00000158 D40390E5 LDR R0,[R0, #+980] \ 0000015C ........ BL DrwImage 3638 } 3639 3640 DrawString(ws,x+3,2, 3+Get_WS_width(ws,PopupFont)+x ,1+GetFontYSIZE(PopupFont),PopupFont,0,PopupOnlineCl,GetPaletteAdrByColorIndex(23)); \ ??show_on_contact_4: \ 00000160 1700A0E3 MOV R0,#+23 \ 00000164 2E0100EF SWI +302 \ 00000168 00A0A0E1 MOV R10,R0 \ 0000016C 0700A0E1 MOV R0,R7 \ 00000170 C50100EF SWI +453 \ 00000174 0090A0E1 MOV R9,R0 \ 00000178 0710A0E1 MOV R1,R7 \ 0000017C 0500A0E1 MOV R0,R5 \ 00000180 080200EF SWI +520 \ 00000184 00042DE9 PUSH {R10} \ 00000188 00012DE9 PUSH {R8} \ 0000018C 0010A0E3 MOV R1,#+0 \ 00000190 02002DE9 PUSH {R1} \ 00000194 80002DE9 PUSH {R7} \ 00000198 000086E0 ADD R0,R6,R0 \ 0000019C 011089E2 ADD R1,R9,#+1 \ 000001A0 02002DE9 PUSH {R1} \ 000001A4 033080E2 ADD R3,R0,#+3 \ 000001A8 0220A0E3 MOV R2,#+2 \ 000001AC 0500A0E1 MOV R0,R5 \ 000001B0 031086E2 ADD R1,R6,#+3 \ 000001B4 4C0100EF SWI +332 3641 FreeWS(ws); \ 000001B8 0500A0E1 MOV R0,R5 \ 000001BC 290100EF SWI +297 3642 GBS_StartTimerProc(&incs2, 15, show_on_contact); \ 000001C0 20209FE5 LDR R2,??show_on_contact_0+0x8 ;; show_on_contact \ 000001C4 0F10A0E3 MOV R1,#+15 \ 000001C8 9400A0E3 MOV R0,#+148 \ 000001CC 8C0D80E3 ORR R0,R0,#0x2300 \ 000001D0 040080E0 ADD R0,R0,R4 \ 000001D4 4D0000EF SWI +77 \ 000001D8 14D08DE2 ADD SP,SP,#+20 3643 } 3644 } \ 000001DC F387BDE8 POP {R0,R1,R4-R10,PC} ;; return \ ??show_on_contact_0: \ 000001E0 ........ DC32 `?` \ 000001E4 ........ DC32 PopupOnlineCl \ 000001E8 ........ DC32 show_on_contact 3645 3646 char OffContact[64]; 3647 int INC_show3; 3648 GBSTMR incs3; 3649 3650 \ In segment CODE, align 4, keep-with-next 3651 void show_off_contact() 3652 { 3653 if(!isPopupOff) return; \ show_off_contact: \ 00000000 C4019FE5 LDR R0,??show_off_contact_0 ;; isPopupOff \ 00000004 F04F2DE9 PUSH {R4-R11,LR} \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 F38FBD08 POPEQ {R0,R1,R4-R11,PC} 3654 if(INC_show3>0) \ 00000018 ........ LDR R4,??DataTable152 ;; i_rc \ 0000001C 000594E5 LDR R0,[R4, #+1280] \ 00000020 010050E3 CMP R0,#+1 \ 00000024 F38FBDB8 POPLT {R0,R1,R4-R11,PC} 3655 { 3656 WSHDR *ws=AllocWS(64); \ 00000028 4000A0E3 MOV R0,#+64 \ 0000002C 250100EF SWI +293 \ 00000030 0050A0E1 MOV R5,R0 3657 ascii2ws(ws,OffContact); \ 00000034 A400A0E3 MOV R0,#+164 \ 00000038 8C0D80E3 ORR R0,R0,#0x2300 \ 0000003C 041080E0 ADD R1,R0,R4 \ 00000040 0500A0E1 MOV R0,R5 \ 00000044 ........ _BLF ascii2ws,??ascii2ws??rA 3658 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; \ 00000048 068100EF SWI +33030 \ 0000004C 080090E5 LDR R0,[R0, #+8] 3659 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 00000050 78219FE5 LDR R2,??show_off_contact_0+0x4 ;; `?_1` \ 00000054 0C0090E5 LDR R0,[R0, #+12] \ 00000058 480092E8 LDM R2,{R3,R6} \ 0000005C 080090E5 LDR R0,[R0, #+8] \ 00000060 0D10A0E1 MOV R1,SP \ 00000064 040090E5 LDR R0,[R0, #+4] \ 00000068 480081E8 STM R1,{R3,R6} \ 0000006C 010040E2 SUB R0,R0,#+1 3660 if(!(memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8))) \ 00000070 0820A0E3 MOV R2,#+8 \ 00000074 1C0100EF SWI +284 \ 00000078 000050E3 CMP R0,#+0 \ 0000007C 0300001A BNE ??show_off_contact_1 3661 { 3662 DrawScreenShot(); \ 00000080 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 3663 INC_show3-=2; \ 00000084 000594E5 LDR R0,[R4, #+1280] \ 00000088 020040E2 SUB R0,R0,#+2 \ 0000008C 010000EA B ??show_off_contact_2 3664 } 3665 else 3666 INC_show3--; \ ??show_off_contact_1: \ 00000090 000594E5 LDR R0,[R4, #+1280] \ 00000094 010040E2 SUB R0,R0,#+1 3667 3668 DrawRectangle(ScreenW()-Get_WS_width(ws,PopupFont)-4-icons[IS_OFFLINE]->w,0,ScreenW()-1,GetFontYSIZE(PopupFont)+4,0,PopupOffCl,PopupOffBGCl); \ ??show_off_contact_2: \ 00000098 34719FE5 LDR R7,??show_off_contact_0+0x8 ;; PopupOffCl \ 0000009C 000584E5 STR R0,[R4, #+1280] \ 000000A0 ........ LDR R0,??DataTable148 ;; PopupFont \ 000000A4 006090E5 LDR R6,[R0, #+0] \ 000000A8 0600A0E1 MOV R0,R6 \ 000000AC C50100EF SWI +453 \ 000000B0 0090A0E1 MOV R9,R0 \ 000000B4 888100EF SWI +33160 \ 000000B8 00A0A0E1 MOV R10,R0 \ 000000BC 888100EF SWI +33160 \ 000000C0 0080A0E1 MOV R8,R0 \ 000000C4 0610A0E1 MOV R1,R6 \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 080200EF SWI +520 \ 000000D0 00119FE5 LDR R1,??show_off_contact_0+0xC ;; PopupOffBGCl \ 000000D4 043089E2 ADD R3,R9,#+4 \ 000000D8 02002DE9 PUSH {R1} \ 000000DC 000048E0 SUB R0,R8,R0 \ 000000E0 01204AE2 SUB R2,R10,#+1 \ 000000E4 040040E2 SUB R0,R0,#+4 \ 000000E8 0710A0E1 MOV R1,R7 \ 000000EC 02002DE9 PUSH {R1} \ 000000F0 0010A0E3 MOV R1,#+0 \ 000000F4 02002DE9 PUSH {R1} \ 000000F8 208094E5 LDR R8,[R4, #+32] \ 000000FC B080D8E1 LDRH R8,[R8, #+0] \ 00000100 080040E0 SUB R0,R0,R8 \ 00000104 B40100EF SWI +436 3669 3670 DrwImage(icons[IS_OFFLINE],ScreenW()-Get_WS_width(ws,PopupFont)-2-icons[IS_OFFLINE]->w,3); \ 00000108 888100EF SWI +33160 \ 0000010C 0080A0E1 MOV R8,R0 \ 00000110 0610A0E1 MOV R1,R6 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 080200EF SWI +520 \ 0000011C 0010A0E1 MOV R1,R0 \ 00000120 200094E5 LDR R0,[R4, #+32] \ 00000124 0320A0E3 MOV R2,#+3 \ 00000128 B030D0E1 LDRH R3,[R0, #+0] \ 0000012C 011048E0 SUB R1,R8,R1 \ 00000130 021041E2 SUB R1,R1,#+2 \ 00000134 031041E0 SUB R1,R1,R3 \ 00000138 ........ BL DrwImage 3671 3672 DrawString(ws,ScreenW()-Get_WS_width(ws,PopupFont)-3,2,ScreenW()-1,GetFontYSIZE(PopupFont)+2,PopupFont,TEXT_ALIGNRIGHT,PopupOffCl,GetPaletteAdrByColorIndex(23)); \ 0000013C 1700A0E3 MOV R0,#+23 \ 00000140 2E0100EF SWI +302 \ 00000144 0080A0E1 MOV R8,R0 \ 00000148 0600A0E1 MOV R0,R6 \ 0000014C C50100EF SWI +453 \ 00000150 0090A0E1 MOV R9,R0 \ 00000154 888100EF SWI +33160 \ 00000158 00A0A0E1 MOV R10,R0 \ 0000015C 888100EF SWI +33160 \ 00000160 00B0A0E1 MOV R11,R0 \ 00000164 0610A0E1 MOV R1,R6 \ 00000168 0500A0E1 MOV R0,R5 \ 0000016C 080200EF SWI +520 \ 00000170 00012DE9 PUSH {R8} \ 00000174 80002DE9 PUSH {R7} \ 00000178 0410A0E3 MOV R1,#+4 \ 0000017C 02002DE9 PUSH {R1} \ 00000180 40002DE9 PUSH {R6} \ 00000184 01304AE2 SUB R3,R10,#+1 \ 00000188 021089E2 ADD R1,R9,#+2 \ 0000018C 02002DE9 PUSH {R1} \ 00000190 0220A0E3 MOV R2,#+2 \ 00000194 00004BE0 SUB R0,R11,R0 \ 00000198 031040E2 SUB R1,R0,#+3 \ 0000019C 0500A0E1 MOV R0,R5 \ 000001A0 4C0100EF SWI +332 3673 FreeWS(ws); \ 000001A4 0500A0E1 MOV R0,R5 \ 000001A8 290100EF SWI +297 3674 GBS_StartTimerProc(&incs3, 15, show_off_contact); \ 000001AC 28209FE5 LDR R2,??show_off_contact_0+0x10 ;; show_off_contact \ 000001B0 0F10A0E3 MOV R1,#+15 \ 000001B4 E400A0E3 MOV R0,#+228 \ 000001B8 8C0D80E3 ORR R0,R0,#0x2300 \ 000001BC 040080E0 ADD R0,R0,R4 \ 000001C0 4D0000EF SWI +77 \ 000001C4 20D08DE2 ADD SP,SP,#+32 \ 000001C8 F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??show_off_contact_0: \ 000001CC ........ DC32 isPopupOff \ 000001D0 ........ DC32 `?_1` \ 000001D4 ........ DC32 PopupOffCl \ 000001D8 ........ DC32 PopupOffBGCl \ 000001DC ........ DC32 show_off_contact 3675 } 3676 } 3677 3678 //---------------------------- popup message ---------------------------// 3679 3680 \ In segment CODE, align 4, keep-with-next 3681 void show_pp_sender() 3682 { \ show_pp_sender: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3683 if(INC_show>0/* && !(IsGuiOnTop(maingui_id))*/) \ 00000004 ........ LDR R4,??DataTable152 ;; i_rc \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C F00494E5 LDR R0,[R4, #+1264] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 F38FBDB8 POPLT {R0,R1,R4-R11,PC} 3684 { 3685 WSHDR *ws=AllocWS(256); \ 00000018 400FA0E3 MOV R0,#+256 \ 0000001C 250100EF SWI +293 \ 00000020 0050A0E1 MOV R5,R0 3686 ascii2ws(ws,show_nick); \ 00000024 3400A0E3 MOV R0,#+52 \ 00000028 8C0D80E3 ORR R0,R0,#0x2300 \ 0000002C 041080E0 ADD R1,R0,R4 \ 00000030 0500A0E1 MOV R0,R5 \ 00000034 ........ _BLF ascii2ws,??ascii2ws??rA 3687 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] 3688 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 00000040 54219FE5 LDR R2,??show_pp_sender_0 ;; `?_2` \ 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 3689 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 3690 { 3691 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 3692 INC_show-=2; \ 00000074 F00494E5 LDR R0,[R4, #+1264] \ 00000078 020040E2 SUB R0,R0,#+2 \ 0000007C 010000EA B ??show_pp_sender_2 3693 } 3694 else 3695 INC_show--; \ ??show_pp_sender_1: \ 00000080 F00494E5 LDR R0,[R4, #+1264] \ 00000084 010040E2 SUB R0,R0,#+1 \ ??show_pp_sender_2: \ 00000088 F00484E5 STR R0,[R4, #+1264] 3696 #ifdef NEWSGOLD 3697 DrawRectangle(0,0,Get_WS_width(ws,PopupFont)+6+GetImgWidth(NumStatusToIconBar + IS_MSG),GetFontYSIZE(PopupFont)+4,0,PopupMsgCl,PopupBGCl); \ 0000008C ........ LDR R0,??DataTable148 ;; PopupFont \ 00000090 006090E5 LDR R6,[R0, #+0] \ 00000094 0600A0E1 MOV R0,R6 \ 00000098 C50100EF SWI +453 \ 0000009C 0070A0E1 MOV R7,R0 \ 000000A0 0610A0E1 MOV R1,R6 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 080200EF SWI +520 \ 000000AC 0080A0E1 MOV R8,R0 \ 000000B0 ........ LDR R0,??DataTable149 ;; NumStatusToIconBar \ 000000B4 000090E5 LDR R0,[R0, #+0] \ 000000B8 0DB080E2 ADD R11,R0,#+13 \ 000000BC 0B00A0E1 MOV R0,R11 \ 000000C0 220000EF SWI +34 \ 000000C4 ........ LDR R1,??DataTable150 ;; PopupBGCl \ 000000C8 043087E2 ADD R3,R7,#+4 \ 000000CC 02002DE9 PUSH {R1} \ 000000D0 C8109FE5 LDR R1,??show_pp_sender_0+0x4 ;; PopupMsgCl \ 000000D4 080080E0 ADD R0,R0,R8 \ 000000D8 02002DE9 PUSH {R1} \ 000000DC 062080E2 ADD R2,R0,#+6 \ 000000E0 0000A0E3 MOV R0,#+0 \ 000000E4 0010A0E3 MOV R1,#+0 \ 000000E8 02002DE9 PUSH {R1} \ 000000EC B40100EF SWI +436 3698 DrawImg(2,2,NumStatusToIconBar + IS_MSG);//GetImgWidth((int)S_ICONS[icn] \ 000000F0 0B20A0E1 MOV R2,R11 \ 000000F4 0210A0E3 MOV R1,#+2 \ 000000F8 0100A0E1 MOV R0,R1 \ 000000FC 230000EF SWI +35 3699 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)); \ 00000100 1700A0E3 MOV R0,#+23 \ 00000104 2E0100EF SWI +302 \ 00000108 0070A0E1 MOV R7,R0 \ 0000010C 0600A0E1 MOV R0,R6 \ 00000110 C50100EF SWI +453 \ 00000114 0080A0E1 MOV R8,R0 \ 00000118 0B00A0E1 MOV R0,R11 \ 0000011C 220000EF SWI +34 \ 00000120 0090A0E1 MOV R9,R0 \ 00000124 0610A0E1 MOV R1,R6 \ 00000128 0500A0E1 MOV R0,R5 \ 0000012C 080200EF SWI +520 \ 00000130 00A0A0E1 MOV R10,R0 \ 00000134 0B00A0E1 MOV R0,R11 \ 00000138 220000EF SWI +34 \ 0000013C 5C109FE5 LDR R1,??show_pp_sender_0+0x4 ;; PopupMsgCl \ 00000140 80002DE9 PUSH {R7} \ 00000144 02002DE9 PUSH {R1} \ 00000148 0120A0E3 MOV R2,#+1 \ 0000014C 0010A0E3 MOV R1,#+0 \ 00000150 02002DE9 PUSH {R1} \ 00000154 40002DE9 PUSH {R6} \ 00000158 011088E2 ADD R1,R8,#+1 \ 0000015C 02002DE9 PUSH {R1} \ 00000160 09108AE0 ADD R1,R10,R9 \ 00000164 043081E2 ADD R3,R1,#+4 \ 00000168 041080E2 ADD R1,R0,#+4 \ 0000016C 0500A0E1 MOV R0,R5 \ 00000170 4C0100EF SWI +332 3700 #else 3701 DrawRectangle(0,0,Get_WS_width(ws,PopupFont)+2,GetFontYSIZE(PopupFont)+2,0,PopupBGCl,PopupBGCl); 3702 DrawString(ws,1,1,1+Get_WS_width(ws,PopupFont)+2,1+GetFontYSIZE(PopupFont),PopupFont,0,PopupMsgCl,GetPaletteAdrByColorIndex(23)); 3703 #endif 3704 FreeWS(ws); \ 00000174 0500A0E1 MOV R0,R5 \ 00000178 290100EF SWI +297 3705 GBS_StartTimerProc(&develop, 10, show_pp_sender); \ 0000017C 20209FE5 LDR R2,??show_pp_sender_0+0x8 ;; show_pp_sender \ 00000180 0A10A0E3 MOV R1,#+10 \ 00000184 C400A0E3 MOV R0,#+196 \ 00000188 840D80E3 ORR R0,R0,#0x2100 \ 0000018C 040080E0 ADD R0,R0,R4 \ 00000190 4D0000EF SWI +77 \ 00000194 20D08DE2 ADD SP,SP,#+32 3706 } 3707 } \ 00000198 F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??show_pp_sender_0: \ 0000019C ........ DC32 `?_2` \ 000001A0 ........ DC32 PopupMsgCl \ 000001A4 ........ DC32 show_pp_sender 3708 3709 3710 //----------------------------------------------------------------------------------------// 3711 3712 \ In segment CODE, align 4, keep-with-next 3713 void Get_Online_total() 3714 { 3715 CLIST *t; 3716 kopa_online=0; \ Get_Online_total: \ 00000000 ........ LDR R0,??DataTable152 ;; i_rc \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 C41480E5 STR R1,[R0, #+1220] 3717 kopa_kontaktu=0; \ 0000000C C81480E5 STR R1,[R0, #+1224] 3718 t=(CLIST *)(&cltop); \ 00000010 4B1E80E2 ADD R1,R0,#+1200 \ 00000014 FF30A0E3 MOV R3,#+255 \ 00000018 FF3C83E3 ORR R3,R3,#0xFF00 \ 0000001C 0A0000EA B ??Get_Online_total_0 3719 while(t=(CLIST *)(t->next)) 3720 { 3721 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 3722 { 3723 kopa_online++; \ 0000002C C42490E5 LDR R2,[R0, #+1220] \ 00000030 012082E2 ADD R2,R2,#+1 \ 00000034 C42480E5 STR R2,[R0, #+1220] 3724 if (t->state!=65535) kopa_kontaktu++; \ 00000038 B425D1E1 LDRH R2,[R1, #+84] \ 0000003C 030052E1 CMP R2,R3 \ 00000040 C8249015 LDRNE R2,[R0, #+1224] \ 00000044 01208212 ADDNE R2,R2,#+1 \ 00000048 C8248015 STRNE R2,[R0, #+1224] 3725 } 3726 } \ ??Get_Online_total_0: \ 0000004C 001091E5 LDR R1,[R1, #+0] \ 00000050 000051E3 CMP R1,#+0 \ 00000054 F1FFFF1A BNE ??Get_Online_total_1 3727 } \ 00000058 1EFF2FE1 BX LR ;; return 3728 3729 3730 //-------------------------------------------------------------------------------------------// 3731 3732 \ In segment CODE, align 4, keep-with-next 3733 void SetIndividStatus()//set to all contact to default vibra, sound and other by kluchnik 04.04.08 3734 { 3735 CLIST *t; 3736 t=(CLIST *)(&cltop); \ SetIndividStatus: \ 00000000 ........ LDR R0,??DataTable152 ;; i_rc \ 00000004 4B1E80E2 ADD R1,R0,#+1200 \ 00000008 0C0000EA B ??SetIndividStatus_0 3737 while(t=(CLIST *)(t->next)) 3738 { 3739 if (!t->isgroup) \ ??SetIndividStatus_1: \ 0000000C 082091E5 LDR R2,[R1, #+8] \ 00000010 000052E3 CMP R2,#+0 \ 00000014 0900001A BNE ??SetIndividStatus_0 3740 { 3741 t->isvibra=1; \ 00000018 0120A0E3 MOV R2,#+1 \ 0000001C 682081E5 STR R2,[R1, #+104] 3742 t->issound=1; \ 00000020 6C2081E5 STR R2,[R1, #+108] 3743 t->isShowXst=Show_XTX; \ 00000024 BC3390E5 LDR R3,[R0, #+956] \ 00000028 7C3081E5 STR R3,[R1, #+124] 3744 #ifdef kluchnik 3745 t->isLoadHistory=1; \ 0000002C 602081E5 STR R2,[R1, #+96] 3746 #endif 3747 t->signals=1; \ 00000030 802081E5 STR R2,[R1, #+128] 3748 t->isaccess=1; \ 00000034 842081E5 STR R2,[R1, #+132] 3749 3750 t->automsgcount=0; \ 00000038 0020A0E3 MOV R2,#+0 \ 0000003C 882081E5 STR R2,[R1, #+136] 3751 } 3752 } \ ??SetIndividStatus_0: \ 00000040 001091E5 LDR R1,[R1, #+0] \ 00000044 000051E3 CMP R1,#+0 \ 00000048 EFFFFF1A BNE ??SetIndividStatus_1 3753 } \ 0000004C 1EFF2FE1 BX LR ;; return 3754 3755 //-------------------------------------------------------------------------------------------// 3756 //int ShowLoadScreen=1; 3757 int curpos; 3758 \ In segment CODE, align 4, keep-with-next 3759 ProcessPacket(TPKT *p) 3760 { \ ProcessPacket: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 50DF4DE2 SUB SP,SP,#+320 3761 CLIST *t; 3762 LOGQ *q; 3763 char s[256]; 3764 switch(p->pkt.type) \ 00000008 ........ LDR R5,??DataTable169 ;; Canvas \ 0000000C ........ LDR R7,??DataTable171 ;; i_rc \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 B410D4E1 LDRH R1,[R4, #+4] \ 00000018 000094E5 LDR R0,[R4, #+0] \ 0000001C 02B0A0E3 MOV R11,#+2 \ 00000020 0160A0E3 MOV R6,#+1 \ 00000024 0080A0E3 MOV R8,#+0 \ 00000028 031041E2 SUB R1,R1,#+3 \ 0000002C 1C0051E3 CMP R1,#+28 \ 00000030 DF02008A BHI ??ProcessPacket_1 \ 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 56010E00DB02 DC16 +342,+14,+731,+731 \ DB02 \ 0000004C 1100DB025200 DC16 +17,+731,+82,+731 \ DB02 \ 00000054 DB02DB02DB02 DC16 +731,+731,+731,+731 \ DB02 \ 0000005C DB023E023E02 DC16 +731,+574,+574,+731 \ DB02 \ 00000064 DB0242005000 DC16 +731,+66,+80,+731 \ DB02 \ 0000006C DB02DB027102 DC16 +731,+731,+625,+731 \ DB02 \ 00000074 DB02DB02DB02 DC16 +731,+731,+731,+731 \ DB02 \ 0000007C D9020000 DC16 +729,+0 3765 { 3766 case T_LOGIN: 3767 set_my_status(); \ ??ProcessPacket_2: \ 00000080 ........ BL set_my_status 3768 set_my_xstatus(); \ 00000084 ........ BL set_my_xstatus \ 00000088 C90200EA B ??ProcessPacket_1 3769 break; 3770 case T_CLENTRY: 3771 if (p->pkt.uin) \ ??ProcessPacket_3: \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 1800000A BEQ ??ProcessPacket_4 3772 { 3773 if ((t=FindContactByUin(p->pkt.uin))) \ 00000094 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000098 0090B0E1 MOVS R9,R0 \ 0000009C 0E00000A BEQ ??ProcessPacket_5 3774 { 3775 // t->state=0xFFFF; 3776 if (!t->local) strncpy(t->name,p->data,63); \ 000000A0 C00099E5 LDR R0,[R9, #+192] \ 000000A4 000050E3 CMP R0,#+0 \ 000000A8 0300001A BNE ??ProcessPacket_6 \ 000000AC 3F20A0E3 MOV R2,#+63 \ 000000B0 081084E2 ADD R1,R4,#+8 \ 000000B4 140089E2 ADD R0,R9,#+20 \ 000000B8 160100EF SWI +278 3777 t->group=GROUP_CACHE; \ ??ProcessPacket_6: \ 000000BC B40497E5 LDR R0,[R7, #+1204] \ 000000C0 100089E5 STR R0,[R9, #+16] 3778 ChangeContactPos(t); \ ??ProcessPacket_7: \ 000000C4 0900A0E1 MOV R0,R9 \ 000000C8 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3779 RecountMenu(t,1); \ 000000CC 0110A0E3 MOV R1,#+1 \ 000000D0 0900A0E1 MOV R0,R9 \ ??ProcessPacket_8: \ 000000D4 ........ BL RecountMenu \ 000000D8 B50200EA B ??ProcessPacket_1 3780 } 3781 else 3782 { 3783 RecountMenu(AddContact(p->pkt.uin,p->data, GROUP_CACHE, 0),1); \ ??ProcessPacket_5: \ 000000DC B42497E5 LDR R2,[R7, #+1204] \ 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_8 3784 } 3785 } 3786 else 3787 { 3788 if(VIBR_ON_CONNECT) \ ??ProcessPacket_4: \ 000000F8 ........ LDR R0,??DataTable155 ;; VIBR_ON_CONNECT \ 000000FC 000090E5 LDR R0,[R0, #+0] \ 00000100 000050E3 CMP R0,#+0 \ 00000104 0100000A BEQ ??ProcessPacket_9 3789 { 3790 vibra_count=1; \ 00000108 786487E5 STR R6,[R7, #+1144] 3791 start_vibra(); \ 0000010C ........ BL start_vibra 3792 } 3793 GROUP_CACHE=0; \ ??ProcessPacket_9: \ 00000110 B48487E5 STR R8,[R7, #+1204] 3794 ask_my_info(); 3795 if (ShowLoadScreen==0 && maingui_id/*contactlist_menu_id*/) \ 00000114 DC0497E5 LDR R0,[R7, #+1244] \ 00000118 000050E3 CMP R0,#+0 \ 0000011C 0500001A BNE ??ProcessPacket_10 \ 00000120 000397E5 LDR R0,[R7, #+768] \ 00000124 000050E3 CMP R0,#+0 \ 00000128 0200000A BEQ ??ProcessPacket_10 3796 { 3797 RecountMenu(NULL,1); \ 0000012C 0110A0E3 MOV R1,#+1 \ 00000130 0800A0E1 MOV R0,R8 \ ??ProcessPacket_11: \ 00000134 E6FFFFEA B ??ProcessPacket_8 3798 } 3799 else 3800 { 3801 SetIndividStatus(); \ ??ProcessPacket_10: \ 00000138 ........ BL SetIndividStatus 3802 if(ShowLoadScreen) ShowLoadScreen=0; \ 0000013C DC0497E5 LDR R0,[R7, #+1244] \ 00000140 000050E3 CMP R0,#+0 \ 00000144 DC848715 STRNE R8,[R7, #+1244] 3803 SMART_REDRAW(); \ 00000148 ........ BL SMART_REDRAW \ 0000014C 980200EA B ??ProcessPacket_1 3804 } 3805 } 3806 break; 3807 case T_GROUPID: 3808 if (t=FindGroupByID(GROUP_CACHE=p->pkt.uin)) \ ??ProcessPacket_12: \ 00000150 B40487E5 STR R0,[R7, #+1204] \ 00000154 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000158 0090B0E1 MOVS R9,R0 \ 0000015C 0400000A BEQ ??ProcessPacket_13 3809 { 3810 strncpy(t->name,p->data,63); \ 00000160 3F20A0E3 MOV R2,#+63 \ 00000164 081084E2 ADD R1,R4,#+8 \ 00000168 140089E2 ADD R0,R9,#+20 \ 0000016C 160100EF SWI +278 3811 ChangeContactPos(t); \ 00000170 D3FFFFEA B ??ProcessPacket_7 3812 RecountMenu(t,1); 3813 } 3814 else 3815 { 3816 RecountMenu(AddGroup(p->pkt.uin,p->data),1); \ ??ProcessPacket_13: \ 00000174 000094E5 LDR R0,[R4, #+0] \ 00000178 081084E2 ADD R1,R4,#+8 \ 0000017C ........ _BLF AddGroup,??AddGroup??rA \ 00000180 0110A0E3 MOV R1,#+1 \ 00000184 D2FFFFEA B ??ProcessPacket_8 3817 } 3818 break; 3819 case T_GROUPFOLLOW: 3820 GROUP_CACHE=p->pkt.uin; \ ??ProcessPacket_14: \ 00000188 B40487E5 STR R0,[R7, #+1204] \ 0000018C 880200EA B ??ProcessPacket_1 3821 break; 3822 case T_STATUSCHANGE: 3823 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_15: \ 00000190 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000194 0090B0E1 MOVS R9,R0 3824 if (t) \ 00000198 8502000A BEQ ??ProcessPacket_1 3825 { 3826 int i=t->state; \ 0000019C B415D9E1 LDRH R1,[R9, #+84] \ 000001A0 04108DE5 STR R1,[SP, #+4] \ 000001A4 0A00D4E5 LDRB R0,[R4, #+10] \ 000001A8 B615D9E1 LDRH R1,[R9, #+86] \ 000001AC 000051E1 CMP R1,R0 \ 000001B0 1D00000A BEQ ??ProcessPacket_16 3827 // CLIST *oldt=NULL; 3828 if (t->xstate!=p->data[2]) // Если картинка икс статуса сменилась 3829 { 3830 t->xstate=p->data[2]; \ 000001B4 B605C9E1 STRH R0,[R9, #+86] 3831 FreeXText(t); \ 000001B8 0900A0E1 MOV R0,R9 \ 000001BC ........ _BLF FreeXText,??FreeXText??rA 3832 if (t->xstate && ENA_AUTO_XTXT) // Если установлен икс статус и можно запрашивать по смене икс статуса :) \ 000001C0 B605D9E1 LDRH R0,[R9, #+86] \ 000001C4 000050E3 CMP R0,#+0 \ 000001C8 1600000A BEQ ??ProcessPacket_17 \ 000001CC F4099FE5 LDR R0,??ProcessPacket_18+0x4 ;; ENA_AUTO_XTXT \ 000001D0 000090E5 LDR R0,[R0, #+0] \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 1200000A BEQ ??ProcessPacket_17 3833 { 3834 t->req_xtext=1; \ 000001DC BC6089E5 STR R6,[R9, #+188] 3835 if (edchat_id) // Если открыт чат \ 000001E0 B80497E5 LDR R0,[R7, #+1208] \ 000001E4 000050E3 CMP R0,#+0 \ 000001E8 0F00000A BEQ ??ProcessPacket_16 3836 { 3837 void *data=FindGUIbyId(edchat_id,NULL); \ 000001EC B80497E5 LDR R0,[R7, #+1208] \ 000001F0 0010A0E3 MOV R1,#+0 \ 000001F4 090200EF SWI +521 3838 if (data) \ 000001F8 000050E3 CMP R0,#+0 \ 000001FC 0A00000A BEQ ??ProcessPacket_16 3839 { 3840 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 00000200 DF0100EF SWI +479 3841 if (ed_struct) \ 00000204 000050E3 CMP R0,#+0 \ 00000208 0700000A BEQ ??ProcessPacket_16 3842 { 3843 if (ed_struct->ed_contact==t) // Если наш чат то запрашиваем текст статуса \ 0000020C 000090E5 LDR R0,[R0, #+0] \ 00000210 090050E1 CMP R0,R9 \ 00000214 0400001A BNE ??ProcessPacket_16 3844 { 3845 t->req_xtext=0; \ 00000218 BC8089E5 STR R8,[R9, #+188] 3846 RequestXText(t->uin); \ 0000021C 0C0099E5 LDR R0,[R9, #+12] \ 00000220 ........ BL RequestXText \ 00000224 000000EA B ??ProcessPacket_16 3847 } 3848 } 3849 } 3850 } 3851 } 3852 else // Если икс статус не установлен то на всякий случай снимаем флаг получения текста 3853 { 3854 t->req_xtext=0; \ ??ProcessPacket_17: \ 00000228 BC8089E5 STR R8,[R9, #+188] 3855 } 3856 }/* 3857 if (contactlist_menu_id) 3858 { 3859 // oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); 3860 oldt=FindContactByN(curpos); 3861 }*/ 3862 if(t->state==65535) t->change=1; \ ??ProcessPacket_16: \ 0000022C B405D9E1 LDRH R0,[R9, #+84] \ 00000230 FFA0A0E3 MOV R10,#+255 \ 00000234 FFAC8AE3 ORR R10,R10,#0xFF00 \ 00000238 0A0050E1 CMP R0,R10 \ 0000023C 8C608905 STREQ R6,[R9, #+140] 3863 t->state=*((unsigned short *)(p->data)); \ 00000240 B800D4E1 LDRH R0,[R4, #+8] \ 00000244 B405C9E1 STRH R0,[R9, #+84] 3864 if((t->state!=65535)&&(t->change==1)) \ 00000248 0A0050E1 CMP R0,R10 \ 0000024C 0400000A BEQ ??ProcessPacket_19 \ 00000250 8C0099E5 LDR R0,[R9, #+140] \ 00000254 010050E3 CMP R0,#+1 3865 { 3866 t->just_now=2; \ 00000258 74B08905 STREQ R11,[R9, #+116] 3867 t->change=0; \ 0000025C 8C808905 STREQ R8,[R9, #+140] 3868 RefreshJustNow(); \ 00000260 E0628705 STREQ R6,[R7, #+736] 3869 } 3870 3871 LogStatusChange(t); \ ??ProcessPacket_19: \ 00000264 0900A0E1 MOV R0,R9 \ 00000268 ........ _BLF LogStatusChange,??LogStatusChange??rA 3872 LogStatusChange2(t);//пишем лог templates\\logs.txt \ 0000026C 0900A0E1 MOV R0,R9 \ 00000270 ........ _BLF LogStatusChange2,??LogStatusChange2??rA 3873 3874 ChangeContactPos(t); \ 00000274 0900A0E1 MOV R0,R9 \ 00000278 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3875 // RecountMenu(oldt,1); 3876 3877 if(isLogStatusChange)//isLogStatusChange // by kluchnik 05.04.08 \ 0000027C ........ LDR R0,??DataTable156 ;; isLogStatusChange \ 00000280 000090E5 LDR R0,[R0, #+0] \ 00000284 000050E3 CMP R0,#+0 \ 00000288 2B00000A BEQ ??ProcessPacket_20 3878 { 3879 char *s=GetStatusByIconIndex(GetIconIndex(t)); \ 0000028C 0900A0E1 MOV R0,R9 \ 00000290 ........ BL GetIconIndex \ 00000294 ........ BL GetStatusByIconIndex \ 00000298 00008DE5 STR R0,[SP, #+0] 3880 FreeXText2(t); \ 0000029C 0900A0E1 MOV R0,R9 \ 000002A0 ........ BL FreeXText2 3881 TTime time; 3882 GetDateTime(NULL,&time); \ 000002A4 0C108DE2 ADD R1,SP,#+12 \ 000002A8 0000A0E3 MOV R0,#+0 \ 000002AC B40000EF SWI +180 3883 char *txt=malloc(64); \ 000002B0 4000A0E3 MOV R0,#+64 \ 000002B4 140000EF SWI +20 \ 000002B8 00B0A0E1 MOV R11,R0 3884 sprintf(txt," %s: %02d:%02d:%02d",s,time.hour,time.min,time.sec); \ 000002BC 0E00DDE5 LDRB R0,[SP, #+14] \ 000002C0 791F85E2 ADD R1,R5,#+484 \ 000002C4 01002DE9 PUSH {R0} \ 000002C8 1100DDE5 LDRB R0,[SP, #+17] \ 000002CC 01002DE9 PUSH {R0} \ 000002D0 1430DDE5 LDRB R3,[SP, #+20] \ 000002D4 08209DE5 LDR R2,[SP, #+8] \ 000002D8 0B00A0E1 MOV R0,R11 \ 000002DC 160000EF SWI +22 3885 t->xtext2=malloc(64); \ 000002E0 4000A0E3 MOV R0,#+64 \ 000002E4 140000EF SWI +20 \ 000002E8 B80089E5 STR R0,[R9, #+184] 3886 snprintf(t->xtext2,64,txt); \ 000002EC 0B20A0E1 MOV R2,R11 \ 000002F0 4010A0E3 MOV R1,#+64 \ 000002F4 1B0100EF SWI +283 3887 AddStringToLog(t,0x03,txt,"Status change",0xFFFFFFFF, 0); \ 000002F8 0800A0E1 MOV R0,R8 \ 000002FC 01002DE9 PUSH {R0} \ 00000300 7E3F85E2 ADD R3,R5,#+504 \ 00000304 0B20A0E1 MOV R2,R11 \ 00000308 0310A0E3 MOV R1,#+3 \ 0000030C 0000E0E1 MVN R0,R0 \ 00000310 01002DE9 PUSH {R0} \ 00000314 0900A0E1 MOV R0,R9 \ 00000318 ........ BL AddStringToLog 3888 ReqAddMsgToChat(t); \ 0000031C 0900A0E1 MOV R0,R9 \ 00000320 ........ BL ReqAddMsgToChat 3889 RecountMenu(NULL, 0); \ 00000324 0810A0E1 MOV R1,R8 \ 00000328 0100A0E1 MOV R0,R1 \ 0000032C ........ BL RecountMenu 3890 mfree(txt); \ 00000330 0B00A0E1 MOV R0,R11 \ 00000334 150000EF SWI +21 \ 00000338 10D08DE2 ADD SP,SP,#+16 3891 } 3892 3893 if ((t->state!=0xFFFF)&&(i==0xFFFF))//Звук \ ??ProcessPacket_20: \ 0000033C B405D9E1 LDRH R0,[R9, #+84] \ 00000340 84B89FE5 LDR R11,??ProcessPacket_18+0x8 ;; PopupOnlineString \ 00000344 3420A0E3 MOV R2,#+52 \ 00000348 7C2D82E3 ORR R2,R2,#0x1F00 \ 0000034C 072082E0 ADD R2,R2,R7 \ 00000350 08208DE5 STR R2,[SP, #+8] \ 00000354 0A0050E1 CMP R0,R10 \ 00000358 6600000A BEQ ??ProcessPacket_21 \ 0000035C 04109DE5 LDR R1,[SP, #+4] \ 00000360 0A0051E1 CMP R1,R10 \ 00000364 6300001A BNE ??ProcessPacket_21 3894 { 3895 if(Is_INC_On && (PopupShow==2 || PopupShow==3)) \ 00000368 EC0297E5 LDR R0,[R7, #+748] \ 0000036C 000050E3 CMP R0,#+0 \ 00000370 2900000A BEQ ??ProcessPacket_22 \ 00000374 54089FE5 LDR R0,??ProcessPacket_18+0xC ;; PopupShow \ 00000378 000090E5 LDR R0,[R0, #+0] \ 0000037C 020050E3 CMP R0,#+2 \ 00000380 03005013 CMPNE R0,#+3 \ 00000384 2400001A BNE ??ProcessPacket_22 3896 { 3897 INC_show2=20; \ 00000388 1400A0E3 MOV R0,#+20 \ 0000038C F40487E5 STR R0,[R7, #+1268] 3898 INC_show3=0; \ 00000390 008587E5 STR R8,[R7, #+1280] 3899 3900 pp_icon=GetIconIndex(t); \ 00000394 0900A0E1 MOV R0,R9 \ 00000398 ........ BL GetIconIndex \ 0000039C F80487E5 STR R0,[R7, #+1272] 3901 pp_xicon=t->xstate; \ 000003A0 B605D9E1 LDRH R0,[R9, #+86] 3902 3903 sprintf(onContact,PopupOnlineString,t->name); \ 000003A4 142089E2 ADD R2,R9,#+20 \ 000003A8 0B10A0E1 MOV R1,R11 \ 000003AC FC0487E5 STR R0,[R7, #+1276] \ 000003B0 5400A0E3 MOV R0,#+84 \ 000003B4 8C0D80E3 ORR R0,R0,#0x2300 \ 000003B8 070080E0 ADD R0,R0,R7 \ 000003BC 160000EF SWI +22 3904 sprintf(on_off_buf,"[%s: %s]\n",t->xtext2+1,t->name); \ 000003C0 B80099E5 LDR R0,[R9, #+184] \ 000003C4 143089E2 ADD R3,R9,#+20 \ 000003C8 012080E2 ADD R2,R0,#+1 \ 000003CC 08009DE5 LDR R0,[SP, #+8] \ 000003D0 821F85E2 ADD R1,R5,#+520 \ 000003D4 160000EF SWI +22 3905 on_off_timer=ON_OFF_TIME; \ 000003D8 F4079FE5 LDR R0,??ProcessPacket_18+0x10 ;; ON_OFF_TIME \ 000003DC 000090E5 LDR R0,[R0, #+0] \ 000003E0 C00487E5 STR R0,[R7, #+1216] 3906 // UpdateCLheader(); 3907 show_on_contact(); \ 000003E4 ........ BL show_on_contact 3908 if(IllByONCantact) \ 000003E8 E8079FE5 LDR R0,??ProcessPacket_18+0x14 ;; IllByONCantact \ 000003EC 000090E5 LDR R0,[R0, #+0] \ 000003F0 000050E3 CMP R0,#+0 \ 000003F4 0C00000A BEQ ??ProcessPacket_23 3909 IlluminationOn(ILL_DISP_SEND,0,ILL_SEND_TMR,ILL_RECV_FADE); \ 000003F8 DC079FE5 LDR R0,??ProcessPacket_18+0x18 ;; ILL_RECV_FADE \ 000003FC 0010A0E3 MOV R1,#+0 \ 00000400 003090E5 LDR R3,[R0, #+0] \ 00000404 D4079FE5 LDR R0,??ProcessPacket_18+0x1C ;; ILL_SEND_TMR \ 00000408 002090E5 LDR R2,[R0, #+0] \ 0000040C D0079FE5 LDR R0,??ProcessPacket_18+0x20 ;; ILL_DISP_SEND \ 00000410 000090E5 LDR R0,[R0, #+0] \ 00000414 ........ BL IlluminationOn \ 00000418 030000EA B ??ProcessPacket_23 3910 // IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); 3911 } 3912 else 3913 GBS_DelTimer(&incs2);//на всяк \ ??ProcessPacket_22: \ 0000041C 9400A0E3 MOV R0,#+148 \ 00000420 8C0D80E3 ORR R0,R0,#0x2300 \ 00000424 070080E0 ADD R0,R0,R7 \ 00000428 8C0100EF SWI +396 3914 if(!extended_sounds) \ ??ProcessPacket_23: \ 0000042C ........ LDR R0,??DataTable157 ;; extended_sounds \ 00000430 B0A79FE5 LDR R10,??ProcessPacket_18+0x24 ;; sndGlobal \ 00000434 000090E5 LDR R0,[R0, #+0] \ 00000438 000050E3 CMP R0,#+0 \ 0000043C 0200001A BNE ??ProcessPacket_24 3915 { 3916 Play(sndGlobal); \ 00000440 0A00A0E1 MOV R0,R10 \ 00000444 ........ BL Play \ 00000448 440000EA B ??ProcessPacket_25 3917 } 3918 else 3919 { 3920 FSTATS stat; 3921 int fsize; 3922 unsigned int ul = 0; \ ??ProcessPacket_24: \ 0000044C 14808DE5 STR R8,[SP, #+20] 3923 uins=t->uin; \ 00000450 0C0099E5 LDR R0,[R9, #+12] \ 00000454 BC0287E5 STR R0,[R7, #+700] 3924 char ext[4]; 3925 // __root const CFG_CBOX_ITEM cfgcbox18_3_2[2]={"Mp3","Wav","Amr"}; 3926 switch(ext_type_sounds) \ 00000458 ........ LDR R0,??DataTable158 ;; ext_type_sounds \ 0000045C 000090E5 LDR R0,[R0, #+0] \ 00000460 010050E2 SUBS R0,R0,#+1 \ 00000464 0300000A BEQ ??ProcessPacket_26 \ 00000468 010050E2 SUBS R0,R0,#+1 \ 0000046C D000A003 MOVEQ R0,#+208 3927 { 3928 case 0: sprintf(ext,percent_s,mp3); break; \ 00000470 C800A013 MOVNE R0,#+200 \ 00000474 000000EA B ??ProcessPacket_27 3929 case 1: sprintf(ext,percent_s,wav); break; \ ??ProcessPacket_26: \ 00000478 CC00A0E3 MOV R0,#+204 \ ??ProcessPacket_27: \ 0000047C 800D80E3 ORR R0,R0,#0x2000 \ 00000480 072080E0 ADD R2,R0,R7 \ 00000484 081085E2 ADD R1,R5,#+8 \ 00000488 0D00A0E1 MOV R0,SP \ 0000048C 160000EF SWI +22 3930 case 2: sprintf(ext,percent_s,amr); break; 3931 default : sprintf(ext,percent_s,mp3); break; 3932 } 3933 sprintf(talk_sound, sds, sndGlobal2, uins,ext); \ 00000490 54279FE5 LDR R2,??ProcessPacket_18+0x28 ;; sndGlobal2 \ 00000494 0D00A0E1 MOV R0,SP \ 00000498 01002DE9 PUSH {R0} \ 0000049C BC3297E5 LDR R3,[R7, #+700] \ 000004A0 CC50A0E3 MOV R5,#+204 \ 000004A4 705E85E3 ORR R5,R5,#0x700 \ 000004A8 831D87E2 ADD R1,R7,#+8384 \ 000004AC 070085E0 ADD R0,R5,R7 \ 000004B0 160000EF SWI +22 3934 GetFileStats(talk_sound,&stat,&ul); \ 000004B4 18208DE2 ADD R2,SP,#+24 \ 000004B8 471F8DE2 ADD R1,SP,#+284 \ 000004BC 070085E0 ADD R0,R5,R7 \ 000004C0 840000EF SWI +132 3935 fsize=stat.size; 3936 if(fsize>0) \ 000004C4 20019DE5 LDR R0,[SP, #+288] \ 000004C8 04D08DE2 ADD SP,SP,#+4 \ 000004CC 010050E3 CMP R0,#+1 3937 Play(talk_sound); \ 000004D0 070085A0 ADDGE R0,R5,R7 3938 else 3939 Play(sndGlobal); \ 000004D4 0A00A0B1 MOVLT R0,R10 \ 000004D8 ........ BL Play 3940 t->isvibra=1; \ 000004DC 686089E5 STR R6,[R9, #+104] 3941 t->issound=1; \ 000004E0 6C6089E5 STR R6,[R9, #+108] 3942 t->isShowXst=Show_XTX; \ 000004E4 BC0397E5 LDR R0,[R7, #+956] \ 000004E8 7C0089E5 STR R0,[R9, #+124] 3943 #ifdef kluchnik 3944 t->isLoadHistory=1; \ 000004EC 606089E5 STR R6,[R9, #+96] 3945 #endif 3946 t->signals=1; \ 000004F0 806089E5 STR R6,[R9, #+128] \ 000004F4 190000EA B ??ProcessPacket_25 3947 } 3948 } 3949 3950 if ((i!=0xFFFF)&&(t->state==0xFFFF))//Звук \ ??ProcessPacket_21: \ 000004F8 04109DE5 LDR R1,[SP, #+4] \ 000004FC 0A0051E1 CMP R1,R10 \ 00000500 1600000A BEQ ??ProcessPacket_25 \ 00000504 0A0050E1 CMP R0,R10 \ 00000508 1400001A BNE ??ProcessPacket_25 3951 { 3952 Play(sndSrvMsg); \ 0000050C DC069FE5 LDR R0,??ProcessPacket_18+0x2C ;; sndSrvMsg \ 00000510 ........ BL Play 3953 3954 INC_show3=20; \ 00000514 1400A0E3 MOV R0,#+20 \ 00000518 000587E5 STR R0,[R7, #+1280] 3955 sprintf(OffContact,PopupOnlineString,t->name); \ 0000051C 142089E2 ADD R2,R9,#+20 \ 00000520 0B10A0E1 MOV R1,R11 \ 00000524 A400A0E3 MOV R0,#+164 \ 00000528 8C0D80E3 ORR R0,R0,#0x2300 \ 0000052C 070080E0 ADD R0,R0,R7 \ 00000530 160000EF SWI +22 3956 show_off_contact(); \ 00000534 ........ BL show_off_contact 3957 3958 //if(TIME_OR_MSG==2 || TIME_OR_MSG==3 | TIME_OR_MSG==4) 3959 Get_Online_total(); \ 00000538 ........ BL Get_Online_total 3960 3961 sprintf(on_off_buf,"[%s: %s]\n",t->xtext2+1,t->name); \ 0000053C B80099E5 LDR R0,[R9, #+184] \ 00000540 143089E2 ADD R3,R9,#+20 \ 00000544 012080E2 ADD R2,R0,#+1 \ 00000548 08009DE5 LDR R0,[SP, #+8] \ 0000054C 821F85E2 ADD R1,R5,#+520 \ 00000550 160000EF SWI +22 3962 on_off_timer=ON_OFF_TIME; \ 00000554 78069FE5 LDR R0,??ProcessPacket_18+0x10 ;; ON_OFF_TIME \ 00000558 000090E5 LDR R0,[R0, #+0] \ 0000055C C00487E5 STR R0,[R7, #+1216] 3963 // UpdateCLheader(); 3964 } 3965 3966 if (edchat_id) \ ??ProcessPacket_25: \ 00000560 B80497E5 LDR R0,[R7, #+1208] \ 00000564 000050E3 CMP R0,#+0 \ 00000568 0A00000A BEQ ??ProcessPacket_28 3967 { 3968 void *data=FindGUIbyId(edchat_id,NULL); \ 0000056C B80497E5 LDR R0,[R7, #+1208] \ 00000570 0010A0E3 MOV R1,#+0 \ 00000574 090200EF SWI +521 3969 { 3970 EDCHAT_STRUCT *ed_struct; 3971 ed_struct=EDIT_GetUserPointer(data); \ 00000578 DF0100EF SWI +479 3972 if (ed_struct) \ 0000057C 000050E3 CMP R0,#+0 \ 00000580 0400000A BEQ ??ProcessPacket_28 3973 { 3974 if (ed_struct->ed_contact==t) \ 00000584 000090E5 LDR R0,[R0, #+0] \ 00000588 090050E1 CMP R0,R9 \ 0000058C 0100001A BNE ??ProcessPacket_28 3975 { 3976 DirectRedrawGUI_ID(edchat_id); \ 00000590 B80497E5 LDR R0,[R7, #+1208] \ 00000594 400100EF SWI +320 3977 } 3978 } 3979 } 3980 } 3981 RefreshCL(); \ ??ProcessPacket_28: \ 00000598 DC6287E5 STR R6,[R7, #+732] \ 0000059C 840100EA B ??ProcessPacket_1 3982 } 3983 break; 3984 case T_RECVMSG: 3985 NEW_MSG=1; \ ??ProcessPacket_29: \ 000005A0 E46487E5 STR R6,[R7, #+1252] 3986 t=FindContactByUin(p->pkt.uin); \ 000005A4 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000005A8 0090B0E1 MOVS R9,R0 3987 if (!t)//если не в списке \ 000005AC 0A00001A BNE ??ProcessPacket_30 3988 { 3989 sprintf(s,percent_d,p->pkt.uin); \ 000005B0 002094E5 LDR R2,[R4, #+0] \ 000005B4 0B1085E2 ADD R1,R5,#+11 \ 000005B8 18008DE2 ADD R0,SP,#+24 \ 000005BC 160000EF SWI +22 3990 t=AddContact(p->pkt.uin,s,GROUP_CACHE,0); \ 000005C0 B42497E5 LDR R2,[R7, #+1204] \ 000005C4 000094E5 LDR R0,[R4, #+0] \ 000005C8 0030A0E3 MOV R3,#+0 \ 000005CC 18108DE2 ADD R1,SP,#+24 \ 000005D0 ........ _BLF AddContact,??AddContact??rA \ 000005D4 0090A0E1 MOV R9,R0 3991 CreateCLFile();//добавляем в local.cl.... \ 000005D8 ........ BL CreateCLFile 3992 } 3993 #ifdef kluchnik 3994 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_31: \ 00000608 C410A0E3 MOV R1,#+196 \ 0000060C 841D81E3 ORR R1,R1,#0x2100 \ 00000610 071081E0 ADD R1,R1,R7 \ 00000614 00108DE5 STR R1,[SP, #+0] \ 00000618 1400D9E5 LDRB R0,[R9, #+20] \ 0000061C 230050E3 CMP R0,#+35 \ 00000620 1700001A BNE ??ProcessPacket_32 4001 { 4002 //Если это конференция, патчим имя 4003 char *s=strchr(p->data,'>'); \ 00000624 3E10A0E3 MOV R1,#+62 \ 00000628 080084E2 ADD R0,R4,#+8 \ 0000062C 180000EF SWI +24 4004 //Если нашли символ > и после него пробел и ник короче 16 символов 4005 if (s) \ 00000630 000050E3 CMP R0,#+0 \ 00000634 1200000A BEQ ??ProcessPacket_32 4006 { 4007 if ((s[1]==' ')&&((s-p->data)<16)) \ 00000638 0110D0E5 LDRB R1,[R0, #+1] \ 0000063C 200051E3 CMP R1,#+32 \ 00000640 0F00001A BNE ??ProcessPacket_32 \ 00000644 081084E2 ADD R1,R4,#+8 \ 00000648 011040E0 SUB R1,R0,R1 \ 0000064C 100051E3 CMP R1,#+16 \ 00000650 0B0000AA BGE ??ProcessPacket_32 4008 { 4009 *s=0; //Режем строку \ 00000654 0080C0E5 STRB R8,[R0, #+0] 4010 AddStringToLog(t,0x02,s+2,p->data,0xFFFFFFFF,1); //Добавляем имя из текста сообщения \ 00000658 0110A0E3 MOV R1,#+1 \ 0000065C 02002DE9 PUSH {R1} \ 00000660 083084E2 ADD R3,R4,#+8 \ 00000664 022080E2 ADD R2,R0,#+2 \ 00000668 0900A0E1 MOV R0,R9 \ 0000066C 001061E2 RSB R1,R1,#+0 \ 00000670 02002DE9 PUSH {R1} \ 00000674 0B10A0E1 MOV R1,R11 \ 00000678 ........ BL AddStringToLog 4011 goto L1; \ 0000067C 08D08DE2 ADD SP,SP,#+8 \ 00000680 790000EA B ??ProcessPacket_33 4012 } 4013 } 4014 } 4015 4016 //=================== tas bus jautri ===================// 4017 4018 comanda=1; \ ??ProcessPacket_32: \ 00000684 EC6487E5 STR R6,[R7, #+1260] 4019 #ifdef DEBUG1 4020 comanda=1; 4021 4022 if(SHOW_ACTIVE) 4023 t->isactive=ACTIVE_TIME; 4024 if(VIBR_TYPE) 4025 vibra_count=2; 4026 else 4027 vibra_count=1; 4028 4029 start_vibra(); 4030 4031 #ifdef ELKA 4032 if(SLI_TYPE) SLI_Timer(); 4033 #endif 4034 if(Is_Double_Vibra_On) 4035 { 4036 Reminder_timer(); 4037 } 4038 4039 if (Is_ILU_On) 4040 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 4041 #else//DEBUG 4042 CheckComand(p->data, t); \ 00000688 0910A0E1 MOV R1,R9 \ 0000068C 60559FE5 LDR R5,??ProcessPacket_18+0x30 ;; ILL_KEYS_RECV \ 00000690 60A59FE5 LDR R10,??ProcessPacket_18+0x34 ;; ILL_RECV_TMR \ 00000694 080084E2 ADD R0,R4,#+8 \ 00000698 ........ BL CheckComand \ 0000069C 802099E5 LDR R2,[R9, #+128] \ 000006A0 ........ LDR R0,??DataTable160 ;; VIBR_TYPE \ 000006A4 000052E3 CMP R2,#+0 \ 000006A8 84209915 LDRNE R2,[R9, #+132] \ 000006AC 5A1FA0E3 MOV R1,#+360 \ 000006B0 00005213 CMPNE R2,#+0 \ 000006B4 1000000A BEQ ??ProcessPacket_34 4043 if(t->signals && t->isaccess) 4044 { 4045 #ifdef NEWSGOLD1 4046 scrsTime=0; 4047 #endif 4048 if(SHOW_ACTIVE) \ 000006B8 ........ LDR R2,??DataTable163 ;; SHOW_ACTIVE \ 000006BC 002092E5 LDR R2,[R2, #+0] \ 000006C0 000052E3 CMP R2,#+0 4049 t->isactive=ACTIVE_TIME; \ 000006C4 AC108915 STRNE R1,[R9, #+172] 4050 if(t->isvibra) \ 000006C8 681099E5 LDR R1,[R9, #+104] \ 000006CC 000051E3 CMP R1,#+0 \ 000006D0 2400000A BEQ ??ProcessPacket_35 4051 { 4052 if(VIBR_TYPE) \ 000006D4 000090E5 LDR R0,[R0, #+0] 4053 vibra_count=2; 4054 else 4055 vibra_count=1; 4056 if(t->automsgcountisIndividSet) \ ??ProcessPacket_34: \ 000006FC ........ LDR R2,??DataTable163 ;; SHOW_ACTIVE \ 00000700 643099E5 LDR R3,[R9, #+100] \ 00000704 002092E5 LDR R2,[R2, #+0] \ 00000708 000053E3 CMP R3,#+0 \ 0000070C 0900000A BEQ ??ProcessPacket_37 4073 { 4074 #ifdef NEWSGOLD1 4075 scrsTime=0; 4076 #endif 4077 if(SHOW_ACTIVE) \ 00000710 000052E3 CMP R2,#+0 4078 t->isactive=ACTIVE_TIME; \ 00000714 AC108915 STRNE R1,[R9, #+172] 4079 if(t->isvibra) \ 00000718 681099E5 LDR R1,[R9, #+104] \ 0000071C 000051E3 CMP R1,#+0 \ 00000720 1000000A BEQ ??ProcessPacket_35 4080 { 4081 if(VIBR_TYPE) \ 00000724 000090E5 LDR R0,[R0, #+0] \ 00000728 000050E3 CMP R0,#+0 4082 vibra_count=2; \ 0000072C 78B48715 STRNE R11,[R7, #+1144] 4083 else 4084 vibra_count=1; \ 00000730 78648705 STREQ R6,[R7, #+1144] 4085 if(t->automsgcount < automsgcount && away_m) 4086 start_vibra(); \ 00000734 0A0000EA B ??ProcessPacket_36 4087 else 4088 start_vibra(); 4089 } 4090 #ifdef ELKA 4091 if(SLI_TYPE) 4092 SLI_Timer(); 4093 #endif 4094 if(Is_Double_Vibra_On) 4095 { 4096 Reminder_timer(); 4097 } 4098 4099 if (Is_ILU_On) 4100 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 4101 } 4102 else 4103 { 4104 #ifdef NEWSGOLD1 4105 scrsTime=0; 4106 #endif 4107 if(SHOW_ACTIVE) \ ??ProcessPacket_37: \ 00000738 000052E3 CMP R2,#+0 4108 t->isactive=ACTIVE_TIME; \ 0000073C AC108915 STRNE R1,[R9, #+172] 4109 if(VIBR_TYPE) \ 00000740 000090E5 LDR R0,[R0, #+0] 4110 vibra_count=2; 4111 else 4112 vibra_count=1; 4113 if(t->automsgcount >= automsgcount) vibra_count=0; \ 00000744 ........ LDR R1,??DataTable178 ;; automsgcount \ 00000748 000050E3 CMP R0,#+0 \ 0000074C 78B48715 STRNE R11,[R7, #+1144] \ 00000750 78648705 STREQ R6,[R7, #+1144] \ 00000754 880099E5 LDR R0,[R9, #+136] \ 00000758 001091E5 LDR R1,[R1, #+0] \ 0000075C 010050E1 CMP R0,R1 \ 00000760 78848725 STRCS R8,[R7, #+1144] 4114 start_vibra(); \ ??ProcessPacket_36: \ 00000764 ........ BL start_vibra 4115 #ifdef ELKA 4116 if(SLI_TYPE) 4117 SLI_Timer(); \ ??ProcessPacket_35: \ 00000768 ........ BL SLI_Timer 4118 #endif 4119 if(Is_Double_Vibra_On) \ 0000076C F40297E5 LDR R0,[R7, #+756] \ 00000770 000050E3 CMP R0,#+0 \ 00000774 0000000A BEQ ??ProcessPacket_38 4120 { 4121 Reminder_timer(); \ 00000778 ........ BL Reminder_timer 4122 } 4123 4124 if (Is_ILU_On) \ ??ProcessPacket_38: \ 0000077C F00297E5 LDR R0,[R7, #+752] \ 00000780 000050E3 CMP R0,#+0 \ 00000784 0600000A BEQ ??ProcessPacket_39 4125 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 00000788 4C049FE5 LDR R0,??ProcessPacket_18+0x18 ;; ILL_RECV_FADE \ 0000078C 00209AE5 LDR R2,[R10, #+0] \ 00000790 003090E5 LDR R3,[R0, #+0] \ 00000794 60049FE5 LDR R0,??ProcessPacket_18+0x38 ;; ILL_DISP_RECV \ 00000798 001095E5 LDR R1,[R5, #+0] \ 0000079C 000090E5 LDR R0,[R0, #+0] \ 000007A0 ........ BL IlluminationOn 4126 } 4127 4128 #endif//DEBUG 4129 if(comanda==1) \ ??ProcessPacket_39: \ 000007A4 EC0497E5 LDR R0,[R7, #+1260] \ 000007A8 010050E3 CMP R0,#+1 \ 000007AC 2E00001A BNE ??ProcessPacket_33 4130 { 4131 AddStringToLog(t,0x02,p->data,t->name,0xFFFFFFFF,1); \ 000007B0 01002DE9 PUSH {R0} \ 000007B4 143089E2 ADD R3,R9,#+20 \ 000007B8 082084E2 ADD R2,R4,#+8 \ 000007BC 0210A0E3 MOV R1,#+2 \ 000007C0 000066E2 RSB R0,R6,#+0 \ 000007C4 01002DE9 PUSH {R0} \ 000007C8 0900A0E1 MOV R0,R9 \ 000007CC ........ BL AddStringToLog 4132 main_count++; \ 000007D0 D40297E5 LDR R0,[R7, #+724] \ 000007D4 010080E2 ADD R0,R0,#+1 \ 000007D8 D40287E5 STR R0,[R7, #+724] 4133 if(Is_INC_On && (PopupShow==1 || PopupShow==3)) \ 000007DC EC0297E5 LDR R0,[R7, #+748] \ 000007E0 08D08DE2 ADD SP,SP,#+8 \ 000007E4 000050E3 CMP R0,#+0 \ 000007E8 1300000A BEQ ??ProcessPacket_40 \ 000007EC DC039FE5 LDR R0,??ProcessPacket_18+0xC ;; PopupShow \ 000007F0 000090E5 LDR R0,[R0, #+0] \ 000007F4 010050E3 CMP R0,#+1 \ 000007F8 03005013 CMPNE R0,#+3 \ 000007FC 0E00001A BNE ??ProcessPacket_40 4134 { 4135 sprintf(show_nick,PopupMsgString,t->name); \ 00000800 F8139FE5 LDR R1,??ProcessPacket_18+0x3C ;; PopupMsgString \ 00000804 142089E2 ADD R2,R9,#+20 \ 00000808 3400A0E3 MOV R0,#+52 \ 0000080C 8C0D80E3 ORR R0,R0,#0x2300 \ 00000810 070080E0 ADD R0,R0,R7 \ 00000814 160000EF SWI +22 4136 if(!IsIdleUiOnTop()&&(!saver_on)) \ 00000818 C50000EF SWI +197 \ 0000081C 000050E3 CMP R0,#+0 \ 00000820 C0029705 LDREQ R0,[R7, #+704] \ 00000824 00005003 CMPEQ R0,#+0 \ 00000828 0500001A BNE ??ProcessPacket_41 4137 { 4138 INC_show=20; \ 0000082C 1400A0E3 MOV R0,#+20 \ 00000830 F00487E5 STR R0,[R7, #+1264] 4139 show_pp_sender(); \ 00000834 ........ BL show_pp_sender \ 00000838 010000EA B ??ProcessPacket_41 4140 } 4141 } 4142 else 4143 GBS_DelTimer(&develop); \ ??ProcessPacket_40: \ 0000083C 00009DE5 LDR R0,[SP, #+0] \ 00000840 8C0100EF SWI +396 4144 #ifndef DEBUG 4145 main_msg_timer2=main_msg_timer;//при получении сообщения восстанавливаем таймер \ ??ProcessPacket_41: \ 00000844 B8039FE5 LDR R0,??ProcessPacket_18+0x40 ;; main_msg_timer \ 00000848 000090E5 LDR R0,[R0, #+0] \ 0000084C E00487E5 STR R0,[R7, #+1248] 4146 if(Is_SMARTCPU_On) \ 00000850 ........ LDR R0,??DataTable165 ;; Is_SMARTCPU_On \ 00000854 000090E5 LDR R0,[R0, #+0] \ 00000858 000050E3 CMP R0,#+0 \ 0000085C 0200000A BEQ ??ProcessPacket_33 4147 AddToMain(t->name,p->data); \ 00000860 081084E2 ADD R1,R4,#+8 \ 00000864 140089E2 ADD R0,R9,#+20 \ 00000868 ........ BL AddToMain 4148 #endif 4149 } 4150 L1: 4151 //Разворачиваем группу, в которой пришло сообщение 4152 { 4153 CLIST *g=FindGroupByID(t->group); \ ??ProcessPacket_33: \ 0000086C 100099E5 LDR R0,[R9, #+16] \ 00000870 ........ _BLF FindGroupByID,??FindGroupByID??rA 4154 if (g) \ 00000874 000050E3 CMP R0,#+0 4155 { 4156 if (g->state) \ 00000878 B415D011 LDRHNE R1,[R0, #+84] \ 0000087C 00005113 CMPNE R1,#+0 4157 { 4158 g->state=0; \ 00000880 B485C011 STRHNE R8,[R0, #+84] 4159 } 4160 } 4161 } 4162 4163 ReqAddMsgToChat(t); \ 00000884 0900A0E1 MOV R0,R9 \ 00000888 ........ BL ReqAddMsgToChat 4164 RecountMenu(t,1); \ 0000088C 0110A0E3 MOV R1,#+1 \ 00000890 0900A0E1 MOV R0,R9 \ 00000894 ........ BL RecountMenu 4165 4166 switch (DEVELOP_IF) \ 00000898 68039FE5 LDR R0,??ProcessPacket_18+0x44 ;; DEVELOP_IF \ 0000089C 000090E5 LDR R0,[R0, #+0] \ 000008A0 000050E3 CMP R0,#+0 \ 000008A4 0400000A BEQ ??ProcessPacket_42 \ 000008A8 010050E2 SUBS R0,R0,#+1 \ 000008AC 0B00000A BEQ ??ProcessPacket_43 \ 000008B0 020050E2 SUBS R0,R0,#+2 \ 000008B4 1300000A BEQ ??ProcessPacket_44 \ 000008B8 36FFFFEA B ??ProcessPacket_28 4167 { 4168 case 0: 4169 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) to_develop(); \ ??ProcessPacket_42: \ 000008BC 068100EF SWI +33030 \ 000008C0 080090E5 LDR R0,[R0, #+8] \ 000008C4 FC1297E5 LDR R1,[R7, #+764] \ 000008C8 0C0090E5 LDR R0,[R0, #+12] \ 000008CC 0C0090E5 LDR R0,[R0, #+12] \ 000008D0 010050E1 CMP R0,R1 \ ??ProcessPacket_45: \ 000008D4 2FFFFF0A BEQ ??ProcessPacket_28 \ 000008D8 ........ BL to_develop \ 000008DC 2DFFFFEA B ??ProcessPacket_28 4170 break; 4171 case 1: 4172 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) to_develop(); \ ??ProcessPacket_43: \ 000008E0 068100EF SWI +33030 \ 000008E4 080090E5 LDR R0,[R0, #+8] \ 000008E8 FC1297E5 LDR R1,[R7, #+764] \ 000008EC 0C0090E5 LDR R0,[R0, #+12] \ 000008F0 0C0090E5 LDR R0,[R0, #+12] \ 000008F4 010050E1 CMP R0,R1 \ 000008F8 26FFFF0A BEQ ??ProcessPacket_28 \ 000008FC 430000EF SWI +67 \ 00000900 000050E3 CMP R0,#+0 \ 00000904 F2FFFFEA B ??ProcessPacket_45 4173 break; 4174 case 2: 4175 break; 4176 case 3: 4177 GBS_DelTimer(&develop); \ ??ProcessPacket_44: \ 00000908 00009DE5 LDR R0,[SP, #+0] \ 0000090C 8C0100EF SWI +396 4178 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(!IsUnlocked())) begin_to_develop(); \ 00000910 068100EF SWI +33030 \ 00000914 080090E5 LDR R0,[R0, #+8] \ 00000918 FC1297E5 LDR R1,[R7, #+764] \ 0000091C 0C0090E5 LDR R0,[R0, #+12] \ 00000920 0C0090E5 LDR R0,[R0, #+12] \ 00000924 010050E1 CMP R0,R1 \ 00000928 1AFFFF0A BEQ ??ProcessPacket_28 \ 0000092C 430000EF SWI +67 \ 00000930 000050E3 CMP R0,#+0 \ 00000934 17FFFF1A BNE ??ProcessPacket_28 \ 00000938 ........ BL begin_to_develop \ 0000093C 15FFFFEA B ??ProcessPacket_28 4179 break; 4180 } 4181 4182 RefreshCL(); 4183 break; 4184 case T_SRV_ACK: 4185 case T_CLIENT_ACK: 4186 q=FindContactLOGQByAck(p); \ ??ProcessPacket_46: \ 00000940 0400A0E1 MOV R0,R4 \ 00000944 ........ BL FindContactLOGQByAck 4187 if (q) \ 00000948 000050E3 CMP R0,#+0 \ 0000094C 9800000A BEQ ??ProcessPacket_1 4188 { 4189 q->acked=p->pkt.type==T_SRV_ACK?1:2; \ 00000950 B410D4E1 LDRH R1,[R4, #+4] \ 00000954 100051E3 CMP R1,#+16 \ 00000958 0110A003 MOVEQ R1,#+1 \ 0000095C 0210A013 MOVNE R1,#+2 \ 00000960 041080E5 STR R1,[R0, #+4] 4190 t=FindContactByUin(p->pkt.uin); \ 00000964 000094E5 LDR R0,[R4, #+0] \ 00000968 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 0000096C 0090A0E1 MOV R9,R0 4191 if (edchat_id) \ 00000970 B80497E5 LDR R0,[R7, #+1208] \ 00000974 000050E3 CMP R0,#+0 \ 00000978 8D00000A BEQ ??ProcessPacket_1 4192 { 4193 void *data=FindGUIbyId(edchat_id,NULL); \ 0000097C B80497E5 LDR R0,[R7, #+1208] \ 00000980 0010A0E3 MOV R1,#+0 \ 00000984 090200EF SWI +521 \ 00000988 0050B0E1 MOVS R5,R0 4194 if (data) \ 0000098C 8800000A BEQ ??ProcessPacket_1 4195 { 4196 EDCHAT_STRUCT *ed_struct; 4197 ed_struct=EDIT_GetUserPointer(data); \ 00000990 DF0100EF SWI +479 4198 if (ed_struct) \ 00000994 000050E3 CMP R0,#+0 \ 00000998 8500000A BEQ ??ProcessPacket_1 4199 { 4200 if (ed_struct->ed_contact==t) \ 0000099C 000090E5 LDR R0,[R0, #+0] \ 000009A0 090050E1 CMP R0,R9 \ 000009A4 8200001A BNE ??ProcessPacket_1 4201 { 4202 if (EDIT_IsBusy(data)) \ 000009A8 0500A0E1 MOV R0,R5 \ 000009AC 1C0200EF SWI +540 \ 000009B0 000050E3 CMP R0,#+0 \ 000009B4 0300000A BEQ ??ProcessPacket_47 4203 { 4204 t->req_drawack=1; \ 000009B8 9C6089E5 STR R6,[R9, #+156] 4205 time_to_stop_t9=3; \ 000009BC 0300A0E3 MOV R0,#+3 \ 000009C0 E80487E5 STR R0,[R7, #+1256] \ 000009C4 7A0000EA B ??ProcessPacket_1 4206 } 4207 else 4208 { 4209 DrawAck(data); \ ??ProcessPacket_47: \ 000009C8 0500A0E1 MOV R0,R5 \ 000009CC ........ BL DrawAck 4210 if (p->pkt.type==T_SRV_ACK) \ 000009D0 B400D4E1 LDRH R0,[R4, #+4] \ 000009D4 100050E3 CMP R0,#+16 \ 000009D8 7500001A BNE ??ProcessPacket_1 4211 { 4212 SMART_REDRAW(); \ 000009DC ........ BL SMART_REDRAW 4213 RefreshCL(); 4214 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 000009E0 F4019FE5 LDR R0,??ProcessPacket_18+0x18 ;; ILL_RECV_FADE \ 000009E4 DC6287E5 STR R6,[R7, #+732] \ 000009E8 003090E5 LDR R3,[R0, #+0] \ 000009EC EC019FE5 LDR R0,??ProcessPacket_18+0x1C ;; ILL_SEND_TMR \ 000009F0 002090E5 LDR R2,[R0, #+0] \ 000009F4 10029FE5 LDR R0,??ProcessPacket_18+0x48 ;; ILL_KEYS_SEND \ 000009F8 001090E5 LDR R1,[R0, #+0] \ 000009FC E0019FE5 LDR R0,??ProcessPacket_18+0x20 ;; ILL_DISP_SEND \ 00000A00 000090E5 LDR R0,[R0, #+0] \ 00000A04 ........ BL IlluminationOn \ 00000A08 690000EA B ??ProcessPacket_1 4215 } 4216 } 4217 } 4218 } 4219 } 4220 } 4221 } 4222 break; 4223 case T_XTEXT_ACK: 4224 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_48: \ 00000A0C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000A10 0090B0E1 MOVS R9,R0 4225 if (t) \ 00000A14 6600000A BEQ ??ProcessPacket_1 4226 { 4227 int i; 4228 int j; 4229 // char ss[256]; 4230 // TTime tm; 4231 FreeXText(t); \ 00000A18 ........ _BLF FreeXText,??FreeXText??rA 4232 i=p->pkt.data_len; \ 00000A1C B660D4E1 LDRH R6,[R4, #+6] 4233 memcpy(t->xtext=malloc(i),p->data,i); \ 00000A20 0600A0E1 MOV R0,R6 \ 00000A24 140000EF SWI +20 \ 00000A28 B40089E5 STR R0,[R9, #+180] \ 00000A2C 0620A0E1 MOV R2,R6 \ 00000A30 081084E2 ADD R1,R4,#+8 \ 00000A34 1E0100EF SWI +286 4234 t->xtext[i]=0; \ 00000A38 B40099E5 LDR R0,[R9, #+180] 4235 // GetDateTime(0,&tm); 4236 // snprintf(ss,i+4,"%02d:%02d:%02d %s",tm.hour,tm.min,tm.sec,p->data); 4237 // memcpy(t->xtext=malloc(strlen(ss)),ss,strlen(ss)); 4238 4239 zeromem(s,256); \ 00000A3C 401FA0E3 MOV R1,#+256 \ 00000A40 0080C6E7 STRB R8,[R6, +R0] \ 00000A44 18008DE2 ADD R0,SP,#+24 \ 00000A48 1D0100EF SWI +285 4240 strcpy(s,t->name); \ 00000A4C 141089E2 ADD R1,R9,#+20 \ 00000A50 18008DE2 ADD R0,SP,#+24 \ 00000A54 1A0000EF SWI +26 4241 strcat(s,":\n"); \ 00000A58 591F8FE2 ADR R1,??ProcessPacket_18 ;; ":\n" \ 00000A5C 18008DE2 ADD R0,SP,#+24 \ 00000A60 170000EF SWI +23 4242 i=strlen(s); \ 00000A64 18008DE2 ADD R0,SP,#+24 \ 00000A68 1B0000EF SWI +27 4243 j=p->data[0]; \ 00000A6C 0860D4E5 LDRB R6,[R4, #+8] \ 00000A70 0070A0E1 MOV R7,R0 4244 if (j>(255-i)) j=255-i; \ 00000A74 FF0067E2 RSB R0,R7,#+255 \ 00000A78 060050E1 CMP R0,R6 \ 00000A7C 0060A0B1 MOVLT R6,R0 4245 strncpy(s+i,p->data+1,j); \ 00000A80 0620A0E1 MOV R2,R6 \ 00000A84 091084E2 ADD R1,R4,#+9 \ 00000A88 18008DE2 ADD R0,SP,#+24 \ 00000A8C 000087E0 ADD R0,R7,R0 \ 00000A90 160100EF SWI +278 4246 i+=j; \ 00000A94 070086E0 ADD R0,R6,R7 4247 if (i<255) \ 00000A98 FF0050E3 CMP R0,#+255 \ 00000A9C 100000AA BGE ??ProcessPacket_49 4248 { 4249 s[i]='\n'; \ 00000AA0 18108DE2 ADD R1,SP,#+24 \ 00000AA4 0A20A0E3 MOV R2,#+10 \ 00000AA8 0120C0E7 STRB R2,[R0, +R1] 4250 i++; \ 00000AAC 0810D4E5 LDRB R1,[R4, #+8] \ 00000AB0 B620D4E1 LDRH R2,[R4, #+6] \ 00000AB4 010080E2 ADD R0,R0,#+1 4251 j=p->pkt.data_len-p->data[0]-1; 4252 if (j>(255-i)) j=255-i; 4253 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000AB8 18308DE2 ADD R3,SP,#+24 \ 00000ABC 012042E0 SUB R2,R2,R1 \ 00000AC0 016042E2 SUB R6,R2,#+1 \ 00000AC4 FF2060E2 RSB R2,R0,#+255 \ 00000AC8 060052E1 CMP R2,R6 \ 00000ACC 0260A0B1 MOVLT R6,R2 \ 00000AD0 0620A0E1 MOV R2,R6 \ 00000AD4 041081E0 ADD R1,R1,R4 \ 00000AD8 091081E2 ADD R1,R1,#+9 \ 00000ADC 030080E0 ADD R0,R0,R3 \ 00000AE0 160100EF SWI +278 4254 } 4255 4256 zeromem(s,256); \ ??ProcessPacket_49: \ 00000AE4 401FA0E3 MOV R1,#+256 \ 00000AE8 18008DE2 ADD R0,SP,#+24 \ 00000AEC 1D0100EF SWI +285 4257 i=0; 4258 j=p->data[0]; \ 00000AF0 0860D4E5 LDRB R6,[R4, #+8] 4259 if (j>(255-i)) j=255-i; 4260 strncpy(s,p->data+1,j); \ 00000AF4 091084E2 ADD R1,R4,#+9 \ 00000AF8 18008DE2 ADD R0,SP,#+24 \ 00000AFC 400F56E3 CMP R6,#+256 \ 00000B00 FF60A0A3 MOVGE R6,#+255 \ 00000B04 0620A0E1 MOV R2,R6 \ 00000B08 160100EF SWI +278 4261 i+=j; 4262 if (i<255) \ 00000B0C FF0056E3 CMP R6,#+255 \ 00000B10 100000AA BGE ??ProcessPacket_50 4263 { 4264 s[i++]=13; \ 00000B14 18108DE2 ADD R1,SP,#+24 \ 00000B18 0D20A0E3 MOV R2,#+13 \ 00000B1C 0120C6E7 STRB R2,[R6, +R1] \ 00000B20 0810D4E5 LDRB R1,[R4, #+8] \ 00000B24 B620D4E1 LDRH R2,[R4, #+6] \ 00000B28 010086E2 ADD R0,R6,#+1 4265 j=p->pkt.data_len-p->data[0]-1; 4266 if (j>(255-i)) j=255-i; 4267 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000B2C 18308DE2 ADD R3,SP,#+24 \ 00000B30 012042E0 SUB R2,R2,R1 \ 00000B34 016042E2 SUB R6,R2,#+1 \ 00000B38 FF2060E2 RSB R2,R0,#+255 \ 00000B3C 060052E1 CMP R2,R6 \ 00000B40 0260A0B1 MOVLT R6,R2 \ 00000B44 0620A0E1 MOV R2,R6 \ 00000B48 041081E0 ADD R1,R1,R4 \ 00000B4C 091081E2 ADD R1,R1,#+9 \ 00000B50 030080E0 ADD R0,R0,R3 \ 00000B54 160100EF SWI +278 4268 } 4269 4270 // GetDateTime(0,&tm); 4271 // sprintf(ss,"%02d:%02d:%02d %s",tm.hour,tm.min,tm.sec,s); 4272 AddStringToLog(t,0x03,s,x_status_change,0xFFFFFFFF,1); \ ??ProcessPacket_50: \ 00000B58 0100A0E3 MOV R0,#+1 \ 00000B5C 01002DE9 PUSH {R0} \ 00000B60 E03F85E2 ADD R3,R5,#+896 \ 00000B64 0310A0E3 MOV R1,#+3 \ 00000B68 000060E2 RSB R0,R0,#+0 \ 00000B6C 01002DE9 PUSH {R0} \ 00000B70 20208DE2 ADD R2,SP,#+32 \ 00000B74 0900A0E1 MOV R0,R9 \ 00000B78 ........ BL AddStringToLog 4273 ReqAddMsgToChat(t); \ 00000B7C 0900A0E1 MOV R0,R9 \ 00000B80 ........ BL ReqAddMsgToChat 4274 if (strlen(p->data)) // Если x-status не пустой \ 00000B84 080084E2 ADD R0,R4,#+8 \ 00000B88 1B0000EF SWI +27 \ 00000B8C 000050E3 CMP R0,#+0 \ 00000B90 08D08DE2 ADD SP,SP,#+8 4275 RecountMenu(t, 1); \ 00000B94 0110A013 MOVNE R1,#+1 \ 00000B98 0900A011 MOVNE R0,R9 \ 00000B9C 4CFDFF1A BNE ??ProcessPacket_8 4276 else 4277 RecountMenu(NULL, 0); \ 00000BA0 0010A0E3 MOV R1,#+0 \ 00000BA4 0100A0E1 MOV R0,R1 \ 00000BA8 49FDFFEA B ??ProcessPacket_8 4278 } 4279 break; 4280 case T_LASTPRIVACY: 4281 CurrentPrivateStatus=p->data[0]; \ ??ProcessPacket_51: \ 00000BAC 0800D4E5 LDRB R0,[R4, #+8] \ 00000BB0 740487E5 STR R0,[R7, #+1140] 4282 break; 4283 } 4284 mfree(p); \ ??ProcessPacket_1: \ 00000BB4 0400A0E1 MOV R0,R4 \ 00000BB8 150000EF SWI +21 4285 } \ 00000BBC 50DF8DE2 ADD SP,SP,#+320 \ 00000BC0 F08FBDE8 POP {R4-R11,PC} ;; return \ ??ProcessPacket_18: \ 00000BC4 3A0A0000 DC8 ":\n",+0 \ 00000BC8 ........ DC32 ENA_AUTO_XTXT \ 00000BCC ........ DC32 PopupOnlineString \ 00000BD0 ........ DC32 PopupShow \ 00000BD4 ........ DC32 ON_OFF_TIME \ 00000BD8 ........ DC32 IllByONCantact \ 00000BDC ........ DC32 ILL_RECV_FADE \ 00000BE0 ........ DC32 ILL_SEND_TMR \ 00000BE4 ........ DC32 ILL_DISP_SEND \ 00000BE8 ........ DC32 sndGlobal \ 00000BEC ........ DC32 sndGlobal2 \ 00000BF0 ........ DC32 sndSrvMsg \ 00000BF4 ........ DC32 ILL_KEYS_RECV \ 00000BF8 ........ DC32 ILL_RECV_TMR \ 00000BFC ........ DC32 ILL_DISP_RECV \ 00000C00 ........ DC32 PopupMsgString \ 00000C04 ........ DC32 main_msg_timer \ 00000C08 ........ DC32 DEVELOP_IF \ 00000C0C ........ DC32 ILL_KEYS_SEND 4286 4287 4288 IPC_REQ tmr_gipc; \ In segment CODE, align 4, keep-with-next 4289 void process_active_timer(void) 4290 { \ process_active_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} 4291 if (connect_state>2) \ 00000004 ........ LDR R5,??DataTable171 ;; i_rc \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C 900495E5 LDR R0,[R5, #+1168] \ 00000010 030050E3 CMP R0,#+3 \ 00000014 070000BA BLT ??process_active_timer_0 4292 { 4293 if (++tenseconds_to_ping>12) \ 00000018 BC0495E5 LDR R0,[R5, #+1212] \ 0000001C 010080E2 ADD R0,R0,#+1 \ 00000020 BC0485E5 STR R0,[R5, #+1212] \ 00000024 0D0050E3 CMP R0,#+13 \ 00000028 020000BA BLT ??process_active_timer_0 4294 { 4295 tenseconds_to_ping=0; 4296 SUBPROC((void *)do_ping); \ 0000002C 5C009FE5 LDR R0,??process_active_timer_1 ;; do_ping \ 00000030 BC4485E5 STR R4,[R5, #+1212] \ 00000034 710100EF SWI +369 4297 } 4298 } 4299 tmr_gipc.name_to=ipc_my_name; \ ??process_active_timer_0: \ 00000038 ........ LDR R2,??DataTable169 ;; Canvas \ 0000003C A70FA0E3 MOV R0,#+668 \ 00000040 D61FA0E3 MOV R1,#+856 \ 00000044 023081E0 ADD R3,R1,R2 \ 00000048 053080E7 STR R3,[R0, +R5] 4300 tmr_gipc.name_from=ipc_my_name; \ 0000004C 021081E0 ADD R1,R1,R2 \ 00000050 A01285E5 STR R1,[R5, #+672] 4301 tmr_gipc.data=NULL; \ 00000054 A44285E5 STR R4,[R5, #+676] 4302 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 4303 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000074 ........ LDR R2,??DataTable168 ;; process_active_timer \ 00000078 871EA0E3 MOV R1,#+2160 \ 0000007C 1400A0E3 MOV R0,#+20 \ 00000080 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000084 050080E0 ADD R0,R0,R5 \ 00000088 4D0000EF SWI +77 4304 } \ 0000008C 3080BDE8 POP {R4,R5,PC} ;; return \ ??process_active_timer_1: \ 00000090 ........ DC32 do_ping 4305 4306 GBSTMR tm22; \ In segment CODE, align 4, keep-with-next 4307 void OneSecTmr() 4308 { 4309 tmr_gipc.name_to=ipc_my_name; \ OneSecTmr: \ 00000000 ........ LDR R2,??DataTable169 ;; Canvas \ 00000004 10402DE9 PUSH {R4,LR} \ 00000008 ........ LDR R4,??DataTable171 ;; i_rc \ 0000000C A70FA0E3 MOV R0,#+668 \ 00000010 D61FA0E3 MOV R1,#+856 \ 00000014 023081E0 ADD R3,R1,R2 \ 00000018 043080E7 STR R3,[R0, +R4] 4310 tmr_gipc.name_from=ipc_my_name; \ 0000001C 021081E0 ADD R1,R1,R2 \ 00000020 A01284E5 STR R1,[R4, #+672] 4311 tmr_gipc.data=NULL; \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 A41284E5 STR R1,[R4, #+676] 4312 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 4313 GBS_StartTimerProc(&tm22,TMR_SECOND,OneSecTmr); \ 00000048 14209FE5 LDR R2,??OneSecTmr_0 ;; OneSecTmr \ 0000004C D810A0E3 MOV R1,#+216 \ 00000050 F400A0E3 MOV R0,#+244 \ 00000054 8C0D80E3 ORR R0,R0,#0x2300 \ 00000058 040080E0 ADD R0,R0,R4 \ 0000005C 4D0000EF SWI +77 4314 } \ 00000060 1080BDE8 POP {R4,PC} ;; return \ ??OneSecTmr_0: \ 00000064 ........ DC32 OneSecTmr 4315 4316 4317 //=============================================================================================== 4318 /* 4319 extern ADDUIN addonuin[]; 4320 4321 int itemFromDisp;//кол-во на экране 4322 int totalItems;//общее количество итемов 4323 int curpos=0;//позичия курсора 4324 int curpage=1;//текущая страница 4325 4326 const char clrSelect[4]={0xFF,0x00,0x00,0x60}; 4327 const char fntSelect[4]={0xFF,0xFF,0x00,0x60}; 4328 const char bordSelect[4]={0x00,0x00,0x00,0x60}; 4329 4330 const char clrNotSelect[4]={0x00,0x00,0x00,0x60}; 4331 const char bordNotSelect[4]={0x00,0x00,0x00,0x60}; 4332 const char fntNotSelect[4]={0xFF,0xFF,0xFF,0x60}; 4333 4334 char clrBlack[]={0x00,0x00,0x00,0x64}; 4335 char clrWhite[]={0xFF,0xFF,0xFF,0x64}; 4336 //char prozr[]={0x00,0x00,0x00,0x00}; 4337 const int font=FONT_SMALL; 4338 const char _t[]="%t"; 4339 4340 extern int ParseUINS(); 4341 int USE_ADD_UIN=0; 4342 #define CLIST_Y1 (YDISP+GetFontYSIZE(font)+8) 4343 4344 static void DrawList() 4345 { 4346 int font_y = GetFontYSIZE(font)+2;//16+2 4347 int scr_w=ScreenW(); 4348 int scr_h=ScreenH()-1; 4349 // int y2=scr_w-(GetFontYSIZE(font)+2); 4350 #ifdef ELKA 4351 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-GetFontYSIZE(font)-2)-1; 4352 #else 4353 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-GetFontYSIZE(font)-2); 4354 #endif 4355 4356 LockSched(); 4357 totalItems = ParseUINS(); 4358 // Определяем количество страниц списка контактов 4359 int pageNum = sdiv(itemFromDisp, totalItems); 4360 if( itemFromDisp*pageNum < totalItems) pageNum++; //На всяк,вдруг еще страница нужна 4361 WSHDR* out_ws = AllocWS(256); 4362 int i=0; 4363 int start_y; 4364 int x=1; 4365 while(i<=totalItems) 4366 { 4367 if((i>=(curpage-1)*itemFromDisp) && (i<=itemFromDisp*curpage))//если те итемы который нужно выводить на экран со страници curpage 4368 { 4369 wsprintf(out_ws,"%d. %d",i+1,addonuin[i].uin);//имя закладки 4370 start_y = (CLIST_Y1 + (i - (curpage-1)*itemFromDisp)*font_y); //определяем начальное смещение по у 4371 4372 if(i==curpos) 4373 { 4374 DrawRoundedFrame(x-4,start_y,scr_w-1,start_y+font_y,5,5,0,bordSelect,clrSelect); 4375 DrawString(out_ws,x,start_y+2,scr_w-1,start_y+font_y,font,0,fntSelect,0); 4376 } 4377 else 4378 { 4379 DrawRoundedFrame(x,start_y+1,scr_w-1,start_y+font_y,0,0,0,bordNotSelect,clrNotSelect);//clrBlack 4380 DrawString(out_ws,x,start_y+2,scr_w-1,start_y+font_y,font,0,fntNotSelect,0); 4381 } 4382 } 4383 i++; 4384 if(i>(pageNum*itemFromDisp)) break; 4385 } 4386 UnlockSched(); 4387 FreeWS(out_ws); 4388 } 4389 4390 // Управление курсором 4391 void MoveUp() 4392 { 4393 if(!itemFromDisp)return; 4394 if(curpos<1) 4395 { 4396 curpos=totalItems; 4397 if(itemFromDisp!=totalItems) 4398 { 4399 curpage = sdiv(itemFromDisp,totalItems)+1; 4400 } 4401 else 4402 curpage = 1; 4403 } 4404 else 4405 { 4406 curpos--; 4407 if(curpos<(curpage-1)*itemFromDisp){ curpos++; curpage--; } 4408 } 4409 // REDRAW(); 4410 } 4411 4412 4413 void MoveDown() 4414 { 4415 if(!totalItems)return; 4416 curpos++; 4417 if(curpos>totalItems) { curpos=0; curpage=1; } 4418 if(curpage*itemFromDispisIndividSet=0; \ 00000010 080594E5 LDR R0,[R4, #+1288] \ 00000014 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C 641080E5 STR R1,[R0, #+100] 4466 REDRAW(); \ 00000020 720100EF SWI +370 4467 } \ 00000024 1080BDE8 POP {R4,PC} ;; return 4468 \ In segment CODE, align 4, keep-with-next 4469 void ChangeVibraContact(GUI *data) 4470 { 4471 CLIST *t; 4472 t=FindContactByUin(uinContact); \ ChangeVibraContact: \ 00000000 ........ LDR R0,??DataTable190 ;; i_rc + 1288 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 4473 t->isvibra=!(t->isvibra); \ 00000010 681090E5 LDR R1,[R0, #+104] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 681080E5 STR R1,[R0, #+104] 4474 // RefreshGUI(); 4475 REDRAW(); \ 00000024 720100EF SWI +370 4476 } \ 00000028 0080BDE8 POP {PC} ;; return 4477 \ In segment CODE, align 4, keep-with-next 4478 void ChangeSoundContact(GUI *data) 4479 { 4480 CLIST *t; 4481 t=FindContactByUin(uinContact); \ ChangeSoundContact: \ 00000000 ........ LDR R0,??DataTable190 ;; i_rc + 1288 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 4482 t->issound=!(t->issound); \ 00000010 6C1090E5 LDR R1,[R0, #+108] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 6C1080E5 STR R1,[R0, #+108] 4483 // RefreshGUI(); 4484 REDRAW(); \ 00000024 720100EF SWI +370 4485 } \ 00000028 0080BDE8 POP {PC} ;; return 4486 \ In segment CODE, align 4, keep-with-next 4487 void ChangeAutoMsg(GUI *data) 4488 { 4489 CLIST *t; 4490 t=FindContactByUin(uinContact); \ ChangeAutoMsg: \ 00000000 ........ LDR R0,??DataTable190 ;; i_rc + 1288 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 4491 t->isautomsg=!(t->isautomsg); \ 00000010 701090E5 LDR R1,[R0, #+112] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 701080E5 STR R1,[R0, #+112] 4492 // RefreshGUI(); 4493 REDRAW(); \ 00000024 720100EF SWI +370 4494 } \ 00000028 0080BDE8 POP {PC} ;; return 4495 \ In segment CODE, align 4, keep-with-next 4496 void ChangeShowXstatus(GUI *data) 4497 { 4498 CLIST *t; 4499 t=FindContactByUin(uinContact); \ ChangeShowXstatus: \ 00000000 ........ LDR R0,??DataTable190 ;; i_rc + 1288 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 4500 t->isShowXst=!(t->isShowXst); \ 00000010 7C1090E5 LDR R1,[R0, #+124] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 7C1080E5 STR R1,[R0, #+124] 4501 // RefreshGUI(); 4502 REDRAW(); \ 00000024 720100EF SWI +370 4503 } \ 00000028 0080BDE8 POP {PC} ;; return 4504 4505 #ifdef kluchnik 4506 \ In segment CODE, align 4, keep-with-next 4507 void ChangeAccess(GUI *data) 4508 { 4509 CLIST *t; 4510 t=FindContactByUin(uinContact); \ ChangeAccess: \ 00000000 ........ LDR R0,??DataTable190 ;; i_rc + 1288 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 4511 t->isaccess=!(t->isaccess); \ 00000010 841090E5 LDR R1,[R0, #+132] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 841080E5 STR R1,[R0, #+132] 4512 /// RefreshGUI(); 4513 REDRAW(); \ 00000024 720100EF SWI +370 4514 } \ 00000028 0080BDE8 POP {PC} ;; return 4515 4516 \ In segment CODE, align 4, keep-with-next 4517 void ChangeAwaySignal(GUI *data) 4518 { 4519 CLIST *t; 4520 t=FindContactByUin(uinContact); \ ChangeAwaySignal: \ 00000000 ........ LDR R0,??DataTable190 ;; i_rc + 1288 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 4521 t->automsgcount=automsgcount; \ 00000010 ........ LDR R1,??DataTable178 ;; automsgcount \ 00000014 001091E5 LDR R1,[R1, #+0] \ 00000018 881080E5 STR R1,[R0, #+136] 4522 // RefreshGUI(); 4523 REDRAW(); \ 0000001C 720100EF SWI +370 4524 } \ 00000020 0080BDE8 POP {PC} ;; return 4525 \ In segment CODE, align 4, keep-with-next 4526 void ChangeAutobot(GUI *data) 4527 { 4528 CLIST *t; 4529 t=FindContactByUin(uinContact); \ ChangeAutobot: \ 00000000 ........ LDR R0,??DataTable190 ;; i_rc + 1288 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 4530 t->isautobot=!(t->isautobot); \ 00000010 5C1090E5 LDR R1,[R0, #+92] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 5C1080E5 STR R1,[R0, #+92] 4531 // RefreshGUI(); 4532 REDRAW(); \ 00000024 720100EF SWI +370 4533 } \ 00000028 0080BDE8 POP {PC} ;; return 4534 \ In segment CODE, align 4, keep-with-next 4535 void ChangeLoadHistory(GUI *data) 4536 { 4537 CLIST *t; 4538 t=FindContactByUin(uinContact); \ ChangeLoadHistory: \ 00000000 ........ LDR R0,??DataTable190 ;; i_rc + 1288 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 4539 t->isLoadHistory=!(t->isLoadHistory); \ 00000010 601090E5 LDR R1,[R0, #+96] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 601080E5 STR R1,[R0, #+96] 4540 // RefreshGUI(); 4541 REDRAW(); \ 00000024 720100EF SWI +370 4542 } \ 00000028 0080BDE8 POP {PC} ;; return 4543 #endif //kluchnik 4544 4545 const void *menuproc[_MAX]= 4546 { 4547 (void *)RqtXText, 4548 (void *)ChangeVibraContact, 4549 (void *)ChangeSoundContact, 4550 (void *)ChangeAutoMsg, 4551 (void *)ChangeShowXstatus, 4552 #ifdef kluchnik 4553 (void *)ChangeAccess, 4554 (void *)ChangeAwaySignal, 4555 (void *)ChangeLoadHistory, 4556 (void *)ChangeAutobot, 4557 #endif 4558 }; 4559 4560 const char * const menutext[_MAX]= 4561 { 4562 "Запрос хстатуса", 4563 "Вибра", 4564 "Звук", 4565 "Автоответчик", 4566 "Показ.хстатус", 4567 #ifdef kluchnik 4568 "Удаленное управление", 4569 "Синалы автоответчика", 4570 "Загруж.историю", 4571 "Aвтобот" 4572 #endif 4573 }; 4574 4575 int hy; 4576 const char clrSelect[4]={0xFF,0x00,0x00,0x20}; 4577 const char fntSelect[4]={0xFF,0xFF,0x00,0x60}; 4578 const char bordSelect[4]={0x00,0x00,0x00,0x60}; 4579 4580 const char clrNotSelect[4]={0x00,0x00,0x00,0x00}; 4581 const char bordNotSelect[4]={0x00,0x00,0x00,0x00}; 4582 const char fntNotSelect[4]={0xFF,0xFF,0xFF,0x60}; 4583 4584 char clrBlack[]={0x00,0x00,0x00,0x64}; 4585 char clrWhite[]={0xFF,0xFF,0xFF,0x64}; 4586 char clrRed[]={0xFF,0x00,0x00,0x64}; 4587 char transparent[]={0x00,0x00,0x00,0x00}; 4588 char blue[]="\x00\x00\xFF\x64"; 4589 4590 //const int clfont=(FONT_SMALL+100);//ибо библа пнг 4591 int clfont; 4592 4593 //char clrRed2[]={0xFF,0x00,0x00,0x15}; \ In segment DATA_Z, align 4, align-sorted 4594 int i_itemFromDisp;//кол-во на экране \ i_itemFromDisp: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 4595 int i_totalItems;//общее количество итемов \ i_totalItems: \ 00000000 DS8 4 4596 int i_curpos=1;//позичия курсора 4597 \ In segment DATA_Z, align 4, align-sorted 4598 GBSTMR i_tmr; \ i_tmr: \ 00000000 DS8 16 4599 4600 extern IMGHDR screen; 4601 void DrawCheckBox(int x,int y,int flag,int type); 4602 extern char *menutexts2[]; 4603 4604 RECT i_rc; 4605 \ In segment CODE, align 4, keep-with-next 4606 int DrawIconInfo(int x, int y, int curitem) 4607 { \ DrawIconInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 4608 CLIST *t; 4609 t=FindContactByUin(uinContact); \ 00000008 ........ LDR R0,??DataTable190 ;; i_rc + 1288 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 000090E5 LDR R0,[R0, #+0] \ 00000014 0260A0E1 MOV R6,R2 \ 00000018 ........ _BLF FindContactByUin,??FindContactByUin??rA 4610 4611 switch(curitem) \ 0000001C 016046E2 SUB R6,R6,#+1 \ 00000020 080056E3 CMP R6,#+8 \ 00000024 2A00008A BHI ??DrawIconInfo_1 \ 00000028 011F8FE2 ADR R1,??DrawIconInfo_0 \ 0000002C 0610D1E7 LDRB R1,[R1, R6] \ 00000030 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??DrawIconInfo_0: \ 00000034 02050B0D DC8 +2,+5,+11,+13 \ 00000038 13151719 DC8 +19,+21,+23,+25 \ 0000003C 1F000000 DC8 +31,+0,+0,+0 4612 { 4613 case 1: DrawCheckBox(x,y,1,1);/*DrwImage(icons[ICON_PING],x,y,0,0);*/ break;// return icons[ICON_PING]->w; \ ??DrawIconInfo_2: \ 00000040 0130A0E3 MOV R3,#+1 \ 00000044 0120A0E3 MOV R2,#+1 \ 00000048 1E0000EA B ??DrawIconInfo_3 4614 case 2: DrawCheckBox(x,y,t->isvibra?1:0,0); break; \ ??DrawIconInfo_4: \ 0000004C 680090E5 LDR R0,[R0, #+104] \ ??DrawIconInfo_5: \ 00000050 0030A0E3 MOV R3,#+0 \ 00000054 000050E3 CMP R0,#+0 \ 00000058 0120A013 MOVNE R2,#+1 \ 0000005C 0020A003 MOVEQ R2,#+0 \ 00000060 180000EA B ??DrawIconInfo_3 4615 case 3: DrawCheckBox(x,y,t->issound?1:0,0); break; \ ??DrawIconInfo_6: \ 00000064 6C0090E5 LDR R0,[R0, #+108] \ 00000068 F8FFFFEA B ??DrawIconInfo_5 4616 case 4: DrawCheckBox(x,y,t->isautomsg?1:0,0); break; \ ??DrawIconInfo_7: \ 0000006C 700090E5 LDR R0,[R0, #+112] \ ??DrawIconInfo_8: \ 00000070 0030A0E3 MOV R3,#+0 \ 00000074 000050E3 CMP R0,#+0 \ 00000078 0120A013 MOVNE R2,#+1 \ 0000007C 0020A003 MOVEQ R2,#+0 \ 00000080 100000EA B ??DrawIconInfo_3 4617 case 5: DrawCheckBox(x,y,t->isShowXst?1:0,0); break; \ ??DrawIconInfo_9: \ 00000084 7C0090E5 LDR R0,[R0, #+124] \ 00000088 F0FFFFEA B ??DrawIconInfo_5 4618 #ifdef kluchnik 4619 case 6: DrawCheckBox(x,y,t->isaccess?1:0,0); break; \ ??DrawIconInfo_10: \ 0000008C 840090E5 LDR R0,[R0, #+132] \ 00000090 F6FFFFEA B ??DrawIconInfo_8 4620 case 7: DrawCheckBox(x,y,t->automsgcount?1:0,0); break; \ ??DrawIconInfo_11: \ 00000094 880090E5 LDR R0,[R0, #+136] \ 00000098 ECFFFFEA B ??DrawIconInfo_5 4621 case 8: DrawCheckBox(x,y,t->isLoadHistory?1:0,0); break; \ ??DrawIconInfo_12: \ 0000009C 600090E5 LDR R0,[R0, #+96] \ 000000A0 0030A0E3 MOV R3,#+0 \ 000000A4 000050E3 CMP R0,#+0 \ 000000A8 0120A013 MOVNE R2,#+1 \ 000000AC 0020A003 MOVEQ R2,#+0 \ 000000B0 040000EA B ??DrawIconInfo_3 4622 case 9: DrawCheckBox(x,y,t->isautobot?0:1,0); break; \ ??DrawIconInfo_13: \ 000000B4 5C0090E5 LDR R0,[R0, #+92] \ 000000B8 0030A0E3 MOV R3,#+0 \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 0020A013 MOVNE R2,#+0 \ 000000C4 0120A003 MOVEQ R2,#+1 \ ??DrawIconInfo_3: \ 000000C8 0510A0E1 MOV R1,R5 \ 000000CC 0400A0E1 MOV R0,R4 \ 000000D0 ........ _BLF DrawCheckBox,??DrawCheckBox??rA 4623 #endif 4624 } 4625 return 12; \ ??DrawIconInfo_1: \ 000000D4 0C00A0E3 MOV R0,#+12 \ 000000D8 7080BDE8 POP {R4-R6,PC} ;; return 4626 } 4627 4628 extern DYNPNGICONLIST *GetXSByItem(int curitem); 4629 char *GetStatusByIconIndex(int icon); 4630 4631 char ixtext[256]; \ In segment CODE, align 4, keep-with-next 4632 void I_DrawList() 4633 { \ I_DrawList: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 4634 int font_y = FontH(clfont)+1; \ 00000004 ........ LDR R4,??DataTable197 ;; i_rc 4635 int scr_h=ScreenH()-1; 4636 int scr_w=ScreenW()-1; 4637 4638 LockSched(); 4639 int i=1; 4640 int start_y=0; 4641 int start_x=i_rc.x+4; 4642 4643 RECT rc; 4644 CLIST *t; 4645 t=FindContactByUin(uinContact); 4646 SetFontColor(clrWhite,transparent,0); 4647 char *s=malloc(128); 4648 sprintf(s,"Меню контакта \"%s\"",t->name); \ 00000008 6C939FE5 LDR R9,??I_DrawList_0 ;; menutext \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 100594E5 LDR R0,[R4, #+1296] \ 00000014 0160A0E3 MOV R6,#+1 \ 00000018 ........ _BLF FontH,??FontH??rA \ 0000001C 015080E2 ADD R5,R0,#+1 \ 00000020 898100EF SWI +33161 \ 00000024 888100EF SWI +33160 \ 00000028 460100EF SWI +326 \ 0000002C F010D4E1 LDRSH R1,[R4, #+0] \ 00000030 041081E2 ADD R1,R1,#+4 \ 00000034 08108DE5 STR R1,[SP, #+8] \ 00000038 080594E5 LDR R0,[R4, #+1288] \ 0000003C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000040 0070A0E1 MOV R7,R0 \ 00000044 0800A0E3 MOV R0,#+8 \ 00000048 900D80E3 ORR R0,R0,#0x2400 \ 0000004C 04A080E0 ADD R10,R0,R4 \ 00000050 0020A0E3 MOV R2,#+0 \ 00000054 080080E2 ADD R0,R0,#+8 \ 00000058 041080E0 ADD R1,R0,R4 \ 0000005C 0A00A0E1 MOV R0,R10 \ 00000060 ........ _BLF SetFontColor,??SetFontColor??rA \ 00000064 8000A0E3 MOV R0,#+128 \ 00000068 140000EF SWI +20 \ 0000006C 0080A0E1 MOV R8,R0 \ 00000070 142087E2 ADD R2,R7,#+20 \ 00000074 281089E2 ADD R1,R9,#+40 \ 00000078 160000EF SWI +22 \ 0000007C F000D4E1 LDRSH R0,[R4, #+0] \ 00000080 F410D4E1 LDRSH R1,[R4, #+4] \ 00000084 0030A0E3 MOV R3,#+0 \ 00000088 0820A0E1 MOV R2,R8 \ 0000008C 001041E0 SUB R1,R1,R0 \ 00000090 02002DE9 PUSH {R1} \ 00000094 030080E2 ADD R0,R0,#+3 \ 00000098 0010A0E3 MOV R1,#+0 \ 0000009C 02002DE9 PUSH {R1} \ 000000A0 02002DE9 PUSH {R1} \ 000000A4 02002DE9 PUSH {R1} \ 000000A8 0110A0E3 MOV R1,#+1 \ 000000AC 02002DE9 PUSH {R1} \ 000000B0 101594E5 LDR R1,[R4, #+1296] \ 000000B4 02002DE9 PUSH {R1} \ 000000B8 F210D4E1 LDRSH R1,[R4, #+2] \ 000000BC 011081E2 ADD R1,R1,#+1 4649 PrintText(i_rc.x+3,i_rc.y+1,s,0,clfont,1,0,0,0,i_rc.x2-i_rc.x);//item name \ 000000C0 ........ _BLF PrintText,??PrintText??rA 4650 4651 DrawLine(i_rc.x,i_rc.y+font_y,i_rc.x2,i_rc.y+font_y,0,clrWhite); \ 000000C4 F200D4E1 LDRSH R0,[R4, #+2] \ 000000C8 00042DE9 PUSH {R10} \ 000000CC 001085E0 ADD R1,R5,R0 \ 000000D0 0000A0E3 MOV R0,#+0 \ 000000D4 01002DE9 PUSH {R0} \ 000000D8 F420D4E1 LDRSH R2,[R4, #+4] \ 000000DC F000D4E1 LDRSH R0,[R4, #+0] \ 000000E0 0130A0E1 MOV R3,R1 \ 000000E4 B30100EF SWI +435 4652 int back=i_rc.y; \ 000000E8 F200D4E1 LDRSH R0,[R4, #+2] \ 000000EC 0020A0E1 MOV R2,R0 \ 000000F0 2C208DE5 STR R2,[SP, #+44] 4653 i_rc.y+=4; \ 000000F4 04A080E2 ADD R10,R0,#+4 \ 000000F8 B2A0C4E1 STRH R10,[R4, #+2] 4654 4655 DrwImage(icons[GetIconIndex(t)],i_rc.x+2,i_rc.y+font_y); \ 000000FC 0700A0E1 MOV R0,R7 \ 00000100 ........ BL GetIconIndex \ 00000104 F010D4E1 LDRSH R1,[R4, #+0] \ 00000108 0AA8A0E1 MOV R10,R10, LSL #+16 \ 0000010C 4AA8A0E1 MOV R10,R10, ASR #+16 \ 00000110 0A2085E0 ADD R2,R5,R10 \ 00000114 021081E2 ADD R1,R1,#+2 \ 00000118 000184E0 ADD R0,R4,R0, LSL #+2 \ 0000011C 200090E5 LDR R0,[R0, #+32] \ 00000120 ........ BL DrwImage 4656 PrintText(i_rc.x+icons[GetIconIndex(t)+1]->w+6,i_rc.y+font_y,((t->xtext2)?(t->xtext2):("Оффлайн")),0,clfont,1,0,0,0,i_rc.x2-i_rc.x);//item name \ 00000124 B8A097E5 LDR R10,[R7, #+184] \ 00000128 20D08DE2 ADD SP,SP,#+32 \ 0000012C 00005AE3 CMP R10,#+0 \ 00000130 3CA08902 ADDEQ R10,R9,#+60 \ 00000134 0700A0E1 MOV R0,R7 \ 00000138 ........ BL GetIconIndex \ 0000013C F0B0D4E1 LDRSH R11,[R4, #+0] \ 00000140 F410D4E1 LDRSH R1,[R4, #+4] \ 00000144 000184E0 ADD R0,R4,R0, LSL #+2 \ 00000148 0030A0E3 MOV R3,#+0 \ 0000014C 0B1041E0 SUB R1,R1,R11 \ 00000150 02002DE9 PUSH {R1} \ 00000154 0A20A0E1 MOV R2,R10 4657 4658 // if(t->xstate!=0) 4659 //{ 4660 // DYNPNGICONLIST *xs=GetXSByItem(t->xstate); 4661 DrwImage(XStatusImg[t->xstate],i_rc.x+2,i_rc.y+(font_y*2)); \ 00000158 85A0A0E1 LSL R10,R5,#+1 \ 0000015C 0010A0E3 MOV R1,#+0 \ 00000160 02002DE9 PUSH {R1} \ 00000164 02002DE9 PUSH {R1} \ 00000168 02002DE9 PUSH {R1} \ 0000016C 0110A0E3 MOV R1,#+1 \ 00000170 02002DE9 PUSH {R1} \ 00000174 101594E5 LDR R1,[R4, #+1296] \ 00000178 02002DE9 PUSH {R1} \ 0000017C 240090E5 LDR R0,[R0, #+36] \ 00000180 F210D4E1 LDRSH R1,[R4, #+2] \ 00000184 B000D0E1 LDRH R0,[R0, #+0] \ 00000188 011085E0 ADD R1,R5,R1 \ 0000018C 0B0080E0 ADD R0,R0,R11 \ 00000190 060080E2 ADD R0,R0,#+6 \ 00000194 ........ _BLF PrintText,??PrintText??rA \ 00000198 F200D4E1 LDRSH R0,[R4, #+2] 4662 4663 sprintf(ixtext,(t->xtext)?(t->xtext+1):("Нет хстатуса")); \ 0000019C CCB0A0E3 MOV R11,#+204 \ 000001A0 60BE8BE3 ORR R11,R11,#0x600 \ 000001A4 00208AE0 ADD R2,R10,R0 \ 000001A8 F000D4E1 LDRSH R0,[R4, #+0] \ 000001AC 021080E2 ADD R1,R0,#+2 \ 000001B0 B605D7E1 LDRH R0,[R7, #+86] \ 000001B4 000184E0 ADD R0,R4,R0, LSL #+2 \ 000001B8 D40390E5 LDR R0,[R0, #+980] \ 000001BC ........ BL DrwImage \ 000001C0 B40097E5 LDR R0,[R7, #+180] \ 000001C4 18D08DE2 ADD SP,SP,#+24 \ 000001C8 000050E3 CMP R0,#+0 \ 000001CC 01108012 ADDNE R1,R0,#+1 \ 000001D0 44108902 ADDEQ R1,R9,#+68 \ 000001D4 04008BE0 ADD R0,R11,R4 \ 000001D8 160000EF SWI +22 4664 ixtext[strlen(t->xtext)-1]=0; \ 000001DC B40097E5 LDR R0,[R7, #+180] \ 000001E0 1B0000EF SWI +27 \ 000001E4 040080E0 ADD R0,R0,R4 \ 000001E8 0010A0E3 MOV R1,#+0 \ 000001EC CB16C0E5 STRB R1,[R0, #+1739] \ 000001F0 B605D7E1 LDRH R0,[R7, #+86] \ 000001F4 F070D4E1 LDRSH R7,[R4, #+0] \ 000001F8 000184E0 ADD R0,R4,R0, LSL #+2 \ 000001FC D40390E5 LDR R0,[R0, #+980] \ 00000200 F410D4E1 LDRSH R1,[R4, #+4] \ 00000204 B020D0E1 LDRH R2,[R0, #+0] \ 00000208 0030A0E3 MOV R3,#+0 \ 0000020C 071041E0 SUB R1,R1,R7 \ 00000210 021041E0 SUB R1,R1,R2 \ 00000214 041041E2 SUB R1,R1,#+4 \ 00000218 02002DE9 PUSH {R1} \ 0000021C 04208BE0 ADD R2,R11,R4 \ 00000220 0010A0E3 MOV R1,#+0 \ 00000224 02002DE9 PUSH {R1} \ 00000228 0110A0E3 MOV R1,#+1 \ 0000022C 02002DE9 PUSH {R1} \ 00000230 0010A0E3 MOV R1,#+0 \ 00000234 02002DE9 PUSH {R1} \ 00000238 0610A0E1 MOV R1,R6 \ 0000023C 02002DE9 PUSH {R1} \ 00000240 101594E5 LDR R1,[R4, #+1296] \ 00000244 02002DE9 PUSH {R1} \ 00000248 B000D0E1 LDRH R0,[R0, #+0] \ 0000024C F210D4E1 LDRSH R1,[R4, #+2] \ 00000250 070080E0 ADD R0,R0,R7 \ 00000254 01108AE0 ADD R1,R10,R1 \ 00000258 011041E2 SUB R1,R1,#+1 \ 0000025C 040080E2 ADD R0,R0,#+4 4665 PrintText(i_rc.x+XStatusImg[t->xstate]->w+4,i_rc.y+(font_y*2)-1,ixtext,0,clfont,1,0,1,0,i_rc.x2-i_rc.x-XStatusImg[t->xstate]->w-4);//item name \ 00000260 ........ _BLF PrintText,??PrintText??rA \ 00000264 18D08DE2 ADD SP,SP,#+24 4666 // } 4667 /* 4668 DrwImage(icons[IS_UNKNOWN],i_rc.x+2,i_rc.y+(font_y*3)-1,0,0); 4669 PrintText(i_rc.x+icons[IS_UNKNOWN]->w+1,i_rc.y+(font_y*3)-1,t->xtext2,0,clfont,1,0,0,0,i_rc.x2-i_rc.x-icons[IS_UNKNOWN]->w-3); 4670 */ 4671 while(i<_MAX) 4672 { 4673 start_y = (i_rc.y + (font_y*2) + (i/* - (_curpage-1)*_itemFromDisp*/)*font_y); //определяем начальное смещение по у \ ??I_DrawList_1: \ 00000268 F200D4E1 LDRSH R0,[R4, #+2] \ 0000026C 00008AE0 ADD R0,R10,R0 \ 00000270 950627E0 MLA R7,R5,R6,R0 4674 StoreXYXYtoRECT(&rc,start_x,start_y,i_rc.x2,start_y+font_y); \ 00000274 070085E0 ADD R0,R5,R7 \ 00000278 01002DE9 PUSH {R0} \ 0000027C F430D4E1 LDRSH R3,[R4, #+4] \ 00000280 0C109DE5 LDR R1,[SP, #+12] \ 00000284 0720A0E1 MOV R2,R7 \ 00000288 04008DE2 ADD R0,SP,#+4 \ 0000028C 340100EF SWI +308 4675 if(i==i_curpos)//Если наш итем то выделяем \ 00000290 140594E5 LDR R0,[R4, #+1300] \ 00000294 04D08DE2 ADD SP,SP,#+4 \ 00000298 000056E1 CMP R6,R0 \ 0000029C 1100001A BNE ??I_DrawList_2 4676 DrawRoundedFrame(rc.x-2,rc.y-2,rc.x2-5,rc.y2-4,0,0,0,MMCursorClr,MMCursorBGClr);//cursor \ 000002A0 D8009FE5 LDR R0,??I_DrawList_0+0x4 ;; MMCursorBGClr \ 000002A4 01002DE9 PUSH {R0} \ 000002A8 D4009FE5 LDR R0,??I_DrawList_0+0x8 ;; MMCursorClr \ 000002AC 01002DE9 PUSH {R0} \ 000002B0 0000A0E3 MOV R0,#+0 \ 000002B4 01002DE9 PUSH {R0} \ 000002B8 01002DE9 PUSH {R0} \ 000002BC 01002DE9 PUSH {R0} \ 000002C0 FA01DDE1 LDRSH R0,[SP, #+26] \ 000002C4 043040E2 SUB R3,R0,#+4 \ 000002C8 F801DDE1 LDRSH R0,[SP, #+24] \ 000002CC 052040E2 SUB R2,R0,#+5 \ 000002D0 F601DDE1 LDRSH R0,[SP, #+22] \ 000002D4 021040E2 SUB R1,R0,#+2 \ 000002D8 F401DDE1 LDRSH R0,[SP, #+20] \ 000002DC 020040E2 SUB R0,R0,#+2 \ 000002E0 500100EF SWI +336 \ 000002E4 14D08DE2 ADD SP,SP,#+20 4677 4678 PrintText(i_rc.x+DrawIconInfo(i_rc.x+2,start_y,i)+6,rc.y-3,(char*)menutext[i-1],0,clfont,1,0,0,0,rc.x2-rc.x-19);//item name \ ??I_DrawList_2: \ 000002E8 F000D4E1 LDRSH R0,[R4, #+0] \ 000002EC 0620A0E1 MOV R2,R6 \ 000002F0 0710A0E1 MOV R1,R7 \ 000002F4 020080E2 ADD R0,R0,#+2 \ 000002F8 ........ BL DrawIconInfo \ 000002FC F410DDE1 LDRSH R1,[SP, #+4] \ 00000300 F020DDE1 LDRSH R2,[SP, #+0] \ 00000304 0030A0E3 MOV R3,#+0 \ 00000308 021041E0 SUB R1,R1,R2 \ 0000030C 131041E2 SUB R1,R1,#+19 \ 00000310 02002DE9 PUSH {R1} \ 00000314 0010A0E3 MOV R1,#+0 \ 00000318 02002DE9 PUSH {R1} \ 0000031C 02002DE9 PUSH {R1} \ 00000320 02002DE9 PUSH {R1} \ 00000324 0110A0E3 MOV R1,#+1 \ 00000328 02002DE9 PUSH {R1} \ 0000032C 101594E5 LDR R1,[R4, #+1296] \ 00000330 02002DE9 PUSH {R1} \ 00000334 F070D4E1 LDRSH R7,[R4, #+0] \ 00000338 061189E0 ADD R1,R9,R6, LSL #+2 \ 0000033C 042011E5 LDR R2,[R1, #-4] \ 00000340 FA11DDE1 LDRSH R1,[SP, #+26] \ 00000344 000087E0 ADD R0,R7,R0 \ 00000348 060080E2 ADD R0,R0,#+6 \ 0000034C 031041E2 SUB R1,R1,#+3 \ 00000350 ........ _BLF PrintText,??PrintText??rA 4679 i++; \ 00000354 016086E2 ADD R6,R6,#+1 4680 } \ 00000358 0A0056E3 CMP R6,#+10 \ 0000035C 18D08DE2 ADD SP,SP,#+24 \ 00000360 C0FFFFBA BLT ??I_DrawList_1 4681 UnlockSched(); \ 00000364 470100EF SWI +327 4682 i_rc.y=back; \ 00000368 0C009DE5 LDR R0,[SP, #+12] \ 0000036C B200C4E1 STRH R0,[R4, #+2] 4683 mfree(s); \ 00000370 0800A0E1 MOV R0,R8 \ 00000374 150000EF SWI +21 4684 } \ 00000378 FF8FBDE8 POP {R0-R11,PC} ;; return \ ??I_DrawList_0: \ 0000037C ........ DC32 menutext \ 00000380 ........ DC32 MMCursorBGClr \ 00000384 ........ DC32 MMCursorClr 4685 4686 // Управление курсором \ In segment CODE, align 4, keep-with-next 4687 void I_MoveUp() 4688 { 4689 if(i_curpos > 0) i_curpos--; \ I_MoveUp: \ 00000000 ........ LDR R0,??DataTable197 ;; i_rc \ 00000004 141590E5 LDR R1,[R0, #+1300] \ 00000008 010051E3 CMP R1,#+1 \ 0000000C 011041A2 SUBGE R1,R1,#+1 4690 else 4691 i_curpos=_MAX-1; \ 00000010 0910A0B3 MOVLT R1,#+9 \ 00000014 141580E5 STR R1,[R0, #+1300] 4692 } \ 00000018 1EFF2FE1 BX LR ;; return 4693 4694 \ In segment CODE, align 4, keep-with-next 4695 void I_MoveDown() 4696 { 4697 if(i_curpos < _MAX - 1 ) i_curpos++; \ I_MoveDown: \ 00000000 ........ LDR R0,??DataTable197 ;; i_rc \ 00000004 141590E5 LDR R1,[R0, #+1300] \ 00000008 090051E3 CMP R1,#+9 \ 0000000C 011081B2 ADDLT R1,R1,#+1 4698 else i_curpos=1; \ 00000010 0110A0A3 MOVGE R1,#+1 \ 00000014 141580E5 STR R1,[R0, #+1300] 4699 } \ 00000018 1EFF2FE1 BX LR ;; return 4700 \ In segment CODE, align 4, keep-with-next 4701 void I_Redraw() 4702 { \ I_Redraw: \ 00000000 00402DE9 PUSH {LR} 4703 DirectRedrawGUI(); \ 00000004 3F0100EF SWI +319 4704 } \ 00000008 0080BDE8 POP {PC} ;; return 4705 4706 4707 void DrawHeader(); 4708 \ In segment CODE, align 4, keep-with-next 4709 void I_OnRedraw(MAIN_GUI *data) 4710 { \ I_OnRedraw: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 4711 DrawHeader(); 4712 DrwImage(&screen,0,hy+2); \ 00000004 ........ LDR R4,??DataTable188 ;; i_rc 4713 // DrawRoundedFrame(0,YDISP,ScreenW()-1,ScreenH()-1,0,0,0,"\x00\x00\x00\x30","\x00\x00\x00\x30"); 4714 DrawRoundedFrame(i_rc.x,i_rc.y,i_rc.x2,i_rc.y2,0,0,0,/*"\x00\x00\x00\x45"*/MMBackgrBordClr,MMBackgrClr); \ 00000008 C8719FE5 LDR R7,??I_OnRedraw_0 ;; MMBackgrClr \ 0000000C C8619FE5 LDR R6,??I_OnRedraw_0+0x4 ;; MMBackgrBordClr \ 00000010 20D04DE2 SUB SP,SP,#+32 \ 00000014 ........ BL DrawHeader \ 00000018 0C0594E5 LDR R0,[R4, #+1292] \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 022080E2 ADD R2,R0,#+2 \ 00000024 B4019FE5 LDR R0,??I_OnRedraw_0+0x8 ;; screen \ 00000028 ........ BL DrwImage \ 0000002C 0700A0E1 MOV R0,R7 \ 00000030 01002DE9 PUSH {R0} \ 00000034 0600A0E1 MOV R0,R6 \ 00000038 01002DE9 PUSH {R0} \ 0000003C 0000A0E3 MOV R0,#+0 \ 00000040 01002DE9 PUSH {R0} \ 00000044 01002DE9 PUSH {R0} \ 00000048 01002DE9 PUSH {R0} \ 0000004C F630D4E1 LDRSH R3,[R4, #+6] \ 00000050 F420D4E1 LDRSH R2,[R4, #+4] \ 00000054 F210D4E1 LDRSH R1,[R4, #+2] \ 00000058 F000D4E1 LDRSH R0,[R4, #+0] \ 0000005C 500100EF SWI +336 4715 I_DrawList(); \ 00000060 ........ BL I_DrawList 4716 SetScrollEdgeDelay(0); \ 00000064 0000A0E3 MOV R0,#+0 \ 00000068 ........ _BLF SetScrollEdgeDelay,??SetScrollEdgeDelay??rA 4717 if(i_curpos==0) \ 0000006C 140594E5 LDR R0,[R4, #+1300] \ 00000070 14D08DE2 ADD SP,SP,#+20 \ 00000074 000050E3 CMP R0,#+0 \ 00000078 5400001A BNE ??I_OnRedraw_1 4718 { 4719 char xl[32] = {0}; \ 0000007C 0D00A0E1 MOV R0,SP \ 00000080 0010A0E3 MOV R1,#+0 \ 00000084 0020A0E3 MOV R2,#+0 \ 00000088 0130A0E1 MOV R3,R1 \ 0000008C 0150A0E1 MOV R5,R1 \ 00000090 2E00A0E8 STM R0!,{R1-R3,R5} \ 00000094 2E0080E8 STM R0,{R1-R3,R5} 4720 char xs[128] = {0}; ^ Warning[Pe177]: variable "xs" was declared but never referenced 4721 int c; 4722 int i=0; \ 00000098 0100A0E1 MOV R0,R1 4723 char *p=ixtext; \ 0000009C CC10A0E3 MOV R1,#+204 \ 000000A0 601E81E3 ORR R1,R1,#0x600 \ 000000A4 045081E0 ADD R5,R1,R4 4724 c=*p; 4725 while(i<32) 4726 { 4727 xl[i]=*p; \ ??I_OnRedraw_2: \ 000000A8 0020D5E5 LDRB R2,[R5, #+0] \ 000000AC 0D10A0E1 MOV R1,SP \ 000000B0 0120C0E7 STRB R2,[R0, +R1] 4728 i++; 4729 c=*p++; \ 000000B4 ........ LDRB R1,[R5], #+1 \ 000000B8 010080E2 ADD R0,R0,#+1 4730 if(c==13) break; \ 000000BC 0D0051E3 CMP R1,#+13 \ 000000C0 0100000A BEQ ??I_OnRedraw_3 4731 } \ 000000C4 200050E3 CMP R0,#+32 \ 000000C8 F6FFFFBA BLT ??I_OnRedraw_2 4732 xl[i]=0; \ ??I_OnRedraw_3: \ 000000CC 0D10A0E1 MOV R1,SP \ 000000D0 0020A0E3 MOV R2,#+0 \ 000000D4 0120C0E7 STRB R2,[R0, +R1] 4733 *p++; 4734 // sprintf(xs,p); 4735 // xs[strlen(xs)-1]=0; 4736 DrawRoundedFrame(i_rc.x-5,i_rc.y+FontH(clfont),i_rc.x2+5,i_rc.y+(FontH(clfont)*(_MAX+2)),0,0,0,MMBackgrBordClr,MMBackgrClr); \ 000000D8 100594E5 LDR R0,[R4, #+1296] \ 000000DC ........ _BLF FontH,??FontH??rA \ 000000E0 0080A0E1 MOV R8,R0 \ 000000E4 100594E5 LDR R0,[R4, #+1296] \ 000000E8 ........ _BLF FontH,??FontH??rA \ 000000EC F210D4E1 LDRSH R1,[R4, #+2] \ 000000F0 80002DE9 PUSH {R7} \ 000000F4 40002DE9 PUSH {R6} \ 000000F8 0020A0E3 MOV R2,#+0 \ 000000FC 04002DE9 PUSH {R2} \ 00000100 04002DE9 PUSH {R2} \ 00000104 04002DE9 PUSH {R2} \ 00000108 0C20A0E3 MOV R2,#+12 \ 0000010C 921823E0 MLA R3,R2,R8,R1 \ 00000110 F420D4E1 LDRSH R2,[R4, #+4] \ 00000114 011080E0 ADD R1,R0,R1 \ 00000118 F000D4E1 LDRSH R0,[R4, #+0] \ 0000011C 052082E2 ADD R2,R2,#+5 \ 00000120 050040E2 SUB R0,R0,#+5 \ 00000124 500100EF SWI +336 4737 // PrintText(i_rc.x,i_rc.y+(FontH(clfont)*2),ixtext,0,clfont,1,1,0,0,i_rc.x2-i_rc.x);//item name 4738 PrintText(i_rc.x,i_rc.y+(FontH(clfont)*2),xl,0,clfont,1,1,0,0,i_rc.x2-i_rc.x);//item name \ 00000128 100594E5 LDR R0,[R4, #+1296] \ 0000012C ........ _BLF FontH,??FontH??rA \ 00000130 F420D4E1 LDRSH R2,[R4, #+4] \ 00000134 0010A0E1 MOV R1,R0 \ 00000138 F000D4E1 LDRSH R0,[R4, #+0] \ 0000013C 0030A0E3 MOV R3,#+0 \ 00000140 002042E0 SUB R2,R2,R0 \ 00000144 04002DE9 PUSH {R2} \ 00000148 0020A0E3 MOV R2,#+0 \ 0000014C 04002DE9 PUSH {R2} \ 00000150 04002DE9 PUSH {R2} \ 00000154 0120A0E3 MOV R2,#+1 \ 00000158 04002DE9 PUSH {R2} \ 0000015C 04002DE9 PUSH {R2} \ 00000160 102594E5 LDR R2,[R4, #+1296] \ 00000164 04002DE9 PUSH {R2} \ 00000168 F260D4E1 LDRSH R6,[R4, #+2] \ 0000016C 2C208DE2 ADD R2,SP,#+44 \ 00000170 811086E0 ADD R1,R6,R1, LSL #+1 \ 00000174 ........ _BLF PrintText,??PrintText??rA \ 00000178 2CD08DE2 ADD SP,SP,#+44 4739 PrintText(i_rc.x,i_rc.y+(FontH(clfont)*4),p ,0,clfont,1,1,0,0,i_rc.x2-i_rc.x);//item name \ 0000017C 100594E5 LDR R0,[R4, #+1296] \ 00000180 ........ _BLF FontH,??FontH??rA \ 00000184 F420D4E1 LDRSH R2,[R4, #+4] \ 00000188 0010A0E1 MOV R1,R0 \ 0000018C F000D4E1 LDRSH R0,[R4, #+0] \ 00000190 0030A0E3 MOV R3,#+0 \ 00000194 002042E0 SUB R2,R2,R0 \ 00000198 04002DE9 PUSH {R2} \ 0000019C 0020A0E3 MOV R2,#+0 \ 000001A0 04002DE9 PUSH {R2} \ 000001A4 04002DE9 PUSH {R2} \ 000001A8 0120A0E3 MOV R2,#+1 \ 000001AC 04002DE9 PUSH {R2} \ 000001B0 04002DE9 PUSH {R2} \ 000001B4 102594E5 LDR R2,[R4, #+1296] \ 000001B8 04002DE9 PUSH {R2} \ 000001BC F240D4E1 LDRSH R4,[R4, #+2] \ 000001C0 012085E2 ADD R2,R5,#+1 \ 000001C4 011184E0 ADD R1,R4,R1, LSL #+2 \ 000001C8 ........ _BLF PrintText,??PrintText??rA \ 000001CC 18D08DE2 ADD SP,SP,#+24 4740 } 4741 // GBS_StartTimerProc(&i_tmr, 100, I_Redraw); 4742 } \ ??I_OnRedraw_1: \ 000001D0 20D08DE2 ADD SP,SP,#+32 ;; stack cleaning \ 000001D4 F081BDE8 POP {R4-R8,PC} ;; return \ ??I_OnRedraw_0: \ 000001D8 ........ DC32 MMBackgrClr \ 000001DC ........ DC32 MMBackgrBordClr \ 000001E0 ........ DC32 screen 4743 \ In segment CODE, align 4, keep-with-next 4744 void I_onCreate(MAIN_GUI *data, void *(*malloc_adr)(int)) 4745 { \ I_onCreate: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 4746 if(isSystemFont) clfont=100+pngFont; \ 00000008 ........ LDR R0,??DataTable186 ;; isSystemFont \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 0300000A BEQ ??I_onCreate_0 \ 00000018 ........ LDR R0,??DataTable187 ;; pngFont \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 640080E2 ADD R0,R0,#+100 \ 00000024 000000EA B ??I_onCreate_1 4747 else clfont=2; \ ??I_onCreate_0: \ 00000028 0200A0E3 MOV R0,#+2 \ ??I_onCreate_1: \ 0000002C ........ LDR R5,??DataTable188 ;; i_rc \ 00000030 100585E5 STR R0,[R5, #+1296] 4748 DrawRoundedFrame(0,YDISP,ScreenW()-1,ScreenH()-1,0,0,0,"\x00\x00\x00\x30","\x00\x00\x00\x30"); \ 00000034 898100EF SWI +33161 \ 00000038 0060A0E1 MOV R6,R0 \ 0000003C 888100EF SWI +33160 \ 00000040 84109FE5 LDR R1,??I_onCreate_2 ;; `?` \ 00000044 013046E2 SUB R3,R6,#+1 \ 00000048 0120A0E1 MOV R2,R1 \ 0000004C 04002DE9 PUSH {R2} \ 00000050 02002DE9 PUSH {R1} \ 00000054 0010A0E3 MOV R1,#+0 \ 00000058 02002DE9 PUSH {R1} \ 0000005C 02002DE9 PUSH {R1} \ 00000060 02002DE9 PUSH {R1} \ 00000064 012040E2 SUB R2,R0,#+1 \ 00000068 0000A0E3 MOV R0,#+0 \ 0000006C 1810A0E3 MOV R1,#+24 \ 00000070 500100EF SWI +336 4749 DoScreen(); \ 00000074 ........ _BLF DoScreen,??DoScreen??rA 4750 #ifdef ELKA 4751 i_rc.x=30; \ 00000078 1E00A0E3 MOV R0,#+30 \ 0000007C B000C5E1 STRH R0,[R5, #+0] 4752 i_rc.x2=ScreenW()-25; \ 00000080 888100EF SWI +33160 \ 00000084 190040E2 SUB R0,R0,#+25 \ 00000088 B400C5E1 STRH R0,[R5, #+4] 4753 #else 4754 i_rc.x=5; 4755 i_rc.x2=ScreenW()-5; 4756 #endif 4757 i_rc.y=hy+5; \ 0000008C 0C0595E5 LDR R0,[R5, #+1292] \ 00000090 050080E2 ADD R0,R0,#+5 \ 00000094 B200C5E1 STRH R0,[R5, #+2] 4758 i_rc.y2=i_rc.y+(FontH(clfont)*(_MAX+3)); \ 00000098 100595E5 LDR R0,[R5, #+1296] \ 0000009C ........ _BLF FontH,??FontH??rA \ 000000A0 F210D5E1 LDRSH R1,[R5, #+2] \ 000000A4 0D20A0E3 MOV R2,#+13 \ 000000A8 921020E0 MLA R0,R2,R0,R1 \ 000000AC B600C5E1 STRH R0,[R5, #+6] 4759 // StoreXYXYToRECT(&i_rc,30,hy+5,ScreenW()-25,i_rc.y+(FontH(clfont)*(_MAX+4))); 4760 SetCanvasFlag(1); \ 000000B0 0100A0E3 MOV R0,#+1 \ 000000B4 ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 4761 i_curpos=1; \ 000000B8 0100A0E3 MOV R0,#+1 \ 000000BC 140585E5 STR R0,[R5, #+1300] 4762 data->gui.state=1; \ 000000C0 0C00C4E5 STRB R0,[R4, #+12] 4763 } \ 000000C4 14D08DE2 ADD SP,SP,#+20 \ 000000C8 7080BDE8 POP {R4-R6,PC} ;; return \ ??I_onCreate_2: \ 000000CC ........ DC32 `?` 4764 \ In segment CODE, align 4, keep-with-next 4765 void I_onClose(MAIN_GUI *data, void (*mfree_adr)(void *)) 4766 { \ I_onClose: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 4767 // mfree(ixtext); 4768 mfree(screen.bitmap); \ 00000008 18009FE5 LDR R0,??I_onClose_0 ;; screen + 8 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 150000EF SWI +21 4769 GBS_DelTimer(&i_tmr); \ 00000014 10009FE5 LDR R0,??I_onClose_0+0x4 ;; i_tmr \ 00000018 8C0100EF SWI +396 4770 data->gui.state=0; \ 0000001C 0000A0E3 MOV R0,#+0 \ 00000020 0C00C4E5 STRB R0,[R4, #+12] 4771 } \ 00000024 1080BDE8 POP {R4,PC} ;; return \ ??I_onClose_0: \ 00000028 ........ DC32 screen + 8 \ 0000002C ........ DC32 i_tmr 4772 \ In segment CODE, align 4, keep-with-next 4773 void I_onFocus(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *)) 4774 { \ I_onFocus: \ 00000000 00402DE9 PUSH {LR} 4775 data->gui.state=2; \ 00000004 0210A0E3 MOV R1,#+2 \ 00000008 0C10C0E5 STRB R1,[R0, #+12] 4776 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 4777 } \ 00000010 0080BDE8 POP {PC} ;; return 4778 \ In segment CODE, align 4, keep-with-next 4779 void I_onUnfocus(MAIN_GUI *data, void (*mfree_adr)(void *)) 4780 { 4781 if (data->gui.state!=2) return; \ I_onUnfocus: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 4782 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 4783 } \ 00000010 1EFF2FE1 BX LR ;; return 4784 \ In segment CODE, align 4, keep-with-next 4785 int I_OnKey(MAIN_GUI *data, GUI_MSG *msg) 4786 { \ I_OnKey: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0140A0E1 MOV R4,R1 4787 DirectRedrawGUI(); 4788 if (msg->gbsmsg->msg==KEY_DOWN || msg->gbsmsg->msg==LONG_PRESS) \ 00000008 9550A0E3 MOV R5,#+149 \ 0000000C 405F85E3 ORR R5,R5,#0x100 \ 00000010 3F0100EF SWI +319 \ 00000014 044094E5 LDR R4,[R4, #+4] \ 00000018 026045E2 SUB R6,R5,#+2 \ 0000001C 040094E5 LDR R0,[R4, #+4] \ 00000020 060050E1 CMP R0,R6 \ 00000024 05005011 CMPNE R0,R5 \ 00000028 0B00001A BNE ??I_OnKey_0 4789 { 4790 switch(msg->gbsmsg->submess) \ 0000002C 080094E5 LDR R0,[R4, #+8] \ 00000030 040050E2 SUBS R0,R0,#+4 \ 00000034 08005012 SUBSNE R0,R0,#+8 \ 00000038 1E00000A BEQ ??I_OnKey_1 \ 0000003C 2F0050E2 SUBS R0,R0,#+47 \ 00000040 0400000A BEQ ??I_OnKey_2 \ 00000044 010050E2 SUBS R0,R0,#+1 \ 00000048 1800000A BEQ ??I_OnKey_3 \ 0000004C 010050E2 SUBS R0,R0,#+1 \ 00000050 1800000A BEQ ??I_OnKey_1 \ 00000054 000000EA B ??I_OnKey_0 4791 { 4792 case UP_BUTTON: I_MoveUp(); break; \ ??I_OnKey_2: \ 00000058 ........ BL I_MoveUp 4793 case DOWN_BUTTON: I_MoveDown(); break; 4794 case LEFT_BUTTON: case RIGHT_SOFT:case RED_BUTTON: return (1); 4795 } 4796 } 4797 if (msg->gbsmsg->msg==KEY_DOWN || msg->gbsmsg->msg==LONG_PRESS) \ ??I_OnKey_0: \ 0000005C 040094E5 LDR R0,[R4, #+4] \ 00000060 060050E1 CMP R0,R6 \ 00000064 05005011 CMPNE R0,R5 \ 00000068 0E00001A BNE ??I_OnKey_4 4798 { 4799 switch(msg->gbsmsg->submess) \ 0000006C 080094E5 LDR R0,[R4, #+8] \ 00000070 010050E2 SUBS R0,R0,#+1 \ 00000074 19005012 SUBSNE R0,R0,#+25 \ 00000078 24005012 SUBSNE R0,R0,#+36 \ 0000007C 0900001A BNE ??I_OnKey_4 4800 { 4801 case ENTER_BUTTON: case LEFT_SOFT: case RIGHT_BUTTON: 4802 { 4803 CLIST *t; 4804 t=FindContactByUin(uinContact); 4805 t->isIndividSet=1; \ 00000080 ........ LDR R4,??DataTable197 ;; i_rc \ 00000084 080594E5 LDR R0,[R4, #+1288] \ 00000088 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 0000008C 0110A0E3 MOV R1,#+1 \ 00000090 641080E5 STR R1,[R0, #+100] 4806 ((void (*)(void))(menuproc[i_curpos-1]))(); \ 00000094 140594E5 LDR R0,[R4, #+1300] \ 00000098 000184E0 ADD R0,R4,R0, LSL #+2 \ 0000009C A00690E5 LDR R0,[R0, #+1696] \ 000000A0 30FF2FE1 BLX R0 4807 REDRAW(); \ 000000A4 720100EF SWI +370 4808 } 4809 break; 4810 } 4811 } 4812 4813 return(0); \ ??I_OnKey_4: \ 000000A8 0000A0E3 MOV R0,#+0 \ 000000AC 7080BDE8 POP {R4-R6,PC} ;; return \ ??I_OnKey_3: \ 000000B0 ........ BL I_MoveDown \ 000000B4 E8FFFFEA B ??I_OnKey_0 \ ??I_OnKey_1: \ 000000B8 0100A0E3 MOV R0,#+1 \ 000000BC 7080BDE8 POP {R4-R6,PC} 4814 } 4815 4816 extern void kill_data(void *p, void (*func_p)(void *)); 4817 \ In segment CODE, align 4, keep-with-next 4818 int I_method8(void){return(0);} \ I_method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return \ In segment CODE, align 4, keep-with-next 4819 int I_method9(void){return(0);} \ I_method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 4820 4821 const void * const I_gui_methods[11]={ 4822 (void *)I_OnRedraw, 4823 (void *)I_onCreate, 4824 (void *)I_onClose, 4825 (void *)I_onFocus, 4826 (void *)I_onUnfocus, 4827 (void *)I_OnKey, 4828 0, 4829 (void *)kill_data, 4830 (void *)I_method8, 4831 (void *)I_method9, 4832 0 4833 }; 4834 \ In segment CODE, align 4, keep-with-next 4835 int CreateContactMenu(CLIST *t) 4836 { 4837 uinContact=t->uin; \ CreateContactMenu: \ 00000000 ........ LDR R1,??DataTable190 ;; i_rc + 1288 \ 00000004 10402DE9 PUSH {R4,LR} \ 00000008 0C0090E5 LDR R0,[R0, #+12] \ 0000000C 000081E5 STR R0,[R1, #+0] 4838 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000010 4000A0E3 MOV R0,#+64 \ 00000014 140000EF SWI +20 \ 00000018 0040A0E1 MOV R4,R0 4839 zeromem(main_gui,sizeof(MAIN_GUI)); \ 0000001C 4010A0E3 MOV R1,#+64 \ 00000020 1D0100EF SWI +285 4840 // main_gui->gui.canvas=(void *)(&Canvas); 4841 main_gui->gui.methods=(void *)I_gui_methods; \ 00000024 14009FE5 LDR R0,??CreateContactMenu_0 ;; I_gui_methods \ 00000028 040084E5 STR R0,[R4, #+4] 4842 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 0000002C 158000EF SWI +32789 \ 00000030 200084E5 STR R0,[R4, #+32] 4843 //patch_rect((RECT*)&Canvas,0,YDISP,ScreenW()-1,ScreenH()-1); 4844 return CreateGUI(main_gui); \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 370100EF SWI +311 \ 0000003C 1080BDE8 POP {R4,PC} ;; return \ ??CreateContactMenu_0: \ 00000040 ........ DC32 I_gui_methods 4845 } 4846 4847 /*********************************************************************/ 4848 4849 int itemFromDisp;//кол-во на экране 4850 int totalItems;//общее количество итемов 4851 //int curpos=0;//позичия курсора 4852 int curpage=1;//текущая страница 4853 int collum=0;//столбцы))) 0 - первый, 1- второй 4854 const char _t[]="%t"; 4855 const char _d[]="%d"; 4856 //int clfont; 4857 4858 #ifdef ELKA 4859 #ifndef ICONBAR 4860 #undef YDISP 4861 #define YDISP 0 4862 #endif 4863 #endif 4864 4865 #define CLIST_Y1 (YDISP+FontH(clfont)+4) 4866 4867 \ In segment CODE, align 4, keep-with-next 4868 void RecountMenu(CLIST *req, int needfocus) 4869 { \ RecountMenu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 4870 int i; 4871 int j; 4872 if (!maingui_id) return; //Нечего считать \ 00000004 ........ LDR R5,??DataTable197 ;; i_rc \ 00000008 0140A0E1 MOV R4,R1 \ 0000000C 001395E5 LDR R1,[R5, #+768] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 7080BD08 POPEQ {R4-R6,PC} 4873 if (req==NULL) \ 00000018 000050E3 CMP R0,#+0 4874 { 4875 j=0; \ 0000001C 0060A003 MOVEQ R6,#+0 \ 00000020 0100000A BEQ ??RecountMenu_0 4876 } 4877 else 4878 { 4879 j=FindContactByContact(req); \ 00000024 ........ _BLF FindContactByContact,??FindContactByContact??rA \ 00000028 0060A0E1 MOV R6,R0 4880 } 4881 i=CountContacts(); \ ??RecountMenu_0: \ 0000002C ........ _BLF CountContacts,??CountContacts??rA 4882 if (j>=i) j=i-1; \ 00000030 000056E1 CMP R6,R0 \ 00000034 016040A2 SUBGE R6,R0,#+1 4883 if (j<0) j=0; \ 00000038 000056E3 CMP R6,#+0 \ 0000003C 0060A043 MOVMI R6,#+0 4884 if(needfocus) curpos=j; \ 00000040 000054E3 CMP R4,#+0 \ 00000044 04658515 STRNE R6,[R5, #+1284] 4885 // if (IsGuiOnTop(contactlist_menu_id)) 4886 SMART_REDRAW();//DirectRedrawGUI_ID(contactlist_menu_id);//contactlist_menu_id \ 00000048 ........ BL SMART_REDRAW 4887 } \ 0000004C 7080BDE8 POP {R4-R6,PC} ;; return 4888 4889 \ In segment CODE, align 4, keep-with-next 4890 void DrawStr(int x,int y,char*s,char *color,int font,int align) 4891 { \ 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 4892 SetFontColor(color,transparent,0); \ 00000014 ........ LDR R1,??DataTable193 ;; i_rc + 9232 \ 00000018 0260A0E1 MOV R6,R2 \ 0000001C 0300A0E1 MOV R0,R3 \ 00000020 0020A0E3 MOV R2,#+0 \ 00000024 ........ _BLF SetFontColor,??SetFontColor??rA 4893 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 4894 //void PrintText( int x, int y, char *str, int align, int font, int space, int lineSpace, int isScroll, short fixSize, int maxLen); 4895 } \ 00000048 F381BDE8 POP {R0,R1,R4-R8,PC} ;; return 4896 \ In segment CODE, align 4, keep-with-next 4897 void DrawText(int x,int y,int x2,char*s,char *color,int font,int align,int isScroll) 4898 { \ 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 4899 SetFontColor(color,transparent,0); \ 0000001C ........ LDR R1,??DataTable193 ;; i_rc + 9232 \ 00000020 0260A0E1 MOV R6,R2 \ 00000024 0370A0E1 MOV R7,R3 \ 00000028 0020A0E3 MOV R2,#+0 \ 0000002C ........ _BLF SetFontColor,??SetFontColor??rA 4900 // SetScrollEdgeDelay(0); 4901 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 4902 //int x, int y, char *str, int align, int font, int space, int lineSpace, int isScroll, short fixSize, int maxLen); 4903 } \ 00000070 18D08DE2 ADD SP,SP,#+24 \ 00000074 F087BDE8 POP {R4-R10,PC} ;; return 4904 4905 4906 IMGHDR screen3={0,0,8,""}; 4907 int shot_soft=0; 4908 \ In segment CODE, align 4, keep-with-next 4909 void DoScreen3(int h) 4910 { \ DoScreen3: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 4911 //int SCREENSIZE = ScreenH()*ScreenW(); 4912 int HSIZE = (ScreenH()-h)*ScreenW(); 4913 int ScrH=h+2; 4914 int ScrW=ScreenW(); 4915 char *ms=RamScreenBuffer(); 4916 screen3.w=ScrW; \ 00000004 ........ LDR R8,??DataTable197 ;; i_rc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 898100EF SWI +33161 \ 00000010 045040E0 SUB R5,R0,R4 \ 00000014 888100EF SWI +33160 \ 00000018 900505E0 MUL R5,R0,R5 \ 0000001C 024084E2 ADD R4,R4,#+2 \ 00000020 888100EF SWI +33160 \ 00000024 0060A0E1 MOV R6,R0 \ 00000028 E08000EF SWI +32992 \ 0000002C 0070A0E1 MOV R7,R0 4917 screen3.h=ScrH; 4918 screen3.bitmap=malloc(ScrW*ScrH*2); \ 00000030 940600E0 MUL R0,R4,R6 \ 00000034 B860C8E1 STRH R6,[R8, #+8] \ 00000038 BA40C8E1 STRH R4,[R8, #+10] \ 0000003C 8040A0E1 LSL R4,R0,#+1 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 140000EF SWI +20 \ 00000048 100088E5 STR R0,[R8, #+16] 4919 ms+=(HSIZE*2); 4920 memcpy(screen3.bitmap, ms, ScrW*ScrH*2); \ 0000004C 0420A0E1 MOV R2,R4 \ 00000050 851087E0 ADD R1,R7,R5, LSL #+1 \ 00000054 1E0100EF SWI +286 4921 } \ 00000058 F081BDE8 POP {R4-R8,PC} ;; return 4922 \ In segment CODE, align 4, keep-with-next 4923 void DrawSoftKeys(char *left,char *right) 4924 { \ DrawSoftKeys: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 \ 00000008 0180A0E1 MOV R8,R1 4925 TTime t; 4926 char *s=malloc(32); \ 0000000C 2000A0E3 MOV R0,#+32 \ 00000010 140000EF SWI +20 \ 00000014 0090A0E1 MOV R9,R0 4927 if(!PNG_SOFTKEY) clfont=100+HeadFont; \ 00000018 ........ LDR R0,??DataTable201 ;; PNG_SOFTKEY \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 0300001A BNE ??DrawSoftKeys_0 \ 00000028 ........ LDR R0,??DataTable209 ;; HeadFont \ 0000002C 000090E5 LDR R0,[R0, #+0] \ 00000030 640080E2 ADD R0,R0,#+100 \ 00000034 000000EA B ??DrawSoftKeys_1 4928 else clfont=4; \ ??DrawSoftKeys_0: \ 00000038 0400A0E3 MOV R0,#+4 \ ??DrawSoftKeys_1: \ 0000003C ........ LDR R4,??DataTable197 ;; i_rc \ 00000040 100584E5 STR R0,[R4, #+1296] 4929 4930 int FntH=FontH(clfont); \ 00000044 ........ _BLF FontH,??FontH??rA \ 00000048 0050A0E1 MOV R5,R0 4931 int scr_w=ScreenW()-1; \ 0000004C 888100EF SWI +33160 \ 00000050 016040E2 SUB R6,R0,#+1 4932 int scr_h=ScreenH()-1; \ 00000054 898100EF SWI +33161 \ 00000058 017040E2 SUB R7,R0,#+1 4933 4934 LockSched(); \ 0000005C 460100EF SWI +326 4935 #ifdef ELKA 4936 if(shot_soft!=2) \ 00000060 280594E5 LDR R0,[R4, #+1320] \ 00000064 020050E3 CMP R0,#+2 \ 00000068 3600000A BEQ ??DrawSoftKeys_2 4937 { 4938 DrawRoundedFrame(0,ScreenH()-1-FntH-2,ScreenW()-1,ScreenH()-1,0,0,0,clrBlack,clrBlack); \ 0000006C 898100EF SWI +33161 \ 00000070 0080A0E1 MOV R8,R0 \ 00000074 888100EF SWI +33160 \ 00000078 0090A0E1 MOV R9,R0 \ 0000007C 898100EF SWI +33161 \ 00000080 0410A0E3 MOV R1,#+4 \ 00000084 901D81E3 ORR R1,R1,#0x2400 \ 00000088 041081E0 ADD R1,R1,R4 \ 0000008C 0120A0E1 MOV R2,R1 \ 00000090 04002DE9 PUSH {R2} \ 00000094 02002DE9 PUSH {R1} \ 00000098 013048E2 SUB R3,R8,#+1 \ 0000009C 012049E2 SUB R2,R9,#+1 \ 000000A0 010040E2 SUB R0,R0,#+1 \ 000000A4 0010A0E3 MOV R1,#+0 \ 000000A8 02002DE9 PUSH {R1} \ 000000AC 02002DE9 PUSH {R1} \ 000000B0 02002DE9 PUSH {R1} \ 000000B4 050040E0 SUB R0,R0,R5 \ 000000B8 021040E2 SUB R1,R0,#+2 \ 000000BC 0000A0E3 MOV R0,#+0 \ 000000C0 500100EF SWI +336 4939 for(int i=FontH(clfont);i>0;i-=2) \ 000000C4 100594E5 LDR R0,[R4, #+1296] \ 000000C8 ........ _BLF FontH,??FontH??rA \ 000000CC 0080A0E1 MOV R8,R0 \ 000000D0 010058E3 CMP R8,#+1 \ 000000D4 14D08DE2 ADD SP,SP,#+20 \ 000000D8 130000BA BLT ??DrawSoftKeys_3 \ 000000DC ........ LDR R10,??DataTable205 ;; SoftBackgrClr \ 000000E0 057047E0 SUB R7,R7,R5 \ 000000E4 029047E2 SUB R9,R7,#+2 4940 DrawRoundedFrame(0,scr_h-FntH-2,scr_w,scr_h-FntH+i+2,0,0,0,SoftBackgrClr,SoftBackgrClr); \ ??DrawSoftKeys_4: \ 000000E8 0620A0E1 MOV R2,R6 \ 000000EC 0A00A0E1 MOV R0,R10 \ 000000F0 01002DE9 PUSH {R0} \ 000000F4 01002DE9 PUSH {R0} \ 000000F8 0910A0E1 MOV R1,R9 \ 000000FC 0000A0E3 MOV R0,#+0 \ 00000100 01002DE9 PUSH {R0} \ 00000104 01002DE9 PUSH {R0} \ 00000108 01002DE9 PUSH {R0} \ 0000010C 070088E0 ADD R0,R8,R7 \ 00000110 023080E2 ADD R3,R0,#+2 \ 00000114 028048E2 SUB R8,R8,#+2 \ 00000118 0000A0E3 MOV R0,#+0 \ 0000011C 500100EF SWI +336 \ 00000120 010058E3 CMP R8,#+1 \ 00000124 14D08DE2 ADD SP,SP,#+20 \ 00000128 EEFFFFAA BGE ??DrawSoftKeys_4 4941 4942 DoScreen3(FntH); \ ??DrawSoftKeys_3: \ 0000012C 0500A0E1 MOV R0,R5 \ 00000130 ........ BL DoScreen3 4943 shot_soft++; \ 00000134 280594E5 LDR R0,[R4, #+1320] \ 00000138 010080E2 ADD R0,R0,#+1 \ 0000013C 280584E5 STR R0,[R4, #+1320] 4944 SMART_REDRAW(); \ 00000140 ........ BL SMART_REDRAW 4945 return; \ 00000144 F78FBDE8 POP {R0-R2,R4-R11,PC} 4946 } 4947 else 4948 DrwImage(&screen3,0,scr_h-FntH); 4949 #else 4950 DrawRoundedFrame(0,ScreenH()-1-FntH-2,ScreenW()-1,ScreenH()-1,0,0,0,clrBlack,clrBlack); 4951 for(int i=FontH(clfont);i>0;i-=2) 4952 DrawRoundedFrame(0,scr_h-FntH-2,scr_w,scr_h-FntH+i,0,0,0,SoftBackgrClr,SoftBackgrClr); 4953 #endif 4954 4955 SetFontColor((char*)SoftFontClr,transparent,0); \ ??DrawSoftKeys_2: \ 00000148 ........ LDR R11,??DataTable206 ;; SoftFontClr \ 0000014C 052047E0 SUB R2,R7,R5 \ 00000150 0010A0E3 MOV R1,#+0 \ 00000154 080084E2 ADD R0,R4,#+8 \ 00000158 ........ BL DrwImage \ 0000015C 1000A0E3 MOV R0,#+16 \ 00000160 900D80E3 ORR R0,R0,#0x2400 \ 00000164 04A080E0 ADD R10,R0,R4 \ 00000168 0020A0E3 MOV R2,#+0 \ 0000016C 0A10A0E1 MOV R1,R10 \ 00000170 0B00A0E1 MOV R0,R11 \ 00000174 ........ _BLF SetFontColor,??SetFontColor??rA 4956 4957 if(sendq_l) \ 00000178 010047E2 SUB R0,R7,#+1 \ 0000017C ........ LDR R7,??DataTable204 ;; menutext \ 00000180 055040E0 SUB R5,R0,R5 \ 00000184 CC0294E5 LDR R0,[R4, #+716] \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 0A00000A BEQ ??DrawSoftKeys_5 4958 { 4959 sprintf(s,"Q: %d b",sendq_l); \ 00000190 CC2294E5 LDR R2,[R4, #+716] \ 00000194 541087E2 ADD R1,R7,#+84 \ 00000198 0900A0E1 MOV R0,R9 \ 0000019C 160000EF SWI +22 4960 PrintField(scr_w,scr_h-1-FntH,s,2,clfont,1); \ 000001A0 0100A0E3 MOV R0,#+1 \ 000001A4 01002DE9 PUSH {R0} \ 000001A8 100594E5 LDR R0,[R4, #+1296] \ 000001AC 0230A0E3 MOV R3,#+2 \ 000001B0 01002DE9 PUSH {R0} \ 000001B4 0920A0E1 MOV R2,R9 \ 000001B8 050000EA B ??DrawSoftKeys_6 4961 // DrawStr(2,scr_h-1-FntH,s,SoftFontClr,clfont,2); 4962 } 4963 else 4964 PrintField(scr_w,scr_h-1-FntH,right,2,clfont,1); \ ??DrawSoftKeys_5: \ 000001BC 0100A0E3 MOV R0,#+1 \ 000001C0 01002DE9 PUSH {R0} \ 000001C4 100594E5 LDR R0,[R4, #+1296] \ 000001C8 0230A0E3 MOV R3,#+2 \ 000001CC 01002DE9 PUSH {R0} \ 000001D0 0820A0E1 MOV R2,R8 \ ??DrawSoftKeys_6: \ 000001D4 0510A0E1 MOV R1,R5 \ 000001D8 0600A0E1 MOV R0,R6 \ 000001DC ........ _BLF PrintField,??PrintField??rA \ 000001E0 08D08DE2 ADD SP,SP,#+8 4965 4966 DrawStr(2,scr_h-1-FntH,left,(char*)SoftFontClr,clfont,0); \ 000001E4 108594E5 LDR R8,[R4, #+1296] \ 000001E8 0020A0E3 MOV R2,#+0 \ 000001EC 0A10A0E1 MOV R1,R10 \ 000001F0 0B00A0E1 MOV R0,R11 \ 000001F4 ........ _BLF SetFontColor,??SetFontColor??rA \ 000001F8 0100A0E3 MOV R0,#+1 \ 000001FC 01002DE9 PUSH {R0} \ 00000200 00012DE9 PUSH {R8} \ 00000204 10209DE5 LDR R2,[SP, #+16] \ 00000208 0030A0E3 MOV R3,#+0 \ 0000020C 0510A0E1 MOV R1,R5 \ 00000210 0200A0E3 MOV R0,#+2 \ 00000214 ........ _BLF PrintField,??PrintField??rA 4967 4968 GetDateTime(0,&t); \ 00000218 08108DE2 ADD R1,SP,#+8 \ 0000021C 0000A0E3 MOV R0,#+0 \ 00000220 B40000EF SWI +180 4969 sprintf(s,"%02d:%02d",t.hour,t.min); \ 00000224 0930DDE5 LDRB R3,[SP, #+9] \ 00000228 0820DDE5 LDRB R2,[SP, #+8] \ 0000022C 801087E2 ADD R1,R7,#+128 \ 00000230 0900A0E1 MOV R0,R9 \ 00000234 160000EF SWI +22 4970 PrintField(scr_w/2,scr_h-1-FntH,s,1,clfont,1); \ 00000238 0100A0E3 MOV R0,#+1 \ 0000023C 01002DE9 PUSH {R0} \ 00000240 100594E5 LDR R0,[R4, #+1296] \ 00000244 0130A0E3 MOV R3,#+1 \ 00000248 01002DE9 PUSH {R0} \ 0000024C 0920A0E1 MOV R2,R9 \ 00000250 0510A0E1 MOV R1,R5 \ 00000254 A60F86E0 ADD R0,R6,R6, LSR #+31 \ 00000258 C000A0E1 ASR R0,R0,#+1 \ 0000025C ........ _BLF PrintField,??PrintField??rA 4971 UnlockSched(); \ 00000260 470100EF SWI +327 4972 4973 mfree(s); \ 00000264 0900A0E1 MOV R0,R9 \ 00000268 150000EF SWI +21 4974 } \ 0000026C 10D08DE2 ADD SP,SP,#+16 \ 00000270 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return 4975 \ In segment CODE, align 4, keep-with-next 4976 void DrawSoftInfo(CLIST *t) 4977 { \ DrawSoftInfo: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 20D04DE2 SUB SP,SP,#+32 4978 TTime tm; 4979 char *s=malloc(32); \ 00000008 2000A0E3 MOV R0,#+32 \ 0000000C 140000EF SWI +20 \ 00000010 0040A0E1 MOV R4,R0 4980 if(!PNG_SOFTKEY) clfont=100+HeadFont; \ 00000014 ........ LDR R0,??DataTable201 ;; PNG_SOFTKEY \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0300001A BNE ??DrawSoftInfo_0 \ 00000024 ........ LDR R0,??DataTable209 ;; HeadFont \ 00000028 000090E5 LDR R0,[R0, #+0] \ 0000002C 640080E2 ADD R0,R0,#+100 \ 00000030 000000EA B ??DrawSoftInfo_1 4981 else clfont=4; \ ??DrawSoftInfo_0: \ 00000034 0400A0E3 MOV R0,#+4 \ ??DrawSoftInfo_1: \ 00000038 ........ LDR R5,??DataTable212 ;; i_rc 4982 4983 int FntH=FontH(clfont)*2; 4984 int scr_w=ScreenW()-1; 4985 int scr_h=ScreenH()-1; 4986 4987 4988 LockSched(); 4989 // DrawRoundedFrame(0,ScreenH()-5-FntH,ScreenW()-1,ScreenH()-1,0,0,0,clrRed,0);//Рамка 4990 //DrawRoundedFrame(1,ScreenH()-5-FntH,ScreenW()-2,ScreenH()-2,0,0,0,0,AddInfoClr);//Фон 4991 4992 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l 4993 if(sendq_l) \ 0000003C ........ LDR R7,??DataTable204 ;; menutext \ 00000040 100585E5 STR R0,[R5, #+1296] \ 00000044 ........ _BLF FontH,??FontH??rA \ 00000048 80A0A0E1 LSL R10,R0,#+1 \ 0000004C 888100EF SWI +33160 \ 00000050 016040E2 SUB R6,R0,#+1 \ 00000054 898100EF SWI +33161 \ 00000058 010040E2 SUB R0,R0,#+1 \ 0000005C 04008DE5 STR R0,[SP, #+4] \ 00000060 460100EF SWI +326 \ 00000064 A00495E5 LDR R0,[R5, #+1184] \ 00000068 A41495E5 LDR R1,[R5, #+1188] \ 0000006C CC2295E5 LDR R2,[R5, #+716] \ 00000070 000052E3 CMP R2,#+0 \ 00000074 0500000A BEQ ??DrawSoftInfo_2 4994 sprintf(s, "[T:%db/Q:%db]\n",RX+TX,sendq_l); \ 00000078 CC3295E5 LDR R3,[R5, #+716] \ 0000007C 002081E0 ADD R2,R1,R0 \ 00000080 5C1087E2 ADD R1,R7,#+92 \ 00000084 0400A0E1 MOV R0,R4 \ 00000088 160000EF SWI +22 \ 0000008C 030000EA B ??DrawSoftInfo_3 4995 else 4996 sprintf(s, "[T:%db]\n",RX+TX); \ ??DrawSoftInfo_2: \ 00000090 002081E0 ADD R2,R1,R0 \ 00000094 6C1087E2 ADD R1,R7,#+108 \ 00000098 0400A0E1 MOV R0,R4 \ 0000009C 160000EF SWI +22 4997 PrintField(scr_w-5,scr_h-1-FntH,s,2,clfont,1); \ ??DrawSoftInfo_3: \ 000000A0 04109DE5 LDR R1,[SP, #+4] \ 000000A4 0100A0E3 MOV R0,#+1 \ 000000A8 011041E2 SUB R1,R1,#+1 \ 000000AC 00108DE5 STR R1,[SP, #+0] \ 000000B0 01002DE9 PUSH {R0} \ 000000B4 100595E5 LDR R0,[R5, #+1296] \ 000000B8 0AB041E0 SUB R11,R1,R10 \ 000000BC 01002DE9 PUSH {R0} \ 000000C0 058046E2 SUB R8,R6,#+5 \ 000000C4 0230A0E3 MOV R3,#+2 \ 000000C8 0420A0E1 MOV R2,R4 \ 000000CC 0B10A0E1 MOV R1,R11 \ 000000D0 0800A0E1 MOV R0,R8 \ 000000D4 ........ _BLF PrintField,??PrintField??rA 4998 4999 int w=GetWidth(scr_w-5,scr_h-1-FntH); \ 000000D8 0B10A0E1 MOV R1,R11 \ 000000DC 0800A0E1 MOV R0,R8 \ 000000E0 ........ _BLF GetWidth,??GetWidth??rA \ 000000E4 24008DE5 STR R0,[SP, #+36] 5000 DrawRoundedFrame(0,scr_h-1-FntH-2,scr_w-1,scr_h-1,0,0,0,clrBlack,clrBlack); \ 000000E8 0400A0E3 MOV R0,#+4 \ 000000EC 900D80E3 ORR R0,R0,#0x2400 \ 000000F0 050080E0 ADD R0,R0,R5 \ 000000F4 0010A0E1 MOV R1,R0 \ 000000F8 02002DE9 PUSH {R1} \ 000000FC 01002DE9 PUSH {R0} \ 00000100 012046E2 SUB R2,R6,#+1 \ 00000104 02104BE2 SUB R1,R11,#+2 \ 00000108 0000A0E3 MOV R0,#+0 \ 0000010C 01002DE9 PUSH {R0} \ 00000110 01002DE9 PUSH {R0} \ 00000114 01002DE9 PUSH {R0} \ 00000118 1C309DE5 LDR R3,[SP, #+28] \ 0000011C 500100EF SWI +336 5001 5002 if(shot_soft!=2) \ 00000120 20009DE5 LDR R0,[SP, #+32] \ 00000124 0A9040E0 SUB R9,R0,R10 \ 00000128 280595E5 LDR R0,[R5, #+1320] \ 0000012C 028049E2 SUB R8,R9,#+2 \ 00000130 020050E3 CMP R0,#+2 \ 00000134 1CD08DE2 ADD SP,SP,#+28 \ 00000138 1B00000A BEQ ??DrawSoftInfo_4 5003 { 5004 for(int i=FontH(clfont)*2+2;i>=0;i-=2) \ 0000013C 100595E5 LDR R0,[R5, #+1296] \ 00000140 ........ _BLF FontH,??FontH??rA \ 00000144 0210A0E3 MOV R1,#+2 \ 00000148 804091E0 ADDS R4,R1,R0, LSL #+1 \ 0000014C 0E00004A BMI ??DrawSoftInfo_5 \ 00000150 ........ LDR R7,??DataTable205 ;; SoftBackgrClr 5005 DrawRoundedFrame(0,scr_h-FntH-2,scr_w,scr_h-FntH+i,0,0,0,SoftBackgrClr,SoftBackgrClr); \ ??DrawSoftInfo_6: \ 00000154 0700A0E1 MOV R0,R7 \ 00000158 01002DE9 PUSH {R0} \ 0000015C 01002DE9 PUSH {R0} \ 00000160 093084E0 ADD R3,R4,R9 \ 00000164 0620A0E1 MOV R2,R6 \ 00000168 0810A0E1 MOV R1,R8 \ 0000016C 0000A0E3 MOV R0,#+0 \ 00000170 01002DE9 PUSH {R0} \ 00000174 01002DE9 PUSH {R0} \ 00000178 01002DE9 PUSH {R0} \ 0000017C 500100EF SWI +336 \ 00000180 024054E2 SUBS R4,R4,#+2 \ 00000184 14D08DE2 ADD SP,SP,#+20 \ 00000188 F1FFFF5A BPL ??DrawSoftInfo_6 5006 5007 DoScreen3(FntH+4); \ ??DrawSoftInfo_5: \ 0000018C 04008AE2 ADD R0,R10,#+4 \ 00000190 ........ BL DoScreen3 5008 shot_soft++; \ 00000194 280595E5 LDR R0,[R5, #+1320] \ 00000198 010080E2 ADD R0,R0,#+1 \ 0000019C 280585E5 STR R0,[R5, #+1320] 5009 SMART_REDRAW(); \ 000001A0 ........ BL SMART_REDRAW 5010 return; \ 000001A4 24D08DE2 ADD SP,SP,#+36 \ 000001A8 F08FBDE8 POP {R4-R11,PC} 5011 } 5012 else 5013 DrwImage(&screen3,0,scr_h-FntH-2); \ ??DrawSoftInfo_4: \ 000001AC 0820A0E1 MOV R2,R8 \ 000001B0 0010A0E3 MOV R1,#+0 \ 000001B4 080085E2 ADD R0,R5,#+8 \ 000001B8 ........ BL DrwImage 5014 5015 SetFontColor((char*)SoftFontClr,transparent,0); \ 000001BC ........ LDR R0,??DataTable206 ;; SoftFontClr \ 000001C0 1010A0E3 MOV R1,#+16 \ 000001C4 901D81E3 ORR R1,R1,#0x2400 \ 000001C8 051081E0 ADD R1,R1,R5 \ 000001CC 08108DE5 STR R1,[SP, #+8] \ 000001D0 0020A0E3 MOV R2,#+0 \ 000001D4 ........ _BLF SetFontColor,??SetFontColor??rA \ 000001D8 0100A0E3 MOV R0,#+1 \ 000001DC 01002DE9 PUSH {R0} \ 000001E0 100595E5 LDR R0,[R5, #+1296] \ 000001E4 0230A0E3 MOV R3,#+2 \ 000001E8 01002DE9 PUSH {R0} \ 000001EC 0420A0E1 MOV R2,R4 \ 000001F0 0B10A0E1 MOV R1,R11 5016 // DrawStr(2,scr_h-1-FntH,s,SoftFontClr,clfont,0); 5017 PrintField(scr_w-3,scr_h-1-FntH,s,2,clfont,1);//left align 5018 5019 GetDateTime(0,&tm); 5020 sprintf(s,"%02d:%02d",tm.hour,tm.min); 5021 PrintField(scr_w-3,scr_h-1-(FntH/2),s,2,clfont,1);//left align 5022 // PrintField(scr_w/2,scr_h-1-FntH,s,1,clfont,1); 5023 5024 //void DrawText(int x,int y,int x2,char*s,char *color,int font,int align,int isScroll) 5025 DrwImage(icons[GetIconIndex(t)],2,scr_h-FntH); 5026 DrawText(6+icons[GetIconIndex(t)]->w,scr_h-FntH-2,scr_w-w,(t->xtext2?t->xtext2+1:"Ошибка"),(char*)FontInfoClr,clfont,0,0); \ 000001F4 D8B19FE5 LDR R11,??DrawSoftInfo_7 ;; FontInfoClr \ 000001F8 030046E2 SUB R0,R6,#+3 \ 000001FC ........ _BLF PrintField,??PrintField??rA \ 00000200 1C108DE2 ADD R1,SP,#+28 \ 00000204 0000A0E3 MOV R0,#+0 \ 00000208 B40000EF SWI +180 \ 0000020C 1D30DDE5 LDRB R3,[SP, #+29] \ 00000210 1C20DDE5 LDRB R2,[SP, #+28] \ 00000214 801087E2 ADD R1,R7,#+128 \ 00000218 0400A0E1 MOV R0,R4 \ 0000021C 160000EF SWI +22 \ 00000220 AA1F8AE0 ADD R1,R10,R10, LSR #+31 \ 00000224 C110A0E1 ASR R1,R1,#+1 \ 00000228 14108DE5 STR R1,[SP, #+20] \ 0000022C 0100A0E3 MOV R0,#+1 \ 00000230 01002DE9 PUSH {R0} \ 00000234 100595E5 LDR R0,[R5, #+1296] \ 00000238 0230A0E3 MOV R3,#+2 \ 0000023C 01002DE9 PUSH {R0} \ 00000240 10009DE5 LDR R0,[SP, #+16] \ 00000244 0420A0E1 MOV R2,R4 \ 00000248 011040E0 SUB R1,R0,R1 \ 0000024C 030046E2 SUB R0,R6,#+3 \ 00000250 ........ _BLF PrintField,??PrintField??rA \ 00000254 30009DE5 LDR R0,[SP, #+48] \ 00000258 ........ BL GetIconIndex \ 0000025C 0920A0E1 MOV R2,R9 \ 00000260 0210A0E3 MOV R1,#+2 \ 00000264 000185E0 ADD R0,R5,R0, LSL #+2 \ 00000268 200090E5 LDR R0,[R0, #+32] \ 0000026C ........ BL DrwImage \ 00000270 30009DE5 LDR R0,[SP, #+48] \ 00000274 B80090E5 LDR R0,[R0, #+184] \ 00000278 10D08DE2 ADD SP,SP,#+16 \ 0000027C 000050E3 CMP R0,#+0 \ 00000280 01908012 ADDNE R9,R0,#+1 \ 00000284 20009DE5 LDR R0,[SP, #+32] \ 00000288 78908702 ADDEQ R9,R7,#+120 \ 0000028C ........ BL GetIconIndex \ 00000290 102595E5 LDR R2,[R5, #+1296] \ 00000294 000185E0 ADD R0,R5,R0, LSL #+2 \ 00000298 00208DE5 STR R2,[SP, #+0] \ 0000029C 200090E5 LDR R0,[R0, #+32] \ 000002A0 08109DE5 LDR R1,[SP, #+8] \ 000002A4 B000D0E1 LDRH R0,[R0, #+0] \ 000002A8 0020A0E3 MOV R2,#+0 \ 000002AC 06A080E2 ADD R10,R0,#+6 \ 000002B0 0B00A0E1 MOV R0,R11 \ 000002B4 ........ _BLF SetFontColor,??SetFontColor??rA \ 000002B8 1C109DE5 LDR R1,[SP, #+28] \ 000002BC 0030A0E3 MOV R3,#+0 \ 000002C0 011046E0 SUB R1,R6,R1 \ 000002C4 10108DE5 STR R1,[SP, #+16] \ 000002C8 0A0041E0 SUB R0,R1,R10 \ 000002CC 01002DE9 PUSH {R0} \ 000002D0 5E60A0E3 MOV R6,#+94 \ 000002D4 406F86E3 ORR R6,R6,#0x100 \ 000002D8 0920A0E1 MOV R2,R9 \ 000002DC 0000A0E3 MOV R0,#+0 \ 000002E0 01002DE9 PUSH {R0} \ 000002E4 01002DE9 PUSH {R0} \ 000002E8 0810A0E1 MOV R1,R8 \ 000002EC 0600A0E1 MOV R0,R6 \ 000002F0 01002DE9 PUSH {R0} \ 000002F4 0100A0E3 MOV R0,#+1 \ 000002F8 01002DE9 PUSH {R0} \ 000002FC 14009DE5 LDR R0,[SP, #+20] \ 00000300 01002DE9 PUSH {R0} \ 00000304 0A00A0E1 MOV R0,R10 \ 00000308 ........ _BLF PrintText,??PrintText??rA 5027 5028 DrwImage(XStatusImg[t->xstate],2,scr_h-(FntH/2)); \ 0000030C 1C009DE5 LDR R0,[SP, #+28] \ 00000310 24109DE5 LDR R1,[SP, #+36] \ 00000314 018040E0 SUB R8,R0,R1 \ 00000318 38009DE5 LDR R0,[SP, #+56] \ 0000031C 0820A0E1 MOV R2,R8 \ 00000320 B605D0E1 LDRH R0,[R0, #+86] \ 00000324 0210A0E3 MOV R1,#+2 \ 00000328 000185E0 ADD R0,R5,R0, LSL #+2 \ 0000032C D40390E5 LDR R0,[R0, #+980] \ 00000330 ........ BL DrwImage 5029 SetScrollEdgeDelay(1); \ 00000334 0100A0E3 MOV R0,#+1 \ 00000338 ........ _BLF SetScrollEdgeDelay,??SetScrollEdgeDelay??rA 5030 DrawText(6+XStatusImg[t->xstate]->w,scr_h-(FntH/2)-1,scr_w-w,t->xtext?t->xtext:"Нет хстатуса",(char*)FontInfoClr,clfont,0,1); \ 0000033C 38009DE5 LDR R0,[SP, #+56] \ 00000340 0020A0E3 MOV R2,#+0 \ 00000344 B40090E5 LDR R0,[R0, #+180] \ 00000348 18D08DE2 ADD SP,SP,#+24 \ 0000034C 109595E5 LDR R9,[R5, #+1296] \ 00000350 08109DE5 LDR R1,[SP, #+8] \ 00000354 000050E3 CMP R0,#+0 \ 00000358 0070A011 MOVNE R7,R0 \ 0000035C 20009DE5 LDR R0,[SP, #+32] \ 00000360 44708702 ADDEQ R7,R7,#+68 \ 00000364 B605D0E1 LDRH R0,[R0, #+86] \ 00000368 000185E0 ADD R0,R5,R0, LSL #+2 \ 0000036C D40390E5 LDR R0,[R0, #+980] \ 00000370 B000D0E1 LDRH R0,[R0, #+0] \ 00000374 065080E2 ADD R5,R0,#+6 \ 00000378 0B00A0E1 MOV R0,R11 \ 0000037C ........ _BLF SetFontColor,??SetFontColor??rA \ 00000380 10009DE5 LDR R0,[SP, #+16] \ 00000384 0030A0E3 MOV R3,#+0 \ 00000388 050040E0 SUB R0,R0,R5 \ 0000038C 01002DE9 PUSH {R0} \ 00000390 0720A0E1 MOV R2,R7 \ 00000394 011048E2 SUB R1,R8,#+1 \ 00000398 0000A0E3 MOV R0,#+0 \ 0000039C 01002DE9 PUSH {R0} \ 000003A0 0100A0E3 MOV R0,#+1 \ 000003A4 01002DE9 PUSH {R0} \ 000003A8 40002DE9 PUSH {R6} \ 000003AC 01002DE9 PUSH {R0} \ 000003B0 00022DE9 PUSH {R9} \ 000003B4 0500A0E1 MOV R0,R5 \ 000003B8 ........ _BLF PrintText,??PrintText??rA 5031 // DrawStr(2,scr_h-1-(FntH/2),t->xtext2,SoftFontClr,clfont,0); 5032 //DrawStr(2,scr_h-1-FntH,t->xtext,SoftFontClr,clfont,0); 5033 5034 UnlockSched(); \ 000003BC 470100EF SWI +327 5035 5036 mfree(s); \ 000003C0 0400A0E1 MOV R0,R4 \ 000003C4 150000EF SWI +21 5037 } \ 000003C8 18D08DE2 ADD SP,SP,#+24 \ 000003CC 24D08DE2 ADD SP,SP,#+36 \ 000003D0 F08FBDE8 POP {R4-R11,PC} ;; return \ ??DrawSoftInfo_7: \ 000003D4 ........ DC32 FontInfoClr 5038 5039 int shot_header=0; 5040 IMGHDR screen4={0,0,8,""}; \ In segment CODE, align 4, keep-with-next 5041 void DoScreen4(int h) 5042 { \ DoScreen4: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 5043 //int SCREENSIZE = ScreenH()*ScreenW(); 5044 int HSIZE = (h+8)*ScreenW(); 5045 int ScrH=h+2; 5046 int ScrW=ScreenW(); 5047 char *ms=RamScreenBuffer(); 5048 screen4.w=ScrW; \ 00000004 ........ LDR R8,??DataTable212 ;; i_rc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 085084E2 ADD R5,R4,#+8 \ 00000010 888100EF SWI +33160 \ 00000014 900505E0 MUL R5,R0,R5 \ 00000018 024084E2 ADD R4,R4,#+2 \ 0000001C 888100EF SWI +33160 \ 00000020 0060A0E1 MOV R6,R0 \ 00000024 E08000EF SWI +32992 \ 00000028 0070A0E1 MOV R7,R0 5049 screen4.h=ScrH; 5050 screen4.bitmap=malloc(ScrW*ScrH*2); \ 0000002C 940600E0 MUL R0,R4,R6 \ 00000030 B461C8E1 STRH R6,[R8, #+20] \ 00000034 B641C8E1 STRH R4,[R8, #+22] \ 00000038 8040A0E1 LSL R4,R0,#+1 \ 0000003C 0400A0E1 MOV R0,R4 \ 00000040 140000EF SWI +20 \ 00000044 1C0088E5 STR R0,[R8, #+28] 5051 ms+=(HSIZE*2); 5052 memcpy(screen4.bitmap, ms, ScrW*ScrH*2); \ 00000048 0420A0E1 MOV R2,R4 \ 0000004C 851087E0 ADD R1,R7,R5, LSL #+1 \ 00000050 1E0100EF SWI +286 5053 } \ 00000054 F081BDE8 POP {R4-R8,PC} ;; return 5054 \ In segment CODE, align 4, keep-with-next 5055 void DrawHeader() 5056 { \ DrawHeader: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 0CD04DE2 SUB SP,SP,#+12 5057 SetCanvasFlag(1); \ 00000008 0100A0E3 MOV R0,#+1 \ 0000000C ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 5058 int scr_w=ScreenW()-1; \ 00000010 888100EF SWI +33160 \ 00000014 014040E2 SUB R4,R0,#+1 5059 int scr_h=ScreenH()-1; \ 00000018 898100EF SWI +33161 5060 char *s=malloc(128); \ 0000001C 8000A0E3 MOV R0,#+128 \ 00000020 140000EF SWI +20 \ 00000024 0050A0E1 MOV R5,R0 5061 char *ss=malloc(128); \ 00000028 8000A0E3 MOV R0,#+128 \ 0000002C 140000EF SWI +20 \ 00000030 0060A0E1 MOV R6,R0 5062 5063 if(!PNG_HEADER)clfont=100+HeadFont; \ 00000034 ........ LDR R0,??DataTable208 ;; PNG_HEADER \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 0300001A BNE ??DrawHeader_1 \ 00000044 ........ LDR R0,??DataTable209 ;; HeadFont \ 00000048 000090E5 LDR R0,[R0, #+0] \ 0000004C 640080E2 ADD R0,R0,#+100 \ 00000050 000000EA B ??DrawHeader_2 5064 else clfont=4; \ ??DrawHeader_1: \ 00000054 0400A0E3 MOV R0,#+4 \ ??DrawHeader_2: \ 00000058 ........ LDR R7,??DataTable212 ;; i_rc \ 0000005C 100587E5 STR R0,[R7, #+1296] 5065 // char clrRed[]={0xFF,0x00,0x00,0x15}; 5066 if(icons[IS_ONLINE]) \ 00000060 4C0097E5 LDR R0,[R7, #+76] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 100597E5 LDR R0,[R7, #+1296] \ 0000006C 0600000A BEQ ??DrawHeader_3 5067 hy=(icons[IS_ONLINE]->h > FontH(clfont)) ? (icons[IS_ONLINE]->h) : (FontH(clfont)); \ 00000070 ........ _BLF FontH,??FontH??rA \ 00000074 4C1097E5 LDR R1,[R7, #+76] \ 00000078 B220D1E1 LDRH R2,[R1, #+2] \ 0000007C 020050E1 CMP R0,R2 \ 00000080 0200A0B1 MOVLT R0,R2 \ 00000084 010000BA BLT ??DrawHeader_4 \ 00000088 100597E5 LDR R0,[R7, #+1296] 5068 else 5069 hy=FontH(clfont); \ ??DrawHeader_3: \ 0000008C ........ _BLF FontH,??FontH??rA 5070 5071 hy+=YDISP; \ ??DrawHeader_4: \ 00000090 180080E2 ADD R0,R0,#+24 \ 00000094 0C0587E5 STR R0,[R7, #+1292] 5072 LockSched(); \ 00000098 460100EF SWI +326 5073 5074 SetFontColor((char*)HeadFontClr,transparent,0); \ 0000009C 1000A0E3 MOV R0,#+16 \ 000000A0 900D80E3 ORR R0,R0,#0x2400 \ 000000A4 07A080E0 ADD R10,R0,R7 \ 000000A8 D8059FE5 LDR R0,??DrawHeader_5+0xC ;; HeadFontClr \ 000000AC 0020A0E3 MOV R2,#+0 \ 000000B0 0A10A0E1 MOV R1,R10 \ 000000B4 ........ _BLF SetFontColor,??SetFontColor??rA 5075 5076 #ifdef ELKA 5077 if(shot_header!=2) \ 000000B8 2C0597E5 LDR R0,[R7, #+1324] \ 000000BC 020050E3 CMP R0,#+2 \ 000000C0 2F00000A BEQ ??DrawHeader_6 5078 { 5079 DrawRoundedFrame(0,YDISP,scr_w,hy+2,0,0,0,clrBlack,clrBlack); \ 000000C4 0400A0E3 MOV R0,#+4 \ 000000C8 900D80E3 ORR R0,R0,#0x2400 \ 000000CC 070080E0 ADD R0,R0,R7 \ 000000D0 0010A0E1 MOV R1,R0 \ 000000D4 02002DE9 PUSH {R1} \ 000000D8 01002DE9 PUSH {R0} \ 000000DC 0420A0E1 MOV R2,R4 \ 000000E0 1810A0E3 MOV R1,#+24 \ 000000E4 0000A0E3 MOV R0,#+0 \ 000000E8 01002DE9 PUSH {R0} \ 000000EC 01002DE9 PUSH {R0} \ 000000F0 01002DE9 PUSH {R0} \ 000000F4 0C0597E5 LDR R0,[R7, #+1292] \ 000000F8 023080E2 ADD R3,R0,#+2 \ 000000FC 0000A0E3 MOV R0,#+0 \ 00000100 500100EF SWI +336 5080 for(int i=hy-YDISP;i>0;i-=2) \ 00000104 0C0597E5 LDR R0,[R7, #+1292] \ 00000108 14D08DE2 ADD SP,SP,#+20 \ 0000010C 185040E2 SUB R5,R0,#+24 \ 00000110 010055E3 CMP R5,#+1 \ 00000114 120000BA BLT ??DrawHeader_7 \ 00000118 6C659FE5 LDR R6,??DrawHeader_5+0x10 ;; HeadBackgrClr 5081 DrawRoundedFrame(0,YDISP,scr_w,hy-i+2,0,0,0,HeadBackgrClr,HeadBackgrClr); \ ??DrawHeader_8: \ 0000011C 0600A0E1 MOV R0,R6 \ 00000120 01002DE9 PUSH {R0} \ 00000124 01002DE9 PUSH {R0} \ 00000128 0420A0E1 MOV R2,R4 \ 0000012C 1810A0E3 MOV R1,#+24 \ 00000130 0000A0E3 MOV R0,#+0 \ 00000134 01002DE9 PUSH {R0} \ 00000138 01002DE9 PUSH {R0} \ 0000013C 01002DE9 PUSH {R0} \ 00000140 0C0597E5 LDR R0,[R7, #+1292] \ 00000144 050040E0 SUB R0,R0,R5 \ 00000148 023080E2 ADD R3,R0,#+2 \ 0000014C 0000A0E3 MOV R0,#+0 \ 00000150 500100EF SWI +336 \ 00000154 025045E2 SUB R5,R5,#+2 \ 00000158 010055E3 CMP R5,#+1 \ 0000015C 14D08DE2 ADD SP,SP,#+20 \ 00000160 EDFFFFAA BGE ??DrawHeader_8 5082 DoScreen4(hy-YDISP); \ ??DrawHeader_7: \ 00000164 0C0597E5 LDR R0,[R7, #+1292] \ 00000168 180040E2 SUB R0,R0,#+24 \ 0000016C ........ BL DoScreen4 5083 shot_header++; \ 00000170 2C0597E5 LDR R0,[R7, #+1324] \ 00000174 010080E2 ADD R0,R0,#+1 \ 00000178 2C0587E5 STR R0,[R7, #+1324] 5084 SMART_REDRAW(); \ 0000017C ........ BL SMART_REDRAW 5085 return; \ 00000180 F78FBDE8 POP {R0-R2,R4-R11,PC} 5086 } 5087 else 5088 DrwImage(&screen4,0,YDISP); \ ??DrawHeader_6: \ 00000184 1820A0E3 MOV R2,#+24 \ 00000188 0010A0E3 MOV R1,#+0 \ 0000018C 140087E2 ADD R0,R7,#+20 \ 00000190 ........ BL DrwImage 5089 #else 5090 DrawRoundedFrame(0,YDISP,scr_w,hy+2,0,0,0,clrBlack,clrBlack); 5091 for(int i=hy-YDISP;i>0;i-=2) 5092 DrawRoundedFrame(0,YDISP,scr_w,hy-i+2,0,0,0,HeadBackgrClr,HeadBackgrClr); 5093 #endif 5094 5095 #ifdef DEBUG1 5096 return; 5097 #else 5098 int x=1; 5099 int icon; 5100 if(total_unread) icon = IS_MSG; \ 00000194 AC0497E5 LDR R0,[R7, #+1196] \ 00000198 0180A0E3 MOV R8,#+1 \ 0000019C 000050E3 CMP R0,#+0 \ 000001A0 0D00A013 MOVNE R0,#+13 \ 000001A4 0500001A BNE ??DrawHeader_9 5101 else 5102 { 5103 switch(connect_state) \ 000001A8 900497E5 LDR R0,[R7, #+1168] \ 000001AC 000050E3 CMP R0,#+0 \ 000001B0 0200000A BEQ ??DrawHeader_9 \ 000001B4 030050E2 SUBS R0,R0,#+3 5104 { 5105 case 0: icon=IS_OFFLINE; break; 5106 case 3: icon=CurrentStatus; break; \ 000001B8 A0039705 LDREQ R0,[R7, #+928] 5107 default: icon=IS_UNKNOWN; break; \ 000001BC 0E00A013 MOVNE R0,#+14 5108 } 5109 } 5110 5111 if(icons[icon] && HEAD_STATUS) \ ??DrawHeader_9: \ 000001C0 009187E0 ADD R9,R7,R0, LSL #+2 \ 000001C4 200099E5 LDR R0,[R9, #+32] \ 000001C8 000050E3 CMP R0,#+0 \ 000001CC 0900000A BEQ ??DrawHeader_10 \ 000001D0 B8149FE5 LDR R1,??DrawHeader_5+0x14 ;; HEAD_STATUS \ 000001D4 001091E5 LDR R1,[R1, #+0] \ 000001D8 000051E3 CMP R1,#+0 \ 000001DC 0500000A BEQ ??DrawHeader_10 5112 { 5113 DrwImage(icons[icon],x,YDISP+1); \ 000001E0 1920A0E3 MOV R2,#+25 \ 000001E4 0110A0E3 MOV R1,#+1 \ 000001E8 ........ BL DrwImage 5114 x+=icons[icon]->w+2;//GetImgWidth(NumStatusToIconBar+icon)+2;// + смещение по х \ 000001EC 200099E5 LDR R0,[R9, #+32] \ 000001F0 B000D0E1 LDRH R0,[R0, #+0] \ 000001F4 038080E2 ADD R8,R0,#+3 5115 } 5116 5117 if(total_unread && isShowUnread) \ ??DrawHeader_10: \ 000001F8 AC2497E5 LDR R2,[R7, #+1196] \ 000001FC 90949FE5 LDR R9,??DrawHeader_5+0x18 ;; `?` \ 00000200 000052E3 CMP R2,#+0 \ 00000204 1C00000A BEQ ??DrawHeader_11 \ 00000208 88049FE5 LDR R0,??DrawHeader_5+0x1C ;; isShowUnread \ 0000020C 000090E5 LDR R0,[R0, #+0] \ 00000210 000050E3 CMP R0,#+0 \ 00000214 1800000A BEQ ??DrawHeader_11 5118 { 5119 sprintf(s,"%d/%d",total_unread,total_unread2); \ 00000218 F83297E5 LDR R3,[R7, #+760] \ 0000021C 0C1089E2 ADD R1,R9,#+12 \ 00000220 0500A0E1 MOV R0,R5 \ 00000224 160000EF SWI +22 5120 DrawStr(x,YDISP+1,s,clrWhite,clfont,0); \ 00000228 10B597E5 LDR R11,[R7, #+1296] \ 0000022C 0020A0E3 MOV R2,#+0 \ 00000230 0A10A0E1 MOV R1,R10 \ 00000234 0800A0E3 MOV R0,#+8 \ 00000238 900D80E3 ORR R0,R0,#0x2400 \ 0000023C 070080E0 ADD R0,R0,R7 \ 00000240 ........ _BLF SetFontColor,??SetFontColor??rA \ 00000244 0100A0E3 MOV R0,#+1 \ 00000248 01002DE9 PUSH {R0} \ 0000024C 00082DE9 PUSH {R11} \ 00000250 0030A0E3 MOV R3,#+0 \ 00000254 0520A0E1 MOV R2,R5 \ 00000258 1910A0E3 MOV R1,#+25 \ 0000025C 0800A0E1 MOV R0,R8 \ 00000260 ........ _BLF PrintField,??PrintField??rA 5121 x+=GetWidth(x,YDISP+1)+1; \ 00000264 1910A0E3 MOV R1,#+25 \ 00000268 0800A0E1 MOV R0,R8 \ 0000026C ........ _BLF GetWidth,??GetWidth??rA \ 00000270 010080E2 ADD R0,R0,#+1 \ 00000274 088080E0 ADD R8,R0,R8 \ 00000278 08D08DE2 ADD SP,SP,#+8 5122 } 5123 5124 if(CurrentXStatus!=0 && HEAD_XSTATUS)//если есть хстатус \ ??DrawHeader_11: \ 0000027C A40397E5 LDR R0,[R7, #+932] \ 00000280 000050E3 CMP R0,#+0 \ 00000284 0F00000A BEQ ??DrawHeader_12 \ 00000288 0C149FE5 LDR R1,??DrawHeader_5+0x20 ;; HEAD_XSTATUS \ 0000028C 001091E5 LDR R1,[R1, #+0] \ 00000290 000051E3 CMP R1,#+0 \ 00000294 0A00000A BEQ ??DrawHeader_13 5125 { 5126 // DYNPNGICONLIST *xs=GetXSByItem(CurrentXStatus); 5127 // DrwImage(xs->img,x,YDISP+1); 5128 // x+=xs->img->w+1; 5129 DrwImage(XStatusImg[CurrentXStatus],x,YDISP+1); \ 00000298 1920A0E3 MOV R2,#+25 \ 0000029C 0810A0E1 MOV R1,R8 \ 000002A0 000187E0 ADD R0,R7,R0, LSL #+2 \ 000002A4 D40390E5 LDR R0,[R0, #+980] \ 000002A8 ........ BL DrwImage 5130 x+=XStatusImg[CurrentXStatus]->w+1; \ 000002AC A40397E5 LDR R0,[R7, #+932] \ 000002B0 000187E0 ADD R0,R7,R0, LSL #+2 \ 000002B4 D40390E5 LDR R0,[R0, #+980] \ 000002B8 B000D0E1 LDRH R0,[R0, #+0] \ 000002BC 010080E2 ADD R0,R0,#+1 \ 000002C0 088080E0 ADD R8,R0,R8 5131 } 5132 5133 int priv=0; \ ??DrawHeader_13: \ 000002C4 0000A0E3 MOV R0,#+0 5134 char A_s[]="[A:%s]"; \ ??DrawHeader_12: \ 000002C8 080499E8 LDM R9,{R3,R10} \ 000002CC 04108DE2 ADD R1,SP,#+4 \ 000002D0 080481E8 STM R1,{R3,R10} 5135 // char t[32]; 5136 5137 switch(CurrentPrivateStatus) \ 000002D4 741497E5 LDR R1,[R7, #+1140] \ 000002D8 040051E3 CMP R1,#+4 \ 000002DC 0D00008A BHI ??DrawHeader_14 \ 000002E0 012F8FE2 ADR R2,??DrawHeader_0 \ 000002E4 0120D2E7 LDRB R2,[R2, R1] \ 000002E8 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??DrawHeader_0: \ 000002EC 01030507 DC8 +1,+3,+5,+7 \ 000002F0 09000000 DC8 +9,+0,+0,+0 5138 { 5139 case 0: priv=ICON_ALL_CAN_SEE; break; \ ??DrawHeader_15: \ 000002F4 1700A0E3 MOV R0,#+23 \ 000002F8 060000EA B ??DrawHeader_14 5140 case 1: priv=ICON_NOBODY_CAN_SEE;break; \ ??DrawHeader_16: \ 000002FC 1B00A0E3 MOV R0,#+27 \ 00000300 040000EA B ??DrawHeader_14 5141 case 2: priv=ICON_VISLIST_CAN_SEE; break; \ ??DrawHeader_17: \ 00000304 1800A0E3 MOV R0,#+24 \ 00000308 020000EA B ??DrawHeader_14 5142 case 3: priv=ICON_INVISLIST_CANNOT_SEE; break; \ ??DrawHeader_18: \ 0000030C 1900A0E3 MOV R0,#+25 \ 00000310 000000EA B ??DrawHeader_14 5143 case 4: priv=ICON_CONTACTLIST_CAN_SEE; break; \ ??DrawHeader_19: \ 00000314 1A00A0E3 MOV R0,#+26 5144 } 5145 5146 if(icons[priv] && HEAD_PRIVATE) \ ??DrawHeader_14: \ 00000318 00A187E0 ADD R10,R7,R0, LSL #+2 \ 0000031C 20009AE5 LDR R0,[R10, #+32] \ 00000320 000050E3 CMP R0,#+0 \ 00000324 0A00000A BEQ ??DrawHeader_20 \ 00000328 70139FE5 LDR R1,??DrawHeader_5+0x24 ;; HEAD_PRIVATE \ 0000032C 001091E5 LDR R1,[R1, #+0] \ 00000330 000051E3 CMP R1,#+0 \ 00000334 0600000A BEQ ??DrawHeader_20 5147 { 5148 DrwImage(icons[priv],x,YDISP+1); \ 00000338 1920A0E3 MOV R2,#+25 \ 0000033C 0810A0E1 MOV R1,R8 \ 00000340 ........ BL DrwImage 5149 x+=icons[priv]->w+2; \ 00000344 20009AE5 LDR R0,[R10, #+32] \ 00000348 B000D0E1 LDRH R0,[R0, #+0] \ 0000034C 020080E2 ADD R0,R0,#+2 \ 00000350 088080E0 ADD R8,R0,R8 5150 } 5151 5152 5153 if(!HEAD_PING) \ ??DrawHeader_20: \ 00000354 48139FE5 LDR R1,??DrawHeader_5+0x28 ;; HEAD_PING \ 00000358 001091E5 LDR R1,[R1, #+0] \ 0000035C 00108DE5 STR R1,[SP, #+0] \ 00000360 000051E3 CMP R1,#+0 \ 00000364 1B00001A BNE ??DrawHeader_21 5154 { 5155 int ping=0; 5156 if(curping < 3) ping=1; \ 00000368 C80297E5 LDR R0,[R7, #+712] \ 0000036C 030050E3 CMP R0,#+3 \ 00000370 0C0000BA BLT ??DrawHeader_22 5157 if(curping > 3 && curping < 10) ping=2; \ 00000374 040050E3 CMP R0,#+4 \ 00000378 020000BA BLT ??DrawHeader_23 \ 0000037C 0A0050E3 CMP R0,#+10 5158 if(curping > 10 && curping < 30) ping=3; 5159 if(curping > 30) ping=4; 5160 5161 switch(ping) 5162 { 5163 case 1: ping=ICON_PING1; break; 5164 case 2: ping=ICON_PING2; break; \ 00000380 1D00A0B3 MOVLT R0,#+29 \ 00000384 080000BA BLT ??DrawHeader_24 \ ??DrawHeader_23: \ 00000388 0B0050E3 CMP R0,#+11 \ 0000038C 020000BA BLT ??DrawHeader_25 \ 00000390 1E0050E3 CMP R0,#+30 5165 case 3: ping=ICON_PING3; break; \ 00000394 1E00A0B3 MOVLT R0,#+30 \ 00000398 030000BA BLT ??DrawHeader_24 \ ??DrawHeader_25: \ 0000039C 1F0050E3 CMP R0,#+31 5166 case 4: ping=ICON_PING4; break; \ 000003A0 1F00A0A3 MOVGE R0,#+31 \ 000003A4 000000AA BGE ??DrawHeader_24 \ ??DrawHeader_22: \ 000003A8 1C00A0E3 MOV R0,#+28 5167 default: ping=ICON_PING1; break; 5168 } 5169 5170 if(icons[ping] && !HEAD_PING) \ ??DrawHeader_24: \ 000003AC 00A187E0 ADD R10,R7,R0, LSL #+2 \ 000003B0 20009AE5 LDR R0,[R10, #+32] \ 000003B4 000050E3 CMP R0,#+0 \ 000003B8 0600000A BEQ ??DrawHeader_21 5171 { 5172 DrwImage(icons[ping],x,YDISP+1); \ 000003BC 1920A0E3 MOV R2,#+25 \ 000003C0 0810A0E1 MOV R1,R8 \ 000003C4 ........ BL DrwImage 5173 x+=icons[ping]->w+1; \ 000003C8 20009AE5 LDR R0,[R10, #+32] \ 000003CC B000D0E1 LDRH R0,[R0, #+0] \ 000003D0 010080E2 ADD R0,R0,#+1 \ 000003D4 088080E0 ADD R8,R0,R8 5174 } 5175 } 5176 5177 int cap; 5178 int x2=scr_w; 5179 #ifdef ELKA 5180 int y = YDISP-1; 5181 #else 5182 int y = YDISP+1; 5183 #endif 5184 //x2=scr_w-GetWidth(scr_w,YDISP+1); 5185 if(strlen(ContactT9Key)) \ ??DrawHeader_21: \ 000003D8 2400A0E3 MOV R0,#+36 \ 000003DC 7C0D80E3 ORR R0,R0,#0x1F00 \ 000003E0 07A080E0 ADD R10,R0,R7 \ 000003E4 84B0A0E3 MOV R11,#+132 \ 000003E8 60BE8BE3 ORR R11,R11,#0x600 \ 000003EC 07008BE0 ADD R0,R11,R7 \ 000003F0 1B0000EF SWI +27 \ 000003F4 000050E3 CMP R0,#+0 \ 000003F8 1300000A BEQ ??DrawHeader_26 5186 { 5187 sprintf(s,key_clm_hdr_text); \ 000003FC 2C1089E2 ADD R1,R9,#+44 \ 00000400 0500A0E1 MOV R0,R5 \ 00000404 160000EF SWI +22 5188 strcat(s,ContactT9Key); \ 00000408 07108BE0 ADD R1,R11,R7 \ 0000040C 0500A0E1 MOV R0,R5 \ 00000410 170000EF SWI +23 5189 strcpy(clmenu_sk_r,key_clmenu_sk_r); \ 00000414 081089E2 ADD R1,R9,#+8 \ 00000418 0A00A0E1 MOV R0,R10 \ 0000041C 1A0000EF SWI +26 5190 PrintField(scr_w,y,s,2,clfont,1); \ 00000420 0100A0E3 MOV R0,#+1 \ 00000424 01002DE9 PUSH {R0} \ 00000428 100597E5 LDR R0,[R7, #+1296] \ 0000042C 0230A0E3 MOV R3,#+2 \ 00000430 01002DE9 PUSH {R0} \ 00000434 0520A0E1 MOV R2,R5 \ 00000438 1710A0E3 MOV R1,#+23 \ 0000043C 0400A0E1 MOV R0,R4 \ 00000440 ........ _BLF PrintField,??PrintField??rA \ 00000444 08D08DE2 ADD SP,SP,#+8 \ 00000448 850000EA B ??DrawHeader_27 5191 } 5192 else 5193 if(on_off_timer > 0 && strlen(on_off_buf)!=0)//если кто то подключился/отключился \ ??DrawHeader_26: \ 0000044C C00497E5 LDR R0,[R7, #+1216] \ 00000450 010050E3 CMP R0,#+1 \ 00000454 160000BA BLT ??DrawHeader_28 \ 00000458 3400A0E3 MOV R0,#+52 \ 0000045C 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000460 07B080E0 ADD R11,R0,R7 \ 00000464 0B00A0E1 MOV R0,R11 \ 00000468 1B0000EF SWI +27 \ 0000046C 000050E3 CMP R0,#+0 \ 00000470 0F00000A BEQ ??DrawHeader_28 5194 { 5195 SetScrollEdgeDelay(1); \ 00000474 0100A0E3 MOV R0,#+1 \ 00000478 ........ _BLF SetScrollEdgeDelay,??SetScrollEdgeDelay??rA 5196 PrintText(scr_w,y,on_off_buf,2,clfont,1,350,1,0,scr_w-x-2); \ 0000047C 080044E0 SUB R0,R4,R8 \ 00000480 020040E2 SUB R0,R0,#+2 \ 00000484 01002DE9 PUSH {R0} \ 00000488 0230A0E3 MOV R3,#+2 \ 0000048C 0B20A0E1 MOV R2,R11 \ 00000490 0000A0E3 MOV R0,#+0 \ 00000494 01002DE9 PUSH {R0} \ 00000498 0100A0E3 MOV R0,#+1 \ 0000049C 01002DE9 PUSH {R0} \ 000004A0 5E00A0E3 MOV R0,#+94 \ 000004A4 400F80E3 ORR R0,R0,#0x100 \ 000004A8 01002DE9 PUSH {R0} \ 000004AC 0100A0E3 MOV R0,#+1 \ 000004B0 640000EA B ??DrawHeader_29 5197 } 5198 else 5199 { 5200 x2=scr_w; 5201 cap=*RamCap(); \ ??DrawHeader_28: \ 000004B4 C88000EF SWI +32968 \ 000004B8 B020D0E1 LDRH R2,[R0, #+0] 5202 sprintf(s,"[%d%%]",cap); \ 000004BC 241089E2 ADD R1,R9,#+36 \ 000004C0 0500A0E1 MOV R0,R5 \ 000004C4 160000EF SWI +22 5203 PrintField(scr_w,y,s,2,clfont,1);//capacity in header \ 000004C8 0100A0E3 MOV R0,#+1 \ 000004CC 01002DE9 PUSH {R0} \ 000004D0 100597E5 LDR R0,[R7, #+1296] \ 000004D4 0230A0E3 MOV R3,#+2 \ 000004D8 01002DE9 PUSH {R0} \ 000004DC 0520A0E1 MOV R2,R5 \ 000004E0 1710A0E3 MOV R1,#+23 \ 000004E4 0400A0E1 MOV R0,R4 \ 000004E8 ........ _BLF PrintField,??PrintField??rA 5204 5205 x2=scr_w-GetWidth(scr_w,y); \ 000004EC 1710A0E3 MOV R1,#+23 \ 000004F0 0400A0E1 MOV R0,R4 \ 000004F4 ........ _BLF GetWidth,??GetWidth??rA \ 000004F8 004044E0 SUB R4,R4,R0 5206 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ 000004FC 381089E2 ADD R1,R9,#+56 \ 00000500 0A00A0E1 MOV R0,R10 \ 00000504 1A0000EF SWI +26 5207 Get_Online_total(); \ 00000508 ........ BL Get_Online_total 5208 5209 strcpy(s,""); \ 0000050C 5A1F8FE2 ADR R1,??DrawHeader_5 ;; "" \ 00000510 0500A0E1 MOV R0,R5 \ 00000514 1A0000EF SWI +26 5210 if(HEAD_PING==1) sprintf(s,"[%d с.]",curping); \ 00000518 08009DE5 LDR R0,[SP, #+8] \ 0000051C 08D08DE2 ADD SP,SP,#+8 \ 00000520 010050E3 CMP R0,#+1 \ 00000524 0300001A BNE ??DrawHeader_30 \ 00000528 C82297E5 LDR R2,[R7, #+712] \ 0000052C 141089E2 ADD R1,R9,#+20 \ 00000530 0500A0E1 MOV R0,R5 \ 00000534 160000EF SWI +22 5211 if(away_m && isShowA) \ ??DrawHeader_30: \ 00000538 B00397E5 LDR R0,[R7, #+944] \ 0000053C 000050E3 CMP R0,#+0 \ 00000540 0C00000A BEQ ??DrawHeader_31 \ 00000544 5C019FE5 LDR R0,??DrawHeader_5+0x2C ;; isShowA \ 00000548 000090E5 LDR R0,[R0, #+0] \ 0000054C 000050E3 CMP R0,#+0 \ 00000550 0800000A BEQ ??DrawHeader_31 5212 { 5213 sprintf(ss,A_s,away_msg_time_dace); \ 00000554 E400A0E3 MOV R0,#+228 \ 00000558 6C0D80E3 ORR R0,R0,#0x1B00 \ 0000055C 072080E0 ADD R2,R0,R7 \ 00000560 04108DE2 ADD R1,SP,#+4 \ 00000564 0600A0E1 MOV R0,R6 \ 00000568 160000EF SWI +22 5214 strcat(s,ss); \ 0000056C 0610A0E1 MOV R1,R6 \ 00000570 0500A0E1 MOV R0,R5 \ 00000574 170000EF SWI +23 5215 } 5216 if(Is_Vibra_Enabled && isShowV) strcat(s,"[V]") ; \ ??DrawHeader_31: \ 00000578 100397E5 LDR R0,[R7, #+784] \ 0000057C 000050E3 CMP R0,#+0 \ 00000580 0600000A BEQ ??DrawHeader_32 \ 00000584 20019FE5 LDR R0,??DrawHeader_5+0x30 ;; isShowV \ 00000588 000090E5 LDR R0,[R0, #+0] \ 0000058C 000050E3 CMP R0,#+0 \ 00000590 0200000A BEQ ??DrawHeader_32 \ 00000594 391F8FE2 ADR R1,??DrawHeader_5+0x4 ;; "[V]" \ 00000598 0500A0E1 MOV R0,R5 \ 0000059C 170000EF SWI +23 5217 if(Is_Sounds_Enabled && isShowS) strcat(s,"[S]") ; \ ??DrawHeader_32: \ 000005A0 680497E5 LDR R0,[R7, #+1128] \ 000005A4 000050E3 CMP R0,#+0 \ 000005A8 0600000A BEQ ??DrawHeader_33 \ 000005AC FC009FE5 LDR R0,??DrawHeader_5+0x34 ;; isShowS \ 000005B0 000090E5 LDR R0,[R0, #+0] \ 000005B4 000050E3 CMP R0,#+0 \ 000005B8 0200000A BEQ ??DrawHeader_33 \ 000005BC 301F8FE2 ADR R1,??DrawHeader_5+0x8 ;; "[S]" \ 000005C0 0500A0E1 MOV R0,R5 \ 000005C4 170000EF SWI +23 5218 if(Is_Double_Vibra_On && isShowR) strcat(s,"[Vr]") ; \ ??DrawHeader_33: \ 000005C8 F40297E5 LDR R0,[R7, #+756] \ 000005CC 000050E3 CMP R0,#+0 \ 000005D0 0600000A BEQ ??DrawHeader_34 \ 000005D4 D8009FE5 LDR R0,??DrawHeader_5+0x38 ;; isShowR \ 000005D8 000090E5 LDR R0,[R0, #+0] \ 000005DC 000050E3 CMP R0,#+0 \ 000005E0 0200000A BEQ ??DrawHeader_34 \ 000005E4 CC109FE5 LDR R1,??DrawHeader_5+0x3C ;; `?` + 8 \ 000005E8 0500A0E1 MOV R0,R5 \ 000005EC 170000EF SWI +23 5219 5220 if(isShowCont) \ ??DrawHeader_34: \ 000005F0 C4009FE5 LDR R0,??DrawHeader_5+0x40 ;; isShowCont \ 000005F4 000090E5 LDR R0,[R0, #+0] \ 000005F8 000050E3 CMP R0,#+0 \ 000005FC 0700000A BEQ ??DrawHeader_35 5221 { 5222 sprintf(ss,"[%d/%d]",kopa_kontaktu,kopa_online); \ 00000600 C43497E5 LDR R3,[R7, #+1220] \ 00000604 C82497E5 LDR R2,[R7, #+1224] \ 00000608 1C1089E2 ADD R1,R9,#+28 \ 0000060C 0600A0E1 MOV R0,R6 \ 00000610 160000EF SWI +22 5223 // PrintField(x2-2,YDISP+1,s,2,clfont,1); 5224 strcat(s,ss); \ 00000614 0610A0E1 MOV R1,R6 \ 00000618 0500A0E1 MOV R0,R5 \ 0000061C 170000EF SWI +23 5225 } 5226 //PrintField(x2-2,YDISP+1,s,2,clfont,1); 5227 PrintText(x2,y,s,2,clfont,1,1,1,0, x2-x-2 ); \ ??DrawHeader_35: \ 00000620 080044E0 SUB R0,R4,R8 \ 00000624 020040E2 SUB R0,R0,#+2 \ 00000628 01002DE9 PUSH {R0} \ 0000062C 0230A0E3 MOV R3,#+2 \ 00000630 0520A0E1 MOV R2,R5 \ 00000634 0000A0E3 MOV R0,#+0 \ 00000638 01002DE9 PUSH {R0} \ 0000063C 0100A0E3 MOV R0,#+1 \ 00000640 01002DE9 PUSH {R0} \ 00000644 01002DE9 PUSH {R0} \ ??DrawHeader_29: \ 00000648 01002DE9 PUSH {R0} \ 0000064C 100597E5 LDR R0,[R7, #+1296] \ 00000650 01002DE9 PUSH {R0} \ 00000654 1710A0E3 MOV R1,#+23 \ 00000658 0400A0E1 MOV R0,R4 \ 0000065C ........ _BLF PrintText,??PrintText??rA \ 00000660 18D08DE2 ADD SP,SP,#+24 5228 } 5229 UnlockSched(); \ ??DrawHeader_27: \ 00000664 470100EF SWI +327 5230 mfree(s); \ 00000668 0500A0E1 MOV R0,R5 \ 0000066C 150000EF SWI +21 5231 mfree(ss); \ 00000670 0600A0E1 MOV R0,R6 \ 00000674 150000EF SWI +21 5232 #endif 5233 } \ 00000678 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return \ ??DrawHeader_5: \ 0000067C 00000000 DC8 "",+0,+0,+0 \ 00000680 5B565D00 DC8 "[V]" \ 00000684 5B535D00 DC8 "[S]" \ 00000688 ........ DC32 HeadFontClr \ 0000068C ........ DC32 HeadBackgrClr \ 00000690 ........ DC32 HEAD_STATUS \ 00000694 ........ DC32 `?` \ 00000698 ........ DC32 isShowUnread \ 0000069C ........ DC32 HEAD_XSTATUS \ 000006A0 ........ DC32 HEAD_PRIVATE \ 000006A4 ........ DC32 HEAD_PING \ 000006A8 ........ DC32 isShowA \ 000006AC ........ DC32 isShowV \ 000006B0 ........ DC32 isShowS \ 000006B4 ........ DC32 isShowR \ 000006B8 ........ DC32 `?` + 8 \ 000006BC ........ DC32 isShowCont 5234 \ In segment CODE, align 4, keep-with-next 5235 void DrawScrollBar(int cur,int total) 5236 { \ DrawScrollBar: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 5237 int scr_h=ScreenH()-1; 5238 int scr_w=ScreenW()-1; 5239 int y=scr_h-CLIST_Y1-FontH(clfont)-2; \ 00000004 ........ LDR R6,??DataTable212 ;; i_rc \ 00000008 0070A0E1 MOV R7,R0 \ 0000000C 0180A0E1 MOV R8,R1 \ 00000010 898100EF SWI +33161 \ 00000014 014040E2 SUB R4,R0,#+1 \ 00000018 888100EF SWI +33160 \ 0000001C 015040E2 SUB R5,R0,#+1 \ 00000020 100596E5 LDR R0,[R6, #+1296] \ 00000024 ........ _BLF FontH,??FontH??rA \ 00000028 000044E0 SUB R0,R4,R0 \ 0000002C 1C9040E2 SUB R9,R0,#+28 \ 00000030 100596E5 LDR R0,[R6, #+1296] \ 00000034 ........ _BLF FontH,??FontH??rA \ 00000038 000049E0 SUB R0,R9,R0 \ 0000003C 022040E2 SUB R2,R0,#+2 5240 int pos=y*cur/total; \ 00000040 970200E0 MUL R0,R7,R2 \ 00000044 0810A0E1 MOV R1,R8 \ 00000048 ........ _BLF ??div32_a,??rA??div32_a \ 0000004C 0170A0E1 MOV R7,R1 5241 int y2=y/total; \ 00000050 0200A0E1 MOV R0,R2 \ 00000054 0810A0E1 MOV R1,R8 \ 00000058 ........ _BLF ??div32_a,??rA??div32_a 5242 int i=0; 5243 5244 DrawLine(scr_w-2,CLIST_Y1,scr_w-2,scr_h-FontH(clfont)-2,1,clrBlack); \ 0000005C 100596E5 LDR R0,[R6, #+1296] \ 00000060 0180A0E1 MOV R8,R1 \ 00000064 ........ _BLF FontH,??FontH??rA \ 00000068 0090A0E1 MOV R9,R0 \ 0000006C 100596E5 LDR R0,[R6, #+1296] \ 00000070 ........ _BLF FontH,??FontH??rA \ 00000074 0420A0E3 MOV R2,#+4 \ 00000078 902D82E3 ORR R2,R2,#0x2400 \ 0000007C 06A082E0 ADD R10,R2,R6 \ 00000080 0A20A0E1 MOV R2,R10 \ 00000084 04002DE9 PUSH {R2} \ 00000088 0010A0E1 MOV R1,R0 \ 0000008C 020045E2 SUB R0,R5,#+2 \ 00000090 1C1081E2 ADD R1,R1,#+28 \ 00000094 0120A0E3 MOV R2,#+1 \ 00000098 04002DE9 PUSH {R2} \ 0000009C 092044E0 SUB R2,R4,R9 \ 000000A0 023042E2 SUB R3,R2,#+2 5245 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 100596E5 LDR R0,[R6, #+1296] \ 000000B4 ........ _BLF FontH,??FontH??rA \ 000000B8 0090A0E1 MOV R9,R0 \ 000000BC 100596E5 LDR R0,[R6, #+1296] \ 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 000087E0 ADD R0,R7,R0 \ 000000E8 091087E0 ADD R1,R7,R9 5246 5247 for(i=0;iw,img->h); \ 00000014 B200D4E1 LDRH R0,[R4, #+2] \ 00000018 01002DE9 PUSH {R0} \ 0000001C B030D4E1 LDRH R3,[R4, #+0] \ 00000020 04008DE2 ADD R0,SP,#+4 \ 00000024 330100EF SWI +307 5258 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 5259 SetColor(&drwobj,0,0/*pen,brush*/); \ 0000003C 0020A0E3 MOV R2,#+0 \ 00000040 0010A0E3 MOV R1,#+0 \ 00000044 0C008DE2 ADD R0,SP,#+12 \ 00000048 4B0100EF SWI +331 5260 DrawObject(&drwobj); \ 0000004C 0C008DE2 ADD R0,SP,#+12 \ 00000050 2A0100EF SWI +298 5261 return 1; \ 00000054 0100A0E3 MOV R0,#+1 \ 00000058 04D08DE2 ADD SP,SP,#+4 \ ??DrwImage_0: \ 0000005C 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 00000060 1080BDE8 POP {R4,PC} ;; return 5262 } 5263 /* 5264 #ifdef ELKA 5265 int LINE_MODE=0; 5266 int VIEW_MODE=1; 5267 #else 5268 int LINE_MODE=1; 5269 int VIEW_MODE=0; 5270 #endif 5271 */ 5272 \ In segment CODE, align 4, keep-with-next 5273 void MyRedraw() 5274 { 5275 //DirectRedrawGUI_ID(contactlist_menu_id); 5276 SMART_REDRAW(); \ MyRedraw: \ 00000000 ........ B SMART_REDRAW ;; tailcall 5277 } 5278 5279 \ In segment CODE, align 4, keep-with-next 5280 void DrawJustNow(RECT *rc,CLIST *cl) 5281 { \ DrawJustNow: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 F280D0E1 LDRSH R8,[R0, #+2] \ 00000008 F450D0E1 LDRSH R5,[R0, #+4] \ 0000000C 0160A0E1 MOV R6,R1 \ 00000010 F010D0E1 LDRSH R1,[R0, #+0] \ 00000014 ........ LDR R0,??DataTable212 ;; i_rc \ 00000018 783096E5 LDR R3,[R6, #+120] \ 0000001C 019081E2 ADD R9,R1,#+1 \ 00000020 101590E5 LDR R1,[R0, #+1296] \ 00000024 000053E3 CMP R3,#+0 \ 00000028 014081E2 ADD R4,R1,#+1 \ 0000002C 1010A0E3 MOV R1,#+16 \ 00000030 901D81E3 ORR R1,R1,#0x2400 \ 00000034 001081E0 ADD R1,R1,R0 \ 00000038 0020A0E3 MOV R2,#+0 5282 if(!cl->just_i) 5283 DrawText(rc->x+1,rc->y,rc->x2,cl->name,blue,clfont+1,0,0); \ 0000003C 1430A003 MOVEQ R3,#+20 5284 else 5285 DrawText(rc->x+1,rc->y,rc->x2,cl->name,clrRed,clfont+1,0,0); \ 00000040 0C30A013 MOVNE R3,#+12 \ 00000044 903D83E3 ORR R3,R3,#0x2400 \ 00000048 000083E0 ADD R0,R3,R0 \ 0000004C ........ _BLF SetFontColor,??SetFontColor??rA \ 00000050 090045E0 SUB R0,R5,R9 \ 00000054 01002DE9 PUSH {R0} \ 00000058 5E70A0E3 MOV R7,#+94 \ 0000005C 407F87E3 ORR R7,R7,#0x100 \ 00000060 0030A0E3 MOV R3,#+0 \ 00000064 0000A0E3 MOV R0,#+0 \ 00000068 01002DE9 PUSH {R0} \ 0000006C 01002DE9 PUSH {R0} \ 00000070 80002DE9 PUSH {R7} \ 00000074 142086E2 ADD R2,R6,#+20 \ 00000078 0100A0E3 MOV R0,#+1 \ 0000007C 01002DE9 PUSH {R0} \ 00000080 10002DE9 PUSH {R4} \ 00000084 0810A0E1 MOV R1,R8 \ 00000088 0900A0E1 MOV R0,R9 \ 0000008C ........ _BLF PrintText,??PrintText??rA \ 00000090 18D08DE2 ADD SP,SP,#+24 5286 5287 cl->just_i=!cl->just_i; \ 00000094 780096E5 LDR R0,[R6, #+120] \ 00000098 000050E3 CMP R0,#+0 \ 0000009C 0100A003 MOVEQ R0,#+1 \ 000000A0 0000A013 MOVNE R0,#+0 \ 000000A4 780086E5 STR R0,[R6, #+120] 5288 } \ 000000A8 F083BDE8 POP {R4-R9,PC} ;; return 5289 5290 \ In segment CODE, align 4, keep-with-next 5291 void log(char *name,int i,int j) 5292 { \ log: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 41DF4DE2 SUB SP,SP,#+260 5293 int hFile; 5294 unsigned int io_error = 0; \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C 00408DE5 STR R4,[SP, #+0] 5295 char text[255]; 5296 sprintf(text,"%s - %d(%d)",name,i,j); \ 00000010 94409FE5 LDR R4,??log_0+0x4 ;; `?` \ 00000014 04002DE9 PUSH {R2} \ 00000018 0130A0E1 MOV R3,R1 \ 0000001C 0410A0E1 MOV R1,R4 \ 00000020 0020A0E1 MOV R2,R0 \ 00000024 08008DE2 ADD R0,SP,#+8 \ 00000028 160000EF SWI +22 5297 hFile = fopen("4:\\nata.txt",A_ReadWrite + A_Create + A_Append,P_READ+P_WRITE, &io_error); \ 0000002C 04308DE2 ADD R3,SP,#+4 \ 00000030 602FA0E3 MOV R2,#+384 \ 00000034 761042E2 SUB R1,R2,#+118 \ 00000038 0C0084E2 ADD R0,R4,#+12 \ 0000003C 0A0000EF SWI +10 \ 00000040 0050A0E1 MOV R5,R0 5298 if(hFile!=-1) \ 00000044 010075E3 CMN R5,#+1 \ 00000048 04D08DE2 ADD SP,SP,#+4 \ 0000004C 1000000A BEQ ??log_1 5299 { 5300 fwrite(hFile, text, strlen(text), &io_error); \ 00000050 04008DE2 ADD R0,SP,#+4 \ 00000054 1B0000EF SWI +27 \ 00000058 0D30A0E1 MOV R3,SP \ 0000005C 0020A0E1 MOV R2,R0 \ 00000060 04108DE2 ADD R1,SP,#+4 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 0C0000EF SWI +12 5301 fwrite(hFile, "\r\n", 2, &io_error); \ 0000006C 0D30A0E1 MOV R3,SP \ 00000070 0220A0E3 MOV R2,#+2 \ 00000074 0B1F8FE2 ADR R1,??log_0 ;; "\r\n" \ 00000078 0500A0E1 MOV R0,R5 \ 0000007C 0C0000EF SWI +12 5302 fclose(hFile, &io_error); \ 00000080 0D10A0E1 MOV R1,SP \ 00000084 0500A0E1 MOV R0,R5 \ 00000088 0D0000EF SWI +13 \ 0000008C 41DF8DE2 ADD SP,SP,#+260 \ 00000090 3080BDE8 POP {R4,R5,PC} 5303 } 5304 else 5305 ShowMSG(1,(int)"Error!"); \ ??log_1: \ 00000094 181084E2 ADD R1,R4,#+24 \ 00000098 0100A0E3 MOV R0,#+1 \ 0000009C 480100EF SWI +328 5306 // mfree(text); 5307 } \ 000000A0 41DF8DE2 ADD SP,SP,#+260 \ 000000A4 3080BDE8 POP {R4,R5,PC} ;; return \ ??log_0: \ 000000A8 0D0A0000 DC8 "\r\n",+0 \ 000000AC ........ DC32 `?` 5308 5309 /* 5310 typedef struct 5311 { 5312 int type; //0-доставлен, 1-отправлен, 2-не отправлено 5313 int count;//кол-во не доставленных 5314 }ACKED; 5315 */ 5316 #define SENDED 0 5317 #define SEND 1 5318 #define NOTSEND 2 \ In segment CODE, align 4, keep-with-next 5319 ACKED *GetAck(CLIST *t) 5320 { \ GetAck: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 5321 if(!ShowProcessSend) return 0; \ 00000008 ........ LDR R0,??DataTable221 ;; ShowProcessSend \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 0100001A BNE ??GetAck_0 \ ??GetAck_1: \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 1080BDE8 POP {R4,PC} 5322 if(!t) return 0; \ ??GetAck_0: \ 00000020 000054E3 CMP R4,#+0 \ 00000024 FBFFFF0A BEQ ??GetAck_1 5323 if(!t->isactive) return 0; \ 00000028 AC0094E5 LDR R0,[R4, #+172] \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 1080BD08 POPEQ {R4,PC} 5324 if(t->state==0xFFFF) return 0; \ 00000034 B405D4E1 LDRH R0,[R4, #+84] \ 00000038 FF10A0E3 MOV R1,#+255 \ 0000003C FF1C81E3 ORR R1,R1,#0xFF00 \ 00000040 010050E1 CMP R0,R1 \ 00000044 F3FFFF0A BEQ ??GetAck_1 5325 5326 ACKED *ack=malloc(sizeof(ACKED)); \ 00000048 0800A0E3 MOV R0,#+8 \ 0000004C 140000EF SWI +20 5327 ack->type=0; \ 00000050 0010A0E3 MOV R1,#+0 \ 00000054 001080E5 STR R1,[R0, #+0] 5328 ack->count=0; \ 00000058 041080E5 STR R1,[R0, #+4] 5329 LOGQ *lp; 5330 lp=t->log; \ 0000005C A02094E5 LDR R2,[R4, #+160] \ 00000060 000052E3 CMP R2,#+0 \ 00000064 1080BD08 POPEQ {R4,PC} 5331 5332 while(lp) 5333 { 5334 if(lp->acked)//Если отправлен или доставлен \ ??GetAck_2: \ 00000068 043092E5 LDR R3,[R2, #+4] \ 0000006C 000053E3 CMP R3,#+0 \ 00000070 0300000A BEQ ??GetAck_3 5335 { 5336 if (lp->acked==1)//отправлен,но не доставлен \ 00000074 010053E3 CMP R3,#+1 \ 00000078 0500000A BEQ ??GetAck_4 5337 { 5338 ack->type = SEND; 5339 ack->count++; 5340 } 5341 else 5342 ack->type = SENDED;//доставлен(прозрачный) \ 0000007C 001080E5 STR R1,[R0, #+0] \ 00000080 070000EA B ??GetAck_5 5343 } 5344 else 5345 if (lp->ID!=0xFFFFFFFF)//не доставлено \ ??GetAck_3: \ 00000084 083092E5 LDR R3,[R2, #+8] \ 00000088 010073E3 CMN R3,#+1 \ 0000008C 0400000A BEQ ??GetAck_5 5346 { 5347 ack->type = NOTSEND; \ 00000090 0230A0E3 MOV R3,#+2 \ ??GetAck_4: \ 00000094 003080E5 STR R3,[R0, #+0] 5348 ack->count++; \ 00000098 043090E5 LDR R3,[R0, #+4] \ 0000009C 013083E2 ADD R3,R3,#+1 \ 000000A0 043080E5 STR R3,[R0, #+4] 5349 } 5350 lp=lp->next; \ ??GetAck_5: \ 000000A4 002092E5 LDR R2,[R2, #+0] 5351 } \ 000000A8 000052E3 CMP R2,#+0 \ 000000AC EDFFFF1A BNE ??GetAck_2 5352 //if(ack->type==0) return 0; 5353 //if(ack->count==0) return 0; 5354 // log(t->name,ack->type,ack->count); 5355 return ack; \ 000000B0 1080BDE8 POP {R4,PC} ;; return 5356 } 5357 5358 int clstartItem=0; \ In segment DATA_Z, align 4, align-sorted 5359 int BlinkMSG=0; \ BlinkMSG: \ 00000000 DS8 4 \ In segment CODE, align 4, keep-with-next 5360 void DrawList() 5361 { 5362 //Тут пиздец,и мне по хуй,я разбираюсь в этом и знаю что оно работает как нужно. 5363 5364 if(isSystemFont) clfont=100+pngFont; \ DrawList: \ 00000000 ........ LDR R1,??DataTable214 ;; isSystemFont \ 00000004 F04F2DE9 PUSH {R4-R11,LR} \ 00000008 88D04DE2 SUB SP,SP,#+136 \ 0000000C 001091E5 LDR R1,[R1, #+0] \ 00000010 28108DE5 STR R1,[SP, #+40] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0300000A BEQ ??DrawList_0 \ 0000001C ........ LDR R0,??DataTable215 ;; pngFont \ 00000020 000090E5 LDR R0,[R0, #+0] \ 00000024 640080E2 ADD R0,R0,#+100 \ 00000028 000000EA B ??DrawList_1 5365 else clfont=2; \ ??DrawList_0: \ 0000002C 0200A0E3 MOV R0,#+2 \ ??DrawList_1: \ 00000030 ........ LDR R5,??DataTable228 ;; i_rc \ 00000034 100585E5 STR R0,[R5, #+1296] 5366 if(!cltop) return; \ 00000038 B00495E5 LDR R0,[R5, #+1200] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 AC02000A BEQ ??DrawList_2 5367 5368 // int font_y = FontH(clfont)+2;//16+2 5369 5370 int font_y = 0; 5371 if(FontH(clfont) < icons[IS_ONLINE]->h) font_y = icons[IS_ONLINE]->h+2;//Если иконки выше чем фонт,то по высоте иконок рисуемся \ 00000044 100595E5 LDR R0,[R5, #+1296] \ 00000048 ........ _BLF FontH,??FontH??rA \ 0000004C 4C1095E5 LDR R1,[R5, #+76] \ 00000050 B220D1E1 LDRH R2,[R1, #+2] \ 00000054 020050E1 CMP R0,R2 \ 00000058 021082B2 ADDLT R1,R2,#+2 \ 0000005C 10108DB5 STRLT R1,[SP, #+16] \ 00000060 030000BA BLT ??DrawList_3 5372 else font_y = FontH(clfont)+2; \ 00000064 100595E5 LDR R0,[R5, #+1296] \ 00000068 ........ _BLF FontH,??FontH??rA \ 0000006C 020080E2 ADD R0,R0,#+2 \ 00000070 10008DE5 STR R0,[SP, #+16] 5373 5374 int scr_w=ScreenW()-1; \ ??DrawList_3: \ 00000074 888100EF SWI +33160 \ 00000078 010040E2 SUB R0,R0,#+1 \ 0000007C 20008DE5 STR R0,[SP, #+32] 5375 int scr_h=ScreenH()-1; \ 00000080 898100EF SWI +33161 5376 int y2; 5377 5378 //__root const unsigned int SOFT_MODE = 0; 5379 // __root const CFG_CBOX_ITEM cfgcboxI_8[3]={"Ничего,""Софты","Инфу"}; 5380 int SoftH=0; 5381 5382 if(SOFT_MODE==1) SoftH=FontH(clfont);//если показывать софты \ 00000084 ........ LDR R1,??DataTable229 ;; SOFT_MODE \ 00000088 0070A0E3 MOV R7,#+0 \ 0000008C 001091E5 LDR R1,[R1, #+0] \ 00000090 2C108DE5 STR R1,[SP, #+44] \ 00000094 010051E3 CMP R1,#+1 \ 00000098 0300001A BNE ??DrawList_4 \ 0000009C 100595E5 LDR R0,[R5, #+1296] \ 000000A0 ........ _BLF FontH,??FontH??rA \ 000000A4 0070A0E1 MOV R7,R0 \ 000000A8 040000EA B ??DrawList_5 5383 else if(SOFT_MODE==2) SoftH=FontH(clfont)*2;//если показывать инфу \ ??DrawList_4: \ 000000AC 020051E3 CMP R1,#+2 \ 000000B0 0200001A BNE ??DrawList_5 \ 000000B4 100595E5 LDR R0,[R5, #+1296] \ 000000B8 ........ _BLF FontH,??FontH??rA \ 000000BC 8070A0E1 LSL R7,R0,#+1 5384 5385 if(VIEW_MODE) \ ??DrawList_5: \ 000000C0 ........ LDR R0,??DataTable218 ;; VIEW_MODE \ 000000C4 006090E5 LDR R6,[R0, #+0] \ 000000C8 000056E3 CMP R6,#+0 \ 000000CC 0C00000A BEQ ??DrawList_6 5386 itemFromDisp = (sdiv(font_y,ScreenH()-CLIST_Y1-SoftH-2)*2)-1;//((font_y/(ScreenH()-CLIST_Y1-FontH(clfont)-2))*2)-1; \ 000000D0 898100EF SWI +33161 \ 000000D4 0080A0E1 MOV R8,R0 \ 000000D8 100595E5 LDR R0,[R5, #+1296] \ 000000DC ........ _BLF FontH,??FontH??rA \ 000000E0 000048E0 SUB R0,R8,R0 \ 000000E4 1C0040E2 SUB R0,R0,#+28 \ 000000E8 070040E0 SUB R0,R0,R7 \ 000000EC 021040E2 SUB R1,R0,#+2 \ 000000F0 10009DE5 LDR R0,[SP, #+16] \ 000000F4 B80000EF SWI +184 \ 000000F8 8000A0E1 LSL R0,R0,#+1 \ 000000FC 010040E2 SUB R0,R0,#+1 \ 00000100 090000EA B ??DrawList_7 5387 else 5388 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-SoftH-2); \ ??DrawList_6: \ 00000104 898100EF SWI +33161 \ 00000108 0080A0E1 MOV R8,R0 \ 0000010C 100595E5 LDR R0,[R5, #+1296] \ 00000110 ........ _BLF FontH,??FontH??rA \ 00000114 000048E0 SUB R0,R8,R0 \ 00000118 1C0040E2 SUB R0,R0,#+28 \ 0000011C 070040E0 SUB R0,R0,R7 \ 00000120 021040E2 SUB R1,R0,#+2 \ 00000124 10009DE5 LDR R0,[SP, #+16] \ 00000128 B80000EF SWI +184 \ ??DrawList_7: \ 0000012C 180585E5 STR R0,[R5, #+1304] 5389 5390 CLIST *cl; 5391 int i=0; \ 00000130 0070A0E3 MOV R7,#+0 \ 00000134 0000A0E3 MOV R0,#+0 \ 00000138 240585E5 STR R0,[R5, #+1316] 5392 int start_y; 5393 int x=0; 5394 RECT rc; 5395 int icon; 5396 collum=0; 5397 // int clfont=108; 5398 char *name=malloc(128); \ 0000013C 8000A0E3 MOV R0,#+128 \ 00000140 140000EF SWI +20 \ 00000144 14008DE5 STR R0,[SP, #+20] 5399 int yy=0; \ 00000148 0710A0E1 MOV R1,R7 \ 0000014C 30108DE5 STR R1,[SP, #+48] 5400 int drawFont = clfont; 5401 5402 ACKED *ack; 5403 DYNPNGICONLIST *xs; ^ Warning[Pe177]: variable "xs" was declared but never referenced 5404 5405 LockSched(); \ 00000150 460100EF SWI +326 5406 totalItems = CountContacts(); //TotalBmk(); \ 00000154 ........ _BLF CountContacts,??CountContacts??rA 5407 5408 if(LINE_MODE) itemFromDisp--; \ 00000158 A0199FE5 LDR R1,??DrawList_8 ;; LINE_MODE \ 0000015C 1C0585E5 STR R0,[R5, #+1308] \ 00000160 001091E5 LDR R1,[R1, #+0] \ 00000164 34108DE5 STR R1,[SP, #+52] \ 00000168 000051E3 CMP R1,#+0 \ 0000016C 18059515 LDRNE R0,[R5, #+1304] \ 00000170 01004012 SUBNE R0,R0,#+1 \ 00000174 18058515 STRNE R0,[R5, #+1304] 5409 5410 while( i < ((VIEW_MODE!=0)?(totalItems):(itemFromDisp)) ) \ ??DrawList_9: \ 00000178 180595E5 LDR R0,[R5, #+1304] \ 0000017C 000056E3 CMP R6,#+0 \ 00000180 1C159515 LDRNE R1,[R5, #+1308] \ 00000184 0010A001 MOVEQ R1,R0 \ 00000188 010057E1 CMP R7,R1 \ 0000018C 560200AA BGE ??DrawList_10 5411 { 5412 if(!VIEW_MODE) goto next;//если не два столбика то пропускаем условие \ 00000190 000056E3 CMP R6,#+0 \ 00000194 1300000A BEQ ??DrawList_11 5413 if( (i>=(curpage-1)*itemFromDisp) && (i<=itemFromDisp*curpage) )//если те итемы который нужно выводить на экран со страници curpage \ 00000198 201595E5 LDR R1,[R5, #+1312] \ 0000019C 012041E2 SUB R2,R1,#+1 \ 000001A0 900202E0 MUL R2,R0,R2 \ 000001A4 020057E1 CMP R7,R2 \ 000001A8 910000A0 MULGE R0,R1,R0 \ 000001AC 070050A1 CMPGE R0,R7 \ 000001B0 450200BA BLT ??DrawList_12 \ 000001B4 0000A0E3 MOV R0,#+0 \ ??DrawList_13: \ 000001B8 070080E0 ADD R0,R0,R7 \ 000001BC ........ _BLF FindContactByN,??FindContactByN??rA \ 000001C0 0080B0E1 MOVS R8,R0 5414 { 5415 next: 5416 cl=FindContactByN( i + ((VIEW_MODE==0)?(clstartItem):(0)) ); 5417 if(!cl) return; \ 000001C4 4B02000A BEQ ??DrawList_2 5418 if(cl)//если такой есть то рисуем его 5419 { 5420 start_y=0; 5421 if(LINE_MODE)//если в две линии \ 000001C8 34009DE5 LDR R0,[SP, #+52] \ 000001CC 0090A0E3 MOV R9,#+0 \ 000001D0 000050E3 CMP R0,#+0 \ 000001D4 0C00000A BEQ ??DrawList_14 5422 { 5423 if(i + ((VIEW_MODE==0)?(clstartItem):(0)) > curpos ) start_y+=font_y+3; \ 000001D8 000056E3 CMP R6,#+0 \ 000001DC 30059505 LDREQ R0,[R5, #+1328] \ 000001E0 0000A013 MOVNE R0,#+0 \ 000001E4 010000EA B ??DrawList_15 \ ??DrawList_11: \ 000001E8 300595E5 LDR R0,[R5, #+1328] \ 000001EC F1FFFFEA B ??DrawList_13 \ ??DrawList_15: \ 000001F0 041595E5 LDR R1,[R5, #+1284] \ 000001F4 070080E0 ADD R0,R0,R7 \ 000001F8 000051E1 CMP R1,R0 \ 000001FC 10009DB5 LDRLT R0,[SP, #+16] 5424 y2=2; \ 00000200 0210A0E3 MOV R1,#+2 \ 00000204 039080B2 ADDLT R9,R0,#+3 \ 00000208 000000EA B ??DrawList_16 5425 } 5426 else y2=1; \ ??DrawList_14: \ 0000020C 0110A0E3 MOV R1,#+1 5427 5428 if(VIEW_MODE)//если в две колонки \ ??DrawList_16: \ 00000210 10309DE5 LDR R3,[SP, #+16] \ 00000214 20209DE5 LDR R2,[SP, #+32] \ 00000218 100595E5 LDR R0,[R5, #+1296] \ 0000021C 910303E0 MUL R3,R1,R3 \ 00000220 05A042E2 SUB R10,R2,#+5 \ 00000224 08308DE5 STR R3,[SP, #+8] \ 00000228 000056E3 CMP R6,#+0 \ 0000022C 2700000A BEQ ??DrawList_17 5429 { 5430 if(!collum)//если первая колонка \ 00000230 A21F82E0 ADD R1,R2,R2, LSR #+31 \ 00000234 C1B0A0E1 ASR R11,R1,#+1 \ 00000238 241595E5 LDR R1,[R5, #+1316] \ 0000023C 000051E3 CMP R1,#+0 \ 00000240 1300001A BNE ??DrawList_18 5431 { 5432 start_y += (CLIST_Y1 + (((i - (curpage-1)*itemFromDisp)*font_y)/2) ); //определяем начальное смещение по у \ 00000244 ........ _BLF FontH,??FontH??rA \ 00000248 201595E5 LDR R1,[R5, #+1312] \ 0000024C 182595E5 LDR R2,[R5, #+1304] \ 00000250 011041E2 SUB R1,R1,#+1 \ 00000254 920101E0 MUL R1,R2,R1 \ 00000258 10209DE5 LDR R2,[SP, #+16] \ 0000025C 011047E0 SUB R1,R7,R1 \ 00000260 920101E0 MUL R1,R2,R1 5433 yy=start_y; 5434 StoreXYXYtoRECT(&rc, 1, start_y, (scr_w/2)-5, start_y+(font_y*y2)); \ 00000264 05304BE2 SUB R3,R11,#+5 \ 00000268 A11F81E0 ADD R1,R1,R1, LSR #+31 \ 0000026C C10080E0 ADD R0,R0,R1, ASR #+1 \ 00000270 1C0080E2 ADD R0,R0,#+28 \ 00000274 099080E0 ADD R9,R0,R9 \ 00000278 30908DE5 STR R9,[SP, #+48] \ 0000027C 08009DE5 LDR R0,[SP, #+8] \ 00000280 0920A0E1 MOV R2,R9 \ 00000284 090080E0 ADD R0,R0,R9 \ 00000288 01002DE9 PUSH {R0} \ 0000028C 0110A0E3 MOV R1,#+1 \ 00000290 050000EA B ??DrawList_19 5435 } 5436 else//если вторая 5437 { 5438 StoreXYXYtoRECT(&rc, (scr_w/2)-4, yy, scr_w-5, yy+(font_y*y2)); \ ??DrawList_18: \ 00000294 30009DE5 LDR R0,[SP, #+48] \ 00000298 04104BE2 SUB R1,R11,#+4 \ 0000029C 000083E0 ADD R0,R3,R0 \ 000002A0 01002DE9 PUSH {R0} \ 000002A4 34209DE5 LDR R2,[SP, #+52] \ 000002A8 0A30A0E1 MOV R3,R10 \ ??DrawList_19: \ 000002AC 04008DE2 ADD R0,SP,#+4 \ 000002B0 340100EF SWI +308 \ 000002B4 04D08DE2 ADD SP,SP,#+4 5439 } 5440 collum=!collum; \ 000002B8 240595E5 LDR R0,[R5, #+1316] \ 000002BC 000050E3 CMP R0,#+0 \ 000002C0 0100A003 MOVEQ R0,#+1 \ 000002C4 0000A013 MOVNE R0,#+0 \ 000002C8 240585E5 STR R0,[R5, #+1316] \ 000002CC 0D0000EA B ??DrawList_20 5441 } 5442 else 5443 { 5444 start_y += (CLIST_Y1 + 2 + (i/* - (curpage-1)*itemFromDisp*/)*font_y); \ ??DrawList_17: \ 000002D0 10B09DE5 LDR R11,[SP, #+16] \ 000002D4 ........ _BLF FontH,??FontH??rA \ 000002D8 9B0720E0 MLA R0,R11,R7,R0 5445 StoreXYXYtoRECT(&rc,2,start_y,scr_w-5,start_y+(font_y*y2)); \ 000002DC 0A30A0E1 MOV R3,R10 \ 000002E0 1E0080E2 ADD R0,R0,#+30 \ 000002E4 099080E0 ADD R9,R0,R9 \ 000002E8 08009DE5 LDR R0,[SP, #+8] \ 000002EC 0920A0E1 MOV R2,R9 \ 000002F0 090080E0 ADD R0,R0,R9 \ 000002F4 01002DE9 PUSH {R0} \ 000002F8 0210A0E3 MOV R1,#+2 \ 000002FC 04008DE2 ADD R0,SP,#+4 \ 00000300 340100EF SWI +308 \ 00000304 04D08DE2 ADD SP,SP,#+4 5446 } 5447 5448 icon=GetIconIndex(cl); \ ??DrawList_20: \ 00000308 0800A0E1 MOV R0,R8 \ 0000030C ........ BL GetIconIndex \ 00000310 00B0A0E1 MOV R11,R0 5449 if (icon!=IS_GROUP)//если не иконка группы \ 00000314 1000A0E3 MOV R0,#+16 \ 00000318 900D80E3 ORR R0,R0,#0x2400 \ 0000031C 05A080E0 ADD R10,R0,R5 \ 00000320 0F005BE3 CMP R11,#+15 \ 00000324 0700000A BEQ ??DrawList_21 5450 { 5451 ack=GetAck(cl);//Обработка процесса отправки \ 00000328 0800A0E1 MOV R0,R8 \ 0000032C ........ BL GetAck 5452 // log(cl->name,ack->type,ack->count); 5453 sprintf(name,percent_s,cl->name); \ 00000330 ........ LDR R1,??DataTable220 ;; Canvas + 8 \ 00000334 0040A0E1 MOV R4,R0 \ 00000338 14009DE5 LDR R0,[SP, #+20] \ 0000033C 142088E2 ADD R2,R8,#+20 \ 00000340 160000EF SWI +22 \ 00000344 320000EA B ??DrawList_22 5454 } 5455 else 5456 { 5457 int onlinetotal[2]; 5458 GetOnTotalContact(cl->group,onlinetotal); \ ??DrawList_21: \ 00000348 100098E5 LDR R0,[R8, #+16] \ 0000034C 40108DE2 ADD R1,SP,#+64 \ 00000350 ........ BL GetOnTotalContact 5459 if(!VIEW_MODE)//если не в два столбца \ 00000354 000056E3 CMP R6,#+0 \ 00000358 1D00001A BNE ??DrawList_23 5460 { 5461 char *s=malloc(32); \ 0000035C 2000A0E3 MOV R0,#+32 \ 00000360 140000EF SWI +20 5462 sprintf(name,percent_s,cl->name); \ 00000364 ........ LDR R1,??DataTable220 ;; Canvas + 8 \ 00000368 08008DE5 STR R0,[SP, #+8] \ 0000036C 14009DE5 LDR R0,[SP, #+20] \ 00000370 142088E2 ADD R2,R8,#+20 \ 00000374 160000EF SWI +22 5463 sprintf(s,"(%d/%d)",onlinetotal[0],onlinetotal[1]); \ 00000378 44309DE5 LDR R3,[SP, #+68] \ 0000037C 40209DE5 LDR R2,[SP, #+64] \ 00000380 7C179FE5 LDR R1,??DrawList_8+0x4 ;; Canvas + 532 \ 00000384 08009DE5 LDR R0,[SP, #+8] \ 00000388 160000EF SWI +22 5464 SetFontColor((char*)GroupClr,transparent,0); \ 0000038C 74079FE5 LDR R0,??DrawList_8+0x8 ;; GroupClr \ 00000390 0020A0E3 MOV R2,#+0 \ 00000394 0A10A0E1 MOV R1,R10 \ 00000398 ........ _BLF SetFontColor,??SetFontColor??rA 5465 PrintField(scr_w-7,start_y,s,2,clfont,1);//capacity in header \ 0000039C 0100A0E3 MOV R0,#+1 \ 000003A0 01002DE9 PUSH {R0} \ 000003A4 100595E5 LDR R0,[R5, #+1296] \ 000003A8 0230A0E3 MOV R3,#+2 \ 000003AC 01002DE9 PUSH {R0} \ 000003B0 10209DE5 LDR R2,[SP, #+16] \ 000003B4 28009DE5 LDR R0,[SP, #+40] \ 000003B8 0910A0E1 MOV R1,R9 \ 000003BC 070040E2 SUB R0,R0,#+7 \ 000003C0 ........ _BLF PrintField,??PrintField??rA 5466 mfree(s); \ 000003C4 10009DE5 LDR R0,[SP, #+16] \ 000003C8 150000EF SWI +21 \ 000003CC 08D08DE2 ADD SP,SP,#+8 \ 000003D0 0C0000EA B ??DrawList_24 5467 } 5468 else 5469 sprintf(name,"%s%c%c(%d/%d)",cl->name,0xE01D,0xE012,onlinetotal[0],onlinetotal[1]); \ ??DrawList_23: \ 000003D4 44009DE5 LDR R0,[SP, #+68] \ 000003D8 2C179FE5 LDR R1,??DrawList_8+0xC ;; Canvas + 540 \ 000003DC 01002DE9 PUSH {R0} \ 000003E0 44009DE5 LDR R0,[SP, #+68] \ 000003E4 142088E2 ADD R2,R8,#+20 \ 000003E8 01002DE9 PUSH {R0} \ 000003EC 1200A0E3 MOV R0,#+18 \ 000003F0 E00C80E3 ORR R0,R0,#0xE000 \ 000003F4 01002DE9 PUSH {R0} \ 000003F8 0B3080E2 ADD R3,R0,#+11 \ 000003FC 20009DE5 LDR R0,[SP, #+32] \ 00000400 160000EF SWI +22 \ 00000404 0CD08DE2 ADD SP,SP,#+12 5470 if (cl->state) icon++; //Модификация иконки группы \ ??DrawList_24: \ 00000408 B405D8E1 LDRH R0,[R8, #+84] \ 0000040C 000050E3 CMP R0,#+0 \ 00000410 01B08B12 ADDNE R11,R11,#+1 5471 } 5472 5473 // DrawImg(rc.x,rc.y,NumStatusToIconBar+icon);//status 5474 if(icons[icon])//вдруг иконки нет \ ??DrawList_22: \ 00000414 0B9185E0 ADD R9,R5,R11, LSL #+2 \ 00000418 200099E5 LDR R0,[R9, #+32] \ 0000041C 000050E3 CMP R0,#+0 \ 00000420 0F00000A BEQ ??DrawList_25 5475 { 5476 /* if(icon==IS_MSG) 5477 { 5478 if(!BlinkMSG) 5479 DrwImage(icons[((cl->just_i)?(IS_OFFLINE):(icon))],rc.x,rc.y);//draw imghdr! 5480 } 5481 else*/ 5482 DrwImage(icons[((cl->just_i)?(IS_OFFLINE):(icon))],rc.x,rc.y+1);//draw imghdr! \ 00000424 F210DDE1 LDRSH R1,[SP, #+2] \ 00000428 780098E5 LDR R0,[R8, #+120] \ 0000042C 000050E3 CMP R0,#+0 \ 00000430 0000A013 MOVNE R0,#+0 \ 00000434 0B00A001 MOVEQ R0,R11 \ 00000438 012081E2 ADD R2,R1,#+1 \ 0000043C F010DDE1 LDRSH R1,[SP, #+0] \ 00000440 000185E0 ADD R0,R5,R0, LSL #+2 \ 00000444 200090E5 LDR R0,[R0, #+32] \ 00000448 ........ BL DrwImage 5483 rc.x+=icons[icon]->w+2;// + смещение по х \ 0000044C 202099E5 LDR R2,[R9, #+32] \ 00000450 F010DDE1 LDRSH R1,[SP, #+0] \ 00000454 F020D2E1 LDRSH R2,[R2, #+0] \ 00000458 022082E2 ADD R2,R2,#+2 \ 0000045C 011082E0 ADD R1,R2,R1 \ 00000460 B010CDE1 STRH R1,[SP, #+0] 5484 /* if(icon==IS_MSG) 5485 BlinkMSG=!BlinkMSG; 5486 else 5487 BlinkMSG=0;*/ 5488 } 5489 5490 if(cl->unread_msg!=0) \ ??DrawList_25: \ 00000464 942098E5 LDR R2,[R8, #+148] \ 00000468 5E90A0E3 MOV R9,#+94 \ 0000046C 409F89E3 ORR R9,R9,#0x100 \ 00000470 000052E3 CMP R2,#+0 \ 00000474 3000000A BEQ ??DrawList_26 5491 { 5492 char p[3]; 5493 sprintf(p,_d,cl->unread_msg); \ 00000478 90169FE5 LDR R1,??DrawList_8+0x10 ;; Canvas + 14 \ 0000047C 3B008DE2 ADD R0,SP,#+59 \ 00000480 160000EF SWI +22 5494 DrawText(rc.x,rc.y,rc.x2,p,(cl->isactive!=0)?(clrRed):(clrBlack),(isSystemFont)?clfont:((cl->isactive!=0)?(clfont+1):(clfont)),0,0); \ 00000484 28009DE5 LDR R0,[SP, #+40] \ 00000488 101595E5 LDR R1,[R5, #+1296] \ 0000048C 000050E3 CMP R0,#+0 \ 00000490 AC0098E5 LDR R0,[R8, #+172] \ 00000494 3700000A BEQ ??DrawList_27 \ 00000498 000050E3 CMP R0,#+0 \ 0000049C 3800001A BNE ??DrawList_28 \ ??DrawList_29: \ 000004A0 0400A0E3 MOV R0,#+4 \ ??DrawList_30: \ 000004A4 08108DE5 STR R1,[SP, #+8] \ 000004A8 F420DDE1 LDRSH R2,[SP, #+4] \ 000004AC 900D80E3 ORR R0,R0,#0x2400 \ 000004B0 050080E0 ADD R0,R0,R5 \ 000004B4 0C208DE5 STR R2,[SP, #+12] \ 000004B8 F220DDE1 LDRSH R2,[SP, #+2] \ 000004BC 0A10A0E1 MOV R1,R10 \ 000004C0 24208DE5 STR R2,[SP, #+36] \ 000004C4 F020DDE1 LDRSH R2,[SP, #+0] \ 000004C8 1C208DE5 STR R2,[SP, #+28] \ 000004CC 0020A0E3 MOV R2,#+0 \ 000004D0 ........ _BLF SetFontColor,??SetFontColor??rA \ 000004D4 0C009DE5 LDR R0,[SP, #+12] \ 000004D8 1C109DE5 LDR R1,[SP, #+28] \ 000004DC 0030A0E3 MOV R3,#+0 \ 000004E0 010040E0 SUB R0,R0,R1 \ 000004E4 01002DE9 PUSH {R0} \ 000004E8 0000A0E3 MOV R0,#+0 \ 000004EC 01002DE9 PUSH {R0} \ 000004F0 01002DE9 PUSH {R0} \ 000004F4 0900A0E1 MOV R0,R9 \ 000004F8 01002DE9 PUSH {R0} \ 000004FC 0100A0E3 MOV R0,#+1 \ 00000500 01002DE9 PUSH {R0} \ 00000504 1C009DE5 LDR R0,[SP, #+28] \ 00000508 01002DE9 PUSH {R0} \ 0000050C 3C109DE5 LDR R1,[SP, #+60] \ 00000510 34009DE5 LDR R0,[SP, #+52] \ 00000514 53208DE2 ADD R2,SP,#+83 \ 00000518 ........ _BLF PrintText,??PrintText??rA 5495 rc.x+=GetWidth(rc.x,rc.y)+2; \ 0000051C FA11DDE1 LDRSH R1,[SP, #+26] \ 00000520 F801DDE1 LDRSH R0,[SP, #+24] \ 00000524 ........ _BLF GetWidth,??GetWidth??rA \ 00000528 F821DDE1 LDRSH R2,[SP, #+24] \ 0000052C 020080E2 ADD R0,R0,#+2 \ 00000530 020080E0 ADD R0,R0,R2 \ 00000534 B801CDE1 STRH R0,[SP, #+24] \ 00000538 18D08DE2 ADD SP,SP,#+24 5496 } 5497 5498 if(ack && ack->count && (ShowProcessSend==1 || ShowProcessSend==3)) \ ??DrawList_26: \ 0000053C ........ LDR R1,??DataTable221 ;; ShowProcessSend \ 00000540 000054E3 CMP R4,#+0 \ 00000544 001091E5 LDR R1,[R1, #+0] \ 00000548 18108DE5 STR R1,[SP, #+24] \ 0000054C 04209415 LDRNE R2,[R4, #+4] \ 00000550 00005213 CMPNE R2,#+0 \ 00000554 3B00000A BEQ ??DrawList_31 \ 00000558 010051E3 CMP R1,#+1 \ 0000055C 03005113 CMPNE R1,#+3 \ 00000560 3800001A BNE ??DrawList_31 5499 { 5500 char p[3]; 5501 if(cl->unread_msg) \ 00000564 940098E5 LDR R0,[R8, #+148] \ 00000568 000050E3 CMP R0,#+0 \ 0000056C 9C159F05 LDREQ R1,??DrawList_8+0x10 ;; Canvas + 14 5502 sprintf(p," %d",ack->count); \ 00000570 C61F8F12 ADRNE R1,??DrawList_32 ;; " %d" \ 00000574 040000EA B ??DrawList_33 \ ??DrawList_27: \ 00000578 000050E3 CMP R0,#+0 \ 0000057C C7FFFF0A BEQ ??DrawList_29 \ 00000580 011081E2 ADD R1,R1,#+1 \ ??DrawList_28: \ 00000584 0C00A0E3 MOV R0,#+12 \ 00000588 C5FFFFEA B ??DrawList_30 \ ??DrawList_33: \ 0000058C 38008DE2 ADD R0,SP,#+56 \ 00000590 160000EF SWI +22 5503 else 5504 sprintf(p,_d,ack->count); 5505 DrawText(rc.x,rc.y,rc.x2,p,(ack->type==1)?((char*)SendClr):((ack->type==NOTSEND)?((char*)UnAckedClr):0),clfont+1,0,0);//(cl->ack->type==1)?((char*)UnAckedClr):((char*)SendClr) \ 00000594 000094E5 LDR R0,[R4, #+0] \ 00000598 010050E3 CMP R0,#+1 \ 0000059C 70059F05 LDREQ R0,??DrawList_8+0x14 ;; SendClr \ 000005A0 0200000A BEQ ??DrawList_34 \ 000005A4 020050E3 CMP R0,#+2 \ 000005A8 68059F05 LDREQ R0,??DrawList_8+0x18 ;; UnAckedClr \ 000005AC 0000A013 MOVNE R0,#+0 \ ??DrawList_34: \ 000005B0 102595E5 LDR R2,[R5, #+1296] \ 000005B4 0A10A0E1 MOV R1,R10 \ 000005B8 012082E2 ADD R2,R2,#+1 \ 000005BC 08208DE5 STR R2,[SP, #+8] \ 000005C0 F420DDE1 LDRSH R2,[SP, #+4] \ 000005C4 1C208DE5 STR R2,[SP, #+28] \ 000005C8 F220DDE1 LDRSH R2,[SP, #+2] \ 000005CC 24208DE5 STR R2,[SP, #+36] \ 000005D0 F020DDE1 LDRSH R2,[SP, #+0] \ 000005D4 0C208DE5 STR R2,[SP, #+12] \ 000005D8 0020A0E3 MOV R2,#+0 \ 000005DC ........ _BLF SetFontColor,??SetFontColor??rA \ 000005E0 1C009DE5 LDR R0,[SP, #+28] \ 000005E4 0C109DE5 LDR R1,[SP, #+12] \ 000005E8 0030A0E3 MOV R3,#+0 \ 000005EC 010040E0 SUB R0,R0,R1 \ 000005F0 01002DE9 PUSH {R0} \ 000005F4 0000A0E3 MOV R0,#+0 \ 000005F8 01002DE9 PUSH {R0} \ 000005FC 01002DE9 PUSH {R0} \ 00000600 0900A0E1 MOV R0,R9 \ 00000604 01002DE9 PUSH {R0} \ 00000608 0100A0E3 MOV R0,#+1 \ 0000060C 01002DE9 PUSH {R0} \ 00000610 1C009DE5 LDR R0,[SP, #+28] \ 00000614 01002DE9 PUSH {R0} \ 00000618 3C109DE5 LDR R1,[SP, #+60] \ 0000061C 24009DE5 LDR R0,[SP, #+36] \ 00000620 50208DE2 ADD R2,SP,#+80 \ 00000624 ........ _BLF PrintText,??PrintText??rA 5506 rc.x+=GetWidth(rc.x,rc.y)+2; \ 00000628 FA11DDE1 LDRSH R1,[SP, #+26] \ 0000062C F801DDE1 LDRSH R0,[SP, #+24] \ 00000630 ........ _BLF GetWidth,??GetWidth??rA \ 00000634 F821DDE1 LDRSH R2,[SP, #+24] \ 00000638 020080E2 ADD R0,R0,#+2 \ 0000063C 020080E0 ADD R0,R0,R2 \ 00000640 B801CDE1 STRH R0,[SP, #+24] \ 00000644 18D08DE2 ADD SP,SP,#+24 5507 } 5508 5509 if(i + ((VIEW_MODE==0)?(clstartItem):(0)) == curpos )//Если наш итем то выделяем \ ??DrawList_31: \ 00000648 041595E5 LDR R1,[R5, #+1284] \ 0000064C 000056E3 CMP R6,#+0 \ 00000650 30059505 LDREQ R0,[R5, #+1328] \ 00000654 0000A013 MOVNE R0,#+0 \ 00000658 070080E0 ADD R0,R0,R7 \ 0000065C 010050E1 CMP R0,R1 \ 00000660 6300001A BNE ??DrawList_35 5510 { 5511 DrawRoundedFrame(rc.x-1,rc.y-1,rc.x2-1,rc.y2-1,0,0,0,ClCursorBordClr,ClCursorClr); \ 00000664 B0049FE5 LDR R0,??DrawList_8+0x1C ;; ClCursorClr \ 00000668 01002DE9 PUSH {R0} \ 0000066C AC049FE5 LDR R0,??DrawList_8+0x20 ;; ClCursorBordClr \ 00000670 01002DE9 PUSH {R0} \ 00000674 0000A0E3 MOV R0,#+0 \ 00000678 01002DE9 PUSH {R0} \ 0000067C 01002DE9 PUSH {R0} \ 00000680 01002DE9 PUSH {R0} \ 00000684 FA01DDE1 LDRSH R0,[SP, #+26] \ 00000688 013040E2 SUB R3,R0,#+1 \ 0000068C F801DDE1 LDRSH R0,[SP, #+24] \ 00000690 012040E2 SUB R2,R0,#+1 \ 00000694 F601DDE1 LDRSH R0,[SP, #+22] \ 00000698 011040E2 SUB R1,R0,#+1 \ 0000069C F401DDE1 LDRSH R0,[SP, #+20] \ 000006A0 010040E2 SUB R0,R0,#+1 \ 000006A4 500100EF SWI +336 5512 if(LINE_MODE && icon!=IS_GROUP) \ 000006A8 48009DE5 LDR R0,[SP, #+72] \ 000006AC 14D08DE2 ADD SP,SP,#+20 \ 000006B0 000050E3 CMP R0,#+0 \ 000006B4 0F005B13 CMPNE R11,#+15 \ 000006B8 4200000A BEQ ??DrawList_36 5513 { 5514 char s[64]; 5515 if ((cl->xtext && cl->xtext[0]!=0) && (cl->isShowXst) && (cl->state!=0xFFFF))//Если контакт онлайн и показывать хстату \ 000006BC B40098E5 LDR R0,[R8, #+180] \ 000006C0 000050E3 CMP R0,#+0 \ 000006C4 0000D015 LDRBNE R0,[R0, #+0] \ 000006C8 00005013 CMPNE R0,#+0 \ 000006CC 7C009815 LDRNE R0,[R8, #+124] \ 000006D0 00005013 CMPNE R0,#+0 \ 000006D4 0F00000A BEQ ??DrawList_37 \ 000006D8 B405D8E1 LDRH R0,[R8, #+84] \ 000006DC FF10A0E3 MOV R1,#+255 \ 000006E0 FF1C81E3 ORR R1,R1,#0xFF00 \ 000006E4 010050E1 CMP R0,R1 \ 000006E8 0A00000A BEQ ??DrawList_37 5516 { 5517 int i; 5518 zeromem(s,64); \ 000006EC 4010A0E3 MOV R1,#+64 \ 000006F0 48008DE2 ADD R0,SP,#+72 \ 000006F4 1D0100EF SWI +285 5519 i=cl->xtext[0]; \ 000006F8 B40098E5 LDR R0,[R8, #+180] \ ??DrawList_38: \ 000006FC 0020D0E5 LDRB R2,[R0, #+0] 5520 if (i>63) i=63; 5521 strncpy(s,cl->xtext+1,i); \ 00000700 011080E2 ADD R1,R0,#+1 \ 00000704 48008DE2 ADD R0,SP,#+72 \ 00000708 400052E3 CMP R2,#+64 \ 0000070C 3F20A0A3 MOVGE R2,#+63 \ 00000710 160100EF SWI +278 \ 00000714 110000EA B ??DrawList_39 5522 } 5523 else 5524 if(cl->xtext2 && cl->xtext2[0]!=0 && isLogStatusChange) \ ??DrawList_37: \ 00000718 B80098E5 LDR R0,[R8, #+184] \ 0000071C 000050E3 CMP R0,#+0 \ 00000720 0000D015 LDRBNE R0,[R0, #+0] \ 00000724 00005013 CMPNE R0,#+0 \ 00000728 0800000A BEQ ??DrawList_40 \ 0000072C ........ LDR R0,??DataTable222 ;; isLogStatusChange \ 00000730 000090E5 LDR R0,[R0, #+0] \ 00000734 000050E3 CMP R0,#+0 \ 00000738 0400000A BEQ ??DrawList_40 5525 { 5526 int i; 5527 zeromem(s,64); \ 0000073C 4010A0E3 MOV R1,#+64 \ 00000740 48008DE2 ADD R0,SP,#+72 \ 00000744 1D0100EF SWI +285 5528 i=cl->xtext2[0]; \ 00000748 B80098E5 LDR R0,[R8, #+184] \ 0000074C EAFFFFEA B ??DrawList_38 5529 if (i>63) i=63; 5530 strncpy(s,cl->xtext2+1,i); 5531 } 5532 else 5533 sprintf(s,percent_d,cl->uin); \ ??DrawList_40: \ 00000750 0C2098E5 LDR R2,[R8, #+12] \ 00000754 C8139FE5 LDR R1,??DrawList_8+0x24 ;; Canvas + 11 \ 00000758 48008DE2 ADD R0,SP,#+72 \ 0000075C 160000EF SWI +22 5534 SetFontColor((char*)CLDescricpClr,transparent,0); \ ??DrawList_39: \ 00000760 C0039FE5 LDR R0,??DrawList_8+0x28 ;; CLDescricpClr \ 00000764 0020A0E3 MOV R2,#+0 \ 00000768 0A10A0E1 MOV R1,R10 \ 0000076C ........ _BLF SetFontColor,??SetFontColor??rA 5535 PrintText(rc.x+x+1,rc.y+font_y,s,0,clfont,1,350,0,0,rc.x2-rc.x-3);//description under item name \ 00000770 F000DDE1 LDRSH R0,[SP, #+0] \ 00000774 F410DDE1 LDRSH R1,[SP, #+4] \ 00000778 0030A0E3 MOV R3,#+0 \ 0000077C 001041E0 SUB R1,R1,R0 \ 00000780 031041E2 SUB R1,R1,#+3 \ 00000784 02002DE9 PUSH {R1} \ 00000788 010080E2 ADD R0,R0,#+1 \ 0000078C 0010A0E3 MOV R1,#+0 \ 00000790 02002DE9 PUSH {R1} \ 00000794 02002DE9 PUSH {R1} \ 00000798 0910A0E1 MOV R1,R9 \ 0000079C 02002DE9 PUSH {R1} \ 000007A0 0110A0E3 MOV R1,#+1 \ 000007A4 02002DE9 PUSH {R1} \ 000007A8 101595E5 LDR R1,[R5, #+1296] \ 000007AC 02002DE9 PUSH {R1} \ 000007B0 28C09DE5 LDR R12,[SP, #+40] \ 000007B4 FA11DDE1 LDRSH R1,[SP, #+26] \ 000007B8 60208DE2 ADD R2,SP,#+96 \ 000007BC 01108CE0 ADD R1,R12,R1 \ 000007C0 ........ _BLF PrintText,??PrintText??rA \ 000007C4 18D08DE2 ADD SP,SP,#+24 5536 } 5537 5538 if(totalItems>1) \ ??DrawList_36: \ 000007C8 1C1595E5 LDR R1,[R5, #+1308] \ 000007CC 020051E3 CMP R1,#+2 \ 000007D0 020000BA BLT ??DrawList_41 5539 DrawScrollBar(i+clstartItem,totalItems); \ 000007D4 300595E5 LDR R0,[R5, #+1328] \ 000007D8 070080E0 ADD R0,R0,R7 \ 000007DC ........ BL DrawScrollBar 5540 5541 if(SOFT_MODE==2) DrawSoftInfo(cl); \ ??DrawList_41: \ 000007E0 2C009DE5 LDR R0,[SP, #+44] \ 000007E4 020050E3 CMP R0,#+2 \ 000007E8 0100001A BNE ??DrawList_35 \ 000007EC 0800A0E1 MOV R0,R8 \ 000007F0 ........ BL DrawSoftInfo 5542 } 5543 5544 if(cl->xstate!=0)//если есть хстатус \ ??DrawList_35: \ 000007F4 B605D8E1 LDRH R0,[R8, #+86] \ 000007F8 000050E3 CMP R0,#+0 \ 000007FC 0F00000A BEQ ??DrawList_42 \ 00000800 000185E0 ADD R0,R5,R0, LSL #+2 \ 00000804 D40390E5 LDR R0,[R0, #+980] \ 00000808 081090E5 LDR R1,[R0, #+8] \ 0000080C 000051E3 CMP R1,#+0 \ 00000810 0A00000A BEQ ??DrawList_42 5545 { 5546 //xs=GetXSByItem(cl->xstate); 5547 if(XStatusImg[cl->xstate]->bitmap) 5548 { 5549 DrwImage(XStatusImg[cl->xstate],rc.x-x,rc.y+1); \ 00000814 F210DDE1 LDRSH R1,[SP, #+2] \ 00000818 012081E2 ADD R2,R1,#+1 \ 0000081C F010DDE1 LDRSH R1,[SP, #+0] \ 00000820 ........ BL DrwImage 5550 rc.x+=XStatusImg[cl->xstate]->w; \ 00000824 B625D8E1 LDRH R2,[R8, #+86] \ 00000828 F010DDE1 LDRSH R1,[SP, #+0] \ 0000082C 022185E0 ADD R2,R5,R2, LSL #+2 \ 00000830 D42392E5 LDR R2,[R2, #+980] \ 00000834 F020D2E1 LDRSH R2,[R2, #+0] \ 00000838 011082E0 ADD R1,R2,R1 \ 0000083C B010CDE1 STRH R1,[SP, #+0] 5551 } 5552 } 5553 /* 5554 if(cl->xstate!=0)//если есть хстатус 5555 { 5556 xs=GetXSByItem(cl->xstate); 5557 if(xs) 5558 { 5559 DrwImage(xs->img,rc.x-x,rc.y); 5560 rc.x+=xs->img->w; 5561 } 5562 }*/ 5563 5564 //Наш фонт,каким буим рисовать)) системный - жирный не жирный,или елси пнг фонт, то активный один,не активный другой 5565 drawFont = (isSystemFont) ? (clfont + (SelBoldActiveChat==1 ? ((cl->isactive && cl->state!=0xFFFF)?1:0) : 0)) : ((cl->isactive!=0)?(clfont+1):(clfont)); \ ??DrawList_42: \ 00000840 28209DE5 LDR R2,[SP, #+40] \ 00000844 100595E5 LDR R0,[R5, #+1296] \ 00000848 AC1098E5 LDR R1,[R8, #+172] \ 0000084C 000052E3 CMP R2,#+0 \ 00000850 0F00000A BEQ ??DrawList_43 \ 00000854 D0229FE5 LDR R2,??DrawList_8+0x2C ;; SelBoldActiveChat \ 00000858 002092E5 LDR R2,[R2, #+0] \ 0000085C 010052E3 CMP R2,#+1 \ 00000860 0700001A BNE ??DrawList_44 \ 00000864 000051E3 CMP R1,#+0 \ 00000868 0600000A BEQ ??DrawList_45 \ 0000086C B415D8E1 LDRH R1,[R8, #+84] \ 00000870 FF20A0E3 MOV R2,#+255 \ 00000874 FF2C82E3 ORR R2,R2,#0xFF00 \ 00000878 020051E1 CMP R1,R2 \ 0000087C 0110A013 MOVNE R1,#+1 \ 00000880 0000001A BNE ??DrawList_45 \ ??DrawList_44: \ 00000884 0010A0E3 MOV R1,#+0 \ ??DrawList_45: \ 00000888 000081E0 ADD R0,R1,R0 \ 0000088C 020000EA B ??DrawList_46 \ ??DrawList_32: \ 00000890 20256400 DC8 " %d" \ ??DrawList_43: \ 00000894 000051E3 CMP R1,#+0 \ 00000898 01008012 ADDNE R0,R0,#+1 \ ??DrawList_46: \ 0000089C 0C008DE5 STR R0,[SP, #+12] 5566 if(ack && ack->type!=SENDED && ack->type <= 2 && (ShowProcessSend==2 || ShowProcessSend==3))//если есть не отправленные \ 000008A0 000054E3 CMP R4,#+0 \ 000008A4 00209415 LDRNE R2,[R4, #+0] \ 000008A8 00005213 CMPNE R2,#+0 \ 000008AC 4600000A BEQ ??DrawList_47 \ 000008B0 030052E3 CMP R2,#+3 \ 000008B4 440000AA BGE ??DrawList_47 \ 000008B8 18009DE5 LDR R0,[SP, #+24] \ 000008BC 020050E3 CMP R0,#+2 \ 000008C0 03005013 CMPNE R0,#+3 \ 000008C4 4000001A BNE ??DrawList_47 5567 { 5568 if(!VIEW_MODE)//в один столбец, рисуем длинну по имени \ 000008C8 F210DDE1 LDRSH R1,[SP, #+2] \ 000008CC F4C0DDE1 LDRSH R12,[SP, #+4] \ 000008D0 F000DDE1 LDRSH R0,[SP, #+0] \ 000008D4 000056E3 CMP R6,#+0 \ 000008D8 2900001A BNE ??DrawList_48 5569 { 5570 PrintText(rc.x+3,rc.y,name,0,drawFont,1,350,0,0,rc.x2); \ 000008DC 00102DE9 PUSH {R12} \ 000008E0 0020A0E3 MOV R2,#+0 \ 000008E4 04002DE9 PUSH {R2} \ 000008E8 04002DE9 PUSH {R2} \ 000008EC 0030A0E3 MOV R3,#+0 \ 000008F0 030080E2 ADD R0,R0,#+3 \ 000008F4 0920A0E1 MOV R2,R9 \ 000008F8 04002DE9 PUSH {R2} \ 000008FC 0120A0E3 MOV R2,#+1 \ 00000900 04002DE9 PUSH {R2} \ 00000904 20209DE5 LDR R2,[SP, #+32] \ 00000908 04002DE9 PUSH {R2} \ 0000090C 2C209DE5 LDR R2,[SP, #+44] \ 00000910 ........ _BLF PrintText,??PrintText??rA 5571 DrawRoundedFrame(rc.x,rc.y,rc.x+GetWidth(rc.x+3,rc.y)+3,rc.y2-2,0,0,0,0, (ack->type==SEND)?(SendClr):((ack->type==NOTSEND)?(UnAckedClr):0)); \ 00000914 000094E5 LDR R0,[R4, #+0] \ 00000918 18D08DE2 ADD SP,SP,#+24 \ 0000091C 010050E3 CMP R0,#+1 \ 00000920 EC119F05 LDREQ R1,??DrawList_8+0x14 ;; SendClr \ 00000924 0200000A BEQ ??DrawList_49 \ 00000928 020050E3 CMP R0,#+2 \ 0000092C E4119F05 LDREQ R1,??DrawList_8+0x18 ;; UnAckedClr \ 00000930 0010A013 MOVNE R1,#+0 \ ??DrawList_49: \ 00000934 08108DE5 STR R1,[SP, #+8] \ 00000938 F000DDE1 LDRSH R0,[SP, #+0] \ 0000093C F210DDE1 LDRSH R1,[SP, #+2] \ 00000940 030080E2 ADD R0,R0,#+3 \ 00000944 ........ _BLF GetWidth,??GetWidth??rA \ 00000948 08209DE5 LDR R2,[SP, #+8] \ 0000094C 0010A0E1 MOV R1,R0 \ 00000950 F000DDE1 LDRSH R0,[SP, #+0] \ 00000954 04002DE9 PUSH {R2} \ 00000958 011080E0 ADD R1,R0,R1 \ 0000095C 0020A0E3 MOV R2,#+0 \ 00000960 04002DE9 PUSH {R2} \ 00000964 04002DE9 PUSH {R2} \ 00000968 04002DE9 PUSH {R2} \ 0000096C 04002DE9 PUSH {R2} \ 00000970 FA21DDE1 LDRSH R2,[SP, #+26] \ 00000974 023042E2 SUB R3,R2,#+2 \ 00000978 032081E2 ADD R2,R1,#+3 \ 0000097C F611DDE1 LDRSH R1,[SP, #+22] \ 00000980 0F0000EA B ??DrawList_50 5572 } 5573 else 5574 DrawRoundedFrame(rc.x,rc.y+1,rc.x2-1,rc.y2-2,0,0,0,0, (ack->type==1)?(SendClr):((ack->type==NOTSEND)?(UnAckedClr):0)); \ ??DrawList_48: \ 00000984 010052E3 CMP R2,#+1 \ 00000988 84219F05 LDREQ R2,??DrawList_8+0x14 ;; SendClr \ 0000098C 0200000A BEQ ??DrawList_51 \ 00000990 020052E3 CMP R2,#+2 \ 00000994 7C219F05 LDREQ R2,??DrawList_8+0x18 ;; UnAckedClr \ 00000998 0020A013 MOVNE R2,#+0 \ ??DrawList_51: \ 0000099C 04002DE9 PUSH {R2} \ 000009A0 011081E2 ADD R1,R1,#+1 \ 000009A4 0020A0E3 MOV R2,#+0 \ 000009A8 04002DE9 PUSH {R2} \ 000009AC 04002DE9 PUSH {R2} \ 000009B0 04002DE9 PUSH {R2} \ 000009B4 04002DE9 PUSH {R2} \ 000009B8 FA21DDE1 LDRSH R2,[SP, #+26] \ 000009BC 023042E2 SUB R3,R2,#+2 \ 000009C0 01204CE2 SUB R2,R12,#+1 \ ??DrawList_50: \ 000009C4 500100EF SWI +336 \ 000009C8 14D08DE2 ADD SP,SP,#+20 5575 } 5576 5577 if(cl->just_now) \ ??DrawList_47: \ 000009CC 740098E5 LDR R0,[R8, #+116] \ 000009D0 000050E3 CMP R0,#+0 \ 000009D4 0300000A BEQ ??DrawList_52 5578 DrawJustNow(&rc,cl); \ 000009D8 0810A0E1 MOV R1,R8 \ 000009DC 0D00A0E1 MOV R0,SP \ 000009E0 ........ BL DrawJustNow \ 000009E4 380000EA B ??DrawList_12 \ ??DrawList_52: \ 000009E8 F000DDE1 LDRSH R0,[SP, #+0] \ 000009EC F210DDE1 LDRSH R1,[SP, #+2] \ 000009F0 F420DDE1 LDRSH R2,[SP, #+4] \ 000009F4 030080E2 ADD R0,R0,#+3 \ 000009F8 0F005BE3 CMP R11,#+15 \ 000009FC 1600001A BNE ??DrawList_53 5579 else 5580 { 5581 if(icon==IS_GROUP)//группы,жирным цветом 5582 DrawText(rc.x+3,rc.y,rc.x2,name,(char*)GroupClr,clfont+1,0,0); \ 00000A00 103595E5 LDR R3,[R5, #+1296] \ 00000A04 08208DE5 STR R2,[SP, #+8] \ 00000A08 018083E2 ADD R8,R3,#+1 \ 00000A0C 18108DE5 STR R1,[SP, #+24] \ 00000A10 00B0A0E1 MOV R11,R0 \ 00000A14 EC009FE5 LDR R0,??DrawList_8+0x8 ;; GroupClr \ 00000A18 0020A0E3 MOV R2,#+0 \ 00000A1C 0A10A0E1 MOV R1,R10 \ 00000A20 ........ _BLF SetFontColor,??SetFontColor??rA \ 00000A24 08009DE5 LDR R0,[SP, #+8] \ 00000A28 0030A0E3 MOV R3,#+0 \ 00000A2C 0B0040E0 SUB R0,R0,R11 \ 00000A30 01002DE9 PUSH {R0} \ 00000A34 0000A0E3 MOV R0,#+0 \ 00000A38 01002DE9 PUSH {R0} \ 00000A3C 01002DE9 PUSH {R0} \ 00000A40 00022DE9 PUSH {R9} \ 00000A44 0100A0E3 MOV R0,#+1 \ 00000A48 01002DE9 PUSH {R0} \ 00000A4C 00012DE9 PUSH {R8} \ 00000A50 2C209DE5 LDR R2,[SP, #+44] \ 00000A54 30109DE5 LDR R1,[SP, #+48] \ 00000A58 180000EA B ??DrawList_54 5583 else//Рисуем наши имена,жирные,систкмные,выделенные...... 5584 DrawText(rc.x+3,rc.y,rc.x2,name,(cl->isactive!=0)?((char*)ActiveClr):((char*)NotActiveClr),drawFont,0,0); \ ??DrawList_53: \ 00000A5C AC3098E5 LDR R3,[R8, #+172] \ 00000A60 08208DE5 STR R2,[SP, #+8] \ 00000A64 000053E3 CMP R3,#+0 \ 00000A68 C0309F15 LDRNE R3,??DrawList_8+0x30 ;; ActiveClr \ 00000A6C 0180A0E1 MOV R8,R1 \ 00000A70 BC309F05 LDREQ R3,??DrawList_8+0x34 ;; NotActiveClr \ 00000A74 00B0A0E1 MOV R11,R0 \ 00000A78 0020A0E3 MOV R2,#+0 \ 00000A7C 0A10A0E1 MOV R1,R10 \ 00000A80 0300A0E1 MOV R0,R3 \ 00000A84 ........ _BLF SetFontColor,??SetFontColor??rA \ 00000A88 08009DE5 LDR R0,[SP, #+8] \ 00000A8C 0030A0E3 MOV R3,#+0 \ 00000A90 0B0040E0 SUB R0,R0,R11 \ 00000A94 01002DE9 PUSH {R0} \ 00000A98 0810A0E1 MOV R1,R8 \ 00000A9C 0000A0E3 MOV R0,#+0 \ 00000AA0 01002DE9 PUSH {R0} \ 00000AA4 01002DE9 PUSH {R0} \ 00000AA8 00022DE9 PUSH {R9} \ 00000AAC 0100A0E3 MOV R0,#+1 \ 00000AB0 01002DE9 PUSH {R0} \ 00000AB4 20009DE5 LDR R0,[SP, #+32] \ 00000AB8 01002DE9 PUSH {R0} \ 00000ABC 2C209DE5 LDR R2,[SP, #+44] \ ??DrawList_54: \ 00000AC0 0B00A0E1 MOV R0,R11 \ 00000AC4 ........ _BLF PrintText,??PrintText??rA \ 00000AC8 18D08DE2 ADD SP,SP,#+24 5585 } 5586 }//if(cl) 5587 } 5588 i++; 5589 // cl=cl->next; 5590 if(i > (itemFromDisp*((VIEW_MODE!=0)?(curpage):(1))) ) break; \ ??DrawList_12: \ 00000ACC 181595E5 LDR R1,[R5, #+1304] \ 00000AD0 000056E3 CMP R6,#+0 \ 00000AD4 20059515 LDRNE R0,[R5, #+1312] \ 00000AD8 017087E2 ADD R7,R7,#+1 \ 00000ADC 0100A003 MOVEQ R0,#+1 \ 00000AE0 900101E0 MUL R1,R0,R1 \ 00000AE4 070051E1 CMP R1,R7 \ 00000AE8 A2FDFFAA BGE ??DrawList_9 5591 } 5592 UnlockSched(); \ ??DrawList_10: \ 00000AEC 470100EF SWI +327 5593 mfree(name); \ 00000AF0 14009DE5 LDR R0,[SP, #+20] \ 00000AF4 150000EF SWI +21 5594 // mfree(ack); 5595 } \ ??DrawList_2: \ 00000AF8 88D08DE2 ADD SP,SP,#+136 ;; stack cleaning \ 00000AFC F08FBDE8 POP {R4-R11,PC} ;; return \ ??DrawList_8: \ 00000B00 ........ DC32 LINE_MODE \ 00000B04 ........ DC32 Canvas + 532 \ 00000B08 ........ DC32 GroupClr \ 00000B0C ........ DC32 Canvas + 540 \ 00000B10 ........ DC32 Canvas + 14 \ 00000B14 ........ DC32 SendClr \ 00000B18 ........ DC32 UnAckedClr \ 00000B1C ........ DC32 ClCursorClr \ 00000B20 ........ DC32 ClCursorBordClr \ 00000B24 ........ DC32 Canvas + 11 \ 00000B28 ........ DC32 CLDescricpClr \ 00000B2C ........ DC32 SelBoldActiveChat \ 00000B30 ........ DC32 ActiveClr \ 00000B34 ........ DC32 NotActiveClr 5596 5597 // Управление курсором \ In segment CODE, align 4, keep-with-next 5598 void MoveUp2(int i) 5599 { 5600 if( curpos > itemFromDisp + 2 && totalItems!=itemFromDisp ) \ MoveUp2: \ 00000000 ........ LDR R1,??DataTable228 ;; i_rc \ 00000004 70002DE9 PUSH {R4-R6} \ 00000008 04C591E5 LDR R12,[R1, #+1284] \ 0000000C 183591E5 LDR R3,[R1, #+1304] \ 00000010 302591E5 LDR R2,[R1, #+1328] \ 00000014 1C4591E5 LDR R4,[R1, #+1308] \ 00000018 025083E2 ADD R5,R3,#+2 \ 0000001C 0C0055E1 CMP R5,R12 \ 00000020 0F0000AA BGE ??MoveUp2_0 \ 00000024 030054E1 CMP R4,R3 \ 00000028 0D00000A BEQ ??MoveUp2_0 5601 { 5602 curpos-=i; \ 0000002C 00C04CE0 SUB R12,R12,R0 5603 if(clstartItem > 0 && curpos > ((itemFromDisp/2)+1) && curpos < totalItems-((itemFromDisp/2)+1)) \ 00000030 010052E3 CMP R2,#+1 \ 00000034 1F0000BA BLT ??MoveUp2_1 \ 00000038 A35F83E0 ADD R5,R3,R3, LSR #+31 \ 0000003C C550A0E1 ASR R5,R5,#+1 \ 00000040 016085E2 ADD R6,R5,#+1 \ 00000044 0C0056E1 CMP R6,R12 \ 00000048 1A0000AA BGE ??MoveUp2_1 \ 0000004C 054044E0 SUB R4,R4,R5 \ 00000050 014044E2 SUB R4,R4,#+1 \ 00000054 04005CE1 CMP R12,R4 \ 00000058 160000AA BGE ??MoveUp2_1 5604 clstartItem-=i; \ ??MoveUp2_2: \ 0000005C 002042E0 SUB R2,R2,R0 \ 00000060 140000EA B ??MoveUp2_1 5605 } 5606 else 5607 if(curpos > 0) \ ??MoveUp2_0: \ 00000064 01005CE3 CMP R12,#+1 \ 00000068 0E0000BA BLT ??MoveUp2_3 5608 { 5609 curpos-=i; \ 0000006C 00C04CE0 SUB R12,R12,R0 5610 if(clstartItem > 0 && curpos > ((itemFromDisp/2)+1)) \ 00000070 010052E3 CMP R2,#+1 \ 00000074 040000BA BLT ??MoveUp2_4 \ 00000078 A34F83E0 ADD R4,R3,R3, LSR #+31 \ 0000007C 0150A0E3 MOV R5,#+1 \ 00000080 C44085E0 ADD R4,R5,R4, ASR #+1 \ 00000084 0C0054E1 CMP R4,R12 \ 00000088 F3FFFFBA BLT ??MoveUp2_2 5611 clstartItem-=i; 5612 else 5613 if(curpos < ((itemFromDisp/2)+1)) \ ??MoveUp2_4: \ 0000008C A30F83E0 ADD R0,R3,R3, LSR #+31 \ 00000090 0130A0E3 MOV R3,#+1 \ 00000094 C00083E0 ADD R0,R3,R0, ASR #+1 \ 00000098 00005CE1 CMP R12,R0 \ 0000009C 050000AA BGE ??MoveUp2_1 5614 clstartItem=0; \ ??MoveUp2_5: \ 000000A0 0020A0E3 MOV R2,#+0 \ 000000A4 030000EA B ??MoveUp2_1 5615 } 5616 else 5617 { 5618 curpos=totalItems; \ ??MoveUp2_3: \ 000000A8 04C0A0E1 MOV R12,R4 5619 if(totalItems==itemFromDisp) \ 000000AC 030054E1 CMP R4,R3 \ 000000B0 FAFFFF0A BEQ ??MoveUp2_5 5620 clstartItem=0; 5621 else 5622 clstartItem=totalItems-itemFromDisp; \ 000000B4 032044E0 SUB R2,R4,R3 \ ??MoveUp2_1: \ 000000B8 302581E5 STR R2,[R1, #+1328] \ 000000BC 04C581E5 STR R12,[R1, #+1284] 5623 } 5624 } \ 000000C0 7000BDE8 POP {R4-R6} \ 000000C4 1EFF2FE1 BX LR ;; return 5625 5626 \ In segment CODE, align 4, keep-with-next 5627 void MoveDown2(int i) 5628 { 5629 if( curpos < itemFromDisp/2+1 && totalItems!=itemFromDisp ) curpos+=i; \ MoveDown2: \ 00000000 ........ LDR R1,??DataTable228 ;; i_rc \ 00000004 70002DE9 PUSH {R4-R6} \ 00000008 042591E5 LDR R2,[R1, #+1284] \ 0000000C 18C591E5 LDR R12,[R1, #+1304] \ 00000010 303591E5 LDR R3,[R1, #+1328] \ 00000014 1C4591E5 LDR R4,[R1, #+1308] \ 00000018 AC5F8CE0 ADD R5,R12,R12, LSR #+31 \ 0000001C 0160A0E3 MOV R6,#+1 \ 00000020 C55086E0 ADD R5,R6,R5, ASR #+1 \ 00000024 050052E1 CMP R2,R5 \ 00000028 030000AA BGE ??MoveDown2_0 \ 0000002C 0C0054E1 CMP R4,R12 \ 00000030 0100000A BEQ ??MoveDown2_0 \ ??MoveDown2_1: \ 00000034 020080E0 ADD R0,R0,R2 \ 00000038 0B0000EA B ??MoveDown2_2 5630 else 5631 if(curpos < totalItems - 1) \ ??MoveDown2_0: \ 0000003C 015044E2 SUB R5,R4,#+1 \ 00000040 050052E1 CMP R2,R5 \ 00000044 060000AA BGE ??MoveDown2_3 5632 { 5633 if(itemFromDisp != totalItems) \ 00000048 04005CE1 CMP R12,R4 \ 0000004C F8FFFF0A BEQ ??MoveDown2_1 5634 { 5635 if(clstartItem < totalItems-itemFromDisp) \ 00000050 0C4044E0 SUB R4,R4,R12 \ 00000054 040053E1 CMP R3,R4 \ 00000058 F5FFFFAA BGE ??MoveDown2_1 5636 clstartItem+=i; \ 0000005C 033080E0 ADD R3,R0,R3 \ 00000060 F3FFFFEA B ??MoveDown2_1 5637 } 5638 /* else 5639 { 5640 if(clstartItem < itemFromDisp) 5641 clstartItem+=i; 5642 }*/ 5643 5644 curpos+=i; 5645 } 5646 else 5647 { 5648 curpos=0; \ ??MoveDown2_3: \ 00000064 0000A0E3 MOV R0,#+0 5649 clstartItem=0; \ 00000068 0030A0E3 MOV R3,#+0 \ ??MoveDown2_2: \ 0000006C 303581E5 STR R3,[R1, #+1328] \ 00000070 040581E5 STR R0,[R1, #+1284] 5650 } 5651 } \ 00000074 7000BDE8 POP {R4-R6} \ 00000078 1EFF2FE1 BX LR ;; return 5652 5653 /* 5654 // Управление курсором 5655 void MoveUp(int i) 5656 { 5657 if(!itemFromDisp)return; 5658 5659 if(i) curpos-=2; 5660 else curpos--; 5661 5662 if(i && curpos+2==2) 5663 { 5664 curpos=0; 5665 curpage=1; 5666 } 5667 else 5668 if(curpos<0) 5669 { 5670 curpos=totalItems; 5671 5672 if(itemFromDisp!=totalItems) 5673 { 5674 curpage = sdiv(itemFromDisp,totalItems)+1; 5675 } 5676 else 5677 curpage = 1; 5678 } 5679 else 5680 { 5681 // if(i) curpos-=2; 5682 // else curpos--; 5683 if(curpos<(curpage-1)*itemFromDisp){ curpos++; curpage--; } 5684 } 5685 } 5686 5687 void MoveDown(int i) 5688 { 5689 if(!totalItems)return; 5690 if(i) curpos+=2; 5691 else curpos++; 5692 5693 if(curpos>totalItems) { curpos=0; curpage=1; } 5694 if(curpage*itemFromDispcurpos){ curpos++; curpage--; } */ 5706 5707 if(i) curpos-=2; \ 00000018 042594E5 LDR R2,[R4, #+1284] \ 0000001C 000051E3 CMP R1,#+0 \ 00000020 02204212 SUBNE R2,R2,#+2 5708 else curpos--; \ 00000024 01204202 SUBEQ R2,R2,#+1 \ 00000028 042584E5 STR R2,[R4, #+1284] 5709 5710 if(i && curpos+2==2) \ 0000002C 0120A0E3 MOV R2,#+1 \ 00000030 0200000A BEQ ??MoveUp_0 \ 00000034 041594E5 LDR R1,[R4, #+1284] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0B00000A BEQ ??MoveUp_1 5711 { 5712 curpos=0; 5713 curpage=1; 5714 } 5715 else 5716 if(curpos<0) \ ??MoveUp_0: \ 00000040 041594E5 LDR R1,[R4, #+1284] \ 00000044 000051E3 CMP R1,#+0 \ 00000048 0A00005A BPL ??MoveUp_2 5717 { 5718 curpos=totalItems-1; \ 0000004C 1C1594E5 LDR R1,[R4, #+1308] \ 00000050 013041E2 SUB R3,R1,#+1 \ 00000054 043584E5 STR R3,[R4, #+1284] 5719 5720 if(itemFromDisp!=totalItems) \ 00000058 010050E1 CMP R0,R1 \ 0000005C 0300000A BEQ ??MoveUp_1 5721 { 5722 curpage = /*(itemFromDisp/totalItems)+1;*/sdiv(itemFromDisp,totalItems)+1; \ 00000060 B80000EF SWI +184 \ 00000064 010080E2 ADD R0,R0,#+1 \ 00000068 200584E5 STR R0,[R4, #+1312] \ 0000006C 1080BDE8 POP {R4,PC} 5723 } 5724 else 5725 curpage = 1; \ ??MoveUp_1: \ 00000070 202584E5 STR R2,[R4, #+1312] \ 00000074 1080BDE8 POP {R4,PC} 5726 } \ ??MoveUp_2: \ 00000078 202594E5 LDR R2,[R4, #+1312] \ 0000007C 012042E2 SUB R2,R2,#+1 \ 00000080 900203E0 MUL R3,R0,R2 \ 00000084 030051E1 CMP R1,R3 5727 else 5728 { 5729 // if(i) curpos-=2; 5730 // else curpos--; 5731 if(curpos<(curpage-1)*itemFromDisp){ curpos++; curpage--; } \ 00000088 010081B2 ADDLT R0,R1,#+1 \ 0000008C 040584B5 STRLT R0,[R4, #+1284] \ 00000090 202584B5 STRLT R2,[R4, #+1312] \ 00000094 1080BDE8 POP {R4,PC} ;; return 5732 } 5733 } 5734 \ In segment CODE, align 4, keep-with-next 5735 void MoveDown(int i) 5736 { 5737 if(!totalItems)return; \ MoveDown: \ 00000000 ........ LDR R1,??DataTable228 ;; i_rc \ 00000004 1C2591E5 LDR R2,[R1, #+1308] \ 00000008 000052E3 CMP R2,#+0 \ 0000000C 1EFF2F01 BXEQ LR 5738 if(i) curpos+=2; \ 00000010 043591E5 LDR R3,[R1, #+1284] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 02008312 ADDNE R0,R3,#+2 5739 else curpos++; \ 0000001C 01008302 ADDEQ R0,R3,#+1 5740 if(curpos>=totalItems) { curpos=0; curpage=1; } 5741 if(curpage*itemFromDisp` \ 00000044 8620A0E1 LSL R2,R6,#+1 \ 00000048 02002DE9 PUSH {R1} \ 0000004C 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000050 0910A0E1 MOV R1,R9 \ 00000054 02002DE9 PUSH {R1} \ 00000058 0010A0E3 MOV R1,#+0 \ 0000005C 02002DE9 PUSH {R1} \ 00000060 02002DE9 PUSH {R1} \ 00000064 02002DE9 PUSH {R1} \ 00000068 A51F85E0 ADD R1,R5,R5, LSR #+31 \ 0000006C C13082E0 ADD R3,R2,R1, ASR #+1 \ 00000070 012047E2 SUB R2,R7,#+1 \ 00000074 A81F88E0 ADD R1,R8,R8, LSR #+31 \ 00000078 C11060E0 RSB R1,R0,R1, ASR #+1 \ 0000007C 0000A0E3 MOV R0,#+0 \ 00000080 500100EF SWI +336 5748 SetFontColor(clrWhite,transparent,0); \ 00000084 0020A0E3 MOV R2,#+0 \ 00000088 1000A0E3 MOV R0,#+16 \ 0000008C 900D80E3 ORR R0,R0,#0x2400 \ 00000090 041080E0 ADD R1,R0,R4 \ 00000094 0900A0E1 MOV R0,R9 \ 00000098 ........ _BLF SetFontColor,??SetFontColor??rA 5749 PrintText(ScreenW()/2+5,ScreenH()/2-FontH(FONT_MEDIUM+100)-5,prmsg,1,FONT_MEDIUM+100,1,1,0,0,ScreenW()-5); \ 0000009C 888100EF SWI +33160 \ 000000A0 0070A0E1 MOV R7,R0 \ 000000A4 898100EF SWI +33161 \ 000000A8 0050A0E1 MOV R5,R0 \ 000000AC 6800A0E3 MOV R0,#+104 \ 000000B0 ........ _BLF FontH,??FontH??rA \ 000000B4 0060A0E1 MOV R6,R0 \ 000000B8 888100EF SWI +33160 \ 000000BC 051047E2 SUB R1,R7,#+5 \ 000000C0 02002DE9 PUSH {R1} \ 000000C4 0130A0E3 MOV R3,#+1 \ 000000C8 A00F80E0 ADD R0,R0,R0, LSR #+31 \ 000000CC 0010A0E3 MOV R1,#+0 \ 000000D0 02002DE9 PUSH {R1} \ 000000D4 02002DE9 PUSH {R1} \ 000000D8 0110A0E3 MOV R1,#+1 \ 000000DC 02002DE9 PUSH {R1} \ 000000E0 02002DE9 PUSH {R1} \ 000000E4 6810A0E3 MOV R1,#+104 \ 000000E8 02002DE9 PUSH {R1} \ 000000EC 8C10A0E3 MOV R1,#+140 \ 000000F0 601D81E3 ORR R1,R1,#0x1800 \ 000000F4 042081E0 ADD R2,R1,R4 \ 000000F8 A51F85E0 ADD R1,R5,R5, LSR #+31 \ 000000FC C11066E0 RSB R1,R6,R1, ASR #+1 \ 00000100 051041E2 SUB R1,R1,#+5 \ 00000104 0540A0E3 MOV R4,#+5 \ 00000108 C00084E0 ADD R0,R4,R0, ASR #+1 \ 0000010C ........ _BLF PrintText,??PrintText??rA \ 00000110 2CD08DE2 ADD SP,SP,#+44 5750 } \ 00000114 F083BDE8 POP {R4-R9,PC} ;; return \ ??PrintMessage_0: \ 00000118 ........ DC32 `?` 5751 5752 \ In segment CODE, align 4, keep-with-next 5753 void DrawContactList() 5754 { \ DrawContactList: \ 00000000 30402DE9 PUSH {R4,R5,LR} 5755 #ifdef DEBUG 5756 if(!IsGuiOnTop(contactlist_menu_id)) return; 5757 #endif 5758 DrawRoundedFrame(0,hy,ScreenW()-1,ScreenH()-1,0,0,0,CLBackgrClr,CLBackgrClr); \ 00000004 ........ LDR R4,??DataTable228 ;; i_rc \ 00000008 898100EF SWI +33161 \ 0000000C 0050A0E1 MOV R5,R0 \ 00000010 888100EF SWI +33160 \ 00000014 A0109FE5 LDR R1,??DrawContactList_0 ;; CLBackgrClr \ 00000018 013045E2 SUB R3,R5,#+1 \ 0000001C 0120A0E1 MOV R2,R1 \ 00000020 04002DE9 PUSH {R2} \ 00000024 02002DE9 PUSH {R1} \ 00000028 0010A0E3 MOV R1,#+0 \ 0000002C 02002DE9 PUSH {R1} \ 00000030 02002DE9 PUSH {R1} \ 00000034 02002DE9 PUSH {R1} \ 00000038 0C1594E5 LDR R1,[R4, #+1292] \ 0000003C 012040E2 SUB R2,R0,#+1 \ 00000040 0000A0E3 MOV R0,#+0 \ 00000044 500100EF SWI +336 5759 // DrawRoundedFrame(0,hy,ScreenW()-1,ScreenH()-1,0,0,0,clrWhite,clrWhite); 5760 if(icons[ICON_BG]->bitmap) DrwImage(icons[ICON_BG],0,0); \ 00000048 A00094E5 LDR R0,[R4, #+160] \ 0000004C 081090E5 LDR R1,[R0, #+8] \ 00000050 14D08DE2 ADD SP,SP,#+20 \ 00000054 000051E3 CMP R1,#+0 \ 00000058 0200000A BEQ ??DrawContactList_1 \ 0000005C 0020A0E3 MOV R2,#+0 \ 00000060 0010A0E3 MOV R1,#+0 \ 00000064 ........ BL DrwImage 5761 DrawHeader(); \ ??DrawContactList_1: \ 00000068 ........ BL DrawHeader 5762 DrawList(); \ 0000006C ........ BL DrawList 5763 if(SOFT_MODE==1) DrawSoftKeys(LG_MENU,clmenu_sk_r); \ 00000070 ........ LDR R0,??DataTable229 ;; SOFT_MODE \ 00000074 000090E5 LDR R0,[R0, #+0] \ 00000078 010050E3 CMP R0,#+1 \ 0000007C 0400001A BNE ??DrawContactList_2 \ 00000080 2400A0E3 MOV R0,#+36 \ 00000084 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000088 041080E0 ADD R1,R0,R4 \ 0000008C 2C009FE5 LDR R0,??DrawContactList_0+0x4 ;; `?` \ 00000090 ........ BL DrawSoftKeys 5764 if(strlen(prmsg)!=0 && PrintTimer!=0) PrintMessage(); \ ??DrawContactList_2: \ 00000094 8C00A0E3 MOV R0,#+140 \ 00000098 600D80E3 ORR R0,R0,#0x1800 \ 0000009C 040080E0 ADD R0,R0,R4 \ 000000A0 1B0000EF SWI +27 \ 000000A4 000050E3 CMP R0,#+0 \ 000000A8 C4029415 LDRNE R0,[R4, #+708] \ 000000AC 00005013 CMPNE R0,#+0 \ 000000B0 3080BD08 POPEQ {R4,R5,PC} \ 000000B4 ........ BL PrintMessage 5765 } \ 000000B8 3080BDE8 POP {R4,R5,PC} ;; return \ ??DrawContactList_0: \ 000000BC ........ DC32 CLBackgrClr \ 000000C0 ........ DC32 `?` 5766 5767 #ifdef DEBUG 5768 static void OnRedraw(MAIN_GUI *data) 5769 { 5770 DrawContactList(); 5771 } 5772 5773 static void onCreate(MAIN_GUI *data, void *(*malloc_adr)(int)) 5774 { 5775 #ifdef ELKA 5776 #ifdef ICONBAR 5777 DisableIconBar(0); 5778 #else 5779 DisableIconBar(1); 5780 #endif 5781 #endif 5782 5783 // StatusToIMGHDR(); 5784 data->gui.state=1; 5785 } 5786 5787 static void onClose(MAIN_GUI *data, void (*mfree_adr)(void *)) 5788 { 5789 data->gui.state=0; 5790 } 5791 5792 static void onFocus(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *)) 5793 { 5794 #ifdef ELKA 5795 #ifdef ICONBAR 5796 DisableIconBar(0); 5797 #else 5798 DisableIconBar(1); 5799 #endif 5800 #endif 5801 SetCanvasFlag(1); 5802 data->gui.state=2; 5803 DisableIDLETMR(); 5804 } 5805 5806 static void onUnfocus(MAIN_GUI *data, void (*mfree_adr)(void *)) 5807 { 5808 #ifdef ELKA 5809 DisableIconBar(0); 5810 #endif 5811 if (data->gui.state!=2) return; 5812 data->gui.state=1; 5813 } 5814 #endif 5815 5816 //int ShowLoadScreen=1; 5817 int lastKey = -1; \ In segment DATA_Z, align 4, align-sorted 5818 int lastIsLongPress = 0; \ lastIsLongPress: \ 00000000 DS8 4 5819 \ In segment CODE, align 4, keep-with-next 5820 int ClOnKey(GUI_MSG *msg) 5821 { \ ClOnKey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 5822 int key=msg->gbsmsg->submess; 5823 /* int isLongPress = 0; 5824 int ignore = 1; 5825 */ 5826 CLIST *t; 5827 // t=FindContactByN(curpos); 5828 5829 if (msg->gbsmsg->msg==LONG_PRESS) \ 00000004 ........ LDR R8,??DataTable241 ;; i_rc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 040094E5 LDR R0,[R4, #+4] \ 00000010 8470A0E3 MOV R7,#+132 \ 00000014 086090E5 LDR R6,[R0, #+8] \ 00000018 040090E5 LDR R0,[R0, #+4] \ 0000001C 607E87E3 ORR R7,R7,#0x600 \ 00000020 9510A0E3 MOV R1,#+149 \ 00000024 401F81E3 ORR R1,R1,#0x100 \ 00000028 010050E1 CMP R0,R1 \ 0000002C 3900001A BNE ??ClOnKey_1 5830 { 5831 //isLongPress = (msg->gbsmsg->msg == LONG_PRESS); 5832 // Игнорим KEY_UP если уже обработали долгое нажатие этой же кнопки 5833 // Обрабатываем только KEY_UP и LONG_PRESS 5834 //ignore = (lastKey == key && lastIsLongPress && msg->gbsmsg->msg == KEY_UP) 5835 // || (msg->gbsmsg->msg != KEY_UP && msg->gbsmsg->msg != LONG_PRESS); 5836 // if (!ignore) 5837 LongPressAction(FindContactByN(curpos),msg->gbsmsg->submess); \ 00000030 040598E5 LDR R0,[R8, #+1284] \ 00000034 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000038 041094E5 LDR R1,[R4, #+4] \ 0000003C 081091E5 LDR R1,[R1, #+8] \ 00000040 ........ BL LongPressAction 5838 5839 // lastKey = key; 5840 // lastIsLongPress = isLongPress; 5841 5842 switch(msg->gbsmsg->submess) \ 00000044 040094E5 LDR R0,[R4, #+4] \ 00000048 080090E5 LDR R0,[R0, #+8] \ 0000004C 3B0050E2 SUBS R0,R0,#+59 \ 00000050 0600000A BEQ ??ClOnKey_2 \ 00000054 010050E2 SUBS R0,R0,#+1 \ 00000058 0B00000A BEQ ??ClOnKey_3 \ 0000005C 010050E2 SUBS R0,R0,#+1 \ 00000060 1900000A BEQ ??ClOnKey_4 \ 00000064 010050E2 SUBS R0,R0,#+1 \ 00000068 1000000A BEQ ??ClOnKey_5 \ 0000006C 1D0000EA B ??ClOnKey_6 5843 { 5844 case UP_BUTTON: if(VIEW_MODE) MoveUp(1); else MoveUp2(1)/*MoveUp(0)*/; break; \ ??ClOnKey_2: \ 00000070 ........ LDR R0,??DataTable235 ;; VIEW_MODE \ 00000074 000090E5 LDR R0,[R0, #+0] \ 00000078 000050E3 CMP R0,#+0 \ 0000007C 0100A0E3 MOV R0,#+1 \ 00000080 1700000A BEQ ??ClOnKey_7 \ ??ClOnKey_8: \ 00000084 ........ BL MoveUp \ 00000088 160000EA B ??ClOnKey_6 5845 case DOWN_BUTTON: if(VIEW_MODE) MoveDown(1); else MoveDown2(1)/*MoveDown(0)*/; break; \ ??ClOnKey_3: \ 0000008C ........ LDR R0,??DataTable235 ;; VIEW_MODE \ 00000090 000090E5 LDR R0,[R0, #+0] \ 00000094 000050E3 CMP R0,#+0 \ 00000098 0100A0E3 MOV R0,#+1 \ 0000009C 0100000A BEQ ??ClOnKey_9 \ ??ClOnKey_10: \ 000000A0 ........ BL MoveDown \ 000000A4 0F0000EA B ??ClOnKey_6 \ ??ClOnKey_9: \ 000000A8 ........ BL MoveDown2 \ 000000AC 0D0000EA B ??ClOnKey_6 5846 case RIGHT_BUTTON: if(VIEW_MODE) MoveDown(0); else MoveDown2(2)/*MoveDown(1)*/; break; \ ??ClOnKey_5: \ 000000B0 ........ LDR R0,??DataTable235 ;; VIEW_MODE \ 000000B4 000090E5 LDR R0,[R0, #+0] \ 000000B8 000050E3 CMP R0,#+0 \ 000000BC 0000A013 MOVNE R0,#+0 \ 000000C0 F6FFFF1A BNE ??ClOnKey_10 \ 000000C4 0200A0E3 MOV R0,#+2 \ 000000C8 F6FFFFEA B ??ClOnKey_9 5847 case LEFT_BUTTON: if(VIEW_MODE) MoveUp(0); else MoveUp2(2)/*MoveUp(1)*/; break; \ ??ClOnKey_4: \ 000000CC ........ LDR R0,??DataTable235 ;; VIEW_MODE \ 000000D0 000090E5 LDR R0,[R0, #+0] \ 000000D4 000050E3 CMP R0,#+0 \ 000000D8 0000A013 MOVNE R0,#+0 \ 000000DC E8FFFF1A BNE ??ClOnKey_8 \ 000000E0 0200A0E3 MOV R0,#+2 \ ??ClOnKey_7: \ 000000E4 ........ BL MoveUp2 5848 } 5849 5850 int key=msg->gbsmsg->submess; \ ??ClOnKey_6: \ 000000E8 040094E5 LDR R0,[R4, #+4] \ 000000EC 080090E5 LDR R0,[R0, #+8] 5851 if ((key>='0')&&(key<='9')) \ 000000F0 300050E3 CMP R0,#+48 \ 000000F4 070000BA BLT ??ClOnKey_1 \ 000000F8 3A0050E3 CMP R0,#+58 \ 000000FC 050000AA BGE ??ClOnKey_1 5852 { 5853 ClearContactT9Key(); \ 00000100 2010A0E3 MOV R1,#+32 \ 00000104 080087E0 ADD R0,R7,R8 \ 00000108 1D0100EF SWI +285 5854 RecountMenu(NULL,1); \ 0000010C 0110A0E3 MOV R1,#+1 \ 00000110 0000A0E3 MOV R0,#+0 \ 00000114 ........ BL RecountMenu 5855 } 5856 } 5857 5858 5859 if (msg->gbsmsg->msg==KEY_DOWN) \ ??ClOnKey_1: \ 00000118 041094E5 LDR R1,[R4, #+4] \ 0000011C 9320A0E3 MOV R2,#+147 \ 00000120 040091E5 LDR R0,[R1, #+4] \ 00000124 402F82E3 ORR R2,R2,#0x100 \ 00000128 020050E1 CMP R0,R2 \ 0000012C 0E01001A BNE ??ClOnKey_11 5860 { 5861 switch(msg->gbsmsg->submess) \ 00000130 081091E5 LDR R1,[R1, #+8] \ 00000134 C42298E5 LDR R2,[R8, #+708] \ 00000138 040598E5 LDR R0,[R8, #+1284] \ 0000013C 8C30A0E3 MOV R3,#+140 \ 00000140 603D83E3 ORR R3,R3,#0x1800 \ 00000144 089083E0 ADD R9,R3,R8 \ 00000148 ........ LDR R3,??DataTable235 ;; VIEW_MODE \ 0000014C 01A0A0E3 MOV R10,#+1 \ 00000150 003093E5 LDR R3,[R3, #+0] \ 00000154 00B0A0E3 MOV R11,#+0 \ 00000158 011041E2 SUB R1,R1,#+1 \ 0000015C 3D0051E3 CMP R1,#+61 \ 00000160 B400008A BHI ??ClOnKey_12 \ 00000164 01CF8FE2 ADR R12,??ClOnKey_0 \ 00000168 01C0DCE7 LDRB R12,[R12, R1] \ 0000016C 0CF18FE0 ADD PC,PC,R12, LSL #+2 \ ??ClOnKey_0: \ 00000170 27B1B130 DC8 +39,+177,+177,+48 \ 00000174 B1B1B1B1 DC8 +177,+177,+177,+177 \ 00000178 B1B18F30 DC8 +177,+177,+143,+48 \ 0000017C 979DB1B1 DC8 +151,+157,+177,+177 \ 00000180 B1B1B1B1 DC8 +177,+177,+177,+177 \ 00000184 B1B1B1B1 DC8 +177,+177,+177,+177 \ 00000188 B13CB1B1 DC8 +177,+60,+177,+177 \ 0000018C B1B1B1B1 DC8 +177,+177,+177,+177 \ 00000190 B1B1B1B1 DC8 +177,+177,+177,+177 \ 00000194 B1B1B1B1 DC8 +177,+177,+177,+177 \ 00000198 B16AB1B1 DC8 +177,+106,+177,+177 \ 0000019C B1B1B1B1 DC8 +177,+177,+177,+177 \ 000001A0 B1B1B1B1 DC8 +177,+177,+177,+177 \ 000001A4 B1B1B1B1 DC8 +177,+177,+177,+177 \ 000001A8 B1B10F16 DC8 +177,+177,+15,+22 \ 000001AC 221D0000 DC8 +34,+29,+0,+0 5862 { 5863 case UP_BUTTON: if(VIEW_MODE) MoveUp(1); else /*MoveUp(0)*/MoveUp2(1); break; \ ??ClOnKey_13: \ 000001B0 000053E3 CMP R3,#+0 \ 000001B4 0100A0E3 MOV R0,#+1 \ 000001B8 0100000A BEQ ??ClOnKey_14 \ ??ClOnKey_15: \ 000001BC ........ BL MoveUp \ 000001C0 9C0000EA B ??ClOnKey_12 \ ??ClOnKey_14: \ 000001C4 ........ BL MoveUp2 \ 000001C8 9A0000EA B ??ClOnKey_12 5864 case DOWN_BUTTON: if(VIEW_MODE) MoveDown(1); else /*MoveDown(0)*/MoveDown2(1); break; \ ??ClOnKey_16: \ 000001CC 000053E3 CMP R3,#+0 \ 000001D0 0100A0E3 MOV R0,#+1 \ 000001D4 0100000A BEQ ??ClOnKey_17 \ ??ClOnKey_18: \ 000001D8 ........ BL MoveDown \ 000001DC 950000EA B ??ClOnKey_12 \ ??ClOnKey_17: \ 000001E0 ........ BL MoveDown2 \ 000001E4 930000EA B ??ClOnKey_12 5865 case RIGHT_BUTTON: if(VIEW_MODE) MoveDown(0); else MoveDown2(2)/*MoveDown(1)*/; break; \ ??ClOnKey_19: \ 000001E8 000053E3 CMP R3,#+0 \ 000001EC 0000A013 MOVNE R0,#+0 \ 000001F0 F8FFFF1A BNE ??ClOnKey_18 \ 000001F4 0200A0E3 MOV R0,#+2 \ 000001F8 F8FFFFEA B ??ClOnKey_17 5866 case LEFT_BUTTON: if(VIEW_MODE) MoveUp(0); else MoveUp2(2)/*MoveUp(1)*/; break; \ ??ClOnKey_20: \ 000001FC 000053E3 CMP R3,#+0 \ 00000200 0000A013 MOVNE R0,#+0 \ 00000204 ECFFFF1A BNE ??ClOnKey_15 \ 00000208 0200A0E3 MOV R0,#+2 \ 0000020C ECFFFFEA B ??ClOnKey_14 5867 case LEFT_SOFT: 5868 { 5869 extern void CreateMainMenu(); 5870 // DoScreen(); 5871 if(PrintTimer) \ ??ClOnKey_21: \ 00000210 000052E3 CMP R2,#+0 \ 00000214 0400000A BEQ ??ClOnKey_22 5872 { 5873 PrintTimer=0; \ ??ClOnKey_23: \ 00000218 C4B288E5 STR R11,[R8, #+708] 5874 zeromem(prmsg,256); \ 0000021C 401FA0E3 MOV R1,#+256 \ 00000220 0900A0E1 MOV R0,R9 \ 00000224 1D0100EF SWI +285 \ 00000228 820000EA B ??ClOnKey_12 5875 } 5876 else 5877 CreateMainMenu(); \ ??ClOnKey_22: \ 0000022C ........ _BLF CreateMainMenu,??CreateMainMenu??rA \ 00000230 800000EA B ??ClOnKey_12 5878 // ShowMainMenu(); 5879 }break; 5880 case RIGHT_SOFT: 5881 case RED_BUTTON: 5882 if(PrintTimer) \ ??ClOnKey_24: \ 00000234 000052E3 CMP R2,#+0 \ 00000238 F6FFFF1A BNE ??ClOnKey_23 5883 { 5884 PrintTimer=0; 5885 zeromem(prmsg,256); 5886 } 5887 else if (strlen(ContactT9Key)) \ 0000023C 080087E0 ADD R0,R7,R8 \ 00000240 1B0000EF SWI +27 \ 00000244 000050E3 CMP R0,#+0 \ 00000248 0300000A BEQ ??ClOnKey_25 5888 { 5889 BackSpaceContactT9(); \ 0000024C ........ BL BackSpaceContactT9 5890 RecountMenu(NULL,1); \ 00000250 0110A0E3 MOV R1,#+1 \ 00000254 0B00A0E1 MOV R0,R11 \ 00000258 510000EA B ??ClOnKey_26 5891 return(-1); 5892 } 5893 5894 else 5895 { 5896 #ifdef DEBUG 5897 ShowLoadScreen=1; 5898 return 1; 5899 #else 5900 ShowLoadScreen=1;//return 1; \ ??ClOnKey_25: \ 0000025C DCA488E5 STR R10,[R8, #+1244] \ 00000260 740000EA B ??ClOnKey_12 5901 #endif 5902 } 5903 break; 5904 case ENTER_BUTTON: 5905 { 5906 t=FindContactByN(curpos); \ ??ClOnKey_27: \ 00000264 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000268 0050A0E1 MOV R5,R0 5907 if(PrintTimer) \ 0000026C C40298E5 LDR R0,[R8, #+708] \ 00000270 000050E3 CMP R0,#+0 \ 00000274 0400000A BEQ ??ClOnKey_28 5908 { 5909 PrintTimer=0; \ 00000278 C4B288E5 STR R11,[R8, #+708] 5910 zeromem(prmsg,256); \ 0000027C 401FA0E3 MOV R1,#+256 \ 00000280 0900A0E1 MOV R0,R9 \ 00000284 1D0100EF SWI +285 \ 00000288 210000EA B ??ClOnKey_29 5911 } 5912 else 5913 if(t) \ ??ClOnKey_28: \ 0000028C 000055E3 CMP R5,#+0 \ 00000290 4400000A BEQ ??ClOnKey_30 5914 { 5915 if (t->isgroup) \ 00000294 080095E5 LDR R0,[R5, #+8] \ 00000298 000050E3 CMP R0,#+0 \ 0000029C 0500000A BEQ ??ClOnKey_31 5916 { 5917 t->state^=0xFFFF; \ 000002A0 B405D5E1 LDRH R0,[R5, #+84] \ 000002A4 FF10A0E3 MOV R1,#+255 \ 000002A8 FF1C81E3 ORR R1,R1,#0xFF00 \ 000002AC 000021E0 EOR R0,R1,R0 \ 000002B0 B405C5E1 STRH R0,[R5, #+84] 5918 RecountMenu(t,1); \ 000002B4 380000EA B ??ClOnKey_32 5919 return(-1); 5920 } 5921 if (strlen(ContactT9Key)) \ ??ClOnKey_31: \ 000002B8 080087E0 ADD R0,R7,R8 \ 000002BC 1B0000EF SWI +27 \ 000002C0 000050E3 CMP R0,#+0 \ 000002C4 0500000A BEQ ??ClOnKey_33 5922 { 5923 ClearContactT9Key(); \ 000002C8 2010A0E3 MOV R1,#+32 \ 000002CC 080087E0 ADD R0,R7,R8 \ 000002D0 1D0100EF SWI +285 5924 RecountMenu(NULL,1); \ 000002D4 0110A0E3 MOV R1,#+1 \ 000002D8 0B00A0E1 MOV R0,R11 \ 000002DC ........ BL RecountMenu 5925 } 5926 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<0 && t) \ ??ClOnKey_35: \ 0000031C ........ _BLF CountContacts,??CountContacts??rA \ 00000320 010050E3 CMP R0,#+1 \ 00000324 430000BA BLT ??ClOnKey_12 \ 00000328 000055E3 CMP R5,#+0 \ 0000032C 4100000A BEQ ??ClOnKey_12 5933 { 5934 t=FindContactByN(curpos); \ 00000330 040598E5 LDR R0,[R8, #+1284] \ 00000334 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000338 0050A0E1 MOV R5,R0 \ 0000033C 020000EA B ??ClOnKey_36 5935 while(t=(CLIST *)(t->next)) 5936 { 5937 if (t->isunread) goto doit; \ ??ClOnKey_37: \ 00000340 900095E5 LDR R0,[R5, #+144] \ 00000344 000050E3 CMP R0,#+0 \ 00000348 0D00001A BNE ??ClOnKey_38 5938 } \ ??ClOnKey_36: \ 0000034C 005095E5 LDR R5,[R5, #+0] \ 00000350 000055E3 CMP R5,#+0 \ 00000354 F9FFFF1A BNE ??ClOnKey_37 5939 t=(CLIST *)(&cltop); \ 00000358 4B5E88E2 ADD R5,R8,#+1200 \ 0000035C 020000EA B ??ClOnKey_39 5940 while(t=(CLIST *)(t->next)) 5941 { 5942 if (t->isunread) goto doit; \ ??ClOnKey_40: \ 00000360 900095E5 LDR R0,[R5, #+144] \ 00000364 000050E3 CMP R0,#+0 \ 00000368 0500001A BNE ??ClOnKey_38 5943 } \ ??ClOnKey_39: \ 0000036C 005095E5 LDR R5,[R5, #+0] \ 00000370 000055E3 CMP R5,#+0 \ 00000374 F9FFFF1A BNE ??ClOnKey_40 5944 if (t && Is_Show_Groups) 5945 { 5946 if (!t->isgroup) t=FindGroupByID(t->group); 5947 if (t && !t->state) 5948 { 5949 t->state^=0xFFFF; 5950 goto does; 5951 } 5952 } 5953 5954 curpage=1; \ 00000378 20A588E5 STR R10,[R8, #+1312] 5955 curpos=0; \ 0000037C 04B588E5 STR R11,[R8, #+1284] 5956 clstartItem=0; \ 00000380 30B588E5 STR R11,[R8, #+1328] 5957 /* while(t=(CLIST *)(t->next)) 5958 { 5959 if (t->isactive) goto doit; 5960 } 5961 t=(CLIST *)(&cltop); 5962 5963 while(t=(CLIST *)(t->next)) 5964 { 5965 if (t->isactive) goto doit; 5966 } 5967 return(-1);*/ 5968 doit: 5969 { 5970 CLIST *g=FindGroupByID(t->group); \ ??ClOnKey_38: \ 00000384 100095E5 LDR R0,[R5, #+16] \ 00000388 ........ _BLF FindGroupByID,??FindGroupByID??rA 5971 if (g) \ 0000038C 000050E3 CMP R0,#+0 5972 { 5973 if (g->state) \ 00000390 B415D011 LDRHNE R1,[R0, #+84] \ 00000394 00005113 CMPNE R1,#+0 5974 { 5975 g->state=0; \ 00000398 B4B5C011 STRHNE R11,[R0, #+84] 5976 } 5977 } 5978 } 5979 does: 5980 RecountMenu(t,1); \ ??ClOnKey_32: \ 0000039C 0110A0E3 MOV R1,#+1 \ 000003A0 0500A0E1 MOV R0,R5 \ ??ClOnKey_26: \ 000003A4 ........ BL RecountMenu 5981 return(-1); \ ??ClOnKey_30: \ 000003A8 00006AE2 RSB R0,R10,#+0 \ 000003AC F08FBDE8 POP {R4-R11,PC} 5982 } 5983 break; 5984 case GREEN_BUTTON: 5985 { 5986 // IsActiveUp=!IsActiveUp; 5987 // RecountMenu(NULL,1); 5988 t=FindContactByN(curpos); \ ??ClOnKey_41: \ 000003B0 ........ _BLF FindContactByN,??FindContactByN??rA \ 000003B4 0050A0E1 MOV R5,R0 5989 if(!t->isgroup) \ 000003B8 080095E5 LDR R0,[R5, #+8] \ 000003BC 000050E3 CMP R0,#+0 \ 000003C0 1C00001A BNE ??ClOnKey_12 5990 CreateContactMenu(t); \ 000003C4 0500A0E1 MOV R0,R5 \ 000003C8 ........ BL CreateContactMenu \ 000003CC 190000EA B ??ClOnKey_12 5991 } 5992 break; 5993 // case RED_BUTTON: return (1); 5994 case VOL_UP_BUTTON: 5995 #ifdef NEWSGOLD 5996 if(isVolUpButton) \ ??ClOnKey_42: \ 000003D0 D8019FE5 LDR R0,??ClOnKey_43 ;; isVolUpButton \ 000003D4 000090E5 LDR R0,[R0, #+0] \ 000003D8 000050E3 CMP R0,#+0 \ 000003DC 1500000A BEQ ??ClOnKey_12 5997 CreateScreenSelectGUI(); \ 000003E0 ........ _BLF CreateScreenSelectGUI,??CreateScreenSelectGUI??rA \ 000003E4 130000EA B ??ClOnKey_12 5998 #endif 5999 break; 6000 case VOL_DOWN_BUTTON: 6001 { 6002 if(isVolDownButton) \ ??ClOnKey_44: \ 000003E8 C4019FE5 LDR R0,??ClOnKey_43+0x4 ;; isVolDownButton \ 000003EC 000090E5 LDR R0,[R0, #+0] \ 000003F0 000050E3 CMP R0,#+0 \ 000003F4 0F00000A BEQ ??ClOnKey_12 6003 { 6004 if(!away_m) \ 000003F8 B00398E5 LDR R0,[R8, #+944] \ 000003FC 000050E3 CMP R0,#+0 \ 00000400 0300001A BNE ??ClOnKey_45 6005 { 6006 away_m=!away_m; \ 00000404 B0A388E5 STR R10,[R8, #+944] 6007 main_d=1; \ 00000408 A8A288E5 STR R10,[R8, #+680] 6008 InputAwayMsg(); \ 0000040C ........ BL InputAwayMsg \ 00000410 080000EA B ??ClOnKey_12 6009 } 6010 else 6011 { 6012 msg_away_timer=0; 6013 away_m=!away_m; 6014 if(change_back_status) \ ??ClOnKey_45: \ 00000414 B80398E5 LDR R0,[R8, #+952] \ 00000418 ACB388E5 STR R11,[R8, #+940] \ 0000041C B0B388E5 STR R11,[R8, #+944] \ 00000420 000050E3 CMP R0,#+0 \ 00000424 0300000A BEQ ??ClOnKey_12 6015 { 6016 CurrentStatus=status_rem; \ 00000428 B40398E5 LDR R0,[R8, #+948] \ 0000042C A00388E5 STR R0,[R8, #+928] 6017 set_my_status(); \ 00000430 ........ BL set_my_status 6018 change_back_status=0; \ 00000434 B8B388E5 STR R11,[R8, #+952] 6019 } 6020 } 6021 } 6022 } 6023 break; 6024 } 6025 6026 if (key=='#' && (CountContacts()>0))//Если есть хоть один контакт то выполнять,иначе возможен пикофф \ ??ClOnKey_12: \ 00000438 230056E3 CMP R6,#+35 \ 0000043C 4A00001A BNE ??ClOnKey_11 \ 00000440 ........ _BLF CountContacts,??CountContacts??rA \ 00000444 010050E3 CMP R0,#+1 \ 00000448 340000BA BLT ??ClOnKey_46 6027 { 6028 t=FindContactByN(curpos); \ 0000044C 040598E5 LDR R0,[R8, #+1284] \ 00000450 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000454 0050A0E1 MOV R5,R0 6029 if(ActionResh) \ 00000458 58019FE5 LDR R0,??ClOnKey_43+0x8 ;; ActionResh \ 0000045C 000090E5 LDR R0,[R0, #+0] \ 00000460 000050E3 CMP R0,#+0 \ 00000464 1A00001A BNE ??ClOnKey_47 6030 { 6031 while(t=(CLIST *)(t->next)) 6032 { 6033 if (t->isactive) goto doit4; 6034 } 6035 t=(CLIST *)(&cltop); 6036 while(t=(CLIST *)(t->next)) 6037 { 6038 if (t->isactive) goto doit4; 6039 } 6040 return(-1); 6041 doit4: 6042 { 6043 CLIST *g=FindGroupByID(t->group); 6044 if (g) 6045 { 6046 if (g->state) 6047 { 6048 g->state=0; 6049 } 6050 } 6051 } 6052 RecountMenu(t,1); 6053 } 6054 else 6055 { 6056 if(t->log && !(t->just_now))//очистить лог \ 00000468 A00095E5 LDR R0,[R5, #+160] \ 0000046C 000050E3 CMP R0,#+0 \ 00000470 0600000A BEQ ??ClOnKey_48 \ 00000474 740095E5 LDR R0,[R5, #+116] \ 00000478 000050E3 CMP R0,#+0 \ 0000047C 0300001A BNE ??ClOnKey_48 6057 { 6058 FreeLOGQ(&t->log); \ 00000480 A00085E2 ADD R0,R5,#+160 \ 00000484 ........ BL FreeLOGQ 6059 t->msg_count=0; \ 00000488 B0B085E5 STR R11,[R5, #+176] 6060 t->isactive=0; \ 0000048C ACB085E5 STR R11,[R5, #+172] 6061 } 6062 6063 if(t->just_now)//если контакт тока зашел,то обнуляем \ ??ClOnKey_48: \ 00000490 740095E5 LDR R0,[R5, #+116] \ 00000494 000050E3 CMP R0,#+0 \ 00000498 0300000A BEQ ??ClOnKey_49 6064 { 6065 CLIST *tt; 6066 tt=FindContactByUin(t->uin); \ 0000049C 0C0095E5 LDR R0,[R5, #+12] \ 000004A0 ........ _BLF FindContactByUin,??FindContactByUin??rA 6067 tt->just_now=0; \ 000004A4 74B080E5 STR R11,[R0, #+116] 6068 tt->just_i=0; \ 000004A8 78B080E5 STR R11,[R0, #+120] 6069 } 6070 6071 if(t->uin==UIN)//если нажали на Loopback, то обнуляем все just_now'ы \ ??ClOnKey_49: \ 000004AC ........ LDR R1,??DataTable239 ;; UIN \ 000004B0 0C0095E5 LDR R0,[R5, #+12] \ 000004B4 001091E5 LDR R1,[R1, #+0] \ 000004B8 010050E1 CMP R0,R1 \ 000004BC 2000001A BNE ??ClOnKey_50 6072 { 6073 CLIST *tt; 6074 tt=(CLIST *)(&cltop); \ 000004C0 4B0E88E2 ADD R0,R8,#+1200 \ 000004C4 1B0000EA B ??ClOnKey_51 \ ??ClOnKey_52: \ 000004C8 AC0095E5 LDR R0,[R5, #+172] \ 000004CC 000050E3 CMP R0,#+0 \ 000004D0 0900001A BNE ??ClOnKey_53 \ ??ClOnKey_47: \ 000004D4 005095E5 LDR R5,[R5, #+0] \ 000004D8 000055E3 CMP R5,#+0 \ 000004DC F9FFFF1A BNE ??ClOnKey_52 \ 000004E0 4B5E88E2 ADD R5,R8,#+1200 \ ??ClOnKey_54: \ 000004E4 005095E5 LDR R5,[R5, #+0] \ 000004E8 000055E3 CMP R5,#+0 \ 000004EC ADFFFF0A BEQ ??ClOnKey_30 \ 000004F0 AC0095E5 LDR R0,[R5, #+172] \ 000004F4 000050E3 CMP R0,#+0 \ 000004F8 F9FFFF0A BEQ ??ClOnKey_54 \ ??ClOnKey_53: \ 000004FC 100095E5 LDR R0,[R5, #+16] \ 00000500 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000504 000050E3 CMP R0,#+0 \ 00000508 B415D011 LDRHNE R1,[R0, #+84] \ 0000050C 00005113 CMPNE R1,#+0 \ 00000510 B4B5C011 STRHNE R11,[R0, #+84] \ 00000514 0110A0E3 MOV R1,#+1 \ 00000518 0500A0E1 MOV R0,R5 \ ??ClOnKey_55: \ 0000051C ........ BL RecountMenu 6075 while(tt=(CLIST *)(tt->next)) 6076 { 6077 if(tt->just_now){ tt->just_now=0; tt->just_i=0; } 6078 } 6079 } 6080 if(strlen(ContactT9Key)) ClearContactT9Key(); 6081 RecountMenu(NULL,0); 6082 } 6083 } 6084 } 6085 6086 if ((key>='0')&&(key<='9') && msg->gbsmsg->msg==KEY_DOWN) 6087 { 6088 AddContactT9Key(key); 6089 RecountMenu(NULL,1); 6090 return(-1); 6091 } 6092 return 0; \ ??ClOnKey_46: \ 00000520 0000A0E3 MOV R0,#+0 \ 00000524 F08FBDE8 POP {R4-R11,PC} ;; return \ ??ClOnKey_56: \ 00000528 741090E5 LDR R1,[R0, #+116] \ 0000052C 000051E3 CMP R1,#+0 \ 00000530 74B08015 STRNE R11,[R0, #+116] \ 00000534 78B08015 STRNE R11,[R0, #+120] \ ??ClOnKey_51: \ 00000538 000090E5 LDR R0,[R0, #+0] \ 0000053C 000050E3 CMP R0,#+0 \ 00000540 F8FFFF1A BNE ??ClOnKey_56 \ ??ClOnKey_50: \ 00000544 080087E0 ADD R0,R7,R8 \ 00000548 1B0000EF SWI +27 \ 0000054C 000050E3 CMP R0,#+0 \ 00000550 0200000A BEQ ??ClOnKey_57 \ 00000554 2010A0E3 MOV R1,#+32 \ 00000558 080087E0 ADD R0,R7,R8 \ 0000055C 1D0100EF SWI +285 \ ??ClOnKey_57: \ 00000560 0010A0E3 MOV R1,#+0 \ 00000564 0100A0E1 MOV R0,R1 \ 00000568 EBFFFFEA B ??ClOnKey_55 \ ??ClOnKey_11: \ 0000056C 300056E3 CMP R6,#+48 \ 00000570 EAFFFFBA BLT ??ClOnKey_46 \ 00000574 3A0056E3 CMP R6,#+58 \ 00000578 E8FFFFAA BGE ??ClOnKey_46 \ 0000057C 040094E5 LDR R0,[R4, #+4] \ 00000580 9310A0E3 MOV R1,#+147 \ 00000584 040090E5 LDR R0,[R0, #+4] \ 00000588 401F81E3 ORR R1,R1,#0x100 \ 0000058C 010050E1 CMP R0,R1 \ 00000590 E2FFFF1A BNE ??ClOnKey_46 \ 00000594 0600A0E1 MOV R0,R6 \ 00000598 ........ BL AddContactT9Key \ 0000059C 0110A0E3 MOV R1,#+1 \ 000005A0 0000A0E3 MOV R0,#+0 \ 000005A4 ........ BL RecountMenu \ 000005A8 0000E0E3 MVN R0,#+0 \ 000005AC F08FBDE8 POP {R4-R11,PC} \ ??ClOnKey_43: \ 000005B0 ........ DC32 isVolUpButton \ 000005B4 ........ DC32 isVolDownButton \ 000005B8 ........ DC32 ActionResh 6093 } 6094 6095 #ifdef DEBUG 6096 static int OnKey(MAIN_GUI *data, GUI_MSG *msg) 6097 { 6098 DirectRedrawGUI(); 6099 // int k=msg->gbsmsg->submess; 6100 return ClOnKey(msg); 6101 // return(0); 6102 } 6103 6104 extern void kill_data(void *p, void (*func_p)(void *)); 6105 6106 int method28(void){return(0);} 6107 int method29(void){return(0);} 6108 6109 const void * const gui_methods2[11]={ 6110 (void *)OnRedraw, 6111 (void *)onCreate, 6112 (void *)onClose, 6113 (void *)onFocus, 6114 (void *)onUnfocus, 6115 (void *)OnKey, 6116 0, 6117 (void *)kill_data, 6118 (void *)method28, 6119 (void *)method29, 6120 0 6121 }; 6122 6123 6124 6125 static void CreateCL() 6126 { 6127 const RECT Canvas={0,0,0,0}; 6128 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); 6129 zeromem(main_gui,sizeof(MAIN_GUI)); 6130 main_gui->gui.canvas=(void *)(&Canvas); 6131 main_gui->gui.methods=(void *)gui_methods2; 6132 // main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); 6133 //patch_rect((RECT*)&Canvas,0,YDISP,ScreenW()-1,ScreenH()-1); 6134 contactlist_menu_id=CreateGUI(main_gui); 6135 SMART_REDRAW(); 6136 } 6137 6138 #endif 6139 #ifdef ICONBAR 6140 #else 6141 #ifdef ELKA 6142 #undef YDISP 6143 #define YDISP 24 6144 #endif 6145 #endif 6146 6147 6148 /************************************************************************************************/ 6149 6150 \ In segment CODE, align 4, keep-with-next 6151 void DrawLoadScreen(MAIN_GUI *data) 6152 { \ DrawLoadScreen: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 24D04DE2 SUB SP,SP,#+36 6153 int scr_w=ScreenW(); 6154 int scr_h=ScreenH(); 6155 int pos_status;//2026rev 6156 int pm = pictures_max, pl = pictures_loaded;//2026rev 6157 RECT rc=PBRECT; 6158 DrawRectangle(0,YDISP,scr_w-1,scr_h-1,0, GetPaletteAdrByColorIndex(1), GetPaletteAdrByColorIndex(1)); 6159 6160 // if(!USE_ADD_UIN)//Если не используем доп.уины 6161 //{ 6162 // DrawImg(0,0,S_ICONS[ICON_LOGO]); 6163 DrwImage(icons[ICON_LOGO],0,0); 6164 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //by BoBa 10.07 6165 if(IsShowInfo) \ 00000008 80989FE5 LDR R9,??DrawLoadScreen_0 ;; `?` \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 888100EF SWI +33160 \ 00000014 08008DE5 STR R0,[SP, #+8] \ 00000018 898100EF SWI +33161 \ 0000001C 70189FE5 LDR R1,??DrawLoadScreen_0+0x4 ;; pictures_loaded \ 00000020 04008DE5 STR R0,[SP, #+4] \ 00000024 6C089FE5 LDR R0,??DrawLoadScreen_0+0x8 ;; pictures_max \ 00000028 005090E5 LDR R5,[R0, #+0] \ 0000002C 001091E5 LDR R1,[R1, #+0] \ 00000030 64089FE5 LDR R0,??DrawLoadScreen_0+0xC ;; PBRECT \ 00000034 00108DE5 STR R1,[SP, #+0] \ 00000038 F0A0D0E1 LDRSH R10,[R0, #+0] \ 0000003C F2B0D0E1 LDRSH R11,[R0, #+2] \ 00000040 F460D0E1 LDRSH R6,[R0, #+4] \ 00000044 F670D0E1 LDRSH R7,[R0, #+6] \ 00000048 0100A0E3 MOV R0,#+1 \ 0000004C 2E0100EF SWI +302 \ 00000050 0080A0E1 MOV R8,R0 \ 00000054 0100A0E3 MOV R0,#+1 \ 00000058 2E0100EF SWI +302 \ 0000005C 00012DE9 PUSH {R8} \ 00000060 ........ LDR R8,??DataTable241 ;; i_rc \ 00000064 01002DE9 PUSH {R0} \ 00000068 1810A0E3 MOV R1,#+24 \ 0000006C 0000A0E3 MOV R0,#+0 \ 00000070 01002DE9 PUSH {R0} \ 00000074 10009DE5 LDR R0,[SP, #+16] \ 00000078 013040E2 SUB R3,R0,#+1 \ 0000007C 14009DE5 LDR R0,[SP, #+20] \ 00000080 012040E2 SUB R2,R0,#+1 \ 00000084 0000A0E3 MOV R0,#+0 \ 00000088 B40100EF SWI +436 \ 0000008C 700098E5 LDR R0,[R8, #+112] \ 00000090 0020A0E3 MOV R2,#+0 \ 00000094 0010A0E3 MOV R1,#+0 \ 00000098 ........ BL DrwImage \ 0000009C FC279FE5 LDR R2,??DrawLoadScreen_0+0x10 ;; IsShowInfo \ 000000A0 A00498E5 LDR R0,[R8, #+1184] \ 000000A4 A41498E5 LDR R1,[R8, #+1188] \ 000000A8 002092E5 LDR R2,[R2, #+0] \ 000000AC 0CD08DE2 ADD SP,SP,#+12 \ 000000B0 000052E3 CMP R2,#+0 \ 000000B4 1A00000A BEQ ??DrawLoadScreen_1 6166 { 6167 wsprintf(data->ws1,LG_GRSTATESTRING,connect_state,RXstate,RX,TX,sendq_l,hostname,logmsg); \ 000000B8 E420A0E3 MOV R2,#+228 \ 000000BC 702D82E3 ORR R2,R2,#0x1C00 \ 000000C0 082082E0 ADD R2,R2,R8 \ 000000C4 04002DE9 PUSH {R2} \ 000000C8 3420A0E3 MOV R2,#+52 \ 000000CC 802D82E3 ORR R2,R2,#0x2000 \ 000000D0 082082E0 ADD R2,R2,R8 \ 000000D4 04002DE9 PUSH {R2} \ 000000D8 CC2298E5 LDR R2,[R8, #+716] \ 000000DC 04002DE9 PUSH {R2} \ 000000E0 02002DE9 PUSH {R1} \ 000000E4 01002DE9 PUSH {R0} \ 000000E8 8C3498E5 LDR R3,[R8, #+1164] \ 000000EC 902498E5 LDR R2,[R8, #+1168] \ 000000F0 340094E5 LDR R0,[R4, #+52] \ 000000F4 101089E2 ADD R1,R9,#+16 \ 000000F8 240100EF SWI +292 6168 wsprintf(data->ws2,logmsg2); \ 000000FC E400A0E3 MOV R0,#+228 \ 00000100 740D80E3 ORR R0,R0,#0x1D00 \ 00000104 081080E0 ADD R1,R0,R8 \ 00000108 380094E5 LDR R0,[R4, #+56] \ 0000010C 240100EF SWI +292 6169 wstrcat(data->ws1,data->ws2); \ 00000110 381094E5 LDR R1,[R4, #+56] \ 00000114 340094E5 LDR R0,[R4, #+52] \ 00000118 210100EF SWI +289 \ 0000011C 14D08DE2 ADD SP,SP,#+20 \ 00000120 040000EA B ??DrawLoadScreen_2 6170 } 6171 else 6172 { 6173 wsprintf(data->ws1,"State: %d, RXstate: %d",connect_state,RXstate); \ ??DrawLoadScreen_1: \ 00000124 8C3498E5 LDR R3,[R8, #+1164] \ 00000128 902498E5 LDR R2,[R8, #+1168] \ 0000012C 340094E5 LDR R0,[R4, #+52] \ 00000130 481089E2 ADD R1,R9,#+72 \ 00000134 240100EF SWI +292 6174 } 6175 6176 if(pm != pl) \ ??DrawLoadScreen_2: \ 00000138 00009DE5 LDR R0,[SP, #+0] \ 0000013C 000055E1 CMP R5,R0 \ 00000140 2E00000A BEQ ??DrawLoadScreen_3 6177 { 6178 /* DrawRectangle(0,scr_h-4-2*GetFontYSIZE(FONT_SMALL_BOLD),scr_w-1,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-2,0, 6179 GetPaletteAdrByColorIndex(0), 6180 GetPaletteAdrByColorIndex(0));*/ 6181 // pos_status = ((scr_w-1) * pl) / pm; 6182 /* DrawRectangle(1,scr_h-4-2*GetFontYSIZE(FONT_SMALL_BOLD)+1,pos_status,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-3,0, 6183 GetPaletteAdrByColorIndex(14), 6184 GetPaletteAdrByColorIndex(14)); */ 6185 // wstrcatprintf(data->ws1,"\nLoading images..."); 6186 6187 DrawRectangle(rc.x,rc.y,rc.x2,rc.y2,0,BGPBcolor,BGPBcolor); \ 00000144 58079FE5 LDR R0,??DrawLoadScreen_0+0x14 ;; BGPBcolor \ 00000148 0730A0E1 MOV R3,R7 \ 0000014C 0010A0E1 MOV R1,R0 \ 00000150 02002DE9 PUSH {R1} \ 00000154 01002DE9 PUSH {R0} \ 00000158 0620A0E1 MOV R2,R6 \ 0000015C 0B10A0E1 MOV R1,R11 \ 00000160 0000A0E3 MOV R0,#+0 \ 00000164 01002DE9 PUSH {R0} \ 00000168 0A00A0E1 MOV R0,R10 \ 0000016C B40100EF SWI +436 6188 pos_status = (((rc.x2-rc.x)-1) * pl) / pm; \ 00000170 0C109DE5 LDR R1,[SP, #+12] \ 00000174 0A0046E0 SUB R0,R6,R10 \ 00000178 010040E2 SUB R0,R0,#+1 \ 0000017C 910000E0 MUL R0,R1,R0 \ 00000180 0510A0E1 MOV R1,R5 \ 00000184 ........ _BLF ??div32_a,??rA??div32_a 6189 DrawRectangle(rc.x+2,rc.y+2,rc.x+pos_status+2,rc.y2-2,0,PBcolor,PBcolor); \ 00000188 18079FE5 LDR R0,??DrawLoadScreen_0+0x18 ;; PBcolor \ 0000018C 023047E2 SUB R3,R7,#+2 \ 00000190 0020A0E1 MOV R2,R0 \ 00000194 04002DE9 PUSH {R2} \ 00000198 01002DE9 PUSH {R0} \ 0000019C 0000A0E3 MOV R0,#+0 \ 000001A0 01002DE9 PUSH {R0} \ 000001A4 0A0081E0 ADD R0,R1,R10 \ 000001A8 022080E2 ADD R2,R0,#+2 \ 000001AC 02108BE2 ADD R1,R11,#+2 \ 000001B0 02008AE2 ADD R0,R10,#+2 \ 000001B4 B40100EF SWI +436 6190 6191 if(total_smiles) \ 000001B8 EC069FE5 LDR R0,??DrawLoadScreen_0+0x1C ;; total_smiles \ 000001BC 001090E5 LDR R1,[R0, #+0] \ 000001C0 18D08DE2 ADD SP,SP,#+24 \ 000001C4 000051E3 CMP R1,#+0 \ 000001C8 0300000A BEQ ??DrawLoadScreen_4 6192 { 6193 wstrcatprintf(data->ws1,"\nLoaded %d smiles",total_smiles); \ 000001CC 002090E5 LDR R2,[R0, #+0] \ 000001D0 340094E5 LDR R0,[R4, #+52] \ 000001D4 601089E2 ADD R1,R9,#+96 \ 000001D8 160200EF SWI +534 6194 } 6195 if (xstatuses_load) \ ??DrawLoadScreen_4: \ 000001DC CC069FE5 LDR R0,??DrawLoadScreen_0+0x20 ;; xstatuses_load \ 000001E0 000090E5 LDR R0,[R0, #+0] \ 000001E4 000050E3 CMP R0,#+0 \ 000001E8 0400000A BEQ ??DrawLoadScreen_3 6196 { 6197 wstrcatprintf(data->ws1,"\nLoaded %d xstatus",total_xstatuses); \ 000001EC C0069FE5 LDR R0,??DrawLoadScreen_0+0x24 ;; total_xstatuses \ 000001F0 741089E2 ADD R1,R9,#+116 \ 000001F4 002090E5 LDR R2,[R0, #+0] \ 000001F8 340094E5 LDR R0,[R4, #+52] \ 000001FC 160200EF SWI +534 6198 } 6199 } 6200 6201 DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD),FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ ??DrawLoadScreen_3: \ 00000200 1700A0E3 MOV R0,#+23 \ 00000204 2E0100EF SWI +302 \ 00000208 0060A0E1 MOV R6,R0 \ 0000020C 0000A0E3 MOV R0,#+0 \ 00000210 2E0100EF SWI +302 \ 00000214 0070A0E1 MOV R7,R0 \ 00000218 0500A0E3 MOV R0,#+5 \ 0000021C C50100EF SWI +453 \ 00000220 08209DE5 LDR R2,[SP, #+8] \ 00000224 042042E2 SUB R2,R2,#+4 \ 00000228 0C208DE5 STR R2,[SP, #+12] \ 0000022C 04109DE5 LDR R1,[SP, #+4] \ 00000230 40002DE9 PUSH {R6} \ 00000234 045041E2 SUB R5,R1,#+4 \ 00000238 80002DE9 PUSH {R7} \ 0000023C 0010A0E3 MOV R1,#+0 \ 00000240 02002DE9 PUSH {R1} \ 00000244 000045E0 SUB R0,R5,R0 \ 00000248 0230A0E1 MOV R3,R2 \ 0000024C 1B20A0E3 MOV R2,#+27 \ 00000250 0810A0E3 MOV R1,#+8 \ 00000254 02002DE9 PUSH {R1} \ 00000258 01002DE9 PUSH {R0} \ 0000025C 340094E5 LDR R0,[R4, #+52] \ 00000260 0310A0E3 MOV R1,#+3 6202 /*} 6203 else 6204 { 6205 wsprintf(data->ws1,"%t UIN!","Выберите"); 6206 DrawLine(0,CLIST_Y1-3,ScreenW()-1,CLIST_Y1-3,0,clrWhite); 6207 DrawString(data->ws1,2,YDISP+2,scr_w-1,YDISP+GetFontYSIZE(FONT_SMALL),FONT_SMALL,0,fntSelect,0); 6208 // DrawList(); 6209 } 6210 */ 6211 6212 #ifdef kluchnik 6213 int y=160; \ 00000264 A060A0E3 MOV R6,#+160 \ 00000268 4C0100EF SWI +332 6214 char A[]="[A] %s"; \ 0000026C 44169FE5 LDR R1,??DrawLoadScreen_0+0x28 ;; `?` \ 00000270 30008DE2 ADD R0,SP,#+48 \ 00000274 0C0091E8 LDM R1,{R2,R3} \ 00000278 0C0080E8 STM R0,{R2,R3} 6215 char I[]="[I]"; \ 0000027C 001099E5 LDR R1,[R9, #0] \ 00000280 24008DE2 ADD R0,SP,#+36 \ 00000284 001080E5 STR R1,[R0, #+0] 6216 char V[]="[V]"; \ 00000288 2C169FE5 LDR R1,??DrawLoadScreen_0+0x2C ;; `?_1` \ 0000028C 28008DE2 ADD R0,SP,#+40 \ 00000290 002091E5 LDR R2,[R1, #0] 6217 char S[]="[S]"; \ 00000294 24169FE5 LDR R1,??DrawLoadScreen_0+0x30 ;; `?_1` \ 00000298 002080E5 STR R2,[R0, #+0] \ 0000029C 002091E5 LDR R2,[R1, #0] \ 000002A0 2C008DE2 ADD R0,SP,#+44 \ 000002A4 002080E5 STR R2,[R0, #+0] 6218 6219 if(CurrentPrivateStatus==1) \ 000002A8 740498E5 LDR R0,[R8, #+1140] \ 000002AC 14D08DE2 ADD SP,SP,#+20 \ 000002B0 010050E3 CMP R0,#+1 \ 000002B4 1D00001A BNE ??DrawLoadScreen_5 6220 { 6221 wsprintf(data->ws2,I); \ 000002B8 380094E5 LDR R0,[R4, #+56] \ 000002BC 10108DE2 ADD R1,SP,#+16 \ 000002C0 240100EF SWI +292 6222 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); \ 000002C4 1700A0E3 MOV R0,#+23 \ 000002C8 2E0100EF SWI +302 \ 000002CC 0070A0E1 MOV R7,R0 \ 000002D0 0200A0E3 MOV R0,#+2 \ 000002D4 2E0100EF SWI +302 \ 000002D8 00A0A0E1 MOV R10,R0 \ 000002DC 0B00A0E3 MOV R0,#+11 \ 000002E0 C50100EF SWI +453 \ 000002E4 0060A0E1 MOV R6,R0 \ 000002E8 888100EF SWI +33160 \ 000002EC 80002DE9 PUSH {R7} \ 000002F0 00042DE9 PUSH {R10} \ 000002F4 0010A0E3 MOV R1,#+0 \ 000002F8 02002DE9 PUSH {R1} \ 000002FC 013040E2 SUB R3,R0,#+1 \ 00000300 A020A0E3 MOV R2,#+160 \ 00000304 0B10A0E3 MOV R1,#+11 \ 00000308 02002DE9 PUSH {R1} \ 0000030C A01086E2 ADD R1,R6,#+160 \ 00000310 02002DE9 PUSH {R1} \ 00000314 380094E5 LDR R0,[R4, #+56] \ 00000318 0210A0E3 MOV R1,#+2 \ 0000031C 4C0100EF SWI +332 6223 y+=GetFontYSIZE(11)+5; \ 00000320 0B00A0E3 MOV R0,#+11 \ 00000324 C50100EF SWI +453 \ 00000328 A56080E2 ADD R6,R0,#+165 \ 0000032C 14D08DE2 ADD SP,SP,#+20 6224 } 6225 6226 if(Is_Vibra_Enabled) \ ??DrawLoadScreen_5: \ 00000330 100398E5 LDR R0,[R8, #+784] \ 00000334 000050E3 CMP R0,#+0 \ 00000338 1E00000A BEQ ??DrawLoadScreen_6 6227 { 6228 wsprintf(data->ws2,V); \ 0000033C 380094E5 LDR R0,[R4, #+56] \ 00000340 14108DE2 ADD R1,SP,#+20 \ 00000344 240100EF SWI +292 6229 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); \ 00000348 1700A0E3 MOV R0,#+23 \ 0000034C 2E0100EF SWI +302 \ 00000350 0070A0E1 MOV R7,R0 \ 00000354 0200A0E3 MOV R0,#+2 \ 00000358 2E0100EF SWI +302 \ 0000035C 00A0A0E1 MOV R10,R0 \ 00000360 0B00A0E3 MOV R0,#+11 \ 00000364 C50100EF SWI +453 \ 00000368 00B0A0E1 MOV R11,R0 \ 0000036C 888100EF SWI +33160 \ 00000370 80002DE9 PUSH {R7} \ 00000374 00042DE9 PUSH {R10} \ 00000378 0010A0E3 MOV R1,#+0 \ 0000037C 02002DE9 PUSH {R1} \ 00000380 013040E2 SUB R3,R0,#+1 \ 00000384 0620A0E1 MOV R2,R6 \ 00000388 0B10A0E3 MOV R1,#+11 \ 0000038C 02002DE9 PUSH {R1} \ 00000390 06108BE0 ADD R1,R11,R6 \ 00000394 02002DE9 PUSH {R1} \ 00000398 380094E5 LDR R0,[R4, #+56] \ 0000039C 0210A0E3 MOV R1,#+2 \ 000003A0 4C0100EF SWI +332 6230 y+=GetFontYSIZE(11)+5; \ 000003A4 0B00A0E3 MOV R0,#+11 \ 000003A8 C50100EF SWI +453 \ 000003AC 050080E2 ADD R0,R0,#+5 \ 000003B0 066080E0 ADD R6,R0,R6 \ 000003B4 14D08DE2 ADD SP,SP,#+20 6231 } 6232 6233 if(Is_Sounds_Enabled) \ ??DrawLoadScreen_6: \ 000003B8 680498E5 LDR R0,[R8, #+1128] \ 000003BC 000050E3 CMP R0,#+0 \ 000003C0 1E00000A BEQ ??DrawLoadScreen_7 6234 { 6235 wsprintf(data->ws2,S); \ 000003C4 380094E5 LDR R0,[R4, #+56] \ 000003C8 18108DE2 ADD R1,SP,#+24 \ 000003CC 240100EF SWI +292 6236 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); \ 000003D0 1700A0E3 MOV R0,#+23 \ 000003D4 2E0100EF SWI +302 \ 000003D8 0070A0E1 MOV R7,R0 \ 000003DC 0200A0E3 MOV R0,#+2 \ 000003E0 2E0100EF SWI +302 \ 000003E4 00A0A0E1 MOV R10,R0 \ 000003E8 0B00A0E3 MOV R0,#+11 \ 000003EC C50100EF SWI +453 \ 000003F0 00B0A0E1 MOV R11,R0 \ 000003F4 888100EF SWI +33160 \ 000003F8 80002DE9 PUSH {R7} \ 000003FC 00042DE9 PUSH {R10} \ 00000400 0010A0E3 MOV R1,#+0 \ 00000404 02002DE9 PUSH {R1} \ 00000408 013040E2 SUB R3,R0,#+1 \ 0000040C 0620A0E1 MOV R2,R6 \ 00000410 0B10A0E3 MOV R1,#+11 \ 00000414 02002DE9 PUSH {R1} \ 00000418 06108BE0 ADD R1,R11,R6 \ 0000041C 02002DE9 PUSH {R1} \ 00000420 380094E5 LDR R0,[R4, #+56] \ 00000424 0210A0E3 MOV R1,#+2 \ 00000428 4C0100EF SWI +332 6237 y+=GetFontYSIZE(11)+5; \ 0000042C 0B00A0E3 MOV R0,#+11 \ 00000430 C50100EF SWI +453 \ 00000434 050080E2 ADD R0,R0,#+5 \ 00000438 066080E0 ADD R6,R0,R6 \ 0000043C 14D08DE2 ADD SP,SP,#+20 6238 } 6239 6240 if(Is_Double_Vibra_On) \ ??DrawLoadScreen_7: \ 00000440 F40298E5 LDR R0,[R8, #+756] \ 00000444 000050E3 CMP R0,#+0 \ 00000448 1A00000A BEQ ??DrawLoadScreen_8 6241 { 6242 wsprintf(data->ws2,"[Vr]"); \ 0000044C 380094E5 LDR R0,[R4, #+56] \ 00000450 081089E2 ADD R1,R9,#+8 \ 00000454 240100EF SWI +292 6243 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); \ 00000458 1700A0E3 MOV R0,#+23 \ 0000045C 2E0100EF SWI +302 \ 00000460 0070A0E1 MOV R7,R0 \ 00000464 0200A0E3 MOV R0,#+2 \ 00000468 2E0100EF SWI +302 \ 0000046C 00A0A0E1 MOV R10,R0 \ 00000470 0B00A0E3 MOV R0,#+11 \ 00000474 C50100EF SWI +453 \ 00000478 00B0A0E1 MOV R11,R0 \ 0000047C 888100EF SWI +33160 \ 00000480 80002DE9 PUSH {R7} \ 00000484 00042DE9 PUSH {R10} \ 00000488 0010A0E3 MOV R1,#+0 \ 0000048C 02002DE9 PUSH {R1} \ 00000490 013040E2 SUB R3,R0,#+1 \ 00000494 0620A0E1 MOV R2,R6 \ 00000498 0B10A0E3 MOV R1,#+11 \ 0000049C 02002DE9 PUSH {R1} \ 000004A0 06108BE0 ADD R1,R11,R6 \ 000004A4 02002DE9 PUSH {R1} \ 000004A8 380094E5 LDR R0,[R4, #+56] \ 000004AC 0210A0E3 MOV R1,#+2 \ 000004B0 4C0100EF SWI +332 \ 000004B4 14D08DE2 ADD SP,SP,#+20 6244 } 6245 6246 if(away_m) \ ??DrawLoadScreen_8: \ 000004B8 B00398E5 LDR R0,[R8, #+944] \ 000004BC 000050E3 CMP R0,#+0 \ 000004C0 1F00000A BEQ ??DrawLoadScreen_9 6247 { 6248 wsprintf(data->ws2,A,away_msg_time_dace); \ 000004C4 E400A0E3 MOV R0,#+228 \ 000004C8 6C0D80E3 ORR R0,R0,#0x1B00 \ 000004CC 082080E0 ADD R2,R0,R8 \ 000004D0 380094E5 LDR R0,[R4, #+56] \ 000004D4 1C108DE2 ADD R1,SP,#+28 \ 000004D8 240100EF SWI +292 6249 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); \ 000004DC 1700A0E3 MOV R0,#+23 \ 000004E0 2E0100EF SWI +302 \ 000004E4 0070A0E1 MOV R7,R0 \ 000004E8 0200A0E3 MOV R0,#+2 \ 000004EC 2E0100EF SWI +302 \ 000004F0 00A0A0E1 MOV R10,R0 \ 000004F4 0B00A0E3 MOV R0,#+11 \ 000004F8 C50100EF SWI +453 \ 000004FC 00B0A0E1 MOV R11,R0 \ 00000500 888100EF SWI +33160 \ 00000504 80002DE9 PUSH {R7} \ 00000508 00042DE9 PUSH {R10} \ 0000050C 0010A0E3 MOV R1,#+0 \ 00000510 02002DE9 PUSH {R1} \ 00000514 013040E2 SUB R3,R0,#+1 \ 00000518 0620A0E1 MOV R2,R6 \ 0000051C 0B10A0E3 MOV R1,#+11 \ 00000520 02002DE9 PUSH {R1} \ 00000524 06108BE0 ADD R1,R11,R6 \ 00000528 02002DE9 PUSH {R1} \ 0000052C 380094E5 LDR R0,[R4, #+56] \ 00000530 0210A0E3 MOV R1,#+2 \ 00000534 4C0100EF SWI +332 6250 y+=GetFontYSIZE(11)+5; \ 00000538 0B00A0E3 MOV R0,#+11 \ 0000053C C50100EF SWI +453 \ 00000540 14D08DE2 ADD SP,SP,#+20 6251 } 6252 6253 6254 wsprintf(data->ws2,"Uin: %d",UIN); \ ??DrawLoadScreen_9: \ 00000544 ........ LDR R0,??DataTable239 ;; UIN \ 00000548 881089E2 ADD R1,R9,#+136 \ 0000054C 002090E5 LDR R2,[R0, #+0] \ 00000550 380094E5 LDR R0,[R4, #+56] \ 00000554 240100EF SWI +292 6255 DrawString(data->ws2,1,scr_h-10-4*GetFontYSIZE(FONT_SMALL_BOLD)+1,ScreenW()-1,scr_h-10-GetFontYSIZE(FONT_MEDIUM_BOLD)-3 6256 ,FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 00000558 1700A0E3 MOV R0,#+23 \ 0000055C 2E0100EF SWI +302 \ 00000560 0060A0E1 MOV R6,R0 \ 00000564 0000A0E3 MOV R0,#+0 \ 00000568 2E0100EF SWI +302 \ 0000056C 0070A0E1 MOV R7,R0 \ 00000570 0500A0E3 MOV R0,#+5 \ 00000574 C50100EF SWI +453 \ 00000578 00A0A0E1 MOV R10,R0 \ 0000057C 888100EF SWI +33160 \ 00000580 00B0A0E1 MOV R11,R0 \ 00000584 0900A0E3 MOV R0,#+9 \ 00000588 C50100EF SWI +453 \ 0000058C 04209DE5 LDR R2,[SP, #+4] \ 00000590 0010A0E3 MOV R1,#+0 \ 00000594 0A2042E2 SUB R2,R2,#+10 \ 00000598 00208DE5 STR R2,[SP, #+0] \ 0000059C 40002DE9 PUSH {R6} \ 000005A0 80002DE9 PUSH {R7} \ 000005A4 02002DE9 PUSH {R1} \ 000005A8 01304BE2 SUB R3,R11,#+1 \ 000005AC 000142E0 SUB R0,R2,R0, LSL #+2 \ 000005B0 0810A0E3 MOV R1,#+8 \ 000005B4 02002DE9 PUSH {R1} \ 000005B8 0A1042E0 SUB R1,R2,R10 \ 000005BC 012080E2 ADD R2,R0,#+1 \ 000005C0 031041E2 SUB R1,R1,#+3 \ 000005C4 02002DE9 PUSH {R1} \ 000005C8 380094E5 LDR R0,[R4, #+56] \ 000005CC 0110A0E3 MOV R1,#+1 \ 000005D0 4C0100EF SWI +332 6257 6258 if(connect_state==3) \ 000005D4 900498E5 LDR R0,[R8, #+1168] \ 000005D8 14D08DE2 ADD SP,SP,#+20 \ 000005DC 030050E3 CMP R0,#+3 \ 000005E0 0B00001A BNE ??DrawLoadScreen_10 6259 { 6260 wsprintf(data->ws2,"Online: %02d:%02d:%02d not action %d sec", uptimeHour, uptimeMin, uptimeSec,msg_away_timer*5); \ 000005E4 AC0398E5 LDR R0,[R8, #+940] \ 000005E8 901089E2 ADD R1,R9,#+144 \ 000005EC 000180E0 ADD R0,R0,R0, LSL #+2 \ 000005F0 01002DE9 PUSH {R0} \ 000005F4 C80398E5 LDR R0,[R8, #+968] \ 000005F8 01002DE9 PUSH {R0} \ 000005FC C43398E5 LDR R3,[R8, #+964] \ 00000600 C02398E5 LDR R2,[R8, #+960] \ 00000604 380094E5 LDR R0,[R4, #+56] \ 00000608 240100EF SWI +292 \ 0000060C 08D08DE2 ADD SP,SP,#+8 \ 00000610 070000EA B ??DrawLoadScreen_11 6261 } 6262 else 6263 wsprintf(data->ws2,"Offline [%02d:%02d:%02d]",uptimeHour, uptimeMin, uptimeSec); \ ??DrawLoadScreen_10: \ 00000614 C80398E5 LDR R0,[R8, #+968] \ 00000618 BC1089E2 ADD R1,R9,#+188 \ 0000061C 01002DE9 PUSH {R0} \ 00000620 C43398E5 LDR R3,[R8, #+964] \ 00000624 C02398E5 LDR R2,[R8, #+960] \ 00000628 380094E5 LDR R0,[R4, #+56] \ 0000062C 240100EF SWI +292 \ 00000630 04D08DE2 ADD SP,SP,#+4 6264 DrawString(data->ws2,1,scr_h-10-3*GetFontYSIZE(FONT_SMALL_BOLD)+1,ScreenW()-1,scr_h-10-GetFontYSIZE(FONT_MEDIUM_BOLD)-3 6265 ,FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ ??DrawLoadScreen_11: \ 00000634 1700A0E3 MOV R0,#+23 \ 00000638 2E0100EF SWI +302 \ 0000063C 0060A0E1 MOV R6,R0 \ 00000640 0000A0E3 MOV R0,#+0 \ 00000644 2E0100EF SWI +302 \ 00000648 0070A0E1 MOV R7,R0 \ 0000064C 0500A0E3 MOV R0,#+5 \ 00000650 C50100EF SWI +453 \ 00000654 00A0A0E1 MOV R10,R0 \ 00000658 888100EF SWI +33160 \ 0000065C 00B0A0E1 MOV R11,R0 \ 00000660 0900A0E3 MOV R0,#+9 \ 00000664 C50100EF SWI +453 \ 00000668 40002DE9 PUSH {R6} \ 0000066C 80002DE9 PUSH {R7} \ 00000670 0010A0E3 MOV R1,#+0 \ 00000674 02002DE9 PUSH {R1} \ 00000678 01304BE2 SUB R3,R11,#+1 \ 0000067C 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000680 0810A0E3 MOV R1,#+8 \ 00000684 02002DE9 PUSH {R1} \ 00000688 10109DE5 LDR R1,[SP, #+16] \ 0000068C 0A1041E0 SUB R1,R1,R10 \ 00000690 031041E2 SUB R1,R1,#+3 \ 00000694 02002DE9 PUSH {R1} \ 00000698 14109DE5 LDR R1,[SP, #+20] \ 0000069C 000041E0 SUB R0,R1,R0 \ 000006A0 012080E2 ADD R2,R0,#+1 \ 000006A4 380094E5 LDR R0,[R4, #+56] \ 000006A8 0110A0E3 MOV R1,#+1 \ 000006AC 4C0100EF SWI +332 6266 #endif 6267 6268 if(IsInvertSoftKey) \ 000006B0 1C009DE5 LDR R0,[SP, #+28] \ 000006B4 C060A0E1 ASR R6,R0,#+1 \ 000006B8 ........ LDR R0,??DataTable247 ;; IsInvertSoftKey \ 000006BC 000090E5 LDR R0,[R0, #+0] \ 000006C0 14D08DE2 ADD SP,SP,#+20 \ 000006C4 000050E3 CMP R0,#+0 \ 000006C8 3800000A BEQ ??DrawLoadScreen_12 6269 { 6270 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 000006CC 380094E5 LDR R0,[R4, #+56] \ 000006D0 D82089E2 ADD R2,R9,#+216 \ 000006D4 041089E2 ADD R1,R9,#+4 \ 000006D8 240100EF SWI +292 6271 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)); \ 000006DC 1700A0E3 MOV R0,#+23 \ 000006E0 2E0100EF SWI +302 \ 000006E4 0070A0E1 MOV R7,R0 \ 000006E8 0000A0E3 MOV R0,#+0 \ 000006EC 2E0100EF SWI +302 \ 000006F0 00A0A0E1 MOV R10,R0 \ 000006F4 0500A0E3 MOV R0,#+5 \ 000006F8 C50100EF SWI +453 \ 000006FC 80002DE9 PUSH {R7} \ 00000700 00042DE9 PUSH {R10} \ 00000704 0410A0E3 MOV R1,#+4 \ 00000708 02002DE9 PUSH {R1} \ 0000070C 002045E0 SUB R2,R5,R0 \ 00000710 0510A0E3 MOV R1,#+5 \ 00000714 02002DE9 PUSH {R1} \ 00000718 0510A0E1 MOV R1,R5 \ 0000071C 02002DE9 PUSH {R1} \ 00000720 20309DE5 LDR R3,[SP, #+32] \ 00000724 380094E5 LDR R0,[R4, #+56] \ 00000728 0610A0E1 MOV R1,R6 \ 0000072C 4C0100EF SWI +332 6272 6273 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ 00000730 B00498E5 LDR R0,[R8, #+1200] \ 00000734 14D08DE2 ADD SP,SP,#+20 \ 00000738 000050E3 CMP R0,#+0 \ 0000073C 380094E5 LDR R0,[R4, #+56] \ 00000740 E0208912 ADDNE R2,R9,#+224 \ 00000744 07208902 ADDEQ R2,R9,#+7 \ 00000748 041089E2 ADD R1,R9,#+4 \ 0000074C 240100EF SWI +292 6274 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)); \ 00000750 1700A0E3 MOV R0,#+23 \ 00000754 2E0100EF SWI +302 \ 00000758 0070A0E1 MOV R7,R0 \ 0000075C 0000A0E3 MOV R0,#+0 \ 00000760 2E0100EF SWI +302 \ 00000764 0080A0E1 MOV R8,R0 \ 00000768 0500A0E3 MOV R0,#+5 \ 0000076C C50100EF SWI +453 \ 00000770 80002DE9 PUSH {R7} \ 00000774 00012DE9 PUSH {R8} \ 00000778 0110A0E3 MOV R1,#+1 \ 0000077C 02002DE9 PUSH {R1} \ 00000780 0630A0E1 MOV R3,R6 \ 00000784 002045E0 SUB R2,R5,R0 \ 00000788 0510A0E3 MOV R1,#+5 \ 0000078C 02002DE9 PUSH {R1} \ 00000790 0510A0E1 MOV R1,R5 \ 00000794 02002DE9 PUSH {R1} \ 00000798 380094E5 LDR R0,[R4, #+56] \ 0000079C 0310A0E3 MOV R1,#+3 \ 000007A0 4C0100EF SWI +332 \ 000007A4 14D08DE2 ADD SP,SP,#+20 \ 000007A8 24D08DE2 ADD SP,SP,#+36 \ 000007AC F08FBDE8 POP {R4-R11,PC} 6275 } 6276 else 6277 { 6278 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ ??DrawLoadScreen_12: \ 000007B0 B00498E5 LDR R0,[R8, #+1200] \ 000007B4 041089E2 ADD R1,R9,#+4 \ 000007B8 000050E3 CMP R0,#+0 \ 000007BC 380094E5 LDR R0,[R4, #+56] \ 000007C0 E0208912 ADDNE R2,R9,#+224 \ 000007C4 07208902 ADDEQ R2,R9,#+7 \ 000007C8 240100EF SWI +292 6279 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)); \ 000007CC 1700A0E3 MOV R0,#+23 \ 000007D0 2E0100EF SWI +302 \ 000007D4 0070A0E1 MOV R7,R0 \ 000007D8 0000A0E3 MOV R0,#+0 \ 000007DC 2E0100EF SWI +302 \ 000007E0 0080A0E1 MOV R8,R0 \ 000007E4 0500A0E3 MOV R0,#+5 \ 000007E8 C50100EF SWI +453 \ 000007EC 80002DE9 PUSH {R7} \ 000007F0 00012DE9 PUSH {R8} \ 000007F4 0410A0E3 MOV R1,#+4 \ 000007F8 02002DE9 PUSH {R1} \ 000007FC 002045E0 SUB R2,R5,R0 \ 00000800 0510A0E3 MOV R1,#+5 \ 00000804 02002DE9 PUSH {R1} \ 00000808 0510A0E1 MOV R1,R5 \ 0000080C 02002DE9 PUSH {R1} \ 00000810 20309DE5 LDR R3,[SP, #+32] \ 00000814 380094E5 LDR R0,[R4, #+56] \ 00000818 0610A0E1 MOV R1,R6 \ 0000081C 4C0100EF SWI +332 6280 6281 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 00000820 380094E5 LDR R0,[R4, #+56] \ 00000824 D82089E2 ADD R2,R9,#+216 \ 00000828 041089E2 ADD R1,R9,#+4 \ 0000082C 240100EF SWI +292 6282 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)); \ 00000830 1700A0E3 MOV R0,#+23 \ 00000834 2E0100EF SWI +302 \ 00000838 0070A0E1 MOV R7,R0 \ 0000083C 0000A0E3 MOV R0,#+0 \ 00000840 2E0100EF SWI +302 \ 00000844 0080A0E1 MOV R8,R0 \ 00000848 0500A0E3 MOV R0,#+5 \ 0000084C C50100EF SWI +453 \ 00000850 80002DE9 PUSH {R7} \ 00000854 00012DE9 PUSH {R8} \ 00000858 0110A0E3 MOV R1,#+1 \ 0000085C 02002DE9 PUSH {R1} \ 00000860 0630A0E1 MOV R3,R6 \ 00000864 002045E0 SUB R2,R5,R0 \ 00000868 0510A0E3 MOV R1,#+5 \ 0000086C 02002DE9 PUSH {R1} \ 00000870 0510A0E1 MOV R1,R5 \ 00000874 02002DE9 PUSH {R1} \ 00000878 380094E5 LDR R0,[R4, #+56] \ 0000087C 0310A0E3 MOV R1,#+3 \ 00000880 4C0100EF SWI +332 \ 00000884 28D08DE2 ADD SP,SP,#+40 6283 } 6284 /* 6285 wsprintf(data->ws2,"%d %s",addonuin[0].uin,addonuin[0].pass); 6286 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)); 6287 */ 6288 } \ 00000888 24D08DE2 ADD SP,SP,#+36 \ 0000088C F08FBDE8 POP {R4-R11,PC} ;; return \ ??DrawLoadScreen_0: \ 00000890 ........ DC32 `?` \ 00000894 ........ DC32 pictures_loaded \ 00000898 ........ DC32 pictures_max \ 0000089C ........ DC32 PBRECT \ 000008A0 ........ DC32 IsShowInfo \ 000008A4 ........ DC32 BGPBcolor \ 000008A8 ........ DC32 PBcolor \ 000008AC ........ DC32 total_smiles \ 000008B0 ........ DC32 xstatuses_load \ 000008B4 ........ DC32 total_xstatuses \ 000008B8 ........ DC32 `?` \ 000008BC ........ DC32 `?_1` \ 000008C0 ........ DC32 `?_1` 6289 6290 //int ShowLoadScreen=1; \ In segment CODE, align 4, keep-with-next 6291 void method0(MAIN_GUI *data) 6292 { \ method0: \ 00000000 30402DE9 PUSH {R4,R5,LR} 6293 // if(!IsGuiOnTop(maingui_id)) return; 6294 #ifndef DEBUG 6295 if(IsGuiOnTop(maingui_id)) \ 00000004 ........ LDR R5,??DataTable241 ;; i_rc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 000395E5 LDR R0,[R5, #+768] \ 00000010 350100EF SWI +309 \ 00000014 000050E3 CMP R0,#+0 \ 00000018 3080BD08 POPEQ {R4,R5,PC} 6296 { 6297 if(ShowLoadScreen) \ 0000001C DC0495E5 LDR R0,[R5, #+1244] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 0000A0E3 MOV R0,#+0 \ 00000028 0300000A BEQ ??method0_0 6298 { 6299 #ifdef ELKA 6300 DisableIconBar(0); \ 0000002C 3B0200EF SWI +571 6301 #endif 6302 DrawLoadScreen(data); \ 00000030 0400A0E1 MOV R0,R4 \ 00000034 3040BDE8 POP {R4,R5,LR} ;; Pop \ 00000038 ........ B DrawLoadScreen ;; tailcall 6303 } 6304 else 6305 { 6306 #ifdef ELKA 6307 #ifdef ICONBAR 6308 DisableIconBar(0); \ ??method0_0: \ 0000003C 3B0200EF SWI +571 6309 #else 6310 DisableIconBar(1); 6311 #endif 6312 #endif 6313 SetCanvasFlag(1); \ 00000040 0100A0E3 MOV R0,#+1 \ 00000044 ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 6314 DrawContactList(); \ 00000048 3040BDE8 POP {R4,R5,LR} ;; Pop \ 0000004C ........ B DrawContactList ;; tailcall 6315 } 6316 } 6317 #else 6318 DrawLoadScreen(data); 6319 #endif 6320 } 6321 \ In segment CODE, align 4, keep-with-next 6322 void method1(MAIN_GUI *data,void *(*malloc_adr)(int)) 6323 { \ method1: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 6324 data->ws1=AllocWS(256); \ 00000008 400FA0E3 MOV R0,#+256 \ 0000000C 250100EF SWI +293 \ 00000010 340084E5 STR R0,[R4, #+52] 6325 data->ws2=AllocWS(256); \ 00000014 400FA0E3 MOV R0,#+256 \ 00000018 250100EF SWI +293 \ 0000001C 380084E5 STR R0,[R4, #+56] 6326 6327 if(isSystemFont) clfont=100+pngFont; \ 00000020 ........ LDR R0,??DataTable242 ;; isSystemFont \ 00000024 000090E5 LDR R0,[R0, #+0] \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 0300000A BEQ ??method1_0 \ 00000030 ........ LDR R0,??DataTable243 ;; pngFont \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 640080E2 ADD R0,R0,#+100 \ 0000003C 000000EA B ??method1_1 6328 else clfont=2; \ ??method1_0: \ 00000040 0200A0E3 MOV R0,#+2 \ ??method1_1: \ 00000044 ........ LDR R5,??DataTable264 ;; i_rc \ 00000048 100585E5 STR R0,[R5, #+1296] 6329 6330 if(icons[IS_ONLINE]) \ 0000004C 4C0095E5 LDR R0,[R5, #+76] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 100595E5 LDR R0,[R5, #+1296] \ 00000058 0600000A BEQ ??method1_2 6331 hy=(icons[IS_ONLINE]->h > FontH(clfont)) ? (icons[IS_ONLINE]->h) : (FontH(clfont)); \ 0000005C ........ _BLF FontH,??FontH??rA \ 00000060 4C1095E5 LDR R1,[R5, #+76] \ 00000064 B220D1E1 LDRH R2,[R1, #+2] \ 00000068 020050E1 CMP R0,R2 \ 0000006C 0200A0B1 MOVLT R0,R2 \ 00000070 010000BA BLT ??method1_3 \ 00000074 100595E5 LDR R0,[R5, #+1296] 6332 else 6333 hy=FontH(clfont); \ ??method1_2: \ 00000078 ........ _BLF FontH,??FontH??rA 6334 6335 hy+=YDISP; \ ??method1_3: \ 0000007C 180080E2 ADD R0,R0,#+24 \ 00000080 0C0585E5 STR R0,[R5, #+1292] 6336 data->gui.state=1; \ 00000084 0100A0E3 MOV R0,#+1 \ 00000088 0C00C4E5 STRB R0,[R4, #+12] 6337 } \ 0000008C 3080BDE8 POP {R4,R5,PC} ;; return 6338 \ In segment CODE, align 4, keep-with-next 6339 void method2(MAIN_GUI *data,void (*mfree_adr)(void *)) 6340 { \ method2: \ 00000000 30402DE9 PUSH {R4,R5,LR} 6341 FreeWS(data->ws1); 6342 FreeWS(data->ws2); 6343 #ifndef DEBUG 6344 mfree(screen3.bitmap); \ 00000004 ........ LDR R5,??DataTable264 ;; i_rc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 340094E5 LDR R0,[R4, #+52] \ 00000010 290100EF SWI +297 \ 00000014 380094E5 LDR R0,[R4, #+56] \ 00000018 290100EF SWI +297 \ 0000001C 100095E5 LDR R0,[R5, #+16] \ 00000020 150000EF SWI +21 6345 mfree(screen4.bitmap); \ 00000024 1C0095E5 LDR R0,[R5, #+28] \ 00000028 150000EF SWI +21 6346 #endif 6347 data->gui.state=0; \ 0000002C 0000A0E3 MOV R0,#+0 \ 00000030 0C00C4E5 STRB R0,[R4, #+12] 6348 } \ 00000034 3080BDE8 POP {R4,R5,PC} ;; return 6349 \ In segment CODE, align 4, keep-with-next 6350 void method3(MAIN_GUI *data,void *(*malloc_adr)(int),void (*mfree_adr)(void *)) 6351 { \ method3: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 6352 DisableIDLETMR(); \ 00000008 7F0100EF SWI +383 6353 data->gui.state=2; \ 0000000C 0200A0E3 MOV R0,#+2 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 6354 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 6355 \ In segment CODE, align 4, keep-with-next 6356 void method4(MAIN_GUI *data,void (*mfree_adr)(void *)) 6357 { 6358 if (data->gui.state!=2) \ method4: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 6359 return; 6360 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 6361 } \ 00000010 1EFF2FE1 BX LR ;; return 6362 6363 \ In segment CODE, align 4, keep-with-next 6364 int LoadOnKey(GUI_MSG *msg) 6365 { \ LoadOnKey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 0CD04DE2 SUB SP,SP,#+12 6366 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 5B00001A BNE ??LoadOnKey_1 6367 { 6368 switch(msg->gbsmsg->submess) \ 00000020 ........ LDR R4,??DataTable264 ;; i_rc \ 00000024 ........ LDR R0,??DataTable247 ;; IsInvertSoftKey \ 00000028 082092E5 LDR R2,[R2, #+8] \ 0000002C DC3494E5 LDR R3,[R4, #+1244] \ 00000030 94C494E5 LDR R12,[R4, #+1172] \ 00000034 00E090E5 LDR LR,[R0, #+0] \ 00000038 ........ LDR R5,??DataTable263 ;; create_connect \ 0000003C ........ LDR R1,??DataTable259 ;; end_socket \ 00000040 0400A0E3 MOV R0,#+4 \ 00000044 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000048 046080E0 ADD R6,R0,R4 \ 0000004C ........ LDR R0,??DataTable250 ;; 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 330052E3 CMP R2,#+51 \ 00000068 4800008A 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 0C45451A DC8 +12,+69,+69,+26 \ 0000007C 45454545 DC8 +69,+69,+69,+69 \ 00000080 4545202A DC8 +69,+69,+32,+42 \ 00000084 45454545 DC8 +69,+69,+69,+69 \ 00000088 45454545 DC8 +69,+69,+69,+69 \ 0000008C 45454545 DC8 +69,+69,+69,+69 \ 00000090 45454545 DC8 +69,+69,+69,+69 \ 00000094 45454545 DC8 +69,+69,+69,+69 \ 00000098 45454545 DC8 +69,+69,+69,+69 \ 0000009C 45454545 DC8 +69,+69,+69,+69 \ 000000A0 45454545 DC8 +69,+69,+69,+69 \ 000000A4 4545452D DC8 +69,+69,+69,+45 \ 000000A8 30353A40 DC8 +48,+53,+58,+64 6369 { 6370 // case ENTER_BUTTON: Enter(); break; 6371 case LEFT_SOFT: 6372 if(IsInvertSoftKey) \ ??LoadOnKey_2: \ 000000AC 00005EE3 CMP LR,#+0 \ 000000B0 0D00000A BEQ ??LoadOnKey_3 6373 { 6374 #ifdef DEBUG 6375 if (cltop || sock==-1) CreateCL();//create_contactlist_menu(); 6376 #else 6377 if(ShowLoadScreen && (cltop || sock==-1)) ShowLoadScreen=0;//показывть контакт лист \ ??LoadOnKey_4: \ 000000B4 000053E3 CMP R3,#+0 \ 000000B8 3400000A BEQ ??LoadOnKey_1 \ 000000BC B00494E5 LDR R0,[R4, #+1200] \ 000000C0 000050E3 CMP R0,#+0 \ 000000C4 0100001A BNE ??LoadOnKey_5 \ 000000C8 08005CE1 CMP R12,R8 \ 000000CC 2F00001A BNE ??LoadOnKey_1 \ ??LoadOnKey_5: \ 000000D0 DCA484E5 STR R10,[R4, #+1244] \ 000000D4 000000EA B ??LoadOnKey_6 6378 #endif 6379 6380 // ShowLoadScreen=0; 6381 //unhooked2=1; 6382 } 6383 else// return 1; 6384 { 6385 if(ShowLoadScreen) 6386 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 6387 else 6388 ShowLoadScreen=1; \ ??LoadOnKey_7: \ 000000D8 DC9484E5 STR R9,[R4, #+1244] \ ??LoadOnKey_6: \ 000000DC 0000A0E3 MOV R0,#+0 \ 000000E0 FE8FBDE8 POP {R1-R11,PC} 6389 } 6390 // if (cltop) remake_clmenu(); 6391 break; 6392 case RIGHT_SOFT: 6393 if(IsInvertSoftKey) \ ??LoadOnKey_8: \ 000000E4 00005EE3 CMP LR,#+0 \ 000000E8 F1FFFF0A BEQ ??LoadOnKey_4 \ ??LoadOnKey_3: \ 000000EC 000053E3 CMP R3,#+0 \ 000000F0 F8FFFF0A BEQ ??LoadOnKey_7 \ 000000F4 0100A0E3 MOV R0,#+1 \ 000000F8 FE8FBDE8 POP {R1-R11,PC} 6394 { 6395 if(ShowLoadScreen) 6396 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 6397 else 6398 ShowLoadScreen=1; 6399 } 6400 else 6401 { 6402 #ifdef DEBUG 6403 if (cltop || sock==-1)CreateCL(); //create_contactlist_menu(); 6404 #else 6405 if(ShowLoadScreen && (cltop || sock==-1)) ShowLoadScreen=0;//показывть контакт лист 6406 #endif 6407 // ShowLoadScreen=0; 6408 // unhooked2=1; 6409 } 6410 break; 6411 case GREEN_BUTTON: 6412 disautorecconect=0; \ ??LoadOnKey_9: \ 000000FC 64A484E5 STR R10,[R4, #+1124] 6413 if ((connect_state==0)&&(sock==-1)) \ 00000100 900494E5 LDR R0,[R4, #+1168] \ 00000104 000050E3 CMP R0,#+0 \ 00000108 08005C01 CMPEQ R12,R8 \ 0000010C 1F00001A BNE ??LoadOnKey_1 6414 { 6415 GBS_DelTimer(&reconnect_tmr); \ ??LoadOnKey_10: \ 00000110 0600A0E1 MOV R0,R6 \ 00000114 8C0100EF SWI +396 6416 DNR_TRIES=3; \ 00000118 D07484E5 STR R7,[R4, #+1232] 6417 SUBPROC((void *)create_connect); \ 0000011C 0500A0E1 MOV R0,R5 \ 00000120 190000EA B ??LoadOnKey_11 6418 } 6419 break; 6420 case RED_BUTTON: 6421 // extern volatile int disautorecconect; 6422 disautorecconect=1; \ ??LoadOnKey_12: \ 00000124 649484E5 STR R9,[R4, #+1124] 6423 // extern void end_socket(void); 6424 SUBPROC((void*)end_socket); \ 00000128 0100A0E1 MOV R0,R1 \ 0000012C 160000EA B ??LoadOnKey_11 6425 break; 6426 case '0': 6427 SUBPROC((void*)end_socket); \ ??LoadOnKey_13: \ 00000130 0100A0E1 MOV R0,R1 \ 00000134 710100EF SWI +369 6428 GBS_DelTimer(&reconnect_tmr); \ 00000138 F4FFFFEA B ??LoadOnKey_10 6429 DNR_TRIES=3; 6430 SUBPROC((void *)create_connect); 6431 break; 6432 6433 //------------------------------------------------------// 6434 6435 case '1': 6436 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??LoadOnKey_14: \ 0000013C 681494E5 LDR R1,[R4, #+1128] \ 00000140 000051E3 CMP R1,#+0 \ 00000144 0090A013 MOVNE R9,#+0 \ 00000148 689484E5 STR R9,[R4, #+1128] 6437 SUBPROC((void*)WriteDefSettings); \ 0000014C 0E0000EA B ??LoadOnKey_11 6438 break; 6439 case '2': 6440 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??LoadOnKey_15: \ 00000150 101394E5 LDR R1,[R4, #+784] \ 00000154 000051E3 CMP R1,#+0 \ 00000158 0090A013 MOVNE R9,#+0 \ 0000015C 109384E5 STR R9,[R4, #+784] 6441 SUBPROC((void*)WriteDefSettings); \ 00000160 090000EA B ??LoadOnKey_11 6442 break; 6443 case '3': 6444 if(CurrentPrivateStatus!=1) \ ??LoadOnKey_16: \ 00000164 740494E5 LDR R0,[R4, #+1140] \ 00000168 010050E3 CMP R0,#+1 \ 0000016C 0300A003 MOVEQ R0,#+3 6445 SetPrivateStatus(1);//Инвиз \ 00000170 0100A013 MOVNE R0,#+1 \ 00000174 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA \ 00000178 D7FFFFEA B ??LoadOnKey_6 6446 else 6447 SetPrivateStatus(3); 6448 break; 6449 case '4': 6450 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??LoadOnKey_17: \ 0000017C F41294E5 LDR R1,[R4, #+756] \ 00000180 000051E3 CMP R1,#+0 \ 00000184 0090A013 MOVNE R9,#+0 \ 00000188 F49284E5 STR R9,[R4, #+756] 6451 SUBPROC((void*)WriteDefSettings); \ ??LoadOnKey_11: \ 0000018C 710100EF SWI +369 6452 break; 6453 } 6454 } 6455 return 0; \ ??LoadOnKey_1: \ 00000190 0000A0E3 MOV R0,#+0 \ 00000194 FE8FBDE8 POP {R1-R11,PC} ;; return 6456 } 6457 6458 \ In segment CODE, align 4, keep-with-next 6459 int method5(MAIN_GUI *data,GUI_MSG *msg) 6460 { \ method5: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0140A0E1 MOV R4,R1 6461 DirectRedrawGUI(); \ 00000008 3F0100EF SWI +319 6462 #ifndef DEBUG 6463 if(ShowLoadScreen) \ 0000000C 20009FE5 LDR R0,??method5_0 ;; i_rc + 1244 \ 00000010 000090E5 LDR R0,[R0, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0400A0E1 MOV R0,R4 \ 0000001C 0100000A BEQ ??method5_1 6464 return LoadOnKey(msg); \ 00000020 1040BDE8 POP {R4,LR} ;; Pop \ 00000024 ........ B LoadOnKey ;; tailcall 6465 else 6466 ClOnKey(msg); \ ??method5_1: \ 00000028 ........ BL ClOnKey 6467 6468 return(0); \ 0000002C 0000A0E3 MOV R0,#+0 \ 00000030 1080BDE8 POP {R4,PC} ;; return \ ??method5_0: \ 00000034 ........ DC32 i_rc + 1244 6469 #else 6470 return LoadOnKey(msg); 6471 #endif 6472 /* 6473 if(msg->gbsmsg->msg==LONG_PRESS || msg->gbsmsg->msg==KEY_DOWN) 6474 { 6475 switch(msg->gbsmsg->submess) 6476 { 6477 case UP_BUTTON: MoveUp(); break; 6478 case DOWN_BUTTON: MoveDown(); break; 6479 } 6480 }*/ 6481 6482 } 6483 \ In segment CODE, align 4, keep-with-next 6484 int method8(void){return(0);} \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return \ In segment CODE, align 4, keep-with-next 6485 int method9(void){return(0);} \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 6486 6487 6488 6489 const void * const gui_methods[11]={ 6490 (void *)method0, //Redraw 6491 (void *)method1, //Create 6492 (void *)method2, //Close 6493 (void *)method3, //Focus 6494 (void *)method4, //Unfocus 6495 (void *)method5, //OnKey 6496 0, 6497 (void *)kill_data, //method7, //Destroy 6498 (void *)method8, 6499 (void *)method9, 6500 0 6501 }; 6502 6503 6504 6505 int checkGui(int id); 6506 #define idlegui_id(icsm) (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 6507 6508 int _to_develop=0; \ In segment CODE, align 4, keep-with-next 6509 int my_keyhook(int key, int m) 6510 { \ my_keyhook: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 6511 if(m==KEY_DOWN) \ 00000004 ........ LDR R4,??DataTable264 ;; i_rc \ 00000008 0060A0E1 MOV R6,R0 \ 0000000C 0150A0E3 MOV R5,#+1 \ 00000010 9300A0E3 MOV R0,#+147 \ 00000014 400F80E3 ORR R0,R0,#0x100 \ 00000018 000051E1 CMP R1,R0 \ 0000001C 2000001A BNE ??my_keyhook_0 6512 { 6513 #ifdef ELKA 6514 if ((key==CAMERA_BUTTON)&&(!IsUnlocked())) \ 00000020 140056E3 CMP R6,#+20 \ 00000024 0E00001A BNE ??my_keyhook_1 \ 00000028 430000EF SWI +67 \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 0B00001A BNE ??my_keyhook_1 6515 { 6516 GBS_StopTimer(&away_tmr); \ 00000034 0400A0E3 MOV R0,#+4 \ 00000038 700D80E3 ORR R0,R0,#0x1C00 \ 0000003C 040080E0 ADD R0,R0,R4 \ 00000040 440100EF SWI +324 6517 msg_away_timer=AUTO_ENGADE*12; \ 00000044 ........ LDR R0,??DataTable252 ;; AUTO_ENGADE \ 00000048 0C10A0E3 MOV R1,#+12 \ 0000004C 000090E5 LDR R0,[R0, #+0] \ 00000050 910000E0 MUL R0,R1,R0 \ 00000054 AC0384E5 STR R0,[R4, #+940] 6518 away_timer(); \ 00000058 ........ BL away_timer 6519 main_d=1; \ 0000005C A85284E5 STR R5,[R4, #+680] \ 00000060 0D0000EA B ??my_keyhook_2 6520 } 6521 else 6522 { 6523 #endif 6524 if(Reset_timer) \ ??my_keyhook_1: \ 00000064 80009FE5 LDR R0,??my_keyhook_3 ;; Reset_timer \ 00000068 000090E5 LDR R0,[R0, #+0] \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 F080BD08 POPEQ {R4-R7,PC} 6525 { 6526 msg_away_timer=0; 6527 away_m=0; 6528 if(change_back_status) \ 00000074 B80394E5 LDR R0,[R4, #+952] \ 00000078 0050A0E3 MOV R5,#+0 \ 0000007C AC5384E5 STR R5,[R4, #+940] \ 00000080 B05384E5 STR R5,[R4, #+944] \ 00000084 000050E3 CMP R0,#+0 \ 00000088 F080BD08 POPEQ {R4-R7,PC} 6529 { 6530 CurrentStatus=status_rem; \ 0000008C B40394E5 LDR R0,[R4, #+948] \ 00000090 A00384E5 STR R0,[R4, #+928] 6531 set_my_status(); \ 00000094 ........ BL set_my_status 6532 change_back_status=0; \ 00000098 B85384E5 STR R5,[R4, #+952] \ ??my_keyhook_2: \ 0000009C 0000A0E3 MOV R0,#+0 \ 000000A0 F080BDE8 POP {R4-R7,PC} 6533 } 6534 } 6535 #ifdef ELKA 6536 } 6537 #endif 6538 } 6539 6540 if(m==LONG_PRESS) \ ??my_keyhook_0: \ 000000A4 020080E2 ADD R0,R0,#+2 \ 000000A8 000051E1 CMP R1,R0 \ 000000AC 0C00001A BNE ??my_keyhook_4 6541 { 6542 void *icsm=FindCSMbyID(CSM_root()->idle_id); \ 000000B0 068100EF SWI +33030 \ 000000B4 040090E5 LDR R0,[R0, #+4] \ 000000B8 080100EF SWI +264 \ 000000BC 0070A0E1 MOV R7,R0 6543 if( key==VOL_DOWN_BUTTON && IsUnlocked() && !(checkGui(idlegui_id(icsm))) ) \ 000000C0 0E0056E3 CMP R6,#+14 \ 000000C4 0600001A BNE ??my_keyhook_4 \ 000000C8 430000EF SWI +67 \ 000000CC 000050E3 CMP R0,#+0 \ 000000D0 F080BD08 POPEQ {R4-R7,PC} \ 000000D4 2C0097E5 LDR R0,[R7, #+44] \ 000000D8 ........ BL checkGui \ 000000DC 000050E3 CMP R0,#+0 6544 { 6545 _to_develop=1; \ 000000E0 34558405 STREQ R5,[R4, #+1332] 6546 //to_develop(); 6547 } 6548 } 6549 return 0; \ ??my_keyhook_4: \ 000000E4 0000A0E3 MOV R0,#+0 \ 000000E8 F080BDE8 POP {R4-R7,PC} ;; return \ ??my_keyhook_3: \ 000000EC ........ DC32 Reset_timer 6550 } \ In segment DATA_C, align 4, align-sorted 6551 /* 6552 int mode_enter; 6553 int mode; 6554 6555 int my_keyhook(int submsg, int msg) 6556 { 6557 if(Reset_timer) 6558 { 6559 msg_away_timer=0; 6560 away_m=0; 6561 if(change_back_status) 6562 { 6563 CurrentStatus=status_rem; 6564 set_my_status(); 6565 change_back_status=0; 6566 } 6567 } 6568 if (submsg!=VOL_DOWN_BUTTON) return(0); 6569 switch(msg) 6570 { 6571 case KEY_DOWN: 6572 if (mode_enter==2) 6573 { 6574 GBS_SendMessage(MMI_CEPID,KEY_UP,VOL_DOWN_BUTTON); 6575 return (0); 6576 } 6577 mode_enter=0; 6578 return (2); 6579 case KEY_UP: 6580 if (mode==1)mode=0; 6581 if (mode_enter==0) 6582 { 6583 mode_enter=2; 6584 GBS_SendMessage(MMI_CEPID,KEY_DOWN,VOL_DOWN_BUTTON); 6585 return (2); 6586 } 6587 if (mode_enter==2) 6588 { 6589 mode_enter=0; 6590 return (0); 6591 } 6592 mode_enter=0; 6593 return (2); 6594 case LONG_PRESS: 6595 mode_enter=1; 6596 if(mode==0) 6597 { 6598 void *icsm; 6599 icsm=FindCSMbyID(CSM_root()->idle_id); 6600 if(!(checkGui(idlegui_id(icsm))) && IsUnlocked()) 6601 { 6602 to_develop(); 6603 } 6604 } 6605 mode=1; 6606 break; 6607 } 6608 return(2); 6609 }*/ 6610 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" \ _d: \ 0000000E 256400 DC8 "%d" \ 00000011 000000 DC8 0, 0, 0 \ 00000014 536F756E6420 DC8 "Sound 0n" \ 306E00 \ 0000001D 000000 DC8 0, 0, 0 \ 00000020 536F756E6420 DC8 "Sound Off" \ 4F666600 \ 0000002A 0000 DC8 0, 0 \ 0000002C 566962726120 DC8 "Vibra On" \ 4F6E00 \ 00000035 000000 DC8 0, 0, 0 \ 00000038 566962726120 DC8 "Vibra Off" \ 4F666600 \ 00000042 0000 DC8 0, 0 \ 00000044 C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\352\353\376\367\345\355" \ E2EAEBFEF7E5 \ ED00 \ 00000052 0000 DC8 0, 0 \ 00000054 C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\373\352\353\376\367\345\355" \ E2FBEAEBFEF7 \ E5ED00 \ 00000063 00 DC8 0 \ 00000064 566962726120 DC8 "Vibra rem On" \ 72656D204F6E \ 00 \ 00000071 000000 DC8 0, 0, 0 \ 00000074 566962726120 DC8 "Vibra rem Off" \ 72656D204F66 \ 6600 \ 00000082 0000 DC8 0, 0 \ 00000084 416C6C206368 DC8 "All chat clear!" \ 617420636C65 \ 61722100 \ 00000094 44656661756C DC8 "Default show x-status" \ 742073686F77 \ 20782D737461 \ 74757300 \ 000000AA 0000 DC8 0, 0 \ 000000AC 44656661756C DC8 "Default show time" \ 742073686F77 \ 2074696D6500 \ 000000BE 0000 DC8 0, 0 \ 000000C0 57616974696E DC8 "Waiting for GPRS up..." \ 6720666F7220 \ 475052532075 \ 702E2E2E00 \ 000000D7 00 DC8 0 \ 000000D8 436F6E6E6563 DC8 "Connect to %s:%d" \ 7420746F2025 \ 733A256400 \ 000000E9 000000 DC8 0, 0, 0 \ 000000EC 0A436F6E6E65 DC8 "\012Connect by IP!" \ 637420627920 \ 49502100 \ 000000FC 53656E642044 DC8 "Send DNR..." \ 4E522E2E2E00 \ 00000108 444E52204552 DC8 "DNR ERROR %d!" \ 524F52202564 \ 2100 \ 00000116 0000 DC8 0, 0 \ 00000118 444E52204F6B DC8 "DNR Ok, connecting..." \ 2C20636F6E6E \ 656374696E67 \ 2E2E2E00 \ 0000012E 0000 DC8 0, 0 \ 00000130 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 \ 00000149 000000 DC8 0, 0, 0 \ 0000014C 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 \ 00000177 00 DC8 0 \ 00000178 D1E5F0E2E5F0 DC8 "\321\345\360\342\345\360 \355\345 \355\340\351\344\345\355!" \ 20EDE520EDE0 \ E9E4E5ED2100 \ 0000018A 0000 DC8 0, 0 \ 0000018C 426164207061 DC8 "Bad packet" \ 636B657400 \ 00000197 00 DC8 0 \ 00000198 534325643A20 DC8 "SC%d: %04X" \ 2530345800 \ 000001A3 00 DC8 0 \ 000001A4 4552523A2025 DC8 "ERR: %s" \ 7300 \ 000001AC 75696E256400 DC8 "uin%d" \ 000001B2 0000 DC8 0, 0 \ 000001B4 4D534725643A DC8 "MSG%d: %s" \ 20257300 \ 000001BE 0000 DC8 0, 0 \ 000001C0 50696E672025 DC8 "Ping %d-%d seconds!" \ 642D25642073 \ 65636F6E6473 \ 2100 \ 000001D4 50696E673A20 DC8 "Ping: %d sec" \ 256420736563 \ 00 \ 000001E1 000000 DC8 0, 0, 0 \ 000001E4 2025733A2025 DC8 " %s: %02d:%02d:%02d" \ 3032643A2530 \ 32643A253032 \ 6400 \ 000001F8 537461747573 DC8 "Status change" \ 206368616E67 \ 6500 \ 00000206 0000 DC8 0, 0 \ 00000208 5B25733A2025 DC8 "[%s: %s]\012" \ 735D0A00 \ 00000212 0000 DC8 0, 0 \ 00000214 2825642F2564 DC8 "(%d/%d)" \ 2900 \ 0000021C 257325632563 DC8 "%s%c%c(%d/%d)" \ 2825642F2564 \ 2900 \ 0000022A 0000 DC8 0, 0 \ 0000022C 25735C6C6F67 DC8 "%s\\logs.txt" \ 732E74787400 \ 00000238 556E72656164 DC8 "Unread: %d" \ 3A20256400 \ 00000243 00 DC8 0 \ 00000244 4E6174494351 DC8 "NatICQ config updated!" \ 20636F6E6669 \ 672075706461 \ 7465642100 \ 0000025B 00 DC8 0 \ 0000025C 257332323430 DC8 "%s2240.png" \ 2E706E6700 \ 00000267 00 DC8 0 \ 00000268 475052532075 DC8 "GPRS up, wait 10 sec..." \ 702C20776169 \ 742031302073 \ 65632E2E2E00 \ 00000280 54727920746F DC8 "Try to login..." \ 206C6F67696E \ 2E2E2E00 \ 00000290 CDE520E220F1 DC8 "\315\345 \342 \361\357\350\361\352\345" \ EFE8F1EAE500 \ 0000029C 4C6F6F706261 DC8 "Loopback" \ 636B00 \ 000002A5 000000 DC8 0, 0, 0 \ 000002A8 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 \ 000002D0 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 \ 000002F2 0000 DC8 0, 0 \ 000002F4 446973636F6E DC8 "Disconnected, %d bytes not sended!" \ 6E6563746564 \ 2C2025642062 \ 79746573206E \ 6F742073656E \ 6465642100 \ 00000317 00 DC8 0 \ 00000318 25730A526563 DC8 "%s\012Reconect after %d second..." \ 6F6E65637420 \ 616674657220 \ 256420736563 \ 6F6E642E2E2E \ 00 \ 00000337 00 DC8 0 \ 00000338 50696E67204E DC8 "Ping None" \ 6F6E6500 \ 00000342 0000 DC8 0, 0 \ 00000344 C2E2E5E4E8F2 DC8 "\302\342\345\344\350\362\345 UIN/\357\340\360\356\353\374!" \ E52055494E2F \ EFE0F0EEEBFC \ 2100 \ ipc_my_name: \ 00000358 4E6174494351 DC8 "NatICQ" \ 00 \ 0000035F 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000036F 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000 \ ipc_xtask_name: \ 00000378 585461736B00 DC8 "XTask" \ 0000037E 0000 DC8 0, 0 \ x_status_change: \ 00000380 582D53746174 DC8 "X-Status change" \ 757320636861 \ 6E676500 \ gui_methods: \ 00000390 ............ DC32 method0, method1, method2, method3, method4, method5, 0H \ ............ \ ............ \ ............ \ 00000000 \ 000003AC ............ 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 ............ DC32 `?`, `?` \ .... \ 00000078 ............ DC32 `?`, `?` \ .... \ 00000080 ........ DC32 `?` \ In segment DATA_C, align 4, align-sorted \ input_awaymsg_desc: \ 00000000 01000000.... DC32 1, input_awaymsg_onkey, input_awaymsg_ghook, input_awaymsg_locret \ ............ \ ........ \ 00000010 00000000.... DC32 0, input_awaymsg_skt \ .... \ 00000018 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000020 080000006400 DC32 8, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ input_awaymsg_hdr: \ 00000038 000000008300 DC16 0, 0, 131, 21 \ 1500 \ 00000040 00000000.... DC32 0H, `?`: \ 00000000 5B495D00 DC8 "[I]" \ percent_t: \ 00000004 257400 DC8 "%t" \ empty_str: \ 00000007 00 DC8 "" \ 00000008 5B56725D00 DC8 "[Vr]" \ 0000000D 000000 DC8 0, 0, 0 \ 00000010 53746174653A DC8 53H, 74H, 61H, 74H, 65H, 3AH, 20H, 25H \ 2025 \ 00000018 642C20525873 DC8 64H, 2CH, 20H, 52H, 58H, 73H, 74H, 61H \ 7461 \ 00000020 74653A202564 DC8 74H, 65H, 3AH, 20H, 25H, 64H, 0AH, 52H \ 0A52 \ 00000028 783A2564622C DC8 78H, 3AH, 25H, 64H, 62H, 2CH, 54H, 78H \ 5478 \ 00000030 3A2564620A51 DC8 3AH, 25H, 64H, 62H, 0AH, 51H, 75H, 65H \ 7565 \ 00000038 75653A202564 DC8 75H, 65H, 3AH, 20H, 25H, 64H, 62H, 0AH \ 620A \ 00000040 25730A257300 DC8 25H, 73H, 0AH, 25H, 73H, 0 \ 00000046 0000 DC8 0, 0 \ 00000048 53746174653A DC8 "State: %d, RXstate: %d" \ 2025642C2052 \ 587374617465 \ 3A20256400 \ 0000005F 00 DC8 0 \ 00000060 0A4C6F616465 DC8 "\012Loaded %d smiles" \ 642025642073 \ 6D696C657300 \ 00000072 0000 DC8 0, 0 \ 00000074 0A4C6F616465 DC8 "\012Loaded %d xstatus" \ 642025642078 \ 737461747573 \ 00 \ 00000087 00 DC8 0 \ 00000088 55696E3A2025 DC8 "Uin: %d" \ 6400 \ 00000090 4F6E6C696E65 DC8 "Online: %02d:%02d:%02d not action %d sec" \ 3A2025303264 \ 3A253032643A \ 253032642020 \ 206E6F742061 \ 6374696F6E20 \ 256420736563 \ 00 \ 000000BB 00 DC8 0 \ 000000BC 4F66666C696E DC8 "Offline [%02d:%02d:%02d]" \ 65205B253032 \ 643A25303264 \ 3A253032645D \ 00 \ 000000D5 000000 DC8 0, 0, 0 \ 000000D8 4578697400 DC8 "Exit" \ 000000DD 000000 DC8 0, 0, 0 \ 000000E0 434C69737400 DC8 "CList" \ 000000E6 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ def_setting: \ 00000000 25736465665F DC8 "%sdef_settings_mod_%d" \ 73657474696E \ 67735F6D6F64 \ 5F256400 \ 00000016 0000 DC8 0, 0 \ def_sett: \ 00000018 25736465665F DC8 "%sdef_statusset_mod_%d" \ 737461747573 \ 7365745F6D6F \ 645F256400 \ 0000002F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5B413A25735D DC8 "[A:%s]" \ 00 \ 00000007 00 DC8 0 \ 00000008 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 \ CmdSoftkeys: \ 00000000 000000000100 DC32 0, 1, 2 \ 000002000000 \ In segment DATA_C, align 4, align-sorted \ cmd_sk: \ 00000000 04000000 DC16 4, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ cmd_Back_skt: \ 00000000 ........0000 DC32 cmd_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 53656C656374 DC8 "Select command" \ 20636F6D6D61 \ 6E6400 \ 0000000F 00 DC8 0 \ 00000010 46494C45204E DC8 "FILE NOT FOUND!" \ 4F5420464F55 \ 4E442100 \ 00000020 08000000.... DC32 8, CmdMenuKeyHook, CmdMenuGHook, 0H, CmdSoftkeys, cmd_Back_skt, 16 \ ............ \ 00000000.... \ ............ \ 10000000 \ 0000003C ........0000 DC32 CmdMenuItemHandler, 0H, 0H, 0 \ 000000000000 \ 00000000 \ In segment DATA_C, align 4, align-sorted \ menutext: \ 00000000 ........ DC32 `?` \ 00000008 ........ DC32 `?` \ 0000000C ........ DC32 `?` \ 00000024 00000000 DC8 0, 0, 0, 0 \ 00000028 CCE5EDFE20EA DC8 "\314\345\355\376 \352\356\355\362\340\352\362\340 \"%s\"" \ EEEDF2E0EAF2 \ E02022257322 \ 00 \ 0000003B 00 DC8 0 \ 0000003C CEF4F4EBE0E9 DC8 "\316\364\364\353\340\351\355" \ ED00 \ 00000044 CDE5F220F5F1 DC8 "\315\345\362 \365\361\362\340\362\363\361\340" \ F2E0F2F3F1E0 \ 00 \ 00000051 000000 DC8 0, 0, 0 \ 00000054 513A20256420 DC8 "Q: %d b" \ 6200 \ 0000005C 5B543A256462 DC8 "[T:%db/Q:%db]\012" \ 2F513A256462 \ 5D0A00 \ 0000006B 00 DC8 0 \ 0000006C 5B543A256462 DC8 "[T:%db]\012" \ 5D0A00 \ 00000075 000000 DC8 0, 0, 0 \ 00000078 CEF8E8E1EAE0 DC8 "\316\370\350\341\352\340" \ 00 \ 0000007F 00 DC8 0 \ 00000080 253032643A25 DC8 "%02d:%02d" \ 30326400 \ 0000008A 0000 DC8 0, 0 \ 0000008C 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 \ 000000B5 000000 DC8 0, 0, 0 \ 000000B8 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 \ 000000E1 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ clrSelect: \ 00000000 FF000020 DC8 255, 0, 0, 32 \ In segment DATA_C, align 4, align-sorted \ fntSelect: \ 00000000 FFFF0060 DC8 255, 255, 0, 96 \ In segment DATA_C, align 4, align-sorted \ bordSelect: \ 00000000 00000060 DC8 0, 0, 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 \ I_gui_methods: \ 00000000 ............ DC32 I_OnRedraw, I_onCreate, I_onClose, I_onFocus, I_onUnfocus, I_OnKey \ ............ \ ............ \ ............ \ 00000018 00000000.... DC32 0H, kill_data, I_method8, I_method9, 0H \ ............ \ ........0000 \ 0000 \ In segment DATA_C, align 1, align-sorted \ _t: \ 00000000 257400 DC8 "%t" 6611 unsigned int *errornumber; \ In segment CODE, align 4, keep-with-next 6612 void maincsm_oncreate(CSM_RAM *data) 6613 { \ maincsm_oncreate: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 40DF4DE2 SUB SP,SP,#+256 \ 00000008 0050A0E1 MOV R5,R0 6614 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 0000000C 4000A0E3 MOV R0,#+64 \ 00000010 140000EF SWI +20 \ 00000014 0060A0E1 MOV R6,R0 6615 MAIN_CSM*csm=(MAIN_CSM*)data; 6616 zeromem(main_gui,sizeof(MAIN_GUI)); \ 00000018 4010A0E3 MOV R1,#+64 \ 0000001C 1D0100EF SWI +285 6617 patch_rect((RECT*)&Canvas,0,0,ScreenW()-1,ScreenH()-1); \ 00000020 898100EF SWI +33161 \ 00000024 0040A0E1 MOV R4,R0 \ 00000028 888100EF SWI +33160 \ 0000002C 011044E2 SUB R1,R4,#+1 \ 00000030 F8409FE5 LDR R4,??maincsm_oncreate_0 ;; Canvas \ 00000034 010040E2 SUB R0,R0,#+1 \ 00000038 0070A0E3 MOV R7,#+0 \ 0000003C 007084E5 STR R7,[R4, #+0] \ 00000040 B400C4E1 STRH R0,[R4, #+4] \ 00000044 B610C4E1 STRH R1,[R4, #+6] 6618 main_gui->gui.canvas=(void *)(&Canvas); \ 00000048 004086E5 STR R4,[R6, #+0] 6619 // main_gui->gui.flag30=2; 6620 main_gui->gui.methods=(void *)gui_methods; \ 0000004C E40F84E2 ADD R0,R4,#+912 \ 00000050 040086E5 STR R0,[R6, #+4] 6621 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 00000054 158000EF SWI +32789 \ 00000058 200086E5 STR R0,[R6, #+32] 6622 csm->csm.state=0; \ 0000005C 107085E5 STR R7,[R5, #+16] 6623 csm->csm.unk1=0; \ 00000060 147085E5 STR R7,[R5, #+20] 6624 maingui_id=csm->gui_id=CreateGUI(main_gui); \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 370100EF SWI +311 \ 0000006C 280085E5 STR R0,[R5, #+40] \ 00000070 ........ LDR R5,??DataTable264 ;; i_rc \ 00000074 000385E5 STR R0,[R5, #+768] 6625 ews=AllocWS(16384); \ 00000078 400CA0E3 MOV R0,#+16384 \ 0000007C 250100EF SWI +293 \ 00000080 A80385E5 STR R0,[R5, #+936] 6626 // MutexCreate(&contactlist_mtx); 6627 DNR_TRIES=3; \ 00000084 0300A0E3 MOV R0,#+3 \ 00000088 D00485E5 STR R0,[R5, #+1232] 6628 // SUBPROC((void *)InitSmiles); 6629 // SUBPROC((void *)create_connect); 6630 wsBuffer=AllocWS(4096); \ 0000008C 400DA0E3 MOV R0,#+4096 \ 00000090 250100EF SWI +293 6631 char fullname[256]; 6632 snprintf(fullname,127,"%s\\logs.txt",TEMPLATES_PATH); \ 00000094 ........ LDR R3,??DataTable254 ;; TEMPLATES_PATH \ 00000098 B80285E5 STR R0,[R5, #+696] \ 0000009C 8B2F84E2 ADD R2,R4,#+556 \ 000000A0 7F10A0E3 MOV R1,#+127 \ 000000A4 0D00A0E1 MOV R0,SP \ 000000A8 1B0100EF SWI +283 6633 unlink(fullname,errornumber); \ 000000AC 381595E5 LDR R1,[R5, #+1336] \ 000000B0 0D00A0E1 MOV R0,SP \ 000000B4 6B0100EF SWI +363 6634 OneSecTmr(); \ 000000B8 ........ BL OneSecTmr 6635 /* 6636 if(ParseUINS()!=0) 6637 { 6638 USE_ADD_UIN=1; 6639 InitXStatusesImg(); 6640 }*/ 6641 6642 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 000000BC ........ LDR R2,??DataTable255 ;; process_active_timer \ 000000C0 871EA0E3 MOV R1,#+2160 \ 000000C4 1400A0E3 MOV R0,#+20 \ 000000C8 7C0D80E3 ORR R0,R0,#0x1F00 \ 000000CC 050080E0 ADD R0,R0,R5 \ 000000D0 4D0000EF SWI +77 6643 6644 // if(!USE_ADD_UIN) 6645 // { 6646 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000000D4 ........ LDR R0,??DataTable291 ;; UIN \ 000000D8 0B1084E2 ADD R1,R4,#+11 \ 000000DC 002090E5 LDR R2,[R0, #+0] \ 000000E0 5E00A0E3 MOV R0,#+94 \ 000000E4 C00F80E3 ORR R0,R0,#0x300 \ 000000E8 040080E0 ADD R0,R0,R4 \ 000000EC 160000EF SWI +22 6647 gipc.name_to=ipc_my_name; \ 000000F0 D60FA0E3 MOV R0,#+856 \ 000000F4 041080E0 ADD R1,R0,R4 \ 000000F8 EC1085E5 STR R1,[R5, #+236] 6648 gipc.name_from=ipc_my_name; \ 000000FC 040080E0 ADD R0,R0,R4 \ 00000100 F00085E5 STR R0,[R5, #+240] 6649 gipc.data=(void *)-1; \ 00000104 0700E0E1 MVN R0,R7 \ 00000108 F40085E5 STR R0,[R5, #+244] 6650 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 0000010C EC3085E2 ADD R3,R5,#+236 \ 00000110 0120A0E3 MOV R2,#+1 \ 00000114 B010A0E3 MOV R1,#+176 \ 00000118 DE1C81E3 ORR R1,R1,#0xDE00 \ 0000011C 0900A0E3 MOV R0,#+9 \ 00000120 420C80E3 ORR R0,R0,#0x4200 \ 00000124 000100EF SWI +256 6651 //} 6652 /* 6653 InitXStatusesImg(); 6654 //InitSmiles(); Это вызовется из InitXStatusesImg 6655 create_connect(); 6656 silenthide=1; 6657 gipc.name_to=ipc_xtask_name; 6658 gipc.name_from=ipc_my_name; 6659 gipc.data=0; 6660 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); 6661 */ 6662 } \ 00000128 40DF8DE2 ADD SP,SP,#+256 \ 0000012C F080BDE8 POP {R4-R7,PC} ;; return \ ??maincsm_oncreate_0: \ 00000130 ........ DC32 Canvas 6663 6664 /* 6665 void FreeTimers() 6666 { 6667 6668 } 6669 */ \ In segment CODE, align 4, keep-with-next 6670 void maincsm_onclose(CSM_RAM *csm) 6671 { \ maincsm_onclose: \ 00000000 10402DE9 PUSH {R4,LR} 6672 WriteDefSettings(); 6673 // FreeTimers(); 6674 GBS_DelTimer(&tmr_active); \ 00000004 ........ LDR R4,??DataTable264 ;; i_rc \ 00000008 ........ BL WriteDefSettings \ 0000000C 1400A0E3 MOV R0,#+20 \ 00000010 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000014 040080E0 ADD R0,R0,R4 \ 00000018 8C0100EF SWI +396 6675 GBS_DelTimer(&tmr_vibra); \ 0000001C F400A0E3 MOV R0,#+244 \ 00000020 780D80E3 ORR R0,R0,#0x1E00 \ 00000024 040080E0 ADD R0,R0,R4 \ 00000028 8C0100EF SWI +396 6676 GBS_DelTimer(&reconnect_tmr); \ 0000002C 0400A0E3 MOV R0,#+4 \ 00000030 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 8C0100EF SWI +396 6677 GBS_DelTimer(&tmr_illumination); \ 0000003C E400A0E3 MOV R0,#+228 \ 00000040 780D80E3 ORR R0,R0,#0x1E00 \ 00000044 040080E0 ADD R0,R0,R4 \ 00000048 8C0100EF SWI +396 6678 GBS_DelTimer(&tm22); \ 0000004C F400A0E3 MOV R0,#+244 \ 00000050 8C0D80E3 ORR R0,R0,#0x2300 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 8C0100EF SWI +396 6679 #ifdef ELKA 6680 GBS_DelTimer(&sli_tmr); \ 0000005C D400A0E3 MOV R0,#+212 \ 00000060 700D80E3 ORR R0,R0,#0x1C00 \ 00000064 040080E0 ADD R0,R0,R4 \ 00000068 8C0100EF SWI +396 6681 #endif 6682 GBS_DelTimer(&remind_tmr); \ 0000006C 2400A0E3 MOV R0,#+36 \ 00000070 700D80E3 ORR R0,R0,#0x1C00 \ 00000074 040080E0 ADD R0,R0,R4 \ 00000078 8C0100EF SWI +396 6683 GBS_DelTimer(&ping_tmr); \ 0000007C 8C00A0E3 MOV R0,#+140 \ 00000080 640D80E3 ORR R0,R0,#0x1900 \ 00000084 040080E0 ADD R0,R0,R4 \ 00000088 8C0100EF SWI +396 6684 GBS_DelTimer(&uptime_tmr); \ 0000008C 3400A0E3 MOV R0,#+52 \ 00000090 700D80E3 ORR R0,R0,#0x1C00 \ 00000094 040080E0 ADD R0,R0,R4 \ 00000098 8C0100EF SWI +396 6685 GBS_DelTimer(&autoChangeStatus); \ 0000009C 1400A0E3 MOV R0,#+20 \ 000000A0 700D80E3 ORR R0,R0,#0x1C00 \ 000000A4 040080E0 ADD R0,R0,R4 \ 000000A8 8C0100EF SWI +396 6686 #ifdef NEWSGOLD 6687 GBS_DelTimer(&tracktmr); \ 000000AC 4400A0E3 MOV R0,#+68 \ 000000B0 700D80E3 ORR R0,R0,#0x1C00 \ 000000B4 040080E0 ADD R0,R0,R4 \ 000000B8 8C0100EF SWI +396 6688 // GBS_DelTimer(&scrsTmr); 6689 #endif 6690 GBS_DelTimer(&incs2); \ 000000BC 9400A0E3 MOV R0,#+148 \ 000000C0 8C0D80E3 ORR R0,R0,#0x2300 \ 000000C4 040080E0 ADD R0,R0,R4 \ 000000C8 8C0100EF SWI +396 6691 GBS_DelTimer(&develop); \ 000000CC C400A0E3 MOV R0,#+196 \ 000000D0 840D80E3 ORR R0,R0,#0x2100 \ 000000D4 040080E0 ADD R0,R0,R4 \ 000000D8 8C0100EF SWI +396 6692 GBS_DelTimer(&away_tmr); \ 000000DC 0400A0E3 MOV R0,#+4 \ 000000E0 700D80E3 ORR R0,R0,#0x1C00 \ 000000E4 040080E0 ADD R0,R0,R4 \ 000000E8 8C0100EF SWI +396 6693 FreeWS(wsBuffer); \ 000000EC B80294E5 LDR R0,[R4, #+696] \ 000000F0 290100EF SWI +297 6694 6695 SetVibration(0); \ 000000F4 0000A0E3 MOV R0,#+0 \ 000000F8 7C0000EF SWI +124 6696 FreeTemplates(); \ 000000FC ........ BL FreeTemplates 6697 cmdFree(); \ 00000100 ........ BL cmdFree 6698 #ifdef kluchnik 6699 FreeBotMessage(); \ 00000104 ........ BL FreeBotMessage 6700 #endif 6701 FreeCLIST(); \ 00000108 ........ _BLF FreeCLIST,??FreeCLIST??rA 6702 free_ICONS(); \ 0000010C ........ BL free_ICONS 6703 FreeStatusToIMGHDR(); \ 00000110 ........ BL FreeStatusToIMGHDR 6704 FreeXStatusText(); \ 00000114 ........ _BLF FreeXStatusText,??FreeXStatusText??rA 6705 FreeWS(ews); \ 00000118 A80394E5 LDR R0,[R4, #+936] \ 0000011C 290100EF SWI +297 6706 SUBPROC((void *)PrintLibFree); \ 00000120 34009FE5 LDR R0,??maincsm_onclose_0 ;; PrintLibFree \ 00000124 710100EF SWI +369 6707 SUBPROC((void *)FreeSmiles); \ 00000128 30009FE5 LDR R0,??maincsm_onclose_0+0x4 ;; FreeSmiles \ 0000012C 710100EF SWI +369 6708 SUBPROC((void *)FreeXStatusesImg); \ 00000130 2C009FE5 LDR R0,??maincsm_onclose_0+0x8 ;; FreeXStatusesImg \ 00000134 710100EF SWI +369 6709 // FreeXStatusesImg(); 6710 RemoveKeybMsgHook((void *)my_keyhook); \ 00000138 ........ LDR R0,??DataTable258 ;; my_keyhook \ 0000013C 2D0100EF SWI +301 6711 SUBPROC((void *)end_socket); \ 00000140 ........ LDR R0,??DataTable259 ;; end_socket \ 00000144 710100EF SWI +369 6712 SUBPROC((void *)ClearSendQ); \ 00000148 ........ LDR R0,??DataTable296 ;; ClearSendQ \ 0000014C 710100EF SWI +369 6713 SUBPROC((void *)ElfKiller); \ 00000150 ........ LDR R0,??DataTable261 ;; ElfKiller \ 00000154 710100EF SWI +369 6714 } \ 00000158 1080BDE8 POP {R4,PC} ;; return \ ??maincsm_onclose_0: \ 0000015C ........ DC32 PrintLibFree \ 00000160 ........ DC32 FreeSmiles \ 00000164 ........ DC32 FreeXStatusesImg 6715 \ In segment CODE, align 4, keep-with-next 6716 void do_reconnect(void) 6717 { 6718 if (is_gprs_online) \ do_reconnect: \ 00000000 ........ LDR R0,??DataTable264 ;; i_rc \ 00000004 00402DE9 PUSH {LR} \ 00000008 A81490E5 LDR R1,[R0, #+1192] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 6719 { 6720 DNR_TRIES=3; \ 00000014 0310A0E3 MOV R1,#+3 \ 00000018 D01480E5 STR R1,[R0, #+1232] 6721 SUBPROC((void*)create_connect); \ 0000001C ........ LDR R0,??DataTable263 ;; create_connect \ 00000020 710100EF SWI +369 6722 } 6723 } \ 00000024 0080BDE8 POP {PC} ;; return 6724 \ In segment CODE, align 4, keep-with-next 6725 void CheckDoubleRun(void) 6726 { \ CheckDoubleRun: \ 00000000 10402DE9 PUSH {R4,LR} 6727 int csm_id; 6728 if ((csm_id=(int)(gipc.data))!=-1) \ 00000004 ........ LDR R4,??DataTable264 ;; i_rc \ 00000008 F40094E5 LDR R0,[R4, #+244] \ 0000000C 010070E3 CMN R0,#+1 \ 00000010 1100000A BEQ ??CheckDoubleRun_0 6729 { 6730 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable267 ;; Canvas 6731 gipc.name_from=ipc_my_name; 6732 gipc.data=(void *)csm_id; \ 00000018 F40084E5 STR R0,[R4, #+244] \ 0000001C DE2F81E2 ADD R2,R1,#+888 \ 00000020 EC2084E5 STR R2,[R4, #+236] \ 00000024 D61F81E2 ADD R1,R1,#+856 \ 00000028 F01084E5 STR R1,[R4, #+240] 6733 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 0000002C EC3084E2 ADD R3,R4,#+236 \ 00000030 0220A0E3 MOV R2,#+2 \ 00000034 B010A0E3 MOV R1,#+176 \ 00000038 DE1C81E3 ORR R1,R1,#0xDE00 \ 0000003C 0900A0E3 MOV R0,#+9 \ 00000040 420C80E3 ORR R0,R0,#0x4200 \ 00000044 000100EF SWI +256 6734 LockSched(); \ 00000048 460100EF SWI +326 6735 CloseCSM(maincsm_id); \ 0000004C FC0294E5 LDR R0,[R4, #+764] \ 00000050 FC0100EF SWI +508 6736 //ShowMSG(1,(int)LG_ALREADY_STARTED); 6737 UnlockSched(); \ 00000054 470100EF SWI +327 \ 00000058 1080BDE8 POP {R4,PC} 6738 } 6739 else 6740 // if(!USE_ADD_UIN) 6741 { 6742 SUBPROC((void*)StatusToIMGHDR); \ ??CheckDoubleRun_0: \ 0000005C 14009FE5 LDR R0,??CheckDoubleRun_1 ;; StatusToIMGHDR \ 00000060 710100EF SWI +369 6743 SUBPROC((void*)XStatusToIMGHDR); \ 00000064 10009FE5 LDR R0,??CheckDoubleRun_1+0x4 ;; XStatusToIMGHDR \ 00000068 710100EF SWI +369 6744 InitXStatusesImg(); \ 0000006C ........ _BLF InitXStatusesImg,??InitXStatusesImg??rA 6745 // XStatusToIMGHDR(); 6746 //InitSmiles(); Это вызовется из InitXStatusesImg 6747 create_connect(); \ 00000070 ........ BL create_connect 6748 } 6749 /*else 6750 { 6751 InitXStatusesImg(); 6752 USE_ADD_UIN=1; 6753 }*/ 6754 6755 } \ 00000074 1080BDE8 POP {R4,PC} ;; return \ ??CheckDoubleRun_1: \ 00000078 ........ DC32 StatusToIMGHDR \ 0000007C ........ DC32 XStatusToIMGHDR 6756 6757 6758 6759 //------------------------------------------------------------// 6760 \ In segment CODE, align 4, keep-with-next 6761 int checkGui(int id) 6762 { \ checkGui: \ 00000000 10402DE9 PUSH {R4,LR} 6763 int retval = 0; \ 00000004 0040A0E3 MOV R4,#+0 6764 if (IsGuiOnTop(id)) \ 00000008 350100EF SWI +309 \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0600000A BEQ ??checkGui_0 6765 { 6766 GUI* igui = GetTopGUI(); 6767 if (igui) \ 00000014 4D0100EF SWI +333 \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 0300000A BEQ ??checkGui_0 6768 { 6769 #ifdef ELKA 6770 canvasdata = BuildCanvas(); \ 00000020 F18000EF SWI +33009 \ 00000024 0C109FE5 LDR R1,??checkGui_1 ;; i_rc + 688 6771 retval = 1; \ 00000028 0140A0E3 MOV R4,#+1 \ 0000002C 000081E5 STR R0,[R1, #+0] 6772 #else 6773 void *idata = GetDataOfItemByID(igui, 2); 6774 if (idata) 6775 { 6776 canvasdata = ((void **)idata)[DISPLACE_OF_IDLECANVAS / 4]; 6777 retval = 1; 6778 } 6779 #endif 6780 } 6781 } 6782 return retval; \ ??checkGui_0: \ 00000030 0400A0E1 MOV R0,R4 \ 00000034 1080BDE8 POP {R4,PC} ;; return \ ??checkGui_1: \ 00000038 ........ DC32 i_rc + 688 6783 } 6784 6785 6786 //-------------------------------------------------------------// 6787 #define IPC_GAME 7 6788 6789 typedef struct{ 6790 unsigned long uin; 6791 char *msg; 6792 }IPCmsg; 6793 \ In segment CODE, align 4, keep-with-next 6794 int maincsm_onmessage(CSM_RAM *data,GBS_MSG *msg) 6795 { \ maincsm_onmessage: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} 6796 6797 #ifdef ELKA 6798 if (total_unread) SLI_On(); \ 00000004 ........ LDR R5,??DataTable297 ;; i_rc \ 00000008 1CD04DE2 SUB SP,SP,#+28 \ 0000000C AC0495E5 LDR R0,[R5, #+1196] \ 00000010 0140A0E1 MOV R4,R1 \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0000000A BEQ ??maincsm_onmessage_2 \ 0000001C ........ BL SLI_On 6799 #endif 6800 // char ss[100]; 6801 MAIN_CSM *csm=(MAIN_CSM*)data; 6802 { 6803 //IPC 6804 if (msg->msg==MSG_IPC) \ ??maincsm_onmessage_2: \ 00000020 ........ LDR R6,??DataTable267 ;; Canvas \ 00000024 3410A0E3 MOV R1,#+52 \ 00000028 7C1D81E3 ORR R1,R1,#0x1F00 \ 0000002C 051081E0 ADD R1,R1,R5 \ 00000030 00108DE5 STR R1,[SP, #+0] \ 00000034 040094E5 LDR R0,[R4, #+4] \ 00000038 0070A0E3 MOV R7,#+0 \ 0000003C B010A0E3 MOV R1,#+176 \ 00000040 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000044 010050E1 CMP R0,R1 \ 00000048 9C00001A BNE ??maincsm_onmessage_3 6805 { 6806 IPC_REQ *ipc; 6807 if ((ipc=(IPC_REQ*)msg->data0)) \ 0000004C 0C8094E5 LDR R8,[R4, #+12] \ 00000050 000058E3 CMP R8,#+0 \ 00000054 9900000A BEQ ??maincsm_onmessage_3 6808 { 6809 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 00000058 000098E5 LDR R0,[R8, #+0] \ 0000005C D69FA0E3 MOV R9,#+856 \ 00000060 061089E0 ADD R1,R9,R6 \ 00000064 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 9300001A BNE ??maincsm_onmessage_3 6810 { 6811 switch (msg->submess) \ 00000070 081094E5 LDR R1,[R4, #+8] \ 00000074 040098E5 LDR R0,[R8, #+4] \ 00000078 011041E2 SUB R1,R1,#+1 \ 0000007C 050051E3 CMP R1,#+5 \ 00000080 8E00008A BHI ??maincsm_onmessage_3 \ 00000084 012F8FE2 ADR R2,??maincsm_onmessage_0 \ 00000088 0120D2E7 LDRB R2,[R2, R1] \ 0000008C 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_0: \ 00000090 010A144D DC8 +1,+10,+20,+77 \ 00000094 8B190000 DC8 +139,+25,+0,+0 6812 { 6813 case IPC_CHECK_DOUBLERUN: 6814 //Если приняли свое собственное сообщение, значит запускаем чекер 6815 if (ipc->name_from==ipc_my_name) SUBPROC((void *)CheckDoubleRun); \ ??maincsm_onmessage_4: \ 00000098 061089E0 ADD R1,R9,R6 \ 0000009C 010050E1 CMP R0,R1 \ 000000A0 0200001A BNE ??maincsm_onmessage_5 \ 000000A4 180B9FE5 LDR R0,??maincsm_onmessage_6 ;; CheckDoubleRun \ 000000A8 710100EF SWI +369 \ 000000AC 830000EA B ??maincsm_onmessage_3 6816 else ipc->data=(void *)maincsm_id; \ ??maincsm_onmessage_5: \ 000000B0 FC0295E5 LDR R0,[R5, #+764] \ 000000B4 080088E5 STR R0,[R8, #+8] \ 000000B8 800000EA B ??maincsm_onmessage_3 6817 break; 6818 case IPC_SMILE_PROCESSED: 6819 //Только собственные смайлы ;) 6820 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextSmile); \ ??maincsm_onmessage_7: \ 000000BC 061089E0 ADD R1,R9,R6 \ 000000C0 010050E1 CMP R0,R1 \ 000000C4 0100001A BNE ??maincsm_onmessage_8 \ 000000C8 F80A9FE5 LDR R0,??maincsm_onmessage_6+0x4 ;; ProcessNextSmile \ ??maincsm_onmessage_9: \ 000000CC 710100EF SWI +369 6821 if(ShowLoadScreen) SMART_REDRAW(); \ ??maincsm_onmessage_8: \ 000000D0 DC0495E5 LDR R0,[R5, #+1244] \ 000000D4 000050E3 CMP R0,#+0 \ 000000D8 7800000A BEQ ??maincsm_onmessage_3 \ ??maincsm_onmessage_10: \ 000000DC ........ BL SMART_REDRAW \ 000000E0 760000EA B ??maincsm_onmessage_3 6822 // zeromem(logmsg2,256); 6823 break; 6824 case IPC_XSTATUSIMG_PROCESSED: 6825 //Только собственные иксстатусы ;) 6826 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextXStatImg); \ ??maincsm_onmessage_11: \ 000000E4 061089E0 ADD R1,R9,R6 \ 000000E8 010050E1 CMP R0,R1 \ 000000EC F7FFFF1A BNE ??maincsm_onmessage_8 \ 000000F0 D40A9FE5 LDR R0,??maincsm_onmessage_6+0x8 ;; ProcessNextXStatImg \ 000000F4 F4FFFFEA B ??maincsm_onmessage_9 6827 if(ShowLoadScreen) SMART_REDRAW(); 6828 break; 6829 case IPC_ONESECOND: 6830 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_12: \ 000000F8 061089E0 ADD R1,R9,R6 \ 000000FC 010050E1 CMP R0,R1 \ 00000100 6E00001A BNE ??maincsm_onmessage_3 6831 { 6832 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id) && _to_develop) \ 00000104 068100EF SWI +33030 \ 00000108 080090E5 LDR R0,[R0, #+8] \ 0000010C FC1295E5 LDR R1,[R5, #+764] \ 00000110 0C0090E5 LDR R0,[R0, #+12] \ 00000114 0C0090E5 LDR R0,[R0, #+12] \ 00000118 010050E1 CMP R0,R1 \ 0000011C 34059515 LDRNE R0,[R5, #+1332] \ 00000120 00005013 CMPNE R0,#+0 \ 00000124 0000000A BEQ ??maincsm_onmessage_13 6833 to_develop(); \ 00000128 ........ BL to_develop 6834 _to_develop=0; 6835 //if(!(--on_off_timer)) on_off_timer=0;//таймер показа подключившихся/отключившихся 6836 6837 /* if(ifJustNowRefresh) 6838 { 6839 CLIST *t=(CLIST*)cltop; 6840 int i=0; 6841 int j=0; 6842 while(t) 6843 { 6844 if(t->just_now){ --t->just_now; t->just_i=(i|j); } 6845 else t->just_i=0; 6846 t=t->next; 6847 if(j) i=!i; 6848 j=!j; 6849 } 6850 6851 t=(CLIST*)cltop; 6852 while(t) 6853 { 6854 if(t->just_now){ RefreshJustNow(); SMART_REDRAW(); return 1; } 6855 t=t->next; 6856 } 6857 ifJustNowRefresh=0; 6858 }*/ 6859 6860 if(on_off_timer>0) \ ??maincsm_onmessage_13: \ 0000012C C00495E5 LDR R0,[R5, #+1216] \ 00000130 347585E5 STR R7,[R5, #+1332] \ 00000134 010050E3 CMP R0,#+1 \ 00000138 020000BA BLT ??maincsm_onmessage_14 6861 { 6862 on_off_timer--; \ 0000013C 010040E2 SUB R0,R0,#+1 \ 00000140 C00485E5 STR R0,[R5, #+1216] 6863 SMART_REDRAW(); \ 00000144 E4FFFFEA B ??maincsm_onmessage_10 6864 break; 6865 } 6866 else 6867 if(on_off_timer!=-1)//Надо обновить экран когда время прошло \ ??maincsm_onmessage_14: \ 00000148 010070E3 CMN R0,#+1 \ 0000014C 0500000A BEQ ??maincsm_onmessage_15 6868 { 6869 on_off_timer=-1; \ 00000150 0700E0E1 MVN R0,R7 \ 00000154 C00485E5 STR R0,[R5, #+1216] 6870 zeromem(on_off_buf,128); \ 00000158 00009DE5 LDR R0,[SP, #+0] \ 0000015C 8010A0E3 MOV R1,#+128 \ 00000160 1D0100EF SWI +285 6871 SMART_REDRAW(); \ 00000164 ........ BL SMART_REDRAW 6872 // UpdateCLheader(); 6873 } 6874 6875 if(PrintTimer>0) \ ??maincsm_onmessage_15: \ 00000168 C40295E5 LDR R0,[R5, #+708] \ 0000016C 010050E3 CMP R0,#+1 \ 00000170 020000BA BLT ??maincsm_onmessage_16 6876 { 6877 PrintTimer--; \ 00000174 010040E2 SUB R0,R0,#+1 \ 00000178 C40285E5 STR R0,[R5, #+708] 6878 SMART_REDRAW(); \ 0000017C ........ BL SMART_REDRAW 6879 } 6880 6881 6882 if(!DoRefreshCL) break;//Если не нада обновлять \ ??maincsm_onmessage_16: \ 00000180 DC0295E5 LDR R0,[R5, #+732] \ 00000184 000050E3 CMP R0,#+0 \ 00000188 4C00000A BEQ ??maincsm_onmessage_3 6883 int f=0; 6884 CLIST *t=(CLIST*)cltop; \ 0000018C B01495E5 LDR R1,[R5, #+1200] \ 00000190 0000A0E3 MOV R0,#+0 \ 00000194 030000EA B ??maincsm_onmessage_17 6885 while(t && !f) 6886 { 6887 if(t->just_now) f=1; \ ??maincsm_onmessage_18: \ 00000198 742091E5 LDR R2,[R1, #+116] 6888 t=t->next; \ 0000019C 001091E5 LDR R1,[R1, #+0] \ 000001A0 000052E3 CMP R2,#+0 \ 000001A4 0100A013 MOVNE R0,#+1 6889 } \ ??maincsm_onmessage_17: \ 000001A8 000051E3 CMP R1,#+0 \ 000001AC 0100000A BEQ ??maincsm_onmessage_19 \ 000001B0 000050E3 CMP R0,#+0 \ 000001B4 F7FFFF0A BEQ ??maincsm_onmessage_18 6890 6891 if(f) MyRedraw();//Если еще есть че обновлять \ ??maincsm_onmessage_19: \ 000001B8 000050E3 CMP R0,#+0 \ 000001BC C6FFFF1A BNE ??maincsm_onmessage_10 6892 else DoRefreshCL=0; \ 000001C0 DC7285E5 STR R7,[R5, #+732] \ 000001C4 3D0000EA B ??maincsm_onmessage_3 6893 } 6894 break; 6895 case IPC_TENSECONDS: 6896 //Только свое сообщение 6897 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_20: \ 000001C8 061089E0 ADD R1,R9,R6 \ 000001CC 010050E1 CMP R0,R1 \ 000001D0 3A00001A BNE ??maincsm_onmessage_3 6898 { 6899 CLIST *t=(CLIST *)cltop; 6900 int f=0; 6901 if(main_msg_timer2!=0) main_msg_timer2--; else main_msg_timer2=0; \ 000001D4 E00495E5 LDR R0,[R5, #+1248] \ 000001D8 B08495E5 LDR R8,[R5, #+1200] \ 000001DC 0090A0E3 MOV R9,#+0 \ 000001E0 000050E3 CMP R0,#+0 \ 000001E4 1B00000A BEQ ??maincsm_onmessage_21 \ 000001E8 010040E2 SUB R0,R0,#+1 \ 000001EC E00485E5 STR R0,[R5, #+1248] \ 000001F0 180000EA B ??maincsm_onmessage_21 6902 while(t) 6903 { 6904 if(t->just_now) \ ??maincsm_onmessage_22: \ 000001F4 740098E5 LDR R0,[R8, #+116] \ 000001F8 000050E3 CMP R0,#+0 \ 000001FC 0400000A BEQ ??maincsm_onmessage_23 6905 { 6906 if (!(--(t->just_now))){ f=1; t->just_i=0; } \ 00000200 010050E2 SUBS R0,R0,#+1 \ 00000204 740088E5 STR R0,[R8, #+116] \ 00000208 0190A003 MOVEQ R9,#+1 \ 0000020C 78708805 STREQ R7,[R8, #+120] 6907 // RefreshJustNow(); 6908 MyRedraw(); \ 00000210 ........ BL SMART_REDRAW 6909 } 6910 6911 if (t->isactive) \ ??maincsm_onmessage_23: \ 00000214 AC0098E5 LDR R0,[R8, #+172] \ 00000218 000050E3 CMP R0,#+0 \ 0000021C 0C00000A BEQ ??maincsm_onmessage_24 6912 { 6913 if (!(--(t->isactive))) \ 00000220 010050E2 SUBS R0,R0,#+1 \ 00000224 AC0088E5 STR R0,[R8, #+172] \ 00000228 0900001A BNE ??maincsm_onmessage_24 6914 { 6915 f=1; //Если дошли до 0 хотя бы один раз - надо перерисовать меню 6916 if ((t->log)&&(!t->isunread)) \ 0000022C A00098E5 LDR R0,[R8, #+160] \ 00000230 0190A0E3 MOV R9,#+1 \ 00000234 000050E3 CMP R0,#+0 \ 00000238 0500000A BEQ ??maincsm_onmessage_24 \ 0000023C 900098E5 LDR R0,[R8, #+144] \ 00000240 000050E3 CMP R0,#+0 \ 00000244 0200001A BNE ??maincsm_onmessage_24 6917 { 6918 FreeLOGQ(&t->log); \ 00000248 A00088E2 ADD R0,R8,#+160 \ 0000024C ........ BL FreeLOGQ 6919 t->msg_count=0; \ 00000250 B07088E5 STR R7,[R8, #+176] 6920 } 6921 } 6922 } 6923 t=(CLIST *)(t->next); \ ??maincsm_onmessage_24: \ 00000254 008098E5 LDR R8,[R8, #+0] 6924 } \ ??maincsm_onmessage_21: \ 00000258 000058E3 CMP R8,#+0 \ 0000025C E4FFFF1A BNE ??maincsm_onmessage_22 6925 6926 if (f) \ 00000260 000059E3 CMP R9,#+0 \ 00000264 0A00000A BEQ ??maincsm_onmessage_25 6927 { 6928 CLIST *oldt=NULL; 6929 if (contactlist_menu_id) \ 00000268 041395E5 LDR R1,[R5, #+772] \ 0000026C 0000A0E3 MOV R0,#+0 \ 00000270 000051E3 CMP R1,#+0 \ 00000274 0400000A BEQ ??maincsm_onmessage_26 6930 { 6931 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 00000278 040395E5 LDR R0,[R5, #+772] \ 0000027C 0010A0E3 MOV R1,#+0 \ 00000280 090200EF SWI +521 \ 00000284 8F0100EF SWI +399 \ 00000288 ........ _BLF FindContactByN,??FindContactByN??rA 6932 } 6933 RecountMenu(oldt,1); \ ??maincsm_onmessage_26: \ 0000028C 0110A0E3 MOV R1,#+1 \ 00000290 ........ BL RecountMenu 6934 } 6935 6936 if (time_to_stop_t9) \ ??maincsm_onmessage_25: \ 00000294 E80495E5 LDR R0,[R5, #+1256] \ 00000298 000050E3 CMP R0,#+0 \ 0000029C 0700000A BEQ ??maincsm_onmessage_3 6937 { 6938 if (!(--time_to_stop_t9)) \ 000002A0 010050E2 SUBS R0,R0,#+1 \ 000002A4 E80485E5 STR R0,[R5, #+1256] \ 000002A8 0400001A BNE ??maincsm_onmessage_3 6939 { 6940 if (IsGuiOnTop(edchat_id)) RefreshGUI(); \ 000002AC B80495E5 LDR R0,[R5, #+1208] \ 000002B0 350100EF SWI +309 \ 000002B4 000050E3 CMP R0,#+0 \ 000002B8 0000000A BEQ ??maincsm_onmessage_3 \ 000002BC 960100EF SWI +406 6941 } 6942 } 6943 } 6944 break; 6945 /* case IPC_SENDMSG: ; //IPC_SENDMSG by BoBa 26.06.07 6946 int l=strlen(((IPCMsg *)(ipc->data))->msg); 6947 TPKT *msg=malloc(sizeof(PKT)+l+30); 6948 msg->pkt.uin=((IPCMsg *)(ipc->data))->uin; 6949 msg->pkt.type=T_SENDMSG; 6950 msg->pkt.data_len=l; 6951 memcpy(msg->data,((IPCMsg *)(ipc->data))->msg,l); 6952 //slientsend=1; 6953 if(strstr(msg->data,PASS)==0) 6954 { 6955 SENDMSGCOUNT++; //Номер сообщения 6956 SUBPROC((void *)SendAnswer,0,msg); 6957 } 6958 else 6959 { 6960 msg->pkt.data_len=40; 6961 strcpy(msg->data, "Fuck you hacker! my password sux ur ass"); 6962 SENDMSGCOUNT++; //Номер сообщения 6963 SUBPROC((void *)SendAnswer,0,msg); 6964 } 6965 break;*/ 6966 } 6967 } 6968 } 6969 } 6970 6971 /* void *icsm; 6972 icsm=FindCSMbyID(CSM_root()->idle_id); 6973 if (icsm && checkGui(idlegui_id(icsm))) 6974 { 6975 INC_show=0; 6976 canvasdata=BuildCanvas(); //void * - belyj fon! 6977 } 6978 else 6979 { 6980 main_d=1; 6981 }*/ 6982 } 6983 6984 //---------------------------------------------------// 6985 void *icsm; 6986 icsm=FindCSMbyID(CSM_root()->idle_id); \ ??maincsm_onmessage_3: \ 000002C0 068100EF SWI +33030 \ 000002C4 040090E5 LDR R0,[R0, #+4] \ 000002C8 080100EF SWI +264 6987 if (icsm && checkGui(idlegui_id(icsm))) \ 000002CC 000050E3 CMP R0,#+0 \ 000002D0 1801000A BEQ ??maincsm_onmessage_27 \ 000002D4 2C0090E5 LDR R0,[R0, #+44] \ 000002D8 ........ BL checkGui \ 000002DC 000050E3 CMP R0,#+0 \ 000002E0 1401000A BEQ ??maincsm_onmessage_27 6988 { 6989 int icn; 6990 6991 #ifdef NEWSGOLD 6992 if(ShowStatusIcon==0 || ShowStatusIcon==2 || ShowStatusIcon==3) //kluchnik 26.03.08 \ 000002E4 ........ LDR R0,??DataTable298 ;; ShowStatusIcon \ 000002E8 000090E5 LDR R0,[R0, #+0] \ 000002EC 000050E3 CMP R0,#+0 \ 000002F0 02005013 CMPNE R0,#+2 \ 000002F4 03005013 CMPNE R0,#+3 \ 000002F8 2A00001A BNE ??maincsm_onmessage_28 6993 { 6994 #endif 6995 if((IsUnlocked()) || (!IsUnlocked()) || (IsScreenSaver())) \ 000002FC 430000EF SWI +67 \ 00000300 000050E3 CMP R0,#+0 \ 00000304 0500001A BNE ??maincsm_onmessage_29 \ 00000308 430000EF SWI +67 \ 0000030C 000050E3 CMP R0,#+0 \ 00000310 0200000A BEQ ??maincsm_onmessage_29 \ 00000314 420000EF SWI +66 \ 00000318 000050E3 CMP R0,#+0 \ 0000031C 2100000A BEQ ??maincsm_onmessage_28 6996 { 6997 if(total_unread) \ ??maincsm_onmessage_29: \ 00000320 AC0495E5 LDR R0,[R5, #+1196] \ 00000324 000050E3 CMP R0,#+0 6998 icn=IS_MSG; \ 00000328 0D00A013 MOVNE R0,#+13 \ 0000032C 0500001A BNE ??maincsm_onmessage_30 6999 else 7000 { 7001 switch(connect_state) \ 00000330 900495E5 LDR R0,[R5, #+1168] \ 00000334 000050E3 CMP R0,#+0 \ 00000338 0200000A BEQ ??maincsm_onmessage_30 \ 0000033C 030050E2 SUBS R0,R0,#+3 7002 { 7003 case 0: 7004 icn=IS_OFFLINE; break; 7005 case 3: 7006 icn=CurrentStatus; //IS_ONLINE; \ 00000340 A0039505 LDREQ R0,[R5, #+928] 7007 break; 7008 default: 7009 icn=IS_UNKNOWN; break; \ 00000344 0E00A013 MOVNE R0,#+14 7010 } 7011 } 7012 7013 DrawCanvas(canvasdata,IDLEICON_X,IDLEICON_Y,IDLEICON_X+GetImgWidth((int)S_ICONS[icn])-1, 7014 IDLEICON_Y+GetImgHeight((int)S_ICONS[icn])-1,1); \ ??maincsm_onmessage_30: \ 00000348 80A89FE5 LDR R10,??maincsm_onmessage_6+0xC ;; IDLEICON_X \ 0000034C 80B89FE5 LDR R11,??maincsm_onmessage_6+0x10 ;; IDLEICON_Y \ 00000350 008185E0 ADD R8,R5,R0, LSL #+2 \ 00000354 180398E5 LDR R0,[R8, #+792] \ 00000358 210000EF SWI +33 \ 0000035C 0090A0E1 MOV R9,R0 \ 00000360 180398E5 LDR R0,[R8, #+792] \ 00000364 220000EF SWI +34 \ 00000368 00109AE5 LDR R1,[R10, #+0] \ 0000036C 00209BE5 LDR R2,[R11, #+0] \ 00000370 0130A0E3 MOV R3,#+1 \ 00000374 08002DE9 PUSH {R3} \ 00000378 010080E0 ADD R0,R0,R1 \ 0000037C 023089E0 ADD R3,R9,R2 \ 00000380 013043E2 SUB R3,R3,#+1 \ 00000384 08002DE9 PUSH {R3} \ 00000388 013040E2 SUB R3,R0,#+1 \ 0000038C B00295E5 LDR R0,[R5, #+688] \ 00000390 250000EF SWI +37 7015 DrawImg(IDLEICON_X,IDLEICON_Y,S_ICONS[icn]); \ 00000394 182398E5 LDR R2,[R8, #+792] \ 00000398 00109BE5 LDR R1,[R11, #+0] \ 0000039C 00009AE5 LDR R0,[R10, #+0] \ 000003A0 230000EF SWI +35 \ 000003A4 08D08DE2 ADD SP,SP,#+8 7016 } 7017 #ifdef NEWSGOLD 7018 } 7019 #endif 7020 /* 7021 #ifdef kluchnik 7022 if(show_xstatus==1) 7023 #else 7024 if(show_xstatus==1 || show_xstatus==3) //kluchnik 26.03.08 7025 #endif 7026 #else 7027 if(show_xstatus==1) //kluchnik 26.03.08 7028 #endif 7029 { 7030 PNGTOP_DESC *pltop=PNG_TOP(); 7031 pltop->dyn_pltop=XStatusesImgList; 7032 DisableIDLETMR(); 7033 DrawCanvas(canvasdata,IDLEICON_XX,IDLEICON_YX,IDLEICON_XX+GetImgWidth((int)XStatusesIconArray[CurrentXStatus])-1, 7034 IDLEICON_YX+GetImgHeight((int)XStatusesIconArray[CurrentXStatus])-1,1); 7035 DrawImg(IDLEICON_XX,IDLEICON_YX,XStatusesIconArray[CurrentXStatus]); 7036 }*/ 7037 7038 7039 if(IsUnlocked()) \ ??maincsm_onmessage_28: \ 000003A8 430000EF SWI +67 \ 000003AC 000050E3 CMP R0,#+0 \ 000003B0 E000000A BEQ ??maincsm_onmessage_27 7040 { 7041 SetCanvasFlag(0); \ 000003B4 0000A0E3 MOV R0,#+0 \ 000003B8 ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 7042 if (main_d==1) \ 000003BC A80295E5 LDR R0,[R5, #+680] \ 000003C0 010050E3 CMP R0,#+1 \ 000003C4 8700001A BNE ??maincsm_onmessage_31 7043 { 7044 int spaco2=spaco1; \ 000003C8 ........ LDR R0,??DataTable276 ;; spaco1 \ 000003CC 008090E5 LDR R8,[R0, #+0] 7045 if(Is_SMARTCPU_On && main_msg_timer2) \ 000003D0 ........ LDR R0,??DataTable270 ;; Is_SMARTCPU_On \ 000003D4 000090E5 LDR R0,[R0, #+0] \ 000003D8 000050E3 CMP R0,#+0 \ 000003DC E0049515 LDRNE R0,[R5, #+1248] \ 000003E0 00005013 CMPNE R0,#+0 \ 000003E4 7E00000A BEQ ??maincsm_onmessage_32 7046 { 7047 if(fonto==1) \ 000003E8 E8079FE5 LDR R0,??maincsm_onmessage_6+0x14 ;; msg_d_x \ 000003EC AC3295E5 LDR R3,[R5, #+684] \ 000003F0 9410A0E3 MOV R1,#+148 \ 000003F4 841D81E3 ORR R1,R1,#0x2100 \ 000003F8 051081E0 ADD R1,R1,R5 \ 000003FC 14108DE5 STR R1,[SP, #+20] \ 00000400 6410A0E3 MOV R1,#+100 \ 00000404 841D81E3 ORR R1,R1,#0x2100 \ 00000408 051081E0 ADD R1,R1,R5 \ 0000040C 10108DE5 STR R1,[SP, #+16] \ 00000410 3410A0E3 MOV R1,#+52 \ 00000414 841D81E3 ORR R1,R1,#0x2100 \ 00000418 051081E0 ADD R1,R1,R5 \ 0000041C 0C108DE5 STR R1,[SP, #+12] \ 00000420 0410A0E3 MOV R1,#+4 \ 00000424 841D81E3 ORR R1,R1,#0x2100 \ 00000428 051081E0 ADD R1,R1,R5 \ 0000042C 08108DE5 STR R1,[SP, #+8] \ 00000430 009090E5 LDR R9,[R0, #+0] \ 00000434 A0079FE5 LDR R0,??maincsm_onmessage_6+0x18 ;; msg_d_y \ 00000438 00A090E5 LDR R10,[R0, #+0] \ 0000043C D400A0E3 MOV R0,#+212 \ 00000440 800D80E3 ORR R0,R0,#0x2000 \ 00000444 052080E0 ADD R2,R0,R5 \ 00000448 ........ LDR R0,??DataTable319 ;; fonto \ 0000044C 00B090E5 LDR R11,[R0, #+0] \ 00000450 0800A0E1 MOV R0,R8 \ 00000454 01002DE9 PUSH {R0} \ 00000458 01005BE3 CMP R11,#+1 \ 0000045C 2B00001A BNE ??maincsm_onmessage_33 7048 { 7049 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ 00000460 0100A0E3 MOV R0,#+1 \ 00000464 01002DE9 PUSH {R0} \ 00000468 0A10A0E1 MOV R1,R10 \ 0000046C 0900A0E1 MOV R0,R9 \ 00000470 ........ _BLF PrintField,??PrintField??rA 7050 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, spaco2); \ 00000474 0800A0E1 MOV R0,R8 \ 00000478 01002DE9 PUSH {R0} \ 0000047C 0100A0E3 MOV R0,#+1 \ 00000480 01002DE9 PUSH {R0} \ 00000484 AC3295E5 LDR R3,[R5, #+684] \ 00000488 18209DE5 LDR R2,[SP, #+24] \ 0000048C B40295E5 LDR R0,[R5, #+692] \ 00000490 0A1080E0 ADD R1,R0,R10 \ 00000494 0900A0E1 MOV R0,R9 \ 00000498 ........ _BLF PrintField,??PrintField??rA 7051 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, spaco2); \ 0000049C 0800A0E1 MOV R0,R8 \ 000004A0 01002DE9 PUSH {R0} \ 000004A4 0100A0E3 MOV R0,#+1 \ 000004A8 01002DE9 PUSH {R0} \ 000004AC AC3295E5 LDR R3,[R5, #+684] \ 000004B0 24209DE5 LDR R2,[SP, #+36] \ 000004B4 B40295E5 LDR R0,[R5, #+692] \ 000004B8 80108AE0 ADD R1,R10,R0, LSL #+1 \ 000004BC 0900A0E1 MOV R0,R9 \ 000004C0 ........ _BLF PrintField,??PrintField??rA 7052 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, spaco2); \ 000004C4 0800A0E1 MOV R0,R8 \ 000004C8 01002DE9 PUSH {R0} \ 000004CC 0100A0E3 MOV R0,#+1 \ 000004D0 01002DE9 PUSH {R0} \ 000004D4 AC3295E5 LDR R3,[R5, #+684] \ 000004D8 30209DE5 LDR R2,[SP, #+48] \ 000004DC B40295E5 LDR R0,[R5, #+692] \ 000004E0 800080E0 ADD R0,R0,R0, LSL #+1 \ 000004E4 0A1080E0 ADD R1,R0,R10 \ 000004E8 0900A0E1 MOV R0,R9 \ 000004EC ........ _BLF PrintField,??PrintField??rA 7053 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, spaco2); \ 000004F0 00012DE9 PUSH {R8} \ 000004F4 0100A0E3 MOV R0,#+1 \ 000004F8 01002DE9 PUSH {R0} \ 000004FC AC3295E5 LDR R3,[R5, #+684] \ 00000500 3C209DE5 LDR R2,[SP, #+60] \ 00000504 B40295E5 LDR R0,[R5, #+692] \ 00000508 00118AE0 ADD R1,R10,R0, LSL #+2 \ 0000050C 310000EA B ??maincsm_onmessage_34 7054 } 7055 else 7056 { 7057 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ ??maincsm_onmessage_33: \ 00000510 0B00A0E1 MOV R0,R11 \ 00000514 01002DE9 PUSH {R0} \ 00000518 0A10A0E1 MOV R1,R10 \ 0000051C 0900A0E1 MOV R0,R9 \ 00000520 ........ _BLF PrintField,??PrintField??rA 7058 PrintField(msg_d_x,msg_d_y+GetFontYSIZE(paused_height)+1, s_txt, align, fonto, spaco2); \ 00000524 B40295E5 LDR R0,[R5, #+692] \ 00000528 C50100EF SWI +453 \ 0000052C 0810A0E1 MOV R1,R8 \ 00000530 02002DE9 PUSH {R1} \ 00000534 0A0080E0 ADD R0,R0,R10 \ 00000538 0B10A0E1 MOV R1,R11 \ 0000053C 02002DE9 PUSH {R1} \ 00000540 AC3295E5 LDR R3,[R5, #+684] \ 00000544 18209DE5 LDR R2,[SP, #+24] \ 00000548 011080E2 ADD R1,R0,#+1 \ 0000054C 0900A0E1 MOV R0,R9 \ 00000550 ........ _BLF PrintField,??PrintField??rA 7059 PrintField(msg_d_x,msg_d_y+(2*GetFontYSIZE(paused_height))+2, d_txt, align, fonto, spaco2); \ 00000554 B40295E5 LDR R0,[R5, #+692] \ 00000558 C50100EF SWI +453 \ 0000055C 0810A0E1 MOV R1,R8 \ 00000560 02002DE9 PUSH {R1} \ 00000564 80008AE0 ADD R0,R10,R0, LSL #+1 \ 00000568 0B10A0E1 MOV R1,R11 \ 0000056C 02002DE9 PUSH {R1} \ 00000570 AC3295E5 LDR R3,[R5, #+684] \ 00000574 24209DE5 LDR R2,[SP, #+36] \ 00000578 021080E2 ADD R1,R0,#+2 \ 0000057C 0900A0E1 MOV R0,R9 \ 00000580 ........ _BLF PrintField,??PrintField??rA 7060 PrintField(msg_d_x,msg_d_y+(3*GetFontYSIZE(paused_height))+3, f_txt, align, fonto, spaco2); \ 00000584 B40295E5 LDR R0,[R5, #+692] \ 00000588 C50100EF SWI +453 \ 0000058C 0810A0E1 MOV R1,R8 \ 00000590 02002DE9 PUSH {R1} \ 00000594 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000598 0A0080E0 ADD R0,R0,R10 \ 0000059C 0B10A0E1 MOV R1,R11 \ 000005A0 02002DE9 PUSH {R1} \ 000005A4 AC3295E5 LDR R3,[R5, #+684] \ 000005A8 30209DE5 LDR R2,[SP, #+48] \ 000005AC 031080E2 ADD R1,R0,#+3 \ 000005B0 0900A0E1 MOV R0,R9 \ 000005B4 ........ _BLF PrintField,??PrintField??rA 7061 PrintField(msg_d_x,msg_d_y+(4*GetFontYSIZE(paused_height))+4, g_txt, align, fonto, spaco2); \ 000005B8 B40295E5 LDR R0,[R5, #+692] \ 000005BC C50100EF SWI +453 \ 000005C0 00012DE9 PUSH {R8} \ 000005C4 00082DE9 PUSH {R11} \ 000005C8 AC3295E5 LDR R3,[R5, #+684] \ 000005CC 3C209DE5 LDR R2,[SP, #+60] \ 000005D0 00018AE0 ADD R0,R10,R0, LSL #+2 \ 000005D4 041080E2 ADD R1,R0,#+4 \ ??maincsm_onmessage_34: \ 000005D8 0900A0E1 MOV R0,R9 \ 000005DC ........ _BLF PrintField,??PrintField??rA \ 000005E0 28D08DE2 ADD SP,SP,#+40 7062 } 7063 } 7064 main_d=0; \ ??maincsm_onmessage_32: \ 000005E4 A87285E5 STR R7,[R5, #+680] 7065 } 7066 7067 if(Is_UPTIME_On) DrawOnlineTime(canvasdata); \ ??maincsm_onmessage_31: \ 000005E8 F0059FE5 LDR R0,??maincsm_onmessage_6+0x1C ;; Is_UPTIME_On \ 000005EC 000090E5 LDR R0,[R0, #+0] \ 000005F0 000050E3 CMP R0,#+0 \ 000005F4 0100000A BEQ ??maincsm_onmessage_35 \ 000005F8 B00295E5 LDR R0,[R5, #+688] \ 000005FC ........ BL DrawOnlineTime 7068 if(Is_PING_On && isPingIdle) DrawPing(canvasdata); \ ??maincsm_onmessage_35: \ 00000600 E40295E5 LDR R0,[R5, #+740] \ 00000604 000050E3 CMP R0,#+0 \ 00000608 0500000A BEQ ??maincsm_onmessage_36 \ 0000060C D0059FE5 LDR R0,??maincsm_onmessage_6+0x20 ;; isPingIdle \ 00000610 000090E5 LDR R0,[R0, #+0] \ 00000614 000050E3 CMP R0,#+0 \ 00000618 0100000A BEQ ??maincsm_onmessage_36 \ 0000061C B00295E5 LDR R0,[R5, #+688] \ 00000620 ........ BL DrawPing 7069 if(Auto_Status && showAwayIdle) DrawAutoMSG(canvasdata); \ ??maincsm_onmessage_36: \ 00000624 ........ LDR R0,??DataTable272 ;; Auto_Status \ 00000628 000090E5 LDR R0,[R0, #+0] \ 0000062C 000050E3 CMP R0,#+0 \ 00000630 0500000A BEQ ??maincsm_onmessage_37 \ 00000634 ........ LDR R0,??DataTable273 ;; showAwayIdle \ 00000638 000090E5 LDR R0,[R0, #+0] \ 0000063C 000050E3 CMP R0,#+0 \ 00000640 0100000A BEQ ??maincsm_onmessage_37 \ 00000644 B00295E5 LDR R0,[R5, #+688] \ 00000648 ........ BL DrawAutoMSG 7070 if(Is_Unread_On) \ ??maincsm_onmessage_37: \ 0000064C 94059FE5 LDR R0,??maincsm_onmessage_6+0x24 ;; Is_Unread_On \ 00000650 000090E5 LDR R0,[R0, #+0] \ 00000654 000050E3 CMP R0,#+0 \ 00000658 1300000A BEQ ??maincsm_onmessage_38 7071 { 7072 sprintf(unread_msg_info, "Unread: %d", total_unread2); \ 0000065C F82295E5 LDR R2,[R5, #+760] \ 00000660 4C80A0E3 MOV R8,#+76 \ 00000664 808E88E3 ORR R8,R8,#0x800 \ 00000668 8E1F86E2 ADD R1,R6,#+568 \ 0000066C 050088E0 ADD R0,R8,R5 \ 00000670 160000EF SWI +22 7073 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, spaco1); \ 00000674 ........ LDR R0,??DataTable276 ;; spaco1 \ 00000678 052088E0 ADD R2,R8,R5 \ 0000067C 000090E5 LDR R0,[R0, #+0] \ 00000680 01002DE9 PUSH {R0} \ 00000684 ........ LDR R0,??DataTable319 ;; fonto \ 00000688 000090E5 LDR R0,[R0, #+0] \ 0000068C 01002DE9 PUSH {R0} \ 00000690 AC3295E5 LDR R3,[R5, #+684] \ 00000694 50059FE5 LDR R0,??maincsm_onmessage_6+0x28 ;; unread_Y \ 00000698 001090E5 LDR R1,[R0, #+0] \ 0000069C 4C059FE5 LDR R0,??maincsm_onmessage_6+0x2C ;; unread_X \ 000006A0 000090E5 LDR R0,[R0, #+0] \ 000006A4 ........ _BLF PrintField,??PrintField??rA \ 000006A8 08D08DE2 ADD SP,SP,#+8 7074 } 7075 7076 if(Is_Online_On && strlen(on_off_buf)!=0) \ ??maincsm_onmessage_38: \ 000006AC 40059FE5 LDR R0,??maincsm_onmessage_6+0x30 ;; Is_Online_On \ 000006B0 000090E5 LDR R0,[R0, #+0] \ 000006B4 000050E3 CMP R0,#+0 \ 000006B8 1E00000A BEQ ??maincsm_onmessage_27 \ 000006BC 00009DE5 LDR R0,[SP, #+0] \ 000006C0 1B0000EF SWI +27 \ 000006C4 000050E3 CMP R0,#+0 \ 000006C8 1A00000A BEQ ??maincsm_onmessage_27 7077 { 7078 char *s=malloc(128); \ 000006CC 8000A0E3 MOV R0,#+128 \ 000006D0 140000EF SWI +20 7079 sprintf(s,percent_s,on_off_buf); \ 000006D4 00209DE5 LDR R2,[SP, #+0] \ 000006D8 0080A0E1 MOV R8,R0 \ 000006DC 081086E2 ADD R1,R6,#+8 \ 000006E0 160000EF SWI +22 7080 s[strlen(s)-1]=0; \ 000006E4 0800A0E1 MOV R0,R8 \ 000006E8 1B0000EF SWI +27 \ 000006EC 080080E0 ADD R0,R0,R8 \ 000006F0 017040E5 STRB R7,[R0, #-1] 7081 PrintField(online_x,online_y,s, Is_Online_On_Align, fonto, spaco1); \ 000006F4 ........ LDR R0,??DataTable276 ;; spaco1 \ 000006F8 0820A0E1 MOV R2,R8 \ 000006FC 000090E5 LDR R0,[R0, #+0] \ 00000700 01002DE9 PUSH {R0} \ 00000704 ........ LDR R0,??DataTable319 ;; fonto \ 00000708 000090E5 LDR R0,[R0, #+0] \ 0000070C 01002DE9 PUSH {R0} \ 00000710 E0049FE5 LDR R0,??maincsm_onmessage_6+0x34 ;; Is_Online_On_Align \ 00000714 003090E5 LDR R3,[R0, #+0] \ 00000718 DC049FE5 LDR R0,??maincsm_onmessage_6+0x38 ;; online_y \ 0000071C 001090E5 LDR R1,[R0, #+0] \ 00000720 D8049FE5 LDR R0,??maincsm_onmessage_6+0x3C ;; online_x \ 00000724 000090E5 LDR R0,[R0, #+0] \ 00000728 ........ _BLF PrintField,??PrintField??rA 7082 mfree(s); \ 0000072C 0800A0E1 MOV R0,R8 \ 00000730 150000EF SWI +21 \ 00000734 08D08DE2 ADD SP,SP,#+8 7083 } 7084 }//if(IsUnlocked()) 7085 } 7086 7087 7088 //-----------------------------------------------------------// 7089 7090 7091 if (msg->msg==MSG_RECONFIGURE_REQ) \ ??maincsm_onmessage_27: \ 00000738 040094E5 LDR R0,[R4, #+4] \ 0000073C AF10A0E3 MOV R1,#+175 \ 00000740 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000744 010050E1 CMP R0,R1 \ 00000748 4E00001A BNE ??maincsm_onmessage_39 7092 { 7093 //if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) 7094 if( (strcmp_nocase(suc_config_name,(char *)msg->data0)==0) 7095 || (strcmp_nocase(suc_config_name_mod,(char *)msg->data0)==0)) \ 0000074C ........ LDR R0,??DataTable308 ;; suc_config_name \ 00000750 0C1094E5 LDR R1,[R4, #+12] \ 00000754 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000758 000050E3 CMP R0,#+0 \ 0000075C 0500000A BEQ ??maincsm_onmessage_40 \ 00000760 ........ LDR R0,??DataTable279 ;; suc_config_name_mod \ 00000764 0C1094E5 LDR R1,[R4, #+12] \ 00000768 000090E5 LDR R0,[R0, #+0] \ 0000076C ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000770 000050E3 CMP R0,#+0 \ 00000774 4300001A BNE ??maincsm_onmessage_39 7096 { 7097 ShowMSG(1,(int)"NatICQ config updated!"); 7098 // InitConfig(); 7099 UpdateConfig(); 7100 #ifdef NEWSGOLD 7101 initTags(); 7102 #endif 7103 shot_soft=0; 7104 shot_header=0; 7105 PrintLibInit(4); 7106 FontPathInit((char *)fontpath, 1); \ ??maincsm_onmessage_40: \ 00000778 ........ LDR R8,??DataTable310 ;; fontpath 7107 FontPathInit((char *)fontpath2, 1); \ 0000077C ........ LDR R10,??DataTable311 ;; fontpath2 7108 FontPathInit((char *)fontpath3, 1);//#ifdef ELKA \ 00000780 ........ LDR R11,??DataTable312 ;; fontpath3 7109 FontPathInit((char *)fontpath4, 1); \ 00000784 ........ LDR R9,??DataTable313 ;; fontpath4 \ 00000788 911F86E2 ADD R1,R6,#+580 \ 0000078C 0100A0E3 MOV R0,#+1 \ 00000790 480100EF SWI +328 \ 00000794 ........ _BLF UpdateConfig,??UpdateConfig??rA \ 00000798 ........ _BLF initTags,??initTags??rA \ 0000079C 287585E5 STR R7,[R5, #+1320] \ 000007A0 2C7585E5 STR R7,[R5, #+1324] \ 000007A4 0400A0E3 MOV R0,#+4 \ 000007A8 ........ _BLF PrintLibInit,??PrintLibInit??rA \ 000007AC 0110A0E3 MOV R1,#+1 \ 000007B0 0800A0E1 MOV R0,R8 \ 000007B4 ........ _BLF FontPathInit,??FontPathInit??rA \ 000007B8 0110A0E3 MOV R1,#+1 \ 000007BC 0A00A0E1 MOV R0,R10 \ 000007C0 ........ _BLF FontPathInit,??FontPathInit??rA \ 000007C4 0110A0E3 MOV R1,#+1 \ 000007C8 0B00A0E1 MOV R0,R11 \ 000007CC ........ _BLF FontPathInit,??FontPathInit??rA \ 000007D0 0110A0E3 MOV R1,#+1 \ 000007D4 0900A0E1 MOV R0,R9 \ 000007D8 ........ _BLF FontPathInit,??FontPathInit??rA 7110 7111 if(!strlen(fontpath2) || !strlen(fontpath3)) clfont=100+FONT_SMALL; \ 000007DC 0A00A0E1 MOV R0,R10 \ 000007E0 1B0000EF SWI +27 \ 000007E4 000050E3 CMP R0,#+0 \ 000007E8 0300000A BEQ ??maincsm_onmessage_41 \ 000007EC 0B00A0E1 MOV R0,R11 \ 000007F0 1B0000EF SWI +27 \ 000007F4 000050E3 CMP R0,#+0 \ 000007F8 0100001A BNE ??maincsm_onmessage_42 \ ??maincsm_onmessage_41: \ 000007FC 6C00A0E3 MOV R0,#+108 \ 00000800 100585E5 STR R0,[R5, #+1296] 7112 if(!strlen(fontpath4)) { PNG_SOFTKEY=0; PNG_HEADER=0; } \ ??maincsm_onmessage_42: \ 00000804 0900A0E1 MOV R0,R9 \ 00000808 1B0000EF SWI +27 \ 0000080C 000050E3 CMP R0,#+0 \ 00000810 0300001A BNE ??maincsm_onmessage_43 \ 00000814 ........ LDR R0,??DataTable316 ;; PNG_SOFTKEY \ 00000818 007080E5 STR R7,[R0, #+0] \ 0000081C ........ LDR R0,??DataTable317 ;; PNG_HEADER \ 00000820 007080E5 STR R7,[R0, #+0] 7113 if(fonto==1) \ ??maincsm_onmessage_43: \ 00000824 ........ LDR R0,??DataTable319 ;; fonto \ 00000828 00B090E5 LDR R11,[R0, #+0] \ 0000082C 01005BE3 CMP R11,#+1 \ 00000830 0B00001A BNE ??maincsm_onmessage_44 7114 { 7115 char *heght=malloc(64); \ 00000834 4000A0E3 MOV R0,#+64 \ 00000838 140000EF SWI +20 \ 0000083C 0090A0E1 MOV R9,R0 7116 sprintf(heght, "%s2240.png", fontpath); \ 00000840 0820A0E1 MOV R2,R8 \ 00000844 971F86E2 ADD R1,R6,#+604 \ 00000848 160000EF SWI +22 7117 paused_height=GetImgHeight((int)heght); \ 0000084C 0900A0E1 MOV R0,R9 \ 00000850 210000EF SWI +33 \ 00000854 B40285E5 STR R0,[R5, #+692] 7118 mfree(heght); \ 00000858 0900A0E1 MOV R0,R9 \ 0000085C 150000EF SWI +21 \ 00000860 010000EA B ??maincsm_onmessage_45 7119 } 7120 else 7121 paused_height=fonto-100; \ ??maincsm_onmessage_44: \ 00000864 64004BE2 SUB R0,R11,#+100 \ 00000868 B40285E5 STR R0,[R5, #+692] 7122 //#endif 7123 free_ICONS(); \ ??maincsm_onmessage_45: \ 0000086C ........ BL free_ICONS 7124 setup_ICONS(); \ 00000870 ........ BL setup_ICONS 7125 ResortCL(); \ 00000874 ........ _BLF ResortCL,??ResortCL??rA 7126 RecountMenu(NULL,1); \ 00000878 0110A0E3 MOV R1,#+1 \ 0000087C 0000A0E3 MOV R0,#+0 \ 00000880 ........ BL RecountMenu 7127 init_time_zone(); \ 00000884 ........ BL init_time_zone 7128 // InitSmiles(); 7129 } 7130 } 7131 7132 if (msg->msg==MSG_GUI_DESTROYED) \ ??maincsm_onmessage_39: \ 00000888 040094E5 LDR R0,[R4, #+4] \ 0000088C 0E10A0E3 MOV R1,#+14 \ 00000890 641C81E3 ORR R1,R1,#0x6400 \ 00000894 010050E1 CMP R0,R1 \ 00000898 0D00001A BNE ??maincsm_onmessage_46 7133 { 7134 if ((int)msg->data0==csm->gui_id) \ 0000089C 1C109DE5 LDR R1,[SP, #+28] \ 000008A0 0C0094E5 LDR R0,[R4, #+12] \ 000008A4 281091E5 LDR R1,[R1, #+40] \ 000008A8 010050E1 CMP R0,R1 7135 { 7136 csm->csm.state=-3; \ 000008AC 1C009D05 LDREQ R0,[SP, #+28] \ 000008B0 0210E003 MVNEQ R1,#+2 \ 000008B4 10108005 STREQ R1,[R0, #+16] 7137 } 7138 if ((int)msg->data0==contactlist_menu_id) \ 000008B8 0C0094E5 LDR R0,[R4, #+12] \ 000008BC 041395E5 LDR R1,[R5, #+772] \ 000008C0 010050E1 CMP R0,R1 7139 { 7140 contactlist_menu_id=0; \ 000008C4 04738505 STREQ R7,[R5, #+772] 7141 //prev_clmenu_itemcount=0; 7142 } 7143 if ((int)msg->data0==edchat_id) \ 000008C8 B81495E5 LDR R1,[R5, #+1208] \ 000008CC 010050E1 CMP R0,R1 7144 { 7145 edchat_id=0; \ 000008D0 B8748505 STREQ R7,[R5, #+1208] 7146 } 7147 } 7148 7149 if (msg->msg==MSG_HELPER_TRANSLATOR) \ ??maincsm_onmessage_46: \ 000008D4 040094E5 LDR R0,[R4, #+4] \ 000008D8 AE10A0E3 MOV R1,#+174 \ 000008DC DE1C81E3 ORR R1,R1,#0xDE00 \ 000008E0 010050E1 CMP R0,R1 \ 000008E4 2900001A BNE ??maincsm_onmessage_47 7150 { 7151 switch((int)msg->data0) \ 000008E8 0C0094E5 LDR R0,[R4, #+12] \ 000008EC 101094E5 LDR R1,[R4, #+16] \ 000008F0 ........ LDR R9,??DataTable287 ;; RECONNECT_TIME \ 000008F4 ........ LDR R10,??DataTable288 ;; do_reconnect \ 000008F8 0420A0E3 MOV R2,#+4 \ 000008FC 7C2D82E3 ORR R2,R2,#0x1F00 \ 00000900 054082E0 ADD R4,R2,R5 \ 00000904 882F42E2 SUB R2,R2,#+544 \ 00000908 058082E0 ADD R8,R2,R5 \ 0000090C 01B0A0E3 MOV R11,#+1 \ 00000910 802050E2 SUBS R2,R0,#+128 \ 00000914 0800000A BEQ ??maincsm_onmessage_48 \ 00000918 022052E2 SUBS R2,R2,#+2 \ 0000091C 0200000A BEQ ??maincsm_onmessage_49 \ 00000920 122052E2 SUBS R2,R2,#+18 \ 00000924 1100000A BEQ ??maincsm_onmessage_50 \ 00000928 1B0000EA B ??maincsm_onmessage_51 7152 { 7153 case LMAN_DISCONNECT_IND: 7154 is_gprs_online=0; \ ??maincsm_onmessage_49: \ 0000092C A87485E5 STR R7,[R5, #+1192] 7155 return(1); \ 00000930 0100A0E3 MOV R0,#+1 \ 00000934 20D08DE2 ADD SP,SP,#+32 \ 00000938 F08FBDE8 POP {R4-R11,PC} ;; return 7156 case LMAN_CONNECT_CNF: 7157 vibra_count=1; \ ??maincsm_onmessage_48: \ 0000093C 78B485E5 STR R11,[R5, #+1144] 7158 start_vibra(); \ 00000940 ........ BL start_vibra 7159 is_gprs_online=1; \ 00000944 A8B485E5 STR R11,[R5, #+1192] 7160 strcpy(logmsg,LG_GRGPRSUP); \ 00000948 9A1F86E2 ADD R1,R6,#+616 \ 0000094C 0800A0E1 MOV R0,R8 \ 00000950 1A0000EF SWI +26 7161 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000954 000099E5 LDR R0,[R9, #+0] \ 00000958 0A20A0E1 MOV R2,R10 \ 0000095C D830A0E3 MOV R3,#+216 \ 00000960 930001E0 MUL R1,R3,R0 \ 00000964 0400A0E1 MOV R0,R4 \ 00000968 4D0000EF SWI +77 7162 return(1); \ 0000096C 070000EA B ??maincsm_onmessage_47 7163 case ENIP_DNR_HOST_BY_NAME: 7164 if ((int)msg->data1==DNR_ID) \ ??maincsm_onmessage_50: \ 00000970 CC0495E5 LDR R0,[R5, #+1228] \ 00000974 000051E1 CMP R1,R0 \ 00000978 0400001A BNE ??maincsm_onmessage_47 7165 { 7166 if (DNR_TRIES) SUBPROC((void *)create_connect); \ 0000097C D00495E5 LDR R0,[R5, #+1232] \ 00000980 000050E3 CMP R0,#+0 \ 00000984 0100000A BEQ ??maincsm_onmessage_47 \ 00000988 ........ LDR R0,??DataTable289 ;; create_connect \ ??maincsm_onmessage_52: \ 0000098C 710100EF SWI +369 7167 } 7168 return(1); \ ??maincsm_onmessage_47: \ 00000990 0100A0E3 MOV R0,#+1 \ ??maincsm_onmessage_53: \ 00000994 20D08DE2 ADD SP,SP,#+32 \ 00000998 F08FBDE8 POP {R4-R11,PC} 7169 } 7170 if ((int)msg->data1==sock) \ ??maincsm_onmessage_51: \ 0000099C 942495E5 LDR R2,[R5, #+1172] \ 000009A0 020051E1 CMP R1,R2 \ 000009A4 F9FFFF1A BNE ??maincsm_onmessage_47 7171 { 7172 //Если наш сокет 7173 if ((((unsigned int)msg->data0)>>28)==0xA) \ 000009A8 201EA0E1 LSR R1,R0,#+28 \ 000009AC 0A0051E3 CMP R1,#+10 \ 000009B0 0200001A BNE ??maincsm_onmessage_54 7174 { 7175 //Принят пакет 7176 ProcessPacket((TPKT *)msg->data0); \ 000009B4 ........ BL ProcessPacket 7177 return(0); \ 000009B8 0000A0E3 MOV R0,#+0 \ 000009BC F4FFFFEA B ??maincsm_onmessage_53 7178 } 7179 switch((int)msg->data0) \ ??maincsm_onmessage_54: \ 000009C0 901495E5 LDR R1,[R5, #+1168] \ 000009C4 8A0040E2 SUB R0,R0,#+138 \ 000009C8 050050E3 CMP R0,#+5 \ 000009CC EFFFFF8A BHI ??maincsm_onmessage_47 \ 000009D0 012F8FE2 ADR R2,??maincsm_onmessage_1 \ 000009D4 D02092E1 LDRSB R2,[R2, R0] \ 000009D8 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_1: \ 000009DC 43433E01 DC8 +67,+67,+62,+1 \ 000009E0 4C480000 DC8 +76,+72,+0,+0 7180 { 7181 case ENIP_SOCK_CONNECTED: 7182 if (connect_state==1) \ ??maincsm_onmessage_55: \ 000009E4 010051E3 CMP R1,#+1 \ 000009E8 3600001A BNE ??maincsm_onmessage_56 7183 { 7184 if(VIBR_ON_CONNECT) \ 000009EC ........ LDR R0,??DataTable294 ;; VIBR_ON_CONNECT 7185 vibra_count=2; 7186 else 7187 vibra_count=1; 7188 start_vibra(); 7189 //Соединение установленно, посылаем пакет login 7190 strcpy(logmsg, LG_GRTRYLOGIN); 7191 { 7192 int i=strlen(PASS); \ 000009F0 0C429FE5 LDR R4,??maincsm_onmessage_6+0x40 ;; PASS \ 000009F4 000090E5 LDR R0,[R0, #+0] 7193 TPKT *p=malloc(sizeof(PKT)+i); 7194 p->pkt.uin=UIN; \ 000009F8 ........ LDR R10,??DataTable291 ;; UIN \ 000009FC 000050E3 CMP R0,#+0 \ 00000A00 0200A013 MOVNE R0,#+2 \ 00000A04 78048515 STRNE R0,[R5, #+1144] \ 00000A08 78B48505 STREQ R11,[R5, #+1144] \ 00000A0C ........ BL start_vibra \ 00000A10 A01F86E2 ADD R1,R6,#+640 \ 00000A14 0800A0E1 MOV R0,R8 \ 00000A18 1A0000EF SWI +26 \ 00000A1C 0400A0E1 MOV R0,R4 \ 00000A20 1B0000EF SWI +27 \ 00000A24 0080A0E1 MOV R8,R0 \ 00000A28 080088E2 ADD R0,R8,#+8 \ 00000A2C 140000EF SWI +20 \ 00000A30 0090A0E1 MOV R9,R0 \ 00000A34 00009AE5 LDR R0,[R10, #+0] 7195 p->pkt.type=T_REQLOGIN; 7196 p->pkt.data_len=i; 7197 memcpy(p->data,PASS,i); \ 00000A38 0820A0E1 MOV R2,R8 \ 00000A3C 000089E5 STR R0,[R9, #+0] \ 00000A40 B4B0C9E1 STRH R11,[R9, #+4] \ 00000A44 B680C9E1 STRH R8,[R9, #+6] \ 00000A48 0410A0E1 MOV R1,R4 \ 00000A4C 080089E2 ADD R0,R9,#+8 \ 00000A50 1E0100EF SWI +286 7198 SUBPROC((void *)send_login,0,p); \ 00000A54 AC019FE5 LDR R0,??maincsm_onmessage_6+0x44 ;; send_login \ 00000A58 0920A0E1 MOV R2,R9 \ 00000A5C 0010A0E3 MOV R1,#+0 \ 00000A60 710100EF SWI +369 7199 } 7200 GROUP_CACHE=0; \ 00000A64 B47485E5 STR R7,[R5, #+1204] 7201 SENDMSGCOUNT=0; //Начинаем отсчет \ 00000A68 087385E5 STR R7,[R5, #+776] 7202 if (!FindGroupByID(0)) AddGroup(0,LG_GROUPNOTINLIST); \ 00000A6C 0700A0E1 MOV R0,R7 \ 00000A70 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000A74 000050E3 CMP R0,#+0 \ 00000A78 0100001A BNE ??maincsm_onmessage_57 \ 00000A7C A41F86E2 ADD R1,R6,#+656 \ 00000A80 ........ _BLF AddGroup,??AddGroup??rA 7203 if (!FindContactByUin(UIN) && (IsShowLoopback)) AddContact(UIN, LG_CLLOOPBACK,0,1); \ ??maincsm_onmessage_57: \ 00000A84 00009AE5 LDR R0,[R10, #+0] \ 00000A88 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000A8C 000050E3 CMP R0,#+0 \ 00000A90 0800001A BNE ??maincsm_onmessage_58 \ 00000A94 70019FE5 LDR R0,??maincsm_onmessage_6+0x48 ;; IsShowLoopback \ 00000A98 000090E5 LDR R0,[R0, #+0] \ 00000A9C 000050E3 CMP R0,#+0 \ 00000AA0 0400000A BEQ ??maincsm_onmessage_58 \ 00000AA4 00009AE5 LDR R0,[R10, #+0] \ 00000AA8 0130A0E3 MOV R3,#+1 \ 00000AAC 0720A0E1 MOV R2,R7 \ 00000AB0 A71F86E2 ADD R1,R6,#+668 \ 00000AB4 ........ _BLF AddContact,??AddContact??rA 7204 SUBPROC((void *)LoadLocalCL); \ ??maincsm_onmessage_58: \ 00000AB8 50019FE5 LDR R0,??maincsm_onmessage_6+0x4C ;; LoadLocalCL \ 00000ABC 710100EF SWI +369 7205 SMART_REDRAW(); \ 00000AC0 ........ BL SMART_REDRAW \ 00000AC4 B1FFFFEA B ??maincsm_onmessage_47 7206 } 7207 else 7208 { 7209 ShowMSG(1,(int)LG_MSGILLEGMSGCON); \ ??maincsm_onmessage_56: \ 00000AC8 AA1F86E2 ADD R1,R6,#+680 \ ??maincsm_onmessage_59: \ 00000ACC 0100A0E3 MOV R0,#+1 \ 00000AD0 480100EF SWI +328 \ 00000AD4 ADFFFFEA B ??maincsm_onmessage_47 7210 } 7211 break; 7212 case ENIP_SOCK_DATA_READ: 7213 if (connect_state>=2) \ ??maincsm_onmessage_60: \ 00000AD8 020051E3 CMP R1,#+2 7214 { 7215 //Если посылали send 7216 SUBPROC((void *)get_answer); \ 00000ADC 30019FA5 LDRGE R0,??maincsm_onmessage_6+0x50 ;; get_answer \ 00000AE0 A9FFFFAA BGE ??maincsm_onmessage_52 7217 //SMART_REDRAW(); 7218 } 7219 else 7220 { 7221 ShowMSG(1,(int)LG_MSGILLEGMSGREA); \ 00000AE4 B41F86E2 ADD R1,R6,#+720 \ 00000AE8 F7FFFFEA B ??maincsm_onmessage_59 7222 } 7223 break; 7224 case ENIP_BUFFER_FREE: 7225 case ENIP_BUFFER_FREE1: 7226 SUBPROC((void *)SendAnswer,0,0); \ ??maincsm_onmessage_61: \ 00000AEC ........ LDR R0,??DataTable292 ;; SendAnswer \ 00000AF0 0020A0E3 MOV R2,#+0 \ 00000AF4 0210A0E1 MOV R1,R2 \ 00000AF8 710100EF SWI +369 \ 00000AFC A3FFFFEA B ??maincsm_onmessage_47 7227 break; 7228 case ENIP_SOCK_REMOTE_CLOSED: 7229 //Закрыт со стороны сервера 7230 if (connect_state) \ ??maincsm_onmessage_62: \ 00000B00 000051E3 CMP R1,#+0 \ 00000B04 A1FFFF0A BEQ ??maincsm_onmessage_47 7231 SUBPROC((void *)end_socket); \ 00000B08 ........ LDR R0,??DataTable293 ;; end_socket \ 00000B0C 9EFFFFEA B ??maincsm_onmessage_52 7232 break; 7233 case ENIP_SOCK_CLOSED: 7234 //strcpy(logmsg, "No connection"); 7235 //Dump not received 7236 /* if (RXstate>(-(int)sizeof(PKT))) 7237 { 7238 unsigned int err; 7239 int f=fopen("4:\\NATICQ.dump",A_ReadWrite+A_Create+A_Truncate+A_BIN,P_READ+P_WRITE,&err); 7240 if (f!=-1) 7241 { 7242 fwrite(f,&RXbuf,RXstate+sizeof(PKT),&err); 7243 fclose(f,&err); 7244 } 7245 }*/ 7246 FillAllOffline(); \ ??maincsm_onmessage_63: \ 00000B10 ........ _BLF FillAllOffline,??FillAllOffline??rA 7247 RecountMenu(NULL,1); \ 00000B14 0110A0E3 MOV R1,#+1 \ 00000B18 0700A0E1 MOV R0,R7 \ 00000B1C ........ BL RecountMenu 7248 connect_state=0; 7249 sock=-1; \ 00000B20 0700E0E1 MVN R0,R7 \ 00000B24 940485E5 STR R0,[R5, #+1172] 7250 if(VIBR_ON_CONNECT) \ 00000B28 ........ LDR R0,??DataTable294 ;; VIBR_ON_CONNECT \ 00000B2C 907485E5 STR R7,[R5, #+1168] \ 00000B30 000090E5 LDR R0,[R0, #+0] \ 00000B34 000050E3 CMP R0,#+0 7251 vibra_count=4; \ 00000B38 0400A013 MOVNE R0,#+4 \ 00000B3C 78048515 STRNE R0,[R5, #+1144] 7252 else 7253 vibra_count=1; \ 00000B40 78B48505 STREQ R11,[R5, #+1144] 7254 7255 start_vibra(); \ 00000B44 ........ BL start_vibra 7256 if (sendq_p) \ 00000B48 D00295E5 LDR R0,[R5, #+720] \ 00000B4C 000050E3 CMP R0,#+0 \ 00000B50 0400000A BEQ ??maincsm_onmessage_64 7257 { 7258 snprintf(logmsg,255,"Disconnected, %d bytes not sended!",sendq_l); \ 00000B54 CC3295E5 LDR R3,[R5, #+716] \ 00000B58 BD2F86E2 ADD R2,R6,#+756 \ 00000B5C FF10A0E3 MOV R1,#+255 \ 00000B60 0800A0E1 MOV R0,R8 \ 00000B64 1B0100EF SWI +283 7259 7260 #ifdef LOG 7261 char *s=malloc(256); 7262 TTime tt; 7263 TDate d; 7264 GetDateTime(&d,&tt); 7265 CLIST *t; 7266 t=(CLIST*)cltop; 7267 ACKED *ack; 7268 int i=0; 7269 while(t) 7270 { 7271 ack=GetAck(t); 7272 if(ack) i+=ack->count; 7273 t=t->next; 7274 } 7275 // ACKED *GetAck(CLIST *t) 7276 snprintf(s,255,"- Queue! Uptime: %02d:%02d:%02d, Server: %s , Time: %02d:%02d:%02d Date:%02d Ping: %d, Unread: %d, Not send: %d, Logmsg: %s", 7277 uptimeHour, uptimeMin, uptimeSec, hostbuf2,tt.hour,tt.min,tt.sec,d.day,curping,total_unread,i,logmsg); 7278 logwrite(s); 7279 mfree(s); 7280 #endif 7281 } 7282 Play(sndLostConn); \ ??maincsm_onmessage_64: \ 00000B68 ........ LDR R0,??DataTable295 ;; sndLostConn \ 00000B6C ........ BL Play 7283 SMART_REDRAW(); \ 00000B70 ........ BL SMART_REDRAW 7284 SUBPROC((void *)ClearSendQ); \ 00000B74 ........ LDR R0,??DataTable296 ;; ClearSendQ \ 00000B78 710100EF SWI +369 7285 #ifdef EVILFOX 7286 if (!disautorecconect) GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*12,do_reconnect); 7287 #else 7288 if (!disautorecconect) \ 00000B7C 640495E5 LDR R0,[R5, #+1124] \ 00000B80 000050E3 CMP R0,#+0 \ 00000B84 81FFFF1A BNE ??maincsm_onmessage_47 7289 { 7290 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000B88 000099E5 LDR R0,[R9, #+0] \ 00000B8C 0A20A0E1 MOV R2,R10 \ 00000B90 D830A0E3 MOV R3,#+216 \ 00000B94 930001E0 MUL R1,R3,R0 \ 00000B98 0400A0E1 MOV R0,R4 \ 00000B9C 4D0000EF SWI +77 7291 snprintf(logmsg,255,"%s\nReconect after %d second...",logmsg, RECONNECT_TIME); //2058 \ 00000BA0 000099E5 LDR R0,[R9, #+0] \ 00000BA4 0830A0E1 MOV R3,R8 \ 00000BA8 01002DE9 PUSH {R0} \ 00000BAC C62F86E2 ADD R2,R6,#+792 \ 00000BB0 FF10A0E3 MOV R1,#+255 \ 00000BB4 0800A0E1 MOV R0,R8 \ 00000BB8 1B0100EF SWI +283 \ 00000BBC 04D08DE2 ADD SP,SP,#+4 \ 00000BC0 72FFFFEA B ??maincsm_onmessage_47 \ ??maincsm_onmessage_6: \ 00000BC4 ........ DC32 CheckDoubleRun \ 00000BC8 ........ DC32 ProcessNextSmile \ 00000BCC ........ DC32 ProcessNextXStatImg \ 00000BD0 ........ DC32 IDLEICON_X \ 00000BD4 ........ DC32 IDLEICON_Y \ 00000BD8 ........ DC32 msg_d_x \ 00000BDC ........ DC32 msg_d_y \ 00000BE0 ........ DC32 Is_UPTIME_On \ 00000BE4 ........ DC32 isPingIdle \ 00000BE8 ........ DC32 Is_Unread_On \ 00000BEC ........ DC32 unread_Y \ 00000BF0 ........ DC32 unread_X \ 00000BF4 ........ DC32 Is_Online_On \ 00000BF8 ........ DC32 Is_Online_On_Align \ 00000BFC ........ DC32 online_y \ 00000C00 ........ DC32 online_x \ 00000C04 ........ DC32 PASS \ 00000C08 ........ DC32 send_login \ 00000C0C ........ DC32 IsShowLoopback \ 00000C10 ........ DC32 LoadLocalCL \ 00000C14 ........ DC32 get_answer 7292 #ifdef LOG 7293 char *s=malloc(256); 7294 TTime tt; 7295 TDate d; 7296 GetDateTime(&d,&tt); 7297 CLIST *t; 7298 t=(CLIST*)cltop; 7299 ACKED *ack; 7300 int i=0; 7301 while(t) 7302 { 7303 ack=GetAck(t); 7304 if(ack) i+=ack->count; 7305 t=t->next; 7306 } 7307 snprintf(s,255,"- Disconnect!Uptime: %02d:%02d:%02d, Server: %s, Time: %02d:%02d:%02d Date:%02d Ping: %d, Unread: %d, Not Send:%d, Logmsg: %s", 7308 uptimeHour, uptimeMin, uptimeSec, hostbuf2,tt.hour,tt.min,tt.sec,d.day,curping,total_unread,i,logmsg); 7309 logwrite(s); 7310 mfree(s); 7311 #endif 7312 } 7313 7314 #endif 7315 break; 7316 } 7317 } 7318 } 7319 return(1); 7320 } 7321 7322 7323 //-------------------- ICON IN ICONBAR --------------------// 7324 7325 //kluchnik 26.03.08 7326 #ifdef NEWSGOLD 7327 #pragma swi_number=0x27 7328 __swi __arm void AddIconToIconBar(int pic, short *num); 7329 7330 int iconmsg=1; \ In segment CODE, align 4, keep-with-next 7331 void addIconBar(short* num) 7332 { \ addIconBar: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 7333 if(IsGuiOnTop(maingui_id) && !ShowStatusToIconBar) goto next;// return; \ 00000004 ........ LDR R6,??DataTable297 ;; i_rc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 000396E5 LDR R0,[R6, #+768] \ 00000010 0850A0E3 MOV R5,#+8 \ 00000014 805D85E3 ORR R5,R5,#0x2000 \ 00000018 350100EF SWI +309 \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0300000A BEQ ??addIconBar_0 \ 00000024 94029FE5 LDR R0,??addIconBar_1 ;; ShowStatusToIconBar \ 00000028 000090E5 LDR R0,[R0, #+0] \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 5200000A BEQ ??addIconBar_2 7334 7335 int icn; 7336 if(ShowStatusIcon==1 || ShowStatusIcon==3) \ ??addIconBar_0: \ 00000034 ........ LDR R0,??DataTable298 ;; ShowStatusIcon \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C 010050E3 CMP R0,#+1 \ 00000040 03005013 CMPNE R0,#+3 \ 00000044 2C00001A BNE ??addIconBar_3 7337 { 7338 if(total_unread) \ 00000048 AC0496E5 LDR R0,[R6, #+1196] \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 2200000A BEQ ??addIconBar_4 7339 { 7340 if(blink_mess) iconmsg=1; \ 00000054 68029FE5 LDR R0,??addIconBar_1+0x4 ;; blink_mess \ 00000058 0170A0E3 MOV R7,#+1 \ 0000005C 000090E5 LDR R0,[R0, #+0] \ 00000060 000050E3 CMP R0,#+0 \ 00000064 3C758615 STRNE R7,[R6, #+1340] \ 00000068 0200001A BNE ??addIconBar_5 7341 AddIconToIconBar(NumStatusToIconBar +(iconmsg==1?IS_MSG:7777), num); \ 0000006C 3C0596E5 LDR R0,[R6, #+1340] \ 00000070 010050E3 CMP R0,#+1 \ 00000074 0100001A BNE ??addIconBar_6 \ ??addIconBar_5: \ 00000078 0D00A0E3 MOV R0,#+13 \ 0000007C 010000EA B ??addIconBar_7 \ ??addIconBar_6: \ 00000080 6100A0E3 MOV R0,#+97 \ 00000084 780D80E3 ORR R0,R0,#0x1E00 \ ??addIconBar_7: \ 00000088 ........ LDR R2,??DataTable302 ;; NumStatusToIconBar \ 0000008C 0410A0E1 MOV R1,R4 \ 00000090 002092E5 LDR R2,[R2, #+0] \ 00000094 020080E0 ADD R0,R0,R2 \ 00000098 270000EF SWI +39 7342 iconmsg=!iconmsg; \ 0000009C 3C0596E5 LDR R0,[R6, #+1340] \ 000000A0 000050E3 CMP R0,#+0 \ 000000A4 0070A013 MOVNE R7,#+0 \ 000000A8 3C7586E5 STR R7,[R6, #+1340] 7343 } 7344 else 7345 { 7346 switch(connect_state) 7347 { 7348 case 0: 7349 icn=IS_OFFLINE; 7350 break; 7351 case 3: 7352 icn=CurrentStatus; //IS_ONLINE; 7353 break; 7354 default: 7355 icn=IS_UNKNOWN; break; 7356 } 7357 AddIconToIconBar(NumStatusToIconBar + icn, num); 7358 } 7359 } 7360 else 7361 { 7362 if(ShowStatusIcon==2)//Если показывать и иконбаре везде,кроме идле 7363 { 7364 if(!(IsIdleUiOnTop())) 7365 { 7366 if(total_unread) 7367 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); 7368 else 7369 { 7370 switch(connect_state) 7371 { 7372 case 0: 7373 icn=IS_OFFLINE; break; 7374 case 3: 7375 icn=CurrentStatus; //IS_ONLINE; 7376 break; 7377 default: 7378 icn=IS_UNKNOWN; break; 7379 } 7380 AddIconToIconBar(NumStatusToIconBar + icn, num); 7381 } 7382 } 7383 } 7384 } 7385 7386 if(show_xstatus==2 || show_xstatus==3) \ ??addIconBar_8: \ 000000AC 14029FE5 LDR R0,??addIconBar_1+0x8 ;; show_xstatus \ 000000B0 000090E5 LDR R0,[R0, #+0] \ 000000B4 020050E3 CMP R0,#+2 \ 000000B8 03005013 CMPNE R0,#+3 \ 000000BC 2F00001A BNE ??addIconBar_2 7387 { 7388 if(total_unread2 && total_unread2<10) \ 000000C0 F80296E5 LDR R0,[R6, #+760] \ 000000C4 000050E3 CMP R0,#+0 \ 000000C8 2400000A BEQ ??addIconBar_9 \ 000000CC 0A0050E3 CMP R0,#+10 \ 000000D0 220000AA BGE ??addIconBar_9 7389 AddIconToIconBar(8200 + total_unread2, num); \ 000000D4 0410A0E1 MOV R1,R4 \ 000000D8 000085E0 ADD R0,R5,R0 \ 000000DC 260000EA B ??addIconBar_10 \ ??addIconBar_4: \ 000000E0 900496E5 LDR R0,[R6, #+1168] \ 000000E4 000050E3 CMP R0,#+0 \ 000000E8 1700000A BEQ ??addIconBar_11 \ 000000EC 030050E2 SUBS R0,R0,#+3 \ 000000F0 1400001A BNE ??addIconBar_12 \ ??addIconBar_13: \ 000000F4 A00396E5 LDR R0,[R6, #+928] \ 000000F8 130000EA B ??addIconBar_11 \ ??addIconBar_3: \ 000000FC 020050E3 CMP R0,#+2 \ 00000100 E9FFFF1A BNE ??addIconBar_8 \ 00000104 C50000EF SWI +197 \ 00000108 000050E3 CMP R0,#+0 \ 0000010C E6FFFF1A BNE ??addIconBar_8 \ 00000110 AC0496E5 LDR R0,[R6, #+1196] \ 00000114 000050E3 CMP R0,#+0 \ 00000118 0500000A BEQ ??addIconBar_14 \ 0000011C ........ LDR R0,??DataTable302 ;; NumStatusToIconBar \ 00000120 0410A0E1 MOV R1,R4 \ 00000124 000090E5 LDR R0,[R0, #+0] \ 00000128 0D0080E2 ADD R0,R0,#+13 \ ??addIconBar_15: \ 0000012C 270000EF SWI +39 \ 00000130 DDFFFFEA B ??addIconBar_8 \ ??addIconBar_14: \ 00000134 900496E5 LDR R0,[R6, #+1168] \ 00000138 000050E3 CMP R0,#+0 \ 0000013C 0200000A BEQ ??addIconBar_11 \ 00000140 030050E2 SUBS R0,R0,#+3 \ 00000144 EAFFFF0A BEQ ??addIconBar_13 \ ??addIconBar_12: \ 00000148 0E00A0E3 MOV R0,#+14 \ ??addIconBar_11: \ 0000014C ........ LDR R2,??DataTable302 ;; NumStatusToIconBar \ 00000150 0410A0E1 MOV R1,R4 \ 00000154 002092E5 LDR R2,[R2, #+0] \ 00000158 020080E0 ADD R0,R0,R2 \ 0000015C F2FFFFEA B ??addIconBar_15 7390 else 7391 if(CurrentXStatus!=0) \ ??addIconBar_9: \ 00000160 A40396E5 LDR R0,[R6, #+932] \ 00000164 000050E3 CMP R0,#+0 \ 00000168 0400000A BEQ ??addIconBar_2 7392 AddIconToIconBar(NumXStatusToIconBar+CurrentXStatus,num); \ 0000016C 58219FE5 LDR R2,??addIconBar_1+0xC ;; NumXStatusToIconBar \ 00000170 0410A0E1 MOV R1,R4 \ 00000174 002092E5 LDR R2,[R2, #+0] \ 00000178 020080E0 ADD R0,R0,R2 \ ??addIconBar_10: \ 0000017C 270000EF SWI +39 7393 } 7394 7395 7396 next: 7397 if(PingToIconBar) \ ??addIconBar_2: \ 00000180 48019FE5 LDR R0,??addIconBar_1+0x10 ;; PingToIconBar \ 00000184 000090E5 LDR R0,[R0, #+0] \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 1400000A BEQ ??addIconBar_16 7398 { 7399 int ping=0; 7400 if(curping < 3) ping=0; \ 00000190 C80296E5 LDR R0,[R6, #+712] \ 00000194 030050E3 CMP R0,#+3 \ 00000198 0C0000BA BLT ??addIconBar_17 7401 else if(curping > 3 && curping < 10) ping=1; \ 0000019C 040050E3 CMP R0,#+4 \ 000001A0 020000BA BLT ??addIconBar_18 \ 000001A4 0A0050E3 CMP R0,#+10 \ 000001A8 0100A0B3 MOVLT R0,#+1 \ 000001AC 080000BA BLT ??addIconBar_19 7402 else if(curping > 10 && curping < 30) ping=2; \ ??addIconBar_18: \ 000001B0 0B0050E3 CMP R0,#+11 \ 000001B4 020000BA BLT ??addIconBar_20 \ 000001B8 1E0050E3 CMP R0,#+30 \ 000001BC 0200A0B3 MOVLT R0,#+2 \ 000001C0 030000BA BLT ??addIconBar_19 7403 else if(curping > 30) ping=3; \ ??addIconBar_20: \ 000001C4 1F0050E3 CMP R0,#+31 \ 000001C8 0300A0A3 MOVGE R0,#+3 \ 000001CC 000000AA BGE ??addIconBar_19 7404 else ping=0; \ ??addIconBar_17: \ 000001D0 0000A0E3 MOV R0,#+0 7405 7406 AddIconToIconBar(8210 + ping ,num); \ ??addIconBar_19: \ 000001D4 0410A0E1 MOV R1,R4 \ 000001D8 0A2085E2 ADD R2,R5,#+10 \ 000001DC 000082E0 ADD R0,R2,R0 \ 000001E0 270000EF SWI +39 7407 } 7408 7409 7410 if(ADDITION_UIN!=0) \ ??addIconBar_16: \ 000001E4 E8009FE5 LDR R0,??addIconBar_1+0x14 ;; ADDITION_UIN \ 000001E8 007090E5 LDR R7,[R0, #+0] \ 000001EC 000057E3 CMP R7,#+0 \ 000001F0 F080BD08 POPEQ {R4-R7,PC} 7411 { 7412 if(IsGuiOnTop(maingui_id) && !ShowAddStatusToIconBar) return;//Если не показывать когда гуй вверху,выходим нах \ 000001F4 000396E5 LDR R0,[R6, #+768] \ 000001F8 350100EF SWI +309 \ 000001FC 000050E3 CMP R0,#+0 \ 00000200 0300000A BEQ ??addIconBar_21 \ 00000204 CC009FE5 LDR R0,??addIconBar_1+0x18 ;; ShowAddStatusToIconBar \ 00000208 000090E5 LDR R0,[R0, #+0] \ 0000020C 000050E3 CMP R0,#+0 \ 00000210 F080BD08 POPEQ {R4-R7,PC} 7413 7414 CLIST *t; 7415 t=FindContactByUin(ADDITION_UIN); \ ??addIconBar_21: \ 00000214 0700A0E1 MOV R0,R7 \ 00000218 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 0000021C 0060B0E1 MOVS R6,R0 7416 if(t) \ 00000220 F080BD08 POPEQ {R4-R7,PC} 7417 { 7418 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) \ 00000224 B405D6E1 LDRH R0,[R6, #+84] \ 00000228 FF10A0E3 MOV R1,#+255 \ 0000022C FF1C81E3 ORR R1,R1,#0xFF00 \ 00000230 010050E1 CMP R0,R1 \ 00000234 F080BD08 POPEQ {R4-R7,PC} \ 00000238 0600A0E1 MOV R0,R6 \ 0000023C ........ BL GetIconIndex \ 00000240 0E0050E3 CMP R0,#+14 \ 00000244 F080BD08 POPEQ {R4-R7,PC} 7419 { 7420 if(show_add_state) \ 00000248 8C009FE5 LDR R0,??addIconBar_1+0x1C ;; show_add_state \ 0000024C 000090E5 LDR R0,[R0, #+0] \ 00000250 000050E3 CMP R0,#+0 \ 00000254 0600000A BEQ ??addIconBar_22 7421 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); \ 00000258 0600A0E1 MOV R0,R6 \ 0000025C ........ BL GetIconIndex \ 00000260 ........ LDR R2,??DataTable302 ;; NumStatusToIconBar \ 00000264 0410A0E1 MOV R1,R4 \ 00000268 002092E5 LDR R2,[R2, #+0] \ 0000026C 020080E0 ADD R0,R0,R2 \ 00000270 270000EF SWI +39 7422 7423 if(t->isunread) \ ??addIconBar_22: \ 00000274 900096E5 LDR R0,[R6, #+144] \ 00000278 000050E3 CMP R0,#+0 \ 0000027C 0300000A BEQ ??addIconBar_23 7424 AddIconToIconBar(8200 + t->unread_msg, num); \ 00000280 940096E5 LDR R0,[R6, #+148] \ 00000284 0410A0E1 MOV R1,R4 \ 00000288 000085E0 ADD R0,R5,R0 \ 0000028C 090000EA B ??addIconBar_24 7425 else 7426 if(show_add_xstate && t->xstate!=0) \ ??addIconBar_23: \ 00000290 48009FE5 LDR R0,??addIconBar_1+0x20 ;; show_add_xstate \ 00000294 000090E5 LDR R0,[R0, #+0] \ 00000298 000050E3 CMP R0,#+0 \ 0000029C B605D611 LDRHNE R0,[R6, #+86] \ 000002A0 00005013 CMPNE R0,#+0 \ 000002A4 F080BD08 POPEQ {R4-R7,PC} 7427 AddIconToIconBar(NumXStatusToIconBar + t->xstate, num); \ 000002A8 1C209FE5 LDR R2,??addIconBar_1+0xC ;; NumXStatusToIconBar \ 000002AC 0410A0E1 MOV R1,R4 \ 000002B0 002092E5 LDR R2,[R2, #+0] \ 000002B4 020080E0 ADD R0,R0,R2 \ ??addIconBar_24: \ 000002B8 270000EF SWI +39 \ 000002BC F080BDE8 POP {R4-R7,PC} ;; return \ ??addIconBar_1: \ 000002C0 ........ DC32 ShowStatusToIconBar \ 000002C4 ........ DC32 blink_mess \ 000002C8 ........ DC32 show_xstatus \ 000002CC ........ DC32 NumXStatusToIconBar \ 000002D0 ........ DC32 PingToIconBar \ 000002D4 ........ DC32 ADDITION_UIN \ 000002D8 ........ DC32 ShowAddStatusToIconBar \ 000002DC ........ DC32 show_add_state \ 000002E0 ........ DC32 show_add_xstate 7428 } 7429 } 7430 } 7431 } 7432 7433 typedef struct 7434 { 7435 char check_name[8]; 7436 int addr; 7437 }ICONBAR_H; 7438 7439 #endif 7440 \ In segment DATA_C, align 4, align-sorted 7441 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 7442 \ In segment DATA_Z, align 4, align-sorted 7443 unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 7444 7445 struct 7446 { 7447 CSM_DESC maincsm; 7448 WSHDR maincsm_name; 7449 #ifdef NEWSGOLD 7450 ICONBAR_H iconbar_handler; 7451 #endif 7452 }MAINCSM = 7453 { 7454 { 7455 maincsm_onmessage, 7456 maincsm_oncreate, 7457 #ifdef NEWSGOLD 7458 0, 7459 0, 7460 0, 7461 0, 7462 #endif 7463 maincsm_onclose, 7464 sizeof(MAIN_CSM), 7465 1, 7466 &minus11 7467 }, 7468 { 7469 maincsm_name_body, 7470 NAMECSM_MAGIC1, 7471 NAMECSM_MAGIC2, 7472 0x0, 7473 139 7474 } 7475 #ifdef NEWSGOLD 7476 , 7477 { 7478 "IconBar" 7479 } 7480 #endif 7481 }; 7482 \ In segment CODE, align 4, keep-with-next 7483 void UpdateCSMname(void) 7484 { 7485 wsprintf((WSHDR *)(&MAINCSM.maincsm_name), "NATICQ: %d",UIN); \ UpdateCSMname: \ 00000000 ........ LDR R0,??DataTable307 ;; UIN \ 00000004 10109FE5 LDR R1,??UpdateCSMname_0 ;; `?` \ 00000008 00402DE9 PUSH {LR} \ 0000000C 002090E5 LDR R2,[R0, #+0] \ 00000010 08009FE5 LDR R0,??UpdateCSMname_0+0x4 ;; i_rc + 204 \ 00000014 240100EF SWI +292 7486 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??UpdateCSMname_0: \ 0000001C ........ DC32 `?` \ 00000020 ........ DC32 i_rc + 204 7487 7488 #ifdef NEWSGOLD \ In segment CODE, align 4, keep-with-next 7489 void SetIconBarHandler() 7490 { 7491 MAINCSM.iconbar_handler.addr = (int)addIconBar; \ SetIconBarHandler: \ 00000000 08009FE5 LDR R0,??SetIconBarHandler_0 ;; i_rc + 232 \ 00000004 ........ LDR R1,??DataTable318 ;; addIconBar \ 00000008 001080E5 STR R1,[R0, #+0] 7492 } \ 0000000C 1EFF2FE1 BX LR ;; return \ ??SetIconBarHandler_0: \ 00000010 ........ DC32 i_rc + 232 7493 #endif 7494 \ In segment CODE, align 4, keep-with-next 7495 int main(char *filename) 7496 { \ main: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 \ 00000008 0060A0E1 MOV R6,R0 7497 MAIN_CSM main_csm; 7498 char *s; 7499 int len; 7500 WSHDR *ws; 7501 if(UpdateConfig() == -1) return 0; \ 0000000C ........ _BLF UpdateConfig,??UpdateConfig??rA \ 00000010 010070E3 CMN R0,#+1 \ 00000014 8B00000A BEQ ??main_0 7502 // InitConfig2(); 7503 7504 sprintf(PINGO, "Ping None"); \ 00000018 ........ LDR R4,??DataTable330 ;; i_rc \ 0000001C ........ LDR R5,??DataTable306 ;; Canvas \ 00000020 9C00A0E3 MOV R0,#+156 \ 00000024 CE1F85E2 ADD R1,R5,#+824 \ 00000028 640D80E3 ORR R0,R0,#0x1900 \ 0000002C 040080E0 ADD R0,R0,R4 \ 00000030 160000EF SWI +22 7505 7506 s=strrchr(filename,'\\'); 7507 len=(s-filename)+1; \ 00000034 5C10A0E3 MOV R1,#+92 \ 00000038 0600A0E1 MOV R0,R6 \ 0000003C 170100EF SWI +279 \ 00000040 060040E0 SUB R0,R0,R6 \ 00000044 017080E2 ADD R7,R0,#+1 7508 strncpy(elf_path,filename,len); \ 00000048 0720A0E1 MOV R2,R7 \ 0000004C 0610A0E1 MOV R1,R6 \ 00000050 8400A0E3 MOV R0,#+132 \ 00000054 500E80E3 ORR R0,R0,#0x500 \ 00000058 040080E0 ADD R0,R0,R4 \ 0000005C 160100EF SWI +278 7509 elf_path[len]=0; \ 00000060 0060A0E3 MOV R6,#+0 \ 00000064 040087E0 ADD R0,R7,R4 \ 00000068 8465C0E5 STRB R6,[R0, #+1412] 7510 if (!UIN) \ 0000006C ........ LDR R0,??DataTable307 ;; UIN \ 00000070 000090E5 LDR R0,[R0, #+0] \ 00000074 000050E3 CMP R0,#+0 \ 00000078 1500001A BNE ??main_1 7511 { 7512 LockSched(); \ 0000007C 460100EF SWI +326 7513 ShowMSG(1,(int)LG_MSGNOUINPASS); \ 00000080 D11F85E2 ADD R1,R5,#+836 \ 00000084 0100A0E3 MOV R0,#+1 \ 00000088 480100EF SWI +328 7514 ws=AllocWS(150); \ 0000008C 9600A0E3 MOV R0,#+150 \ 00000090 250100EF SWI +293 7515 str_2ws(ws,suc_config_name,128); \ 00000094 ........ LDR R1,??DataTable308 ;; suc_config_name \ 00000098 0040A0E1 MOV R4,R0 \ 0000009C 8020A0E3 MOV R2,#+128 \ 000000A0 6C0100EF SWI +364 7516 ExecuteFile(ws,0,0); \ 000000A4 0020A0E3 MOV R2,#+0 \ 000000A8 0210A0E1 MOV R1,R2 \ 000000AC 0400A0E1 MOV R0,R4 \ 000000B0 940000EF SWI +148 7517 FreeWS(ws); \ 000000B4 0400A0E1 MOV R0,R4 \ 000000B8 290100EF SWI +297 7518 UnlockSched(); \ 000000BC 470100EF SWI +327 7519 SUBPROC((void *)ElfKiller); \ 000000C0 ........ LDR R0,??DataTable309 ;; ElfKiller \ 000000C4 710100EF SWI +369 7520 return 0; \ 000000C8 0600A0E1 MOV R0,R6 \ 000000CC 2CD08DE2 ADD SP,SP,#+44 \ 000000D0 F087BDE8 POP {R4-R10,PC} 7521 } 7522 7523 ReadDefSettings(); 7524 setup_ICONS(); 7525 LoadXStatusText(); 7526 UpdateCSMname(); 7527 LockSched(); 7528 maincsm_id=CreateCSM(&MAINCSM.maincsm,&main_csm,0); 7529 UnlockSched(); 7530 7531 PrintLibInit(4); 7532 FontPathInit((char *)fontpath, 1); \ ??main_1: \ 000000D4 ........ LDR R7,??DataTable310 ;; fontpath 7533 FontPathInit((char *)fontpath2, 1); \ 000000D8 ........ LDR R8,??DataTable311 ;; fontpath2 7534 FontPathInit((char *)fontpath3, 1); \ 000000DC ........ LDR R9,??DataTable312 ;; fontpath3 7535 FontPathInit((char *)fontpath4, 1); \ 000000E0 ........ LDR R10,??DataTable313 ;; fontpath4 \ 000000E4 ........ BL ReadDefSettings \ 000000E8 ........ BL setup_ICONS \ 000000EC ........ _BLF LoadXStatusText,??LoadXStatusText??rA \ 000000F0 ........ BL UpdateCSMname \ 000000F4 460100EF SWI +326 \ 000000F8 0020A0E3 MOV R2,#+0 \ 000000FC 0D10A0E1 MOV R1,SP \ 00000100 A40084E2 ADD R0,R4,#+164 \ 00000104 070100EF SWI +263 \ 00000108 FC0284E5 STR R0,[R4, #+764] \ 0000010C 470100EF SWI +327 \ 00000110 0400A0E3 MOV R0,#+4 \ 00000114 ........ _BLF PrintLibInit,??PrintLibInit??rA \ 00000118 0110A0E3 MOV R1,#+1 \ 0000011C 0700A0E1 MOV R0,R7 \ 00000120 ........ _BLF FontPathInit,??FontPathInit??rA \ 00000124 0110A0E3 MOV R1,#+1 \ 00000128 0800A0E1 MOV R0,R8 \ 0000012C ........ _BLF FontPathInit,??FontPathInit??rA \ 00000130 0110A0E3 MOV R1,#+1 \ 00000134 0900A0E1 MOV R0,R9 \ 00000138 ........ _BLF FontPathInit,??FontPathInit??rA \ 0000013C 0110A0E3 MOV R1,#+1 \ 00000140 0A00A0E1 MOV R0,R10 \ 00000144 ........ _BLF FontPathInit,??FontPathInit??rA 7536 SetCanvasFlag(1); \ 00000148 0100A0E3 MOV R0,#+1 \ 0000014C ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 7537 7538 if(isSystemFont) clfont=100+pngFont; \ 00000150 ........ LDR R0,??DataTable314 ;; isSystemFont \ 00000154 000090E5 LDR R0,[R0, #+0] \ 00000158 000050E3 CMP R0,#+0 \ 0000015C 0300000A BEQ ??main_2 \ 00000160 ........ LDR R0,??DataTable315 ;; pngFont \ 00000164 000090E5 LDR R0,[R0, #+0] \ 00000168 640080E2 ADD R0,R0,#+100 \ 0000016C 000000EA B ??main_3 7539 else clfont=2; \ ??main_2: \ 00000170 0200A0E3 MOV R0,#+2 \ ??main_3: \ 00000174 100584E5 STR R0,[R4, #+1296] 7540 7541 if(!strlen(fontpath2) || !strlen(fontpath3)) clfont=100+FONT_SMALL; \ 00000178 0800A0E1 MOV R0,R8 \ 0000017C 1B0000EF SWI +27 \ 00000180 000050E3 CMP R0,#+0 \ 00000184 0300000A BEQ ??main_4 \ 00000188 0900A0E1 MOV R0,R9 \ 0000018C 1B0000EF SWI +27 \ 00000190 000050E3 CMP R0,#+0 \ 00000194 0100001A BNE ??main_5 \ ??main_4: \ 00000198 6C00A0E3 MOV R0,#+108 \ 0000019C 100584E5 STR R0,[R4, #+1296] 7542 if(!strlen(fontpath4)) { PNG_SOFTKEY=0; PNG_HEADER=0; } \ ??main_5: \ 000001A0 0A00A0E1 MOV R0,R10 \ 000001A4 1B0000EF SWI +27 \ 000001A8 000050E3 CMP R0,#+0 \ 000001AC 0300001A BNE ??main_6 \ 000001B0 ........ LDR R0,??DataTable316 ;; PNG_SOFTKEY \ 000001B4 006080E5 STR R6,[R0, #+0] \ 000001B8 ........ LDR R0,??DataTable317 ;; PNG_HEADER \ 000001BC 006080E5 STR R6,[R0, #+0] 7543 7544 away_timer(); \ ??main_6: \ 000001C0 ........ BL away_timer 7545 #ifdef NEWSGOLD 7546 SetIconBarHandler(); \ 000001C4 ........ LDR R0,??DataTable318 ;; addIconBar \ 000001C8 E80084E5 STR R0,[R4, #+232] 7547 #endif 7548 if(fonto==1) \ 000001CC ........ LDR R0,??DataTable319 ;; fonto \ 000001D0 000090E5 LDR R0,[R0, #+0] \ 000001D4 010050E3 CMP R0,#+1 \ 000001D8 0B00001A BNE ??main_7 7549 { 7550 char *heght=malloc(64); \ 000001DC 4000A0E3 MOV R0,#+64 \ 000001E0 140000EF SWI +20 \ 000001E4 0060A0E1 MOV R6,R0 7551 sprintf(heght, "%s2240.png", fontpath); \ 000001E8 0720A0E1 MOV R2,R7 \ 000001EC 971F85E2 ADD R1,R5,#+604 \ 000001F0 160000EF SWI +22 7552 paused_height=GetImgHeight((int)heght); \ 000001F4 0600A0E1 MOV R0,R6 \ 000001F8 210000EF SWI +33 \ 000001FC B40284E5 STR R0,[R4, #+692] 7553 mfree(heght); \ 00000200 0600A0E1 MOV R0,R6 \ 00000204 150000EF SWI +21 \ 00000208 010000EA B ??main_8 7554 } 7555 else 7556 paused_height=fonto-100; \ ??main_7: \ 0000020C 640040E2 SUB R0,R0,#+100 \ 00000210 B40284E5 STR R0,[R4, #+692] 7557 7558 GBS_StartTimerProc(&ping_tmr, 12000, Pinger2); \ ??main_8: \ 00000214 ........ LDR R2,??DataTable320 ;; Pinger2 \ 00000218 E010A0E3 MOV R1,#+224 \ 0000021C B81D81E3 ORR R1,R1,#0x2E00 \ 00000220 8C00A0E3 MOV R0,#+140 \ 00000224 640D80E3 ORR R0,R0,#0x1900 \ 00000228 040080E0 ADD R0,R0,R4 \ 0000022C 4D0000EF SWI +77 7559 upTime(); \ 00000230 ........ BL upTime 7560 #ifdef NEWSGOLD 7561 //ScreenSaverTimer(); 7562 initTags(); \ 00000234 ........ _BLF initTags,??initTags??rA 7563 #endif 7564 7565 #ifndef DEBUG 7566 AutoChangeStatus_timer(); \ 00000238 ........ BL AutoChangeStatus_timer 7567 #endif 7568 init_time_zone(); \ 0000023C ........ BL init_time_zone 7569 AddKeybMsgHook((void *)my_keyhook); \ 00000240 ........ LDR R0,??DataTable321 ;; my_keyhook \ 00000244 2B0100EF SWI +299 7570 return 0; \ ??main_0: \ 00000248 0000A0E3 MOV R0,#+0 \ 0000024C 2CD08DE2 ADD SP,SP,#+44 \ 00000250 F087BDE8 POP {R4-R10,PC} ;; return 7571 } 7572 7573 //=========================================================== 7574 // Edit chat 7575 //=========================================================== 7576 \ In segment CODE, align 4, keep-with-next 7577 void edchat_locret(void){} \ edchat_locret: \ 00000000 1EFF2FE1 BX LR ;; return 7578 \ In segment CODE, align 4, keep-with-next 7579 char *ExtractAnswer(WSHDR *ws) 7580 { \ ExtractAnswer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 7581 S_SMILES *t; 7582 int c; 7583 int len=0; 7584 int scur; 7585 char *msg=NULL; 7586 unsigned short *wsbody=ws->wsbody; \ 00000004 005090E5 LDR R5,[R0, #+0] \ 00000008 0040A0E3 MOV R4,#+0 7587 int wslen=wsbody[0]; \ 0000000C B060D5E1 LDRH R6,[R5, #+0] \ 00000010 0070A0E3 MOV R7,#+0 7588 if (wslen) \ 00000014 000056E3 CMP R6,#+0 \ 00000018 3C00000A BEQ ??ExtractAnswer_0 7589 { 7590 for (int i=0; i=0xE100) 7594 { 7595 t=FindSmileByUni(c); 7596 if (t) 7597 { 7598 if (t->lines) 7599 { 7600 len+=strlen(t->lines->text); 7601 } 7602 } 7603 else len++; 7604 } 7605 else len++; 7606 } 7607 7608 msg=malloc(len+1); \ ??ExtractAnswer_2: \ 00000024 010084E2 ADD R0,R4,#+1 \ 00000028 140000EF SWI +20 \ 0000002C 0070A0E1 MOV R7,R0 7609 scur=0; \ 00000030 0090A0E3 MOV R9,#+0 7610 for (int wcur=0; wcur=0xE100) 7615 { 7616 t=FindSmileByUni(c); 7617 if (t) 7618 { 7619 int w; 7620 char *s; 7621 if (t->lines) 7622 { 7623 s=t->lines->text; 7624 while ((w=*s++) && scurnext)) \ FindNextActiveContact: \ ??FindNextActiveContact_0: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0300000A BEQ ??FindNextActiveContact_1 7651 { 7652 if (t->isactive) return t; \ 0000000C AC1090E5 LDR R1,[R0, #+172] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 F9FFFF0A BEQ ??FindNextActiveContact_0 \ 00000018 1EFF2FE1 BX LR 7653 } 7654 t=(CLIST *)(&cltop); \ ??FindNextActiveContact_1: \ 0000001C ........ LDR R0,??DataTable323 ;; i_rc + 1200 \ 00000020 020000EA B ??FindNextActiveContact_2 7655 while(t=(CLIST *)(t->next)) 7656 { 7657 if (t->isactive) return t; \ ??FindNextActiveContact_3: \ 00000024 AC1090E5 LDR R1,[R0, #+172] \ 00000028 000051E3 CMP R1,#+0 \ 0000002C 1EFF2F11 BXNE LR 7658 } \ ??FindNextActiveContact_2: \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 F9FFFF1A BNE ??FindNextActiveContact_3 7659 return NULL; \ 0000003C 1EFF2FE1 BX LR ;; return 7660 } 7661 \ In segment CODE, align 4, keep-with-next 7662 CLIST *FindPrevActiveContact(CLIST *t) 7663 { 7664 CLIST *cl; 7665 CLIST *cl_active=NULL; 7666 cl=(CLIST *)(&cltop); \ FindPrevActiveContact: \ 00000000 ........ LDR R2,??DataTable323 ;; i_rc + 1200 \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 020000EA B ??FindPrevActiveContact_0 7667 7668 7669 while(cl=cl->next) 7670 { 7671 if (cl==t) 7672 { 7673 if (cl_active==NULL) break; 7674 else return (cl_active); 7675 } 7676 else 7677 { 7678 if (cl->isactive) cl_active=cl; \ ??FindPrevActiveContact_1: \ 0000000C AC3092E5 LDR R3,[R2, #+172] \ 00000010 000053E3 CMP R3,#+0 \ 00000014 0210A011 MOVNE R1,R2 7679 } \ ??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 7680 } 7681 while(t) \ ??FindPrevActiveContact_2: \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 FBFFFF0A BEQ ??FindPrevActiveContact_3 7682 { 7683 if (t->isactive) cl_active=t; \ 00000044 AC2090E5 LDR R2,[R0, #+172] \ 00000048 000052E3 CMP R2,#+0 \ 0000004C 0010A011 MOVNE R1,R0 7684 t=t->next; \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 F8FFFFEA B ??FindPrevActiveContact_2 7685 } 7686 return cl_active; 7687 } 7688 7689 \ In segment CODE, align 4, keep-with-next 7690 void ed_options_handler(USR_MENU_ITEM *item) 7691 { \ ed_options_handler: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 7692 EDCHAT_STRUCT *ed_struct=item->user_pointer; 7693 CLIST *t; 7694 int i=item->cur_item; 7695 if (item->type==0) \ 00000004 ........ LDR R5,??DataTable330 ;; i_rc \ 00000008 58D04DE2 SUB SP,SP,#+88 \ 0000000C 0070A0E1 MOV R7,R0 \ 00000010 0000D7E5 LDRB R0,[R7, #+0] \ 00000014 044097E5 LDR R4,[R7, #+4] \ 00000018 B860D7E1 LDRH R6,[R7, #+8] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 3300001A BNE ??ed_options_handler_0 7696 { 7697 if(IsMultiBuffer) \ 00000024 ........ LDR R3,??DataTable326 ;; IsMultiBuffer \ 00000028 801495E5 LDR R1,[R5, #+1152] \ 0000002C 003093E5 LDR R3,[R3, #+0] \ 00000030 102094E5 LDR R2,[R4, #+16] \ 00000034 0C0097E5 LDR R0,[R7, #+12] \ 00000038 74849FE5 LDR R8,??ed_options_handler_1 ;; `?` \ 0000003C 000053E3 CMP R3,#+0 \ 00000040 1900000A BEQ ??ed_options_handler_2 7698 { 7699 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 7700 { 7701 case 0: 7702 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 0C009715 LDRNE R0,[R7, #+12] \ 0000007C 08108812 ADDNE R1,R8,#+8 7703 ascii2ws(item->ws,"Cмайлы"); \ 00000080 0C009705 LDREQ R0,[R7, #+12] \ 00000084 0810A001 MOVEQ R1,R8 \ 00000088 180000EA B ??ed_options_handler_8 7704 else 7705 ascii2ws(item->ws,"В буфер"); 7706 break; 7707 case 1: 7708 ascii2ws(item->ws,"Из буфера"); \ ??ed_options_handler_4: \ 0000008C 101088E2 ADD R1,R8,#+16 \ 00000090 160000EA B ??ed_options_handler_8 7709 break; 7710 case 2: 7711 ascii2ws(item->ws,"Команда"); \ ??ed_options_handler_5: \ 00000094 1C1088E2 ADD R1,R8,#+28 \ 00000098 140000EA B ??ed_options_handler_8 7712 break; 7713 case 3: 7714 ascii2ws(item->ws,"Очистить буфер"); \ ??ed_options_handler_6: \ 0000009C 241088E2 ADD R1,R8,#+36 \ 000000A0 120000EA B ??ed_options_handler_8 7715 break; 7716 default: 7717 i-=4; \ ??ed_options_handler_7: \ 000000A4 046046E2 SUB R6,R6,#+4 7718 if (iloaded_templates) ascii2ws(item->ws,templates_lines[i]); \ 000000A8 0D0000EA B ??ed_options_handler_9 7719 break; 7720 } 7721 } 7722 else 7723 { 7724 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 7725 { 7726 case 0: 7727 ascii2ws(item->ws,LG_MNUEDNEXTACT); \ ??ed_options_handler_10: \ 000000C8 341088E2 ADD R1,R8,#+52 \ 000000CC 070000EA B ??ed_options_handler_8 7728 break; 7729 case 1: 7730 ascii2ws(item->ws,LG_MNUEDPREVACT); \ ??ed_options_handler_11: \ 000000D0 441088E2 ADD R1,R8,#+68 \ 000000D4 050000EA B ??ed_options_handler_8 7731 break; 7732 case 2: 7733 ascii2ws(item->ws,"Команды"); \ ??ed_options_handler_12: \ 000000D8 541088E2 ADD R1,R8,#+84 \ 000000DC 030000EA B ??ed_options_handler_8 7734 break; 7735 default: 7736 i-=3; \ ??ed_options_handler_13: \ 000000E0 036046E2 SUB R6,R6,#+3 7737 if (iloaded_templates) ascii2ws(item->ws,templates_lines[i]); \ ??ed_options_handler_9: \ 000000E4 020056E1 CMP R6,R2 \ 000000E8 EF0000AA BGE ??ed_options_handler_14 \ 000000EC 061191E7 LDR R1,[R1, +R6, LSL #+2] \ ??ed_options_handler_8: \ 000000F0 ........ _BLF ascii2ws,??ascii2ws??rA 7738 break; 7739 } 7740 } 7741 } 7742 7743 if (item->type==1) \ ??ed_options_handler_0: \ 000000F4 0000D7E5 LDRB R0,[R7, #+0] \ 000000F8 010050E3 CMP R0,#+1 \ 000000FC EA00001A BNE ??ed_options_handler_14 7744 { 7745 if(IsMultiBuffer) \ 00000100 ........ LDR R3,??DataTable326 ;; IsMultiBuffer \ 00000104 801495E5 LDR R1,[R5, #+1152] \ 00000108 003093E5 LDR R3,[R3, #+0] \ 0000010C 102094E5 LDR R2,[R4, #+16] \ 00000110 040094E5 LDR R0,[R4, #+4] \ 00000114 000053E3 CMP R3,#+0 \ 00000118 9C00000A BEQ ??ed_options_handler_15 7746 { 7747 switch(i) \ 0000011C 0630B0E1 MOVS R3,R6 \ 00000120 0600000A BEQ ??ed_options_handler_16 \ 00000124 013056E2 SUBS R3,R6,#+1 \ 00000128 4200000A BEQ ??ed_options_handler_17 \ 0000012C 013053E2 SUBS R3,R3,#+1 \ 00000130 5C00000A BEQ ??ed_options_handler_18 \ 00000134 013053E2 SUBS R3,R3,#+1 \ 00000138 5D00000A BEQ ??ed_options_handler_19 \ 0000013C 600000EA B ??ed_options_handler_20 7748 { 7749 case 0: 7750 { 7751 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ed_options_handler_16: \ 00000140 820100EF SWI +386 \ 00000144 081094E5 LDR R1,[R4, #+8] \ 00000148 010050E1 CMP R0,R1 \ 0000014C 0200001A BNE ??ed_options_handler_21 7752 CreateSmileSelectGUI(ed_struct); \ 00000150 0400A0E1 MOV R0,R4 \ 00000154 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA \ 00000158 340000EA B ??ed_options_handler_22 7753 else 7754 { 7755 int ed; 7756 EDITCONTROL ec; 7757 EDITCONTROL ec_hdr; 7758 7759 ed=EDIT_GetFocus(ed_struct->ed_chatgui); \ ??ed_options_handler_21: \ 0000015C 040094E5 LDR R0,[R4, #+4] \ 00000160 820100EF SWI +386 \ 00000164 0060A0E1 MOV R6,R0 7760 ExtractEditControl(ed_struct->ed_chatgui,ed,&ec); \ 00000168 040094E5 LDR R0,[R4, #+4] \ 0000016C 2C208DE2 ADD R2,SP,#+44 \ 00000170 0610A0E1 MOV R1,R6 \ 00000174 690100EF SWI +361 7761 ExtractEditControl(ed_struct->ed_chatgui,ed-1,&ec_hdr); \ 00000178 040094E5 LDR R0,[R4, #+4] \ 0000017C 0D20A0E1 MOV R2,SP \ 00000180 011046E2 SUB R1,R6,#+1 \ 00000184 690100EF SWI +361 7762 7763 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 00000188 B80295E5 LDR R0,[R5, #+696] \ 0000018C 230100EF SWI +291 \ 00000190 012080E2 ADD R2,R0,#+1 \ 00000194 B80295E5 LDR R0,[R5, #+696] \ 00000198 3E10A0E3 MOV R1,#+62 \ 0000019C 1D0000EF SWI +29 7764 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 000001A0 B80295E5 LDR R0,[R5, #+696] \ 000001A4 230100EF SWI +291 \ 000001A8 012080E2 ADD R2,R0,#+1 \ 000001AC B80295E5 LDR R0,[R5, #+696] \ 000001B0 2010A0E3 MOV R1,#+32 \ 000001B4 1D0000EF SWI +29 7765 wstrcat(wsBuffer,ec_hdr.pWS); \ 000001B8 28109DE5 LDR R1,[SP, #+40] \ 000001BC B80295E5 LDR R0,[R5, #+696] \ 000001C0 210100EF SWI +289 7766 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 000001C4 B80295E5 LDR R0,[R5, #+696] \ 000001C8 230100EF SWI +291 \ 000001CC 012080E2 ADD R2,R0,#+1 \ 000001D0 B80295E5 LDR R0,[R5, #+696] \ 000001D4 0A10A0E3 MOV R1,#+10 \ 000001D8 1D0000EF SWI +29 7767 7768 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 000001DC B80295E5 LDR R0,[R5, #+696] \ 000001E0 230100EF SWI +291 \ 000001E4 012080E2 ADD R2,R0,#+1 \ 000001E8 B80295E5 LDR R0,[R5, #+696] \ 000001EC 3E10A0E3 MOV R1,#+62 \ 000001F0 1D0000EF SWI +29 7769 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 000001F4 B80295E5 LDR R0,[R5, #+696] \ 000001F8 230100EF SWI +291 \ 000001FC 012080E2 ADD R2,R0,#+1 \ 00000200 B80295E5 LDR R0,[R5, #+696] \ 00000204 2010A0E3 MOV R1,#+32 \ 00000208 1D0000EF SWI +29 7770 wstrcat(wsBuffer,ec.pWS); \ 0000020C 54109DE5 LDR R1,[SP, #+84] \ 00000210 B80295E5 LDR R0,[R5, #+696] \ 00000214 210100EF SWI +289 7771 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 00000218 B80295E5 LDR R0,[R5, #+696] \ 0000021C 230100EF SWI +291 \ 00000220 012080E2 ADD R2,R0,#+1 \ 00000224 B80295E5 LDR R0,[R5, #+696] \ 00000228 0A10A0E3 MOV R1,#+10 \ 0000022C 1D0000EF SWI +29 \ ??ed_options_handler_22: \ 00000230 58D08DE2 ADD SP,SP,#+88 \ 00000234 F081BDE8 POP {R4-R8,PC} 7772 } 7773 } 7774 break; 7775 case 1: 7776 { 7777 EDITCONTROL ec; 7778 WSHDR *ws; 7779 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); \ ??ed_options_handler_17: \ 00000238 081094E5 LDR R1,[R4, #+8] \ 0000023C 0D20A0E1 MOV R2,SP \ 00000240 690100EF SWI +361 7780 ws=AllocWS(ec.pWS->wsbody[0]+wsBuffer->wsbody[0]+1); \ 00000244 28009DE5 LDR R0,[SP, #+40] \ 00000248 B81295E5 LDR R1,[R5, #+696] \ 0000024C 000090E5 LDR R0,[R0, #+0] \ 00000250 001091E5 LDR R1,[R1, #+0] \ 00000254 B000D0E1 LDRH R0,[R0, #+0] \ 00000258 B010D1E1 LDRH R1,[R1, #+0] \ 0000025C 000081E0 ADD R0,R1,R0 \ 00000260 010080E2 ADD R0,R0,#+1 \ 00000264 250100EF SWI +293 7781 wstrcpy(ws,ec.pWS); \ 00000268 28109DE5 LDR R1,[SP, #+40] \ 0000026C 0060A0E1 MOV R6,R0 \ 00000270 1F0100EF SWI +287 7782 wstrcat(ws,wsBuffer); \ 00000274 B81295E5 LDR R1,[R5, #+696] \ 00000278 0600A0E1 MOV R0,R6 \ 0000027C 210100EF SWI +289 7783 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ws); \ 00000280 040094E5 LDR R0,[R4, #+4] \ 00000284 081094E5 LDR R1,[R4, #+8] \ 00000288 0620A0E1 MOV R2,R6 \ 0000028C DE0100EF SWI +478 7784 EDIT_SetCursorPos(ed_struct->ed_chatgui,wstrlen(ws)); \ 00000290 0600A0E1 MOV R0,R6 \ 00000294 230100EF SWI +291 \ 00000298 0010A0E1 MOV R1,R0 \ 0000029C 040094E5 LDR R0,[R4, #+4] \ 000002A0 D40100EF SWI +468 \ 000002A4 E1FFFFEA B ??ed_options_handler_22 7785 } 7786 break; 7787 case 2: 7788 DispCmdMenu(ed_struct); \ ??ed_options_handler_18: \ 000002A8 0400A0E1 MOV R0,R4 \ 000002AC ........ BL DispCmdMenu \ 000002B0 DEFFFFEA B ??ed_options_handler_22 7789 break; 7790 case 3: 7791 CutWSTR(wsBuffer,0); \ ??ed_options_handler_19: \ 000002B4 B80295E5 LDR R0,[R5, #+696] \ 000002B8 0010A0E3 MOV R1,#+0 \ 000002BC 260100EF SWI +294 \ 000002C0 DAFFFFEA B ??ed_options_handler_22 7792 break; 7793 default: 7794 i-=4; \ ??ed_options_handler_20: \ 000002C4 046046E2 SUB R6,R6,#+4 7795 if (iloaded_templates) \ 000002C8 020056E1 CMP R6,R2 \ 000002CC 760000AA BGE ??ed_options_handler_14 7796 { 7797 EDITCONTROL ec; 7798 WSHDR *ed_ws; 7799 int c; 7800 char *p=templates_lines[i]; \ 000002D0 065191E7 LDR R5,[R1, +R6, LSL #+2] 7801 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); \ 000002D4 081094E5 LDR R1,[R4, #+8] \ 000002D8 0D20A0E1 MOV R2,SP \ 000002DC 690100EF SWI +361 7802 ed_ws=AllocWS(ec.pWS->wsbody[0]+strlen(p)); \ 000002E0 0500A0E1 MOV R0,R5 \ 000002E4 1B0000EF SWI +27 \ 000002E8 28109DE5 LDR R1,[SP, #+40] \ 000002EC 001091E5 LDR R1,[R1, #+0] \ 000002F0 B010D1E1 LDRH R1,[R1, #+0] \ 000002F4 010080E0 ADD R0,R0,R1 \ 000002F8 250100EF SWI +293 7803 wstrcpy(ed_ws,ec.pWS); \ 000002FC 28109DE5 LDR R1,[SP, #+40] \ 00000300 0060A0E1 MOV R6,R0 \ 00000304 1F0100EF SWI +287 7804 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ 00000308 040094E5 LDR R0,[R4, #+4] \ 0000030C 820100EF SWI +386 \ 00000310 081094E5 LDR R1,[R4, #+8] \ 00000314 010050E1 CMP R0,R1 \ 00000318 1800001A BNE ??ed_options_handler_23 7805 { 7806 int pos=EDIT_GetCursorPos(ed_struct->ed_chatgui); \ 0000031C 040094E5 LDR R0,[R4, #+4] \ 00000320 D30100EF SWI +467 \ 00000324 0070A0E1 MOV R7,R0 \ 00000328 050000EA B ??ed_options_handler_24 7807 while(c=*p++) 7808 { 7809 wsInsertChar(ed_ws,char8to16(c),pos++); \ ??ed_options_handler_25: \ 0000032C ........ _BLF char8to16,??char8to16??rA \ 00000330 0720A0E1 MOV R2,R7 \ 00000334 0010A0E1 MOV R1,R0 \ 00000338 0600A0E1 MOV R0,R6 \ 0000033C 1D0000EF SWI +29 \ 00000340 017087E2 ADD R7,R7,#+1 7810 } \ ??ed_options_handler_24: \ 00000344 ........ LDRB R0,[R5], #+1 \ 00000348 000050E3 CMP R0,#+0 \ 0000034C F6FFFF1A BNE ??ed_options_handler_25 7811 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ ??ed_options_handler_26: \ 00000350 081094E5 LDR R1,[R4, #+8] \ 00000354 040094E5 LDR R0,[R4, #+4] \ 00000358 0620A0E1 MOV R2,R6 \ 0000035C DE0100EF SWI +478 7812 EDIT_SetCursorPos(ed_struct->ed_chatgui,pos); \ 00000360 040094E5 LDR R0,[R4, #+4] \ 00000364 0710A0E1 MOV R1,R7 \ 00000368 D40100EF SWI +468 \ 0000036C 4C0000EA B ??ed_options_handler_27 7813 } 7814 else 7815 { 7816 while(c=*p++) 7817 { 7818 wsAppendChar(ed_ws,char8to16(c)); \ ??ed_options_handler_28: \ 00000370 ........ _BLF char8to16,??char8to16??rA \ 00000374 0010A0E1 MOV R1,R0 \ 00000378 0600A0E1 MOV R0,R6 \ 0000037C 1C0000EF SWI +28 7819 } \ ??ed_options_handler_23: \ 00000380 ........ LDRB R0,[R5], #+1 \ 00000384 000050E3 CMP R0,#+0 \ 00000388 F8FFFF1A BNE ??ed_options_handler_28 7820 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 0000038C 400000EA B ??ed_options_handler_29 7821 } 7822 FreeWS(ed_ws); 7823 } 7824 break; 7825 } 7826 } 7827 else 7828 { 7829 switch(i) \ ??ed_options_handler_15: \ 00000390 007094E5 LDR R7,[R4, #+0] \ 00000394 0630B0E1 MOVS R3,R6 \ 00000398 0400000A BEQ ??ed_options_handler_30 \ 0000039C 013056E2 SUBS R3,R6,#+1 \ 000003A0 0D00000A BEQ ??ed_options_handler_31 \ 000003A4 013053E2 SUBS R3,R3,#+1 \ 000003A8 BEFFFF0A BEQ ??ed_options_handler_18 \ 000003AC 0D0000EA B ??ed_options_handler_32 7830 { 7831 case 0: 7832 t=FindNextActiveContact(ed_struct->ed_contact); \ ??ed_options_handler_30: \ 000003B0 0700A0E1 MOV R0,R7 \ 000003B4 ........ BL FindNextActiveContact \ ??ed_options_handler_33: \ 000003B8 0040B0E1 MOVS R4,R0 7833 if (t && t!=ed_struct->ed_contact) \ 000003BC 07005411 CMPNE R4,R7 \ 000003C0 3900000A BEQ ??ed_options_handler_14 7834 { 7835 GeneralFunc_flag1(edchat_id,1); \ 000003C4 B80495E5 LDR R0,[R5, #+1208] \ 000003C8 0110A0E3 MOV R1,#+1 \ 000003CC 3D0100EF SWI +317 7836 CreateEditChat(t); \ 000003D0 0400A0E1 MOV R0,R4 \ 000003D4 ........ BL CreateEditChat \ 000003D8 94FFFFEA B ??ed_options_handler_22 7837 } 7838 break; 7839 case 1: 7840 t=FindPrevActiveContact(ed_struct->ed_contact); \ ??ed_options_handler_31: \ 000003DC 0700A0E1 MOV R0,R7 \ 000003E0 ........ BL FindPrevActiveContact \ 000003E4 F3FFFFEA B ??ed_options_handler_33 7841 if (t && t!=ed_struct->ed_contact) 7842 { 7843 GeneralFunc_flag1(edchat_id,1); 7844 CreateEditChat(t); 7845 } 7846 break; 7847 case 2: 7848 DispCmdMenu(ed_struct); 7849 break; 7850 default: 7851 i-=3; \ ??ed_options_handler_32: \ 000003E8 036046E2 SUB R6,R6,#+3 7852 if (iloaded_templates) \ 000003EC 020056E1 CMP R6,R2 \ 000003F0 2D0000AA BGE ??ed_options_handler_14 7853 { 7854 EDITCONTROL ec; 7855 WSHDR *ed_ws; 7856 int c; 7857 char *p=templates_lines[i]; \ 000003F4 065191E7 LDR R5,[R1, +R6, LSL #+2] 7858 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); \ 000003F8 081094E5 LDR R1,[R4, #+8] \ 000003FC 0D20A0E1 MOV R2,SP \ 00000400 690100EF SWI +361 7859 ed_ws=AllocWS(ec.pWS->wsbody[0]+strlen(p)); \ 00000404 0500A0E1 MOV R0,R5 \ 00000408 1B0000EF SWI +27 \ 0000040C 28109DE5 LDR R1,[SP, #+40] \ 00000410 001091E5 LDR R1,[R1, #+0] \ 00000414 B010D1E1 LDRH R1,[R1, #+0] \ 00000418 010080E0 ADD R0,R0,R1 \ 0000041C 250100EF SWI +293 7860 wstrcpy(ed_ws,ec.pWS); \ 00000420 28109DE5 LDR R1,[SP, #+40] \ 00000424 0060A0E1 MOV R6,R0 \ 00000428 1F0100EF SWI +287 7861 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ 0000042C 040094E5 LDR R0,[R4, #+4] \ 00000430 820100EF SWI +386 \ 00000434 081094E5 LDR R1,[R4, #+8] \ 00000438 010050E1 CMP R0,R1 \ 0000043C 1100001A BNE ??ed_options_handler_34 7862 { 7863 int pos=EDIT_GetCursorPos(ed_struct->ed_chatgui); \ 00000440 040094E5 LDR R0,[R4, #+4] \ 00000444 D30100EF SWI +467 \ 00000448 0070A0E1 MOV R7,R0 \ 0000044C 050000EA B ??ed_options_handler_35 7864 while(c=*p++) 7865 { 7866 wsInsertChar(ed_ws,char8to16(c),pos++); \ ??ed_options_handler_36: \ 00000450 ........ _BLF char8to16,??char8to16??rA \ 00000454 0010A0E1 MOV R1,R0 \ 00000458 0720A0E1 MOV R2,R7 \ 0000045C 0600A0E1 MOV R0,R6 \ 00000460 1D0000EF SWI +29 \ 00000464 017087E2 ADD R7,R7,#+1 7867 } \ ??ed_options_handler_35: \ 00000468 ........ LDRB R0,[R5], #+1 \ 0000046C 000050E3 CMP R0,#+0 \ 00000470 F6FFFF1A BNE ??ed_options_handler_36 7868 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 00000474 B5FFFFEA B ??ed_options_handler_26 7869 EDIT_SetCursorPos(ed_struct->ed_chatgui,pos); 7870 } 7871 else 7872 { 7873 while(c=*p++) 7874 { 7875 wsAppendChar(ed_ws,char8to16(c)); \ ??ed_options_handler_37: \ 00000478 ........ _BLF char8to16,??char8to16??rA \ 0000047C 0010A0E1 MOV R1,R0 \ 00000480 0600A0E1 MOV R0,R6 \ 00000484 1C0000EF SWI +28 7876 } \ ??ed_options_handler_34: \ 00000488 ........ LDRB R0,[R5], #+1 \ 0000048C 000050E3 CMP R0,#+0 \ 00000490 F8FFFF1A BNE ??ed_options_handler_37 7877 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ ??ed_options_handler_29: \ 00000494 081094E5 LDR R1,[R4, #+8] \ 00000498 040094E5 LDR R0,[R4, #+4] \ 0000049C 0620A0E1 MOV R2,R6 \ 000004A0 DE0100EF SWI +478 7878 } 7879 FreeWS(ed_ws); \ ??ed_options_handler_27: \ 000004A4 0600A0E1 MOV R0,R6 \ 000004A8 290100EF SWI +297 7880 } 7881 break; 7882 } 7883 } 7884 } 7885 } \ ??ed_options_handler_14: \ 000004AC 58D08DE2 ADD SP,SP,#+88 ;; stack cleaning \ 000004B0 F081BDE8 POP {R4-R8,PC} ;; return \ ??ed_options_handler_1: \ 000004B4 ........ DC32 `?` 7886 \ In segment CODE, align 4, keep-with-next 7887 unsigned short * wstrstr(unsigned short *ws, char *str, int *wslen, int len) 7888 { \ 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 7889 char *s; 7890 unsigned short *w; 7891 int l; 7892 7893 while(*wslen >= len) 7894 { 7895 s = str; 7896 w = ws; 7897 l = len; 7898 for(; (char16to8(*w) == *s) && l; w++, s++, l--); 7899 if(!l) return ws; 7900 ws++; 7901 (*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} 7902 } 7903 return 0; \ ??wstrstr_2: \ 00000074 0000A0E3 MOV R0,#+0 \ 00000078 F087BDE8 POP {R4-R10,PC} ;; return 7904 7905 } 7906 \ In segment CODE, align 4, keep-with-next 7907 int IsUrl(WSHDR *ws, int pos, char *link) 7908 { \ IsUrl: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0150A0E1 MOV R5,R1 7909 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 7910 7911 int len = wstrlen(ws); 7912 unsigned short *str = ws->wsbody+1, *tmp, *begin; 7913 tmp = str; 7914 7915 begin = str = wstrstr(str, "http://", &len, 7); \ 0000000C ........ LDR R7,??DataTable328 ;; `?` \ 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 7916 7917 while(str && (begin-tmp <= pos)) 7918 { 7919 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 7920 if(str-tmp >= pos-2) 7921 { 7922 for(;begin < str; begin++, link++) 7923 *link = char16to8(*begin); 7924 link[str-begin] = 0; 7925 return 1; 7926 } 7927 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 7928 } 7929 7930 len = wstrlen(ws); \ ??IsUrl_2: \ 00000080 04009DE5 LDR R0,[SP, #+4] \ 00000084 230100EF SWI +291 \ 00000088 00008DE5 STR R0,[SP, #+0] 7931 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} 7932 while(str && (begin-tmp <= pos)) 7933 { 7934 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 7935 if(str-tmp >= pos-2) 7936 { 7937 for(;begin < str; begin++, link++) 7938 *link = char16to8(*begin); 7939 link[str-begin] = 0; 7940 return 1; 7941 } 7942 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 7943 } 7944 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 7945 } 7946 7947 #define UTF16_DIS_UNDERLINE (0xE002) 7948 #define UTF16_ENA_UNDERLINE (0xE001) 7949 \ In segment CODE, align 4, keep-with-next 7950 void ParseAnswer(WSHDR *ws, const char *s) 7951 { \ ParseAnswer: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0040A0E1 MOV R4,R0 7952 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 7953 S_SMILES *t; 7954 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 7955 STXT_SMILES *st; 7956 unsigned int wchar; 7957 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 7958 CutWSTR(ws,0); \ 00000034 0010A0E3 MOV R1,#+0 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 260100EF SWI +294 \ 00000040 160000EA B ??ParseAnswer_1 7959 int i; 7960 while(wchar=*s) 7961 { 7962 if(s==strstr(s, "http://") || s == strstr(s, "www.")) 7963 { 7964 wsAppendChar(ws,UTF16_ENA_UNDERLINE); 7965 while(*s && strchr(valid, *s)) 7966 { 7967 wchar=char8to16(*s); \ ??ParseAnswer_2: \ 00000044 ........ LDRB R0,[R5], #+1 \ 00000048 ........ _BLF char8to16,??char8to16??rA 7968 wsAppendChar(ws,wchar); \ 0000004C 0010A0E1 MOV R1,R0 \ ??ParseAnswer_3: \ 00000050 0400A0E1 MOV R0,R4 \ 00000054 1C0000EF SWI +28 7969 s++; 7970 } \ 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 7971 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 7972 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 7973 continue; \ ??ParseAnswer_1: \ 000000A0 0070D5E5 LDRB R7,[R5, #+0] \ 000000A4 000057E3 CMP R7,#+0 \ 000000A8 4F00000A BEQ ??ParseAnswer_5 \ 000000AC ........ LDR R9,??DataTable328 ;; `?` \ 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 7974 } 7975 t=t_root; \ ??ParseAnswer_7: \ 000000E4 0690A0E1 MOV R9,R6 \ 000000E8 230000EA B ??ParseAnswer_8 7976 while(t) 7977 { 7978 st=t->lines; 7979 while(st) 7980 { 7981 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 7982 { 7983 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 7984 } 7985 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] 7986 } \ ??ParseAnswer_13: \ 00000170 00005AE3 CMP R10,#+0 \ 00000174 DCFFFF1A BNE ??ParseAnswer_9 7987 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 7988 } 7989 L1: 7990 if (t) 7991 { 7992 wchar=t->uni_smile; 7993 s+=strlen(st->text); 7994 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); 7995 } 7996 else 7997 { 7998 wchar=char8to16(wchar); \ 00000188 0700A0E1 MOV R0,R7 \ 0000018C ........ _BLF char8to16,??char8to16??rA \ 00000190 0070A0E1 MOV R7,R0 7999 s++; 8000 ulb>>=8; 8001 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 8002 } \ ??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 8003 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 8004 } 8005 i=ws->wsbody[0]; \ ??ParseAnswer_5: \ 000001EC 000094E5 LDR R0,[R4, #+0] \ 000001F0 B010D0E1 LDRH R1,[R0, #+0] \ 000001F4 000000EA B ??ParseAnswer_15 8006 while(i>1) 8007 { 8008 if (ws->wsbody[i--]!=13) break; 8009 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 8010 } 8011 } \ 0000021C F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??ParseAnswer_0: \ 00000220 ........ DC32 s_top 8012 \ In segment CODE, align 4, keep-with-next 8013 void SaveAnswer(CLIST *cl, WSHDR *ws) 8014 { \ SaveAnswer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0100A0E1 MOV R0,R1 8015 char *p=ExtractAnswer(ws); \ 0000000C ........ BL ExtractAnswer \ 00000010 0050A0E1 MOV R5,R0 8016 mfree(cl->answer); \ 00000014 A40094E5 LDR R0,[R4, #+164] \ 00000018 150000EF SWI +21 8017 cl->answer=p; \ 0000001C A45084E5 STR R5,[R4, #+164] 8018 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 8019 8020 //links applicator 8021 8022 \ In segment CODE, align 4, keep-with-next 8023 int GetTempName(void) 8024 { \ GetTempName: \ 00000000 00402DE9 PUSH {LR} \ 00000004 10D04DE2 SUB SP,SP,#+16 8025 static const int DMonth[]={0,31,59,90,120,151,181,212,243,273,304,334,365}; 8026 unsigned long iday; 8027 TTime tt; 8028 TDate dd; 8029 GetDateTime(&dd,&tt); \ 00000008 08108DE2 ADD R1,SP,#+8 \ 0000000C 0D00A0E1 MOV R0,SP \ 00000010 B40000EF SWI +180 8030 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 8031 iday=365*dd.year+DMonth[dd.month-1]+(dd.day - 1); 8032 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] 8033 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 8034 iday++; \ ??GetTempName_1: \ 00000078 011081E2 ADD R1,R1,#+1 8035 iday=(tt.sec+60*(tt.min+60*(tt.hour+24* iday))); 8036 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 8037 } \ 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 8038 8039 \ In segment CODE, align 4, keep-with-next 8040 void recon() 8041 { 8042 SUBPROC((void*)end_socket); \ recon: \ 00000000 ........ LDR R0,??DataTable329 ;; end_socket \ 00000004 10402DE9 PUSH {R4,LR} 8043 GBS_DelTimer(&reconnect_tmr); \ 00000008 ........ LDR R4,??DataTable330 ;; i_rc \ 0000000C 710100EF SWI +369 \ 00000010 0400A0E3 MOV R0,#+4 \ 00000014 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000018 040080E0 ADD R0,R0,R4 \ 0000001C 8C0100EF SWI +396 8044 DNR_TRIES=3; \ 00000020 0300A0E3 MOV R0,#+3 \ 00000024 D00484E5 STR R0,[R4, #+1232] 8045 SUBPROC((void *)create_connect); \ 00000028 ........ LDR R0,??DataTable331 ;; create_connect \ 0000002C 710100EF SWI +369 8046 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 8047 \ In segment CODE, align 4, keep-with-next 8048 int edchat_onkey(GUI *data, GUI_MSG *msg) 8049 { \ edchat_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 8050 //-1 - do redraw 8051 GBS_DelTimer(&tmr_illumination); \ 00000004 ........ LDR R6,??DataTable340 ;; i_rc \ 00000008 57DF4DE2 SUB SP,SP,#+348 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0180A0E1 MOV R8,R1 \ 00000014 E400A0E3 MOV R0,#+228 \ 00000018 780D80E3 ORR R0,R0,#0x1E00 \ 0000001C 060080E0 ADD R0,R0,R6 \ 00000020 8C0100EF SWI +396 8052 CLIST *t; 8053 TPKT *p; 8054 EDITCONTROL ec; 8055 int len, f;//2026rev 8056 unsigned err;//2026rev 8057 char *s; 8058 int l=msg->gbsmsg->submess; \ 00000024 040098E5 LDR R0,[R8, #+4] \ 00000028 089090E5 LDR R9,[R0, #+8] 8059 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 DF0100EF SWI +479 \ 00000034 0050A0E1 MOV R5,R0 8060 char fn[256]; 8061 8062 if (msg->keys==0xFFF) \ 00000038 F200D8E1 LDRSH R0,[R8, #+2] \ 0000003C FF10A0E3 MOV R1,#+255 \ 00000040 F01E81E3 ORR R1,R1,#0xF00 \ 00000044 010050E1 CMP R0,R1 \ 00000048 0200001A BNE ??edchat_onkey_0 8063 { 8064 void ec_menu(EDCHAT_STRUCT *); 8065 ec_menu(ed_struct); \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 ........ BL ec_menu 8066 return(-1); \ ??edchat_onkey_1: \ 00000054 B30000EA B ??edchat_onkey_2 8067 } 8068 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 B00000EA B ??edchat_onkey_4 8069 8070 void AddSmile(GUI *data); 8071 if (msg->gbsmsg->msg==LONG_PRESS) \ ??edchat_onkey_3: \ 00000068 040098E5 LDR R0,[R8, #+4] \ 0000006C 10769FE5 LDR R7,??edchat_onkey_5 ;; `?` \ 00000070 040090E5 LDR R0,[R0, #+4] \ 00000074 9510A0E3 MOV R1,#+149 \ 00000078 401F81E3 ORR R1,R1,#0x100 \ 0000007C 010050E1 CMP R0,R1 \ 00000080 6C00001A BNE ??edchat_onkey_6 8072 { 8073 if (l==RIGHT_BUTTON) \ 00000084 3E0059E3 CMP R9,#+62 \ 00000088 2700001A BNE ??edchat_onkey_7 8074 { 8075 if(LongRightAction==2 && EDIT_GetFocus(data)==ed_struct->ed_answer) \ 0000008C F4059FE5 LDR R0,??edchat_onkey_5+0x4 ;; LongRightAction \ 00000090 000090E5 LDR R0,[R0, #+0] \ 00000094 020050E3 CMP R0,#+2 \ 00000098 0700001A BNE ??edchat_onkey_8 \ 0000009C 0400A0E1 MOV R0,R4 \ 000000A0 820100EF SWI +386 \ 000000A4 081095E5 LDR R1,[R5, #+8] \ 000000A8 010050E1 CMP R0,R1 \ 000000AC 6100001A BNE ??edchat_onkey_6 8076 CreateSmileSelectGUI(ed_struct); \ 000000B0 0500A0E1 MOV R0,R5 \ 000000B4 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA \ 000000B8 5E0000EA B ??edchat_onkey_6 8077 else 8078 if(LongRightAction==1) \ ??edchat_onkey_8: \ 000000BC 010050E3 CMP R0,#+1 \ 000000C0 5C00001A BNE ??edchat_onkey_6 8079 { 8080 if (EDIT_GetFocus(data)==ed_struct->ed_answer) \ 000000C4 0400A0E1 MOV R0,R4 \ 000000C8 820100EF SWI +386 \ 000000CC 081095E5 LDR R1,[R5, #+8] \ 000000D0 010050E1 CMP R0,R1 \ 000000D4 5700001A BNE ??edchat_onkey_6 8081 { 8082 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000D8 04208DE2 ADD R2,SP,#+4 \ 000000DC 0400A0E1 MOV R0,R4 \ 000000E0 690100EF SWI +361 8083 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) \ 000000E4 0400A0E1 MOV R0,R4 \ 000000E8 D30100EF SWI +467 \ 000000EC 2C109DE5 LDR R1,[SP, #+44] \ 000000F0 010040E2 SUB R0,R0,#+1 \ 000000F4 001091E5 LDR R1,[R1, #+0] \ 000000F8 B010D1E1 LDRH R1,[R1, #+0] \ 000000FC 000051E1 CMP R1,R0 \ 00000100 4C00001A BNE ??edchat_onkey_6 8084 { 8085 t=FindNextActiveContact(ed_struct->ed_contact); \ 00000104 00B095E5 LDR R11,[R5, #+0] \ 00000108 0B00A0E1 MOV R0,R11 \ 0000010C ........ BL FindNextActiveContact \ 00000110 00A0B0E1 MOVS R10,R0 8086 if (t && t!=ed_struct->ed_contact) \ 00000114 0B005A11 CMPNE R10,R11 \ 00000118 4600000A BEQ ??edchat_onkey_6 8087 { 8088 CreateEditChat(t); \ ??edchat_onkey_9: \ 0000011C 0A00A0E1 MOV R0,R10 \ 00000120 ........ BL CreateEditChat 8089 return(1); \ 00000124 0100A0E3 MOV R0,#+1 \ 00000128 7F0000EA B ??edchat_onkey_4 8090 } 8091 } 8092 } 8093 } 8094 } 8095 8096 if (l==LEFT_BUTTON && LongLeftAction) \ ??edchat_onkey_7: \ 0000012C 3D0059E3 CMP R9,#+61 \ 00000130 5400001A BNE ??edchat_onkey_10 \ 00000134 50059FE5 LDR R0,??edchat_onkey_5+0x8 ;; LongLeftAction \ 00000138 000090E5 LDR R0,[R0, #+0] \ 0000013C 000050E3 CMP R0,#+0 \ 00000140 1500000A BEQ ??edchat_onkey_11 8097 { 8098 if (EDIT_GetFocus(data)==ed_struct->ed_answer) \ 00000144 0400A0E1 MOV R0,R4 \ 00000148 820100EF SWI +386 \ 0000014C 081095E5 LDR R1,[R5, #+8] \ 00000150 010050E1 CMP R0,R1 \ 00000154 1000001A BNE ??edchat_onkey_11 8099 { 8100 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000158 04208DE2 ADD R2,SP,#+4 \ 0000015C 0400A0E1 MOV R0,R4 \ 00000160 690100EF SWI +361 8101 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) \ 00000164 0400A0E1 MOV R0,R4 \ 00000168 D30100EF SWI +467 \ 0000016C 2C109DE5 LDR R1,[SP, #+44] \ 00000170 010040E2 SUB R0,R0,#+1 \ 00000174 001091E5 LDR R1,[R1, #+0] \ 00000178 B010D1E1 LDRH R1,[R1, #+0] \ 0000017C 000051E1 CMP R1,R0 \ 00000180 0500001A BNE ??edchat_onkey_11 8102 { 8103 t=FindPrevActiveContact(ed_struct->ed_contact); \ 00000184 00B095E5 LDR R11,[R5, #+0] \ 00000188 0B00A0E1 MOV R0,R11 \ 0000018C ........ BL FindPrevActiveContact \ 00000190 00A0B0E1 MOVS R10,R0 8104 if (t && t!=ed_struct->ed_contact) \ 00000194 0B005A11 CMPNE R10,R11 \ 00000198 DFFFFF1A BNE ??edchat_onkey_9 \ ??edchat_onkey_11: \ 0000019C 040095E5 LDR R0,[R5, #+4] \ 000001A0 820100EF SWI +386 \ 000001A4 081095E5 LDR R1,[R5, #+8] \ 000001A8 010050E1 CMP R0,R1 \ 000001AC 2100000A BEQ ??edchat_onkey_6 \ 000001B0 0400A0E1 MOV R0,R4 \ 000001B4 D30100EF SWI +467 \ 000001B8 010050E3 CMP R0,#+1 \ 000001BC 1D00001A BNE ??edchat_onkey_6 8105 { 8106 CreateEditChat(t); 8107 return(1); 8108 } 8109 } 8110 } 8111 } 8112 //#ifdef ELKA 8113 if (l==VOL_DOWN_BUTTON) 8114 { 8115 #ifdef kluchnik 8116 if((EDIT_GetFocus(data)==ed_struct->ed_answer)) 8117 #else 8118 if(LongVolDownAction) 8119 #endif 8120 { 8121 WSHDR *ws; 8122 ExtractEditControl(data,ed_struct->ed_answer,&ec); 8123 if(wstrlen(ec.pWS)>0) 8124 { 8125 ws=AllocWS(1); 8126 CutWSTR(ws,0); 8127 8128 EDIT_SetFocus(data,ed_struct->ed_answer); 8129 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 8130 8131 FreeWS(ws); 8132 RefreshGUI(); 8133 } 8134 } 8135 else 8136 { 8137 int pos; 8138 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 8139 { 8140 EDIT_SetFocus(data, pos); 8141 EDIT_SetCursorPos(data, 1); 8142 } 8143 return (-1); 8144 } 8145 8146 } 8147 8148 if (l==VOL_UP_BUTTON) 8149 { 8150 if(LongVolUpAction) 8151 { 8152 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); 8153 ascii2ws(ws,last_msg_buffer); 8154 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); 8155 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 8156 FreeWS(ws); 8157 RefreshGUI(); 8158 } 8159 else 8160 { 8161 int pos; 8162 if ((pos=EDIT_GetFocus(data)-2)>=2) 8163 { 8164 EDIT_SetFocus(data, pos); 8165 EDIT_SetCursorPos(data, 1); 8166 } 8167 return (-1); 8168 } 8169 } 8170 //#endif 8171 #ifdef kluchnik 8172 if(l==LEFT_BUTTON && EDIT_GetFocus(ed_struct->ed_chatgui)!=ed_struct->ed_answer && EDIT_GetCursorPos(data)==1) 8173 { 8174 int ed; 8175 EDITCONTROL ec; 8176 ed=EDIT_GetFocus(ed_struct->ed_chatgui); \ 000001C0 040095E5 LDR R0,[R5, #+4] \ 000001C4 820100EF SWI +386 8177 ExtractEditControl(ed_struct->ed_chatgui,ed,&ec); \ 000001C8 4C2F8DE2 ADD R2,SP,#+304 \ 000001CC 0010A0E1 MOV R1,R0 \ 000001D0 040095E5 LDR R0,[R5, #+4] \ 000001D4 690100EF SWI +361 8178 8179 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 000001D8 B80296E5 LDR R0,[R6, #+696] \ 000001DC 230100EF SWI +291 \ 000001E0 012080E2 ADD R2,R0,#+1 \ 000001E4 B80296E5 LDR R0,[R6, #+696] \ 000001E8 3E10A0E3 MOV R1,#+62 \ 000001EC 1D0000EF SWI +29 8180 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 000001F0 B80296E5 LDR R0,[R6, #+696] \ 000001F4 230100EF SWI +291 \ 000001F8 012080E2 ADD R2,R0,#+1 \ 000001FC B80296E5 LDR R0,[R6, #+696] \ 00000200 2010A0E3 MOV R1,#+32 \ 00000204 1D0000EF SWI +29 8181 wstrcat(wsBuffer,ec.pWS); \ 00000208 58119DE5 LDR R1,[SP, #+344] \ 0000020C B80296E5 LDR R0,[R6, #+696] \ 00000210 210100EF SWI +289 8182 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 00000214 B80296E5 LDR R0,[R6, #+696] \ 00000218 230100EF SWI +291 \ 0000021C 012080E2 ADD R2,R0,#+1 \ 00000220 B80296E5 LDR R0,[R6, #+696] \ 00000224 0A10A0E3 MOV R1,#+10 \ 00000228 1D0000EF SWI +29 8183 8184 ShowMSG(1,(int)"Message add to buffer"); \ 0000022C 0710A0E1 MOV R1,R7 \ 00000230 0100A0E3 MOV R0,#+1 \ 00000234 480100EF SWI +328 8185 } 8186 #endif 8187 } 8188 8189 if (msg->gbsmsg->msg==KEY_DOWN) \ ??edchat_onkey_6: \ 00000238 040098E5 LDR R0,[R8, #+4] \ 0000023C 9310A0E3 MOV R1,#+147 \ 00000240 040090E5 LDR R0,[R0, #+4] \ 00000244 401F81E3 ORR R1,R1,#0x100 \ 00000248 010050E1 CMP R0,R1 \ 0000024C 0A00001A BNE ??edchat_onkey_12 8190 { 8191 if ((l>='0')&&(l<='9')) \ 00000250 300059E3 CMP R9,#+48 \ 00000254 500000BA BLT ??edchat_onkey_13 \ 00000258 3A0059E3 CMP R9,#+58 \ 0000025C 060000AA BGE ??edchat_onkey_12 8192 { 8193 if (EDIT_GetFocus(data)!=ed_struct->ed_answer) \ 00000260 0400A0E1 MOV R0,R4 \ 00000264 820100EF SWI +386 \ 00000268 081095E5 LDR R1,[R5, #+8] \ 0000026C 010050E1 CMP R0,R1 \ 00000270 0100000A BEQ ??edchat_onkey_12 8194 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000274 0400A0E1 MOV R0,R4 \ 00000278 9B0100EF SWI +411 8195 } 8196 8197 if (l==GREEN_BUTTON) 8198 { 8199 if (connect_state==3) 8200 { 8201 if ((t=ed_struct->ed_contact)) 8202 { 8203 ExtractEditControl(data,ed_struct->ed_answer,&ec); 8204 SaveAnswer(t,ec.pWS); 8205 if ((s=t->answer)) 8206 { 8207 if ((len=strlen(s))) 8208 { 8209 msg_away_timer=0; 8210 away_m=0; 8211 t->automsgcount=0; 8212 if(change_back_status) 8213 { 8214 CurrentStatus=status_rem; 8215 set_my_status(); 8216 change_back_status=0; 8217 } 8218 if(SHOW_ACTIVE) 8219 t->isactive=ACTIVE_TIME; 8220 p=malloc(sizeof(PKT)+len+1); 8221 p->pkt.uin=t->uin; 8222 p->pkt.type=T_SENDMSG; 8223 p->pkt.data_len=len; 8224 strcpy(p->data,s); 8225 //#ifdef ELKA 8226 strcpy(last_msg_buffer, s); 8227 //#endif 8228 AddStringToLog(t,0x01,p->data,I_str,(++SENDMSGCOUNT)&0x7FFF,1); //Номер сообщения 8229 SUBPROC((void *)SendAnswer,0,p); 8230 main2_count++; 8231 mfree(t->answer); 8232 t->answer=NULL; 8233 // request_remake_edchat=1; 8234 EDIT_SetFocus(data,ed_struct->ed_answer); 8235 CutWSTR(ews,0); 8236 EDIT_SetTextToFocused(data,ews); 8237 AddMsgToChat(data); 8238 RecountMenu(t,1); 8239 return(-1); 8240 } 8241 } 8242 } 8243 } 8244 } 8245 //================2026rev-begin 8246 if (l==ENTER_BUTTON) 8247 { 8248 if (!EDIT_IsMarkModeActive(data)) // ?????? ???? ?? ????????? 8249 { 8250 int pos, len; 8251 char *link; 8252 ExtractEditControl(ed_struct->ed_chatgui,EDIT_GetFocus(ed_struct->ed_chatgui),&ec); 8253 wstrcpy(ews,ec.pWS); 8254 pos = EDIT_GetCursorPos(data); 8255 len = wstrlen(ews); 8256 link = malloc(len+1); 8257 8258 if(IsUrl(ews, pos, link) && IsOpenBrowser) 8259 { 8260 snprintf(fn, 255, "%s\\tmp%u.url", TEMPLATES_PATH, GetTempName); 8261 if ((f=fopen(fn,A_WriteOnly+A_BIN+A_Create+A_Truncate,P_WRITE,&err))!=-1) 8262 { 8263 fwrite(f,link,strlen(link),&err); 8264 fclose(f,&err); 8265 str_2ws(ews,fn,256); 8266 ExecuteFile(ews,0,0); 8267 unlink(fn, &err); 8268 } 8269 mfree(link); 8270 return (-1); 8271 } 8272 else 8273 { 8274 int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 8275 8276 if(IsMultiBuffer) 8277 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+4); 8278 else 8279 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+3); 8280 8281 mfree(link); 8282 return (-1); 8283 } 8284 } 8285 } 8286 8287 //================ 2026rev-end =================// 8288 8289 if (l==VOL_UP_BUTTON) 8290 { 8291 int pos; 8292 8293 if ((pos=EDIT_GetFocus(data)-2)>=2) 8294 { 8295 EDIT_SetFocus(data, pos); 8296 EDIT_SetCursorPos(data, 1); 8297 } 8298 return (-1); 8299 } 8300 if (l==VOL_DOWN_BUTTON) 8301 { 8302 int pos; 8303 8304 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 8305 { 8306 EDIT_SetFocus(data, pos); 8307 EDIT_SetCursorPos(data, 1); 8308 } 8309 return (-1); 8310 } 8311 } 8312 return(0); //Do standart keys \ ??edchat_onkey_12: \ 0000027C 0000A0E3 MOV R0,#+0 \ 00000280 57DF8DE2 ADD SP,SP,#+348 \ 00000284 F08FBDE8 POP {R4-R11,PC} ;; return \ ??edchat_onkey_10: \ 00000288 0E0059E3 CMP R9,#+14 \ 0000028C 2800001A BNE ??edchat_onkey_14 \ 00000290 0400A0E1 MOV R0,R4 \ 00000294 820100EF SWI +386 \ 00000298 081095E5 LDR R1,[R5, #+8] \ 0000029C 010050E1 CMP R0,R1 \ 000002A0 1500001A BNE ??edchat_onkey_15 \ 000002A4 04208DE2 ADD R2,SP,#+4 \ 000002A8 0400A0E1 MOV R0,R4 \ 000002AC 690100EF SWI +361 \ 000002B0 2C009DE5 LDR R0,[SP, #+44] \ 000002B4 230100EF SWI +291 \ 000002B8 010050E3 CMP R0,#+1 \ 000002BC DDFFFFBA BLT ??edchat_onkey_6 \ 000002C0 0100A0E3 MOV R0,#+1 \ 000002C4 250100EF SWI +293 \ 000002C8 00A0A0E1 MOV R10,R0 \ 000002CC 0010A0E3 MOV R1,#+0 \ 000002D0 260100EF SWI +294 \ 000002D4 081095E5 LDR R1,[R5, #+8] \ 000002D8 0400A0E1 MOV R0,R4 \ ??edchat_onkey_16: \ 000002DC 9B0100EF SWI +411 \ 000002E0 040095E5 LDR R0,[R5, #+4] \ 000002E4 0A10A0E1 MOV R1,R10 \ 000002E8 810100EF SWI +385 \ 000002EC 0A00A0E1 MOV R0,R10 \ 000002F0 290100EF SWI +297 \ 000002F4 960100EF SWI +406 \ 000002F8 CEFFFFEA B ??edchat_onkey_6 \ ??edchat_onkey_15: \ 000002FC 0400A0E1 MOV R0,R4 \ 00000300 820100EF SWI +386 \ 00000304 021080E2 ADD R1,R0,#+2 \ 00000308 080095E5 LDR R0,[R5, #+8] \ 0000030C 010050E1 CMP R0,R1 \ ??edchat_onkey_17: \ 00000310 040000BA BLT ??edchat_onkey_2 \ 00000314 0400A0E1 MOV R0,R4 \ 00000318 9B0100EF SWI +411 \ 0000031C 0110A0E3 MOV R1,#+1 \ 00000320 0400A0E1 MOV R0,R4 \ 00000324 D40100EF SWI +468 \ ??edchat_onkey_2: \ 00000328 0000E0E3 MVN R0,#+0 \ ??edchat_onkey_4: \ 0000032C 57DF8DE2 ADD SP,SP,#+348 \ 00000330 F08FBDE8 POP {R4-R11,PC} \ ??edchat_onkey_14: \ 00000334 0D0059E3 CMP R9,#+13 \ 00000338 BEFFFF1A BNE ??edchat_onkey_6 \ 0000033C 4C039FE5 LDR R0,??edchat_onkey_5+0xC ;; LongVolUpAction \ 00000340 000090E5 LDR R0,[R0, #+0] \ 00000344 000050E3 CMP R0,#+0 \ 00000348 0E00000A BEQ ??edchat_onkey_18 \ 0000034C 8C00A0E3 MOV R0,#+140 \ 00000350 800E80E3 ORR R0,R0,#0x800 \ 00000354 060080E0 ADD R0,R0,R6 \ 00000358 1B0000EF SWI +27 \ 0000035C 010080E2 ADD R0,R0,#+1 \ 00000360 250100EF SWI +293 \ 00000364 00A0A0E1 MOV R10,R0 \ 00000368 8C00A0E3 MOV R0,#+140 \ 0000036C 800E80E3 ORR R0,R0,#0x800 \ 00000370 061080E0 ADD R1,R0,R6 \ 00000374 0A00A0E1 MOV R0,R10 \ 00000378 ........ _BLF ascii2ws,??ascii2ws??rA \ 0000037C 081095E5 LDR R1,[R5, #+8] \ 00000380 040095E5 LDR R0,[R5, #+4] \ 00000384 D4FFFFEA B ??edchat_onkey_16 \ ??edchat_onkey_18: \ 00000388 0400A0E1 MOV R0,R4 \ 0000038C 820100EF SWI +386 \ 00000390 021040E2 SUB R1,R0,#+2 \ 00000394 020051E3 CMP R1,#+2 \ 00000398 DCFFFFEA B ??edchat_onkey_17 \ ??edchat_onkey_13: \ 0000039C 0B0059E3 CMP R9,#+11 \ 000003A0 5A00001A BNE ??edchat_onkey_19 \ 000003A4 900496E5 LDR R0,[R6, #+1168] \ 000003A8 030050E3 CMP R0,#+3 \ 000003AC B2FFFF1A BNE ??edchat_onkey_12 \ 000003B0 00A095E5 LDR R10,[R5, #+0] \ 000003B4 00005AE3 CMP R10,#+0 \ 000003B8 AFFFFF0A BEQ ??edchat_onkey_12 \ 000003BC 081095E5 LDR R1,[R5, #+8] \ 000003C0 04208DE2 ADD R2,SP,#+4 \ 000003C4 0400A0E1 MOV R0,R4 \ 000003C8 690100EF SWI +361 \ 000003CC 2C109DE5 LDR R1,[SP, #+44] \ 000003D0 0A00A0E1 MOV R0,R10 \ 000003D4 ........ BL SaveAnswer \ 000003D8 A4909AE5 LDR R9,[R10, #+164] \ 000003DC 000059E3 CMP R9,#+0 \ 000003E0 A5FFFF0A BEQ ??edchat_onkey_12 \ 000003E4 0900A0E1 MOV R0,R9 \ 000003E8 1B0000EF SWI +27 \ 000003EC 00B0B0E1 MOVS R11,R0 \ 000003F0 A1FFFF0A BEQ ??edchat_onkey_12 \ 000003F4 0070A0E3 MOV R7,#+0 \ 000003F8 AC7386E5 STR R7,[R6, #+940] \ 000003FC B07386E5 STR R7,[R6, #+944] \ 00000400 88708AE5 STR R7,[R10, #+136] \ 00000404 B80396E5 LDR R0,[R6, #+952] \ 00000408 000050E3 CMP R0,#+0 \ 0000040C 0300000A BEQ ??edchat_onkey_20 \ 00000410 B40396E5 LDR R0,[R6, #+948] \ 00000414 A00386E5 STR R0,[R6, #+928] \ 00000418 ........ BL set_my_status \ 0000041C B87386E5 STR R7,[R6, #+952] \ ??edchat_onkey_20: \ 00000420 ........ LDR R0,??DataTable333 ;; SHOW_ACTIVE \ 00000424 000090E5 LDR R0,[R0, #+0] \ 00000428 000050E3 CMP R0,#+0 \ 0000042C 5A0FA013 MOVNE R0,#+360 \ 00000430 AC008A15 STRNE R0,[R10, #+172] \ 00000434 09008BE2 ADD R0,R11,#+9 \ 00000438 140000EF SWI +20 \ 0000043C 0080A0E1 MOV R8,R0 \ 00000440 0C009AE5 LDR R0,[R10, #+12] \ 00000444 0910A0E1 MOV R1,R9 \ 00000448 000088E5 STR R0,[R8, #+0] \ 0000044C 0200A0E3 MOV R0,#+2 \ 00000450 B400C8E1 STRH R0,[R8, #+4] \ 00000454 B6B0C8E1 STRH R11,[R8, #+6] \ 00000458 080088E2 ADD R0,R8,#+8 \ 0000045C 1A0000EF SWI +26 \ 00000460 0910A0E1 MOV R1,R9 \ 00000464 8C00A0E3 MOV R0,#+140 \ 00000468 800E80E3 ORR R0,R0,#0x800 \ 0000046C 060080E0 ADD R0,R0,R6 \ 00000470 1A0000EF SWI +26 \ 00000474 080396E5 LDR R0,[R6, #+776] \ 00000478 ........ LDR R3,??DataTable368 ;; I_str \ 0000047C 010080E2 ADD R0,R0,#+1 \ 00000480 080386E5 STR R0,[R6, #+776] \ 00000484 0110A0E3 MOV R1,#+1 \ 00000488 02002DE9 PUSH {R1} \ 0000048C 8008A0E1 LSL R0,R0,#+17 \ 00000490 A008A0E1 LSR R0,R0,#+17 \ 00000494 01002DE9 PUSH {R0} \ 00000498 082088E2 ADD R2,R8,#+8 \ 0000049C 0A00A0E1 MOV R0,R10 \ 000004A0 ........ BL AddStringToLog \ 000004A4 ........ LDR R0,??DataTable369 ;; SendAnswer \ 000004A8 0820A0E1 MOV R2,R8 \ 000004AC 0010A0E3 MOV R1,#+0 \ 000004B0 710100EF SWI +369 \ 000004B4 D80296E5 LDR R0,[R6, #+728] \ 000004B8 010080E2 ADD R0,R0,#+1 \ 000004BC D80286E5 STR R0,[R6, #+728] \ 000004C0 A4009AE5 LDR R0,[R10, #+164] \ 000004C4 150000EF SWI +21 \ 000004C8 A4708AE5 STR R7,[R10, #+164] \ 000004CC 081095E5 LDR R1,[R5, #+8] \ 000004D0 0400A0E1 MOV R0,R4 \ 000004D4 9B0100EF SWI +411 \ 000004D8 A80396E5 LDR R0,[R6, #+936] \ 000004DC 0710A0E1 MOV R1,R7 \ 000004E0 260100EF SWI +294 \ 000004E4 A81396E5 LDR R1,[R6, #+936] \ 000004E8 0400A0E1 MOV R0,R4 \ 000004EC 810100EF SWI +385 \ 000004F0 0400A0E1 MOV R0,R4 \ 000004F4 ........ BL AddMsgToChat \ 000004F8 0110A0E3 MOV R1,#+1 \ 000004FC 0A00A0E1 MOV R0,R10 \ 00000500 ........ BL RecountMenu \ 00000504 0700E0E1 MVN R0,R7 \ 00000508 08D08DE2 ADD SP,SP,#+8 \ 0000050C 86FFFFEA B ??edchat_onkey_4 \ ??edchat_onkey_19: \ 00000510 1A0059E3 CMP R9,#+26 \ 00000514 5500001A BNE ??edchat_onkey_21 \ 00000518 0400A0E1 MOV R0,R4 \ 0000051C D80100EF SWI +472 \ 00000520 000050E3 CMP R0,#+0 \ 00000524 54FFFF1A BNE ??edchat_onkey_12 \ 00000528 040095E5 LDR R0,[R5, #+4] \ 0000052C 820100EF SWI +386 \ 00000530 04208DE2 ADD R2,SP,#+4 \ 00000534 0010A0E1 MOV R1,R0 \ 00000538 040095E5 LDR R0,[R5, #+4] \ 0000053C 690100EF SWI +361 \ 00000540 A80396E5 LDR R0,[R6, #+936] \ 00000544 2C109DE5 LDR R1,[SP, #+44] \ 00000548 1F0100EF SWI +287 \ 0000054C 0400A0E1 MOV R0,R4 \ 00000550 D30100EF SWI +467 \ 00000554 0090A0E1 MOV R9,R0 \ 00000558 A80396E5 LDR R0,[R6, #+936] \ 0000055C 230100EF SWI +291 \ 00000560 010080E2 ADD R0,R0,#+1 \ 00000564 140000EF SWI +20 \ 00000568 0080A0E1 MOV R8,R0 \ 0000056C A80396E5 LDR R0,[R6, #+936] \ 00000570 0820A0E1 MOV R2,R8 \ 00000574 0910A0E1 MOV R1,R9 \ 00000578 ........ BL IsUrl \ 0000057C 000050E3 CMP R0,#+0 \ 00000580 2C00000A BEQ ??edchat_onkey_22 \ 00000584 08019FE5 LDR R0,??edchat_onkey_5+0x10 ;; IsOpenBrowser \ 00000588 000090E5 LDR R0,[R0, #+0] \ 0000058C 000050E3 CMP R0,#+0 \ 00000590 2800000A BEQ ??edchat_onkey_22 \ 00000594 FC009FE5 LDR R0,??edchat_onkey_5+0x14 ;; GetTempName \ 00000598 ........ LDR R3,??DataTable336 ;; TEMPLATES_PATH \ 0000059C 01002DE9 PUSH {R0} \ 000005A0 182087E2 ADD R2,R7,#+24 \ 000005A4 FF10A0E3 MOV R1,#+255 \ 000005A8 34008DE2 ADD R0,SP,#+52 \ 000005AC 1B0100EF SWI +283 \ 000005B0 04308DE2 ADD R3,SP,#+4 \ 000005B4 402FA0E3 MOV R2,#+256 \ 000005B8 0110A0E3 MOV R1,#+1 \ 000005BC 831C81E3 ORR R1,R1,#0x8300 \ 000005C0 34008DE2 ADD R0,SP,#+52 \ 000005C4 0A0000EF SWI +10 \ 000005C8 0040A0E1 MOV R4,R0 \ 000005CC 010074E3 CMN R4,#+1 \ 000005D0 04D08DE2 ADD SP,SP,#+4 \ 000005D4 1400000A BEQ ??edchat_onkey_23 \ 000005D8 0800A0E1 MOV R0,R8 \ 000005DC 1B0000EF SWI +27 \ 000005E0 0020A0E1 MOV R2,R0 \ 000005E4 0D30A0E1 MOV R3,SP \ 000005E8 0810A0E1 MOV R1,R8 \ 000005EC 0400A0E1 MOV R0,R4 \ 000005F0 0C0000EF SWI +12 \ 000005F4 0D10A0E1 MOV R1,SP \ 000005F8 0400A0E1 MOV R0,R4 \ 000005FC 0D0000EF SWI +13 \ 00000600 A80396E5 LDR R0,[R6, #+936] \ 00000604 402FA0E3 MOV R2,#+256 \ 00000608 30108DE2 ADD R1,SP,#+48 \ 0000060C 6C0100EF SWI +364 \ 00000610 A80396E5 LDR R0,[R6, #+936] \ 00000614 0020A0E3 MOV R2,#+0 \ 00000618 0010A0E3 MOV R1,#+0 \ 0000061C 940000EF SWI +148 \ 00000620 0D10A0E1 MOV R1,SP \ 00000624 30008DE2 ADD R0,SP,#+48 \ 00000628 6B0100EF SWI +363 \ ??edchat_onkey_23: \ 0000062C 0800A0E1 MOV R0,R8 \ 00000630 150000EF SWI +21 \ 00000634 3BFFFFEA B ??edchat_onkey_2 \ ??edchat_onkey_22: \ 00000638 000095E5 LDR R0,[R5, #+0] \ 0000063C 0C0090E5 LDR R0,[R0, #+12] \ 00000640 ........ BL LoadTemplates \ 00000644 ........ LDR R2,??DataTable337 ;; IsMultiBuffer \ 00000648 4C109FE5 LDR R1,??edchat_onkey_5+0x18 ;; ed_options_handler \ 0000064C 100085E5 STR R0,[R5, #+16] \ 00000650 002092E5 LDR R2,[R2, #+0] \ 00000654 000052E3 CMP R2,#+0 \ 00000658 03308002 ADDEQ R3,R0,#+3 \ 0000065C 04308012 ADDNE R3,R0,#+4 \ 00000660 0520A0E1 MOV R2,R5 \ 00000664 0400A0E1 MOV R0,R4 \ 00000668 E50100EF SWI +485 \ 0000066C EEFFFFEA B ??edchat_onkey_23 \ ??edchat_onkey_21: \ 00000670 0D0059E3 CMP R9,#+13 \ 00000674 43FFFF0A BEQ ??edchat_onkey_18 \ ??edchat_onkey_24: \ 00000678 0E0059E3 CMP R9,#+14 \ 0000067C FEFEFF1A BNE ??edchat_onkey_12 \ 00000680 1DFFFFEA B ??edchat_onkey_15 \ ??edchat_onkey_5: \ 00000684 ........ DC32 `?` \ 00000688 ........ DC32 LongRightAction \ 0000068C ........ DC32 LongLeftAction \ 00000690 ........ DC32 LongVolUpAction \ 00000694 ........ DC32 IsOpenBrowser \ 00000698 ........ DC32 GetTempName \ 0000069C ........ DC32 ed_options_handler 8313 //1: close 8314 } 8315 8316 static const HEADER_DESC edchat_hdr={0,0,NULL,NULL,NULL,0,LGP_NULL}; 8317 8318 void (*old_ed_redraw)(void *data); \ In segment CODE, align 4, keep-with-next 8319 void my_ed_redraw(void *data) 8320 { \ my_ed_redraw: \ 00000000 30402DE9 PUSH {R4,R5,LR} 8321 void *edchat_gui; 8322 EDCHAT_STRUCT *ed_struct; 8323 if (old_ed_redraw) old_ed_redraw(data); \ 00000004 ........ LDR R4,??DataTable340 ;; i_rc \ 00000008 401594E5 LDR R1,[R4, #+1344] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0100000A BEQ ??my_ed_redraw_0 \ 00000014 31FF2FE1 BLX R1 8324 edchat_gui=FindGUIbyId(edchat_id,NULL); \ 00000018 0010A0E3 MOV R1,#+0 \ ??my_ed_redraw_0: \ 0000001C B80494E5 LDR R0,[R4, #+1208] \ 00000020 090200EF SWI +521 8325 if (edchat_gui) \ 00000024 000050E3 CMP R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 8326 { 8327 ed_struct=EDIT_GetUserPointer(edchat_gui); \ 0000002C DF0100EF SWI +479 8328 if (ed_struct) \ 00000030 000050E3 CMP R0,#+0 \ 00000034 3080BD08 POPEQ {R4,R5,PC} 8329 { 8330 int icon, width; 8331 #ifndef NEWSGOLD 8332 icon=*(S_ICONS+GetIconIndex(ed_struct->ed_contact)); 8333 ((HEADER_DESC *)&edchat_hdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); 8334 DrawImg(ScreenW()-1-width,1,icon); 8335 #else 8336 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 184390E5 LDR R4,[R0, #+792] 8337 width=GetImgWidth(icon); \ 00000048 0400A0E1 MOV R0,R4 \ 0000004C 220000EF SWI +34 \ 00000050 0050A0E1 MOV R5,R0 8338 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 8339 /* DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 8340 GetPaletteAdrByColorIndex(0), 8341 GetPaletteAdrByColorIndex(EDIT_IsBusy(edchat_gui)?3:4));*/ 8342 #endif 8343 } 8344 } 8345 } \ 00000070 3080BDE8 POP {R4,R5,PC} ;; return 8346 \ In segment CODE, align 4, keep-with-next 8347 void edchat_ghook(GUI *data, int cmd) 8348 { \ edchat_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 8349 8350 static const SOFTKEY_DESC sk={0x0FFF,0x0000,(int)LG_MENU}; 8351 static const SOFTKEY_DESC sk_cancel={0x0FF0,0x0000,(int)LG_CLOSE}; 8352 // static SOFTKEY_DESC sk={0x0018,0x0000,(int)"Menu"}; 8353 int j; 8354 EDITCONTROL ec; 8355 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); 8356 PNGTOP_DESC *pltop=PNG_TOP(); 8357 if (cmd==9) \ 00000004 ........ LDR R4,??DataTable340 ;; i_rc \ 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 8358 { 8359 GBS_DelTimer(&tmr_illumination); //by BoBa 25.06.07 \ 00000030 E400A0E3 MOV R0,#+228 \ 00000034 780D80E3 ORR R0,R0,#0x1E00 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 8C0100EF SWI +396 8360 pltop->dyn_pltop=NULL; \ 00000040 086088E5 STR R6,[R8, #+8] \ 00000044 180000EA B ??edchat_ghook_1 8361 } 8362 if (cmd==2) \ ??edchat_ghook_0: \ 00000048 081097E5 LDR R1,[R7, #+8] \ 0000004C 020059E3 CMP R9,#+2 \ 00000050 1700001A BNE ??edchat_ghook_2 8363 { 8364 ed_struct->ed_chatgui=data; \ 00000054 045087E5 STR R5,[R7, #+4] 8365 // edgui_data=data; 8366 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000058 0500A0E1 MOV R0,R5 \ 0000005C 9B0100EF SWI +411 8367 8368 static void *methods[16]; 8369 void **m=GetDataOfItemByID(data,2); \ 00000060 0210A0E3 MOV R1,#+2 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 4F0100EF SWI +335 \ 0000006C 0050B0E1 MOVS R5,R0 8370 if (m) 8371 { 8372 if (m[1]) \ 00000070 04009515 LDRNE R0,[R5, #+4] \ 00000074 00005013 CMPNE R0,#+0 \ 00000078 6800000A BEQ ??edchat_ghook_3 8373 { 8374 memcpy(methods,m[1],sizeof(methods)); \ 0000007C 4460A0E3 MOV R6,#+68 \ 00000080 506E86E3 ORR R6,R6,#0x500 \ 00000084 4020A0E3 MOV R2,#+64 \ 00000088 0010A0E1 MOV R1,R0 \ 0000008C 040086E0 ADD R0,R6,R4 \ 00000090 1E0100EF SWI +286 8375 old_ed_redraw=(void (*)(void *))(methods[0]); \ 00000094 040096E7 LDR R0,[R6, +R4] \ 00000098 400584E5 STR R0,[R4, #+1344] 8376 methods[0]=(void *)my_ed_redraw; \ 0000009C 84019FE5 LDR R0,??edchat_ghook_4 ;; my_ed_redraw \ 000000A0 040086E7 STR R0,[R6, +R4] 8377 m[1]=methods; \ 000000A4 040086E0 ADD R0,R6,R4 \ 000000A8 040085E5 STR R0,[R5, #+4] \ ??edchat_ghook_1: \ 000000AC 2CD08DE2 ADD SP,SP,#+44 \ 000000B0 F083BDE8 POP {R4-R9,PC} 8378 } 8379 } 8380 } 8381 if (cmd==3) \ ??edchat_ghook_2: \ 000000B4 030059E3 CMP R9,#+3 \ 000000B8 0E00001A BNE ??edchat_ghook_5 8382 { 8383 // if (edgui_data==data) edgui_data=NULL; 8384 if (ed_struct->ed_contact) \ 000000BC 000097E5 LDR R0,[R7, #+0] \ 000000C0 000050E3 CMP R0,#+0 \ 000000C4 0500000A BEQ ??edchat_ghook_6 8385 { 8386 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C8 0D20A0E1 MOV R2,SP \ 000000CC 0500A0E1 MOV R0,R5 \ 000000D0 690100EF SWI +361 8387 SaveAnswer(ed_struct->ed_contact,ec.pWS); \ 000000D4 28109DE5 LDR R1,[SP, #+40] \ 000000D8 000097E5 LDR R0,[R7, #+0] \ 000000DC ........ BL SaveAnswer 8388 } 8389 RecountMenu(ed_struct->ed_contact,1); \ ??edchat_ghook_6: \ 000000E0 000097E5 LDR R0,[R7, #+0] \ 000000E4 0110A0E3 MOV R1,#+1 \ 000000E8 ........ BL RecountMenu 8390 mfree(ed_struct); \ 000000EC 0700A0E1 MOV R0,R7 \ 000000F0 150000EF SWI +21 \ 000000F4 ECFFFFEA B ??edchat_ghook_1 8391 } 8392 if (cmd==0x0A) \ ??edchat_ghook_5: \ 000000F8 0A0059E3 CMP R9,#+10 \ 000000FC 0D00001A BNE ??edchat_ghook_7 8393 { 8394 pltop->dyn_pltop=SmilesImgList; \ 00000100 24019FE5 LDR R0,??edchat_ghook_4+0x4 ;; SmilesImgList \ 00000104 000090E5 LDR R0,[R0, #+0] \ 00000108 080088E5 STR R0,[R8, #+8] 8395 DisableIDLETMR(); \ 0000010C 7F0100EF SWI +383 8396 total_unread-=ed_struct->requested_decrement_total_unread; \ 00000110 AC0494E5 LDR R0,[R4, #+1196] \ 00000114 0C1097E5 LDR R1,[R7, #+12] \ 00000118 010040E0 SUB R0,R0,R1 \ 0000011C AC0484E5 STR R0,[R4, #+1196] 8397 ed_struct->requested_decrement_total_unread=0; \ 00000120 0C6087E5 STR R6,[R7, #+12] 8398 #ifdef ELKA 8399 if (!total_unread) \ 00000124 AC0494E5 LDR R0,[R4, #+1196] \ 00000128 000050E3 CMP R0,#+0 \ 0000012C 3B00001A BNE ??edchat_ghook_3 8400 { 8401 SLI_Off(); \ 00000130 ........ BL SLI_Off \ 00000134 DCFFFFEA B ??edchat_ghook_1 8402 } 8403 #endif 8404 /* if (request_close_edchat) 8405 { 8406 request_close_edchat=0; 8407 GeneralFunc_flag1(edchat_id,1); 8408 return; 8409 }*/ 8410 } 8411 if (cmd==7) \ ??edchat_ghook_7: \ 00000138 070059E3 CMP R9,#+7 \ 0000013C 2800001A BNE ??edchat_ghook_8 8412 { 8413 SetSoftKey(data,&sk,SET_SOFT_KEY_N); \ 00000140 E8809FE5 LDR R8,??edchat_ghook_4+0x8 ;; ??sk_1 \ 00000144 0020A0E3 MOV R2,#+0 \ 00000148 0810A0E1 MOV R1,R8 \ 0000014C 0500A0E1 MOV R0,R5 \ 00000150 680100EF SWI +360 8414 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000154 081097E5 LDR R1,[R7, #+8] \ 00000158 0D20A0E1 MOV R2,SP \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 690100EF SWI +361 8415 if (ec.pWS->wsbody[0]==0) \ 00000164 28009DE5 LDR R0,[SP, #+40] \ 00000168 000090E5 LDR R0,[R0, #+0] \ 0000016C B000D0E1 LDRH R0,[R0, #+0] \ 00000170 000050E3 CMP R0,#+0 \ 00000174 0300001A BNE ??edchat_ghook_9 8416 SetSoftKey(data,&sk_cancel,SET_SOFT_KEY_N==0?1:0); \ 00000178 0120A0E3 MOV R2,#+1 \ 0000017C 081088E2 ADD R1,R8,#+8 \ 00000180 0500A0E1 MOV R0,R5 \ 00000184 680100EF SWI +360 8417 if (!EDIT_IsBusy(data)) \ ??edchat_ghook_9: \ 00000188 0500A0E1 MOV R0,R5 \ 0000018C 1C0200EF SWI +540 \ 00000190 000050E3 CMP R0,#+0 \ 00000194 2100001A BNE ??edchat_ghook_3 8418 { 8419 time_to_stop_t9=0; \ 00000198 E86484E5 STR R6,[R4, #+1256] 8420 if (ed_struct->ed_contact->req_add) \ 0000019C 000097E5 LDR R0,[R7, #+0] \ 000001A0 981090E5 LDR R1,[R0, #+152] \ 000001A4 000051E3 CMP R1,#+0 \ 000001A8 0500000A BEQ ??edchat_ghook_10 8421 { 8422 ed_struct->ed_contact->req_add=0; \ 000001AC 986080E5 STR R6,[R0, #+152] 8423 AddMsgToChat(data); \ 000001B0 0500A0E1 MOV R0,R5 \ 000001B4 ........ BL AddMsgToChat 8424 RecountMenu(ed_struct->ed_contact,1); \ 000001B8 000097E5 LDR R0,[R7, #+0] \ 000001BC 0110A0E3 MOV R1,#+1 \ 000001C0 ........ BL RecountMenu 8425 } 8426 if (ed_struct->ed_contact->req_drawack) \ ??edchat_ghook_10: \ 000001C4 000097E5 LDR R0,[R7, #+0] \ 000001C8 9C1090E5 LDR R1,[R0, #+156] \ 000001CC 000051E3 CMP R1,#+0 \ 000001D0 1200000A BEQ ??edchat_ghook_3 8427 { 8428 ed_struct->ed_contact->req_drawack=0; \ 000001D4 9C6080E5 STR R6,[R0, #+156] 8429 DrawAck(data); \ 000001D8 0500A0E1 MOV R0,R5 \ 000001DC ........ BL DrawAck \ 000001E0 B1FFFFEA B ??edchat_ghook_1 8430 } 8431 } 8432 } 8433 if (cmd==0x0C) \ ??edchat_ghook_8: \ 000001E4 0C0059E3 CMP R9,#+12 \ 000001E8 0C00001A BNE ??edchat_ghook_3 8434 { 8435 j=EDIT_GetFocus(data); \ 000001EC 0500A0E1 MOV R0,R5 \ 000001F0 820100EF SWI +386 \ 000001F4 0040A0E1 MOV R4,R0 8436 if ((EDIT_GetUnFocus(data)ed_answer)) \ 000001F8 0500A0E1 MOV R0,R5 \ 000001FC 830100EF SWI +387 \ 00000200 040050E1 CMP R0,R4 \ 00000204 050000AA BGE ??edchat_ghook_3 \ 00000208 080097E5 LDR R0,[R7, #+8] \ 0000020C 000054E1 CMP R4,R0 \ 00000210 0200000A BEQ ??edchat_ghook_3 8437 EDIT_SetCursorPos(data,1); \ 00000214 0110A0E3 MOV R1,#+1 \ 00000218 0500A0E1 MOV R0,R5 \ 0000021C D40100EF SWI +468 8438 } 8439 } \ ??edchat_ghook_3: \ 00000220 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 00000224 F083BDE8 POP {R4-R9,PC} ;; return \ ??edchat_ghook_4: \ 00000228 ........ DC32 my_ed_redraw \ 0000022C ........ DC32 SmilesImgList \ 00000230 ........ DC32 ??sk_1 \ In segment DATA_C, align 4, align-sorted 8440 8441 8442 8443 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 `?` 8444 { 8445 1, 8446 edchat_onkey, 8447 edchat_ghook, 8448 (void *)edchat_locret, 8449 0, 8450 &menu_skt, 8451 {0,NULL,NULL,NULL}, 8452 FONT_SMALL, 8453 100, 8454 101, 8455 0, 8456 // 0x00000001 - Выровнять по правому краю 8457 // 0x00000002 - Выровнять по центру 8458 // 0x00000004 - Инверсия знакомест 8459 // 0x00000008 - UnderLine 8460 // 0x00000020 - Не переносить слова 8461 // 0x00000200 - bold 8462 0, 8463 // 0x00000002 - ReadOnly 8464 // 0x00000004 - Не двигается курсор 8465 // 0x40000000 - Поменять местами софт-кнопки 8466 0x40000000 8467 }; 8468 \ In segment CODE, align 4, keep-with-next 8469 void CreateEditChat(CLIST *t) 8470 { \ CreateEditChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 8471 8472 void *ma=malloc_adr(); 8473 void *eq; 8474 EDITCONTROL ec; 8475 EDITC_OPTIONS ec_options; 8476 int color, font, type; 8477 int zc; 8478 8479 LOGQ *lp; 8480 int edchat_toitem; 8481 // edcontact=t; 8482 8483 *((int *)(&edchat_hdr.lgp_id))=(int)t->name; \ 00000004 74649FE5 LDR R6,??CreateEditChat_0 ;; edchat_desc 8484 // *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+GetIconIndex(t); 8485 *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+IS_NULLICON; \ 00000008 ........ LDR R7,??DataTable340 ;; i_rc \ 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 D70F87E2 ADD R0,R7,#+860 \ 00000028 400086E5 STR R0,[R6, #+64] 8486 8487 eq=AllocEQueue(ma,mfree_adr()); \ 0000002C 158000EF SWI +32789 \ 00000030 0010A0E1 MOV R1,R0 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 630100EF SWI +355 8488 8489 /* hist = malloc(256); 8490 if(!GetHistory(hist, 256, t->uin)) 8491 { 8492 ascii2ws(ews,hist); 8493 PrepareEditControl(&ec); 8494 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL|ECF_DISABLE_T9,ews,ews->wsbody[0]); 8495 } 8496 mfree(hist); 8497 8498 AddEditControlToEditQend(eq,&ec,ma); */ 8499 lp=t->log; \ 0000003C A09094E5 LDR R9,[R4, #+160] \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 000059E3 CMP R9,#+0 \ 00000048 8F00000A BEQ ??CreateEditChat_1 8500 8501 while(lp) 8502 { 8503 font = ED_H_FONT_SIZE; \ ??CreateEditChat_2: \ 0000004C ........ LDR R0,??DataTable341 ;; ED_H_FONT_SIZE 8504 if ((zc=lp->acked&3))//Если отправлен или доставлен \ 00000050 ........ LDR R1,??DataTable342 ;; 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 8505 { 8506 if (zc==1) \ 00000068 010050E3 CMP R0,#+1 \ 0000006C 2200001A BNE ??CreateEditChat_4 8507 color=ACK_COLOR; //Зеленый, отправлен,но не доставлен \ 00000070 ........ LDR R0,??DataTable343 ;; ACK_COLOR \ 00000074 1F0000EA B ??CreateEditChat_5 8508 else 8509 color=I_COLOR;//доставлен 8510 } 8511 else//иначе входящее сообщение 8512 { 8513 if (lp->ID==0xFFFFFFFF) \ ??CreateEditChat_3: \ 00000078 080099E5 LDR R0,[R9, #+8] \ 0000007C 010070E3 CMN R0,#+1 \ 00000080 1B00001A BNE ??CreateEditChat_6 8514 { 8515 type = lp->type&0x0F; \ 00000084 0C0099E5 LDR R0,[R9, #+12] \ 00000088 0F1000E2 AND R1,R0,#0xF 8516 if(lp->type&0x10)//история \ 0000008C 100010E3 TST R0,#0x10 \ 00000090 0D00000A BEQ ??CreateEditChat_7 8517 { 8518 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 00000094 010051E3 CMP R1,#+1 \ 00000098 ........ LDREQ R0,??DataTable344 ;; O_I_COLOR \ 0000009C 0700000A BEQ ??CreateEditChat_8 \ 000000A0 030051E3 CMP R1,#+3 \ 000000A4 0400001A BNE ??CreateEditChat_9 \ 000000A8 ........ LDR R0,??DataTable357 ;; O_X_COLOR \ 000000AC 00B090E5 LDR R11,[R0, #+0] \ 000000B0 ........ LDR R0,??DataTable359 ;; O_ED_X_FONT_SIZE \ ??CreateEditChat_10: \ 000000B4 00A090E5 LDR R10,[R0, #+0] \ 000000B8 0F0000EA B ??CreateEditChat_4 \ ??CreateEditChat_9: \ 000000BC ........ LDR R0,??DataTable347 ;; O_TO_COLOR \ ??CreateEditChat_8: \ 000000C0 00B090E5 LDR R11,[R0, #+0] \ 000000C4 ........ LDR R0,??DataTable348 ;; O_ED_H_FONT_SIZE \ 000000C8 F9FFFFEA B ??CreateEditChat_10 8519 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 8520 } 8521 else//текущий чат 8522 { 8523 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,??DataTable358 ;; X_COLOR \ 000000E0 00B090E5 LDR R11,[R0, #+0] \ 000000E4 ........ LDR R0,??DataTable360 ;; ED_X_FONT_SIZE \ 000000E8 F1FFFFEA B ??CreateEditChat_10 \ ??CreateEditChat_11: \ 000000EC ........ LDR R0,??DataTable351 ;; TO_COLOR \ 000000F0 000000EA B ??CreateEditChat_5 8524 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 8525 } 8526 } 8527 else//если не входящее 8528 color=UNACK_COLOR; //то знач не доставлено \ ??CreateEditChat_6: \ 000000F4 ........ LDR R0,??DataTable352 ;; UNACK_COLOR \ ??CreateEditChat_5: \ 000000F8 00B090E5 LDR R11,[R0, #+0] 8529 } 8530 8531 PrepareEditControl(&ec); \ ??CreateEditChat_4: \ 000000FC 10008DE2 ADD R0,SP,#+16 \ 00000100 640100EF SWI +356 8532 8533 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 8534 { 8535 ascii2ws(ews,lp->hdr); \ 00000114 A80397E5 LDR R0,[R7, #+936] \ 00000118 101089E2 ADD R1,R9,#+16 \ 0000011C ........ _BLF ascii2ws,??ascii2ws??rA 8536 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000120 A83397E5 LDR R3,[R7, #+936] \ 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 8537 } 8538 else 8539 { 8540 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??CreateEditChat_12: \ 00000138 0000A0E3 MOV R0,#+0 \ 0000013C 01002DE9 PUSH {R0} \ 00000140 A83397E5 LDR R3,[R7, #+936] \ 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 8541 } 8542 8543 PrepareEditCOptions(&ec_options); \ 00000158 0D00A0E1 MOV R0,SP \ 0000015C C80100EF SWI +456 8544 SetPenColorToEditCOptions(&ec_options,color); \ 00000160 0B10A0E1 MOV R1,R11 \ 00000164 0D00A0E1 MOV R0,SP \ 00000168 CC0100EF SWI +460 8545 SetFontToEditCOptions(&ec_options,font); \ 0000016C 0A10A0E1 MOV R1,R10 \ 00000170 0D00A0E1 MOV R0,SP \ 00000174 CA0100EF SWI +458 8546 CopyOptionsToEditControl(&ec,&ec_options); \ 00000178 0D10A0E1 MOV R1,SP \ 0000017C 10008DE2 ADD R0,SP,#+16 \ 00000180 CE0100EF SWI +462 8547 AddEditControlToEditQend(eq,&ec,ma); \ 00000184 0520A0E1 MOV R2,R5 \ 00000188 10108DE2 ADD R1,SP,#+16 \ 0000018C 0800A0E1 MOV R0,R8 \ 00000190 660100EF SWI +358 8548 8549 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 8550 { 8551 ParseAnswer(ews,lp->text); \ 000001A4 A80397E5 LDR R0,[R7, #+936] \ 000001A8 601089E2 ADD R1,R9,#+96 \ 000001AC ........ BL ParseAnswer \ 000001B0 060000EA B ??CreateEditChat_15 8552 } 8553 else 8554 { 8555 ParseXStatusText(ews,lp->text,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_14: \ 000001B4 100010E3 TST R0,#0x10 \ 000001B8 ........ LDRNE R0,??DataTable357 ;; O_X_COLOR \ 000001BC 601089E2 ADD R1,R9,#+96 \ 000001C0 ........ LDREQ R0,??DataTable358 ;; X_COLOR \ 000001C4 002090E5 LDR R2,[R0, #+0] \ 000001C8 A80397E5 LDR R0,[R7, #+936] \ 000001CC ........ BL ParseXStatusText 8556 } 8557 8558 PrepareEditControl(&ec); \ ??CreateEditChat_15: \ 000001D0 10008DE2 ADD R0,SP,#+16 \ 000001D4 640100EF SWI +356 8559 ConstructEditControl(&ec, 8560 ECT_NORMAL_TEXT, 8561 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 8562 ews,ews->wsbody[0]); \ 000001D8 A83397E5 LDR R3,[R7, #+936] \ 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 8563 PrepareEditCOptions(&ec_options); \ 00000204 04008DE2 ADD R0,SP,#+4 \ 00000208 C80100EF SWI +456 8564 //#ifdef M75 8565 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 8566 { 8567 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000220 100010E3 TST R0,#0x10 \ 00000224 ........ LDRNE R0,??DataTable355 ;; O_ED_FONT_SIZE \ 00000228 ........ LDREQ R0,??DataTable362 ;; ED_FONT_SIZE \ 0000022C 090000EA B ??CreateEditChat_17 8568 } 8569 else 8570 { 8571 SetPenColorToEditCOptions(&ec_options,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_16: \ 00000230 100010E3 TST R0,#0x10 \ 00000234 ........ LDRNE R0,??DataTable357 ;; O_X_COLOR \ 00000238 ........ LDREQ R0,??DataTable358 ;; X_COLOR \ 0000023C 001090E5 LDR R1,[R0, #+0] \ 00000240 0D00A0E1 MOV R0,SP \ 00000244 CC0100EF SWI +460 8572 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,??DataTable359 ;; O_ED_X_FONT_SIZE \ 00000254 ........ LDREQ R0,??DataTable360 ;; ED_X_FONT_SIZE \ ??CreateEditChat_17: \ 00000258 001090E5 LDR R1,[R0, #+0] \ 0000025C 0D00A0E1 MOV R0,SP \ 00000260 CA0100EF SWI +458 8573 } 8574 //#else 8575 // SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 8576 //#endif 8577 CopyOptionsToEditControl(&ec,&ec_options); \ 00000264 0D10A0E1 MOV R1,SP \ 00000268 10008DE2 ADD R0,SP,#+16 \ 0000026C CE0100EF SWI +462 8578 AddEditControlToEditQend(eq,&ec,ma); \ 00000270 0520A0E1 MOV R2,R5 \ 00000274 10108DE2 ADD R1,SP,#+16 \ 00000278 0800A0E1 MOV R0,R8 \ 0000027C 660100EF SWI +358 8579 lp=lp->next; \ 00000280 009099E5 LDR R9,[R9, #+0] 8580 } \ 00000284 000059E3 CMP R9,#+0 \ 00000288 6FFFFF1A BNE ??CreateEditChat_2 8581 if (t->isunread) total_unread--; \ ??CreateEditChat_1: \ 0000028C 900094E5 LDR R0,[R4, #+144] 8582 total_unread2=total_unread2-t->unread_msg; 8583 t->unread_msg=0; \ 00000290 0090A0E3 MOV R9,#+0 \ 00000294 000050E3 CMP R0,#+0 \ 00000298 AC049715 LDRNE R0,[R7, #+1196] \ 0000029C 01004012 SUBNE R0,R0,#+1 \ 000002A0 AC048715 STRNE R0,[R7, #+1196] \ 000002A4 F80297E5 LDR R0,[R7, #+760] \ 000002A8 941094E5 LDR R1,[R4, #+148] \ 000002AC 010040E0 SUB R0,R0,R1 \ 000002B0 F80287E5 STR R0,[R7, #+760] \ 000002B4 949084E5 STR R9,[R4, #+148] 8584 t->isunread=0; \ 000002B8 909084E5 STR R9,[R4, #+144] 8585 ChangeContactPos(t); \ 000002BC 0400A0E1 MOV R0,R4 \ 000002C0 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 8586 wsprintf(ews, "-------"); \ 000002C4 A80397E5 LDR R0,[R7, #+936] \ 000002C8 4C1086E2 ADD R1,R6,#+76 \ 000002CC 240100EF SWI +292 8587 PrepareEditControl(&ec); \ 000002D0 10008DE2 ADD R0,SP,#+16 \ 000002D4 640100EF SWI +356 8588 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000002D8 A83397E5 LDR R3,[R7, #+936] \ 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 8589 PrepareEditCOptions(&ec_options); \ 000002F8 04008DE2 ADD R0,SP,#+4 \ 000002FC C80100EF SWI +456 8590 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000300 ........ LDR R0,??DataTable362 ;; ED_FONT_SIZE \ 00000304 001090E5 LDR R1,[R0, #+0] \ 00000308 04008DE2 ADD R0,SP,#+4 \ 0000030C CA0100EF SWI +458 8591 CopyOptionsToEditControl(&ec,&ec_options); \ 00000310 04108DE2 ADD R1,SP,#+4 \ 00000314 14008DE2 ADD R0,SP,#+20 \ 00000318 CE0100EF SWI +462 8592 AddEditControlToEditQend(eq,&ec,ma); \ 0000031C 0520A0E1 MOV R2,R5 \ 00000320 14108DE2 ADD R1,SP,#+20 \ 00000324 0800A0E1 MOV R0,R8 \ 00000328 660100EF SWI +358 8593 8594 if (t->answer) ParseAnswer(ews,t->answer); \ 0000032C A41094E5 LDR R1,[R4, #+164] \ 00000330 04D08DE2 ADD SP,SP,#+4 \ 00000334 000051E3 CMP R1,#+0 \ 00000338 0200000A BEQ ??CreateEditChat_18 \ 0000033C A80397E5 LDR R0,[R7, #+936] \ 00000340 ........ BL ParseAnswer \ 00000344 020000EA B ??CreateEditChat_19 8595 else CutWSTR(ews,0); \ ??CreateEditChat_18: \ 00000348 A80397E5 LDR R0,[R7, #+936] \ 0000034C 0010A0E3 MOV R1,#+0 \ 00000350 260100EF SWI +294 8596 PrepareEditControl(&ec); \ ??CreateEditChat_19: \ 00000354 10008DE2 ADD R0,SP,#+16 \ 00000358 640100EF SWI +356 8597 // ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,1024); 8598 ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,4096); \ 0000035C 20019FE5 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 A83397E5 LDR R3,[R7, #+936] \ 00000378 402DA013 MOVNE R2,#+4096 \ 0000037C 0020A003 MOVEQ R2,#+0 \ 00000380 14008DE2 ADD R0,SP,#+20 \ 00000384 650100EF SWI +357 8599 8600 PrepareEditCOptions(&ec_options); \ 00000388 04008DE2 ADD R0,SP,#+4 \ 0000038C C80100EF SWI +456 8601 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000390 ........ LDR R0,??DataTable362 ;; ED_FONT_SIZE \ 00000394 001090E5 LDR R1,[R0, #+0] \ 00000398 04008DE2 ADD R0,SP,#+4 \ 0000039C CA0100EF SWI +458 8602 CopyOptionsToEditControl(&ec,&ec_options); \ 000003A0 04108DE2 ADD R1,SP,#+4 \ 000003A4 14008DE2 ADD R0,SP,#+20 \ 000003A8 CE0100EF SWI +462 8603 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 8604 8605 if (t->req_xtext) \ 000003C0 BC0094E5 LDR R0,[R4, #+188] \ 000003C4 04D08DE2 ADD SP,SP,#+4 \ 000003C8 000050E3 CMP R0,#+0 \ 000003CC 0400000A BEQ ??CreateEditChat_20 8606 { 8607 FreeXText(t); \ 000003D0 0400A0E1 MOV R0,R4 \ 000003D4 ........ _BLF FreeXText,??FreeXText??rA 8608 t->req_xtext=0; \ 000003D8 BC9084E5 STR R9,[R4, #+188] 8609 RequestXText(t->uin); \ 000003DC 0C0094E5 LDR R0,[R4, #+12] \ 000003E0 ........ BL RequestXText 8610 } 8611 8612 EDCHAT_STRUCT *ed_struct=malloc(sizeof(EDCHAT_STRUCT)); \ ??CreateEditChat_20: \ 000003E4 1400A0E3 MOV R0,#+20 \ 000003E8 140000EF SWI +20 \ 000003EC 0050A0E1 MOV R5,R0 8613 ed_struct->ed_contact=t; \ 000003F0 004085E5 STR R4,[R5, #+0] 8614 ed_struct->ed_answer=edchat_toitem; \ 000003F4 08A085E5 STR R10,[R5, #+8] 8615 ed_struct->requested_decrement_total_unread=0; \ 000003F8 0C9085E5 STR R9,[R5, #+12] 8616 t->req_add=0; \ 000003FC 989084E5 STR R9,[R4, #+152] 8617 t->last_log=NULL; \ 00000400 A89084E5 STR R9,[R4, #+168] 8618 8619 // int scr_w=ScreenW(); 8620 // int scr_h=ScreenH(); 8621 // int head_h=HeaderH(); 8622 8623 patch_header(&edchat_hdr); \ 00000404 B893C6E1 STRH R9,[R6, #+56] \ 00000408 1800A0E3 MOV R0,#+24 \ 0000040C BA03C6E1 STRH R0,[R6, #+58] \ 00000410 888100EF SWI +33160 \ 00000414 010040E2 SUB R0,R0,#+1 \ 00000418 BC03C6E1 STRH R0,[R6, #+60] \ 0000041C 8A8100EF SWI +33162 \ 00000420 170080E2 ADD R0,R0,#+23 \ 00000424 BE03C6E1 STRH R0,[R6, #+62] 8624 patch_input(&edchat_desc); \ 00000428 B891C6E1 STRH R9,[R6, #+24] \ 0000042C 8A8100EF SWI +33162 \ 00000430 190080E2 ADD R0,R0,#+25 \ 00000434 BA01C6E1 STRH R0,[R6, #+26] \ 00000438 888100EF SWI +33160 \ 0000043C 010040E2 SUB R0,R0,#+1 \ 00000440 BC01C6E1 STRH R0,[R6, #+28] \ 00000444 898100EF SWI +33161 \ 00000448 0040A0E1 MOV R4,R0 \ 0000044C 8B8100EF SWI +33163 \ 00000450 000044E0 SUB R0,R4,R0 \ 00000454 010040E2 SUB R0,R0,#+1 \ 00000458 BE01C6E1 STRH R0,[R6, #+30] 8625 // edchat_desc.font=ED_FONT_SIZE; 8626 edchat_id=CreateInputTextDialog(&edchat_desc,&edchat_hdr,eq,1,ed_struct); \ 0000045C 20002DE9 PUSH {R5} \ 00000460 0130A0E3 MOV R3,#+1 \ 00000464 0820A0E1 MOV R2,R8 \ 00000468 381086E2 ADD R1,R6,#+56 \ 0000046C 0600A0E1 MOV R0,R6 \ 00000470 670100EF SWI +359 \ 00000474 B80487E5 STR R0,[R7, #+1208] 8627 } \ 00000478 40D08DE2 ADD SP,SP,#+64 \ 0000047C F08FBDE8 POP {R4-R11,PC} ;; return \ ??CreateEditChat_0: \ 00000480 ........ DC32 edchat_desc \ 00000484 ........ DC32 FIRST_LETTER 8628 8629 //----------------------------------------------------------------------------- 8630 8631 #define EC_MNU_MAX 9 8632 \ In segment CODE, align 4, keep-with-next 8633 void Quote(GUI *data) 8634 { \ Quote: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 8635 int q_n; 8636 EDITCONTROL ec, ec_hdr; 8637 EDITCONTROL ec_ed; 8638 WSHDR *ed_ws; 8639 WSHDR *ws; 8640 8641 EDCHAT_STRUCT *ed_struct; 8642 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 8643 8644 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 8645 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 8646 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 8647 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 8648 8649 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 8650 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 8651 { 8652 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 8653 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote_1 8654 } 8655 else 8656 CutWSTR(ed_ws,0); \ ??Quote_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 8657 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 8658 { 8659 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 8660 } 8661 else 8662 { 8663 wstrcat(ed_ws,ec.pWS); \ ??Quote_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 8664 } 8665 int ed_pos=0; \ ??Quote_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 8666 do 8667 { 8668 ed_pos++; \ ??Quote_4: \ 000000D0 017080E2 ADD R7,R0,#+1 8669 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 8670 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 8671 } 8672 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 8673 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 8674 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 8675 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 8676 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 8677 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 8678 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 8679 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 8680 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 8681 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 0000017C 040094E5 LDR R0,[R4, #+4] \ 00000180 0610A0E1 MOV R1,R6 \ 00000184 810100EF SWI +385 8682 FreeWS(ws); \ 00000188 0600A0E1 MOV R0,R6 \ 0000018C 290100EF SWI +297 8683 GeneralFuncF1(1); \ 00000190 0100A0E3 MOV R0,#+1 \ 00000194 3B0100EF SWI +315 8684 } \ 00000198 84D08DE2 ADD SP,SP,#+132 \ 0000019C F080BDE8 POP {R4-R7,PC} ;; return 8685 \ In segment CODE, align 4, keep-with-next 8686 void Quote2(GUI *data)//цитирование без фокуса на ответ 8687 { \ Quote2: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 8688 int q_n; 8689 EDITCONTROL ec, ec_hdr; 8690 EDITCONTROL ec_ed; 8691 WSHDR *ed_ws; 8692 WSHDR *ws; 8693 8694 EDCHAT_STRUCT *ed_struct; 8695 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 8696 8697 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 8698 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 8699 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 8700 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 8701 8702 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 8703 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 8704 { 8705 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 8706 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote2_1 8707 } 8708 else 8709 CutWSTR(ed_ws,0); \ ??Quote2_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 8710 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 8711 { 8712 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 8713 } 8714 else 8715 { 8716 wstrcat(ed_ws,ec.pWS); \ ??Quote2_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 8717 } 8718 int ed_pos=0; \ ??Quote2_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 8719 do 8720 { 8721 ed_pos++; \ ??Quote2_4: \ 000000D0 017080E2 ADD R7,R0,#+1 8722 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 8723 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 8724 } 8725 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 8726 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 8727 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 8728 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 8729 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 8730 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 8731 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 8732 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 8733 int ii=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000170 040094E5 LDR R0,[R4, #+4] \ 00000174 820100EF SWI +386 8734 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 8735 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000188 040094E5 LDR R0,[R4, #+4] \ 0000018C 0610A0E1 MOV R1,R6 \ 00000190 810100EF SWI +385 8736 EDIT_SetFocus(ed_struct->ed_chatgui,ii); \ 00000194 040094E5 LDR R0,[R4, #+4] \ 00000198 0510A0E1 MOV R1,R5 \ 0000019C 9B0100EF SWI +411 8737 FreeWS(ws); \ 000001A0 0600A0E1 MOV R0,R6 \ 000001A4 290100EF SWI +297 8738 GeneralFuncF1(1); \ 000001A8 0100A0E3 MOV R0,#+1 \ 000001AC 3B0100EF SWI +315 8739 } \ 000001B0 84D08DE2 ADD SP,SP,#+132 \ 000001B4 F080BDE8 POP {R4-R7,PC} ;; return 8740 8741 \ In segment CODE, align 4, keep-with-next 8742 void GetShortInfo(GUI *data) 8743 { \ GetShortInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} 8744 EDCHAT_STRUCT *ed_struct; 8745 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 8746 8747 TPKT *p; 8748 CLIST *t; 8749 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,??DataTable370 ;; i_rc + 1168 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 030050E3 CMP R0,#+3 \ 00000024 1B00001A BNE ??GetShortInfo_0 8750 { 8751 p=malloc(sizeof(PKT)); \ 00000028 0800A0E3 MOV R0,#+8 \ 0000002C 140000EF SWI +20 8752 p->pkt.uin=t->uin; 8753 p->pkt.type=T_REQINFOSHORT; 8754 p->pkt.data_len=0; 8755 AddStringToLog(t, 0x01, "Request info...", I_str,0xFFFFFFFF,1); \ 00000030 ........ LDR R3,??DataTable368 ;; 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 8756 AddMsgToChat(ed_struct->ed_chatgui); \ 00000070 040094E5 LDR R0,[R4, #+4] \ 00000074 ........ BL AddMsgToChat 8757 RecountMenu(t,1); \ 00000078 0110A0E3 MOV R1,#+1 \ 0000007C 0500A0E1 MOV R0,R5 \ 00000080 ........ BL RecountMenu 8758 SUBPROC((void *)SendAnswer,0,p); \ 00000084 ........ LDR R0,??DataTable369 ;; SendAnswer \ 00000088 0620A0E1 MOV R2,R6 \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 710100EF SWI +369 \ 00000094 08D08DE2 ADD SP,SP,#+8 8759 } 8760 GeneralFuncF1(1); \ ??GetShortInfo_0: \ 00000098 0100A0E3 MOV R0,#+1 \ 0000009C 3B0100EF SWI +315 8761 } \ 000000A0 7080BDE8 POP {R4-R6,PC} ;; return \ ??GetShortInfo_1: \ 000000A4 ........ DC32 `?` 8762 8763 void AskNickAndAddContact(EDCHAT_STRUCT *); \ In segment CODE, align 4, keep-with-next 8764 void AddCurContact(GUI *data) 8765 { \ AddCurContact: \ 00000000 00402DE9 PUSH {LR} 8766 EDCHAT_STRUCT *ed_struct; 8767 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 8768 8769 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,??DataTable370 ;; i_rc + 1168 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0000001A BNE ??AddCurContact_0 \ 00000024 ........ _BLF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA 8770 GeneralFuncF1(1); \ ??AddCurContact_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 3B0100EF SWI +315 8771 } \ 00000030 0080BDE8 POP {PC} ;; return 8772 \ In segment CODE, align 4, keep-with-next 8773 void SendAuthReq(GUI *data) 8774 { \ SendAuthReq: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 14D04DE2 SUB SP,SP,#+20 8775 EDCHAT_STRUCT *ed_struct; 8776 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 8777 8778 TPKT *p; 8779 CLIST *t; 8780 int l; 8781 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,??DataTable370 ;; i_rc + 1168 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthReq_1 8783 { 8784 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 8785 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 8786 p->pkt.type=T_AUTHREQ; 8787 p->pkt.data_len=l; 8788 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 8789 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 ........ LDR R3,??DataTable368 ;; 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 8790 AddMsgToChat(ed_struct->ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 8791 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 ........ BL RecountMenu 8792 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable369 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 8793 } 8794 GeneralFuncF1(1); \ ??SendAuthReq_1: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 8795 } \ 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,??DataTable370 ;; i_rc + 1168 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthGrant_1 8807 { 8808 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 8809 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 8810 p->pkt.type=T_AUTHGRANT; 8811 p->pkt.data_len=l; 8812 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 8813 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 ........ LDR R3,??DataTable371 ;; 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 8814 AddMsgToChat(ed_struct->ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 8815 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 ........ BL RecountMenu 8816 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable372 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 8817 } 8818 GeneralFuncF1(1); \ ??SendAuthGrant_1: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 8819 } \ 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 8829 { 8830 if(HISTORY_SAVE_TYPE) \ 00000024 ........ LDR R1,??DataTable373 ;; 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 8831 { 8832 if(HISTORY_TYPE) \ 00000050 01002DE9 PUSH {R0} \ 00000054 00005CE3 CMP R12,#+0 \ 00000058 0500000A BEQ ??OpenLogfile_3 8833 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 8834 else 8835 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 8836 } 8837 else 8838 { 8839 if(HISTORY_TYPE) \ ??OpenLogfile_2: \ 0000008C 00005CE3 CMP R12,#+0 \ 00000090 0200000A BEQ ??OpenLogfile_6 8840 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 8841 else 8842 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 8843 } 8844 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 8845 } 8846 FreeWS(ws); \ ??OpenLogfile_0: \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 290100EF SWI +297 8847 GeneralFuncF1(1); \ 000000C8 0100A0E3 MOV R0,#+1 \ 000000CC 3B0100EF SWI +315 8848 } \ 000000D0 3080BDE8 POP {R4,R5,PC} ;; return \ ??OpenLogfile_1: \ 000000D4 ........ DC32 HISTORY_SAVE_TYPE \ 000000D8 ........ DC32 HISTORY_TYPE \ 000000DC ........ DC32 `?` \ 000000E0 ........ DC32 HIST_PATH 8849 \ In segment CODE, align 4, keep-with-next 8850 void ClearLog(GUI *data/*,void *dummy*/) 8851 { \ ClearLog: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 8852 EDITCONTROL ec; 8853 EDCHAT_STRUCT *ed_struct; 8854 WSHDR *ws; 8855 CLIST *t; 8856 8857 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 8858 8859 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 8860 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 8861 { 8862 ws=AllocWS(1); \ 00000030 0100A0E3 MOV R0,#+1 \ 00000034 250100EF SWI +293 \ 00000038 0050A0E1 MOV R5,R0 8863 CutWSTR(ws,0); \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 260100EF SWI +294 8864 8865 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 8866 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000050 040094E5 LDR R0,[R4, #+4] \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 810100EF SWI +385 8867 8868 FreeWS(ws); \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 290100EF SWI +297 8869 GeneralFuncF1(1); \ 00000064 1D0000EA B ??ClearLog_1 8870 } 8871 else 8872 { 8873 8874 if ((t=ed_struct->ed_contact)) \ ??ClearLog_0: \ 00000068 005094E5 LDR R5,[R4, #+0] \ 0000006C 000055E3 CMP R5,#+0 \ 00000070 1C00000A BEQ ??ClearLog_2 8875 { 8876 if (t->log) \ 00000074 A00095E5 LDR R0,[R5, #+160] \ 00000078 0060A0E3 MOV R6,#+0 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 1200000A BEQ ??ClearLog_3 8877 { 8878 FreeLOGQ(&t->log); \ 00000084 A00085E2 ADD R0,R5,#+160 \ 00000088 ........ BL FreeLOGQ 8879 t->msg_count=0; \ 0000008C B06085E5 STR R6,[R5, #+176] 8880 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 8881 { 8882 while(ed_struct->ed_answer!=2) 8883 { 8884 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??ClearLog_5: \ 000000AC 040094E5 LDR R0,[R4, #+4] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 D10100EF SWI +465 8885 ed_struct->ed_answer--; \ 000000B8 080094E5 LDR R0,[R4, #+8] \ 000000BC 010040E2 SUB R0,R0,#+1 \ 000000C0 080084E5 STR R0,[R4, #+8] 8886 } \ ??ClearLog_4: \ 000000C4 080094E5 LDR R0,[R4, #+8] \ 000000C8 020050E3 CMP R0,#+2 \ 000000CC F6FFFF1A BNE ??ClearLog_5 8887 } 8888 } 8889 t->isactive=0; //by BoBa 18.06.07 \ ??ClearLog_3: \ 000000D0 AC6085E5 STR R6,[R5, #+172] 8890 RecountMenu(t,1); \ 000000D4 0110A0E3 MOV R1,#+1 \ 000000D8 0500A0E1 MOV R0,R5 \ 000000DC ........ BL RecountMenu 8891 GeneralFuncF1(1); \ ??ClearLog_1: \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 3B0100EF SWI +315 8892 } 8893 } 8894 } \ ??ClearLog_2: \ 000000E8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000EC 7080BDE8 POP {R4-R6,PC} ;; return 8895 \ In segment CODE, align 4, keep-with-next 8896 void ecmenu_ghook(void *data, int cmd) 8897 { \ ecmenu_ghook: \ 00000000 00402DE9 PUSH {LR} 8898 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 8899 { 8900 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 8901 } 8902 } \ 00000010 0080BDE8 POP {PC} ;; return 8903 \ In segment DATA_C, align 4, align-sorted 8904 static const MENUITEM_DESC ecmenu_ITEMS[EC_MNU_MAX]= \ ecmenu_ITEMS: \ 00000000 00000000.... DC32 0H, `?` \ screen3: \ 00000008 DS8 12 \ 00000014 REQUIRE `?` \ screen4: \ 00000014 DS8 12 \ 00000020 REQUIRE `?` \ icons: \ 00000020 DS8 132 \ 000000A4 REQUIRE `?` \ MAINCSM: \ 000000A4 DS8 72 \ 000000EC REQUIRE `?` \ gipc: \ 000000EC DS8 12 \ 000000F8 REQUIRE `?` \ def_set: \ 000000F8 DS8 420 \ 0000029C REQUIRE `?` \ tmr_gipc: \ 0000029C DS8 12 \ 000002A8 REQUIRE `?` \ main_d: \ 000002A8 DS8 4 \ 000002AC REQUIRE `?` \ align: \ 000002AC DS8 4 \ 000002B0 REQUIRE `?` \ canvasdata: \ 000002B0 DS8 4 \ 000002B4 REQUIRE `?` \ paused_height: \ 000002B4 DS8 4 \ 000002B8 REQUIRE `?` \ wsBuffer: \ 000002B8 DS8 4 \ 000002BC REQUIRE `?` \ uins: \ 000002BC DS8 4 \ 000002C0 REQUIRE `?` \ saver_on: \ 000002C0 DS8 4 \ 000002C4 REQUIRE `?` \ PrintTimer: \ 000002C4 DS8 4 \ 000002C8 REQUIRE `?` \ curping: \ 000002C8 DS8 4 \ 000002CC REQUIRE `?` \ sendq_l: \ 000002CC DS8 4 \ 000002D0 REQUIRE `?` \ sendq_p: \ 000002D0 DS8 4 \ 000002D4 REQUIRE `?` \ main_count: \ 000002D4 DS8 4 \ 000002D8 REQUIRE `?` \ main2_count: \ 000002D8 DS8 4 \ 000002DC REQUIRE `?` \ DoRefreshCL: \ 000002DC DS8 4 \ 000002E0 REQUIRE `?` \ ifJustNowRefresh: \ 000002E0 DS8 4 \ 000002E4 REQUIRE `?` \ Is_PING_On: \ 000002E4 DS8 4 \ 000002E8 REQUIRE `?` \ Is_SLI_On: \ 000002E8 DS8 4 \ 000002EC REQUIRE `?` \ Is_INC_On: \ 000002EC DS8 4 \ 000002F0 REQUIRE `?` \ Is_ILU_On: \ 000002F0 DS8 4 \ 000002F4 REQUIRE `?` \ Is_Double_Vibra_On: \ 000002F4 DS8 4 \ 000002F8 REQUIRE `?` \ total_unread2: \ 000002F8 DS8 4 \ 000002FC REQUIRE `?` \ maincsm_id: \ 000002FC DS8 4 \ 00000300 REQUIRE `?` \ maingui_id: \ 00000300 DS8 4 \ 00000304 REQUIRE `?` \ contactlist_menu_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 `?` \ S_ICONS: \ 00000318 DS8 136 \ 000003A0 REQUIRE `?` \ CurrentStatus: \ 000003A0 DS8 4 \ 000003A4 REQUIRE `?` \ CurrentXStatus: \ 000003A4 DS8 4 \ 000003A8 REQUIRE `?` \ ews: \ 000003A8 DS8 4 \ 000003AC REQUIRE `?` \ msg_away_timer: \ 000003AC DS8 4 \ 000003B0 REQUIRE `?` \ away_m: \ 000003B0 DS8 4 \ 000003B4 REQUIRE `?` \ status_rem: \ 000003B4 DS8 4 \ 000003B8 REQUIRE `?` \ change_back_status: \ 000003B8 DS8 4 \ 000003BC REQUIRE `?` \ Show_XTX: \ 000003BC DS8 4 \ 000003C0 REQUIRE `?` \ uptimeHour: \ 000003C0 DS8 4 \ 000003C4 REQUIRE `?` \ uptimeMin: \ 000003C4 DS8 4 \ 000003C8 REQUIRE `?` \ uptimeSec: \ 000003C8 DS8 4 \ 000003CC REQUIRE `?` \ tracktimer: \ 000003CC DS8 4 \ 000003D0 REQUIRE `?` \ input_awaymsg_id: \ 000003D0 DS8 4 \ 000003D4 REQUIRE `?` \ XStatusImg: \ 000003D4 DS8 140 \ 00000460 REQUIRE `?` \ silenthide: \ 00000460 DS8 4 \ 00000464 REQUIRE `?` \ disautorecconect: \ 00000464 DS8 4 \ 00000468 REQUIRE `?` \ Is_Sounds_Enabled: \ 00000468 DS8 4 \ 0000046C REQUIRE `?` \ Is_Show_Offline: \ 0000046C DS8 4 \ 00000470 REQUIRE `?` \ Is_Show_Groups: \ 00000470 DS8 4 \ 00000474 REQUIRE `?` \ CurrentPrivateStatus: \ 00000474 DS8 4 \ 00000478 REQUIRE `?` \ vibra_count: \ 00000478 DS8 4 \ 0000047C REQUIRE `?` \ templates_chars: \ 0000047C DS8 4 \ 00000480 REQUIRE `?` \ templates_lines: \ 00000480 DS8 4 \ 00000484 REQUIRE `?` \ bot_chars: \ 00000484 DS8 4 \ 00000488 REQUIRE `?` \ bot_lines: \ 00000488 DS8 4 \ 0000048C REQUIRE `?` \ RXstate: \ 0000048C DS8 4 \ 00000490 REQUIRE `?` \ connect_state: \ 00000490 DS8 4 \ 00000494 REQUIRE `?` \ sock: \ 00000494 DS8 4 \ 00000498 REQUIRE `?` \ TOTALRECEIVED: \ 00000498 DS8 4 \ 0000049C REQUIRE `?` \ TOTALSENDED: \ 0000049C DS8 4 \ 000004A0 REQUIRE `?` \ ALLTOTALRECEIVED: \ 000004A0 DS8 4 \ 000004A4 REQUIRE `?` \ ALLTOTALSENDED: \ 000004A4 DS8 4 \ 000004A8 REQUIRE `?` \ is_gprs_online: \ 000004A8 DS8 4 \ 000004AC REQUIRE `?` \ total_unread: \ 000004AC DS8 4 \ 000004B0 REQUIRE `?` \ cltop: \ 000004B0 DS8 4 \ 000004B4 REQUIRE `?` \ GROUP_CACHE: \ 000004B4 DS8 4 \ 000004B8 REQUIRE `?` \ edchat_id: \ 000004B8 DS8 4 \ 000004BC REQUIRE `?` \ tenseconds_to_ping: \ 000004BC DS8 4 \ 000004C0 REQUIRE `?` \ on_off_timer: \ 000004C0 DS8 4 \ 000004C4 REQUIRE `?` \ kopa_online: \ 000004C4 DS8 4 \ 000004C8 REQUIRE `?` \ kopa_kontaktu: \ 000004C8 DS8 4 \ 000004CC REQUIRE `?` \ DNR_ID: \ 000004CC DS8 4 \ 000004D0 REQUIRE `?` \ DNR_TRIES: \ 000004D0 DS8 4 \ 000004D4 REQUIRE `?` \ host_counter: \ 000004D4 DS8 4 \ 000004D8 REQUIRE `?` \ ping_time: \ 000004D8 DS8 4 \ 000004DC REQUIRE `?` \ ShowLoadScreen: \ 000004DC DS8 4 \ 000004E0 REQUIRE `?` \ main_msg_timer2: \ 000004E0 DS8 4 \ 000004E4 REQUIRE `?` \ NEW_MSG: \ 000004E4 DS8 4 \ 000004E8 REQUIRE `?` \ time_to_stop_t9: \ 000004E8 DS8 4 \ 000004EC REQUIRE `?` \ comanda: \ 000004EC DS8 4 \ 000004F0 REQUIRE `?` \ INC_show: \ 000004F0 DS8 4 \ 000004F4 REQUIRE `?` \ INC_show2: \ 000004F4 DS8 4 \ 000004F8 REQUIRE `?` \ pp_icon: \ 000004F8 DS8 4 \ 000004FC REQUIRE `?` \ pp_xicon: \ 000004FC DS8 4 \ 00000500 REQUIRE `?` \ INC_show3: \ 00000500 DS8 4 \ 00000504 REQUIRE `?` \ curpos: \ 00000504 DS8 4 \ 00000508 REQUIRE `?` \ uinContact: \ 00000508 DS8 4 \ 0000050C REQUIRE `?` \ hy: \ 0000050C DS8 4 \ 00000510 REQUIRE `?` \ clfont: \ 00000510 DS8 4 \ 00000514 REQUIRE `?` \ i_curpos: \ 00000514 DS8 4 \ 00000518 REQUIRE `?` \ itemFromDisp: \ 00000518 DS8 4 \ 0000051C REQUIRE `?` \ totalItems: \ 0000051C DS8 4 \ 00000520 REQUIRE `?` \ curpage: \ 00000520 DS8 4 \ 00000524 REQUIRE `?` \ collum: \ 00000524 DS8 4 \ 00000528 REQUIRE `?` \ shot_soft: \ 00000528 DS8 4 \ 0000052C REQUIRE `?` \ shot_header: \ 0000052C DS8 4 \ 00000530 REQUIRE `?` \ clstartItem: \ 00000530 DS8 4 \ 00000534 REQUIRE `?` \ _to_develop: \ 00000534 DS8 4 \ 00000538 REQUIRE `?` \ errornumber: \ 00000538 DS8 4 \ 0000053C REQUIRE `?` \ iconmsg: \ 0000053C DS8 4 \ 00000540 REQUIRE `?` \ old_ed_redraw: \ 00000540 DS8 4 \ 00000544 REQUIRE `?` \ 00000544 DS8 64 \ 00000584 REQUIRE `?` \ elf_path: \ 00000584 DS8 256 \ 00000684 REQUIRE `?` \ ContactT9Key: \ 00000684 DS8 32 \ 000006A4 REQUIRE `?` \ menuproc: \ 000006A4 DS8 40 \ 000006CC REQUIRE `?` \ ixtext: \ 000006CC DS8 256 \ 000007CC REQUIRE `?` \ talk_sound: \ 000007CC DS8 128 \ 0000084C REQUIRE `?` \ unread_msg_info: \ 0000084C DS8 64 \ 0000088C REQUIRE `?` \ last_msg_buffer: \ 0000088C DS8 4096 \ 0000188C REQUIRE `?` \ prmsg: \ 0000188C DS8 256 \ 0000198C REQUIRE `?` \ ping_tmr: \ 0000198C DS8 16 \ 0000199C REQUIRE `?` \ PINGO: \ 0000199C DS8 256 \ 00001A9C REQUIRE `?` \ away_msg: \ 00001A9C DS8 264 \ 00001BA4 REQUIRE `?` \ away_msg_time: \ 00001BA4 DS8 64 \ 00001BE4 REQUIRE `?` \ away_msg_time_dace: \ 00001BE4 DS8 16 \ 00001BF4 REQUIRE `?` \ tim_zone: \ 00001BF4 DS8 16 \ 00001C04 REQUIRE `?` \ away_tmr: \ 00001C04 DS8 16 \ 00001C14 REQUIRE `?` \ autoChangeStatus: \ 00001C14 DS8 16 \ 00001C24 REQUIRE `?` \ remind_tmr: \ 00001C24 DS8 16 \ 00001C34 REQUIRE `?` \ uptime_tmr: \ 00001C34 DS8 16 \ 00001C44 REQUIRE `?` \ tracktmr: \ 00001C44 DS8 16 \ 00001C54 REQUIRE `?` \ onlineTime: \ 00001C54 DS8 128 \ 00001CD4 REQUIRE `?` \ sli_tmr: \ 00001CD4 DS8 16 \ 00001CE4 REQUIRE `?` \ logmsg: \ 00001CE4 DS8 256 \ 00001DE4 REQUIRE `?` \ logmsg2: \ 00001DE4 DS8 256 \ 00001EE4 REQUIRE `?` \ tmr_illumination: \ 00001EE4 DS8 16 \ 00001EF4 REQUIRE `?` \ tmr_vibra: \ 00001EF4 DS8 16 \ 00001F04 REQUIRE `?` \ reconnect_tmr: \ 00001F04 DS8 16 \ 00001F14 REQUIRE `?` \ tmr_active: \ 00001F14 DS8 16 \ 00001F24 REQUIRE `?` \ clmenu_sk_r: \ 00001F24 DS8 16 \ 00001F34 REQUIRE `?` \ on_off_buf: \ 00001F34 DS8 128 \ 00001FB4 REQUIRE `?` \ hostbuf2: \ 00001FB4 DS8 128 \ 00002034 REQUIRE `?` \ hostname: \ 00002034 DS8 128 \ 000020B4 REQUIRE `?` \ I_UIN: \ 000020B4 DS8 12 \ 000020C0 REQUIRE `?` \ sds: \ 000020C0 DS8 8 \ 000020C8 REQUIRE `?` \ mp3: \ 000020C8 DS8 4 \ 000020CC REQUIRE `?` \ wav: \ 000020CC DS8 4 \ 000020D0 REQUIRE `?` \ amr: \ 000020D0 DS8 4 \ 000020D4 REQUIRE `?` \ a_txt: \ 000020D4 DS8 48 \ 00002104 REQUIRE `?` \ s_txt: \ 00002104 DS8 48 \ 00002134 REQUIRE `?` \ d_txt: \ 00002134 DS8 48 \ 00002164 REQUIRE `?` \ f_txt: \ 00002164 DS8 48 \ 00002194 REQUIRE `?` \ g_txt: \ 00002194 DS8 48 \ 000021C4 REQUIRE `?` \ develop: \ 000021C4 DS8 16 \ 000021D4 REQUIRE `?` \ requests1: \ 000021D4 DS8 24 \ 000021EC REQUIRE `?` \ requests2: \ 000021EC DS8 20 \ 00002200 REQUIRE `?` \ requests3: \ 00002200 DS8 24 \ 00002218 REQUIRE `?` \ requests4: \ 00002218 DS8 20 \ 0000222C REQUIRE `?` \ mod_info: \ 0000222C DS8 264 \ 00002334 REQUIRE `?` \ show_nick: \ 00002334 DS8 32 \ 00002354 REQUIRE `?` \ onContact: \ 00002354 DS8 64 \ 00002394 REQUIRE `?` \ incs2: \ 00002394 DS8 16 \ 000023A4 REQUIRE `?` \ OffContact: \ 000023A4 DS8 64 \ 000023E4 REQUIRE `?` \ incs3: \ 000023E4 DS8 16 \ 000023F4 REQUIRE `?` \ tm22: \ 000023F4 DS8 16 \ 00002404 REQUIRE `?` \ clrBlack: \ 00002404 DS8 4 \ 00002408 REQUIRE `?` \ clrWhite: \ 00002408 DS8 4 \ 0000240C REQUIRE `?` \ clrRed: \ 0000240C DS8 4 \ 00002410 REQUIRE `?` \ transparent: \ 00002410 DS8 4 \ 00002414 REQUIRE `?` \ blue: \ 00002414 DS8 8 \ 0000241C REQUIRE `?` 8919 { 8920 Quote, 8921 Quote2, 8922 AddSmile, 8923 GetShortInfo, 8924 AddCurContact, 8925 SendAuthReq, 8926 SendAuthGrant, 8927 OpenLogfile, 8928 ClearLog, 8929 }; 8930 8931 char ecm_contactname[64]; \ ecm_contactname: \ 0000241C DS8 64 \ 0000245C 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 \ CmdMenuHeader: \ 00000000 DS8 20 \ 00000014 REQUIRE `?` \ cmd_chars: \ 00000014 DS8 4 \ 00000018 REQUIRE `?` \ cmd_lines: \ 00000018 DS8 4 \ 0000001C REQUIRE `?` \ NumOfItems: \ 0000001C DS8 4 \ 00000020 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ requests6: \ 00000000 DS8 24 \ 00000018 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ lastKey: \ 00000000 DS8 4 \ 00000004 REQUIRE `?` 8932 \ In segment DATA_C, align 4, align-sorted 8933 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 8934 8935 static const MENU_DESC ecmenu_STRUCT= 8936 { 8937 8,NULL,ecmenu_ghook,NULL, 8938 menusoftkeys, 8939 &menu_skt, 8940 0, 8941 NULL, 8942 ecmenu_ITEMS, 8943 ecmenu_HNDLS, 8944 EC_MNU_MAX 8945 }; 8946 \ In segment CODE, align 4, keep-with-next 8947 void ec_menu(EDCHAT_STRUCT *ed_struct) 8948 { \ ec_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 28D04DE2 SUB SP,SP,#+40 \ 00000008 0040A0E1 MOV R4,R0 8949 CLIST *t; 8950 int to_remove[EC_MNU_MAX+1]; 8951 int remove=0; 8952 if ((t=ed_struct->ed_contact)) \ 0000000C 001094E5 LDR R1,[R4, #+0] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 4F00000A BEQ ??ec_menu_0 8953 { 8954 if (t->name) \ 00000018 ........ LDR R5,??DataTable374 ;; i_rc \ 0000001C 1C00A0E3 MOV R0,#+28 \ 00000020 900D80E3 ORR R0,R0,#0x2400 \ 00000024 050080E0 ADD R0,R0,R5 \ 00000028 142091E2 ADDS R2,R1,#+20 \ 0000002C 0300000A BEQ ??ec_menu_1 8955 { 8956 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 8957 } 8958 else 8959 { 8960 sprintf(ecm_contactname,"%u",t->uin); \ ??ec_menu_1: \ 00000040 0C2091E5 LDR R2,[R1, #+12] \ 00000044 451F8FE2 ADR R1,??ec_menu_3 ;; "%u" \ 00000048 160000EF SWI +22 8961 } 8962 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 083094E5 LDR R3,[R4, #+8] \ 00000058 0220A0E3 MOV R2,#+2 \ 0000005C 0010A0E3 MOV R1,#+0 \ 00000060 030050E1 CMP R0,R3 \ 00000064 0400001A BNE ??ec_menu_4 8963 { 8964 to_remove[++remove]=0; \ 00000068 04108DE5 STR R1,[SP, #+4] 8965 to_remove[++remove]=1; \ 0000006C 0260A0E3 MOV R6,#+2 \ 00000070 0130A0E3 MOV R3,#+1 \ 00000074 08308DE5 STR R3,[SP, #+8] \ 00000078 010000EA B ??ec_menu_5 8966 } 8967 else 8968 { 8969 // to_remove[++remove]=1; 8970 to_remove[++remove]=2; \ ??ec_menu_4: \ 0000007C 0160A0E3 MOV R6,#+1 \ 00000080 04208DE5 STR R2,[SP, #+4] 8971 } 8972 8973 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 8974 to_remove[++remove]=7; \ 00000090 016086E2 ADD R6,R6,#+1 \ 00000094 0D00A0E1 MOV R0,SP \ 00000098 0730A0E3 MOV R3,#+7 \ 0000009C 063180E7 STR R3,[R0, +R6, LSL #+2] 8975 8976 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 900495E5 LDR R0,[R5, #+1168] \ 000000B0 030050E3 CMP R0,#+3 \ 000000B4 1000000A BEQ ??ec_menu_8 8977 { 8978 to_remove[++remove]=2; \ ??ec_menu_7: \ 000000B8 010086E2 ADD R0,R6,#+1 \ 000000BC 0D30A0E1 MOV R3,SP \ 000000C0 002183E7 STR R2,[R3, +R0, LSL #+2] 8979 to_remove[++remove]=3; \ 000000C4 010080E2 ADD R0,R0,#+1 \ 000000C8 0D20A0E1 MOV R2,SP \ 000000CC 0330A0E3 MOV R3,#+3 \ 000000D0 003182E7 STR R3,[R2, +R0, LSL #+2] 8980 to_remove[++remove]=4; \ 000000D4 010080E2 ADD R0,R0,#+1 \ 000000D8 0430A0E3 MOV R3,#+4 \ 000000DC 003182E7 STR R3,[R2, +R0, LSL #+2] 8981 to_remove[++remove]=5; \ 000000E0 010080E2 ADD R0,R0,#+1 \ 000000E4 0530A0E3 MOV R3,#+5 \ 000000E8 003182E7 STR R3,[R2, +R0, LSL #+2] 8982 to_remove[++remove]=6; \ 000000EC 016080E2 ADD R6,R0,#+1 \ 000000F0 0D00A0E1 MOV R0,SP \ 000000F4 0620A0E3 MOV R2,#+6 \ 000000F8 062180E7 STR R2,[R0, +R6, LSL #+2] 8983 } 8984 8985 patch_header(&ecmenu_HDR); \ ??ec_menu_8: \ 000000FC 60509FE5 LDR R5,??ec_menu_3+0x4 ;; ecmenu_HDR \ 00000100 1800A0E3 MOV R0,#+24 \ 00000104 B010C5E1 STRH R1,[R5, #+0] \ 00000108 B200C5E1 STRH R0,[R5, #+2] \ 0000010C 888100EF SWI +33160 \ 00000110 010040E2 SUB R0,R0,#+1 \ 00000114 B400C5E1 STRH R0,[R5, #+4] \ 00000118 8A8100EF SWI +33162 \ 0000011C 170080E2 ADD R0,R0,#+23 \ 00000120 B600C5E1 STRH R0,[R5, #+6] 8986 to_remove[0]=remove; \ 00000124 00608DE5 STR R6,[SP, #+0] 8987 CreateMenu(0,0,&ecmenu_STRUCT,&ecmenu_HDR,0,EC_MNU_MAX,ed_struct,to_remove); \ 00000128 0D00A0E1 MOV R0,SP \ 0000012C 01002DE9 PUSH {R0} \ 00000130 10002DE9 PUSH {R4} \ 00000134 0530A0E1 MOV R3,R5 \ 00000138 0900A0E3 MOV R0,#+9 \ 0000013C 01002DE9 PUSH {R0} \ 00000140 142085E2 ADD R2,R5,#+20 \ 00000144 0010A0E3 MOV R1,#+0 \ 00000148 0000A0E3 MOV R0,#+0 \ 0000014C 01002DE9 PUSH {R0} \ 00000150 520100EF SWI +338 \ 00000154 10D08DE2 ADD SP,SP,#+16 8988 } 8989 } \ ??ec_menu_0: \ 00000158 28D08DE2 ADD SP,SP,#+40 ;; stack cleaning \ 0000015C 7080BDE8 POP {R4-R6,PC} ;; return \ ??ec_menu_3: \ 00000160 25750000 DC8 "%u",+0 \ 00000164 ........ DC32 ecmenu_HDR 8990 8991 \ In segment CODE, align 4, keep-with-next 8992 void AskNickAndAddContact(EDCHAT_STRUCT *ed_struct) 8993 { 8994 CreateAddContactGrpDialog(ed_struct->ed_contact); \ AskNickAndAddContact: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 ........ _BF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA ;; tailcall 8995 } 8996 \ In segment CODE, align 4, keep-with-next 8997 void AddSmile(GUI *data) 8998 { \ AddSmile: \ 00000000 00402DE9 PUSH {LR} 8999 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 9000 CreateSmileSelectGUI(ed_struct); \ 00000008 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 9001 GeneralFuncF1(1); \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0100EF SWI +315 9002 } \ 00000014 0080BDE8 POP {PC} ;; return \ In segment CODE, align 4, keep-with-next \ ??DataTable1: \ 00000000 ........ DC32 Pinger2 \ In segment CODE, align 4, keep-with-next \ ??DataTable2: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable4: \ 00000000 ........ DC32 menutext \ In segment CODE, align 4, keep-with-next \ ??DataTable6: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable13: \ 00000000 ........ DC32 Remind_Timer2 \ In segment CODE, align 4, keep-with-next \ ??DataTable16: \ 00000000 ........ DC32 GetTags \ In segment CODE, align 4, keep-with-next \ ??DataTable21: \ 00000000 ........ DC32 showAwayIdle \ In segment CODE, align 4, keep-with-next \ ??DataTable22: \ 00000000 ........ DC32 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable23: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable26: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable27: \ 00000000 ........ DC32 awayMsg \ In segment CODE, align 4, keep-with-next \ ??DataTable30: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable33: \ 00000000 ........ DC32 icons_names \ In segment CODE, align 4, keep-with-next \ ??DataTable41: \ 00000000 ........ DC32 def_setting \ In segment CODE, align 4, keep-with-next \ ??DataTable43: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable44: \ 00000000 ........ DC32 ind_set_xstatus \ In segment CODE, align 4, keep-with-next \ ??DataTable50: \ 00000000 ........ DC32 vibraPower \ In segment CODE, align 4, keep-with-next \ ??DataTable53: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable61: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable63: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable68: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable70: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable71: \ 00000000 ........ DC32 suc_config_name \ In segment CODE, align 4, keep-with-next \ ??DataTable72: \ 00000000 ........ DC32 suc_config_name_mod \ In segment CODE, align 4, keep-with-next \ ??DataTable73: \ 00000000 ........ DC32 janis \ In segment CODE, align 4, keep-with-next \ ??DataTable75: \ 00000000 ........ DC32 i_rc + 1200 \ In segment CODE, align 4, keep-with-next \ ??DataTable77: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable78: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable79: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable82: \ 00000000 ........ DC32 sndLostConn \ In segment CODE, align 4, keep-with-next \ ??DataTable84: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable86: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable87: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable89: \ 00000000 ........ DC32 ignor_list \ In segment CODE, align 4, keep-with-next \ ??DataTable90: \ 00000000 ........ DC32 extended_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable91: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable92: \ 00000000 ........ DC32 ext_type_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable93: \ 00000000 ........ DC32 Canvas + 8 \ In segment CODE, align 4, keep-with-next \ ??DataTable94: \ 00000000 ........ DC32 janis \ In segment CODE, align 4, keep-with-next \ ??DataTable96: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable98: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable99: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable100: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable101: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable111: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable112: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable113: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable115: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable116: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable117: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable118: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable119: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable120: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable121: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable122: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable128: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable131: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable133: \ 00000000 ........ DC32 CmdMenuHeader \ In segment CODE, align 4, keep-with-next \ ??DataTable134: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable135: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable137: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable138: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable139: \ 00000000 ........ DC32 ignor_list \ In segment CODE, align 4, keep-with-next \ ??DataTable140: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable141: \ 00000000 ........ DC32 awayMsg \ In segment CODE, align 4, keep-with-next \ ??DataTable142: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable148: \ 00000000 ........ DC32 PopupFont \ In segment CODE, align 4, keep-with-next \ ??DataTable149: \ 00000000 ........ DC32 NumStatusToIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable150: \ 00000000 ........ DC32 PopupBGCl \ In segment CODE, align 4, keep-with-next \ ??DataTable152: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable155: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable156: \ 00000000 ........ DC32 isLogStatusChange \ In segment CODE, align 4, keep-with-next \ ??DataTable157: \ 00000000 ........ DC32 extended_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable158: \ 00000000 ........ DC32 ext_type_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable159: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable160: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable163: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable165: \ 00000000 ........ DC32 Is_SMARTCPU_On \ In segment CODE, align 4, keep-with-next \ ??DataTable168: \ 00000000 ........ DC32 process_active_timer \ In segment CODE, align 4, keep-with-next \ ??DataTable169: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable171: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable178: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable186: \ 00000000 ........ DC32 isSystemFont \ In segment CODE, align 4, keep-with-next \ ??DataTable187: \ 00000000 ........ DC32 pngFont \ In segment CODE, align 4, keep-with-next \ ??DataTable188: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable190: \ 00000000 ........ DC32 i_rc + 1288 \ In segment CODE, align 4, keep-with-next \ ??DataTable193: \ 00000000 ........ DC32 i_rc + 9232 \ In segment CODE, align 4, keep-with-next \ ??DataTable197: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable201: \ 00000000 ........ DC32 PNG_SOFTKEY \ In segment CODE, align 4, keep-with-next \ ??DataTable204: \ 00000000 ........ DC32 menutext \ In segment CODE, align 4, keep-with-next \ ??DataTable205: \ 00000000 ........ DC32 SoftBackgrClr \ In segment CODE, align 4, keep-with-next \ ??DataTable206: \ 00000000 ........ DC32 SoftFontClr \ In segment CODE, align 4, keep-with-next \ ??DataTable208: \ 00000000 ........ DC32 PNG_HEADER \ In segment CODE, align 4, keep-with-next \ ??DataTable209: \ 00000000 ........ DC32 HeadFont \ In segment CODE, align 4, keep-with-next \ ??DataTable212: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable214: \ 00000000 ........ DC32 isSystemFont \ In segment CODE, align 4, keep-with-next \ ??DataTable215: \ 00000000 ........ DC32 pngFont \ In segment CODE, align 4, keep-with-next \ ??DataTable218: \ 00000000 ........ DC32 VIEW_MODE \ In segment CODE, align 4, keep-with-next \ ??DataTable220: \ 00000000 ........ DC32 Canvas + 8 \ In segment CODE, align 4, keep-with-next \ ??DataTable221: \ 00000000 ........ DC32 ShowProcessSend \ In segment CODE, align 4, keep-with-next \ ??DataTable222: \ 00000000 ........ DC32 isLogStatusChange \ In segment CODE, align 4, keep-with-next \ ??DataTable228: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable229: \ 00000000 ........ DC32 SOFT_MODE \ In segment CODE, align 4, keep-with-next \ ??DataTable235: \ 00000000 ........ DC32 VIEW_MODE \ In segment CODE, align 4, keep-with-next \ ??DataTable236: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable239: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable241: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable242: \ 00000000 ........ DC32 isSystemFont \ In segment CODE, align 4, keep-with-next \ ??DataTable243: \ 00000000 ........ DC32 pngFont \ In segment CODE, align 4, keep-with-next \ ??DataTable247: \ 00000000 ........ DC32 IsInvertSoftKey \ In segment CODE, align 4, keep-with-next \ ??DataTable250: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable252: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable254: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable255: \ 00000000 ........ DC32 process_active_timer \ In segment CODE, align 4, keep-with-next \ ??DataTable258: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable259: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable261: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable263: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable264: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable267: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable270: \ 00000000 ........ DC32 Is_SMARTCPU_On \ In segment CODE, align 4, keep-with-next \ ??DataTable272: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable273: \ 00000000 ........ DC32 showAwayIdle \ In segment CODE, align 4, keep-with-next \ ??DataTable276: \ 00000000 ........ DC32 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable279: \ 00000000 ........ DC32 suc_config_name_mod \ In segment CODE, align 4, keep-with-next \ ??DataTable287: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable288: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable289: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable291: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable292: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable293: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable294: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable295: \ 00000000 ........ DC32 sndLostConn \ In segment CODE, align 4, keep-with-next \ ??DataTable296: \ 00000000 ........ DC32 ClearSendQ \ In segment CODE, align 4, keep-with-next \ ??DataTable297: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable298: \ 00000000 ........ DC32 ShowStatusIcon \ In segment CODE, align 4, keep-with-next \ ??DataTable302: \ 00000000 ........ DC32 NumStatusToIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable306: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable307: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable308: \ 00000000 ........ DC32 suc_config_name \ In segment CODE, align 4, keep-with-next \ ??DataTable309: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable310: \ 00000000 ........ DC32 fontpath \ In segment CODE, align 4, keep-with-next \ ??DataTable311: \ 00000000 ........ DC32 fontpath2 \ In segment CODE, align 4, keep-with-next \ ??DataTable312: \ 00000000 ........ DC32 fontpath3 \ In segment CODE, align 4, keep-with-next \ ??DataTable313: \ 00000000 ........ DC32 fontpath4 \ In segment CODE, align 4, keep-with-next \ ??DataTable314: \ 00000000 ........ DC32 isSystemFont \ In segment CODE, align 4, keep-with-next \ ??DataTable315: \ 00000000 ........ DC32 pngFont \ In segment CODE, align 4, keep-with-next \ ??DataTable316: \ 00000000 ........ DC32 PNG_SOFTKEY \ In segment CODE, align 4, keep-with-next \ ??DataTable317: \ 00000000 ........ DC32 PNG_HEADER \ In segment CODE, align 4, keep-with-next \ ??DataTable318: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable319: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable320: \ 00000000 ........ DC32 Pinger2 \ In segment CODE, align 4, keep-with-next \ ??DataTable321: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable323: \ 00000000 ........ DC32 i_rc + 1200 \ In segment CODE, align 4, keep-with-next \ ??DataTable326: \ 00000000 ........ DC32 IsMultiBuffer \ In segment CODE, align 4, keep-with-next \ ??DataTable328: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable329: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable330: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable331: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable333: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable336: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable337: \ 00000000 ........ DC32 IsMultiBuffer \ In segment CODE, align 4, keep-with-next \ ??DataTable340: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable341: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable342: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable343: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable344: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable347: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable348: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable351: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable352: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable355: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable357: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable358: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable359: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable360: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable362: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable368: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable369: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable370: \ 00000000 ........ DC32 i_rc + 1168 \ In segment CODE, align 4, keep-with-next \ ??DataTable371: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable372: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable373: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable374: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable375: \ 00000000 ........ DC32 GetTags \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00000008 00000000 DC16 0, 0 \ 0000000C 08000000.... DC32 8, `?` \ .... \ `?`: \ 00000014 00000000 DC16 0, 0 \ 00000018 08000000.... DC32 8, `?` \ .... \ `?`: \ 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, 0, 0, 0, 0 \ 000000000000 \ 000000000000 \ 0000 \ `?`: \ 000000A4 ............ DC32 maincsm_onmessage, maincsm_oncreate, 0, 0, 0, 0, maincsm_onclose \ ....00000000 \ 000000000000 \ 000000000000 \ ........ \ 000000C0 2C0000000100 DC32 44, 1, minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ 0000........ \ ........CCCC \ AA5555AA3333 \ 00000000 \ 000000DC 8B00 DC16 139 \ 000000DE 0000 DC8 0, 0 \ 000000E0 49636F6E4261 DC8 "IconBar" \ 7200 \ 000000E8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000000F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000108 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000118 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000128 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000138 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000148 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000158 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000168 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000178 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000188 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000198 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000208 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000218 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000228 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000238 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000248 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000258 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000268 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000278 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000288 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 \ `?`: \ 0000029C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000002A8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002AC 00000000 DC32 0 \ `?`: \ 000002B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002C4 00000000 DC32 0 \ `?`: \ 000002C8 00000000 DC32 0 \ `?`: \ 000002CC 00000000 DC32 0 \ `?`: \ 000002D0 00000000 DC32 0H \ `?`: \ 000002D4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002D8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002DC 00000000 DC32 0 \ `?`: \ 000002E0 00000000 DC32 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 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000328 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000338 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000348 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000358 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000368 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000378 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000388 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000398 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 000003A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003A4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003A8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003AC 00000000 DC32 0 \ `?`: \ 000003B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000404 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000414 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000424 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000434 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000444 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000454 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00000460 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000464 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000468 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000046C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000470 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000474 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000478 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000047C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000480 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000484 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000488 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000048C F6FFFFFF DC32 -10 \ `?`: \ 00000490 00000000 DC32 0 \ `?`: \ 00000494 FFFFFFFF DC32 -1 \ `?`: \ 00000498 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000049C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004A4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004A8 01000000 DC32 1 \ `?`: \ 000004AC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004C0 00000000 DC32 0 \ `?`: \ 000004C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004CC 00000000 DC32 0 \ `?`: \ 000004D0 03000000 DC32 3 \ `?`: \ 000004D4 00000000 DC32 0 \ `?`: \ 000004D8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004DC 01000000 DC32 1 \ `?`: \ 000004E0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004E4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004E8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004EC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004F4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004FC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000500 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000504 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000508 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000050C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000510 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000514 01000000 DC32 1 \ `?`: \ 00000518 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000051C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000520 01000000 DC32 1 \ `?`: \ 00000524 00000000 DC32 0 \ `?`: \ 00000528 00000000 DC32 0 \ `?`: \ 0000052C 00000000 DC32 0 \ `?`: \ 00000530 00000000 DC32 0 \ `?`: \ 00000534 00000000 DC32 0 \ `?`: \ 00000538 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000053C 01000000 DC32 1 \ `?`: \ 00000540 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000544 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000554 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000564 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000574 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000584 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000594 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000604 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000614 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000624 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000634 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000644 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000654 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000664 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000674 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000684 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000694 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000006A4 ............ DC32 RqtXText, ChangeVibraContact, ChangeSoundContact, ChangeAutoMsg \ ............ \ ........ \ 000006B4 ............ DC32 ChangeShowXstatus, ChangeAccess, ChangeAwaySignal \ ............ \ 000006C0 ............ DC32 ChangeLoadHistory, ChangeAutobot \ .... \ 000006C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000006CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000070C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000071C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000072C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000073C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000074C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000075C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000076C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000077C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000078C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000079C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000007CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000080C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000081C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000082C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000083C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000084C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000085C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000086C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000087C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000088C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000089C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000090C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000091C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000092C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000093C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000094C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000095C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000096C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000097C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000098C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000099C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ABC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ACC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ADC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ECC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000100C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000101C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000102C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000103C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000104C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000105C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000106C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000107C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000108C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000109C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000110C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000111C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000112C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000113C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000114C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000115C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000116C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000117C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000118C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000119C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000120C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000121C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000122C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000123C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000124C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000125C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000126C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000127C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000128C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000129C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000130C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000131C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000132C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000133C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000134C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000135C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000136C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000137C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000138C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000139C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000140C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000141C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000142C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000143C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000144C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000145C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000146C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000147C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000148C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000149C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000150C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000151C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000152C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000153C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000154C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000155C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000156C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000157C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000158C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000159C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000160C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000161C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000162C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000163C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000164C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000165C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000166C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000167C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000168C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000169C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000170C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000171C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000172C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000173C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000174C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000175C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000176C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000177C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000178C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000179C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000180C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000181C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000182C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000183C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000184C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000185C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000186C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000187C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000188C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000189C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000190C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000191C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000192C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000193C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000194C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000195C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000196C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000197C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000198C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000199C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001ABC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001ACC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001ADC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00001BA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001BE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001BF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001C04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001C14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001C24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001C34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001C44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001C54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001CD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001CE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001DE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001ED4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001EE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001EF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 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 \ 00001FC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002004 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002014 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002024 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002034 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002044 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002054 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002064 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002074 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002084 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002094 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000020A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000020B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000020C0 257325642E25 DC8 "%s%d.%s" \ 7300 \ `?`: \ 000020C8 6D703300 DC8 "mp3" \ `?`: \ 000020CC 77617600 DC8 "wav" \ `?`: \ 000020D0 616D7200 DC8 "amr" \ `?`: \ 000020D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000020E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000020F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002104 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002114 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002124 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002134 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002144 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002154 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002164 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002174 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002184 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002194 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000021A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000021B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000021C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000021D4 53656E64696E DC8 "Sending online time..." \ 67206F6E6C69 \ 6E652074696D \ 652E2E2E00 \ 000021EB 00 DC8 0 \ `?`: \ 000021EC 53656E64696E DC8 "Sending msg info..." \ 67206D736720 \ 696E666F2E2E \ 2E00 \ `?`: \ 00002200 53656E64696E DC8 "Sending battery info..." \ 672062617474 \ 65727920696E \ 666F2E2E2E00 \ `?`: \ 00002218 53656E64696E DC8 "Sending mod info..." \ 67206D6F6420 \ 696E666F2E2E \ 2E00 \ `?`: \ 0000222C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000223C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000224C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000225C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000226C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000227C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000228C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000229C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000022AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000022BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000022CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000022DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000022EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000022FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000230C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000231C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000232C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00002334 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002344 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002354 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002364 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002374 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002384 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002394 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000023A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000023B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000023C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000023D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000023E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000023F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002404 00000064 DC8 0, 0, 0, 100 \ `?`: \ 00002408 FFFFFF64 DC8 255, 255, 255, 100 \ `?`: \ 0000240C FF000064 DC8 255, 0, 0, 100 \ `?`: \ 00002410 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00002414 0000FF6400 DC8 0, 0, 0FFH, 64H, 0 \ 00002419 000000 DC8 0, 0, 0 \ `?`: \ 0000241C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000242C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000243C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000244C 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 DC16 0, 0, 0, 0 \ 0000 \ 00000008 000000000000 DC32 0H, 0, 2147483647 \ 0000FFFFFF7F \ `?`: \ 00000014 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000018 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000001C 00000000 DC32 0 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 53656E64696E DC8 "Sending offline info..." \ 67206F66666C \ 696E6520696E \ 666F2E2E2E00 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 FFFFFFFF DC32 -1 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 474D54202D31 DC8 "GMT -11:00" \ 313A303000 \ 0000000B 00 DC8 0 \ 0000000C 474D54202D31 DC8 "GMT -10:00" \ 303A303000 \ 00000017 00 DC8 0 \ 00000018 474D54202D30 DC8 "GMT -09:00" \ 393A303000 \ 00000023 00 DC8 0 \ 00000024 474D54202D30 DC8 "GMT -08:00" \ 383A303000 \ 0000002F 00 DC8 0 \ 00000030 474D54202D30 DC8 "GMT -07:00" \ 373A303000 \ 0000003B 00 DC8 0 \ 0000003C 474D54202D30 DC8 "GMT -06:00" \ 363A303000 \ 00000047 00 DC8 0 \ 00000048 474D54202D30 DC8 "GMT -05:00" \ 353A303000 \ 00000053 00 DC8 0 \ 00000054 474D54202D30 DC8 "GMT -04:00" \ 343A303000 \ 0000005F 00 DC8 0 \ 00000060 474D54202D30 DC8 "GMT -03:30" \ 333A333000 \ 0000006B 00 DC8 0 \ 0000006C 474D54202D30 DC8 "GMT -03:00" \ 333A303000 \ 00000077 00 DC8 0 \ 00000078 474D54202D30 DC8 "GMT -02:00" \ 323A303000 \ 00000083 00 DC8 0 \ 00000084 474D54202D30 DC8 "GMT -01:00" \ 313A303000 \ 0000008F 00 DC8 0 \ 00000090 474D54203030 DC8 "GMT 00:00" \ 3A303000 \ 0000009A 0000 DC8 0, 0 \ 0000009C 474D54202B30 DC8 "GMT +01:00" \ 313A303000 \ 000000A7 00 DC8 0 \ 000000A8 474D54202B30 DC8 "GMT +02:00" \ 323A303000 \ 000000B3 00 DC8 0 \ 000000B4 474D54202B30 DC8 "GMT +03:00" \ 333A303000 \ 000000BF 00 DC8 0 \ 000000C0 474D54202B30 DC8 "GMT +03:30" \ 333A333000 \ 000000CB 00 DC8 0 \ 000000CC 474D54202B30 DC8 "GMT +04:00" \ 343A303000 \ 000000D7 00 DC8 0 \ 000000D8 474D54202B30 DC8 "GMT +04:30" \ 343A333000 \ 000000E3 00 DC8 0 \ 000000E4 474D54202B30 DC8 "GMT +05:00" \ 353A303000 \ 000000EF 00 DC8 0 \ 000000F0 474D54202B30 DC8 "GMT +05:30" \ 353A333000 \ 000000FB 00 DC8 0 \ 000000FC 474D54202B30 DC8 "GMT +05:45" \ 353A343500 \ 00000107 00 DC8 0 \ 00000108 474D54202B30 DC8 "GMT +06:00" \ 363A303000 \ 00000113 00 DC8 0 \ 00000114 474D54202B30 DC8 "GMT +06:30" \ 363A333000 \ 0000011F 00 DC8 0 \ 00000120 474D54202B30 DC8 "GMT +07:00" \ 373A303000 \ 0000012B 00 DC8 0 \ 0000012C 474D54202B30 DC8 "GMT +08:00" \ 383A303000 \ 00000137 00 DC8 0 \ 00000138 474D54202B30 DC8 "GMT +09:00" \ 393A303000 \ 00000143 00 DC8 0 \ 00000144 474D54202B30 DC8 "GMT +09:30" \ 393A333000 \ 0000014F 00 DC8 0 \ 00000150 474D54202B31 DC8 "GMT +10:00" \ 303A303000 \ 0000015B 00 DC8 0 \ 0000015C 474D54202B31 DC8 "GMT +11:00" \ 313A303000 \ 00000167 00 DC8 0 \ 00000168 474D54202B31 DC8 "GMT +12:00" \ 323A303000 \ 00000173 00 DC8 0 \ 00000174 474D54202B31 DC8 "GMT +13:00" \ 333A303000 \ 0000017F 00 DC8 0 \ 00000180 474D54202D31 DC8 "GMT -12:00" \ 323A303000 \ 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 25735C25642E DC8 "%s\\%d.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5C25642E7478 DC8 "\\%d.txt" \ 7400 \ 00000008 5C302E747874 DC8 "\\0.txt" \ 00 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5C626F745F25 DC8 "\\bot_%d.txt" \ 642E74787400 \ 0000000C 5C626F742E74 DC8 "\\bot.txt" \ 787400 \ 00000015 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5C6C6F63616C DC8 "\\local.cl" \ 2E636C00 \ 0000000A 0000 DC8 0, 0 \ 0000000C 3B25643B2573 DC8 ";%d;%s;;;\015\012" \ 3B3B3B0D0A00 \ 00000018 536176656420 DC8 "Saved local.cl" \ 6C6F63616C2E \ 636C00 \ 00000027 00 DC8 0 \ 00000028 43616E277420 DC8 "Can't save local.cl" \ 73617665206C \ 6F63616C2E63 \ 6C00 \ In segment DATA_C, align 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 204A756C6520 DC8 20H, 4AH, 75H, 6CH, 65H, 20H, 31H, 33H \ 3133 \ 00000048 203230303820 DC8 20H, 32H, 30H, 30H, 38H, 20H, 61H, 74H \ 6174 \ 00000050 2031343A3033 DC8 20H, 31H, 34H, 3AH, 30H, 33H, 3AH, 35H \ 3A35 \ 00000058 3900 DC8 39H, 0 \ 0000005A 0000 DC8 0, 0 \ 0000005C C0E2F2EEF1EE DC8 "\300\342\362\356\361\356\356\341\371\345\355\350\345: \307\340\357\360\356\361 \357\350\355\343\340 \342 %02d:%02d:%02d" \ EEE1F9E5EDE8 \ E53A20C7E0EF \ F0EEF120EFE8 \ EDE3E020E220 \ 253032643A25 \ 3032643A2530 \ 326400 \ 00000089 000000 DC8 0, 0, 0 \ 0000008C 5F5F50494E47 DC8 "__PING" \ 00 \ 00000093 00 DC8 0 \ 00000094 70696E6700 DC8 "ping" \ 00000099 000000 DC8 0, 0, 0 \ 0000009C 50696E6700 DC8 "Ping" \ 000000A1 000000 DC8 0, 0, 0 \ 000000A4 CFE8EDE300 DC8 "\317\350\355\343" \ 000000A9 000000 DC8 0, 0, 0 \ 000000AC C7F8F2EF00 DC8 "\307\370\362\357" \ 000000B1 000000 DC8 0, 0, 0 \ 000000B4 2573206D6F64 DC8 "%s model: %s sw: %s\015\012" \ 656C3A202573 \ 2073773A2025 \ 730D0A00 \ 000000CA 0000 DC8 0, 0 \ 000000CC 506C6174666F DC8 "Platform: \250LKA" \ 726D3A20A84C \ 4B4100 \ 000000DB 00 DC8 0 \ 000000DC C2F0E5ECFF20 DC8 0C2H, 0F0H, 0E5H, 0ECH, 0FFH, 20H, 0E2H, 20H \ E220 \ 000000E4 EEEDEBE0E9ED DC8 0EEH, 0EDH, 0EBH, 0E0H, 0E9H, 0EDH, 3AH, 20H \ 3A20 \ 000000EC 253032643A25 DC8 25H, 30H, 32H, 64H, 3AH, 25H, 30H, 32H \ 3032 \ 000000F4 643A25303264 DC8 64H, 3AH, 25H, 30H, 32H, 64H, 20H, 0DH \ 200D \ 000000FC 0AD1E5F0E2E5 DC8 0AH, 0D1H, 0E5H, 0F0H, 0E2H, 0E5H, 0F0H, 3AH \ F03A \ 00000104 202573200D0A DC8 20H, 25H, 73H, 20H, 0DH, 0AH, 25H, 73H \ 2573 \ 0000010C 200D0A00 DC8 20H, 0DH, 0AH, 0 \ 00000110 CEF2EFF0E0E2 DC8 0CEH, 0F2H, 0EFH, 0F0H, 0E0H, 0E2H, 0EBH, 0E5H \ EBE5 \ 00000118 EDEE20F1EEEE DC8 0EDH, 0EEH, 20H, 0F1H, 0EEH, 0EEH, 0E1H, 0F9H \ E1F9 \ 00000120 E5EDE8E93A20 DC8 0E5H, 0EDH, 0E8H, 0E9H, 3AH, 20H, 25H, 64H \ 2564 \ 00000128 200D0ACFF0E8 DC8 20H, 0DH, 0AH, 0CFH, 0F0H, 0E8H, 0EDH, 0FFH \ EDFF \ 00000130 F2EE20F1EEEE DC8 0F2H, 0EEH, 20H, 0F1H, 0EEH, 0EEH, 0E1H, 0F9H \ E1F9 \ 00000138 E5EDE8E93A20 DC8 0E5H, 0EDH, 0E8H, 0E9H, 3AH, 20H, 25H, 64H \ 2564 \ 00000140 200D0A00 DC8 20H, 0DH, 0AH, 0 \ 00000144 CEEFE5F0E0F2 DC8 "\316\357\345\360\340\362\356\360: %s \015\012" \ EEF03A202573 \ 200D0A00 \ 00000154 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 \ 00000173 00 DC8 0 \ 00000174 547261666669 DC8 54H, 72H, 61H, 66H, 66H, 69H, 63H, 3AH \ 633A \ 0000017C 205278203A20 DC8 20H, 52H, 78H, 20H, 3AH, 20H, 25H, 64H \ 2564 \ 00000184 62205478203A DC8 62H, 20H, 54H, 78H, 20H, 3AH, 20H, 25H \ 2025 \ 0000018C 646220517565 DC8 64H, 62H, 20H, 51H, 75H, 65H, 75H, 65H \ 7565 \ 00000194 3A2025646220 DC8 3AH, 20H, 25H, 64H, 62H, 20H, 0DH, 0AH \ 0D0A \ 0000019C 54696D653A20 DC8 54H, 69H, 6DH, 65H, 3AH, 20H, 25H, 30H \ 2530 \ 000001A4 32643A253032 DC8 32H, 64H, 3AH, 25H, 30H, 32H, 64H, 0DH \ 640D \ 000001AC 0A4F6E6C696E DC8 0AH, 4FH, 6EH, 6CH, 69H, 6EH, 65H, 20H \ 6520 \ 000001B4 636F6E746163 DC8 63H, 6FH, 6EH, 74H, 61H, 63H, 74H, 3AH \ 743A \ 000001BC 202564205B74 DC8 20H, 25H, 64H, 20H, 5BH, 74H, 6FH, 74H \ 6F74 \ 000001C4 616C3A202564 DC8 61H, 6CH, 3AH, 20H, 25H, 64H, 5DH, 20H \ 5D20 \ 000001CC 0D0A556E7265 DC8 0DH, 0AH, 55H, 6EH, 72H, 65H, 61H, 64H \ 6164 \ 000001D4 206D65737361 DC8 20H, 6DH, 65H, 73H, 73H, 61H, 67H, 65H \ 6765 \ 000001DC 3A2025642F25 DC8 3AH, 20H, 25H, 64H, 2FH, 25H, 64H, 20H \ 6420 \ 000001E4 00 DC8 0 \ 000001E5 000000 DC8 0, 0, 0 \ 000001E8 53656E64696E DC8 "Sending textinfo..." \ 672074657874 \ 696E666F2E2E \ 2E00 \ 000001FC 5F5F54455854 DC8 "__TEXTINFO" \ 494E464F00 \ 00000207 00 DC8 0 \ 00000208 5F5F544900 DC8 "__TI" \ 0000020D 000000 DC8 0, 0, 0 \ 00000210 54696D653A20 DC8 "Time: %02d:%02d" \ 253032643A25 \ 30326400 \ 00000220 53656E64696E DC8 "Sending time..." \ 672074696D65 \ 2E2E2E00 \ 00000230 5F5F54494D45 DC8 "__TIME" \ 00 \ 00000237 00 DC8 0 \ 00000238 4745545F5449 DC8 "GET_TIME" \ 4D4500 \ 00000241 000000 DC8 0, 0, 0 \ 00000244 2573206D6F64 DC8 "%s model: %s sw: %s" \ 656C3A202573 \ 2073773A2025 \ 7300 \ 00000258 53656E64696E DC8 "Sending platform info..." \ 6720706C6174 \ 666F726D2069 \ 6E666F2E2E2E \ 00 \ 00000271 000000 DC8 0, 0, 0 \ 00000274 4745545F504C DC8 "GET_PLATFORM_INFO" \ 4154464F524D \ 5F494E464F00 \ 00000286 0000 DC8 0, 0 \ 00000288 5F5F504C4154 DC8 "__PLATFORM" \ 464F524D00 \ 00000293 00 DC8 0 \ 00000294 5F5F485700 DC8 "__HW" \ 00000299 000000 DC8 0, 0, 0 \ 0000029C 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 \ 000002C7 00 DC8 0 \ 000002C8 4745545F4F4E DC8 "GET_ONLINE_TIME" \ 4C494E455F54 \ 494D4500 \ 000002D8 5F5F4F4E4C49 DC8 "__ONLINE" \ 4E4500 \ 000002E1 000000 DC8 0, 0, 0 \ 000002E4 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 \ 00000314 4745545F4D53 DC8 "GET_MSG_INFO" \ 475F494E464F \ 00 \ 00000321 000000 DC8 0, 0, 0 \ 00000324 5F5F4D534700 DC8 "__MSG" \ 0000032A 0000 DC8 0, 0 \ 0000032C CEEFE5F0E0F2 DC8 "\316\357\345\360\340\362\356\360: %s" \ EEF03A202573 \ 00 \ 00000339 000000 DC8 0, 0, 0 \ 0000033C 53656E64696E DC8 "Sending provider name..." \ 672070726F76 \ 69646572206E \ 616D652E2E2E \ 00 \ 00000355 000000 DC8 0, 0, 0 \ 00000358 4745545F5052 DC8 "GET_PROVIDER" \ 4F5649444552 \ 00 \ 00000365 000000 DC8 0, 0, 0 \ 00000368 5F5F50524F56 DC8 "__PROVIDER" \ 4944455200 \ 00000373 00 DC8 0 \ 00000374 2A2A2A416363 DC8 "***Access denied***" \ 657373206465 \ 6E6965642A2A \ 2A00 \ 00000388 4745545F4D4F DC8 "GET_MOD_INFO" \ 445F494E464F \ 00 \ 00000395 000000 DC8 0, 0, 0 \ 00000398 5F5F4D4F4400 DC8 "__MOD" \ 0000039E 0000 DC8 0, 0 \ 000003A0 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 \ 000003BC 4745545F4241 DC8 "GET_BAT_INFO" \ 545F494E464F \ 00 \ 000003C9 000000 DC8 0, 0, 0 \ 000003CC 5F5F42415400 DC8 "__BAT" \ 000003D2 0000 DC8 0, 0 \ 000003D4 C0E2F2EEEEF2 DC8 "\300\342\362\356\356\362\342\345\362\367\350\352: %s %s! %s %s" \ E2E5F2F7E8EA \ 3A2025732025 \ 732120257320 \ 257300 \ 000003EF 00 DC8 0 \ 000003F0 726576697369 DC8 "revision 2058, mod date: %s at %s " \ 6F6E20323035 \ 382C206D6F64 \ 20646174653A \ 202573206174 \ 2025732000 \ 00000413 00 DC8 0 \ 00000414 687474703A2F DC8 "http://kluchnik.jino-net.ru/naticqmod/" \ 2F6B6C756368 \ 6E696B2E6A69 \ 6E6F2D6E6574 \ 2E72752F6E61 \ 746963716D6F \ 642F00 \ 0000043B 00 DC8 0 \ 0000043C 466562202037 DC8 "Feb 7 2009" \ 203230303900 \ 00000448 31343A34333A DC8 "14:43:43" \ 343300 \ 00000451 000000 DC8 0, 0, 0 \ 00000454 53656E64696E DC8 "Sending url info..." \ 672075726C20 \ 696E666F2E2E \ 2E00 \ 00000468 4745545F5552 DC8 "GET_URL_INFO" \ 4C5F494E464F \ 00 \ 00000475 000000 DC8 0, 0, 0 \ 00000478 5F5F55524C00 DC8 "__URL" \ 0000047E 0000 DC8 0, 0 \ 00000480 4175746F626F DC8 "Autobot" \ 7400 \ 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 4, align-sorted \ `?_2`: \ 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 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 0000000000 \ 00000011 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 0000003000 DC8 0, 0, 0, 30H, 0 \ 00000005 000000 DC8 0, 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 2573202D2025 DC8 "%s - %d(%d)" \ 642825642900 \ 0000000C 343A5C6E6174 DC8 "4:\\nata.txt" \ 612E74787400 \ 00000018 4572726F7221 DC8 "Error!" \ 00 \ 0000001F 00 DC8 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 0D0A00 DC8 "\015\012" \ In segment DATA_C, align 4, align-sorted \ 00000000 20256400 DC8 " %d" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 0000004000 DC8 0, 0, 0, 40H, 0 \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CCE5EDFE00 DC8 "\314\345\355\376" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5B415D202573 DC8 "[A] %s" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?_1`: \ 00000000 5B565D00 DC8 "[V]" \ In segment DATA_C, align 4, align-sorted \ `?_1`: \ 00000000 5B535D00 DC8 "[S]" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4E4154494351 DC8 "NATICQ: %d" \ 3A20256400 \ 0000000B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 43ECE0E9EBFB DC8 "C\354\340\351\353\373" \ 00 \ 00000007 00 DC8 0 \ 00000008 C220E1F3F4E5 DC8 "\302 \341\363\364\345\360" \ F000 \ 00000010 C8E720E1F3F4 DC8 "\310\347 \341\363\364\345\360\340" \ E5F0E000 \ 0000001A 0000 DC8 0, 0 \ 0000001C CAEEECE0EDE4 DC8 "\312\356\354\340\355\344\340" \ E000 \ 00000024 CEF7E8F1F2E8 DC8 "\316\367\350\361\362\350\362\374 \341\363\364\345\360" \ F2FC20E1F3F4 \ E5F000 \ 00000033 00 DC8 0 \ 00000034 D1EBE5E4F3FE DC8 "\321\353\345\344\363\376\371\350\351 \367\340\362" \ F9E8E920F7E0 \ F200 \ 00000042 0000 DC8 0, 0 \ 00000044 CFF0E5E4FBE4 DC8 "\317\360\345\344\373\344\363\371\350\351 \367\340\362" \ F3F9E8E920F7 \ E0F200 \ 00000053 00 DC8 0 \ 00000054 CAEEECE0EDE4 DC8 "\312\356\354\340\355\344\373" \ FB00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 616263646566 DC8 61H, 62H, 63H, 64H, 65H, 66H, 67H, 68H \ 6768 \ 00000008 696A6B6C6D6E DC8 69H, 6AH, 6BH, 6CH, 6DH, 6EH, 6FH, 70H \ 6F70 \ 00000010 717273747576 DC8 71H, 72H, 73H, 74H, 75H, 76H, 77H, 78H \ 7778 \ 00000018 797A41424344 DC8 79H, 7AH, 41H, 42H, 43H, 44H, 45H, 46H \ 4546 \ 00000020 4748494A4B4C DC8 47H, 48H, 49H, 4AH, 4BH, 4CH, 4DH, 4EH \ 4D4E \ 00000028 4F5051525354 DC8 4FH, 50H, 51H, 52H, 53H, 54H, 55H, 56H \ 5556 \ 00000030 5758595A3031 DC8 57H, 58H, 59H, 5AH, 30H, 31H, 32H, 33H \ 3233 \ 00000038 343536373839 DC8 34H, 35H, 36H, 37H, 38H, 39H, 24H, 2DH \ 242D \ 00000040 5F2E2B212A27 DC8 5FH, 2EH, 2BH, 21H, 2AH, 27H, 28H, 29H \ 2829 \ 00000048 2C253B3A4026 DC8 2CH, 25H, 3BH, 3AH, 40H, 26H, 3DH, 2FH \ 3D2F \ 00000050 3FE0E1E2E3E4 DC8 3FH, 0E0H, 0E1H, 0E2H, 0E3H, 0E4H, 0E5H, 0B8H \ E5B8 \ 00000058 E6E7E8E9EAEB DC8 0E6H, 0E7H, 0E8H, 0E9H, 0EAH, 0EBH, 0ECH, 0EDH \ ECED \ 00000060 EEEFF0F1F2F3 DC8 0EEH, 0EFH, 0F0H, 0F1H, 0F2H, 0F3H, 0F4H, 0F5H \ F4F5 \ 00000068 F6F7F8F9FAFB DC8 0F6H, 0F7H, 0F8H, 0F9H, 0FAH, 0FBH, 0FCH, 0FDH \ FCFD \ 00000070 FEFFC0C1C2C3 DC8 0FEH, 0FFH, 0C0H, 0C1H, 0C2H, 0C3H, 0C4H, 0C5H \ C4C5 \ 00000078 A8C6C7C8C9CA DC8 0A8H, 0C6H, 0C7H, 0C8H, 0C9H, 0CAH, 0CBH, 0CCH \ CBCC \ 00000080 CDCECFD0D1D2 DC8 0CDH, 0CEH, 0CFH, 0D0H, 0D1H, 0D2H, 0D3H, 0D4H \ D3D4 \ 00000088 D5D6D7D8D9DA DC8 0D5H, 0D6H, 0D7H, 0D8H, 0D9H, 0DAH, 0DBH, 0DCH \ DBDC \ 00000090 DDDEDF00 DC8 0DDH, 0DEH, 0DFH, 0 \ 00000094 687474703A2F DC8 "http://" \ 2F00 \ 0000009C 7777772E00 DC8 "www." \ 000000A1 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4D6573736167 DC8 "Message add to buffer" \ 652061646420 \ 746F20627566 \ 66657200 \ 00000016 0000 DC8 0, 0 \ 00000018 25735C746D70 DC8 "%s\\tmp%u.url" \ 25752E75726C \ 00 \ 00000025 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 526571756573 DC8 "Request info..." \ 7420696E666F \ 2E2E2E00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25735C25755C DC8 "%s\\%u\\%s(%d).txt" \ 257328256429 \ 2E74787400 \ 00000011 000000 DC8 0, 0, 0 \ 00000014 25735C257328 DC8 "%s\\%s(%d).txt" \ 2564292E7478 \ 7400 \ 00000022 0000 DC8 0, 0 \ 00000024 25735C25755C DC8 "%s\\%u\\%u.txt" \ 25752E747874 \ 00 \ 00000031 000000 DC8 0, 0, 0 \ 00000034 25735C25752E DC8 "%s\\%u.txt" \ 74787400 \ 0000003E 0000 DC8 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 257500 DC8 "%u" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F66666C696E DC8 "offline.png" \ 652E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 696E76697369 DC8 "invisible.png" \ 626C652E706E \ 6700 \ 0000000E 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 617761792E70 DC8 "away.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6E612E706E67 DC8 "na.png" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F6363757069 DC8 "occupied.png" \ 65642E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 646E642E706E DC8 "dnd.png" \ 6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 646570726573 DC8 "depression.png" \ 73696F6E2E70 \ 6E6700 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6576696C2E70 DC8 "evil.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 686F6D652E70 DC8 "home.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6C756E63682E DC8 "lunch.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 776F726B2E70 DC8 "work.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F6E6C696E65 DC8 "online.png" \ 2E706E6700 \ 0000000B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6666632E706E DC8 "ffc.png" \ 6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6D6573736167 DC8 "message.png" \ 652E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 756E6B6E6F77 DC8 "unknown.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupon.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupoff.png" \ 66662E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6E756C6C2E70 DC8 "null.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 616464636F6E DC8 "addcont.png" \ 742E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 686561642E70 DC8 "head.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6C6F676F2E70 DC8 "logo.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 70696E672E70 DC8 "ping.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 73657474696E DC8 "settings.png" \ 67732E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973312E70 DC8 "vis1.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973322E70 DC8 "vis2.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973332E70 DC8 "vis3.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973342E70 DC8 "vis4.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973352E70 DC8 "vis5.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 70696E67312E DC8 "ping1.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 70696E67322E DC8 "ping2.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 70696E67332E DC8 "ping3.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 70696E67342E DC8 "ping4.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 62672E706E67 DC8 "bg.png" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CBE5E200 DC8 "\313\345\342" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CFF0E0E200 DC8 "\317\360\340\342" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 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 1, align-sorted \ `?`: \ 00000000 00 DC8 "" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2E8E1F0E000 DC8 "\302\350\341\360\340" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7E2F3EA00 DC8 "\307\342\363\352" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 41E2F2EEE1EE DC8 "A\342\362\356\341\356\362" \ F200 \ In segment DATA_C, align 4, align-sorted \ `? 232 def_setting 48 ? 64 menusoftkeys 12 menu_sk 24 menu_skt 8 CmdSoftkeys 12 cmd_sk 24 cmd_Back_skt 8 ? 76 menutext 228 clrSelect 4 fntSelect 4 bordSelect 4 clrNotSelect 4 bordNotSelect 4 fntNotSelect 4 I_gui_methods 44 _t 3 maincsm_oncreate 308 maincsm_onclose 360 do_reconnect 40 CheckDoubleRun 128 checkGui 60 maincsm_onmessage 3096 addIconBar 740 minus11 4 maincsm_name_body 280 UpdateCSMname 36 SetIconBarHandler 20 main 596 edchat_locret 4 ExtractAnswer 280 ??FindNextActiveContact_0 64 FindPrevActiveContact 88 ed_options_handler 1208 wstrstr 124 IsUrl 424 ParseAnswer 548 SaveAnswer 36 GetTempName 172 DMonth 52 recon 52 edchat_onkey 1696 my_ed_redraw 116 edchat_ghook 564 edchat_desc 84 sk 16 CreateEditChat 1160 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 i_rc 9308 sk 8 input_awaymsg_sk 24 input_awaymsg_skt 8 CmdMenuHeader 32 requests6 24 lastKey 4 ecmenu_HDR 64 ec_menu 360 AskNickAndAddContact 8 AddSmile 24 ??DataTable1 4 ??DataTable2 4 ??DataTable4 4 ??DataTable6 4 ??DataTable13 4 ??DataTable16 4 ??DataTable21 4 ??DataTable22 4 ??DataTable23 4 ??DataTable26 4 ??DataTable27 4 ??DataTable30 4 ??DataTable33 4 ??DataTable41 4 ??DataTable43 4 ??DataTable44 4 ??DataTable50 4 ??DataTable53 4 ??DataTable61 4 ??DataTable63 4 ??DataTable68 4 ??DataTable70 4 ??DataTable71 4 ??DataTable72 4 ??DataTable73 4 ??DataTable75 4 ??DataTable77 4 ??DataTable78 4 ??DataTable79 4 ??DataTable82 4 ??DataTable84 4 ??DataTable86 4 ??DataTable87 4 ??DataTable89 4 ??DataTable90 4 ??DataTable91 4 ??DataTable92 4 ??DataTable93 4 ??DataTable94 4 ??DataTable96 4 ??DataTable98 4 ??DataTable99 4 ??DataTable100 4 ??DataTable101 4 ??DataTable111 4 ??DataTable112 4 ??DataTable113 4 ??DataTable115 4 ??DataTable116 4 ??DataTable117 4 ??DataTable118 4 ??DataTable119 4 ??DataTable120 4 ??DataTable121 4 ??DataTable122 4 ??DataTable128 4 ??DataTable131 4 ??DataTable133 4 ??DataTable134 4 ??DataTable135 4 ??DataTable137 4 ??DataTable138 4 ??DataTable139 4 ??DataTable140 4 ??DataTable141 4 ??DataTable142 4 ??DataTable148 4 ??DataTable149 4 ??DataTable150 4 ??DataTable152 4 ??DataTable155 4 ??DataTable156 4 ??DataTable157 4 ??DataTable158 4 ??DataTable159 4 ??DataTable160 4 ??DataTable163 4 ??DataTable165 4 ??DataTable168 4 ??DataTable169 4 ??DataTable171 4 ??DataTable178 4 ??DataTable186 4 ??DataTable187 4 ??DataTable188 4 ??DataTable190 4 ??DataTable193 4 ??DataTable197 4 ??DataTable201 4 ??DataTable204 4 ??DataTable205 4 ??DataTable206 4 ??DataTable208 4 ??DataTable209 4 ??DataTable212 4 ??DataTable214 4 ??DataTable215 4 ??DataTable218 4 ??DataTable220 4 ??DataTable221 4 ??DataTable222 4 ??DataTable228 4 ??DataTable229 4 ??DataTable235 4 ??DataTable236 4 ??DataTable239 4 ??DataTable241 4 ??DataTable242 4 ??DataTable243 4 ??DataTable247 4 ??DataTable250 4 ??DataTable252 4 ??DataTable254 4 ??DataTable255 4 ??DataTable258 4 ??DataTable259 4 ??DataTable261 4 ??DataTable263 4 ??DataTable264 4 ??DataTable267 4 ??DataTable270 4 ??DataTable272 4 ??DataTable273 4 ??DataTable276 4 ??DataTable279 4 ??DataTable287 4 ??DataTable288 4 ??DataTable289 4 ??DataTable291 4 ??DataTable292 4 ??DataTable293 4 ??DataTable294 4 ??DataTable295 4 ??DataTable296 4 ??DataTable297 4 ??DataTable298 4 ??DataTable302 4 ??DataTable306 4 ??DataTable307 4 ??DataTable308 4 ??DataTable309 4 ??DataTable310 4 ??DataTable311 4 ??DataTable312 4 ??DataTable313 4 ??DataTable314 4 ??DataTable315 4 ??DataTable316 4 ??DataTable317 4 ??DataTable318 4 ??DataTable319 4 ??DataTable320 4 ??DataTable321 4 ??DataTable323 4 ??DataTable326 4 ??DataTable328 4 ??DataTable329 4 ??DataTable330 4 ??DataTable331 4 ??DataTable333 4 ??DataTable336 4 ??DataTable337 4 ??DataTable340 4 ??DataTable341 4 ??DataTable342 4 ??DataTable343 4 ??DataTable344 4 ??DataTable347 4 ??DataTable348 4 ??DataTable351 4 ??DataTable352 4 ??DataTable355 4 ??DataTable357 4 ??DataTable358 4 ??DataTable359 4 ??DataTable360 4 ??DataTable362 4 ??DataTable368 4 ??DataTable369 4 ??DataTable370 4 ??DataTable371 4 ??DataTable372 4 ??DataTable373 4 ??DataTable374 4 ??DataTable375 4 ? 9308 ? 8 ? 24 ? 8 ? 32 ? 24 ? 4 ? 396 ? 32 ? 16 ? 3 ? 12 ? 16 ? 24 ? 60 ? 2 ? 40 ? 12 ? 3 ? 8 ? 64 ? 12 ? 132 ? 4 ? 1160 ? 4 ? 8 ?_1 8 ?_2 8 ? 3 ? 32 ? 8 ? 4 ? 4 ? 32 ? 3 ? 4 ? 8 ? 8 ? 8 ?_1 4 ?_1 4 ? 12 ? 92 ? 164 ? 40 ? 16 ? 64 ? 3 ? 12 ? 16 ? 12 ? 8 ? 16 ? 8 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 8 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 12 ? 12 ? 12 ? 12 ? 8 ? 4 ? 8 ? 8 ? 8 ? 1 ? 8 ? 8 ? 8 ?