############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 30/Sep/2008 22:35:47 # # 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 --preprocess D:\Pasha\elf\_MY_PROJECT_\nati # # cq_mod2\ESKA\List\ -lC D:\Pasha\elf\_MY_PROJECT_\nat # # icq_mod2\ESKA\List\ -o D:\Pasha\elf\_MY_PROJECT_\nat # # icq_mod2\ESKA\Obj\ -s9 --no_unroll --cpu_mode arm # # --endian little --cpu ARM926EJ-S --stack_align 4 # # --interwork -e --fpu None --dlib_config # # "D:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\LIB\dl5tpainl8n.h" -I # # "D:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\INC\" --inline_threshold=2 # # List file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\ESKA\List\main # # .lst # # Object file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\ESKA\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 const char _rn[]="\r\n"; 37 #define LOG 38 39 #ifdef LOG 40 static void logwrite(char *text) 41 { 42 int hFile; 43 unsigned int io_error = 0; 44 hFile = fopen("4:\\natlog.txt",A_ReadWrite + A_Create + A_Append,P_READ+P_WRITE, &io_error); 45 if(hFile!=-1) 46 { 47 fwrite(hFile, text, strlen(text), &io_error); 48 fwrite(hFile, _rn, 2, &io_error); 49 fclose(hFile, &io_error); 50 } 51 else 52 ShowMSG(1,(int)"Error!"); 53 // mfree(text); 54 } 55 #endif 56 57 //------------- ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ -------------// 58 59 int main_d; 60 int align=0; 61 //int space=1; 62 void *canvasdata; 63 int paused_height; 64 WSHDR *wsBuffer;//мультибуффер 65 66 char talk_sound[128]; 67 int uins; 68 //char m_1[]="unofficial! private use only"; 69 //char m_2[]="mod by (c)Evilfox 315384924"; 70 char unread_msg_info[64]; 71 72 int saver_on; 73 74 #ifdef NEWSGOLD 75 extern char teast2[256]; 76 #endif 77 78 //#ifdef ELKA 79 char last_msg_buffer[4096]; 80 //#endif 81 82 83 //-------------------------------------------------// 84 85 char prmsg[256];//вывод попап в контакт листе 86 int PrintTimer=0;//время попап 87 int curping=0; //тукущий пинг 88 89 volatile int sendq_l=0; //Длинна очереди для send 90 volatile void *sendq_p=NULL; //указатель очереди 91 92 extern const char *suc_config_name_mod; 93 94 95 int main_count; 96 int main2_count; 97 98 int DoRefreshCL=0;//Если нада обновить КЛ \ In segment CODE, align 4, keep-with-next 99 void RefreshCL() 100 { 101 DoRefreshCL=1; \ RefreshCL: \ 00000000 08009FE5 LDR R0,??RefreshCL_0 ;; i_rc + 692 \ 00000004 0110A0E3 MOV R1,#+1 \ 00000008 001080E5 STR R1,[R0, #+0] 102 } \ 0000000C 1EFF2FE1 BX LR ;; return \ ??RefreshCL_0: \ 00000010 ........ DC32 i_rc + 692 103 104 int ifJustNowRefresh=0;//Надо обновить поключившихся \ In segment CODE, align 4, keep-with-next 105 void RefreshJustNow() 106 { 107 ifJustNowRefresh=1; \ RefreshJustNow: \ 00000000 08009FE5 LDR R0,??RefreshJustNow_0 ;; i_rc + 696 \ 00000004 0110A0E3 MOV R1,#+1 \ 00000008 001080E5 STR R1,[R0, #+0] 108 } \ 0000000C 1EFF2FE1 BX LR ;; return \ ??RefreshJustNow_0: \ 00000010 ........ DC32 i_rc + 696 109 //-------------------- AUTOPING -------------------// 110 111 GBSTMR ping_tmr; 112 static void PingToServer2(void) 113 { 114 TPKT *p; 115 p=malloc(sizeof(PKT)+sizeof(TTime)); 116 GetDateTime(NULL,(TTime *)p->data); 117 p->pkt.uin=0; 118 p->pkt.type=T_ECHO; 119 p->pkt.data_len=sizeof(TTime); 120 SUBPROC((void *)SendAnswer,0,p); 121 } 122 123 int Is_PING_On; 124 \ In segment CODE, align 4, keep-with-next 125 void Pinger2() 126 { 127 if(Is_PING_On) \ Pinger2: \ 00000000 ........ LDR R0,??DataTable34 ;; i_rc \ 00000004 70402DE9 PUSH {R4-R6,LR} \ 00000008 ........ LDR R5,??DataTable1 ;; Pinger2 \ 0000000C 4810A0E3 MOV R1,#+72 \ 00000010 641D81E3 ORR R1,R1,#0x1900 \ 00000014 004081E0 ADD R4,R1,R0 \ 00000018 BC1290E5 LDR R1,[R0, #+700] \ 0000001C 000051E3 CMP R1,#+0 \ 00000020 1800000A BEQ ??Pinger2_0 128 { 129 if(sendq_l<32)//если буфер для отправки меньше 32 байт то пингуем,чтобы не забивать очередь, тест... \ 00000024 A40290E5 LDR R0,[R0, #+676] \ 00000028 200050E3 CMP R0,#+32 \ 0000002C 0F0000AA BGE ??Pinger2_1 130 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 131 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} 132 } 133 else 134 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 135 } \ 00000098 7080BDE8 POP {R4-R6,PC} ;; return 136 137 //-------------------------------------------------// 138 139 140 141 extern volatile int total_smiles; 142 extern volatile int total_xstatuses; 143 extern volatile int xstatuses_load; 144 extern volatile int pictures_max; //2026rev 145 extern volatile int pictures_loaded; //2026rev 146 147 #ifdef ELKA 148 int Is_SLI_On;//мигаем светодиодом 149 #endif 150 151 //int Is_SMARTCPU_On;//Вывод сообщений на гэ 152 int Is_INC_On;//Popup message 153 int Is_ILU_On;//Режим подсветки 154 int Is_Double_Vibra_On;//Режим напоминания 155 int total_unread; 156 int total_unread2; 157 158 #ifdef ELKA 159 const int SLI_TYPE=1; 160 #endif 161 162 char PINGO[256]; 163 164 #ifdef ELKA 165 extern const unsigned int SLI_time; 166 extern const unsigned int SLI_time2; 167 #endif 168 //#define USE_MLMENU 169 #define USE_GUI //графический интерфейс 170 171 #define TMR_SECOND 216 172 173 //IPC 174 const char ipc_my_name[32]=IPC_NATICQ_NAME; 175 const char ipc_xtask_name[]=IPC_XTASK_NAME; 176 const char ipc_test_name[]="test"; 177 IPC_REQ gipc; 178 179 180 char elf_path[256]; 181 int maincsm_id; 182 int maingui_id; 183 volatile int contactlist_menu_id; \ In segment CODE, align 4, keep-with-next 184 void SMART_REDRAW(void) 185 { \ SMART_REDRAW: \ 00000000 10402DE9 PUSH {R4,LR} 186 #ifdef DEBUG 187 int f; 188 int t; 189 LockSched(); 190 f=IsGuiOnTop(maingui_id); 191 t=IsGuiOnTop(contactlist_menu_id); 192 UnlockSched(); 193 if (f || t) REDRAW(); 194 #else 195 int f; 196 LockSched(); \ 00000004 460100EF SWI +326 197 f=IsGuiOnTop(maingui_id); \ 00000008 1C009FE5 LDR R0,??SMART_REDRAW_0 ;; i_rc + 724 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 350100EF SWI +309 \ 00000014 0040A0E1 MOV R4,R0 198 UnlockSched(); \ 00000018 470100EF SWI +327 199 if (f) REDRAW(); \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} \ 00000024 720100EF SWI +370 200 #endif 201 202 } \ 00000028 1080BDE8 POP {R4,PC} ;; return \ ??SMART_REDRAW_0: \ 0000002C ........ DC32 i_rc + 724 203 204 //По 10 секунд 205 #define ACTIVE_TIME 360 206 207 //Максимальное количество сообщений в логе 208 //#define MAXLOGMSG (20) 209 210 // Строковые описания статусов 211 212 const char S_OFFLINE[]="Offline"; 213 const char S_INVISIBLE[]="Invisible"; 214 const char S_AWAY[]="Away"; 215 const char S_NA[]="N/A"; 216 const char S_OCCUPIED[]="Occupied"; 217 const char S_DND[]="DND"; 218 const char S_ONLINE[]="Online"; 219 const char S_FFC[]="FFC"; 220 221 volatile int SENDMSGCOUNT; 222 #ifdef kluchnik1 223 int IsActiveUp=1; 224 #else 225 int IsActiveUp=0; 226 #endif 227 int Is_Vibra_Enabled; 228 int Is_Id3tag_Enabled; 229 unsigned int Is_Sounds_Enabled; 230 int Is_Show_Offline; 231 int Is_Show_Groups; 232 233 int S_ICONS[TOTAL_ICONS+1]; 234 235 #define EOP -10 236 int CurrentStatus; 237 int CurrentXStatus; 238 239 WSHDR *ews; 240 241 static const char * const icons_names[TOTAL_ICONS]= 242 { 243 "offline.png", 244 "invisible.png", 245 "away.png", 246 "na.png", 247 "occupied.png", 248 "dnd.png", 249 "depression.png", 250 "evil.png", 251 "home.png", 252 "lunch.png", 253 "work.png", 254 "online.png", 255 "ffc.png", 256 "message.png", 257 "unknown.png", 258 "groupon.png", 259 "groupoff.png", 260 "null.png", 261 "addcont.png", 262 "head.png", 263 "logo.png", 264 "ping.png", 265 "settings.png", 266 "vis1.png", 267 "vis2.png", 268 "vis3.png", 269 "vis4.png", 270 "vis5.png", 271 "ping1.png", 272 "ping2.png", 273 "ping3.png", 274 "ping4.png", 275 "bg.png" 276 }; 277 278 279 280 281 //------------------------ SCREEN SAVER TIMER ---------------------------// 282 /* 283 #ifdef NEWSGOLD 284 GBSTMR scrsTmr; 285 int scrsTime; 286 void ScreenSaverTimer() 287 { 288 if(scrsTime==screenSaverTime) 289 { 290 scrsTime=screenSaverTime;//на всякий случай 291 CloseScreensaver(); 292 DrawScreenSaver(); 293 GBS_StartTimerProc(&scrsTmr, 216*10, ScreenSaverTimer); 294 } 295 if(isScreenSaverEna) 296 scrsTime++; 297 GBS_StartTimerProc(&scrsTmr, 216*5, ScreenSaverTimer); 298 } 299 #endif 300 */ 301 302 //-----------------------------------------------------------------------// 303 304 305 int msg_away_timer=0;//Счетчик для автостатуса 306 char away_msg[264];//Само сообщение для ответа 307 char away_msg_time[64];//Время когда сработал таймер 308 char away_msg_time_dace[16];//время отсутвтвия для вывода на идле 309 //char *inp_away_msg2;//Текст сообщения,если будем писать сами(на долгую 6 или VOL_DOWN_BUTTON),а не брать из конфига 310 char tim_zone[16]; \ In segment DATA_Z, align 4, align-sorted 311 int timeh; \ timeh: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 312 int timemin; \ timemin: \ 00000000 DS8 4 313 int away_m;//состояние автоответчика 314 int status_rem;//Для сохранения текущего статуса 315 int change_back_status;//вернуть предыдущий статус или нет 316 GBSTMR away_tmr; 317 318 319 int Show_XTX;//Показывать хстатус или время он лайн \ In segment CODE, align 4, keep-with-next 320 void FreeXText2(CLIST *t) 321 { \ FreeXText2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 322 if (t->xtext2) { mfree(t->xtext2); t->xtext2=NULL; } \ 00000008 AC0094E5 LDR R0,[R4, #+172] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} \ 00000014 150000EF SWI +21 \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C AC0084E5 STR R0,[R4, #+172] 323 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 324 \ In segment CODE, align 4, keep-with-next 325 void away_timer()//Таймер автостатуса 326 { \ away_timer: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 327 TTime tt; 328 if(msg_away_timer==(AUTO_ENGADE*12)) \ 00000004 ........ LDR R4,??DataTable34 ;; i_rc \ 00000008 ........ LDR R9,??DataTable4 ;; menutext \ 0000000C 6000A0E3 MOV R0,#+96 \ 00000010 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 500080E2 ADD R0,R0,#+80 \ 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 800394E5 LDR R0,[R4, #+896] \ 00000038 0C10A0E3 MOV R1,#+12 \ 0000003C 910802E0 MUL R2,R1,R8 \ 00000040 020050E1 CMP R0,R2 \ 00000044 1D00001A BNE ??away_timer_0 329 { 330 GetDateTime(NULL,&tt); \ 00000048 0D10A0E1 MOV R1,SP \ 0000004C 0000A0E3 MOV R0,#+0 \ 00000050 B40000EF SWI +180 331 sprintf(away_msg_time_dace, "%02d:%02d", tt.hour, tt.min); \ 00000054 0130DDE5 LDRB R3,[SP, #+1] \ 00000058 0020DDE5 LDRB R2,[SP, #+0] \ 0000005C 181089E2 ADD R1,R9,#+24 \ 00000060 0700A0E1 MOV R0,R7 \ 00000064 160000EF SWI +22 332 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 241089E2 ADD R1,R9,#+36 \ 0000007C 0500A0E1 MOV R0,R5 \ 00000080 160000EF SWI +22 333 away_m=1; 334 335 if(CurrentStatus!=2 && CurrentStatus!=isAutoStatusOn) \ 00000084 740394E5 LDR R0,[R4, #+884] \ 00000088 01A0A0E3 MOV R10,#+1 \ 0000008C 84A384E5 STR R10,[R4, #+900] \ 00000090 020050E3 CMP R0,#+2 \ 00000094 04D08DE2 ADD SP,SP,#+4 \ 00000098 0800000A BEQ ??away_timer_0 \ 0000009C D0109FE5 LDR R1,??away_timer_1 ;; isAutoStatusOn \ 000000A0 001091E5 LDR R1,[R1, #+0] \ 000000A4 010050E1 CMP R0,R1 \ 000000A8 0400000A BEQ ??away_timer_0 336 { 337 status_rem=CurrentStatus; \ 000000AC 880384E5 STR R0,[R4, #+904] 338 CurrentStatus=2; \ 000000B0 0200A0E3 MOV R0,#+2 \ 000000B4 740384E5 STR R0,[R4, #+884] 339 set_my_status(); \ 000000B8 ........ BL set_my_status 340 change_back_status=1; \ 000000BC 8CA384E5 STR R10,[R4, #+908] 341 } 342 } 343 344 if( (IsOnNAStatus) && (msg_away_timer==((AUTO_ENGADE*12)+(NAStatusTime*12))) )//Включить переключение на недоступен,в минутах \ ??away_timer_0: \ 000000C0 B0009FE5 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 A4109FE5 LDR R1,??away_timer_1+0x8 ;; NAStatusTime \ 000000D4 800394E5 LDR R0,[R4, #+896] \ 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 345 { 346 GetDateTime(NULL,&tt); \ 000000F0 0D10A0E1 MOV R1,SP \ 000000F4 0000A0E3 MOV R0,#+0 \ 000000F8 B40000EF SWI +180 347 sprintf(away_msg_time_dace, "%02d:%02d", tt.hour, tt.min); \ 000000FC 0130DDE5 LDRB R3,[SP, #+1] \ 00000100 0020DDE5 LDRB R2,[SP, #+0] \ 00000104 181089E2 ADD R1,R9,#+24 \ 00000108 0700A0E1 MOV R0,R7 \ 0000010C 160000EF SWI +22 348 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 501089E2 ADD R1,R9,#+80 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 160000EF SWI +22 349 if(CurrentStatus!=3) \ 00000128 740394E5 LDR R0,[R4, #+884] \ 0000012C 04D08DE2 ADD SP,SP,#+4 \ 00000130 030050E3 CMP R0,#+3 \ 00000134 0200000A BEQ ??away_timer_2 350 { 351 CurrentStatus=3; \ 00000138 0300A0E3 MOV R0,#+3 \ 0000013C 740384E5 STR R0,[R4, #+884] 352 set_my_status(); \ 00000140 ........ BL set_my_status 353 } 354 } 355 356 if(Auto_Status) \ ??away_timer_2: \ 00000144 ........ LDR R0,??DataTable6 ;; Auto_Status 357 msg_away_timer++; 358 GBS_StartTimerProc(&away_tmr, 216*5, away_timer); \ 00000148 30209FE5 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 80039415 LDRNE R0,[R4, #+896] \ 0000015C 401E81E3 ORR R1,R1,#0x400 \ 00000160 01008012 ADDNE R0,R0,#+1 \ 00000164 80038415 STRNE R0,[R4, #+896] \ 00000168 6F0D84E2 ADD R0,R4,#+7104 \ 0000016C 4D0000EF SWI +77 359 } \ 00000170 F387BDE8 POP {R0,R1,R4-R10,PC} ;; return \ ??away_timer_1: \ 00000174 ........ DC32 isAutoStatusOn \ 00000178 ........ DC32 IsOnNAStatus \ 0000017C ........ DC32 NAStatusTime \ 00000180 ........ DC32 away_timer 360 361 \ In segment CODE, align 4, keep-with-next 362 void init_time_zone() 363 { 364 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 + 7088 \ 00000008 50119FE5 LDR R1,??init_time_zone_1+0x8 ;; `?` \ 0000000C 00402DE9 PUSH {LR} \ 00000010 002092E5 LDR R2,[R2, #+0] \ 00000014 200052E3 CMP R2,#+32 \ 00000018 0080BD88 POPHI {PC} \ 0000001C 013F8FE2 ADR R3,??init_time_zone_0 \ 00000020 0230D3E7 LDRB R3,[R3, R2] \ 00000024 03F18FE0 ADD PC,PC,R3, LSL #+2 \ ??init_time_zone_0: \ 00000028 0C080B0E DC8 +12,+8,+11,+14 \ 0000002C 10121416 DC8 +16,+18,+20,+22 \ 00000030 181A1C1E DC8 +24,+26,+28,+30 \ 00000034 20222426 DC8 +32,+34,+36,+38 \ 00000038 282A2C2E DC8 +40,+42,+44,+46 \ 0000003C 30323436 DC8 +48,+50,+52,+54 \ 00000040 383A3C3E DC8 +56,+58,+60,+62 \ 00000044 40424446 DC8 +64,+66,+68,+70 \ 00000048 48000000 DC8 +72,+0,+0,+0 365 { 366 case 0: 367 sprintf(tim_zone, "GMT -12:00"); 368 break; 369 case 1: 370 sprintf(tim_zone, "GMT -11:00"); \ ??init_time_zone_2: \ 0000004C 0C1081E2 ADD R1,R1,#+12 \ 00000050 160000EF SWI +22 \ 00000054 0080BDE8 POP {PC} 371 break; 372 case 2: 373 sprintf(tim_zone, "GMT -10:00"); \ ??init_time_zone_3: \ 00000058 181081E2 ADD R1,R1,#+24 \ ??init_time_zone_4: \ 0000005C 160000EF SWI +22 \ 00000060 0080BDE8 POP {PC} 374 break; 375 case 3: 376 sprintf(tim_zone, "GMT -09:00"); \ ??init_time_zone_5: \ 00000064 241081E2 ADD R1,R1,#+36 \ 00000068 FBFFFFEA B ??init_time_zone_4 377 break; 378 case 4: 379 sprintf(tim_zone, "GMT -08:00"); \ ??init_time_zone_6: \ 0000006C 301081E2 ADD R1,R1,#+48 \ 00000070 F9FFFFEA B ??init_time_zone_4 380 break; 381 case 5: 382 sprintf(tim_zone, "GMT -07:00"); \ ??init_time_zone_7: \ 00000074 3C1081E2 ADD R1,R1,#+60 \ 00000078 F7FFFFEA B ??init_time_zone_4 383 break; 384 case 6: 385 sprintf(tim_zone, "GMT -06:00"); \ ??init_time_zone_8: \ 0000007C 481081E2 ADD R1,R1,#+72 \ 00000080 F5FFFFEA B ??init_time_zone_4 386 break; 387 case 7: 388 sprintf(tim_zone, "GMT -05:00"); \ ??init_time_zone_9: \ 00000084 541081E2 ADD R1,R1,#+84 \ 00000088 F3FFFFEA B ??init_time_zone_4 389 break; 390 case 8: 391 sprintf(tim_zone, "GMT -04:00"); \ ??init_time_zone_10: \ 0000008C 601081E2 ADD R1,R1,#+96 \ 00000090 F1FFFFEA B ??init_time_zone_4 392 break; 393 case 9: 394 sprintf(tim_zone, "GMT -03:30"); \ ??init_time_zone_11: \ 00000094 6C1081E2 ADD R1,R1,#+108 \ 00000098 EFFFFFEA B ??init_time_zone_4 395 break; 396 case 10: 397 sprintf(tim_zone, "GMT -03:00"); \ ??init_time_zone_12: \ 0000009C 781081E2 ADD R1,R1,#+120 \ 000000A0 EDFFFFEA B ??init_time_zone_4 398 break; 399 case 11: 400 sprintf(tim_zone, "GMT -02:00"); \ ??init_time_zone_13: \ 000000A4 841081E2 ADD R1,R1,#+132 \ 000000A8 EBFFFFEA B ??init_time_zone_4 401 break; 402 case 12: 403 sprintf(tim_zone, "GMT -01:00"); \ ??init_time_zone_14: \ 000000AC 901081E2 ADD R1,R1,#+144 \ 000000B0 E9FFFFEA B ??init_time_zone_4 404 break; 405 case 13: 406 sprintf(tim_zone, "GMT 00:00"); \ ??init_time_zone_15: \ 000000B4 9C1081E2 ADD R1,R1,#+156 \ 000000B8 E7FFFFEA B ??init_time_zone_4 407 break; 408 case 14: 409 sprintf(tim_zone, "GMT +01:00"); \ ??init_time_zone_16: \ 000000BC A81081E2 ADD R1,R1,#+168 \ 000000C0 E5FFFFEA B ??init_time_zone_4 410 break; 411 case 15: 412 sprintf(tim_zone, "GMT +02:00"); \ ??init_time_zone_17: \ 000000C4 B41081E2 ADD R1,R1,#+180 \ 000000C8 E3FFFFEA B ??init_time_zone_4 413 break; 414 case 16: 415 sprintf(tim_zone, "GMT +03:00"); \ ??init_time_zone_18: \ 000000CC C01081E2 ADD R1,R1,#+192 \ 000000D0 E1FFFFEA B ??init_time_zone_4 416 break; 417 case 17: 418 sprintf(tim_zone, "GMT +03:30"); \ ??init_time_zone_19: \ 000000D4 CC1081E2 ADD R1,R1,#+204 \ 000000D8 DFFFFFEA B ??init_time_zone_4 419 break; 420 case 18: 421 sprintf(tim_zone, "GMT +04:00"); \ ??init_time_zone_20: \ 000000DC D81081E2 ADD R1,R1,#+216 \ 000000E0 DDFFFFEA B ??init_time_zone_4 422 break; 423 case 19: 424 sprintf(tim_zone, "GMT +04:30"); \ ??init_time_zone_21: \ 000000E4 E41081E2 ADD R1,R1,#+228 \ 000000E8 DBFFFFEA B ??init_time_zone_4 425 break; 426 case 20: 427 sprintf(tim_zone, "GMT +05:00"); \ ??init_time_zone_22: \ 000000EC F01081E2 ADD R1,R1,#+240 \ 000000F0 D9FFFFEA B ??init_time_zone_4 428 break; 429 case 21: 430 sprintf(tim_zone, "GMT +05:30"); \ ??init_time_zone_23: \ 000000F4 FC1081E2 ADD R1,R1,#+252 \ 000000F8 D7FFFFEA B ??init_time_zone_4 431 break; 432 case 22: 433 sprintf(tim_zone, "GMT +05:45"); \ ??init_time_zone_24: \ 000000FC 421F81E2 ADD R1,R1,#+264 \ 00000100 D5FFFFEA B ??init_time_zone_4 434 break; 435 case 23: 436 sprintf(tim_zone, "GMT +06:00"); \ ??init_time_zone_25: \ 00000104 451F81E2 ADD R1,R1,#+276 \ 00000108 D3FFFFEA B ??init_time_zone_4 437 break; 438 case 24: 439 sprintf(tim_zone, "GMT +06:30"); \ ??init_time_zone_26: \ 0000010C 481F81E2 ADD R1,R1,#+288 \ 00000110 D1FFFFEA B ??init_time_zone_4 440 break; 441 case 25: 442 sprintf(tim_zone, "GMT +07:00"); \ ??init_time_zone_27: \ 00000114 4B1F81E2 ADD R1,R1,#+300 \ 00000118 CFFFFFEA B ??init_time_zone_4 443 break; 444 case 26: 445 sprintf(tim_zone, "GMT +08:00"); \ ??init_time_zone_28: \ 0000011C 4E1F81E2 ADD R1,R1,#+312 \ 00000120 CDFFFFEA B ??init_time_zone_4 446 break; 447 case 27: 448 sprintf(tim_zone, "GMT +09:00"); \ ??init_time_zone_29: \ 00000124 511F81E2 ADD R1,R1,#+324 \ 00000128 CBFFFFEA B ??init_time_zone_4 449 break; 450 case 28: 451 sprintf(tim_zone, "GMT +09:30"); \ ??init_time_zone_30: \ 0000012C 541F81E2 ADD R1,R1,#+336 \ 00000130 C9FFFFEA B ??init_time_zone_4 452 break; 453 case 29: 454 sprintf(tim_zone, "GMT +10:00"); \ ??init_time_zone_31: \ 00000134 571F81E2 ADD R1,R1,#+348 \ 00000138 C7FFFFEA B ??init_time_zone_4 455 break; 456 case 30: 457 sprintf(tim_zone, "GMT +11:00"); \ ??init_time_zone_32: \ 0000013C 5A1F81E2 ADD R1,R1,#+360 \ 00000140 C5FFFFEA B ??init_time_zone_4 458 break; 459 case 31: 460 sprintf(tim_zone, "GMT +12:00"); \ ??init_time_zone_33: \ 00000144 5D1F81E2 ADD R1,R1,#+372 \ 00000148 C3FFFFEA B ??init_time_zone_4 461 break; 462 case 32: 463 sprintf(tim_zone, "GMT +13:00"); \ ??init_time_zone_34: \ 0000014C 601F81E2 ADD R1,R1,#+384 \ 00000150 160000EF SWI +22 464 break; 465 } 466 } \ ??init_time_zone_35: \ 00000154 0080BDE8 POP {PC} ;; return \ ??init_time_zone_1: \ 00000158 ........ DC32 time_zone \ 0000015C ........ DC32 i_rc + 7088 \ 00000160 ........ DC32 `?` 467 468 469 //------------------------ AUTO CHANGE STATUS ------------------------------// 470 471 void SetIconBarHandler(); 472 GBSTMR autoChangeStatus; 473 #pragma inline 474 static unsigned int GetStatusByIndex(int pos) 475 { 476 switch(pos) 477 { 478 case 1: 479 return IS_ONLINE; 480 case 2: 481 return IS_AWAY; 482 case 3: 483 return IS_NA; 484 case 4: 485 return IS_DND; 486 case 5: 487 return IS_OCCUPIED; 488 case 6: 489 return IS_FFC; 490 case 7: 491 return IS_INVISIBLE; 492 case 8: 493 return IS_DEPRESSION; 494 case 9: 495 return IS_EVIL; 496 case 10: 497 return IS_HOME; 498 case 11: 499 return IS_LUNCH; 500 case 12: 501 return IS_WORK; 502 } 503 return IS_UNKNOWN; 504 } 505 506 #ifndef DEBUG \ In segment CODE, align 4, keep-with-next 507 void AutoChangeStatus_timer()//Таймер автосмены статуса 508 { \ AutoChangeStatus_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 509 TTime tt; 510 GetDateTime(NULL,&tt); \ 00000008 0D10A0E1 MOV R1,SP 511 512 if(status_1!=0 && tt.hour==tm_status_1.hour && tt.min==tm_status_1.min) \ 0000000C ........ LDR R4,??DataTable34 ;; 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 513 { 514 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 740384E5 STR R0,[R4, #+884] 515 set_my_status(); \ 000000DC ........ BL set_my_status 516 } 517 518 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 519 { 520 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 740384E5 STR R0,[R4, #+884] 521 set_my_status(); \ 000001A0 ........ BL set_my_status 522 } 523 524 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 525 { 526 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 740384E5 STR R0,[R4, #+884] 527 set_my_status(); \ 00000264 ........ BL set_my_status 528 } 529 530 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 531 { 532 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 740384E5 STR R0,[R4, #+884] 533 set_my_status(); \ 00000328 ........ BL set_my_status 534 } 535 536 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 537 { 538 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 745384E5 STR R5,[R4, #+884] 539 set_my_status(); \ 000003E4 ........ BL set_my_status 540 } 541 542 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 A00F81E3 ORR R0,R1,#0x280 \ 000003F8 040080E0 ADD R0,R0,R4 \ 000003FC 4D0000EF SWI +77 543 } \ 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 544 #endif 545 //=================================away_msg=============== 546 //////////////////////////////////////////tozhe dlja auto ping/////////////// 547 \ In segment CODE, align 4, keep-with-next 548 void DrawPing(void *canv) 549 { 550 PrintField(Ping_X,Ping_Y, PINGO, align, fonto, spaco1); \ DrawPing: \ 00000000 ........ LDR R1,??DataTable22 ;; spaco1 \ 00000004 ........ LDR R0,??DataTable34 ;; 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 843290E5 LDR R3,[R0, #+644] \ 00000024 5810A0E3 MOV R1,#+88 \ 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 551 } \ 00000044 0380BDE8 POP {R0,R1,PC} ;; return \ ??DrawPing_0: \ 00000048 ........ DC32 Ping_Y \ 0000004C ........ DC32 Ping_X 552 553 //////////////////////////////////////////tozhe dlja auto ping/////////////// 554 555 GBSTMR remind_tmr; 556 volatile int vibra_count; 557 #ifdef ELKA 558 void SLI_Off(void); 559 #endif 560 void start_vibra2(void); 561 562 //////////////////////////reminder timer///////////////////////// 563 \ In segment CODE, align 4, keep-with-next 564 void Remind_Timer2() 565 { \ Remind_Timer2: \ 00000000 10402DE9 PUSH {R4,LR} 566 if (total_unread) \ 00000004 ........ LDR R4,??DataTable34 ;; i_rc \ 00000008 780494E5 LDR R0,[R4, #+1144] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} 567 { 568 vibra_count=Vibra_cc; \ 00000014 24009FE5 LDR R0,??Remind_Timer2_0 ;; Vibra_cc \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 4C0484E5 STR R0,[R4, #+1100] 569 start_vibra2(); \ 00000020 ........ BL start_vibra2 570 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 A40F81E2 ADD R0,R1,#+656 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 4D0000EF SWI +77 571 } 572 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return \ ??Remind_Timer2_0: \ 00000040 ........ DC32 Vibra_cc 573 \ In segment CODE, align 4, keep-with-next 574 void Reminder_timer() 575 { 576 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 + 7136 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 5010A0E3 MOV R1,#+80 \ 00000010 641D81E3 ORR R1,R1,#0x1900 \ 00000014 4D0000EF SWI +77 577 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??Reminder_timer_0: \ 0000001C ........ DC32 i_rc + 7136 578 //////////////////////////reminder timer///////////////////////// 579 580 //////////////////////////uptime////////////////////////// 581 //int Is_UPTIME_On; 582 int uptimeHour; 583 int uptimeMin; 584 int uptimeSec; 585 \ In segment CODE, align 4, keep-with-next 586 void UptimeMinHour() 587 { 588 uptimeSec++; \ UptimeMinHour: \ 00000000 ........ LDR R0,??DataTable34 ;; i_rc \ 00000004 9C1390E5 LDR R1,[R0, #+924] 589 if(uptimeSec==60) \ 00000008 982390E5 LDR R2,[R0, #+920] \ 0000000C 011081E2 ADD R1,R1,#+1 \ 00000010 3C0051E3 CMP R1,#+60 590 { 591 uptimeSec=0; \ 00000014 0010A003 MOVEQ R1,#+0 592 uptimeMin++; \ 00000018 01208202 ADDEQ R2,R2,#+1 \ 0000001C 9C1380E5 STR R1,[R0, #+924] 593 } 594 if(uptimeMin==60) \ 00000020 3C0052E3 CMP R2,#+60 \ 00000024 0300001A BNE ??UptimeMinHour_0 595 { 596 uptimeMin=0; 597 uptimeHour++; \ 00000028 941390E5 LDR R1,[R0, #+916] \ 0000002C 0020A0E3 MOV R2,#+0 \ 00000030 011081E2 ADD R1,R1,#+1 \ 00000034 941380E5 STR R1,[R0, #+916] \ ??UptimeMinHour_0: \ 00000038 982380E5 STR R2,[R0, #+920] 598 } 599 } \ 0000003C 1EFF2FE1 BX LR ;; return 600 601 GBSTMR uptime_tmr; 602 #ifdef NEWSGOLD 603 GBSTMR tracktmr; 604 int tracktimer; 605 #endif 606 \ In segment CODE, align 4, keep-with-next 607 void upTime() 608 { \ upTime: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 609 if(connect_state==3) \ 00000004 ........ LDR R4,??DataTable34 ;; i_rc \ 00000008 7C609FE5 LDR R6,??upTime_0 ;; upTime \ 0000000C F000A0E3 MOV R0,#+240 \ 00000010 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 5C0494E5 LDR R0,[R4, #+1116] \ 0000001C 0070A0E3 MOV R7,#+0 \ 00000020 030050E3 CMP R0,#+3 \ 00000024 0D00001A BNE ??upTime_1 610 { 611 UptimeMinHour(); \ 00000028 ........ BL UptimeMinHour 612 #ifdef NEWSGOLD 613 if (tracktimer>=10)/*&&(_GetPlayStatus()!=1))*/ \ 0000002C A00394E5 LDR R0,[R4, #+928] \ 00000030 0A0050E3 CMP R0,#+10 \ 00000034 050000BA BLT ??upTime_2 614 { 615 GBS_StartTimerProc(&tracktmr, 216*5, GetTags); \ 00000038 ........ LDR R2,??DataTable16 ;; GetTags \ 0000003C 3810A0E3 MOV R1,#+56 \ 00000040 401E81E3 ORR R1,R1,#0x400 \ 00000044 700D84E2 ADD R0,R4,#+7168 \ 00000048 4D0000EF SWI +77 616 tracktimer=0; \ 0000004C A07384E5 STR R7,[R4, #+928] 617 } 618 tracktimer++; \ ??upTime_2: \ 00000050 A00394E5 LDR R0,[R4, #+928] \ 00000054 010080E2 ADD R0,R0,#+1 \ 00000058 A00384E5 STR R0,[R4, #+928] 619 #endif 620 GBS_StartTimerProc(&uptime_tmr, 216, upTime); \ 0000005C 050000EA B ??upTime_3 621 } 622 else 623 { 624 if(!Pause_Time) \ ??upTime_1: \ 00000060 28009FE5 LDR R0,??upTime_0+0x4 ;; Pause_Time \ 00000064 000090E5 LDR R0,[R0, #+0] \ 00000068 000050E3 CMP R0,#+0 625 { 626 uptimeHour=0; \ 0000006C 94738405 STREQ R7,[R4, #+916] 627 uptimeMin=0; \ 00000070 98738405 STREQ R7,[R4, #+920] 628 uptimeSec=0; \ 00000074 9C738405 STREQ R7,[R4, #+924] 629 } 630 GBS_StartTimerProc(&uptime_tmr, 216, upTime); \ ??upTime_3: \ 00000078 0620A0E1 MOV R2,R6 \ 0000007C D810A0E3 MOV R1,#+216 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 4D0000EF SWI +77 631 } 632 } \ 00000088 F080BDE8 POP {R4-R7,PC} ;; return \ ??upTime_0: \ 0000008C ........ DC32 upTime \ 00000090 ........ DC32 Pause_Time 633 634 char onlineTime[128]; \ In segment CODE, align 4, keep-with-next 635 void DrawOnlineTime(void *canv) 636 { 637 if(connect_state==3) \ DrawOnlineTime: \ 00000000 80109FE5 LDR R1,??DrawOnlineTime_0 ;; `?` \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 ........ LDR R4,??DataTable34 ;; i_rc \ 0000000C 1000A0E3 MOV R0,#+16 \ 00000010 700D80E3 ORR R0,R0,#0x1C00 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 5C0494E5 LDR R0,[R4, #+1116] \ 0000001C 030050E3 CMP R0,#+3 \ 00000020 0700001A BNE ??DrawOnlineTime_1 638 { 639 sprintf(onlineTime,"Online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); \ 00000024 9C0394E5 LDR R0,[R4, #+924] \ 00000028 01002DE9 PUSH {R0} \ 0000002C 983394E5 LDR R3,[R4, #+920] \ 00000030 942394E5 LDR R2,[R4, #+916] \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 160000EF SWI +22 \ 0000003C 04D08DE2 ADD SP,SP,#+4 \ 00000040 020000EA B ??DrawOnlineTime_2 640 } 641 else 642 sprintf(onlineTime,"Offline"); \ ??DrawOnlineTime_1: \ 00000044 181081E2 ADD R1,R1,#+24 \ 00000048 0500A0E1 MOV R0,R5 \ 0000004C 160000EF SWI +22 643 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 843294E5 LDR R3,[R4, #+644] \ 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 644 } \ 00000084 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??DrawOnlineTime_0: \ 00000088 ........ DC32 `?` \ 0000008C ........ DC32 onlineTime_y \ 00000090 ........ DC32 onlineTime_x 645 646 647 //---------------------- Вывод времени на идле ---------------------// 648 649 \ In segment CODE, align 4, keep-with-next 650 void DrawAutoMSG(void *canv) 651 { \ DrawAutoMSG: \ 00000000 10402DE9 PUSH {R4,LR} 652 char awayTime[64]; 653 if(away_m && showAwayIdle) \ 00000004 ........ LDR R4,??DataTable34 ;; i_rc \ 00000008 40D04DE2 SUB SP,SP,#+64 \ 0000000C 840394E5 LDR R0,[R4, #+900] \ 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 654 { 655 sprintf(awayTime,"Away from [%s]",away_msg_time_dace); \ 00000028 50109FE5 LDR R1,??DrawAutoMSG_1 ;; `?` \ 0000002C A000A0E3 MOV R0,#+160 \ 00000030 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000034 042080E0 ADD R2,R0,R4 \ 00000038 0D00A0E1 MOV R0,SP \ 0000003C 160000EF SWI +22 656 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 843294E5 LDR R3,[R4, #+644] \ 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 657 } 658 } \ ??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 659 660 661 //---------------------------- Input away msg ---------------------------// 662 663 //Вводим сообщение какое хотим,а не то что прописали в конфиге 664 int input_awaymsg_id; 665 666 const HEADER_DESC input_awaymsg_hdr={0,0,131,21,NULL,(int)"Ввод автосообщения",LGP_NULL}; 667 //void UpdateCLheader(void); \ In segment CODE, align 4, keep-with-next 668 int input_awaymsg_onkey(GUI *data, GUI_MSG *msg) 669 { \ input_awaymsg_onkey: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 670 WSHDR *ws; 671 if (msg->keys==0x0FFF || msg->keys==VOL_DOWN_BUTTON) \ 00000008 ........ LDR R4,??DataTable34 ;; 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 672 { 673 EDITCONTROL ec; 674 ExtractEditControl(data,2,&ec); 675 ws=ec.pWS; 676 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 677 int i=0; 678 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 679 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 680 awayMsg[i]=0; 681 682 #ifdef kluchnik2 683 char *s; 684 ExtractEditControl(data,4,&ec); 685 ws=ec.pWS; 686 s=malloc(ws->wsbody[0]); 687 *s=0; 688 for(i=0;iwsbody[0];i++) 689 *(s+i)=char16to8(ws->wsbody[i+1]); 690 *(s+i)=0; 691 strcat(awayMsg,s); 692 mfree(s); 693 #endif 694 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 800384E5 STR R0,[R4, #+896] 695 away_m=1; \ 000000A0 0100A0E3 MOV R0,#+1 \ 000000A4 840384E5 STR R0,[R4, #+900] 696 away_timer(); \ 000000A8 ........ BL away_timer 697 // UpdateCLheader(); 698 GeneralFunc_flag1(input_awaymsg_id,1); \ 000000AC A40394E5 LDR R0,[R4, #+932] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 3D0100EF SWI +317 699 // GeneralFuncF1(1); 700 } 701 702 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 703 { 704 msg_away_timer=0; 705 away_m=0; 706 if(change_back_status) \ 000000C8 8C0394E5 LDR R0,[R4, #+908] \ 000000CC 805384E5 STR R5,[R4, #+896] \ 000000D0 845384E5 STR R5,[R4, #+900] \ 000000D4 000050E3 CMP R0,#+0 \ 000000D8 0400000A BEQ ??input_awaymsg_onkey_5 707 { 708 CurrentStatus=status_rem; \ 000000DC 880394E5 LDR R0,[R4, #+904] \ 000000E0 740384E5 STR R0,[R4, #+884] 709 set_my_status(); \ 000000E4 ........ BL set_my_status 710 change_back_status=0; \ 000000E8 8C5384E5 STR R5,[R4, #+908] 711 } 712 // UpdateCLheader(); 713 } 714 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 715 } 716 \ In segment CODE, align 4, keep-with-next 717 void input_awaymsg_ghook(GUI *gui, int cmd) 718 { \ input_awaymsg_ghook: \ 00000000 00402DE9 PUSH {LR} 719 static SOFTKEY_DESC sk={0x0FFF,0x0000,(int)"Сохранить"}; 720 if (cmd==7) \ 00000004 070051E3 CMP R1,#+7 \ 00000008 0300001A BNE ??input_awaymsg_ghook_0 721 { 722 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} 723 } 724 if(cmd==0xA) \ ??input_awaymsg_ghook_0: \ 0000001C 0A0051E3 CMP R1,#+10 \ 00000020 0100001A BNE ??input_awaymsg_ghook_2 725 { 726 DisableIDLETMR(); // Отключаем таймер выхода по таймауту \ 00000024 7F0100EF SWI +383 \ 00000028 0080BDE8 POP {PC} 727 } 728 if (cmd==0x0C) \ ??input_awaymsg_ghook_2: \ 0000002C 0C0051E3 CMP R1,#+12 \ 00000030 0080BD18 POPNE {PC} 729 { 730 EDIT_SetCursorPos(gui,1); \ 00000034 0110A0E3 MOV R1,#+1 \ 00000038 D40100EF SWI +468 731 } 732 if(cmd==0x03){} 733 } \ 0000003C 0080BDE8 POP {PC} ;; return \ ??input_awaymsg_ghook_1: \ 00000040 ........ DC32 ??sk 734 \ In segment CODE, align 4, keep-with-next 735 void input_awaymsg_locret(void){} \ input_awaymsg_locret: \ 00000000 1EFF2FE1 BX LR ;; return 736 737 SOFTKEY_DESC input_awaymsg_sk[]= 738 { 739 {0x0018,0x0000,(int)"Лев"}, 740 {0x0001,0x0000,(int)"Прав"}, 741 {0x003D,0x0000,(int)LGP_DOIT_PIC} 742 }; 743 744 SOFTKEYSTAB input_awaymsg_skt= 745 { 746 input_awaymsg_sk,0 747 }; 748 749 const INPUTDIA_DESC input_awaymsg_desc= 750 { 751 1, 752 input_awaymsg_onkey, 753 input_awaymsg_ghook, 754 (void *)input_awaymsg_locret, 755 0, 756 &input_awaymsg_skt, 757 {0,NULL,NULL,NULL}, 758 FONT_SMALL, 759 100, 760 101, 761 0, 762 0x00000000, 763 0x40000000 764 }; 765 \ In segment CODE, align 4, keep-with-next 766 void InputAwayMsg() 767 { \ InputAwayMsg: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 768 WSHDR *wss=AllocWS(256); 769 void *ma=malloc_adr(); 770 void *eq=AllocEQueue(ma, mfree_adr()); 771 EDITCONTROL ec; 772 PrepareEditControl(&ec); 773 wsprintf(wss,"%t","Сообщение:\n"); \ 00000004 3C519FE5 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 3F1F8FE2 ADR R1,??InputAwayMsg_0 ;; "%t" \ 00000044 0600A0E1 MOV R0,R6 \ 00000048 240100EF SWI +292 774 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 775 AddEditControlToEditQend(eq,&ec,ma); \ 00000068 0720A0E1 MOV R2,R7 \ 0000006C 04108DE2 ADD R1,SP,#+4 \ 00000070 0400A0E1 MOV R0,R4 \ 00000074 660100EF SWI +358 776 777 PrepareEditControl(&ec); \ 00000078 04008DE2 ADD R0,SP,#+4 \ 0000007C 640100EF SWI +356 778 CutWSTR(wss,0); \ 00000080 0010A0E3 MOV R1,#+0 \ 00000084 0600A0E1 MOV R0,R6 \ 00000088 260100EF SWI +294 779 ascii2ws(wss,awayMsg); \ 0000008C ........ LDR R1,??DataTable27 ;; awayMsg \ 00000090 0600A0E1 MOV R0,R6 \ 00000094 ........ _BLF ascii2ws,??ascii2ws??rA 780 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 781 AddEditControlToEditQend(eq,&ec,ma); \ 000000B4 0720A0E1 MOV R2,R7 \ 000000B8 08108DE2 ADD R1,SP,#+8 \ 000000BC 0400A0E1 MOV R0,R4 \ 000000C0 660100EF SWI +358 782 #ifdef kluchnik2 783 PrepareEditControl(&ec); 784 wsprintf(wss,"%t","Сообщение 2:\n"); 785 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); 786 AddEditControlToEditQend(eq,&ec,ma); 787 788 ascii2ws(wss,"когда смогу отвечу:)"); 789 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); 790 AddEditControlToEditQend(eq,&ec,ma); 791 #endif 792 patch_header(&input_awaymsg_hdr); \ 000000C4 0060A0E3 MOV R6,#+0 \ 000000C8 386085E5 STR R6,[R5, #+56] \ 000000CC 888100EF SWI +33160 \ 000000D0 010040E2 SUB R0,R0,#+1 \ 000000D4 BC03C5E1 STRH R0,[R5, #+60] \ 000000D8 8A8100EF SWI +33162 \ 000000DC 010040E2 SUB R0,R0,#+1 \ 000000E0 BE03C5E1 STRH R0,[R5, #+62] 793 patch_input(&input_awaymsg_desc); \ 000000E4 B861C5E1 STRH R6,[R5, #+24] \ 000000E8 8A8100EF SWI +33162 \ 000000EC 010080E2 ADD R0,R0,#+1 \ 000000F0 BA01C5E1 STRH R0,[R5, #+26] \ 000000F4 888100EF SWI +33160 \ 000000F8 010040E2 SUB R0,R0,#+1 \ 000000FC BC01C5E1 STRH R0,[R5, #+28] \ 00000100 898100EF SWI +33161 \ 00000104 0060A0E1 MOV R6,R0 \ 00000108 8B8100EF SWI +33163 \ 0000010C 000046E0 SUB R0,R6,R0 \ 00000110 010040E2 SUB R0,R0,#+1 \ 00000114 BE01C5E1 STRH R0,[R5, #+30] 794 795 input_awaymsg_id=CreateInputTextDialog(&input_awaymsg_desc,&input_awaymsg_hdr,eq,1,0);//создаем диалоговое окно \ 00000118 0000A0E3 MOV R0,#+0 \ 0000011C 01002DE9 PUSH {R0} \ 00000120 0130A0E3 MOV R3,#+1 \ 00000124 0420A0E1 MOV R2,R4 \ 00000128 381085E2 ADD R1,R5,#+56 \ 0000012C 0500A0E1 MOV R0,R5 \ 00000130 670100EF SWI +359 \ 00000134 10109FE5 LDR R1,??InputAwayMsg_0+0x8 ;; i_rc + 932 \ 00000138 000081E5 STR R0,[R1, #+0] 796 } \ 0000013C 38D08DE2 ADD SP,SP,#+56 \ 00000140 F080BDE8 POP {R4-R7,PC} ;; return \ ??InputAwayMsg_0: \ 00000144 25740000 DC8 "%t",+0 \ 00000148 ........ DC32 input_awaymsg_desc \ 0000014C ........ DC32 i_rc + 932 797 798 799 //////////////////////////uptime////////////////////////// 800 #ifdef ELKA 801 GBSTMR sli_tmr; 802 void SLI_On() 803 { 804 if(Is_SLI_On) 805 SLI_SetState(1); 806 GBS_StartTimerProc(&sli_tmr, IN_TICKS(2) / 20, SLI_Off); 807 } 808 809 void SLI_Off() 810 { 811 SLI_SetState(2); 812 if(total_unread) 813 GBS_StartTimerProc(&sli_tmr, IN_TICKS(2) / 20, SLI_On); //26*SLI_time2 814 else 815 SLI_SetState(0); 816 } 817 818 void SLI_check() 819 { 820 if (total_unread) 821 SLI_On(); 822 } 823 824 void SLI_Timer() 825 { 826 GBS_StartTimerProc(&sli_tmr, 262, SLI_check); //262*SLI_time 827 } 828 #endif 829 \ In segment CODE, align 4, keep-with-next 830 void setup_ICONS(void) 831 { \ setup_ICONS: \ 00000000 30402DE9 PUSH {R4,R5,LR} 832 int i=0; \ 00000004 0040A0E3 MOV R4,#+0 833 do 834 { 835 if (!S_ICONS[i]) S_ICONS[i]=(int)MakeGlobalString(ICON_PATH,'\\',icons_names[i]); \ ??setup_ICONS_0: \ 00000008 ........ LDR R0,??DataTable34 ;; i_rc \ 0000000C 045180E0 ADD R5,R0,R4, LSL #+2 \ 00000010 EC0295E5 LDR R0,[R5, #+748] \ 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 ........ LDR R0,??DataTable32 ;; ICON_PATH \ 0000002C ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 00000030 EC0285E5 STR R0,[R5, #+748] 836 i++; \ ??setup_ICONS_1: \ 00000034 014084E2 ADD R4,R4,#+1 837 } 838 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 857 do 858 { 859 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 860 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 861 XStatusImg[i]=CreateIMGHDRFromPngFile(s,2); \ 00000040 0210A0E3 MOV R1,#+2 \ 00000044 0500A0E1 MOV R0,R5 \ 00000048 E90100EF SWI +489 \ 0000004C ........ LDR R1,??DataTable34 ;; i_rc \ 00000050 041181E0 ADD R1,R1,R4, LSL #+2 \ 00000054 A80381E5 STR R0,[R1, #+936] 862 863 i++; \ ??XStatusToIMGHDR_2: \ 00000058 014084E2 ADD R4,R4,#+1 864 } 865 while(i<35); \ 0000005C 230054E3 CMP R4,#+35 \ 00000060 EDFFFFBA BLT ??XStatusToIMGHDR_1 866 } \ 00000064 F080BDE8 POP {R4-R7,PC} ;; return \ ??XStatusToIMGHDR_0: \ 00000068 ........ DC32 `?` \ 0000006C ........ DC32 XSTATUSES_PATH 867 868 \ In segment CODE, align 4, keep-with-next 869 void StatusToIMGHDR() 870 { \ StatusToIMGHDR: \ 00000000 70402DE9 PUSH {R4-R6,LR} 871 int i=0; \ 00000004 ........ LDR R5,??DataTable32 ;; ICON_PATH \ 00000008 ........ LDR R6,??DataTable33 ;; icons_names \ 0000000C 0040A0E3 MOV R4,#+0 872 do 873 { 874 #ifdef ELKA 875 icons[i]=CreateIMGHDRFromPngFile( MakeGlobalString(ICON_PATH2,'\\',icons_names[i]),2); 876 #else 877 icons[i]=CreateIMGHDRFromPngFile( MakeGlobalString(ICON_PATH,'\\',icons_names[i]),2); \ ??StatusToIMGHDR_0: \ 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,??DataTable34 ;; i_rc \ 0000002C 041181E0 ADD R1,R1,R4, LSL #+2 \ 00000030 080081E5 STR R0,[R1, #+8] 878 #endif 879 i++; \ 00000034 014084E2 ADD R4,R4,#+1 880 } 881 while(ibitmap); \ ??FreeStatusToIMGHDR_0: \ 0000000C 040185E0 ADD R0,R5,R4, LSL #+2 \ 00000010 080090E5 LDR R0,[R0, #+8] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0100000A BEQ ??FreeStatusToIMGHDR_1 \ 0000001C 040090E5 LDR R0,[R0, #+4] \ 00000020 150000EF SWI +21 894 i++; \ ??FreeStatusToIMGHDR_1: \ 00000024 014084E2 ADD R4,R4,#+1 895 } 896 while(ibitmap) mfree(XStatusImg[i]->bitmap); \ 00000048 0100A0E1 MOV R0,R1 \ 0000004C 150000EF SWI +21 902 i++; \ ??FreeStatusToIMGHDR_3: \ 00000050 014084E2 ADD R4,R4,#+1 903 } 904 while(i<35); \ 00000054 230054E3 CMP R4,#+35 \ 00000058 F5FFFFBA BLT ??FreeStatusToIMGHDR_2 905 } \ 0000005C 3080BDE8 POP {R4,R5,PC} ;; return 906 \ In segment CODE, align 4, keep-with-next 907 void free_ICONS(void) 908 { \ free_ICONS: \ 00000000 70402DE9 PUSH {R4-R6,LR} 909 int i=0; \ 00000004 0040A0E3 MOV R4,#+0 \ 00000008 0050A0E3 MOV R5,#+0 910 do 911 { 912 mfree((void*)S_ICONS[i]); \ ??free_ICONS_0: \ 0000000C ........ LDR R0,??DataTable63 ;; i_rc \ 00000010 046180E0 ADD R6,R0,R4, LSL #+2 \ 00000014 EC0296E5 LDR R0,[R6, #+748] 913 S_ICONS[i]=0; 914 i++; \ 00000018 014084E2 ADD R4,R4,#+1 \ 0000001C 150000EF SWI +21 \ 00000020 EC5286E5 STR R5,[R6, #+748] 915 } 916 while(i>2,stop_vibra); \ 0000004C 3610A0E3 MOV R1,#+54 \ 00000050 000000EA B ??start_vibra_2 1187 else 1188 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra); \ ??start_vibra_1: \ 00000054 6C10A0E3 MOV R1,#+108 \ ??start_vibra_2: \ 00000058 4D0000EF SWI +77 1189 } 1190 } \ 0000005C 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra_0: \ 00000060 ........ DC32 stop_vibra 1191 \ In segment CODE, align 4, keep-with-next 1192 void stop_vibra(void) 1193 { \ stop_vibra: \ 00000000 00402DE9 PUSH {LR} 1194 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1195 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable63 ;; i_rc \ 00000010 4C1490E5 LDR R1,[R0, #+1100] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 4C1480E5 STR R1,[R0, #+1100] \ 0000001C 0080BD08 POPEQ {PC} 1196 { 1197 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra_0 ;; start_vibra \ 00000024 A010A0E3 MOV R1,#+160 \ 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 1198 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra_2 1199 else 1200 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra); \ ??stop_vibra_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra_2: \ 0000004C 4D0000EF SWI +77 1201 } 1202 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra_0: \ 00000054 ........ DC32 start_vibra 1203 \ In segment CODE, align 4, keep-with-next 1204 void start_vibra2(void) 1205 { 1206 void stop_vibra2(void); 1207 1208 SetVibration(vibraPower); \ start_vibra2: \ 00000000 ........ LDR R0,??DataTable50 ;; vibraPower \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 7C0000EF SWI +124 1209 if(VIBR_TYPE) \ 00000010 ........ LDR R1,??DataTable53 ;; VIBR_TYPE \ 00000014 18009FE5 LDR R0,??start_vibra2_0 ;; i_rc + 7840 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 14209FE5 LDR R2,??start_vibra2_0+0x4 ;; stop_vibra2 \ 00000020 000051E3 CMP R1,#+0 1210 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>2,stop_vibra2); \ 00000024 3610A013 MOVNE R1,#+54 1211 else 1212 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra2); \ 00000028 6C10A003 MOVEQ R1,#+108 \ 0000002C 4D0000EF SWI +77 1213 } \ 00000030 0080BDE8 POP {PC} ;; return \ ??start_vibra2_0: \ 00000034 ........ DC32 i_rc + 7840 \ 00000038 ........ DC32 stop_vibra2 1214 \ In segment CODE, align 4, keep-with-next 1215 void stop_vibra2(void) 1216 { \ stop_vibra2: \ 00000000 00402DE9 PUSH {LR} 1217 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1218 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable63 ;; i_rc \ 00000010 4C1490E5 LDR R1,[R0, #+1100] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 4C1480E5 STR R1,[R0, #+1100] \ 0000001C 0080BD08 POPEQ {PC} 1219 { 1220 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra2_0 ;; start_vibra2 \ 00000024 A010A0E3 MOV R1,#+160 \ 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 1221 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra2); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra2_2 1222 else 1223 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra2); \ ??stop_vibra2_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra2_2: \ 0000004C 4D0000EF SWI +77 1224 } 1225 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra2_0: \ 00000054 ........ DC32 start_vibra2 1226 \ In segment CODE, align 4, keep-with-next 1227 void ChangeVibra(void) 1228 { 1229 if (!(Is_Vibra_Enabled=!(Is_Vibra_Enabled))) \ ChangeVibra: \ 00000000 ........ LDR R0,??DataTable63 ;; i_rc \ 00000004 00402DE9 PUSH {LR} \ 00000008 E41290E5 LDR R1,[R0, #+740] \ 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,??DataTable60 ;; 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 1271 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 1272 if ((fsize=stat.size)<=0) goto L1; \ 00000060 08709DE5 LDR R7,[SP, #+8] \ 00000064 010057E3 CMP R7,#+1 \ 00000068 070000BA BLT ??LoadTemplates_1 1273 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 1274 { 1275 L1: 1276 strcpy(fn+i,"\\0.txt"); \ ??LoadTemplates_1: \ 0000008C 081086E2 ADD R1,R6,#+8 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 1A0000EF SWI +26 1277 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 1278 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 1279 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 1280 } 1281 if (f==-1) return 0; \ ??LoadTemplates_2: \ 000000E0 040058E1 CMP R8,R4 \ 000000E4 F1FFFF0A BEQ ??LoadTemplates_4 1282 p=templates_chars=malloc(fsize+1); \ 000000E8 ........ LDR R4,??DataTable63 ;; i_rc \ 000000EC 010087E2 ADD R0,R7,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 500484E5 STR R0,[R4, #+1104] \ 000000F8 0060A0E1 MOV R6,R0 1283 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] 1284 fclose(f,&ul); \ 00000118 0D10A0E1 MOV R1,SP \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 0D0000EF SWI +13 1285 i=0; \ 00000124 0070A0E3 MOV R7,#+0 1286 pp=p; \ 00000128 0680A0E1 MOV R8,R6 \ 0000012C 020000EA B ??LoadTemplates_6 1287 for(;;) 1288 { 1289 c=*p; 1290 if (c<32) 1291 { 1292 if (pp&&(pp!=p)) 1293 { 1294 templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 1295 templates_lines[i++]=pp; 1296 } 1297 pp=NULL; 1298 if (!c) break; 1299 *p=0; 1300 } 1301 else 1302 { 1303 if (pp==NULL) pp=p; \ ??LoadTemplates_7: \ 00000130 000058E3 CMP R8,#+0 \ 00000134 0680A001 MOVEQ R8,R6 1304 } 1305 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 540494E5 LDR R0,[R4, #+1108] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 540484E5 STR R0,[R4, #+1108] \ 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 1306 } 1307 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 `?` 1308 } 1309 1310 1311 1312 //---------------------- AUTOBOT MESSAGE -------------------------// 1313 1314 1315 #ifdef kluchnik 1316 char *bot_chars; //Собственно файл 1317 char **bot_lines; //Массив указателей на строки 1318 1319 void FreeBotMessage(void) 1320 { 1321 if (bot_lines) mfree(bot_lines); 1322 if (bot_chars) mfree(bot_chars); 1323 bot_lines=NULL; 1324 bot_chars=NULL; 1325 } 1326 1327 int LoadBotMessage(unsigned int uin) 1328 { 1329 FSTATS stat; 1330 char fn[256]; 1331 int f; 1332 unsigned int ul; 1333 int i; 1334 int fsize; 1335 char *p; 1336 char *pp; 1337 int c; 1338 FreeBotMessage(); 1339 strcpy(fn,TEMPLATES_PATH); 1340 i=strlen(fn); 1341 sprintf(fn+i,"\\bot_%d.txt",uin); 1342 if (GetFileStats(fn,&stat,&ul)==-1) goto L1; 1343 if ((fsize=stat.size)<=0) goto L1; 1344 if ((f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul))==-1) 1345 { 1346 L1: 1347 strcpy(fn+i,"\\bot.txt"); 1348 if (GetFileStats(fn,&stat,&ul)==-1) return 0; 1349 if ((fsize=stat.size)<=0) return 0; 1350 f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul); 1351 } 1352 if (f==-1) return 0; 1353 p=bot_chars=malloc(fsize+1); 1354 p[fread(f,p,fsize,&ul)]=0; 1355 fclose(f,&ul); 1356 i=0; 1357 pp=p; 1358 for(;;) 1359 { 1360 c=*p; 1361 if (c<32) 1362 { 1363 if (pp&&(pp!=p)) 1364 { 1365 bot_lines=realloc(bot_lines,(i+1)*sizeof(char *)); 1366 bot_lines[i++]=pp; 1367 } 1368 pp=NULL; 1369 if (!c) break; 1370 *p=0; 1371 } 1372 else 1373 { 1374 if (pp==NULL) pp=p; 1375 } 1376 p++; 1377 } 1378 return i; 1379 } 1380 #endif 1381 1382 //=================================================================== 1383 1384 int RXstate=EOP; //-sizeof(RXpkt)..-1 - receive header, 0..RXpkt.data_len - receive data 1385 \ In segment DATA_Z, align 4, align-sorted 1386 TPKT RXbuf; \ RXbuf: \ 00000000 DS8 16392 \ In segment DATA_Z, align 4, align-sorted 1387 TPKT TXbuf; \ TXbuf: \ 00000000 DS8 16392 1388 1389 int connect_state=0; 1390 1391 int sock=-1; 1392 1393 volatile unsigned long TOTALRECEIVED; 1394 volatile unsigned long TOTALSENDED; 1395 volatile unsigned long ALLTOTALRECEIVED; //by BoBa 10.07 1396 volatile unsigned long ALLTOTALSENDED; 1397 1398 //volatile int sendq_l=0; //Длинна очереди для send 1399 //volatile void *sendq_p=NULL; //указатель очереди 1400 1401 volatile int is_gprs_online=1; 1402 1403 GBSTMR reconnect_tmr; 1404 1405 extern void kill_data(void *p,void (*func_p)(void *)); 1406 \ In segment CODE, align 4, keep-with-next 1407 void ElfKiller(void) 1408 { \ ElfKiller: \ 00000000 00402DE9 PUSH {LR} 1409 extern void *ELF_BEGIN; 1410 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 1411 } 1412 1413 int total_unread; 1414 1415 volatile CLIST *cltop; 1416 1417 volatile unsigned int GROUP_CACHE; //Текущая группа для добавления 1418 1419 //volatile int contactlist_menu_id; 1420 1421 GBSTMR tmr_active; 1422 1423 volatile int edchat_id; 1424 1425 //Применяется для добавления сообщений 1426 //CLIST *edcontact; 1427 //void *edgui_data; 1428 1429 //static int prev_clmenu_itemcount; 1430 \ In segment DATA_Z, align 4, align-sorted 1431 char clm_hdr_text[64]; \ clm_hdr_text: \ 00000000 DS8 64 1432 1433 static const char key_clm_hdr_text[] = LG_CLT9INP; 1434 1435 static const int menusoftkeys[] = {0,1,2}; 1436 static const SOFTKEY_DESC menu_sk[] = 1437 { 1438 {0x0018, 0x0000, (int)LG_SELECT}, 1439 {0x0001, 0x0000, (int)LG_CLOSE}, 1440 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 1441 }; 1442 1443 char clmenu_sk_r[16]; 1444 static const char def_clmenu_sk_r[] = LG_CLOSE; 1445 static const char key_clmenu_sk_r[] = LG_CLEAR; 1446 1447 const SOFTKEYSTAB menu_skt = 1448 { 1449 menu_sk, 0 1450 }; 1451 1452 int tenseconds_to_ping; 1453 \ In segment CODE, align 4, keep-with-next 1454 LOGQ *NewLOGQ(const char *s) 1455 { \ NewLOGQ: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1456 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 1457 zeromem(p,sizeof(LOGQ)); \ 00000018 6010A0E3 MOV R1,#+96 \ 0000001C 1D0100EF SWI +285 1458 strcpy(p->text,s); \ 00000020 0410A0E1 MOV R1,R4 \ 00000024 600085E2 ADD R0,R5,#+96 \ 00000028 1A0000EF SWI +26 1459 return p; \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 3080BDE8 POP {R4,R5,PC} ;; return 1460 } 1461 \ In segment CODE, align 4, keep-with-next 1462 LOGQ *LastLOGQ(LOGQ **pp) 1463 { 1464 LOGQ *q=*pp; \ LastLOGQ: \ 00000000 000090E5 LDR R0,[R0, #+0] 1465 if (q) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 1EFF2F01 BXEQ LR \ 0000000C 000000EA B ??LastLOGQ_0 1466 { 1467 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 1468 } 1469 return(q); \ 00000020 1EFF2FE1 BX LR ;; return 1470 } 1471 1472 //Уничтожить лог \ In segment CODE, align 4, keep-with-next 1473 void FreeLOGQ(LOGQ **pp) 1474 { \ FreeLOGQ: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0010A0E1 MOV R1,R0 1475 LOGQ *p=*pp; \ 00000008 000091E5 LDR R0,[R1, #+0] 1476 *pp=NULL; //Сразу обрежем \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 002081E5 STR R2,[R1, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 1080BD08 POPEQ {R4,PC} 1477 while(p) 1478 { 1479 LOGQ *np=p->next; \ ??FreeLOGQ_0: \ 0000001C 004090E5 LDR R4,[R0, #+0] 1480 mfree(p); \ 00000020 150000EF SWI +21 1481 p=np; \ 00000024 0400B0E1 MOVS R0,R4 1482 } \ 00000028 FBFFFF1A BNE ??FreeLOGQ_0 1483 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 1484 1485 //Удалить элемент из лога \ In segment CODE, align 4, keep-with-next 1486 void RemoveLOGQ(LOGQ **queue, LOGQ *p) 1487 { \ RemoveLOGQ: \ 00000000 00402DE9 PUSH {LR} 1488 LOGQ *q=(LOGQ *)queue; \ 00000004 000000EA B ??RemoveLOGQ_0 1489 LOGQ *qp; 1490 while(qp=q->next) 1491 { 1492 if (qp==p) 1493 { 1494 q->next=p->next; 1495 break; 1496 } 1497 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] 1498 } 1499 mfree(p); //Если элемент вообще не в логе \ ??RemoveLOGQ_2: \ 00000028 0100A0E1 MOV R0,R1 \ 0000002C 150000EF SWI +21 1500 } \ 00000030 0080BDE8 POP {PC} ;; return 1501 1502 //Добавить элемент в лог \ In segment CODE, align 4, keep-with-next 1503 int AddLOGQ(LOGQ **queue, LOGQ *p) 1504 { 1505 LOGQ *q=(LOGQ *)queue; 1506 LOGQ *qp; 1507 int i=0; \ AddLOGQ: \ 00000000 0020A0E3 MOV R2,#+0 \ 00000004 000000EA B ??AddLOGQ_0 1508 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 1509 p->next=NULL; \ 0000001C 003081E5 STR R3,[R1, #+0] 1510 q->next=p; \ 00000020 001080E5 STR R1,[R0, #+0] 1511 return(i+1); //Теперь всего в логе элементов \ 00000024 0200A0E1 MOV R0,R2 \ 00000028 1EFF2FE1 BX LR ;; return 1512 } 1513 \ In segment CODE, align 4, keep-with-next 1514 char *GetLastXTextLOGQ(CLIST *t) 1515 { 1516 LOGQ *p = t->log; \ GetLastXTextLOGQ: \ 00000000 941090E5 LDR R1,[R0, #+148] 1517 char *s = 0; \ 00000004 0000A0E3 MOV R0,#+0 1518 if(!p) return 0; \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 0500001A BNE ??GetLastXTextLOGQ_0 \ 00000010 1EFF2FE1 BX LR 1519 while(p->next) 1520 { 1521 if((p->type&0x0F)==3) \ ??GetLastXTextLOGQ_1: \ 00000014 0C3091E5 LDR R3,[R1, #+12] \ 00000018 0F3003E2 AND R3,R3,#0xF \ 0000001C 030053E3 CMP R3,#+3 1522 s = p->text; \ 00000020 60008102 ADDEQ R0,R1,#+96 1523 p = p->next; \ 00000024 0210A0E1 MOV R1,R2 1524 } \ ??GetLastXTextLOGQ_0: \ 00000028 002091E5 LDR R2,[R1, #+0] \ 0000002C 000052E3 CMP R2,#+0 \ 00000030 F7FFFF1A BNE ??GetLastXTextLOGQ_1 1525 if((p->type&0x0F)==3) \ 00000034 0C2091E5 LDR R2,[R1, #+12] \ 00000038 0F2002E2 AND R2,R2,#0xF \ 0000003C 030052E3 CMP R2,#+3 1526 s = p->text; \ 00000040 60008102 ADDEQ R0,R1,#+96 1527 return s; \ 00000044 1EFF2FE1 BX LR ;; return 1528 } 1529 \ In segment CODE, align 4, keep-with-next 1530 int GetIconIndex(CLIST *t) 1531 { 1532 unsigned short s; 1533 if (t) \ GetIconIndex: \ 00000000 000050E3 CMP R0,#+0 \ 00000004 3400000A BEQ ??GetIconIndex_0 1534 { 1535 s=t->state; 1536 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 1537 if (t->isunread) \ 0000001C 840090E5 LDR R0,[R0, #+132] \ 00000020 000050E3 CMP R0,#+0 1538 return(IS_MSG); \ 00000024 0D00A013 MOVNE R0,#+13 \ 00000028 1EFF2F11 BXNE LR 1539 else 1540 { 1541 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 1542 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 1543 if ((s&0xF000)==0x3000) return (IS_EVIL); \ 0000004C C00D52E3 CMP R2,#+12288 \ 00000050 0700A003 MOVEQ R0,#+7 \ 00000054 1EFF2F01 BXEQ LR 1544 if ((s&0xF000)==0x4000) return (IS_DEPRESSION); \ 00000058 400C52E3 CMP R2,#+16384 \ 0000005C 0600A003 MOVEQ R0,#+6 \ 00000060 1EFF2F01 BXEQ LR 1545 if ((s&0xF000)==0x5000) return (IS_HOME); \ 00000064 500C52E3 CMP R2,#+20480 \ 00000068 0800A003 MOVEQ R0,#+8 \ 0000006C 1EFF2F01 BXEQ LR 1546 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 1547 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 1548 if (s & 0x0001) return(IS_AWAY); \ ??GetIconIndex_1: \ 00000090 010011E3 TST R1,#0x1 \ 00000094 0200A013 MOVNE R0,#+2 \ 00000098 1EFF2F11 BXNE LR 1549 if (s & 0x0005) return(IS_NA); \ 0000009C 050011E3 TST R1,#0x5 \ 000000A0 0300A013 MOVNE R0,#+3 \ 000000A4 1EFF2F11 BXNE LR 1550 if (s & 0x0011) return(IS_OCCUPIED); \ 000000A8 110011E3 TST R1,#0x11 \ 000000AC 0400A013 MOVNE R0,#+4 \ 000000B0 1EFF2F11 BXNE LR 1551 if (s & 0x0013) return(IS_DND); \ 000000B4 130011E3 TST R1,#0x13 \ 000000B8 0500A013 MOVNE R0,#+5 \ 000000BC 1EFF2F11 BXNE LR 1552 if (s & 0x0002) return(IS_FFC); \ 000000C0 020011E3 TST R1,#0x2 \ 000000C4 EFFFFF1A BNE ??GetIconIndex_2 1553 if (s & 0x0100) return(IS_INVISIBLE); \ 000000C8 400F11E3 TST R1,#0x100 \ 000000CC 0100A013 MOVNE R0,#+1 \ 000000D0 1EFF2F11 BXNE LR 1554 } 1555 } 1556 else 1557 { 1558 return(IS_UNKNOWN); 1559 } 1560 return(IS_ONLINE); \ 000000D4 0B00A0E3 MOV R0,#+11 \ 000000D8 1EFF2FE1 BX LR \ ??GetIconIndex_0: \ 000000DC 0E00A0E3 MOV R0,#+14 \ 000000E0 1EFF2FE1 BX LR ;; return 1561 } 1562 \ In segment CODE, align 4, keep-with-next 1563 LOGQ *FindContactLOGQByAck(TPKT *p) 1564 { \ FindContactLOGQByAck: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1565 CLIST *t; 1566 LockSched(); \ 00000008 460100EF SWI +326 1567 t=FindContactByUin(p->pkt.uin); \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000014 0050A0E1 MOV R5,R0 1568 UnlockSched(); \ 00000018 470100EF SWI +327 1569 unsigned int id=*((unsigned short*)(p->data)); \ 0000001C B840D4E1 LDRH R4,[R4, #+8] 1570 LOGQ *q; 1571 if (!t) return NULL; \ 00000020 000055E3 CMP R5,#+0 \ 00000024 0000A003 MOVEQ R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 1572 LockSched(); \ 0000002C 460100EF SWI +326 1573 q=t->log; \ 00000030 945095E5 LDR R5,[R5, #+148] \ 00000034 000000EA B ??FindContactLOGQByAck_0 1574 while(q) 1575 { 1576 if (q->ID==id) break; 1577 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 1578 } 1579 UnlockSched(); \ 0000004C 470100EF SWI +327 1580 return q; \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 3080BDE8 POP {R4,R5,PC} ;; return 1581 } 1582 1583 1584 1585 1586 /*----------------------------- SAVE CONTACT LIST TO FILE --------------------------------*/ 1587 \ In segment CODE, align 4, keep-with-next 1588 void CreateCLFile(void) 1589 { \ CreateCLFile: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 42DF4DE2 SUB SP,SP,#+264 1590 CLIST *t; 1591 t=(CLIST *)(&cltop); \ 00000008 ........ LDR R5,??DataTable72 ;; i_rc + 1148 1592 char *s=malloc(128); 1593 volatile int hFile_cl; 1594 unsigned int io_error_cl = 0; 1595 char fn[256]; 1596 strcpy(fn,TEMPLATES_PATH); 1597 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,??DataTable60 ;; 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 1598 unlink(fn,&io_error_cl); \ 0000003C 0D10A0E1 MOV R1,SP \ 00000040 08008DE2 ADD R0,SP,#+8 \ 00000044 6B0100EF SWI +363 1599 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] 1600 if(hFile_cl!=-1) \ 00000064 04009DE5 LDR R0,[SP, #+4] \ 00000068 010070E3 CMN R0,#+1 \ 0000006C 1C00001A BNE ??CreateCLFile_1 1601 { 1602 while(t=(CLIST *)(t->next)) 1603 { 1604 if(!t->isgroup && t->uin!=UIN) 1605 { 1606 sprintf(s, ";%d;%s;;;\r\n", t->uin, t->name); 1607 fwrite(hFile_cl, s, strlen(s), &io_error_cl); 1608 } 1609 } 1610 ShowMSG(2,(int)"Saved local.cl"); 1611 } 1612 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 1613 fclose(hFile_cl, &io_error_cl); \ 0000007C 04009DE5 LDR R0,[SP, #+4] \ 00000080 0D10A0E1 MOV R1,SP \ 00000084 0D0000EF SWI +13 1614 mfree(s); \ 00000088 0400A0E1 MOV R0,R4 \ 0000008C 150000EF SWI +21 1615 } \ 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,??DataTable61 ;; 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 `?` 1616 1617 /*-----------------------------------------------------------------------------------------*/ 1618 1619 char on_off_buf[128]; 1620 int on_off_timer=0; 1621 char ContactT9Key[32]; 1622 int kopa_online; 1623 int kopa_kontaktu; \ In segment DATA_Z, align 4, align-sorted 1624 char status[64]; \ status: \ 00000000 DS8 64 1625 //void UpdateCLheader(void){}; 1626 1627 \ In segment CODE, align 4, keep-with-next 1628 void ClearContactT9Key(void) 1629 { 1630 zeromem(ContactT9Key,sizeof(ContactT9Key)); \ ClearContactT9Key: \ 00000000 0C009FE5 LDR R0,??ClearContactT9Key_0 ;; i_rc + 1616 \ 00000004 00402DE9 PUSH {LR} \ 00000008 2010A0E3 MOV R1,#+32 \ 0000000C 1D0100EF SWI +285 1631 } \ 00000010 0080BDE8 POP {PC} ;; return \ ??ClearContactT9Key_0: \ 00000014 ........ DC32 i_rc + 1616 1632 \ In segment CODE, align 4, keep-with-next 1633 void AddContactT9Key(int chr) 1634 { \ AddContactT9Key: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1635 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R5,??DataTable63 ;; i_rc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 650E85E2 ADD R0,R5,#+1616 \ 00000010 1B0000EF SWI +27 1636 if (l<(sizeof(ContactT9Key)-1)) \ 00000014 1F0050E3 CMP R0,#+31 1637 { 1638 ContactT9Key[l]=chr; \ 00000018 05008030 ADDCC R0,R0,R5 \ 0000001C 5046C035 STRBCC R4,[R0, #+1616] 1639 } 1640 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 1641 \ In segment CODE, align 4, keep-with-next 1642 void BackSpaceContactT9(void) 1643 { \ BackSpaceContactT9: \ 00000000 10402DE9 PUSH {R4,LR} 1644 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R4,??DataTable63 ;; i_rc \ 00000008 650E84E2 ADD R0,R4,#+1616 \ 0000000C 1B0000EF SWI +27 1645 if (l) \ 00000010 000050E3 CMP R0,#+0 1646 { 1647 l--; 1648 ContactT9Key[l]=0; \ 00000014 04008010 ADDNE R0,R0,R4 \ 00000018 0010A013 MOVNE R1,#+0 \ 0000001C 4F16C015 STRBNE R1,[R0, #+1615] 1649 } 1650 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 1651 1652 1653 void RecountMenu(CLIST *req, int needfocus); 1654 1655 //--------------------------------------------------------------------// 1656 1657 \ In segment CODE, align 4, keep-with-next 1658 void LongPressActionOnChat(CLIST *t,int i) 1659 { \ LongPressActionOnChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 1660 switch(i) \ 00000004 ........ LDR R4,??DataTable81 ;; i_rc \ 00000008 ........ LDR R9,??DataTable65 ;; WriteDefSettings \ 0000000C ........ LDR R7,??DataTable74 ;; Canvas \ 00000010 04D04DE2 SUB SP,SP,#+4 \ 00000014 4820A0E3 MOV R2,#+72 \ 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 658EA0E3 MOV R8,#+1616 \ 00000030 011041E2 SUB R1,R1,#+1 \ 00000034 0C0051E3 CMP R1,#+12 \ 00000038 CF00008A BHI ??LongPressActionOnChat_1 \ 0000003C 012F8FE2 ADR R2,??LongPressActionOnChat_0 \ 00000040 0120D2E7 LDRB R2,[R2, R1] \ 00000044 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??LongPressActionOnChat_0: \ 00000048 03101E29 DC8 +3,+16,+30,+41 \ 0000004C 35526972 DC8 +53,+82,+105,+114 \ 00000050 7F8799AF DC8 +127,+135,+153,+175 \ 00000054 C8000000 DC8 +200,+0,+0,+0 1661 { 1662 case 1: 1663 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??LongPressActionOnChat_2: \ 00000058 3C0494E5 LDR R0,[R4, #+1084] \ 0000005C 000050E3 CMP R0,#+0 \ 00000060 00B0A013 MOVNE R11,#+0 \ 00000064 3CB484E5 STR R11,[R4, #+1084] 1664 if(Is_Sounds_Enabled) \ 00000068 00005BE3 CMP R11,#+0 1665 { 1666 // ShowMSG(1,(int)"Sound 0n"); 1667 strcpy(prmsg,"Sound 0n"); \ 0000006C 2C108712 ADDNE R1,R7,#+44 1668 PrintTimer=2; 1669 } 1670 else 1671 { 1672 // ShowMSG(1,(int)"Sound Off"); 1673 strcpy(prmsg,"Sound Off"); \ 00000070 38108702 ADDEQ R1,R7,#+56 \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1A0000EF SWI +26 1674 PrintTimer=2; \ 0000007C 9CA284E5 STR R10,[R4, #+668] 1675 } 1676 SUBPROC((void*)WriteDefSettings); \ 00000080 0900A0E1 MOV R0,R9 \ 00000084 710100EF SWI +369 \ 00000088 BB0000EA B ??LongPressActionOnChat_1 1677 break; 1678 case 2: 1679 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??LongPressActionOnChat_3: \ 0000008C E40294E5 LDR R0,[R4, #+740] \ 00000090 000050E3 CMP R0,#+0 \ 00000094 00B0A013 MOVNE R11,#+0 \ 00000098 E4B284E5 STR R11,[R4, #+740] 1680 SUBPROC((void*)WriteDefSettings); \ 0000009C 0900A0E1 MOV R0,R9 \ 000000A0 710100EF SWI +369 1681 if(Is_Vibra_Enabled) \ 000000A4 E40294E5 LDR R0,[R4, #+740] \ 000000A8 000050E3 CMP R0,#+0 \ 000000AC 50108702 ADDEQ R1,R7,#+80 1682 { 1683 // ShowMSG(1,(int)"Vibra On"); 1684 strcpy(prmsg,"Vibra On"); \ 000000B0 44108712 ADDNE R1,R7,#+68 \ ??LongPressActionOnChat_4: \ 000000B4 0500A0E1 MOV R0,R5 \ 000000B8 1A0000EF SWI +26 1685 PrintTimer=2; \ 000000BC 9CA284E5 STR R10,[R4, #+668] \ 000000C0 AD0000EA B ??LongPressActionOnChat_1 1686 } 1687 else 1688 { 1689 // ShowMSG(1,(int)"Vibra Off"); 1690 strcpy(prmsg,"Vibra Off"); 1691 PrintTimer=2; 1692 } 1693 break; 1694 case 3: 1695 if(CurrentPrivateStatus!=1) \ ??LongPressActionOnChat_5: \ 000000C4 480494E5 LDR R0,[R4, #+1096] \ 000000C8 010050E3 CMP R0,#+1 \ 000000CC 0300000A BEQ ??LongPressActionOnChat_6 1696 { 1697 SetPrivateStatus(1);//Инвиз \ 000000D0 0100A0E3 MOV R0,#+1 \ 000000D4 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 1698 // ShowMSG(1,(int)"Инвиз включен"); 1699 strcpy(prmsg,"Инвиз включен"); \ 000000D8 5C1087E2 ADD R1,R7,#+92 \ ??LongPressActionOnChat_7: \ 000000DC F4FFFFEA B ??LongPressActionOnChat_4 1700 PrintTimer=2; 1701 } 1702 else 1703 { 1704 SetPrivateStatus(3); \ ??LongPressActionOnChat_6: \ 000000E0 0300A0E3 MOV R0,#+3 \ 000000E4 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 1705 // ShowMSG(1,(int)"Инвиз выключен"); 1706 strcpy(prmsg,"Инвиз выключен"); \ 000000E8 6C1087E2 ADD R1,R7,#+108 \ 000000EC F0FFFFEA B ??LongPressActionOnChat_4 1707 PrintTimer=2; 1708 } 1709 break; 1710 case 4: 1711 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??LongPressActionOnChat_8: \ 000000F0 C80294E5 LDR R0,[R4, #+712] \ 000000F4 000050E3 CMP R0,#+0 \ 000000F8 00B0A013 MOVNE R11,#+0 \ 000000FC C8B284E5 STR R11,[R4, #+712] 1712 SUBPROC((void*)WriteDefSettings); \ 00000100 0900A0E1 MOV R0,R9 \ 00000104 710100EF SWI +369 1713 if(Is_Double_Vibra_On) \ 00000108 C80294E5 LDR R0,[R4, #+712] \ 0000010C 000050E3 CMP R0,#+0 1714 { 1715 // ShowMSG(1,(int)"Vibra rem On"); 1716 strcpy(prmsg,"Vibra rem On"); \ 00000110 7C108712 ADDNE R1,R7,#+124 \ 00000114 E6FFFF1A BNE ??LongPressActionOnChat_4 1717 PrintTimer=2; 1718 } 1719 else 1720 { 1721 // ShowMSG(1,(int)"Vibra rem Off"); 1722 strcpy(prmsg,"Vibra rem Off"); \ 00000118 8C1087E2 ADD R1,R7,#+140 \ 0000011C E4FFFFEA B ??LongPressActionOnChat_4 1723 PrintTimer=2; 1724 } 1725 break; 1726 case 5: 1727 { 1728 CLIST *cl; 1729 cl=(CLIST *)(&cltop); \ ??LongPressActionOnChat_9: \ 00000120 750F48E2 SUB R0,R8,#+468 \ 00000124 049080E0 ADD R9,R0,R4 \ 00000128 060000EA B ??LongPressActionOnChat_10 1730 while(cl=(CLIST *)(cl->next)) 1731 { 1732 if(cl->log) \ ??LongPressActionOnChat_11: \ 0000012C 940099E5 LDR R0,[R9, #+148] \ 00000130 000050E3 CMP R0,#+0 \ 00000134 0300000A BEQ ??LongPressActionOnChat_10 1733 { 1734 FreeLOGQ(&cl->log); \ 00000138 940089E2 ADD R0,R9,#+148 \ 0000013C ........ BL FreeLOGQ 1735 cl->msg_count=0; \ 00000140 A46089E5 STR R6,[R9, #+164] 1736 cl->isactive=0; \ 00000144 A06089E5 STR R6,[R9, #+160] 1737 } 1738 } \ ??LongPressActionOnChat_10: \ 00000148 009099E5 LDR R9,[R9, #+0] \ 0000014C 000059E3 CMP R9,#+0 \ 00000150 F5FFFF1A BNE ??LongPressActionOnChat_11 1739 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 1740 RecountMenu(NULL,1); \ ??LongPressActionOnChat_12: \ 00000170 0110A0E3 MOV R1,#+1 \ 00000174 0600A0E1 MOV R0,R6 \ 00000178 ........ BL RecountMenu 1741 // ShowMSG(1,(int)"All chat clear!"); 1742 strcpy(prmsg,"All chat clear!"); \ 0000017C 9C1087E2 ADD R1,R7,#+156 \ 00000180 0500A0E1 MOV R0,R5 \ 00000184 1A0000EF SWI +26 1743 PrintTimer=3; \ 00000188 0300A0E3 MOV R0,#+3 \ 0000018C 9C0284E5 STR R0,[R4, #+668] 1744 break; \ 00000190 790000EA B ??LongPressActionOnChat_1 1745 } 1746 case 6: 1747 if(!away_m) \ ??LongPressActionOnChat_13: \ 00000194 840394E5 LDR R0,[R4, #+900] \ 00000198 000050E3 CMP R0,#+0 \ 0000019C 0900001A BNE ??LongPressActionOnChat_14 1748 { 1749 away_m=!away_m; \ 000001A0 84B384E5 STR R11,[R4, #+900] 1750 GBS_StopTimer(&away_tmr); \ 000001A4 6F0D84E2 ADD R0,R4,#+7104 \ 000001A8 440100EF SWI +324 1751 msg_away_timer=AUTO_ENGADE*12; \ 000001AC ........ LDR R0,??DataTable67 ;; AUTO_ENGADE \ 000001B0 0C10A0E3 MOV R1,#+12 \ 000001B4 000090E5 LDR R0,[R0, #+0] \ 000001B8 910000E0 MUL R0,R1,R0 \ 000001BC 800384E5 STR R0,[R4, #+896] 1752 InputAwayMsg(); \ 000001C0 ........ BL InputAwayMsg \ 000001C4 6C0000EA B ??LongPressActionOnChat_1 1753 1754 } 1755 else 1756 { 1757 msg_away_timer=0; 1758 away_m=!away_m; 1759 if(change_back_status) \ ??LongPressActionOnChat_14: \ 000001C8 8C0394E5 LDR R0,[R4, #+908] \ 000001CC 806384E5 STR R6,[R4, #+896] \ 000001D0 846384E5 STR R6,[R4, #+900] \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 6800000A BEQ ??LongPressActionOnChat_15 1760 { 1761 CurrentStatus=status_rem; \ 000001DC 880394E5 LDR R0,[R4, #+904] \ 000001E0 740384E5 STR R0,[R4, #+884] 1762 set_my_status(); \ 000001E4 ........ BL set_my_status 1763 change_back_status=0; \ 000001E8 8C6384E5 STR R6,[R4, #+908] \ 000001EC 620000EA B ??LongPressActionOnChat_1 1764 } 1765 } 1766 // UpdateCLheader(); 1767 break; 1768 case 7: 1769 { 1770 Show_XTX=!(Show_XTX); \ ??LongPressActionOnChat_16: \ 000001F0 900394E5 LDR R0,[R4, #+912] \ 000001F4 000050E3 CMP R0,#+0 \ 000001F8 00B0A013 MOVNE R11,#+0 \ 000001FC 90B384E5 STR R11,[R4, #+912] 1771 if(Show_XTX) \ 00000200 00005BE3 CMP R11,#+0 1772 { 1773 // ShowMSG(1,(int)"Default show x-status"); 1774 strcpy(prmsg,"Default show x-status"); \ 00000204 AC108712 ADDNE R1,R7,#+172 \ 00000208 A9FFFF1A BNE ??LongPressActionOnChat_4 1775 PrintTimer=2; 1776 } 1777 else 1778 { 1779 // ShowMSG(1,(int)"Default show time"); 1780 strcpy(prmsg,"Default show time"); \ 0000020C C41087E2 ADD R1,R7,#+196 \ 00000210 A7FFFFEA B ??LongPressActionOnChat_4 1781 PrintTimer=2; 1782 } 1783 } 1784 break; 1785 case 8: 1786 { 1787 WSHDR *ws; 1788 ws=AllocWS(150); \ ??LongPressActionOnChat_17: \ 00000214 9600A0E3 MOV R0,#+150 \ 00000218 250100EF SWI +293 1789 str_2ws(ws,suc_config_name,128); \ 0000021C ........ LDR R1,??DataTable68 ;; suc_config_name \ 00000220 0040A0E1 MOV R4,R0 \ 00000224 8020A0E3 MOV R2,#+128 \ ??LongPressActionOnChat_18: \ 00000228 6C0100EF SWI +364 1790 ExecuteFile(ws,0,0); \ 0000022C 0020A0E3 MOV R2,#+0 \ 00000230 0210A0E1 MOV R1,R2 \ 00000234 0400A0E1 MOV R0,R4 \ 00000238 940000EF SWI +148 1791 FreeWS(ws); \ 0000023C 0400A0E1 MOV R0,R4 \ 00000240 290100EF SWI +297 \ 00000244 4C0000EA B ??LongPressActionOnChat_1 1792 } 1793 break; 1794 case 9: 1795 { 1796 WSHDR *ws; 1797 ws=AllocWS(150); \ ??LongPressActionOnChat_19: \ 00000248 9600A0E3 MOV R0,#+150 \ 0000024C 250100EF SWI +293 \ 00000250 0040A0E1 MOV R4,R0 1798 str_2ws(ws,suc_config_name_mod,128); \ 00000254 ........ LDR R0,??DataTable69 ;; suc_config_name_mod \ 00000258 8020A0E3 MOV R2,#+128 \ 0000025C 001090E5 LDR R1,[R0, #+0] \ 00000260 0400A0E1 MOV R0,R4 \ 00000264 EFFFFFEA B ??LongPressActionOnChat_18 1799 ExecuteFile(ws,0,0); 1800 FreeWS(ws); 1801 } 1802 break; 1803 case 10://ping 1804 { 1805 janis=1; \ ??LongPressActionOnChat_20: \ 00000268 ........ LDR R0,??DataTable70 ;; janis \ 0000026C 00B080E5 STR R11,[R0, #+0] 1806 TPKT *p; 1807 p=malloc(sizeof(PKT)+sizeof(TTime)); \ 00000270 1000A0E3 MOV R0,#+16 \ 00000274 140000EF SWI +20 \ 00000278 0040A0E1 MOV R4,R0 1808 GetDateTime(NULL,(TTime *)p->data); \ 0000027C 081084E2 ADD R1,R4,#+8 \ 00000280 0000A0E3 MOV R0,#+0 \ 00000284 B40000EF SWI +180 1809 p->pkt.uin=0; \ 00000288 006084E5 STR R6,[R4, #+0] 1810 p->pkt.type=T_ECHO; \ 0000028C 1200A0E3 MOV R0,#+18 \ 00000290 B400C4E1 STRH R0,[R4, #+4] 1811 p->pkt.data_len=sizeof(TTime); \ 00000294 0800A0E3 MOV R0,#+8 \ 00000298 B600C4E1 STRH R0,[R4, #+6] 1812 SUBPROC((void *)SendAnswer,0,p); \ 0000029C ........ LDR R0,??DataTable84 ;; SendAnswer \ 000002A0 0420A0E1 MOV R2,R4 \ 000002A4 0610A0E1 MOV R1,R6 \ 000002A8 710100EF SWI +369 \ 000002AC 320000EA B ??LongPressActionOnChat_1 1813 } 1814 break; 1815 case 11://go to idle 1816 { 1817 ClearContactT9Key(); \ ??LongPressActionOnChat_21: \ 000002B0 2010A0E3 MOV R1,#+32 \ 000002B4 040088E0 ADD R0,R8,R4 \ 000002B8 1D0100EF SWI +285 1818 RecountMenu(NULL,1); \ 000002BC 0110A0E3 MOV R1,#+1 \ 000002C0 0600A0E1 MOV R0,R6 \ 000002C4 ........ BL RecountMenu 1819 silenthide=1; \ 000002C8 34B484E5 STR R11,[R4, #+1076] 1820 gipc.name_to=ipc_xtask_name; \ 000002CC 6A0F48E2 SUB R0,R8,#+424 \ 000002D0 070080E0 ADD R0,R0,R7 \ 000002D4 D40084E5 STR R0,[R4, #+212] 1821 gipc.name_from=ipc_my_name; \ 000002D8 720F48E2 SUB R0,R8,#+456 \ 000002DC 070080E0 ADD R0,R0,R7 \ 000002E0 D80084E5 STR R0,[R4, #+216] 1822 gipc.data=0; \ 000002E4 DC6084E5 STR R6,[R4, #+220] 1823 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 000002E8 D43084E2 ADD R3,R4,#+212 \ 000002EC 0B20A0E1 MOV R2,R11 \ 000002F0 B010A0E3 MOV R1,#+176 \ 000002F4 DE1C81E3 ORR R1,R1,#0xDE00 \ 000002F8 0900A0E3 MOV R0,#+9 \ 000002FC 420C80E3 ORR R0,R0,#0x4200 \ 00000300 000100EF SWI +256 \ 00000304 1C0000EA B ??LongPressActionOnChat_1 1824 } 1825 break; 1826 case 12://hide & lock 1827 { 1828 ClearContactT9Key(); \ ??LongPressActionOnChat_22: \ 00000308 2010A0E3 MOV R1,#+32 \ 0000030C 040088E0 ADD R0,R8,R4 \ 00000310 1D0100EF SWI +285 1829 RecountMenu(NULL,1); \ 00000314 0110A0E3 MOV R1,#+1 \ 00000318 0600A0E1 MOV R0,R6 \ 0000031C ........ BL RecountMenu 1830 gipc.name_to=ipc_xtask_name; \ 00000320 6A0F48E2 SUB R0,R8,#+424 \ 00000324 070080E0 ADD R0,R0,R7 \ 00000328 D40084E5 STR R0,[R4, #+212] 1831 gipc.name_from=ipc_my_name; \ 0000032C 720F48E2 SUB R0,R8,#+456 \ 00000330 070080E0 ADD R0,R0,R7 \ 00000334 D80084E5 STR R0,[R4, #+216] 1832 gipc.data=0; \ 00000338 DC6084E5 STR R6,[R4, #+220] 1833 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 0000033C D43084E2 ADD R3,R4,#+212 \ 00000340 0B20A0E1 MOV R2,R11 \ 00000344 B010A0E3 MOV R1,#+176 \ 00000348 DE1C81E3 ORR R1,R1,#0xDE00 \ 0000034C 0900A0E3 MOV R0,#+9 \ 00000350 420C80E3 ORR R0,R0,#0x4200 \ 00000354 000100EF SWI +256 1834 if (IsUnlocked()) \ 00000358 430000EF SWI +67 \ 0000035C 000050E3 CMP R0,#+0 \ 00000360 0600000A BEQ ??LongPressActionOnChat_15 1835 { 1836 KbdLock(); \ 00000364 A90000EF SWI +169 \ 00000368 030000EA B ??LongPressActionOnChat_1 1837 } 1838 // return(-1); 1839 } 1840 break; 1841 case 13://users menu 1842 { 1843 int CreateContactMenu(CLIST *t); 1844 if(!t->isgroup) \ ??LongPressActionOnChat_23: \ 0000036C 081090E5 LDR R1,[R0, #+8] \ 00000370 000051E3 CMP R1,#+0 \ 00000374 0000001A BNE ??LongPressActionOnChat_1 1845 CreateContactMenu(t); \ 00000378 ........ BL CreateContactMenu 1846 } 1847 break; 1848 }//switch() 1849 1850 for(int j=0;j<1000;) j++; \ ??LongPressActionOnChat_1: \ 0000037C 0000A0E3 MOV R0,#+0 \ ??LongPressActionOnChat_15: \ 00000380 010080E2 ADD R0,R0,#+1 \ 00000384 FA0F50E3 CMP R0,#+1000 \ 00000388 FCFFFFBA BLT ??LongPressActionOnChat_15 1851 1852 } \ 0000038C F18FBDE8 POP {R0,R4-R11,PC} ;; return 1853 1854 //{"Без действия","Звук","Вибра","Инвиз","Реж.напоминания","Очистить чаты","Автоответчик","Показ.хстат/время","Конфиг","Конфиг мода","Пинг","Заблокировать","На гэ","Меню юзера"} 1855 \ In segment CODE, align 4, keep-with-next 1856 void LongPressAction(CLIST *t,int key) 1857 { \ LongPressAction: \ 00000000 00402DE9 PUSH {LR} 1858 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 1859 { 1860 case '0': LongPressActionOnChat(t,longAct_0); break; \ ??LongPressAction_1: \ 00000054 78109FE5 LDR R1,??LongPressAction_2 ;; longAct_0 \ 00000058 040000EA B ??LongPressAction_3 1861 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} 1862 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} 1863 case '3': LongPressActionOnChat(t,longAct_3); break; \ ??LongPressAction_6: \ 0000007C 5C109FE5 LDR R1,??LongPressAction_2+0xC ;; longAct_3 \ 00000080 FAFFFFEA B ??LongPressAction_3 1864 case '4': LongPressActionOnChat(t,longAct_4); break; \ ??LongPressAction_7: \ 00000084 58109FE5 LDR R1,??LongPressAction_2+0x10 ;; longAct_4 \ 00000088 F8FFFFEA B ??LongPressAction_3 1865 case '5': LongPressActionOnChat(t,longAct_5); break; \ ??LongPressAction_8: \ 0000008C 54109FE5 LDR R1,??LongPressAction_2+0x14 ;; longAct_5 \ 00000090 F6FFFFEA B ??LongPressAction_3 1866 case '6': LongPressActionOnChat(t,longAct_6); break; \ ??LongPressAction_9: \ 00000094 50109FE5 LDR R1,??LongPressAction_2+0x18 ;; longAct_6 \ 00000098 F4FFFFEA B ??LongPressAction_3 1867 case '7': LongPressActionOnChat(t,longAct_7); break; \ ??LongPressAction_10: \ 0000009C 4C109FE5 LDR R1,??LongPressAction_2+0x1C ;; longAct_7 \ 000000A0 F2FFFFEA B ??LongPressAction_3 1868 case '8': LongPressActionOnChat(t,longAct_8); break; \ ??LongPressAction_11: \ 000000A4 48109FE5 LDR R1,??LongPressAction_2+0x20 ;; longAct_8 \ 000000A8 F0FFFFEA B ??LongPressAction_3 1869 case '9': LongPressActionOnChat(t,longAct_9); break; \ ??LongPressAction_12: \ 000000AC 44109FE5 LDR R1,??LongPressAction_2+0x24 ;; longAct_9 \ 000000B0 EEFFFFEA B ??LongPressAction_3 1870 case '*': LongPressActionOnChat(t,longAct_10); break; \ ??LongPressAction_13: \ 000000B4 40109FE5 LDR R1,??LongPressAction_2+0x28 ;; longAct_10 \ 000000B8 ECFFFFEA B ??LongPressAction_3 1871 case '#': LongPressActionOnChat(t,longAct_11); break; \ ??LongPressAction_14: \ 000000BC 3C109FE5 LDR R1,??LongPressAction_2+0x2C ;; longAct_11 \ 000000C0 EAFFFFEA B ??LongPressAction_3 1872 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 1873 } 1874 } \ ??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 1875 1876 char hostbuf2[128]; 1877 1878 \ In segment CODE, align 4, keep-with-next 1879 void GetOnTotalContact(int group_id,int *_onlinetotal) 1880 { 1881 CLIST *t; 1882 t=(CLIST *)&cltop; \ GetOnTotalContact: \ 00000000 ........ LDR R2,??DataTable72 ;; i_rc + 1148 \ 00000004 30002DE9 PUSH {R4,R5} 1883 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 1884 while((t=t->next)) 1885 { 1886 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 1887 { 1888 total++; 1889 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 1890 } 1891 } \ ??GetOnTotalContact_0: \ 00000040 002092E5 LDR R2,[R2, #+0] \ 00000044 000052E3 CMP R2,#+0 \ 00000048 F3FFFF1A BNE ??GetOnTotalContact_1 1892 _onlinetotal[0]=online; \ 0000004C 003081E5 STR R3,[R1, #+0] 1893 _onlinetotal[1]=total; \ 00000050 04C081E5 STR R12,[R1, #+4] 1894 } \ 00000054 3000BDE8 POP {R4,R5} \ 00000058 1EFF2FE1 BX LR ;; return 1895 1896 //=============================================================================================== 1897 1898 int DNR_ID=0; 1899 int DNR_TRIES=3; 1900 1901 char hostname[128]; //2058 che toka 128? :) 1902 1903 int host_counter = 0; 1904 1905 //--------------------------------------------------------------------------- 1906 \ In segment CODE, align 4, keep-with-next 1907 const char *GetHost(int cnt, const char *str, char *buf) 1908 { 1909 const char *tmp = str, *begin, *end; \ GetHost: \ 00000000 0130A0E1 MOV R3,R1 1910 if(cnt) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0100001A BNE ??GetHost_0 \ 0000000C 180000EA B ??GetHost_1 1911 { 1912 for(;cnt;cnt--) 1913 { 1914 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 1915 if(!*str) str = tmp; \ 00000030 00005CE3 CMP R12,#+0 \ 00000034 0200001A BNE ??GetHost_3 \ 00000038 0310A0E1 MOV R1,R3 \ 0000003C 000000EA B ??GetHost_3 1916 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 1917 if(!*str) str = tmp; \ ??GetHost_5: \ 00000064 00005CE3 CMP R12,#+0 \ 00000068 0310A001 MOVEQ R1,R3 1918 } \ 0000006C 010050E2 SUBS R0,R0,#+1 \ 00000070 E7FFFF1A BNE ??GetHost_0 1919 } 1920 tmp = buf; \ ??GetHost_1: \ 00000074 0200A0E1 MOV R0,R2 1921 begin = str; \ 00000078 0130A0E1 MOV R3,R1 \ 0000007C 000000EA B ??GetHost_6 1922 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 1923 end = str; 1924 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 1936 } 1937 } 1938 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 1939 int GetPort(int cnt, const char *str) 1940 { \ GetPort: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 1941 const char *tmp = str; \ 00000008 01C0A0E1 MOV R12,R1 1942 char numbuf[6], numcnt = 0; \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 0030A0E3 MOV R3,#+0 1943 if(cnt) \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0100001A BNE ??GetPort_0 \ 0000001C 180000EA B ??GetPort_1 1944 { 1945 for(;cnt;cnt--) 1946 { 1947 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 1948 if(!*str) str = tmp; \ 00000040 000054E3 CMP R4,#+0 \ 00000044 0200001A BNE ??GetPort_3 \ 00000048 0C10A0E1 MOV R1,R12 \ 0000004C 000000EA B ??GetPort_3 1949 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 1950 if(!*str) str = tmp; \ ??GetPort_5: \ 00000074 000054E3 CMP R4,#+0 \ 00000078 0C10A001 MOVEQ R1,R12 1951 } \ 0000007C 010050E2 SUBS R0,R0,#+1 \ 00000080 E7FFFF1A BNE ??GetPort_0 1952 } 1953 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 1954 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} 1955 str++; 1956 numbuf[5] = 0; \ 000000BC 0520CDE5 STRB R2,[SP, #+5] \ 000000C0 030000EA B ??GetPort_7 1957 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 1958 numbuf[numcnt] = 0; //2058 \ ??GetPort_9: \ 00000100 0020C0E5 STRB R2,[R0, #+0] 1959 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 1960 1961 } 1962 // 1963 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 1964 int GetHostsCount(const char *str) 1965 { 1966 char cnt = 1; \ GetHostsCount: \ 00000000 0110A0E3 MOV R1,#+1 \ 00000004 000000EA B ??GetHostsCount_0 1967 for(;cnt;cnt++) 1968 { 1969 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 1970 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 1971 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 1972 if(!*str) return cnt; \ ??GetHostsCount_5: \ 0000005C 000052E3 CMP R2,#+0 \ 00000060 F2FFFF0A BEQ ??GetHostsCount_3 1973 } \ 00000064 011081E2 ADD R1,R1,#+1 \ 00000068 FF1011E2 ANDS R1,R1,#0xFF \ 0000006C E6FFFF1A BNE ??GetHostsCount_0 1974 return 0; \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 1EFF2FE1 BX LR ;; return 1975 } 1976 //--------------------------------------------------------------------------- 1977 \ In segment CODE, align 4, keep-with-next 1978 void create_connect(void) 1979 { \ create_connect: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 1980 // static int host_counter = 0; 1981 char hostbuf[128], buf[128]; 1982 int hostport; 1983 int ***p_res=NULL; 1984 void do_reconnect(void); 1985 SOCK_ADDR sa; 1986 //Устанавливаем соединение 1987 connect_state = 0; \ 00000004 ........ LDR R5,??DataTable81 ;; i_rc 1988 int err; 1989 unsigned int ip; 1990 GBS_DelTimer(&reconnect_tmr); 1991 if (!IsGPRSEnabled()) \ 00000008 ........ LDR R8,??DataTable74 ;; Canvas \ 0000000C 45DF4DE2 SUB SP,SP,#+276 \ 00000010 0040A0E3 MOV R4,#+0 \ 00000014 00408DE5 STR R4,[SP, #+0] \ 00000018 5C4485E5 STR R4,[R5, #+1116] \ 0000001C B000A0E3 MOV R0,#+176 \ 00000020 780D80E3 ORR R0,R0,#0x1E00 \ 00000024 056080E0 ADD R6,R0,R5 \ 00000028 0600A0E1 MOV R0,R6 \ 0000002C 8C0100EF SWI +396 \ 00000030 9000A0E3 MOV R0,#+144 \ 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 1992 { 1993 is_gprs_online=0; \ 00000048 744485E5 STR R4,[R5, #+1140] 1994 strcpy(logmsg,LG_GRWAITFORGPRS); \ 0000004C D81088E2 ADD R1,R8,#+216 \ 00000050 0700A0E1 MOV R0,R7 \ 00000054 1A0000EF SWI +26 1995 SMART_REDRAW(); \ 00000058 870000EA B ??create_connect_1 1996 return; 1997 } 1998 DNR_ID=0; 1999 *socklasterr()=0; 2000 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 984485E5 STR R4,[R5, #+1176] \ 00000064 7C8100EF SWI +33148 \ 00000068 004080E5 STR R4,[R0, #+0] \ 0000006C 0900A0E1 MOV R0,R9 \ 00000070 ........ BL GetHostsCount \ 00000074 A01495E5 LDR R1,[R5, #+1184] \ 00000078 010040E2 SUB R0,R0,#+1 \ 0000007C 010050E1 CMP R0,R1 \ 00000080 A04485B5 STRLT R4,[R5, #+1184] 2001 GetHost(host_counter, NATICQ_HOST, hostbuf); \ 00000084 A00495E5 LDR R0,[R5, #+1184] \ 00000088 14208DE2 ADD R2,SP,#+20 \ 0000008C 0910A0E1 MOV R1,R9 \ 00000090 ........ BL GetHost 2002 hostport = GetPort(host_counter, NATICQ_HOST); \ 00000094 A00495E5 LDR R0,[R5, #+1184] \ 00000098 0910A0E1 MOV R1,R9 \ 0000009C ........ BL GetPort \ 000000A0 0090A0E1 MOV R9,R0 2003 host_counter++; \ 000000A4 A00495E5 LDR R0,[R5, #+1184] 2004 2005 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 A00485E5 STR R0,[R5, #+1184] \ 000000B4 14208DE2 ADD R2,SP,#+20 \ 000000B8 F01088E2 ADD R1,R8,#+240 \ 000000BC E000A0E3 MOV R0,#+224 \ 000000C0 7C0D80E3 ORR R0,R0,#0x1F00 \ 000000C4 050080E0 ADD R0,R0,R5 \ 000000C8 160000EF SWI +22 2006 //strcpy(hostbuf2, hostbuf); //vyvod host v get_online_time 2007 zeromem(hostbuf2,128); \ 000000CC 6000A0E3 MOV R0,#+96 \ 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 2008 sprintf(hostbuf2, percent_s,hostbuf); \ 000000E4 14208DE2 ADD R2,SP,#+20 \ 000000E8 0B1088E2 ADD R1,R8,#+11 \ 000000EC 0A00A0E1 MOV R0,R10 2009 strcpy(logmsg,buf); 2010 SMART_REDRAW(); 2011 2012 ip=str2ip(hostbuf); \ 000000F0 ........ LDR R10,??DataTable75 ;; 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 2013 if (ip!=0xFFFFFFFF) 2014 { 2015 sa.ip=ip; \ 0000011C 08008DE5 STR R0,[SP, #+8] 2016 strcpy(logmsg,"\nConnect by IP!"); //strcat->strcpy \ 00000120 411F88E2 ADD R1,R8,#+260 \ 00000124 0700A0E1 MOV R0,R7 \ 00000128 1A0000EF SWI +26 2017 SMART_REDRAW(); \ 0000012C ........ BL SMART_REDRAW 2018 goto L_CONNECT; \ 00000130 3B0000EA B ??create_connect_4 2019 } \ ??create_connect_3: \ 00000134 6F1F8FE2 ADR R1,??create_connect_2 ;; "\n" \ 00000138 0700A0E1 MOV R0,R7 2020 strcat(logmsg,"\n"); \ 0000013C 170000EF SWI +23 2021 strcpy(logmsg,LG_GRSENDDNR); //strcat->strcpy \ 00000140 451F88E2 ADD R1,R8,#+276 \ 00000144 0700A0E1 MOV R0,R7 \ 00000148 1A0000EF SWI +26 2022 SMART_REDRAW(); \ 0000014C ........ BL SMART_REDRAW 2023 err=async_gethostbyname(hostbuf,&p_res,&DNR_ID); //03461351 3<70<19<81 \ 00000150 9800A0E3 MOV R0,#+152 \ 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 2024 if (err) \ 0000016C 1600000A BEQ ??create_connect_5 2025 { 2026 if ((err==0xC9)||(err==0xD6)) \ 00000170 C90053E3 CMP R3,#+201 \ 00000174 D6005313 CMPNE R3,#+214 \ 00000178 0600001A BNE ??create_connect_6 2027 { 2028 if (DNR_ID) \ 0000017C 980495E5 LDR R0,[R5, #+1176] \ 00000180 000050E3 CMP R0,#+0 \ 00000184 1000000A BEQ ??create_connect_5 2029 { 2030 host_counter--; \ 00000188 A00495E5 LDR R0,[R5, #+1184] \ 0000018C 010040E2 SUB R0,R0,#+1 \ 00000190 A00485E5 STR R0,[R5, #+1184] 2031 return; //Ждем готовности DNR \ 00000194 390000EA B ??create_connect_7 2032 } 2033 } 2034 else 2035 { 2036 snprintf(logmsg,255,LG_GRDNRERROR,err); \ ??create_connect_6: \ 00000198 482F88E2 ADD R2,R8,#+288 \ 0000019C FF10A0E3 MOV R1,#+255 \ 000001A0 0700A0E1 MOV R0,R7 \ 000001A4 1B0100EF SWI +283 2037 SMART_REDRAW(); \ 000001A8 ........ BL SMART_REDRAW 2038 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ ??create_connect_8: \ 000001AC ........ LDR R0,??DataTable76 ;; 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 2039 return; \ 000001C8 2C0000EA B ??create_connect_7 2040 } 2041 } 2042 if (p_res) \ ??create_connect_5: \ 000001CC 00009DE5 LDR R0,[SP, #+0] \ 000001D0 000050E3 CMP R0,#+0 \ 000001D4 3D00000A BEQ ??create_connect_9 2043 { 2044 if (p_res[3]) \ 000001D8 0C0090E5 LDR R0,[R0, #+12] \ 000001DC 000050E3 CMP R0,#+0 \ 000001E0 4200000A BEQ ??create_connect_10 2045 { 2046 strcpy(logmsg,buf); \ 000001E4 94108DE2 ADD R1,SP,#+148 \ 000001E8 0700A0E1 MOV R0,R7 \ 000001EC 1A0000EF SWI +26 2047 strcat(logmsg,"\n"); \ 000001F0 401F8FE2 ADR R1,??create_connect_2 ;; "\n" \ 000001F4 0700A0E1 MOV R0,R7 \ 000001F8 170000EF SWI +23 2048 strcpy(logmsg,LG_GRDNROK); \ 000001FC 4C1F88E2 ADD R1,R8,#+304 \ 00000200 0700A0E1 MOV R0,R7 \ 00000204 1A0000EF SWI +26 2049 SMART_REDRAW(); \ 00000208 ........ BL SMART_REDRAW 2050 DNR_TRIES=0; \ 0000020C 9C4485E5 STR R4,[R5, #+1180] 2051 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] 2052 L_CONNECT: 2053 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 600485E5 STR R0,[R5, #+1120] 2054 if (sock!=-1) \ 00000238 0B0050E1 CMP R0,R11 \ 0000023C 1A00000A BEQ ??create_connect_11 2055 { 2056 sa.family=1; \ 00000240 0170A0E3 MOV R7,#+1 \ 00000244 B470CDE1 STRH R7,[SP, #+4] 2057 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] 2058 // sa.ip=htonl(IP_ADDR(82,207,89,182)); 2059 if (connect(sock,&sa,sizeof(sa))!=-1) \ 00000258 600495E5 LDR R0,[R5, #+1120] \ 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 2060 { 2061 connect_state=1; \ 00000270 5C7485E5 STR R7,[R5, #+1116] 2062 TOTALRECEIVED=0; \ 00000274 644485E5 STR R4,[R5, #+1124] 2063 TOTALSENDED=0; \ 00000278 684485E5 STR R4,[R5, #+1128] 2064 SMART_REDRAW(); \ ??create_connect_1: \ 0000027C ........ BL SMART_REDRAW \ ??create_connect_7: \ 00000280 45DF8DE2 ADD SP,SP,#+276 \ 00000284 F08FBDE8 POP {R4-R11,PC} 2065 } 2066 else 2067 { 2068 closesocket(sock); \ ??create_connect_12: \ 00000288 600495E5 LDR R0,[R5, #+1120] \ 0000028C 760100EF SWI +374 2069 sock=-1; \ 00000290 60B485E5 STR R11,[R5, #+1120] 2070 LockSched(); \ 00000294 460100EF SWI +326 2071 ShowMSG(1,(int)LG_MSGCANTCONN); \ 00000298 521F88E2 ADD R1,R8,#+328 \ 0000029C 0100A0E3 MOV R0,#+1 \ 000002A0 480100EF SWI +328 2072 UnlockSched(); \ 000002A4 470100EF SWI +327 2073 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 000002A8 BFFFFFEA B ??create_connect_8 2074 2075 } 2076 } 2077 else 2078 { 2079 LockSched(); \ ??create_connect_11: \ 000002AC 460100EF SWI +326 2080 ShowMSG(1,(int)LG_MSGCANTCRSC); \ 000002B0 591F88E2 ADD R1,R8,#+356 \ 000002B4 0100A0E3 MOV R0,#+1 \ 000002B8 480100EF SWI +328 2081 UnlockSched(); \ 000002BC 470100EF SWI +327 2082 //Не осилили создания сокета, закрываем GPRS-сессию 2083 GPRS_OnOff(0,1); \ 000002C0 0110A0E3 MOV R1,#+1 \ 000002C4 0000A0E3 MOV R0,#+0 \ 000002C8 8E0100EF SWI +398 \ 000002CC EBFFFFEA B ??create_connect_7 2084 } 2085 } 2086 } 2087 else 2088 { 2089 DNR_TRIES--; \ ??create_connect_9: \ 000002D0 9C0495E5 LDR R0,[R5, #+1180] \ 000002D4 010040E2 SUB R0,R0,#+1 \ 000002D8 9C0485E5 STR R0,[R5, #+1180] 2090 LockSched(); \ 000002DC 460100EF SWI +326 2091 ShowMSG(1,(int)LG_MSGHOSTNFND); \ 000002E0 641F88E2 ADD R1,R8,#+400 \ 000002E4 0100A0E3 MOV R0,#+1 \ 000002E8 480100EF SWI +328 2092 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 2093 } 2094 } 2095 2096 #ifdef SEND_TIMER 2097 GBSTMR send_tmr; 2098 #endif 2099 \ In segment CODE, align 4, keep-with-next 2100 void ClearSendQ(void) 2101 { \ ClearSendQ: \ 00000000 10402DE9 PUSH {R4,LR} 2102 mfree((void *)sendq_p); \ 00000004 ........ LDR R4,??DataTable81 ;; i_rc \ 00000008 A80294E5 LDR R0,[R4, #+680] \ 0000000C 150000EF SWI +21 2103 sendq_p=NULL; \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 A80284E5 STR R0,[R4, #+680] 2104 sendq_l=NULL; \ 00000018 A40284E5 STR R0,[R4, #+676] 2105 #ifdef SEND_TIMER 2106 GBS_DelTimer(&send_tmr); 2107 #endif 2108 } \ 0000001C 1080BDE8 POP {R4,PC} ;; return 2109 \ In segment CODE, align 4, keep-with-next 2110 void end_socket(void) 2111 { \ end_socket: \ 00000000 10402DE9 PUSH {R4,LR} 2112 if (sock>=0) \ 00000004 ........ LDR R4,??DataTable81 ;; i_rc \ 00000008 600494E5 LDR R0,[R4, #+1120] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0300004A BMI ??end_socket_0 2113 { 2114 shutdown(sock,2); \ 00000014 0210A0E3 MOV R1,#+2 \ 00000018 770100EF SWI +375 2115 closesocket(sock); \ 0000001C 600494E5 LDR R0,[R4, #+1120] \ 00000020 760100EF SWI +374 2116 } 2117 #ifdef SEND_TIMER 2118 GBS_DelTimer(&send_tmr); 2119 #endif 2120 2121 Play(sndLostConn); \ ??end_socket_0: \ 00000024 ........ LDR R0,??DataTable79 ;; sndLostConn \ 00000028 1040BDE8 POP {R4,LR} ;; Pop \ 0000002C ........ B Play ;; tailcall 2122 } 2123 2124 #ifdef SEND_TIMER 2125 static void resend(void) 2126 { 2127 void SendAnswer(int dummy, TPKT *p); 2128 SUBPROC((void*)SendAnswer,0,0); 2129 } 2130 #endif 2131 \ In segment CODE, align 4, keep-with-next 2132 void SendAnswer(int dummy, TPKT *p) 2133 { \ SendAnswer: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 2134 int i; 2135 int j; 2136 if (connect_state<2) \ 00000004 ........ LDR R4,??DataTable81 ;; i_rc \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C 5C0494E5 LDR R0,[R4, #+1116] \ 00000010 020050E3 CMP R0,#+2 \ 00000014 020000AA BGE ??SendAnswer_0 2137 { 2138 mfree(p); \ 00000018 0600A0E1 MOV R0,R6 \ 0000001C 150000EF SWI +21 2139 return; \ 00000020 F083BDE8 POP {R4-R9,PC} 2140 } 2141 if (p) \ ??SendAnswer_0: \ 00000024 000056E3 CMP R6,#+0 \ 00000028 2600000A BEQ ??SendAnswer_1 2142 { 2143 j=sizeof(PKT)+p->pkt.data_len; //Размер пакета \ 0000002C B600D6E1 LDRH R0,[R6, #+6] \ 00000030 085080E2 ADD R5,R0,#+8 2144 TOTALSENDED+=j; \ 00000034 680494E5 LDR R0,[R4, #+1128] \ 00000038 000085E0 ADD R0,R5,R0 \ 0000003C 680484E5 STR R0,[R4, #+1128] 2145 ALLTOTALSENDED+=j; //by BoBa 10.07 \ 00000040 700494E5 LDR R0,[R4, #+1136] \ 00000044 000085E0 ADD R0,R5,R0 \ 00000048 700484E5 STR R0,[R4, #+1136] 2146 //Проверяем, не надо ли добавить в очередь 2147 if (sendq_p) \ 0000004C A80294E5 LDR R0,[R4, #+680] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0F00000A BEQ ??SendAnswer_2 2148 { 2149 //Есть очередь, добавляем в нее 2150 sendq_p=realloc((void *)sendq_p,sendq_l+j); \ 00000058 A41294E5 LDR R1,[R4, #+676] \ 0000005C 011085E0 ADD R1,R5,R1 \ 00000060 BA0000EF SWI +186 \ 00000064 A80284E5 STR R0,[R4, #+680] 2151 memcpy((char *)sendq_p+sendq_l,p,j); \ 00000068 A40294E5 LDR R0,[R4, #+676] \ 0000006C A83294E5 LDR R3,[R4, #+680] \ 00000070 0520A0E1 MOV R2,R5 \ 00000074 0610A0E1 MOV R1,R6 \ 00000078 030080E0 ADD R0,R0,R3 \ 0000007C 1E0100EF SWI +286 2152 mfree(p); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 150000EF SWI +21 2153 sendq_l+=j; \ 00000088 A40294E5 LDR R0,[R4, #+676] \ 0000008C 000085E0 ADD R0,R5,R0 \ 00000090 A40284E5 STR R0,[R4, #+676] 2154 return; \ 00000094 F083BDE8 POP {R4-R9,PC} 2155 } 2156 sendq_p=p; \ ??SendAnswer_2: \ 00000098 A86284E5 STR R6,[R4, #+680] 2157 sendq_l=j; \ 0000009C A45284E5 STR R5,[R4, #+676] \ 000000A0 080000EA B ??SendAnswer_1 2158 } 2159 //Отправляем уже существующее в очереди 2160 while((i=sendq_l)!=0) 2161 { 2162 if (i>0x400) i=0x400; 2163 j=send(sock,(void *)sendq_p,i,0); 2164 snprintf(logmsg,255,"send res %d",j); 2165 SMART_REDRAW(); 2166 if (j<0) 2167 { 2168 j=*socklasterr(); 2169 if ((j==0xC9)||(j==0xD6)) 2170 { 2171 //Передали что хотели 2172 strcpy(logmsg,"Send delayed..."); 2173 return; //Видимо, надо ждать сообщения ENIP_BUFFER_FREE 2174 } 2175 else 2176 { 2177 //Ошибка 2178 LockSched(); 2179 ShowMSG(1,(int)"Send error!"); 2180 UnlockSched(); 2181 end_socket(); 2182 return; 2183 } 2184 } 2185 memcpy((void *)sendq_p,(char *)sendq_p+j,sendq_l-=j); //Удалили переданное \ ??SendAnswer_3: \ 000000A4 A40294E5 LDR R0,[R4, #+676] \ 000000A8 052040E0 SUB R2,R0,R5 \ 000000AC A42284E5 STR R2,[R4, #+676] \ 000000B0 A80294E5 LDR R0,[R4, #+680] \ 000000B4 001085E0 ADD R1,R5,R0 \ 000000B8 1E0100EF SWI +286 2186 if (j` \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 400E80E3 ORR R0,R0,#0x400 \ 000000E8 000057E1 CMP R7,R0 \ 000000EC 600494E5 LDR R0,[R4, #+1120] \ 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 9000A0E3 MOV R0,#+144 \ 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} 2195 } 2196 mfree((void *)sendq_p); \ ??SendAnswer_4: \ 00000170 0100A0E1 MOV R0,R1 \ 00000174 150000EF SWI +21 2197 sendq_p=NULL; \ 00000178 A86284E5 STR R6,[R4, #+680] 2198 } \ 0000017C F083BDE8 POP {R4-R9,PC} ;; return \ ??SendAnswer_5: \ 00000180 ........ DC32 `?` 2199 2200 \ In segment CODE, align 4, keep-with-next 2201 void send_login(int dummy, TPKT *p) 2202 { 2203 connect_state=2; 2204 char rev[16]; 2205 //Кто будет менять в этом месте идентификатор клиента, буду банить на уровне сервера!!! 2206 //А Вова будет банить на форуме! 2207 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,??DataTable81 ;; i_rc \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 0200A0E3 MOV R0,#+2 \ 0000001C 5C0486E5 STR R0,[R6, #+1116] \ 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 2208 2209 TPKT *p2=malloc(sizeof(PKT)+8); \ 00000034 1000A0E3 MOV R0,#+16 \ 00000038 140000EF SWI +20 \ 0000003C 0070A0E1 MOV R7,R0 2210 p2->pkt.uin=UIN; \ 00000040 ........ LDR R0,??DataTable83 ;; UIN 2211 p2->pkt.type=T_SETCLIENT_ID; 2212 p2->pkt.data_len=8; 2213 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 2214 SendAnswer(0,p2); \ 0000006C 0710A0E1 MOV R1,R7 \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 ........ BL SendAnswer 2215 SendAnswer(dummy,p); \ 00000078 0510A0E1 MOV R1,R5 \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 ........ BL SendAnswer 2216 RXstate=-(int)sizeof(PKT); \ 00000084 0700E0E3 MVN R0,#+7 \ 00000088 580486E5 STR R0,[R6, #+1112] 2217 } \ 0000008C FF80BDE8 POP {R0-R7,PC} ;; return \ ??send_login_0: \ 00000090 ........ DC32 `?` 2218 \ In segment CODE, align 4, keep-with-next 2219 void do_ping(void) 2220 { \ do_ping: \ 00000000 00402DE9 PUSH {LR} 2221 TPKT *pingp=malloc(sizeof(PKT)); \ 00000004 0800A0E3 MOV R0,#+8 \ 00000008 140000EF SWI +20 2222 pingp->pkt.uin=UIN; \ 0000000C ........ LDR R1,??DataTable83 ;; UIN \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 2223 pingp->pkt.type=0; \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C B410C0E1 STRH R1,[R0, #+4] 2224 pingp->pkt.data_len=0; \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2225 SendAnswer(0,pingp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 0040BDE8 POP {LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 2226 } 2227 \ In segment CODE, align 4, keep-with-next 2228 void SendMSGACK(int i) 2229 { \ SendMSGACK: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 2230 TPKT *ackp=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 2231 ackp->pkt.uin=i; \ 00000010 004080E5 STR R4,[R0, #+0] 2232 ackp->pkt.type=T_MSGACK; \ 00000014 1710A0E3 MOV R1,#+23 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2233 ackp->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2234 SendAnswer(0,ackp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 1040BDE8 POP {R4,LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 2235 } 2236 \ In segment CODE, align 4, keep-with-next 2237 void RequestXText(unsigned int uin) 2238 { \ RequestXText: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 2239 TPKT *p=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 2240 p->pkt.uin=uin; \ 00000010 004080E5 STR R4,[R0, #+0] 2241 p->pkt.type=T_XTEXT_REQ; \ 00000014 1810A0E3 MOV R1,#+24 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2242 p->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2243 SUBPROC((void *)SendAnswer,0,p); \ 00000024 0020A0E1 MOV R2,R0 \ 00000028 ........ LDR R0,??DataTable84 ;; SendAnswer \ 0000002C 710100EF SWI +369 2244 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 2245 2246 int ping_time; 2247 char I_UIN[9]; 2248 char sds[]="%s%d.%s"; 2249 char mp3[]="mp3"; 2250 char wav[]="wav"; 2251 char amr[]="amr"; 2252 int ShowLoadScreen=1; 2253 \ In segment CODE, align 4, keep-with-next 2254 void get_answer(void) 2255 { \ get_answer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2256 void *p; 2257 int i=RXstate; \ 00000004 ........ LDR R5,??DataTable95 ;; i_rc \ 00000008 42DE4DE2 SUB SP,SP,#+1056 2258 int j; 2259 int n; 2260 char rb[1024]; 2261 char *rp=rb; 2262 if (connect_state<2) return; \ 0000000C 5C0495E5 LDR R0,[R5, #+1116] \ 00000010 588495E5 LDR R8,[R5, #+1112] \ 00000014 20108DE2 ADD R1,SP,#+32 \ 00000018 00108DE5 STR R1,[SP, #+0] \ 0000001C 020050E3 CMP R0,#+2 \ 00000020 7E0100BA BLT ??get_answer_1 \ 00000024 0A0078E3 CMN R8,#+10 \ 00000028 7C01000A BEQ ??get_answer_1 2263 if (i==EOP) return; 2264 j=recv(sock,rb,sizeof(rb),0); \ 0000002C 600495E5 LDR R0,[R5, #+1120] \ 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 2265 while(j>0) 2266 { 2267 if (i<0) 2268 { 2269 //Принимаем заголовок 2270 n=-i; //Требуемое количество байт 2271 if (j=0) 2278 { 2279 //Принимаем тельце ;) 2280 n=RXbuf.pkt.data_len; //Всего в тельце 2281 if (n>16383) 2282 { 2283 //Слишком много 2284 strcpy(logmsg,LG_GRBADPACKET); 2285 end_socket(); 2286 RXstate=EOP; 2287 return; 2288 } 2289 n-=i; //Количество требуемых байт (общая длинна тельца-текущая позиция) 2290 if (n>0) 2291 { 2292 if (jisIndividSet)//Если индивидуальные натсройки(меню на долгое вправо) 2372 { 2373 if(t->issound) Play(sndMsg);//если звук включен то играем 2374 break; 2375 } 2376 else 2377 if(t->automsgcount < automsgcount && away_m)//если сигналы автоответчика 2378 { 2379 Play(sndMsg); 2380 break; 2381 } 2382 else 2383 if(t->isaccess)//если удаленный доступ ;) 2384 { 2385 if(t->signals) Play(sndMsg); 2386 break; 2387 } 2388 else//в остальный случаях 2389 Play(sndMsg); 2390 } 2391 else 2392 { 2393 uins=RXbuf.pkt.uin; 2394 volatile int hFile_ex; 2395 unsigned int io_error_ex = 0; 2396 char ext[4]; 2397 // __root const CFG_CBOX_ITEM cfgcbox18_3_2[2]={"Mp3","Wav","Amr"}; 2398 switch(ext_type_sounds) 2399 { 2400 case 0: sprintf(ext,percent_s,mp3); break; 2401 case 1: sprintf(ext,percent_s,wav); break; 2402 case 2: sprintf(ext,percent_s,amr); break; 2403 default : sprintf(ext,percent_s,mp3); break; 2404 } 2405 2406 sprintf(talk_sound, sds, sndMsg2, uins, ext); 2407 hFile_ex = fopen(talk_sound,A_ReadOnly + A_BIN,P_READ, &io_error_ex); 2408 if(hFile_ex!=-1) 2409 { 2410 fclose(hFile_ex, &io_error_ex); 2411 Play(talk_sound); 2412 } 2413 else 2414 Play(sndMsg); 2415 } 2416 } 2417 break; 2418 case T_SSLRESP: 2419 LockSched(); 2420 ShowMSG(1,(int)RXbuf.data); 2421 UnlockSched(); 2422 break; 2423 case T_SRV_ACK: 2424 if (FindContactLOGQByAck(&RXbuf)) 2425 { 2426 Play(sndMsgSent); 2427 if(!ShowLoadScreen) SMART_REDRAW(); 2428 } 2429 case T_CLIENT_ACK: 2430 p=malloc(sizeof(PKT)+2); 2431 memcpy(p,&RXbuf,sizeof(PKT)+2); 2432 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); 2433 break; 2434 case T_ECHORET: 2435 { 2436 TDate d; 2437 TTime t; 2438 TTime *pt=(TTime *)(RXbuf.data); 2439 int s1; 2440 int s2; 2441 GetDateTime(&d,&t); 2442 s1=t.hour*3600+t.min*60+t.sec; 2443 s2=pt->hour*3600+pt->min*60+pt->sec; 2444 s1-=s2; 2445 if (s1<0) s1+=86400; 2446 curping=s1; 2447 snprintf(logmsg,255,"Ping %d-%d seconds!",s1,s1+1); 2448 sprintf(PINGO, "Ping: %d sec",s1); 2449 LockSched(); 2450 if(janis==1) 2451 { 2452 // ShowMSG(1,(int)logmsg); 2453 PrintTimer=5; 2454 strcpy(prmsg,logmsg); 2455 Play(pingsnd); 2456 janis=0; 2457 } 2458 else 2459 { 2460 if(ping_time==0) 2461 { 2462 ping_time=ping_time_config; 2463 Play(pingsnd); 2464 } 2465 else 2466 ping_time--; 2467 } 2468 UnlockSched(); 2469 } 2470 break; 2471 case T_LASTPRIVACY: 2472 n=i+sizeof(PKT); \ ??get_answer_3: \ 0000004C 0040A0E1 MOV R4,R0 2473 p=malloc(n); \ ??get_answer_4: \ 00000050 140000EF SWI +20 \ 00000054 00B0A0E1 MOV R11,R0 2474 memcpy(p,&RXbuf,n); \ 00000058 0420A0E1 MOV R2,R4 \ ??get_answer_5: \ 0000005C 0710A0E1 MOV R1,R7 \ 00000060 1E0100EF SWI +286 2475 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); \ 00000064 600495E5 LDR R0,[R5, #+1120] \ 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 2476 break; 2477 } 2478 i=-(int)sizeof(PKT); //А может еще есть данные \ ??get_answer_7: \ 00000084 0780E0E3 MVN R8,#+7 \ ??get_answer_2: \ 00000088 010056E3 CMP R6,#+1 \ 0000008C 620100BA BLT ??get_answer_8 \ 00000090 90759FE5 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 9000A0E3 MOV R0,#+144 \ 000000E0 700D80E3 ORR R0,R0,#0x1C00 \ 000000E4 05A080E0 ADD R10,R0,R5 \ 000000E8 400C54E3 CMP R4,#+16384 \ 000000EC 070000BA BLT ??get_answer_11 \ 000000F0 34159FE5 LDR R1,??get_answer_9+0x4 ;; Canvas + 420 \ 000000F4 0A00A0E1 MOV R0,R10 \ 000000F8 1A0000EF SWI +26 \ 000000FC ........ BL end_socket \ 00000100 0900E0E3 MVN R0,#+9 \ 00000104 580485E5 STR R0,[R5, #+1112] \ 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 641495E5 LDR R1,[R5, #+1124] \ 0000015C 080088E2 ADD R0,R8,#+8 \ 00000160 011080E0 ADD R1,R0,R1 \ 00000164 641485E5 STR R1,[R5, #+1124] \ 00000168 6C1495E5 LDR R1,[R5, #+1132] \ 0000016C 0020A0E3 MOV R2,#+0 \ 00000170 011080E0 ADD R1,R0,R1 \ 00000174 6C1485E5 STR R1,[R5, #+1132] \ 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 B5FFB5FFC100 DC16 +65461,+65461,+193,+65461 \ B5FF \ 000001C4 B5FFC700D100 DC16 +65461,+199,+209,+65461 \ B5FF \ 000001CC D60029002900 DC16 +214,+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 600495E5 LDR R0,[R5, #+1120] \ 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 0C049FE5 LDR R0,??get_answer_9+0x8 ;; sndStartup \ 00000220 ........ BL Play \ 00000224 083087E2 ADD R3,R7,#+8 \ 00000228 EE2F8FE2 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 5C0485E5 STR R0,[R5, #+1116] \ 00000240 A00495E5 LDR R0,[R5, #+1184] \ 00000244 010040E2 SUB R0,R0,#+1 \ 00000248 A00485E5 STR R0,[R5, #+1184] \ 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 B4239FE5 LDR R2,??get_answer_9+0xC ;; Canvas + 432 \ 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 600495E5 LDR R0,[R5, #+1120] \ 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 7C239FE5 LDR R2,??get_answer_9+0x10 ;; Canvas + 444 \ 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 24139FE5 LDR R1,??get_answer_9+0x14 ;; Canvas + 452 \ 00000314 6000A0E3 MOV R0,#+96 \ 00000318 800D80E3 ORR R0,R0,#0x2000 \ 0000031C 054080E0 ADD R4,R0,R5 \ 00000320 0400A0E1 MOV R0,R4 \ 00000324 160000EF SWI +22 \ 00000328 ........ LDR R0,??DataTable86 ;; ignor_list \ 0000032C 0410A0E1 MOV R1,R4 \ 00000330 180100EF SWI +280 \ 00000334 000050E3 CMP R0,#+0 \ 00000338 51FFFF1A BNE ??get_answer_7 \ 0000033C FC229FE5 LDR R2,??get_answer_9+0x18 ;; Canvas + 460 \ 00000340 FC429FE5 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 640495E5 LDR R0,[R5, #+1124] \ 00000360 ........ BL SendMSGACK \ 00000364 600495E5 LDR R0,[R5, #+1120] \ 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,??DataTable87 ;; 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 581090E5 LDR R1,[R0, #+88] \ 000003A4 000051E3 CMP R1,#+0 \ 000003A8 0500000A BEQ ??get_answer_22 \ 000003AC 600090E5 LDR R0,[R0, #+96] \ 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,??DataTable88 ;; automsgcount \ 000003C8 7C1090E5 LDR R1,[R0, #+124] \ 000003CC 002092E5 LDR R2,[R2, #+0] \ 000003D0 020051E1 CMP R1,R2 \ 000003D4 0200002A BCS ??get_answer_25 \ 000003D8 841395E5 LDR R1,[R5, #+900] \ 000003DC 000051E3 CMP R1,#+0 \ 000003E0 F4FFFF1A BNE ??get_answer_23 \ ??get_answer_25: \ 000003E4 781090E5 LDR R1,[R0, #+120] \ 000003E8 000051E3 CMP R1,#+0 \ 000003EC 0300000A BEQ ??get_answer_26 \ 000003F0 740090E5 LDR R0,[R0, #+116] \ 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 940285E5 STR R0,[R5, #+660] \ 0000040C ........ LDR R0,??DataTable89 ;; 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 7C00A003 MOVEQ R0,#+124 \ 0000042C 7400A013 MOVNE R0,#+116 \ 00000430 000000EA B ??get_answer_28 \ ??get_answer_27: \ 00000434 7800A0E3 MOV R0,#+120 \ ??get_answer_28: \ 00000438 ........ LDR R1,??DataTable90 ;; Canvas + 11 \ 0000043C 800D80E3 ORR R0,R0,#0x2000 \ 00000440 052080E0 ADD R2,R0,R5 \ 00000444 04008DE2 ADD R0,SP,#+4 \ 00000448 160000EF SWI +22 \ 0000044C F4219FE5 LDR R2,??get_answer_9+0x20 ;; sndMsg2 \ 00000450 04008DE2 ADD R0,SP,#+4 \ 00000454 01002DE9 PUSH {R0} \ 00000458 943295E5 LDR R3,[R5, #+660] \ 0000045C 8870A0E3 MOV R7,#+136 \ 00000460 707E87E3 ORR R7,R7,#0x700 \ 00000464 6C00A0E3 MOV R0,#+108 \ 00000468 800D80E3 ORR R0,R0,#0x2000 \ 0000046C 051080E0 ADD R1,R0,R5 \ 00000470 050087E0 ADD R0,R7,R5 \ 00000474 160000EF SWI +22 \ 00000478 10308DE2 ADD R3,SP,#+16 \ 0000047C 8020A0E3 MOV R2,#+128 \ 00000480 801CA0E3 MOV R1,#+32768 \ 00000484 050087E0 ADD R0,R7,R5 \ 00000488 0A0000EF SWI +10 \ 0000048C 0C008DE5 STR R0,[SP, #+12] \ 00000490 0C009DE5 LDR R0,[SP, #+12] \ 00000494 04D08DE2 ADD SP,SP,#+4 \ 00000498 010070E3 CMN R0,#+1 \ 0000049C D7FFFF0A BEQ ??get_answer_26 \ 000004A0 08009DE5 LDR R0,[SP, #+8] \ 000004A4 0C108DE2 ADD R1,SP,#+12 \ 000004A8 0D0000EF SWI +13 \ 000004AC 050087E0 ADD R0,R7,R5 \ 000004B0 C1FFFFEA B ??get_answer_24 \ ??get_answer_29: \ 000004B4 460100EF SWI +326 \ 000004B8 081087E2 ADD R1,R7,#+8 \ 000004BC 0100A0E3 MOV R0,#+1 \ 000004C0 480100EF SWI +328 \ ??get_answer_30: \ 000004C4 470100EF SWI +327 \ 000004C8 EDFEFFEA B ??get_answer_7 \ ??get_answer_31: \ 000004CC 0700A0E1 MOV R0,R7 \ 000004D0 ........ BL FindContactLOGQByAck \ 000004D4 000050E3 CMP R0,#+0 \ 000004D8 0500000A BEQ ??get_answer_32 \ 000004DC 68019FE5 LDR R0,??get_answer_9+0x24 ;; sndMsgSent \ 000004E0 ........ BL Play \ 000004E4 A80495E5 LDR R0,[R5, #+1192] \ 000004E8 000050E3 CMP R0,#+0 \ 000004EC 0000001A BNE ??get_answer_32 \ 000004F0 ........ BL SMART_REDRAW \ ??get_answer_32: \ 000004F4 0A00A0E3 MOV R0,#+10 \ 000004F8 140000EF SWI +20 \ 000004FC 00B0A0E1 MOV R11,R0 \ 00000500 0A20A0E3 MOV R2,#+10 \ 00000504 D4FEFFEA B ??get_answer_5 \ ??get_answer_33: \ 00000508 10108DE2 ADD R1,SP,#+16 \ 0000050C 18008DE2 ADD R0,SP,#+24 \ 00000510 B40000EF SWI +180 \ 00000514 1000DDE5 LDRB R0,[SP, #+16] \ 00000518 1120DDE5 LDRB R2,[SP, #+17] \ 0000051C E11EA0E3 MOV R1,#+3600 \ 00000520 3C30A0E3 MOV R3,#+60 \ 00000524 930202E0 MUL R2,R3,R2 \ 00000528 912020E0 MLA R0,R1,R0,R2 \ 0000052C 1210DDE5 LDRB R1,[SP, #+18] \ 00000530 E12EA0E3 MOV R2,#+3600 \ 00000534 000081E0 ADD R0,R1,R0 \ 00000538 0810D7E5 LDRB R1,[R7, #+8] \ 0000053C 920101E0 MUL R1,R2,R1 \ 00000540 08219FE5 LDR R2,??get_answer_9+0x28 ;; Canvas + 472 \ 00000544 010040E0 SUB R0,R0,R1 \ 00000548 0910D7E5 LDRB R1,[R7, #+9] \ 0000054C 930101E0 MUL R1,R3,R1 \ 00000550 010040E0 SUB R0,R0,R1 \ 00000554 0A10D7E5 LDRB R1,[R7, #+10] \ 00000558 ........ LDR R7,??DataTable91 ;; janis \ 0000055C 014050E0 SUBS R4,R0,R1 \ 00000560 500BA043 MOVMI R0,#+81920 \ 00000564 460D8043 ORRMI R0,R0,#0x1180 \ 00000568 04408040 ADDMI R4,R0,R4 \ 0000056C A04285E5 STR R4,[R5, #+672] \ 00000570 010084E2 ADD R0,R4,#+1 \ 00000574 01002DE9 PUSH {R0} \ 00000578 0430A0E1 MOV R3,R4 \ 0000057C FF10A0E3 MOV R1,#+255 \ 00000580 0A00A0E1 MOV R0,R10 \ 00000584 1B0100EF SWI +283 \ 00000588 C4109FE5 LDR R1,??get_answer_9+0x2C ;; Canvas + 492 \ 0000058C 0420A0E1 MOV R2,R4 \ 00000590 C0409FE5 LDR R4,??get_answer_9+0x30 ;; pingsnd \ 00000594 5800A0E3 MOV R0,#+88 \ 00000598 640D80E3 ORR R0,R0,#0x1900 \ 0000059C 050080E0 ADD R0,R0,R5 \ 000005A0 160000EF SWI +22 \ 000005A4 460100EF SWI +326 \ 000005A8 000097E5 LDR R0,[R7, #+0] \ 000005AC 04D08DE2 ADD SP,SP,#+4 \ 000005B0 010050E3 CMP R0,#+1 \ 000005B4 0C00001A BNE ??get_answer_34 \ 000005B8 0500A0E3 MOV R0,#+5 \ 000005BC 9C0285E5 STR R0,[R5, #+668] \ 000005C0 0A10A0E1 MOV R1,R10 \ 000005C4 4800A0E3 MOV R0,#+72 \ 000005C8 600D80E3 ORR R0,R0,#0x1800 \ 000005CC 050080E0 ADD R0,R0,R5 \ 000005D0 1A0000EF SWI +26 \ 000005D4 0400A0E1 MOV R0,R4 \ 000005D8 ........ BL Play \ 000005DC 0000A0E3 MOV R0,#+0 \ 000005E0 000087E5 STR R0,[R7, #+0] \ 000005E4 B6FFFFEA B ??get_answer_30 \ ??get_answer_14: \ 000005E8 25730000 DC8 "%s",+0 \ ??get_answer_34: \ 000005EC A40495E5 LDR R0,[R5, #+1188] \ 000005F0 000050E3 CMP R0,#+0 \ 000005F4 0500001A BNE ??get_answer_35 \ 000005F8 5C009FE5 LDR R0,??get_answer_9+0x34 ;; ping_time_config \ 000005FC 000090E5 LDR R0,[R0, #+0] \ 00000600 A40485E5 STR R0,[R5, #+1188] \ 00000604 0400A0E1 MOV R0,R4 \ 00000608 ........ BL Play \ 0000060C ACFFFFEA B ??get_answer_30 \ ??get_answer_35: \ 00000610 010040E2 SUB R0,R0,#+1 \ 00000614 A40485E5 STR R0,[R5, #+1188] \ 00000618 A9FFFFEA B ??get_answer_30 2479 } 2480 } 2481 } 2482 RXstate=i; \ ??get_answer_8: \ 0000061C 588485E5 STR R8,[R5, #+1112] 2483 // GBS_StartTimerProc(&tmr_dorecv,3000,dorecv); 2484 // SMART_REDRAW(); 2485 } \ ??get_answer_1: \ 00000620 42DE8DE2 ADD SP,SP,#+1056 ;; stack cleaning \ 00000624 F08FBDE8 POP {R4-R11,PC} ;; return \ ??get_answer_9: \ 00000628 ........ DC32 RXbuf \ 0000062C ........ DC32 Canvas + 420 \ 00000630 ........ DC32 sndStartup \ 00000634 ........ DC32 Canvas + 432 \ 00000638 ........ DC32 Canvas + 444 \ 0000063C ........ DC32 Canvas + 452 \ 00000640 ........ DC32 Canvas + 460 \ 00000644 ........ DC32 sndMsg \ 00000648 ........ DC32 sndMsg2 \ 0000064C ........ DC32 sndMsgSent \ 00000650 ........ DC32 Canvas + 472 \ 00000654 ........ DC32 Canvas + 492 \ 00000658 ........ DC32 pingsnd \ 0000065C ........ DC32 ping_time_config 2486 2487 2488 //=====================add to main info==================== 2489 2490 //Сюда я не лез...и че та желания нет...kluchnik ;) 2491 2492 char a_txt[45]; 2493 char s_txt[45]; 2494 char d_txt[45]; 2495 char f_txt[45]; 2496 char g_txt[45]; 2497 unsigned int main_msg_timer2; \ In segment CODE, align 4, keep-with-next 2498 void AddToMain(const char *nameu,char *si) 2499 { \ AddToMain: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0180A0E1 MOV R8,R1 2500 char *de=malloc(64); \ 00000010 4000A0E3 MOV R0,#+64 \ 00000014 140000EF SWI +20 \ 00000018 0050A0E1 MOV R5,R0 2501 int text_l; 2502 int iz; 2503 int name_l; 2504 name_l=0; 2505 text_l=0; 2506 name_l=strlen(nameu); \ 0000001C 0400A0E1 MOV R0,R4 \ 00000020 1B0000EF SWI +27 2507 iz=0; 2508 #ifdef ELKA 2509 text_l=main_lenght-name_l; 2510 #else 2511 text_l=main_lenght-name_l; \ 00000024 EC119FE5 LDR R1,??AddToMain_0 ;; main_lenght \ 00000028 0070A0E3 MOV R7,#+0 \ 0000002C 001091E5 LDR R1,[R1, #+0] 2512 #endif 2513 2514 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 2515 { 2516 while(text_l!=0) 2517 { 2518 de[iz]=si[iz]; 2519 iz++; 2520 text_l--; 2521 } 2522 if(use_cutter) 2523 { 2524 de[iz]='.'; 2525 iz++; 2526 de[iz]='.'; 2527 iz++; 2528 de[iz]='.'; 2529 iz++; 2530 } 2531 de[iz]='\0'; 2532 } 2533 else 2534 strcpy(de, si); \ 00000048 0810A0E1 MOV R1,R8 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 1A0000EF SWI +26 2535 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 9C119FE5 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 2536 while(strlen(de)!=iz) 2537 { 2538 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] 2539 if(de[iz]==0x0A) de[iz]=0x20; \ 000000B8 0510D7E7 LDRB R1,[R7, +R5] \ 000000BC 0A0051E3 CMP R1,#+10 \ 000000C0 0500C707 STRBEQ R0,[R7, +R5] 2540 iz++; \ 000000C4 017087E2 ADD R7,R7,#+1 2541 } \ ??AddToMain_3: \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 1B0000EF SWI +27 \ 000000D0 070050E1 CMP R0,R7 \ 000000D4 F3FFFF1A BNE ??AddToMain_6 2542 de[iz]='\0'; \ 000000D8 0560C7E7 STRB R6,[R7, +R5] 2543 if(main_count==0) sprintf(a_txt, "%s: %s", nameu,de); \ 000000DC ........ LDR R6,??DataTable95 ;; i_rc \ 000000E0 38719FE5 LDR R7,??AddToMain_0+0x8 ;; `?` \ 000000E4 821D86E2 ADD R1,R6,#+8320 \ 000000E8 00108DE5 STR R1,[SP, #+0] \ 000000EC AC0296E5 LDR R0,[R6, #+684] \ 000000F0 000050E3 CMP R0,#+0 \ 000000F4 0400001A BNE ??AddToMain_7 \ 000000F8 00009DE5 LDR R0,[SP, #+0] \ 000000FC 0530A0E1 MOV R3,R5 \ 00000100 0420A0E1 MOV R2,R4 \ 00000104 0710A0E1 MOV R1,R7 \ 00000108 160000EF SWI +22 2544 if(main_count==1) sprintf(s_txt, "%s: %s", nameu,de); \ ??AddToMain_7: \ 0000010C B000A0E3 MOV R0,#+176 \ 00000110 800D80E3 ORR R0,R0,#0x2000 \ 00000114 068080E0 ADD R8,R0,R6 \ 00000118 AC0296E5 LDR R0,[R6, #+684] \ 0000011C 010050E3 CMP R0,#+1 \ 00000120 0400001A BNE ??AddToMain_8 \ 00000124 0530A0E1 MOV R3,R5 \ 00000128 0420A0E1 MOV R2,R4 \ 0000012C 0710A0E1 MOV R1,R7 \ 00000130 0800A0E1 MOV R0,R8 \ 00000134 160000EF SWI +22 2545 if(main_count==2) sprintf(d_txt, "%s: %s", nameu,de); \ ??AddToMain_8: \ 00000138 E000A0E3 MOV R0,#+224 \ 0000013C 800D80E3 ORR R0,R0,#0x2000 \ 00000140 069080E0 ADD R9,R0,R6 \ 00000144 AC0296E5 LDR R0,[R6, #+684] \ 00000148 020050E3 CMP R0,#+2 \ 0000014C 0400001A BNE ??AddToMain_9 \ 00000150 0530A0E1 MOV R3,R5 \ 00000154 0420A0E1 MOV R2,R4 \ 00000158 0710A0E1 MOV R1,R7 \ 0000015C 0900A0E1 MOV R0,R9 \ 00000160 160000EF SWI +22 2546 if(main_count==3) sprintf(f_txt, "%s: %s", nameu,de); \ ??AddToMain_9: \ 00000164 1000A0E3 MOV R0,#+16 \ 00000168 840D80E3 ORR R0,R0,#0x2100 \ 0000016C 06A080E0 ADD R10,R0,R6 \ 00000170 AC0296E5 LDR R0,[R6, #+684] \ 00000174 030050E3 CMP R0,#+3 \ 00000178 0400001A BNE ??AddToMain_10 \ 0000017C 0530A0E1 MOV R3,R5 \ 00000180 0420A0E1 MOV R2,R4 \ 00000184 0710A0E1 MOV R1,R7 \ 00000188 0A00A0E1 MOV R0,R10 \ 0000018C 160000EF SWI +22 2547 if(main_count==4) sprintf(g_txt, "%s: %s", nameu,de); \ ??AddToMain_10: \ 00000190 AC0296E5 LDR R0,[R6, #+684] \ 00000194 85BD86E2 ADD R11,R6,#+8512 \ 00000198 040050E3 CMP R0,#+4 \ 0000019C 0400001A BNE ??AddToMain_11 \ 000001A0 0530A0E1 MOV R3,R5 \ 000001A4 0420A0E1 MOV R2,R4 \ 000001A8 0710A0E1 MOV R1,R7 \ 000001AC 0B00A0E1 MOV R0,R11 \ 000001B0 160000EF SWI +22 2548 if(main_count>4) \ ??AddToMain_11: \ 000001B4 AC0296E5 LDR R0,[R6, #+684] \ 000001B8 050050E3 CMP R0,#+5 \ 000001BC 100000BA BLT ??AddToMain_12 2549 { 2550 strcpy(a_txt, s_txt); \ 000001C0 00009DE5 LDR R0,[SP, #+0] \ 000001C4 0810A0E1 MOV R1,R8 \ 000001C8 1A0000EF SWI +26 2551 strcpy(s_txt, d_txt); \ 000001CC 0910A0E1 MOV R1,R9 \ 000001D0 0800A0E1 MOV R0,R8 \ 000001D4 1A0000EF SWI +26 2552 strcpy(d_txt, f_txt); \ 000001D8 0A10A0E1 MOV R1,R10 \ 000001DC 0900A0E1 MOV R0,R9 \ 000001E0 1A0000EF SWI +26 2553 strcpy(f_txt, g_txt); \ 000001E4 0B10A0E1 MOV R1,R11 \ 000001E8 0A00A0E1 MOV R0,R10 \ 000001EC 1A0000EF SWI +26 2554 sprintf(g_txt, "%s: %s", nameu,de); \ 000001F0 0530A0E1 MOV R3,R5 \ 000001F4 0420A0E1 MOV R2,R4 \ 000001F8 0710A0E1 MOV R1,R7 \ 000001FC 0B00A0E1 MOV R0,R11 \ 00000200 160000EF SWI +22 2555 } 2556 mfree(de); \ ??AddToMain_12: \ 00000204 0500A0E1 MOV R0,R5 \ 00000208 150000EF SWI +21 2557 main_d=1; \ 0000020C 0100A0E3 MOV R0,#+1 \ 00000210 800286E5 STR R0,[R6, #+640] 2558 } \ 00000214 F18FBDE8 POP {R0,R4-R11,PC} ;; return \ ??AddToMain_0: \ 00000218 ........ DC32 main_lenght \ 0000021C ........ DC32 use_cutter \ 00000220 ........ DC32 `?` 2559 2560 //======================add to main info================ 2561 2562 int NEW_MSG; 2563 \ In segment CODE, align 4, keep-with-next 2564 void AddStringToLog(CLIST *t, int code, char *s, const char *name, unsigned int IDforACK,int flag) 2565 { \ 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 2566 char hs[128], *lastX; 2567 TTime tt; 2568 TDate d; 2569 GetDateTime(&d,&tt); \ 00000020 0D10A0E1 MOV R1,SP \ 00000024 08008DE2 ADD R0,SP,#+8 \ 00000028 B40000EF SWI +180 2570 int i; 2571 2572 // if(code == 3 && !LOG_XTXT) return; //Нl нуcно nоodrн?nь cennnrnуn 2573 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 2574 { 2575 #ifdef kluchnik 2576 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 2587 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 2588 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 2589 2590 LOGQ *p=NewLOGQ(s); \ ??AddStringToLog_5: \ 00000104 0800A0E1 MOV R0,R8 \ 00000108 ........ BL NewLOGQ \ 0000010C 0080A0E1 MOV R8,R0 2591 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 2592 p->type=code; \ 00000148 0C5088E5 STR R5,[R8, #+12] 2593 p->ID=IDforACK; //0-32767 \ 0000014C 087088E5 STR R7,[R8, #+8] 2594 i=AddLOGQ(&t->log,p); \ 00000150 0810A0E1 MOV R1,R8 \ 00000154 940084E2 ADD R0,R4,#+148 \ 00000158 ........ BL AddLOGQ \ 0000015C 0060A0E1 MOV R6,R0 \ 00000160 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 2595 while(i>MAXLOGMSG) 2596 { 2597 if (t->log==t->last_log) t->last_log=t->last_log->next; \ ??AddStringToLog_7: \ 00000174 9C0094E5 LDR R0,[R4, #+156] \ 00000178 941094E5 LDR R1,[R4, #+148] 2598 RemoveLOGQ(&t->log,t->log); 2599 i--; \ 0000017C 016046E2 SUB R6,R6,#+1 \ 00000180 000051E1 CMP R1,R0 \ 00000184 00009005 LDREQ R0,[R0, #+0] \ 00000188 9C008405 STREQ R0,[R4, #+156] \ 0000018C 940084E2 ADD R0,R4,#+148 \ 00000190 ........ BL RemoveLOGQ 2600 } \ 00000194 060057E1 CMP R7,R6 \ 00000198 F5FFFF3A BCC ??AddStringToLog_7 2601 t->msg_count=i; \ ??AddStringToLog_6: \ 0000019C A46084E5 STR R6,[R4, #+164] 2602 if (!t->last_log) t->last_log=p; \ 000001A0 9C0094E5 LDR R0,[R4, #+156] 2603 if (code==3) \ 000001A4 ........ LDR R6,??DataTable95 ;; i_rc \ 000001A8 000050E3 CMP R0,#+0 \ 000001AC 9C808405 STREQ R8,[R4, #+156] \ 000001B0 030055E3 CMP R5,#+3 \ 000001B4 0D00001A BNE ??AddStringToLog_8 2604 { 2605 if (edchat_id) \ 000001B8 840496E5 LDR R0,[R6, #+1156] \ 000001BC 000050E3 CMP R0,#+0 \ 000001C0 1C00000A BEQ ??AddStringToLog_9 2606 { 2607 void *data=FindGUIbyId(edchat_id,NULL); \ 000001C4 840496E5 LDR R0,[R6, #+1156] \ 000001C8 0010A0E3 MOV R1,#+0 \ 000001CC 090200EF SWI +521 2608 if (data) \ 000001D0 000050E3 CMP R0,#+0 \ 000001D4 1700000A BEQ ??AddStringToLog_9 2609 { 2610 EDCHAT_STRUCT *ed_struct; 2611 ed_struct=EDIT_GetUserPointer(data); \ 000001D8 DF0100EF SWI +479 2612 if (ed_struct) \ 000001DC 000050E3 CMP R0,#+0 \ 000001E0 1400000A BEQ ??AddStringToLog_9 2613 { 2614 if (ed_struct->ed_contact==t) \ 000001E4 000090E5 LDR R0,[R0, #+0] \ 000001E8 040050E1 CMP R0,R4 \ 000001EC 1100001A BNE ??AddStringToLog_9 2615 { 2616 goto L_INC; 2617 } 2618 } 2619 } 2620 } 2621 goto L_NOINC; 2622 } 2623 L_INC: 2624 if (!t->isunread) total_unread++; \ ??AddStringToLog_8: \ 000001F0 840094E5 LDR R0,[R4, #+132] \ 000001F4 000050E3 CMP R0,#+0 \ 000001F8 78049605 LDREQ R0,[R6, #+1144] \ 000001FC 01008002 ADDEQ R0,R0,#+1 \ 00000200 78048605 STREQ R0,[R6, #+1144] 2625 if(NEW_MSG==1) \ 00000204 B00496E5 LDR R0,[R6, #+1200] \ 00000208 010050E3 CMP R0,#+1 \ 0000020C 0700001A BNE ??AddStringToLog_10 2626 { 2627 t->unread_msg++; \ 00000210 880094E5 LDR R0,[R4, #+136] \ 00000214 010080E2 ADD R0,R0,#+1 \ 00000218 880084E5 STR R0,[R4, #+136] 2628 total_unread2++; \ 0000021C CC0296E5 LDR R0,[R6, #+716] \ 00000220 010080E2 ADD R0,R0,#+1 \ 00000224 CC0286E5 STR R0,[R6, #+716] 2629 NEW_MSG=0; \ 00000228 0000A0E3 MOV R0,#+0 \ 0000022C B00486E5 STR R0,[R6, #+1200] 2630 } 2631 t->isunread=1; \ ??AddStringToLog_10: \ 00000230 0100A0E3 MOV R0,#+1 \ 00000234 840084E5 STR R0,[R4, #+132] 2632 L_NOINC: 2633 ChangeContactPos(t); \ ??AddStringToLog_9: \ 00000238 0400A0E1 MOV R0,R4 \ 0000023C ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2634 } \ ??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 2635 2636 void ParseAnswer(WSHDR *ws, const char *s); 2637 2638 int time_to_stop_t9; 2639 \ In segment CODE, align 4, keep-with-next 2640 void ParseXStatusText(WSHDR *ws, const char *s, int color) 2641 { \ ParseXStatusText: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 2642 int c; 2643 int flag=0; \ 00000010 0070A0E3 MOV R7,#+0 2644 CutWSTR(ws,0); \ 00000014 0010A0E3 MOV R1,#+0 \ 00000018 260100EF SWI +294 2645 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} 2646 wsAppendChar(ws,0xE008); \ 0000002C 0810A0E3 MOV R1,#+8 \ 00000030 E01C81E3 ORR R1,R1,#0xE000 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 1C0000EF SWI +28 2647 wsAppendChar(ws,color); \ 0000003C 0610A0E1 MOV R1,R6 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1C0000EF SWI +28 2648 wsAppendChar(ws,0xE013); \ 00000048 1310A0E3 MOV R1,#+19 \ 0000004C E01C81E3 ORR R1,R1,#0xE000 \ 00000050 0A0000EA B ??ParseXStatusText_0 2649 while((c=*s++)) 2650 { 2651 if (c==13) \ ??ParseXStatusText_1: \ 00000054 0D0050E3 CMP R0,#+13 2652 { 2653 if (!flag) \ 00000058 00005703 CMPEQ R7,#+0 \ 0000005C 0500001A BNE ??ParseXStatusText_2 2654 { 2655 flag=1; \ 00000060 0170A0E3 MOV R7,#+1 2656 wsAppendChar(ws,0xE012); \ 00000064 1210A0E3 MOV R1,#+18 \ 00000068 E01C81E3 ORR R1,R1,#0xE000 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 1C0000EF SWI +28 2657 c=' '; \ 00000074 2000A0E3 MOV R0,#+32 2658 } 2659 } 2660 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 2661 } \ 00000088 ........ LDRB R0,[R5], #+1 \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 EFFFFF1A BNE ??ParseXStatusText_1 \ 00000094 F080BDE8 POP {R4-R7,PC} ;; return 2662 } 2663 2664 //Добавление итемов в чат при получении нового сообщения \ In segment CODE, align 4, keep-with-next 2665 void AddMsgToChat(void *data) 2666 { \ AddMsgToChat: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 2667 LOGQ *p; 2668 EDITCONTROL ec; 2669 EDITC_OPTIONS ec_options; 2670 EDCHAT_STRUCT *ed_struct; 2671 int j; 2672 int color, font, type; 2673 int zc; 2674 if (!data) return; \ 00000008 000050E3 CMP R0,#+0 \ 0000000C C400000A BEQ ??AddMsgToChat_0 2675 ed_struct=EDIT_GetUserPointer(data); \ 00000010 DF0100EF SWI +479 \ 00000014 0040B0E1 MOVS R4,R0 2676 if (!ed_struct) return; \ 00000018 C100000A BEQ ??AddMsgToChat_0 2677 if (!ed_struct->ed_contact->isunread) return; \ 0000001C 000094E5 LDR R0,[R4, #+0] \ 00000020 841090E5 LDR R1,[R0, #+132] \ 00000024 000051E3 CMP R1,#+0 \ 00000028 BD00000A BEQ ??AddMsgToChat_0 2678 2679 p=ed_struct->ed_contact->last_log; \ 0000002C 9C5090E5 LDR R5,[R0, #+156] 2680 if (p) \ 00000030 ........ LDR R6,??DataTable95 ;; i_rc \ 00000034 ........ LDR R7,??DataTable96 ;; O_ED_X_FONT_SIZE \ 00000038 ........ LDR R8,??DataTable97 ;; X_COLOR \ 0000003C ........ LDR R9,??DataTable98 ;; O_X_COLOR \ 00000040 000055E3 CMP R5,#+0 \ 00000044 A100000A BEQ ??AddMsgToChat_1 2681 { 2682 while(p) 2683 { 2684 font = ED_H_FONT_SIZE; \ ??AddMsgToChat_2: \ 00000048 ........ LDR R0,??DataTable119 ;; ED_H_FONT_SIZE 2685 if ((zc=p->acked&3)) \ 0000004C ........ LDR R1,??DataTable116 ;; 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 2686 { 2687 if (zc==1) \ 00000064 010050E3 CMP R0,#+1 \ 00000068 1E00001A BNE ??AddMsgToChat_4 2688 color=ACK_COLOR; //Зеленый \ 0000006C ........ LDR R0,??DataTable112 ;; ACK_COLOR \ 00000070 1B0000EA B ??AddMsgToChat_5 2689 else 2690 color=I_COLOR; 2691 } 2692 else 2693 { 2694 if (p->ID==0xFFFFFFFF) \ ??AddMsgToChat_3: \ 00000074 080095E5 LDR R0,[R5, #+8] \ 00000078 010070E3 CMN R0,#+1 \ 0000007C 1700001A BNE ??AddMsgToChat_6 2695 { 2696 type = p->type&0x0F; \ 00000080 0C0095E5 LDR R0,[R5, #+12] \ 00000084 0F1000E2 AND R1,R0,#0xF 2697 if(p->type&0x10) \ 00000088 100010E3 TST R0,#0x10 \ 0000008C 0B00000A BEQ ??AddMsgToChat_7 2698 { 2699 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 00000090 010051E3 CMP R1,#+1 \ 00000094 ........ LDREQ R0,??DataTable114 ;; 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,??DataTable113 ;; O_TO_COLOR \ ??AddMsgToChat_8: \ 000000B0 00B090E5 LDR R11,[R0, #+0] \ 000000B4 ........ LDR R0,??DataTable118 ;; O_ED_H_FONT_SIZE \ ??AddMsgToChat_9: \ 000000B8 00A090E5 LDR R10,[R0, #+0] \ 000000BC 090000EA B ??AddMsgToChat_4 2700 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 2701 } 2702 else 2703 { 2704 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,??DataTable110 ;; ED_X_FONT_SIZE \ 000000D4 F7FFFF0A BEQ ??AddMsgToChat_9 \ 000000D8 ........ LDR R0,??DataTable115 ;; TO_COLOR \ 000000DC 000000EA B ??AddMsgToChat_5 2705 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 2706 } 2707 } 2708 else 2709 color=UNACK_COLOR; //????? \ ??AddMsgToChat_6: \ 000000E0 ........ LDR R0,??DataTable117 ;; UNACK_COLOR \ ??AddMsgToChat_5: \ 000000E4 00B090E5 LDR R11,[R0, #+0] 2710 } 2711 PrepareEditControl(&ec); \ ??AddMsgToChat_4: \ 000000E8 10008DE2 ADD R0,SP,#+16 \ 000000EC 640100EF SWI +356 2712 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 2713 { 2714 ascii2ws(ews,p->hdr); \ 00000100 7C0396E5 LDR R0,[R6, #+892] \ 00000104 101085E2 ADD R1,R5,#+16 \ 00000108 ........ _BLF ascii2ws,??ascii2ws??rA 2715 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 0000010C 7C3396E5 LDR R3,[R6, #+892] \ 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 2716 } 2717 else 2718 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??AddMsgToChat_10: \ 00000124 0000A0E3 MOV R0,#+0 \ 00000128 01002DE9 PUSH {R0} \ 0000012C 7C3396E5 LDR R3,[R6, #+892] \ 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 2719 PrepareEditCOptions(&ec_options); \ 00000144 0D00A0E1 MOV R0,SP \ 00000148 C80100EF SWI +456 2720 SetPenColorToEditCOptions(&ec_options,color); \ 0000014C 0B10A0E1 MOV R1,R11 \ 00000150 0D00A0E1 MOV R0,SP \ 00000154 CC0100EF SWI +460 2721 SetFontToEditCOptions(&ec_options,font); \ 00000158 0A10A0E1 MOV R1,R10 \ 0000015C 0D00A0E1 MOV R0,SP \ 00000160 CA0100EF SWI +458 2722 CopyOptionsToEditControl(&ec,&ec_options); \ 00000164 0D10A0E1 MOV R1,SP \ 00000168 10008DE2 ADD R0,SP,#+16 \ 0000016C CE0100EF SWI +462 2723 //AddEditControlToEditQend(eq,&ec,ma); 2724 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 2725 ed_struct->ed_answer++; \ 00000184 080094E5 LDR R0,[R4, #+8] \ 00000188 010080E2 ADD R0,R0,#+1 \ 0000018C 080084E5 STR R0,[R4, #+8] 2726 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 2727 { 2728 ParseAnswer(ews,p->text); \ 000001A0 7C0396E5 LDR R0,[R6, #+892] \ 000001A4 601085E2 ADD R1,R5,#+96 \ 000001A8 ........ BL ParseAnswer \ 000001AC 050000EA B ??AddMsgToChat_13 2729 } 2730 else 2731 { 2732 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 7C0396E5 LDR R0,[R6, #+892] \ 000001BC 00209805 LDREQ R2,[R8, #+0] \ 000001C0 601085E2 ADD R1,R5,#+96 \ 000001C4 ........ BL ParseXStatusText 2733 } 2734 PrepareEditControl(&ec); \ ??AddMsgToChat_13: \ 000001C8 10008DE2 ADD R0,SP,#+16 \ 000001CC 640100EF SWI +356 2735 ConstructEditControl(&ec, 2736 ECT_NORMAL_TEXT, 2737 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 2738 ews,ews->wsbody[0]); \ 000001D0 7C3396E5 LDR R3,[R6, #+892] \ 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 2739 PrepareEditCOptions(&ec_options); \ 000001FC 04008DE2 ADD R0,SP,#+4 \ 00000200 C80100EF SWI +456 2740 //#ifdef M75 2741 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 2742 { 2743 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000218 100010E3 TST R0,#0x10 \ 0000021C ........ LDRNE R0,??DataTable108 ;; O_ED_FONT_SIZE \ 00000220 ........ LDREQ R0,??DataTable109 ;; ED_FONT_SIZE \ 00000224 001090E5 LDR R1,[R0, #+0] \ 00000228 090000EA B ??AddMsgToChat_15 2744 } 2745 else 2746 { 2747 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 2748 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,??DataTable110 ;; 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 2749 } 2750 //#else 2751 // SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 2752 //#endif 2753 CopyOptionsToEditControl(&ec,&ec_options); \ 0000025C 0D10A0E1 MOV R1,SP \ 00000260 10008DE2 ADD R0,SP,#+16 \ 00000264 CE0100EF SWI +462 2754 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 2755 ed_struct->ed_answer++; \ 0000027C 080094E5 LDR R0,[R4, #+8] \ 00000280 010080E2 ADD R0,R0,#+1 \ 00000284 080084E5 STR R0,[R4, #+8] 2756 p=p->next; \ 00000288 005095E5 LDR R5,[R5, #+0] 2757 } \ 0000028C 000055E3 CMP R5,#+0 \ 00000290 6CFFFF1A BNE ??AddMsgToChat_2 2758 j=((ed_struct->ed_contact->msg_count+1)*2); //Ожидаемый ed_answer \ 00000294 001094E5 LDR R1,[R4, #+0] \ 00000298 A41091E5 LDR R1,[R1, #+164] \ 0000029C 011081E2 ADD R1,R1,#+1 \ 000002A0 8150A0E1 LSL R5,R1,#+1 \ 000002A4 000055E1 CMP R5,R0 \ 000002A8 070000AA BGE ??AddMsgToChat_16 2759 while(jed_answer) 2760 { 2761 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??AddMsgToChat_17: \ 000002AC 040094E5 LDR R0,[R4, #+4] \ 000002B0 0110A0E3 MOV R1,#+1 \ 000002B4 D10100EF SWI +465 2762 ed_struct->ed_answer--; \ 000002B8 080094E5 LDR R0,[R4, #+8] \ 000002BC 010040E2 SUB R0,R0,#+1 \ 000002C0 080084E5 STR R0,[R4, #+8] 2763 } \ 000002C4 000055E1 CMP R5,R0 \ 000002C8 F7FFFFBA BLT ??AddMsgToChat_17 2764 } 2765 ed_struct->ed_contact->last_log=NULL; \ ??AddMsgToChat_16: \ 000002CC 0050A0E3 MOV R5,#+0 \ ??AddMsgToChat_1: \ 000002D0 000094E5 LDR R0,[R4, #+0] \ 000002D4 9C5080E5 STR R5,[R0, #+156] 2766 if (IsGuiOnTop(edchat_id)) \ 000002D8 840496E5 LDR R0,[R6, #+1156] \ 000002DC 350100EF SWI +309 \ 000002E0 000050E3 CMP R0,#+0 \ 000002E4 0300000A BEQ ??AddMsgToChat_18 2767 { 2768 total_unread--; \ 000002E8 780496E5 LDR R0,[R6, #+1144] \ 000002EC 010040E2 SUB R0,R0,#+1 \ 000002F0 780486E5 STR R0,[R6, #+1144] \ 000002F4 020000EA B ??AddMsgToChat_19 2769 } 2770 else 2771 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] 2772 ed_struct->ed_contact->isunread=0; \ ??AddMsgToChat_19: \ 00000304 000094E5 LDR R0,[R4, #+0] \ 00000308 845080E5 STR R5,[R0, #+132] 2773 total_unread2=total_unread2-ed_struct->ed_contact->unread_msg; \ 0000030C CC1296E5 LDR R1,[R6, #+716] \ 00000310 882090E5 LDR R2,[R0, #+136] \ 00000314 021041E0 SUB R1,R1,R2 \ 00000318 CC1286E5 STR R1,[R6, #+716] 2774 ed_struct->ed_contact->unread_msg=0; \ 0000031C 885080E5 STR R5,[R0, #+136] 2775 ChangeContactPos(ed_struct->ed_contact); \ 00000320 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2776 // EDIT_SetFocus(data,ed_struct->ed_answer); 2777 } \ ??AddMsgToChat_0: \ 00000324 40D08DE2 ADD SP,SP,#+64 ;; stack cleaning \ 00000328 F08FBDE8 POP {R4-R11,PC} ;; return 2778 2779 //Рисуем подтверждения непосредственно \ In segment CODE, align 4, keep-with-next 2780 void DrawAck(void *data) 2781 { \ DrawAck: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 2782 LOGQ *p; 2783 EDITCONTROL ec; 2784 EDITC_OPTIONS ec_options; 2785 EDCHAT_STRUCT *ed_struct; 2786 int j; 2787 int color; 2788 int dorefresh=0; \ 0000000C 0060A0E3 MOV R6,#+0 2789 if (!data) return; \ 00000010 4C00000A BEQ ??DrawAck_0 2790 ed_struct=EDIT_GetUserPointer(data); \ 00000014 DF0100EF SWI +479 2791 if (!ed_struct) return; \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 4900000A BEQ ??DrawAck_0 2792 p=ed_struct->ed_contact->log; \ 00000020 001090E5 LDR R1,[R0, #+0] 2793 j=ed_struct->ed_answer; 2794 j-=(ed_struct->ed_contact->msg_count*2)+1; //Номер собственно хедера верхнего итема \ 00000024 080090E5 LDR R0,[R0, #+8] \ 00000028 945091E5 LDR R5,[R1, #+148] \ 0000002C A41091E5 LDR R1,[R1, #+164] \ 00000030 000055E3 CMP R5,#+0 \ 00000034 810040E0 SUB R0,R0,R1, LSL #+1 \ 00000038 017040E2 SUB R7,R0,#+1 \ 0000003C 3A00000A BEQ ??DrawAck_1 2795 while(p) 2796 { 2797 if (j>=1) //Пока возможно лишнее \ ??DrawAck_2: \ 00000040 010057E3 CMP R7,#+1 \ 00000044 340000BA BLT ??DrawAck_3 2798 { 2799 if (!(p->acked&4)) \ 00000048 040095E5 LDR R0,[R5, #+4] \ 0000004C 040010E3 TST R0,#0x4 \ 00000050 3100001A BNE ??DrawAck_3 2800 { 2801 ExtractEditControl(data,j,&ec); \ 00000054 10208DE2 ADD R2,SP,#+16 \ 00000058 0710A0E1 MOV R1,R7 \ 0000005C 0400A0E1 MOV R0,R4 \ 00000060 690100EF SWI +361 2802 PrepareEditCOptions(&ec_options); \ 00000064 0D00A0E1 MOV R0,SP \ 00000068 C80100EF SWI +456 2803 if (p->acked) \ 0000006C 040095E5 LDR R0,[R5, #+4] \ 00000070 000050E3 CMP R0,#+0 \ 00000074 0300000A BEQ ??DrawAck_4 2804 { 2805 if (p->acked==1) \ 00000078 010050E3 CMP R0,#+1 \ 0000007C ........ LDRNE R0,??DataTable116 ;; I_COLOR 2806 color=ACK_COLOR; //Зеленый \ 00000080 ........ LDREQ R0,??DataTable112 ;; ACK_COLOR \ 00000084 0F0000EA B ??DrawAck_5 2807 else 2808 color=I_COLOR; 2809 } 2810 else 2811 { 2812 if (p->ID==0xFFFFFFFF) \ ??DrawAck_4: \ 00000088 080095E5 LDR R0,[R5, #+8] \ 0000008C 010070E3 CMN R0,#+1 \ 00000090 0B00001A BNE ??DrawAck_6 2813 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,??DataTable113 ;; O_TO_COLOR \ 000000AC ........ LDREQ R0,??DataTable114 ;; O_I_COLOR \ 000000B0 040000EA B ??DrawAck_5 \ ??DrawAck_7: \ 000000B4 010050E3 CMP R0,#+1 \ 000000B8 ........ LDRNE R0,??DataTable115 ;; TO_COLOR \ 000000BC ........ LDREQ R0,??DataTable116 ;; I_COLOR \ 000000C0 000000EA B ??DrawAck_5 2814 else 2815 color=UNACK_COLOR; //Серый \ ??DrawAck_6: \ 000000C4 ........ LDR R0,??DataTable117 ;; UNACK_COLOR 2816 } 2817 SetPenColorToEditCOptions(&ec_options,color/*p->type==1?I_COLOR:TO_COLOR*/); 2818 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_H_FONT_SIZE:ED_H_FONT_SIZE); 2819 CopyOptionsToEditControl(&ec,&ec_options); 2820 StoreEditControl(data,j,&ec); 2821 p->acked|=4; //Обработали 2822 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,??DataTable118 ;; O_ED_H_FONT_SIZE \ 000000E4 ........ LDREQ R0,??DataTable119 ;; 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] 2823 } 2824 } 2825 j+=2; 2826 p=p->next; \ ??DrawAck_3: \ 0000011C 005095E5 LDR R5,[R5, #+0] \ 00000120 027087E2 ADD R7,R7,#+2 2827 } \ 00000124 000055E3 CMP R5,#+0 \ 00000128 C4FFFF1A BNE ??DrawAck_2 2828 if (IsGuiOnTop(edchat_id)&&dorefresh) RefreshGUI(); \ ??DrawAck_1: \ 0000012C 1C009FE5 LDR R0,??DrawAck_8 ;; i_rc + 1156 \ 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 + 1156 2829 } 2830 \ In segment CODE, align 4, keep-with-next 2831 void ask_my_info(void) 2832 { 2833 /* TPKT *p; 2834 CLIST *t; 2835 p=malloc(sizeof(PKT)); 2836 p->pkt.uin=UIN; 2837 p->pkt.type=T_REQINFOSHORT; 2838 p->pkt.data_len=0; 2839 // AddStringToLog(t,0x01,"Request info...",I_str); 2840 SUBPROC((void *)SendAnswer,0,p);*/ 2841 } \ ask_my_info: \ 00000000 1EFF2FE1 BX LR ;; return 2842 \ In segment CODE, align 4, keep-with-next 2843 void set_my_status(void) 2844 { \ set_my_status: \ 00000000 00402DE9 PUSH {LR} 2845 TPKT *p; 2846 p=malloc(sizeof(PKT)+1); \ 00000004 0900A0E3 MOV R0,#+9 \ 00000008 140000EF SWI +20 2847 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 001080E5 STR R1,[R0, #+0] 2848 p->pkt.type=T_MY_STATUS_CH; // Тип пакета: изменение статуса \ 00000014 0F10A0E3 MOV R1,#+15 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2849 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000001C 0110A0E3 MOV R1,#+1 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2850 p->data[0]=CurrentStatus; \ 00000024 18109FE5 LDR R1,??set_my_status_0 ;; i_rc + 884 2851 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,??DataTable132 ;; SendAnswer \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 710100EF SWI +369 2852 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??set_my_status_0: \ 00000044 ........ DC32 i_rc + 884 2853 2854 extern int Send0; 2855 \ In segment CODE, align 4, keep-with-next 2856 void set_my_xstatus(void) 2857 { \ set_my_xstatus: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 2858 #ifdef NEWSGOLD 2859 if(Is_Id3tag_Enabled) \ 00000004 ........ LDR R7,??DataTable131 ;; i_rc \ 00000008 ........ LDR R4,??DataTable132 ;; SendAnswer \ 0000000C 0CD04DE2 SUB SP,SP,#+12 \ 00000010 E80297E5 LDR R0,[R7, #+744] \ 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 2860 { 2861 if(CurrentXStatus!=11 || !Is_ID3_ANY_STATUS) \ 0000002C 780397E5 LDR R0,[R7, #+888] \ 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 2862 { 2863 #endif 2864 TPKT *p; 2865 char *s1; 2866 char *s2; 2867 int l1; 2868 int l2; 2869 p=malloc(sizeof(PKT)+1); \ ??set_my_xstatus_1: \ 00000048 0900A0E3 MOV R0,#+9 \ 0000004C 140000EF SWI +20 \ 00000050 0080A0E1 MOV R8,R0 2870 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 00000054 006088E5 STR R6,[R8, #+0] 2871 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 00000058 B4A0C8E1 STRH R10,[R8, #+4] 2872 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000005C B690C8E1 STRH R9,[R8, #+6] 2873 p->data[0]=CurrentXStatus; \ 00000060 780397E5 LDR R0,[R7, #+888] 2874 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 2875 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 00000078 780397E5 LDR R0,[R7, #+888] \ 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 2876 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000090 780397E5 LDR R0,[R7, #+888] \ 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 2877 if ((!s1)||(!s2)) return; \ 000000A8 000059E3 CMP R9,#+0 \ 000000AC 00005713 CMPNE R7,#+0 \ 000000B0 F787BD08 POPEQ {R0-R2,R4-R10,PC} 2878 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 2879 p->pkt.uin=0; \ 000000CC 006088E5 STR R6,[R8, #+0] 2880 p->pkt.type=T_XTEXT_SET; \ 000000D0 B450C8E1 STRH R5,[R8, #+4] 2881 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] 2882 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 2883 p->data[l1]=0; \ 000000F8 00009DE5 LDR R0,[SP, #+0] 2884 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 2885 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} 2886 #ifdef NEWSGOLD 2887 } 2888 else 2889 { 2890 tracktimer=0; 2891 GetTags(); 2892 } 2893 } 2894 else 2895 { 2896 TPKT *p; 2897 char *s1; 2898 char *s2; 2899 int l1; 2900 int l2; 2901 p=malloc(sizeof(PKT)+1); \ ??set_my_xstatus_0: \ 00000130 0900A0E3 MOV R0,#+9 \ 00000134 140000EF SWI +20 \ 00000138 0080A0E1 MOV R8,R0 2902 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000013C 006088E5 STR R6,[R8, #+0] 2903 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 00000140 B4A0C8E1 STRH R10,[R8, #+4] 2904 p->pkt.data_len=1; // Длина пакета: 1 байт \ 00000144 B690C8E1 STRH R9,[R8, #+6] 2905 p->data[0]=CurrentXStatus; \ 00000148 780397E5 LDR R0,[R7, #+888] 2906 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 2907 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 00000160 780397E5 LDR R0,[R7, #+888] \ 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 2908 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000178 780397E5 LDR R0,[R7, #+888] \ 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 2909 if ((!s1)||(!s2)) return; \ 00000190 000059E3 CMP R9,#+0 \ 00000194 00005A13 CMPNE R10,#+0 \ 00000198 F787BD08 POPEQ {R0-R2,R4-R10,PC} 2910 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 2911 p->pkt.uin=0; \ 000001B4 006088E5 STR R6,[R8, #+0] 2912 p->pkt.type=T_XTEXT_SET; \ 000001B8 B450C8E1 STRH R5,[R8, #+4] 2913 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] 2914 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 2915 p->data[l1]=0; \ 000001E0 00009DE5 LDR R0,[SP, #+0] 2916 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 2917 SUBPROC((void *)SendAnswer,0,p); \ 00000204 0820A0E1 MOV R2,R8 \ 00000208 0010A0E3 MOV R1,#+0 \ 0000020C 0400A0E1 MOV R0,R4 \ 00000210 710100EF SWI +369 2918 tracktimer=0; \ ??set_my_xstatus_3: \ 00000214 A06387E5 STR R6,[R7, #+928] 2919 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 2920 } 2921 #endif 2922 } 2923 2924 #ifdef NEWSGOLD 2925 \ In segment CODE, align 4, keep-with-next 2926 void set_my_xstatus2(void) 2927 { \ set_my_xstatus2: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 2928 TPKT *p; 2929 // char *s1; 2930 // char *s2; 2931 int l1; 2932 int l2; 2933 p=malloc(sizeof(PKT)+1); 2934 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 2935 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 2936 p->pkt.data_len=1; // Длина пакета: 1 байт 2937 p->data[0]=11; 2938 SUBPROC((void *)SendAnswer,0,p); \ 00000004 ........ LDR R6,??DataTable132 ;; SendAnswer 2939 // char *s1; 2940 char *sk2=malloc(256); 2941 // strcpy(s1, playing); 2942 // s1="Now playing:"; 2943 strcpy(sk2,teast2); 2944 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 2945 l2=strlen(sk2); \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 1B0000EF SWI +27 \ 00000074 00A0A0E1 MOV R10,R0 2946 if ((!playing)||(!sk2)) return; \ 00000078 000057E3 CMP R7,#+0 \ 0000007C F187BD08 POPEQ {R0,R4-R10,PC} 2947 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 2948 p->pkt.uin=0; \ 00000090 005084E5 STR R5,[R4, #+0] 2949 p->pkt.type=T_XTEXT_SET; \ 00000094 1A00A0E3 MOV R0,#+26 \ 00000098 B400C4E1 STRH R0,[R4, #+4] 2950 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] 2951 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 2952 p->data[l1]=0; \ 000000B8 040089E0 ADD R0,R9,R4 \ 000000BC 0850C0E5 STRB R5,[R0, #+8] 2953 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 2954 mfree(sk2); \ 000000D0 0700A0E1 MOV R0,R7 \ 000000D4 150000EF SWI +21 2955 SUBPROC((void *)SendAnswer,0,p); \ 000000D8 0420A0E1 MOV R2,R4 \ 000000DC 0010A0E3 MOV R1,#+0 \ 000000E0 0600A0E1 MOV R0,R6 \ 000000E4 710100EF SWI +369 2956 // mfree(s1); 2957 // mfree(s2); 2958 } \ 000000E8 F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??set_my_xstatus2_0: \ 000000EC ........ DC32 playing \ 000000F0 ........ DC32 teast2 2959 #endif \ In segment CODE, align 4, keep-with-next 2960 void to_develop(void) 2961 { 2962 if (silenthide) return; \ to_develop: \ 00000000 ........ LDR R0,??DataTable131 ;; i_rc \ 00000004 00402DE9 PUSH {LR} \ 00000008 341490E5 LDR R1,[R0, #+1076] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD18 POPNE {PC} 2963 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable125 ;; Canvas \ 00000018 A820A0E3 MOV R2,#+168 \ 0000001C 402E82E3 ORR R2,R2,#0x400 \ 00000020 012082E0 ADD R2,R2,R1 \ 00000024 D42080E5 STR R2,[R0, #+212] 2964 gipc.name_from=ipc_my_name; \ 00000028 8820A0E3 MOV R2,#+136 \ 0000002C 402E82E3 ORR R2,R2,#0x400 \ 00000030 011082E0 ADD R1,R2,R1 \ 00000034 D81080E5 STR R1,[R0, #+216] 2965 gipc.data=(void *)maincsm_id; \ 00000038 D01290E5 LDR R1,[R0, #+720] 2966 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 0000003C D43080E2 ADD R3,R0,#+212 \ 00000040 DC1080E5 STR R1,[R0, #+220] \ 00000044 0220A0E3 MOV R2,#+2 \ 00000048 B010A0E3 MOV R1,#+176 \ 0000004C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000050 0900A0E3 MOV R0,#+9 \ 00000054 420C80E3 ORR R0,R0,#0x4200 \ 00000058 000100EF SWI +256 2967 } \ 0000005C 0080BDE8 POP {PC} ;; return 2968 \ In segment CODE, align 4, keep-with-next 2969 void ReqAddMsgToChat(CLIST *t) 2970 { \ ReqAddMsgToChat: \ 00000000 70402DE9 PUSH {R4-R6,LR} 2971 if (edchat_id) \ 00000004 ........ LDR R5,??DataTable131 ;; i_rc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 840495E5 LDR R0,[R5, #+1156] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 7080BD08 POPEQ {R4-R6,PC} 2972 { 2973 void *data=FindGUIbyId(edchat_id,NULL); \ 00000018 840495E5 LDR R0,[R5, #+1156] \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 090200EF SWI +521 \ 00000024 0060A0E1 MOV R6,R0 2974 { 2975 EDCHAT_STRUCT *ed_struct; 2976 ed_struct=EDIT_GetUserPointer(data); \ 00000028 DF0100EF SWI +479 2977 if (ed_struct) \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 7080BD08 POPEQ {R4-R6,PC} 2978 { 2979 if (ed_struct->ed_contact==t) \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 040050E1 CMP R0,R4 \ 0000003C 7080BD18 POPNE {R4-R6,PC} 2980 { 2981 if (EDIT_IsBusy(data)) \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 1C0200EF SWI +540 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0400000A BEQ ??ReqAddMsgToChat_0 2982 { 2983 t->req_add=1; \ 00000050 0100A0E3 MOV R0,#+1 \ 00000054 8C0084E5 STR R0,[R4, #+140] 2984 #ifdef EVILFOX 2985 time_to_stop_t9=2; 2986 #else 2987 time_to_stop_t9=3; \ 00000058 0300A0E3 MOV R0,#+3 \ 0000005C B40485E5 STR R0,[R5, #+1204] \ 00000060 7080BDE8 POP {R4-R6,PC} 2988 #endif 2989 } 2990 else 2991 { 2992 AddMsgToChat(data); \ ??ReqAddMsgToChat_0: \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 ........ BL AddMsgToChat 2993 DirectRedrawGUI_ID(edchat_id); \ 0000006C 840495E5 LDR R0,[R5, #+1156] \ 00000070 400100EF SWI +320 2994 } 2995 } 2996 } 2997 } 2998 } 2999 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 3000 3001 GBSTMR develop; 3002 \ In segment CODE, align 4, keep-with-next 3003 void begin_to_develop() 3004 { \ begin_to_develop: \ 00000000 00402DE9 PUSH {LR} 3005 if(IsUnlocked()) \ 00000004 430000EF SWI +67 \ 00000008 000050E3 CMP R0,#+0 \ 0000000C 0100000A BEQ ??begin_to_develop_0 3006 to_develop(); \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ B to_develop ;; tailcall 3007 else 3008 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 + 8560 \ 00000020 6410A0E3 MOV R1,#+100 \ 00000024 4D0000EF SWI +77 3009 } \ 00000028 0080BDE8 POP {PC} ;; return \ ??begin_to_develop_1: \ 0000002C ........ DC32 begin_to_develop \ 00000030 ........ DC32 i_rc + 8560 3010 3011 3012 3013 //----------------------------- LOAD COMMANDS -----------------------------// 3014 //Templates 3015 char *cmd_chars; //Собственно файл 3016 char **cmd_lines; //Массив указателей на строки 3017 \ In segment CODE, align 4, keep-with-next 3018 void cmdFree(void) 3019 { \ cmdFree: \ 00000000 10402DE9 PUSH {R4,LR} 3020 if (cmd_lines) mfree(cmd_lines); \ 00000004 ........ LDR R4,??DataTable130 ;; CmdMenuHeader \ 00000008 180094E5 LDR R0,[R4, #+24] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0000000A BEQ ??cmdFree_0 \ 00000014 150000EF SWI +21 3021 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 3022 cmd_lines=NULL; \ 00000028 0000A0E3 MOV R0,#+0 \ ??cmdFree_1: \ 0000002C 180084E5 STR R0,[R4, #+24] 3023 cmd_chars=NULL; \ 00000030 140084E5 STR R0,[R4, #+20] 3024 } \ 00000034 1080BDE8 POP {R4,PC} ;; return 3025 \ In segment CODE, align 4, keep-with-next 3026 int LoadCmd() 3027 { \ LoadCmd: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 4BDF4DE2 SUB SP,SP,#+300 3028 FSTATS stat; 3029 char fn[256]; 3030 int f; 3031 unsigned int ul; 3032 int i; 3033 int fsize; 3034 char *p; 3035 char *pp; 3036 int c; 3037 cmdFree(); \ 00000008 ........ BL cmdFree 3038 strcpy(fn,TEMPLATES_PATH); \ 0000000C ........ LDR R1,??DataTable128 ;; TEMPLATES_PATH \ 00000010 04008DE2 ADD R0,SP,#+4 \ 00000014 1A0000EF SWI +26 3039 i=strlen(fn); \ 00000018 04008DE2 ADD R0,SP,#+4 \ 0000001C 1B0000EF SWI +27 3040 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 3041 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 3042 fsize=stat.size; \ 00000044 08719DE5 LDR R7,[SP, #+264] 3043 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 3044 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 3045 p=cmd_chars=malloc(fsize+1); \ ??LoadCmd_1: \ 00000074 ........ LDR R4,??DataTable130 ;; CmdMenuHeader \ 00000078 010087E2 ADD R0,R7,#+1 \ 0000007C 140000EF SWI +20 \ 00000080 140084E5 STR R0,[R4, #+20] \ 00000084 0060A0E1 MOV R6,R0 3046 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] 3047 fclose(f,&ul); \ 000000A4 0D10A0E1 MOV R1,SP \ 000000A8 0800A0E1 MOV R0,R8 \ 000000AC 0D0000EF SWI +13 3048 i=0; \ 000000B0 0070A0E3 MOV R7,#+0 3049 pp=p; \ 000000B4 0680A0E1 MOV R8,R6 \ 000000B8 020000EA B ??LoadCmd_3 3050 for(;;) 3051 { 3052 c=*p; 3053 if (c<32) 3054 { 3055 if (pp&&(pp!=p)) 3056 { 3057 cmd_lines=realloc(cmd_lines,(i+1)*sizeof(char *)); 3058 cmd_lines[i++]=pp; 3059 } 3060 pp=NULL; 3061 if (!c) break; 3062 *p=0; 3063 } 3064 else 3065 { 3066 if (pp==NULL) pp=p; \ ??LoadCmd_4: \ 000000BC 000058E3 CMP R8,#+0 \ 000000C0 0680A001 MOVEQ R8,R6 3067 } 3068 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 3069 } 3070 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 `?` 3071 } 3072 3073 int NumOfItems=0; 3074 HEADER_DESC CmdMenuHeader={NULL,NULL,NULL,NULL,NULL,NULL,LGP_NULL}; 3075 \ In segment CODE, align 4, keep-with-next 3076 void CmdMenuItemHandler(void *data, int curitem, void *unk) 3077 { \ CmdMenuItemHandler: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 3078 void *item=AllocMenuItem(data); \ 0000000C 970100EF SWI +407 \ 00000010 0060A0E1 MOV R6,R0 3079 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] 3080 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 3081 ascii2ws(ws,p); \ 00000038 0710A0E1 MOV R1,R7 \ 0000003C ........ _BLF ascii2ws,??ascii2ws??rA 3082 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 3083 } \ 00000054 F081BDE8 POP {R4-R8,PC} ;; return \ ??CmdMenuItemHandler_0: \ 00000058 ........ DC32 CmdMenuHeader + 24 3084 \ In segment CODE, align 4, keep-with-next 3085 void CmdMenuGHook(void *data, int cmd) 3086 { \ CmdMenuGHook: \ 00000000 00402DE9 PUSH {LR} 3087 if (cmd==TI_CMD_FOCUS) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0100001A BNE ??CmdMenuGHook_0 3088 { 3089 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 \ 00000010 0080BDE8 POP {PC} 3090 } 3091 if (cmd==TI_CMD_DESTROY) \ ??CmdMenuGHook_0: \ 00000014 030051E3 CMP R1,#+3 \ 00000018 0080BD18 POPNE {PC} 3092 { 3093 cmdFree(); \ 0000001C 0040BDE8 POP {LR} ;; Pop \ 00000020 ........ B cmdFree ;; tailcall 3094 } 3095 } 3096 \ In segment CODE, align 4, keep-with-next 3097 static int CmdMenuKeyHook(void *data, GUI_MSG *msg) 3098 { \ CmdMenuKeyHook: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 3099 int Selected=GetCurMenuItem(data); \ 0000000C 8F0100EF SWI +399 \ 00000010 0060A0E1 MOV R6,R0 3100 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000014 0400A0E1 MOV R0,R4 \ 00000018 E00100EF SWI +480 \ 0000001C 0040A0E1 MOV R4,R0 3101 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 3102 { 3103 if (NumOfItems) \ 00000030 ........ LDR R0,??DataTable130 ;; CmdMenuHeader \ 00000034 1C1090E5 LDR R1,[R0, #+28] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 1300000A BEQ ??CmdMenuKeyHook_0 3104 { 3105 const char *p=cmd_lines[Selected]; \ 00000040 180090E5 LDR R0,[R0, #+24] \ 00000044 065190E7 LDR R5,[R0, +R6, LSL #+2] 3106 WSHDR *ws; 3107 ws=AllocWS(256); \ 00000048 400FA0E3 MOV R0,#+256 \ 0000004C 250100EF SWI +293 \ 00000050 0060A0E1 MOV R6,R0 3108 // wsprintf(ws,percent_t,p); 3109 ascii2ws(ws,p); \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 ........ _BLF ascii2ws,??ascii2ws??rA 3110 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 3111 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 3112 FreeWS(ws); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 290100EF SWI +297 3113 return(1); \ 00000088 0100A0E3 MOV R0,#+1 \ 0000008C 7080BDE8 POP {R4-R6,PC} 3114 } 3115 } 3116 return(0); \ ??CmdMenuKeyHook_0: \ 00000090 0000A0E3 MOV R0,#+0 \ 00000094 7080BDE8 POP {R4-R6,PC} ;; return 3117 } 3118 3119 const int CmdSoftkeys[]={0,1,2}; 3120 3121 const SOFTKEY_DESC cmd_sk[]= 3122 { 3123 {0x0004,0x0000,(int)""}, 3124 {0x0001,0x0000,(int)LG_CLOSE}, 3125 {0x003D,0x0000,(int)LGP_DOIT_PIC} 3126 }; 3127 const SOFTKEYSTAB cmd_Back_skt= 3128 { 3129 cmd_sk,0 3130 }; 3131 static const MENU_DESC CmdMenuStruct= 3132 { 3133 8,CmdMenuKeyHook,CmdMenuGHook,NULL, 3134 CmdSoftkeys, 3135 &cmd_Back_skt, 3136 0x10, 3137 CmdMenuItemHandler, 3138 NULL, //menuitems, 3139 NULL, //menuprocs, 3140 NULL 3141 }; 3142 \ In segment CODE, align 4, keep-with-next 3143 int DispCmdMenu(void *ed_gui) 3144 { \ DispCmdMenu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 3145 NumOfItems=LoadCmd(); \ 00000004 80409FE5 LDR R4,??DispCmdMenu_0 ;; CmdMenuHeader 3146 if(NumOfItems) \ 00000008 80509FE5 LDR R5,??DispCmdMenu_0+0x4 ;; `?` \ 0000000C 0060A0E1 MOV R6,R0 \ 00000010 ........ BL LoadCmd \ 00000014 1C0084E5 STR R0,[R4, #+28] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 1500000A BEQ ??DispCmdMenu_1 3147 { 3148 *((int *)(&CmdMenuHeader.lgp_id))=(int)"Select command"; \ 00000020 0C5084E5 STR R5,[R4, #+12] 3149 patch_header(&CmdMenuHeader); \ 00000024 0000A0E3 MOV R0,#+0 \ 00000028 000084E5 STR R0,[R4, #+0] \ 0000002C 888100EF SWI +33160 \ 00000030 010040E2 SUB R0,R0,#+1 \ 00000034 B400C4E1 STRH R0,[R4, #+4] \ 00000038 8A8100EF SWI +33162 \ 0000003C 010040E2 SUB R0,R0,#+1 \ 00000040 B600C4E1 STRH R0,[R4, #+6] 3150 return CreateMenu(0,0,&CmdMenuStruct,&CmdMenuHeader,0,NumOfItems,ed_gui,0); \ 00000044 0000A0E3 MOV R0,#+0 \ 00000048 01002DE9 PUSH {R0} \ 0000004C 40002DE9 PUSH {R6} \ 00000050 1C0094E5 LDR R0,[R4, #+28] \ 00000054 0430A0E1 MOV R3,R4 \ 00000058 01002DE9 PUSH {R0} \ 0000005C 202085E2 ADD R2,R5,#+32 \ 00000060 0010A0E3 MOV R1,#+0 \ 00000064 0000A0E3 MOV R0,#+0 \ 00000068 01002DE9 PUSH {R0} \ 0000006C 520100EF SWI +338 \ 00000070 10D08DE2 ADD SP,SP,#+16 \ 00000074 7080BDE8 POP {R4-R6,PC} 3151 } 3152 MsgBoxError(1, (int)"FILE NOT FOUND!"); \ ??DispCmdMenu_1: \ 00000078 101085E2 ADD R1,R5,#+16 \ 0000007C 0100A0E3 MOV R0,#+1 \ 00000080 4E0000EF SWI +78 3153 return(0); \ 00000084 0000A0E3 MOV R0,#+0 \ 00000088 7080BDE8 POP {R4-R6,PC} ;; return \ ??DispCmdMenu_0: \ 0000008C ........ DC32 CmdMenuHeader \ 00000090 ........ DC32 `?` 3154 } 3155 /* 3156 char *GetStatusByIconIndex(int icon) 3157 { 3158 char *stat=malloc(32); 3159 switch(icon) 3160 { 3161 case IS_OFFLINE : sprintf(stat,"Offline"); break; 3162 case IS_INVISIBLE : sprintf(stat,"Invisable"); break; 3163 case IS_AWAY : sprintf(stat,"Away"); break; 3164 case IS_NA : sprintf(stat,"N/A"); break; 3165 case IS_OCCUPIED: sprintf(stat,"Occupied"); break; 3166 case IS_DND : sprintf(stat,"DND"); break; 3167 case IS_DEPRESSION : sprintf(stat,"Depression"); break; 3168 case IS_EVIL : sprintf(stat,"Evil"); break; 3169 case IS_HOME : sprintf(stat,"Home"); break; 3170 case IS_LUNCH : sprintf(stat,"Lunch"); break; 3171 case IS_WORK : sprintf(stat,"Work"); break; 3172 case IS_ONLINE : sprintf(stat,"Online"); break; 3173 case IS_FFC : sprintf(stat,"FFC"); break; 3174 default : sprintf(stat,"Error status"); break; 3175 } 3176 return stat; 3177 } 3178 */ 3179 \ In segment CODE, align 4, keep-with-next 3180 char *GetStatusByIconIndex(int icon) 3181 { \ GetStatusByIconIndex: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 3182 char *stat=malloc(32); \ 00000008 2000A0E3 MOV R0,#+32 \ 0000000C 140000EF SWI +20 3183 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 3184 { 3185 case IS_OFFLINE : sprintf(stat,"Отключен"); break; 3186 case IS_INVISIBLE : sprintf(stat,"Невидимый"); break; \ ??GetStatusByIconIndex_3: \ 0000003C 0C1081E2 ADD R1,R1,#+12 \ 00000040 140000EA B ??GetStatusByIconIndex_4 3187 case IS_AWAY : sprintf(stat,"Отсутсвует"); break; \ ??GetStatusByIconIndex_5: \ 00000044 181081E2 ADD R1,R1,#+24 \ 00000048 120000EA B ??GetStatusByIconIndex_4 3188 case IS_NA : sprintf(stat,"Не доступен"); break; \ ??GetStatusByIconIndex_6: \ 0000004C 241081E2 ADD R1,R1,#+36 \ 00000050 100000EA B ??GetStatusByIconIndex_4 3189 case IS_OCCUPIED: sprintf(stat,"Занят"); break; \ ??GetStatusByIconIndex_7: \ 00000054 301081E2 ADD R1,R1,#+48 \ 00000058 0E0000EA B ??GetStatusByIconIndex_4 3190 case IS_DND : sprintf(stat,"Не беспокоить");break; \ ??GetStatusByIconIndex_8: \ 0000005C 381081E2 ADD R1,R1,#+56 \ 00000060 0C0000EA B ??GetStatusByIconIndex_4 3191 case IS_DEPRESSION : sprintf(stat,"Депрессия"); break; \ ??GetStatusByIconIndex_9: \ 00000064 481081E2 ADD R1,R1,#+72 \ 00000068 0A0000EA B ??GetStatusByIconIndex_4 3192 case IS_EVIL : sprintf(stat,"Злой"); break; \ ??GetStatusByIconIndex_10: \ 0000006C 541081E2 ADD R1,R1,#+84 \ 00000070 080000EA B ??GetStatusByIconIndex_4 3193 case IS_HOME : sprintf(stat,"Дома"); break; \ ??GetStatusByIconIndex_11: \ 00000074 5C1081E2 ADD R1,R1,#+92 \ 00000078 060000EA B ??GetStatusByIconIndex_4 3194 case IS_LUNCH : sprintf(stat,"Жру"); break; \ ??GetStatusByIconIndex_12: \ 0000007C 091F8FE2 ADR R1,??GetStatusByIconIndex_1 ;; "Жру" \ 00000080 040000EA B ??GetStatusByIconIndex_4 3195 case IS_WORK : sprintf(stat,"Работа"); break; \ ??GetStatusByIconIndex_13: \ 00000084 641081E2 ADD R1,R1,#+100 \ 00000088 020000EA B ??GetStatusByIconIndex_4 3196 case IS_ONLINE : sprintf(stat,"В сети"); break; \ ??GetStatusByIconIndex_2: \ 0000008C 6C1081E2 ADD R1,R1,#+108 \ 00000090 000000EA B ??GetStatusByIconIndex_4 3197 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 3198 default : sprintf(stat,"В сети"); break; 3199 } 3200 return stat; \ 000000A0 0500A0E1 MOV R0,R5 \ 000000A4 3080BDE8 POP {R4,R5,PC} ;; return \ ??GetStatusByIconIndex_1: \ 000000A8 C6F0F300 DC8 "Жру" \ 000000AC ........ DC32 `?` 3201 } 3202 //----------------------------- CHECK COMMANDS -----------------------------// 3203 3204 3205 int comanda; 3206 3207 char requests1[]="Sending online time..."; 3208 char requests2[]="Sending msg info..."; 3209 char requests3[]="Sending battery info..."; 3210 char requests4[]="Sending mod info..."; 3211 char requests6[]="Sending offline info..."; 3212 char mod_info[264]; 3213 #ifdef NEWSGOLD 3214 #ifdef ELKA 3215 #ifdef ole64//kluchnik 3216 #define PLATFORM "Plяtform from ОлежкО" 3217 #else 3218 #define PLATFORM "Platform: ЁLKA" 3219 #endif 3220 #else 3221 #define PLATFORM "Platform: NEWЫGOLD" 3222 #endif 3223 #else 3224 #define PLATFORM "Platform: ЫGOLD" 3225 #endif 3226 3227 #define ENA_SIGNAL 1 //для команд, активировать сигналы,али нет 3228 #define DIS_SIGNAL 0 3229 3230 3231 \ In segment CODE, align 4, keep-with-next 3232 void SendData(CLIST *t,char *s,int signal,int count) 3233 { \ SendData: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0140A0E1 MOV R4,R1 \ 00000008 0050A0E1 MOV R5,R0 3234 comanda=0; \ 0000000C ........ LDR R0,??DataTable131 ;; i_rc \ 00000010 0010A0E3 MOV R1,#+0 \ 00000014 B81480E5 STR R1,[R0, #+1208] 3235 t->signals=signal; \ 00000018 742085E5 STR R2,[R5, #+116] 3236 TPKT *p; 3237 SENDMSGCOUNT+=count; \ 0000001C DC1290E5 LDR R1,[R0, #+732] \ 00000020 011083E0 ADD R1,R3,R1 \ 00000024 DC1280E5 STR R1,[R0, #+732] 3238 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 3239 p->pkt.uin=t->uin; \ 0000003C 0C0095E5 LDR R0,[R5, #+12] \ 00000040 000086E5 STR R0,[R6, #+0] 3240 p->pkt.type=T_SENDMSG; \ 00000044 0200A0E3 MOV R0,#+2 \ 00000048 B400C6E1 STRH R0,[R6, #+4] 3241 p->pkt.data_len=strlen(s); \ 0000004C 0400A0E1 MOV R0,R4 \ 00000050 1B0000EF SWI +27 \ 00000054 B600C6E1 STRH R0,[R6, #+6] 3242 strcpy(p->data,s); \ 00000058 0410A0E1 MOV R1,R4 \ 0000005C 080086E2 ADD R0,R6,#+8 \ 00000060 1A0000EF SWI +26 3243 SUBPROC((void *)SendAnswer,0,p); \ 00000064 ........ LDR R0,??DataTable132 ;; SendAnswer \ 00000068 0620A0E1 MOV R2,R6 \ 0000006C 0010A0E3 MOV R1,#+0 \ 00000070 710100EF SWI +369 3244 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 3245 3246 unsigned int *errornumber; 3247 \ In segment CODE, align 4, keep-with-next 3248 void CheckComand(char *txt, CLIST *t) 3249 { \ CheckComand: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3250 if(CurrentPrivateStatus==2) return; \ 00000004 ........ LDR R5,??DataTable139 ;; i_rc \ 00000008 8ADF4DE2 SUB SP,SP,#+552 \ 0000000C 00B0A0E1 MOV R11,R0 \ 00000010 480495E5 LDR R0,[R5, #+1096] \ 00000014 0140A0E1 MOV R4,R1 \ 00000018 020050E3 CMP R0,#+2 \ 0000001C 0803000A BEQ ??CheckComand_0 3251 comanda=1; 3252 #ifdef kluchnik 3253 sprintf(mod_info,"mod by Evilfox,kluchnik,windes based on revision 2058, mod date: Jule 13 2008 at 14:03:59"); 3254 #else 3255 sprintf(mod_info,"mod by Evilfox,kluchnik,windes based on revision 2058, mod date: %s at %s ",__DATE__,__TIME__); \ 00000020 246C9FE5 LDR R6,??CheckComand_1 ;; `?` \ 00000024 0100A0E3 MOV R0,#+1 \ 00000028 B80485E5 STR R0,[R5, #+1208] 3256 #endif 3257 // sprintf(mod_info,"mod by %s based on revision 2058, mod date: Apr 21 2008 ",devel); 3258 t->signals=1; 3259 3260 if(!strcmp_nocase(txt, "__PING") || !strcmp_nocase(txt, "ping") || !strcmp_nocase(txt, "Ping")|| !strcmp_nocase(txt, "Пинг")|| !strcmp_nocase(txt, "Зштп")) \ 0000002C ........ LDR R7,??DataTable134 ;; I_str \ 00000030 F010A0E3 MOV R1,#+240 \ 00000034 841D81E3 ORR R1,R1,#0x2100 \ 00000038 051081E0 ADD R1,R1,R5 \ 0000003C 10108DE5 STR R1,[SP, #+16] \ 00000040 10009DE5 LDR R0,[SP, #+16] \ 00000044 583086E2 ADD R3,R6,#+88 \ 00000048 4C2086E2 ADD R2,R6,#+76 \ 0000004C 0610A0E1 MOV R1,R6 \ 00000050 160000EF SWI +22 \ 00000054 0100A0E3 MOV R0,#+1 \ 00000058 740084E5 STR R0,[R4, #+116] \ 0000005C FF80A0E3 MOV R8,#+255 \ 00000060 7F8C88E3 ORR R8,R8,#0x7F00 \ 00000064 0090A0E3 MOV R9,#+0 \ 00000068 941086E2 ADD R1,R6,#+148 \ 0000006C 0B00A0E1 MOV R0,R11 \ 00000070 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000074 000050E3 CMP R0,#+0 \ 00000078 1300000A BEQ ??CheckComand_2 \ 0000007C 9C1086E2 ADD R1,R6,#+156 \ 00000080 0B00A0E1 MOV R0,R11 \ 00000084 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 0E00000A BEQ ??CheckComand_2 \ 00000090 A41086E2 ADD R1,R6,#+164 \ 00000094 0B00A0E1 MOV R0,R11 \ 00000098 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 0000009C 000050E3 CMP R0,#+0 \ 000000A0 0900000A BEQ ??CheckComand_2 \ 000000A4 AC1086E2 ADD R1,R6,#+172 \ 000000A8 0B00A0E1 MOV R0,R11 \ 000000AC ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 000000B0 000050E3 CMP R0,#+0 \ 000000B4 0400000A BEQ ??CheckComand_2 \ 000000B8 B41086E2 ADD R1,R6,#+180 \ 000000BC 0B00A0E1 MOV R0,R11 \ 000000C0 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 000000C4 000050E3 CMP R0,#+0 \ 000000C8 1F00001A BNE ??CheckComand_3 3261 { 3262 char *status=malloc(256); \ ??CheckComand_2: \ 000000CC 400FA0E3 MOV R0,#+256 \ 000000D0 140000EF SWI +20 \ 000000D4 00A0A0E1 MOV R10,R0 3263 TTime the; 3264 GetDateTime(NULL,&the); \ 000000D8 08108DE2 ADD R1,SP,#+8 \ 000000DC 0000A0E3 MOV R0,#+0 \ 000000E0 B40000EF SWI +180 3265 sprintf(status, "Автосообщение: Запрос пинга в %02d:%02d:%02d",the.hour, the.min,the.sec); \ 000000E4 0A00DDE5 LDRB R0,[SP, #+10] \ 000000E8 641086E2 ADD R1,R6,#+100 \ 000000EC 01002DE9 PUSH {R0} \ 000000F0 0D30DDE5 LDRB R3,[SP, #+13] \ 000000F4 0C20DDE5 LDRB R2,[SP, #+12] \ 000000F8 0A00A0E1 MOV R0,R10 \ 000000FC 160000EF SWI +22 3266 comanda=0; 3267 if(show_send_info) \ 00000100 480B9FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 00000104 B89485E5 STR R9,[R5, #+1208] \ 00000108 000090E5 LDR R0,[R0, #+0] \ 0000010C 04D08DE2 ADD SP,SP,#+4 \ 00000110 000050E3 CMP R0,#+0 \ 00000114 DC0295E5 LDR R0,[R5, #+732] \ 00000118 010080E2 ADD R0,R0,#+1 \ 0000011C DC0285E5 STR R0,[R5, #+732] \ 00000120 C500000A BEQ ??CheckComand_4 3268 AddStringToLog(t,0x01,status,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000124 0110A0E3 MOV R1,#+1 \ 00000128 02002DE9 PUSH {R1} \ 0000012C 000008E0 AND R0,R8,R0 \ 00000130 01002DE9 PUSH {R0} \ 00000134 0730A0E1 MOV R3,R7 \ 00000138 0A20A0E1 MOV R2,R10 \ 0000013C 0400A0E1 MOV R0,R4 \ 00000140 ........ BL AddStringToLog \ 00000144 08D08DE2 ADD SP,SP,#+8 3269 else 3270 SENDMSGCOUNT++; 3271 SendData(t,status,ENA_SIGNAL,0); \ ??CheckComand_5: \ 00000148 BB0000EA B ??CheckComand_4 3272 mfree(status); 3273 return; 3274 } 3275 3276 if(!strcmp(txt, "__TEXTINFO") || !strcmp(txt, "__TI")) \ ??CheckComand_3: \ 0000014C 6010A0E3 MOV R1,#+96 \ 00000150 7C1D81E3 ORR R1,R1,#0x1F00 \ 00000154 051081E0 ADD R1,R1,R5 \ 00000158 14108DE5 STR R1,[SP, #+20] \ 0000015C 821F86E2 ADD R1,R6,#+520 \ 00000160 0B00A0E1 MOV R0,R11 \ 00000164 190000EF SWI +25 \ 00000168 000050E3 CMP R0,#+0 \ 0000016C 0400000A BEQ ??CheckComand_6 \ 00000170 851F86E2 ADD R1,R6,#+532 \ 00000174 0B00A0E1 MOV R0,R11 \ 00000178 190000EF SWI +25 \ 0000017C 000050E3 CMP R0,#+0 \ 00000180 8200001A BNE ??CheckComand_7 3277 { 3278 char *s=malloc(16384); \ ??CheckComand_6: \ 00000184 400CA0E3 MOV R0,#+16384 \ 00000188 140000EF SWI +20 \ 0000018C 00A0A0E1 MOV R10,R0 3279 char pl[256]; 3280 *s=0; \ 00000190 0090CAE5 STRB R9,[R10, #+0] 3281 snprintf(pl,256,"%s model: %s sw: %s\r\n",PLATFORM,Get_Phone_Info(PI_MODEL),Get_Phone_Info(PI_SW_NUMBER)); \ 00000194 0700A0E3 MOV R0,#+7 \ 00000198 D50100EF SWI +469 \ 0000019C 00B0A0E1 MOV R11,R0 \ 000001A0 0900A0E3 MOV R0,#+9 \ 000001A4 D50100EF SWI +469 \ 000001A8 00082DE9 PUSH {R11} \ 000001AC 01002DE9 PUSH {R0} \ 000001B0 D43086E2 ADD R3,R6,#+212 \ 000001B4 BC2086E2 ADD R2,R6,#+188 \ 000001B8 401FA0E3 MOV R1,#+256 \ 000001BC 30008DE2 ADD R0,SP,#+48 \ 000001C0 1B0100EF SWI +283 3282 strcat(s,pl); \ 000001C4 30108DE2 ADD R1,SP,#+48 \ 000001C8 0A00A0E1 MOV R0,R10 \ 000001CC 170000EF SWI +23 3283 char online[256]; 3284 sprintf(online,"Время в онлайн: %02d:%02d:%02d \r\n" 3285 "Сервер: %s \r\n%s \r\n", uptimeHour, uptimeMin, uptimeSec, hostbuf2,PINGO); \ 000001D0 5800A0E3 MOV R0,#+88 \ 000001D4 640D80E3 ORR R0,R0,#0x1900 \ 000001D8 050080E0 ADD R0,R0,R5 \ 000001DC 01002DE9 PUSH {R0} \ 000001E0 20009DE5 LDR R0,[SP, #+32] \ 000001E4 E81086E2 ADD R1,R6,#+232 \ 000001E8 01002DE9 PUSH {R0} \ 000001EC 9C0395E5 LDR R0,[R5, #+924] \ 000001F0 01002DE9 PUSH {R0} \ 000001F4 983395E5 LDR R3,[R5, #+920] \ 000001F8 942395E5 LDR R2,[R5, #+916] \ 000001FC 4F0F8DE2 ADD R0,SP,#+316 \ 00000200 160000EF SWI +22 3286 strcat(s,online); \ 00000204 4F1F8DE2 ADD R1,SP,#+316 \ 00000208 0A00A0E1 MOV R0,R10 \ 0000020C 170000EF SWI +23 3287 char *send_txt=malloc(64); \ 00000210 4000A0E3 MOV R0,#+64 \ 00000214 140000EF SWI +20 3288 sprintf(send_txt, "Отправлено сообщений: %d \r\n" 3289 "Принято сообщений: %d \r\n", main2_count, main_count); \ 00000218 AC3295E5 LDR R3,[R5, #+684] \ 0000021C B02295E5 LDR R2,[R5, #+688] \ 00000220 00B0A0E1 MOV R11,R0 \ 00000224 471F86E2 ADD R1,R6,#+284 \ 00000228 160000EF SWI +22 3290 strcat(s,send_txt); \ 0000022C 0B10A0E1 MOV R1,R11 \ 00000230 0A00A0E1 MOV R0,R10 \ 00000234 170000EF SWI +23 3291 3292 WSHDR *ws=AllocWS(64); \ 00000238 4000A0E3 MOV R0,#+64 \ 0000023C 250100EF SWI +293 \ 00000240 14008DE5 STR R0,[SP, #+20] 3293 GetProvider(ws,0); \ 00000244 0010A0E3 MOV R1,#+0 \ 00000248 410000EF SWI +65 3294 char prov[16]; 3295 ws_2str(ws,prov,wstrlen(ws)); \ 0000024C 14009DE5 LDR R0,[SP, #+20] \ 00000250 230100EF SWI +291 \ 00000254 0020A0E1 MOV R2,R0 \ 00000258 14009DE5 LDR R0,[SP, #+20] \ 0000025C 2C108DE2 ADD R1,SP,#+44 \ 00000260 A30000EF SWI +163 3296 sprintf(send_txt, "Оператор: %s \r\n", prov); \ 00000264 2C208DE2 ADD R2,SP,#+44 \ 00000268 541F86E2 ADD R1,R6,#+336 \ 0000026C 0B00A0E1 MOV R0,R11 \ 00000270 160000EF SWI +22 3297 FreeWS(ws); \ 00000274 14009DE5 LDR R0,[SP, #+20] \ 00000278 290100EF SWI +297 3298 strcat(s,send_txt); \ 0000027C 0B10A0E1 MOV R1,R11 \ 00000280 0A00A0E1 MOV R0,R10 \ 00000284 170000EF SWI +23 3299 3300 int bat; 3301 bat=*RamCap(); \ 00000288 C88000EF SWI +32968 \ 0000028C B020D0E1 LDRH R2,[R0, #+0] 3302 sprintf(send_txt, "Заряд батареи: %d процентов \r\n", bat); \ 00000290 581F86E2 ADD R1,R6,#+352 \ 00000294 0B00A0E1 MOV R0,R11 \ 00000298 160000EF SWI +22 3303 strcat(s,send_txt); \ 0000029C 0B10A0E1 MOV R1,R11 \ 000002A0 0A00A0E1 MOV R0,R10 \ 000002A4 170000EF SWI +23 3304 3305 char *status=malloc(256); \ 000002A8 400FA0E3 MOV R0,#+256 \ 000002AC 140000EF SWI +20 \ 000002B0 14008DE5 STR R0,[SP, #+20] 3306 TTime the; 3307 GetDateTime(NULL,&the); \ 000002B4 1C108DE2 ADD R1,SP,#+28 \ 000002B8 0900A0E1 MOV R0,R9 \ 000002BC B40000EF SWI +180 3308 void Get_Online_total(); 3309 Get_Online_total(); \ 000002C0 ........ BL Get_Online_total 3310 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l \ 000002C4 6C2495E5 LDR R2,[R5, #+1132] \ 000002C8 703495E5 LDR R3,[R5, #+1136] 3311 sprintf(status, "Traffic: Rx : %db Tx : %db Queue: %db \r\nTime: %02d:%02d\r\n" 3312 "Online contact: %d [total: %d] \r\nUnread message: %d/%d ", 3313 RX,TX,sendq_l, 3314 the.hour, the.min, 3315 kopa_kontaktu, kopa_online, 3316 total_unread,total_unread2); \ 000002CC CC0295E5 LDR R0,[R5, #+716] \ 000002D0 601F86E2 ADD R1,R6,#+384 \ 000002D4 01002DE9 PUSH {R0} \ 000002D8 780495E5 LDR R0,[R5, #+1144] \ 000002DC 01002DE9 PUSH {R0} \ 000002E0 900495E5 LDR R0,[R5, #+1168] \ 000002E4 01002DE9 PUSH {R0} \ 000002E8 940495E5 LDR R0,[R5, #+1172] \ 000002EC 01002DE9 PUSH {R0} \ 000002F0 2D00DDE5 LDRB R0,[SP, #+45] \ 000002F4 01002DE9 PUSH {R0} \ 000002F8 3000DDE5 LDRB R0,[SP, #+48] \ 000002FC 01002DE9 PUSH {R0} \ 00000300 A40295E5 LDR R0,[R5, #+676] \ 00000304 01002DE9 PUSH {R0} \ 00000308 30009DE5 LDR R0,[SP, #+48] \ 0000030C 160000EF SWI +22 \ 00000310 30D08DE2 ADD SP,SP,#+48 3317 strcat(s,status); \ 00000314 00109DE5 LDR R1,[SP, #+0] \ 00000318 0A00A0E1 MOV R0,R10 \ 0000031C 170000EF SWI +23 3318 comanda=0; 3319 if(show_send_info) \ 00000320 28099FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 00000324 B89485E5 STR R9,[R5, #+1208] \ 00000328 000090E5 LDR R0,[R0, #+0] \ 0000032C 000050E3 CMP R0,#+0 \ 00000330 DC0295E5 LDR R0,[R5, #+732] \ 00000334 010080E2 ADD R0,R0,#+1 \ 00000338 DC0285E5 STR R0,[R5, #+732] \ 0000033C 0800000A BEQ ??CheckComand_8 3320 AddStringToLog(t,0x01,"Sending textinfo...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000340 0110A0E3 MOV R1,#+1 \ 00000344 02002DE9 PUSH {R1} \ 00000348 000008E0 AND R0,R8,R0 \ 0000034C 01002DE9 PUSH {R0} \ 00000350 0730A0E1 MOV R3,R7 \ 00000354 7D2F86E2 ADD R2,R6,#+500 \ 00000358 0400A0E1 MOV R0,R4 \ 0000035C ........ BL AddStringToLog \ 00000360 08D08DE2 ADD SP,SP,#+8 3321 else 3322 SENDMSGCOUNT++; 3323 SendData(t,s,ENA_SIGNAL,0); \ ??CheckComand_8: \ 00000364 0030A0E3 MOV R3,#+0 \ 00000368 0120A0E3 MOV R2,#+1 \ 0000036C 0A10A0E1 MOV R1,R10 \ 00000370 0400A0E1 MOV R0,R4 \ 00000374 ........ BL SendData 3324 mfree(s); \ 00000378 0A00A0E1 MOV R0,R10 \ 0000037C 150000EF SWI +21 3325 mfree(send_txt); \ 00000380 0B00A0E1 MOV R0,R11 \ 00000384 150000EF SWI +21 3326 mfree(status); \ 00000388 00009DE5 LDR R0,[SP, #+0] \ 0000038C 300000EA B ??CheckComand_9 3327 return; 3328 } 3329 3330 if(!strcmp(txt, "__TIME") || !strcmp(txt, "__T") || !strcmp(txt, "GET_TIME")) \ ??CheckComand_7: \ 00000390 8F1F86E2 ADD R1,R6,#+572 \ 00000394 0B00A0E1 MOV R0,R11 \ 00000398 190000EF SWI +25 \ 0000039C 000050E3 CMP R0,#+0 \ 000003A0 0900000A BEQ ??CheckComand_10 \ 000003A4 DE1F8FE2 ADR R1,??CheckComand_11 ;; "__T" \ 000003A8 0B00A0E1 MOV R0,R11 \ 000003AC 190000EF SWI +25 \ 000003B0 000050E3 CMP R0,#+0 \ 000003B4 0400000A BEQ ??CheckComand_10 \ 000003B8 911F86E2 ADD R1,R6,#+580 \ 000003BC 0B00A0E1 MOV R0,R11 \ 000003C0 190000EF SWI +25 \ 000003C4 000050E3 CMP R0,#+0 \ 000003C8 2400001A BNE ??CheckComand_12 3331 { 3332 char *status=malloc(256); \ ??CheckComand_10: \ 000003CC 400FA0E3 MOV R0,#+256 \ 000003D0 140000EF SWI +20 \ 000003D4 00A0A0E1 MOV R10,R0 3333 TTime the; 3334 GetDateTime(NULL,&the); \ 000003D8 08108DE2 ADD R1,SP,#+8 \ 000003DC 0000A0E3 MOV R0,#+0 \ 000003E0 B40000EF SWI +180 3335 sprintf(status, "Time: %02d:%02d",the.hour, the.min); \ 000003E4 0930DDE5 LDRB R3,[SP, #+9] \ 000003E8 0820DDE5 LDRB R2,[SP, #+8] \ 000003EC 871F86E2 ADD R1,R6,#+540 \ 000003F0 0A00A0E1 MOV R0,R10 \ 000003F4 160000EF SWI +22 3336 comanda=0; 3337 if(show_send_info) \ 000003F8 50089FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 000003FC B89485E5 STR R9,[R5, #+1208] \ 00000400 000090E5 LDR R0,[R0, #+0] \ 00000404 000050E3 CMP R0,#+0 \ 00000408 DC0295E5 LDR R0,[R5, #+732] \ 0000040C 010080E2 ADD R0,R0,#+1 \ 00000410 DC0285E5 STR R0,[R5, #+732] \ 00000414 0800000A BEQ ??CheckComand_4 3338 AddStringToLog(t,0x01,"Sending time...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000418 0110A0E3 MOV R1,#+1 \ 0000041C 02002DE9 PUSH {R1} \ 00000420 000008E0 AND R0,R8,R0 \ 00000424 01002DE9 PUSH {R0} \ 00000428 0730A0E1 MOV R3,R7 \ 0000042C 8B2F86E2 ADD R2,R6,#+556 \ 00000430 0400A0E1 MOV R0,R4 \ 00000434 ........ BL AddStringToLog \ 00000438 08D08DE2 ADD SP,SP,#+8 3339 else 3340 SENDMSGCOUNT++; 3341 SendData(t,status,ENA_SIGNAL,0); \ ??CheckComand_4: \ 0000043C 0030A0E3 MOV R3,#+0 \ 00000440 0120A0E3 MOV R2,#+1 \ 00000444 0A10A0E1 MOV R1,R10 \ 00000448 0400A0E1 MOV R0,R4 \ 0000044C ........ BL SendData 3342 mfree(status); \ 00000450 0A00A0E1 MOV R0,R10 \ ??CheckComand_9: \ 00000454 150000EF SWI +21 3343 return; \ ??CheckComand_13: \ 00000458 8ADF8DE2 ADD SP,SP,#+552 \ 0000045C F08FBDE8 POP {R4-R11,PC} 3344 } 3345 3346 if(!strcmp(txt, "GET_PLATFORM_INFO") || !strcmp(txt, "__PLATFORM") || !strcmp(txt,"__HW")) \ ??CheckComand_12: \ 00000460 ........ LDR R10,??DataTable135 ;; SendAnswer \ 00000464 A01F86E2 ADD R1,R6,#+640 \ 00000468 0B00A0E1 MOV R0,R11 \ 0000046C 190000EF SWI +25 \ 00000470 000050E3 CMP R0,#+0 \ 00000474 0900000A BEQ ??CheckComand_14 \ 00000478 A51F86E2 ADD R1,R6,#+660 \ 0000047C 0B00A0E1 MOV R0,R11 \ 00000480 190000EF SWI +25 \ 00000484 000050E3 CMP R0,#+0 \ 00000488 0400000A BEQ ??CheckComand_14 \ 0000048C A81F86E2 ADD R1,R6,#+672 \ 00000490 0B00A0E1 MOV R0,R11 \ 00000494 190000EF SWI +25 \ 00000498 000050E3 CMP R0,#+0 \ 0000049C 3100001A BNE ??CheckComand_15 3347 { 3348 comanda=0; \ ??CheckComand_14: \ 000004A0 B89485E5 STR R9,[R5, #+1208] 3349 TPKT *p; 3350 char pl[256]; 3351 snprintf(pl,256,"%s model: %s sw: %s",PLATFORM,Get_Phone_Info(PI_MODEL),Get_Phone_Info(PI_SW_NUMBER)); \ 000004A4 0700A0E3 MOV R0,#+7 \ 000004A8 D50100EF SWI +469 \ 000004AC 0090A0E1 MOV R9,R0 \ 000004B0 0900A0E3 MOV R0,#+9 \ 000004B4 D50100EF SWI +469 \ 000004B8 00022DE9 PUSH {R9} \ 000004BC 01002DE9 PUSH {R0} \ 000004C0 D43086E2 ADD R3,R6,#+212 \ 000004C4 942F86E2 ADD R2,R6,#+592 \ 000004C8 401FA0E3 MOV R1,#+256 \ 000004CC 4C0F8DE2 ADD R0,SP,#+304 \ 000004D0 1B0100EF SWI +283 3352 p=malloc(sizeof(PKT)+strlen(pl)+1); \ 000004D4 4C0F8DE2 ADD R0,SP,#+304 \ 000004D8 1B0000EF SWI +27 \ 000004DC 090080E2 ADD R0,R0,#+9 \ 000004E0 140000EF SWI +20 \ 000004E4 0090A0E1 MOV R9,R0 3353 p->pkt.uin=t->uin; \ 000004E8 0C0094E5 LDR R0,[R4, #+12] \ 000004EC 000089E5 STR R0,[R9, #+0] 3354 p->pkt.type=T_SENDMSG; \ 000004F0 0200A0E3 MOV R0,#+2 \ 000004F4 B400C9E1 STRH R0,[R9, #+4] 3355 p->pkt.data_len=strlen(pl); \ 000004F8 4C0F8DE2 ADD R0,SP,#+304 \ 000004FC 1B0000EF SWI +27 \ 00000500 B600C9E1 STRH R0,[R9, #+6] 3356 strcpy(p->data,pl); \ 00000504 4C1F8DE2 ADD R1,SP,#+304 \ 00000508 080089E2 ADD R0,R9,#+8 \ 0000050C 1A0000EF SWI +26 3357 if(show_send_info) \ 00000510 38079FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 00000514 000090E5 LDR R0,[R0, #+0] \ 00000518 08D08DE2 ADD SP,SP,#+8 \ 0000051C 000050E3 CMP R0,#+0 \ 00000520 DC0295E5 LDR R0,[R5, #+732] \ 00000524 010080E2 ADD R0,R0,#+1 \ 00000528 DC0285E5 STR R0,[R5, #+732] \ 0000052C 0800000A BEQ ??CheckComand_16 3358 AddStringToLog(t,0x01,"Sending platform info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000530 0110A0E3 MOV R1,#+1 \ 00000534 02002DE9 PUSH {R1} \ 00000538 000008E0 AND R0,R8,R0 \ 0000053C 01002DE9 PUSH {R0} \ 00000540 0730A0E1 MOV R3,R7 \ 00000544 992F86E2 ADD R2,R6,#+612 \ 00000548 0400A0E1 MOV R0,R4 \ 0000054C ........ BL AddStringToLog \ 00000550 08D08DE2 ADD SP,SP,#+8 3359 else 3360 SENDMSGCOUNT++; 3361 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_16: \ 00000554 0920A0E1 MOV R2,R9 \ ??CheckComand_17: \ 00000558 0010A0E3 MOV R1,#+0 \ 0000055C 0A00A0E1 MOV R0,R10 \ 00000560 710100EF SWI +369 3362 return; \ 00000564 BBFFFFEA B ??CheckComand_13 3363 } 3364 3365 if(!strcmp(txt, "GET_ONLINE_TIME") || !strcmp(txt, "__ONLINE")) \ ??CheckComand_15: \ 00000568 B51F86E2 ADD R1,R6,#+724 \ 0000056C 0B00A0E1 MOV R0,R11 \ 00000570 190000EF SWI +25 \ 00000574 000050E3 CMP R0,#+0 \ 00000578 0400000A BEQ ??CheckComand_18 \ 0000057C B91F86E2 ADD R1,R6,#+740 \ 00000580 0B00A0E1 MOV R0,R11 \ 00000584 190000EF SWI +25 \ 00000588 000050E3 CMP R0,#+0 \ 0000058C 2B00001A BNE ??CheckComand_19 3366 { 3367 comanda=0; \ ??CheckComand_18: \ 00000590 B89485E5 STR R9,[R5, #+1208] 3368 TPKT *p; 3369 char online[256]; 3370 sprintf(online,"Время в онлайн: %02d:%02d:%02d \n" 3371 "Сервер: %s", uptimeHour, uptimeMin, uptimeSec, hostbuf2); \ 00000594 14009DE5 LDR R0,[SP, #+20] \ 00000598 AA1F86E2 ADD R1,R6,#+680 \ 0000059C 01002DE9 PUSH {R0} \ 000005A0 9C0395E5 LDR R0,[R5, #+924] \ 000005A4 01002DE9 PUSH {R0} \ 000005A8 983395E5 LDR R3,[R5, #+920] \ 000005AC 942395E5 LDR R2,[R5, #+916] \ 000005B0 4C0F8DE2 ADD R0,SP,#+304 \ 000005B4 160000EF SWI +22 3372 p=malloc(sizeof(PKT)+strlen(online)+1); \ 000005B8 4C0F8DE2 ADD R0,SP,#+304 \ 000005BC 1B0000EF SWI +27 \ 000005C0 090080E2 ADD R0,R0,#+9 \ 000005C4 140000EF SWI +20 \ 000005C8 0060A0E1 MOV R6,R0 3373 p->pkt.uin=t->uin; \ 000005CC 0C0094E5 LDR R0,[R4, #+12] \ 000005D0 000086E5 STR R0,[R6, #+0] 3374 p->pkt.type=T_SENDMSG; \ 000005D4 0200A0E3 MOV R0,#+2 \ 000005D8 B400C6E1 STRH R0,[R6, #+4] 3375 p->pkt.data_len=strlen(online); \ 000005DC 4C0F8DE2 ADD R0,SP,#+304 \ 000005E0 1B0000EF SWI +27 \ 000005E4 B600C6E1 STRH R0,[R6, #+6] 3376 strcpy(p->data,online); \ 000005E8 4C1F8DE2 ADD R1,SP,#+304 \ 000005EC 080086E2 ADD R0,R6,#+8 \ 000005F0 1A0000EF SWI +26 3377 if(show_send_info) \ 000005F4 54069FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 000005F8 000090E5 LDR R0,[R0, #+0] \ 000005FC 08D08DE2 ADD SP,SP,#+8 \ 00000600 000050E3 CMP R0,#+0 \ 00000604 DC0295E5 LDR R0,[R5, #+732] \ 00000608 010080E2 ADD R0,R0,#+1 \ 0000060C DC0285E5 STR R0,[R5, #+732] \ 00000610 0800000A BEQ ??CheckComand_20 3378 AddStringToLog(t,0x01,requests1,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000614 0110A0E3 MOV R1,#+1 \ 00000618 02002DE9 PUSH {R1} \ 0000061C 000008E0 AND R0,R8,R0 \ 00000620 01002DE9 PUSH {R0} \ 00000624 0730A0E1 MOV R3,R7 \ 00000628 862D85E2 ADD R2,R5,#+8576 \ 0000062C 0400A0E1 MOV R0,R4 \ 00000630 ........ BL AddStringToLog \ 00000634 08D08DE2 ADD SP,SP,#+8 3379 else 3380 SENDMSGCOUNT++; 3381 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_20: \ 00000638 0620A0E1 MOV R2,R6 \ 0000063C C5FFFFEA B ??CheckComand_17 3382 return; 3383 } 3384 3385 if(!strcmp(txt, "GET_MSG_INFO") || !strcmp(txt, "__MSG")) \ ??CheckComand_19: \ 00000640 C81F86E2 ADD R1,R6,#+800 \ 00000644 0B00A0E1 MOV R0,R11 \ 00000648 190000EF SWI +25 \ 0000064C 000050E3 CMP R0,#+0 \ 00000650 0400000A BEQ ??CheckComand_21 \ 00000654 CC1F86E2 ADD R1,R6,#+816 \ 00000658 0B00A0E1 MOV R0,R11 \ 0000065C 190000EF SWI +25 \ 00000660 000050E3 CMP R0,#+0 \ 00000664 2F00001A BNE ??CheckComand_22 3386 { 3387 comanda=0; \ ??CheckComand_21: \ 00000668 B89485E5 STR R9,[R5, #+1208] 3388 TPKT *p; 3389 char *send_txt=malloc(64); \ 0000066C 4000A0E3 MOV R0,#+64 \ 00000670 140000EF SWI +20 3390 sprintf(send_txt, "Отправлено сообщений: %d \n" 3391 "Принято сообщений: %d" 3392 , main2_count, main_count); \ 00000674 AC3295E5 LDR R3,[R5, #+684] \ 00000678 B02295E5 LDR R2,[R5, #+688] \ 0000067C 0090A0E1 MOV R9,R0 \ 00000680 BC1F86E2 ADD R1,R6,#+752 \ 00000684 160000EF SWI +22 3393 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 3394 p->pkt.uin=t->uin; \ 0000069C 0C0094E5 LDR R0,[R4, #+12] \ 000006A0 000086E5 STR R0,[R6, #+0] 3395 p->pkt.type=T_SENDMSG; \ 000006A4 0200A0E3 MOV R0,#+2 \ 000006A8 B400C6E1 STRH R0,[R6, #+4] 3396 p->pkt.data_len=strlen(send_txt); \ 000006AC 0900A0E1 MOV R0,R9 \ 000006B0 1B0000EF SWI +27 \ 000006B4 B600C6E1 STRH R0,[R6, #+6] 3397 strcpy(p->data,send_txt); \ 000006B8 0910A0E1 MOV R1,R9 \ 000006BC 080086E2 ADD R0,R6,#+8 \ 000006C0 1A0000EF SWI +26 3398 if(show_send_info) \ 000006C4 84059FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 000006C8 000090E5 LDR R0,[R0, #+0] \ 000006CC 000050E3 CMP R0,#+0 \ 000006D0 DC0295E5 LDR R0,[R5, #+732] \ 000006D4 010080E2 ADD R0,R0,#+1 \ 000006D8 DC0285E5 STR R0,[R5, #+732] \ 000006DC 0A00000A BEQ ??CheckComand_23 3399 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 9800A0E3 MOV R0,#+152 \ 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 3400 else 3401 SENDMSGCOUNT++; 3402 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 3403 mfree(send_txt); \ 0000071C 0900A0E1 MOV R0,R9 \ 00000720 4BFFFFEA B ??CheckComand_9 \ ??CheckComand_11: \ 00000724 5F5F5400 DC8 "__T" 3404 return; 3405 } 3406 3407 //==========================windes commands begin ===================== 3408 3409 if(!strcmp(txt, "GET_PROVIDER") || !strcmp(txt, "__PROVIDER")) \ ??CheckComand_22: \ 00000728 D91F86E2 ADD R1,R6,#+868 \ 0000072C 0B00A0E1 MOV R0,R11 \ 00000730 190000EF SWI +25 \ 00000734 000050E3 CMP R0,#+0 \ 00000738 0400000A BEQ ??CheckComand_24 \ 0000073C DD1F86E2 ADD R1,R6,#+884 \ 00000740 0B00A0E1 MOV R0,R11 \ 00000744 190000EF SWI +25 \ 00000748 000050E3 CMP R0,#+0 \ 0000074C 3600001A BNE ??CheckComand_25 3410 { 3411 comanda=0; \ ??CheckComand_24: \ 00000750 B89485E5 STR R9,[R5, #+1208] 3412 TPKT *p; 3413 3414 WSHDR *ws=AllocWS(32); \ 00000754 2000A0E3 MOV R0,#+32 \ 00000758 250100EF SWI +293 \ 0000075C 0090A0E1 MOV R9,R0 3415 GetProvider(ws,0); \ 00000760 0010A0E3 MOV R1,#+0 \ 00000764 410000EF SWI +65 3416 char prov[16]; 3417 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 3418 char *send_txt=malloc(32); \ 00000780 2000A0E3 MOV R0,#+32 \ 00000784 140000EF SWI +20 \ 00000788 00B0A0E1 MOV R11,R0 3419 sprintf(send_txt, "Оператор: %s", prov); \ 0000078C 18208DE2 ADD R2,SP,#+24 \ 00000790 CE1F86E2 ADD R1,R6,#+824 \ 00000794 160000EF SWI +22 3420 FreeWS(ws); \ 00000798 0900A0E1 MOV R0,R9 \ 0000079C 290100EF SWI +297 3421 3422 p=malloc(sizeof(PKT)+28+1); \ 000007A0 2500A0E3 MOV R0,#+37 \ 000007A4 140000EF SWI +20 \ 000007A8 0090A0E1 MOV R9,R0 3423 p->pkt.uin=t->uin; \ 000007AC 0C0094E5 LDR R0,[R4, #+12] \ 000007B0 000089E5 STR R0,[R9, #+0] 3424 p->pkt.type=T_SENDMSG; \ 000007B4 0200A0E3 MOV R0,#+2 \ 000007B8 B400C9E1 STRH R0,[R9, #+4] 3425 p->pkt.data_len=strlen(send_txt); \ 000007BC 0B00A0E1 MOV R0,R11 \ 000007C0 1B0000EF SWI +27 \ 000007C4 B600C9E1 STRH R0,[R9, #+6] 3426 strcpy(p->data,send_txt); \ 000007C8 0B10A0E1 MOV R1,R11 \ 000007CC 080089E2 ADD R0,R9,#+8 \ 000007D0 1A0000EF SWI +26 3427 if(show_send_info) \ 000007D4 74049FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 000007D8 000090E5 LDR R0,[R0, #+0] \ 000007DC 000050E3 CMP R0,#+0 \ 000007E0 DC0295E5 LDR R0,[R5, #+732] \ 000007E4 010080E2 ADD R0,R0,#+1 \ 000007E8 DC0285E5 STR R0,[R5, #+732] \ 000007EC 0800000A BEQ ??CheckComand_26 3428 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 D22F86E2 ADD R2,R6,#+840 \ 00000808 0400A0E1 MOV R0,R4 \ 0000080C ........ BL AddStringToLog \ 00000810 08D08DE2 ADD SP,SP,#+8 3429 else 3430 SENDMSGCOUNT++; 3431 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 3432 mfree(send_txt); \ 00000824 0B00A0E1 MOV R0,R11 \ 00000828 09FFFFEA B ??CheckComand_9 3433 return; 3434 } 3435 3436 3437 //----------------------------------------------------------------------- 3438 3439 3440 if(!strcmp(txt, "GET_MOD_INFO") || !strcmp(txt, "__MOD")) \ ??CheckComand_25: \ 0000082C E51F86E2 ADD R1,R6,#+916 \ 00000830 0B00A0E1 MOV R0,R11 \ 00000834 190000EF SWI +25 \ 00000838 000050E3 CMP R0,#+0 \ 0000083C 0400000A BEQ ??CheckComand_27 \ 00000840 E91F86E2 ADD R1,R6,#+932 \ 00000844 0B00A0E1 MOV R0,R11 \ 00000848 190000EF SWI +25 \ 0000084C 000050E3 CMP R0,#+0 \ 00000850 3B00001A BNE ??CheckComand_28 3441 { 3442 comanda=0; \ ??CheckComand_27: \ 00000854 B89485E5 STR R9,[R5, #+1208] 3443 TPKT *p; 3444 char *send_txt=malloc(256); \ 00000858 400FA0E3 MOV R0,#+256 \ 0000085C 140000EF SWI +20 \ 00000860 0090A0E1 MOV R9,R0 3445 // sprintf(I_UIN, "uin%d", t->uin); 3446 strcpy(I_UIN, t->name); \ 00000864 6000A0E3 MOV R0,#+96 \ 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 3447 if(strstr(ignor_list,I_UIN)==0) \ 0000087C ........ LDR R0,??DataTable136 ;; ignor_list \ 00000880 0B10A0E1 MOV R1,R11 \ 00000884 180100EF SWI +280 \ 00000888 000050E3 CMP R0,#+0 3448 { 3449 strcpy(send_txt, mod_info); \ 0000088C 10109D05 LDREQ R1,[SP, #+16] 3450 } 3451 else 3452 strcpy(send_txt, "***Access denied***"); \ 00000890 0900A0E1 MOV R0,R9 \ 00000894 E01F8612 ADDNE R1,R6,#+896 \ 00000898 1A0000EF SWI +26 3453 3454 strcpy(send_txt, mod_info); \ 0000089C 10109DE5 LDR R1,[SP, #+16] \ 000008A0 0900A0E1 MOV R0,R9 \ 000008A4 1A0000EF SWI +26 3455 3456 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 3457 p->pkt.uin=t->uin; \ 000008BC 0C0094E5 LDR R0,[R4, #+12] \ 000008C0 000086E5 STR R0,[R6, #+0] 3458 p->pkt.type=T_SENDMSG; \ 000008C4 0200A0E3 MOV R0,#+2 \ 000008C8 B400C6E1 STRH R0,[R6, #+4] 3459 p->pkt.data_len=strlen(send_txt); \ 000008CC 0900A0E1 MOV R0,R9 \ 000008D0 1B0000EF SWI +27 \ 000008D4 B600C6E1 STRH R0,[R6, #+6] 3460 strcpy(p->data,send_txt); \ 000008D8 0910A0E1 MOV R1,R9 \ 000008DC 080086E2 ADD R0,R6,#+8 \ 000008E0 1A0000EF SWI +26 3461 #ifdef EVILFOX 3462 SENDMSGCOUNT++; 3463 #else 3464 if(show_send_info) \ 000008E4 64039FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 000008E8 000090E5 LDR R0,[R0, #+0] \ 000008EC 000050E3 CMP R0,#+0 \ 000008F0 DC0295E5 LDR R0,[R5, #+732] \ 000008F4 010080E2 ADD R0,R0,#+1 \ 000008F8 DC0285E5 STR R0,[R5, #+732] \ 000008FC 0A00000A BEQ ??CheckComand_29 3465 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 C400A0E3 MOV R0,#+196 \ 00000918 840D80E3 ORR R0,R0,#0x2100 \ 0000091C 052080E0 ADD R2,R0,R5 \ 00000920 0400A0E1 MOV R0,R4 \ 00000924 ........ BL AddStringToLog \ 00000928 08D08DE2 ADD SP,SP,#+8 3466 else 3467 SENDMSGCOUNT++; 3468 #endif 3469 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 3470 mfree(send_txt); \ 0000093C 0900A0E1 MOV R0,R9 \ 00000940 C3FEFFEA B ??CheckComand_9 3471 return; 3472 } 3473 3474 if(!strcmp(txt, "GET_BAT_INFO") || !strcmp(txt, "__BAT")) \ ??CheckComand_28: \ 00000944 F21F86E2 ADD R1,R6,#+968 \ 00000948 0B00A0E1 MOV R0,R11 \ 0000094C 190000EF SWI +25 \ 00000950 000050E3 CMP R0,#+0 \ 00000954 0400000A BEQ ??CheckComand_30 \ 00000958 F61F86E2 ADD R1,R6,#+984 \ 0000095C 0B00A0E1 MOV R0,R11 \ 00000960 190000EF SWI +25 \ 00000964 000050E3 CMP R0,#+0 \ 00000968 2D00001A BNE ??CheckComand_31 3475 { 3476 comanda=0; \ ??CheckComand_30: \ 0000096C B89485E5 STR R9,[R5, #+1208] 3477 TPKT *p; 3478 int bat; 3479 bat=*RamCap(); \ 00000970 C88000EF SWI +32968 \ 00000974 B0B0D0E1 LDRH R11,[R0, #+0] 3480 char *send_txt=malloc(64); \ 00000978 4000A0E3 MOV R0,#+64 \ 0000097C 140000EF SWI +20 \ 00000980 0090A0E1 MOV R9,R0 3481 sprintf(send_txt, "Заряд батареи: %d процентов", bat); \ 00000984 0B20A0E1 MOV R2,R11 \ 00000988 EB1F86E2 ADD R1,R6,#+940 \ 0000098C 160000EF SWI +22 3482 p=malloc(sizeof(PKT)+28+1); \ 00000990 2500A0E3 MOV R0,#+37 \ 00000994 140000EF SWI +20 \ 00000998 0060A0E1 MOV R6,R0 3483 p->pkt.uin=t->uin; \ 0000099C 0C0094E5 LDR R0,[R4, #+12] \ 000009A0 000086E5 STR R0,[R6, #+0] 3484 p->pkt.type=T_SENDMSG; \ 000009A4 0200A0E3 MOV R0,#+2 \ 000009A8 B400C6E1 STRH R0,[R6, #+4] 3485 p->pkt.data_len=strlen(send_txt); \ 000009AC 0900A0E1 MOV R0,R9 \ 000009B0 1B0000EF SWI +27 \ 000009B4 B600C6E1 STRH R0,[R6, #+6] 3486 strcpy(p->data,send_txt); \ 000009B8 0910A0E1 MOV R1,R9 \ 000009BC 080086E2 ADD R0,R6,#+8 \ 000009C0 1A0000EF SWI +26 3487 #ifdef EVILFOX 3488 SENDMSGCOUNT++; 3489 #else 3490 if(show_send_info) \ 000009C4 84029FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 000009C8 000090E5 LDR R0,[R0, #+0] \ 000009CC 000050E3 CMP R0,#+0 \ 000009D0 DC0295E5 LDR R0,[R5, #+732] \ 000009D4 010080E2 ADD R0,R0,#+1 \ 000009D8 DC0285E5 STR R0,[R5, #+732] \ 000009DC 0A00000A BEQ ??CheckComand_32 3491 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 AC00A0E3 MOV R0,#+172 \ 000009F8 840D80E3 ORR R0,R0,#0x2100 \ 000009FC 052080E0 ADD R2,R0,R5 \ 00000A00 0400A0E1 MOV R0,R4 \ 00000A04 ........ BL AddStringToLog \ 00000A08 08D08DE2 ADD SP,SP,#+8 3492 else 3493 SENDMSGCOUNT++; 3494 #endif 3495 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_32: \ 00000A0C 0620A0E1 MOV R2,R6 \ 00000A10 0010A0E3 MOV R1,#+0 \ 00000A14 0A00A0E1 MOV R0,R10 \ 00000A18 710100EF SWI +369 3496 mfree(send_txt); \ 00000A1C 0900A0E1 MOV R0,R9 \ 00000A20 8BFEFFEA B ??CheckComand_9 3497 return; 3498 } 3499 3500 if((away_m==1 || t->isautomsg) && (t->automsgcount < automsgcount)) \ ??CheckComand_31: \ 00000A24 841395E5 LDR R1,[R5, #+900] \ 00000A28 ........ LDR R2,??DataTable137 ;; automsgcount \ 00000A2C 640094E5 LDR R0,[R4, #+100] \ 00000A30 002092E5 LDR R2,[R2, #+0] \ 00000A34 010051E3 CMP R1,#+1 \ 00000A38 0100000A BEQ ??CheckComand_33 \ 00000A3C 000050E3 CMP R0,#+0 \ 00000A40 3900000A BEQ ??CheckComand_34 \ ??CheckComand_33: \ 00000A44 7C3094E5 LDR R3,[R4, #+124] \ 00000A48 020053E1 CMP R3,R2 \ 00000A4C 3400002A BCS ??CheckComand_35 3501 { 3502 t->automsgcount++; 3503 comanda=1; 3504 TPKT *p; 3505 // sprintf(hah,"online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); 3506 sprintf(away_msg, "Автоответчик: %s %s! %s %s", awayHelloMsg, t->name, awayMsg, away_msg_time); \ 00000A50 FC219FE5 LDR R2,??CheckComand_1+0x8 ;; awayHelloMsg \ 00000A54 010083E2 ADD R0,R3,#+1 \ 00000A58 7C0084E5 STR R0,[R4, #+124] \ 00000A5C 0100A0E3 MOV R0,#+1 \ 00000A60 B80485E5 STR R0,[R5, #+1208] \ 00000A64 5800A0E3 MOV R0,#+88 \ 00000A68 680D80E3 ORR R0,R0,#0x1A00 \ 00000A6C 059080E0 ADD R9,R0,R5 \ 00000A70 420F80E2 ADD R0,R0,#+264 \ 00000A74 050080E0 ADD R0,R0,R5 \ 00000A78 01002DE9 PUSH {R0} \ 00000A7C ........ LDR R0,??DataTable138 ;; awayMsg \ 00000A80 143084E2 ADD R3,R4,#+20 \ 00000A84 01002DE9 PUSH {R0} \ 00000A88 F81F86E2 ADD R1,R6,#+992 \ 00000A8C 0900A0E1 MOV R0,R9 \ 00000A90 160000EF SWI +22 3507 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 00000A94 0900A0E1 MOV R0,R9 \ 00000A98 1B0000EF SWI +27 \ 00000A9C 090080E2 ADD R0,R0,#+9 \ 00000AA0 140000EF SWI +20 \ 00000AA4 0060A0E1 MOV R6,R0 3508 p->pkt.uin=t->uin; \ 00000AA8 0C0094E5 LDR R0,[R4, #+12] \ 00000AAC 000086E5 STR R0,[R6, #+0] 3509 p->pkt.type=T_SENDMSG; \ 00000AB0 0200A0E3 MOV R0,#+2 \ 00000AB4 B400C6E1 STRH R0,[R6, #+4] 3510 p->pkt.data_len=strlen(away_msg); \ 00000AB8 0900A0E1 MOV R0,R9 \ 00000ABC 1B0000EF SWI +27 \ 00000AC0 B600C6E1 STRH R0,[R6, #+6] 3511 strcpy(p->data,away_msg); \ 00000AC4 0910A0E1 MOV R1,R9 \ 00000AC8 080086E2 ADD R0,R6,#+8 \ 00000ACC 1A0000EF SWI +26 3512 if(show_send_info) \ 00000AD0 78019FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 00000AD4 000090E5 LDR R0,[R0, #+0] \ 00000AD8 08D08DE2 ADD SP,SP,#+8 \ 00000ADC 000050E3 CMP R0,#+0 \ 00000AE0 DC0295E5 LDR R0,[R5, #+732] \ 00000AE4 010080E2 ADD R0,R0,#+1 \ 00000AE8 DC0285E5 STR R0,[R5, #+732] \ 00000AEC 0A00000A BEQ ??CheckComand_36 3513 { 3514 #ifdef kluchnik 3515 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF,1); 3516 #else 3517 AddStringToLog(t,0x01,requests6,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000AF0 0110A0E3 MOV R1,#+1 \ 00000AF4 02002DE9 PUSH {R1} \ 00000AF8 000008E0 AND R0,R8,R0 \ 00000AFC 01002DE9 PUSH {R0} \ 00000B00 0730A0E1 MOV R3,R7 \ 00000B04 D800A0E3 MOV R0,#+216 \ 00000B08 840D80E3 ORR R0,R0,#0x2100 \ 00000B0C 052080E0 ADD R2,R0,R5 \ 00000B10 0400A0E1 MOV R0,R4 \ 00000B14 ........ BL AddStringToLog \ 00000B18 08D08DE2 ADD SP,SP,#+8 3518 #endif 3519 } 3520 else 3521 SENDMSGCOUNT++; 3522 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_36: \ 00000B1C 0620A0E1 MOV R2,R6 \ 00000B20 8CFEFFEA B ??CheckComand_17 3523 return; 3524 } 3525 /* else 3526 if((away_m==1 || t->isautomsg) && (t->automsgcount<=(automsgcount+3)) ) 3527 { 3528 t->awaysignal=0; 3529 t->automsgcount++; 3530 sprintf(away_msg,"Бля,ну русским ж языком написали,НЕТУ МЕНЯ!!!че по сто сообщений слать?тем более если тебе делать нех..."); 3531 if(show_send_info) 3532 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF,1); 3533 else 3534 SENDMSGCOUNT++; 3535 SendData(t,away_msg,ENA_SIGNAL,0); 3536 return; 3537 }*/ 3538 else 3539 if(away_m==1 || t->isautomsg) \ ??CheckComand_35: \ 00000B24 010051E3 CMP R1,#+1 \ 00000B28 0100000A BEQ ??CheckComand_37 \ ??CheckComand_34: \ 00000B2C 000050E3 CMP R0,#+0 \ 00000B30 0100000A BEQ ??CheckComand_38 3540 { 3541 t->automsgcount=automsgcount; \ ??CheckComand_37: \ 00000B34 7C2084E5 STR R2,[R4, #+124] 3542 return; \ 00000B38 46FEFFEA B ??CheckComand_13 3543 } 3544 3545 3546 //---------------------------------------------------------------------------// 3547 3548 3549 if(!strcmp(txt, "GET_URL_INFO") || !strcmp(txt, "__URL"))// by kluchnik 26.03.08 \ ??CheckComand_38: \ 00000B3C 5C00A0E3 MOV R0,#+92 \ 00000B40 400E80E3 ORR R0,R0,#0x400 \ 00000B44 061080E0 ADD R1,R0,R6 \ 00000B48 0B00A0E1 MOV R0,R11 \ 00000B4C 190000EF SWI +25 \ 00000B50 000050E3 CMP R0,#+0 \ 00000B54 0600000A BEQ ??CheckComand_39 \ 00000B58 6C00A0E3 MOV R0,#+108 \ 00000B5C 400E80E3 ORR R0,R0,#0x400 \ 00000B60 061080E0 ADD R1,R0,R6 \ 00000B64 0B00A0E1 MOV R0,R11 \ 00000B68 190000EF SWI +25 \ 00000B6C 000050E3 CMP R0,#+0 \ 00000B70 3000001A BNE ??CheckComand_40 3550 { 3551 comanda=0; \ ??CheckComand_39: \ 00000B74 B89485E5 STR R9,[R5, #+1208] 3552 TPKT *p; 3553 3554 char *send_txt=malloc(256); \ 00000B78 400FA0E3 MOV R0,#+256 \ 00000B7C 140000EF SWI +20 \ 00000B80 0090A0E1 MOV R9,R0 3555 sprintf(send_txt,"revision 2058, mod date: %s at %s ", 3556 "http://kluchnik.jino-net.ru/naticqmod/",__DATE__,__TIME__); \ 00000B84 580086E2 ADD R0,R6,#+88 \ 00000B88 01002DE9 PUSH {R0} \ 00000B8C 4C3086E2 ADD R3,R6,#+76 \ 00000B90 422E86E2 ADD R2,R6,#+1056 \ 00000B94 FF1F86E2 ADD R1,R6,#+1020 \ 00000B98 0900A0E1 MOV R0,R9 \ 00000B9C 160000EF SWI +22 3557 3558 p=malloc(sizeof(PKT)+256); \ 00000BA0 420FA0E3 MOV R0,#+264 \ 00000BA4 140000EF SWI +20 \ 00000BA8 00B0A0E1 MOV R11,R0 3559 p->pkt.uin=t->uin; \ 00000BAC 0C0094E5 LDR R0,[R4, #+12] \ 00000BB0 00008BE5 STR R0,[R11, #+0] 3560 p->pkt.type=T_SENDMSG; \ 00000BB4 0200A0E3 MOV R0,#+2 \ 00000BB8 B400CBE1 STRH R0,[R11, #+4] 3561 p->pkt.data_len=strlen(send_txt); \ 00000BBC 0900A0E1 MOV R0,R9 \ 00000BC0 1B0000EF SWI +27 \ 00000BC4 B600CBE1 STRH R0,[R11, #+6] 3562 strcpy(p->data,send_txt); \ 00000BC8 0910A0E1 MOV R1,R9 \ 00000BCC 08008BE2 ADD R0,R11,#+8 \ 00000BD0 1A0000EF SWI +26 3563 if(show_send_info) \ 00000BD4 74009FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 00000BD8 000090E5 LDR R0,[R0, #+0] \ 00000BDC 04D08DE2 ADD SP,SP,#+4 \ 00000BE0 000050E3 CMP R0,#+0 \ 00000BE4 DC0295E5 LDR R0,[R5, #+732] \ 00000BE8 010080E2 ADD R0,R0,#+1 \ 00000BEC DC0285E5 STR R0,[R5, #+732] \ 00000BF0 0A00000A BEQ ??CheckComand_41 3564 AddStringToLog(t,0x01,"Sending url info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000BF4 0110A0E3 MOV R1,#+1 \ 00000BF8 02002DE9 PUSH {R1} \ 00000BFC 000008E0 AND R0,R8,R0 \ 00000C00 01002DE9 PUSH {R0} \ 00000C04 0730A0E1 MOV R3,R7 \ 00000C08 4800A0E3 MOV R0,#+72 \ 00000C0C 400E80E3 ORR R0,R0,#0x400 \ 00000C10 062080E0 ADD R2,R0,R6 \ 00000C14 0400A0E1 MOV R0,R4 \ 00000C18 ........ BL AddStringToLog \ 00000C1C 08D08DE2 ADD SP,SP,#+8 3565 else 3566 SENDMSGCOUNT++; 3567 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_41: \ 00000C20 0B20A0E1 MOV R2,R11 \ 00000C24 0010A0E3 MOV R1,#+0 \ 00000C28 0A00A0E1 MOV R0,R10 \ 00000C2C 710100EF SWI +369 3568 mfree(send_txt); \ 00000C30 0900A0E1 MOV R0,R9 \ 00000C34 06FEFFEA B ??CheckComand_9 3569 return; 3570 } 3571 3572 #ifdef kluchnik // не доступно для всех,потому что имхо,будет еще большая перегрузка серверов!!!а оно нам надо? 3573 if(t->isautobot) 3574 { 3575 TPKT *p; 3576 int i=LoadBotMessage(t->uin); 3577 if(i==0) return;//если нет никаких файлов то просто возвращаемся 3578 char *pp=bot_lines[t->bot_msg]; 3579 t->bot_msg++; 3580 if(t->bot_msg==i) 3581 t->bot_msg=0; 3582 p=malloc(sizeof(PKT)+strlen(pp)+1); 3583 p->pkt.uin=t->uin; 3584 p->pkt.type=T_SENDMSG; 3585 p->pkt.data_len=strlen(pp); 3586 strcpy(p->data,pp); 3587 AddStringToLog(t,0x01,pp,"Autobot",(++SENDMSGCOUNT)&0x7FFF,1); 3588 SUBPROC((void *)SendAnswer,0,p); 3589 return; 3590 } 3591 #endif 3592 3593 CheckComand2(txt,t); \ ??CheckComand_40: \ 00000C38 0410A0E1 MOV R1,R4 \ 00000C3C 0B00A0E1 MOV R0,R11 \ 00000C40 ........ _BLF CheckComand2,??CheckComand2??rA 3594 } \ ??CheckComand_0: \ 00000C44 8ADF8DE2 ADD SP,SP,#+552 ;; stack cleaning \ 00000C48 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CheckComand_1: \ 00000C4C ........ DC32 `?` \ 00000C50 ........ DC32 show_send_info \ 00000C54 ........ DC32 awayHelloMsg 3595 3596 //------------- Попап месаже для подключившегося контакта -----------// 3597 extern DYNPNGICONLIST *GetXSByItem(int curitem); \ In segment DATA_Z, align 4, align-sorted 3598 char INC_Nick[32]; \ INC_Nick: \ 00000000 DS8 32 3599 char show_nick[32]; 3600 int INC_show; 3601 3602 char onContact[64]; 3603 int INC_show2; 3604 GBSTMR incs2; 3605 extern void DrawScreenShot(); 3606 int pp_icon; 3607 int pp_xicon; \ In segment CODE, align 4, keep-with-next 3608 void show_on_contact() 3609 { \ show_on_contact: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 3610 if(INC_show2>0/* && !(IsGuiOnTop(maingui_id))*/) \ 00000004 ........ LDR R4,??DataTable139 ;; i_rc \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C C00494E5 LDR R0,[R4, #+1216] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 F387BDB8 POPLT {R0,R1,R4-R10,PC} 3611 { 3612 WSHDR *ws=AllocWS(64); \ 00000018 4000A0E3 MOV R0,#+64 \ 0000001C 250100EF SWI +293 \ 00000020 0050A0E1 MOV R5,R0 3613 ascii2ws(ws,onContact); \ 00000024 1800A0E3 MOV R0,#+24 \ 00000028 8C0D80E3 ORR R0,R0,#0x2300 \ 0000002C 041080E0 ADD R1,R0,R4 \ 00000030 0500A0E1 MOV R0,R5 \ 00000034 ........ _BLF ascii2ws,??ascii2ws??rA 3614 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] 3615 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 3616 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 3617 { 3618 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 3619 INC_show2-=2; \ 00000074 C00494E5 LDR R0,[R4, #+1216] \ 00000078 020040E2 SUB R0,R0,#+2 \ 0000007C 010000EA B ??show_on_contact_2 3620 } 3621 else 3622 INC_show2--; \ ??show_on_contact_1: \ 00000080 C00494E5 LDR R0,[R4, #+1216] \ 00000084 010040E2 SUB R0,R0,#+1 \ ??show_on_contact_2: \ 00000088 C00484E5 STR R0,[R4, #+1216] 3623 3624 int x=0; \ 0000008C C40494E5 LDR R0,[R4, #+1220] \ 00000090 0060A0E3 MOV R6,#+0 \ 00000094 000184E0 ADD R0,R4,R0, LSL #+2 \ 00000098 080090E5 LDR R0,[R0, #+8] \ 0000009C 000050E3 CMP R0,#+0 3625 if(icons[pp_icon]) 3626 x=icons[pp_icon]->w; \ 000000A0 0060D015 LDRBNE R6,[R0, #+0] 3627 3628 if(pp_xicon!=0 && XStatusImg[pp_xicon]) \ 000000A4 C80494E5 LDR R0,[R4, #+1224] \ 000000A8 000050E3 CMP R0,#+0 \ 000000AC 0400000A BEQ ??show_on_contact_3 \ 000000B0 000184E0 ADD R0,R4,R0, LSL #+2 \ 000000B4 A80390E5 LDR R0,[R0, #+936] \ 000000B8 000050E3 CMP R0,#+0 3629 x+=XStatusImg[pp_xicon]->w; \ 000000BC 0000D015 LDRBNE R0,[R0, #+0] \ 000000C0 06608010 ADDNE R6,R0,R6 3630 3631 DrawRectangle(0,0,Get_WS_width(ws,PopupFont)+x+5,GetFontYSIZE(PopupFont)+5,0,PopupOnlineCl,PopupBGCl); \ ??show_on_contact_3: \ 000000C4 ........ LDR R0,??DataTable145 ;; 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,??DataTable147 ;; 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 C40494E5 LDR R0,[R4, #+1220] \ 00000118 000184E0 ADD R0,R4,R0, LSL #+2 \ 0000011C 080090E5 LDR R0,[R0, #+8] \ 00000120 0CD08DE2 ADD SP,SP,#+12 \ 00000124 000050E3 CMP R0,#+0 \ 00000128 0C00000A BEQ ??show_on_contact_4 3632 3633 if(icons[pp_icon]) 3634 { 3635 DrwImage(icons[pp_icon],2,3); \ 0000012C 0320A0E3 MOV R2,#+3 \ 00000130 0210A0E3 MOV R1,#+2 \ 00000134 ........ BL DrwImage 3636 DrwImage(XStatusImg[pp_xicon],4+icons[pp_icon]->w,3); \ 00000138 C40494E5 LDR R0,[R4, #+1220] \ 0000013C 0320A0E3 MOV R2,#+3 \ 00000140 000184E0 ADD R0,R4,R0, LSL #+2 \ 00000144 080090E5 LDR R0,[R0, #+8] \ 00000148 0000D0E5 LDRB R0,[R0, #+0] \ 0000014C 041080E2 ADD R1,R0,#+4 \ 00000150 C80494E5 LDR R0,[R4, #+1224] \ 00000154 000184E0 ADD R0,R4,R0, LSL #+2 \ 00000158 A80390E5 LDR R0,[R0, #+936] \ 0000015C ........ BL DrwImage 3637 } 3638 3639 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 3640 FreeWS(ws); \ 000001B8 0500A0E1 MOV R0,R5 \ 000001BC 290100EF SWI +297 3641 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 5800A0E3 MOV R0,#+88 \ 000001CC 8C0D80E3 ORR R0,R0,#0x2300 \ 000001D0 040080E0 ADD R0,R0,R4 \ 000001D4 4D0000EF SWI +77 \ 000001D8 14D08DE2 ADD SP,SP,#+20 3642 } 3643 } \ 000001DC F387BDE8 POP {R0,R1,R4-R10,PC} ;; return \ ??show_on_contact_0: \ 000001E0 ........ DC32 `?` \ 000001E4 ........ DC32 PopupOnlineCl \ 000001E8 ........ DC32 show_on_contact 3644 3645 char OffContact[64]; 3646 int INC_show3; 3647 GBSTMR incs3; 3648 3649 \ In segment CODE, align 4, keep-with-next 3650 void show_off_contact() 3651 { 3652 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} 3653 if(INC_show3>0) \ 00000018 ........ LDR R4,??DataTable149 ;; i_rc \ 0000001C CC0494E5 LDR R0,[R4, #+1228] \ 00000020 010050E3 CMP R0,#+1 \ 00000024 F38FBDB8 POPLT {R0,R1,R4-R11,PC} 3654 { 3655 WSHDR *ws=AllocWS(64); \ 00000028 4000A0E3 MOV R0,#+64 \ 0000002C 250100EF SWI +293 \ 00000030 0050A0E1 MOV R5,R0 3656 ascii2ws(ws,OffContact); \ 00000034 6800A0E3 MOV R0,#+104 \ 00000038 8C0D80E3 ORR R0,R0,#0x2300 \ 0000003C 041080E0 ADD R1,R0,R4 \ 00000040 0500A0E1 MOV R0,R5 \ 00000044 ........ _BLF ascii2ws,??ascii2ws??rA 3657 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] 3658 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 3659 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 3660 { 3661 DrawScreenShot(); \ 00000080 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 3662 INC_show3-=2; \ 00000084 CC0494E5 LDR R0,[R4, #+1228] \ 00000088 020040E2 SUB R0,R0,#+2 \ 0000008C 010000EA B ??show_off_contact_2 3663 } 3664 else 3665 INC_show3--; \ ??show_off_contact_1: \ 00000090 CC0494E5 LDR R0,[R4, #+1228] \ 00000094 010040E2 SUB R0,R0,#+1 3666 3667 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 CC0484E5 STR R0,[R4, #+1228] \ 000000A0 ........ LDR R0,??DataTable145 ;; 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 088094E5 LDR R8,[R4, #+8] \ 000000FC 0080D8E5 LDRB R8,[R8, #+0] \ 00000100 080040E0 SUB R0,R0,R8 \ 00000104 B40100EF SWI +436 3668 3669 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 080094E5 LDR R0,[R4, #+8] \ 00000124 0320A0E3 MOV R2,#+3 \ 00000128 0030D0E5 LDRB R3,[R0, #+0] \ 0000012C 011048E0 SUB R1,R8,R1 \ 00000130 021041E2 SUB R1,R1,#+2 \ 00000134 031041E0 SUB R1,R1,R3 \ 00000138 ........ BL DrwImage 3670 3671 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 3672 FreeWS(ws); \ 000001A4 0500A0E1 MOV R0,R5 \ 000001A8 290100EF SWI +297 3673 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 A800A0E3 MOV R0,#+168 \ 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 3674 } 3675 } 3676 3677 //---------------------------- popup message ---------------------------// 3678 3679 \ In segment CODE, align 4, keep-with-next 3680 void show_pp_sender() 3681 { \ show_pp_sender: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3682 if(INC_show>0/* && !(IsGuiOnTop(maingui_id))*/) \ 00000004 ........ LDR R4,??DataTable149 ;; i_rc \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C BC0494E5 LDR R0,[R4, #+1212] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 F38FBDB8 POPLT {R0,R1,R4-R11,PC} 3683 { 3684 WSHDR *ws=AllocWS(256); \ 00000018 400FA0E3 MOV R0,#+256 \ 0000001C 250100EF SWI +293 \ 00000020 0050A0E1 MOV R5,R0 3685 ascii2ws(ws,show_nick); \ 00000024 F800A0E3 MOV R0,#+248 \ 00000028 880D80E3 ORR R0,R0,#0x2200 \ 0000002C 041080E0 ADD R1,R0,R4 \ 00000030 0500A0E1 MOV R0,R5 \ 00000034 ........ _BLF ascii2ws,??ascii2ws??rA 3686 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] 3687 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 3688 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 3689 { 3690 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 3691 INC_show-=2; \ 00000074 BC0494E5 LDR R0,[R4, #+1212] \ 00000078 020040E2 SUB R0,R0,#+2 \ 0000007C 010000EA B ??show_pp_sender_2 3692 } 3693 else 3694 INC_show--; \ ??show_pp_sender_1: \ 00000080 BC0494E5 LDR R0,[R4, #+1212] \ 00000084 010040E2 SUB R0,R0,#+1 \ ??show_pp_sender_2: \ 00000088 BC0484E5 STR R0,[R4, #+1212] 3695 #ifdef NEWSGOLD 3696 DrawRectangle(0,0,Get_WS_width(ws,PopupFont)+6+GetImgWidth(NumStatusToIconBar + IS_MSG),GetFontYSIZE(PopupFont)+4,0,PopupMsgCl,PopupBGCl); \ 0000008C ........ LDR R0,??DataTable145 ;; 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,??DataTable146 ;; 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,??DataTable147 ;; 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 3697 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 3698 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 3699 #else 3700 DrawRectangle(0,0,Get_WS_width(ws,PopupFont)+2,GetFontYSIZE(PopupFont)+2,0,PopupBGCl,PopupBGCl); 3701 DrawString(ws,1,1,1+Get_WS_width(ws,PopupFont)+2,1+GetFontYSIZE(PopupFont),PopupFont,0,PopupMsgCl,GetPaletteAdrByColorIndex(23)); 3702 #endif 3703 FreeWS(ws); \ 00000174 0500A0E1 MOV R0,R5 \ 00000178 290100EF SWI +297 3704 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 7000A0E3 MOV R0,#+112 \ 00000188 840D80E3 ORR R0,R0,#0x2100 \ 0000018C 040080E0 ADD R0,R0,R4 \ 00000190 4D0000EF SWI +77 \ 00000194 20D08DE2 ADD SP,SP,#+32 3705 } 3706 } \ 00000198 F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??show_pp_sender_0: \ 0000019C ........ DC32 `?_2` \ 000001A0 ........ DC32 PopupMsgCl \ 000001A4 ........ DC32 show_pp_sender 3707 3708 3709 //----------------------------------------------------------------------------------------// 3710 3711 \ In segment CODE, align 4, keep-with-next 3712 void Get_Online_total() 3713 { 3714 CLIST *t; 3715 kopa_online=0; \ Get_Online_total: \ 00000000 ........ LDR R0,??DataTable149 ;; i_rc \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 901480E5 STR R1,[R0, #+1168] 3716 kopa_kontaktu=0; \ 0000000C 941480E5 STR R1,[R0, #+1172] 3717 t=(CLIST *)(&cltop); \ 00000010 7C10A0E3 MOV R1,#+124 \ 00000014 401E81E3 ORR R1,R1,#0x400 \ 00000018 001081E0 ADD R1,R1,R0 \ 0000001C FF30A0E3 MOV R3,#+255 \ 00000020 FF3C83E3 ORR R3,R3,#0xFF00 \ 00000024 0A0000EA B ??Get_Online_total_0 3718 while(t=(CLIST *)(t->next)) 3719 { 3720 if (!t->isgroup) \ ??Get_Online_total_1: \ 00000028 082091E5 LDR R2,[R1, #+8] \ 0000002C 000052E3 CMP R2,#+0 \ 00000030 0700001A BNE ??Get_Online_total_0 3721 { 3722 kopa_online++; \ 00000034 902490E5 LDR R2,[R0, #+1168] \ 00000038 012082E2 ADD R2,R2,#+1 \ 0000003C 902480E5 STR R2,[R0, #+1168] 3723 if (t->state!=65535) kopa_kontaktu++; \ 00000040 B425D1E1 LDRH R2,[R1, #+84] \ 00000044 030052E1 CMP R2,R3 \ 00000048 94249015 LDRNE R2,[R0, #+1172] \ 0000004C 01208212 ADDNE R2,R2,#+1 \ 00000050 94248015 STRNE R2,[R0, #+1172] 3724 } 3725 } \ ??Get_Online_total_0: \ 00000054 001091E5 LDR R1,[R1, #+0] \ 00000058 000051E3 CMP R1,#+0 \ 0000005C F1FFFF1A BNE ??Get_Online_total_1 3726 } \ 00000060 1EFF2FE1 BX LR ;; return 3727 3728 3729 //-------------------------------------------------------------------------------------------// 3730 3731 \ In segment CODE, align 4, keep-with-next 3732 void SetIndividStatus()//set to all contact to default vibra, sound and other by kluchnik 04.04.08 3733 { 3734 CLIST *t; 3735 t=(CLIST *)(&cltop); \ SetIndividStatus: \ 00000000 ........ LDR R0,??DataTable149 ;; i_rc \ 00000004 7C10A0E3 MOV R1,#+124 \ 00000008 401E81E3 ORR R1,R1,#0x400 \ 0000000C 001081E0 ADD R1,R1,R0 \ 00000010 0B0000EA B ??SetIndividStatus_0 3736 while(t=(CLIST *)(t->next)) 3737 { 3738 if (!t->isgroup) \ ??SetIndividStatus_1: \ 00000014 082091E5 LDR R2,[R1, #+8] \ 00000018 000052E3 CMP R2,#+0 \ 0000001C 0800001A BNE ??SetIndividStatus_0 3739 { 3740 t->isvibra=1; \ 00000020 0120A0E3 MOV R2,#+1 \ 00000024 5C2081E5 STR R2,[R1, #+92] 3741 t->issound=1; \ 00000028 602081E5 STR R2,[R1, #+96] 3742 t->isShowXst=Show_XTX; \ 0000002C 903390E5 LDR R3,[R0, #+912] \ 00000030 703081E5 STR R3,[R1, #+112] 3743 #ifdef kluchnik 3744 t->isLoadHistory=1; 3745 #endif 3746 t->signals=1; \ 00000034 742081E5 STR R2,[R1, #+116] 3747 t->isaccess=1; \ 00000038 782081E5 STR R2,[R1, #+120] 3748 3749 t->automsgcount=0; \ 0000003C 0020A0E3 MOV R2,#+0 \ 00000040 7C2081E5 STR R2,[R1, #+124] 3750 } 3751 } \ ??SetIndividStatus_0: \ 00000044 001091E5 LDR R1,[R1, #+0] \ 00000048 000051E3 CMP R1,#+0 \ 0000004C F0FFFF1A BNE ??SetIndividStatus_1 3752 } \ 00000050 1EFF2FE1 BX LR ;; return 3753 3754 //-------------------------------------------------------------------------------------------// 3755 //int ShowLoadScreen=1; 3756 int curpos; 3757 \ In segment CODE, align 4, keep-with-next 3758 ProcessPacket(TPKT *p) 3759 { \ ProcessPacket: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 50DF4DE2 SUB SP,SP,#+320 3760 CLIST *t; 3761 LOGQ *q; 3762 char s[256]; 3763 switch(p->pkt.type) \ 00000008 ........ LDR R5,??DataTable166 ;; Canvas \ 0000000C ........ LDR R7,??DataTable168 ;; 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 57010E00DB02 DC16 +343,+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 3764 { 3765 case T_LOGIN: 3766 set_my_status(); \ ??ProcessPacket_2: \ 00000080 ........ BL set_my_status 3767 set_my_xstatus(); \ 00000084 ........ BL set_my_xstatus \ 00000088 C90200EA B ??ProcessPacket_1 3768 break; 3769 case T_CLENTRY: 3770 if (p->pkt.uin) \ ??ProcessPacket_3: \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 1800000A BEQ ??ProcessPacket_4 3771 { 3772 if ((t=FindContactByUin(p->pkt.uin))) \ 00000094 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000098 0090B0E1 MOVS R9,R0 \ 0000009C 0E00000A BEQ ??ProcessPacket_5 3773 { 3774 // t->state=0xFFFF; 3775 if (!t->local) strncpy(t->name,p->data,63); \ 000000A0 B40099E5 LDR R0,[R9, #+180] \ 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 3776 t->group=GROUP_CACHE; \ ??ProcessPacket_6: \ 000000BC 800497E5 LDR R0,[R7, #+1152] \ 000000C0 100089E5 STR R0,[R9, #+16] 3777 ChangeContactPos(t); \ ??ProcessPacket_7: \ 000000C4 0900A0E1 MOV R0,R9 \ 000000C8 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3778 RecountMenu(t,1); \ 000000CC 0110A0E3 MOV R1,#+1 \ 000000D0 0900A0E1 MOV R0,R9 \ ??ProcessPacket_8: \ 000000D4 ........ BL RecountMenu \ 000000D8 B50200EA B ??ProcessPacket_1 3779 } 3780 else 3781 { 3782 RecountMenu(AddContact(p->pkt.uin,p->data, GROUP_CACHE, 0),1); \ ??ProcessPacket_5: \ 000000DC 802497E5 LDR R2,[R7, #+1152] \ 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 3783 } 3784 } 3785 else 3786 { 3787 if(VIBR_ON_CONNECT) \ ??ProcessPacket_4: \ 000000F8 ........ LDR R0,??DataTable152 ;; VIBR_ON_CONNECT \ 000000FC 000090E5 LDR R0,[R0, #+0] \ 00000100 000050E3 CMP R0,#+0 \ 00000104 0100000A BEQ ??ProcessPacket_9 3788 { 3789 vibra_count=1; \ 00000108 4C6487E5 STR R6,[R7, #+1100] 3790 start_vibra(); \ 0000010C ........ BL start_vibra 3791 } 3792 GROUP_CACHE=0; \ ??ProcessPacket_9: \ 00000110 808487E5 STR R8,[R7, #+1152] 3793 ask_my_info(); 3794 if (ShowLoadScreen==0 && maingui_id/*contactlist_menu_id*/) \ 00000114 A80497E5 LDR R0,[R7, #+1192] \ 00000118 000050E3 CMP R0,#+0 \ 0000011C 0500001A BNE ??ProcessPacket_10 \ 00000120 D40297E5 LDR R0,[R7, #+724] \ 00000124 000050E3 CMP R0,#+0 \ 00000128 0200000A BEQ ??ProcessPacket_10 3795 { 3796 RecountMenu(NULL,1); \ 0000012C 0110A0E3 MOV R1,#+1 \ 00000130 0800A0E1 MOV R0,R8 \ ??ProcessPacket_11: \ 00000134 E6FFFFEA B ??ProcessPacket_8 3797 } 3798 else 3799 { 3800 SetIndividStatus(); \ ??ProcessPacket_10: \ 00000138 ........ BL SetIndividStatus 3801 if(ShowLoadScreen) ShowLoadScreen=0; \ 0000013C A80497E5 LDR R0,[R7, #+1192] \ 00000140 000050E3 CMP R0,#+0 \ 00000144 A8848715 STRNE R8,[R7, #+1192] 3802 SMART_REDRAW(); \ 00000148 ........ BL SMART_REDRAW \ 0000014C 980200EA B ??ProcessPacket_1 3803 } 3804 } 3805 break; 3806 case T_GROUPID: 3807 if (t=FindGroupByID(GROUP_CACHE=p->pkt.uin)) \ ??ProcessPacket_12: \ 00000150 800487E5 STR R0,[R7, #+1152] \ 00000154 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000158 0090B0E1 MOVS R9,R0 \ 0000015C 0400000A BEQ ??ProcessPacket_13 3808 { 3809 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 3810 ChangeContactPos(t); \ 00000170 D3FFFFEA B ??ProcessPacket_7 3811 RecountMenu(t,1); 3812 } 3813 else 3814 { 3815 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 3816 } 3817 break; 3818 case T_GROUPFOLLOW: 3819 GROUP_CACHE=p->pkt.uin; \ ??ProcessPacket_14: \ 00000188 800487E5 STR R0,[R7, #+1152] \ 0000018C 880200EA B ??ProcessPacket_1 3820 break; 3821 case T_STATUSCHANGE: 3822 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_15: \ 00000190 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000194 0090B0E1 MOVS R9,R0 3823 if (t) \ 00000198 8502000A BEQ ??ProcessPacket_1 3824 { 3825 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 3826 // CLIST *oldt=NULL; 3827 if (t->xstate!=p->data[2]) // Если картинка икс статуса сменилась 3828 { 3829 t->xstate=p->data[2]; \ 000001B4 B605C9E1 STRH R0,[R9, #+86] 3830 FreeXText(t); \ 000001B8 0900A0E1 MOV R0,R9 \ 000001BC ........ _BLF FreeXText,??FreeXText??rA 3831 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 3832 { 3833 t->req_xtext=1; \ 000001DC B06089E5 STR R6,[R9, #+176] 3834 if (edchat_id) // Если открыт чат \ 000001E0 840497E5 LDR R0,[R7, #+1156] \ 000001E4 000050E3 CMP R0,#+0 \ 000001E8 0F00000A BEQ ??ProcessPacket_16 3835 { 3836 void *data=FindGUIbyId(edchat_id,NULL); \ 000001EC 840497E5 LDR R0,[R7, #+1156] \ 000001F0 0010A0E3 MOV R1,#+0 \ 000001F4 090200EF SWI +521 3837 if (data) \ 000001F8 000050E3 CMP R0,#+0 \ 000001FC 0A00000A BEQ ??ProcessPacket_16 3838 { 3839 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 00000200 DF0100EF SWI +479 3840 if (ed_struct) \ 00000204 000050E3 CMP R0,#+0 \ 00000208 0700000A BEQ ??ProcessPacket_16 3841 { 3842 if (ed_struct->ed_contact==t) // Если наш чат то запрашиваем текст статуса \ 0000020C 000090E5 LDR R0,[R0, #+0] \ 00000210 090050E1 CMP R0,R9 \ 00000214 0400001A BNE ??ProcessPacket_16 3843 { 3844 t->req_xtext=0; \ 00000218 B08089E5 STR R8,[R9, #+176] 3845 RequestXText(t->uin); \ 0000021C 0C0099E5 LDR R0,[R9, #+12] \ 00000220 ........ BL RequestXText \ 00000224 000000EA B ??ProcessPacket_16 3846 } 3847 } 3848 } 3849 } 3850 } 3851 else // Если икс статус не установлен то на всякий случай снимаем флаг получения текста 3852 { 3853 t->req_xtext=0; \ ??ProcessPacket_17: \ 00000228 B08089E5 STR R8,[R9, #+176] 3854 } 3855 }/* 3856 if (contactlist_menu_id) 3857 { 3858 // oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); 3859 oldt=FindContactByN(curpos); 3860 }*/ 3861 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 80608905 STREQ R6,[R9, #+128] 3862 t->state=*((unsigned short *)(p->data)); \ 00000240 B800D4E1 LDRH R0,[R4, #+8] \ 00000244 B405C9E1 STRH R0,[R9, #+84] 3863 if((t->state!=65535)&&(t->change==1)) \ 00000248 0A0050E1 CMP R0,R10 \ 0000024C 0400000A BEQ ??ProcessPacket_19 \ 00000250 800099E5 LDR R0,[R9, #+128] \ 00000254 010050E3 CMP R0,#+1 3864 { 3865 t->just_now=2; \ 00000258 68B08905 STREQ R11,[R9, #+104] 3866 t->change=0; \ 0000025C 80808905 STREQ R8,[R9, #+128] 3867 RefreshJustNow(); \ 00000260 B8628705 STREQ R6,[R7, #+696] 3868 } 3869 3870 LogStatusChange(t); \ ??ProcessPacket_19: \ 00000264 0900A0E1 MOV R0,R9 \ 00000268 ........ _BLF LogStatusChange,??LogStatusChange??rA 3871 LogStatusChange2(t);//пишем лог templates\\logs.txt \ 0000026C 0900A0E1 MOV R0,R9 \ 00000270 ........ _BLF LogStatusChange2,??LogStatusChange2??rA 3872 3873 ChangeContactPos(t); \ 00000274 0900A0E1 MOV R0,R9 \ 00000278 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3874 // RecountMenu(oldt,1); 3875 3876 if(isLogStatusChange)//isLogStatusChange // by kluchnik 05.04.08 \ 0000027C ........ LDR R0,??DataTable153 ;; isLogStatusChange \ 00000280 000090E5 LDR R0,[R0, #+0] \ 00000284 000050E3 CMP R0,#+0 \ 00000288 2B00000A BEQ ??ProcessPacket_20 3877 { 3878 char *s=GetStatusByIconIndex(GetIconIndex(t)); \ 0000028C 0900A0E1 MOV R0,R9 \ 00000290 ........ BL GetIconIndex \ 00000294 ........ BL GetStatusByIconIndex \ 00000298 00008DE5 STR R0,[SP, #+0] 3879 FreeXText2(t); \ 0000029C 0900A0E1 MOV R0,R9 \ 000002A0 ........ BL FreeXText2 3880 TTime time; 3881 GetDateTime(NULL,&time); \ 000002A4 0C108DE2 ADD R1,SP,#+12 \ 000002A8 0000A0E3 MOV R0,#+0 \ 000002AC B40000EF SWI +180 3882 char *txt=malloc(64); \ 000002B0 4000A0E3 MOV R0,#+64 \ 000002B4 140000EF SWI +20 \ 000002B8 00B0A0E1 MOV R11,R0 3883 sprintf(txt," %s: %02d:%02d:%02d",s,time.hour,time.min,time.sec); \ 000002BC 0E00DDE5 LDRB R0,[SP, #+14] \ 000002C0 7F1F85E2 ADD R1,R5,#+508 \ 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 3884 t->xtext2=malloc(64); \ 000002E0 4000A0E3 MOV R0,#+64 \ 000002E4 140000EF SWI +20 \ 000002E8 AC0089E5 STR R0,[R9, #+172] 3885 snprintf(t->xtext2,64,txt); \ 000002EC 0B20A0E1 MOV R2,R11 \ 000002F0 4010A0E3 MOV R1,#+64 \ 000002F4 1B0100EF SWI +283 3886 AddStringToLog(t,0x03,txt,"Status change",0xFFFFFFFF, 0); \ 000002F8 0800A0E1 MOV R0,R8 \ 000002FC 01002DE9 PUSH {R0} \ 00000300 843F85E2 ADD R3,R5,#+528 \ 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 3887 ReqAddMsgToChat(t); \ 0000031C 0900A0E1 MOV R0,R9 \ 00000320 ........ BL ReqAddMsgToChat 3888 RecountMenu(NULL, 0); \ 00000324 0810A0E1 MOV R1,R8 \ 00000328 0100A0E1 MOV R0,R1 \ 0000032C ........ BL RecountMenu 3889 mfree(txt); \ 00000330 0B00A0E1 MOV R0,R11 \ 00000334 150000EF SWI +21 \ 00000338 10D08DE2 ADD SP,SP,#+16 3890 } 3891 3892 if ((t->state!=0xFFFF)&&(i==0xFFFF))//Звук \ ??ProcessPacket_20: \ 0000033C B405D9E1 LDRH R0,[R9, #+84] \ 00000340 84B89FE5 LDR R11,??ProcessPacket_18+0x8 ;; PopupOnlineString \ 00000344 E020A0E3 MOV R2,#+224 \ 00000348 782D82E3 ORR R2,R2,#0x1E00 \ 0000034C 072082E0 ADD R2,R2,R7 \ 00000350 08208DE5 STR R2,[SP, #+8] \ 00000354 0A0050E1 CMP R0,R10 \ 00000358 6700000A BEQ ??ProcessPacket_21 \ 0000035C 04109DE5 LDR R1,[SP, #+4] \ 00000360 0A0051E1 CMP R1,R10 \ 00000364 6400001A BNE ??ProcessPacket_21 3893 { 3894 if(Is_INC_On && (PopupShow==2 || PopupShow==3)) \ 00000368 C00297E5 LDR R0,[R7, #+704] \ 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 3895 { 3896 INC_show2=20; \ 00000388 1400A0E3 MOV R0,#+20 \ 0000038C C00487E5 STR R0,[R7, #+1216] 3897 INC_show3=0; \ 00000390 CC8487E5 STR R8,[R7, #+1228] 3898 3899 pp_icon=GetIconIndex(t); \ 00000394 0900A0E1 MOV R0,R9 \ 00000398 ........ BL GetIconIndex \ 0000039C C40487E5 STR R0,[R7, #+1220] 3900 pp_xicon=t->xstate; \ 000003A0 B605D9E1 LDRH R0,[R9, #+86] 3901 3902 sprintf(onContact,PopupOnlineString,t->name); \ 000003A4 142089E2 ADD R2,R9,#+20 \ 000003A8 0B10A0E1 MOV R1,R11 \ 000003AC C80487E5 STR R0,[R7, #+1224] \ 000003B0 1800A0E3 MOV R0,#+24 \ 000003B4 8C0D80E3 ORR R0,R0,#0x2300 \ 000003B8 070080E0 ADD R0,R0,R7 \ 000003BC 160000EF SWI +22 3903 sprintf(on_off_buf,"[%s: %s]\n",t->xtext2+1,t->name); \ 000003C0 AC0099E5 LDR R0,[R9, #+172] \ 000003C4 143089E2 ADD R3,R9,#+20 \ 000003C8 012080E2 ADD R2,R0,#+1 \ 000003CC 08009DE5 LDR R0,[SP, #+8] \ 000003D0 881F85E2 ADD R1,R5,#+544 \ 000003D4 160000EF SWI +22 3904 on_off_timer=ON_OFF_TIME; \ 000003D8 F4079FE5 LDR R0,??ProcessPacket_18+0x10 ;; ON_OFF_TIME \ 000003DC 000090E5 LDR R0,[R0, #+0] \ 000003E0 8C0487E5 STR R0,[R7, #+1164] 3905 // UpdateCLheader(); 3906 show_on_contact(); \ 000003E4 ........ BL show_on_contact 3907 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 3908 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 3909 // IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); 3910 } 3911 else 3912 GBS_DelTimer(&incs2);//на всяк \ ??ProcessPacket_22: \ 0000041C 5800A0E3 MOV R0,#+88 \ 00000420 8C0D80E3 ORR R0,R0,#0x2300 \ 00000424 070080E0 ADD R0,R0,R7 \ 00000428 8C0100EF SWI +396 3913 if(!extended_sounds) \ ??ProcessPacket_23: \ 0000042C ........ LDR R0,??DataTable154 ;; 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 3914 { 3915 Play(sndGlobal); \ 00000440 0A00A0E1 MOV R0,R10 \ 00000444 ........ BL Play \ 00000448 450000EA B ??ProcessPacket_25 3916 } 3917 else 3918 { 3919 FSTATS stat; 3920 int fsize; 3921 unsigned int ul = 0; \ ??ProcessPacket_24: \ 0000044C 14808DE5 STR R8,[SP, #+20] 3922 uins=t->uin; \ 00000450 0C0099E5 LDR R0,[R9, #+12] \ 00000454 940287E5 STR R0,[R7, #+660] 3923 char ext[4]; 3924 // __root const CFG_CBOX_ITEM cfgcbox18_3_2[2]={"Mp3","Wav","Amr"}; 3925 switch(ext_type_sounds) \ 00000458 ........ LDR R0,??DataTable155 ;; 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 7C00A003 MOVEQ R0,#+124 3926 { 3927 case 0: sprintf(ext,percent_s,mp3); break; \ 00000470 7400A013 MOVNE R0,#+116 \ 00000474 000000EA B ??ProcessPacket_27 3928 case 1: sprintf(ext,percent_s,wav); break; \ ??ProcessPacket_26: \ 00000478 7800A0E3 MOV R0,#+120 \ ??ProcessPacket_27: \ 0000047C 800D80E3 ORR R0,R0,#0x2000 \ 00000480 072080E0 ADD R2,R0,R7 \ 00000484 0B1085E2 ADD R1,R5,#+11 \ 00000488 0D00A0E1 MOV R0,SP \ 0000048C 160000EF SWI +22 3929 case 2: sprintf(ext,percent_s,amr); break; 3930 default : sprintf(ext,percent_s,mp3); break; 3931 } 3932 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 943297E5 LDR R3,[R7, #+660] \ 000004A0 8850A0E3 MOV R5,#+136 \ 000004A4 705E85E3 ORR R5,R5,#0x700 \ 000004A8 6C00A0E3 MOV R0,#+108 \ 000004AC 800D80E3 ORR R0,R0,#0x2000 \ 000004B0 071080E0 ADD R1,R0,R7 \ 000004B4 070085E0 ADD R0,R5,R7 \ 000004B8 160000EF SWI +22 3933 GetFileStats(talk_sound,&stat,&ul); \ 000004BC 18208DE2 ADD R2,SP,#+24 \ 000004C0 471F8DE2 ADD R1,SP,#+284 \ 000004C4 070085E0 ADD R0,R5,R7 \ 000004C8 840000EF SWI +132 3934 fsize=stat.size; 3935 if(fsize>0) \ 000004CC 20019DE5 LDR R0,[SP, #+288] \ 000004D0 04D08DE2 ADD SP,SP,#+4 \ 000004D4 010050E3 CMP R0,#+1 3936 Play(talk_sound); \ 000004D8 070085A0 ADDGE R0,R5,R7 3937 else 3938 Play(sndGlobal); \ 000004DC 0A00A0B1 MOVLT R0,R10 \ 000004E0 ........ BL Play 3939 t->isvibra=1; \ 000004E4 5C6089E5 STR R6,[R9, #+92] 3940 t->issound=1; \ 000004E8 606089E5 STR R6,[R9, #+96] 3941 t->isShowXst=Show_XTX; \ 000004EC 900397E5 LDR R0,[R7, #+912] \ 000004F0 700089E5 STR R0,[R9, #+112] 3942 #ifdef kluchnik 3943 t->isLoadHistory=1; 3944 #endif 3945 t->signals=1; \ 000004F4 746089E5 STR R6,[R9, #+116] \ 000004F8 190000EA B ??ProcessPacket_25 3946 } 3947 } 3948 3949 if ((i!=0xFFFF)&&(t->state==0xFFFF))//Звук \ ??ProcessPacket_21: \ 000004FC 04109DE5 LDR R1,[SP, #+4] \ 00000500 0A0051E1 CMP R1,R10 \ 00000504 1600000A BEQ ??ProcessPacket_25 \ 00000508 0A0050E1 CMP R0,R10 \ 0000050C 1400001A BNE ??ProcessPacket_25 3950 { 3951 Play(sndSrvMsg); \ 00000510 D8069FE5 LDR R0,??ProcessPacket_18+0x2C ;; sndSrvMsg \ 00000514 ........ BL Play 3952 3953 INC_show3=20; \ 00000518 1400A0E3 MOV R0,#+20 \ 0000051C CC0487E5 STR R0,[R7, #+1228] 3954 sprintf(OffContact,PopupOnlineString,t->name); \ 00000520 142089E2 ADD R2,R9,#+20 \ 00000524 0B10A0E1 MOV R1,R11 \ 00000528 6800A0E3 MOV R0,#+104 \ 0000052C 8C0D80E3 ORR R0,R0,#0x2300 \ 00000530 070080E0 ADD R0,R0,R7 \ 00000534 160000EF SWI +22 3955 show_off_contact(); \ 00000538 ........ BL show_off_contact 3956 3957 //if(TIME_OR_MSG==2 || TIME_OR_MSG==3 | TIME_OR_MSG==4) 3958 Get_Online_total(); \ 0000053C ........ BL Get_Online_total 3959 3960 sprintf(on_off_buf,"[%s: %s]\n",t->xtext2+1,t->name); \ 00000540 AC0099E5 LDR R0,[R9, #+172] \ 00000544 143089E2 ADD R3,R9,#+20 \ 00000548 012080E2 ADD R2,R0,#+1 \ 0000054C 08009DE5 LDR R0,[SP, #+8] \ 00000550 881F85E2 ADD R1,R5,#+544 \ 00000554 160000EF SWI +22 3961 on_off_timer=ON_OFF_TIME; \ 00000558 74069FE5 LDR R0,??ProcessPacket_18+0x10 ;; ON_OFF_TIME \ 0000055C 000090E5 LDR R0,[R0, #+0] \ 00000560 8C0487E5 STR R0,[R7, #+1164] 3962 // UpdateCLheader(); 3963 } 3964 3965 if (edchat_id) \ ??ProcessPacket_25: \ 00000564 840497E5 LDR R0,[R7, #+1156] \ 00000568 000050E3 CMP R0,#+0 \ 0000056C 0A00000A BEQ ??ProcessPacket_28 3966 { 3967 void *data=FindGUIbyId(edchat_id,NULL); \ 00000570 840497E5 LDR R0,[R7, #+1156] \ 00000574 0010A0E3 MOV R1,#+0 \ 00000578 090200EF SWI +521 3968 { 3969 EDCHAT_STRUCT *ed_struct; 3970 ed_struct=EDIT_GetUserPointer(data); \ 0000057C DF0100EF SWI +479 3971 if (ed_struct) \ 00000580 000050E3 CMP R0,#+0 \ 00000584 0400000A BEQ ??ProcessPacket_28 3972 { 3973 if (ed_struct->ed_contact==t) \ 00000588 000090E5 LDR R0,[R0, #+0] \ 0000058C 090050E1 CMP R0,R9 \ 00000590 0100001A BNE ??ProcessPacket_28 3974 { 3975 DirectRedrawGUI_ID(edchat_id); \ 00000594 840497E5 LDR R0,[R7, #+1156] \ 00000598 400100EF SWI +320 3976 } 3977 } 3978 } 3979 } 3980 RefreshCL(); \ ??ProcessPacket_28: \ 0000059C B46287E5 STR R6,[R7, #+692] \ 000005A0 830100EA B ??ProcessPacket_1 3981 } 3982 break; 3983 case T_RECVMSG: 3984 NEW_MSG=1; \ ??ProcessPacket_29: \ 000005A4 B06487E5 STR R6,[R7, #+1200] 3985 t=FindContactByUin(p->pkt.uin); \ 000005A8 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000005AC 0090B0E1 MOVS R9,R0 3986 if (!t)//если не в списке \ 000005B0 0A00001A BNE ??ProcessPacket_30 3987 { 3988 sprintf(s,percent_d,p->pkt.uin); \ 000005B4 002094E5 LDR R2,[R4, #+0] \ 000005B8 0E1085E2 ADD R1,R5,#+14 \ 000005BC 18008DE2 ADD R0,SP,#+24 \ 000005C0 160000EF SWI +22 3989 t=AddContact(p->pkt.uin,s,GROUP_CACHE,0); \ 000005C4 802497E5 LDR R2,[R7, #+1152] \ 000005C8 000094E5 LDR R0,[R4, #+0] \ 000005CC 0030A0E3 MOV R3,#+0 \ 000005D0 18108DE2 ADD R1,SP,#+24 \ 000005D4 ........ _BLF AddContact,??AddContact??rA \ 000005D8 0090A0E1 MOV R9,R0 3990 CreateCLFile();//добавляем в local.cl.... \ 000005DC ........ BL CreateCLFile 3991 } 3992 #ifdef kluchnik 3993 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: \ 0000060C 7010A0E3 MOV R1,#+112 \ 00000610 841D81E3 ORR R1,R1,#0x2100 \ 00000614 071081E0 ADD R1,R1,R7 \ 00000618 00108DE5 STR R1,[SP, #+0] \ 0000061C 1400D9E5 LDRB R0,[R9, #+20] \ 00000620 230050E3 CMP R0,#+35 \ 00000624 1700001A BNE ??ProcessPacket_32 4000 { 4001 //Если это конференция, патчим имя 4002 char *s=strchr(p->data,'>'); \ 00000628 3E10A0E3 MOV R1,#+62 \ 0000062C 080084E2 ADD R0,R4,#+8 \ 00000630 180000EF SWI +24 4003 //Если нашли символ > и после него пробел и ник короче 16 символов 4004 if (s) \ 00000634 000050E3 CMP R0,#+0 \ 00000638 1200000A BEQ ??ProcessPacket_32 4005 { 4006 if ((s[1]==' ')&&((s-p->data)<16)) \ 0000063C 0110D0E5 LDRB R1,[R0, #+1] \ 00000640 200051E3 CMP R1,#+32 \ 00000644 0F00001A BNE ??ProcessPacket_32 \ 00000648 081084E2 ADD R1,R4,#+8 \ 0000064C 011040E0 SUB R1,R0,R1 \ 00000650 100051E3 CMP R1,#+16 \ 00000654 0B0000AA BGE ??ProcessPacket_32 4007 { 4008 *s=0; //Режем строку \ 00000658 0080C0E5 STRB R8,[R0, #+0] 4009 AddStringToLog(t,0x02,s+2,p->data,0xFFFFFFFF,1); //Добавляем имя из текста сообщения \ 0000065C 0110A0E3 MOV R1,#+1 \ 00000660 02002DE9 PUSH {R1} \ 00000664 083084E2 ADD R3,R4,#+8 \ 00000668 022080E2 ADD R2,R0,#+2 \ 0000066C 0900A0E1 MOV R0,R9 \ 00000670 001061E2 RSB R1,R1,#+0 \ 00000674 02002DE9 PUSH {R1} \ 00000678 0B10A0E1 MOV R1,R11 \ 0000067C ........ BL AddStringToLog 4010 goto L1; \ 00000680 08D08DE2 ADD SP,SP,#+8 \ 00000684 780000EA B ??ProcessPacket_33 4011 } 4012 } 4013 } 4014 4015 //=================== tas bus jautri ===================// 4016 4017 comanda=1; \ ??ProcessPacket_32: \ 00000688 B86487E5 STR R6,[R7, #+1208] 4018 #ifdef DEBUG1 4019 comanda=1; 4020 4021 if(SHOW_ACTIVE) 4022 t->isactive=ACTIVE_TIME; 4023 if(VIBR_TYPE) 4024 vibra_count=2; 4025 else 4026 vibra_count=1; 4027 4028 start_vibra(); 4029 4030 #ifdef ELKA 4031 if(SLI_TYPE) SLI_Timer(); 4032 #endif 4033 if(Is_Double_Vibra_On) 4034 { 4035 Reminder_timer(); 4036 } 4037 4038 if (Is_ILU_On) 4039 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 4040 #else//DEBUG 4041 CheckComand(p->data, t); \ 0000068C 0910A0E1 MOV R1,R9 \ 00000690 5C559FE5 LDR R5,??ProcessPacket_18+0x30 ;; ILL_KEYS_RECV \ 00000694 5CA59FE5 LDR R10,??ProcessPacket_18+0x34 ;; ILL_RECV_TMR \ 00000698 080084E2 ADD R0,R4,#+8 \ 0000069C ........ BL CheckComand \ 000006A0 742099E5 LDR R2,[R9, #+116] \ 000006A4 ........ LDR R0,??DataTable157 ;; VIBR_TYPE \ 000006A8 000052E3 CMP R2,#+0 \ 000006AC 78209915 LDRNE R2,[R9, #+120] \ 000006B0 5A1FA0E3 MOV R1,#+360 \ 000006B4 00005213 CMPNE R2,#+0 \ 000006B8 1000000A BEQ ??ProcessPacket_34 4042 if(t->signals && t->isaccess) 4043 { 4044 #ifdef NEWSGOLD1 4045 scrsTime=0; 4046 #endif 4047 if(SHOW_ACTIVE) \ 000006BC ........ LDR R2,??DataTable160 ;; SHOW_ACTIVE \ 000006C0 002092E5 LDR R2,[R2, #+0] \ 000006C4 000052E3 CMP R2,#+0 4048 t->isactive=ACTIVE_TIME; \ 000006C8 A0108915 STRNE R1,[R9, #+160] 4049 if(t->isvibra) \ 000006CC 5C1099E5 LDR R1,[R9, #+92] \ 000006D0 000051E3 CMP R1,#+0 \ 000006D4 2400000A BEQ ??ProcessPacket_35 4050 { 4051 if(VIBR_TYPE) \ 000006D8 000090E5 LDR R0,[R0, #+0] 4052 vibra_count=2; 4053 else 4054 vibra_count=1; 4055 if(t->automsgcountisIndividSet) \ ??ProcessPacket_34: \ 00000700 ........ LDR R2,??DataTable160 ;; SHOW_ACTIVE \ 00000704 583099E5 LDR R3,[R9, #+88] \ 00000708 002092E5 LDR R2,[R2, #+0] \ 0000070C 000053E3 CMP R3,#+0 \ 00000710 0900000A BEQ ??ProcessPacket_37 4072 { 4073 #ifdef NEWSGOLD1 4074 scrsTime=0; 4075 #endif 4076 if(SHOW_ACTIVE) \ 00000714 000052E3 CMP R2,#+0 4077 t->isactive=ACTIVE_TIME; \ 00000718 A0108915 STRNE R1,[R9, #+160] 4078 if(t->isvibra) \ 0000071C 5C1099E5 LDR R1,[R9, #+92] \ 00000720 000051E3 CMP R1,#+0 \ 00000724 1000000A BEQ ??ProcessPacket_35 4079 { 4080 if(VIBR_TYPE) \ 00000728 000090E5 LDR R0,[R0, #+0] \ 0000072C 000050E3 CMP R0,#+0 4081 vibra_count=2; \ 00000730 4CB48715 STRNE R11,[R7, #+1100] 4082 else 4083 vibra_count=1; \ 00000734 4C648705 STREQ R6,[R7, #+1100] 4084 if(t->automsgcount < automsgcount && away_m) 4085 start_vibra(); \ 00000738 0A0000EA B ??ProcessPacket_36 4086 else 4087 start_vibra(); 4088 } 4089 #ifdef ELKA 4090 if(SLI_TYPE) 4091 SLI_Timer(); 4092 #endif 4093 if(Is_Double_Vibra_On) 4094 { 4095 Reminder_timer(); 4096 } 4097 4098 if (Is_ILU_On) 4099 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 4100 } 4101 else 4102 { 4103 #ifdef NEWSGOLD1 4104 scrsTime=0; 4105 #endif 4106 if(SHOW_ACTIVE) \ ??ProcessPacket_37: \ 0000073C 000052E3 CMP R2,#+0 4107 t->isactive=ACTIVE_TIME; \ 00000740 A0108915 STRNE R1,[R9, #+160] 4108 if(VIBR_TYPE) \ 00000744 000090E5 LDR R0,[R0, #+0] 4109 vibra_count=2; 4110 else 4111 vibra_count=1; 4112 if(t->automsgcount >= automsgcount) vibra_count=0; \ 00000748 ........ LDR R1,??DataTable161 ;; automsgcount \ 0000074C 000050E3 CMP R0,#+0 \ 00000750 4CB48715 STRNE R11,[R7, #+1100] \ 00000754 4C648705 STREQ R6,[R7, #+1100] \ 00000758 7C0099E5 LDR R0,[R9, #+124] \ 0000075C 001091E5 LDR R1,[R1, #+0] \ 00000760 010050E1 CMP R0,R1 \ 00000764 4C848725 STRCS R8,[R7, #+1100] 4113 start_vibra(); \ ??ProcessPacket_36: \ 00000768 ........ BL start_vibra 4114 #ifdef ELKA 4115 if(SLI_TYPE) 4116 SLI_Timer(); 4117 #endif 4118 if(Is_Double_Vibra_On) \ ??ProcessPacket_35: \ 0000076C C80297E5 LDR R0,[R7, #+712] \ 00000770 000050E3 CMP R0,#+0 \ 00000774 0000000A BEQ ??ProcessPacket_38 4119 { 4120 Reminder_timer(); \ 00000778 ........ BL Reminder_timer 4121 } 4122 4123 if (Is_ILU_On) \ ??ProcessPacket_38: \ 0000077C C40297E5 LDR R0,[R7, #+708] \ 00000780 000050E3 CMP R0,#+0 \ 00000784 0600000A BEQ ??ProcessPacket_39 4124 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 4125 } 4126 4127 #endif//DEBUG 4128 if(comanda==1) \ ??ProcessPacket_39: \ 000007A4 B80497E5 LDR R0,[R7, #+1208] \ 000007A8 010050E3 CMP R0,#+1 \ 000007AC 2E00001A BNE ??ProcessPacket_33 4129 { 4130 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 4131 main_count++; \ 000007D0 AC0297E5 LDR R0,[R7, #+684] \ 000007D4 010080E2 ADD R0,R0,#+1 \ 000007D8 AC0287E5 STR R0,[R7, #+684] 4132 if(Is_INC_On && (PopupShow==1 || PopupShow==3)) \ 000007DC C00297E5 LDR R0,[R7, #+704] \ 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 4133 { 4134 sprintf(show_nick,PopupMsgString,t->name); \ 00000800 F8139FE5 LDR R1,??ProcessPacket_18+0x3C ;; PopupMsgString \ 00000804 142089E2 ADD R2,R9,#+20 \ 00000808 F800A0E3 MOV R0,#+248 \ 0000080C 880D80E3 ORR R0,R0,#0x2200 \ 00000810 070080E0 ADD R0,R0,R7 \ 00000814 160000EF SWI +22 4135 if(!IsIdleUiOnTop()&&(!saver_on)) \ 00000818 C50000EF SWI +197 \ 0000081C 000050E3 CMP R0,#+0 \ 00000820 98029705 LDREQ R0,[R7, #+664] \ 00000824 00005003 CMPEQ R0,#+0 \ 00000828 0500001A BNE ??ProcessPacket_41 4136 { 4137 INC_show=20; \ 0000082C 1400A0E3 MOV R0,#+20 \ 00000830 BC0487E5 STR R0,[R7, #+1212] 4138 show_pp_sender(); \ 00000834 ........ BL show_pp_sender \ 00000838 010000EA B ??ProcessPacket_41 4139 } 4140 } 4141 else 4142 GBS_DelTimer(&develop); \ ??ProcessPacket_40: \ 0000083C 00009DE5 LDR R0,[SP, #+0] \ 00000840 8C0100EF SWI +396 4143 #ifndef DEBUG 4144 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 AC0487E5 STR R0,[R7, #+1196] 4145 if(Is_SMARTCPU_On) \ 00000850 ........ LDR R0,??DataTable162 ;; Is_SMARTCPU_On \ 00000854 000090E5 LDR R0,[R0, #+0] \ 00000858 000050E3 CMP R0,#+0 \ 0000085C 0200000A BEQ ??ProcessPacket_33 4146 AddToMain(t->name,p->data); \ 00000860 081084E2 ADD R1,R4,#+8 \ 00000864 140089E2 ADD R0,R9,#+20 \ 00000868 ........ BL AddToMain 4147 #endif 4148 } 4149 L1: 4150 //Разворачиваем группу, в которой пришло сообщение 4151 { 4152 CLIST *g=FindGroupByID(t->group); \ ??ProcessPacket_33: \ 0000086C 100099E5 LDR R0,[R9, #+16] \ 00000870 ........ _BLF FindGroupByID,??FindGroupByID??rA 4153 if (g) \ 00000874 000050E3 CMP R0,#+0 4154 { 4155 if (g->state) \ 00000878 B415D011 LDRHNE R1,[R0, #+84] \ 0000087C 00005113 CMPNE R1,#+0 4156 { 4157 g->state=0; \ 00000880 B485C011 STRHNE R8,[R0, #+84] 4158 } 4159 } 4160 } 4161 4162 ReqAddMsgToChat(t); \ 00000884 0900A0E1 MOV R0,R9 \ 00000888 ........ BL ReqAddMsgToChat 4163 RecountMenu(t,1); \ 0000088C 0110A0E3 MOV R1,#+1 \ 00000890 0900A0E1 MOV R0,R9 \ 00000894 ........ BL RecountMenu 4164 4165 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 37FFFFEA B ??ProcessPacket_28 4166 { 4167 case 0: 4168 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 D01297E5 LDR R1,[R7, #+720] \ 000008C8 0C0090E5 LDR R0,[R0, #+12] \ 000008CC 0C0090E5 LDR R0,[R0, #+12] \ 000008D0 010050E1 CMP R0,R1 \ ??ProcessPacket_45: \ 000008D4 30FFFF0A BEQ ??ProcessPacket_28 \ 000008D8 ........ BL to_develop \ 000008DC 2EFFFFEA B ??ProcessPacket_28 4169 break; 4170 case 1: 4171 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 D01297E5 LDR R1,[R7, #+720] \ 000008EC 0C0090E5 LDR R0,[R0, #+12] \ 000008F0 0C0090E5 LDR R0,[R0, #+12] \ 000008F4 010050E1 CMP R0,R1 \ 000008F8 27FFFF0A BEQ ??ProcessPacket_28 \ 000008FC 430000EF SWI +67 \ 00000900 000050E3 CMP R0,#+0 \ 00000904 F2FFFFEA B ??ProcessPacket_45 4172 break; 4173 case 2: 4174 break; 4175 case 3: 4176 GBS_DelTimer(&develop); \ ??ProcessPacket_44: \ 00000908 00009DE5 LDR R0,[SP, #+0] \ 0000090C 8C0100EF SWI +396 4177 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 D01297E5 LDR R1,[R7, #+720] \ 0000091C 0C0090E5 LDR R0,[R0, #+12] \ 00000920 0C0090E5 LDR R0,[R0, #+12] \ 00000924 010050E1 CMP R0,R1 \ 00000928 1BFFFF0A BEQ ??ProcessPacket_28 \ 0000092C 430000EF SWI +67 \ 00000930 000050E3 CMP R0,#+0 \ 00000934 18FFFF1A BNE ??ProcessPacket_28 \ 00000938 ........ BL begin_to_develop \ 0000093C 16FFFFEA B ??ProcessPacket_28 4178 break; 4179 } 4180 4181 RefreshCL(); 4182 break; 4183 case T_SRV_ACK: 4184 case T_CLIENT_ACK: 4185 q=FindContactLOGQByAck(p); \ ??ProcessPacket_46: \ 00000940 0400A0E1 MOV R0,R4 \ 00000944 ........ BL FindContactLOGQByAck 4186 if (q) \ 00000948 000050E3 CMP R0,#+0 \ 0000094C 9800000A BEQ ??ProcessPacket_1 4187 { 4188 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] 4189 t=FindContactByUin(p->pkt.uin); \ 00000964 000094E5 LDR R0,[R4, #+0] \ 00000968 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 0000096C 0090A0E1 MOV R9,R0 4190 if (edchat_id) \ 00000970 840497E5 LDR R0,[R7, #+1156] \ 00000974 000050E3 CMP R0,#+0 \ 00000978 8D00000A BEQ ??ProcessPacket_1 4191 { 4192 void *data=FindGUIbyId(edchat_id,NULL); \ 0000097C 840497E5 LDR R0,[R7, #+1156] \ 00000980 0010A0E3 MOV R1,#+0 \ 00000984 090200EF SWI +521 \ 00000988 0050B0E1 MOVS R5,R0 4193 if (data) \ 0000098C 8800000A BEQ ??ProcessPacket_1 4194 { 4195 EDCHAT_STRUCT *ed_struct; 4196 ed_struct=EDIT_GetUserPointer(data); \ 00000990 DF0100EF SWI +479 4197 if (ed_struct) \ 00000994 000050E3 CMP R0,#+0 \ 00000998 8500000A BEQ ??ProcessPacket_1 4198 { 4199 if (ed_struct->ed_contact==t) \ 0000099C 000090E5 LDR R0,[R0, #+0] \ 000009A0 090050E1 CMP R0,R9 \ 000009A4 8200001A BNE ??ProcessPacket_1 4200 { 4201 if (EDIT_IsBusy(data)) \ 000009A8 0500A0E1 MOV R0,R5 \ 000009AC 1C0200EF SWI +540 \ 000009B0 000050E3 CMP R0,#+0 \ 000009B4 0300000A BEQ ??ProcessPacket_47 4202 { 4203 t->req_drawack=1; \ 000009B8 906089E5 STR R6,[R9, #+144] 4204 time_to_stop_t9=3; \ 000009BC 0300A0E3 MOV R0,#+3 \ 000009C0 B40487E5 STR R0,[R7, #+1204] \ 000009C4 7A0000EA B ??ProcessPacket_1 4205 } 4206 else 4207 { 4208 DrawAck(data); \ ??ProcessPacket_47: \ 000009C8 0500A0E1 MOV R0,R5 \ 000009CC ........ BL DrawAck 4209 if (p->pkt.type==T_SRV_ACK) \ 000009D0 B400D4E1 LDRH R0,[R4, #+4] \ 000009D4 100050E3 CMP R0,#+16 \ 000009D8 7500001A BNE ??ProcessPacket_1 4210 { 4211 SMART_REDRAW(); \ 000009DC ........ BL SMART_REDRAW 4212 RefreshCL(); 4213 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 B46287E5 STR R6,[R7, #+692] \ 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 4214 } 4215 } 4216 } 4217 } 4218 } 4219 } 4220 } 4221 break; 4222 case T_XTEXT_ACK: 4223 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_48: \ 00000A0C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000A10 0090B0E1 MOVS R9,R0 4224 if (t) \ 00000A14 6600000A BEQ ??ProcessPacket_1 4225 { 4226 int i; 4227 int j; 4228 // char ss[256]; 4229 // TTime tm; 4230 FreeXText(t); \ 00000A18 ........ _BLF FreeXText,??FreeXText??rA 4231 i=p->pkt.data_len; \ 00000A1C B660D4E1 LDRH R6,[R4, #+6] 4232 memcpy(t->xtext=malloc(i),p->data,i); \ 00000A20 0600A0E1 MOV R0,R6 \ 00000A24 140000EF SWI +20 \ 00000A28 A80089E5 STR R0,[R9, #+168] \ 00000A2C 0620A0E1 MOV R2,R6 \ 00000A30 081084E2 ADD R1,R4,#+8 \ 00000A34 1E0100EF SWI +286 4233 t->xtext[i]=0; \ 00000A38 A80099E5 LDR R0,[R9, #+168] 4234 // GetDateTime(0,&tm); 4235 // snprintf(ss,i+4,"%02d:%02d:%02d %s",tm.hour,tm.min,tm.sec,p->data); 4236 // memcpy(t->xtext=malloc(strlen(ss)),ss,strlen(ss)); 4237 4238 zeromem(s,256); \ 00000A3C 401FA0E3 MOV R1,#+256 \ 00000A40 0080C6E7 STRB R8,[R6, +R0] \ 00000A44 18008DE2 ADD R0,SP,#+24 \ 00000A48 1D0100EF SWI +285 4239 strcpy(s,t->name); \ 00000A4C 141089E2 ADD R1,R9,#+20 \ 00000A50 18008DE2 ADD R0,SP,#+24 \ 00000A54 1A0000EF SWI +26 4240 strcat(s,":\n"); \ 00000A58 591F8FE2 ADR R1,??ProcessPacket_18 ;; ":\n" \ 00000A5C 18008DE2 ADD R0,SP,#+24 \ 00000A60 170000EF SWI +23 4241 i=strlen(s); \ 00000A64 18008DE2 ADD R0,SP,#+24 \ 00000A68 1B0000EF SWI +27 4242 j=p->data[0]; \ 00000A6C 0860D4E5 LDRB R6,[R4, #+8] \ 00000A70 0070A0E1 MOV R7,R0 4243 if (j>(255-i)) j=255-i; \ 00000A74 FF0067E2 RSB R0,R7,#+255 \ 00000A78 060050E1 CMP R0,R6 \ 00000A7C 0060A0B1 MOVLT R6,R0 4244 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 4245 i+=j; \ 00000A94 070086E0 ADD R0,R6,R7 4246 if (i<255) \ 00000A98 FF0050E3 CMP R0,#+255 \ 00000A9C 100000AA BGE ??ProcessPacket_49 4247 { 4248 s[i]='\n'; \ 00000AA0 18108DE2 ADD R1,SP,#+24 \ 00000AA4 0A20A0E3 MOV R2,#+10 \ 00000AA8 0120C0E7 STRB R2,[R0, +R1] 4249 i++; \ 00000AAC 0810D4E5 LDRB R1,[R4, #+8] \ 00000AB0 B620D4E1 LDRH R2,[R4, #+6] \ 00000AB4 010080E2 ADD R0,R0,#+1 4250 j=p->pkt.data_len-p->data[0]-1; 4251 if (j>(255-i)) j=255-i; 4252 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 4253 } 4254 4255 zeromem(s,256); \ ??ProcessPacket_49: \ 00000AE4 401FA0E3 MOV R1,#+256 \ 00000AE8 18008DE2 ADD R0,SP,#+24 \ 00000AEC 1D0100EF SWI +285 4256 i=0; 4257 j=p->data[0]; \ 00000AF0 0860D4E5 LDRB R6,[R4, #+8] 4258 if (j>(255-i)) j=255-i; 4259 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 4260 i+=j; 4261 if (i<255) \ 00000B0C FF0056E3 CMP R6,#+255 \ 00000B10 100000AA BGE ??ProcessPacket_50 4262 { 4263 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 4264 j=p->pkt.data_len-p->data[0]-1; 4265 if (j>(255-i)) j=255-i; 4266 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 4267 } 4268 4269 // GetDateTime(0,&tm); 4270 // sprintf(ss,"%02d:%02d:%02d %s",tm.hour,tm.min,tm.sec,s); 4271 AddStringToLog(t,0x03,s,x_status_change,0xFFFFFFFF,1); \ ??ProcessPacket_50: \ 00000B58 0100A0E3 MOV R0,#+1 \ 00000B5C 01002DE9 PUSH {R0} \ 00000B60 4B3E85E2 ADD R3,R5,#+1200 \ 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 4272 ReqAddMsgToChat(t); \ 00000B7C 0900A0E1 MOV R0,R9 \ 00000B80 ........ BL ReqAddMsgToChat 4273 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 4274 RecountMenu(t, 1); \ 00000B94 0110A013 MOVNE R1,#+1 \ 00000B98 0900A011 MOVNE R0,R9 \ 00000B9C 4CFDFF1A BNE ??ProcessPacket_8 4275 else 4276 RecountMenu(NULL, 0); \ 00000BA0 0010A0E3 MOV R1,#+0 \ 00000BA4 0100A0E1 MOV R0,R1 \ 00000BA8 49FDFFEA B ??ProcessPacket_8 4277 } 4278 break; 4279 case T_LASTPRIVACY: 4280 CurrentPrivateStatus=p->data[0]; \ ??ProcessPacket_51: \ 00000BAC 0800D4E5 LDRB R0,[R4, #+8] \ 00000BB0 480487E5 STR R0,[R7, #+1096] 4281 break; 4282 } 4283 mfree(p); \ ??ProcessPacket_1: \ 00000BB4 0400A0E1 MOV R0,R4 \ 00000BB8 150000EF SWI +21 4284 } \ 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 4285 4286 4287 IPC_REQ tmr_gipc; \ In segment CODE, align 4, keep-with-next 4288 void process_active_timer(void) 4289 { \ process_active_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} 4290 if (connect_state>2) \ 00000004 ........ LDR R5,??DataTable168 ;; i_rc \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C 5C0495E5 LDR R0,[R5, #+1116] \ 00000010 030050E3 CMP R0,#+3 \ 00000014 070000BA BLT ??process_active_timer_0 4291 { 4292 if (++tenseconds_to_ping>12) \ 00000018 880495E5 LDR R0,[R5, #+1160] \ 0000001C 010080E2 ADD R0,R0,#+1 \ 00000020 880485E5 STR R0,[R5, #+1160] \ 00000024 0D0050E3 CMP R0,#+13 \ 00000028 020000BA BLT ??process_active_timer_0 4293 { 4294 tenseconds_to_ping=0; 4295 SUBPROC((void *)do_ping); \ 0000002C 54009FE5 LDR R0,??process_active_timer_1 ;; do_ping \ 00000030 884485E5 STR R4,[R5, #+1160] \ 00000034 710100EF SWI +369 4296 } 4297 } 4298 tmr_gipc.name_to=ipc_my_name; \ ??process_active_timer_0: \ 00000038 ........ LDR R0,??DataTable166 ;; Canvas \ 0000003C 8810A0E3 MOV R1,#+136 \ 00000040 401E81E3 ORR R1,R1,#0x400 \ 00000044 002081E0 ADD R2,R1,R0 \ 00000048 E02085E5 STR R2,[R5, #+224] 4299 tmr_gipc.name_from=ipc_my_name; \ 0000004C 000081E0 ADD R0,R1,R0 \ 00000050 E40085E5 STR R0,[R5, #+228] 4300 tmr_gipc.data=NULL; \ 00000054 E84085E5 STR R4,[R5, #+232] 4301 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_TENSECONDS,&tmr_gipc); \ 00000058 E03085E2 ADD R3,R5,#+224 \ 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 4302 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000074 ........ LDR R2,??DataTable165 ;; process_active_timer \ 00000078 871EA0E3 MOV R1,#+2160 \ 0000007C 7B0D85E2 ADD R0,R5,#+7872 \ 00000080 4D0000EF SWI +77 4303 } \ 00000084 3080BDE8 POP {R4,R5,PC} ;; return \ ??process_active_timer_1: \ 00000088 ........ DC32 do_ping 4304 4305 GBSTMR tm22; \ In segment CODE, align 4, keep-with-next 4306 void OneSecTmr() 4307 { 4308 tmr_gipc.name_to=ipc_my_name; \ OneSecTmr: \ 00000000 ........ LDR R1,??DataTable166 ;; Canvas \ 00000004 10402DE9 PUSH {R4,LR} \ 00000008 ........ LDR R4,??DataTable168 ;; i_rc \ 0000000C 8800A0E3 MOV R0,#+136 \ 00000010 400E80E3 ORR R0,R0,#0x400 \ 00000014 012080E0 ADD R2,R0,R1 \ 00000018 E02084E5 STR R2,[R4, #+224] 4309 tmr_gipc.name_from=ipc_my_name; \ 0000001C 010080E0 ADD R0,R0,R1 \ 00000020 E40084E5 STR R0,[R4, #+228] 4310 tmr_gipc.data=NULL; \ 00000024 0000A0E3 MOV R0,#+0 \ 00000028 E80084E5 STR R0,[R4, #+232] 4311 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_ONESECOND,&tmr_gipc); \ 0000002C E03084E2 ADD R3,R4,#+224 \ 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 4312 GBS_StartTimerProc(&tm22,TMR_SECOND,OneSecTmr); \ 00000048 14209FE5 LDR R2,??OneSecTmr_0 ;; OneSecTmr \ 0000004C D810A0E3 MOV R1,#+216 \ 00000050 B800A0E3 MOV R0,#+184 \ 00000054 8C0D80E3 ORR R0,R0,#0x2300 \ 00000058 040080E0 ADD R0,R0,R4 \ 0000005C 4D0000EF SWI +77 4313 } \ 00000060 1080BDE8 POP {R4,PC} ;; return \ ??OneSecTmr_0: \ 00000064 ........ DC32 OneSecTmr 4314 4315 4316 //=============================================================================================== 4317 /* 4318 extern ADDUIN addonuin[]; 4319 4320 int itemFromDisp;//кол-во на экране 4321 int totalItems;//общее количество итемов 4322 int curpos=0;//позичия курсора 4323 int curpage=1;//текущая страница 4324 4325 const char clrSelect[4]={0xFF,0x00,0x00,0x60}; 4326 const char fntSelect[4]={0xFF,0xFF,0x00,0x60}; 4327 const char bordSelect[4]={0x00,0x00,0x00,0x60}; 4328 4329 const char clrNotSelect[4]={0x00,0x00,0x00,0x60}; 4330 const char bordNotSelect[4]={0x00,0x00,0x00,0x60}; 4331 const char fntNotSelect[4]={0xFF,0xFF,0xFF,0x60}; 4332 4333 char clrBlack[]={0x00,0x00,0x00,0x64}; 4334 char clrWhite[]={0xFF,0xFF,0xFF,0x64}; 4335 //char prozr[]={0x00,0x00,0x00,0x00}; 4336 const int font=FONT_SMALL; 4337 const char _t[]="%t"; 4338 4339 extern int ParseUINS(); 4340 int USE_ADD_UIN=0; 4341 #define CLIST_Y1 (YDISP+GetFontYSIZE(font)+8) 4342 4343 static void DrawList() 4344 { 4345 int font_y = GetFontYSIZE(font)+2;//16+2 4346 int scr_w=ScreenW(); 4347 int scr_h=ScreenH()-1; 4348 // int y2=scr_w-(GetFontYSIZE(font)+2); 4349 #ifdef ELKA 4350 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-GetFontYSIZE(font)-2)-1; 4351 #else 4352 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-GetFontYSIZE(font)-2); 4353 #endif 4354 4355 LockSched(); 4356 totalItems = ParseUINS(); 4357 // Определяем количество страниц списка контактов 4358 int pageNum = sdiv(itemFromDisp, totalItems); 4359 if( itemFromDisp*pageNum < totalItems) pageNum++; //На всяк,вдруг еще страница нужна 4360 WSHDR* out_ws = AllocWS(256); 4361 int i=0; 4362 int start_y; 4363 int x=1; 4364 while(i<=totalItems) 4365 { 4366 if((i>=(curpage-1)*itemFromDisp) && (i<=itemFromDisp*curpage))//если те итемы который нужно выводить на экран со страници curpage 4367 { 4368 wsprintf(out_ws,"%d. %d",i+1,addonuin[i].uin);//имя закладки 4369 start_y = (CLIST_Y1 + (i - (curpage-1)*itemFromDisp)*font_y); //определяем начальное смещение по у 4370 4371 if(i==curpos) 4372 { 4373 DrawRoundedFrame(x-4,start_y,scr_w-1,start_y+font_y,5,5,0,bordSelect,clrSelect); 4374 DrawString(out_ws,x,start_y+2,scr_w-1,start_y+font_y,font,0,fntSelect,0); 4375 } 4376 else 4377 { 4378 DrawRoundedFrame(x,start_y+1,scr_w-1,start_y+font_y,0,0,0,bordNotSelect,clrNotSelect);//clrBlack 4379 DrawString(out_ws,x,start_y+2,scr_w-1,start_y+font_y,font,0,fntNotSelect,0); 4380 } 4381 } 4382 i++; 4383 if(i>(pageNum*itemFromDisp)) break; 4384 } 4385 UnlockSched(); 4386 FreeWS(out_ws); 4387 } 4388 4389 // Управление курсором 4390 void MoveUp() 4391 { 4392 if(!itemFromDisp)return; 4393 if(curpos<1) 4394 { 4395 curpos=totalItems; 4396 if(itemFromDisp!=totalItems) 4397 { 4398 curpage = sdiv(itemFromDisp,totalItems)+1; 4399 } 4400 else 4401 curpage = 1; 4402 } 4403 else 4404 { 4405 curpos--; 4406 if(curpos<(curpage-1)*itemFromDisp){ curpos++; curpage--; } 4407 } 4408 // REDRAW(); 4409 } 4410 4411 4412 void MoveDown() 4413 { 4414 if(!totalItems)return; 4415 curpos++; 4416 if(curpos>totalItems) { curpos=0; curpage=1; } 4417 if(curpage*itemFromDispisIndividSet=0; \ 00000010 D40494E5 LDR R0,[R4, #+1236] \ 00000014 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C 581080E5 STR R1,[R0, #+88] 4465 REDRAW(); \ 00000020 720100EF SWI +370 4466 } \ 00000024 1080BDE8 POP {R4,PC} ;; return 4467 \ In segment CODE, align 4, keep-with-next 4468 void ChangeVibraContact(GUI *data) 4469 { 4470 CLIST *t; 4471 t=FindContactByUin(uinContact); \ ChangeVibraContact: \ 00000000 ........ LDR R0,??DataTable182 ;; i_rc + 1236 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 4472 t->isvibra=!(t->isvibra); \ 00000010 5C1090E5 LDR R1,[R0, #+92] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 5C1080E5 STR R1,[R0, #+92] 4473 // RefreshGUI(); 4474 REDRAW(); \ 00000024 720100EF SWI +370 4475 } \ 00000028 0080BDE8 POP {PC} ;; return 4476 \ In segment CODE, align 4, keep-with-next 4477 void ChangeSoundContact(GUI *data) 4478 { 4479 CLIST *t; 4480 t=FindContactByUin(uinContact); \ ChangeSoundContact: \ 00000000 ........ LDR R0,??DataTable182 ;; i_rc + 1236 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 4481 t->issound=!(t->issound); \ 00000010 601090E5 LDR R1,[R0, #+96] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 601080E5 STR R1,[R0, #+96] 4482 // RefreshGUI(); 4483 REDRAW(); \ 00000024 720100EF SWI +370 4484 } \ 00000028 0080BDE8 POP {PC} ;; return 4485 \ In segment CODE, align 4, keep-with-next 4486 void ChangeAutoMsg(GUI *data) 4487 { 4488 CLIST *t; 4489 t=FindContactByUin(uinContact); \ ChangeAutoMsg: \ 00000000 ........ LDR R0,??DataTable182 ;; i_rc + 1236 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 4490 t->isautomsg=!(t->isautomsg); \ 00000010 641090E5 LDR R1,[R0, #+100] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 641080E5 STR R1,[R0, #+100] 4491 // RefreshGUI(); 4492 REDRAW(); \ 00000024 720100EF SWI +370 4493 } \ 00000028 0080BDE8 POP {PC} ;; return 4494 \ In segment CODE, align 4, keep-with-next 4495 void ChangeShowXstatus(GUI *data) 4496 { 4497 CLIST *t; 4498 t=FindContactByUin(uinContact); \ ChangeShowXstatus: \ 00000000 ........ LDR R0,??DataTable182 ;; i_rc + 1236 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 4499 t->isShowXst=!(t->isShowXst); \ 00000010 701090E5 LDR R1,[R0, #+112] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 701080E5 STR R1,[R0, #+112] 4500 // RefreshGUI(); 4501 REDRAW(); \ 00000024 720100EF SWI +370 4502 } \ 00000028 0080BDE8 POP {PC} ;; return 4503 4504 #ifdef kluchnik 4505 4506 void ChangeAccess(GUI *data) 4507 { 4508 CLIST *t; 4509 t=FindContactByUin(uinContact); 4510 t->isaccess=!(t->isaccess); 4511 /// RefreshGUI(); 4512 REDRAW(); 4513 } 4514 4515 4516 void ChangeAwaySignal(GUI *data) 4517 { 4518 CLIST *t; 4519 t=FindContactByUin(uinContact); 4520 t->automsgcount=automsgcount; 4521 // RefreshGUI(); 4522 REDRAW(); 4523 } 4524 4525 void ChangeAutobot(GUI *data) 4526 { 4527 CLIST *t; 4528 t=FindContactByUin(uinContact); 4529 t->isautobot=!(t->isautobot); 4530 // RefreshGUI(); 4531 REDRAW(); 4532 } 4533 4534 void ChangeLoadHistory(GUI *data) 4535 { 4536 CLIST *t; 4537 t=FindContactByUin(uinContact); 4538 t->isLoadHistory=!(t->isLoadHistory); 4539 // RefreshGUI(); 4540 REDRAW(); 4541 } 4542 #endif //kluchnik 4543 4544 const void *menuproc[_MAX]= 4545 { 4546 (void *)RqtXText, 4547 (void *)ChangeVibraContact, 4548 (void *)ChangeSoundContact, 4549 (void *)ChangeAutoMsg, 4550 (void *)ChangeShowXstatus, 4551 #ifdef kluchnik 4552 (void *)ChangeAccess, 4553 (void *)ChangeAwaySignal, 4554 (void *)ChangeLoadHistory, 4555 (void *)ChangeAutobot, 4556 #endif 4557 }; 4558 4559 const char * const menutext[_MAX]= 4560 { 4561 "Запрос хстатуса", 4562 "Вибра", 4563 "Звук", 4564 "Автоответчик", 4565 "Показ.хстатус", 4566 #ifdef kluchnik 4567 "Удаленное управление", 4568 "Синалы автоответчика", 4569 "Загруж.историю", 4570 "Aвтобот" 4571 #endif 4572 }; 4573 4574 int hy; 4575 const char clrSelect[4]={0xFF,0x00,0x00,0x20}; 4576 const char fntSelect[4]={0xFF,0xFF,0x00,0x60}; 4577 const char bordSelect[4]={0x00,0x00,0x00,0x60}; 4578 4579 const char clrNotSelect[4]={0x00,0x00,0x00,0x00}; 4580 const char bordNotSelect[4]={0x00,0x00,0x00,0x00}; 4581 const char fntNotSelect[4]={0xFF,0xFF,0xFF,0x60}; 4582 4583 char clrBlack[]={0x00,0x00,0x00,0x64}; 4584 char clrWhite[]={0xFF,0xFF,0xFF,0x64}; 4585 char clrRed[]={0xFF,0x00,0x00,0x64}; 4586 char transparent[]={0x00,0x00,0x00,0x00}; 4587 char blue[]="\x00\x00\xFF\x64"; 4588 4589 //const int clfont=(FONT_SMALL+100);//ибо библа пнг 4590 int clfont; 4591 4592 //char clrRed2[]={0xFF,0x00,0x00,0x15}; \ In segment DATA_Z, align 4, align-sorted 4593 int i_itemFromDisp;//кол-во на экране \ i_itemFromDisp: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 4594 int i_totalItems;//общее количество итемов \ i_totalItems: \ 00000000 DS8 4 4595 int i_curpos=1;//позичия курсора 4596 \ In segment DATA_Z, align 4, align-sorted 4597 GBSTMR i_tmr; \ i_tmr: \ 00000000 DS8 16 4598 4599 extern IMGHDR screen; 4600 void DrawCheckBox(int x,int y,int flag,int type); 4601 extern char *menutexts2[]; 4602 4603 RECT i_rc; 4604 \ In segment CODE, align 4, keep-with-next 4605 int DrawIconInfo(int x, int y, int curitem) 4606 { \ DrawIconInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 4607 CLIST *t; 4608 t=FindContactByUin(uinContact); \ 00000008 ........ LDR R0,??DataTable182 ;; i_rc + 1236 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 000090E5 LDR R0,[R0, #+0] \ 00000014 0260A0E1 MOV R6,R2 \ 00000018 ........ _BLF FindContactByUin,??FindContactByUin??rA 4609 4610 switch(curitem) \ 0000001C 016046E2 SUB R6,R6,#+1 \ 00000020 040056E3 CMP R6,#+4 \ 00000024 1500008A 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 01040608 DC8 +1,+4,+6,+8 \ 00000038 0A000000 DC8 +10,+0,+0,+0 4611 { 4612 case 1: DrawCheckBox(x,y,1,1);/*DrwImage(icons[ICON_PING],x,y,0,0);*/ break;// return icons[ICON_PING]->w; \ ??DrawIconInfo_2: \ 0000003C 0130A0E3 MOV R3,#+1 \ 00000040 0120A0E3 MOV R2,#+1 \ 00000044 0A0000EA B ??DrawIconInfo_3 4613 case 2: DrawCheckBox(x,y,t->isvibra?1:0,0); break; \ ??DrawIconInfo_4: \ 00000048 5C0090E5 LDR R0,[R0, #+92] \ 0000004C 040000EA B ??DrawIconInfo_5 4614 case 3: DrawCheckBox(x,y,t->issound?1:0,0); break; \ ??DrawIconInfo_6: \ 00000050 600090E5 LDR R0,[R0, #+96] \ 00000054 020000EA B ??DrawIconInfo_5 4615 case 4: DrawCheckBox(x,y,t->isautomsg?1:0,0); break; \ ??DrawIconInfo_7: \ 00000058 640090E5 LDR R0,[R0, #+100] \ 0000005C 000000EA B ??DrawIconInfo_5 4616 case 5: DrawCheckBox(x,y,t->isShowXst?1:0,0); break; \ ??DrawIconInfo_8: \ 00000060 700090E5 LDR R0,[R0, #+112] \ ??DrawIconInfo_5: \ 00000064 0030A0E3 MOV R3,#+0 \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 0120A013 MOVNE R2,#+1 \ 00000070 0020A003 MOVEQ R2,#+0 \ ??DrawIconInfo_3: \ 00000074 0510A0E1 MOV R1,R5 \ 00000078 0400A0E1 MOV R0,R4 \ 0000007C ........ _BLF DrawCheckBox,??DrawCheckBox??rA 4617 #ifdef kluchnik 4618 case 6: DrawCheckBox(x,y,t->isaccess?1:0,0); break; 4619 case 7: DrawCheckBox(x,y,t->automsgcount?1:0,0); break; 4620 case 8: DrawCheckBox(x,y,t->isLoadHistory?1:0,0); break; 4621 case 9: DrawCheckBox(x,y,t->isautobot?0:1,0); break; 4622 #endif 4623 } 4624 return 12; \ ??DrawIconInfo_1: \ 00000080 0C00A0E3 MOV R0,#+12 \ 00000084 7080BDE8 POP {R4-R6,PC} ;; return 4625 } 4626 4627 extern DYNPNGICONLIST *GetXSByItem(int curitem); 4628 char *GetStatusByIconIndex(int icon); 4629 4630 char ixtext[256]; \ In segment CODE, align 4, keep-with-next 4631 void I_DrawList() 4632 { \ I_DrawList: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 4633 int font_y = FontH(clfont)+1; \ 00000004 ........ LDR R4,??DataTable189 ;; i_rc 4634 int scr_h=ScreenH()-1; 4635 int scr_w=ScreenW()-1; 4636 4637 LockSched(); 4638 int i=1; 4639 int start_y=0; 4640 int start_x=i_rc.x+4; 4641 4642 RECT rc; 4643 CLIST *t; 4644 t=FindContactByUin(uinContact); 4645 SetFontColor(clrWhite,transparent,0); 4646 char *s=malloc(128); 4647 sprintf(s,"Меню контакта \"%s\"",t->name); \ 00000008 6C939FE5 LDR R9,??I_DrawList_0 ;; menutext \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 DC0494E5 LDR R0,[R4, #+1244] \ 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 D40494E5 LDR R0,[R4, #+1236] \ 0000003C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000040 0070A0E1 MOV R7,R0 \ 00000044 CC00A0E3 MOV R0,#+204 \ 00000048 8C0D80E3 ORR R0,R0,#0x2300 \ 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 7C1089E2 ADD R1,R9,#+124 \ 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 DC1494E5 LDR R1,[R4, #+1244] \ 000000B4 02002DE9 PUSH {R1} \ 000000B8 F210D4E1 LDRSH R1,[R4, #+2] \ 000000BC 011081E2 ADD R1,R1,#+1 4648 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 4649 4650 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 4651 int back=i_rc.y; \ 000000E8 F200D4E1 LDRSH R0,[R4, #+2] \ 000000EC 0020A0E1 MOV R2,R0 \ 000000F0 2C208DE5 STR R2,[SP, #+44] 4652 i_rc.y+=4; \ 000000F4 04A080E2 ADD R10,R0,#+4 \ 000000F8 B2A0C4E1 STRH R10,[R4, #+2] 4653 4654 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 080090E5 LDR R0,[R0, #+8] \ 00000120 ........ BL DrwImage 4655 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 ACA097E5 LDR R10,[R7, #+172] \ 00000128 20D08DE2 ADD SP,SP,#+32 \ 0000012C 00005AE3 CMP R10,#+0 \ 00000130 90A08902 ADDEQ R10,R9,#+144 \ 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 4656 4657 // if(t->xstate!=0) 4658 //{ 4659 // DYNPNGICONLIST *xs=GetXSByItem(t->xstate); 4660 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 DC1494E5 LDR R1,[R4, #+1244] \ 00000178 02002DE9 PUSH {R1} \ 0000017C 0C0090E5 LDR R0,[R0, #+12] \ 00000180 F210D4E1 LDRSH R1,[R4, #+2] \ 00000184 0000D0E5 LDRB 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] 4661 4662 sprintf(ixtext,(t->xtext)?(t->xtext+1):("Нет хстатуса")); \ 0000019C 88B0A0E3 MOV R11,#+136 \ 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 A80390E5 LDR R0,[R0, #+936] \ 000001BC ........ BL DrwImage \ 000001C0 A80097E5 LDR R0,[R7, #+168] \ 000001C4 18D08DE2 ADD SP,SP,#+24 \ 000001C8 000050E3 CMP R0,#+0 \ 000001CC 01108012 ADDNE R1,R0,#+1 \ 000001D0 98108902 ADDEQ R1,R9,#+152 \ 000001D4 04008BE0 ADD R0,R11,R4 \ 000001D8 160000EF SWI +22 4663 ixtext[strlen(t->xtext)-1]=0; \ 000001DC A80097E5 LDR R0,[R7, #+168] \ 000001E0 1B0000EF SWI +27 \ 000001E4 040080E0 ADD R0,R0,R4 \ 000001E8 0010A0E3 MOV R1,#+0 \ 000001EC 8716C0E5 STRB R1,[R0, #+1671] \ 000001F0 B605D7E1 LDRH R0,[R7, #+86] \ 000001F4 F070D4E1 LDRSH R7,[R4, #+0] \ 000001F8 000184E0 ADD R0,R4,R0, LSL #+2 \ 000001FC A80390E5 LDR R0,[R0, #+936] \ 00000200 F410D4E1 LDRSH R1,[R4, #+4] \ 00000204 0020D0E5 LDRB 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 DC1494E5 LDR R1,[R4, #+1244] \ 00000244 02002DE9 PUSH {R1} \ 00000248 0000D0E5 LDRB 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 4664 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 4665 // } 4666 /* 4667 DrwImage(icons[IS_UNKNOWN],i_rc.x+2,i_rc.y+(font_y*3)-1,0,0); 4668 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); 4669 */ 4670 while(i<_MAX) 4671 { 4672 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 4673 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 4674 if(i==i_curpos)//Если наш итем то выделяем \ 00000290 E00494E5 LDR R0,[R4, #+1248] \ 00000294 04D08DE2 ADD SP,SP,#+4 \ 00000298 000056E1 CMP R6,R0 \ 0000029C 1100001A BNE ??I_DrawList_2 4675 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 4676 4677 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 DC1494E5 LDR R1,[R4, #+1244] \ 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 4678 i++; \ 00000354 016086E2 ADD R6,R6,#+1 4679 } \ 00000358 060056E3 CMP R6,#+6 \ 0000035C 18D08DE2 ADD SP,SP,#+24 \ 00000360 C0FFFFBA BLT ??I_DrawList_1 4680 UnlockSched(); \ 00000364 470100EF SWI +327 4681 i_rc.y=back; \ 00000368 0C009DE5 LDR R0,[SP, #+12] \ 0000036C B200C4E1 STRH R0,[R4, #+2] 4682 mfree(s); \ 00000370 0800A0E1 MOV R0,R8 \ 00000374 150000EF SWI +21 4683 } \ 00000378 FF8FBDE8 POP {R0-R11,PC} ;; return \ ??I_DrawList_0: \ 0000037C ........ DC32 menutext \ 00000380 ........ DC32 MMCursorBGClr \ 00000384 ........ DC32 MMCursorClr 4684 4685 // Управление курсором \ In segment CODE, align 4, keep-with-next 4686 void I_MoveUp() 4687 { 4688 if(i_curpos > 0) i_curpos--; \ I_MoveUp: \ 00000000 ........ LDR R0,??DataTable189 ;; i_rc \ 00000004 E01490E5 LDR R1,[R0, #+1248] \ 00000008 010051E3 CMP R1,#+1 \ 0000000C 011041A2 SUBGE R1,R1,#+1 4689 else 4690 i_curpos=_MAX-1; \ 00000010 0510A0B3 MOVLT R1,#+5 \ 00000014 E01480E5 STR R1,[R0, #+1248] 4691 } \ 00000018 1EFF2FE1 BX LR ;; return 4692 4693 \ In segment CODE, align 4, keep-with-next 4694 void I_MoveDown() 4695 { 4696 if(i_curpos < _MAX - 1 ) i_curpos++; \ I_MoveDown: \ 00000000 ........ LDR R0,??DataTable189 ;; i_rc \ 00000004 E01490E5 LDR R1,[R0, #+1248] \ 00000008 050051E3 CMP R1,#+5 \ 0000000C 011081B2 ADDLT R1,R1,#+1 4697 else i_curpos=1; \ 00000010 0110A0A3 MOVGE R1,#+1 \ 00000014 E01480E5 STR R1,[R0, #+1248] 4698 } \ 00000018 1EFF2FE1 BX LR ;; return 4699 \ In segment CODE, align 4, keep-with-next 4700 void I_Redraw() 4701 { \ I_Redraw: \ 00000000 00402DE9 PUSH {LR} 4702 DirectRedrawGUI(); \ 00000004 3F0100EF SWI +319 4703 } \ 00000008 0080BDE8 POP {PC} ;; return 4704 4705 4706 void DrawHeader(); 4707 \ In segment CODE, align 4, keep-with-next 4708 void I_OnRedraw(MAIN_GUI *data) 4709 { \ I_OnRedraw: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 4710 DrawHeader(); 4711 DrwImage(&screen,0,hy+2); \ 00000004 ........ LDR R4,??DataTable180 ;; i_rc 4712 // DrawRoundedFrame(0,YDISP,ScreenW()-1,ScreenH()-1,0,0,0,"\x00\x00\x00\x30","\x00\x00\x00\x30"); 4713 DrawRoundedFrame(i_rc.x,i_rc.y,i_rc.x2,i_rc.y2,0,0,0,/*"\x00\x00\x00\x45"*/MMBackgrBordClr,MMBackgrClr); \ 00000008 C4719FE5 LDR R7,??I_OnRedraw_0 ;; MMBackgrClr \ 0000000C C4619FE5 LDR R6,??I_OnRedraw_0+0x4 ;; MMBackgrBordClr \ 00000010 20D04DE2 SUB SP,SP,#+32 \ 00000014 ........ BL DrawHeader \ 00000018 D80494E5 LDR R0,[R4, #+1240] \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 022080E2 ADD R2,R0,#+2 \ 00000024 B0019FE5 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 4714 I_DrawList(); \ 00000060 ........ BL I_DrawList 4715 SetScrollEdgeDelay(0); \ 00000064 0000A0E3 MOV R0,#+0 \ 00000068 ........ _BLF SetScrollEdgeDelay,??SetScrollEdgeDelay??rA 4716 if(i_curpos==0) \ 0000006C E00494E5 LDR R0,[R4, #+1248] \ 00000070 14D08DE2 ADD SP,SP,#+20 \ 00000074 000050E3 CMP R0,#+0 \ 00000078 5300001A BNE ??I_OnRedraw_1 4717 { 4718 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} 4719 char xs[128] = {0}; ^ Warning[Pe177]: variable "xs" was declared but never referenced 4720 int c; 4721 int i=0; \ 00000098 0100A0E1 MOV R0,R1 4722 char *p=ixtext; \ 0000009C 8810A0E3 MOV R1,#+136 \ 000000A0 601E81E3 ORR R1,R1,#0x600 \ 000000A4 045081E0 ADD R5,R1,R4 4723 c=*p; 4724 while(i<32) 4725 { 4726 xl[i]=*p; \ ??I_OnRedraw_2: \ 000000A8 0020D5E5 LDRB R2,[R5, #+0] \ 000000AC 0D10A0E1 MOV R1,SP \ 000000B0 0120C0E7 STRB R2,[R0, +R1] 4727 i++; 4728 c=*p++; \ 000000B4 ........ LDRB R1,[R5], #+1 \ 000000B8 010080E2 ADD R0,R0,#+1 4729 if(c==13) break; \ 000000BC 0D0051E3 CMP R1,#+13 \ 000000C0 0100000A BEQ ??I_OnRedraw_3 4730 } \ 000000C4 200050E3 CMP R0,#+32 \ 000000C8 F6FFFFBA BLT ??I_OnRedraw_2 4731 xl[i]=0; \ ??I_OnRedraw_3: \ 000000CC 0D10A0E1 MOV R1,SP \ 000000D0 0020A0E3 MOV R2,#+0 \ 000000D4 0120C0E7 STRB R2,[R0, +R1] 4732 *p++; 4733 // sprintf(xs,p); 4734 // xs[strlen(xs)-1]=0; 4735 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 DC0494E5 LDR R0,[R4, #+1244] \ 000000DC ........ _BLF FontH,??FontH??rA \ 000000E0 0080A0E1 MOV R8,R0 \ 000000E4 DC0494E5 LDR R0,[R4, #+1244] \ 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 F420D4E1 LDRSH R2,[R4, #+4] \ 0000010C 883181E0 ADD R3,R1,R8, LSL #+3 \ 00000110 011080E0 ADD R1,R0,R1 \ 00000114 F000D4E1 LDRSH R0,[R4, #+0] \ 00000118 052082E2 ADD R2,R2,#+5 \ 0000011C 050040E2 SUB R0,R0,#+5 \ 00000120 500100EF SWI +336 4736 // 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 4737 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 \ 00000124 DC0494E5 LDR R0,[R4, #+1244] \ 00000128 ........ _BLF FontH,??FontH??rA \ 0000012C F420D4E1 LDRSH R2,[R4, #+4] \ 00000130 0010A0E1 MOV R1,R0 \ 00000134 F000D4E1 LDRSH R0,[R4, #+0] \ 00000138 0030A0E3 MOV R3,#+0 \ 0000013C 002042E0 SUB R2,R2,R0 \ 00000140 04002DE9 PUSH {R2} \ 00000144 0020A0E3 MOV R2,#+0 \ 00000148 04002DE9 PUSH {R2} \ 0000014C 04002DE9 PUSH {R2} \ 00000150 0120A0E3 MOV R2,#+1 \ 00000154 04002DE9 PUSH {R2} \ 00000158 04002DE9 PUSH {R2} \ 0000015C DC2494E5 LDR R2,[R4, #+1244] \ 00000160 04002DE9 PUSH {R2} \ 00000164 F260D4E1 LDRSH R6,[R4, #+2] \ 00000168 2C208DE2 ADD R2,SP,#+44 \ 0000016C 811086E0 ADD R1,R6,R1, LSL #+1 \ 00000170 ........ _BLF PrintText,??PrintText??rA \ 00000174 2CD08DE2 ADD SP,SP,#+44 4738 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 \ 00000178 DC0494E5 LDR R0,[R4, #+1244] \ 0000017C ........ _BLF FontH,??FontH??rA \ 00000180 F420D4E1 LDRSH R2,[R4, #+4] \ 00000184 0010A0E1 MOV R1,R0 \ 00000188 F000D4E1 LDRSH R0,[R4, #+0] \ 0000018C 0030A0E3 MOV R3,#+0 \ 00000190 002042E0 SUB R2,R2,R0 \ 00000194 04002DE9 PUSH {R2} \ 00000198 0020A0E3 MOV R2,#+0 \ 0000019C 04002DE9 PUSH {R2} \ 000001A0 04002DE9 PUSH {R2} \ 000001A4 0120A0E3 MOV R2,#+1 \ 000001A8 04002DE9 PUSH {R2} \ 000001AC 04002DE9 PUSH {R2} \ 000001B0 DC2494E5 LDR R2,[R4, #+1244] \ 000001B4 04002DE9 PUSH {R2} \ 000001B8 F240D4E1 LDRSH R4,[R4, #+2] \ 000001BC 012085E2 ADD R2,R5,#+1 \ 000001C0 011184E0 ADD R1,R4,R1, LSL #+2 \ 000001C4 ........ _BLF PrintText,??PrintText??rA \ 000001C8 18D08DE2 ADD SP,SP,#+24 4739 } 4740 // GBS_StartTimerProc(&i_tmr, 100, I_Redraw); 4741 } \ ??I_OnRedraw_1: \ 000001CC 20D08DE2 ADD SP,SP,#+32 ;; stack cleaning \ 000001D0 F081BDE8 POP {R4-R8,PC} ;; return \ ??I_OnRedraw_0: \ 000001D4 ........ DC32 MMBackgrClr \ 000001D8 ........ DC32 MMBackgrBordClr \ 000001DC ........ DC32 screen 4742 \ In segment CODE, align 4, keep-with-next 4743 void I_onCreate(MAIN_GUI *data, void *(*malloc_adr)(int)) 4744 { \ I_onCreate: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 4745 if(isSystemFont) clfont=100+pngFont; \ 00000008 ........ LDR R0,??DataTable178 ;; isSystemFont \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 0300000A BEQ ??I_onCreate_0 \ 00000018 ........ LDR R0,??DataTable179 ;; pngFont \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 640080E2 ADD R0,R0,#+100 \ 00000024 000000EA B ??I_onCreate_1 4746 else clfont=2; \ ??I_onCreate_0: \ 00000028 0200A0E3 MOV R0,#+2 \ ??I_onCreate_1: \ 0000002C ........ LDR R5,??DataTable180 ;; i_rc \ 00000030 DC0485E5 STR R0,[R5, #+1244] 4747 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 80109FE5 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 500100EF SWI +336 4748 DoScreen(); \ 00000070 ........ _BLF DoScreen,??DoScreen??rA 4749 #ifdef ELKA 4750 i_rc.x=30; 4751 i_rc.x2=ScreenW()-25; 4752 #else 4753 i_rc.x=5; \ 00000074 0500A0E3 MOV R0,#+5 \ 00000078 B000C5E1 STRH R0,[R5, #+0] 4754 i_rc.x2=ScreenW()-5; \ 0000007C 888100EF SWI +33160 \ 00000080 050040E2 SUB R0,R0,#+5 \ 00000084 B400C5E1 STRH R0,[R5, #+4] 4755 #endif 4756 i_rc.y=hy+5; \ 00000088 D80495E5 LDR R0,[R5, #+1240] \ 0000008C 050080E2 ADD R0,R0,#+5 \ 00000090 B200C5E1 STRH R0,[R5, #+2] 4757 i_rc.y2=i_rc.y+(FontH(clfont)*(_MAX+3)); \ 00000094 DC0495E5 LDR R0,[R5, #+1244] \ 00000098 ........ _BLF FontH,??FontH??rA \ 0000009C F210D5E1 LDRSH R1,[R5, #+2] \ 000000A0 800180E0 ADD R0,R0,R0, LSL #+3 \ 000000A4 010080E0 ADD R0,R0,R1 \ 000000A8 B600C5E1 STRH R0,[R5, #+6] 4758 // StoreXYXYToRECT(&i_rc,30,hy+5,ScreenW()-25,i_rc.y+(FontH(clfont)*(_MAX+4))); 4759 SetCanvasFlag(1); \ 000000AC 0100A0E3 MOV R0,#+1 \ 000000B0 ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 4760 i_curpos=1; \ 000000B4 0100A0E3 MOV R0,#+1 \ 000000B8 E00485E5 STR R0,[R5, #+1248] 4761 data->gui.state=1; \ 000000BC 0C00C4E5 STRB R0,[R4, #+12] 4762 } \ 000000C0 14D08DE2 ADD SP,SP,#+20 \ 000000C4 7080BDE8 POP {R4-R6,PC} ;; return \ ??I_onCreate_2: \ 000000C8 ........ DC32 `?` 4763 \ In segment CODE, align 4, keep-with-next 4764 void I_onClose(MAIN_GUI *data, void (*mfree_adr)(void *)) 4765 { \ I_onClose: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 4766 // mfree(ixtext); 4767 mfree(screen.bitmap); \ 00000008 18009FE5 LDR R0,??I_onClose_0 ;; screen + 4 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 150000EF SWI +21 4768 GBS_DelTimer(&i_tmr); \ 00000014 10009FE5 LDR R0,??I_onClose_0+0x4 ;; i_tmr \ 00000018 8C0100EF SWI +396 4769 data->gui.state=0; \ 0000001C 0000A0E3 MOV R0,#+0 \ 00000020 0C00C4E5 STRB R0,[R4, #+12] 4770 } \ 00000024 1080BDE8 POP {R4,PC} ;; return \ ??I_onClose_0: \ 00000028 ........ DC32 screen + 4 \ 0000002C ........ DC32 i_tmr 4771 \ In segment CODE, align 4, keep-with-next 4772 void I_onFocus(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *)) 4773 { \ I_onFocus: \ 00000000 00402DE9 PUSH {LR} 4774 data->gui.state=2; \ 00000004 0210A0E3 MOV R1,#+2 \ 00000008 0C10C0E5 STRB R1,[R0, #+12] 4775 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 4776 } \ 00000010 0080BDE8 POP {PC} ;; return 4777 \ In segment CODE, align 4, keep-with-next 4778 void I_onUnfocus(MAIN_GUI *data, void (*mfree_adr)(void *)) 4779 { 4780 if (data->gui.state!=2) return; \ I_onUnfocus: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 4781 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 4782 } \ 00000010 1EFF2FE1 BX LR ;; return 4783 \ In segment CODE, align 4, keep-with-next 4784 int I_OnKey(MAIN_GUI *data, GUI_MSG *msg) 4785 { \ I_OnKey: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0140A0E1 MOV R4,R1 4786 DirectRedrawGUI(); 4787 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 4788 { 4789 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 4790 { 4791 case UP_BUTTON: I_MoveUp(); break; \ ??I_OnKey_2: \ 00000058 ........ BL I_MoveUp 4792 case DOWN_BUTTON: I_MoveDown(); break; 4793 case LEFT_BUTTON: case RIGHT_SOFT:case RED_BUTTON: return (1); 4794 } 4795 } 4796 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 4797 { 4798 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 4799 { 4800 case ENTER_BUTTON: case LEFT_SOFT: case RIGHT_BUTTON: 4801 { 4802 CLIST *t; 4803 t=FindContactByUin(uinContact); 4804 t->isIndividSet=1; \ 00000080 ........ LDR R4,??DataTable189 ;; i_rc \ 00000084 D40494E5 LDR R0,[R4, #+1236] \ 00000088 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 0000008C 0110A0E3 MOV R1,#+1 \ 00000090 581080E5 STR R1,[R0, #+88] 4805 ((void (*)(void))(menuproc[i_curpos-1]))(); \ 00000094 E00494E5 LDR R0,[R4, #+1248] \ 00000098 000184E0 ADD R0,R4,R0, LSL #+2 \ 0000009C 6C0690E5 LDR R0,[R0, #+1644] \ 000000A0 30FF2FE1 BLX R0 4806 REDRAW(); \ 000000A4 720100EF SWI +370 4807 } 4808 break; 4809 } 4810 } 4811 4812 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} 4813 } 4814 4815 extern void kill_data(void *p, void (*func_p)(void *)); 4816 \ In segment CODE, align 4, keep-with-next 4817 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 4818 int I_method9(void){return(0);} \ I_method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 4819 4820 const void * const I_gui_methods[11]={ 4821 (void *)I_OnRedraw, 4822 (void *)I_onCreate, 4823 (void *)I_onClose, 4824 (void *)I_onFocus, 4825 (void *)I_onUnfocus, 4826 (void *)I_OnKey, 4827 0, 4828 (void *)kill_data, 4829 (void *)I_method8, 4830 (void *)I_method9, 4831 0 4832 }; 4833 \ In segment CODE, align 4, keep-with-next 4834 int CreateContactMenu(CLIST *t) 4835 { 4836 uinContact=t->uin; \ CreateContactMenu: \ 00000000 ........ LDR R1,??DataTable182 ;; i_rc + 1236 \ 00000004 10402DE9 PUSH {R4,LR} \ 00000008 0C0090E5 LDR R0,[R0, #+12] \ 0000000C 000081E5 STR R0,[R1, #+0] 4837 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000010 4000A0E3 MOV R0,#+64 \ 00000014 140000EF SWI +20 \ 00000018 0040A0E1 MOV R4,R0 4838 zeromem(main_gui,sizeof(MAIN_GUI)); \ 0000001C 4010A0E3 MOV R1,#+64 \ 00000020 1D0100EF SWI +285 4839 // main_gui->gui.canvas=(void *)(&Canvas); 4840 main_gui->gui.methods=(void *)I_gui_methods; \ 00000024 14009FE5 LDR R0,??CreateContactMenu_0 ;; I_gui_methods \ 00000028 040084E5 STR R0,[R4, #+4] 4841 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 0000002C 158000EF SWI +32789 \ 00000030 200084E5 STR R0,[R4, #+32] 4842 //patch_rect((RECT*)&Canvas,0,YDISP,ScreenW()-1,ScreenH()-1); 4843 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 4844 } 4845 4846 /*********************************************************************/ 4847 4848 int itemFromDisp;//кол-во на экране 4849 int totalItems;//общее количество итемов 4850 //int curpos=0;//позичия курсора 4851 int curpage=1;//текущая страница 4852 int collum=0;//столбцы))) 0 - первый, 1- второй 4853 const char _t[]="%t"; 4854 const char _d[]="%d"; 4855 //int clfont; 4856 4857 #ifdef ELKA 4858 #ifndef ICONBAR 4859 #undef YDISP 4860 #define YDISP 0 4861 #endif 4862 #endif 4863 4864 #define CLIST_Y1 (YDISP+FontH(clfont)+4) 4865 4866 \ In segment CODE, align 4, keep-with-next 4867 void RecountMenu(CLIST *req, int needfocus) 4868 { \ RecountMenu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 4869 int i; 4870 int j; 4871 if (!maingui_id) return; //Нечего считать \ 00000004 ........ LDR R5,??DataTable189 ;; i_rc \ 00000008 0140A0E1 MOV R4,R1 \ 0000000C D41295E5 LDR R1,[R5, #+724] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 7080BD08 POPEQ {R4-R6,PC} 4872 if (req==NULL) \ 00000018 000050E3 CMP R0,#+0 4873 { 4874 j=0; \ 0000001C 0060A003 MOVEQ R6,#+0 \ 00000020 0100000A BEQ ??RecountMenu_0 4875 } 4876 else 4877 { 4878 j=FindContactByContact(req); \ 00000024 ........ _BLF FindContactByContact,??FindContactByContact??rA \ 00000028 0060A0E1 MOV R6,R0 4879 } 4880 i=CountContacts(); \ ??RecountMenu_0: \ 0000002C ........ _BLF CountContacts,??CountContacts??rA 4881 if (j>=i) j=i-1; \ 00000030 000056E1 CMP R6,R0 \ 00000034 016040A2 SUBGE R6,R0,#+1 4882 if (j<0) j=0; \ 00000038 000056E3 CMP R6,#+0 \ 0000003C 0060A043 MOVMI R6,#+0 4883 if(needfocus) curpos=j; \ 00000040 000054E3 CMP R4,#+0 \ 00000044 D0648515 STRNE R6,[R5, #+1232] 4884 // if (IsGuiOnTop(contactlist_menu_id)) 4885 SMART_REDRAW();//DirectRedrawGUI_ID(contactlist_menu_id);//contactlist_menu_id \ 00000048 ........ BL SMART_REDRAW 4886 } \ 0000004C 7080BDE8 POP {R4-R6,PC} ;; return 4887 4888 \ In segment CODE, align 4, keep-with-next 4889 void DrawStr(int x,int y,char*s,char *color,int font,int align) 4890 { \ 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 4891 SetFontColor(color,transparent,0); \ 00000014 ........ LDR R1,??DataTable185 ;; i_rc + 9172 \ 00000018 0260A0E1 MOV R6,R2 \ 0000001C 0300A0E1 MOV R0,R3 \ 00000020 0020A0E3 MOV R2,#+0 \ 00000024 ........ _BLF SetFontColor,??SetFontColor??rA 4892 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 4893 //void PrintText( int x, int y, char *str, int align, int font, int space, int lineSpace, int isScroll, short fixSize, int maxLen); 4894 } \ 00000048 F381BDE8 POP {R0,R1,R4-R8,PC} ;; return 4895 \ In segment CODE, align 4, keep-with-next 4896 void DrawText(int x,int y,int x2,char*s,char *color,int font,int align,int isScroll) 4897 { \ 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 4898 SetFontColor(color,transparent,0); \ 0000001C ........ LDR R1,??DataTable185 ;; i_rc + 9172 \ 00000020 0260A0E1 MOV R6,R2 \ 00000024 0370A0E1 MOV R7,R3 \ 00000028 0020A0E3 MOV R2,#+0 \ 0000002C ........ _BLF SetFontColor,??SetFontColor??rA 4899 // SetScrollEdgeDelay(0); 4900 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 4901 //int x, int y, char *str, int align, int font, int space, int lineSpace, int isScroll, short fixSize, int maxLen); 4902 } \ 00000070 18D08DE2 ADD SP,SP,#+24 \ 00000074 F087BDE8 POP {R4-R10,PC} ;; return 4903 4904 4905 IMGHDR screen3={0,0,8,""}; 4906 int shot_soft=0; 4907 \ In segment CODE, align 4, keep-with-next 4908 void DoScreen3(int h) 4909 { \ DoScreen3: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 4910 //int SCREENSIZE = ScreenH()*ScreenW(); 4911 int HSIZE = (ScreenH()-h)*ScreenW(); 4912 int ScrH=h+2; 4913 int ScrW=ScreenW(); 4914 char *ms=RamScreenBuffer(); 4915 screen3.w=ScrW; \ 00000004 ........ LDR R8,??DataTable189 ;; i_rc \ 00000008 0050A0E1 MOV R5,R0 \ 0000000C 898100EF SWI +33161 \ 00000010 054040E0 SUB R4,R0,R5 \ 00000014 888100EF SWI +33160 \ 00000018 900404E0 MUL R4,R0,R4 \ 0000001C 025085E2 ADD R5,R5,#+2 \ 00000020 888100EF SWI +33160 \ 00000024 0060A0E1 MOV R6,R0 \ 00000028 E08000EF SWI +32992 \ 0000002C 0070A0E1 MOV R7,R0 4916 screen3.h=ScrH; 4917 screen3.bitmap=malloc(ScrW*ScrH*2); \ 00000030 950600E0 MUL R0,R5,R6 \ 00000034 7062C8E5 STRB R6,[R8, #+624] \ 00000038 7152C8E5 STRB R5,[R8, #+625] \ 0000003C 8050A0E1 LSL R5,R0,#+1 \ 00000040 9D6FA0E3 MOV R6,#+628 \ 00000044 0500A0E1 MOV R0,R5 \ 00000048 140000EF SWI +20 \ 0000004C 080086E7 STR R0,[R6, +R8] 4918 ms+=(HSIZE*2); 4919 memcpy(screen3.bitmap, ms, ScrW*ScrH*2); \ 00000050 0520A0E1 MOV R2,R5 \ 00000054 841087E0 ADD R1,R7,R4, LSL #+1 \ 00000058 1E0100EF SWI +286 4920 } \ 0000005C F081BDE8 POP {R4-R8,PC} ;; return 4921 \ In segment CODE, align 4, keep-with-next 4922 void DrawSoftKeys(char *left,char *right) 4923 { \ DrawSoftKeys: \ 00000000 F34F2DE9 PUSH {R0,R1,R4-R11,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 4924 TTime t; 4925 char *s=malloc(32); \ 00000008 2000A0E3 MOV R0,#+32 \ 0000000C 140000EF SWI +20 \ 00000010 0040A0E1 MOV R4,R0 4926 if(!PNG_SOFTKEY) clfont=100+HeadFont; \ 00000014 ........ LDR R0,??DataTable193 ;; PNG_SOFTKEY \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0300001A BNE ??DrawSoftKeys_0 \ 00000024 ........ LDR R0,??DataTable201 ;; HeadFont \ 00000028 000090E5 LDR R0,[R0, #+0] \ 0000002C 640080E2 ADD R0,R0,#+100 \ 00000030 000000EA B ??DrawSoftKeys_1 4927 else clfont=4; \ ??DrawSoftKeys_0: \ 00000034 0400A0E3 MOV R0,#+4 \ ??DrawSoftKeys_1: \ 00000038 ........ LDR R5,??DataTable189 ;; i_rc \ 0000003C DC0485E5 STR R0,[R5, #+1244] 4928 4929 int FntH=FontH(clfont); \ 00000040 ........ _BLF FontH,??FontH??rA \ 00000044 0060A0E1 MOV R6,R0 4930 int scr_w=ScreenW()-1; \ 00000048 888100EF SWI +33160 \ 0000004C 017040E2 SUB R7,R0,#+1 4931 int scr_h=ScreenH()-1; \ 00000050 898100EF SWI +33161 \ 00000054 018040E2 SUB R8,R0,#+1 4932 4933 LockSched(); \ 00000058 460100EF SWI +326 4934 #ifdef ELKA 4935 if(shot_soft!=2) 4936 { 4937 DrawRoundedFrame(0,ScreenH()-1-FntH-2,ScreenW()-1,ScreenH()-1,0,0,0,clrBlack,clrBlack); 4938 for(int i=FontH(clfont);i>0;i-=2) 4939 DrawRoundedFrame(0,scr_h-FntH-2,scr_w,scr_h-FntH+i+2,0,0,0,SoftBackgrClr,SoftBackgrClr); 4940 4941 DoScreen3(FntH); 4942 shot_soft++; 4943 SMART_REDRAW(); 4944 return; 4945 } 4946 else 4947 DrwImage(&screen3,0,scr_h-FntH); 4948 #else 4949 DrawRoundedFrame(0,ScreenH()-1-FntH-2,ScreenW()-1,ScreenH()-1,0,0,0,clrBlack,clrBlack); \ 0000005C 898100EF SWI +33161 \ 00000060 0090A0E1 MOV R9,R0 \ 00000064 888100EF SWI +33160 \ 00000068 00A0A0E1 MOV R10,R0 \ 0000006C 898100EF SWI +33161 \ 00000070 C810A0E3 MOV R1,#+200 \ 00000074 8C1D81E3 ORR R1,R1,#0x2300 \ 00000078 051081E0 ADD R1,R1,R5 \ 0000007C 0120A0E1 MOV R2,R1 \ 00000080 04002DE9 PUSH {R2} \ 00000084 02002DE9 PUSH {R1} \ 00000088 013049E2 SUB R3,R9,#+1 \ 0000008C 01204AE2 SUB R2,R10,#+1 \ 00000090 010040E2 SUB R0,R0,#+1 \ 00000094 0010A0E3 MOV R1,#+0 \ 00000098 02002DE9 PUSH {R1} \ 0000009C 02002DE9 PUSH {R1} \ 000000A0 02002DE9 PUSH {R1} \ 000000A4 060040E0 SUB R0,R0,R6 \ 000000A8 021040E2 SUB R1,R0,#+2 \ 000000AC 0000A0E3 MOV R0,#+0 \ 000000B0 500100EF SWI +336 4950 for(int i=FontH(clfont);i>0;i-=2) \ 000000B4 DC0495E5 LDR R0,[R5, #+1244] \ 000000B8 ........ _BLF FontH,??FontH??rA \ 000000BC 0090A0E1 MOV R9,R0 \ 000000C0 010059E3 CMP R9,#+1 \ 000000C4 14D08DE2 ADD SP,SP,#+20 \ 000000C8 100000BA BLT ??DrawSoftKeys_2 \ 000000CC ........ LDR R11,??DataTable197 ;; SoftBackgrClr \ 000000D0 06A048E0 SUB R10,R8,R6 4951 DrawRoundedFrame(0,scr_h-FntH-2,scr_w,scr_h-FntH+i,0,0,0,SoftBackgrClr,SoftBackgrClr); \ ??DrawSoftKeys_3: \ 000000D4 0A3089E0 ADD R3,R9,R10 \ 000000D8 0B00A0E1 MOV R0,R11 \ 000000DC 01002DE9 PUSH {R0} \ 000000E0 01002DE9 PUSH {R0} \ 000000E4 0720A0E1 MOV R2,R7 \ 000000E8 02104AE2 SUB R1,R10,#+2 \ 000000EC 029049E2 SUB R9,R9,#+2 \ 000000F0 0000A0E3 MOV R0,#+0 \ 000000F4 01002DE9 PUSH {R0} \ 000000F8 01002DE9 PUSH {R0} \ 000000FC 01002DE9 PUSH {R0} \ 00000100 500100EF SWI +336 \ 00000104 010059E3 CMP R9,#+1 \ 00000108 14D08DE2 ADD SP,SP,#+20 \ 0000010C F0FFFFAA BGE ??DrawSoftKeys_3 4952 #endif 4953 4954 SetFontColor((char*)SoftFontClr,transparent,0); \ ??DrawSoftKeys_2: \ 00000110 ........ LDR R10,??DataTable198 ;; SoftFontClr \ 00000114 D400A0E3 MOV R0,#+212 \ 00000118 8C0D80E3 ORR R0,R0,#0x2300 \ 0000011C 059080E0 ADD R9,R0,R5 \ 00000120 0020A0E3 MOV R2,#+0 \ 00000124 0910A0E1 MOV R1,R9 \ 00000128 0A00A0E1 MOV R0,R10 \ 0000012C ........ _BLF SetFontColor,??SetFontColor??rA 4955 4956 if(sendq_l) \ 00000130 010048E2 SUB R0,R8,#+1 \ 00000134 ........ LDR R8,??DataTable196 ;; menutext \ 00000138 066040E0 SUB R6,R0,R6 \ 0000013C A40295E5 LDR R0,[R5, #+676] \ 00000140 000050E3 CMP R0,#+0 \ 00000144 0A00000A BEQ ??DrawSoftKeys_4 4957 { 4958 sprintf(s,"Q: %d b",sendq_l); \ 00000148 A42295E5 LDR R2,[R5, #+676] \ 0000014C A81088E2 ADD R1,R8,#+168 \ 00000150 0400A0E1 MOV R0,R4 \ 00000154 160000EF SWI +22 4959 PrintField(scr_w,scr_h-1-FntH,s,2,clfont,1); \ 00000158 0100A0E3 MOV R0,#+1 \ 0000015C 01002DE9 PUSH {R0} \ 00000160 DC0495E5 LDR R0,[R5, #+1244] \ 00000164 0230A0E3 MOV R3,#+2 \ 00000168 01002DE9 PUSH {R0} \ 0000016C 0420A0E1 MOV R2,R4 \ 00000170 050000EA B ??DrawSoftKeys_5 4960 // DrawStr(2,scr_h-1-FntH,s,SoftFontClr,clfont,2); 4961 } 4962 else 4963 PrintField(scr_w,scr_h-1-FntH,right,2,clfont,1); \ ??DrawSoftKeys_4: \ 00000174 0100A0E3 MOV R0,#+1 \ 00000178 01002DE9 PUSH {R0} \ 0000017C DC0495E5 LDR R0,[R5, #+1244] \ 00000180 0230A0E3 MOV R3,#+2 \ 00000184 01002DE9 PUSH {R0} \ 00000188 14209DE5 LDR R2,[SP, #+20] \ ??DrawSoftKeys_5: \ 0000018C 0610A0E1 MOV R1,R6 \ 00000190 0700A0E1 MOV R0,R7 \ 00000194 ........ _BLF PrintField,??PrintField??rA \ 00000198 08D08DE2 ADD SP,SP,#+8 4964 4965 DrawStr(2,scr_h-1-FntH,left,(char*)SoftFontClr,clfont,0); \ 0000019C DCB495E5 LDR R11,[R5, #+1244] \ 000001A0 0020A0E3 MOV R2,#+0 \ 000001A4 0910A0E1 MOV R1,R9 \ 000001A8 0A00A0E1 MOV R0,R10 \ 000001AC ........ _BLF SetFontColor,??SetFontColor??rA \ 000001B0 0100A0E3 MOV R0,#+1 \ 000001B4 01002DE9 PUSH {R0} \ 000001B8 00082DE9 PUSH {R11} \ 000001BC 10209DE5 LDR R2,[SP, #+16] \ 000001C0 0030A0E3 MOV R3,#+0 \ 000001C4 0610A0E1 MOV R1,R6 \ 000001C8 0200A0E3 MOV R0,#+2 \ 000001CC ........ _BLF PrintField,??PrintField??rA 4966 4967 GetDateTime(0,&t); \ 000001D0 08108DE2 ADD R1,SP,#+8 \ 000001D4 0000A0E3 MOV R0,#+0 \ 000001D8 B40000EF SWI +180 4968 sprintf(s,"%02d:%02d",t.hour,t.min); \ 000001DC 0930DDE5 LDRB R3,[SP, #+9] \ 000001E0 0820DDE5 LDRB R2,[SP, #+8] \ 000001E4 181088E2 ADD R1,R8,#+24 \ 000001E8 0400A0E1 MOV R0,R4 \ 000001EC 160000EF SWI +22 4969 PrintField(scr_w/2,scr_h-1-FntH,s,1,clfont,1); \ 000001F0 0100A0E3 MOV R0,#+1 \ 000001F4 01002DE9 PUSH {R0} \ 000001F8 DC0495E5 LDR R0,[R5, #+1244] \ 000001FC 0130A0E3 MOV R3,#+1 \ 00000200 01002DE9 PUSH {R0} \ 00000204 0420A0E1 MOV R2,R4 \ 00000208 0610A0E1 MOV R1,R6 \ 0000020C A70F87E0 ADD R0,R7,R7, LSR #+31 \ 00000210 C000A0E1 ASR R0,R0,#+1 \ 00000214 ........ _BLF PrintField,??PrintField??rA 4970 UnlockSched(); \ 00000218 470100EF SWI +327 4971 4972 mfree(s); \ 0000021C 0400A0E1 MOV R0,R4 \ 00000220 150000EF SWI +21 4973 } \ 00000224 20D08DE2 ADD SP,SP,#+32 \ 00000228 F08FBDE8 POP {R4-R11,PC} ;; return 4974 \ In segment CODE, align 4, keep-with-next 4975 void DrawSoftInfo(CLIST *t) 4976 { \ DrawSoftInfo: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 20D04DE2 SUB SP,SP,#+32 4977 TTime tm; 4978 char *s=malloc(32); \ 00000008 2000A0E3 MOV R0,#+32 \ 0000000C 140000EF SWI +20 \ 00000010 0040A0E1 MOV R4,R0 4979 if(!PNG_SOFTKEY) clfont=100+HeadFont; \ 00000014 ........ LDR R0,??DataTable193 ;; PNG_SOFTKEY \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0300001A BNE ??DrawSoftInfo_0 \ 00000024 ........ LDR R0,??DataTable201 ;; HeadFont \ 00000028 000090E5 LDR R0,[R0, #+0] \ 0000002C 640080E2 ADD R0,R0,#+100 \ 00000030 000000EA B ??DrawSoftInfo_1 4980 else clfont=4; \ ??DrawSoftInfo_0: \ 00000034 0400A0E3 MOV R0,#+4 \ ??DrawSoftInfo_1: \ 00000038 ........ LDR R5,??DataTable204 ;; i_rc 4981 4982 int FntH=FontH(clfont)*2; 4983 int scr_w=ScreenW()-1; 4984 int scr_h=ScreenH()-1; 4985 4986 4987 LockSched(); 4988 // DrawRoundedFrame(0,ScreenH()-5-FntH,ScreenW()-1,ScreenH()-1,0,0,0,clrRed,0);//Рамка 4989 //DrawRoundedFrame(1,ScreenH()-5-FntH,ScreenW()-2,ScreenH()-2,0,0,0,0,AddInfoClr);//Фон 4990 4991 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l 4992 if(sendq_l) \ 0000003C ........ LDR R7,??DataTable196 ;; menutext \ 00000040 DC0485E5 STR R0,[R5, #+1244] \ 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 6C0495E5 LDR R0,[R5, #+1132] \ 00000068 701495E5 LDR R1,[R5, #+1136] \ 0000006C A42295E5 LDR R2,[R5, #+676] \ 00000070 000052E3 CMP R2,#+0 \ 00000074 0500000A BEQ ??DrawSoftInfo_2 4993 sprintf(s, "[T:%db/Q:%db]\n",RX+TX,sendq_l); \ 00000078 A43295E5 LDR R3,[R5, #+676] \ 0000007C 002081E0 ADD R2,R1,R0 \ 00000080 C41087E2 ADD R1,R7,#+196 \ 00000084 0400A0E1 MOV R0,R4 \ 00000088 160000EF SWI +22 \ 0000008C 030000EA B ??DrawSoftInfo_3 4994 else 4995 sprintf(s, "[T:%db]\n",RX+TX); \ ??DrawSoftInfo_2: \ 00000090 002081E0 ADD R2,R1,R0 \ 00000094 B01087E2 ADD R1,R7,#+176 \ 00000098 0400A0E1 MOV R0,R4 \ 0000009C 160000EF SWI +22 4996 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 DC0495E5 LDR R0,[R5, #+1244] \ 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 4997 4998 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] 4999 DrawRoundedFrame(0,scr_h-1-FntH-2,scr_w-1,scr_h-1,0,0,0,clrBlack,clrBlack); \ 000000E8 C800A0E3 MOV R0,#+200 \ 000000EC 8C0D80E3 ORR R0,R0,#0x2300 \ 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 5000 5001 if(shot_soft!=2) \ 00000120 20009DE5 LDR R0,[SP, #+32] \ 00000124 0A9040E0 SUB R9,R0,R10 \ 00000128 F40495E5 LDR R0,[R5, #+1268] \ 0000012C 028049E2 SUB R8,R9,#+2 \ 00000130 020050E3 CMP R0,#+2 \ 00000134 1CD08DE2 ADD SP,SP,#+28 \ 00000138 1B00000A BEQ ??DrawSoftInfo_4 5002 { 5003 for(int i=FontH(clfont)*2+2;i>=0;i-=2) \ 0000013C DC0495E5 LDR R0,[R5, #+1244] \ 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,??DataTable197 ;; SoftBackgrClr 5004 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 5005 5006 DoScreen3(FntH+4); \ ??DrawSoftInfo_5: \ 0000018C 04008AE2 ADD R0,R10,#+4 \ 00000190 ........ BL DoScreen3 5007 shot_soft++; \ 00000194 F40495E5 LDR R0,[R5, #+1268] \ 00000198 010080E2 ADD R0,R0,#+1 \ 0000019C F40485E5 STR R0,[R5, #+1268] 5008 SMART_REDRAW(); \ 000001A0 ........ BL SMART_REDRAW 5009 return; \ 000001A4 24D08DE2 ADD SP,SP,#+36 \ 000001A8 F08FBDE8 POP {R4-R11,PC} 5010 } 5011 else 5012 DrwImage(&screen3,0,scr_h-FntH-2); \ ??DrawSoftInfo_4: \ 000001AC 0820A0E1 MOV R2,R8 \ 000001B0 0010A0E3 MOV R1,#+0 \ 000001B4 9C0F85E2 ADD R0,R5,#+624 \ 000001B8 ........ BL DrwImage 5013 5014 SetFontColor((char*)SoftFontClr,transparent,0); \ 000001BC ........ LDR R0,??DataTable198 ;; SoftFontClr \ 000001C0 D410A0E3 MOV R1,#+212 \ 000001C4 8C1D81E3 ORR R1,R1,#0x2300 \ 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 DC0495E5 LDR R0,[R5, #+1244] \ 000001E4 0230A0E3 MOV R3,#+2 \ 000001E8 01002DE9 PUSH {R0} \ 000001EC 0420A0E1 MOV R2,R4 \ 000001F0 0B10A0E1 MOV R1,R11 5015 // DrawStr(2,scr_h-1-FntH,s,SoftFontClr,clfont,0); 5016 PrintField(scr_w-3,scr_h-1-FntH,s,2,clfont,1);//left align 5017 5018 GetDateTime(0,&tm); 5019 sprintf(s,"%02d:%02d",tm.hour,tm.min); 5020 PrintField(scr_w-3,scr_h-1-(FntH/2),s,2,clfont,1);//left align 5021 // PrintField(scr_w/2,scr_h-1-FntH,s,1,clfont,1); 5022 5023 //void DrawText(int x,int y,int x2,char*s,char *color,int font,int align,int isScroll) 5024 DrwImage(icons[GetIconIndex(t)],2,scr_h-FntH); 5025 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 181087E2 ADD R1,R7,#+24 \ 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 DC0495E5 LDR R0,[R5, #+1244] \ 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 080090E5 LDR R0,[R0, #+8] \ 0000026C ........ BL DrwImage \ 00000270 30009DE5 LDR R0,[SP, #+48] \ 00000274 AC0090E5 LDR R0,[R0, #+172] \ 00000278 10D08DE2 ADD SP,SP,#+16 \ 0000027C 000050E3 CMP R0,#+0 \ 00000280 01908012 ADDNE R9,R0,#+1 \ 00000284 20009DE5 LDR R0,[SP, #+32] \ 00000288 BC908702 ADDEQ R9,R7,#+188 \ 0000028C ........ BL GetIconIndex \ 00000290 DC2495E5 LDR R2,[R5, #+1244] \ 00000294 000185E0 ADD R0,R5,R0, LSL #+2 \ 00000298 00208DE5 STR R2,[SP, #+0] \ 0000029C 080090E5 LDR R0,[R0, #+8] \ 000002A0 08109DE5 LDR R1,[SP, #+8] \ 000002A4 0000D0E5 LDRB 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 5026 5027 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 A80390E5 LDR R0,[R0, #+936] \ 00000330 ........ BL DrwImage 5028 SetScrollEdgeDelay(1); \ 00000334 0100A0E3 MOV R0,#+1 \ 00000338 ........ _BLF SetScrollEdgeDelay,??SetScrollEdgeDelay??rA 5029 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 A80090E5 LDR R0,[R0, #+168] \ 00000348 18D08DE2 ADD SP,SP,#+24 \ 0000034C DC9495E5 LDR R9,[R5, #+1244] \ 00000350 08109DE5 LDR R1,[SP, #+8] \ 00000354 000050E3 CMP R0,#+0 \ 00000358 0070A011 MOVNE R7,R0 \ 0000035C 20009DE5 LDR R0,[SP, #+32] \ 00000360 98708702 ADDEQ R7,R7,#+152 \ 00000364 B605D0E1 LDRH R0,[R0, #+86] \ 00000368 000185E0 ADD R0,R5,R0, LSL #+2 \ 0000036C A80390E5 LDR R0,[R0, #+936] \ 00000370 0000D0E5 LDRB 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 5030 // DrawStr(2,scr_h-1-(FntH/2),t->xtext2,SoftFontClr,clfont,0); 5031 //DrawStr(2,scr_h-1-FntH,t->xtext,SoftFontClr,clfont,0); 5032 5033 UnlockSched(); \ 000003BC 470100EF SWI +327 5034 5035 mfree(s); \ 000003C0 0400A0E1 MOV R0,R4 \ 000003C4 150000EF SWI +21 5036 } \ 000003C8 18D08DE2 ADD SP,SP,#+24 \ 000003CC 24D08DE2 ADD SP,SP,#+36 \ 000003D0 F08FBDE8 POP {R4-R11,PC} ;; return \ ??DrawSoftInfo_7: \ 000003D4 ........ DC32 FontInfoClr 5037 5038 int shot_header=0; 5039 IMGHDR screen4={0,0,8,""}; \ In segment CODE, align 4, keep-with-next 5040 void DoScreen4(int h) 5041 { \ DoScreen4: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 5042 //int SCREENSIZE = ScreenH()*ScreenW(); 5043 int HSIZE = (h+8)*ScreenW(); 5044 int ScrH=h+2; 5045 int ScrW=ScreenW(); 5046 char *ms=RamScreenBuffer(); 5047 screen4.w=ScrW; \ 00000004 ........ LDR R8,??DataTable204 ;; i_rc \ 00000008 0050A0E1 MOV R5,R0 \ 0000000C 084085E2 ADD R4,R5,#+8 \ 00000010 888100EF SWI +33160 \ 00000014 900404E0 MUL R4,R0,R4 \ 00000018 025085E2 ADD R5,R5,#+2 \ 0000001C 888100EF SWI +33160 \ 00000020 0060A0E1 MOV R6,R0 \ 00000024 E08000EF SWI +32992 \ 00000028 0070A0E1 MOV R7,R0 5048 screen4.h=ScrH; 5049 screen4.bitmap=malloc(ScrW*ScrH*2); \ 0000002C 950600E0 MUL R0,R5,R6 \ 00000030 7862C8E5 STRB R6,[R8, #+632] \ 00000034 7952C8E5 STRB R5,[R8, #+633] \ 00000038 8050A0E1 LSL R5,R0,#+1 \ 0000003C 9F6FA0E3 MOV R6,#+636 \ 00000040 0500A0E1 MOV R0,R5 \ 00000044 140000EF SWI +20 \ 00000048 080086E7 STR R0,[R6, +R8] 5050 ms+=(HSIZE*2); 5051 memcpy(screen4.bitmap, ms, ScrW*ScrH*2); \ 0000004C 0520A0E1 MOV R2,R5 \ 00000050 841087E0 ADD R1,R7,R4, LSL #+1 \ 00000054 1E0100EF SWI +286 5052 } \ 00000058 F081BDE8 POP {R4-R8,PC} ;; return 5053 \ In segment CODE, align 4, keep-with-next 5054 void DrawHeader() 5055 { \ DrawHeader: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 0CD04DE2 SUB SP,SP,#+12 5056 SetCanvasFlag(1); \ 00000008 0100A0E3 MOV R0,#+1 \ 0000000C ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 5057 int scr_w=ScreenW()-1; \ 00000010 888100EF SWI +33160 \ 00000014 014040E2 SUB R4,R0,#+1 5058 int scr_h=ScreenH()-1; \ 00000018 898100EF SWI +33161 5059 char *s=malloc(128); \ 0000001C 8000A0E3 MOV R0,#+128 \ 00000020 140000EF SWI +20 \ 00000024 0050A0E1 MOV R5,R0 5060 char *ss=malloc(128); \ 00000028 8000A0E3 MOV R0,#+128 \ 0000002C 140000EF SWI +20 \ 00000030 0060A0E1 MOV R6,R0 5061 5062 if(!PNG_HEADER)clfont=100+HeadFont; \ 00000034 ........ LDR R0,??DataTable200 ;; PNG_HEADER \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 0300001A BNE ??DrawHeader_1 \ 00000044 ........ LDR R0,??DataTable201 ;; HeadFont \ 00000048 000090E5 LDR R0,[R0, #+0] \ 0000004C 640080E2 ADD R0,R0,#+100 \ 00000050 000000EA B ??DrawHeader_2 5063 else clfont=4; \ ??DrawHeader_1: \ 00000054 0400A0E3 MOV R0,#+4 \ ??DrawHeader_2: \ 00000058 ........ LDR R7,??DataTable204 ;; i_rc \ 0000005C DC0487E5 STR R0,[R7, #+1244] 5064 // char clrRed[]={0xFF,0x00,0x00,0x15}; 5065 if(icons[IS_ONLINE]) \ 00000060 340097E5 LDR R0,[R7, #+52] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 DC0497E5 LDR R0,[R7, #+1244] \ 0000006C 0600000A BEQ ??DrawHeader_3 5066 hy=(icons[IS_ONLINE]->h > FontH(clfont)) ? (icons[IS_ONLINE]->h) : (FontH(clfont)); \ 00000070 ........ _BLF FontH,??FontH??rA \ 00000074 341097E5 LDR R1,[R7, #+52] \ 00000078 0120D1E5 LDRB R2,[R1, #+1] \ 0000007C 020050E1 CMP R0,R2 \ 00000080 0200A0B1 MOVLT R0,R2 \ 00000084 010000BA BLT ??DrawHeader_4 \ 00000088 DC0497E5 LDR R0,[R7, #+1244] 5067 else 5068 hy=FontH(clfont); \ ??DrawHeader_3: \ 0000008C ........ _BLF FontH,??FontH??rA \ ??DrawHeader_4: \ 00000090 D80487E5 STR R0,[R7, #+1240] 5069 5070 hy+=YDISP; 5071 LockSched(); \ 00000094 460100EF SWI +326 5072 5073 SetFontColor((char*)HeadFontClr,transparent,0); \ 00000098 D400A0E3 MOV R0,#+212 \ 0000009C 8C0D80E3 ORR R0,R0,#0x2300 \ 000000A0 07A080E0 ADD R10,R0,R7 \ 000000A4 94059FE5 LDR R0,??DrawHeader_5+0xC ;; HeadFontClr \ 000000A8 0020A0E3 MOV R2,#+0 \ 000000AC 0A10A0E1 MOV R1,R10 \ 000000B0 ........ _BLF SetFontColor,??SetFontColor??rA 5074 5075 #ifdef ELKA 5076 if(shot_header!=2) 5077 { 5078 DrawRoundedFrame(0,YDISP,scr_w,hy+2,0,0,0,clrBlack,clrBlack); 5079 for(int i=hy-YDISP;i>0;i-=2) 5080 DrawRoundedFrame(0,YDISP,scr_w,hy-i+2,0,0,0,HeadBackgrClr,HeadBackgrClr); 5081 DoScreen4(hy-YDISP); 5082 shot_header++; 5083 SMART_REDRAW(); 5084 return; 5085 } 5086 else 5087 DrwImage(&screen4,0,YDISP); 5088 #else 5089 DrawRoundedFrame(0,YDISP,scr_w,hy+2,0,0,0,clrBlack,clrBlack); \ 000000B4 C800A0E3 MOV R0,#+200 \ 000000B8 8C0D80E3 ORR R0,R0,#0x2300 \ 000000BC 070080E0 ADD R0,R0,R7 \ 000000C0 0010A0E1 MOV R1,R0 \ 000000C4 02002DE9 PUSH {R1} \ 000000C8 01002DE9 PUSH {R0} \ 000000CC 0420A0E1 MOV R2,R4 \ 000000D0 0010A0E3 MOV R1,#+0 \ 000000D4 0000A0E3 MOV R0,#+0 \ 000000D8 01002DE9 PUSH {R0} \ 000000DC 01002DE9 PUSH {R0} \ 000000E0 01002DE9 PUSH {R0} \ 000000E4 D80497E5 LDR R0,[R7, #+1240] \ 000000E8 023080E2 ADD R3,R0,#+2 \ 000000EC 0000A0E3 MOV R0,#+0 \ 000000F0 500100EF SWI +336 5090 for(int i=hy-YDISP;i>0;i-=2) \ 000000F4 D88497E5 LDR R8,[R7, #+1240] \ 000000F8 14D08DE2 ADD SP,SP,#+20 \ 000000FC 010058E3 CMP R8,#+1 \ 00000100 120000BA BLT ??DrawHeader_6 \ 00000104 38959FE5 LDR R9,??DrawHeader_5+0x10 ;; HeadBackgrClr 5091 DrawRoundedFrame(0,YDISP,scr_w,hy-i+2,0,0,0,HeadBackgrClr,HeadBackgrClr); \ ??DrawHeader_7: \ 00000108 0900A0E1 MOV R0,R9 \ 0000010C 01002DE9 PUSH {R0} \ 00000110 01002DE9 PUSH {R0} \ 00000114 0420A0E1 MOV R2,R4 \ 00000118 0010A0E3 MOV R1,#+0 \ 0000011C 0000A0E3 MOV R0,#+0 \ 00000120 01002DE9 PUSH {R0} \ 00000124 01002DE9 PUSH {R0} \ 00000128 01002DE9 PUSH {R0} \ 0000012C D80497E5 LDR R0,[R7, #+1240] \ 00000130 080040E0 SUB R0,R0,R8 \ 00000134 023080E2 ADD R3,R0,#+2 \ 00000138 0000A0E3 MOV R0,#+0 \ 0000013C 500100EF SWI +336 \ 00000140 028048E2 SUB R8,R8,#+2 \ 00000144 010058E3 CMP R8,#+1 \ 00000148 14D08DE2 ADD SP,SP,#+20 \ 0000014C EDFFFFAA BGE ??DrawHeader_7 5092 #endif 5093 5094 #ifdef DEBUG1 5095 return; 5096 #else 5097 int x=1; 5098 int icon; 5099 if(total_unread) icon = IS_MSG; \ ??DrawHeader_6: \ 00000150 780497E5 LDR R0,[R7, #+1144] \ 00000154 0180A0E3 MOV R8,#+1 \ 00000158 000050E3 CMP R0,#+0 \ 0000015C 0D00A013 MOVNE R0,#+13 \ 00000160 0500001A BNE ??DrawHeader_8 5100 else 5101 { 5102 switch(connect_state) \ 00000164 5C0497E5 LDR R0,[R7, #+1116] \ 00000168 000050E3 CMP R0,#+0 \ 0000016C 0200000A BEQ ??DrawHeader_8 \ 00000170 030050E2 SUBS R0,R0,#+3 5103 { 5104 case 0: icon=IS_OFFLINE; break; 5105 case 3: icon=CurrentStatus; break; \ 00000174 74039705 LDREQ R0,[R7, #+884] 5106 default: icon=IS_UNKNOWN; break; \ 00000178 0E00A013 MOVNE R0,#+14 5107 } 5108 } 5109 5110 if(icons[icon] && HEAD_STATUS) \ ??DrawHeader_8: \ 0000017C 009187E0 ADD R9,R7,R0, LSL #+2 \ 00000180 080099E5 LDR R0,[R9, #+8] \ 00000184 000050E3 CMP R0,#+0 \ 00000188 0900000A BEQ ??DrawHeader_9 \ 0000018C B4149FE5 LDR R1,??DrawHeader_5+0x14 ;; HEAD_STATUS \ 00000190 001091E5 LDR R1,[R1, #+0] \ 00000194 000051E3 CMP R1,#+0 \ 00000198 0500000A BEQ ??DrawHeader_9 5111 { 5112 DrwImage(icons[icon],x,YDISP+1); \ 0000019C 0120A0E3 MOV R2,#+1 \ 000001A0 0210A0E1 MOV R1,R2 \ 000001A4 ........ BL DrwImage 5113 x+=icons[icon]->w+2;//GetImgWidth(NumStatusToIconBar+icon)+2;// + смещение по х \ 000001A8 080099E5 LDR R0,[R9, #+8] \ 000001AC 0000D0E5 LDRB R0,[R0, #+0] \ 000001B0 038080E2 ADD R8,R0,#+3 5114 } 5115 5116 if(total_unread && isShowUnread) \ ??DrawHeader_9: \ 000001B4 782497E5 LDR R2,[R7, #+1144] \ 000001B8 8C949FE5 LDR R9,??DrawHeader_5+0x18 ;; `?` \ 000001BC 000052E3 CMP R2,#+0 \ 000001C0 1C00000A BEQ ??DrawHeader_10 \ 000001C4 84049FE5 LDR R0,??DrawHeader_5+0x1C ;; isShowUnread \ 000001C8 000090E5 LDR R0,[R0, #+0] \ 000001CC 000050E3 CMP R0,#+0 \ 000001D0 1800000A BEQ ??DrawHeader_10 5117 { 5118 sprintf(s,"%d/%d",total_unread,total_unread2); \ 000001D4 CC3297E5 LDR R3,[R7, #+716] \ 000001D8 0C1089E2 ADD R1,R9,#+12 \ 000001DC 0500A0E1 MOV R0,R5 \ 000001E0 160000EF SWI +22 5119 DrawStr(x,YDISP+1,s,clrWhite,clfont,0); \ 000001E4 DCB497E5 LDR R11,[R7, #+1244] \ 000001E8 0020A0E3 MOV R2,#+0 \ 000001EC 0A10A0E1 MOV R1,R10 \ 000001F0 CC00A0E3 MOV R0,#+204 \ 000001F4 8C0D80E3 ORR R0,R0,#0x2300 \ 000001F8 070080E0 ADD R0,R0,R7 \ 000001FC ........ _BLF SetFontColor,??SetFontColor??rA \ 00000200 0100A0E3 MOV R0,#+1 \ 00000204 01002DE9 PUSH {R0} \ 00000208 00082DE9 PUSH {R11} \ 0000020C 0030A0E3 MOV R3,#+0 \ 00000210 0520A0E1 MOV R2,R5 \ 00000214 0110A0E3 MOV R1,#+1 \ 00000218 0800A0E1 MOV R0,R8 \ 0000021C ........ _BLF PrintField,??PrintField??rA 5120 x+=GetWidth(x,YDISP+1)+1; \ 00000220 0110A0E3 MOV R1,#+1 \ 00000224 0800A0E1 MOV R0,R8 \ 00000228 ........ _BLF GetWidth,??GetWidth??rA \ 0000022C 010080E2 ADD R0,R0,#+1 \ 00000230 088080E0 ADD R8,R0,R8 \ 00000234 08D08DE2 ADD SP,SP,#+8 5121 } 5122 5123 if(CurrentXStatus!=0 && HEAD_XSTATUS)//если есть хстатус \ ??DrawHeader_10: \ 00000238 780397E5 LDR R0,[R7, #+888] \ 0000023C 000050E3 CMP R0,#+0 \ 00000240 0F00000A BEQ ??DrawHeader_11 \ 00000244 08149FE5 LDR R1,??DrawHeader_5+0x20 ;; HEAD_XSTATUS \ 00000248 001091E5 LDR R1,[R1, #+0] \ 0000024C 000051E3 CMP R1,#+0 \ 00000250 0A00000A BEQ ??DrawHeader_12 5124 { 5125 // DYNPNGICONLIST *xs=GetXSByItem(CurrentXStatus); 5126 // DrwImage(xs->img,x,YDISP+1); 5127 // x+=xs->img->w+1; 5128 DrwImage(XStatusImg[CurrentXStatus],x,YDISP+1); \ 00000254 0120A0E3 MOV R2,#+1 \ 00000258 0810A0E1 MOV R1,R8 \ 0000025C 000187E0 ADD R0,R7,R0, LSL #+2 \ 00000260 A80390E5 LDR R0,[R0, #+936] \ 00000264 ........ BL DrwImage 5129 x+=XStatusImg[CurrentXStatus]->w+1; \ 00000268 780397E5 LDR R0,[R7, #+888] \ 0000026C 000187E0 ADD R0,R7,R0, LSL #+2 \ 00000270 A80390E5 LDR R0,[R0, #+936] \ 00000274 0000D0E5 LDRB R0,[R0, #+0] \ 00000278 010080E2 ADD R0,R0,#+1 \ 0000027C 088080E0 ADD R8,R0,R8 5130 } 5131 5132 int priv=0; \ ??DrawHeader_12: \ 00000280 0000A0E3 MOV R0,#+0 5133 char A_s[]="[A:%s]"; \ ??DrawHeader_11: \ 00000284 080499E8 LDM R9,{R3,R10} \ 00000288 04108DE2 ADD R1,SP,#+4 \ 0000028C 080481E8 STM R1,{R3,R10} 5134 // char t[32]; 5135 5136 switch(CurrentPrivateStatus) \ 00000290 481497E5 LDR R1,[R7, #+1096] \ 00000294 040051E3 CMP R1,#+4 \ 00000298 0D00008A BHI ??DrawHeader_13 \ 0000029C 012F8FE2 ADR R2,??DrawHeader_0 \ 000002A0 0120D2E7 LDRB R2,[R2, R1] \ 000002A4 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??DrawHeader_0: \ 000002A8 01030507 DC8 +1,+3,+5,+7 \ 000002AC 09000000 DC8 +9,+0,+0,+0 5137 { 5138 case 0: priv=ICON_ALL_CAN_SEE; break; \ ??DrawHeader_14: \ 000002B0 1700A0E3 MOV R0,#+23 \ 000002B4 060000EA B ??DrawHeader_13 5139 case 1: priv=ICON_NOBODY_CAN_SEE;break; \ ??DrawHeader_15: \ 000002B8 1B00A0E3 MOV R0,#+27 \ 000002BC 040000EA B ??DrawHeader_13 5140 case 2: priv=ICON_VISLIST_CAN_SEE; break; \ ??DrawHeader_16: \ 000002C0 1800A0E3 MOV R0,#+24 \ 000002C4 020000EA B ??DrawHeader_13 5141 case 3: priv=ICON_INVISLIST_CANNOT_SEE; break; \ ??DrawHeader_17: \ 000002C8 1900A0E3 MOV R0,#+25 \ 000002CC 000000EA B ??DrawHeader_13 5142 case 4: priv=ICON_CONTACTLIST_CAN_SEE; break; \ ??DrawHeader_18: \ 000002D0 1A00A0E3 MOV R0,#+26 5143 } 5144 5145 if(icons[priv] && HEAD_PRIVATE) \ ??DrawHeader_13: \ 000002D4 00A187E0 ADD R10,R7,R0, LSL #+2 \ 000002D8 08009AE5 LDR R0,[R10, #+8] \ 000002DC 000050E3 CMP R0,#+0 \ 000002E0 0A00000A BEQ ??DrawHeader_19 \ 000002E4 6C139FE5 LDR R1,??DrawHeader_5+0x24 ;; HEAD_PRIVATE \ 000002E8 001091E5 LDR R1,[R1, #+0] \ 000002EC 000051E3 CMP R1,#+0 \ 000002F0 0600000A BEQ ??DrawHeader_19 5146 { 5147 DrwImage(icons[priv],x,YDISP+1); \ 000002F4 0120A0E3 MOV R2,#+1 \ 000002F8 0810A0E1 MOV R1,R8 \ 000002FC ........ BL DrwImage 5148 x+=icons[priv]->w+2; \ 00000300 08009AE5 LDR R0,[R10, #+8] \ 00000304 0000D0E5 LDRB R0,[R0, #+0] \ 00000308 020080E2 ADD R0,R0,#+2 \ 0000030C 088080E0 ADD R8,R0,R8 5149 } 5150 5151 5152 if(!HEAD_PING) \ ??DrawHeader_19: \ 00000310 44139FE5 LDR R1,??DrawHeader_5+0x28 ;; HEAD_PING \ 00000314 001091E5 LDR R1,[R1, #+0] \ 00000318 00108DE5 STR R1,[SP, #+0] \ 0000031C 000051E3 CMP R1,#+0 \ 00000320 1B00001A BNE ??DrawHeader_20 5153 { 5154 int ping=0; 5155 if(curping < 3) ping=1; \ 00000324 A00297E5 LDR R0,[R7, #+672] \ 00000328 030050E3 CMP R0,#+3 \ 0000032C 0C0000BA BLT ??DrawHeader_21 5156 if(curping > 3 && curping < 10) ping=2; \ 00000330 040050E3 CMP R0,#+4 \ 00000334 020000BA BLT ??DrawHeader_22 \ 00000338 0A0050E3 CMP R0,#+10 5157 if(curping > 10 && curping < 30) ping=3; 5158 if(curping > 30) ping=4; 5159 5160 switch(ping) 5161 { 5162 case 1: ping=ICON_PING1; break; 5163 case 2: ping=ICON_PING2; break; \ 0000033C 1D00A0B3 MOVLT R0,#+29 \ 00000340 080000BA BLT ??DrawHeader_23 \ ??DrawHeader_22: \ 00000344 0B0050E3 CMP R0,#+11 \ 00000348 020000BA BLT ??DrawHeader_24 \ 0000034C 1E0050E3 CMP R0,#+30 5164 case 3: ping=ICON_PING3; break; \ 00000350 1E00A0B3 MOVLT R0,#+30 \ 00000354 030000BA BLT ??DrawHeader_23 \ ??DrawHeader_24: \ 00000358 1F0050E3 CMP R0,#+31 5165 case 4: ping=ICON_PING4; break; \ 0000035C 1F00A0A3 MOVGE R0,#+31 \ 00000360 000000AA BGE ??DrawHeader_23 \ ??DrawHeader_21: \ 00000364 1C00A0E3 MOV R0,#+28 5166 default: ping=ICON_PING1; break; 5167 } 5168 5169 if(icons[ping] && !HEAD_PING) \ ??DrawHeader_23: \ 00000368 00A187E0 ADD R10,R7,R0, LSL #+2 \ 0000036C 08009AE5 LDR R0,[R10, #+8] \ 00000370 000050E3 CMP R0,#+0 \ 00000374 0600000A BEQ ??DrawHeader_20 5170 { 5171 DrwImage(icons[ping],x,YDISP+1); \ 00000378 0120A0E3 MOV R2,#+1 \ 0000037C 0810A0E1 MOV R1,R8 \ 00000380 ........ BL DrwImage 5172 x+=icons[ping]->w+1; \ 00000384 08009AE5 LDR R0,[R10, #+8] \ 00000388 0000D0E5 LDRB R0,[R0, #+0] \ 0000038C 010080E2 ADD R0,R0,#+1 \ 00000390 088080E0 ADD R8,R0,R8 5173 } 5174 } 5175 5176 int cap; 5177 int x2=scr_w; 5178 #ifdef ELKA 5179 int y = YDISP-1; 5180 #else 5181 int y = YDISP+1; 5182 #endif 5183 //x2=scr_w-GetWidth(scr_w,YDISP+1); 5184 if(strlen(ContactT9Key)) \ ??DrawHeader_20: \ 00000394 D000A0E3 MOV R0,#+208 \ 00000398 780D80E3 ORR R0,R0,#0x1E00 \ 0000039C 07A080E0 ADD R10,R0,R7 \ 000003A0 65BEA0E3 MOV R11,#+1616 \ 000003A4 07008BE0 ADD R0,R11,R7 \ 000003A8 1B0000EF SWI +27 \ 000003AC 000050E3 CMP R0,#+0 \ 000003B0 1300000A BEQ ??DrawHeader_25 5185 { 5186 sprintf(s,key_clm_hdr_text); \ 000003B4 341089E2 ADD R1,R9,#+52 \ 000003B8 0500A0E1 MOV R0,R5 \ 000003BC 160000EF SWI +22 5187 strcat(s,ContactT9Key); \ 000003C0 07108BE0 ADD R1,R11,R7 \ 000003C4 0500A0E1 MOV R0,R5 \ 000003C8 170000EF SWI +23 5188 strcpy(clmenu_sk_r,key_clmenu_sk_r); \ 000003CC 081089E2 ADD R1,R9,#+8 \ 000003D0 0A00A0E1 MOV R0,R10 \ 000003D4 1A0000EF SWI +26 5189 PrintField(scr_w,y,s,2,clfont,1); \ 000003D8 0100A0E3 MOV R0,#+1 \ 000003DC 01002DE9 PUSH {R0} \ 000003E0 DC0497E5 LDR R0,[R7, #+1244] \ 000003E4 0230A0E3 MOV R3,#+2 \ 000003E8 01002DE9 PUSH {R0} \ 000003EC 0520A0E1 MOV R2,R5 \ 000003F0 0110A0E3 MOV R1,#+1 \ 000003F4 0400A0E1 MOV R0,R4 \ 000003F8 ........ _BLF PrintField,??PrintField??rA \ 000003FC 08D08DE2 ADD SP,SP,#+8 \ 00000400 850000EA B ??DrawHeader_26 5190 } 5191 else 5192 if(on_off_timer > 0 && strlen(on_off_buf)!=0)//если кто то подключился/отключился \ ??DrawHeader_25: \ 00000404 8C0497E5 LDR R0,[R7, #+1164] \ 00000408 010050E3 CMP R0,#+1 \ 0000040C 160000BA BLT ??DrawHeader_27 \ 00000410 E000A0E3 MOV R0,#+224 \ 00000414 780D80E3 ORR R0,R0,#0x1E00 \ 00000418 07B080E0 ADD R11,R0,R7 \ 0000041C 0B00A0E1 MOV R0,R11 \ 00000420 1B0000EF SWI +27 \ 00000424 000050E3 CMP R0,#+0 \ 00000428 0F00000A BEQ ??DrawHeader_27 5193 { 5194 SetScrollEdgeDelay(1); \ 0000042C 0100A0E3 MOV R0,#+1 \ 00000430 ........ _BLF SetScrollEdgeDelay,??SetScrollEdgeDelay??rA 5195 PrintText(scr_w,y,on_off_buf,2,clfont,1,350,1,0,scr_w-x-2); \ 00000434 080044E0 SUB R0,R4,R8 \ 00000438 020040E2 SUB R0,R0,#+2 \ 0000043C 01002DE9 PUSH {R0} \ 00000440 0230A0E3 MOV R3,#+2 \ 00000444 0B20A0E1 MOV R2,R11 \ 00000448 0000A0E3 MOV R0,#+0 \ 0000044C 01002DE9 PUSH {R0} \ 00000450 0100A0E3 MOV R0,#+1 \ 00000454 01002DE9 PUSH {R0} \ 00000458 5E00A0E3 MOV R0,#+94 \ 0000045C 400F80E3 ORR R0,R0,#0x100 \ 00000460 01002DE9 PUSH {R0} \ 00000464 0100A0E3 MOV R0,#+1 \ 00000468 640000EA B ??DrawHeader_28 5196 } 5197 else 5198 { 5199 x2=scr_w; 5200 cap=*RamCap(); \ ??DrawHeader_27: \ 0000046C C88000EF SWI +32968 \ 00000470 B020D0E1 LDRH R2,[R0, #+0] 5201 sprintf(s,"[%d%%]",cap); \ 00000474 141089E2 ADD R1,R9,#+20 \ 00000478 0500A0E1 MOV R0,R5 \ 0000047C 160000EF SWI +22 5202 PrintField(scr_w,y,s,2,clfont,1);//capacity in header \ 00000480 0100A0E3 MOV R0,#+1 \ 00000484 01002DE9 PUSH {R0} \ 00000488 DC0497E5 LDR R0,[R7, #+1244] \ 0000048C 0230A0E3 MOV R3,#+2 \ 00000490 01002DE9 PUSH {R0} \ 00000494 0520A0E1 MOV R2,R5 \ 00000498 0110A0E3 MOV R1,#+1 \ 0000049C 0400A0E1 MOV R0,R4 \ 000004A0 ........ _BLF PrintField,??PrintField??rA 5203 5204 x2=scr_w-GetWidth(scr_w,y); \ 000004A4 0110A0E3 MOV R1,#+1 \ 000004A8 0400A0E1 MOV R0,R4 \ 000004AC ........ _BLF GetWidth,??GetWidth??rA \ 000004B0 004044E0 SUB R4,R4,R0 5205 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ 000004B4 401089E2 ADD R1,R9,#+64 \ 000004B8 0A00A0E1 MOV R0,R10 \ 000004BC 1A0000EF SWI +26 5206 Get_Online_total(); \ 000004C0 ........ BL Get_Online_total 5207 5208 strcpy(s,""); \ 000004C4 5A1F8FE2 ADR R1,??DrawHeader_5 ;; "" \ 000004C8 0500A0E1 MOV R0,R5 \ 000004CC 1A0000EF SWI +26 5209 if(HEAD_PING==1) sprintf(s,"[%d с.]",curping); \ 000004D0 08009DE5 LDR R0,[SP, #+8] \ 000004D4 08D08DE2 ADD SP,SP,#+8 \ 000004D8 010050E3 CMP R0,#+1 \ 000004DC 0300001A BNE ??DrawHeader_29 \ 000004E0 A02297E5 LDR R2,[R7, #+672] \ 000004E4 1C1089E2 ADD R1,R9,#+28 \ 000004E8 0500A0E1 MOV R0,R5 \ 000004EC 160000EF SWI +22 5210 if(away_m && isShowA) \ ??DrawHeader_29: \ 000004F0 840397E5 LDR R0,[R7, #+900] \ 000004F4 000050E3 CMP R0,#+0 \ 000004F8 0C00000A BEQ ??DrawHeader_30 \ 000004FC 5C019FE5 LDR R0,??DrawHeader_5+0x2C ;; isShowA \ 00000500 000090E5 LDR R0,[R0, #+0] \ 00000504 000050E3 CMP R0,#+0 \ 00000508 0800000A BEQ ??DrawHeader_30 5211 { 5212 sprintf(ss,A_s,away_msg_time_dace); \ 0000050C A000A0E3 MOV R0,#+160 \ 00000510 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000514 072080E0 ADD R2,R0,R7 \ 00000518 04108DE2 ADD R1,SP,#+4 \ 0000051C 0600A0E1 MOV R0,R6 \ 00000520 160000EF SWI +22 5213 strcat(s,ss); \ 00000524 0610A0E1 MOV R1,R6 \ 00000528 0500A0E1 MOV R0,R5 \ 0000052C 170000EF SWI +23 5214 } 5215 if(Is_Vibra_Enabled && isShowV) strcat(s,"[V]") ; \ ??DrawHeader_30: \ 00000530 E40297E5 LDR R0,[R7, #+740] \ 00000534 000050E3 CMP R0,#+0 \ 00000538 0600000A BEQ ??DrawHeader_31 \ 0000053C 20019FE5 LDR R0,??DrawHeader_5+0x30 ;; isShowV \ 00000540 000090E5 LDR R0,[R0, #+0] \ 00000544 000050E3 CMP R0,#+0 \ 00000548 0200000A BEQ ??DrawHeader_31 \ 0000054C 391F8FE2 ADR R1,??DrawHeader_5+0x4 ;; "[V]" \ 00000550 0500A0E1 MOV R0,R5 \ 00000554 170000EF SWI +23 5216 if(Is_Sounds_Enabled && isShowS) strcat(s,"[S]") ; \ ??DrawHeader_31: \ 00000558 3C0497E5 LDR R0,[R7, #+1084] \ 0000055C 000050E3 CMP R0,#+0 \ 00000560 0600000A BEQ ??DrawHeader_32 \ 00000564 FC009FE5 LDR R0,??DrawHeader_5+0x34 ;; isShowS \ 00000568 000090E5 LDR R0,[R0, #+0] \ 0000056C 000050E3 CMP R0,#+0 \ 00000570 0200000A BEQ ??DrawHeader_32 \ 00000574 301F8FE2 ADR R1,??DrawHeader_5+0x8 ;; "[S]" \ 00000578 0500A0E1 MOV R0,R5 \ 0000057C 170000EF SWI +23 5217 if(Is_Double_Vibra_On && isShowR) strcat(s,"[Vr]") ; \ ??DrawHeader_32: \ 00000580 C80297E5 LDR R0,[R7, #+712] \ 00000584 000050E3 CMP R0,#+0 \ 00000588 0600000A BEQ ??DrawHeader_33 \ 0000058C D8009FE5 LDR R0,??DrawHeader_5+0x38 ;; isShowR \ 00000590 000090E5 LDR R0,[R0, #+0] \ 00000594 000050E3 CMP R0,#+0 \ 00000598 0200000A BEQ ??DrawHeader_33 \ 0000059C 241089E2 ADD R1,R9,#+36 \ 000005A0 0500A0E1 MOV R0,R5 \ 000005A4 170000EF SWI +23 5218 5219 if(isShowCont) \ ??DrawHeader_33: \ 000005A8 C0009FE5 LDR R0,??DrawHeader_5+0x3C ;; isShowCont \ 000005AC 000090E5 LDR R0,[R0, #+0] \ 000005B0 000050E3 CMP R0,#+0 \ 000005B4 0700000A BEQ ??DrawHeader_34 5220 { 5221 sprintf(ss,"[%d/%d]",kopa_kontaktu,kopa_online); \ 000005B8 903497E5 LDR R3,[R7, #+1168] \ 000005BC 942497E5 LDR R2,[R7, #+1172] \ 000005C0 2C1089E2 ADD R1,R9,#+44 \ 000005C4 0600A0E1 MOV R0,R6 \ 000005C8 160000EF SWI +22 5222 // PrintField(x2-2,YDISP+1,s,2,clfont,1); 5223 strcat(s,ss); \ 000005CC 0610A0E1 MOV R1,R6 \ 000005D0 0500A0E1 MOV R0,R5 \ 000005D4 170000EF SWI +23 5224 } 5225 //PrintField(x2-2,YDISP+1,s,2,clfont,1); 5226 PrintText(x2,y,s,2,clfont,1,1,1,0, x2-x-2 ); \ ??DrawHeader_34: \ 000005D8 080044E0 SUB R0,R4,R8 \ 000005DC 020040E2 SUB R0,R0,#+2 \ 000005E0 01002DE9 PUSH {R0} \ 000005E4 0230A0E3 MOV R3,#+2 \ 000005E8 0520A0E1 MOV R2,R5 \ 000005EC 0000A0E3 MOV R0,#+0 \ 000005F0 01002DE9 PUSH {R0} \ 000005F4 0100A0E3 MOV R0,#+1 \ 000005F8 01002DE9 PUSH {R0} \ 000005FC 01002DE9 PUSH {R0} \ ??DrawHeader_28: \ 00000600 01002DE9 PUSH {R0} \ 00000604 DC0497E5 LDR R0,[R7, #+1244] \ 00000608 01002DE9 PUSH {R0} \ 0000060C 0110A0E3 MOV R1,#+1 \ 00000610 0400A0E1 MOV R0,R4 \ 00000614 ........ _BLF PrintText,??PrintText??rA \ 00000618 18D08DE2 ADD SP,SP,#+24 5227 } 5228 UnlockSched(); \ ??DrawHeader_26: \ 0000061C 470100EF SWI +327 5229 mfree(s); \ 00000620 0500A0E1 MOV R0,R5 \ 00000624 150000EF SWI +21 5230 mfree(ss); \ 00000628 0600A0E1 MOV R0,R6 \ 0000062C 150000EF SWI +21 5231 #endif 5232 } \ 00000630 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return \ ??DrawHeader_5: \ 00000634 00000000 DC8 "",+0,+0,+0 \ 00000638 5B565D00 DC8 "[V]" \ 0000063C 5B535D00 DC8 "[S]" \ 00000640 ........ DC32 HeadFontClr \ 00000644 ........ DC32 HeadBackgrClr \ 00000648 ........ DC32 HEAD_STATUS \ 0000064C ........ DC32 `?` \ 00000650 ........ DC32 isShowUnread \ 00000654 ........ DC32 HEAD_XSTATUS \ 00000658 ........ DC32 HEAD_PRIVATE \ 0000065C ........ DC32 HEAD_PING \ 00000660 ........ DC32 isShowA \ 00000664 ........ DC32 isShowV \ 00000668 ........ DC32 isShowS \ 0000066C ........ DC32 isShowR \ 00000670 ........ DC32 isShowCont 5233 \ In segment CODE, align 4, keep-with-next 5234 void DrawScrollBar(int cur,int total) 5235 { \ DrawScrollBar: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 5236 int scr_h=ScreenH()-1; 5237 int scr_w=ScreenW()-1; 5238 int y=scr_h-CLIST_Y1-FontH(clfont)-2; \ 00000004 ........ LDR R6,??DataTable204 ;; 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 DC0496E5 LDR R0,[R6, #+1244] \ 00000024 ........ _BLF FontH,??FontH??rA \ 00000028 000044E0 SUB R0,R4,R0 \ 0000002C 049040E2 SUB R9,R0,#+4 \ 00000030 DC0496E5 LDR R0,[R6, #+1244] \ 00000034 ........ _BLF FontH,??FontH??rA \ 00000038 000049E0 SUB R0,R9,R0 \ 0000003C 022040E2 SUB R2,R0,#+2 5239 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 5240 int y2=y/total; \ 00000050 0200A0E1 MOV R0,R2 \ 00000054 0810A0E1 MOV R1,R8 \ 00000058 ........ _BLF ??div32_a,??rA??div32_a 5241 int i=0; 5242 5243 DrawLine(scr_w-2,CLIST_Y1,scr_w-2,scr_h-FontH(clfont)-2,1,clrBlack); \ 0000005C DC0496E5 LDR R0,[R6, #+1244] \ 00000060 0180A0E1 MOV R8,R1 \ 00000064 ........ _BLF FontH,??FontH??rA \ 00000068 0090A0E1 MOV R9,R0 \ 0000006C DC0496E5 LDR R0,[R6, #+1244] \ 00000070 ........ _BLF FontH,??FontH??rA \ 00000074 C820A0E3 MOV R2,#+200 \ 00000078 8C2D82E3 ORR R2,R2,#0x2300 \ 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 041081E2 ADD R1,R1,#+4 \ 00000094 0120A0E3 MOV R2,#+1 \ 00000098 04002DE9 PUSH {R2} \ 0000009C 092044E0 SUB R2,R4,R9 \ 000000A0 023042E2 SUB R3,R2,#+2 5244 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 DC0496E5 LDR R0,[R6, #+1244] \ 000000B4 ........ _BLF FontH,??FontH??rA \ 000000B8 0090A0E1 MOV R9,R0 \ 000000BC DC0496E5 LDR R0,[R6, #+1244] \ 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 5245 5246 for(i=0;iw,img->h); \ 00000014 0100D4E5 LDRB R0,[R4, #+1] \ 00000018 01002DE9 PUSH {R0} \ 0000001C 0030D4E5 LDRB R3,[R4, #+0] \ 00000020 04008DE2 ADD R0,SP,#+4 \ 00000024 330100EF SWI +307 5257 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 5258 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 5259 DrawObject(&drwobj); \ 0000004C 0C008DE2 ADD R0,SP,#+12 \ 00000050 2A0100EF SWI +298 5260 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 5261 } 5262 /* 5263 #ifdef ELKA 5264 int LINE_MODE=0; 5265 int VIEW_MODE=1; 5266 #else 5267 int LINE_MODE=1; 5268 int VIEW_MODE=0; 5269 #endif 5270 */ 5271 \ In segment CODE, align 4, keep-with-next 5272 void MyRedraw() 5273 { 5274 //DirectRedrawGUI_ID(contactlist_menu_id); 5275 SMART_REDRAW(); \ MyRedraw: \ 00000000 ........ B SMART_REDRAW ;; tailcall 5276 } 5277 5278 \ In segment CODE, align 4, keep-with-next 5279 void DrawJustNow(RECT *rc,CLIST *cl) 5280 { \ 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,??DataTable204 ;; i_rc \ 00000018 6C3096E5 LDR R3,[R6, #+108] \ 0000001C 019081E2 ADD R9,R1,#+1 \ 00000020 DC1490E5 LDR R1,[R0, #+1244] \ 00000024 000053E3 CMP R3,#+0 \ 00000028 014081E2 ADD R4,R1,#+1 \ 0000002C D410A0E3 MOV R1,#+212 \ 00000030 8C1D81E3 ORR R1,R1,#0x2300 \ 00000034 001081E0 ADD R1,R1,R0 \ 00000038 0020A0E3 MOV R2,#+0 5281 if(!cl->just_i) 5282 DrawText(rc->x+1,rc->y,rc->x2,cl->name,blue,clfont+1,0,0); \ 0000003C D830A003 MOVEQ R3,#+216 5283 else 5284 DrawText(rc->x+1,rc->y,rc->x2,cl->name,clrRed,clfont+1,0,0); \ 00000040 D030A013 MOVNE R3,#+208 \ 00000044 8C3D83E3 ORR R3,R3,#0x2300 \ 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 5285 5286 cl->just_i=!cl->just_i; \ 00000094 6C0096E5 LDR R0,[R6, #+108] \ 00000098 000050E3 CMP R0,#+0 \ 0000009C 0100A003 MOVEQ R0,#+1 \ 000000A0 0000A013 MOVNE R0,#+0 \ 000000A4 6C0086E5 STR R0,[R6, #+108] 5287 } \ 000000A8 F083BDE8 POP {R4-R9,PC} ;; return 5288 5289 \ In segment CODE, align 4, keep-with-next 5290 void log(char *name,int i,int j) 5291 { \ log: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 41DF4DE2 SUB SP,SP,#+260 5292 int hFile; 5293 unsigned int io_error = 0; \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C 00408DE5 STR R4,[SP, #+0] 5294 char text[255]; 5295 sprintf(text,"%s - %d(%d)",name,i,j); \ 00000010 ........ LDR R4,??DataTable205 ;; Canvas \ 00000014 04002DE9 PUSH {R2} \ 00000018 0130A0E1 MOV R3,R1 \ 0000001C 8B1F84E2 ADD R1,R4,#+556 \ 00000020 0020A0E1 MOV R2,R0 \ 00000024 08008DE2 ADD R0,SP,#+8 \ 00000028 160000EF SWI +22 5296 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 8E0F84E2 ADD R0,R4,#+568 \ 0000003C 0A0000EF SWI +10 \ 00000040 0050A0E1 MOV R5,R0 5297 if(hFile!=-1) \ 00000044 010075E3 CMN R5,#+1 \ 00000048 04D08DE2 ADD SP,SP,#+4 \ 0000004C 1000000A BEQ ??log_0 5298 { 5299 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 5300 fwrite(hFile, "\r\n", 2, &io_error); \ 0000006C 0D30A0E1 MOV R3,SP \ 00000070 0220A0E3 MOV R2,#+2 \ 00000074 0B1F8FE2 ADR R1,??log_1 ;; "\r\n" \ 00000078 0500A0E1 MOV R0,R5 \ 0000007C 0C0000EF SWI +12 5301 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} 5302 } 5303 else 5304 ShowMSG(1,(int)"Error!"); \ ??log_0: \ 00000094 241084E2 ADD R1,R4,#+36 \ 00000098 0100A0E3 MOV R0,#+1 \ 0000009C 480100EF SWI +328 5305 // mfree(text); 5306 } \ 000000A0 41DF8DE2 ADD SP,SP,#+260 \ 000000A4 3080BDE8 POP {R4,R5,PC} ;; return \ ??log_1: \ 000000A8 0D0A0000 DC8 "\r\n",+0 5307 5308 /* 5309 typedef struct 5310 { 5311 int type; //0-доставлен, 1-отправлен, 2-не отправлено 5312 int count;//кол-во не доставленных 5313 }ACKED; 5314 */ 5315 #define SENDED 0 5316 #define SEND 1 5317 #define NOTSEND 2 \ In segment CODE, align 4, keep-with-next 5318 ACKED *GetAck(CLIST *t) 5319 { \ GetAck: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 5320 if(!ShowProcessSend) return 0; \ 00000008 ........ LDR R0,??DataTable214 ;; 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} 5321 if(!t) return 0; \ ??GetAck_0: \ 00000020 000054E3 CMP R4,#+0 \ 00000024 FBFFFF0A BEQ ??GetAck_1 5322 if(!t->isactive) return 0; \ 00000028 A00094E5 LDR R0,[R4, #+160] \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 1080BD08 POPEQ {R4,PC} 5323 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 5324 5325 ACKED *ack=malloc(sizeof(ACKED)); \ 00000048 0800A0E3 MOV R0,#+8 \ 0000004C 140000EF SWI +20 5326 ack->type=0; \ 00000050 0010A0E3 MOV R1,#+0 \ 00000054 001080E5 STR R1,[R0, #+0] 5327 ack->count=0; \ 00000058 041080E5 STR R1,[R0, #+4] 5328 LOGQ *lp; 5329 lp=t->log; \ 0000005C 942094E5 LDR R2,[R4, #+148] \ 00000060 000052E3 CMP R2,#+0 \ 00000064 1080BD08 POPEQ {R4,PC} 5330 5331 while(lp) 5332 { 5333 if(lp->acked)//Если отправлен или доставлен \ ??GetAck_2: \ 00000068 043092E5 LDR R3,[R2, #+4] \ 0000006C 000053E3 CMP R3,#+0 \ 00000070 0300000A BEQ ??GetAck_3 5334 { 5335 if (lp->acked==1)//отправлен,но не доставлен \ 00000074 010053E3 CMP R3,#+1 \ 00000078 0500000A BEQ ??GetAck_4 5336 { 5337 ack->type = SEND; 5338 ack->count++; 5339 } 5340 else 5341 ack->type = SENDED;//доставлен(прозрачный) \ 0000007C 001080E5 STR R1,[R0, #+0] \ 00000080 070000EA B ??GetAck_5 5342 } 5343 else 5344 if (lp->ID!=0xFFFFFFFF)//не доставлено \ ??GetAck_3: \ 00000084 083092E5 LDR R3,[R2, #+8] \ 00000088 010073E3 CMN R3,#+1 \ 0000008C 0400000A BEQ ??GetAck_5 5345 { 5346 ack->type = NOTSEND; \ 00000090 0230A0E3 MOV R3,#+2 \ ??GetAck_4: \ 00000094 003080E5 STR R3,[R0, #+0] 5347 ack->count++; \ 00000098 043090E5 LDR R3,[R0, #+4] \ 0000009C 013083E2 ADD R3,R3,#+1 \ 000000A0 043080E5 STR R3,[R0, #+4] 5348 } 5349 lp=lp->next; \ ??GetAck_5: \ 000000A4 002092E5 LDR R2,[R2, #+0] 5350 } \ 000000A8 000052E3 CMP R2,#+0 \ 000000AC EDFFFF1A BNE ??GetAck_2 5351 //if(ack->type==0) return 0; 5352 //if(ack->count==0) return 0; 5353 // log(t->name,ack->type,ack->count); 5354 return ack; \ 000000B0 1080BDE8 POP {R4,PC} ;; return 5355 } 5356 5357 int clstartItem=0; \ In segment DATA_Z, align 4, align-sorted 5358 int BlinkMSG=0; \ BlinkMSG: \ 00000000 DS8 4 \ In segment CODE, align 4, keep-with-next 5359 void DrawList() 5360 { 5361 //Тут пиздец,и мне по хуй,я разбираюсь в этом и знаю что оно работает как нужно. 5362 5363 if(isSystemFont) clfont=100+pngFont; \ DrawList: \ 00000000 ........ LDR R1,??DataTable207 ;; 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,??DataTable208 ;; pngFont \ 00000020 000090E5 LDR R0,[R0, #+0] \ 00000024 640080E2 ADD R0,R0,#+100 \ 00000028 000000EA B ??DrawList_1 5364 else clfont=2; \ ??DrawList_0: \ 0000002C 0200A0E3 MOV R0,#+2 \ ??DrawList_1: \ 00000030 ........ LDR R5,??DataTable221 ;; i_rc \ 00000034 DC0485E5 STR R0,[R5, #+1244] 5365 if(!cltop) return; \ 00000038 7C0495E5 LDR R0,[R5, #+1148] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 AC02000A BEQ ??DrawList_2 5366 5367 // int font_y = FontH(clfont)+2;//16+2 5368 5369 int font_y = 0; 5370 if(FontH(clfont) < icons[IS_ONLINE]->h) font_y = icons[IS_ONLINE]->h+2;//Если иконки выше чем фонт,то по высоте иконок рисуемся \ 00000044 DC0495E5 LDR R0,[R5, #+1244] \ 00000048 ........ _BLF FontH,??FontH??rA \ 0000004C 341095E5 LDR R1,[R5, #+52] \ 00000050 0120D1E5 LDRB R2,[R1, #+1] \ 00000054 020050E1 CMP R0,R2 \ 00000058 021082B2 ADDLT R1,R2,#+2 \ 0000005C 10108DB5 STRLT R1,[SP, #+16] \ 00000060 030000BA BLT ??DrawList_3 5371 else font_y = FontH(clfont)+2; \ 00000064 DC0495E5 LDR R0,[R5, #+1244] \ 00000068 ........ _BLF FontH,??FontH??rA \ 0000006C 020080E2 ADD R0,R0,#+2 \ 00000070 10008DE5 STR R0,[SP, #+16] 5372 5373 int scr_w=ScreenW()-1; \ ??DrawList_3: \ 00000074 888100EF SWI +33160 \ 00000078 010040E2 SUB R0,R0,#+1 \ 0000007C 20008DE5 STR R0,[SP, #+32] 5374 int scr_h=ScreenH()-1; \ 00000080 898100EF SWI +33161 5375 int y2; 5376 5377 //__root const unsigned int SOFT_MODE = 0; 5378 // __root const CFG_CBOX_ITEM cfgcboxI_8[3]={"Ничего,""Софты","Инфу"}; 5379 int SoftH=0; 5380 5381 if(SOFT_MODE==1) SoftH=FontH(clfont);//если показывать софты \ 00000084 ........ LDR R1,??DataTable222 ;; 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 DC0495E5 LDR R0,[R5, #+1244] \ 000000A0 ........ _BLF FontH,??FontH??rA \ 000000A4 0070A0E1 MOV R7,R0 \ 000000A8 040000EA B ??DrawList_5 5382 else if(SOFT_MODE==2) SoftH=FontH(clfont)*2;//если показывать инфу \ ??DrawList_4: \ 000000AC 020051E3 CMP R1,#+2 \ 000000B0 0200001A BNE ??DrawList_5 \ 000000B4 DC0495E5 LDR R0,[R5, #+1244] \ 000000B8 ........ _BLF FontH,??FontH??rA \ 000000BC 8070A0E1 LSL R7,R0,#+1 5383 5384 if(VIEW_MODE) \ ??DrawList_5: \ 000000C0 ........ LDR R0,??DataTable211 ;; VIEW_MODE \ 000000C4 006090E5 LDR R6,[R0, #+0] \ 000000C8 000056E3 CMP R6,#+0 \ 000000CC 0C00000A BEQ ??DrawList_6 5385 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 DC0495E5 LDR R0,[R5, #+1244] \ 000000DC ........ _BLF FontH,??FontH??rA \ 000000E0 000048E0 SUB R0,R8,R0 \ 000000E4 040040E2 SUB R0,R0,#+4 \ 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 5386 else 5387 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-SoftH-2); \ ??DrawList_6: \ 00000104 898100EF SWI +33161 \ 00000108 0080A0E1 MOV R8,R0 \ 0000010C DC0495E5 LDR R0,[R5, #+1244] \ 00000110 ........ _BLF FontH,??FontH??rA \ 00000114 000048E0 SUB R0,R8,R0 \ 00000118 040040E2 SUB R0,R0,#+4 \ 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 E40485E5 STR R0,[R5, #+1252] 5388 5389 CLIST *cl; 5390 int i=0; \ 00000130 0070A0E3 MOV R7,#+0 \ 00000134 0000A0E3 MOV R0,#+0 \ 00000138 F00485E5 STR R0,[R5, #+1264] 5391 int start_y; 5392 int x=0; 5393 RECT rc; 5394 int icon; 5395 collum=0; 5396 // int clfont=108; 5397 char *name=malloc(128); \ 0000013C 8000A0E3 MOV R0,#+128 \ 00000140 140000EF SWI +20 \ 00000144 14008DE5 STR R0,[SP, #+20] 5398 int yy=0; \ 00000148 0710A0E1 MOV R1,R7 \ 0000014C 30108DE5 STR R1,[SP, #+48] 5399 int drawFont = clfont; 5400 5401 ACKED *ack; 5402 DYNPNGICONLIST *xs; ^ Warning[Pe177]: variable "xs" was declared but never referenced 5403 5404 LockSched(); \ 00000150 460100EF SWI +326 5405 totalItems = CountContacts(); //TotalBmk(); \ 00000154 ........ _BLF CountContacts,??CountContacts??rA 5406 5407 if(LINE_MODE) itemFromDisp--; \ 00000158 A0199FE5 LDR R1,??DrawList_8 ;; LINE_MODE \ 0000015C E80485E5 STR R0,[R5, #+1256] \ 00000160 001091E5 LDR R1,[R1, #+0] \ 00000164 34108DE5 STR R1,[SP, #+52] \ 00000168 000051E3 CMP R1,#+0 \ 0000016C E4049515 LDRNE R0,[R5, #+1252] \ 00000170 01004012 SUBNE R0,R0,#+1 \ 00000174 E4048515 STRNE R0,[R5, #+1252] 5408 5409 while( i < ((VIEW_MODE!=0)?(totalItems):(itemFromDisp)) ) \ ??DrawList_9: \ 00000178 E40495E5 LDR R0,[R5, #+1252] \ 0000017C 000056E3 CMP R6,#+0 \ 00000180 E8149515 LDRNE R1,[R5, #+1256] \ 00000184 0010A001 MOVEQ R1,R0 \ 00000188 010057E1 CMP R7,R1 \ 0000018C 560200AA BGE ??DrawList_10 5410 { 5411 if(!VIEW_MODE) goto next;//если не два столбика то пропускаем условие \ 00000190 000056E3 CMP R6,#+0 \ 00000194 1300000A BEQ ??DrawList_11 5412 if( (i>=(curpage-1)*itemFromDisp) && (i<=itemFromDisp*curpage) )//если те итемы который нужно выводить на экран со страници curpage \ 00000198 EC1495E5 LDR R1,[R5, #+1260] \ 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 5413 { 5414 next: 5415 cl=FindContactByN( i + ((VIEW_MODE==0)?(clstartItem):(0)) ); 5416 if(!cl) return; \ 000001C4 4B02000A BEQ ??DrawList_2 5417 if(cl)//если такой есть то рисуем его 5418 { 5419 start_y=0; 5420 if(LINE_MODE)//если в две линии \ 000001C8 34009DE5 LDR R0,[SP, #+52] \ 000001CC 0090A0E3 MOV R9,#+0 \ 000001D0 000050E3 CMP R0,#+0 \ 000001D4 0C00000A BEQ ??DrawList_14 5421 { 5422 if(i + ((VIEW_MODE==0)?(clstartItem):(0)) > curpos ) start_y+=font_y+3; \ 000001D8 000056E3 CMP R6,#+0 \ 000001DC FC049505 LDREQ R0,[R5, #+1276] \ 000001E0 0000A013 MOVNE R0,#+0 \ 000001E4 010000EA B ??DrawList_15 \ ??DrawList_11: \ 000001E8 FC0495E5 LDR R0,[R5, #+1276] \ 000001EC F1FFFFEA B ??DrawList_13 \ ??DrawList_15: \ 000001F0 D01495E5 LDR R1,[R5, #+1232] \ 000001F4 070080E0 ADD R0,R0,R7 \ 000001F8 000051E1 CMP R1,R0 \ 000001FC 10009DB5 LDRLT R0,[SP, #+16] 5423 y2=2; \ 00000200 0210A0E3 MOV R1,#+2 \ 00000204 039080B2 ADDLT R9,R0,#+3 \ 00000208 000000EA B ??DrawList_16 5424 } 5425 else y2=1; \ ??DrawList_14: \ 0000020C 0110A0E3 MOV R1,#+1 5426 5427 if(VIEW_MODE)//если в две колонки \ ??DrawList_16: \ 00000210 10309DE5 LDR R3,[SP, #+16] \ 00000214 20209DE5 LDR R2,[SP, #+32] \ 00000218 DC0495E5 LDR R0,[R5, #+1244] \ 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 5428 { 5429 if(!collum)//если первая колонка \ 00000230 A21F82E0 ADD R1,R2,R2, LSR #+31 \ 00000234 C1B0A0E1 ASR R11,R1,#+1 \ 00000238 F01495E5 LDR R1,[R5, #+1264] \ 0000023C 000051E3 CMP R1,#+0 \ 00000240 1300001A BNE ??DrawList_18 5430 { 5431 start_y += (CLIST_Y1 + (((i - (curpage-1)*itemFromDisp)*font_y)/2) ); //определяем начальное смещение по у \ 00000244 ........ _BLF FontH,??FontH??rA \ 00000248 EC1495E5 LDR R1,[R5, #+1260] \ 0000024C E42495E5 LDR R2,[R5, #+1252] \ 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 5432 yy=start_y; 5433 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 040080E2 ADD R0,R0,#+4 \ 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 5434 } 5435 else//если вторая 5436 { 5437 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 5438 } 5439 collum=!collum; \ 000002B8 F00495E5 LDR R0,[R5, #+1264] \ 000002BC 000050E3 CMP R0,#+0 \ 000002C0 0100A003 MOVEQ R0,#+1 \ 000002C4 0000A013 MOVNE R0,#+0 \ 000002C8 F00485E5 STR R0,[R5, #+1264] \ 000002CC 0D0000EA B ??DrawList_20 5440 } 5441 else 5442 { 5443 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 5444 StoreXYXYtoRECT(&rc,2,start_y,scr_w-5,start_y+(font_y*y2)); \ 000002DC 0A30A0E1 MOV R3,R10 \ 000002E0 060080E2 ADD R0,R0,#+6 \ 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 5445 } 5446 5447 icon=GetIconIndex(cl); \ ??DrawList_20: \ 00000308 0800A0E1 MOV R0,R8 \ 0000030C ........ BL GetIconIndex \ 00000310 00B0A0E1 MOV R11,R0 5448 if (icon!=IS_GROUP)//если не иконка группы \ 00000314 D400A0E3 MOV R0,#+212 \ 00000318 8C0D80E3 ORR R0,R0,#0x2300 \ 0000031C 05A080E0 ADD R10,R0,R5 \ 00000320 0F005BE3 CMP R11,#+15 \ 00000324 0700000A BEQ ??DrawList_21 5449 { 5450 ack=GetAck(cl);//Обработка процесса отправки \ 00000328 0800A0E1 MOV R0,R8 \ 0000032C ........ BL GetAck 5451 // log(cl->name,ack->type,ack->count); 5452 sprintf(name,percent_s,cl->name); \ 00000330 ........ LDR R1,??DataTable213 ;; Canvas + 11 \ 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 5453 } 5454 else 5455 { 5456 int onlinetotal[2]; 5457 GetOnTotalContact(cl->group,onlinetotal); \ ??DrawList_21: \ 00000348 100098E5 LDR R0,[R8, #+16] \ 0000034C 40108DE2 ADD R1,SP,#+64 \ 00000350 ........ BL GetOnTotalContact 5458 if(!VIEW_MODE)//если не в два столбца \ 00000354 000056E3 CMP R6,#+0 \ 00000358 1D00001A BNE ??DrawList_23 5459 { 5460 char *s=malloc(32); \ 0000035C 2000A0E3 MOV R0,#+32 \ 00000360 140000EF SWI +20 5461 sprintf(name,percent_s,cl->name); \ 00000364 ........ LDR R1,??DataTable213 ;; Canvas + 11 \ 00000368 08008DE5 STR R0,[SP, #+8] \ 0000036C 14009DE5 LDR R0,[SP, #+20] \ 00000370 142088E2 ADD R2,R8,#+20 \ 00000374 160000EF SWI +22 5462 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 + 580 \ 00000384 08009DE5 LDR R0,[SP, #+8] \ 00000388 160000EF SWI +22 5463 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 5464 PrintField(scr_w-7,start_y,s,2,clfont,1);//capacity in header \ 0000039C 0100A0E3 MOV R0,#+1 \ 000003A0 01002DE9 PUSH {R0} \ 000003A4 DC0495E5 LDR R0,[R5, #+1244] \ 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 5465 mfree(s); \ 000003C4 10009DE5 LDR R0,[SP, #+16] \ 000003C8 150000EF SWI +21 \ 000003CC 08D08DE2 ADD SP,SP,#+8 \ 000003D0 0C0000EA B ??DrawList_24 5466 } 5467 else 5468 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 + 588 \ 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 5469 if (cl->state) icon++; //Модификация иконки группы \ ??DrawList_24: \ 00000408 B405D8E1 LDRH R0,[R8, #+84] \ 0000040C 000050E3 CMP R0,#+0 \ 00000410 01B08B12 ADDNE R11,R11,#+1 5470 } 5471 5472 // DrawImg(rc.x,rc.y,NumStatusToIconBar+icon);//status 5473 if(icons[icon])//вдруг иконки нет \ ??DrawList_22: \ 00000414 0B9185E0 ADD R9,R5,R11, LSL #+2 \ 00000418 080099E5 LDR R0,[R9, #+8] \ 0000041C 000050E3 CMP R0,#+0 \ 00000420 0F00000A BEQ ??DrawList_25 5474 { 5475 /* if(icon==IS_MSG) 5476 { 5477 if(!BlinkMSG) 5478 DrwImage(icons[((cl->just_i)?(IS_OFFLINE):(icon))],rc.x,rc.y);//draw imghdr! 5479 } 5480 else*/ 5481 DrwImage(icons[((cl->just_i)?(IS_OFFLINE):(icon))],rc.x,rc.y+1);//draw imghdr! \ 00000424 F210DDE1 LDRSH R1,[SP, #+2] \ 00000428 6C0098E5 LDR R0,[R8, #+108] \ 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 080090E5 LDR R0,[R0, #+8] \ 00000448 ........ BL DrwImage 5482 rc.x+=icons[icon]->w+2;// + смещение по х \ 0000044C 082099E5 LDR R2,[R9, #+8] \ 00000450 F010DDE1 LDRSH R1,[SP, #+0] \ 00000454 0020D2E5 LDRB R2,[R2, #+0] \ 00000458 022082E2 ADD R2,R2,#+2 \ 0000045C 011082E0 ADD R1,R2,R1 \ 00000460 B010CDE1 STRH R1,[SP, #+0] 5483 /* if(icon==IS_MSG) 5484 BlinkMSG=!BlinkMSG; 5485 else 5486 BlinkMSG=0;*/ 5487 } 5488 5489 if(cl->unread_msg!=0) \ ??DrawList_25: \ 00000464 882098E5 LDR R2,[R8, #+136] \ 00000468 5E90A0E3 MOV R9,#+94 \ 0000046C 409F89E3 ORR R9,R9,#0x100 \ 00000470 000052E3 CMP R2,#+0 \ 00000474 3000000A BEQ ??DrawList_26 5490 { 5491 char p[3]; 5492 sprintf(p,_d,cl->unread_msg); \ 00000478 90169FE5 LDR R1,??DrawList_8+0x10 ;; Canvas + 17 \ 0000047C 3B008DE2 ADD R0,SP,#+59 \ 00000480 160000EF SWI +22 5493 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 DC1495E5 LDR R1,[R5, #+1244] \ 0000048C 000050E3 CMP R0,#+0 \ 00000490 A00098E5 LDR R0,[R8, #+160] \ 00000494 3700000A BEQ ??DrawList_27 \ 00000498 000050E3 CMP R0,#+0 \ 0000049C 3800001A BNE ??DrawList_28 \ ??DrawList_29: \ 000004A0 C800A0E3 MOV R0,#+200 \ ??DrawList_30: \ 000004A4 08108DE5 STR R1,[SP, #+8] \ 000004A8 F420DDE1 LDRSH R2,[SP, #+4] \ 000004AC 8C0D80E3 ORR R0,R0,#0x2300 \ 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 5494 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 5495 } 5496 5497 if(ack && ack->count && (ShowProcessSend==1 || ShowProcessSend==3)) \ ??DrawList_26: \ 0000053C ........ LDR R1,??DataTable214 ;; 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 5498 { 5499 char p[3]; 5500 if(cl->unread_msg) \ 00000564 880098E5 LDR R0,[R8, #+136] \ 00000568 000050E3 CMP R0,#+0 \ 0000056C 9C159F05 LDREQ R1,??DrawList_8+0x10 ;; Canvas + 17 5501 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 D000A0E3 MOV R0,#+208 \ 00000588 C5FFFFEA B ??DrawList_30 \ ??DrawList_33: \ 0000058C 38008DE2 ADD R0,SP,#+56 \ 00000590 160000EF SWI +22 5502 else 5503 sprintf(p,_d,ack->count); 5504 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 DC2495E5 LDR R2,[R5, #+1244] \ 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 5505 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 5506 } 5507 5508 if(i + ((VIEW_MODE==0)?(clstartItem):(0)) == curpos )//Если наш итем то выделяем \ ??DrawList_31: \ 00000648 D01495E5 LDR R1,[R5, #+1232] \ 0000064C 000056E3 CMP R6,#+0 \ 00000650 FC049505 LDREQ R0,[R5, #+1276] \ 00000654 0000A013 MOVNE R0,#+0 \ 00000658 070080E0 ADD R0,R0,R7 \ 0000065C 010050E1 CMP R0,R1 \ 00000660 6300001A BNE ??DrawList_35 5509 { 5510 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 5511 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 5512 { 5513 char s[64]; 5514 if ((cl->xtext && cl->xtext[0]!=0) && (cl->isShowXst) && (cl->state!=0xFFFF))//Если контакт онлайн и показывать хстату \ 000006BC A80098E5 LDR R0,[R8, #+168] \ 000006C0 000050E3 CMP R0,#+0 \ 000006C4 0000D015 LDRBNE R0,[R0, #+0] \ 000006C8 00005013 CMPNE R0,#+0 \ 000006CC 70009815 LDRNE R0,[R8, #+112] \ 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 5515 { 5516 int i; 5517 zeromem(s,64); \ 000006EC 4010A0E3 MOV R1,#+64 \ 000006F0 48008DE2 ADD R0,SP,#+72 \ 000006F4 1D0100EF SWI +285 5518 i=cl->xtext[0]; \ 000006F8 A80098E5 LDR R0,[R8, #+168] \ ??DrawList_38: \ 000006FC 0020D0E5 LDRB R2,[R0, #+0] 5519 if (i>63) i=63; 5520 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 5521 } 5522 else 5523 if(cl->xtext2 && cl->xtext2[0]!=0 && isLogStatusChange) \ ??DrawList_37: \ 00000718 AC0098E5 LDR R0,[R8, #+172] \ 0000071C 000050E3 CMP R0,#+0 \ 00000720 0000D015 LDRBNE R0,[R0, #+0] \ 00000724 00005013 CMPNE R0,#+0 \ 00000728 0800000A BEQ ??DrawList_40 \ 0000072C ........ LDR R0,??DataTable215 ;; isLogStatusChange \ 00000730 000090E5 LDR R0,[R0, #+0] \ 00000734 000050E3 CMP R0,#+0 \ 00000738 0400000A BEQ ??DrawList_40 5524 { 5525 int i; 5526 zeromem(s,64); \ 0000073C 4010A0E3 MOV R1,#+64 \ 00000740 48008DE2 ADD R0,SP,#+72 \ 00000744 1D0100EF SWI +285 5527 i=cl->xtext2[0]; \ 00000748 AC0098E5 LDR R0,[R8, #+172] \ 0000074C EAFFFFEA B ??DrawList_38 5528 if (i>63) i=63; 5529 strncpy(s,cl->xtext2+1,i); 5530 } 5531 else 5532 sprintf(s,percent_d,cl->uin); \ ??DrawList_40: \ 00000750 0C2098E5 LDR R2,[R8, #+12] \ 00000754 C8139FE5 LDR R1,??DrawList_8+0x24 ;; Canvas + 14 \ 00000758 48008DE2 ADD R0,SP,#+72 \ 0000075C 160000EF SWI +22 5533 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 5534 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 DC1495E5 LDR R1,[R5, #+1244] \ 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 5535 } 5536 5537 if(totalItems>1) \ ??DrawList_36: \ 000007C8 E81495E5 LDR R1,[R5, #+1256] \ 000007CC 020051E3 CMP R1,#+2 \ 000007D0 020000BA BLT ??DrawList_41 5538 DrawScrollBar(i+clstartItem,totalItems); \ 000007D4 FC0495E5 LDR R0,[R5, #+1276] \ 000007D8 070080E0 ADD R0,R0,R7 \ 000007DC ........ BL DrawScrollBar 5539 5540 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 5541 } 5542 5543 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 A80390E5 LDR R0,[R0, #+936] \ 00000808 041090E5 LDR R1,[R0, #+4] \ 0000080C 000051E3 CMP R1,#+0 \ 00000810 0A00000A BEQ ??DrawList_42 5544 { 5545 //xs=GetXSByItem(cl->xstate); 5546 if(XStatusImg[cl->xstate]->bitmap) 5547 { 5548 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 5549 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 A82392E5 LDR R2,[R2, #+936] \ 00000834 0020D2E5 LDRB R2,[R2, #+0] \ 00000838 011082E0 ADD R1,R2,R1 \ 0000083C B010CDE1 STRH R1,[SP, #+0] 5550 } 5551 } 5552 /* 5553 if(cl->xstate!=0)//если есть хстатус 5554 { 5555 xs=GetXSByItem(cl->xstate); 5556 if(xs) 5557 { 5558 DrwImage(xs->img,rc.x-x,rc.y); 5559 rc.x+=xs->img->w; 5560 } 5561 }*/ 5562 5563 //Наш фонт,каким буим рисовать)) системный - жирный не жирный,или елси пнг фонт, то активный один,не активный другой 5564 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 DC0495E5 LDR R0,[R5, #+1244] \ 00000848 A01098E5 LDR R1,[R8, #+160] \ 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] 5565 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 5566 { 5567 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 5568 { 5569 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 5570 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 5571 } 5572 else 5573 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 5574 } 5575 5576 if(cl->just_now) \ ??DrawList_47: \ 000009CC 680098E5 LDR R0,[R8, #+104] \ 000009D0 000050E3 CMP R0,#+0 \ 000009D4 0300000A BEQ ??DrawList_52 5577 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 5578 else 5579 { 5580 if(icon==IS_GROUP)//группы,жирным цветом 5581 DrawText(rc.x+3,rc.y,rc.x2,name,(char*)GroupClr,clfont+1,0,0); \ 00000A00 DC3495E5 LDR R3,[R5, #+1244] \ 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 5582 else//Рисуем наши имена,жирные,систкмные,выделенные...... 5583 DrawText(rc.x+3,rc.y,rc.x2,name,(cl->isactive!=0)?((char*)ActiveClr):((char*)NotActiveClr),drawFont,0,0); \ ??DrawList_53: \ 00000A5C A03098E5 LDR R3,[R8, #+160] \ 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 5584 } 5585 }//if(cl) 5586 } 5587 i++; 5588 // cl=cl->next; 5589 if(i > (itemFromDisp*((VIEW_MODE!=0)?(curpage):(1))) ) break; \ ??DrawList_12: \ 00000ACC E41495E5 LDR R1,[R5, #+1252] \ 00000AD0 000056E3 CMP R6,#+0 \ 00000AD4 EC049515 LDRNE R0,[R5, #+1260] \ 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 5590 } 5591 UnlockSched(); \ ??DrawList_10: \ 00000AEC 470100EF SWI +327 5592 mfree(name); \ 00000AF0 14009DE5 LDR R0,[SP, #+20] \ 00000AF4 150000EF SWI +21 5593 // mfree(ack); 5594 } \ ??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 + 580 \ 00000B08 ........ DC32 GroupClr \ 00000B0C ........ DC32 Canvas + 588 \ 00000B10 ........ DC32 Canvas + 17 \ 00000B14 ........ DC32 SendClr \ 00000B18 ........ DC32 UnAckedClr \ 00000B1C ........ DC32 ClCursorClr \ 00000B20 ........ DC32 ClCursorBordClr \ 00000B24 ........ DC32 Canvas + 14 \ 00000B28 ........ DC32 CLDescricpClr \ 00000B2C ........ DC32 SelBoldActiveChat \ 00000B30 ........ DC32 ActiveClr \ 00000B34 ........ DC32 NotActiveClr 5595 5596 // Управление курсором \ In segment CODE, align 4, keep-with-next 5597 void MoveUp2(int i) 5598 { 5599 if( curpos > itemFromDisp + 2 && totalItems!=itemFromDisp ) \ MoveUp2: \ 00000000 ........ LDR R1,??DataTable221 ;; i_rc \ 00000004 70002DE9 PUSH {R4-R6} \ 00000008 D0C491E5 LDR R12,[R1, #+1232] \ 0000000C E43491E5 LDR R3,[R1, #+1252] \ 00000010 FC2491E5 LDR R2,[R1, #+1276] \ 00000014 E84491E5 LDR R4,[R1, #+1256] \ 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 5600 { 5601 curpos-=i; \ 0000002C 00C04CE0 SUB R12,R12,R0 5602 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 5603 clstartItem-=i; \ ??MoveUp2_2: \ 0000005C 002042E0 SUB R2,R2,R0 \ 00000060 140000EA B ??MoveUp2_1 5604 } 5605 else 5606 if(curpos > 0) \ ??MoveUp2_0: \ 00000064 01005CE3 CMP R12,#+1 \ 00000068 0E0000BA BLT ??MoveUp2_3 5607 { 5608 curpos-=i; \ 0000006C 00C04CE0 SUB R12,R12,R0 5609 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 5610 clstartItem-=i; 5611 else 5612 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 5613 clstartItem=0; \ ??MoveUp2_5: \ 000000A0 0020A0E3 MOV R2,#+0 \ 000000A4 030000EA B ??MoveUp2_1 5614 } 5615 else 5616 { 5617 curpos=totalItems; \ ??MoveUp2_3: \ 000000A8 04C0A0E1 MOV R12,R4 5618 if(totalItems==itemFromDisp) \ 000000AC 030054E1 CMP R4,R3 \ 000000B0 FAFFFF0A BEQ ??MoveUp2_5 5619 clstartItem=0; 5620 else 5621 clstartItem=totalItems-itemFromDisp; \ 000000B4 032044E0 SUB R2,R4,R3 \ ??MoveUp2_1: \ 000000B8 FC2481E5 STR R2,[R1, #+1276] \ 000000BC D0C481E5 STR R12,[R1, #+1232] 5622 } 5623 } \ 000000C0 7000BDE8 POP {R4-R6} \ 000000C4 1EFF2FE1 BX LR ;; return 5624 5625 \ In segment CODE, align 4, keep-with-next 5626 void MoveDown2(int i) 5627 { 5628 if( curpos < itemFromDisp/2+1 && totalItems!=itemFromDisp ) curpos+=i; \ MoveDown2: \ 00000000 ........ LDR R1,??DataTable221 ;; i_rc \ 00000004 70002DE9 PUSH {R4-R6} \ 00000008 D02491E5 LDR R2,[R1, #+1232] \ 0000000C E4C491E5 LDR R12,[R1, #+1252] \ 00000010 FC3491E5 LDR R3,[R1, #+1276] \ 00000014 E84491E5 LDR R4,[R1, #+1256] \ 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 5629 else 5630 if(curpos < totalItems - 1) \ ??MoveDown2_0: \ 0000003C 015044E2 SUB R5,R4,#+1 \ 00000040 050052E1 CMP R2,R5 \ 00000044 060000AA BGE ??MoveDown2_3 5631 { 5632 if(itemFromDisp != totalItems) \ 00000048 04005CE1 CMP R12,R4 \ 0000004C F8FFFF0A BEQ ??MoveDown2_1 5633 { 5634 if(clstartItem < totalItems-itemFromDisp) \ 00000050 0C4044E0 SUB R4,R4,R12 \ 00000054 040053E1 CMP R3,R4 \ 00000058 F5FFFFAA BGE ??MoveDown2_1 5635 clstartItem+=i; \ 0000005C 033080E0 ADD R3,R0,R3 \ 00000060 F3FFFFEA B ??MoveDown2_1 5636 } 5637 /* else 5638 { 5639 if(clstartItem < itemFromDisp) 5640 clstartItem+=i; 5641 }*/ 5642 5643 curpos+=i; 5644 } 5645 else 5646 { 5647 curpos=0; \ ??MoveDown2_3: \ 00000064 0000A0E3 MOV R0,#+0 5648 clstartItem=0; \ 00000068 0030A0E3 MOV R3,#+0 \ ??MoveDown2_2: \ 0000006C FC3481E5 STR R3,[R1, #+1276] \ 00000070 D00481E5 STR R0,[R1, #+1232] 5649 } 5650 } \ 00000074 7000BDE8 POP {R4-R6} \ 00000078 1EFF2FE1 BX LR ;; return 5651 5652 /* 5653 // Управление курсором 5654 void MoveUp(int i) 5655 { 5656 if(!itemFromDisp)return; 5657 5658 if(i) curpos-=2; 5659 else curpos--; 5660 5661 if(i && curpos+2==2) 5662 { 5663 curpos=0; 5664 curpage=1; 5665 } 5666 else 5667 if(curpos<0) 5668 { 5669 curpos=totalItems; 5670 5671 if(itemFromDisp!=totalItems) 5672 { 5673 curpage = sdiv(itemFromDisp,totalItems)+1; 5674 } 5675 else 5676 curpage = 1; 5677 } 5678 else 5679 { 5680 // if(i) curpos-=2; 5681 // else curpos--; 5682 if(curpos<(curpage-1)*itemFromDisp){ curpos++; curpage--; } 5683 } 5684 } 5685 5686 void MoveDown(int i) 5687 { 5688 if(!totalItems)return; 5689 if(i) curpos+=2; 5690 else curpos++; 5691 5692 if(curpos>totalItems) { curpos=0; curpage=1; } 5693 if(curpage*itemFromDispcurpos){ curpos++; curpage--; } */ 5705 5706 if(i) curpos-=2; \ 00000018 D02494E5 LDR R2,[R4, #+1232] \ 0000001C 000051E3 CMP R1,#+0 \ 00000020 02204212 SUBNE R2,R2,#+2 5707 else curpos--; \ 00000024 01204202 SUBEQ R2,R2,#+1 \ 00000028 D02484E5 STR R2,[R4, #+1232] 5708 5709 if(i && curpos+2==2) \ 0000002C 0120A0E3 MOV R2,#+1 \ 00000030 0200000A BEQ ??MoveUp_0 \ 00000034 D01494E5 LDR R1,[R4, #+1232] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0B00000A BEQ ??MoveUp_1 5710 { 5711 curpos=0; 5712 curpage=1; 5713 } 5714 else 5715 if(curpos<0) \ ??MoveUp_0: \ 00000040 D01494E5 LDR R1,[R4, #+1232] \ 00000044 000051E3 CMP R1,#+0 \ 00000048 0A00005A BPL ??MoveUp_2 5716 { 5717 curpos=totalItems-1; \ 0000004C E81494E5 LDR R1,[R4, #+1256] \ 00000050 013041E2 SUB R3,R1,#+1 \ 00000054 D03484E5 STR R3,[R4, #+1232] 5718 5719 if(itemFromDisp!=totalItems) \ 00000058 010050E1 CMP R0,R1 \ 0000005C 0300000A BEQ ??MoveUp_1 5720 { 5721 curpage = /*(itemFromDisp/totalItems)+1;*/sdiv(itemFromDisp,totalItems)+1; \ 00000060 B80000EF SWI +184 \ 00000064 010080E2 ADD R0,R0,#+1 \ 00000068 EC0484E5 STR R0,[R4, #+1260] \ 0000006C 1080BDE8 POP {R4,PC} 5722 } 5723 else 5724 curpage = 1; \ ??MoveUp_1: \ 00000070 EC2484E5 STR R2,[R4, #+1260] \ 00000074 1080BDE8 POP {R4,PC} 5725 } \ ??MoveUp_2: \ 00000078 EC2494E5 LDR R2,[R4, #+1260] \ 0000007C 012042E2 SUB R2,R2,#+1 \ 00000080 900203E0 MUL R3,R0,R2 \ 00000084 030051E1 CMP R1,R3 5726 else 5727 { 5728 // if(i) curpos-=2; 5729 // else curpos--; 5730 if(curpos<(curpage-1)*itemFromDisp){ curpos++; curpage--; } \ 00000088 010081B2 ADDLT R0,R1,#+1 \ 0000008C D00484B5 STRLT R0,[R4, #+1232] \ 00000090 EC2484B5 STRLT R2,[R4, #+1260] \ 00000094 1080BDE8 POP {R4,PC} ;; return 5731 } 5732 } 5733 \ In segment CODE, align 4, keep-with-next 5734 void MoveDown(int i) 5735 { 5736 if(!totalItems)return; \ MoveDown: \ 00000000 ........ LDR R1,??DataTable221 ;; i_rc \ 00000004 E82491E5 LDR R2,[R1, #+1256] \ 00000008 000052E3 CMP R2,#+0 \ 0000000C 1EFF2F01 BXEQ LR 5737 if(i) curpos+=2; \ 00000010 D03491E5 LDR R3,[R1, #+1232] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 02008312 ADDNE R0,R3,#+2 5738 else curpos++; \ 0000001C 01008302 ADDEQ R0,R3,#+1 5739 if(curpos>=totalItems) { curpos=0; curpage=1; } 5740 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 5747 SetFontColor(clrWhite,transparent,0); \ 00000084 0020A0E3 MOV R2,#+0 \ 00000088 D400A0E3 MOV R0,#+212 \ 0000008C 8C0D80E3 ORR R0,R0,#0x2300 \ 00000090 041080E0 ADD R1,R0,R4 \ 00000094 0900A0E1 MOV R0,R9 \ 00000098 ........ _BLF SetFontColor,??SetFontColor??rA 5748 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 4810A0E3 MOV R1,#+72 \ 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 5749 } \ 00000114 F083BDE8 POP {R4-R9,PC} ;; return \ ??PrintMessage_0: \ 00000118 ........ DC32 `?` 5750 5751 \ In segment CODE, align 4, keep-with-next 5752 void DrawContactList() 5753 { \ DrawContactList: \ 00000000 30402DE9 PUSH {R4,R5,LR} 5754 #ifdef DEBUG 5755 if(!IsGuiOnTop(contactlist_menu_id)) return; 5756 #endif 5757 DrawRoundedFrame(0,hy,ScreenW()-1,ScreenH()-1,0,0,0,CLBackgrClr,CLBackgrClr); \ 00000004 ........ LDR R4,??DataTable221 ;; 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 D81494E5 LDR R1,[R4, #+1240] \ 0000003C 012040E2 SUB R2,R0,#+1 \ 00000040 0000A0E3 MOV R0,#+0 \ 00000044 500100EF SWI +336 5758 // DrawRoundedFrame(0,hy,ScreenW()-1,ScreenH()-1,0,0,0,clrWhite,clrWhite); 5759 if(icons[ICON_BG]->bitmap) DrwImage(icons[ICON_BG],0,0); \ 00000048 880094E5 LDR R0,[R4, #+136] \ 0000004C 041090E5 LDR R1,[R0, #+4] \ 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 5760 DrawHeader(); \ ??DrawContactList_1: \ 00000068 ........ BL DrawHeader 5761 DrawList(); \ 0000006C ........ BL DrawList 5762 if(SOFT_MODE==1) DrawSoftKeys(LG_MENU,clmenu_sk_r); \ 00000070 ........ LDR R0,??DataTable222 ;; SOFT_MODE \ 00000074 000090E5 LDR R0,[R0, #+0] \ 00000078 010050E3 CMP R0,#+1 \ 0000007C 0400001A BNE ??DrawContactList_2 \ 00000080 D000A0E3 MOV R0,#+208 \ 00000084 780D80E3 ORR R0,R0,#0x1E00 \ 00000088 041080E0 ADD R1,R0,R4 \ 0000008C 2C009FE5 LDR R0,??DrawContactList_0+0x4 ;; `?` \ 00000090 ........ BL DrawSoftKeys 5763 if(strlen(prmsg)!=0 && PrintTimer!=0) PrintMessage(); \ ??DrawContactList_2: \ 00000094 4800A0E3 MOV R0,#+72 \ 00000098 600D80E3 ORR R0,R0,#0x1800 \ 0000009C 040080E0 ADD R0,R0,R4 \ 000000A0 1B0000EF SWI +27 \ 000000A4 000050E3 CMP R0,#+0 \ 000000A8 9C029415 LDRNE R0,[R4, #+668] \ 000000AC 00005013 CMPNE R0,#+0 \ 000000B0 3080BD08 POPEQ {R4,R5,PC} \ 000000B4 ........ BL PrintMessage 5764 } \ 000000B8 3080BDE8 POP {R4,R5,PC} ;; return \ ??DrawContactList_0: \ 000000BC ........ DC32 CLBackgrClr \ 000000C0 ........ DC32 `?` 5765 5766 #ifdef DEBUG 5767 static void OnRedraw(MAIN_GUI *data) 5768 { 5769 DrawContactList(); 5770 } 5771 5772 static void onCreate(MAIN_GUI *data, void *(*malloc_adr)(int)) 5773 { 5774 #ifdef ELKA 5775 #ifdef ICONBAR 5776 DisableIconBar(0); 5777 #else 5778 DisableIconBar(1); 5779 #endif 5780 #endif 5781 5782 // StatusToIMGHDR(); 5783 data->gui.state=1; 5784 } 5785 5786 static void onClose(MAIN_GUI *data, void (*mfree_adr)(void *)) 5787 { 5788 data->gui.state=0; 5789 } 5790 5791 static void onFocus(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *)) 5792 { 5793 #ifdef ELKA 5794 #ifdef ICONBAR 5795 DisableIconBar(0); 5796 #else 5797 DisableIconBar(1); 5798 #endif 5799 #endif 5800 SetCanvasFlag(1); 5801 data->gui.state=2; 5802 DisableIDLETMR(); 5803 } 5804 5805 static void onUnfocus(MAIN_GUI *data, void (*mfree_adr)(void *)) 5806 { 5807 #ifdef ELKA 5808 DisableIconBar(0); 5809 #endif 5810 if (data->gui.state!=2) return; 5811 data->gui.state=1; 5812 } 5813 #endif 5814 5815 //int ShowLoadScreen=1; 5816 int lastKey = -1; \ In segment DATA_Z, align 4, align-sorted 5817 int lastIsLongPress = 0; \ lastIsLongPress: \ 00000000 DS8 4 5818 \ In segment CODE, align 4, keep-with-next 5819 int ClOnKey(GUI_MSG *msg) 5820 { \ ClOnKey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 5821 int key=msg->gbsmsg->submess; 5822 /* int isLongPress = 0; 5823 int ignore = 1; 5824 */ 5825 CLIST *t; 5826 // t=FindContactByN(curpos); 5827 5828 if (msg->gbsmsg->msg==LONG_PRESS) \ 00000004 ........ LDR R8,??DataTable243 ;; i_rc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 040094E5 LDR R0,[R4, #+4] \ 00000010 657EA0E3 MOV R7,#+1616 \ 00000014 086090E5 LDR R6,[R0, #+8] \ 00000018 040090E5 LDR R0,[R0, #+4] \ 0000001C 9510A0E3 MOV R1,#+149 \ 00000020 401F81E3 ORR R1,R1,#0x100 \ 00000024 010050E1 CMP R0,R1 \ 00000028 3900001A BNE ??ClOnKey_1 5829 { 5830 //isLongPress = (msg->gbsmsg->msg == LONG_PRESS); 5831 // Игнорим KEY_UP если уже обработали долгое нажатие этой же кнопки 5832 // Обрабатываем только KEY_UP и LONG_PRESS 5833 //ignore = (lastKey == key && lastIsLongPress && msg->gbsmsg->msg == KEY_UP) 5834 // || (msg->gbsmsg->msg != KEY_UP && msg->gbsmsg->msg != LONG_PRESS); 5835 // if (!ignore) 5836 LongPressAction(FindContactByN(curpos),msg->gbsmsg->submess); \ 0000002C D00498E5 LDR R0,[R8, #+1232] \ 00000030 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000034 041094E5 LDR R1,[R4, #+4] \ 00000038 081091E5 LDR R1,[R1, #+8] \ 0000003C ........ BL LongPressAction 5837 5838 // lastKey = key; 5839 // lastIsLongPress = isLongPress; 5840 5841 switch(msg->gbsmsg->submess) \ 00000040 040094E5 LDR R0,[R4, #+4] \ 00000044 080090E5 LDR R0,[R0, #+8] \ 00000048 3B0050E2 SUBS R0,R0,#+59 \ 0000004C 0600000A BEQ ??ClOnKey_2 \ 00000050 010050E2 SUBS R0,R0,#+1 \ 00000054 0B00000A BEQ ??ClOnKey_3 \ 00000058 010050E2 SUBS R0,R0,#+1 \ 0000005C 1900000A BEQ ??ClOnKey_4 \ 00000060 010050E2 SUBS R0,R0,#+1 \ 00000064 1000000A BEQ ??ClOnKey_5 \ 00000068 1D0000EA B ??ClOnKey_6 5842 { 5843 case UP_BUTTON: if(VIEW_MODE) MoveUp(1); else MoveUp2(1)/*MoveUp(0)*/; break; \ ??ClOnKey_2: \ 0000006C ........ LDR R0,??DataTable228 ;; VIEW_MODE \ 00000070 000090E5 LDR R0,[R0, #+0] \ 00000074 000050E3 CMP R0,#+0 \ 00000078 0100A0E3 MOV R0,#+1 \ 0000007C 1700000A BEQ ??ClOnKey_7 \ ??ClOnKey_8: \ 00000080 ........ BL MoveUp \ 00000084 160000EA B ??ClOnKey_6 5844 case DOWN_BUTTON: if(VIEW_MODE) MoveDown(1); else MoveDown2(1)/*MoveDown(0)*/; break; \ ??ClOnKey_3: \ 00000088 ........ LDR R0,??DataTable228 ;; VIEW_MODE \ 0000008C 000090E5 LDR R0,[R0, #+0] \ 00000090 000050E3 CMP R0,#+0 \ 00000094 0100A0E3 MOV R0,#+1 \ 00000098 0100000A BEQ ??ClOnKey_9 \ ??ClOnKey_10: \ 0000009C ........ BL MoveDown \ 000000A0 0F0000EA B ??ClOnKey_6 \ ??ClOnKey_9: \ 000000A4 ........ BL MoveDown2 \ 000000A8 0D0000EA B ??ClOnKey_6 5845 case RIGHT_BUTTON: if(VIEW_MODE) MoveDown(0); else MoveDown2(2)/*MoveDown(1)*/; break; \ ??ClOnKey_5: \ 000000AC ........ LDR R0,??DataTable228 ;; VIEW_MODE \ 000000B0 000090E5 LDR R0,[R0, #+0] \ 000000B4 000050E3 CMP R0,#+0 \ 000000B8 0000A013 MOVNE R0,#+0 \ 000000BC F6FFFF1A BNE ??ClOnKey_10 \ 000000C0 0200A0E3 MOV R0,#+2 \ 000000C4 F6FFFFEA B ??ClOnKey_9 5846 case LEFT_BUTTON: if(VIEW_MODE) MoveUp(0); else MoveUp2(2)/*MoveUp(1)*/; break; \ ??ClOnKey_4: \ 000000C8 ........ LDR R0,??DataTable228 ;; VIEW_MODE \ 000000CC 000090E5 LDR R0,[R0, #+0] \ 000000D0 000050E3 CMP R0,#+0 \ 000000D4 0000A013 MOVNE R0,#+0 \ 000000D8 E8FFFF1A BNE ??ClOnKey_8 \ 000000DC 0200A0E3 MOV R0,#+2 \ ??ClOnKey_7: \ 000000E0 ........ BL MoveUp2 5847 } 5848 5849 int key=msg->gbsmsg->submess; \ ??ClOnKey_6: \ 000000E4 040094E5 LDR R0,[R4, #+4] \ 000000E8 080090E5 LDR R0,[R0, #+8] 5850 if ((key>='0')&&(key<='9')) \ 000000EC 300050E3 CMP R0,#+48 \ 000000F0 070000BA BLT ??ClOnKey_1 \ 000000F4 3A0050E3 CMP R0,#+58 \ 000000F8 050000AA BGE ??ClOnKey_1 5851 { 5852 ClearContactT9Key(); \ 000000FC 2010A0E3 MOV R1,#+32 \ 00000100 080087E0 ADD R0,R7,R8 \ 00000104 1D0100EF SWI +285 5853 RecountMenu(NULL,1); \ 00000108 0110A0E3 MOV R1,#+1 \ 0000010C 0000A0E3 MOV R0,#+0 \ 00000110 ........ BL RecountMenu 5854 } 5855 } 5856 5857 5858 if (msg->gbsmsg->msg==KEY_DOWN) \ ??ClOnKey_1: \ 00000114 041094E5 LDR R1,[R4, #+4] \ 00000118 9320A0E3 MOV R2,#+147 \ 0000011C 040091E5 LDR R0,[R1, #+4] \ 00000120 402F82E3 ORR R2,R2,#0x100 \ 00000124 020050E1 CMP R0,R2 \ 00000128 1101001A BNE ??ClOnKey_11 5859 { 5860 switch(msg->gbsmsg->submess) \ 0000012C 081091E5 LDR R1,[R1, #+8] \ 00000130 9C2298E5 LDR R2,[R8, #+668] \ 00000134 D00498E5 LDR R0,[R8, #+1232] \ 00000138 4830A0E3 MOV R3,#+72 \ 0000013C 603D83E3 ORR R3,R3,#0x1800 \ 00000140 089083E0 ADD R9,R3,R8 \ 00000144 ........ LDR R3,??DataTable228 ;; VIEW_MODE \ 00000148 01A0A0E3 MOV R10,#+1 \ 0000014C 003093E5 LDR R3,[R3, #+0] \ 00000150 00B0A0E3 MOV R11,#+0 \ 00000154 011041E2 SUB R1,R1,#+1 \ 00000158 3D0051E3 CMP R1,#+61 \ 0000015C B500008A BHI ??ClOnKey_12 \ 00000160 01CF8FE2 ADR R12,??ClOnKey_0 \ 00000164 01C0DCE7 LDRB R12,[R12, R1] \ 00000168 0CF18FE0 ADD PC,PC,R12, LSL #+2 \ ??ClOnKey_0: \ 0000016C 27B2B230 DC8 +39,+178,+178,+48 \ 00000170 B2B2B2B2 DC8 +178,+178,+178,+178 \ 00000174 B2B29030 DC8 +178,+178,+144,+48 \ 00000178 989EB2B2 DC8 +152,+158,+178,+178 \ 0000017C B2B2B2B2 DC8 +178,+178,+178,+178 \ 00000180 B2B2B2B2 DC8 +178,+178,+178,+178 \ 00000184 B23CB2B2 DC8 +178,+60,+178,+178 \ 00000188 B2B2B2B2 DC8 +178,+178,+178,+178 \ 0000018C B2B2B2B2 DC8 +178,+178,+178,+178 \ 00000190 B2B2B2B2 DC8 +178,+178,+178,+178 \ 00000194 B26AB2B2 DC8 +178,+106,+178,+178 \ 00000198 B2B2B2B2 DC8 +178,+178,+178,+178 \ 0000019C B2B2B2B2 DC8 +178,+178,+178,+178 \ 000001A0 B2B2B2B2 DC8 +178,+178,+178,+178 \ 000001A4 B2B20F16 DC8 +178,+178,+15,+22 \ 000001A8 221D0000 DC8 +34,+29,+0,+0 5861 { 5862 case UP_BUTTON: if(VIEW_MODE) MoveUp(1); else /*MoveUp(0)*/MoveUp2(1); break; \ ??ClOnKey_13: \ 000001AC 000053E3 CMP R3,#+0 \ 000001B0 0100A0E3 MOV R0,#+1 \ 000001B4 0100000A BEQ ??ClOnKey_14 \ ??ClOnKey_15: \ 000001B8 ........ BL MoveUp \ 000001BC 9D0000EA B ??ClOnKey_12 \ ??ClOnKey_14: \ 000001C0 ........ BL MoveUp2 \ 000001C4 9B0000EA B ??ClOnKey_12 5863 case DOWN_BUTTON: if(VIEW_MODE) MoveDown(1); else /*MoveDown(0)*/MoveDown2(1); break; \ ??ClOnKey_16: \ 000001C8 000053E3 CMP R3,#+0 \ 000001CC 0100A0E3 MOV R0,#+1 \ 000001D0 0100000A BEQ ??ClOnKey_17 \ ??ClOnKey_18: \ 000001D4 ........ BL MoveDown \ 000001D8 960000EA B ??ClOnKey_12 \ ??ClOnKey_17: \ 000001DC ........ BL MoveDown2 \ 000001E0 940000EA B ??ClOnKey_12 5864 case RIGHT_BUTTON: if(VIEW_MODE) MoveDown(0); else MoveDown2(2)/*MoveDown(1)*/; break; \ ??ClOnKey_19: \ 000001E4 000053E3 CMP R3,#+0 \ 000001E8 0000A013 MOVNE R0,#+0 \ 000001EC F8FFFF1A BNE ??ClOnKey_18 \ 000001F0 0200A0E3 MOV R0,#+2 \ 000001F4 F8FFFFEA B ??ClOnKey_17 5865 case LEFT_BUTTON: if(VIEW_MODE) MoveUp(0); else MoveUp2(2)/*MoveUp(1)*/; break; \ ??ClOnKey_20: \ 000001F8 000053E3 CMP R3,#+0 \ 000001FC 0000A013 MOVNE R0,#+0 \ 00000200 ECFFFF1A BNE ??ClOnKey_15 \ 00000204 0200A0E3 MOV R0,#+2 \ 00000208 ECFFFFEA B ??ClOnKey_14 5866 case LEFT_SOFT: 5867 { 5868 extern void CreateMainMenu(); 5869 // DoScreen(); 5870 if(PrintTimer) \ ??ClOnKey_21: \ 0000020C 000052E3 CMP R2,#+0 \ 00000210 0400000A BEQ ??ClOnKey_22 5871 { 5872 PrintTimer=0; \ ??ClOnKey_23: \ 00000214 9CB288E5 STR R11,[R8, #+668] 5873 zeromem(prmsg,256); \ 00000218 401FA0E3 MOV R1,#+256 \ 0000021C 0900A0E1 MOV R0,R9 \ 00000220 1D0100EF SWI +285 \ 00000224 830000EA B ??ClOnKey_12 5874 } 5875 else 5876 CreateMainMenu(); \ ??ClOnKey_22: \ 00000228 ........ _BLF CreateMainMenu,??CreateMainMenu??rA \ 0000022C 810000EA B ??ClOnKey_12 5877 // ShowMainMenu(); 5878 }break; 5879 case RIGHT_SOFT: 5880 case RED_BUTTON: 5881 if(PrintTimer) \ ??ClOnKey_24: \ 00000230 000052E3 CMP R2,#+0 \ 00000234 F6FFFF1A BNE ??ClOnKey_23 5882 { 5883 PrintTimer=0; 5884 zeromem(prmsg,256); 5885 } 5886 else if (strlen(ContactT9Key)) \ 00000238 080087E0 ADD R0,R7,R8 \ 0000023C 1B0000EF SWI +27 \ 00000240 000050E3 CMP R0,#+0 \ 00000244 0300000A BEQ ??ClOnKey_25 5887 { 5888 BackSpaceContactT9(); \ 00000248 ........ BL BackSpaceContactT9 5889 RecountMenu(NULL,1); \ 0000024C 0110A0E3 MOV R1,#+1 \ 00000250 0B00A0E1 MOV R0,R11 \ 00000254 520000EA B ??ClOnKey_26 5890 return(-1); 5891 } 5892 5893 else 5894 { 5895 #ifdef DEBUG 5896 ShowLoadScreen=1; 5897 return 1; 5898 #else 5899 ShowLoadScreen=1;//return 1; \ ??ClOnKey_25: \ 00000258 A8A488E5 STR R10,[R8, #+1192] \ 0000025C 750000EA B ??ClOnKey_12 5900 #endif 5901 } 5902 break; 5903 case ENTER_BUTTON: 5904 { 5905 t=FindContactByN(curpos); \ ??ClOnKey_27: \ 00000260 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000264 0050A0E1 MOV R5,R0 5906 if(PrintTimer) \ 00000268 9C0298E5 LDR R0,[R8, #+668] \ 0000026C 000050E3 CMP R0,#+0 \ 00000270 0400000A BEQ ??ClOnKey_28 5907 { 5908 PrintTimer=0; \ 00000274 9CB288E5 STR R11,[R8, #+668] 5909 zeromem(prmsg,256); \ 00000278 401FA0E3 MOV R1,#+256 \ 0000027C 0900A0E1 MOV R0,R9 \ 00000280 1D0100EF SWI +285 \ 00000284 210000EA B ??ClOnKey_29 5910 } 5911 else 5912 if(t) \ ??ClOnKey_28: \ 00000288 000055E3 CMP R5,#+0 \ 0000028C 4500000A BEQ ??ClOnKey_30 5913 { 5914 if (t->isgroup) \ 00000290 080095E5 LDR R0,[R5, #+8] \ 00000294 000050E3 CMP R0,#+0 \ 00000298 0500000A BEQ ??ClOnKey_31 5915 { 5916 t->state^=0xFFFF; \ 0000029C B405D5E1 LDRH R0,[R5, #+84] \ 000002A0 FF10A0E3 MOV R1,#+255 \ 000002A4 FF1C81E3 ORR R1,R1,#0xFF00 \ 000002A8 000021E0 EOR R0,R1,R0 \ 000002AC B405C5E1 STRH R0,[R5, #+84] 5917 RecountMenu(t,1); \ 000002B0 390000EA B ??ClOnKey_32 5918 return(-1); 5919 } 5920 if (strlen(ContactT9Key)) \ ??ClOnKey_31: \ 000002B4 080087E0 ADD R0,R7,R8 \ 000002B8 1B0000EF SWI +27 \ 000002BC 000050E3 CMP R0,#+0 \ 000002C0 0500000A BEQ ??ClOnKey_33 5921 { 5922 ClearContactT9Key(); \ 000002C4 2010A0E3 MOV R1,#+32 \ 000002C8 080087E0 ADD R0,R7,R8 \ 000002CC 1D0100EF SWI +285 5923 RecountMenu(NULL,1); \ 000002D0 0110A0E3 MOV R1,#+1 \ 000002D4 0B00A0E1 MOV R0,R11 \ 000002D8 ........ BL RecountMenu 5924 } 5925 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<0 && t) \ ??ClOnKey_35: \ 00000318 ........ _BLF CountContacts,??CountContacts??rA \ 0000031C 010050E3 CMP R0,#+1 \ 00000320 440000BA BLT ??ClOnKey_12 \ 00000324 000055E3 CMP R5,#+0 \ 00000328 4200000A BEQ ??ClOnKey_12 5932 { 5933 t=FindContactByN(curpos); \ 0000032C D00498E5 LDR R0,[R8, #+1232] \ 00000330 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000334 0050A0E1 MOV R5,R0 \ 00000338 020000EA B ??ClOnKey_36 5934 while(t=(CLIST *)(t->next)) 5935 { 5936 if (t->isunread) goto doit; \ ??ClOnKey_37: \ 0000033C 840095E5 LDR R0,[R5, #+132] \ 00000340 000050E3 CMP R0,#+0 \ 00000344 0E00001A BNE ??ClOnKey_38 5937 } \ ??ClOnKey_36: \ 00000348 005095E5 LDR R5,[R5, #+0] \ 0000034C 000055E3 CMP R5,#+0 \ 00000350 F9FFFF1A BNE ??ClOnKey_37 5938 t=(CLIST *)(&cltop); \ 00000354 750F47E2 SUB R0,R7,#+468 \ 00000358 085080E0 ADD R5,R0,R8 \ 0000035C 020000EA B ??ClOnKey_39 5939 while(t=(CLIST *)(t->next)) 5940 { 5941 if (t->isunread) goto doit; \ ??ClOnKey_40: \ 00000360 840095E5 LDR R0,[R5, #+132] \ 00000364 000050E3 CMP R0,#+0 \ 00000368 0500001A BNE ??ClOnKey_38 5942 } \ ??ClOnKey_39: \ 0000036C 005095E5 LDR R5,[R5, #+0] \ 00000370 000055E3 CMP R5,#+0 \ 00000374 F9FFFF1A BNE ??ClOnKey_40 5943 if (t && Is_Show_Groups) 5944 { 5945 if (!t->isgroup) t=FindGroupByID(t->group); 5946 if (t && !t->state) 5947 { 5948 t->state^=0xFFFF; 5949 goto does; 5950 } 5951 } 5952 5953 curpage=1; \ 00000378 ECA488E5 STR R10,[R8, #+1260] 5954 curpos=0; \ 0000037C D0B488E5 STR R11,[R8, #+1232] 5955 clstartItem=0; \ 00000380 FCB488E5 STR R11,[R8, #+1276] 5956 /* while(t=(CLIST *)(t->next)) 5957 { 5958 if (t->isactive) goto doit; 5959 } 5960 t=(CLIST *)(&cltop); 5961 5962 while(t=(CLIST *)(t->next)) 5963 { 5964 if (t->isactive) goto doit; 5965 } 5966 return(-1);*/ 5967 doit: 5968 { 5969 CLIST *g=FindGroupByID(t->group); \ ??ClOnKey_38: \ 00000384 100095E5 LDR R0,[R5, #+16] \ 00000388 ........ _BLF FindGroupByID,??FindGroupByID??rA 5970 if (g) \ 0000038C 000050E3 CMP R0,#+0 5971 { 5972 if (g->state) \ 00000390 B415D011 LDRHNE R1,[R0, #+84] \ 00000394 00005113 CMPNE R1,#+0 5973 { 5974 g->state=0; \ 00000398 B4B5C011 STRHNE R11,[R0, #+84] 5975 } 5976 } 5977 } 5978 does: 5979 RecountMenu(t,1); \ ??ClOnKey_32: \ 0000039C 0110A0E3 MOV R1,#+1 \ 000003A0 0500A0E1 MOV R0,R5 \ ??ClOnKey_26: \ 000003A4 ........ BL RecountMenu 5980 return(-1); \ ??ClOnKey_30: \ 000003A8 00006AE2 RSB R0,R10,#+0 \ 000003AC F08FBDE8 POP {R4-R11,PC} 5981 } 5982 break; 5983 case GREEN_BUTTON: 5984 { 5985 // IsActiveUp=!IsActiveUp; 5986 // RecountMenu(NULL,1); 5987 t=FindContactByN(curpos); \ ??ClOnKey_41: \ 000003B0 ........ _BLF FindContactByN,??FindContactByN??rA \ 000003B4 0050A0E1 MOV R5,R0 5988 if(!t->isgroup) \ 000003B8 080095E5 LDR R0,[R5, #+8] \ 000003BC 000050E3 CMP R0,#+0 \ 000003C0 1C00001A BNE ??ClOnKey_12 5989 CreateContactMenu(t); \ 000003C4 0500A0E1 MOV R0,R5 \ 000003C8 ........ BL CreateContactMenu \ 000003CC 190000EA B ??ClOnKey_12 5990 } 5991 break; 5992 // case RED_BUTTON: return (1); 5993 case VOL_UP_BUTTON: 5994 #ifdef NEWSGOLD 5995 if(isVolUpButton) \ ??ClOnKey_42: \ 000003D0 E0019FE5 LDR R0,??ClOnKey_43 ;; isVolUpButton \ 000003D4 000090E5 LDR R0,[R0, #+0] \ 000003D8 000050E3 CMP R0,#+0 \ 000003DC 1500000A BEQ ??ClOnKey_12 5996 CreateScreenSelectGUI(); \ 000003E0 ........ _BLF CreateScreenSelectGUI,??CreateScreenSelectGUI??rA \ 000003E4 130000EA B ??ClOnKey_12 5997 #endif 5998 break; 5999 case VOL_DOWN_BUTTON: 6000 { 6001 if(isVolDownButton) \ ??ClOnKey_44: \ 000003E8 CC019FE5 LDR R0,??ClOnKey_43+0x4 ;; isVolDownButton \ 000003EC 000090E5 LDR R0,[R0, #+0] \ 000003F0 000050E3 CMP R0,#+0 \ 000003F4 0F00000A BEQ ??ClOnKey_12 6002 { 6003 if(!away_m) \ 000003F8 840398E5 LDR R0,[R8, #+900] \ 000003FC 000050E3 CMP R0,#+0 \ 00000400 0300001A BNE ??ClOnKey_45 6004 { 6005 away_m=!away_m; \ 00000404 84A388E5 STR R10,[R8, #+900] 6006 main_d=1; \ 00000408 80A288E5 STR R10,[R8, #+640] 6007 InputAwayMsg(); \ 0000040C ........ BL InputAwayMsg \ 00000410 080000EA B ??ClOnKey_12 6008 } 6009 else 6010 { 6011 msg_away_timer=0; 6012 away_m=!away_m; 6013 if(change_back_status) \ ??ClOnKey_45: \ 00000414 8C0398E5 LDR R0,[R8, #+908] \ 00000418 80B388E5 STR R11,[R8, #+896] \ 0000041C 84B388E5 STR R11,[R8, #+900] \ 00000420 000050E3 CMP R0,#+0 \ 00000424 0300000A BEQ ??ClOnKey_12 6014 { 6015 CurrentStatus=status_rem; \ 00000428 880398E5 LDR R0,[R8, #+904] \ 0000042C 740388E5 STR R0,[R8, #+884] 6016 set_my_status(); \ 00000430 ........ BL set_my_status 6017 change_back_status=0; \ 00000434 8CB388E5 STR R11,[R8, #+908] 6018 } 6019 } 6020 } 6021 } 6022 break; 6023 } 6024 6025 if (key=='#' && (CountContacts()>0))//Если есть хоть один контакт то выполнять,иначе возможен пикофф \ ??ClOnKey_12: \ 00000438 230056E3 CMP R6,#+35 \ 0000043C 4C00001A BNE ??ClOnKey_11 \ 00000440 ........ _BLF CountContacts,??CountContacts??rA \ 00000444 010050E3 CMP R0,#+1 \ 00000448 360000BA BLT ??ClOnKey_46 6026 { 6027 t=FindContactByN(curpos); \ 0000044C D00498E5 LDR R0,[R8, #+1232] \ 00000450 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000454 0050A0E1 MOV R5,R0 6028 if(ActionResh) \ 00000458 60019FE5 LDR R0,??ClOnKey_43+0x8 ;; ActionResh \ 0000045C 000090E5 LDR R0,[R0, #+0] \ 00000460 000050E3 CMP R0,#+0 \ 00000464 1B00001A BNE ??ClOnKey_47 6029 { 6030 while(t=(CLIST *)(t->next)) 6031 { 6032 if (t->isactive) goto doit4; 6033 } 6034 t=(CLIST *)(&cltop); 6035 while(t=(CLIST *)(t->next)) 6036 { 6037 if (t->isactive) goto doit4; 6038 } 6039 return(-1); 6040 doit4: 6041 { 6042 CLIST *g=FindGroupByID(t->group); 6043 if (g) 6044 { 6045 if (g->state) 6046 { 6047 g->state=0; 6048 } 6049 } 6050 } 6051 RecountMenu(t,1); 6052 } 6053 else 6054 { 6055 if(t->log && !(t->just_now))//очистить лог \ 00000468 940095E5 LDR R0,[R5, #+148] \ 0000046C 000050E3 CMP R0,#+0 \ 00000470 0600000A BEQ ??ClOnKey_48 \ 00000474 680095E5 LDR R0,[R5, #+104] \ 00000478 000050E3 CMP R0,#+0 \ 0000047C 0300001A BNE ??ClOnKey_48 6056 { 6057 FreeLOGQ(&t->log); \ 00000480 940085E2 ADD R0,R5,#+148 \ 00000484 ........ BL FreeLOGQ 6058 t->msg_count=0; \ 00000488 A4B085E5 STR R11,[R5, #+164] 6059 t->isactive=0; \ 0000048C A0B085E5 STR R11,[R5, #+160] 6060 } 6061 6062 if(t->just_now)//если контакт тока зашел,то обнуляем \ ??ClOnKey_48: \ 00000490 680095E5 LDR R0,[R5, #+104] \ 00000494 000050E3 CMP R0,#+0 \ 00000498 0300000A BEQ ??ClOnKey_49 6063 { 6064 CLIST *tt; 6065 tt=FindContactByUin(t->uin); \ 0000049C 0C0095E5 LDR R0,[R5, #+12] \ 000004A0 ........ _BLF FindContactByUin,??FindContactByUin??rA 6066 tt->just_now=0; \ 000004A4 68B080E5 STR R11,[R0, #+104] 6067 tt->just_i=0; \ 000004A8 6CB080E5 STR R11,[R0, #+108] 6068 } 6069 6070 if(t->uin==UIN)//если нажали на Loopback, то обнуляем все just_now'ы \ ??ClOnKey_49: \ 000004AC ........ LDR R1,??DataTable247 ;; UIN \ 000004B0 0C0095E5 LDR R0,[R5, #+12] \ 000004B4 001091E5 LDR R1,[R1, #+0] \ 000004B8 010050E1 CMP R0,R1 \ 000004BC 2200001A BNE ??ClOnKey_50 6071 { 6072 CLIST *tt; 6073 tt=(CLIST *)(&cltop); \ 000004C0 750F47E2 SUB R0,R7,#+468 \ 000004C4 080080E0 ADD R0,R0,R8 \ 000004C8 1C0000EA B ??ClOnKey_51 \ ??ClOnKey_52: \ 000004CC A00095E5 LDR R0,[R5, #+160] \ 000004D0 000050E3 CMP R0,#+0 \ 000004D4 0A00001A BNE ??ClOnKey_53 \ ??ClOnKey_47: \ 000004D8 005095E5 LDR R5,[R5, #+0] \ 000004DC 000055E3 CMP R5,#+0 \ 000004E0 F9FFFF1A BNE ??ClOnKey_52 \ 000004E4 750F47E2 SUB R0,R7,#+468 \ 000004E8 085080E0 ADD R5,R0,R8 \ ??ClOnKey_54: \ 000004EC 005095E5 LDR R5,[R5, #+0] \ 000004F0 000055E3 CMP R5,#+0 \ 000004F4 ABFFFF0A BEQ ??ClOnKey_30 \ 000004F8 A00095E5 LDR R0,[R5, #+160] \ 000004FC 000050E3 CMP R0,#+0 \ 00000500 F9FFFF0A BEQ ??ClOnKey_54 \ ??ClOnKey_53: \ 00000504 100095E5 LDR R0,[R5, #+16] \ 00000508 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 0000050C 000050E3 CMP R0,#+0 \ 00000510 B415D011 LDRHNE R1,[R0, #+84] \ 00000514 00005113 CMPNE R1,#+0 \ 00000518 B4B5C011 STRHNE R11,[R0, #+84] \ 0000051C 0110A0E3 MOV R1,#+1 \ 00000520 0500A0E1 MOV R0,R5 \ ??ClOnKey_55: \ 00000524 ........ BL RecountMenu 6074 while(tt=(CLIST *)(tt->next)) 6075 { 6076 if(tt->just_now){ tt->just_now=0; tt->just_i=0; } 6077 } 6078 } 6079 if(strlen(ContactT9Key)) ClearContactT9Key(); 6080 RecountMenu(NULL,0); 6081 } 6082 } 6083 } 6084 6085 if ((key>='0')&&(key<='9') && msg->gbsmsg->msg==KEY_DOWN) 6086 { 6087 AddContactT9Key(key); 6088 RecountMenu(NULL,1); 6089 return(-1); 6090 } 6091 return 0; \ ??ClOnKey_46: \ 00000528 0000A0E3 MOV R0,#+0 \ 0000052C F08FBDE8 POP {R4-R11,PC} ;; return \ ??ClOnKey_56: \ 00000530 681090E5 LDR R1,[R0, #+104] \ 00000534 000051E3 CMP R1,#+0 \ 00000538 68B08015 STRNE R11,[R0, #+104] \ 0000053C 6CB08015 STRNE R11,[R0, #+108] \ ??ClOnKey_51: \ 00000540 000090E5 LDR R0,[R0, #+0] \ 00000544 000050E3 CMP R0,#+0 \ 00000548 F8FFFF1A BNE ??ClOnKey_56 \ ??ClOnKey_50: \ 0000054C 080087E0 ADD R0,R7,R8 \ 00000550 1B0000EF SWI +27 \ 00000554 000050E3 CMP R0,#+0 \ 00000558 0200000A BEQ ??ClOnKey_57 \ 0000055C 2010A0E3 MOV R1,#+32 \ 00000560 080087E0 ADD R0,R7,R8 \ 00000564 1D0100EF SWI +285 \ ??ClOnKey_57: \ 00000568 0010A0E3 MOV R1,#+0 \ 0000056C 0100A0E1 MOV R0,R1 \ 00000570 EBFFFFEA B ??ClOnKey_55 \ ??ClOnKey_11: \ 00000574 300056E3 CMP R6,#+48 \ 00000578 EAFFFFBA BLT ??ClOnKey_46 \ 0000057C 3A0056E3 CMP R6,#+58 \ 00000580 E8FFFFAA BGE ??ClOnKey_46 \ 00000584 040094E5 LDR R0,[R4, #+4] \ 00000588 9310A0E3 MOV R1,#+147 \ 0000058C 040090E5 LDR R0,[R0, #+4] \ 00000590 401F81E3 ORR R1,R1,#0x100 \ 00000594 010050E1 CMP R0,R1 \ 00000598 E2FFFF1A BNE ??ClOnKey_46 \ 0000059C 0600A0E1 MOV R0,R6 \ 000005A0 ........ BL AddContactT9Key \ 000005A4 0110A0E3 MOV R1,#+1 \ 000005A8 0000A0E3 MOV R0,#+0 \ 000005AC ........ BL RecountMenu \ 000005B0 0000E0E3 MVN R0,#+0 \ 000005B4 F08FBDE8 POP {R4-R11,PC} \ ??ClOnKey_43: \ 000005B8 ........ DC32 isVolUpButton \ 000005BC ........ DC32 isVolDownButton \ 000005C0 ........ DC32 ActionResh 6092 } 6093 6094 #ifdef DEBUG 6095 static int OnKey(MAIN_GUI *data, GUI_MSG *msg) 6096 { 6097 DirectRedrawGUI(); 6098 // int k=msg->gbsmsg->submess; 6099 return ClOnKey(msg); 6100 // return(0); 6101 } 6102 6103 extern void kill_data(void *p, void (*func_p)(void *)); 6104 6105 int method28(void){return(0);} 6106 int method29(void){return(0);} 6107 6108 const void * const gui_methods2[11]={ 6109 (void *)OnRedraw, 6110 (void *)onCreate, 6111 (void *)onClose, 6112 (void *)onFocus, 6113 (void *)onUnfocus, 6114 (void *)OnKey, 6115 0, 6116 (void *)kill_data, 6117 (void *)method28, 6118 (void *)method29, 6119 0 6120 }; 6121 6122 6123 6124 static void CreateCL() 6125 { 6126 const RECT Canvas={0,0,0,0}; 6127 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); 6128 zeromem(main_gui,sizeof(MAIN_GUI)); 6129 main_gui->gui.canvas=(void *)(&Canvas); 6130 main_gui->gui.methods=(void *)gui_methods2; 6131 // main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); 6132 //patch_rect((RECT*)&Canvas,0,YDISP,ScreenW()-1,ScreenH()-1); 6133 contactlist_menu_id=CreateGUI(main_gui); 6134 SMART_REDRAW(); 6135 } 6136 6137 #endif 6138 #ifdef ICONBAR 6139 #else 6140 #ifdef ELKA 6141 #undef YDISP 6142 #define YDISP 24 6143 #endif 6144 #endif 6145 6146 6147 /************************************************************************************************/ 6148 6149 \ In segment CODE, align 4, keep-with-next 6150 void DrawLoadScreen(MAIN_GUI *data) 6151 { \ DrawLoadScreen: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 0CD04DE2 SUB SP,SP,#+12 6152 int scr_w=ScreenW(); 6153 int scr_h=ScreenH(); 6154 int pos_status;//2026rev 6155 int pm = pictures_max, pl = pictures_loaded;//2026rev 6156 RECT rc=PBRECT; 6157 DrawRectangle(0,YDISP,scr_w-1,scr_h-1,0, GetPaletteAdrByColorIndex(1), GetPaletteAdrByColorIndex(1)); 6158 6159 // if(!USE_ADD_UIN)//Если не используем доп.уины 6160 //{ 6161 // DrawImg(0,0,S_ICONS[ICON_LOGO]); 6162 DrwImage(icons[ICON_LOGO],0,0); 6163 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //by BoBa 10.07 6164 if(IsShowInfo) \ 00000008 28649FE5 LDR R6,??DrawLoadScreen_0 ;; percent_t \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 888100EF SWI +33160 \ 00000014 0090A0E1 MOV R9,R0 \ 00000018 898100EF SWI +33161 \ 0000001C 18149FE5 LDR R1,??DrawLoadScreen_0+0x4 ;; pictures_max \ 00000020 08008DE5 STR R0,[SP, #+8] \ 00000024 001091E5 LDR R1,[R1, #+0] \ 00000028 10049FE5 LDR R0,??DrawLoadScreen_0+0x8 ;; PBRECT \ 0000002C 00108DE5 STR R1,[SP, #+0] \ 00000030 0C149FE5 LDR R1,??DrawLoadScreen_0+0xC ;; pictures_loaded \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 04108DE5 STR R1,[SP, #+4] \ 0000003C F070D0E1 LDRSH R7,[R0, #+0] \ 00000040 F280D0E1 LDRSH R8,[R0, #+2] \ 00000044 F4A0D0E1 LDRSH R10,[R0, #+4] \ 00000048 F6B0D0E1 LDRSH R11,[R0, #+6] \ 0000004C 0100A0E3 MOV R0,#+1 \ 00000050 2E0100EF SWI +302 \ 00000054 0050A0E1 MOV R5,R0 \ 00000058 0100A0E3 MOV R0,#+1 \ 0000005C 2E0100EF SWI +302 \ 00000060 20002DE9 PUSH {R5} \ 00000064 ........ LDR R5,??DataTable243 ;; i_rc \ 00000068 01002DE9 PUSH {R0} \ 0000006C 012049E2 SUB R2,R9,#+1 \ 00000070 0010A0E3 MOV R1,#+0 \ 00000074 0000A0E3 MOV R0,#+0 \ 00000078 01002DE9 PUSH {R0} \ 0000007C 14009DE5 LDR R0,[SP, #+20] \ 00000080 013040E2 SUB R3,R0,#+1 \ 00000084 0000A0E3 MOV R0,#+0 \ 00000088 B40100EF SWI +436 \ 0000008C 580095E5 LDR R0,[R5, #+88] \ 00000090 0020A0E3 MOV R2,#+0 \ 00000094 0210A0E1 MOV R1,R2 \ 00000098 ........ BL DrwImage \ 0000009C A4239FE5 LDR R2,??DrawLoadScreen_0+0x10 ;; IsShowInfo \ 000000A0 6C0495E5 LDR R0,[R5, #+1132] \ 000000A4 701495E5 LDR R1,[R5, #+1136] \ 000000A8 002092E5 LDR R2,[R2, #+0] \ 000000AC 0CD08DE2 ADD SP,SP,#+12 \ 000000B0 000052E3 CMP R2,#+0 \ 000000B4 1A00000A BEQ ??DrawLoadScreen_1 6165 { 6166 wsprintf(data->ws1,LG_GRSTATESTRING,connect_state,RXstate,RX,TX,sendq_l,hostname,logmsg); \ 000000B8 9020A0E3 MOV R2,#+144 \ 000000BC 702D82E3 ORR R2,R2,#0x1C00 \ 000000C0 052082E0 ADD R2,R2,R5 \ 000000C4 04002DE9 PUSH {R2} \ 000000C8 E020A0E3 MOV R2,#+224 \ 000000CC 7C2D82E3 ORR R2,R2,#0x1F00 \ 000000D0 052082E0 ADD R2,R2,R5 \ 000000D4 04002DE9 PUSH {R2} \ 000000D8 A42295E5 LDR R2,[R5, #+676] \ 000000DC 04002DE9 PUSH {R2} \ 000000E0 02002DE9 PUSH {R1} \ 000000E4 01002DE9 PUSH {R0} \ 000000E8 583495E5 LDR R3,[R5, #+1112] \ 000000EC 5C2495E5 LDR R2,[R5, #+1116] \ 000000F0 340094E5 LDR R0,[R4, #+52] \ 000000F4 041086E2 ADD R1,R6,#+4 \ 000000F8 240100EF SWI +292 6167 wsprintf(data->ws2,logmsg2); \ 000000FC 9000A0E3 MOV R0,#+144 \ 00000100 740D80E3 ORR R0,R0,#0x1D00 \ 00000104 051080E0 ADD R1,R0,R5 \ 00000108 380094E5 LDR R0,[R4, #+56] \ 0000010C 240100EF SWI +292 6168 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 6169 } 6170 else 6171 { 6172 wsprintf(data->ws1,"State: %d, RXstate: %d",connect_state,RXstate); \ ??DrawLoadScreen_1: \ 00000124 583495E5 LDR R3,[R5, #+1112] \ 00000128 5C2495E5 LDR R2,[R5, #+1116] \ 0000012C 340094E5 LDR R0,[R4, #+52] \ 00000130 3C1086E2 ADD R1,R6,#+60 \ 00000134 240100EF SWI +292 6173 } 6174 6175 if(pm != pl) \ ??DrawLoadScreen_2: \ 00000138 00009DE5 LDR R0,[SP, #+0] \ 0000013C 04109DE5 LDR R1,[SP, #+4] \ 00000140 010050E1 CMP R0,R1 \ 00000144 2E00000A BEQ ??DrawLoadScreen_3 \ 00000148 FC029FE5 LDR R0,??DrawLoadScreen_0+0x14 ;; BGPBcolor \ 0000014C 0B30A0E1 MOV R3,R11 \ 00000150 0010A0E1 MOV R1,R0 \ 00000154 02002DE9 PUSH {R1} \ 00000158 01002DE9 PUSH {R0} \ 0000015C 0A20A0E1 MOV R2,R10 \ 00000160 0810A0E1 MOV R1,R8 \ 00000164 0000A0E3 MOV R0,#+0 \ 00000168 01002DE9 PUSH {R0} \ 0000016C 0700A0E1 MOV R0,R7 6176 { 6177 /* DrawRectangle(0,scr_h-4-2*GetFontYSIZE(FONT_SMALL_BOLD),scr_w-1,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-2,0, 6178 GetPaletteAdrByColorIndex(0), 6179 GetPaletteAdrByColorIndex(0));*/ 6180 // pos_status = ((scr_w-1) * pl) / pm; 6181 /* DrawRectangle(1,scr_h-4-2*GetFontYSIZE(FONT_SMALL_BOLD)+1,pos_status,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-3,0, 6182 GetPaletteAdrByColorIndex(14), 6183 GetPaletteAdrByColorIndex(14)); */ 6184 // wstrcatprintf(data->ws1,"\nLoading images..."); 6185 6186 DrawRectangle(rc.x,rc.y,rc.x2,rc.y2,0,BGPBcolor,BGPBcolor); \ 00000170 B40100EF SWI +436 6187 pos_status = (((rc.x2-rc.x)-1) * pl) / pm; \ 00000174 10109DE5 LDR R1,[SP, #+16] \ 00000178 07004AE0 SUB R0,R10,R7 \ 0000017C 010040E2 SUB R0,R0,#+1 \ 00000180 910000E0 MUL R0,R1,R0 \ 00000184 0C109DE5 LDR R1,[SP, #+12] 6188 DrawRectangle(rc.x+2,rc.y+2,rc.x+pos_status+2,rc.y2-2,0,PBcolor,PBcolor); \ 00000188 02304BE2 SUB R3,R11,#+2 \ 0000018C ........ _BLF ??div32_a,??rA??div32_a \ 00000190 B8029FE5 LDR R0,??DrawLoadScreen_0+0x18 ;; PBcolor \ 00000194 0020A0E1 MOV R2,R0 \ 00000198 04002DE9 PUSH {R2} \ 0000019C 01002DE9 PUSH {R0} \ 000001A0 0000A0E3 MOV R0,#+0 \ 000001A4 01002DE9 PUSH {R0} \ 000001A8 070081E0 ADD R0,R1,R7 \ 000001AC 022080E2 ADD R2,R0,#+2 \ 000001B0 021088E2 ADD R1,R8,#+2 \ 000001B4 020087E2 ADD R0,R7,#+2 \ 000001B8 B40100EF SWI +436 6189 6190 if(total_smiles) \ 000001BC 90029FE5 LDR R0,??DrawLoadScreen_0+0x1C ;; total_smiles \ 000001C0 001090E5 LDR R1,[R0, #+0] \ 000001C4 18D08DE2 ADD SP,SP,#+24 \ 000001C8 000051E3 CMP R1,#+0 \ 000001CC 0300000A BEQ ??DrawLoadScreen_4 6191 { 6192 wstrcatprintf(data->ws1,"\nLoaded %d smiles",total_smiles); \ 000001D0 002090E5 LDR R2,[R0, #+0] \ 000001D4 340094E5 LDR R0,[R4, #+52] \ 000001D8 541086E2 ADD R1,R6,#+84 \ 000001DC 160200EF SWI +534 6193 } 6194 if (xstatuses_load) \ ??DrawLoadScreen_4: \ 000001E0 70029FE5 LDR R0,??DrawLoadScreen_0+0x20 ;; xstatuses_load \ 000001E4 000090E5 LDR R0,[R0, #+0] \ 000001E8 000050E3 CMP R0,#+0 \ 000001EC 0400000A BEQ ??DrawLoadScreen_3 6195 { 6196 wstrcatprintf(data->ws1,"\nLoaded %d xstatus",total_xstatuses); \ 000001F0 64029FE5 LDR R0,??DrawLoadScreen_0+0x24 ;; total_xstatuses \ 000001F4 681086E2 ADD R1,R6,#+104 \ 000001F8 002090E5 LDR R2,[R0, #+0] \ 000001FC 340094E5 LDR R0,[R4, #+52] \ 00000200 160200EF SWI +534 6197 } 6198 } 6199 6200 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: \ 00000204 1700A0E3 MOV R0,#+23 \ 00000208 2E0100EF SWI +302 \ 0000020C 00A0A0E1 MOV R10,R0 \ 00000210 0000A0E3 MOV R0,#+0 \ 00000214 2E0100EF SWI +302 \ 00000218 00B0A0E1 MOV R11,R0 \ 0000021C 0500A0E3 MOV R0,#+5 \ 00000220 C50100EF SWI +453 \ 00000224 08109DE5 LDR R1,[SP, #+8] \ 00000228 00042DE9 PUSH {R10} \ 0000022C 048041E2 SUB R8,R1,#+4 \ 00000230 00082DE9 PUSH {R11} \ 00000234 0010A0E3 MOV R1,#+0 \ 00000238 02002DE9 PUSH {R1} \ 0000023C 000048E0 SUB R0,R8,R0 \ 00000240 047049E2 SUB R7,R9,#+4 \ 00000244 0730A0E1 MOV R3,R7 \ 00000248 0B10A0E3 MOV R1,#+11 \ 0000024C 02002DE9 PUSH {R1} \ 00000250 01002DE9 PUSH {R0} \ 00000254 340094E5 LDR R0,[R4, #+52] \ 00000258 0320A0E3 MOV R2,#+3 \ 0000025C 0310A0E3 MOV R1,#+3 \ 00000260 4C0100EF SWI +332 6201 /*} 6202 else 6203 { 6204 wsprintf(data->ws1,"%t UIN!","Выберите"); 6205 DrawLine(0,CLIST_Y1-3,ScreenW()-1,CLIST_Y1-3,0,clrWhite); 6206 DrawString(data->ws1,2,YDISP+2,scr_w-1,YDISP+GetFontYSIZE(FONT_SMALL),FONT_SMALL,0,fntSelect,0); 6207 // DrawList(); 6208 } 6209 */ 6210 6211 #ifdef kluchnik 6212 int y=160; 6213 char A[]="[A] %s"; 6214 char I[]="[I]"; 6215 char V[]="[V]"; 6216 char S[]="[S]"; 6217 6218 if(CurrentPrivateStatus==1) 6219 { 6220 wsprintf(data->ws2,I); 6221 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 6222 y+=GetFontYSIZE(11)+5; 6223 } 6224 6225 if(Is_Vibra_Enabled) 6226 { 6227 wsprintf(data->ws2,V); 6228 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 6229 y+=GetFontYSIZE(11)+5; 6230 } 6231 6232 if(Is_Sounds_Enabled) 6233 { 6234 wsprintf(data->ws2,S); 6235 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 6236 y+=GetFontYSIZE(11)+5; 6237 } 6238 6239 if(Is_Double_Vibra_On) 6240 { 6241 wsprintf(data->ws2,"[Vr]"); 6242 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 6243 } 6244 6245 if(away_m) 6246 { 6247 wsprintf(data->ws2,A,away_msg_time_dace); 6248 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 6249 y+=GetFontYSIZE(11)+5; 6250 } 6251 6252 6253 wsprintf(data->ws2,"Uin: %d",UIN); 6254 DrawString(data->ws2,1,scr_h-10-4*GetFontYSIZE(FONT_SMALL_BOLD)+1,ScreenW()-1,scr_h-10-GetFontYSIZE(FONT_MEDIUM_BOLD)-3 6255 ,FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 6256 6257 if(connect_state==3) 6258 { 6259 wsprintf(data->ws2,"Online: %02d:%02d:%02d not action %d sec", uptimeHour, uptimeMin, uptimeSec,msg_away_timer*5); 6260 } 6261 else 6262 wsprintf(data->ws2,"Offline [%02d:%02d:%02d]",uptimeHour, uptimeMin, uptimeSec); 6263 DrawString(data->ws2,1,scr_h-10-3*GetFontYSIZE(FONT_SMALL_BOLD)+1,ScreenW()-1,scr_h-10-GetFontYSIZE(FONT_MEDIUM_BOLD)-3 6264 ,FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 6265 #endif 6266 6267 if(IsInvertSoftKey) \ 00000264 ........ LDR R0,??DataTable239 ;; IsInvertSoftKey \ 00000268 C990A0E1 ASR R9,R9,#+1 \ 0000026C 000090E5 LDR R0,[R0, #+0] \ 00000270 14D08DE2 ADD SP,SP,#+20 \ 00000274 000050E3 CMP R0,#+0 \ 00000278 3700000A BEQ ??DrawLoadScreen_5 6268 { 6269 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 0000027C 380094E5 LDR R0,[R4, #+56] \ 00000280 7C2086E2 ADD R2,R6,#+124 \ 00000284 0610A0E1 MOV R1,R6 \ 00000288 240100EF SWI +292 6270 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)); \ 0000028C 1700A0E3 MOV R0,#+23 \ 00000290 2E0100EF SWI +302 \ 00000294 00A0A0E1 MOV R10,R0 \ 00000298 0000A0E3 MOV R0,#+0 \ 0000029C 2E0100EF SWI +302 \ 000002A0 00B0A0E1 MOV R11,R0 \ 000002A4 0500A0E3 MOV R0,#+5 \ 000002A8 C50100EF SWI +453 \ 000002AC 00042DE9 PUSH {R10} \ 000002B0 00082DE9 PUSH {R11} \ 000002B4 0410A0E3 MOV R1,#+4 \ 000002B8 02002DE9 PUSH {R1} \ 000002BC 0730A0E1 MOV R3,R7 \ 000002C0 002048E0 SUB R2,R8,R0 \ 000002C4 0510A0E3 MOV R1,#+5 \ 000002C8 02002DE9 PUSH {R1} \ 000002CC 0810A0E1 MOV R1,R8 \ 000002D0 02002DE9 PUSH {R1} \ 000002D4 380094E5 LDR R0,[R4, #+56] \ 000002D8 0910A0E1 MOV R1,R9 \ 000002DC 4C0100EF SWI +332 6271 6272 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ 000002E0 7C0495E5 LDR R0,[R5, #+1148] \ 000002E4 14D08DE2 ADD SP,SP,#+20 \ 000002E8 000050E3 CMP R0,#+0 \ 000002EC 380094E5 LDR R0,[R4, #+56] \ 000002F0 84208612 ADDNE R2,R6,#+132 \ 000002F4 03208602 ADDEQ R2,R6,#+3 \ 000002F8 0610A0E1 MOV R1,R6 \ 000002FC 240100EF SWI +292 6273 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)); \ 00000300 1700A0E3 MOV R0,#+23 \ 00000304 2E0100EF SWI +302 \ 00000308 0050A0E1 MOV R5,R0 \ 0000030C 0000A0E3 MOV R0,#+0 \ 00000310 2E0100EF SWI +302 \ 00000314 0060A0E1 MOV R6,R0 \ 00000318 0500A0E3 MOV R0,#+5 \ 0000031C C50100EF SWI +453 \ 00000320 20002DE9 PUSH {R5} \ 00000324 40002DE9 PUSH {R6} \ 00000328 0110A0E3 MOV R1,#+1 \ 0000032C 02002DE9 PUSH {R1} \ 00000330 0930A0E1 MOV R3,R9 \ 00000334 002048E0 SUB R2,R8,R0 \ 00000338 0510A0E3 MOV R1,#+5 \ 0000033C 02002DE9 PUSH {R1} \ 00000340 0810A0E1 MOV R1,R8 \ 00000344 02002DE9 PUSH {R1} \ 00000348 380094E5 LDR R0,[R4, #+56] \ 0000034C 0310A0E3 MOV R1,#+3 \ 00000350 4C0100EF SWI +332 \ 00000354 14D08DE2 ADD SP,SP,#+20 \ 00000358 F78FBDE8 POP {R0-R2,R4-R11,PC} 6274 } 6275 else 6276 { 6277 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ ??DrawLoadScreen_5: \ 0000035C 7C0495E5 LDR R0,[R5, #+1148] \ 00000360 0610A0E1 MOV R1,R6 \ 00000364 000050E3 CMP R0,#+0 \ 00000368 380094E5 LDR R0,[R4, #+56] \ 0000036C 84208612 ADDNE R2,R6,#+132 \ 00000370 03208602 ADDEQ R2,R6,#+3 \ 00000374 240100EF SWI +292 6278 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)); \ 00000378 1700A0E3 MOV R0,#+23 \ 0000037C 2E0100EF SWI +302 \ 00000380 0050A0E1 MOV R5,R0 \ 00000384 0000A0E3 MOV R0,#+0 \ 00000388 2E0100EF SWI +302 \ 0000038C 00A0A0E1 MOV R10,R0 \ 00000390 0500A0E3 MOV R0,#+5 \ 00000394 C50100EF SWI +453 \ 00000398 20002DE9 PUSH {R5} \ 0000039C 00042DE9 PUSH {R10} \ 000003A0 0410A0E3 MOV R1,#+4 \ 000003A4 02002DE9 PUSH {R1} \ 000003A8 0730A0E1 MOV R3,R7 \ 000003AC 002048E0 SUB R2,R8,R0 \ 000003B0 0510A0E3 MOV R1,#+5 \ 000003B4 02002DE9 PUSH {R1} \ 000003B8 0810A0E1 MOV R1,R8 \ 000003BC 02002DE9 PUSH {R1} \ 000003C0 380094E5 LDR R0,[R4, #+56] \ 000003C4 0910A0E1 MOV R1,R9 \ 000003C8 4C0100EF SWI +332 6279 6280 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 000003CC 380094E5 LDR R0,[R4, #+56] \ 000003D0 7C2086E2 ADD R2,R6,#+124 \ 000003D4 0610A0E1 MOV R1,R6 \ 000003D8 240100EF SWI +292 6281 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)); \ 000003DC 1700A0E3 MOV R0,#+23 \ 000003E0 2E0100EF SWI +302 \ 000003E4 0050A0E1 MOV R5,R0 \ 000003E8 0000A0E3 MOV R0,#+0 \ 000003EC 2E0100EF SWI +302 \ 000003F0 0060A0E1 MOV R6,R0 \ 000003F4 0500A0E3 MOV R0,#+5 \ 000003F8 C50100EF SWI +453 \ 000003FC 20002DE9 PUSH {R5} \ 00000400 40002DE9 PUSH {R6} \ 00000404 0110A0E3 MOV R1,#+1 \ 00000408 02002DE9 PUSH {R1} \ 0000040C 0930A0E1 MOV R3,R9 \ 00000410 002048E0 SUB R2,R8,R0 \ 00000414 0510A0E3 MOV R1,#+5 \ 00000418 02002DE9 PUSH {R1} \ 0000041C 0810A0E1 MOV R1,R8 \ 00000420 02002DE9 PUSH {R1} \ 00000424 380094E5 LDR R0,[R4, #+56] \ 00000428 0310A0E3 MOV R1,#+3 \ 0000042C 4C0100EF SWI +332 \ 00000430 28D08DE2 ADD SP,SP,#+40 6282 } 6283 /* 6284 wsprintf(data->ws2,"%d %s",addonuin[0].uin,addonuin[0].pass); 6285 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)); 6286 */ 6287 } \ 00000434 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return \ ??DrawLoadScreen_0: \ 00000438 ........ DC32 percent_t \ 0000043C ........ DC32 pictures_max \ 00000440 ........ DC32 PBRECT \ 00000444 ........ DC32 pictures_loaded \ 00000448 ........ DC32 IsShowInfo \ 0000044C ........ DC32 BGPBcolor \ 00000450 ........ DC32 PBcolor \ 00000454 ........ DC32 total_smiles \ 00000458 ........ DC32 xstatuses_load \ 0000045C ........ DC32 total_xstatuses 6288 6289 //int ShowLoadScreen=1; \ In segment CODE, align 4, keep-with-next 6290 void method0(MAIN_GUI *data) 6291 { \ method0: \ 00000000 30402DE9 PUSH {R4,R5,LR} 6292 // if(!IsGuiOnTop(maingui_id)) return; 6293 #ifndef DEBUG 6294 if(IsGuiOnTop(maingui_id)) \ 00000004 ........ LDR R5,??DataTable243 ;; i_rc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C D40295E5 LDR R0,[R5, #+724] \ 00000010 350100EF SWI +309 \ 00000014 000050E3 CMP R0,#+0 \ 00000018 3080BD08 POPEQ {R4,R5,PC} 6295 { 6296 if(ShowLoadScreen) \ 0000001C A80495E5 LDR R0,[R5, #+1192] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 0200000A BEQ ??method0_0 6297 { 6298 #ifdef ELKA 6299 DisableIconBar(0); 6300 #endif 6301 DrawLoadScreen(data); \ 00000028 0400A0E1 MOV R0,R4 \ 0000002C 3040BDE8 POP {R4,R5,LR} ;; Pop \ 00000030 ........ B DrawLoadScreen ;; tailcall 6302 } 6303 else 6304 { 6305 #ifdef ELKA 6306 #ifdef ICONBAR 6307 DisableIconBar(0); 6308 #else 6309 DisableIconBar(1); 6310 #endif 6311 #endif 6312 SetCanvasFlag(1); \ ??method0_0: \ 00000034 0100A0E3 MOV R0,#+1 \ 00000038 ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 6313 DrawContactList(); \ 0000003C 3040BDE8 POP {R4,R5,LR} ;; Pop \ 00000040 ........ B DrawContactList ;; tailcall 6314 } 6315 } 6316 #else 6317 DrawLoadScreen(data); 6318 #endif 6319 } 6320 \ In segment CODE, align 4, keep-with-next 6321 void method1(MAIN_GUI *data,void *(*malloc_adr)(int)) 6322 { \ method1: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 6323 data->ws1=AllocWS(256); \ 00000008 400FA0E3 MOV R0,#+256 \ 0000000C 250100EF SWI +293 \ 00000010 340084E5 STR R0,[R4, #+52] 6324 data->ws2=AllocWS(256); \ 00000014 400FA0E3 MOV R0,#+256 \ 00000018 250100EF SWI +293 \ 0000001C 380084E5 STR R0,[R4, #+56] 6325 6326 if(isSystemFont) clfont=100+pngFont; \ 00000020 ........ LDR R0,??DataTable234 ;; isSystemFont \ 00000024 000090E5 LDR R0,[R0, #+0] \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 0300000A BEQ ??method1_0 \ 00000030 ........ LDR R0,??DataTable235 ;; pngFont \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 640080E2 ADD R0,R0,#+100 \ 0000003C 000000EA B ??method1_1 6327 else clfont=2; \ ??method1_0: \ 00000040 0200A0E3 MOV R0,#+2 \ ??method1_1: \ 00000044 ........ LDR R5,??DataTable243 ;; i_rc \ 00000048 DC0485E5 STR R0,[R5, #+1244] 6328 6329 if(icons[IS_ONLINE]) \ 0000004C 340095E5 LDR R0,[R5, #+52] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 DC0495E5 LDR R0,[R5, #+1244] \ 00000058 0600000A BEQ ??method1_2 6330 hy=(icons[IS_ONLINE]->h > FontH(clfont)) ? (icons[IS_ONLINE]->h) : (FontH(clfont)); \ 0000005C ........ _BLF FontH,??FontH??rA \ 00000060 341095E5 LDR R1,[R5, #+52] \ 00000064 0120D1E5 LDRB R2,[R1, #+1] \ 00000068 020050E1 CMP R0,R2 \ 0000006C 0200A0B1 MOVLT R0,R2 \ 00000070 010000BA BLT ??method1_3 \ 00000074 DC0495E5 LDR R0,[R5, #+1244] 6331 else 6332 hy=FontH(clfont); \ ??method1_2: \ 00000078 ........ _BLF FontH,??FontH??rA \ ??method1_3: \ 0000007C D80485E5 STR R0,[R5, #+1240] 6333 6334 hy+=YDISP; 6335 data->gui.state=1; \ 00000080 0100A0E3 MOV R0,#+1 \ 00000084 0C00C4E5 STRB R0,[R4, #+12] 6336 } \ 00000088 3080BDE8 POP {R4,R5,PC} ;; return 6337 \ In segment CODE, align 4, keep-with-next 6338 void method2(MAIN_GUI *data,void (*mfree_adr)(void *)) 6339 { \ method2: \ 00000000 30402DE9 PUSH {R4,R5,LR} 6340 FreeWS(data->ws1); 6341 FreeWS(data->ws2); 6342 #ifndef DEBUG 6343 mfree(screen3.bitmap); \ 00000004 ........ LDR R5,??DataTable243 ;; 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 740295E5 LDR R0,[R5, #+628] \ 00000020 150000EF SWI +21 6344 mfree(screen4.bitmap); \ 00000024 7C0295E5 LDR R0,[R5, #+636] \ 00000028 150000EF SWI +21 6345 #endif 6346 data->gui.state=0; \ 0000002C 0000A0E3 MOV R0,#+0 \ 00000030 0C00C4E5 STRB R0,[R4, #+12] 6347 } \ 00000034 3080BDE8 POP {R4,R5,PC} ;; return 6348 \ In segment CODE, align 4, keep-with-next 6349 void method3(MAIN_GUI *data,void *(*malloc_adr)(int),void (*mfree_adr)(void *)) 6350 { \ method3: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 6351 DisableIDLETMR(); \ 00000008 7F0100EF SWI +383 6352 data->gui.state=2; \ 0000000C 0200A0E3 MOV R0,#+2 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 6353 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 6354 \ In segment CODE, align 4, keep-with-next 6355 void method4(MAIN_GUI *data,void (*mfree_adr)(void *)) 6356 { 6357 if (data->gui.state!=2) \ method4: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 6358 return; 6359 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 6360 } \ 00000010 1EFF2FE1 BX LR ;; return 6361 6362 \ In segment CODE, align 4, keep-with-next 6363 int LoadOnKey(GUI_MSG *msg) 6364 { \ LoadOnKey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 0CD04DE2 SUB SP,SP,#+12 6365 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 6366 { 6367 switch(msg->gbsmsg->submess) \ 00000020 ........ LDR R4,??DataTable243 ;; i_rc \ 00000024 ........ LDR R0,??DataTable239 ;; IsInvertSoftKey \ 00000028 082092E5 LDR R2,[R2, #+8] \ 0000002C A83494E5 LDR R3,[R4, #+1192] \ 00000030 60C494E5 LDR R12,[R4, #+1120] \ 00000034 00E090E5 LDR LR,[R0, #+0] \ 00000038 ........ LDR R5,??DataTable254 ;; create_connect \ 0000003C ........ LDR R1,??DataTable250 ;; end_socket \ 00000040 B000A0E3 MOV R0,#+176 \ 00000044 780D80E3 ORR R0,R0,#0x1E00 \ 00000048 046080E0 ADD R6,R0,R4 \ 0000004C ........ LDR R0,??DataTable242 ;; 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 6368 { 6369 // case ENTER_BUTTON: Enter(); break; 6370 case LEFT_SOFT: 6371 if(IsInvertSoftKey) \ ??LoadOnKey_2: \ 000000AC 00005EE3 CMP LR,#+0 \ 000000B0 0D00000A BEQ ??LoadOnKey_3 6372 { 6373 #ifdef DEBUG 6374 if (cltop || sock==-1) CreateCL();//create_contactlist_menu(); 6375 #else 6376 if(ShowLoadScreen && (cltop || sock==-1)) ShowLoadScreen=0;//показывть контакт лист \ ??LoadOnKey_4: \ 000000B4 000053E3 CMP R3,#+0 \ 000000B8 3400000A BEQ ??LoadOnKey_1 \ 000000BC 7C0494E5 LDR R0,[R4, #+1148] \ 000000C0 000050E3 CMP R0,#+0 \ 000000C4 0100001A BNE ??LoadOnKey_5 \ 000000C8 08005CE1 CMP R12,R8 \ 000000CC 2F00001A BNE ??LoadOnKey_1 \ ??LoadOnKey_5: \ 000000D0 A8A484E5 STR R10,[R4, #+1192] \ 000000D4 000000EA B ??LoadOnKey_6 6377 #endif 6378 6379 // ShowLoadScreen=0; 6380 //unhooked2=1; 6381 } 6382 else// return 1; 6383 { 6384 if(ShowLoadScreen) 6385 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 6386 else 6387 ShowLoadScreen=1; \ ??LoadOnKey_7: \ 000000D8 A89484E5 STR R9,[R4, #+1192] \ ??LoadOnKey_6: \ 000000DC 0000A0E3 MOV R0,#+0 \ 000000E0 FE8FBDE8 POP {R1-R11,PC} 6388 } 6389 // if (cltop) remake_clmenu(); 6390 break; 6391 case RIGHT_SOFT: 6392 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} 6393 { 6394 if(ShowLoadScreen) 6395 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 6396 else 6397 ShowLoadScreen=1; 6398 } 6399 else 6400 { 6401 #ifdef DEBUG 6402 if (cltop || sock==-1)CreateCL(); //create_contactlist_menu(); 6403 #else 6404 if(ShowLoadScreen && (cltop || sock==-1)) ShowLoadScreen=0;//показывть контакт лист 6405 #endif 6406 // ShowLoadScreen=0; 6407 // unhooked2=1; 6408 } 6409 break; 6410 case GREEN_BUTTON: 6411 disautorecconect=0; \ ??LoadOnKey_9: \ 000000FC 38A484E5 STR R10,[R4, #+1080] 6412 if ((connect_state==0)&&(sock==-1)) \ 00000100 5C0494E5 LDR R0,[R4, #+1116] \ 00000104 000050E3 CMP R0,#+0 \ 00000108 08005C01 CMPEQ R12,R8 \ 0000010C 1F00001A BNE ??LoadOnKey_1 6413 { 6414 GBS_DelTimer(&reconnect_tmr); \ ??LoadOnKey_10: \ 00000110 0600A0E1 MOV R0,R6 \ 00000114 8C0100EF SWI +396 6415 DNR_TRIES=3; \ 00000118 9C7484E5 STR R7,[R4, #+1180] 6416 SUBPROC((void *)create_connect); \ 0000011C 0500A0E1 MOV R0,R5 \ 00000120 190000EA B ??LoadOnKey_11 6417 } 6418 break; 6419 case RED_BUTTON: 6420 // extern volatile int disautorecconect; 6421 disautorecconect=1; \ ??LoadOnKey_12: \ 00000124 389484E5 STR R9,[R4, #+1080] 6422 // extern void end_socket(void); 6423 SUBPROC((void*)end_socket); \ 00000128 0100A0E1 MOV R0,R1 \ 0000012C 160000EA B ??LoadOnKey_11 6424 break; 6425 case '0': 6426 SUBPROC((void*)end_socket); \ ??LoadOnKey_13: \ 00000130 0100A0E1 MOV R0,R1 \ 00000134 710100EF SWI +369 6427 GBS_DelTimer(&reconnect_tmr); \ 00000138 F4FFFFEA B ??LoadOnKey_10 6428 DNR_TRIES=3; 6429 SUBPROC((void *)create_connect); 6430 break; 6431 6432 //------------------------------------------------------// 6433 6434 case '1': 6435 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??LoadOnKey_14: \ 0000013C 3C1494E5 LDR R1,[R4, #+1084] \ 00000140 000051E3 CMP R1,#+0 \ 00000144 0090A013 MOVNE R9,#+0 \ 00000148 3C9484E5 STR R9,[R4, #+1084] 6436 SUBPROC((void*)WriteDefSettings); \ 0000014C 0E0000EA B ??LoadOnKey_11 6437 break; 6438 case '2': 6439 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??LoadOnKey_15: \ 00000150 E41294E5 LDR R1,[R4, #+740] \ 00000154 000051E3 CMP R1,#+0 \ 00000158 0090A013 MOVNE R9,#+0 \ 0000015C E49284E5 STR R9,[R4, #+740] 6440 SUBPROC((void*)WriteDefSettings); \ 00000160 090000EA B ??LoadOnKey_11 6441 break; 6442 case '3': 6443 if(CurrentPrivateStatus!=1) \ ??LoadOnKey_16: \ 00000164 480494E5 LDR R0,[R4, #+1096] \ 00000168 010050E3 CMP R0,#+1 \ 0000016C 0300A003 MOVEQ R0,#+3 6444 SetPrivateStatus(1);//Инвиз \ 00000170 0100A013 MOVNE R0,#+1 \ 00000174 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA \ 00000178 D7FFFFEA B ??LoadOnKey_6 6445 else 6446 SetPrivateStatus(3); 6447 break; 6448 case '4': 6449 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??LoadOnKey_17: \ 0000017C C81294E5 LDR R1,[R4, #+712] \ 00000180 000051E3 CMP R1,#+0 \ 00000184 0090A013 MOVNE R9,#+0 \ 00000188 C89284E5 STR R9,[R4, #+712] 6450 SUBPROC((void*)WriteDefSettings); \ ??LoadOnKey_11: \ 0000018C 710100EF SWI +369 6451 break; 6452 } 6453 } 6454 return 0; \ ??LoadOnKey_1: \ 00000190 0000A0E3 MOV R0,#+0 \ 00000194 FE8FBDE8 POP {R1-R11,PC} ;; return 6455 } 6456 6457 \ In segment CODE, align 4, keep-with-next 6458 int method5(MAIN_GUI *data,GUI_MSG *msg) 6459 { \ method5: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0140A0E1 MOV R4,R1 6460 DirectRedrawGUI(); \ 00000008 3F0100EF SWI +319 6461 #ifndef DEBUG 6462 if(ShowLoadScreen) \ 0000000C 20009FE5 LDR R0,??method5_0 ;; i_rc + 1192 \ 00000010 000090E5 LDR R0,[R0, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0400A0E1 MOV R0,R4 \ 0000001C 0100000A BEQ ??method5_1 6463 return LoadOnKey(msg); \ 00000020 1040BDE8 POP {R4,LR} ;; Pop \ 00000024 ........ B LoadOnKey ;; tailcall 6464 else 6465 ClOnKey(msg); \ ??method5_1: \ 00000028 ........ BL ClOnKey 6466 6467 return(0); \ 0000002C 0000A0E3 MOV R0,#+0 \ 00000030 1080BDE8 POP {R4,PC} ;; return \ ??method5_0: \ 00000034 ........ DC32 i_rc + 1192 6468 #else 6469 return LoadOnKey(msg); 6470 #endif 6471 /* 6472 if(msg->gbsmsg->msg==LONG_PRESS || msg->gbsmsg->msg==KEY_DOWN) 6473 { 6474 switch(msg->gbsmsg->submess) 6475 { 6476 case UP_BUTTON: MoveUp(); break; 6477 case DOWN_BUTTON: MoveDown(); break; 6478 } 6479 }*/ 6480 6481 } 6482 \ In segment CODE, align 4, keep-with-next 6483 int method8(void){return(0);} \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return \ In segment CODE, align 4, keep-with-next 6484 int method9(void){return(0);} \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 6485 6486 6487 6488 const void * const gui_methods[11]={ 6489 (void *)method0, //Redraw 6490 (void *)method1, //Create 6491 (void *)method2, //Close 6492 (void *)method3, //Focus 6493 (void *)method4, //Unfocus 6494 (void *)method5, //OnKey 6495 0, 6496 (void *)kill_data, //method7, //Destroy 6497 (void *)method8, 6498 (void *)method9, 6499 0 6500 }; 6501 6502 6503 6504 int checkGui(int id); 6505 #define idlegui_id(icsm) (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 6506 6507 int _to_develop=0; \ In segment CODE, align 4, keep-with-next 6508 int my_keyhook(int key, int m) 6509 { \ my_keyhook: \ 00000000 70402DE9 PUSH {R4-R6,LR} 6510 if(m==KEY_DOWN) \ 00000004 ........ LDR R4,??DataTable243 ;; i_rc \ 00000008 0050A0E1 MOV R5,R0 \ 0000000C 9300A0E3 MOV R0,#+147 \ 00000010 400F80E3 ORR R0,R0,#0x100 \ 00000014 000051E1 CMP R1,R0 \ 00000018 0F00001A BNE ??my_keyhook_0 6511 { 6512 #ifdef ELKA 6513 if ((key==CAMERA_BUTTON)&&(!IsUnlocked())) 6514 { 6515 GBS_StopTimer(&away_tmr); 6516 msg_away_timer=AUTO_ENGADE*12; 6517 away_timer(); 6518 main_d=1; 6519 } 6520 else 6521 { 6522 #endif 6523 if(Reset_timer) \ 0000001C 84009FE5 LDR R0,??my_keyhook_1 ;; Reset_timer \ 00000020 000090E5 LDR R0,[R0, #+0] \ 00000024 000050E3 CMP R0,#+0 \ 00000028 7080BD08 POPEQ {R4-R6,PC} 6524 { 6525 msg_away_timer=0; 6526 away_m=0; 6527 if(change_back_status) \ 0000002C 8C0394E5 LDR R0,[R4, #+908] \ 00000030 0050A0E3 MOV R5,#+0 \ 00000034 805384E5 STR R5,[R4, #+896] \ 00000038 845384E5 STR R5,[R4, #+900] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 7080BD08 POPEQ {R4-R6,PC} 6528 { 6529 CurrentStatus=status_rem; \ 00000044 880394E5 LDR R0,[R4, #+904] \ 00000048 740384E5 STR R0,[R4, #+884] 6530 set_my_status(); \ 0000004C ........ BL set_my_status 6531 change_back_status=0; \ 00000050 8C5384E5 STR R5,[R4, #+908] \ 00000054 0000A0E3 MOV R0,#+0 \ 00000058 7080BDE8 POP {R4-R6,PC} 6532 } 6533 } 6534 #ifdef ELKA 6535 } 6536 #endif 6537 } 6538 6539 if(m==LONG_PRESS) \ ??my_keyhook_0: \ 0000005C 020080E2 ADD R0,R0,#+2 \ 00000060 000051E1 CMP R1,R0 \ 00000064 0D00001A BNE ??my_keyhook_2 6540 { 6541 void *icsm=FindCSMbyID(CSM_root()->idle_id); \ 00000068 068100EF SWI +33030 \ 0000006C 040090E5 LDR R0,[R0, #+4] \ 00000070 080100EF SWI +264 \ 00000074 0060A0E1 MOV R6,R0 6542 if( key==VOL_DOWN_BUTTON && IsUnlocked() && !(checkGui(idlegui_id(icsm))) ) \ 00000078 0E0055E3 CMP R5,#+14 \ 0000007C 0700001A BNE ??my_keyhook_2 \ 00000080 430000EF SWI +67 \ 00000084 000050E3 CMP R0,#+0 \ 00000088 7080BD08 POPEQ {R4-R6,PC} \ 0000008C 2C0096E5 LDR R0,[R6, #+44] \ 00000090 ........ BL checkGui \ 00000094 000050E3 CMP R0,#+0 6543 { 6544 _to_develop=1; \ 00000098 0100A003 MOVEQ R0,#+1 \ 0000009C 00058405 STREQ R0,[R4, #+1280] 6545 //to_develop(); 6546 } 6547 } 6548 return 0; \ ??my_keyhook_2: \ 000000A0 0000A0E3 MOV R0,#+0 \ 000000A4 7080BDE8 POP {R4-R6,PC} ;; return \ ??my_keyhook_1: \ 000000A8 ........ DC32 Reset_timer 6549 } \ In segment DATA_C, align 4, align-sorted 6550 /* 6551 int mode_enter; 6552 int mode; 6553 6554 int my_keyhook(int submsg, int msg) 6555 { 6556 if(Reset_timer) 6557 { 6558 msg_away_timer=0; 6559 away_m=0; 6560 if(change_back_status) 6561 { 6562 CurrentStatus=status_rem; 6563 set_my_status(); 6564 change_back_status=0; 6565 } 6566 } 6567 if (submsg!=VOL_DOWN_BUTTON) return(0); 6568 switch(msg) 6569 { 6570 case KEY_DOWN: 6571 if (mode_enter==2) 6572 { 6573 GBS_SendMessage(MMI_CEPID,KEY_UP,VOL_DOWN_BUTTON); 6574 return (0); 6575 } 6576 mode_enter=0; 6577 return (2); 6578 case KEY_UP: 6579 if (mode==1)mode=0; 6580 if (mode_enter==0) 6581 { 6582 mode_enter=2; 6583 GBS_SendMessage(MMI_CEPID,KEY_DOWN,VOL_DOWN_BUTTON); 6584 return (2); 6585 } 6586 if (mode_enter==2) 6587 { 6588 mode_enter=0; 6589 return (0); 6590 } 6591 mode_enter=0; 6592 return (2); 6593 case LONG_PRESS: 6594 mode_enter=1; 6595 if(mode==0) 6596 { 6597 void *icsm; 6598 icsm=FindCSMbyID(CSM_root()->idle_id); 6599 if(!(checkGui(idlegui_id(icsm))) && IsUnlocked()) 6600 { 6601 to_develop(); 6602 } 6603 } 6604 mode=1; 6605 break; 6606 } 6607 return(2); 6608 }*/ 6609 const RECT Canvas={0,0,0,0}; \ Canvas: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ _rn: \ 00000008 0D0A00 DC8 "\015\012" \ percent_s: \ 0000000B 257300 DC8 "%s" \ percent_d: \ 0000000E 256400 DC8 "%d" \ _d: \ 00000011 256400 DC8 "%d" \ 00000014 343A5C6E6174 DC8 "4:\\natlog.txt" \ 6C6F672E7478 \ 7400 \ 00000022 0000 DC8 0, 0 \ 00000024 4572726F7221 DC8 "Error!" \ 00 \ 0000002B 00 DC8 0 \ 0000002C 536F756E6420 DC8 "Sound 0n" \ 306E00 \ 00000035 000000 DC8 0, 0, 0 \ 00000038 536F756E6420 DC8 "Sound Off" \ 4F666600 \ 00000042 0000 DC8 0, 0 \ 00000044 566962726120 DC8 "Vibra On" \ 4F6E00 \ 0000004D 000000 DC8 0, 0, 0 \ 00000050 566962726120 DC8 "Vibra Off" \ 4F666600 \ 0000005A 0000 DC8 0, 0 \ 0000005C C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\352\353\376\367\345\355" \ E2EAEBFEF7E5 \ ED00 \ 0000006A 0000 DC8 0, 0 \ 0000006C C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\373\352\353\376\367\345\355" \ E2FBEAEBFEF7 \ E5ED00 \ 0000007B 00 DC8 0 \ 0000007C 566962726120 DC8 "Vibra rem On" \ 72656D204F6E \ 00 \ 00000089 000000 DC8 0, 0, 0 \ 0000008C 566962726120 DC8 "Vibra rem Off" \ 72656D204F66 \ 6600 \ 0000009A 0000 DC8 0, 0 \ 0000009C 416C6C206368 DC8 "All chat clear!" \ 617420636C65 \ 61722100 \ 000000AC 44656661756C DC8 "Default show x-status" \ 742073686F77 \ 20782D737461 \ 74757300 \ 000000C2 0000 DC8 0, 0 \ 000000C4 44656661756C DC8 "Default show time" \ 742073686F77 \ 2074696D6500 \ 000000D6 0000 DC8 0, 0 \ 000000D8 57616974696E DC8 "Waiting for GPRS up..." \ 6720666F7220 \ 475052532075 \ 702E2E2E00 \ 000000EF 00 DC8 0 \ 000000F0 436F6E6E6563 DC8 "Connect to %s:%d" \ 7420746F2025 \ 733A256400 \ 00000101 000000 DC8 0, 0, 0 \ 00000104 0A436F6E6E65 DC8 "\012Connect by IP!" \ 637420627920 \ 49502100 \ 00000114 53656E642044 DC8 "Send DNR..." \ 4E522E2E2E00 \ 00000120 444E52204552 DC8 "DNR ERROR %d!" \ 524F52202564 \ 2100 \ 0000012E 0000 DC8 0, 0 \ 00000130 444E52204F6B DC8 "DNR Ok, connecting..." \ 2C20636F6E6E \ 656374696E67 \ 2E2E2E00 \ 00000146 0000 DC8 0, 0 \ 00000148 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 \ 00000161 000000 DC8 0, 0, 0 \ 00000164 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 \ 0000018F 00 DC8 0 \ 00000190 D1E5F0E2E5F0 DC8 "\321\345\360\342\345\360 \355\345 \355\340\351\344\345\355!" \ 20EDE520EDE0 \ E9E4E5ED2100 \ 000001A2 0000 DC8 0, 0 \ 000001A4 426164207061 DC8 "Bad packet" \ 636B657400 \ 000001AF 00 DC8 0 \ 000001B0 534325643A20 DC8 "SC%d: %04X" \ 2530345800 \ 000001BB 00 DC8 0 \ 000001BC 4552523A2025 DC8 "ERR: %s" \ 7300 \ 000001C4 75696E256400 DC8 "uin%d" \ 000001CA 0000 DC8 0, 0 \ 000001CC 4D534725643A DC8 "MSG%d: %s" \ 20257300 \ 000001D6 0000 DC8 0, 0 \ 000001D8 50696E672025 DC8 "Ping %d-%d seconds!" \ 642D25642073 \ 65636F6E6473 \ 2100 \ 000001EC 50696E673A20 DC8 "Ping: %d sec" \ 256420736563 \ 00 \ 000001F9 000000 DC8 0, 0, 0 \ 000001FC 2025733A2025 DC8 " %s: %02d:%02d:%02d" \ 3032643A2530 \ 32643A253032 \ 6400 \ 00000210 537461747573 DC8 "Status change" \ 206368616E67 \ 6500 \ 0000021E 0000 DC8 0, 0 \ 00000220 5B25733A2025 DC8 "[%s: %s]\012" \ 735D0A00 \ 0000022A 0000 DC8 0, 0 \ 0000022C 2573202D2025 DC8 "%s - %d(%d)" \ 642825642900 \ 00000238 343A5C6E6174 DC8 "4:\\nata.txt" \ 612E74787400 \ 00000244 2825642F2564 DC8 "(%d/%d)" \ 2900 \ 0000024C 257325632563 DC8 "%s%c%c(%d/%d)" \ 2825642F2564 \ 2900 \ 0000025A 0000 DC8 0, 0 \ 0000025C 25735C6C6F67 DC8 "%s\\logs.txt" \ 732E74787400 \ 00000268 556E72656164 DC8 "Unread: %d" \ 3A20256400 \ 00000273 00 DC8 0 \ 00000274 4E6174494351 DC8 "NatICQ config updated!" \ 20636F6E6669 \ 672075706461 \ 7465642100 \ 0000028B 00 DC8 0 \ 0000028C 257332323430 DC8 "%s2240.png" \ 2E706E6700 \ 00000297 00 DC8 0 \ 00000298 475052532075 DC8 "GPRS up, wait 10 sec..." \ 702C20776169 \ 742031302073 \ 65632E2E2E00 \ 000002B0 54727920746F DC8 "Try to login..." \ 206C6F67696E \ 2E2E2E00 \ 000002C0 CDE520E220F1 DC8 "\315\345 \342 \361\357\350\361\352\345" \ EFE8F1EAE500 \ 000002CC 4C6F6F706261 DC8 "Loopback" \ 636B00 \ 000002D5 000000 DC8 0, 0, 0 \ 000002D8 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 \ 00000300 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 \ 00000322 0000 DC8 0, 0 \ 00000324 446973636F6E DC8 "Disconnected, %d bytes not sended!" \ 6E6563746564 \ 2C2025642062 \ 79746573206E \ 6F742073656E \ 6465642100 \ 00000347 00 DC8 0 \ 00000348 2D2051756575 DC8 2DH, 20H, 51H, 75H, 65H, 75H, 65H, 21H \ 6521 \ 00000350 202020202055 DC8 20H, 20H, 20H, 20H, 20H, 55H, 70H, 74H \ 7074 \ 00000358 696D653A2025 DC8 69H, 6DH, 65H, 3AH, 20H, 25H, 30H, 32H \ 3032 \ 00000360 643A25303264 DC8 64H, 3AH, 25H, 30H, 32H, 64H, 3AH, 25H \ 3A25 \ 00000368 3032642C2053 DC8 30H, 32H, 64H, 2CH, 20H, 53H, 65H, 72H \ 6572 \ 00000370 7665723A2025 DC8 76H, 65H, 72H, 3AH, 20H, 25H, 73H, 20H \ 7320 \ 00000378 2C2054696D65 DC8 2CH, 20H, 54H, 69H, 6DH, 65H, 3AH, 20H \ 3A20 \ 00000380 253032643A25 DC8 25H, 30H, 32H, 64H, 3AH, 25H, 30H, 32H \ 3032 \ 00000388 643A25303264 DC8 64H, 3AH, 25H, 30H, 32H, 64H, 20H, 44H \ 2044 \ 00000390 6174653A2530 DC8 61H, 74H, 65H, 3AH, 25H, 30H, 32H, 64H \ 3264 \ 00000398 2050696E673A DC8 20H, 50H, 69H, 6EH, 67H, 3AH, 20H, 25H \ 2025 \ 000003A0 642C20556E72 DC8 64H, 2CH, 20H, 55H, 6EH, 72H, 65H, 61H \ 6561 \ 000003A8 643A2025642C DC8 64H, 3AH, 20H, 25H, 64H, 2CH, 20H, 4EH \ 204E \ 000003B0 6F742073656E DC8 6FH, 74H, 20H, 73H, 65H, 6EH, 64H, 3AH \ 643A \ 000003B8 2025642C204C DC8 20H, 25H, 64H, 2CH, 20H, 4CH, 6FH, 67H \ 6F67 \ 000003C0 6D73673A2025 DC8 6DH, 73H, 67H, 3AH, 20H, 25H, 73H, 0 \ 7300 \ 000003C8 25730A526563 DC8 "%s\012Reconect after %d second..." \ 6F6E65637420 \ 616674657220 \ 256420736563 \ 6F6E642E2E2E \ 00 \ 000003E7 00 DC8 0 \ 000003E8 2D2044697363 DC8 2DH, 20H, 44H, 69H, 73H, 63H, 6FH, 6EH \ 6F6E \ 000003F0 6E6563742155 DC8 6EH, 65H, 63H, 74H, 21H, 55H, 70H, 74H \ 7074 \ 000003F8 696D653A2025 DC8 69H, 6DH, 65H, 3AH, 20H, 25H, 30H, 32H \ 3032 \ 00000400 643A25303264 DC8 64H, 3AH, 25H, 30H, 32H, 64H, 3AH, 25H \ 3A25 \ 00000408 3032642C2053 DC8 30H, 32H, 64H, 2CH, 20H, 53H, 65H, 72H \ 6572 \ 00000410 7665723A2025 DC8 76H, 65H, 72H, 3AH, 20H, 25H, 73H, 2CH \ 732C \ 00000418 2054696D653A DC8 20H, 54H, 69H, 6DH, 65H, 3AH, 20H, 25H \ 2025 \ 00000420 3032643A2530 DC8 30H, 32H, 64H, 3AH, 25H, 30H, 32H, 64H \ 3264 \ 00000428 3A2530326420 DC8 3AH, 25H, 30H, 32H, 64H, 20H, 44H, 61H \ 4461 \ 00000430 74653A253032 DC8 74H, 65H, 3AH, 25H, 30H, 32H, 64H, 20H \ 6420 \ 00000438 50696E673A20 DC8 50H, 69H, 6EH, 67H, 3AH, 20H, 25H, 64H \ 2564 \ 00000440 2C2020556E72 DC8 2CH, 20H, 20H, 55H, 6EH, 72H, 65H, 61H \ 6561 \ 00000448 643A2025642C DC8 64H, 3AH, 20H, 25H, 64H, 2CH, 20H, 4EH \ 204E \ 00000450 6F742053656E DC8 6FH, 74H, 20H, 53H, 65H, 6EH, 64H, 3AH \ 643A \ 00000458 25642C204C6F DC8 25H, 64H, 2CH, 20H, 4CH, 6FH, 67H, 6DH \ 676D \ 00000460 73673A202573 DC8 73H, 67H, 3AH, 20H, 25H, 73H, 0 \ 00 \ 00000467 00 DC8 0 \ 00000468 50696E67204E DC8 "Ping None" \ 6F6E6500 \ 00000472 0000 DC8 0, 0 \ 00000474 C2E2E5E4E8F2 DC8 "\302\342\345\344\350\362\345 UIN/\357\340\360\356\353\374!" \ E52055494E2F \ EFE0F0EEEBFC \ 2100 \ ipc_my_name: \ 00000488 4E6174494351 DC8 "NatICQ" \ 00 \ 0000048F 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000049F 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000 \ ipc_xtask_name: \ 000004A8 585461736B00 DC8 "XTask" \ 000004AE 0000 DC8 0, 0 \ x_status_change: \ 000004B0 582D53746174 DC8 "X-Status change" \ 757320636861 \ 6E676500 \ gui_methods: \ 000004C0 ............ DC32 method0, method1, method2, method3, method4, method5, 0H \ ............ \ ............ \ ............ \ 00000000 \ 000004DC ............ 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 0B0000006400 DC32 11, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ input_awaymsg_hdr: \ 00000038 000000008300 DC16 0, 0, 131, 21 \ 1500 \ 00000040 00000000.... DC32 0H, `?`: \ 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 `?gui.canvas=(void *)(&Canvas); \ 00000048 004086E5 STR R4,[R6, #+0] 6618 // main_gui->gui.flag30=2; 6619 main_gui->gui.methods=(void *)gui_methods; \ 0000004C 4C0E84E2 ADD R0,R4,#+1216 \ 00000050 040086E5 STR R0,[R6, #+4] 6620 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 00000054 158000EF SWI +32789 \ 00000058 200086E5 STR R0,[R6, #+32] 6621 csm->csm.state=0; \ 0000005C 107085E5 STR R7,[R5, #+16] 6622 csm->csm.unk1=0; \ 00000060 147085E5 STR R7,[R5, #+20] 6623 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,??DataTable255 ;; i_rc \ 00000074 D40285E5 STR R0,[R5, #+724] 6624 ews=AllocWS(16384); \ 00000078 400CA0E3 MOV R0,#+16384 \ 0000007C 250100EF SWI +293 \ 00000080 7C0385E5 STR R0,[R5, #+892] 6625 // MutexCreate(&contactlist_mtx); 6626 DNR_TRIES=3; \ 00000084 0300A0E3 MOV R0,#+3 \ 00000088 9C0485E5 STR R0,[R5, #+1180] 6627 // SUBPROC((void *)InitSmiles); 6628 // SUBPROC((void *)create_connect); 6629 wsBuffer=AllocWS(4096); \ 0000008C 400DA0E3 MOV R0,#+4096 \ 00000090 250100EF SWI +293 6630 char fullname[256]; 6631 snprintf(fullname,127,"%s\\logs.txt",TEMPLATES_PATH); \ 00000094 ........ LDR R3,??DataTable245 ;; TEMPLATES_PATH \ 00000098 900285E5 STR R0,[R5, #+656] \ 0000009C 972F84E2 ADD R2,R4,#+604 \ 000000A0 7F10A0E3 MOV R1,#+127 \ 000000A4 0D00A0E1 MOV R0,SP \ 000000A8 1B0100EF SWI +283 6632 unlink(fullname,errornumber); \ 000000AC 041595E5 LDR R1,[R5, #+1284] \ 000000B0 0D00A0E1 MOV R0,SP \ 000000B4 6B0100EF SWI +363 6633 OneSecTmr(); \ 000000B8 ........ BL OneSecTmr 6634 /* 6635 if(ParseUINS()!=0) 6636 { 6637 USE_ADD_UIN=1; 6638 InitXStatusesImg(); 6639 }*/ 6640 6641 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 000000BC ........ LDR R2,??DataTable246 ;; process_active_timer \ 000000C0 871EA0E3 MOV R1,#+2160 \ 000000C4 7B0D85E2 ADD R0,R5,#+7872 \ 000000C8 4D0000EF SWI +77 6642 6643 // if(!USE_ADD_UIN) 6644 // { 6645 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000000CC ........ LDR R0,??DataTable247 ;; UIN \ 000000D0 0E1084E2 ADD R1,R4,#+14 \ 000000D4 002090E5 LDR R2,[R0, #+0] \ 000000D8 8E00A0E3 MOV R0,#+142 \ 000000DC 400E80E3 ORR R0,R0,#0x400 \ 000000E0 040080E0 ADD R0,R0,R4 \ 000000E4 160000EF SWI +22 6646 gipc.name_to=ipc_my_name; \ 000000E8 8800A0E3 MOV R0,#+136 \ 000000EC 400E80E3 ORR R0,R0,#0x400 \ 000000F0 041080E0 ADD R1,R0,R4 \ 000000F4 D41085E5 STR R1,[R5, #+212] 6647 gipc.name_from=ipc_my_name; \ 000000F8 040080E0 ADD R0,R0,R4 \ 000000FC D80085E5 STR R0,[R5, #+216] 6648 gipc.data=(void *)-1; \ 00000100 0700E0E1 MVN R0,R7 \ 00000104 DC0085E5 STR R0,[R5, #+220] 6649 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 00000108 D43085E2 ADD R3,R5,#+212 \ 0000010C 0120A0E3 MOV R2,#+1 \ 00000110 B010A0E3 MOV R1,#+176 \ 00000114 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000118 0900A0E3 MOV R0,#+9 \ 0000011C 420C80E3 ORR R0,R0,#0x4200 \ 00000120 000100EF SWI +256 6650 //} 6651 /* 6652 InitXStatusesImg(); 6653 //InitSmiles(); Это вызовется из InitXStatusesImg 6654 create_connect(); 6655 silenthide=1; 6656 gipc.name_to=ipc_xtask_name; 6657 gipc.name_from=ipc_my_name; 6658 gipc.data=0; 6659 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); 6660 */ 6661 } \ 00000124 40DF8DE2 ADD SP,SP,#+256 \ 00000128 F080BDE8 POP {R4-R7,PC} ;; return \ ??maincsm_oncreate_0: \ 0000012C ........ DC32 Canvas 6662 6663 /* 6664 void FreeTimers() 6665 { 6666 6667 } 6668 */ \ In segment CODE, align 4, keep-with-next 6669 void maincsm_onclose(CSM_RAM *csm) 6670 { \ maincsm_onclose: \ 00000000 10402DE9 PUSH {R4,LR} 6671 WriteDefSettings(); 6672 // FreeTimers(); 6673 GBS_DelTimer(&tmr_active); \ 00000004 ........ LDR R4,??DataTable255 ;; i_rc \ 00000008 ........ BL WriteDefSettings \ 0000000C 7B0D84E2 ADD R0,R4,#+7872 \ 00000010 8C0100EF SWI +396 6674 GBS_DelTimer(&tmr_vibra); \ 00000014 A000A0E3 MOV R0,#+160 \ 00000018 780D80E3 ORR R0,R0,#0x1E00 \ 0000001C 040080E0 ADD R0,R0,R4 \ 00000020 8C0100EF SWI +396 6675 GBS_DelTimer(&reconnect_tmr); \ 00000024 B000A0E3 MOV R0,#+176 \ 00000028 780D80E3 ORR R0,R0,#0x1E00 \ 0000002C 040080E0 ADD R0,R0,R4 \ 00000030 8C0100EF SWI +396 6676 GBS_DelTimer(&tmr_illumination); \ 00000034 9000A0E3 MOV R0,#+144 \ 00000038 780D80E3 ORR R0,R0,#0x1E00 \ 0000003C 040080E0 ADD R0,R0,R4 \ 00000040 8C0100EF SWI +396 6677 GBS_DelTimer(&tm22); \ 00000044 B800A0E3 MOV R0,#+184 \ 00000048 8C0D80E3 ORR R0,R0,#0x2300 \ 0000004C 040080E0 ADD R0,R0,R4 \ 00000050 8C0100EF SWI +396 6678 #ifdef ELKA 6679 GBS_DelTimer(&sli_tmr); 6680 #endif 6681 GBS_DelTimer(&remind_tmr); \ 00000054 E000A0E3 MOV R0,#+224 \ 00000058 6C0D80E3 ORR R0,R0,#0x1B00 \ 0000005C 040080E0 ADD R0,R0,R4 \ 00000060 8C0100EF SWI +396 6682 GBS_DelTimer(&ping_tmr); \ 00000064 4800A0E3 MOV R0,#+72 \ 00000068 640D80E3 ORR R0,R0,#0x1900 \ 0000006C 040080E0 ADD R0,R0,R4 \ 00000070 8C0100EF SWI +396 6683 GBS_DelTimer(&uptime_tmr); \ 00000074 F000A0E3 MOV R0,#+240 \ 00000078 6C0D80E3 ORR R0,R0,#0x1B00 \ 0000007C 040080E0 ADD R0,R0,R4 \ 00000080 8C0100EF SWI +396 6684 GBS_DelTimer(&autoChangeStatus); \ 00000084 D000A0E3 MOV R0,#+208 \ 00000088 6C0D80E3 ORR R0,R0,#0x1B00 \ 0000008C 040080E0 ADD R0,R0,R4 \ 00000090 8C0100EF SWI +396 6685 #ifdef NEWSGOLD 6686 GBS_DelTimer(&tracktmr); \ 00000094 700D84E2 ADD R0,R4,#+7168 \ 00000098 8C0100EF SWI +396 6687 // GBS_DelTimer(&scrsTmr); 6688 #endif 6689 GBS_DelTimer(&incs2); \ 0000009C 5800A0E3 MOV R0,#+88 \ 000000A0 8C0D80E3 ORR R0,R0,#0x2300 \ 000000A4 040080E0 ADD R0,R0,R4 \ 000000A8 8C0100EF SWI +396 6690 GBS_DelTimer(&develop); \ 000000AC 7000A0E3 MOV R0,#+112 \ 000000B0 840D80E3 ORR R0,R0,#0x2100 \ 000000B4 040080E0 ADD R0,R0,R4 \ 000000B8 8C0100EF SWI +396 6691 GBS_DelTimer(&away_tmr); \ 000000BC 6F0D84E2 ADD R0,R4,#+7104 \ 000000C0 8C0100EF SWI +396 6692 FreeWS(wsBuffer); \ 000000C4 900294E5 LDR R0,[R4, #+656] \ 000000C8 290100EF SWI +297 6693 6694 SetVibration(0); \ 000000CC 0000A0E3 MOV R0,#+0 \ 000000D0 7C0000EF SWI +124 6695 FreeTemplates(); \ 000000D4 ........ BL FreeTemplates 6696 cmdFree(); \ 000000D8 ........ BL cmdFree 6697 #ifdef kluchnik 6698 FreeBotMessage(); 6699 #endif 6700 FreeCLIST(); \ 000000DC ........ _BLF FreeCLIST,??FreeCLIST??rA 6701 free_ICONS(); \ 000000E0 ........ BL free_ICONS 6702 FreeStatusToIMGHDR(); \ 000000E4 ........ BL FreeStatusToIMGHDR 6703 FreeXStatusText(); \ 000000E8 ........ _BLF FreeXStatusText,??FreeXStatusText??rA 6704 FreeWS(ews); \ 000000EC 7C0394E5 LDR R0,[R4, #+892] \ 000000F0 290100EF SWI +297 6705 SUBPROC((void *)PrintLibFree); \ 000000F4 34009FE5 LDR R0,??maincsm_onclose_0 ;; PrintLibFree \ 000000F8 710100EF SWI +369 6706 SUBPROC((void *)FreeSmiles); \ 000000FC 30009FE5 LDR R0,??maincsm_onclose_0+0x4 ;; FreeSmiles \ 00000100 710100EF SWI +369 6707 SUBPROC((void *)FreeXStatusesImg); \ 00000104 2C009FE5 LDR R0,??maincsm_onclose_0+0x8 ;; FreeXStatusesImg \ 00000108 710100EF SWI +369 6708 // FreeXStatusesImg(); 6709 RemoveKeybMsgHook((void *)my_keyhook); \ 0000010C ........ LDR R0,??DataTable249 ;; my_keyhook \ 00000110 2D0100EF SWI +301 6710 SUBPROC((void *)end_socket); \ 00000114 ........ LDR R0,??DataTable250 ;; end_socket \ 00000118 710100EF SWI +369 6711 SUBPROC((void *)ClearSendQ); \ 0000011C ........ LDR R0,??DataTable251 ;; ClearSendQ \ 00000120 710100EF SWI +369 6712 SUBPROC((void *)ElfKiller); \ 00000124 ........ LDR R0,??DataTable252 ;; ElfKiller \ 00000128 710100EF SWI +369 6713 } \ 0000012C 1080BDE8 POP {R4,PC} ;; return \ ??maincsm_onclose_0: \ 00000130 ........ DC32 PrintLibFree \ 00000134 ........ DC32 FreeSmiles \ 00000138 ........ DC32 FreeXStatusesImg 6714 \ In segment CODE, align 4, keep-with-next 6715 void do_reconnect(void) 6716 { 6717 if (is_gprs_online) \ do_reconnect: \ 00000000 ........ LDR R0,??DataTable255 ;; i_rc \ 00000004 00402DE9 PUSH {LR} \ 00000008 741490E5 LDR R1,[R0, #+1140] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 6718 { 6719 DNR_TRIES=3; \ 00000014 0310A0E3 MOV R1,#+3 \ 00000018 9C1480E5 STR R1,[R0, #+1180] 6720 SUBPROC((void*)create_connect); \ 0000001C ........ LDR R0,??DataTable254 ;; create_connect \ 00000020 710100EF SWI +369 6721 } 6722 } \ 00000024 0080BDE8 POP {PC} ;; return 6723 \ In segment CODE, align 4, keep-with-next 6724 void CheckDoubleRun(void) 6725 { \ CheckDoubleRun: \ 00000000 10402DE9 PUSH {R4,LR} 6726 int csm_id; 6727 if ((csm_id=(int)(gipc.data))!=-1) \ 00000004 ........ LDR R4,??DataTable255 ;; i_rc \ 00000008 DC0094E5 LDR R0,[R4, #+220] \ 0000000C 010070E3 CMN R0,#+1 \ 00000010 1500000A BEQ ??CheckDoubleRun_0 6728 { 6729 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable258 ;; Canvas \ 00000018 A820A0E3 MOV R2,#+168 \ 0000001C 402E82E3 ORR R2,R2,#0x400 \ 00000020 012082E0 ADD R2,R2,R1 \ 00000024 D42084E5 STR R2,[R4, #+212] 6730 gipc.name_from=ipc_my_name; \ 00000028 8820A0E3 MOV R2,#+136 \ 0000002C 402E82E3 ORR R2,R2,#0x400 \ 00000030 011082E0 ADD R1,R2,R1 \ 00000034 D81084E5 STR R1,[R4, #+216] 6731 gipc.data=(void *)csm_id; \ 00000038 DC0084E5 STR R0,[R4, #+220] 6732 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 0000003C D43084E2 ADD R3,R4,#+212 \ 00000040 0220A0E3 MOV R2,#+2 \ 00000044 B010A0E3 MOV R1,#+176 \ 00000048 DE1C81E3 ORR R1,R1,#0xDE00 \ 0000004C 0900A0E3 MOV R0,#+9 \ 00000050 420C80E3 ORR R0,R0,#0x4200 \ 00000054 000100EF SWI +256 6733 LockSched(); \ 00000058 460100EF SWI +326 6734 CloseCSM(maincsm_id); \ 0000005C D00294E5 LDR R0,[R4, #+720] \ 00000060 FC0100EF SWI +508 6735 //ShowMSG(1,(int)LG_ALREADY_STARTED); 6736 UnlockSched(); \ 00000064 470100EF SWI +327 \ 00000068 1080BDE8 POP {R4,PC} 6737 } 6738 else 6739 // if(!USE_ADD_UIN) 6740 { 6741 SUBPROC((void*)StatusToIMGHDR); \ ??CheckDoubleRun_0: \ 0000006C 14009FE5 LDR R0,??CheckDoubleRun_1 ;; StatusToIMGHDR \ 00000070 710100EF SWI +369 6742 SUBPROC((void*)XStatusToIMGHDR); \ 00000074 10009FE5 LDR R0,??CheckDoubleRun_1+0x4 ;; XStatusToIMGHDR \ 00000078 710100EF SWI +369 6743 InitXStatusesImg(); \ 0000007C ........ _BLF InitXStatusesImg,??InitXStatusesImg??rA 6744 // XStatusToIMGHDR(); 6745 //InitSmiles(); Это вызовется из InitXStatusesImg 6746 create_connect(); \ 00000080 ........ BL create_connect 6747 } 6748 /*else 6749 { 6750 InitXStatusesImg(); 6751 USE_ADD_UIN=1; 6752 }*/ 6753 6754 } \ 00000084 1080BDE8 POP {R4,PC} ;; return \ ??CheckDoubleRun_1: \ 00000088 ........ DC32 StatusToIMGHDR \ 0000008C ........ DC32 XStatusToIMGHDR 6755 6756 6757 6758 //------------------------------------------------------------// 6759 \ In segment CODE, align 4, keep-with-next 6760 int checkGui(int id) 6761 { \ checkGui: \ 00000000 10402DE9 PUSH {R4,LR} 6762 int retval = 0; \ 00000004 0040A0E3 MOV R4,#+0 6763 if (IsGuiOnTop(id)) \ 00000008 350100EF SWI +309 \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0A00000A BEQ ??checkGui_0 6764 { 6765 GUI* igui = GetTopGUI(); \ 00000014 4D0100EF SWI +333 6766 if (igui) \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 0700000A BEQ ??checkGui_0 6767 { 6768 #ifdef ELKA 6769 canvasdata = BuildCanvas(); 6770 retval = 1; 6771 #else 6772 void *idata = GetDataOfItemByID(igui, 2); \ 00000020 0210A0E3 MOV R1,#+2 \ 00000024 4F0100EF SWI +335 6773 if (idata) \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 0300000A BEQ ??checkGui_0 6774 { 6775 canvasdata = ((void **)idata)[DISPLACE_OF_IDLECANVAS / 4]; \ 00000030 10109FE5 LDR R1,??checkGui_1 ;; i_rc + 648 \ 00000034 180090E5 LDR R0,[R0, #+24] 6776 retval = 1; \ 00000038 0140A0E3 MOV R4,#+1 \ 0000003C 000081E5 STR R0,[R1, #+0] 6777 } 6778 #endif 6779 } 6780 } 6781 return retval; \ ??checkGui_0: \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1080BDE8 POP {R4,PC} ;; return \ ??checkGui_1: \ 00000048 ........ DC32 i_rc + 648 6782 } 6783 6784 6785 //-------------------------------------------------------------// 6786 #define IPC_GAME 7 6787 6788 typedef struct{ 6789 unsigned long uin; 6790 char *msg; 6791 }IPCmsg; 6792 \ In segment CODE, align 4, keep-with-next 6793 int maincsm_onmessage(CSM_RAM *data,GBS_MSG *msg) 6794 { \ maincsm_onmessage: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} 6795 6796 #ifdef ELKA 6797 if (total_unread) SLI_On(); 6798 #endif 6799 // char ss[100]; 6800 MAIN_CSM *csm=(MAIN_CSM*)data; 6801 { 6802 //IPC 6803 if (msg->msg==MSG_IPC) \ 00000004 ........ LDR R5,??DataTable257 ;; i_rc \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 0000000C ........ LDR R7,??DataTable258 ;; Canvas \ 00000010 0140A0E1 MOV R4,R1 \ 00000014 E010A0E3 MOV R1,#+224 \ 00000018 781D81E3 ORR R1,R1,#0x1E00 \ 0000001C 051081E0 ADD R1,R1,R5 \ 00000020 00108DE5 STR R1,[SP, #+0] \ 00000024 040094E5 LDR R0,[R4, #+4] \ 00000028 0060A0E3 MOV R6,#+0 \ 0000002C B010A0E3 MOV R1,#+176 \ 00000030 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000034 010050E1 CMP R0,R1 \ 00000038 9D00001A BNE ??maincsm_onmessage_2 6804 { 6805 IPC_REQ *ipc; 6806 if ((ipc=(IPC_REQ*)msg->data0)) \ 0000003C 0C8094E5 LDR R8,[R4, #+12] \ 00000040 000058E3 CMP R8,#+0 \ 00000044 9A00000A BEQ ??maincsm_onmessage_2 6807 { 6808 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 00000048 000098E5 LDR R0,[R8, #+0] \ 0000004C 8890A0E3 MOV R9,#+136 \ 00000050 409E89E3 ORR R9,R9,#0x400 \ 00000054 071089E0 ADD R1,R9,R7 \ 00000058 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 0000005C 000050E3 CMP R0,#+0 \ 00000060 9300001A BNE ??maincsm_onmessage_2 6809 { 6810 switch (msg->submess) \ 00000064 081094E5 LDR R1,[R4, #+8] \ 00000068 040098E5 LDR R0,[R8, #+4] \ 0000006C 011041E2 SUB R1,R1,#+1 \ 00000070 050051E3 CMP R1,#+5 \ 00000074 8E00008A BHI ??maincsm_onmessage_2 \ 00000078 012F8FE2 ADR R2,??maincsm_onmessage_0 \ 0000007C 0120D2E7 LDRB R2,[R2, R1] \ 00000080 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_0: \ 00000084 010A144D DC8 +1,+10,+20,+77 \ 00000088 8B190000 DC8 +139,+25,+0,+0 6811 { 6812 case IPC_CHECK_DOUBLERUN: 6813 //Если приняли свое собственное сообщение, значит запускаем чекер 6814 if (ipc->name_from==ipc_my_name) SUBPROC((void *)CheckDoubleRun); \ ??maincsm_onmessage_3: \ 0000008C 071089E0 ADD R1,R9,R7 \ 00000090 010050E1 CMP R0,R1 \ 00000094 0200001A BNE ??maincsm_onmessage_4 \ 00000098 800D9FE5 LDR R0,??maincsm_onmessage_5 ;; CheckDoubleRun \ 0000009C 710100EF SWI +369 \ 000000A0 830000EA B ??maincsm_onmessage_2 6815 else ipc->data=(void *)maincsm_id; \ ??maincsm_onmessage_4: \ 000000A4 D00295E5 LDR R0,[R5, #+720] \ 000000A8 080088E5 STR R0,[R8, #+8] \ 000000AC 800000EA B ??maincsm_onmessage_2 6816 break; 6817 case IPC_SMILE_PROCESSED: 6818 //Только собственные смайлы ;) 6819 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextSmile); \ ??maincsm_onmessage_6: \ 000000B0 071089E0 ADD R1,R9,R7 \ 000000B4 010050E1 CMP R0,R1 \ 000000B8 0100001A BNE ??maincsm_onmessage_7 \ 000000BC 600D9FE5 LDR R0,??maincsm_onmessage_5+0x4 ;; ProcessNextSmile \ ??maincsm_onmessage_8: \ 000000C0 710100EF SWI +369 6820 if(ShowLoadScreen) SMART_REDRAW(); \ ??maincsm_onmessage_7: \ 000000C4 A80495E5 LDR R0,[R5, #+1192] \ 000000C8 000050E3 CMP R0,#+0 \ 000000CC 7800000A BEQ ??maincsm_onmessage_2 \ ??maincsm_onmessage_9: \ 000000D0 ........ BL SMART_REDRAW \ 000000D4 760000EA B ??maincsm_onmessage_2 6821 // zeromem(logmsg2,256); 6822 break; 6823 case IPC_XSTATUSIMG_PROCESSED: 6824 //Только собственные иксстатусы ;) 6825 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextXStatImg); \ ??maincsm_onmessage_10: \ 000000D8 071089E0 ADD R1,R9,R7 \ 000000DC 010050E1 CMP R0,R1 \ 000000E0 F7FFFF1A BNE ??maincsm_onmessage_7 \ 000000E4 3C0D9FE5 LDR R0,??maincsm_onmessage_5+0x8 ;; ProcessNextXStatImg \ 000000E8 F4FFFFEA B ??maincsm_onmessage_8 6826 if(ShowLoadScreen) SMART_REDRAW(); 6827 break; 6828 case IPC_ONESECOND: 6829 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_11: \ 000000EC 071089E0 ADD R1,R9,R7 \ 000000F0 010050E1 CMP R0,R1 \ 000000F4 6E00001A BNE ??maincsm_onmessage_2 6830 { 6831 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id) && _to_develop) \ 000000F8 068100EF SWI +33030 \ 000000FC 080090E5 LDR R0,[R0, #+8] \ 00000100 D01295E5 LDR R1,[R5, #+720] \ 00000104 0C0090E5 LDR R0,[R0, #+12] \ 00000108 0C0090E5 LDR R0,[R0, #+12] \ 0000010C 010050E1 CMP R0,R1 \ 00000110 00059515 LDRNE R0,[R5, #+1280] \ 00000114 00005013 CMPNE R0,#+0 \ 00000118 0000000A BEQ ??maincsm_onmessage_12 6832 to_develop(); \ 0000011C ........ BL to_develop 6833 _to_develop=0; 6834 //if(!(--on_off_timer)) on_off_timer=0;//таймер показа подключившихся/отключившихся 6835 6836 /* if(ifJustNowRefresh) 6837 { 6838 CLIST *t=(CLIST*)cltop; 6839 int i=0; 6840 int j=0; 6841 while(t) 6842 { 6843 if(t->just_now){ --t->just_now; t->just_i=(i|j); } 6844 else t->just_i=0; 6845 t=t->next; 6846 if(j) i=!i; 6847 j=!j; 6848 } 6849 6850 t=(CLIST*)cltop; 6851 while(t) 6852 { 6853 if(t->just_now){ RefreshJustNow(); SMART_REDRAW(); return 1; } 6854 t=t->next; 6855 } 6856 ifJustNowRefresh=0; 6857 }*/ 6858 6859 if(on_off_timer>0) \ ??maincsm_onmessage_12: \ 00000120 8C0495E5 LDR R0,[R5, #+1164] \ 00000124 006585E5 STR R6,[R5, #+1280] \ 00000128 010050E3 CMP R0,#+1 \ 0000012C 020000BA BLT ??maincsm_onmessage_13 6860 { 6861 on_off_timer--; \ 00000130 010040E2 SUB R0,R0,#+1 \ 00000134 8C0485E5 STR R0,[R5, #+1164] 6862 SMART_REDRAW(); \ 00000138 E4FFFFEA B ??maincsm_onmessage_9 6863 break; 6864 } 6865 else 6866 if(on_off_timer!=-1)//Надо обновить экран когда время прошло \ ??maincsm_onmessage_13: \ 0000013C 010070E3 CMN R0,#+1 \ 00000140 0500000A BEQ ??maincsm_onmessage_14 6867 { 6868 on_off_timer=-1; \ 00000144 0600E0E1 MVN R0,R6 \ 00000148 8C0485E5 STR R0,[R5, #+1164] 6869 zeromem(on_off_buf,128); \ 0000014C 00009DE5 LDR R0,[SP, #+0] \ 00000150 8010A0E3 MOV R1,#+128 \ 00000154 1D0100EF SWI +285 6870 SMART_REDRAW(); \ 00000158 ........ BL SMART_REDRAW 6871 // UpdateCLheader(); 6872 } 6873 6874 if(PrintTimer>0) \ ??maincsm_onmessage_14: \ 0000015C 9C0295E5 LDR R0,[R5, #+668] \ 00000160 010050E3 CMP R0,#+1 \ 00000164 020000BA BLT ??maincsm_onmessage_15 6875 { 6876 PrintTimer--; \ 00000168 010040E2 SUB R0,R0,#+1 \ 0000016C 9C0285E5 STR R0,[R5, #+668] 6877 SMART_REDRAW(); \ 00000170 ........ BL SMART_REDRAW 6878 } 6879 6880 6881 if(!DoRefreshCL) break;//Если не нада обновлять \ ??maincsm_onmessage_15: \ 00000174 B40295E5 LDR R0,[R5, #+692] \ 00000178 000050E3 CMP R0,#+0 \ 0000017C 4C00000A BEQ ??maincsm_onmessage_2 6882 int f=0; 6883 CLIST *t=(CLIST*)cltop; \ 00000180 7C1495E5 LDR R1,[R5, #+1148] \ 00000184 0000A0E3 MOV R0,#+0 \ 00000188 030000EA B ??maincsm_onmessage_16 6884 while(t && !f) 6885 { 6886 if(t->just_now) f=1; \ ??maincsm_onmessage_17: \ 0000018C 682091E5 LDR R2,[R1, #+104] 6887 t=t->next; \ 00000190 001091E5 LDR R1,[R1, #+0] \ 00000194 000052E3 CMP R2,#+0 \ 00000198 0100A013 MOVNE R0,#+1 6888 } \ ??maincsm_onmessage_16: \ 0000019C 000051E3 CMP R1,#+0 \ 000001A0 0100000A BEQ ??maincsm_onmessage_18 \ 000001A4 000050E3 CMP R0,#+0 \ 000001A8 F7FFFF0A BEQ ??maincsm_onmessage_17 6889 6890 if(f) MyRedraw();//Если еще есть че обновлять \ ??maincsm_onmessage_18: \ 000001AC 000050E3 CMP R0,#+0 \ 000001B0 C6FFFF1A BNE ??maincsm_onmessage_9 6891 else DoRefreshCL=0; \ 000001B4 B46285E5 STR R6,[R5, #+692] \ 000001B8 3D0000EA B ??maincsm_onmessage_2 6892 } 6893 break; 6894 case IPC_TENSECONDS: 6895 //Только свое сообщение 6896 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_19: \ 000001BC 071089E0 ADD R1,R9,R7 \ 000001C0 010050E1 CMP R0,R1 \ 000001C4 3A00001A BNE ??maincsm_onmessage_2 6897 { 6898 CLIST *t=(CLIST *)cltop; 6899 int f=0; 6900 if(main_msg_timer2!=0) main_msg_timer2--; else main_msg_timer2=0; \ 000001C8 AC0495E5 LDR R0,[R5, #+1196] \ 000001CC 7C8495E5 LDR R8,[R5, #+1148] \ 000001D0 0090A0E3 MOV R9,#+0 \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 1B00000A BEQ ??maincsm_onmessage_20 \ 000001DC 010040E2 SUB R0,R0,#+1 \ 000001E0 AC0485E5 STR R0,[R5, #+1196] \ 000001E4 180000EA B ??maincsm_onmessage_20 6901 while(t) 6902 { 6903 if(t->just_now) \ ??maincsm_onmessage_21: \ 000001E8 680098E5 LDR R0,[R8, #+104] \ 000001EC 000050E3 CMP R0,#+0 \ 000001F0 0400000A BEQ ??maincsm_onmessage_22 6904 { 6905 if (!(--(t->just_now))){ f=1; t->just_i=0; } \ 000001F4 010050E2 SUBS R0,R0,#+1 \ 000001F8 680088E5 STR R0,[R8, #+104] \ 000001FC 0190A003 MOVEQ R9,#+1 \ 00000200 6C608805 STREQ R6,[R8, #+108] 6906 // RefreshJustNow(); 6907 MyRedraw(); \ 00000204 ........ BL SMART_REDRAW 6908 } 6909 6910 if (t->isactive) \ ??maincsm_onmessage_22: \ 00000208 A00098E5 LDR R0,[R8, #+160] \ 0000020C 000050E3 CMP R0,#+0 \ 00000210 0C00000A BEQ ??maincsm_onmessage_23 6911 { 6912 if (!(--(t->isactive))) \ 00000214 010050E2 SUBS R0,R0,#+1 \ 00000218 A00088E5 STR R0,[R8, #+160] \ 0000021C 0900001A BNE ??maincsm_onmessage_23 6913 { 6914 f=1; //Если дошли до 0 хотя бы один раз - надо перерисовать меню 6915 if ((t->log)&&(!t->isunread)) \ 00000220 940098E5 LDR R0,[R8, #+148] \ 00000224 0190A0E3 MOV R9,#+1 \ 00000228 000050E3 CMP R0,#+0 \ 0000022C 0500000A BEQ ??maincsm_onmessage_23 \ 00000230 840098E5 LDR R0,[R8, #+132] \ 00000234 000050E3 CMP R0,#+0 \ 00000238 0200001A BNE ??maincsm_onmessage_23 6916 { 6917 FreeLOGQ(&t->log); \ 0000023C 940088E2 ADD R0,R8,#+148 \ 00000240 ........ BL FreeLOGQ 6918 t->msg_count=0; \ 00000244 A46088E5 STR R6,[R8, #+164] 6919 } 6920 } 6921 } 6922 t=(CLIST *)(t->next); \ ??maincsm_onmessage_23: \ 00000248 008098E5 LDR R8,[R8, #+0] 6923 } \ ??maincsm_onmessage_20: \ 0000024C 000058E3 CMP R8,#+0 \ 00000250 E4FFFF1A BNE ??maincsm_onmessage_21 6924 6925 if (f) \ 00000254 000059E3 CMP R9,#+0 \ 00000258 0A00000A BEQ ??maincsm_onmessage_24 6926 { 6927 CLIST *oldt=NULL; 6928 if (contactlist_menu_id) \ 0000025C D81295E5 LDR R1,[R5, #+728] \ 00000260 0000A0E3 MOV R0,#+0 \ 00000264 000051E3 CMP R1,#+0 \ 00000268 0400000A BEQ ??maincsm_onmessage_25 6929 { 6930 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 0000026C D80295E5 LDR R0,[R5, #+728] \ 00000270 0010A0E3 MOV R1,#+0 \ 00000274 090200EF SWI +521 \ 00000278 8F0100EF SWI +399 \ 0000027C ........ _BLF FindContactByN,??FindContactByN??rA 6931 } 6932 RecountMenu(oldt,1); \ ??maincsm_onmessage_25: \ 00000280 0110A0E3 MOV R1,#+1 \ 00000284 ........ BL RecountMenu 6933 } 6934 6935 if (time_to_stop_t9) \ ??maincsm_onmessage_24: \ 00000288 B40495E5 LDR R0,[R5, #+1204] \ 0000028C 000050E3 CMP R0,#+0 \ 00000290 0700000A BEQ ??maincsm_onmessage_2 6936 { 6937 if (!(--time_to_stop_t9)) \ 00000294 010050E2 SUBS R0,R0,#+1 \ 00000298 B40485E5 STR R0,[R5, #+1204] \ 0000029C 0400001A BNE ??maincsm_onmessage_2 6938 { 6939 if (IsGuiOnTop(edchat_id)) RefreshGUI(); \ 000002A0 840495E5 LDR R0,[R5, #+1156] \ 000002A4 350100EF SWI +309 \ 000002A8 000050E3 CMP R0,#+0 \ 000002AC 0000000A BEQ ??maincsm_onmessage_2 \ 000002B0 960100EF SWI +406 6940 } 6941 } 6942 } 6943 break; 6944 /* case IPC_SENDMSG: ; //IPC_SENDMSG by BoBa 26.06.07 6945 int l=strlen(((IPCMsg *)(ipc->data))->msg); 6946 TPKT *msg=malloc(sizeof(PKT)+l+30); 6947 msg->pkt.uin=((IPCMsg *)(ipc->data))->uin; 6948 msg->pkt.type=T_SENDMSG; 6949 msg->pkt.data_len=l; 6950 memcpy(msg->data,((IPCMsg *)(ipc->data))->msg,l); 6951 //slientsend=1; 6952 if(strstr(msg->data,PASS)==0) 6953 { 6954 SENDMSGCOUNT++; //Номер сообщения 6955 SUBPROC((void *)SendAnswer,0,msg); 6956 } 6957 else 6958 { 6959 msg->pkt.data_len=40; 6960 strcpy(msg->data, "Fuck you hacker! my password sux ur ass"); 6961 SENDMSGCOUNT++; //Номер сообщения 6962 SUBPROC((void *)SendAnswer,0,msg); 6963 } 6964 break;*/ 6965 } 6966 } 6967 } 6968 } 6969 6970 /* void *icsm; 6971 icsm=FindCSMbyID(CSM_root()->idle_id); 6972 if (icsm && checkGui(idlegui_id(icsm))) 6973 { 6974 INC_show=0; 6975 canvasdata=BuildCanvas(); //void * - belyj fon! 6976 } 6977 else 6978 { 6979 main_d=1; 6980 }*/ 6981 } 6982 6983 //---------------------------------------------------// 6984 void *icsm; 6985 icsm=FindCSMbyID(CSM_root()->idle_id); \ ??maincsm_onmessage_2: \ 000002B4 068100EF SWI +33030 \ 000002B8 040090E5 LDR R0,[R0, #+4] \ 000002BC 080100EF SWI +264 6986 if (icsm && checkGui(idlegui_id(icsm))) \ 000002C0 000050E3 CMP R0,#+0 \ 000002C4 1401000A BEQ ??maincsm_onmessage_26 \ 000002C8 2C0090E5 LDR R0,[R0, #+44] \ 000002CC ........ BL checkGui \ 000002D0 000050E3 CMP R0,#+0 \ 000002D4 1001000A BEQ ??maincsm_onmessage_26 6987 { 6988 int icn; 6989 6990 #ifdef NEWSGOLD 6991 if(ShowStatusIcon==0 || ShowStatusIcon==2 || ShowStatusIcon==3) //kluchnik 26.03.08 \ 000002D8 ........ LDR R0,??DataTable290 ;; ShowStatusIcon \ 000002DC 000090E5 LDR R0,[R0, #+0] \ 000002E0 000050E3 CMP R0,#+0 \ 000002E4 02005013 CMPNE R0,#+2 \ 000002E8 03005013 CMPNE R0,#+3 \ 000002EC 2A00001A BNE ??maincsm_onmessage_27 6992 { 6993 #endif 6994 if((IsUnlocked()) || (!IsUnlocked()) || (IsScreenSaver())) \ 000002F0 430000EF SWI +67 \ 000002F4 000050E3 CMP R0,#+0 \ 000002F8 0500001A BNE ??maincsm_onmessage_28 \ 000002FC 430000EF SWI +67 \ 00000300 000050E3 CMP R0,#+0 \ 00000304 0200000A BEQ ??maincsm_onmessage_28 \ 00000308 420000EF SWI +66 \ 0000030C 000050E3 CMP R0,#+0 \ 00000310 2100000A BEQ ??maincsm_onmessage_27 6995 { 6996 if(total_unread) \ ??maincsm_onmessage_28: \ 00000314 780495E5 LDR R0,[R5, #+1144] \ 00000318 000050E3 CMP R0,#+0 6997 icn=IS_MSG; \ 0000031C 0D00A013 MOVNE R0,#+13 \ 00000320 0500001A BNE ??maincsm_onmessage_29 6998 else 6999 { 7000 switch(connect_state) \ 00000324 5C0495E5 LDR R0,[R5, #+1116] \ 00000328 000050E3 CMP R0,#+0 \ 0000032C 0200000A BEQ ??maincsm_onmessage_29 \ 00000330 030050E2 SUBS R0,R0,#+3 7001 { 7002 case 0: 7003 icn=IS_OFFLINE; break; 7004 case 3: 7005 icn=CurrentStatus; //IS_ONLINE; \ 00000334 74039505 LDREQ R0,[R5, #+884] 7006 break; 7007 default: 7008 icn=IS_UNKNOWN; break; \ 00000338 0E00A013 MOVNE R0,#+14 7009 } 7010 } 7011 7012 DrawCanvas(canvasdata,IDLEICON_X,IDLEICON_Y,IDLEICON_X+GetImgWidth((int)S_ICONS[icn])-1, 7013 IDLEICON_Y+GetImgHeight((int)S_ICONS[icn])-1,1); \ ??maincsm_onmessage_29: \ 0000033C E8AA9FE5 LDR R10,??maincsm_onmessage_5+0xC ;; IDLEICON_X \ 00000340 E8BA9FE5 LDR R11,??maincsm_onmessage_5+0x10 ;; IDLEICON_Y \ 00000344 008185E0 ADD R8,R5,R0, LSL #+2 \ 00000348 EC0298E5 LDR R0,[R8, #+748] \ 0000034C 210000EF SWI +33 \ 00000350 0090A0E1 MOV R9,R0 \ 00000354 EC0298E5 LDR R0,[R8, #+748] \ 00000358 220000EF SWI +34 \ 0000035C 00109AE5 LDR R1,[R10, #+0] \ 00000360 00209BE5 LDR R2,[R11, #+0] \ 00000364 0130A0E3 MOV R3,#+1 \ 00000368 08002DE9 PUSH {R3} \ 0000036C 010080E0 ADD R0,R0,R1 \ 00000370 023089E0 ADD R3,R9,R2 \ 00000374 013043E2 SUB R3,R3,#+1 \ 00000378 08002DE9 PUSH {R3} \ 0000037C 013040E2 SUB R3,R0,#+1 \ 00000380 880295E5 LDR R0,[R5, #+648] \ 00000384 250000EF SWI +37 7014 DrawImg(IDLEICON_X,IDLEICON_Y,S_ICONS[icn]); \ 00000388 EC2298E5 LDR R2,[R8, #+748] \ 0000038C 00109BE5 LDR R1,[R11, #+0] \ 00000390 00009AE5 LDR R0,[R10, #+0] \ 00000394 230000EF SWI +35 \ 00000398 08D08DE2 ADD SP,SP,#+8 7015 } 7016 #ifdef NEWSGOLD 7017 } 7018 #endif 7019 /* 7020 #ifdef kluchnik 7021 if(show_xstatus==1) 7022 #else 7023 if(show_xstatus==1 || show_xstatus==3) //kluchnik 26.03.08 7024 #endif 7025 #else 7026 if(show_xstatus==1) //kluchnik 26.03.08 7027 #endif 7028 { 7029 PNGTOP_DESC *pltop=PNG_TOP(); 7030 pltop->dyn_pltop=XStatusesImgList; 7031 DisableIDLETMR(); 7032 DrawCanvas(canvasdata,IDLEICON_XX,IDLEICON_YX,IDLEICON_XX+GetImgWidth((int)XStatusesIconArray[CurrentXStatus])-1, 7033 IDLEICON_YX+GetImgHeight((int)XStatusesIconArray[CurrentXStatus])-1,1); 7034 DrawImg(IDLEICON_XX,IDLEICON_YX,XStatusesIconArray[CurrentXStatus]); 7035 }*/ 7036 7037 7038 if(IsUnlocked()) \ ??maincsm_onmessage_27: \ 0000039C 430000EF SWI +67 \ 000003A0 000050E3 CMP R0,#+0 \ 000003A4 DC00000A BEQ ??maincsm_onmessage_26 7039 { 7040 SetCanvasFlag(0); \ 000003A8 0000A0E3 MOV R0,#+0 \ 000003AC ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 7041 if (main_d==1) \ 000003B0 800295E5 LDR R0,[R5, #+640] \ 000003B4 010050E3 CMP R0,#+1 \ 000003B8 8300001A BNE ??maincsm_onmessage_30 7042 { 7043 int spaco2=spaco1; \ 000003BC ........ LDR R0,??DataTable267 ;; spaco1 \ 000003C0 008090E5 LDR R8,[R0, #+0] 7044 if(Is_SMARTCPU_On && main_msg_timer2) \ 000003C4 ........ LDR R0,??DataTable261 ;; Is_SMARTCPU_On \ 000003C8 000090E5 LDR R0,[R0, #+0] \ 000003CC 000050E3 CMP R0,#+0 \ 000003D0 AC049515 LDRNE R0,[R5, #+1196] \ 000003D4 00005013 CMPNE R0,#+0 \ 000003D8 7A00000A BEQ ??maincsm_onmessage_31 7045 { 7046 if(fonto==1) \ 000003DC 500A9FE5 LDR R0,??maincsm_onmessage_5+0x14 ;; msg_d_x \ 000003E0 843295E5 LDR R3,[R5, #+644] \ 000003E4 851D85E2 ADD R1,R5,#+8512 \ 000003E8 04108DE5 STR R1,[SP, #+4] \ 000003EC 1010A0E3 MOV R1,#+16 \ 000003F0 841D81E3 ORR R1,R1,#0x2100 \ 000003F4 051081E0 ADD R1,R1,R5 \ 000003F8 08108DE5 STR R1,[SP, #+8] \ 000003FC E010A0E3 MOV R1,#+224 \ 00000400 801D81E3 ORR R1,R1,#0x2000 \ 00000404 051081E0 ADD R1,R1,R5 \ 00000408 0C108DE5 STR R1,[SP, #+12] \ 0000040C B010A0E3 MOV R1,#+176 \ 00000410 801D81E3 ORR R1,R1,#0x2000 \ 00000414 051081E0 ADD R1,R1,R5 \ 00000418 24108DE5 STR R1,[SP, #+36] \ 0000041C 009090E5 LDR R9,[R0, #+0] \ 00000420 100A9FE5 LDR R0,??maincsm_onmessage_5+0x18 ;; msg_d_y \ 00000424 822D85E2 ADD R2,R5,#+8320 \ 00000428 00A090E5 LDR R10,[R0, #+0] \ 0000042C ........ LDR R0,??DataTable277 ;; fonto \ 00000430 00B090E5 LDR R11,[R0, #+0] \ 00000434 0800A0E1 MOV R0,R8 \ 00000438 01002DE9 PUSH {R0} \ 0000043C 01005BE3 CMP R11,#+1 \ 00000440 2B00001A BNE ??maincsm_onmessage_32 7047 { 7048 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ 00000444 0100A0E3 MOV R0,#+1 \ 00000448 01002DE9 PUSH {R0} \ 0000044C 0A10A0E1 MOV R1,R10 \ 00000450 0900A0E1 MOV R0,R9 \ 00000454 ........ _BLF PrintField,??PrintField??rA 7049 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, spaco2); \ 00000458 0800A0E1 MOV R0,R8 \ 0000045C 01002DE9 PUSH {R0} \ 00000460 0100A0E3 MOV R0,#+1 \ 00000464 01002DE9 PUSH {R0} \ 00000468 843295E5 LDR R3,[R5, #+644] \ 0000046C 34209DE5 LDR R2,[SP, #+52] \ 00000470 8C0295E5 LDR R0,[R5, #+652] \ 00000474 0A1080E0 ADD R1,R0,R10 \ 00000478 0900A0E1 MOV R0,R9 \ 0000047C ........ _BLF PrintField,??PrintField??rA 7050 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, spaco2); \ 00000480 0800A0E1 MOV R0,R8 \ 00000484 01002DE9 PUSH {R0} \ 00000488 0100A0E3 MOV R0,#+1 \ 0000048C 01002DE9 PUSH {R0} \ 00000490 843295E5 LDR R3,[R5, #+644] \ 00000494 24209DE5 LDR R2,[SP, #+36] \ 00000498 8C0295E5 LDR R0,[R5, #+652] \ 0000049C 80108AE0 ADD R1,R10,R0, LSL #+1 \ 000004A0 0900A0E1 MOV R0,R9 \ 000004A4 ........ _BLF PrintField,??PrintField??rA 7051 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, spaco2); \ 000004A8 0800A0E1 MOV R0,R8 \ 000004AC 01002DE9 PUSH {R0} \ 000004B0 0100A0E3 MOV R0,#+1 \ 000004B4 01002DE9 PUSH {R0} \ 000004B8 843295E5 LDR R3,[R5, #+644] \ 000004BC 28209DE5 LDR R2,[SP, #+40] \ 000004C0 8C0295E5 LDR R0,[R5, #+652] \ 000004C4 800080E0 ADD R0,R0,R0, LSL #+1 \ 000004C8 0A1080E0 ADD R1,R0,R10 \ 000004CC 0900A0E1 MOV R0,R9 \ 000004D0 ........ _BLF PrintField,??PrintField??rA 7052 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, spaco2); \ 000004D4 00012DE9 PUSH {R8} \ 000004D8 0100A0E3 MOV R0,#+1 \ 000004DC 01002DE9 PUSH {R0} \ 000004E0 843295E5 LDR R3,[R5, #+644] \ 000004E4 2C209DE5 LDR R2,[SP, #+44] \ 000004E8 8C0295E5 LDR R0,[R5, #+652] \ 000004EC 00118AE0 ADD R1,R10,R0, LSL #+2 \ 000004F0 310000EA B ??maincsm_onmessage_33 7053 } 7054 else 7055 { 7056 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ ??maincsm_onmessage_32: \ 000004F4 0B00A0E1 MOV R0,R11 \ 000004F8 01002DE9 PUSH {R0} \ 000004FC 0A10A0E1 MOV R1,R10 \ 00000500 0900A0E1 MOV R0,R9 \ 00000504 ........ _BLF PrintField,??PrintField??rA 7057 PrintField(msg_d_x,msg_d_y+GetFontYSIZE(paused_height)+1, s_txt, align, fonto, spaco2); \ 00000508 8C0295E5 LDR R0,[R5, #+652] \ 0000050C C50100EF SWI +453 \ 00000510 0810A0E1 MOV R1,R8 \ 00000514 02002DE9 PUSH {R1} \ 00000518 0A0080E0 ADD R0,R0,R10 \ 0000051C 0B10A0E1 MOV R1,R11 \ 00000520 02002DE9 PUSH {R1} \ 00000524 843295E5 LDR R3,[R5, #+644] \ 00000528 34209DE5 LDR R2,[SP, #+52] \ 0000052C 011080E2 ADD R1,R0,#+1 \ 00000530 0900A0E1 MOV R0,R9 \ 00000534 ........ _BLF PrintField,??PrintField??rA 7058 PrintField(msg_d_x,msg_d_y+(2*GetFontYSIZE(paused_height))+2, d_txt, align, fonto, spaco2); \ 00000538 8C0295E5 LDR R0,[R5, #+652] \ 0000053C C50100EF SWI +453 \ 00000540 0810A0E1 MOV R1,R8 \ 00000544 02002DE9 PUSH {R1} \ 00000548 80008AE0 ADD R0,R10,R0, LSL #+1 \ 0000054C 0B10A0E1 MOV R1,R11 \ 00000550 02002DE9 PUSH {R1} \ 00000554 843295E5 LDR R3,[R5, #+644] \ 00000558 24209DE5 LDR R2,[SP, #+36] \ 0000055C 021080E2 ADD R1,R0,#+2 \ 00000560 0900A0E1 MOV R0,R9 \ 00000564 ........ _BLF PrintField,??PrintField??rA 7059 PrintField(msg_d_x,msg_d_y+(3*GetFontYSIZE(paused_height))+3, f_txt, align, fonto, spaco2); \ 00000568 8C0295E5 LDR R0,[R5, #+652] \ 0000056C C50100EF SWI +453 \ 00000570 0810A0E1 MOV R1,R8 \ 00000574 02002DE9 PUSH {R1} \ 00000578 800080E0 ADD R0,R0,R0, LSL #+1 \ 0000057C 0A0080E0 ADD R0,R0,R10 \ 00000580 0B10A0E1 MOV R1,R11 \ 00000584 02002DE9 PUSH {R1} \ 00000588 843295E5 LDR R3,[R5, #+644] \ 0000058C 28209DE5 LDR R2,[SP, #+40] \ 00000590 031080E2 ADD R1,R0,#+3 \ 00000594 0900A0E1 MOV R0,R9 \ 00000598 ........ _BLF PrintField,??PrintField??rA 7060 PrintField(msg_d_x,msg_d_y+(4*GetFontYSIZE(paused_height))+4, g_txt, align, fonto, spaco2); \ 0000059C 8C0295E5 LDR R0,[R5, #+652] \ 000005A0 C50100EF SWI +453 \ 000005A4 00012DE9 PUSH {R8} \ 000005A8 00082DE9 PUSH {R11} \ 000005AC 843295E5 LDR R3,[R5, #+644] \ 000005B0 2C209DE5 LDR R2,[SP, #+44] \ 000005B4 00018AE0 ADD R0,R10,R0, LSL #+2 \ 000005B8 041080E2 ADD R1,R0,#+4 \ ??maincsm_onmessage_33: \ 000005BC 0900A0E1 MOV R0,R9 \ 000005C0 ........ _BLF PrintField,??PrintField??rA \ 000005C4 28D08DE2 ADD SP,SP,#+40 7061 } 7062 } 7063 main_d=0; \ ??maincsm_onmessage_31: \ 000005C8 806285E5 STR R6,[R5, #+640] 7064 } 7065 7066 if(Is_UPTIME_On) DrawOnlineTime(canvasdata); \ ??maincsm_onmessage_30: \ 000005CC 68089FE5 LDR R0,??maincsm_onmessage_5+0x1C ;; Is_UPTIME_On \ 000005D0 000090E5 LDR R0,[R0, #+0] \ 000005D4 000050E3 CMP R0,#+0 \ 000005D8 0100000A BEQ ??maincsm_onmessage_34 \ 000005DC 880295E5 LDR R0,[R5, #+648] \ 000005E0 ........ BL DrawOnlineTime 7067 if(Is_PING_On && isPingIdle) DrawPing(canvasdata); \ ??maincsm_onmessage_34: \ 000005E4 BC0295E5 LDR R0,[R5, #+700] \ 000005E8 000050E3 CMP R0,#+0 \ 000005EC 0500000A BEQ ??maincsm_onmessage_35 \ 000005F0 48089FE5 LDR R0,??maincsm_onmessage_5+0x20 ;; isPingIdle \ 000005F4 000090E5 LDR R0,[R0, #+0] \ 000005F8 000050E3 CMP R0,#+0 \ 000005FC 0100000A BEQ ??maincsm_onmessage_35 \ 00000600 880295E5 LDR R0,[R5, #+648] \ 00000604 ........ BL DrawPing 7068 if(Auto_Status && showAwayIdle) DrawAutoMSG(canvasdata); \ ??maincsm_onmessage_35: \ 00000608 ........ LDR R0,??DataTable263 ;; Auto_Status \ 0000060C 000090E5 LDR R0,[R0, #+0] \ 00000610 000050E3 CMP R0,#+0 \ 00000614 0500000A BEQ ??maincsm_onmessage_36 \ 00000618 ........ LDR R0,??DataTable264 ;; showAwayIdle \ 0000061C 000090E5 LDR R0,[R0, #+0] \ 00000620 000050E3 CMP R0,#+0 \ 00000624 0100000A BEQ ??maincsm_onmessage_36 \ 00000628 880295E5 LDR R0,[R5, #+648] \ 0000062C ........ BL DrawAutoMSG 7069 if(Is_Unread_On) \ ??maincsm_onmessage_36: \ 00000630 0C089FE5 LDR R0,??maincsm_onmessage_5+0x24 ;; Is_Unread_On \ 00000634 000090E5 LDR R0,[R0, #+0] \ 00000638 000050E3 CMP R0,#+0 \ 0000063C 1300000A BEQ ??maincsm_onmessage_37 7070 { 7071 sprintf(unread_msg_info, "Unread: %d", total_unread2); \ 00000640 CC2295E5 LDR R2,[R5, #+716] \ 00000644 0880A0E3 MOV R8,#+8 \ 00000648 808E88E3 ORR R8,R8,#0x800 \ 0000064C 9A1F87E2 ADD R1,R7,#+616 \ 00000650 050088E0 ADD R0,R8,R5 \ 00000654 160000EF SWI +22 7072 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, spaco1); \ 00000658 ........ LDR R0,??DataTable267 ;; spaco1 \ 0000065C 052088E0 ADD R2,R8,R5 \ 00000660 000090E5 LDR R0,[R0, #+0] \ 00000664 01002DE9 PUSH {R0} \ 00000668 ........ LDR R0,??DataTable277 ;; fonto \ 0000066C 000090E5 LDR R0,[R0, #+0] \ 00000670 01002DE9 PUSH {R0} \ 00000674 843295E5 LDR R3,[R5, #+644] \ 00000678 C8079FE5 LDR R0,??maincsm_onmessage_5+0x28 ;; unread_Y \ 0000067C 001090E5 LDR R1,[R0, #+0] \ 00000680 C4079FE5 LDR R0,??maincsm_onmessage_5+0x2C ;; unread_X \ 00000684 000090E5 LDR R0,[R0, #+0] \ 00000688 ........ _BLF PrintField,??PrintField??rA \ 0000068C 08D08DE2 ADD SP,SP,#+8 7073 } 7074 7075 if(Is_Online_On && strlen(on_off_buf)!=0) \ ??maincsm_onmessage_37: \ 00000690 B8079FE5 LDR R0,??maincsm_onmessage_5+0x30 ;; Is_Online_On \ 00000694 000090E5 LDR R0,[R0, #+0] \ 00000698 000050E3 CMP R0,#+0 \ 0000069C 1E00000A BEQ ??maincsm_onmessage_26 \ 000006A0 00009DE5 LDR R0,[SP, #+0] \ 000006A4 1B0000EF SWI +27 \ 000006A8 000050E3 CMP R0,#+0 \ 000006AC 1A00000A BEQ ??maincsm_onmessage_26 7076 { 7077 char *s=malloc(128); \ 000006B0 8000A0E3 MOV R0,#+128 \ 000006B4 140000EF SWI +20 7078 sprintf(s,percent_s,on_off_buf); \ 000006B8 00209DE5 LDR R2,[SP, #+0] \ 000006BC 0080A0E1 MOV R8,R0 \ 000006C0 0B1087E2 ADD R1,R7,#+11 \ 000006C4 160000EF SWI +22 7079 s[strlen(s)-1]=0; \ 000006C8 0800A0E1 MOV R0,R8 \ 000006CC 1B0000EF SWI +27 \ 000006D0 080080E0 ADD R0,R0,R8 \ 000006D4 016040E5 STRB R6,[R0, #-1] 7080 PrintField(online_x,online_y,s, Is_Online_On_Align, fonto, spaco1); \ 000006D8 ........ LDR R0,??DataTable267 ;; spaco1 \ 000006DC 0820A0E1 MOV R2,R8 \ 000006E0 000090E5 LDR R0,[R0, #+0] \ 000006E4 01002DE9 PUSH {R0} \ 000006E8 ........ LDR R0,??DataTable277 ;; fonto \ 000006EC 000090E5 LDR R0,[R0, #+0] \ 000006F0 01002DE9 PUSH {R0} \ 000006F4 58079FE5 LDR R0,??maincsm_onmessage_5+0x34 ;; Is_Online_On_Align \ 000006F8 003090E5 LDR R3,[R0, #+0] \ 000006FC 54079FE5 LDR R0,??maincsm_onmessage_5+0x38 ;; online_y \ 00000700 001090E5 LDR R1,[R0, #+0] \ 00000704 50079FE5 LDR R0,??maincsm_onmessage_5+0x3C ;; online_x \ 00000708 000090E5 LDR R0,[R0, #+0] \ 0000070C ........ _BLF PrintField,??PrintField??rA 7081 mfree(s); \ 00000710 0800A0E1 MOV R0,R8 \ 00000714 150000EF SWI +21 \ 00000718 08D08DE2 ADD SP,SP,#+8 7082 } 7083 }//if(IsUnlocked()) 7084 } 7085 7086 7087 //-----------------------------------------------------------// 7088 7089 7090 if (msg->msg==MSG_RECONFIGURE_REQ) \ ??maincsm_onmessage_26: \ 0000071C 040094E5 LDR R0,[R4, #+4] \ 00000720 AF10A0E3 MOV R1,#+175 \ 00000724 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000728 010050E1 CMP R0,R1 \ 0000072C 4E00001A BNE ??maincsm_onmessage_38 7091 { 7092 //if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) 7093 if( (strcmp_nocase(suc_config_name,(char *)msg->data0)==0) 7094 || (strcmp_nocase(suc_config_name_mod,(char *)msg->data0)==0)) \ 00000730 ........ LDR R0,??DataTable300 ;; suc_config_name \ 00000734 0C1094E5 LDR R1,[R4, #+12] \ 00000738 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 0000073C 000050E3 CMP R0,#+0 \ 00000740 0500000A BEQ ??maincsm_onmessage_39 \ 00000744 ........ LDR R0,??DataTable270 ;; suc_config_name_mod \ 00000748 0C1094E5 LDR R1,[R4, #+12] \ 0000074C 000090E5 LDR R0,[R0, #+0] \ 00000750 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000754 000050E3 CMP R0,#+0 \ 00000758 4300001A BNE ??maincsm_onmessage_38 7095 { 7096 ShowMSG(1,(int)"NatICQ config updated!"); 7097 // InitConfig(); 7098 UpdateConfig(); 7099 #ifdef NEWSGOLD 7100 initTags(); 7101 #endif 7102 shot_soft=0; 7103 shot_header=0; 7104 PrintLibInit(4); 7105 FontPathInit((char *)fontpath, 1); \ ??maincsm_onmessage_39: \ 0000075C ........ LDR R8,??DataTable302 ;; fontpath 7106 FontPathInit((char *)fontpath2, 1); \ 00000760 ........ LDR R10,??DataTable303 ;; fontpath2 7107 FontPathInit((char *)fontpath3, 1);//#ifdef ELKA \ 00000764 ........ LDR R11,??DataTable304 ;; fontpath3 7108 FontPathInit((char *)fontpath4, 1); \ 00000768 ........ LDR R9,??DataTable305 ;; fontpath4 \ 0000076C 9D1F87E2 ADD R1,R7,#+628 \ 00000770 0100A0E3 MOV R0,#+1 \ 00000774 480100EF SWI +328 \ 00000778 ........ _BLF UpdateConfig,??UpdateConfig??rA \ 0000077C ........ _BLF initTags,??initTags??rA \ 00000780 F46485E5 STR R6,[R5, #+1268] \ 00000784 F86485E5 STR R6,[R5, #+1272] \ 00000788 0400A0E3 MOV R0,#+4 \ 0000078C ........ _BLF PrintLibInit,??PrintLibInit??rA \ 00000790 0110A0E3 MOV R1,#+1 \ 00000794 0800A0E1 MOV R0,R8 \ 00000798 ........ _BLF FontPathInit,??FontPathInit??rA \ 0000079C 0110A0E3 MOV R1,#+1 \ 000007A0 0A00A0E1 MOV R0,R10 \ 000007A4 ........ _BLF FontPathInit,??FontPathInit??rA \ 000007A8 0110A0E3 MOV R1,#+1 \ 000007AC 0B00A0E1 MOV R0,R11 \ 000007B0 ........ _BLF FontPathInit,??FontPathInit??rA \ 000007B4 0110A0E3 MOV R1,#+1 \ 000007B8 0900A0E1 MOV R0,R9 \ 000007BC ........ _BLF FontPathInit,??FontPathInit??rA 7109 7110 if(!strlen(fontpath2) || !strlen(fontpath3)) clfont=100+FONT_SMALL; \ 000007C0 0A00A0E1 MOV R0,R10 \ 000007C4 1B0000EF SWI +27 \ 000007C8 000050E3 CMP R0,#+0 \ 000007CC 0300000A BEQ ??maincsm_onmessage_40 \ 000007D0 0B00A0E1 MOV R0,R11 \ 000007D4 1B0000EF SWI +27 \ 000007D8 000050E3 CMP R0,#+0 \ 000007DC 0100001A BNE ??maincsm_onmessage_41 \ ??maincsm_onmessage_40: \ 000007E0 6F00A0E3 MOV R0,#+111 \ 000007E4 DC0485E5 STR R0,[R5, #+1244] 7111 if(!strlen(fontpath4)) { PNG_SOFTKEY=0; PNG_HEADER=0; } \ ??maincsm_onmessage_41: \ 000007E8 0900A0E1 MOV R0,R9 \ 000007EC 1B0000EF SWI +27 \ 000007F0 000050E3 CMP R0,#+0 \ 000007F4 0300001A BNE ??maincsm_onmessage_42 \ 000007F8 ........ LDR R0,??DataTable308 ;; PNG_SOFTKEY \ 000007FC 006080E5 STR R6,[R0, #+0] \ 00000800 ........ LDR R0,??DataTable309 ;; PNG_HEADER \ 00000804 006080E5 STR R6,[R0, #+0] 7112 if(fonto==1) \ ??maincsm_onmessage_42: \ 00000808 ........ LDR R0,??DataTable277 ;; fonto \ 0000080C 00B090E5 LDR R11,[R0, #+0] \ 00000810 01005BE3 CMP R11,#+1 \ 00000814 0B00001A BNE ??maincsm_onmessage_43 7113 { 7114 char *heght=malloc(64); \ 00000818 4000A0E3 MOV R0,#+64 \ 0000081C 140000EF SWI +20 \ 00000820 0090A0E1 MOV R9,R0 7115 sprintf(heght, "%s2240.png", fontpath); \ 00000824 0820A0E1 MOV R2,R8 \ 00000828 A31F87E2 ADD R1,R7,#+652 \ 0000082C 160000EF SWI +22 7116 paused_height=GetImgHeight((int)heght); \ 00000830 0900A0E1 MOV R0,R9 \ 00000834 210000EF SWI +33 \ 00000838 8C0285E5 STR R0,[R5, #+652] 7117 mfree(heght); \ 0000083C 0900A0E1 MOV R0,R9 \ 00000840 150000EF SWI +21 \ 00000844 010000EA B ??maincsm_onmessage_44 7118 } 7119 else 7120 paused_height=fonto-100; \ ??maincsm_onmessage_43: \ 00000848 64004BE2 SUB R0,R11,#+100 \ 0000084C 8C0285E5 STR R0,[R5, #+652] 7121 //#endif 7122 free_ICONS(); \ ??maincsm_onmessage_44: \ 00000850 ........ BL free_ICONS 7123 setup_ICONS(); \ 00000854 ........ BL setup_ICONS 7124 ResortCL(); \ 00000858 ........ _BLF ResortCL,??ResortCL??rA 7125 RecountMenu(NULL,1); \ 0000085C 0110A0E3 MOV R1,#+1 \ 00000860 0000A0E3 MOV R0,#+0 \ 00000864 ........ BL RecountMenu 7126 init_time_zone(); \ 00000868 ........ BL init_time_zone 7127 // InitSmiles(); 7128 } 7129 } 7130 7131 if (msg->msg==MSG_GUI_DESTROYED) \ ??maincsm_onmessage_38: \ 0000086C 040094E5 LDR R0,[R4, #+4] \ 00000870 0E10A0E3 MOV R1,#+14 \ 00000874 641C81E3 ORR R1,R1,#0x6400 \ 00000878 010050E1 CMP R0,R1 \ 0000087C 0D00001A BNE ??maincsm_onmessage_45 7132 { 7133 if ((int)msg->data0==csm->gui_id) \ 00000880 2C109DE5 LDR R1,[SP, #+44] \ 00000884 0C0094E5 LDR R0,[R4, #+12] \ 00000888 281091E5 LDR R1,[R1, #+40] \ 0000088C 010050E1 CMP R0,R1 7134 { 7135 csm->csm.state=-3; \ 00000890 2C009D05 LDREQ R0,[SP, #+44] \ 00000894 0210E003 MVNEQ R1,#+2 \ 00000898 10108005 STREQ R1,[R0, #+16] 7136 } 7137 if ((int)msg->data0==contactlist_menu_id) \ 0000089C 0C0094E5 LDR R0,[R4, #+12] \ 000008A0 D81295E5 LDR R1,[R5, #+728] \ 000008A4 010050E1 CMP R0,R1 7138 { 7139 contactlist_menu_id=0; \ 000008A8 D8628505 STREQ R6,[R5, #+728] 7140 //prev_clmenu_itemcount=0; 7141 } 7142 if ((int)msg->data0==edchat_id) \ 000008AC 841495E5 LDR R1,[R5, #+1156] \ 000008B0 010050E1 CMP R0,R1 7143 { 7144 edchat_id=0; \ 000008B4 84648505 STREQ R6,[R5, #+1156] 7145 } 7146 } 7147 7148 if (msg->msg==MSG_HELPER_TRANSLATOR) \ ??maincsm_onmessage_45: \ 000008B8 040094E5 LDR R0,[R4, #+4] \ 000008BC AE10A0E3 MOV R1,#+174 \ 000008C0 DE1C81E3 ORR R1,R1,#0xDE00 \ 000008C4 010050E1 CMP R0,R1 \ 000008C8 2B00001A BNE ??maincsm_onmessage_46 7149 { 7150 switch((int)msg->data0) \ 000008CC 0C0094E5 LDR R0,[R4, #+12] \ 000008D0 101094E5 LDR R1,[R4, #+16] \ 000008D4 ........ LDR R8,??DataTable278 ;; do_reconnect \ 000008D8 B030A0E3 MOV R3,#+176 \ 000008DC 783D83E3 ORR R3,R3,#0x1E00 \ 000008E0 053083E0 ADD R3,R3,R5 \ 000008E4 04308DE5 STR R3,[SP, #+4] \ 000008E8 9020A0E3 MOV R2,#+144 \ 000008EC 702D82E3 ORR R2,R2,#0x1C00 \ 000008F0 054082E0 ADD R4,R2,R5 \ 000008F4 0190A0E3 MOV R9,#+1 \ 000008F8 802050E2 SUBS R2,R0,#+128 \ 000008FC 0800000A BEQ ??maincsm_onmessage_47 \ 00000900 022052E2 SUBS R2,R2,#+2 \ 00000904 0200000A BEQ ??maincsm_onmessage_48 \ 00000908 122052E2 SUBS R2,R2,#+18 \ 0000090C 1200000A BEQ ??maincsm_onmessage_49 \ 00000910 1C0000EA B ??maincsm_onmessage_50 7151 { 7152 case LMAN_DISCONNECT_IND: 7153 is_gprs_online=0; \ ??maincsm_onmessage_48: \ 00000914 746485E5 STR R6,[R5, #+1140] 7154 return(1); \ 00000918 0100A0E3 MOV R0,#+1 \ 0000091C 30D08DE2 ADD SP,SP,#+48 \ 00000920 F08FBDE8 POP {R4-R11,PC} ;; return 7155 case LMAN_CONNECT_CNF: 7156 vibra_count=1; \ ??maincsm_onmessage_47: \ 00000924 4C9485E5 STR R9,[R5, #+1100] 7157 start_vibra(); \ 00000928 ........ BL start_vibra 7158 is_gprs_online=1; \ 0000092C 749485E5 STR R9,[R5, #+1140] 7159 strcpy(logmsg,LG_GRGPRSUP); \ 00000930 A61F87E2 ADD R1,R7,#+664 \ 00000934 0400A0E1 MOV R0,R4 \ 00000938 1A0000EF SWI +26 7160 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 0000093C ........ LDR R0,??DataTable288 ;; RECONNECT_TIME \ 00000940 0820A0E1 MOV R2,R8 \ 00000944 000090E5 LDR R0,[R0, #+0] \ 00000948 D830A0E3 MOV R3,#+216 \ 0000094C 930001E0 MUL R1,R3,R0 \ 00000950 04009DE5 LDR R0,[SP, #+4] \ 00000954 4D0000EF SWI +77 7161 return(1); \ 00000958 070000EA B ??maincsm_onmessage_46 7162 case ENIP_DNR_HOST_BY_NAME: 7163 if ((int)msg->data1==DNR_ID) \ ??maincsm_onmessage_49: \ 0000095C 980495E5 LDR R0,[R5, #+1176] \ 00000960 000051E1 CMP R1,R0 \ 00000964 0400001A BNE ??maincsm_onmessage_46 7164 { 7165 if (DNR_TRIES) SUBPROC((void *)create_connect); \ 00000968 9C0495E5 LDR R0,[R5, #+1180] \ 0000096C 000050E3 CMP R0,#+0 \ 00000970 0100000A BEQ ??maincsm_onmessage_46 \ 00000974 ........ LDR R0,??DataTable280 ;; create_connect \ ??maincsm_onmessage_51: \ 00000978 710100EF SWI +369 7166 } 7167 return(1); \ ??maincsm_onmessage_46: \ 0000097C 0100A0E3 MOV R0,#+1 \ ??maincsm_onmessage_52: \ 00000980 30D08DE2 ADD SP,SP,#+48 \ 00000984 F08FBDE8 POP {R4-R11,PC} 7168 } 7169 if ((int)msg->data1==sock) \ ??maincsm_onmessage_50: \ 00000988 602495E5 LDR R2,[R5, #+1120] \ 0000098C 020051E1 CMP R1,R2 \ 00000990 F9FFFF1A BNE ??maincsm_onmessage_46 7170 { 7171 //Если наш сокет 7172 if ((((unsigned int)msg->data0)>>28)==0xA) \ 00000994 201EA0E1 LSR R1,R0,#+28 \ 00000998 0A0051E3 CMP R1,#+10 \ 0000099C 0200001A BNE ??maincsm_onmessage_53 7173 { 7174 //Принят пакет 7175 ProcessPacket((TPKT *)msg->data0); \ 000009A0 ........ BL ProcessPacket 7176 return(0); \ 000009A4 0000A0E3 MOV R0,#+0 \ 000009A8 F4FFFFEA B ??maincsm_onmessage_52 7177 } 7178 switch((int)msg->data0) \ ??maincsm_onmessage_53: \ 000009AC 5C1495E5 LDR R1,[R5, #+1116] \ 000009B0 ........ LDR R10,??DataTable281 ;; VIBR_ON_CONNECT \ 000009B4 8A0040E2 SUB R0,R0,#+138 \ 000009B8 050050E3 CMP R0,#+5 \ 000009BC EEFFFF8A BHI ??maincsm_onmessage_46 \ 000009C0 012F8FE2 ADR R2,??maincsm_onmessage_1 \ 000009C4 D02092E1 LDRSB R2,[R2, R0] \ 000009C8 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_1: \ 000009CC 42423D01 DC8 +66,+66,+61,+1 \ 000009D0 4B470000 DC8 +75,+71,+0,+0 7179 { 7180 case ENIP_SOCK_CONNECTED: 7181 if (connect_state==1) \ ??maincsm_onmessage_54: \ 000009D4 010051E3 CMP R1,#+1 \ 000009D8 3500001A BNE ??maincsm_onmessage_55 7182 { 7183 if(VIBR_ON_CONNECT) \ 000009DC 00009AE5 LDR R0,[R10, #+0] 7184 vibra_count=2; 7185 else 7186 vibra_count=1; 7187 start_vibra(); 7188 //Соединение установленно, посылаем пакет login 7189 strcpy(logmsg, LG_GRTRYLOGIN); 7190 { 7191 int i=strlen(PASS); 7192 TPKT *p=malloc(sizeof(PKT)+i); 7193 p->pkt.uin=UIN; \ 000009E0 ........ LDR R11,??DataTable299 ;; UIN \ 000009E4 000050E3 CMP R0,#+0 \ 000009E8 0200A013 MOVNE R0,#+2 \ 000009EC 4C048515 STRNE R0,[R5, #+1100] \ 000009F0 4C948505 STREQ R9,[R5, #+1100] \ 000009F4 ........ BL start_vibra \ 000009F8 0400A0E1 MOV R0,R4 \ 000009FC 5C449FE5 LDR R4,??maincsm_onmessage_5+0x40 ;; PASS \ 00000A00 AC1F87E2 ADD R1,R7,#+688 \ 00000A04 1A0000EF SWI +26 \ 00000A08 0400A0E1 MOV R0,R4 \ 00000A0C 1B0000EF SWI +27 \ 00000A10 0080A0E1 MOV R8,R0 \ 00000A14 080088E2 ADD R0,R8,#+8 \ 00000A18 140000EF SWI +20 \ 00000A1C 00A0A0E1 MOV R10,R0 \ 00000A20 00009BE5 LDR R0,[R11, #+0] 7194 p->pkt.type=T_REQLOGIN; 7195 p->pkt.data_len=i; 7196 memcpy(p->data,PASS,i); \ 00000A24 0820A0E1 MOV R2,R8 \ 00000A28 00008AE5 STR R0,[R10, #+0] \ 00000A2C B490CAE1 STRH R9,[R10, #+4] \ 00000A30 B680CAE1 STRH R8,[R10, #+6] \ 00000A34 0410A0E1 MOV R1,R4 \ 00000A38 08008AE2 ADD R0,R10,#+8 \ 00000A3C 1E0100EF SWI +286 7197 SUBPROC((void *)send_login,0,p); \ 00000A40 1C049FE5 LDR R0,??maincsm_onmessage_5+0x44 ;; send_login \ 00000A44 0A20A0E1 MOV R2,R10 \ 00000A48 0010A0E3 MOV R1,#+0 \ 00000A4C 710100EF SWI +369 7198 } 7199 GROUP_CACHE=0; \ 00000A50 806485E5 STR R6,[R5, #+1152] 7200 SENDMSGCOUNT=0; //Начинаем отсчет \ 00000A54 DC6285E5 STR R6,[R5, #+732] 7201 if (!FindGroupByID(0)) AddGroup(0,LG_GROUPNOTINLIST); \ 00000A58 0600A0E1 MOV R0,R6 \ 00000A5C ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000A60 000050E3 CMP R0,#+0 \ 00000A64 0100001A BNE ??maincsm_onmessage_56 \ 00000A68 B01F87E2 ADD R1,R7,#+704 \ 00000A6C ........ _BLF AddGroup,??AddGroup??rA 7202 if (!FindContactByUin(UIN) && (IsShowLoopback)) AddContact(UIN, LG_CLLOOPBACK,0,1); \ ??maincsm_onmessage_56: \ 00000A70 00009BE5 LDR R0,[R11, #+0] \ 00000A74 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000A78 000050E3 CMP R0,#+0 \ 00000A7C 0800001A BNE ??maincsm_onmessage_57 \ 00000A80 E0039FE5 LDR R0,??maincsm_onmessage_5+0x48 ;; IsShowLoopback \ 00000A84 000090E5 LDR R0,[R0, #+0] \ 00000A88 000050E3 CMP R0,#+0 \ 00000A8C 0400000A BEQ ??maincsm_onmessage_57 \ 00000A90 00009BE5 LDR R0,[R11, #+0] \ 00000A94 0130A0E3 MOV R3,#+1 \ 00000A98 0620A0E1 MOV R2,R6 \ 00000A9C B31F87E2 ADD R1,R7,#+716 \ 00000AA0 ........ _BLF AddContact,??AddContact??rA 7203 SUBPROC((void *)LoadLocalCL); \ ??maincsm_onmessage_57: \ 00000AA4 C0039FE5 LDR R0,??maincsm_onmessage_5+0x4C ;; LoadLocalCL \ 00000AA8 710100EF SWI +369 7204 SMART_REDRAW(); \ 00000AAC ........ BL SMART_REDRAW \ 00000AB0 B1FFFFEA B ??maincsm_onmessage_46 7205 } 7206 else 7207 { 7208 ShowMSG(1,(int)LG_MSGILLEGMSGCON); \ ??maincsm_onmessage_55: \ 00000AB4 B61F87E2 ADD R1,R7,#+728 \ ??maincsm_onmessage_58: \ 00000AB8 0100A0E3 MOV R0,#+1 \ 00000ABC 480100EF SWI +328 \ 00000AC0 ADFFFFEA B ??maincsm_onmessage_46 7209 } 7210 break; 7211 case ENIP_SOCK_DATA_READ: 7212 if (connect_state>=2) \ ??maincsm_onmessage_59: \ 00000AC4 020051E3 CMP R1,#+2 7213 { 7214 //Если посылали send 7215 SUBPROC((void *)get_answer); \ 00000AC8 A0039FA5 LDRGE R0,??maincsm_onmessage_5+0x50 ;; get_answer \ 00000ACC A9FFFFAA BGE ??maincsm_onmessage_51 7216 //SMART_REDRAW(); 7217 } 7218 else 7219 { 7220 ShowMSG(1,(int)LG_MSGILLEGMSGREA); \ 00000AD0 C01F87E2 ADD R1,R7,#+768 \ 00000AD4 F7FFFFEA B ??maincsm_onmessage_58 7221 } 7222 break; 7223 case ENIP_BUFFER_FREE: 7224 case ENIP_BUFFER_FREE1: 7225 SUBPROC((void *)SendAnswer,0,0); \ ??maincsm_onmessage_60: \ 00000AD8 ........ LDR R0,??DataTable283 ;; SendAnswer \ 00000ADC 0020A0E3 MOV R2,#+0 \ 00000AE0 0210A0E1 MOV R1,R2 \ 00000AE4 710100EF SWI +369 \ 00000AE8 A3FFFFEA B ??maincsm_onmessage_46 7226 break; 7227 case ENIP_SOCK_REMOTE_CLOSED: 7228 //Закрыт со стороны сервера 7229 if (connect_state) \ ??maincsm_onmessage_61: \ 00000AEC 000051E3 CMP R1,#+0 \ 00000AF0 A1FFFF0A BEQ ??maincsm_onmessage_46 7230 SUBPROC((void *)end_socket); \ 00000AF4 ........ LDR R0,??DataTable284 ;; end_socket \ 00000AF8 9EFFFFEA B ??maincsm_onmessage_51 7231 break; 7232 case ENIP_SOCK_CLOSED: 7233 //strcpy(logmsg, "No connection"); 7234 //Dump not received 7235 /* if (RXstate>(-(int)sizeof(PKT))) 7236 { 7237 unsigned int err; 7238 int f=fopen("4:\\NATICQ.dump",A_ReadWrite+A_Create+A_Truncate+A_BIN,P_READ+P_WRITE,&err); 7239 if (f!=-1) 7240 { 7241 fwrite(f,&RXbuf,RXstate+sizeof(PKT),&err); 7242 fclose(f,&err); 7243 } 7244 }*/ 7245 FillAllOffline(); \ ??maincsm_onmessage_62: \ 00000AFC ........ _BLF FillAllOffline,??FillAllOffline??rA 7246 RecountMenu(NULL,1); \ 00000B00 0110A0E3 MOV R1,#+1 \ 00000B04 0600A0E1 MOV R0,R6 \ 00000B08 ........ BL RecountMenu 7247 connect_state=0; 7248 sock=-1; \ 00000B0C 0600E0E1 MVN R0,R6 \ 00000B10 600485E5 STR R0,[R5, #+1120] 7249 if(VIBR_ON_CONNECT) \ 00000B14 00009AE5 LDR R0,[R10, #+0] \ 00000B18 5C6485E5 STR R6,[R5, #+1116] \ 00000B1C 000050E3 CMP R0,#+0 7250 vibra_count=4; \ 00000B20 0400A013 MOVNE R0,#+4 \ 00000B24 4C048515 STRNE R0,[R5, #+1100] 7251 else 7252 vibra_count=1; \ 00000B28 4C948505 STREQ R9,[R5, #+1100] 7253 7254 start_vibra(); \ 00000B2C ........ BL start_vibra 7255 if (sendq_p) \ 00000B30 241087E2 ADD R1,R7,#+36 \ 00000B34 0C108DE5 STR R1,[SP, #+12] \ 00000B38 6010A0E3 MOV R1,#+96 \ 00000B3C 7C1D81E3 ORR R1,R1,#0x1F00 \ 00000B40 051081E0 ADD R1,R1,R5 \ 00000B44 08108DE5 STR R1,[SP, #+8] \ 00000B48 A80295E5 LDR R0,[R5, #+680] \ 00000B4C 000050E3 CMP R0,#+0 \ 00000B50 4F00000A BEQ ??maincsm_onmessage_63 7256 { 7257 snprintf(logmsg,255,"Disconnected, %d bytes not sended!",sendq_l); \ 00000B54 A43295E5 LDR R3,[R5, #+676] \ 00000B58 C92F87E2 ADD R2,R7,#+804 \ 00000B5C FF10A0E3 MOV R1,#+255 \ 00000B60 0400A0E1 MOV R0,R4 \ 00000B64 1B0100EF SWI +283 7258 7259 #ifdef LOG 7260 char *s=malloc(256); \ 00000B68 400FA0E3 MOV R0,#+256 \ 00000B6C 140000EF SWI +20 \ 00000B70 0090A0E1 MOV R9,R0 7261 TTime tt; 7262 TDate d; 7263 GetDateTime(&d,&tt); \ 00000B74 10108DE2 ADD R1,SP,#+16 \ 00000B78 18008DE2 ADD R0,SP,#+24 \ 00000B7C B40000EF SWI +180 7264 CLIST *t; 7265 t=(CLIST*)cltop; \ 00000B80 7CA495E5 LDR R10,[R5, #+1148] 7266 ACKED *ack; 7267 int i=0; \ 00000B84 00B0A0E3 MOV R11,#+0 \ 00000B88 00005AE3 CMP R10,#+0 \ 00000B8C 0700000A BEQ ??maincsm_onmessage_64 7268 while(t) 7269 { 7270 ack=GetAck(t); \ ??maincsm_onmessage_65: \ 00000B90 0A00A0E1 MOV R0,R10 \ 00000B94 ........ BL GetAck 7271 if(ack) i+=ack->count; 7272 t=t->next; \ 00000B98 00A09AE5 LDR R10,[R10, #+0] \ 00000B9C 000050E3 CMP R0,#+0 \ 00000BA0 04009015 LDRNE R0,[R0, #+4] \ 00000BA4 0BB08010 ADDNE R11,R0,R11 7273 } \ 00000BA8 00005AE3 CMP R10,#+0 \ 00000BAC F7FFFF1A BNE ??maincsm_onmessage_65 7274 // ACKED *GetAck(CLIST *t) 7275 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", 7276 uptimeHour, uptimeMin, uptimeSec, hostbuf2,tt.hour,tt.min,tt.sec,d.day,curping,total_unread,i,logmsg); \ ??maincsm_onmessage_64: \ 00000BB0 0400A0E1 MOV R0,R4 \ 00000BB4 01002DE9 PUSH {R0} \ 00000BB8 00082DE9 PUSH {R11} \ 00000BBC 780495E5 LDR R0,[R5, #+1144] \ 00000BC0 D22F87E2 ADD R2,R7,#+840 \ 00000BC4 01002DE9 PUSH {R0} \ 00000BC8 A00295E5 LDR R0,[R5, #+672] \ 00000BCC FF10A0E3 MOV R1,#+255 \ 00000BD0 01002DE9 PUSH {R0} \ 00000BD4 2D00DDE5 LDRB R0,[SP, #+45] \ 00000BD8 01002DE9 PUSH {R0} \ 00000BDC 2600DDE5 LDRB R0,[SP, #+38] \ 00000BE0 01002DE9 PUSH {R0} \ 00000BE4 2900DDE5 LDRB R0,[SP, #+41] \ 00000BE8 01002DE9 PUSH {R0} \ 00000BEC 2C00DDE5 LDRB R0,[SP, #+44] \ 00000BF0 01002DE9 PUSH {R0} \ 00000BF4 28009DE5 LDR R0,[SP, #+40] \ 00000BF8 01002DE9 PUSH {R0} \ 00000BFC 9C0395E5 LDR R0,[R5, #+924] \ 00000C00 01002DE9 PUSH {R0} \ 00000C04 980395E5 LDR R0,[R5, #+920] \ 00000C08 01002DE9 PUSH {R0} \ 00000C0C 943395E5 LDR R3,[R5, #+916] \ 00000C10 0900A0E1 MOV R0,R9 \ 00000C14 1B0100EF SWI +283 \ 00000C18 2CD08DE2 ADD SP,SP,#+44 7277 logwrite(s); \ 00000C1C 00608DE5 STR R6,[SP, #+0] \ 00000C20 0D30A0E1 MOV R3,SP \ 00000C24 602FA0E3 MOV R2,#+384 \ 00000C28 761042E2 SUB R1,R2,#+118 \ 00000C2C 140087E2 ADD R0,R7,#+20 \ 00000C30 0A0000EF SWI +10 \ 00000C34 00A0A0E1 MOV R10,R0 \ 00000C38 01007AE3 CMN R10,#+1 \ 00000C3C 0F00000A BEQ ??maincsm_onmessage_66 \ 00000C40 0900A0E1 MOV R0,R9 \ 00000C44 1B0000EF SWI +27 \ 00000C48 0D30A0E1 MOV R3,SP \ 00000C4C 0020A0E1 MOV R2,R0 \ 00000C50 0910A0E1 MOV R1,R9 \ 00000C54 0A00A0E1 MOV R0,R10 \ 00000C58 0C0000EF SWI +12 \ 00000C5C 0D30A0E1 MOV R3,SP \ 00000C60 0220A0E3 MOV R2,#+2 \ 00000C64 081087E2 ADD R1,R7,#+8 \ 00000C68 0A00A0E1 MOV R0,R10 \ 00000C6C 0C0000EF SWI +12 \ 00000C70 0D10A0E1 MOV R1,SP \ 00000C74 0A00A0E1 MOV R0,R10 \ 00000C78 0D0000EF SWI +13 \ 00000C7C 020000EA B ??maincsm_onmessage_67 \ ??maincsm_onmessage_66: \ 00000C80 0C109DE5 LDR R1,[SP, #+12] \ 00000C84 0100A0E3 MOV R0,#+1 \ 00000C88 480100EF SWI +328 7278 mfree(s); \ ??maincsm_onmessage_67: \ 00000C8C 0900A0E1 MOV R0,R9 \ 00000C90 150000EF SWI +21 7279 #endif 7280 } 7281 Play(sndLostConn); \ ??maincsm_onmessage_63: \ 00000C94 ........ LDR R0,??DataTable285 ;; sndLostConn \ 00000C98 ........ BL Play 7282 SMART_REDRAW(); \ 00000C9C ........ BL SMART_REDRAW 7283 SUBPROC((void *)ClearSendQ); \ 00000CA0 ........ LDR R0,??DataTable286 ;; ClearSendQ \ 00000CA4 710100EF SWI +369 7284 #ifdef EVILFOX 7285 if (!disautorecconect) GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*12,do_reconnect); 7286 #else 7287 if (!disautorecconect) \ 00000CA8 380495E5 LDR R0,[R5, #+1080] \ 00000CAC 000050E3 CMP R0,#+0 \ 00000CB0 31FFFF1A BNE ??maincsm_onmessage_46 7288 { 7289 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000CB4 ........ LDR R0,??DataTable288 ;; RECONNECT_TIME \ 00000CB8 0820A0E1 MOV R2,R8 \ 00000CBC 000090E5 LDR R0,[R0, #+0] \ 00000CC0 D830A0E3 MOV R3,#+216 \ 00000CC4 930001E0 MUL R1,R3,R0 \ 00000CC8 04009DE5 LDR R0,[SP, #+4] 7290 snprintf(logmsg,255,"%s\nReconect after %d second...",logmsg, RECONNECT_TIME); //2058 7291 #ifdef LOG 7292 char *s=malloc(256); 7293 TTime tt; 7294 TDate d; 7295 GetDateTime(&d,&tt); 7296 CLIST *t; 7297 t=(CLIST*)cltop; 7298 ACKED *ack; 7299 int i=0; \ 00000CCC 00A0A0E3 MOV R10,#+0 \ 00000CD0 4D0000EF SWI +77 \ 00000CD4 ........ LDR R0,??DataTable288 ;; RECONNECT_TIME \ 00000CD8 0430A0E1 MOV R3,R4 \ 00000CDC 000090E5 LDR R0,[R0, #+0] \ 00000CE0 F22F87E2 ADD R2,R7,#+968 \ 00000CE4 01002DE9 PUSH {R0} \ 00000CE8 FF10A0E3 MOV R1,#+255 \ 00000CEC 0400A0E1 MOV R0,R4 \ 00000CF0 1B0100EF SWI +283 \ 00000CF4 400FA0E3 MOV R0,#+256 \ 00000CF8 140000EF SWI +20 \ 00000CFC 0080A0E1 MOV R8,R0 \ 00000D00 14108DE2 ADD R1,SP,#+20 \ 00000D04 1C008DE2 ADD R0,SP,#+28 \ 00000D08 B40000EF SWI +180 \ 00000D0C 7C9495E5 LDR R9,[R5, #+1148] \ 00000D10 04D08DE2 ADD SP,SP,#+4 \ 00000D14 000059E3 CMP R9,#+0 \ 00000D18 0700000A BEQ ??maincsm_onmessage_68 7300 while(t) 7301 { 7302 ack=GetAck(t); \ ??maincsm_onmessage_69: \ 00000D1C 0900A0E1 MOV R0,R9 \ 00000D20 ........ BL GetAck 7303 if(ack) i+=ack->count; 7304 t=t->next; \ 00000D24 009099E5 LDR R9,[R9, #+0] \ 00000D28 000050E3 CMP R0,#+0 \ 00000D2C 04009015 LDRNE R0,[R0, #+4] \ 00000D30 0AA08010 ADDNE R10,R0,R10 7305 } \ 00000D34 000059E3 CMP R9,#+0 \ 00000D38 F7FFFF1A BNE ??maincsm_onmessage_69 7306 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", 7307 uptimeHour, uptimeMin, uptimeSec, hostbuf2,tt.hour,tt.min,tt.sec,d.day,curping,total_unread,i,logmsg); \ ??maincsm_onmessage_68: \ 00000D3C 10002DE9 PUSH {R4} \ 00000D40 00042DE9 PUSH {R10} \ 00000D44 780495E5 LDR R0,[R5, #+1144] \ 00000D48 FA2F87E2 ADD R2,R7,#+1000 \ 00000D4C 01002DE9 PUSH {R0} \ 00000D50 A00295E5 LDR R0,[R5, #+672] \ 00000D54 FF10A0E3 MOV R1,#+255 \ 00000D58 01002DE9 PUSH {R0} \ 00000D5C 2D00DDE5 LDRB R0,[SP, #+45] \ 00000D60 01002DE9 PUSH {R0} \ 00000D64 2600DDE5 LDRB R0,[SP, #+38] \ 00000D68 01002DE9 PUSH {R0} \ 00000D6C 2900DDE5 LDRB R0,[SP, #+41] \ 00000D70 01002DE9 PUSH {R0} \ 00000D74 2C00DDE5 LDRB R0,[SP, #+44] \ 00000D78 01002DE9 PUSH {R0} \ 00000D7C 28009DE5 LDR R0,[SP, #+40] \ 00000D80 01002DE9 PUSH {R0} \ 00000D84 9C0395E5 LDR R0,[R5, #+924] \ 00000D88 01002DE9 PUSH {R0} \ 00000D8C 980395E5 LDR R0,[R5, #+920] \ 00000D90 01002DE9 PUSH {R0} \ 00000D94 943395E5 LDR R3,[R5, #+916] \ 00000D98 0800A0E1 MOV R0,R8 \ 00000D9C 1B0100EF SWI +283 \ 00000DA0 2CD08DE2 ADD SP,SP,#+44 7308 logwrite(s); \ 00000DA4 00608DE5 STR R6,[SP, #+0] \ 00000DA8 0D30A0E1 MOV R3,SP \ 00000DAC 602FA0E3 MOV R2,#+384 \ 00000DB0 761042E2 SUB R1,R2,#+118 \ 00000DB4 140087E2 ADD R0,R7,#+20 \ 00000DB8 0A0000EF SWI +10 \ 00000DBC 0040A0E1 MOV R4,R0 \ 00000DC0 010074E3 CMN R4,#+1 \ 00000DC4 0F00000A BEQ ??maincsm_onmessage_70 \ 00000DC8 0800A0E1 MOV R0,R8 \ 00000DCC 1B0000EF SWI +27 \ 00000DD0 0D30A0E1 MOV R3,SP \ 00000DD4 0020A0E1 MOV R2,R0 \ 00000DD8 0810A0E1 MOV R1,R8 \ 00000DDC 0400A0E1 MOV R0,R4 \ 00000DE0 0C0000EF SWI +12 \ 00000DE4 0D30A0E1 MOV R3,SP \ 00000DE8 0220A0E3 MOV R2,#+2 \ 00000DEC 081087E2 ADD R1,R7,#+8 \ 00000DF0 0400A0E1 MOV R0,R4 \ 00000DF4 0C0000EF SWI +12 \ 00000DF8 0D10A0E1 MOV R1,SP \ 00000DFC 0400A0E1 MOV R0,R4 \ 00000E00 0D0000EF SWI +13 \ 00000E04 020000EA B ??maincsm_onmessage_71 \ ??maincsm_onmessage_70: \ 00000E08 0C109DE5 LDR R1,[SP, #+12] \ 00000E0C 0100A0E3 MOV R0,#+1 \ 00000E10 480100EF SWI +328 7309 mfree(s); \ ??maincsm_onmessage_71: \ 00000E14 0800A0E1 MOV R0,R8 \ 00000E18 150000EF SWI +21 \ 00000E1C D6FEFFEA B ??maincsm_onmessage_46 \ ??maincsm_onmessage_5: \ 00000E20 ........ DC32 CheckDoubleRun \ 00000E24 ........ DC32 ProcessNextSmile \ 00000E28 ........ DC32 ProcessNextXStatImg \ 00000E2C ........ DC32 IDLEICON_X \ 00000E30 ........ DC32 IDLEICON_Y \ 00000E34 ........ DC32 msg_d_x \ 00000E38 ........ DC32 msg_d_y \ 00000E3C ........ DC32 Is_UPTIME_On \ 00000E40 ........ DC32 isPingIdle \ 00000E44 ........ DC32 Is_Unread_On \ 00000E48 ........ DC32 unread_Y \ 00000E4C ........ DC32 unread_X \ 00000E50 ........ DC32 Is_Online_On \ 00000E54 ........ DC32 Is_Online_On_Align \ 00000E58 ........ DC32 online_y \ 00000E5C ........ DC32 online_x \ 00000E60 ........ DC32 PASS \ 00000E64 ........ DC32 send_login \ 00000E68 ........ DC32 IsShowLoopback \ 00000E6C ........ DC32 LoadLocalCL \ 00000E70 ........ DC32 get_answer 7310 #endif 7311 } 7312 7313 #endif 7314 break; 7315 } 7316 } 7317 } 7318 return(1); 7319 } 7320 7321 7322 //-------------------- ICON IN ICONBAR --------------------// 7323 7324 //kluchnik 26.03.08 7325 #ifdef NEWSGOLD 7326 #pragma swi_number=0x27 7327 __swi __arm void AddIconToIconBar(int pic, short *num); 7328 7329 int iconmsg=1; \ In segment CODE, align 4, keep-with-next 7330 void addIconBar(short* num) 7331 { \ addIconBar: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 7332 if(IsGuiOnTop(maingui_id) && !ShowStatusToIconBar) goto next;// return; \ 00000004 ........ LDR R6,??DataTable316 ;; i_rc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C D40296E5 LDR R0,[R6, #+724] \ 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 7333 7334 int icn; 7335 if(ShowStatusIcon==1 || ShowStatusIcon==3) \ ??addIconBar_0: \ 00000034 ........ LDR R0,??DataTable290 ;; ShowStatusIcon \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C 010050E3 CMP R0,#+1 \ 00000040 03005013 CMPNE R0,#+3 \ 00000044 2C00001A BNE ??addIconBar_3 7336 { 7337 if(total_unread) \ 00000048 780496E5 LDR R0,[R6, #+1144] \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 2200000A BEQ ??addIconBar_4 7338 { 7339 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 08758615 STRNE R7,[R6, #+1288] \ 00000068 0200001A BNE ??addIconBar_5 7340 AddIconToIconBar(NumStatusToIconBar +(iconmsg==1?IS_MSG:7777), num); \ 0000006C 080596E5 LDR R0,[R6, #+1288] \ 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,??DataTable294 ;; NumStatusToIconBar \ 0000008C 0410A0E1 MOV R1,R4 \ 00000090 002092E5 LDR R2,[R2, #+0] \ 00000094 020080E0 ADD R0,R0,R2 \ 00000098 270000EF SWI +39 7341 iconmsg=!iconmsg; \ 0000009C 080596E5 LDR R0,[R6, #+1288] \ 000000A0 000050E3 CMP R0,#+0 \ 000000A4 0070A013 MOVNE R7,#+0 \ 000000A8 087586E5 STR R7,[R6, #+1288] 7342 } 7343 else 7344 { 7345 switch(connect_state) 7346 { 7347 case 0: 7348 icn=IS_OFFLINE; 7349 break; 7350 case 3: 7351 icn=CurrentStatus; //IS_ONLINE; 7352 break; 7353 default: 7354 icn=IS_UNKNOWN; break; 7355 } 7356 AddIconToIconBar(NumStatusToIconBar + icn, num); 7357 } 7358 } 7359 else 7360 { 7361 if(ShowStatusIcon==2)//Если показывать и иконбаре везде,кроме идле 7362 { 7363 if(!(IsIdleUiOnTop())) 7364 { 7365 if(total_unread) 7366 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); 7367 else 7368 { 7369 switch(connect_state) 7370 { 7371 case 0: 7372 icn=IS_OFFLINE; break; 7373 case 3: 7374 icn=CurrentStatus; //IS_ONLINE; 7375 break; 7376 default: 7377 icn=IS_UNKNOWN; break; 7378 } 7379 AddIconToIconBar(NumStatusToIconBar + icn, num); 7380 } 7381 } 7382 } 7383 } 7384 7385 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 7386 { 7387 if(total_unread2 && total_unread2<10) \ 000000C0 CC0296E5 LDR R0,[R6, #+716] \ 000000C4 000050E3 CMP R0,#+0 \ 000000C8 2400000A BEQ ??addIconBar_9 \ 000000CC 0A0050E3 CMP R0,#+10 \ 000000D0 220000AA BGE ??addIconBar_9 7388 AddIconToIconBar(8200 + total_unread2, num); \ 000000D4 0410A0E1 MOV R1,R4 \ 000000D8 000085E0 ADD R0,R5,R0 \ 000000DC 260000EA B ??addIconBar_10 \ ??addIconBar_4: \ 000000E0 5C0496E5 LDR R0,[R6, #+1116] \ 000000E4 000050E3 CMP R0,#+0 \ 000000E8 1700000A BEQ ??addIconBar_11 \ 000000EC 030050E2 SUBS R0,R0,#+3 \ 000000F0 1400001A BNE ??addIconBar_12 \ ??addIconBar_13: \ 000000F4 740396E5 LDR R0,[R6, #+884] \ 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 780496E5 LDR R0,[R6, #+1144] \ 00000114 000050E3 CMP R0,#+0 \ 00000118 0500000A BEQ ??addIconBar_14 \ 0000011C ........ LDR R0,??DataTable294 ;; 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 5C0496E5 LDR R0,[R6, #+1116] \ 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,??DataTable294 ;; NumStatusToIconBar \ 00000150 0410A0E1 MOV R1,R4 \ 00000154 002092E5 LDR R2,[R2, #+0] \ 00000158 020080E0 ADD R0,R0,R2 \ 0000015C F2FFFFEA B ??addIconBar_15 7389 else 7390 if(CurrentXStatus!=0) \ ??addIconBar_9: \ 00000160 780396E5 LDR R0,[R6, #+888] \ 00000164 000050E3 CMP R0,#+0 \ 00000168 0400000A BEQ ??addIconBar_2 7391 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 7392 } 7393 7394 7395 next: 7396 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 7397 { 7398 int ping=0; 7399 if(curping < 3) ping=0; \ 00000190 A00296E5 LDR R0,[R6, #+672] \ 00000194 030050E3 CMP R0,#+3 \ 00000198 0C0000BA BLT ??addIconBar_17 7400 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 7401 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 7402 else if(curping > 30) ping=3; \ ??addIconBar_20: \ 000001C4 1F0050E3 CMP R0,#+31 \ 000001C8 0300A0A3 MOVGE R0,#+3 \ 000001CC 000000AA BGE ??addIconBar_19 7403 else ping=0; \ ??addIconBar_17: \ 000001D0 0000A0E3 MOV R0,#+0 7404 7405 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 7406 } 7407 7408 7409 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} 7410 { 7411 if(IsGuiOnTop(maingui_id) && !ShowAddStatusToIconBar) return;//Если не показывать когда гуй вверху,выходим нах \ 000001F4 D40296E5 LDR R0,[R6, #+724] \ 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} 7412 7413 CLIST *t; 7414 t=FindContactByUin(ADDITION_UIN); \ ??addIconBar_21: \ 00000214 0700A0E1 MOV R0,R7 \ 00000218 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 0000021C 0060B0E1 MOVS R6,R0 7415 if(t) \ 00000220 F080BD08 POPEQ {R4-R7,PC} 7416 { 7417 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} 7418 { 7419 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 7420 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); \ 00000258 0600A0E1 MOV R0,R6 \ 0000025C ........ BL GetIconIndex \ 00000260 ........ LDR R2,??DataTable294 ;; NumStatusToIconBar \ 00000264 0410A0E1 MOV R1,R4 \ 00000268 002092E5 LDR R2,[R2, #+0] \ 0000026C 020080E0 ADD R0,R0,R2 \ 00000270 270000EF SWI +39 7421 7422 if(t->isunread) \ ??addIconBar_22: \ 00000274 840096E5 LDR R0,[R6, #+132] \ 00000278 000050E3 CMP R0,#+0 \ 0000027C 0300000A BEQ ??addIconBar_23 7423 AddIconToIconBar(8200 + t->unread_msg, num); \ 00000280 880096E5 LDR R0,[R6, #+136] \ 00000284 0410A0E1 MOV R1,R4 \ 00000288 000085E0 ADD R0,R5,R0 \ 0000028C 090000EA B ??addIconBar_24 7424 else 7425 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} 7426 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 7427 } 7428 } 7429 } 7430 } 7431 7432 typedef struct 7433 { 7434 char check_name[8]; 7435 int addr; 7436 }ICONBAR_H; 7437 7438 #endif 7439 \ In segment DATA_C, align 4, align-sorted 7440 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 7441 \ In segment DATA_Z, align 4, align-sorted 7442 unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 7443 7444 struct 7445 { 7446 CSM_DESC maincsm; 7447 WSHDR maincsm_name; 7448 #ifdef NEWSGOLD 7449 ICONBAR_H iconbar_handler; 7450 #endif 7451 }MAINCSM = 7452 { 7453 { 7454 maincsm_onmessage, 7455 maincsm_oncreate, 7456 #ifdef NEWSGOLD 7457 0, 7458 0, 7459 0, 7460 0, 7461 #endif 7462 maincsm_onclose, 7463 sizeof(MAIN_CSM), 7464 1, 7465 &minus11 7466 }, 7467 { 7468 maincsm_name_body, 7469 NAMECSM_MAGIC1, 7470 NAMECSM_MAGIC2, 7471 0x0, 7472 139 7473 } 7474 #ifdef NEWSGOLD 7475 , 7476 { 7477 "IconBar" 7478 } 7479 #endif 7480 }; 7481 \ In segment CODE, align 4, keep-with-next 7482 void UpdateCSMname(void) 7483 { 7484 wsprintf((WSHDR *)(&MAINCSM.maincsm_name), "NATICQ: %d",UIN); \ UpdateCSMname: \ 00000000 ........ LDR R0,??DataTable299 ;; 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 + 180 \ 00000014 240100EF SWI +292 7485 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??UpdateCSMname_0: \ 0000001C ........ DC32 `?` \ 00000020 ........ DC32 i_rc + 180 7486 7487 #ifdef NEWSGOLD \ In segment CODE, align 4, keep-with-next 7488 void SetIconBarHandler() 7489 { 7490 MAINCSM.iconbar_handler.addr = (int)addIconBar; \ SetIconBarHandler: \ 00000000 08009FE5 LDR R0,??SetIconBarHandler_0 ;; i_rc + 208 \ 00000004 ........ LDR R1,??DataTable310 ;; addIconBar \ 00000008 001080E5 STR R1,[R0, #+0] 7491 } \ 0000000C 1EFF2FE1 BX LR ;; return \ ??SetIconBarHandler_0: \ 00000010 ........ DC32 i_rc + 208 7492 #endif 7493 \ In segment CODE, align 4, keep-with-next 7494 int main(char *filename) 7495 { \ main: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 \ 00000008 0060A0E1 MOV R6,R0 7496 MAIN_CSM main_csm; 7497 char *s; 7498 int len; 7499 WSHDR *ws; 7500 if(UpdateConfig() == -1) return 0; \ 0000000C ........ _BLF UpdateConfig,??UpdateConfig??rA \ 00000010 010070E3 CMN R0,#+1 \ 00000014 8D00000A BEQ ??main_0 7501 // InitConfig2(); 7502 7503 sprintf(PINGO, "Ping None"); \ 00000018 ........ LDR R4,??DataTable316 ;; i_rc \ 0000001C ........ LDR R5,??DataTable298 ;; Canvas \ 00000020 6800A0E3 MOV R0,#+104 \ 00000024 400E80E3 ORR R0,R0,#0x400 \ 00000028 051080E0 ADD R1,R0,R5 \ 0000002C 5800A0E3 MOV R0,#+88 \ 00000030 640D80E3 ORR R0,R0,#0x1900 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 160000EF SWI +22 7504 7505 s=strrchr(filename,'\\'); 7506 len=(s-filename)+1; \ 0000003C 5C10A0E3 MOV R1,#+92 \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 170100EF SWI +279 \ 00000048 060040E0 SUB R0,R0,R6 \ 0000004C 017080E2 ADD R7,R0,#+1 7507 strncpy(elf_path,filename,len); \ 00000050 0720A0E1 MOV R2,R7 \ 00000054 0610A0E1 MOV R1,R6 \ 00000058 550E84E2 ADD R0,R4,#+1360 \ 0000005C 160100EF SWI +278 7508 elf_path[len]=0; \ 00000060 0060A0E3 MOV R6,#+0 \ 00000064 040087E0 ADD R0,R7,R4 \ 00000068 5065C0E5 STRB R6,[R0, #+1360] 7509 if (!UIN) \ 0000006C ........ LDR R0,??DataTable299 ;; UIN \ 00000070 000090E5 LDR R0,[R0, #+0] \ 00000074 000050E3 CMP R0,#+0 \ 00000078 1700001A BNE ??main_1 7510 { 7511 LockSched(); \ 0000007C 460100EF SWI +326 7512 ShowMSG(1,(int)LG_MSGNOUINPASS); \ 00000080 7400A0E3 MOV R0,#+116 \ 00000084 400E80E3 ORR R0,R0,#0x400 \ 00000088 051080E0 ADD R1,R0,R5 \ 0000008C 0100A0E3 MOV R0,#+1 \ 00000090 480100EF SWI +328 7513 ws=AllocWS(150); \ 00000094 9600A0E3 MOV R0,#+150 \ 00000098 250100EF SWI +293 7514 str_2ws(ws,suc_config_name,128); \ 0000009C ........ LDR R1,??DataTable300 ;; suc_config_name \ 000000A0 0040A0E1 MOV R4,R0 \ 000000A4 8020A0E3 MOV R2,#+128 \ 000000A8 6C0100EF SWI +364 7515 ExecuteFile(ws,0,0); \ 000000AC 0020A0E3 MOV R2,#+0 \ 000000B0 0210A0E1 MOV R1,R2 \ 000000B4 0400A0E1 MOV R0,R4 \ 000000B8 940000EF SWI +148 7516 FreeWS(ws); \ 000000BC 0400A0E1 MOV R0,R4 \ 000000C0 290100EF SWI +297 7517 UnlockSched(); \ 000000C4 470100EF SWI +327 7518 SUBPROC((void *)ElfKiller); \ 000000C8 ........ LDR R0,??DataTable301 ;; ElfKiller \ 000000CC 710100EF SWI +369 7519 return 0; \ 000000D0 0600A0E1 MOV R0,R6 \ 000000D4 2CD08DE2 ADD SP,SP,#+44 \ 000000D8 F087BDE8 POP {R4-R10,PC} 7520 } 7521 7522 ReadDefSettings(); 7523 setup_ICONS(); 7524 LoadXStatusText(); 7525 UpdateCSMname(); 7526 LockSched(); 7527 maincsm_id=CreateCSM(&MAINCSM.maincsm,&main_csm,0); 7528 UnlockSched(); 7529 7530 PrintLibInit(4); 7531 FontPathInit((char *)fontpath, 1); \ ??main_1: \ 000000DC ........ LDR R7,??DataTable302 ;; fontpath 7532 FontPathInit((char *)fontpath2, 1); \ 000000E0 ........ LDR R8,??DataTable303 ;; fontpath2 7533 FontPathInit((char *)fontpath3, 1); \ 000000E4 ........ LDR R9,??DataTable304 ;; fontpath3 7534 FontPathInit((char *)fontpath4, 1); \ 000000E8 ........ LDR R10,??DataTable305 ;; fontpath4 \ 000000EC ........ BL ReadDefSettings \ 000000F0 ........ BL setup_ICONS \ 000000F4 ........ _BLF LoadXStatusText,??LoadXStatusText??rA \ 000000F8 ........ BL UpdateCSMname \ 000000FC 460100EF SWI +326 \ 00000100 0020A0E3 MOV R2,#+0 \ 00000104 0D10A0E1 MOV R1,SP \ 00000108 8C0084E2 ADD R0,R4,#+140 \ 0000010C 070100EF SWI +263 \ 00000110 D00284E5 STR R0,[R4, #+720] \ 00000114 470100EF SWI +327 \ 00000118 0400A0E3 MOV R0,#+4 \ 0000011C ........ _BLF PrintLibInit,??PrintLibInit??rA \ 00000120 0110A0E3 MOV R1,#+1 \ 00000124 0700A0E1 MOV R0,R7 \ 00000128 ........ _BLF FontPathInit,??FontPathInit??rA \ 0000012C 0110A0E3 MOV R1,#+1 \ 00000130 0800A0E1 MOV R0,R8 \ 00000134 ........ _BLF FontPathInit,??FontPathInit??rA \ 00000138 0110A0E3 MOV R1,#+1 \ 0000013C 0900A0E1 MOV R0,R9 \ 00000140 ........ _BLF FontPathInit,??FontPathInit??rA \ 00000144 0110A0E3 MOV R1,#+1 \ 00000148 0A00A0E1 MOV R0,R10 \ 0000014C ........ _BLF FontPathInit,??FontPathInit??rA 7535 SetCanvasFlag(1); \ 00000150 0100A0E3 MOV R0,#+1 \ 00000154 ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 7536 7537 if(isSystemFont) clfont=100+pngFont; \ 00000158 ........ LDR R0,??DataTable306 ;; isSystemFont \ 0000015C 000090E5 LDR R0,[R0, #+0] \ 00000160 000050E3 CMP R0,#+0 \ 00000164 0300000A BEQ ??main_2 \ 00000168 ........ LDR R0,??DataTable307 ;; pngFont \ 0000016C 000090E5 LDR R0,[R0, #+0] \ 00000170 640080E2 ADD R0,R0,#+100 \ 00000174 000000EA B ??main_3 7538 else clfont=2; \ ??main_2: \ 00000178 0200A0E3 MOV R0,#+2 \ ??main_3: \ 0000017C DC0484E5 STR R0,[R4, #+1244] 7539 7540 if(!strlen(fontpath2) || !strlen(fontpath3)) clfont=100+FONT_SMALL; \ 00000180 0800A0E1 MOV R0,R8 \ 00000184 1B0000EF SWI +27 \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 0300000A BEQ ??main_4 \ 00000190 0900A0E1 MOV R0,R9 \ 00000194 1B0000EF SWI +27 \ 00000198 000050E3 CMP R0,#+0 \ 0000019C 0100001A BNE ??main_5 \ ??main_4: \ 000001A0 6F00A0E3 MOV R0,#+111 \ 000001A4 DC0484E5 STR R0,[R4, #+1244] 7541 if(!strlen(fontpath4)) { PNG_SOFTKEY=0; PNG_HEADER=0; } \ ??main_5: \ 000001A8 0A00A0E1 MOV R0,R10 \ 000001AC 1B0000EF SWI +27 \ 000001B0 000050E3 CMP R0,#+0 \ 000001B4 0300001A BNE ??main_6 \ 000001B8 ........ LDR R0,??DataTable308 ;; PNG_SOFTKEY \ 000001BC 006080E5 STR R6,[R0, #+0] \ 000001C0 ........ LDR R0,??DataTable309 ;; PNG_HEADER \ 000001C4 006080E5 STR R6,[R0, #+0] 7542 7543 away_timer(); \ ??main_6: \ 000001C8 ........ BL away_timer 7544 #ifdef NEWSGOLD 7545 SetIconBarHandler(); \ 000001CC ........ LDR R0,??DataTable310 ;; addIconBar \ 000001D0 D00084E5 STR R0,[R4, #+208] 7546 #endif 7547 if(fonto==1) \ 000001D4 ........ LDR R0,??DataTable311 ;; fonto \ 000001D8 000090E5 LDR R0,[R0, #+0] \ 000001DC 010050E3 CMP R0,#+1 \ 000001E0 0B00001A BNE ??main_7 7548 { 7549 char *heght=malloc(64); \ 000001E4 4000A0E3 MOV R0,#+64 \ 000001E8 140000EF SWI +20 \ 000001EC 0060A0E1 MOV R6,R0 7550 sprintf(heght, "%s2240.png", fontpath); \ 000001F0 0720A0E1 MOV R2,R7 \ 000001F4 A31F85E2 ADD R1,R5,#+652 \ 000001F8 160000EF SWI +22 7551 paused_height=GetImgHeight((int)heght); \ 000001FC 0600A0E1 MOV R0,R6 \ 00000200 210000EF SWI +33 \ 00000204 8C0284E5 STR R0,[R4, #+652] 7552 mfree(heght); \ 00000208 0600A0E1 MOV R0,R6 \ 0000020C 150000EF SWI +21 \ 00000210 010000EA B ??main_8 7553 } 7554 else 7555 paused_height=fonto-100; \ ??main_7: \ 00000214 640040E2 SUB R0,R0,#+100 \ 00000218 8C0284E5 STR R0,[R4, #+652] 7556 7557 GBS_StartTimerProc(&ping_tmr, 12000, Pinger2); \ ??main_8: \ 0000021C ........ LDR R2,??DataTable312 ;; Pinger2 \ 00000220 E010A0E3 MOV R1,#+224 \ 00000224 B81D81E3 ORR R1,R1,#0x2E00 \ 00000228 4800A0E3 MOV R0,#+72 \ 0000022C 640D80E3 ORR R0,R0,#0x1900 \ 00000230 040080E0 ADD R0,R0,R4 \ 00000234 4D0000EF SWI +77 7558 upTime(); \ 00000238 ........ BL upTime 7559 #ifdef NEWSGOLD 7560 //ScreenSaverTimer(); 7561 initTags(); \ 0000023C ........ _BLF initTags,??initTags??rA 7562 #endif 7563 7564 #ifndef DEBUG 7565 AutoChangeStatus_timer(); \ 00000240 ........ BL AutoChangeStatus_timer 7566 #endif 7567 init_time_zone(); \ 00000244 ........ BL init_time_zone 7568 AddKeybMsgHook((void *)my_keyhook); \ 00000248 ........ LDR R0,??DataTable313 ;; my_keyhook \ 0000024C 2B0100EF SWI +299 7569 return 0; \ ??main_0: \ 00000250 0000A0E3 MOV R0,#+0 \ 00000254 2CD08DE2 ADD SP,SP,#+44 \ 00000258 F087BDE8 POP {R4-R10,PC} ;; return 7570 } 7571 7572 //=========================================================== 7573 // Edit chat 7574 //=========================================================== 7575 \ In segment CODE, align 4, keep-with-next 7576 void edchat_locret(void){} \ edchat_locret: \ 00000000 1EFF2FE1 BX LR ;; return 7577 \ In segment CODE, align 4, keep-with-next 7578 char *ExtractAnswer(WSHDR *ws) 7579 { \ ExtractAnswer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 7580 S_SMILES *t; 7581 int c; 7582 int len=0; 7583 int scur; 7584 char *msg=NULL; 7585 unsigned short *wsbody=ws->wsbody; \ 00000004 005090E5 LDR R5,[R0, #+0] \ 00000008 0040A0E3 MOV R4,#+0 7586 int wslen=wsbody[0]; \ 0000000C B060D5E1 LDRH R6,[R5, #+0] \ 00000010 0070A0E3 MOV R7,#+0 7587 if (wslen) \ 00000014 000056E3 CMP R6,#+0 \ 00000018 3C00000A BEQ ??ExtractAnswer_0 7588 { 7589 for (int i=0; i=0xE100) 7593 { 7594 t=FindSmileByUni(c); 7595 if (t) 7596 { 7597 if (t->lines) 7598 { 7599 len+=strlen(t->lines->text); 7600 } 7601 } 7602 else len++; 7603 } 7604 else len++; 7605 } 7606 7607 msg=malloc(len+1); \ ??ExtractAnswer_2: \ 00000024 010084E2 ADD R0,R4,#+1 \ 00000028 140000EF SWI +20 \ 0000002C 0070A0E1 MOV R7,R0 7608 scur=0; \ 00000030 0090A0E3 MOV R9,#+0 7609 for (int wcur=0; wcur=0xE100) 7614 { 7615 t=FindSmileByUni(c); 7616 if (t) 7617 { 7618 int w; 7619 char *s; 7620 if (t->lines) 7621 { 7622 s=t->lines->text; 7623 while ((w=*s++) && scurnext)) \ FindNextActiveContact: \ ??FindNextActiveContact_0: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0300000A BEQ ??FindNextActiveContact_1 7650 { 7651 if (t->isactive) return t; \ 0000000C A01090E5 LDR R1,[R0, #+160] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 F9FFFF0A BEQ ??FindNextActiveContact_0 \ 00000018 1EFF2FE1 BX LR 7652 } 7653 t=(CLIST *)(&cltop); \ ??FindNextActiveContact_1: \ 0000001C ........ LDR R0,??DataTable315 ;; i_rc + 1148 \ 00000020 020000EA B ??FindNextActiveContact_2 7654 while(t=(CLIST *)(t->next)) 7655 { 7656 if (t->isactive) return t; \ ??FindNextActiveContact_3: \ 00000024 A01090E5 LDR R1,[R0, #+160] \ 00000028 000051E3 CMP R1,#+0 \ 0000002C 1EFF2F11 BXNE LR 7657 } \ ??FindNextActiveContact_2: \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 F9FFFF1A BNE ??FindNextActiveContact_3 7658 return NULL; \ 0000003C 1EFF2FE1 BX LR ;; return 7659 } 7660 \ In segment CODE, align 4, keep-with-next 7661 CLIST *FindPrevActiveContact(CLIST *t) 7662 { 7663 CLIST *cl; 7664 CLIST *cl_active=NULL; 7665 cl=(CLIST *)(&cltop); \ FindPrevActiveContact: \ 00000000 ........ LDR R2,??DataTable315 ;; i_rc + 1148 \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 020000EA B ??FindPrevActiveContact_0 7666 7667 7668 while(cl=cl->next) 7669 { 7670 if (cl==t) 7671 { 7672 if (cl_active==NULL) break; 7673 else return (cl_active); 7674 } 7675 else 7676 { 7677 if (cl->isactive) cl_active=cl; \ ??FindPrevActiveContact_1: \ 0000000C A03092E5 LDR R3,[R2, #+160] \ 00000010 000053E3 CMP R3,#+0 \ 00000014 0210A011 MOVNE R1,R2 7678 } \ ??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 7679 } 7680 while(t) \ ??FindPrevActiveContact_2: \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 FBFFFF0A BEQ ??FindPrevActiveContact_3 7681 { 7682 if (t->isactive) cl_active=t; \ 00000044 A02090E5 LDR R2,[R0, #+160] \ 00000048 000052E3 CMP R2,#+0 \ 0000004C 0010A011 MOVNE R1,R0 7683 t=t->next; \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 F8FFFFEA B ??FindPrevActiveContact_2 7684 } 7685 return cl_active; 7686 } 7687 7688 \ In segment CODE, align 4, keep-with-next 7689 void ed_options_handler(USR_MENU_ITEM *item) 7690 { \ ed_options_handler: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 7691 EDCHAT_STRUCT *ed_struct=item->user_pointer; 7692 CLIST *t; 7693 int i=item->cur_item; 7694 if (item->type==0) \ 00000004 ........ LDR R5,??DataTable316 ;; 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 7695 { 7696 if(IsMultiBuffer) \ 00000024 ........ LDR R3,??DataTable318 ;; IsMultiBuffer \ 00000028 541495E5 LDR R1,[R5, #+1108] \ 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 7697 { 7698 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 7699 { 7700 case 0: 7701 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 7702 ascii2ws(item->ws,"Cмайлы"); \ 00000080 0C009705 LDREQ R0,[R7, #+12] \ 00000084 0810A001 MOVEQ R1,R8 \ 00000088 180000EA B ??ed_options_handler_8 7703 else 7704 ascii2ws(item->ws,"В буфер"); 7705 break; 7706 case 1: 7707 ascii2ws(item->ws,"Из буфера"); \ ??ed_options_handler_4: \ 0000008C 101088E2 ADD R1,R8,#+16 \ 00000090 160000EA B ??ed_options_handler_8 7708 break; 7709 case 2: 7710 ascii2ws(item->ws,"Команда"); \ ??ed_options_handler_5: \ 00000094 1C1088E2 ADD R1,R8,#+28 \ 00000098 140000EA B ??ed_options_handler_8 7711 break; 7712 case 3: 7713 ascii2ws(item->ws,"Очистить буфер"); \ ??ed_options_handler_6: \ 0000009C 241088E2 ADD R1,R8,#+36 \ 000000A0 120000EA B ??ed_options_handler_8 7714 break; 7715 default: 7716 i-=4; \ ??ed_options_handler_7: \ 000000A4 046046E2 SUB R6,R6,#+4 7717 if (iloaded_templates) ascii2ws(item->ws,templates_lines[i]); \ 000000A8 0D0000EA B ??ed_options_handler_9 7718 break; 7719 } 7720 } 7721 else 7722 { 7723 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 7724 { 7725 case 0: 7726 ascii2ws(item->ws,LG_MNUEDNEXTACT); \ ??ed_options_handler_10: \ 000000C8 341088E2 ADD R1,R8,#+52 \ 000000CC 070000EA B ??ed_options_handler_8 7727 break; 7728 case 1: 7729 ascii2ws(item->ws,LG_MNUEDPREVACT); \ ??ed_options_handler_11: \ 000000D0 441088E2 ADD R1,R8,#+68 \ 000000D4 050000EA B ??ed_options_handler_8 7730 break; 7731 case 2: 7732 ascii2ws(item->ws,"Команды"); \ ??ed_options_handler_12: \ 000000D8 541088E2 ADD R1,R8,#+84 \ 000000DC 030000EA B ??ed_options_handler_8 7733 break; 7734 default: 7735 i-=3; \ ??ed_options_handler_13: \ 000000E0 036046E2 SUB R6,R6,#+3 7736 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 7737 break; 7738 } 7739 } 7740 } 7741 7742 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 7743 { 7744 if(IsMultiBuffer) \ 00000100 ........ LDR R3,??DataTable318 ;; IsMultiBuffer \ 00000104 541495E5 LDR R1,[R5, #+1108] \ 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 7745 { 7746 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 7747 { 7748 case 0: 7749 { 7750 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 7751 CreateSmileSelectGUI(ed_struct); \ 00000150 0400A0E1 MOV R0,R4 \ 00000154 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA \ 00000158 340000EA B ??ed_options_handler_22 7752 else 7753 { 7754 int ed; 7755 EDITCONTROL ec; 7756 EDITCONTROL ec_hdr; 7757 7758 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 7759 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 7760 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 7761 7762 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 00000188 900295E5 LDR R0,[R5, #+656] \ 0000018C 230100EF SWI +291 \ 00000190 012080E2 ADD R2,R0,#+1 \ 00000194 900295E5 LDR R0,[R5, #+656] \ 00000198 3E10A0E3 MOV R1,#+62 \ 0000019C 1D0000EF SWI +29 7763 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 000001A0 900295E5 LDR R0,[R5, #+656] \ 000001A4 230100EF SWI +291 \ 000001A8 012080E2 ADD R2,R0,#+1 \ 000001AC 900295E5 LDR R0,[R5, #+656] \ 000001B0 2010A0E3 MOV R1,#+32 \ 000001B4 1D0000EF SWI +29 7764 wstrcat(wsBuffer,ec_hdr.pWS); \ 000001B8 28109DE5 LDR R1,[SP, #+40] \ 000001BC 900295E5 LDR R0,[R5, #+656] \ 000001C0 210100EF SWI +289 7765 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 000001C4 900295E5 LDR R0,[R5, #+656] \ 000001C8 230100EF SWI +291 \ 000001CC 012080E2 ADD R2,R0,#+1 \ 000001D0 900295E5 LDR R0,[R5, #+656] \ 000001D4 0A10A0E3 MOV R1,#+10 \ 000001D8 1D0000EF SWI +29 7766 7767 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 000001DC 900295E5 LDR R0,[R5, #+656] \ 000001E0 230100EF SWI +291 \ 000001E4 012080E2 ADD R2,R0,#+1 \ 000001E8 900295E5 LDR R0,[R5, #+656] \ 000001EC 3E10A0E3 MOV R1,#+62 \ 000001F0 1D0000EF SWI +29 7768 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 000001F4 900295E5 LDR R0,[R5, #+656] \ 000001F8 230100EF SWI +291 \ 000001FC 012080E2 ADD R2,R0,#+1 \ 00000200 900295E5 LDR R0,[R5, #+656] \ 00000204 2010A0E3 MOV R1,#+32 \ 00000208 1D0000EF SWI +29 7769 wstrcat(wsBuffer,ec.pWS); \ 0000020C 54109DE5 LDR R1,[SP, #+84] \ 00000210 900295E5 LDR R0,[R5, #+656] \ 00000214 210100EF SWI +289 7770 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 00000218 900295E5 LDR R0,[R5, #+656] \ 0000021C 230100EF SWI +291 \ 00000220 012080E2 ADD R2,R0,#+1 \ 00000224 900295E5 LDR R0,[R5, #+656] \ 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} 7771 } 7772 } 7773 break; 7774 case 1: 7775 { 7776 EDITCONTROL ec; 7777 WSHDR *ws; 7778 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 7779 ws=AllocWS(ec.pWS->wsbody[0]+wsBuffer->wsbody[0]+1); \ 00000244 28009DE5 LDR R0,[SP, #+40] \ 00000248 901295E5 LDR R1,[R5, #+656] \ 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 7780 wstrcpy(ws,ec.pWS); \ 00000268 28109DE5 LDR R1,[SP, #+40] \ 0000026C 0060A0E1 MOV R6,R0 \ 00000270 1F0100EF SWI +287 7781 wstrcat(ws,wsBuffer); \ 00000274 901295E5 LDR R1,[R5, #+656] \ 00000278 0600A0E1 MOV R0,R6 \ 0000027C 210100EF SWI +289 7782 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 7783 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 7784 } 7785 break; 7786 case 2: 7787 DispCmdMenu(ed_struct); \ ??ed_options_handler_18: \ 000002A8 0400A0E1 MOV R0,R4 \ 000002AC ........ BL DispCmdMenu \ 000002B0 DEFFFFEA B ??ed_options_handler_22 7788 break; 7789 case 3: 7790 CutWSTR(wsBuffer,0); \ ??ed_options_handler_19: \ 000002B4 900295E5 LDR R0,[R5, #+656] \ 000002B8 0010A0E3 MOV R1,#+0 \ 000002BC 260100EF SWI +294 \ 000002C0 DAFFFFEA B ??ed_options_handler_22 7791 break; 7792 default: 7793 i-=4; \ ??ed_options_handler_20: \ 000002C4 046046E2 SUB R6,R6,#+4 7794 if (iloaded_templates) \ 000002C8 020056E1 CMP R6,R2 \ 000002CC 760000AA BGE ??ed_options_handler_14 7795 { 7796 EDITCONTROL ec; 7797 WSHDR *ed_ws; 7798 int c; 7799 char *p=templates_lines[i]; \ 000002D0 065191E7 LDR R5,[R1, +R6, LSL #+2] 7800 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 7801 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 7802 wstrcpy(ed_ws,ec.pWS); \ 000002FC 28109DE5 LDR R1,[SP, #+40] \ 00000300 0060A0E1 MOV R6,R0 \ 00000304 1F0100EF SWI +287 7803 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 7804 { 7805 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 7806 while(c=*p++) 7807 { 7808 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 7809 } \ ??ed_options_handler_24: \ 00000344 ........ LDRB R0,[R5], #+1 \ 00000348 000050E3 CMP R0,#+0 \ 0000034C F6FFFF1A BNE ??ed_options_handler_25 7810 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 7811 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 7812 } 7813 else 7814 { 7815 while(c=*p++) 7816 { 7817 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 7818 } \ ??ed_options_handler_23: \ 00000380 ........ LDRB R0,[R5], #+1 \ 00000384 000050E3 CMP R0,#+0 \ 00000388 F8FFFF1A BNE ??ed_options_handler_28 7819 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 0000038C 400000EA B ??ed_options_handler_29 7820 } 7821 FreeWS(ed_ws); 7822 } 7823 break; 7824 } 7825 } 7826 else 7827 { 7828 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 7829 { 7830 case 0: 7831 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 7832 if (t && t!=ed_struct->ed_contact) \ 000003BC 07005411 CMPNE R4,R7 \ 000003C0 3900000A BEQ ??ed_options_handler_14 7833 { 7834 GeneralFunc_flag1(edchat_id,1); \ 000003C4 840495E5 LDR R0,[R5, #+1156] \ 000003C8 0110A0E3 MOV R1,#+1 \ 000003CC 3D0100EF SWI +317 7835 CreateEditChat(t); \ 000003D0 0400A0E1 MOV R0,R4 \ 000003D4 ........ BL CreateEditChat \ 000003D8 94FFFFEA B ??ed_options_handler_22 7836 } 7837 break; 7838 case 1: 7839 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 7840 if (t && t!=ed_struct->ed_contact) 7841 { 7842 GeneralFunc_flag1(edchat_id,1); 7843 CreateEditChat(t); 7844 } 7845 break; 7846 case 2: 7847 DispCmdMenu(ed_struct); 7848 break; 7849 default: 7850 i-=3; \ ??ed_options_handler_32: \ 000003E8 036046E2 SUB R6,R6,#+3 7851 if (iloaded_templates) \ 000003EC 020056E1 CMP R6,R2 \ 000003F0 2D0000AA BGE ??ed_options_handler_14 7852 { 7853 EDITCONTROL ec; 7854 WSHDR *ed_ws; 7855 int c; 7856 char *p=templates_lines[i]; \ 000003F4 065191E7 LDR R5,[R1, +R6, LSL #+2] 7857 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 7858 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 7859 wstrcpy(ed_ws,ec.pWS); \ 00000420 28109DE5 LDR R1,[SP, #+40] \ 00000424 0060A0E1 MOV R6,R0 \ 00000428 1F0100EF SWI +287 7860 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 7861 { 7862 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 7863 while(c=*p++) 7864 { 7865 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 7866 } \ ??ed_options_handler_35: \ 00000468 ........ LDRB R0,[R5], #+1 \ 0000046C 000050E3 CMP R0,#+0 \ 00000470 F6FFFF1A BNE ??ed_options_handler_36 7867 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 00000474 B5FFFFEA B ??ed_options_handler_26 7868 EDIT_SetCursorPos(ed_struct->ed_chatgui,pos); 7869 } 7870 else 7871 { 7872 while(c=*p++) 7873 { 7874 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 7875 } \ ??ed_options_handler_34: \ 00000488 ........ LDRB R0,[R5], #+1 \ 0000048C 000050E3 CMP R0,#+0 \ 00000490 F8FFFF1A BNE ??ed_options_handler_37 7876 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 7877 } 7878 FreeWS(ed_ws); \ ??ed_options_handler_27: \ 000004A4 0600A0E1 MOV R0,R6 \ 000004A8 290100EF SWI +297 7879 } 7880 break; 7881 } 7882 } 7883 } 7884 } \ ??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 `?` 7885 \ In segment CODE, align 4, keep-with-next 7886 unsigned short * wstrstr(unsigned short *ws, char *str, int *wslen, int len) 7887 { \ 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 7888 char *s; 7889 unsigned short *w; 7890 int l; 7891 7892 while(*wslen >= len) 7893 { 7894 s = str; 7895 w = ws; 7896 l = len; 7897 for(; (char16to8(*w) == *s) && l; w++, s++, l--); 7898 if(!l) return ws; 7899 ws++; 7900 (*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} 7901 } 7902 return 0; \ ??wstrstr_2: \ 00000074 0000A0E3 MOV R0,#+0 \ 00000078 F087BDE8 POP {R4-R10,PC} ;; return 7903 7904 } 7905 \ In segment CODE, align 4, keep-with-next 7906 int IsUrl(WSHDR *ws, int pos, char *link) 7907 { \ IsUrl: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0150A0E1 MOV R5,R1 7908 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 7909 7910 int len = wstrlen(ws); 7911 unsigned short *str = ws->wsbody+1, *tmp, *begin; 7912 tmp = str; 7913 7914 begin = str = wstrstr(str, "http://", &len, 7); \ 0000000C ........ LDR R7,??DataTable320 ;; `?` \ 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 7915 7916 while(str && (begin-tmp <= pos)) 7917 { 7918 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 7919 if(str-tmp >= pos-2) 7920 { 7921 for(;begin < str; begin++, link++) 7922 *link = char16to8(*begin); 7923 link[str-begin] = 0; 7924 return 1; 7925 } 7926 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 7927 } 7928 7929 len = wstrlen(ws); \ ??IsUrl_2: \ 00000080 04009DE5 LDR R0,[SP, #+4] \ 00000084 230100EF SWI +291 \ 00000088 00008DE5 STR R0,[SP, #+0] 7930 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} 7931 while(str && (begin-tmp <= pos)) 7932 { 7933 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 7934 if(str-tmp >= pos-2) 7935 { 7936 for(;begin < str; begin++, link++) 7937 *link = char16to8(*begin); 7938 link[str-begin] = 0; 7939 return 1; 7940 } 7941 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 7942 } 7943 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 7944 } 7945 7946 #define UTF16_DIS_UNDERLINE (0xE002) 7947 #define UTF16_ENA_UNDERLINE (0xE001) 7948 \ In segment CODE, align 4, keep-with-next 7949 void ParseAnswer(WSHDR *ws, const char *s) 7950 { \ ParseAnswer: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0040A0E1 MOV R4,R0 7951 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 7952 S_SMILES *t; 7953 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 7954 STXT_SMILES *st; 7955 unsigned int wchar; 7956 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 7957 CutWSTR(ws,0); \ 00000034 0010A0E3 MOV R1,#+0 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 260100EF SWI +294 \ 00000040 160000EA B ??ParseAnswer_1 7958 int i; 7959 while(wchar=*s) 7960 { 7961 if(s==strstr(s, "http://") || s == strstr(s, "www.")) 7962 { 7963 wsAppendChar(ws,UTF16_ENA_UNDERLINE); 7964 while(*s && strchr(valid, *s)) 7965 { 7966 wchar=char8to16(*s); \ ??ParseAnswer_2: \ 00000044 ........ LDRB R0,[R5], #+1 \ 00000048 ........ _BLF char8to16,??char8to16??rA 7967 wsAppendChar(ws,wchar); \ 0000004C 0010A0E1 MOV R1,R0 \ ??ParseAnswer_3: \ 00000050 0400A0E1 MOV R0,R4 \ 00000054 1C0000EF SWI +28 7968 s++; 7969 } \ 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 7970 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 7971 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 7972 continue; \ ??ParseAnswer_1: \ 000000A0 0070D5E5 LDRB R7,[R5, #+0] \ 000000A4 000057E3 CMP R7,#+0 \ 000000A8 4F00000A BEQ ??ParseAnswer_5 \ 000000AC ........ LDR R9,??DataTable320 ;; `?` \ 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 7973 } 7974 t=t_root; \ ??ParseAnswer_7: \ 000000E4 0690A0E1 MOV R9,R6 \ 000000E8 230000EA B ??ParseAnswer_8 7975 while(t) 7976 { 7977 st=t->lines; 7978 while(st) 7979 { 7980 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 7981 { 7982 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 7983 } 7984 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] 7985 } \ ??ParseAnswer_13: \ 00000170 00005AE3 CMP R10,#+0 \ 00000174 DCFFFF1A BNE ??ParseAnswer_9 7986 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 7987 } 7988 L1: 7989 if (t) 7990 { 7991 wchar=t->uni_smile; 7992 s+=strlen(st->text); 7993 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); 7994 } 7995 else 7996 { 7997 wchar=char8to16(wchar); \ 00000188 0700A0E1 MOV R0,R7 \ 0000018C ........ _BLF char8to16,??char8to16??rA \ 00000190 0070A0E1 MOV R7,R0 7998 s++; 7999 ulb>>=8; 8000 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 8001 } \ ??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 8002 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 8003 } 8004 i=ws->wsbody[0]; \ ??ParseAnswer_5: \ 000001EC 000094E5 LDR R0,[R4, #+0] \ 000001F0 B010D0E1 LDRH R1,[R0, #+0] \ 000001F4 000000EA B ??ParseAnswer_15 8005 while(i>1) 8006 { 8007 if (ws->wsbody[i--]!=13) break; 8008 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 8009 } 8010 } \ 0000021C F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??ParseAnswer_0: \ 00000220 ........ DC32 s_top 8011 \ In segment CODE, align 4, keep-with-next 8012 void SaveAnswer(CLIST *cl, WSHDR *ws) 8013 { \ SaveAnswer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0100A0E1 MOV R0,R1 8014 char *p=ExtractAnswer(ws); \ 0000000C ........ BL ExtractAnswer \ 00000010 0050A0E1 MOV R5,R0 8015 mfree(cl->answer); \ 00000014 980094E5 LDR R0,[R4, #+152] \ 00000018 150000EF SWI +21 8016 cl->answer=p; \ 0000001C 985084E5 STR R5,[R4, #+152] 8017 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 8018 8019 //links applicator 8020 8021 \ In segment CODE, align 4, keep-with-next 8022 int GetTempName(void) 8023 { \ GetTempName: \ 00000000 00402DE9 PUSH {LR} \ 00000004 10D04DE2 SUB SP,SP,#+16 8024 static const int DMonth[]={0,31,59,90,120,151,181,212,243,273,304,334,365}; 8025 unsigned long iday; 8026 TTime tt; 8027 TDate dd; 8028 GetDateTime(&dd,&tt); \ 00000008 08108DE2 ADD R1,SP,#+8 \ 0000000C 0D00A0E1 MOV R0,SP \ 00000010 B40000EF SWI +180 8029 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 8030 iday=365*dd.year+DMonth[dd.month-1]+(dd.day - 1); 8031 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] 8032 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 8033 iday++; \ ??GetTempName_1: \ 00000078 011081E2 ADD R1,R1,#+1 8034 iday=(tt.sec+60*(tt.min+60*(tt.hour+24* iday))); 8035 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 8036 } \ 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 8037 8038 \ In segment CODE, align 4, keep-with-next 8039 void recon() 8040 { 8041 SUBPROC((void*)end_socket); \ recon: \ 00000000 ........ LDR R0,??DataTable321 ;; end_socket \ 00000004 10402DE9 PUSH {R4,LR} 8042 GBS_DelTimer(&reconnect_tmr); \ 00000008 ........ LDR R4,??DataTable332 ;; i_rc \ 0000000C 710100EF SWI +369 \ 00000010 B000A0E3 MOV R0,#+176 \ 00000014 780D80E3 ORR R0,R0,#0x1E00 \ 00000018 040080E0 ADD R0,R0,R4 \ 0000001C 8C0100EF SWI +396 8043 DNR_TRIES=3; \ 00000020 0300A0E3 MOV R0,#+3 \ 00000024 9C0484E5 STR R0,[R4, #+1180] 8044 SUBPROC((void *)create_connect); \ 00000028 ........ LDR R0,??DataTable323 ;; create_connect \ 0000002C 710100EF SWI +369 8045 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 8046 \ In segment CODE, align 4, keep-with-next 8047 int edchat_onkey(GUI *data, GUI_MSG *msg) 8048 { \ edchat_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 8049 //-1 - do redraw 8050 GBS_DelTimer(&tmr_illumination); \ 00000004 ........ LDR R6,??DataTable332 ;; i_rc \ 00000008 4CDF4DE2 SUB SP,SP,#+304 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0170A0E1 MOV R7,R1 \ 00000014 9000A0E3 MOV R0,#+144 \ 00000018 780D80E3 ORR R0,R0,#0x1E00 \ 0000001C 060080E0 ADD R0,R0,R6 \ 00000020 8C0100EF SWI +396 8051 CLIST *t; 8052 TPKT *p; 8053 EDITCONTROL ec; 8054 int len, f;//2026rev 8055 unsigned err;//2026rev 8056 char *s; 8057 int l=msg->gbsmsg->submess; \ 00000024 040097E5 LDR R0,[R7, #+4] \ 00000028 088090E5 LDR R8,[R0, #+8] 8058 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 DF0100EF SWI +479 \ 00000034 0050A0E1 MOV R5,R0 8059 char fn[256]; 8060 8061 if (msg->keys==0xFFF) \ 00000038 F200D7E1 LDRSH R0,[R7, #+2] \ 0000003C FF10A0E3 MOV R1,#+255 \ 00000040 F01E81E3 ORR R1,R1,#0xF00 \ 00000044 010050E1 CMP R0,R1 \ 00000048 0200001A BNE ??edchat_onkey_0 8062 { 8063 void ec_menu(EDCHAT_STRUCT *); 8064 ec_menu(ed_struct); \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 ........ BL ec_menu 8065 return(-1); \ ??edchat_onkey_1: \ 00000054 8B0000EA B ??edchat_onkey_2 8066 } 8067 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 880000EA B ??edchat_onkey_4 \ ??edchat_onkey_3: \ 00000068 040097E5 LDR R0,[R7, #+4] \ 0000006C 9510A0E3 MOV R1,#+149 \ 00000070 040090E5 LDR R0,[R0, #+4] \ 00000074 401F81E3 ORR R1,R1,#0x100 \ 00000078 010050E1 CMP R0,R1 \ 0000007C 0C00001A BNE ??edchat_onkey_5 8068 8069 void AddSmile(GUI *data); 8070 if (msg->gbsmsg->msg==LONG_PRESS) 8071 { 8072 if (l==RIGHT_BUTTON) \ 00000080 3E0058E3 CMP R8,#+62 \ 00000084 3A00001A BNE ??edchat_onkey_6 8073 { 8074 if(LongRightAction==2 && EDIT_GetFocus(data)==ed_struct->ed_answer) \ 00000088 54059FE5 LDR R0,??edchat_onkey_7 ;; LongRightAction \ 0000008C 000090E5 LDR R0,[R0, #+0] \ 00000090 020050E3 CMP R0,#+2 \ 00000094 1A00001A BNE ??edchat_onkey_8 \ 00000098 0400A0E1 MOV R0,R4 \ 0000009C 820100EF SWI +386 \ 000000A0 081095E5 LDR R1,[R5, #+8] \ 000000A4 010050E1 CMP R0,R1 \ 000000A8 0100001A BNE ??edchat_onkey_5 8075 CreateSmileSelectGUI(ed_struct); \ 000000AC 0500A0E1 MOV R0,R5 \ 000000B0 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 8076 else 8077 if(LongRightAction==1) 8078 { 8079 if (EDIT_GetFocus(data)==ed_struct->ed_answer) 8080 { 8081 ExtractEditControl(data,ed_struct->ed_answer,&ec); 8082 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) 8083 { 8084 t=FindNextActiveContact(ed_struct->ed_contact); 8085 if (t && t!=ed_struct->ed_contact) 8086 { 8087 CreateEditChat(t); 8088 return(1); 8089 } 8090 } 8091 } 8092 } 8093 } 8094 if (l==LEFT_BUTTON && LongLeftAction) 8095 { 8096 if (EDIT_GetFocus(data)==ed_struct->ed_answer) 8097 { 8098 ExtractEditControl(data,ed_struct->ed_answer,&ec); 8099 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) 8100 { 8101 t=FindPrevActiveContact(ed_struct->ed_contact); 8102 if (t && t!=ed_struct->ed_contact) 8103 { 8104 CreateEditChat(t); 8105 return(1); 8106 } 8107 } 8108 } 8109 } 8110 //#ifdef ELKA 8111 if (l==VOL_DOWN_BUTTON) 8112 { 8113 #ifdef kluchnik 8114 if((EDIT_GetFocus(data)==ed_struct->ed_answer)) 8115 #else 8116 if(LongVolDownAction) 8117 #endif 8118 { 8119 WSHDR *ws; 8120 ExtractEditControl(data,ed_struct->ed_answer,&ec); 8121 if(wstrlen(ec.pWS)>0) 8122 { 8123 ws=AllocWS(1); 8124 CutWSTR(ws,0); 8125 8126 EDIT_SetFocus(data,ed_struct->ed_answer); 8127 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 8128 8129 FreeWS(ws); 8130 RefreshGUI(); 8131 } 8132 } 8133 else 8134 { 8135 int pos; 8136 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 8137 { 8138 EDIT_SetFocus(data, pos); 8139 EDIT_SetCursorPos(data, 1); 8140 } 8141 return (-1); 8142 } 8143 8144 } 8145 8146 if (l==VOL_UP_BUTTON) 8147 { 8148 if(LongVolUpAction) 8149 { 8150 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); 8151 ascii2ws(ws,last_msg_buffer); 8152 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); 8153 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 8154 FreeWS(ws); 8155 RefreshGUI(); 8156 } 8157 else 8158 { 8159 int pos; 8160 if ((pos=EDIT_GetFocus(data)-2)>=2) 8161 { 8162 EDIT_SetFocus(data, pos); 8163 EDIT_SetCursorPos(data, 1); 8164 } 8165 return (-1); 8166 } 8167 } 8168 //#endif 8169 #ifdef kluchnik 8170 if(l==LEFT_BUTTON && EDIT_GetFocus(ed_struct->ed_chatgui)!=ed_struct->ed_answer && EDIT_GetCursorPos(data)==1) 8171 { 8172 int ed; 8173 EDITCONTROL ec; 8174 ed=EDIT_GetFocus(ed_struct->ed_chatgui); 8175 ExtractEditControl(ed_struct->ed_chatgui,ed,&ec); 8176 8177 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); 8178 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); 8179 wstrcat(wsBuffer,ec.pWS); 8180 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); 8181 8182 ShowMSG(1,(int)"Message add to buffer"); 8183 } 8184 #endif 8185 } 8186 8187 if (msg->gbsmsg->msg==KEY_DOWN) \ ??edchat_onkey_5: \ 000000B4 040097E5 LDR R0,[R7, #+4] \ 000000B8 9310A0E3 MOV R1,#+147 \ 000000BC 040090E5 LDR R0,[R0, #+4] \ 000000C0 401F81E3 ORR R1,R1,#0x100 \ 000000C4 010050E1 CMP R0,R1 \ 000000C8 0A00001A BNE ??edchat_onkey_9 8188 { 8189 if ((l>='0')&&(l<='9')) \ 000000CC 300058E3 CMP R8,#+48 \ 000000D0 890000BA BLT ??edchat_onkey_10 \ 000000D4 3A0058E3 CMP R8,#+58 \ 000000D8 060000AA BGE ??edchat_onkey_9 8190 { 8191 if (EDIT_GetFocus(data)!=ed_struct->ed_answer) \ 000000DC 0400A0E1 MOV R0,R4 \ 000000E0 820100EF SWI +386 \ 000000E4 081095E5 LDR R1,[R5, #+8] \ 000000E8 010050E1 CMP R0,R1 \ 000000EC 0100000A BEQ ??edchat_onkey_9 8192 EDIT_SetFocus(data,ed_struct->ed_answer); \ 000000F0 0400A0E1 MOV R0,R4 \ 000000F4 9B0100EF SWI +411 8193 } 8194 8195 if (l==GREEN_BUTTON) 8196 { 8197 if (connect_state==3) 8198 { 8199 if ((t=ed_struct->ed_contact)) 8200 { 8201 ExtractEditControl(data,ed_struct->ed_answer,&ec); 8202 SaveAnswer(t,ec.pWS); 8203 if ((s=t->answer)) 8204 { 8205 if ((len=strlen(s))) 8206 { 8207 msg_away_timer=0; 8208 away_m=0; 8209 t->automsgcount=0; 8210 if(change_back_status) 8211 { 8212 CurrentStatus=status_rem; 8213 set_my_status(); 8214 change_back_status=0; 8215 } 8216 if(SHOW_ACTIVE) 8217 t->isactive=ACTIVE_TIME; 8218 p=malloc(sizeof(PKT)+len+1); 8219 p->pkt.uin=t->uin; 8220 p->pkt.type=T_SENDMSG; 8221 p->pkt.data_len=len; 8222 strcpy(p->data,s); 8223 //#ifdef ELKA 8224 strcpy(last_msg_buffer, s); 8225 //#endif 8226 AddStringToLog(t,0x01,p->data,I_str,(++SENDMSGCOUNT)&0x7FFF,1); //Номер сообщения 8227 SUBPROC((void *)SendAnswer,0,p); 8228 main2_count++; 8229 mfree(t->answer); 8230 t->answer=NULL; 8231 // request_remake_edchat=1; 8232 EDIT_SetFocus(data,ed_struct->ed_answer); 8233 CutWSTR(ews,0); 8234 EDIT_SetTextToFocused(data,ews); 8235 AddMsgToChat(data); 8236 RecountMenu(t,1); 8237 return(-1); 8238 } 8239 } 8240 } 8241 } 8242 } 8243 //================2026rev-begin 8244 if (l==ENTER_BUTTON) 8245 { 8246 if (!EDIT_IsMarkModeActive(data)) // ?????? ???? ?? ????????? 8247 { 8248 int pos, len; 8249 char *link; 8250 ExtractEditControl(ed_struct->ed_chatgui,EDIT_GetFocus(ed_struct->ed_chatgui),&ec); 8251 wstrcpy(ews,ec.pWS); 8252 pos = EDIT_GetCursorPos(data); 8253 len = wstrlen(ews); 8254 link = malloc(len+1); 8255 8256 if(IsUrl(ews, pos, link) && IsOpenBrowser) 8257 { 8258 snprintf(fn, 255, "%s\\tmp%u.url", TEMPLATES_PATH, GetTempName); 8259 if ((f=fopen(fn,A_WriteOnly+A_BIN+A_Create+A_Truncate,P_WRITE,&err))!=-1) 8260 { 8261 fwrite(f,link,strlen(link),&err); 8262 fclose(f,&err); 8263 str_2ws(ews,fn,256); 8264 ExecuteFile(ews,0,0); 8265 unlink(fn, &err); 8266 } 8267 mfree(link); 8268 return (-1); 8269 } 8270 else 8271 { 8272 int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 8273 8274 if(IsMultiBuffer) 8275 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+4); 8276 else 8277 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+3); 8278 8279 mfree(link); 8280 return (-1); 8281 } 8282 } 8283 } 8284 8285 //================ 2026rev-end =================// 8286 8287 if (l==VOL_UP_BUTTON) 8288 { 8289 int pos; 8290 8291 if ((pos=EDIT_GetFocus(data)-2)>=2) 8292 { 8293 EDIT_SetFocus(data, pos); 8294 EDIT_SetCursorPos(data, 1); 8295 } 8296 return (-1); 8297 } 8298 if (l==VOL_DOWN_BUTTON) 8299 { 8300 int pos; 8301 8302 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 8303 { 8304 EDIT_SetFocus(data, pos); 8305 EDIT_SetCursorPos(data, 1); 8306 } 8307 return (-1); 8308 } 8309 } 8310 return(0); //Do standart keys \ ??edchat_onkey_9: \ 000000F8 0000A0E3 MOV R0,#+0 \ 000000FC 4CDF8DE2 ADD SP,SP,#+304 \ 00000100 F08FBDE8 POP {R4-R11,PC} ;; return \ ??edchat_onkey_8: \ 00000104 010050E3 CMP R0,#+1 \ 00000108 E9FFFF1A BNE ??edchat_onkey_5 \ 0000010C 0400A0E1 MOV R0,R4 \ 00000110 820100EF SWI +386 \ 00000114 081095E5 LDR R1,[R5, #+8] \ 00000118 010050E1 CMP R0,R1 \ 0000011C E4FFFF1A BNE ??edchat_onkey_5 \ 00000120 04208DE2 ADD R2,SP,#+4 \ 00000124 0400A0E1 MOV R0,R4 \ 00000128 690100EF SWI +361 \ 0000012C 0400A0E1 MOV R0,R4 \ 00000130 D30100EF SWI +467 \ 00000134 2C109DE5 LDR R1,[SP, #+44] \ 00000138 010040E2 SUB R0,R0,#+1 \ 0000013C 001091E5 LDR R1,[R1, #+0] \ 00000140 B010D1E1 LDRH R1,[R1, #+0] \ 00000144 000051E1 CMP R1,R0 \ 00000148 D9FFFF1A BNE ??edchat_onkey_5 \ 0000014C 00A095E5 LDR R10,[R5, #+0] \ 00000150 0A00A0E1 MOV R0,R10 \ 00000154 ........ BL FindNextActiveContact \ 00000158 0090B0E1 MOVS R9,R0 \ 0000015C 0A005911 CMPNE R9,R10 \ 00000160 D3FFFF0A BEQ ??edchat_onkey_5 \ ??edchat_onkey_11: \ 00000164 0900A0E1 MOV R0,R9 \ 00000168 ........ BL CreateEditChat \ 0000016C 0100A0E3 MOV R0,#+1 \ 00000170 450000EA B ??edchat_onkey_4 \ ??edchat_onkey_6: \ 00000174 3D0058E3 CMP R8,#+61 \ 00000178 1A00001A BNE ??edchat_onkey_12 \ 0000017C 64049FE5 LDR R0,??edchat_onkey_7+0x4 ;; LongLeftAction \ 00000180 000090E5 LDR R0,[R0, #+0] \ 00000184 000050E3 CMP R0,#+0 \ 00000188 C9FFFF0A BEQ ??edchat_onkey_5 \ 0000018C 0400A0E1 MOV R0,R4 \ 00000190 820100EF SWI +386 \ 00000194 081095E5 LDR R1,[R5, #+8] \ 00000198 010050E1 CMP R0,R1 \ 0000019C C4FFFF1A BNE ??edchat_onkey_5 \ 000001A0 04208DE2 ADD R2,SP,#+4 \ 000001A4 0400A0E1 MOV R0,R4 \ 000001A8 690100EF SWI +361 \ 000001AC 0400A0E1 MOV R0,R4 \ 000001B0 D30100EF SWI +467 \ 000001B4 2C109DE5 LDR R1,[SP, #+44] \ 000001B8 010040E2 SUB R0,R0,#+1 \ 000001BC 001091E5 LDR R1,[R1, #+0] \ 000001C0 B010D1E1 LDRH R1,[R1, #+0] \ 000001C4 000051E1 CMP R1,R0 \ 000001C8 B9FFFF1A BNE ??edchat_onkey_5 \ 000001CC 00A095E5 LDR R10,[R5, #+0] \ 000001D0 0A00A0E1 MOV R0,R10 \ 000001D4 ........ BL FindPrevActiveContact \ 000001D8 0090B0E1 MOVS R9,R0 \ 000001DC 0A005911 CMPNE R9,R10 \ 000001E0 B3FFFF0A BEQ ??edchat_onkey_5 \ 000001E4 DEFFFFEA B ??edchat_onkey_11 \ ??edchat_onkey_12: \ 000001E8 0E0058E3 CMP R8,#+14 \ 000001EC 2800001A BNE ??edchat_onkey_13 \ 000001F0 F4039FE5 LDR R0,??edchat_onkey_7+0x8 ;; LongVolDownAction \ 000001F4 000090E5 LDR R0,[R0, #+0] \ 000001F8 000050E3 CMP R0,#+0 \ 000001FC 1600000A BEQ ??edchat_onkey_14 \ 00000200 081095E5 LDR R1,[R5, #+8] \ 00000204 04208DE2 ADD R2,SP,#+4 \ 00000208 0400A0E1 MOV R0,R4 \ 0000020C 690100EF SWI +361 \ 00000210 2C009DE5 LDR R0,[SP, #+44] \ 00000214 230100EF SWI +291 \ 00000218 010050E3 CMP R0,#+1 \ 0000021C A4FFFFBA BLT ??edchat_onkey_5 \ 00000220 0100A0E3 MOV R0,#+1 \ 00000224 250100EF SWI +293 \ 00000228 0090A0E1 MOV R9,R0 \ 0000022C 0010A0E3 MOV R1,#+0 \ 00000230 260100EF SWI +294 \ 00000234 081095E5 LDR R1,[R5, #+8] \ 00000238 0400A0E1 MOV R0,R4 \ ??edchat_onkey_15: \ 0000023C 9B0100EF SWI +411 \ 00000240 040095E5 LDR R0,[R5, #+4] \ 00000244 0910A0E1 MOV R1,R9 \ 00000248 810100EF SWI +385 \ 0000024C 0900A0E1 MOV R0,R9 \ 00000250 290100EF SWI +297 \ 00000254 960100EF SWI +406 \ 00000258 95FFFFEA B ??edchat_onkey_5 \ ??edchat_onkey_14: \ 0000025C 0400A0E1 MOV R0,R4 \ 00000260 820100EF SWI +386 \ 00000264 021080E2 ADD R1,R0,#+2 \ 00000268 080095E5 LDR R0,[R5, #+8] \ 0000026C 010050E1 CMP R0,R1 \ ??edchat_onkey_16: \ 00000270 040000BA BLT ??edchat_onkey_2 \ 00000274 0400A0E1 MOV R0,R4 \ 00000278 9B0100EF SWI +411 \ 0000027C 0110A0E3 MOV R1,#+1 \ 00000280 0400A0E1 MOV R0,R4 \ 00000284 D40100EF SWI +468 \ ??edchat_onkey_2: \ 00000288 0000E0E3 MVN R0,#+0 \ ??edchat_onkey_4: \ 0000028C 4CDF8DE2 ADD SP,SP,#+304 \ 00000290 F08FBDE8 POP {R4-R11,PC} \ ??edchat_onkey_13: \ 00000294 0D0058E3 CMP R8,#+13 \ 00000298 85FFFF1A BNE ??edchat_onkey_5 \ 0000029C 4C039FE5 LDR R0,??edchat_onkey_7+0xC ;; LongVolUpAction \ 000002A0 000090E5 LDR R0,[R0, #+0] \ 000002A4 000050E3 CMP R0,#+0 \ 000002A8 0E00000A BEQ ??edchat_onkey_17 \ 000002AC 4800A0E3 MOV R0,#+72 \ 000002B0 800E80E3 ORR R0,R0,#0x800 \ 000002B4 060080E0 ADD R0,R0,R6 \ 000002B8 1B0000EF SWI +27 \ 000002BC 010080E2 ADD R0,R0,#+1 \ 000002C0 250100EF SWI +293 \ 000002C4 0090A0E1 MOV R9,R0 \ 000002C8 4800A0E3 MOV R0,#+72 \ 000002CC 800E80E3 ORR R0,R0,#0x800 \ 000002D0 061080E0 ADD R1,R0,R6 \ 000002D4 0900A0E1 MOV R0,R9 \ 000002D8 ........ _BLF ascii2ws,??ascii2ws??rA \ 000002DC 081095E5 LDR R1,[R5, #+8] \ 000002E0 040095E5 LDR R0,[R5, #+4] \ 000002E4 D4FFFFEA B ??edchat_onkey_15 \ ??edchat_onkey_17: \ 000002E8 0400A0E1 MOV R0,R4 \ 000002EC 820100EF SWI +386 \ 000002F0 021040E2 SUB R1,R0,#+2 \ 000002F4 020051E3 CMP R1,#+2 \ 000002F8 DCFFFFEA B ??edchat_onkey_16 \ ??edchat_onkey_10: \ 000002FC 0B0058E3 CMP R8,#+11 \ 00000300 5A00001A BNE ??edchat_onkey_18 \ 00000304 5C0496E5 LDR R0,[R6, #+1116] \ 00000308 030050E3 CMP R0,#+3 \ 0000030C 79FFFF1A BNE ??edchat_onkey_9 \ 00000310 009095E5 LDR R9,[R5, #+0] \ 00000314 000059E3 CMP R9,#+0 \ 00000318 76FFFF0A BEQ ??edchat_onkey_9 \ 0000031C 081095E5 LDR R1,[R5, #+8] \ 00000320 04208DE2 ADD R2,SP,#+4 \ 00000324 0400A0E1 MOV R0,R4 \ 00000328 690100EF SWI +361 \ 0000032C 2C109DE5 LDR R1,[SP, #+44] \ 00000330 0900A0E1 MOV R0,R9 \ 00000334 ........ BL SaveAnswer \ 00000338 98A099E5 LDR R10,[R9, #+152] \ 0000033C 00005AE3 CMP R10,#+0 \ 00000340 6CFFFF0A BEQ ??edchat_onkey_9 \ 00000344 0A00A0E1 MOV R0,R10 \ 00000348 1B0000EF SWI +27 \ 0000034C 00B0B0E1 MOVS R11,R0 \ 00000350 68FFFF0A BEQ ??edchat_onkey_9 \ 00000354 0070A0E3 MOV R7,#+0 \ 00000358 807386E5 STR R7,[R6, #+896] \ 0000035C 847386E5 STR R7,[R6, #+900] \ 00000360 7C7089E5 STR R7,[R9, #+124] \ 00000364 8C0396E5 LDR R0,[R6, #+908] \ 00000368 000050E3 CMP R0,#+0 \ 0000036C 0300000A BEQ ??edchat_onkey_19 \ 00000370 880396E5 LDR R0,[R6, #+904] \ 00000374 740386E5 STR R0,[R6, #+884] \ 00000378 ........ BL set_my_status \ 0000037C 8C7386E5 STR R7,[R6, #+908] \ ??edchat_onkey_19: \ 00000380 ........ LDR R0,??DataTable325 ;; SHOW_ACTIVE \ 00000384 000090E5 LDR R0,[R0, #+0] \ 00000388 000050E3 CMP R0,#+0 \ 0000038C 5A0FA013 MOVNE R0,#+360 \ 00000390 A0008915 STRNE R0,[R9, #+160] \ 00000394 09008BE2 ADD R0,R11,#+9 \ 00000398 140000EF SWI +20 \ 0000039C 0080A0E1 MOV R8,R0 \ 000003A0 0C0099E5 LDR R0,[R9, #+12] \ 000003A4 0A10A0E1 MOV R1,R10 \ 000003A8 000088E5 STR R0,[R8, #+0] \ 000003AC 0200A0E3 MOV R0,#+2 \ 000003B0 B400C8E1 STRH R0,[R8, #+4] \ 000003B4 B6B0C8E1 STRH R11,[R8, #+6] \ 000003B8 080088E2 ADD R0,R8,#+8 \ 000003BC 1A0000EF SWI +26 \ 000003C0 0A10A0E1 MOV R1,R10 \ 000003C4 4800A0E3 MOV R0,#+72 \ 000003C8 800E80E3 ORR R0,R0,#0x800 \ 000003CC 060080E0 ADD R0,R0,R6 \ 000003D0 1A0000EF SWI +26 \ 000003D4 DC0296E5 LDR R0,[R6, #+732] \ 000003D8 ........ LDR R3,??DataTable360 ;; I_str \ 000003DC 010080E2 ADD R0,R0,#+1 \ 000003E0 DC0286E5 STR R0,[R6, #+732] \ 000003E4 0110A0E3 MOV R1,#+1 \ 000003E8 02002DE9 PUSH {R1} \ 000003EC 8008A0E1 LSL R0,R0,#+17 \ 000003F0 A008A0E1 LSR R0,R0,#+17 \ 000003F4 01002DE9 PUSH {R0} \ 000003F8 082088E2 ADD R2,R8,#+8 \ 000003FC 0900A0E1 MOV R0,R9 \ 00000400 ........ BL AddStringToLog \ 00000404 ........ LDR R0,??DataTable361 ;; SendAnswer \ 00000408 0820A0E1 MOV R2,R8 \ 0000040C 0010A0E3 MOV R1,#+0 \ 00000410 710100EF SWI +369 \ 00000414 B00296E5 LDR R0,[R6, #+688] \ 00000418 010080E2 ADD R0,R0,#+1 \ 0000041C B00286E5 STR R0,[R6, #+688] \ 00000420 980099E5 LDR R0,[R9, #+152] \ 00000424 150000EF SWI +21 \ 00000428 987089E5 STR R7,[R9, #+152] \ 0000042C 081095E5 LDR R1,[R5, #+8] \ 00000430 0400A0E1 MOV R0,R4 \ 00000434 9B0100EF SWI +411 \ 00000438 7C0396E5 LDR R0,[R6, #+892] \ 0000043C 0710A0E1 MOV R1,R7 \ 00000440 260100EF SWI +294 \ 00000444 7C1396E5 LDR R1,[R6, #+892] \ 00000448 0400A0E1 MOV R0,R4 \ 0000044C 810100EF SWI +385 \ 00000450 0400A0E1 MOV R0,R4 \ 00000454 ........ BL AddMsgToChat \ 00000458 0110A0E3 MOV R1,#+1 \ 0000045C 0900A0E1 MOV R0,R9 \ 00000460 ........ BL RecountMenu \ 00000464 0700E0E1 MVN R0,R7 \ 00000468 08D08DE2 ADD SP,SP,#+8 \ 0000046C 86FFFFEA B ??edchat_onkey_4 \ ??edchat_onkey_18: \ 00000470 1A0058E3 CMP R8,#+26 \ 00000474 5500001A BNE ??edchat_onkey_20 \ 00000478 0400A0E1 MOV R0,R4 \ 0000047C D80100EF SWI +472 \ 00000480 000050E3 CMP R0,#+0 \ 00000484 1BFFFF1A BNE ??edchat_onkey_9 \ 00000488 040095E5 LDR R0,[R5, #+4] \ 0000048C 820100EF SWI +386 \ 00000490 04208DE2 ADD R2,SP,#+4 \ 00000494 0010A0E1 MOV R1,R0 \ 00000498 040095E5 LDR R0,[R5, #+4] \ 0000049C 690100EF SWI +361 \ 000004A0 7C0396E5 LDR R0,[R6, #+892] \ 000004A4 2C109DE5 LDR R1,[SP, #+44] \ 000004A8 1F0100EF SWI +287 \ 000004AC 0400A0E1 MOV R0,R4 \ 000004B0 D30100EF SWI +467 \ 000004B4 0080A0E1 MOV R8,R0 \ 000004B8 7C0396E5 LDR R0,[R6, #+892] \ 000004BC 230100EF SWI +291 \ 000004C0 010080E2 ADD R0,R0,#+1 \ 000004C4 140000EF SWI +20 \ 000004C8 0070A0E1 MOV R7,R0 \ 000004CC 7C0396E5 LDR R0,[R6, #+892] \ 000004D0 0720A0E1 MOV R2,R7 \ 000004D4 0810A0E1 MOV R1,R8 \ 000004D8 ........ BL IsUrl \ 000004DC 000050E3 CMP R0,#+0 \ 000004E0 2C00000A BEQ ??edchat_onkey_21 \ 000004E4 08019FE5 LDR R0,??edchat_onkey_7+0x10 ;; IsOpenBrowser \ 000004E8 000090E5 LDR R0,[R0, #+0] \ 000004EC 000050E3 CMP R0,#+0 \ 000004F0 2800000A BEQ ??edchat_onkey_21 \ 000004F4 FC009FE5 LDR R0,??edchat_onkey_7+0x14 ;; GetTempName \ 000004F8 ........ LDR R3,??DataTable328 ;; TEMPLATES_PATH \ 000004FC F8209FE5 LDR R2,??edchat_onkey_7+0x18 ;; `?` \ 00000500 01002DE9 PUSH {R0} \ 00000504 FF10A0E3 MOV R1,#+255 \ 00000508 34008DE2 ADD R0,SP,#+52 \ 0000050C 1B0100EF SWI +283 \ 00000510 04308DE2 ADD R3,SP,#+4 \ 00000514 402FA0E3 MOV R2,#+256 \ 00000518 0110A0E3 MOV R1,#+1 \ 0000051C 831C81E3 ORR R1,R1,#0x8300 \ 00000520 34008DE2 ADD R0,SP,#+52 \ 00000524 0A0000EF SWI +10 \ 00000528 0040A0E1 MOV R4,R0 \ 0000052C 010074E3 CMN R4,#+1 \ 00000530 04D08DE2 ADD SP,SP,#+4 \ 00000534 1400000A BEQ ??edchat_onkey_22 \ 00000538 0700A0E1 MOV R0,R7 \ 0000053C 1B0000EF SWI +27 \ 00000540 0020A0E1 MOV R2,R0 \ 00000544 0D30A0E1 MOV R3,SP \ 00000548 0710A0E1 MOV R1,R7 \ 0000054C 0400A0E1 MOV R0,R4 \ 00000550 0C0000EF SWI +12 \ 00000554 0D10A0E1 MOV R1,SP \ 00000558 0400A0E1 MOV R0,R4 \ 0000055C 0D0000EF SWI +13 \ 00000560 7C0396E5 LDR R0,[R6, #+892] \ 00000564 402FA0E3 MOV R2,#+256 \ 00000568 30108DE2 ADD R1,SP,#+48 \ 0000056C 6C0100EF SWI +364 \ 00000570 7C0396E5 LDR R0,[R6, #+892] \ 00000574 0020A0E3 MOV R2,#+0 \ 00000578 0010A0E3 MOV R1,#+0 \ 0000057C 940000EF SWI +148 \ 00000580 0D10A0E1 MOV R1,SP \ 00000584 30008DE2 ADD R0,SP,#+48 \ 00000588 6B0100EF SWI +363 \ ??edchat_onkey_22: \ 0000058C 0700A0E1 MOV R0,R7 \ 00000590 150000EF SWI +21 \ 00000594 3BFFFFEA B ??edchat_onkey_2 \ ??edchat_onkey_21: \ 00000598 000095E5 LDR R0,[R5, #+0] \ 0000059C 0C0090E5 LDR R0,[R0, #+12] \ 000005A0 ........ BL LoadTemplates \ 000005A4 ........ LDR R2,??DataTable329 ;; IsMultiBuffer \ 000005A8 50109FE5 LDR R1,??edchat_onkey_7+0x1C ;; ed_options_handler \ 000005AC 100085E5 STR R0,[R5, #+16] \ 000005B0 002092E5 LDR R2,[R2, #+0] \ 000005B4 000052E3 CMP R2,#+0 \ 000005B8 03308002 ADDEQ R3,R0,#+3 \ 000005BC 04308012 ADDNE R3,R0,#+4 \ 000005C0 0520A0E1 MOV R2,R5 \ 000005C4 0400A0E1 MOV R0,R4 \ 000005C8 E50100EF SWI +485 \ 000005CC EEFFFFEA B ??edchat_onkey_22 \ ??edchat_onkey_20: \ 000005D0 0D0058E3 CMP R8,#+13 \ 000005D4 43FFFF0A BEQ ??edchat_onkey_17 \ ??edchat_onkey_23: \ 000005D8 0E0058E3 CMP R8,#+14 \ 000005DC C5FEFF1A BNE ??edchat_onkey_9 \ 000005E0 1DFFFFEA B ??edchat_onkey_14 \ ??edchat_onkey_7: \ 000005E4 ........ DC32 LongRightAction \ 000005E8 ........ DC32 LongLeftAction \ 000005EC ........ DC32 LongVolDownAction \ 000005F0 ........ DC32 LongVolUpAction \ 000005F4 ........ DC32 IsOpenBrowser \ 000005F8 ........ DC32 GetTempName \ 000005FC ........ DC32 `?` \ 00000600 ........ DC32 ed_options_handler 8311 //1: close 8312 } 8313 8314 static const HEADER_DESC edchat_hdr={0,0,NULL,NULL,NULL,0,LGP_NULL}; 8315 8316 void (*old_ed_redraw)(void *data); \ In segment CODE, align 4, keep-with-next 8317 void my_ed_redraw(void *data) 8318 { \ my_ed_redraw: \ 00000000 30402DE9 PUSH {R4,R5,LR} 8319 void *edchat_gui; 8320 EDCHAT_STRUCT *ed_struct; 8321 if (old_ed_redraw) old_ed_redraw(data); \ 00000004 ........ LDR R4,??DataTable332 ;; i_rc \ 00000008 0C1594E5 LDR R1,[R4, #+1292] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0100000A BEQ ??my_ed_redraw_0 \ 00000014 31FF2FE1 BLX R1 8322 edchat_gui=FindGUIbyId(edchat_id,NULL); \ 00000018 0010A0E3 MOV R1,#+0 \ ??my_ed_redraw_0: \ 0000001C 840494E5 LDR R0,[R4, #+1156] \ 00000020 090200EF SWI +521 8323 if (edchat_gui) \ 00000024 000050E3 CMP R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 8324 { 8325 ed_struct=EDIT_GetUserPointer(edchat_gui); \ 0000002C DF0100EF SWI +479 8326 if (ed_struct) \ 00000030 000050E3 CMP R0,#+0 \ 00000034 3080BD08 POPEQ {R4,R5,PC} 8327 { 8328 int icon, width; 8329 #ifndef NEWSGOLD 8330 icon=*(S_ICONS+GetIconIndex(ed_struct->ed_contact)); 8331 ((HEADER_DESC *)&edchat_hdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); 8332 DrawImg(ScreenW()-1-width,1,icon); 8333 #else 8334 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 EC4290E5 LDR R4,[R0, #+748] 8335 width=GetImgWidth(icon); \ 00000048 0400A0E1 MOV R0,R4 \ 0000004C 220000EF SWI +34 \ 00000050 0050A0E1 MOV R5,R0 8336 DrawImg(2,((HeaderH()-width)>>1)+YDISP,icon); \ 00000054 8A8100EF SWI +33162 \ 00000058 0420A0E1 MOV R2,R4 \ 0000005C 050040E0 SUB R0,R0,R5 \ 00000060 C010A0E1 ASR R1,R0,#+1 \ 00000064 0200A0E3 MOV R0,#+2 \ 00000068 230000EF SWI +35 8337 /* DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 8338 GetPaletteAdrByColorIndex(0), 8339 GetPaletteAdrByColorIndex(EDIT_IsBusy(edchat_gui)?3:4));*/ 8340 #endif 8341 } 8342 } 8343 } \ 0000006C 3080BDE8 POP {R4,R5,PC} ;; return 8344 \ In segment CODE, align 4, keep-with-next 8345 void edchat_ghook(GUI *data, int cmd) 8346 { \ edchat_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 8347 8348 static const SOFTKEY_DESC sk={0x0FFF,0x0000,(int)LG_MENU}; 8349 static const SOFTKEY_DESC sk_cancel={0x0FF0,0x0000,(int)LG_CLOSE}; 8350 // static SOFTKEY_DESC sk={0x0018,0x0000,(int)"Menu"}; 8351 int j; 8352 EDITCONTROL ec; 8353 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); 8354 PNGTOP_DESC *pltop=PNG_TOP(); 8355 if (cmd==9) \ 00000004 ........ LDR R4,??DataTable332 ;; 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 8356 { 8357 GBS_DelTimer(&tmr_illumination); //by BoBa 25.06.07 \ 00000030 9000A0E3 MOV R0,#+144 \ 00000034 780D80E3 ORR R0,R0,#0x1E00 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 8C0100EF SWI +396 8358 pltop->dyn_pltop=NULL; \ 00000040 086088E5 STR R6,[R8, #+8] \ 00000044 170000EA B ??edchat_ghook_1 8359 } 8360 if (cmd==2) \ ??edchat_ghook_0: \ 00000048 081097E5 LDR R1,[R7, #+8] \ 0000004C 020059E3 CMP R9,#+2 \ 00000050 1600001A BNE ??edchat_ghook_2 8361 { 8362 ed_struct->ed_chatgui=data; \ 00000054 045087E5 STR R5,[R7, #+4] 8363 // edgui_data=data; 8364 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000058 0500A0E1 MOV R0,R5 \ 0000005C 9B0100EF SWI +411 8365 8366 static void *methods[16]; 8367 void **m=GetDataOfItemByID(data,2); \ 00000060 0210A0E3 MOV R1,#+2 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 4F0100EF SWI +335 \ 0000006C 0050B0E1 MOVS R5,R0 8368 if (m) 8369 { 8370 if (m[1]) \ 00000070 04009515 LDRNE R0,[R5, #+4] \ 00000074 00005013 CMPNE R0,#+0 \ 00000078 6300000A BEQ ??edchat_ghook_3 8371 { 8372 memcpy(methods,m[1],sizeof(methods)); \ 0000007C 516EA0E3 MOV R6,#+1296 \ 00000080 4020A0E3 MOV R2,#+64 \ 00000084 0010A0E1 MOV R1,R0 \ 00000088 040086E0 ADD R0,R6,R4 \ 0000008C 1E0100EF SWI +286 8373 old_ed_redraw=(void (*)(void *))(methods[0]); \ 00000090 040096E7 LDR R0,[R6, +R4] \ 00000094 0C0584E5 STR R0,[R4, #+1292] 8374 methods[0]=(void *)my_ed_redraw; \ 00000098 74019FE5 LDR R0,??edchat_ghook_4 ;; my_ed_redraw \ 0000009C 040086E7 STR R0,[R6, +R4] 8375 m[1]=methods; \ 000000A0 040086E0 ADD R0,R6,R4 \ 000000A4 040085E5 STR R0,[R5, #+4] \ ??edchat_ghook_1: \ 000000A8 2CD08DE2 ADD SP,SP,#+44 \ 000000AC F083BDE8 POP {R4-R9,PC} 8376 } 8377 } 8378 } 8379 if (cmd==3) \ ??edchat_ghook_2: \ 000000B0 030059E3 CMP R9,#+3 \ 000000B4 0E00001A BNE ??edchat_ghook_5 8380 { 8381 // if (edgui_data==data) edgui_data=NULL; 8382 if (ed_struct->ed_contact) \ 000000B8 000097E5 LDR R0,[R7, #+0] \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 0500000A BEQ ??edchat_ghook_6 8383 { 8384 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C4 0D20A0E1 MOV R2,SP \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 690100EF SWI +361 8385 SaveAnswer(ed_struct->ed_contact,ec.pWS); \ 000000D0 28109DE5 LDR R1,[SP, #+40] \ 000000D4 000097E5 LDR R0,[R7, #+0] \ 000000D8 ........ BL SaveAnswer 8386 } 8387 RecountMenu(ed_struct->ed_contact,1); \ ??edchat_ghook_6: \ 000000DC 000097E5 LDR R0,[R7, #+0] \ 000000E0 0110A0E3 MOV R1,#+1 \ 000000E4 ........ BL RecountMenu 8388 mfree(ed_struct); \ 000000E8 0700A0E1 MOV R0,R7 \ 000000EC 150000EF SWI +21 \ 000000F0 ECFFFFEA B ??edchat_ghook_1 8389 } 8390 if (cmd==0x0A) \ ??edchat_ghook_5: \ 000000F4 0A0059E3 CMP R9,#+10 \ 000000F8 0900001A BNE ??edchat_ghook_7 8391 { 8392 pltop->dyn_pltop=SmilesImgList; \ 000000FC 14019FE5 LDR R0,??edchat_ghook_4+0x4 ;; SmilesImgList \ 00000100 000090E5 LDR R0,[R0, #+0] \ 00000104 080088E5 STR R0,[R8, #+8] 8393 DisableIDLETMR(); \ 00000108 7F0100EF SWI +383 8394 total_unread-=ed_struct->requested_decrement_total_unread; \ 0000010C 780494E5 LDR R0,[R4, #+1144] \ 00000110 0C1097E5 LDR R1,[R7, #+12] \ 00000114 010040E0 SUB R0,R0,R1 \ 00000118 780484E5 STR R0,[R4, #+1144] 8395 ed_struct->requested_decrement_total_unread=0; \ 0000011C 0C6087E5 STR R6,[R7, #+12] \ 00000120 E0FFFFEA B ??edchat_ghook_1 8396 #ifdef ELKA 8397 if (!total_unread) 8398 { 8399 SLI_Off(); 8400 } 8401 #endif 8402 /* if (request_close_edchat) 8403 { 8404 request_close_edchat=0; 8405 GeneralFunc_flag1(edchat_id,1); 8406 return; 8407 }*/ 8408 } 8409 if (cmd==7) \ ??edchat_ghook_7: \ 00000124 070059E3 CMP R9,#+7 \ 00000128 2800001A BNE ??edchat_ghook_8 8410 { 8411 SetSoftKey(data,&sk,SET_SOFT_KEY_N); \ 0000012C E8809FE5 LDR R8,??edchat_ghook_4+0x8 ;; ??sk_1 \ 00000130 0020A0E3 MOV R2,#+0 \ 00000134 0810A0E1 MOV R1,R8 \ 00000138 0500A0E1 MOV R0,R5 \ 0000013C 680100EF SWI +360 8412 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000140 081097E5 LDR R1,[R7, #+8] \ 00000144 0D20A0E1 MOV R2,SP \ 00000148 0500A0E1 MOV R0,R5 \ 0000014C 690100EF SWI +361 8413 if (ec.pWS->wsbody[0]==0) \ 00000150 28009DE5 LDR R0,[SP, #+40] \ 00000154 000090E5 LDR R0,[R0, #+0] \ 00000158 B000D0E1 LDRH R0,[R0, #+0] \ 0000015C 000050E3 CMP R0,#+0 \ 00000160 0300001A BNE ??edchat_ghook_9 8414 SetSoftKey(data,&sk_cancel,SET_SOFT_KEY_N==0?1:0); \ 00000164 0120A0E3 MOV R2,#+1 \ 00000168 081088E2 ADD R1,R8,#+8 \ 0000016C 0500A0E1 MOV R0,R5 \ 00000170 680100EF SWI +360 8415 if (!EDIT_IsBusy(data)) \ ??edchat_ghook_9: \ 00000174 0500A0E1 MOV R0,R5 \ 00000178 1C0200EF SWI +540 \ 0000017C 000050E3 CMP R0,#+0 \ 00000180 2100001A BNE ??edchat_ghook_3 8416 { 8417 time_to_stop_t9=0; \ 00000184 B46484E5 STR R6,[R4, #+1204] 8418 if (ed_struct->ed_contact->req_add) \ 00000188 000097E5 LDR R0,[R7, #+0] \ 0000018C 8C1090E5 LDR R1,[R0, #+140] \ 00000190 000051E3 CMP R1,#+0 \ 00000194 0500000A BEQ ??edchat_ghook_10 8419 { 8420 ed_struct->ed_contact->req_add=0; \ 00000198 8C6080E5 STR R6,[R0, #+140] 8421 AddMsgToChat(data); \ 0000019C 0500A0E1 MOV R0,R5 \ 000001A0 ........ BL AddMsgToChat 8422 RecountMenu(ed_struct->ed_contact,1); \ 000001A4 000097E5 LDR R0,[R7, #+0] \ 000001A8 0110A0E3 MOV R1,#+1 \ 000001AC ........ BL RecountMenu 8423 } 8424 if (ed_struct->ed_contact->req_drawack) \ ??edchat_ghook_10: \ 000001B0 000097E5 LDR R0,[R7, #+0] \ 000001B4 901090E5 LDR R1,[R0, #+144] \ 000001B8 000051E3 CMP R1,#+0 \ 000001BC 1200000A BEQ ??edchat_ghook_3 8425 { 8426 ed_struct->ed_contact->req_drawack=0; \ 000001C0 906080E5 STR R6,[R0, #+144] 8427 DrawAck(data); \ 000001C4 0500A0E1 MOV R0,R5 \ 000001C8 ........ BL DrawAck \ 000001CC B5FFFFEA B ??edchat_ghook_1 8428 } 8429 } 8430 } 8431 if (cmd==0x0C) \ ??edchat_ghook_8: \ 000001D0 0C0059E3 CMP R9,#+12 \ 000001D4 0C00001A BNE ??edchat_ghook_3 8432 { 8433 j=EDIT_GetFocus(data); \ 000001D8 0500A0E1 MOV R0,R5 \ 000001DC 820100EF SWI +386 \ 000001E0 0040A0E1 MOV R4,R0 8434 if ((EDIT_GetUnFocus(data)ed_answer)) \ 000001E4 0500A0E1 MOV R0,R5 \ 000001E8 830100EF SWI +387 \ 000001EC 040050E1 CMP R0,R4 \ 000001F0 050000AA BGE ??edchat_ghook_3 \ 000001F4 080097E5 LDR R0,[R7, #+8] \ 000001F8 000054E1 CMP R4,R0 \ 000001FC 0200000A BEQ ??edchat_ghook_3 8435 EDIT_SetCursorPos(data,1); \ 00000200 0110A0E3 MOV R1,#+1 \ 00000204 0500A0E1 MOV R0,R5 \ 00000208 D40100EF SWI +468 8436 } 8437 } \ ??edchat_ghook_3: \ 0000020C 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 00000210 F083BDE8 POP {R4-R9,PC} ;; return \ ??edchat_ghook_4: \ 00000214 ........ DC32 my_ed_redraw \ 00000218 ........ DC32 SmilesImgList \ 0000021C ........ DC32 ??sk_1 \ In segment DATA_C, align 4, align-sorted 8438 8439 8440 8441 static const INPUTDIA_DESC edchat_desc = \ edchat_desc: \ 00000000 01000000.... DC32 1, edchat_onkey, edchat_ghook, edchat_locret, 0, menu_skt \ ............ \ ........0000 \ 0000........ \ 00000018 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000020 0B0000006400 DC32 11, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ 00000038 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000040 000000000000 DC32 0H, 0, 2147483647 \ 0000FFFFFF7F \ 0000004C 2D2D2D2D2D2D DC8 "-------" \ 2D00 \ In segment DATA_C, align 4, align-sorted \ ??sk_1: \ 00000000 FF0F0000 DC16 4095, 0 \ 00000004 ........ DC32 `?` \ 00000008 F00F0000 DC16 4080, 0 \ 0000000C ........ DC32 `?` 8442 { 8443 1, 8444 edchat_onkey, 8445 edchat_ghook, 8446 (void *)edchat_locret, 8447 0, 8448 &menu_skt, 8449 {0,NULL,NULL,NULL}, 8450 FONT_SMALL, 8451 100, 8452 101, 8453 0, 8454 // 0x00000001 - Выровнять по правому краю 8455 // 0x00000002 - Выровнять по центру 8456 // 0x00000004 - Инверсия знакомест 8457 // 0x00000008 - UnderLine 8458 // 0x00000020 - Не переносить слова 8459 // 0x00000200 - bold 8460 0, 8461 // 0x00000002 - ReadOnly 8462 // 0x00000004 - Не двигается курсор 8463 // 0x40000000 - Поменять местами софт-кнопки 8464 0x40000000 8465 }; 8466 \ In segment CODE, align 4, keep-with-next 8467 void CreateEditChat(CLIST *t) 8468 { \ CreateEditChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 8469 8470 void *ma=malloc_adr(); 8471 void *eq; 8472 EDITCONTROL ec; 8473 EDITC_OPTIONS ec_options; 8474 int color, font, type; 8475 int zc; 8476 8477 LOGQ *lp; 8478 int edchat_toitem; 8479 // edcontact=t; 8480 8481 *((int *)(&edchat_hdr.lgp_id))=(int)t->name; \ 00000004 6C649FE5 LDR R6,??CreateEditChat_0 ;; edchat_desc 8482 // *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+GetIconIndex(t); 8483 *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+IS_NULLICON; \ 00000008 ........ LDR R7,??DataTable332 ;; 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 CC0F87E2 ADD R0,R7,#+816 \ 00000028 400086E5 STR R0,[R6, #+64] 8484 8485 eq=AllocEQueue(ma,mfree_adr()); \ 0000002C 158000EF SWI +32789 \ 00000030 0010A0E1 MOV R1,R0 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 630100EF SWI +355 8486 8487 /* hist = malloc(256); 8488 if(!GetHistory(hist, 256, t->uin)) 8489 { 8490 ascii2ws(ews,hist); 8491 PrepareEditControl(&ec); 8492 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL|ECF_DISABLE_T9,ews,ews->wsbody[0]); 8493 } 8494 mfree(hist); 8495 8496 AddEditControlToEditQend(eq,&ec,ma); */ 8497 lp=t->log; \ 0000003C 949094E5 LDR R9,[R4, #+148] \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 000059E3 CMP R9,#+0 \ 00000048 8F00000A BEQ ??CreateEditChat_1 8498 8499 while(lp) 8500 { 8501 font = ED_H_FONT_SIZE; \ ??CreateEditChat_2: \ 0000004C ........ LDR R0,??DataTable333 ;; ED_H_FONT_SIZE 8502 if ((zc=lp->acked&3))//Если отправлен или доставлен \ 00000050 ........ LDR R1,??DataTable334 ;; 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 8503 { 8504 if (zc==1) \ 00000068 010050E3 CMP R0,#+1 \ 0000006C 2200001A BNE ??CreateEditChat_4 8505 color=ACK_COLOR; //Зеленый, отправлен,но не доставлен \ 00000070 ........ LDR R0,??DataTable335 ;; ACK_COLOR \ 00000074 1F0000EA B ??CreateEditChat_5 8506 else 8507 color=I_COLOR;//доставлен 8508 } 8509 else//иначе входящее сообщение 8510 { 8511 if (lp->ID==0xFFFFFFFF) \ ??CreateEditChat_3: \ 00000078 080099E5 LDR R0,[R9, #+8] \ 0000007C 010070E3 CMN R0,#+1 \ 00000080 1B00001A BNE ??CreateEditChat_6 8512 { 8513 type = lp->type&0x0F; \ 00000084 0C0099E5 LDR R0,[R9, #+12] \ 00000088 0F1000E2 AND R1,R0,#0xF 8514 if(lp->type&0x10)//история \ 0000008C 100010E3 TST R0,#0x10 \ 00000090 0D00000A BEQ ??CreateEditChat_7 8515 { 8516 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 00000094 010051E3 CMP R1,#+1 \ 00000098 ........ LDREQ R0,??DataTable336 ;; O_I_COLOR \ 0000009C 0700000A BEQ ??CreateEditChat_8 \ 000000A0 030051E3 CMP R1,#+3 \ 000000A4 0400001A BNE ??CreateEditChat_9 \ 000000A8 ........ LDR R0,??DataTable349 ;; O_X_COLOR \ 000000AC 00B090E5 LDR R11,[R0, #+0] \ 000000B0 ........ LDR R0,??DataTable351 ;; O_ED_X_FONT_SIZE \ ??CreateEditChat_10: \ 000000B4 00A090E5 LDR R10,[R0, #+0] \ 000000B8 0F0000EA B ??CreateEditChat_4 \ ??CreateEditChat_9: \ 000000BC ........ LDR R0,??DataTable339 ;; O_TO_COLOR \ ??CreateEditChat_8: \ 000000C0 00B090E5 LDR R11,[R0, #+0] \ 000000C4 ........ LDR R0,??DataTable340 ;; O_ED_H_FONT_SIZE \ 000000C8 F9FFFFEA B ??CreateEditChat_10 8517 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 8518 } 8519 else//текущий чат 8520 { 8521 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,??DataTable350 ;; X_COLOR \ 000000E0 00B090E5 LDR R11,[R0, #+0] \ 000000E4 ........ LDR R0,??DataTable352 ;; ED_X_FONT_SIZE \ 000000E8 F1FFFFEA B ??CreateEditChat_10 \ ??CreateEditChat_11: \ 000000EC ........ LDR R0,??DataTable343 ;; TO_COLOR \ 000000F0 000000EA B ??CreateEditChat_5 8522 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 8523 } 8524 } 8525 else//если не входящее 8526 color=UNACK_COLOR; //то знач не доставлено \ ??CreateEditChat_6: \ 000000F4 ........ LDR R0,??DataTable344 ;; UNACK_COLOR \ ??CreateEditChat_5: \ 000000F8 00B090E5 LDR R11,[R0, #+0] 8527 } 8528 8529 PrepareEditControl(&ec); \ ??CreateEditChat_4: \ 000000FC 10008DE2 ADD R0,SP,#+16 \ 00000100 640100EF SWI +356 8530 8531 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 8532 { 8533 ascii2ws(ews,lp->hdr); \ 00000114 7C0397E5 LDR R0,[R7, #+892] \ 00000118 101089E2 ADD R1,R9,#+16 \ 0000011C ........ _BLF ascii2ws,??ascii2ws??rA 8534 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000120 7C3397E5 LDR R3,[R7, #+892] \ 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 8535 } 8536 else 8537 { 8538 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??CreateEditChat_12: \ 00000138 0000A0E3 MOV R0,#+0 \ 0000013C 01002DE9 PUSH {R0} \ 00000140 7C3397E5 LDR R3,[R7, #+892] \ 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 8539 } 8540 8541 PrepareEditCOptions(&ec_options); \ 00000158 0D00A0E1 MOV R0,SP \ 0000015C C80100EF SWI +456 8542 SetPenColorToEditCOptions(&ec_options,color); \ 00000160 0B10A0E1 MOV R1,R11 \ 00000164 0D00A0E1 MOV R0,SP \ 00000168 CC0100EF SWI +460 8543 SetFontToEditCOptions(&ec_options,font); \ 0000016C 0A10A0E1 MOV R1,R10 \ 00000170 0D00A0E1 MOV R0,SP \ 00000174 CA0100EF SWI +458 8544 CopyOptionsToEditControl(&ec,&ec_options); \ 00000178 0D10A0E1 MOV R1,SP \ 0000017C 10008DE2 ADD R0,SP,#+16 \ 00000180 CE0100EF SWI +462 8545 AddEditControlToEditQend(eq,&ec,ma); \ 00000184 0520A0E1 MOV R2,R5 \ 00000188 10108DE2 ADD R1,SP,#+16 \ 0000018C 0800A0E1 MOV R0,R8 \ 00000190 660100EF SWI +358 8546 8547 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 8548 { 8549 ParseAnswer(ews,lp->text); \ 000001A4 7C0397E5 LDR R0,[R7, #+892] \ 000001A8 601089E2 ADD R1,R9,#+96 \ 000001AC ........ BL ParseAnswer \ 000001B0 060000EA B ??CreateEditChat_15 8550 } 8551 else 8552 { 8553 ParseXStatusText(ews,lp->text,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_14: \ 000001B4 100010E3 TST R0,#0x10 \ 000001B8 ........ LDRNE R0,??DataTable349 ;; O_X_COLOR \ 000001BC 601089E2 ADD R1,R9,#+96 \ 000001C0 ........ LDREQ R0,??DataTable350 ;; X_COLOR \ 000001C4 002090E5 LDR R2,[R0, #+0] \ 000001C8 7C0397E5 LDR R0,[R7, #+892] \ 000001CC ........ BL ParseXStatusText 8554 } 8555 8556 PrepareEditControl(&ec); \ ??CreateEditChat_15: \ 000001D0 10008DE2 ADD R0,SP,#+16 \ 000001D4 640100EF SWI +356 8557 ConstructEditControl(&ec, 8558 ECT_NORMAL_TEXT, 8559 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 8560 ews,ews->wsbody[0]); \ 000001D8 7C3397E5 LDR R3,[R7, #+892] \ 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 8561 PrepareEditCOptions(&ec_options); \ 00000204 04008DE2 ADD R0,SP,#+4 \ 00000208 C80100EF SWI +456 8562 //#ifdef M75 8563 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 8564 { 8565 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000220 100010E3 TST R0,#0x10 \ 00000224 ........ LDRNE R0,??DataTable347 ;; O_ED_FONT_SIZE \ 00000228 ........ LDREQ R0,??DataTable354 ;; ED_FONT_SIZE \ 0000022C 090000EA B ??CreateEditChat_17 8566 } 8567 else 8568 { 8569 SetPenColorToEditCOptions(&ec_options,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_16: \ 00000230 100010E3 TST R0,#0x10 \ 00000234 ........ LDRNE R0,??DataTable349 ;; O_X_COLOR \ 00000238 ........ LDREQ R0,??DataTable350 ;; X_COLOR \ 0000023C 001090E5 LDR R1,[R0, #+0] \ 00000240 0D00A0E1 MOV R0,SP \ 00000244 CC0100EF SWI +460 8570 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,??DataTable351 ;; O_ED_X_FONT_SIZE \ 00000254 ........ LDREQ R0,??DataTable352 ;; ED_X_FONT_SIZE \ ??CreateEditChat_17: \ 00000258 001090E5 LDR R1,[R0, #+0] \ 0000025C 0D00A0E1 MOV R0,SP \ 00000260 CA0100EF SWI +458 8571 } 8572 //#else 8573 // SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 8574 //#endif 8575 CopyOptionsToEditControl(&ec,&ec_options); \ 00000264 0D10A0E1 MOV R1,SP \ 00000268 10008DE2 ADD R0,SP,#+16 \ 0000026C CE0100EF SWI +462 8576 AddEditControlToEditQend(eq,&ec,ma); \ 00000270 0520A0E1 MOV R2,R5 \ 00000274 10108DE2 ADD R1,SP,#+16 \ 00000278 0800A0E1 MOV R0,R8 \ 0000027C 660100EF SWI +358 8577 lp=lp->next; \ 00000280 009099E5 LDR R9,[R9, #+0] 8578 } \ 00000284 000059E3 CMP R9,#+0 \ 00000288 6FFFFF1A BNE ??CreateEditChat_2 8579 if (t->isunread) total_unread--; \ ??CreateEditChat_1: \ 0000028C 840094E5 LDR R0,[R4, #+132] 8580 total_unread2=total_unread2-t->unread_msg; 8581 t->unread_msg=0; \ 00000290 0090A0E3 MOV R9,#+0 \ 00000294 000050E3 CMP R0,#+0 \ 00000298 78049715 LDRNE R0,[R7, #+1144] \ 0000029C 01004012 SUBNE R0,R0,#+1 \ 000002A0 78048715 STRNE R0,[R7, #+1144] \ 000002A4 CC0297E5 LDR R0,[R7, #+716] \ 000002A8 881094E5 LDR R1,[R4, #+136] \ 000002AC 010040E0 SUB R0,R0,R1 \ 000002B0 CC0287E5 STR R0,[R7, #+716] \ 000002B4 889084E5 STR R9,[R4, #+136] 8582 t->isunread=0; \ 000002B8 849084E5 STR R9,[R4, #+132] 8583 ChangeContactPos(t); \ 000002BC 0400A0E1 MOV R0,R4 \ 000002C0 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 8584 wsprintf(ews, "-------"); \ 000002C4 7C0397E5 LDR R0,[R7, #+892] \ 000002C8 4C1086E2 ADD R1,R6,#+76 \ 000002CC 240100EF SWI +292 8585 PrepareEditControl(&ec); \ 000002D0 10008DE2 ADD R0,SP,#+16 \ 000002D4 640100EF SWI +356 8586 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000002D8 7C3397E5 LDR R3,[R7, #+892] \ 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 8587 PrepareEditCOptions(&ec_options); \ 000002F8 04008DE2 ADD R0,SP,#+4 \ 000002FC C80100EF SWI +456 8588 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000300 ........ LDR R0,??DataTable354 ;; ED_FONT_SIZE \ 00000304 001090E5 LDR R1,[R0, #+0] \ 00000308 04008DE2 ADD R0,SP,#+4 \ 0000030C CA0100EF SWI +458 8589 CopyOptionsToEditControl(&ec,&ec_options); \ 00000310 04108DE2 ADD R1,SP,#+4 \ 00000314 14008DE2 ADD R0,SP,#+20 \ 00000318 CE0100EF SWI +462 8590 AddEditControlToEditQend(eq,&ec,ma); \ 0000031C 0520A0E1 MOV R2,R5 \ 00000320 14108DE2 ADD R1,SP,#+20 \ 00000324 0800A0E1 MOV R0,R8 \ 00000328 660100EF SWI +358 8591 8592 if (t->answer) ParseAnswer(ews,t->answer); \ 0000032C 981094E5 LDR R1,[R4, #+152] \ 00000330 04D08DE2 ADD SP,SP,#+4 \ 00000334 000051E3 CMP R1,#+0 \ 00000338 0200000A BEQ ??CreateEditChat_18 \ 0000033C 7C0397E5 LDR R0,[R7, #+892] \ 00000340 ........ BL ParseAnswer \ 00000344 020000EA B ??CreateEditChat_19 8593 else CutWSTR(ews,0); \ ??CreateEditChat_18: \ 00000348 7C0397E5 LDR R0,[R7, #+892] \ 0000034C 0010A0E3 MOV R1,#+0 \ 00000350 260100EF SWI +294 8594 PrepareEditControl(&ec); \ ??CreateEditChat_19: \ 00000354 10008DE2 ADD R0,SP,#+16 \ 00000358 640100EF SWI +356 8595 // ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,1024); 8596 ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,4096); \ 0000035C 18019FE5 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 7C3397E5 LDR R3,[R7, #+892] \ 00000378 402DA013 MOVNE R2,#+4096 \ 0000037C 0020A003 MOVEQ R2,#+0 \ 00000380 14008DE2 ADD R0,SP,#+20 \ 00000384 650100EF SWI +357 8597 8598 PrepareEditCOptions(&ec_options); \ 00000388 04008DE2 ADD R0,SP,#+4 \ 0000038C C80100EF SWI +456 8599 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000390 ........ LDR R0,??DataTable354 ;; ED_FONT_SIZE \ 00000394 001090E5 LDR R1,[R0, #+0] \ 00000398 04008DE2 ADD R0,SP,#+4 \ 0000039C CA0100EF SWI +458 8600 CopyOptionsToEditControl(&ec,&ec_options); \ 000003A0 04108DE2 ADD R1,SP,#+4 \ 000003A4 14008DE2 ADD R0,SP,#+20 \ 000003A8 CE0100EF SWI +462 8601 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 8602 8603 if (t->req_xtext) \ 000003C0 B00094E5 LDR R0,[R4, #+176] \ 000003C4 04D08DE2 ADD SP,SP,#+4 \ 000003C8 000050E3 CMP R0,#+0 \ 000003CC 0400000A BEQ ??CreateEditChat_20 8604 { 8605 FreeXText(t); \ 000003D0 0400A0E1 MOV R0,R4 \ 000003D4 ........ _BLF FreeXText,??FreeXText??rA 8606 t->req_xtext=0; \ 000003D8 B09084E5 STR R9,[R4, #+176] 8607 RequestXText(t->uin); \ 000003DC 0C0094E5 LDR R0,[R4, #+12] \ 000003E0 ........ BL RequestXText 8608 } 8609 8610 EDCHAT_STRUCT *ed_struct=malloc(sizeof(EDCHAT_STRUCT)); \ ??CreateEditChat_20: \ 000003E4 1400A0E3 MOV R0,#+20 \ 000003E8 140000EF SWI +20 \ 000003EC 0050A0E1 MOV R5,R0 8611 ed_struct->ed_contact=t; \ 000003F0 004085E5 STR R4,[R5, #+0] 8612 ed_struct->ed_answer=edchat_toitem; \ 000003F4 08A085E5 STR R10,[R5, #+8] 8613 ed_struct->requested_decrement_total_unread=0; \ 000003F8 0C9085E5 STR R9,[R5, #+12] 8614 t->req_add=0; \ 000003FC 8C9084E5 STR R9,[R4, #+140] 8615 t->last_log=NULL; \ 00000400 9C9084E5 STR R9,[R4, #+156] 8616 8617 // int scr_w=ScreenW(); 8618 // int scr_h=ScreenH(); 8619 // int head_h=HeaderH(); 8620 8621 patch_header(&edchat_hdr); \ 00000404 389086E5 STR R9,[R6, #+56] \ 00000408 888100EF SWI +33160 \ 0000040C 010040E2 SUB R0,R0,#+1 \ 00000410 BC03C6E1 STRH R0,[R6, #+60] \ 00000414 8A8100EF SWI +33162 \ 00000418 010040E2 SUB R0,R0,#+1 \ 0000041C BE03C6E1 STRH R0,[R6, #+62] 8622 patch_input(&edchat_desc); \ 00000420 B891C6E1 STRH R9,[R6, #+24] \ 00000424 8A8100EF SWI +33162 \ 00000428 010080E2 ADD R0,R0,#+1 \ 0000042C BA01C6E1 STRH R0,[R6, #+26] \ 00000430 888100EF SWI +33160 \ 00000434 010040E2 SUB R0,R0,#+1 \ 00000438 BC01C6E1 STRH R0,[R6, #+28] \ 0000043C 898100EF SWI +33161 \ 00000440 0040A0E1 MOV R4,R0 \ 00000444 8B8100EF SWI +33163 \ 00000448 000044E0 SUB R0,R4,R0 \ 0000044C 010040E2 SUB R0,R0,#+1 \ 00000450 BE01C6E1 STRH R0,[R6, #+30] 8623 // edchat_desc.font=ED_FONT_SIZE; 8624 edchat_id=CreateInputTextDialog(&edchat_desc,&edchat_hdr,eq,1,ed_struct); \ 00000454 20002DE9 PUSH {R5} \ 00000458 0130A0E3 MOV R3,#+1 \ 0000045C 0820A0E1 MOV R2,R8 \ 00000460 381086E2 ADD R1,R6,#+56 \ 00000464 0600A0E1 MOV R0,R6 \ 00000468 670100EF SWI +359 \ 0000046C 840487E5 STR R0,[R7, #+1156] 8625 } \ 00000470 40D08DE2 ADD SP,SP,#+64 \ 00000474 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CreateEditChat_0: \ 00000478 ........ DC32 edchat_desc \ 0000047C ........ DC32 FIRST_LETTER 8626 8627 //----------------------------------------------------------------------------- 8628 8629 #define EC_MNU_MAX 9 8630 \ In segment CODE, align 4, keep-with-next 8631 void Quote(GUI *data) 8632 { \ Quote: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 8633 int q_n; 8634 EDITCONTROL ec, ec_hdr; 8635 EDITCONTROL ec_ed; 8636 WSHDR *ed_ws; 8637 WSHDR *ws; 8638 8639 EDCHAT_STRUCT *ed_struct; 8640 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 8641 8642 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 8643 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 8644 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 8645 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 8646 8647 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 8648 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 8649 { 8650 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 8651 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote_1 8652 } 8653 else 8654 CutWSTR(ed_ws,0); \ ??Quote_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 8655 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 8656 { 8657 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 8658 } 8659 else 8660 { 8661 wstrcat(ed_ws,ec.pWS); \ ??Quote_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 8662 } 8663 int ed_pos=0; \ ??Quote_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 8664 do 8665 { 8666 ed_pos++; \ ??Quote_4: \ 000000D0 017080E2 ADD R7,R0,#+1 8667 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 8668 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 8669 } 8670 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 8671 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 8672 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 8673 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 8674 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 8675 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 8676 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 8677 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 8678 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 8679 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 0000017C 040094E5 LDR R0,[R4, #+4] \ 00000180 0610A0E1 MOV R1,R6 \ 00000184 810100EF SWI +385 8680 FreeWS(ws); \ 00000188 0600A0E1 MOV R0,R6 \ 0000018C 290100EF SWI +297 8681 GeneralFuncF1(1); \ 00000190 0100A0E3 MOV R0,#+1 \ 00000194 3B0100EF SWI +315 8682 } \ 00000198 84D08DE2 ADD SP,SP,#+132 \ 0000019C F080BDE8 POP {R4-R7,PC} ;; return 8683 \ In segment CODE, align 4, keep-with-next 8684 void Quote2(GUI *data)//цитирование без фокуса на ответ 8685 { \ Quote2: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 8686 int q_n; 8687 EDITCONTROL ec, ec_hdr; 8688 EDITCONTROL ec_ed; 8689 WSHDR *ed_ws; 8690 WSHDR *ws; 8691 8692 EDCHAT_STRUCT *ed_struct; 8693 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 8694 8695 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 8696 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 8697 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 8698 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 8699 8700 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 8701 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 8702 { 8703 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 8704 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote2_1 8705 } 8706 else 8707 CutWSTR(ed_ws,0); \ ??Quote2_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 8708 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 8709 { 8710 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 8711 } 8712 else 8713 { 8714 wstrcat(ed_ws,ec.pWS); \ ??Quote2_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 8715 } 8716 int ed_pos=0; \ ??Quote2_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 8717 do 8718 { 8719 ed_pos++; \ ??Quote2_4: \ 000000D0 017080E2 ADD R7,R0,#+1 8720 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 8721 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 8722 } 8723 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 8724 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 8725 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 8726 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 8727 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 8728 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 8729 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 8730 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 8731 int ii=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000170 040094E5 LDR R0,[R4, #+4] \ 00000174 820100EF SWI +386 8732 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 8733 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000188 040094E5 LDR R0,[R4, #+4] \ 0000018C 0610A0E1 MOV R1,R6 \ 00000190 810100EF SWI +385 8734 EDIT_SetFocus(ed_struct->ed_chatgui,ii); \ 00000194 040094E5 LDR R0,[R4, #+4] \ 00000198 0510A0E1 MOV R1,R5 \ 0000019C 9B0100EF SWI +411 8735 FreeWS(ws); \ 000001A0 0600A0E1 MOV R0,R6 \ 000001A4 290100EF SWI +297 8736 GeneralFuncF1(1); \ 000001A8 0100A0E3 MOV R0,#+1 \ 000001AC 3B0100EF SWI +315 8737 } \ 000001B0 84D08DE2 ADD SP,SP,#+132 \ 000001B4 F080BDE8 POP {R4-R7,PC} ;; return 8738 8739 \ In segment CODE, align 4, keep-with-next 8740 void GetShortInfo(GUI *data) 8741 { \ GetShortInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} 8742 EDCHAT_STRUCT *ed_struct; 8743 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 8744 8745 TPKT *p; 8746 CLIST *t; 8747 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,??DataTable362 ;; i_rc + 1116 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 030050E3 CMP R0,#+3 \ 00000024 1B00001A BNE ??GetShortInfo_0 8748 { 8749 p=malloc(sizeof(PKT)); \ 00000028 0800A0E3 MOV R0,#+8 \ 0000002C 140000EF SWI +20 8750 p->pkt.uin=t->uin; 8751 p->pkt.type=T_REQINFOSHORT; 8752 p->pkt.data_len=0; 8753 AddStringToLog(t, 0x01, "Request info...", I_str,0xFFFFFFFF,1); \ 00000030 ........ LDR R3,??DataTable360 ;; 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 8754 AddMsgToChat(ed_struct->ed_chatgui); \ 00000070 040094E5 LDR R0,[R4, #+4] \ 00000074 ........ BL AddMsgToChat 8755 RecountMenu(t,1); \ 00000078 0110A0E3 MOV R1,#+1 \ 0000007C 0500A0E1 MOV R0,R5 \ 00000080 ........ BL RecountMenu 8756 SUBPROC((void *)SendAnswer,0,p); \ 00000084 ........ LDR R0,??DataTable361 ;; SendAnswer \ 00000088 0620A0E1 MOV R2,R6 \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 710100EF SWI +369 \ 00000094 08D08DE2 ADD SP,SP,#+8 8757 } 8758 GeneralFuncF1(1); \ ??GetShortInfo_0: \ 00000098 0100A0E3 MOV R0,#+1 \ 0000009C 3B0100EF SWI +315 8759 } \ 000000A0 7080BDE8 POP {R4-R6,PC} ;; return \ ??GetShortInfo_1: \ 000000A4 ........ DC32 `?` 8760 8761 void AskNickAndAddContact(EDCHAT_STRUCT *); \ In segment CODE, align 4, keep-with-next 8762 void AddCurContact(GUI *data) 8763 { \ AddCurContact: \ 00000000 00402DE9 PUSH {LR} 8764 EDCHAT_STRUCT *ed_struct; 8765 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 8766 8767 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,??DataTable362 ;; i_rc + 1116 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0000001A BNE ??AddCurContact_0 \ 00000024 ........ _BLF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA 8768 GeneralFuncF1(1); \ ??AddCurContact_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 3B0100EF SWI +315 8769 } \ 00000030 0080BDE8 POP {PC} ;; return 8770 \ In segment CODE, align 4, keep-with-next 8771 void SendAuthReq(GUI *data) 8772 { \ SendAuthReq: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 14D04DE2 SUB SP,SP,#+20 8773 EDCHAT_STRUCT *ed_struct; 8774 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 8775 8776 TPKT *p; 8777 CLIST *t; 8778 int l; 8779 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,??DataTable362 ;; i_rc + 1116 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthReq_1 8781 { 8782 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 8783 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 8784 p->pkt.type=T_AUTHREQ; 8785 p->pkt.data_len=l; 8786 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 8787 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 ........ LDR R3,??DataTable360 ;; 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 8788 AddMsgToChat(ed_struct->ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 8789 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 ........ BL RecountMenu 8790 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable361 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 8791 } 8792 GeneralFuncF1(1); \ ??SendAuthReq_1: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 8793 } \ 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,??DataTable362 ;; i_rc + 1116 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthGrant_1 8805 { 8806 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 8807 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 8808 p->pkt.type=T_AUTHGRANT; 8809 p->pkt.data_len=l; 8810 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 8811 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 ........ LDR R3,??DataTable363 ;; 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 8812 AddMsgToChat(ed_struct->ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 8813 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 ........ BL RecountMenu 8814 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable364 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 8815 } 8816 GeneralFuncF1(1); \ ??SendAuthGrant_1: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 8817 } \ 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 8827 { 8828 if(HISTORY_SAVE_TYPE) \ 00000024 ........ LDR R1,??DataTable365 ;; 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 8829 { 8830 if(HISTORY_TYPE) \ 00000050 01002DE9 PUSH {R0} \ 00000054 00005CE3 CMP R12,#+0 \ 00000058 0500000A BEQ ??OpenLogfile_3 8831 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 8832 else 8833 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 8834 } 8835 else 8836 { 8837 if(HISTORY_TYPE) \ ??OpenLogfile_2: \ 0000008C 00005CE3 CMP R12,#+0 \ 00000090 0200000A BEQ ??OpenLogfile_6 8838 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 8839 else 8840 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 8841 } 8842 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 8843 } 8844 FreeWS(ws); \ ??OpenLogfile_0: \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 290100EF SWI +297 8845 GeneralFuncF1(1); \ 000000C8 0100A0E3 MOV R0,#+1 \ 000000CC 3B0100EF SWI +315 8846 } \ 000000D0 3080BDE8 POP {R4,R5,PC} ;; return \ ??OpenLogfile_1: \ 000000D4 ........ DC32 HISTORY_SAVE_TYPE \ 000000D8 ........ DC32 HISTORY_TYPE \ 000000DC ........ DC32 `?` \ 000000E0 ........ DC32 HIST_PATH 8847 \ In segment CODE, align 4, keep-with-next 8848 void ClearLog(GUI *data/*,void *dummy*/) 8849 { \ ClearLog: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 8850 EDITCONTROL ec; 8851 EDCHAT_STRUCT *ed_struct; 8852 WSHDR *ws; 8853 CLIST *t; 8854 8855 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 8856 8857 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 8858 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 8859 { 8860 ws=AllocWS(1); \ 00000030 0100A0E3 MOV R0,#+1 \ 00000034 250100EF SWI +293 \ 00000038 0050A0E1 MOV R5,R0 8861 CutWSTR(ws,0); \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 260100EF SWI +294 8862 8863 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 8864 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000050 040094E5 LDR R0,[R4, #+4] \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 810100EF SWI +385 8865 8866 FreeWS(ws); \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 290100EF SWI +297 8867 GeneralFuncF1(1); \ 00000064 1D0000EA B ??ClearLog_1 8868 } 8869 else 8870 { 8871 8872 if ((t=ed_struct->ed_contact)) \ ??ClearLog_0: \ 00000068 005094E5 LDR R5,[R4, #+0] \ 0000006C 000055E3 CMP R5,#+0 \ 00000070 1C00000A BEQ ??ClearLog_2 8873 { 8874 if (t->log) \ 00000074 940095E5 LDR R0,[R5, #+148] \ 00000078 0060A0E3 MOV R6,#+0 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 1200000A BEQ ??ClearLog_3 8875 { 8876 FreeLOGQ(&t->log); \ 00000084 940085E2 ADD R0,R5,#+148 \ 00000088 ........ BL FreeLOGQ 8877 t->msg_count=0; \ 0000008C A46085E5 STR R6,[R5, #+164] 8878 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 8879 { 8880 while(ed_struct->ed_answer!=2) 8881 { 8882 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??ClearLog_5: \ 000000AC 040094E5 LDR R0,[R4, #+4] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 D10100EF SWI +465 8883 ed_struct->ed_answer--; \ 000000B8 080094E5 LDR R0,[R4, #+8] \ 000000BC 010040E2 SUB R0,R0,#+1 \ 000000C0 080084E5 STR R0,[R4, #+8] 8884 } \ ??ClearLog_4: \ 000000C4 080094E5 LDR R0,[R4, #+8] \ 000000C8 020050E3 CMP R0,#+2 \ 000000CC F6FFFF1A BNE ??ClearLog_5 8885 } 8886 } 8887 t->isactive=0; //by BoBa 18.06.07 \ ??ClearLog_3: \ 000000D0 A06085E5 STR R6,[R5, #+160] 8888 RecountMenu(t,1); \ 000000D4 0110A0E3 MOV R1,#+1 \ 000000D8 0500A0E1 MOV R0,R5 \ 000000DC ........ BL RecountMenu 8889 GeneralFuncF1(1); \ ??ClearLog_1: \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 3B0100EF SWI +315 8890 } 8891 } 8892 } \ ??ClearLog_2: \ 000000E8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000EC 7080BDE8 POP {R4-R6,PC} ;; return 8893 \ In segment CODE, align 4, keep-with-next 8894 void ecmenu_ghook(void *data, int cmd) 8895 { \ ecmenu_ghook: \ 00000000 00402DE9 PUSH {LR} 8896 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 8897 { 8898 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 8899 } 8900 } \ 00000010 0080BDE8 POP {PC} ;; return 8901 \ In segment DATA_C, align 4, align-sorted 8902 static const MENUITEM_DESC ecmenu_ITEMS[EC_MNU_MAX]= \ ecmenu_ITEMS: \ 00000000 00000000.... DC32 0H, `?` \ icons: \ 00000008 DS8 132 \ 0000008C REQUIRE `?` \ MAINCSM: \ 0000008C DS8 72 \ 000000D4 REQUIRE `?` \ gipc: \ 000000D4 DS8 12 \ 000000E0 REQUIRE `?` \ tmr_gipc: \ 000000E0 DS8 12 \ 000000EC REQUIRE `?` \ def_set: \ 000000EC DS8 388 \ 00000270 REQUIRE `?` \ screen3: \ 00000270 DS8 8 \ 00000278 REQUIRE `?` \ screen4: \ 00000278 DS8 8 \ 00000280 REQUIRE `?` \ main_d: \ 00000280 DS8 4 \ 00000284 REQUIRE `?` \ align: \ 00000284 DS8 4 \ 00000288 REQUIRE `?` \ canvasdata: \ 00000288 DS8 4 \ 0000028C REQUIRE `?` \ paused_height: \ 0000028C DS8 4 \ 00000290 REQUIRE `?` \ wsBuffer: \ 00000290 DS8 4 \ 00000294 REQUIRE `?` \ uins: \ 00000294 DS8 4 \ 00000298 REQUIRE `?` \ saver_on: \ 00000298 DS8 4 \ 0000029C REQUIRE `?` \ PrintTimer: \ 0000029C DS8 4 \ 000002A0 REQUIRE `?` \ curping: \ 000002A0 DS8 4 \ 000002A4 REQUIRE `?` \ sendq_l: \ 000002A4 DS8 4 \ 000002A8 REQUIRE `?` \ sendq_p: \ 000002A8 DS8 4 \ 000002AC REQUIRE `?` \ main_count: \ 000002AC DS8 4 \ 000002B0 REQUIRE `?` \ main2_count: \ 000002B0 DS8 4 \ 000002B4 REQUIRE `?` \ DoRefreshCL: \ 000002B4 DS8 4 \ 000002B8 REQUIRE `?` \ ifJustNowRefresh: \ 000002B8 DS8 4 \ 000002BC REQUIRE `?` \ Is_PING_On: \ 000002BC DS8 4 \ 000002C0 REQUIRE `?` \ Is_INC_On: \ 000002C0 DS8 4 \ 000002C4 REQUIRE `?` \ Is_ILU_On: \ 000002C4 DS8 4 \ 000002C8 REQUIRE `?` \ Is_Double_Vibra_On: \ 000002C8 DS8 4 \ 000002CC REQUIRE `?` \ total_unread2: \ 000002CC DS8 4 \ 000002D0 REQUIRE `?` \ maincsm_id: \ 000002D0 DS8 4 \ 000002D4 REQUIRE `?` \ maingui_id: \ 000002D4 DS8 4 \ 000002D8 REQUIRE `?` \ contactlist_menu_id: \ 000002D8 DS8 4 \ 000002DC REQUIRE `?` \ SENDMSGCOUNT: \ 000002DC DS8 4 \ 000002E0 REQUIRE `?` \ IsActiveUp: \ 000002E0 DS8 4 \ 000002E4 REQUIRE `?` \ Is_Vibra_Enabled: \ 000002E4 DS8 4 \ 000002E8 REQUIRE `?` \ Is_Id3tag_Enabled: \ 000002E8 DS8 4 \ 000002EC REQUIRE `?` \ S_ICONS: \ 000002EC DS8 136 \ 00000374 REQUIRE `?` \ CurrentStatus: \ 00000374 DS8 4 \ 00000378 REQUIRE `?` \ CurrentXStatus: \ 00000378 DS8 4 \ 0000037C REQUIRE `?` \ ews: \ 0000037C DS8 4 \ 00000380 REQUIRE `?` \ msg_away_timer: \ 00000380 DS8 4 \ 00000384 REQUIRE `?` \ away_m: \ 00000384 DS8 4 \ 00000388 REQUIRE `?` \ status_rem: \ 00000388 DS8 4 \ 0000038C REQUIRE `?` \ change_back_status: \ 0000038C DS8 4 \ 00000390 REQUIRE `?` \ Show_XTX: \ 00000390 DS8 4 \ 00000394 REQUIRE `?` \ uptimeHour: \ 00000394 DS8 4 \ 00000398 REQUIRE `?` \ uptimeMin: \ 00000398 DS8 4 \ 0000039C REQUIRE `?` \ uptimeSec: \ 0000039C DS8 4 \ 000003A0 REQUIRE `?` \ tracktimer: \ 000003A0 DS8 4 \ 000003A4 REQUIRE `?` \ input_awaymsg_id: \ 000003A4 DS8 4 \ 000003A8 REQUIRE `?` \ XStatusImg: \ 000003A8 DS8 140 \ 00000434 REQUIRE `?` \ silenthide: \ 00000434 DS8 4 \ 00000438 REQUIRE `?` \ disautorecconect: \ 00000438 DS8 4 \ 0000043C REQUIRE `?` \ Is_Sounds_Enabled: \ 0000043C DS8 4 \ 00000440 REQUIRE `?` \ Is_Show_Offline: \ 00000440 DS8 4 \ 00000444 REQUIRE `?` \ Is_Show_Groups: \ 00000444 DS8 4 \ 00000448 REQUIRE `?` \ CurrentPrivateStatus: \ 00000448 DS8 4 \ 0000044C REQUIRE `?` \ vibra_count: \ 0000044C DS8 4 \ 00000450 REQUIRE `?` \ templates_chars: \ 00000450 DS8 4 \ 00000454 REQUIRE `?` \ templates_lines: \ 00000454 DS8 4 \ 00000458 REQUIRE `?` \ RXstate: \ 00000458 DS8 4 \ 0000045C REQUIRE `?` \ connect_state: \ 0000045C DS8 4 \ 00000460 REQUIRE `?` \ sock: \ 00000460 DS8 4 \ 00000464 REQUIRE `?` \ TOTALRECEIVED: \ 00000464 DS8 4 \ 00000468 REQUIRE `?` \ TOTALSENDED: \ 00000468 DS8 4 \ 0000046C REQUIRE `?` \ ALLTOTALRECEIVED: \ 0000046C DS8 4 \ 00000470 REQUIRE `?` \ ALLTOTALSENDED: \ 00000470 DS8 4 \ 00000474 REQUIRE `?` \ is_gprs_online: \ 00000474 DS8 4 \ 00000478 REQUIRE `?` \ total_unread: \ 00000478 DS8 4 \ 0000047C REQUIRE `?` \ cltop: \ 0000047C DS8 4 \ 00000480 REQUIRE `?` \ GROUP_CACHE: \ 00000480 DS8 4 \ 00000484 REQUIRE `?` \ edchat_id: \ 00000484 DS8 4 \ 00000488 REQUIRE `?` \ tenseconds_to_ping: \ 00000488 DS8 4 \ 0000048C REQUIRE `?` \ on_off_timer: \ 0000048C DS8 4 \ 00000490 REQUIRE `?` \ kopa_online: \ 00000490 DS8 4 \ 00000494 REQUIRE `?` \ kopa_kontaktu: \ 00000494 DS8 4 \ 00000498 REQUIRE `?` \ DNR_ID: \ 00000498 DS8 4 \ 0000049C REQUIRE `?` \ DNR_TRIES: \ 0000049C DS8 4 \ 000004A0 REQUIRE `?` \ host_counter: \ 000004A0 DS8 4 \ 000004A4 REQUIRE `?` \ ping_time: \ 000004A4 DS8 4 \ 000004A8 REQUIRE `?` \ ShowLoadScreen: \ 000004A8 DS8 4 \ 000004AC REQUIRE `?` \ main_msg_timer2: \ 000004AC DS8 4 \ 000004B0 REQUIRE `?` \ NEW_MSG: \ 000004B0 DS8 4 \ 000004B4 REQUIRE `?` \ time_to_stop_t9: \ 000004B4 DS8 4 \ 000004B8 REQUIRE `?` \ comanda: \ 000004B8 DS8 4 \ 000004BC REQUIRE `?` \ INC_show: \ 000004BC DS8 4 \ 000004C0 REQUIRE `?` \ INC_show2: \ 000004C0 DS8 4 \ 000004C4 REQUIRE `?` \ pp_icon: \ 000004C4 DS8 4 \ 000004C8 REQUIRE `?` \ pp_xicon: \ 000004C8 DS8 4 \ 000004CC REQUIRE `?` \ INC_show3: \ 000004CC DS8 4 \ 000004D0 REQUIRE `?` \ curpos: \ 000004D0 DS8 4 \ 000004D4 REQUIRE `?` \ uinContact: \ 000004D4 DS8 4 \ 000004D8 REQUIRE `?` \ hy: \ 000004D8 DS8 4 \ 000004DC REQUIRE `?` \ clfont: \ 000004DC DS8 4 \ 000004E0 REQUIRE `?` \ i_curpos: \ 000004E0 DS8 4 \ 000004E4 REQUIRE `?` \ itemFromDisp: \ 000004E4 DS8 4 \ 000004E8 REQUIRE `?` \ totalItems: \ 000004E8 DS8 4 \ 000004EC REQUIRE `?` \ curpage: \ 000004EC DS8 4 \ 000004F0 REQUIRE `?` \ collum: \ 000004F0 DS8 4 \ 000004F4 REQUIRE `?` \ shot_soft: \ 000004F4 DS8 4 \ 000004F8 REQUIRE `?` \ shot_header: \ 000004F8 DS8 4 \ 000004FC REQUIRE `?` \ clstartItem: \ 000004FC DS8 4 \ 00000500 REQUIRE `?` \ _to_develop: \ 00000500 DS8 4 \ 00000504 REQUIRE `?` \ errornumber: \ 00000504 DS8 4 \ 00000508 REQUIRE `?` \ iconmsg: \ 00000508 DS8 4 \ 0000050C REQUIRE `?` \ old_ed_redraw: \ 0000050C DS8 4 \ 00000510 REQUIRE `?` \ 00000510 DS8 64 \ 00000550 REQUIRE `?` \ elf_path: \ 00000550 DS8 256 \ 00000650 REQUIRE `?` \ ContactT9Key: \ 00000650 DS8 32 \ 00000670 REQUIRE `?` \ menuproc: \ 00000670 DS8 24 \ 00000688 REQUIRE `?` \ ixtext: \ 00000688 DS8 256 \ 00000788 REQUIRE `?` \ talk_sound: \ 00000788 DS8 128 \ 00000808 REQUIRE `?` \ unread_msg_info: \ 00000808 DS8 64 \ 00000848 REQUIRE `?` \ last_msg_buffer: \ 00000848 DS8 4096 \ 00001848 REQUIRE `?` \ prmsg: \ 00001848 DS8 256 \ 00001948 REQUIRE `?` \ ping_tmr: \ 00001948 DS8 16 \ 00001958 REQUIRE `?` \ PINGO: \ 00001958 DS8 256 \ 00001A58 REQUIRE `?` \ away_msg: \ 00001A58 DS8 264 \ 00001B60 REQUIRE `?` \ away_msg_time: \ 00001B60 DS8 64 \ 00001BA0 REQUIRE `?` \ away_msg_time_dace: \ 00001BA0 DS8 16 \ 00001BB0 REQUIRE `?` \ tim_zone: \ 00001BB0 DS8 16 \ 00001BC0 REQUIRE `?` \ away_tmr: \ 00001BC0 DS8 16 \ 00001BD0 REQUIRE `?` \ autoChangeStatus: \ 00001BD0 DS8 16 \ 00001BE0 REQUIRE `?` \ remind_tmr: \ 00001BE0 DS8 16 \ 00001BF0 REQUIRE `?` \ uptime_tmr: \ 00001BF0 DS8 16 \ 00001C00 REQUIRE `?` \ tracktmr: \ 00001C00 DS8 16 \ 00001C10 REQUIRE `?` \ onlineTime: \ 00001C10 DS8 128 \ 00001C90 REQUIRE `?` \ logmsg: \ 00001C90 DS8 256 \ 00001D90 REQUIRE `?` \ logmsg2: \ 00001D90 DS8 256 \ 00001E90 REQUIRE `?` \ tmr_illumination: \ 00001E90 DS8 16 \ 00001EA0 REQUIRE `?` \ tmr_vibra: \ 00001EA0 DS8 16 \ 00001EB0 REQUIRE `?` \ reconnect_tmr: \ 00001EB0 DS8 16 \ 00001EC0 REQUIRE `?` \ tmr_active: \ 00001EC0 DS8 16 \ 00001ED0 REQUIRE `?` \ clmenu_sk_r: \ 00001ED0 DS8 16 \ 00001EE0 REQUIRE `?` \ on_off_buf: \ 00001EE0 DS8 128 \ 00001F60 REQUIRE `?` \ hostbuf2: \ 00001F60 DS8 128 \ 00001FE0 REQUIRE `?` \ hostname: \ 00001FE0 DS8 128 \ 00002060 REQUIRE `?` \ I_UIN: \ 00002060 DS8 12 \ 0000206C REQUIRE `?` \ sds: \ 0000206C DS8 8 \ 00002074 REQUIRE `?` \ mp3: \ 00002074 DS8 4 \ 00002078 REQUIRE `?` \ wav: \ 00002078 DS8 4 \ 0000207C REQUIRE `?` \ amr: \ 0000207C DS8 4 \ 00002080 REQUIRE `?` \ a_txt: \ 00002080 DS8 48 \ 000020B0 REQUIRE `?` \ s_txt: \ 000020B0 DS8 48 \ 000020E0 REQUIRE `?` \ d_txt: \ 000020E0 DS8 48 \ 00002110 REQUIRE `?` \ f_txt: \ 00002110 DS8 48 \ 00002140 REQUIRE `?` \ g_txt: \ 00002140 DS8 48 \ 00002170 REQUIRE `?` \ develop: \ 00002170 DS8 16 \ 00002180 REQUIRE `?` \ requests1: \ 00002180 DS8 24 \ 00002198 REQUIRE `?` \ requests2: \ 00002198 DS8 20 \ 000021AC REQUIRE `?` \ requests3: \ 000021AC DS8 24 \ 000021C4 REQUIRE `?` \ requests4: \ 000021C4 DS8 20 \ 000021D8 REQUIRE `?` \ requests6: \ 000021D8 DS8 24 \ 000021F0 REQUIRE `?` \ mod_info: \ 000021F0 DS8 264 \ 000022F8 REQUIRE `?` \ show_nick: \ 000022F8 DS8 32 \ 00002318 REQUIRE `?` \ onContact: \ 00002318 DS8 64 \ 00002358 REQUIRE `?` \ incs2: \ 00002358 DS8 16 \ 00002368 REQUIRE `?` \ OffContact: \ 00002368 DS8 64 \ 000023A8 REQUIRE `?` \ incs3: \ 000023A8 DS8 16 \ 000023B8 REQUIRE `?` \ tm22: \ 000023B8 DS8 16 \ 000023C8 REQUIRE `?` \ clrBlack: \ 000023C8 DS8 4 \ 000023CC REQUIRE `?` \ clrWhite: \ 000023CC DS8 4 \ 000023D0 REQUIRE `?` \ clrRed: \ 000023D0 DS8 4 \ 000023D4 REQUIRE `?` \ transparent: \ 000023D4 DS8 4 \ 000023D8 REQUIRE `?` \ blue: \ 000023D8 DS8 8 \ 000023E0 REQUIRE `?` 8917 { 8918 Quote, 8919 Quote2, 8920 AddSmile, 8921 GetShortInfo, 8922 AddCurContact, 8923 SendAuthReq, 8924 SendAuthGrant, 8925 OpenLogfile, 8926 ClearLog, 8927 }; 8928 8929 char ecm_contactname[64]; \ ecm_contactname: \ 000023E0 DS8 64 \ 00002420 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 \ lastKey: \ 00000000 DS8 4 \ 00000004 REQUIRE `?` 8930 \ In segment DATA_C, align 4, align-sorted 8931 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 8932 8933 static const MENU_DESC ecmenu_STRUCT= 8934 { 8935 8,NULL,ecmenu_ghook,NULL, 8936 menusoftkeys, 8937 &menu_skt, 8938 0, 8939 NULL, 8940 ecmenu_ITEMS, 8941 ecmenu_HNDLS, 8942 EC_MNU_MAX 8943 }; 8944 \ In segment CODE, align 4, keep-with-next 8945 void ec_menu(EDCHAT_STRUCT *ed_struct) 8946 { \ ec_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 28D04DE2 SUB SP,SP,#+40 \ 00000008 0040A0E1 MOV R4,R0 8947 CLIST *t; 8948 int to_remove[EC_MNU_MAX+1]; 8949 int remove=0; 8950 if ((t=ed_struct->ed_contact)) \ 0000000C 001094E5 LDR R1,[R4, #+0] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 4D00000A BEQ ??ec_menu_0 8951 { 8952 if (t->name) \ 00000018 ........ LDR R5,??DataTable366 ;; i_rc \ 0000001C E000A0E3 MOV R0,#+224 \ 00000020 8C0D80E3 ORR R0,R0,#0x2300 \ 00000024 050080E0 ADD R0,R0,R5 \ 00000028 142091E2 ADDS R2,R1,#+20 \ 0000002C 0300000A BEQ ??ec_menu_1 8953 { 8954 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 8955 } 8956 else 8957 { 8958 sprintf(ecm_contactname,"%u",t->uin); \ ??ec_menu_1: \ 00000040 0C2091E5 LDR R2,[R1, #+12] \ 00000044 431F8FE2 ADR R1,??ec_menu_3 ;; "%u" \ 00000048 160000EF SWI +22 8959 } 8960 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 8961 { 8962 to_remove[++remove]=0; \ 00000068 04108DE5 STR R1,[SP, #+4] 8963 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 8964 } 8965 else 8966 { 8967 // to_remove[++remove]=1; 8968 to_remove[++remove]=2; \ ??ec_menu_4: \ 0000007C 0160A0E3 MOV R6,#+1 \ 00000080 04208DE5 STR R2,[SP, #+4] 8969 } 8970 8971 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 8972 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] 8973 8974 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 5C0495E5 LDR R0,[R5, #+1116] \ 000000B0 030050E3 CMP R0,#+3 \ 000000B4 1000000A BEQ ??ec_menu_8 8975 { 8976 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] 8977 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] 8978 to_remove[++remove]=4; \ 000000D4 010080E2 ADD R0,R0,#+1 \ 000000D8 0430A0E3 MOV R3,#+4 \ 000000DC 003182E7 STR R3,[R2, +R0, LSL #+2] 8979 to_remove[++remove]=5; \ 000000E0 010080E2 ADD R0,R0,#+1 \ 000000E4 0530A0E3 MOV R3,#+5 \ 000000E8 003182E7 STR R3,[R2, +R0, LSL #+2] 8980 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] 8981 } 8982 8983 patch_header(&ecmenu_HDR); \ ??ec_menu_8: \ 000000FC 58509FE5 LDR R5,??ec_menu_3+0x4 ;; ecmenu_HDR \ 00000100 001085E5 STR R1,[R5, #+0] \ 00000104 888100EF SWI +33160 \ 00000108 010040E2 SUB R0,R0,#+1 \ 0000010C B400C5E1 STRH R0,[R5, #+4] \ 00000110 8A8100EF SWI +33162 \ 00000114 010040E2 SUB R0,R0,#+1 \ 00000118 B600C5E1 STRH R0,[R5, #+6] 8984 to_remove[0]=remove; \ 0000011C 00608DE5 STR R6,[SP, #+0] 8985 CreateMenu(0,0,&ecmenu_STRUCT,&ecmenu_HDR,0,EC_MNU_MAX,ed_struct,to_remove); \ 00000120 0D00A0E1 MOV R0,SP \ 00000124 01002DE9 PUSH {R0} \ 00000128 10002DE9 PUSH {R4} \ 0000012C 0530A0E1 MOV R3,R5 \ 00000130 0900A0E3 MOV R0,#+9 \ 00000134 01002DE9 PUSH {R0} \ 00000138 142085E2 ADD R2,R5,#+20 \ 0000013C 0010A0E3 MOV R1,#+0 \ 00000140 0000A0E3 MOV R0,#+0 \ 00000144 01002DE9 PUSH {R0} \ 00000148 520100EF SWI +338 \ 0000014C 10D08DE2 ADD SP,SP,#+16 8986 } 8987 } \ ??ec_menu_0: \ 00000150 28D08DE2 ADD SP,SP,#+40 ;; stack cleaning \ 00000154 7080BDE8 POP {R4-R6,PC} ;; return \ ??ec_menu_3: \ 00000158 25750000 DC8 "%u",+0 \ 0000015C ........ DC32 ecmenu_HDR 8988 8989 \ In segment CODE, align 4, keep-with-next 8990 void AskNickAndAddContact(EDCHAT_STRUCT *ed_struct) 8991 { 8992 CreateAddContactGrpDialog(ed_struct->ed_contact); \ AskNickAndAddContact: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 ........ _BF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA ;; tailcall 8993 } 8994 \ In segment CODE, align 4, keep-with-next 8995 void AddSmile(GUI *data) 8996 { \ AddSmile: \ 00000000 00402DE9 PUSH {LR} 8997 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 8998 CreateSmileSelectGUI(ed_struct); \ 00000008 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 8999 GeneralFuncF1(1); \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0100EF SWI +315 9000 } \ 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 \ ??DataTable32: \ 00000000 ........ DC32 ICON_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable33: \ 00000000 ........ DC32 icons_names \ In segment CODE, align 4, keep-with-next \ ??DataTable34: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable41: \ 00000000 ........ DC32 def_setting \ 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 \ ??DataTable60: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable61: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable63: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable65: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable67: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable68: \ 00000000 ........ DC32 suc_config_name \ In segment CODE, align 4, keep-with-next \ ??DataTable69: \ 00000000 ........ DC32 suc_config_name_mod \ In segment CODE, align 4, keep-with-next \ ??DataTable70: \ 00000000 ........ DC32 janis \ In segment CODE, align 4, keep-with-next \ ??DataTable72: \ 00000000 ........ DC32 i_rc + 1148 \ In segment CODE, align 4, keep-with-next \ ??DataTable74: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable75: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable76: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable79: \ 00000000 ........ DC32 sndLostConn \ In segment CODE, align 4, keep-with-next \ ??DataTable81: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable83: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable84: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable86: \ 00000000 ........ DC32 ignor_list \ In segment CODE, align 4, keep-with-next \ ??DataTable87: \ 00000000 ........ DC32 extended_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable88: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable89: \ 00000000 ........ DC32 ext_type_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable90: \ 00000000 ........ DC32 Canvas + 11 \ In segment CODE, align 4, keep-with-next \ ??DataTable91: \ 00000000 ........ DC32 janis \ In segment CODE, align 4, keep-with-next \ ??DataTable93: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable95: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable96: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable97: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable98: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable108: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable109: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable110: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable112: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable113: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable114: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable115: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable116: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable117: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable118: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable119: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable125: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable128: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable130: \ 00000000 ........ DC32 CmdMenuHeader \ In segment CODE, align 4, keep-with-next \ ??DataTable131: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable132: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable134: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable135: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable136: \ 00000000 ........ DC32 ignor_list \ In segment CODE, align 4, keep-with-next \ ??DataTable137: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable138: \ 00000000 ........ DC32 awayMsg \ In segment CODE, align 4, keep-with-next \ ??DataTable139: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable145: \ 00000000 ........ DC32 PopupFont \ In segment CODE, align 4, keep-with-next \ ??DataTable146: \ 00000000 ........ DC32 NumStatusToIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable147: \ 00000000 ........ DC32 PopupBGCl \ In segment CODE, align 4, keep-with-next \ ??DataTable149: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable152: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable153: \ 00000000 ........ DC32 isLogStatusChange \ In segment CODE, align 4, keep-with-next \ ??DataTable154: \ 00000000 ........ DC32 extended_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable155: \ 00000000 ........ DC32 ext_type_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable156: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable157: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable160: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable161: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable162: \ 00000000 ........ DC32 Is_SMARTCPU_On \ In segment CODE, align 4, keep-with-next \ ??DataTable165: \ 00000000 ........ DC32 process_active_timer \ In segment CODE, align 4, keep-with-next \ ??DataTable166: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable168: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable178: \ 00000000 ........ DC32 isSystemFont \ In segment CODE, align 4, keep-with-next \ ??DataTable179: \ 00000000 ........ DC32 pngFont \ In segment CODE, align 4, keep-with-next \ ??DataTable180: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable182: \ 00000000 ........ DC32 i_rc + 1236 \ In segment CODE, align 4, keep-with-next \ ??DataTable185: \ 00000000 ........ DC32 i_rc + 9172 \ In segment CODE, align 4, keep-with-next \ ??DataTable189: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable193: \ 00000000 ........ DC32 PNG_SOFTKEY \ In segment CODE, align 4, keep-with-next \ ??DataTable196: \ 00000000 ........ DC32 menutext \ In segment CODE, align 4, keep-with-next \ ??DataTable197: \ 00000000 ........ DC32 SoftBackgrClr \ In segment CODE, align 4, keep-with-next \ ??DataTable198: \ 00000000 ........ DC32 SoftFontClr \ In segment CODE, align 4, keep-with-next \ ??DataTable200: \ 00000000 ........ DC32 PNG_HEADER \ In segment CODE, align 4, keep-with-next \ ??DataTable201: \ 00000000 ........ DC32 HeadFont \ In segment CODE, align 4, keep-with-next \ ??DataTable204: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable205: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable207: \ 00000000 ........ DC32 isSystemFont \ In segment CODE, align 4, keep-with-next \ ??DataTable208: \ 00000000 ........ DC32 pngFont \ In segment CODE, align 4, keep-with-next \ ??DataTable211: \ 00000000 ........ DC32 VIEW_MODE \ In segment CODE, align 4, keep-with-next \ ??DataTable213: \ 00000000 ........ DC32 Canvas + 11 \ In segment CODE, align 4, keep-with-next \ ??DataTable214: \ 00000000 ........ DC32 ShowProcessSend \ In segment CODE, align 4, keep-with-next \ ??DataTable215: \ 00000000 ........ DC32 isLogStatusChange \ In segment CODE, align 4, keep-with-next \ ??DataTable221: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable222: \ 00000000 ........ DC32 SOFT_MODE \ In segment CODE, align 4, keep-with-next \ ??DataTable228: \ 00000000 ........ DC32 VIEW_MODE \ In segment CODE, align 4, keep-with-next \ ??DataTable229: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable234: \ 00000000 ........ DC32 isSystemFont \ In segment CODE, align 4, keep-with-next \ ??DataTable235: \ 00000000 ........ DC32 pngFont \ In segment CODE, align 4, keep-with-next \ ??DataTable239: \ 00000000 ........ DC32 IsInvertSoftKey \ In segment CODE, align 4, keep-with-next \ ??DataTable242: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable243: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable245: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable246: \ 00000000 ........ DC32 process_active_timer \ In segment CODE, align 4, keep-with-next \ ??DataTable247: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable249: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable250: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable251: \ 00000000 ........ DC32 ClearSendQ \ In segment CODE, align 4, keep-with-next \ ??DataTable252: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable254: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable255: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable257: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable258: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable261: \ 00000000 ........ DC32 Is_SMARTCPU_On \ In segment CODE, align 4, keep-with-next \ ??DataTable263: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable264: \ 00000000 ........ DC32 showAwayIdle \ In segment CODE, align 4, keep-with-next \ ??DataTable267: \ 00000000 ........ DC32 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable270: \ 00000000 ........ DC32 suc_config_name_mod \ In segment CODE, align 4, keep-with-next \ ??DataTable277: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable278: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable280: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable281: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable283: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable284: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable285: \ 00000000 ........ DC32 sndLostConn \ In segment CODE, align 4, keep-with-next \ ??DataTable286: \ 00000000 ........ DC32 ClearSendQ \ In segment CODE, align 4, keep-with-next \ ??DataTable288: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable290: \ 00000000 ........ DC32 ShowStatusIcon \ In segment CODE, align 4, keep-with-next \ ??DataTable294: \ 00000000 ........ DC32 NumStatusToIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable298: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable299: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable300: \ 00000000 ........ DC32 suc_config_name \ In segment CODE, align 4, keep-with-next \ ??DataTable301: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable302: \ 00000000 ........ DC32 fontpath \ In segment CODE, align 4, keep-with-next \ ??DataTable303: \ 00000000 ........ DC32 fontpath2 \ In segment CODE, align 4, keep-with-next \ ??DataTable304: \ 00000000 ........ DC32 fontpath3 \ In segment CODE, align 4, keep-with-next \ ??DataTable305: \ 00000000 ........ DC32 fontpath4 \ In segment CODE, align 4, keep-with-next \ ??DataTable306: \ 00000000 ........ DC32 isSystemFont \ In segment CODE, align 4, keep-with-next \ ??DataTable307: \ 00000000 ........ DC32 pngFont \ In segment CODE, align 4, keep-with-next \ ??DataTable308: \ 00000000 ........ DC32 PNG_SOFTKEY \ In segment CODE, align 4, keep-with-next \ ??DataTable309: \ 00000000 ........ DC32 PNG_HEADER \ In segment CODE, align 4, keep-with-next \ ??DataTable310: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable311: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable312: \ 00000000 ........ DC32 Pinger2 \ In segment CODE, align 4, keep-with-next \ ??DataTable313: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable315: \ 00000000 ........ DC32 i_rc + 1148 \ In segment CODE, align 4, keep-with-next \ ??DataTable316: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable318: \ 00000000 ........ DC32 IsMultiBuffer \ In segment CODE, align 4, keep-with-next \ ??DataTable320: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable321: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable323: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable325: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable328: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable329: \ 00000000 ........ DC32 IsMultiBuffer \ In segment CODE, align 4, keep-with-next \ ??DataTable332: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable333: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable334: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable335: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable336: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable339: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable340: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable343: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable344: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable347: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable349: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable350: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable351: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable352: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable354: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable360: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable361: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable362: \ 00000000 ........ DC32 i_rc + 1116 \ In segment CODE, align 4, keep-with-next \ ??DataTable363: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable364: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable365: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable366: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable367: \ 00000000 ........ DC32 GetTags \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00000008 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000018 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000028 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000038 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000048 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000058 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000068 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000078 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 \ `?`: \ 0000008C ............ DC32 maincsm_onmessage, maincsm_oncreate, 0, 0, 0, 0, maincsm_onclose \ ....00000000 \ 000000000000 \ 000000000000 \ ........ \ 000000A8 2C0000000100 DC32 44, 1, minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ 0000........ \ ........CCCC \ AA5555AA3333 \ 00000000 \ 000000C4 8B00 DC16 139 \ 000000C6 0000 DC8 0, 0 \ 000000C8 49636F6E4261 DC8 "IconBar" \ 7200 \ 000000D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000000E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000000EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000010C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000011C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000012C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000013C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000014C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000015C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000016C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000017C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000018C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000019C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000020C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000021C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000022C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000023C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000024C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000025C 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 \ `?`: \ 00000270 0000 DC8 0, 0 \ 00000272 0800 DC16 8 \ 00000274 ........ DC32 `?` \ `?`: \ 00000278 0000 DC8 0, 0 \ 0000027A 0800 DC16 8 \ 0000027C ........ DC32 `?` \ `?`: \ 00000280 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000284 00000000 DC32 0 \ `?`: \ 00000288 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000028C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000290 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000294 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000298 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000029C 00000000 DC32 0 \ `?`: \ 000002A0 00000000 DC32 0 \ `?`: \ 000002A4 00000000 DC32 0 \ `?`: \ 000002A8 00000000 DC32 0H \ `?`: \ 000002AC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002B4 00000000 DC32 0 \ `?`: \ 000002B8 00000000 DC32 0 \ `?`: \ 000002BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002D4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002D8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002DC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002E0 00000000 DC32 0 \ `?`: \ 000002E4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002E8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000030C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000031C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000032C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000033C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000034C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000035C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000036C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00000374 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000378 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000037C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000380 00000000 DC32 0 \ `?`: \ 00000384 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000388 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000038C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000390 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000394 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000398 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000039C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003A4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000408 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000418 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000428 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00000434 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000438 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000043C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000440 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000444 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000448 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000044C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000450 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000454 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000458 F6FFFFFF DC32 -10 \ `?`: \ 0000045C 00000000 DC32 0 \ `?`: \ 00000460 FFFFFFFF DC32 -1 \ `?`: \ 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 01000000 DC32 1 \ `?`: \ 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 00000000 DC32 0 \ `?`: \ 00000490 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000494 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000498 00000000 DC32 0 \ `?`: \ 0000049C 03000000 DC32 3 \ `?`: \ 000004A0 00000000 DC32 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 DC8 0, 0, 0, 0 \ `?`: \ 000004C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004D4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004D8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004DC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004E0 01000000 DC32 1 \ `?`: \ 000004E4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004E8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004EC 01000000 DC32 1 \ `?`: \ 000004F0 00000000 DC32 0 \ `?`: \ 000004F4 00000000 DC32 0 \ `?`: \ 000004F8 00000000 DC32 0 \ `?`: \ 000004FC 00000000 DC32 0 \ `?`: \ 00000500 00000000 DC32 0 \ `?`: \ 00000504 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000508 01000000 DC32 1 \ `?`: \ 0000050C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000510 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000520 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000530 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000540 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000550 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000560 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000570 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000580 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000590 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000600 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000610 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000620 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000630 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000640 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000650 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000660 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000670 ............ DC32 RqtXText, ChangeVibraContact, ChangeSoundContact, ChangeAutoMsg \ ............ \ ........ \ 00000680 ........ DC32 ChangeShowXstatus \ 00000684 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000688 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000698 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000708 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000718 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000728 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000738 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000748 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000758 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000768 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000778 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000788 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000798 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000808 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000818 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000828 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000838 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000848 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000858 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000868 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000878 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000888 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000898 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000908 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000918 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000928 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000938 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000948 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000958 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000968 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000978 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000988 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000998 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ED8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001008 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001018 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001028 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001038 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001048 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001058 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001068 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001078 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001088 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001098 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001108 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001118 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001128 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001138 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001148 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001158 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001168 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001178 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001188 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001198 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001208 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001218 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001228 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001238 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001248 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001258 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001268 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001278 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001288 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001298 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001308 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001318 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001328 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001338 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001348 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001358 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001368 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001378 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001388 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001398 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001408 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001418 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001428 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001438 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001448 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001458 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001468 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001478 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001488 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001498 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001508 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001518 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001528 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001538 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001548 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001558 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001568 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001578 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001588 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001598 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001608 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001618 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001628 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001638 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001648 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001658 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001668 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001678 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001688 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001698 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001708 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001718 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001728 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001738 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001748 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001758 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001768 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001778 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001788 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001798 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001808 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001818 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001828 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001838 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001848 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001858 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001868 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001878 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001888 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001898 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001908 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001918 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001928 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001938 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001948 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001958 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001968 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001978 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001988 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001998 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00001B60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001BA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001BB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001BC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001BD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001BE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001BF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001C00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001C10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001C90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001D90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001E90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001EA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001EB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001EC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001ED0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001EE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001F60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001FE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002000 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002010 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002020 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002030 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002040 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002050 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002060 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 0000206C 257325642E25 DC8 "%s%d.%s" \ 7300 \ `?`: \ 00002074 6D703300 DC8 "mp3" \ `?`: \ 00002078 77617600 DC8 "wav" \ `?`: \ 0000207C 616D7200 DC8 "amr" \ `?`: \ 00002080 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002090 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000020A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000020B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000020C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000020D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000020E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000020F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002100 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002110 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002120 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002130 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002140 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002150 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002160 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002170 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002180 53656E64696E DC8 "Sending online time..." \ 67206F6E6C69 \ 6E652074696D \ 652E2E2E00 \ 00002197 00 DC8 0 \ `?`: \ 00002198 53656E64696E DC8 "Sending msg info..." \ 67206D736720 \ 696E666F2E2E \ 2E00 \ `?`: \ 000021AC 53656E64696E DC8 "Sending battery info..." \ 672062617474 \ 65727920696E \ 666F2E2E2E00 \ `?`: \ 000021C4 53656E64696E DC8 "Sending mod info..." \ 67206D6F6420 \ 696E666F2E2E \ 2E00 \ `?`: \ 000021D8 53656E64696E DC8 "Sending offline info..." \ 67206F66666C \ 696E6520696E \ 666F2E2E2E00 \ `?`: \ 000021F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002200 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002210 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002220 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002230 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002240 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002250 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002260 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002270 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002280 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002290 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000022A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000022B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000022C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000022D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000022E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000022F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 000022F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002308 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002318 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002328 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002338 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002348 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002358 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002368 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002378 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002388 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002398 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000023A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000023B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000023C8 00000064 DC8 0, 0, 0, 100 \ `?`: \ 000023CC FFFFFF64 DC8 255, 255, 255, 100 \ `?`: \ 000023D0 FF000064 DC8 255, 0, 0, 100 \ `?`: \ 000023D4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000023D8 0000FF6400 DC8 0, 0, 0FFH, 64H, 0 \ 000023DD 000000 DC8 0, 0, 0 \ `?`: \ 000023E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000023F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002400 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002410 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 FFFFFFFF DC32 -1 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 474D54202D31 DC8 "GMT -12:00" \ 323A303000 \ 0000000B 00 DC8 0 \ 0000000C 474D54202D31 DC8 "GMT -11:00" \ 313A303000 \ 00000017 00 DC8 0 \ 00000018 474D54202D31 DC8 "GMT -10:00" \ 303A303000 \ 00000023 00 DC8 0 \ 00000024 474D54202D30 DC8 "GMT -09:00" \ 393A303000 \ 0000002F 00 DC8 0 \ 00000030 474D54202D30 DC8 "GMT -08:00" \ 383A303000 \ 0000003B 00 DC8 0 \ 0000003C 474D54202D30 DC8 "GMT -07:00" \ 373A303000 \ 00000047 00 DC8 0 \ 00000048 474D54202D30 DC8 "GMT -06:00" \ 363A303000 \ 00000053 00 DC8 0 \ 00000054 474D54202D30 DC8 "GMT -05:00" \ 353A303000 \ 0000005F 00 DC8 0 \ 00000060 474D54202D30 DC8 "GMT -04:00" \ 343A303000 \ 0000006B 00 DC8 0 \ 0000006C 474D54202D30 DC8 "GMT -03:30" \ 333A333000 \ 00000077 00 DC8 0 \ 00000078 474D54202D30 DC8 "GMT -03:00" \ 333A303000 \ 00000083 00 DC8 0 \ 00000084 474D54202D30 DC8 "GMT -02:00" \ 323A303000 \ 0000008F 00 DC8 0 \ 00000090 474D54202D30 DC8 "GMT -01:00" \ 313A303000 \ 0000009B 00 DC8 0 \ 0000009C 474D54203030 DC8 "GMT 00:00" \ 3A303000 \ 000000A6 0000 DC8 0, 0 \ 000000A8 474D54202B30 DC8 "GMT +01:00" \ 313A303000 \ 000000B3 00 DC8 0 \ 000000B4 474D54202B30 DC8 "GMT +02:00" \ 323A303000 \ 000000BF 00 DC8 0 \ 000000C0 474D54202B30 DC8 "GMT +03:00" \ 333A303000 \ 000000CB 00 DC8 0 \ 000000CC 474D54202B30 DC8 "GMT +03:30" \ 333A333000 \ 000000D7 00 DC8 0 \ 000000D8 474D54202B30 DC8 "GMT +04:00" \ 343A303000 \ 000000E3 00 DC8 0 \ 000000E4 474D54202B30 DC8 "GMT +04:30" \ 343A333000 \ 000000EF 00 DC8 0 \ 000000F0 474D54202B30 DC8 "GMT +05:00" \ 353A303000 \ 000000FB 00 DC8 0 \ 000000FC 474D54202B30 DC8 "GMT +05:30" \ 353A333000 \ 00000107 00 DC8 0 \ 00000108 474D54202B30 DC8 "GMT +05:45" \ 353A343500 \ 00000113 00 DC8 0 \ 00000114 474D54202B30 DC8 "GMT +06:00" \ 363A303000 \ 0000011F 00 DC8 0 \ 00000120 474D54202B30 DC8 "GMT +06:30" \ 363A333000 \ 0000012B 00 DC8 0 \ 0000012C 474D54202B30 DC8 "GMT +07:00" \ 373A303000 \ 00000137 00 DC8 0 \ 00000138 474D54202B30 DC8 "GMT +08:00" \ 383A303000 \ 00000143 00 DC8 0 \ 00000144 474D54202B30 DC8 "GMT +09:00" \ 393A303000 \ 0000014F 00 DC8 0 \ 00000150 474D54202B30 DC8 "GMT +09:30" \ 393A333000 \ 0000015B 00 DC8 0 \ 0000015C 474D54202B31 DC8 "GMT +10:00" \ 303A303000 \ 00000167 00 DC8 0 \ 00000168 474D54202B31 DC8 "GMT +11:00" \ 313A303000 \ 00000173 00 DC8 0 \ 00000174 474D54202B31 DC8 "GMT +12:00" \ 323A303000 \ 0000017F 00 DC8 0 \ 00000180 474D54202B31 DC8 "GMT +13:00" \ 333A303000 \ 0000018B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4F6E6C696E65 DC8 "Online: %02d:%02d:%02d" \ 3A2025303264 \ 3A253032643A \ 2530326400 \ 00000017 00 DC8 0 \ 00000018 4F66666C696E DC8 "Offline" \ 6500 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 417761792066 DC8 "Away from [%s]" \ 726F6D205B25 \ 735D00 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 257400 DC8 "%t" \ 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 5C6C6F63616C DC8 "\\local.cl" \ 2E636C00 \ 0000000A 0000 DC8 0, 0 \ 0000000C 3B25643B2573 DC8 ";%d;%s;;;\015\012" \ 3B3B3B0D0A00 \ 00000018 536176656420 DC8 "Saved local.cl" \ 6C6F63616C2E \ 636C00 \ 00000027 00 DC8 0 \ 00000028 43616E277420 DC8 "Can't save local.cl" \ 73617665206C \ 6F63616C2E63 \ 6C00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 73656E642072 DC8 "send res %d" \ 657320256400 \ 0000000C 53656E642064 DC8 "Send delayed..." \ 656C61796564 \ 2E2E2E00 \ 0000001C 53656E642065 DC8 "Send error!" \ 72726F722100 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5369655F2530 DC8 "Sie_%04d" \ 346400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 257300 DC8 "%s" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25733A202573 DC8 "%s: %s" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 253032643A25 DC8 "%02d:%02d:%02d %02d.%02d %s:\015\012" \ 3032643A2530 \ 326420253032 \ 642E25303264 \ 2025733A0D0A \ 00 \ 0000001F 00 DC8 0 \ 00000020 253032643A25 DC8 "%02d:%02d:%02d %02d.%02d %s:" \ 3032643A2530 \ 326420253032 \ 642E25303264 \ 2025733A00 \ 0000003D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5C636D642E74 DC8 "\\cmd.txt" \ 787400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CEF2EAEBFEF7 DC8 "\316\362\352\353\376\367\345\355" \ E5ED00 \ 00000009 000000 DC8 0, 0, 0 \ 0000000C CDE5E2E8E4E8 DC8 "\315\345\342\350\344\350\354\373\351" \ ECFBE900 \ 00000016 0000 DC8 0, 0 \ 00000018 CEF2F1F3F2F1 DC8 "\316\362\361\363\362\361\342\363\345\362" \ E2F3E5F200 \ 00000023 00 DC8 0 \ 00000024 CDE520E4EEF1 DC8 "\315\345 \344\356\361\362\363\357\345\355" \ F2F3EFE5ED00 \ 00000030 C7E0EDFFF200 DC8 "\307\340\355\377\362" \ 00000036 0000 DC8 0, 0 \ 00000038 CDE520E1E5F1 DC8 "\315\345 \341\345\361\357\356\352\356\350\362\374" \ EFEEEAEEE8F2 \ FC00 \ 00000046 0000 DC8 0, 0 \ 00000048 C4E5EFF0E5F1 DC8 "\304\345\357\360\345\361\361\350\377" \ F1E8FF00 \ 00000052 0000 DC8 0, 0 \ 00000054 C7EBEEE900 DC8 "\307\353\356\351" \ 00000059 000000 DC8 0, 0, 0 \ 0000005C C4EEECE000 DC8 "\304\356\354\340" \ 00000061 000000 DC8 0, 0, 0 \ 00000064 D0E0E1EEF2E0 DC8 "\320\340\341\356\362\340" \ 00 \ 0000006B 00 DC8 0 \ 0000006C C220F1E5F2E8 DC8 "\302 \361\345\362\350" \ 00 \ 00000073 00 DC8 0 \ 00000074 C3EEF2EEE220 DC8 "\303\356\362\356\342 \341\356\353\362\340\362\374" \ E1EEEBF2E0F2 \ FC00 \ 00000082 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ 00000000 C6F0F300 DC8 "\306\360\363" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6D6F64206279 DC8 6DH, 6FH, 64H, 20H, 62H, 79H, 20H, 45H \ 2045 \ 00000008 76696C666F78 DC8 76H, 69H, 6CH, 66H, 6FH, 78H, 2CH, 6BH \ 2C6B \ 00000010 6C7563686E69 DC8 6CH, 75H, 63H, 68H, 6EH, 69H, 6BH, 2CH \ 6B2C \ 00000018 77696E646573 DC8 77H, 69H, 6EH, 64H, 65H, 73H, 20H, 62H \ 2062 \ 00000020 61736564206F DC8 61H, 73H, 65H, 64H, 20H, 6FH, 6EH, 20H \ 6E20 \ 00000028 726576697369 DC8 72H, 65H, 76H, 69H, 73H, 69H, 6FH, 6EH \ 6F6E \ 00000030 20323035382C DC8 20H, 32H, 30H, 35H, 38H, 2CH, 20H, 6DH \ 206D \ 00000038 6F6420646174 DC8 6FH, 64H, 20H, 64H, 61H, 74H, 65H, 3AH \ 653A \ 00000040 202573206174 DC8 20H, 25H, 73H, 20H, 61H, 74H, 20H, 25H \ 2025 \ 00000048 732000 DC8 73H, 20H, 0 \ 0000004B 00 DC8 0 \ 0000004C 536570203330 DC8 "Sep 30 2008" \ 203230303800 \ 00000058 32323A33353A DC8 "22:35:04" \ 303400 \ 00000061 000000 DC8 0, 0, 0 \ 00000064 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 \ 00000091 000000 DC8 0, 0, 0 \ 00000094 5F5F50494E47 DC8 "__PING" \ 00 \ 0000009B 00 DC8 0 \ 0000009C 70696E6700 DC8 "ping" \ 000000A1 000000 DC8 0, 0, 0 \ 000000A4 50696E6700 DC8 "Ping" \ 000000A9 000000 DC8 0, 0, 0 \ 000000AC CFE8EDE300 DC8 "\317\350\355\343" \ 000000B1 000000 DC8 0, 0, 0 \ 000000B4 C7F8F2EF00 DC8 "\307\370\362\357" \ 000000B9 000000 DC8 0, 0, 0 \ 000000BC 2573206D6F64 DC8 "%s model: %s sw: %s\015\012" \ 656C3A202573 \ 2073773A2025 \ 730D0A00 \ 000000D2 0000 DC8 0, 0 \ 000000D4 506C6174666F DC8 "Platform: NEW\333GOLD" \ 726D3A204E45 \ 57DB474F4C44 \ 00 \ 000000E7 00 DC8 0 \ 000000E8 C2F0E5ECFF20 DC8 0C2H, 0F0H, 0E5H, 0ECH, 0FFH, 20H, 0E2H, 20H \ E220 \ 000000F0 EEEDEBE0E9ED DC8 0EEH, 0EDH, 0EBH, 0E0H, 0E9H, 0EDH, 3AH, 20H \ 3A20 \ 000000F8 253032643A25 DC8 25H, 30H, 32H, 64H, 3AH, 25H, 30H, 32H \ 3032 \ 00000100 643A25303264 DC8 64H, 3AH, 25H, 30H, 32H, 64H, 20H, 0DH \ 200D \ 00000108 0AD1E5F0E2E5 DC8 0AH, 0D1H, 0E5H, 0F0H, 0E2H, 0E5H, 0F0H, 3AH \ F03A \ 00000110 202573200D0A DC8 20H, 25H, 73H, 20H, 0DH, 0AH, 25H, 73H \ 2573 \ 00000118 200D0A00 DC8 20H, 0DH, 0AH, 0 \ 0000011C CEF2EFF0E0E2 DC8 0CEH, 0F2H, 0EFH, 0F0H, 0E0H, 0E2H, 0EBH, 0E5H \ EBE5 \ 00000124 EDEE20F1EEEE DC8 0EDH, 0EEH, 20H, 0F1H, 0EEH, 0EEH, 0E1H, 0F9H \ E1F9 \ 0000012C E5EDE8E93A20 DC8 0E5H, 0EDH, 0E8H, 0E9H, 3AH, 20H, 25H, 64H \ 2564 \ 00000134 200D0ACFF0E8 DC8 20H, 0DH, 0AH, 0CFH, 0F0H, 0E8H, 0EDH, 0FFH \ EDFF \ 0000013C F2EE20F1EEEE DC8 0F2H, 0EEH, 20H, 0F1H, 0EEH, 0EEH, 0E1H, 0F9H \ E1F9 \ 00000144 E5EDE8E93A20 DC8 0E5H, 0EDH, 0E8H, 0E9H, 3AH, 20H, 25H, 64H \ 2564 \ 0000014C 200D0A00 DC8 20H, 0DH, 0AH, 0 \ 00000150 CEEFE5F0E0F2 DC8 "\316\357\345\360\340\362\356\360: %s \015\012" \ EEF03A202573 \ 200D0A00 \ 00000160 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 \ 0000017F 00 DC8 0 \ 00000180 547261666669 DC8 54H, 72H, 61H, 66H, 66H, 69H, 63H, 3AH \ 633A \ 00000188 205278203A20 DC8 20H, 52H, 78H, 20H, 3AH, 20H, 25H, 64H \ 2564 \ 00000190 62205478203A DC8 62H, 20H, 54H, 78H, 20H, 3AH, 20H, 25H \ 2025 \ 00000198 646220517565 DC8 64H, 62H, 20H, 51H, 75H, 65H, 75H, 65H \ 7565 \ 000001A0 3A2025646220 DC8 3AH, 20H, 25H, 64H, 62H, 20H, 0DH, 0AH \ 0D0A \ 000001A8 54696D653A20 DC8 54H, 69H, 6DH, 65H, 3AH, 20H, 25H, 30H \ 2530 \ 000001B0 32643A253032 DC8 32H, 64H, 3AH, 25H, 30H, 32H, 64H, 0DH \ 640D \ 000001B8 0A4F6E6C696E DC8 0AH, 4FH, 6EH, 6CH, 69H, 6EH, 65H, 20H \ 6520 \ 000001C0 636F6E746163 DC8 63H, 6FH, 6EH, 74H, 61H, 63H, 74H, 3AH \ 743A \ 000001C8 202564205B74 DC8 20H, 25H, 64H, 20H, 5BH, 74H, 6FH, 74H \ 6F74 \ 000001D0 616C3A202564 DC8 61H, 6CH, 3AH, 20H, 25H, 64H, 5DH, 20H \ 5D20 \ 000001D8 0D0A556E7265 DC8 0DH, 0AH, 55H, 6EH, 72H, 65H, 61H, 64H \ 6164 \ 000001E0 206D65737361 DC8 20H, 6DH, 65H, 73H, 73H, 61H, 67H, 65H \ 6765 \ 000001E8 3A2025642F25 DC8 3AH, 20H, 25H, 64H, 2FH, 25H, 64H, 20H \ 6420 \ 000001F0 00 DC8 0 \ 000001F1 000000 DC8 0, 0, 0 \ 000001F4 53656E64696E DC8 "Sending textinfo..." \ 672074657874 \ 696E666F2E2E \ 2E00 \ 00000208 5F5F54455854 DC8 "__TEXTINFO" \ 494E464F00 \ 00000213 00 DC8 0 \ 00000214 5F5F544900 DC8 "__TI" \ 00000219 000000 DC8 0, 0, 0 \ 0000021C 54696D653A20 DC8 "Time: %02d:%02d" \ 253032643A25 \ 30326400 \ 0000022C 53656E64696E DC8 "Sending time..." \ 672074696D65 \ 2E2E2E00 \ 0000023C 5F5F54494D45 DC8 "__TIME" \ 00 \ 00000243 00 DC8 0 \ 00000244 4745545F5449 DC8 "GET_TIME" \ 4D4500 \ 0000024D 000000 DC8 0, 0, 0 \ 00000250 2573206D6F64 DC8 "%s model: %s sw: %s" \ 656C3A202573 \ 2073773A2025 \ 7300 \ 00000264 53656E64696E DC8 "Sending platform info..." \ 6720706C6174 \ 666F726D2069 \ 6E666F2E2E2E \ 00 \ 0000027D 000000 DC8 0, 0, 0 \ 00000280 4745545F504C DC8 "GET_PLATFORM_INFO" \ 4154464F524D \ 5F494E464F00 \ 00000292 0000 DC8 0, 0 \ 00000294 5F5F504C4154 DC8 "__PLATFORM" \ 464F524D00 \ 0000029F 00 DC8 0 \ 000002A0 5F5F485700 DC8 "__HW" \ 000002A5 000000 DC8 0, 0, 0 \ 000002A8 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 \ 000002D3 00 DC8 0 \ 000002D4 4745545F4F4E DC8 "GET_ONLINE_TIME" \ 4C494E455F54 \ 494D4500 \ 000002E4 5F5F4F4E4C49 DC8 "__ONLINE" \ 4E4500 \ 000002ED 000000 DC8 0, 0, 0 \ 000002F0 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 \ 00000320 4745545F4D53 DC8 "GET_MSG_INFO" \ 475F494E464F \ 00 \ 0000032D 000000 DC8 0, 0, 0 \ 00000330 5F5F4D534700 DC8 "__MSG" \ 00000336 0000 DC8 0, 0 \ 00000338 CEEFE5F0E0F2 DC8 "\316\357\345\360\340\362\356\360: %s" \ EEF03A202573 \ 00 \ 00000345 000000 DC8 0, 0, 0 \ 00000348 53656E64696E DC8 "Sending provider name..." \ 672070726F76 \ 69646572206E \ 616D652E2E2E \ 00 \ 00000361 000000 DC8 0, 0, 0 \ 00000364 4745545F5052 DC8 "GET_PROVIDER" \ 4F5649444552 \ 00 \ 00000371 000000 DC8 0, 0, 0 \ 00000374 5F5F50524F56 DC8 "__PROVIDER" \ 4944455200 \ 0000037F 00 DC8 0 \ 00000380 2A2A2A416363 DC8 "***Access denied***" \ 657373206465 \ 6E6965642A2A \ 2A00 \ 00000394 4745545F4D4F DC8 "GET_MOD_INFO" \ 445F494E464F \ 00 \ 000003A1 000000 DC8 0, 0, 0 \ 000003A4 5F5F4D4F4400 DC8 "__MOD" \ 000003AA 0000 DC8 0, 0 \ 000003AC 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 \ 000003C8 4745545F4241 DC8 "GET_BAT_INFO" \ 545F494E464F \ 00 \ 000003D5 000000 DC8 0, 0, 0 \ 000003D8 5F5F42415400 DC8 "__BAT" \ 000003DE 0000 DC8 0, 0 \ 000003E0 C0E2F2EEEEF2 DC8 "\300\342\362\356\356\362\342\345\362\367\350\352: %s %s! %s %s" \ E2E5F2F7E8EA \ 3A2025732025 \ 732120257320 \ 257300 \ 000003FB 00 DC8 0 \ 000003FC 726576697369 DC8 "revision 2058, mod date: %s at %s " \ 6F6E20323035 \ 382C206D6F64 \ 20646174653A \ 202573206174 \ 2025732000 \ 0000041F 00 DC8 0 \ 00000420 687474703A2F DC8 "http://kluchnik.jino-net.ru/naticqmod/" \ 2F6B6C756368 \ 6E696B2E6A69 \ 6E6F2D6E6574 \ 2E72752F6E61 \ 746963716D6F \ 642F00 \ 00000447 00 DC8 0 \ 00000448 53656E64696E DC8 "Sending url info..." \ 672075726C20 \ 696E666F2E2E \ 2E00 \ 0000045C 4745545F5552 DC8 "GET_URL_INFO" \ 4C5F494E464F \ 00 \ 00000469 000000 DC8 0, 0, 0 \ 0000046C 5F5F55524C00 DC8 "__URL" \ 00000472 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ 00000000 5F5F5400 DC8 "__T" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 B0B5041C0025 DC8 176, 181, 4, 28, 0, 37, 5, 97 \ 0561 \ In segment DATA_C, align 4, align-sorted \ `?_1`: \ 00000000 B0B5041C0025 DC8 176, 181, 4, 28, 0, 37, 5, 97 \ 0561 \ In segment DATA_C, align 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 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 70696E67322E DC8 "ping2.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4E4154494351 DC8 "NATICQ: %d" \ 3A20256400 \ 0000000B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 43ECE0E9EBFB DC8 "C\354\340\351\353\373" \ 00 \ 00000007 00 DC8 0 \ 00000008 C220E1F3F4E5 DC8 "\302 \341\363\364\345\360" \ F000 \ 00000010 C8E720E1F3F4 DC8 "\310\347 \341\363\364\345\360\340" \ E5F0E000 \ 0000001A 0000 DC8 0, 0 \ 0000001C CAEEECE0EDE4 DC8 "\312\356\354\340\355\344\340" \ E000 \ 00000024 CEF7E8F1F2E8 DC8 "\316\367\350\361\362\350\362\374 \341\363\364\345\360" \ F2FC20E1F3F4 \ E5F000 \ 00000033 00 DC8 0 \ 00000034 D1EBE5E4F3FE DC8 "\321\353\345\344\363\376\371\350\351 \367\340\362" \ F9E8E920F7E0 \ F200 \ 00000042 0000 DC8 0, 0 \ 00000044 CFF0E5E4FBE4 DC8 "\317\360\345\344\373\344\363\371\350\351 \367\340\362" \ F3F9E8E920F7 \ E0F200 \ 00000053 00 DC8 0 \ 00000054 CAEEECE0EDE4 DC8 "\312\356\354\340\355\344\373" \ FB00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 616263646566 DC8 61H, 62H, 63H, 64H, 65H, 66H, 67H, 68H \ 6768 \ 00000008 696A6B6C6D6E DC8 69H, 6AH, 6BH, 6CH, 6DH, 6EH, 6FH, 70H \ 6F70 \ 00000010 717273747576 DC8 71H, 72H, 73H, 74H, 75H, 76H, 77H, 78H \ 7778 \ 00000018 797A41424344 DC8 79H, 7AH, 41H, 42H, 43H, 44H, 45H, 46H \ 4546 \ 00000020 4748494A4B4C DC8 47H, 48H, 49H, 4AH, 4BH, 4CH, 4DH, 4EH \ 4D4E \ 00000028 4F5051525354 DC8 4FH, 50H, 51H, 52H, 53H, 54H, 55H, 56H \ 5556 \ 00000030 5758595A3031 DC8 57H, 58H, 59H, 5AH, 30H, 31H, 32H, 33H \ 3233 \ 00000038 343536373839 DC8 34H, 35H, 36H, 37H, 38H, 39H, 24H, 2DH \ 242D \ 00000040 5F2E2B212A27 DC8 5FH, 2EH, 2BH, 21H, 2AH, 27H, 28H, 29H \ 2829 \ 00000048 2C253B3A4026 DC8 2CH, 25H, 3BH, 3AH, 40H, 26H, 3DH, 2FH \ 3D2F \ 00000050 3FE0E1E2E3E4 DC8 3FH, 0E0H, 0E1H, 0E2H, 0E3H, 0E4H, 0E5H, 0B8H \ E5B8 \ 00000058 E6E7E8E9EAEB DC8 0E6H, 0E7H, 0E8H, 0E9H, 0EAH, 0EBH, 0ECH, 0EDH \ ECED \ 00000060 EEEFF0F1F2F3 DC8 0EEH, 0EFH, 0F0H, 0F1H, 0F2H, 0F3H, 0F4H, 0F5H \ F4F5 \ 00000068 F6F7F8F9FAFB DC8 0F6H, 0F7H, 0F8H, 0F9H, 0FAH, 0FBH, 0FCH, 0FDH \ FCFD \ 00000070 FEFFC0C1C2C3 DC8 0FEH, 0FFH, 0C0H, 0C1H, 0C2H, 0C3H, 0C4H, 0C5H \ C4C5 \ 00000078 A8C6C7C8C9CA DC8 0A8H, 0C6H, 0C7H, 0C8H, 0C9H, 0CAH, 0CBH, 0CCH \ CBCC \ 00000080 CDCECFD0D1D2 DC8 0CDH, 0CEH, 0CFH, 0D0H, 0D1H, 0D2H, 0D3H, 0D4H \ D3D4 \ 00000088 D5D6D7D8D9DA DC8 0D5H, 0D6H, 0D7H, 0D8H, 0D9H, 0DAH, 0DBH, 0DCH \ DBDC \ 00000090 DDDEDF00 DC8 0DDH, 0DEH, 0DFH, 0 \ 00000094 687474703A2F DC8 "http://" \ 2F00 \ 0000009C 7777772E00 DC8 "www." \ 000000A1 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25735C746D70 DC8 "%s\\tmp%u.url" \ 25752E75726C \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 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 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 \ `? 72 menusoftkeys 12 menu_sk 24 menu_skt 8 CmdSoftkeys 12 cmd_sk 24 cmd_Back_skt 8 ? 76 menutext 212 clrSelect 4 fntSelect 4 bordSelect 4 clrNotSelect 4 bordNotSelect 4 fntNotSelect 4 I_gui_methods 44 _t 3 maincsm_oncreate 304 maincsm_onclose 316 do_reconnect 40 CheckDoubleRun 144 checkGui 76 maincsm_onmessage 3700 addIconBar 740 minus11 4 maincsm_name_body 280 UpdateCSMname 36 SetIconBarHandler 20 main 604 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 1540 my_ed_redraw 112 edchat_ghook 544 edchat_desc 84 sk 16 CreateEditChat 1152 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 9248 sk 8 input_awaymsg_sk 24 input_awaymsg_skt 8 CmdMenuHeader 32 lastKey 4 ecmenu_HDR 64 ec_menu 352 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 ??DataTable32 4 ??DataTable33 4 ??DataTable34 4 ??DataTable41 4 ??DataTable44 4 ??DataTable50 4 ??DataTable53 4 ??DataTable60 4 ??DataTable61 4 ??DataTable63 4 ??DataTable65 4 ??DataTable67 4 ??DataTable68 4 ??DataTable69 4 ??DataTable70 4 ??DataTable72 4 ??DataTable74 4 ??DataTable75 4 ??DataTable76 4 ??DataTable79 4 ??DataTable81 4 ??DataTable83 4 ??DataTable84 4 ??DataTable86 4 ??DataTable87 4 ??DataTable88 4 ??DataTable89 4 ??DataTable90 4 ??DataTable91 4 ??DataTable93 4 ??DataTable95 4 ??DataTable96 4 ??DataTable97 4 ??DataTable98 4 ??DataTable108 4 ??DataTable109 4 ??DataTable110 4 ??DataTable112 4 ??DataTable113 4 ??DataTable114 4 ??DataTable115 4 ??DataTable116 4 ??DataTable117 4 ??DataTable118 4 ??DataTable119 4 ??DataTable125 4 ??DataTable128 4 ??DataTable130 4 ??DataTable131 4 ??DataTable132 4 ??DataTable134 4 ??DataTable135 4 ??DataTable136 4 ??DataTable137 4 ??DataTable138 4 ??DataTable139 4 ??DataTable145 4 ??DataTable146 4 ??DataTable147 4 ??DataTable149 4 ??DataTable152 4 ??DataTable153 4 ??DataTable154 4 ??DataTable155 4 ??DataTable156 4 ??DataTable157 4 ??DataTable160 4 ??DataTable161 4 ??DataTable162 4 ??DataTable165 4 ??DataTable166 4 ??DataTable168 4 ??DataTable178 4 ??DataTable179 4 ??DataTable180 4 ??DataTable182 4 ??DataTable185 4 ??DataTable189 4 ??DataTable193 4 ??DataTable196 4 ??DataTable197 4 ??DataTable198 4 ??DataTable200 4 ??DataTable201 4 ??DataTable204 4 ??DataTable205 4 ??DataTable207 4 ??DataTable208 4 ??DataTable211 4 ??DataTable213 4 ??DataTable214 4 ??DataTable215 4 ??DataTable221 4 ??DataTable222 4 ??DataTable228 4 ??DataTable229 4 ??DataTable234 4 ??DataTable235 4 ??DataTable239 4 ??DataTable242 4 ??DataTable243 4 ??DataTable245 4 ??DataTable246 4 ??DataTable247 4 ??DataTable249 4 ??DataTable250 4 ??DataTable251 4 ??DataTable252 4 ??DataTable254 4 ??DataTable255 4 ??DataTable257 4 ??DataTable258 4 ??DataTable261 4 ??DataTable263 4 ??DataTable264 4 ??DataTable267 4 ??DataTable270 4 ??DataTable277 4 ??DataTable278 4 ??DataTable280 4 ??DataTable281 4 ??DataTable283 4 ??DataTable284 4 ??DataTable285 4 ??DataTable286 4 ??DataTable288 4 ??DataTable290 4 ??DataTable294 4 ??DataTable298 4 ??DataTable299 4 ??DataTable300 4 ??DataTable301 4 ??DataTable302 4 ??DataTable303 4 ??DataTable304 4 ??DataTable305 4 ??DataTable306 4 ??DataTable307 4 ??DataTable308 4 ??DataTable309 4 ??DataTable310 4 ??DataTable311 4 ??DataTable312 4 ??DataTable313 4 ??DataTable315 4 ??DataTable316 4 ??DataTable318 4 ??DataTable320 4 ??DataTable321 4 ??DataTable323 4 ??DataTable325 4 ??DataTable328 4 ??DataTable329 4 ??DataTable332 4 ??DataTable333 4 ??DataTable334 4 ??DataTable335 4 ??DataTable336 4 ??DataTable339 4 ??DataTable340 4 ??DataTable343 4 ??DataTable344 4 ??DataTable347 4 ??DataTable349 4 ??DataTable350 4 ??DataTable351 4 ??DataTable352 4 ??DataTable354 4 ??DataTable360 4 ??DataTable361 4 ??DataTable362 4 ??DataTable363 4 ??DataTable364 4 ??DataTable365 4 ??DataTable366 4 ??DataTable367 4 ? 9248 ? 8 ? 24 ? 8 ? 32 ? 4 ? 396 ? 32 ? 16 ? 3 ? 12 ? 16 ? 60 ? 2 ? 40 ? 12 ? 3 ? 8 ? 64 ? 12 ? 132 ? 4 ? 1140 ? 4 ? 8 ?_1 8 ?_2 8 ? 3 ? 32 ? 8 ? 4 ? 4 ? 3 ? 4 ? 8 ? 8 ? 12 ? 12 ? 92 ? 164 ? 16 ? 16 ? 64 ? 3 ? 12 ? 16 ? 12 ? 8 ? 16 ? 8 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 8 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 12 ? 12 ? 12 ? 8 ? 4 ? 8 ? 8 ? 8 ? 1 ? 8 ? 8 ?