############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 10/Dec/2010 22:11:58 # # 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\Release\List\ -lC # # D:\pasha\elf\_MY_PROJECT_\naticq_mod2\Release\List\ # # -o D:\pasha\elf\_MY_PROJECT_\naticq_mod2\Release\Obj # # \ -s9 --no_unroll --cpu_mode arm --endian little # # --cpu ARM926EJ-S --stack_align 4 --interwork # # --separate_cluster_for_initialized_variables -e # # --fpu None --dlib_config "D:\pasha\Embedded # # Workbench 4.0 Evaluation2\ARM\LIB\dl5tpainl8n.h" -I # # "D:\pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\INC\" --inline_threshold=2 # # List file = D:\pasha\elf\_MY_PROJECT_\naticq_mod2\Release\List\m # # ain.lst # # Object file = D:\pasha\elf\_MY_PROJECT_\naticq_mod2\Release\Obj\ma # # in.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 #include "auth.h" 29 30 extern int *XStatusesIconArray; 31 32 #ifndef NEWSGOLD 33 #define SEND_TIMER 34 #endif 35 36 #define IN_TICKS(sec) (sec * TMR_SECOND) 37 38 //#define LOG 39 40 #ifdef LOG 41 const char _rn[]="\r\n"; 42 static void logwrite(char *text) 43 { 44 int hFile; 45 unsigned int io_error = 0; 46 hFile = fopen("4:\\natlog.txt",A_ReadWrite + A_Create + A_Append,P_READ+P_WRITE, &io_error); 47 if(hFile!=-1) 48 { 49 fwrite(hFile, text, strlen(text), &io_error); 50 fwrite(hFile, _rn, 2, &io_error); 51 fclose(hFile, &io_error); 52 } 53 else 54 ShowMSG(1,(int)"Error!"); 55 // mfree(text); 56 } 57 #endif 58 59 //------------- ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ -------------// 60 61 int main_d; 62 int align=0; 63 //int space=1; 64 void *canvasdata; 65 int paused_height; 66 WSHDR *wsBuffer;//мультибуффер 67 68 char talk_sound[128]; 69 int uins; 70 //char m_1[]="unofficial! private use only"; 71 //char m_2[]="mod by (c)Evilfox 315384924"; 72 char unread_msg_info[64]; 73 74 int saver_on; 75 76 #ifdef NEWSGOLD 77 extern char teast2[256]; 78 #endif 79 80 //#ifdef ELKA 81 char last_msg_buffer[4096]; 82 //#endif 83 84 85 //-------------------------------------------------// 86 87 char prmsg[256];//вывод попап в контакт листе 88 int PrintTimer=0;//время попап 89 int curping=0; //тукущий пинг 90 91 volatile int sendq_l=0; //Длинна очереди для send 92 volatile void *sendq_p=NULL; //указатель очереди 93 94 extern const char *suc_config_name_mod; 95 96 97 int main_count; 98 int main2_count; 99 100 int DoRefreshCL=0;//Если нада обновить КЛ \ In segment CODE, align 4, keep-with-next 101 void RefreshCL() 102 { 103 DoRefreshCL=1; \ RefreshCL: \ 00000000 08009FE5 LDR R0,??RefreshCL_0 ;; screen3 + 36 \ 00000004 0110A0E3 MOV R1,#+1 \ 00000008 001080E5 STR R1,[R0, #+0] 104 } \ 0000000C 1EFF2FE1 BX LR ;; return \ ??RefreshCL_0: \ 00000010 ........ DC32 screen3 + 36 105 106 int ifJustNowRefresh=0;//Надо обновить поключившихся \ In segment CODE, align 4, keep-with-next 107 void RefreshJustNow() 108 { 109 ifJustNowRefresh=1; \ RefreshJustNow: \ 00000000 08009FE5 LDR R0,??RefreshJustNow_0 ;; screen3 + 40 \ 00000004 0110A0E3 MOV R1,#+1 \ 00000008 001080E5 STR R1,[R0, #+0] 110 } \ 0000000C 1EFF2FE1 BX LR ;; return \ ??RefreshJustNow_0: \ 00000010 ........ DC32 screen3 + 40 111 //-------------------- AUTOPING -------------------// 112 113 GBSTMR ping_tmr; 114 static void PingToServer2(void) 115 { 116 TPKT *p; 117 p=malloc(sizeof(PKT)+sizeof(TTime)); 118 GetDateTime(NULL,(TTime *)p->data); 119 p->pkt.uin=0; 120 p->pkt.type=T_ECHO; 121 p->pkt.data_len=sizeof(TTime); 122 SUBPROC((void *)SendAnswer,0,p); 123 } 124 125 int Is_PING_On; 126 \ In segment CODE, align 4, keep-with-next 127 void Pinger2() 128 { 129 if(Is_PING_On) \ Pinger2: \ 00000000 ........ LDR R0,??DataTable38 ;; i_rc \ 00000004 70402DE9 PUSH {R4-R6,LR} \ 00000008 ........ LDR R5,??DataTable1 ;; Pinger2 \ 0000000C 7010A0E3 MOV R1,#+112 \ 00000010 601D81E3 ORR R1,R1,#0x1800 \ 00000014 004081E0 ADD R4,R1,R0 \ 00000018 480290E5 LDR R0,[R0, #+584] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1900000A BEQ ??Pinger2_0 130 { 131 if(sendq_l<32)//если буфер для отправки меньше 32 байт то пингуем,чтобы не забивать очередь, тест... \ 00000024 ........ LDR R0,??DataTable2 ;; screen3 + 28 \ 00000028 000090E5 LDR R0,[R0, #+0] \ 0000002C 200050E3 CMP R0,#+32 \ 00000030 0F0000AA BGE ??Pinger2_1 132 PingToServer2(); \ 00000034 1000A0E3 MOV R0,#+16 \ 00000038 140000EF SWI +20 \ 0000003C 0060A0E1 MOV R6,R0 \ 00000040 081086E2 ADD R1,R6,#+8 \ 00000044 0000A0E3 MOV R0,#+0 \ 00000048 B40000EF SWI +180 \ 0000004C 0000A0E3 MOV R0,#+0 \ 00000050 000086E5 STR R0,[R6, #+0] \ 00000054 1200A0E3 MOV R0,#+18 \ 00000058 B400C6E1 STRH R0,[R6, #+4] \ 0000005C 0800A0E3 MOV R0,#+8 \ 00000060 B600C6E1 STRH R0,[R6, #+6] \ 00000064 ........ LDR R0,??DataTable3 ;; SendAnswer \ 00000068 0620A0E1 MOV R2,R6 \ 0000006C 0010A0E3 MOV R1,#+0 \ 00000070 710100EF SWI +369 133 GBS_StartTimerProc(&ping_tmr, 60*216, Pinger2); \ ??Pinger2_1: \ 00000074 0520A0E1 MOV R2,R5 \ 00000078 A010A0E3 MOV R1,#+160 \ 0000007C C81D81E3 ORR R1,R1,#0x3200 \ 00000080 0400A0E1 MOV R0,R4 \ 00000084 4D0000EF SWI +77 \ 00000088 7080BDE8 POP {R4-R6,PC} 134 } 135 else 136 GBS_StartTimerProc(&ping_tmr, 216*10, Pinger2); \ ??Pinger2_0: \ 0000008C 0520A0E1 MOV R2,R5 \ 00000090 871EA0E3 MOV R1,#+2160 \ 00000094 0400A0E1 MOV R0,R4 \ 00000098 4D0000EF SWI +77 137 } \ 0000009C 7080BDE8 POP {R4-R6,PC} ;; return 138 139 //-------------------------------------------------// 140 141 142 143 extern volatile int total_smiles; 144 extern volatile int total_xstatuses; 145 extern volatile int xstatuses_load; 146 extern volatile int pictures_max; //2026rev 147 extern volatile int pictures_loaded; //2026rev 148 149 #ifdef ELKA 150 int Is_SLI_On;//мигаем светодиодом 151 #endif 152 153 //int Is_SMARTCPU_On;//Вывод сообщений на гэ 154 int Is_INC_On;//Popup message 155 int Is_ILU_On;//Режим подсветки 156 int Is_Double_Vibra_On;//Режим напоминания 157 int total_unread; 158 int total_unread2; 159 160 #ifdef ELKA 161 const int SLI_TYPE=1; 162 #endif 163 164 char PINGO[256]; 165 166 #ifdef ELKA 167 extern const unsigned int SLI_time; 168 extern const unsigned int SLI_time2; 169 #endif 170 //#define USE_MLMENU 171 #define USE_GUI //графический интерфейс 172 173 #define TMR_SECOND 216 174 175 //IPC 176 const char ipc_my_name[32]=IPC_NATICQ_NAME; 177 const char ipc_xtask_name[]=IPC_XTASK_NAME; 178 const char ipc_test_name[]="test"; 179 IPC_REQ gipc; 180 181 182 char elf_path[256]; 183 int maincsm_id; 184 int maingui_id; 185 volatile int contactlist_menu_id; \ In segment CODE, align 4, keep-with-next 186 void SMART_REDRAW(void) 187 { \ SMART_REDRAW: \ 00000000 10402DE9 PUSH {R4,LR} 188 #ifdef DEBUG 189 int f; 190 int t; 191 LockSched(); 192 f=IsGuiOnTop(maingui_id); 193 t=IsGuiOnTop(contactlist_menu_id); 194 UnlockSched(); 195 if (f || t) REDRAW(); 196 #else 197 int f; 198 LockSched(); \ 00000004 460100EF SWI +326 199 f=IsGuiOnTop(maingui_id); \ 00000008 ........ LDR R0,??DataTable4 ;; i_rc + 608 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 350100EF SWI +309 \ 00000014 0040A0E1 MOV R4,R0 200 UnlockSched(); \ 00000018 470100EF SWI +327 201 if (f) REDRAW(); \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} \ 00000024 720100EF SWI +370 202 #endif 203 204 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 205 206 //По 10 секунд 207 #define ACTIVE_TIME 360 208 209 //Максимальное количество сообщений в логе 210 //#define MAXLOGMSG (20) 211 212 // Строковые описания статусов 213 214 const char S_OFFLINE[]="Offline"; 215 const char S_INVISIBLE[]="Invisible"; 216 const char S_AWAY[]="Away"; 217 const char S_NA[]="N/A"; 218 const char S_OCCUPIED[]="Occupied"; 219 const char S_DND[]="DND"; 220 const char S_ONLINE[]="Online"; 221 const char S_FFC[]="FFC"; 222 223 volatile int SENDMSGCOUNT; 224 #ifdef kluchnik1 225 int IsActiveUp=1; 226 #else 227 int IsActiveUp=0; 228 #endif 229 int Is_Vibra_Enabled; 230 int Is_Id3tag_Enabled; 231 unsigned int Is_Sounds_Enabled; 232 int Is_Show_Offline; 233 int Is_Show_Groups; 234 235 int S_ICONS[TOTAL_ICONS+1]; 236 237 #define EOP -10 238 int CurrentStatus; 239 int CurrentXStatus; 240 241 WSHDR *ews; 242 243 static const char * const icons_names[TOTAL_ICONS]= 244 { 245 "offline.png", 246 "invisible.png", 247 "away.png", 248 "na.png", 249 "occupied.png", 250 "dnd.png", 251 "depression.png", 252 "evil.png", 253 "home.png", 254 "lunch.png", 255 "work.png", 256 "online.png", 257 "ffc.png", 258 "message.png", 259 "unknown.png", 260 "groupon.png", 261 "groupoff.png", 262 "null.png", 263 "addcont.png", 264 "head.png", 265 "logo.png", 266 "ping.png", 267 "settings.png", 268 "vis1.png", 269 "vis2.png", 270 "vis3.png", 271 "vis4.png", 272 "vis5.png", 273 "ping1.png", 274 "ping2.png", 275 "ping3.png", 276 "ping4.png", 277 "bg.png" 278 }; 279 280 281 282 283 //------------------------ SCREEN SAVER TIMER ---------------------------// 284 /* 285 #ifdef NEWSGOLD 286 GBSTMR scrsTmr; 287 int scrsTime; 288 void ScreenSaverTimer() 289 { 290 if(scrsTime==screenSaverTime) 291 { 292 scrsTime=screenSaverTime;//на всякий случай 293 CloseScreensaver(); 294 DrawScreenSaver(); 295 GBS_StartTimerProc(&scrsTmr, 216*10, ScreenSaverTimer); 296 } 297 if(isScreenSaverEna) 298 scrsTime++; 299 GBS_StartTimerProc(&scrsTmr, 216*5, ScreenSaverTimer); 300 } 301 #endif 302 */ 303 304 //-----------------------------------------------------------------------// 305 306 307 int msg_away_timer=0;//Счетчик для автостатуса 308 char away_msg[264];//Само сообщение для ответа 309 char away_msg_time[64];//Время когда сработал таймер 310 char away_msg_time_dace[16];//время отсутвтвия для вывода на идле 311 //char *inp_away_msg2;//Текст сообщения,если будем писать сами(на долгую 6 или VOL_DOWN_BUTTON),а не брать из конфига 312 char tim_zone[16]; 313 int timeh; 314 int timemin; 315 int away_m;//состояние автоответчика 316 int status_rem;//Для сохранения текущего статуса 317 int change_back_status;//вернуть предыдущий статус или нет 318 GBSTMR away_tmr; 319 320 321 int Show_XTX;//Показывать хстатус или время он лайн \ In segment CODE, align 4, keep-with-next 322 void FreeXText2(CLIST *t) 323 { \ FreeXText2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 324 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] 325 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 326 \ In segment CODE, align 4, keep-with-next 327 void away_timer()//Таймер автостатуса 328 { \ away_timer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 329 TTime tt; 330 if(msg_away_timer==(AUTO_ENGADE*12)) \ 00000004 ........ LDR R4,??DataTable38 ;; i_rc \ 00000008 ........ LDR R9,??DataTable6 ;; menutext \ 0000000C ........ LDR R10,??DataTable31 ;; screen3 \ 00000010 8800A0E3 MOV R0,#+136 \ 00000014 680D80E3 ORR R0,R0,#0x1A00 \ 00000018 045080E0 ADD R5,R0,R4 \ 0000001C 500080E3 ORR R0,R0,#0x50 \ 00000020 046080E0 ADD R6,R0,R4 \ 00000024 1000C0E3 BIC R0,R0,#0x10 \ 00000028 047080E0 ADD R7,R0,R4 \ 0000002C ........ LDR R0,??DataTable33 ;; AUTO_ENGADE \ 00000030 08D04DE2 SUB SP,SP,#+8 \ 00000034 008090E5 LDR R8,[R0, #+0] \ 00000038 2C009AE5 LDR R0,[R10, #+44] \ 0000003C 0C10A0E3 MOV R1,#+12 \ 00000040 910802E0 MUL R2,R1,R8 \ 00000044 020050E1 CMP R0,R2 \ 00000048 1D00001A BNE ??away_timer_0 331 { 332 GetDateTime(NULL,&tt); \ 0000004C 0D10A0E1 MOV R1,SP \ 00000050 0000A0E3 MOV R0,#+0 \ 00000054 B40000EF SWI +180 333 sprintf(away_msg_time_dace, "%02d:%02d", tt.hour, tt.min); \ 00000058 0130DDE5 LDRB R3,[SP, #+1] \ 0000005C 0020DDE5 LDRB R2,[SP, #+0] \ 00000060 181089E2 ADD R1,R9,#+24 \ 00000064 0700A0E1 MOV R0,R7 \ 00000068 160000EF SWI +22 334 sprintf(away_msg_time, "( Отсутствую примерно с %02d:%02d [%s] )", tt.hour, tt.min, tim_zone); \ 0000006C 0600A0E1 MOV R0,R6 \ 00000070 01002DE9 PUSH {R0} \ 00000074 0530DDE5 LDRB R3,[SP, #+5] \ 00000078 0420DDE5 LDRB R2,[SP, #+4] \ 0000007C 241089E2 ADD R1,R9,#+36 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 160000EF SWI +22 335 away_m=1; 336 337 if(CurrentStatus!=2 && CurrentStatus!=isAutoStatusOn) \ 00000088 FC0294E5 LDR R0,[R4, #+764] \ 0000008C 01B0A0E3 MOV R11,#+1 \ 00000090 08B384E5 STR R11,[R4, #+776] \ 00000094 020050E3 CMP R0,#+2 \ 00000098 04D08DE2 ADD SP,SP,#+4 \ 0000009C 0800000A BEQ ??away_timer_0 \ 000000A0 D8109FE5 LDR R1,??away_timer_1 ;; isAutoStatusOn \ 000000A4 001091E5 LDR R1,[R1, #+0] \ 000000A8 010050E1 CMP R0,R1 \ 000000AC 0400000A BEQ ??away_timer_0 338 { 339 status_rem=CurrentStatus; \ 000000B0 0C0384E5 STR R0,[R4, #+780] 340 CurrentStatus=2; \ 000000B4 0200A0E3 MOV R0,#+2 \ 000000B8 FC0284E5 STR R0,[R4, #+764] 341 set_my_status(); \ 000000BC ........ BL set_my_status 342 change_back_status=1; \ 000000C0 10B384E5 STR R11,[R4, #+784] 343 } 344 } 345 346 if( (IsOnNAStatus) && (msg_away_timer==((AUTO_ENGADE*12)+(NAStatusTime*12))) )//Включить переключение на недоступен,в минутах \ ??away_timer_0: \ 000000C4 B8009FE5 LDR R0,??away_timer_1+0x4 ;; IsOnNAStatus \ 000000C8 000090E5 LDR R0,[R0, #+0] \ 000000CC 000050E3 CMP R0,#+0 \ 000000D0 1C00000A BEQ ??away_timer_2 \ 000000D4 AC109FE5 LDR R1,??away_timer_1+0x8 ;; NAStatusTime \ 000000D8 2C009AE5 LDR R0,[R10, #+44] \ 000000DC 001091E5 LDR R1,[R1, #+0] \ 000000E0 0C20A0E3 MOV R2,#+12 \ 000000E4 081081E0 ADD R1,R1,R8 \ 000000E8 920101E0 MUL R1,R2,R1 \ 000000EC 010050E1 CMP R0,R1 \ 000000F0 1400001A BNE ??away_timer_2 347 { 348 GetDateTime(NULL,&tt); \ 000000F4 0D10A0E1 MOV R1,SP \ 000000F8 0000A0E3 MOV R0,#+0 \ 000000FC B40000EF SWI +180 349 sprintf(away_msg_time_dace, "%02d:%02d", tt.hour, tt.min); \ 00000100 0130DDE5 LDRB R3,[SP, #+1] \ 00000104 0020DDE5 LDRB R2,[SP, #+0] \ 00000108 181089E2 ADD R1,R9,#+24 \ 0000010C 0700A0E1 MOV R0,R7 \ 00000110 160000EF SWI +22 350 sprintf(away_msg_time, "( Недоступен примерно с %02d:%02d [%s] )", tt.hour, tt.min, tim_zone); \ 00000114 40002DE9 PUSH {R6} \ 00000118 0530DDE5 LDRB R3,[SP, #+5] \ 0000011C 0420DDE5 LDRB R2,[SP, #+4] \ 00000120 501089E2 ADD R1,R9,#+80 \ 00000124 0500A0E1 MOV R0,R5 \ 00000128 160000EF SWI +22 351 if(CurrentStatus!=3) \ 0000012C FC0294E5 LDR R0,[R4, #+764] \ 00000130 04D08DE2 ADD SP,SP,#+4 \ 00000134 030050E3 CMP R0,#+3 \ 00000138 0200000A BEQ ??away_timer_2 352 { 353 CurrentStatus=3; \ 0000013C 0300A0E3 MOV R0,#+3 \ 00000140 FC0284E5 STR R0,[R4, #+764] 354 set_my_status(); \ 00000144 ........ BL set_my_status 355 } 356 } 357 358 if(Auto_Status) \ ??away_timer_2: \ 00000148 ........ LDR R0,??DataTable9 ;; Auto_Status 359 msg_away_timer++; 360 GBS_StartTimerProc(&away_tmr, 216*5, away_timer); \ 0000014C 38209FE5 LDR R2,??away_timer_1+0xC ;; away_timer \ 00000150 000090E5 LDR R0,[R0, #+0] \ 00000154 3810A0E3 MOV R1,#+56 \ 00000158 000050E3 CMP R0,#+0 \ 0000015C 2C009A15 LDRNE R0,[R10, #+44] \ 00000160 401E81E3 ORR R1,R1,#0x400 \ 00000164 01008012 ADDNE R0,R0,#+1 \ 00000168 2C008A15 STRNE R0,[R10, #+44] \ 0000016C E800A0E3 MOV R0,#+232 \ 00000170 680D80E3 ORR R0,R0,#0x1A00 \ 00000174 040080E0 ADD R0,R0,R4 \ 00000178 4D0000EF SWI +77 361 } \ 0000017C F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??away_timer_1: \ 00000180 ........ DC32 isAutoStatusOn \ 00000184 ........ DC32 IsOnNAStatus \ 00000188 ........ DC32 NAStatusTime \ 0000018C ........ DC32 away_timer 362 363 \ In segment CODE, align 4, keep-with-next 364 void init_time_zone() 365 { 366 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 + 6872 \ 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 367 { 368 case 0: 369 sprintf(tim_zone, "GMT -12:00"); 370 break; 371 case 1: 372 sprintf(tim_zone, "GMT -11:00"); \ ??init_time_zone_2: \ 0000004C 0C1081E2 ADD R1,R1,#+12 \ 00000050 160000EF SWI +22 \ 00000054 0080BDE8 POP {PC} 373 break; 374 case 2: 375 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} 376 break; 377 case 3: 378 sprintf(tim_zone, "GMT -09:00"); \ ??init_time_zone_5: \ 00000064 241081E2 ADD R1,R1,#+36 \ 00000068 FBFFFFEA B ??init_time_zone_4 379 break; 380 case 4: 381 sprintf(tim_zone, "GMT -08:00"); \ ??init_time_zone_6: \ 0000006C 301081E2 ADD R1,R1,#+48 \ 00000070 F9FFFFEA B ??init_time_zone_4 382 break; 383 case 5: 384 sprintf(tim_zone, "GMT -07:00"); \ ??init_time_zone_7: \ 00000074 3C1081E2 ADD R1,R1,#+60 \ 00000078 F7FFFFEA B ??init_time_zone_4 385 break; 386 case 6: 387 sprintf(tim_zone, "GMT -06:00"); \ ??init_time_zone_8: \ 0000007C 481081E2 ADD R1,R1,#+72 \ 00000080 F5FFFFEA B ??init_time_zone_4 388 break; 389 case 7: 390 sprintf(tim_zone, "GMT -05:00"); \ ??init_time_zone_9: \ 00000084 541081E2 ADD R1,R1,#+84 \ 00000088 F3FFFFEA B ??init_time_zone_4 391 break; 392 case 8: 393 sprintf(tim_zone, "GMT -04:00"); \ ??init_time_zone_10: \ 0000008C 601081E2 ADD R1,R1,#+96 \ 00000090 F1FFFFEA B ??init_time_zone_4 394 break; 395 case 9: 396 sprintf(tim_zone, "GMT -03:30"); \ ??init_time_zone_11: \ 00000094 6C1081E2 ADD R1,R1,#+108 \ 00000098 EFFFFFEA B ??init_time_zone_4 397 break; 398 case 10: 399 sprintf(tim_zone, "GMT -03:00"); \ ??init_time_zone_12: \ 0000009C 781081E2 ADD R1,R1,#+120 \ 000000A0 EDFFFFEA B ??init_time_zone_4 400 break; 401 case 11: 402 sprintf(tim_zone, "GMT -02:00"); \ ??init_time_zone_13: \ 000000A4 841081E2 ADD R1,R1,#+132 \ 000000A8 EBFFFFEA B ??init_time_zone_4 403 break; 404 case 12: 405 sprintf(tim_zone, "GMT -01:00"); \ ??init_time_zone_14: \ 000000AC 901081E2 ADD R1,R1,#+144 \ 000000B0 E9FFFFEA B ??init_time_zone_4 406 break; 407 case 13: 408 sprintf(tim_zone, "GMT 00:00"); \ ??init_time_zone_15: \ 000000B4 9C1081E2 ADD R1,R1,#+156 \ 000000B8 E7FFFFEA B ??init_time_zone_4 409 break; 410 case 14: 411 sprintf(tim_zone, "GMT +01:00"); \ ??init_time_zone_16: \ 000000BC A81081E2 ADD R1,R1,#+168 \ 000000C0 E5FFFFEA B ??init_time_zone_4 412 break; 413 case 15: 414 sprintf(tim_zone, "GMT +02:00"); \ ??init_time_zone_17: \ 000000C4 B41081E2 ADD R1,R1,#+180 \ 000000C8 E3FFFFEA B ??init_time_zone_4 415 break; 416 case 16: 417 sprintf(tim_zone, "GMT +03:00"); \ ??init_time_zone_18: \ 000000CC C01081E2 ADD R1,R1,#+192 \ 000000D0 E1FFFFEA B ??init_time_zone_4 418 break; 419 case 17: 420 sprintf(tim_zone, "GMT +03:30"); \ ??init_time_zone_19: \ 000000D4 CC1081E2 ADD R1,R1,#+204 \ 000000D8 DFFFFFEA B ??init_time_zone_4 421 break; 422 case 18: 423 sprintf(tim_zone, "GMT +04:00"); \ ??init_time_zone_20: \ 000000DC D81081E2 ADD R1,R1,#+216 \ 000000E0 DDFFFFEA B ??init_time_zone_4 424 break; 425 case 19: 426 sprintf(tim_zone, "GMT +04:30"); \ ??init_time_zone_21: \ 000000E4 E41081E2 ADD R1,R1,#+228 \ 000000E8 DBFFFFEA B ??init_time_zone_4 427 break; 428 case 20: 429 sprintf(tim_zone, "GMT +05:00"); \ ??init_time_zone_22: \ 000000EC F01081E2 ADD R1,R1,#+240 \ 000000F0 D9FFFFEA B ??init_time_zone_4 430 break; 431 case 21: 432 sprintf(tim_zone, "GMT +05:30"); \ ??init_time_zone_23: \ 000000F4 FC1081E2 ADD R1,R1,#+252 \ 000000F8 D7FFFFEA B ??init_time_zone_4 433 break; 434 case 22: 435 sprintf(tim_zone, "GMT +05:45"); \ ??init_time_zone_24: \ 000000FC 421F81E2 ADD R1,R1,#+264 \ 00000100 D5FFFFEA B ??init_time_zone_4 436 break; 437 case 23: 438 sprintf(tim_zone, "GMT +06:00"); \ ??init_time_zone_25: \ 00000104 451F81E2 ADD R1,R1,#+276 \ 00000108 D3FFFFEA B ??init_time_zone_4 439 break; 440 case 24: 441 sprintf(tim_zone, "GMT +06:30"); \ ??init_time_zone_26: \ 0000010C 481F81E2 ADD R1,R1,#+288 \ 00000110 D1FFFFEA B ??init_time_zone_4 442 break; 443 case 25: 444 sprintf(tim_zone, "GMT +07:00"); \ ??init_time_zone_27: \ 00000114 4B1F81E2 ADD R1,R1,#+300 \ 00000118 CFFFFFEA B ??init_time_zone_4 445 break; 446 case 26: 447 sprintf(tim_zone, "GMT +08:00"); \ ??init_time_zone_28: \ 0000011C 4E1F81E2 ADD R1,R1,#+312 \ 00000120 CDFFFFEA B ??init_time_zone_4 448 break; 449 case 27: 450 sprintf(tim_zone, "GMT +09:00"); \ ??init_time_zone_29: \ 00000124 511F81E2 ADD R1,R1,#+324 \ 00000128 CBFFFFEA B ??init_time_zone_4 451 break; 452 case 28: 453 sprintf(tim_zone, "GMT +09:30"); \ ??init_time_zone_30: \ 0000012C 541F81E2 ADD R1,R1,#+336 \ 00000130 C9FFFFEA B ??init_time_zone_4 454 break; 455 case 29: 456 sprintf(tim_zone, "GMT +10:00"); \ ??init_time_zone_31: \ 00000134 571F81E2 ADD R1,R1,#+348 \ 00000138 C7FFFFEA B ??init_time_zone_4 457 break; 458 case 30: 459 sprintf(tim_zone, "GMT +11:00"); \ ??init_time_zone_32: \ 0000013C 5A1F81E2 ADD R1,R1,#+360 \ 00000140 C5FFFFEA B ??init_time_zone_4 460 break; 461 case 31: 462 sprintf(tim_zone, "GMT +12:00"); \ ??init_time_zone_33: \ 00000144 5D1F81E2 ADD R1,R1,#+372 \ 00000148 C3FFFFEA B ??init_time_zone_4 463 break; 464 case 32: 465 sprintf(tim_zone, "GMT +13:00"); \ ??init_time_zone_34: \ 0000014C 601F81E2 ADD R1,R1,#+384 \ 00000150 160000EF SWI +22 466 break; 467 } 468 } \ ??init_time_zone_35: \ 00000154 0080BDE8 POP {PC} ;; return \ ??init_time_zone_1: \ 00000158 ........ DC32 time_zone \ 0000015C ........ DC32 i_rc + 6872 \ 00000160 ........ DC32 `?` 469 470 471 //------------------------ AUTO CHANGE STATUS ------------------------------// 472 473 void SetIconBarHandler(); 474 GBSTMR autoChangeStatus; 475 #pragma inline 476 static unsigned int GetStatusByIndex(int pos) 477 { 478 switch(pos) 479 { 480 case 1: 481 return IS_ONLINE; 482 case 2: 483 return IS_AWAY; 484 case 3: 485 return IS_NA; 486 case 4: 487 return IS_DND; 488 case 5: 489 return IS_OCCUPIED; 490 case 6: 491 return IS_FFC; 492 case 7: 493 return IS_INVISIBLE; 494 case 8: 495 return IS_DEPRESSION; 496 case 9: 497 return IS_EVIL; 498 case 10: 499 return IS_HOME; 500 case 11: 501 return IS_LUNCH; 502 case 12: 503 return IS_WORK; 504 } 505 return IS_UNKNOWN; 506 } 507 508 #ifndef DEBUG \ In segment CODE, align 4, keep-with-next 509 void AutoChangeStatus_timer()//Таймер автосмены статуса 510 { \ AutoChangeStatus_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 511 TTime tt; 512 GetDateTime(NULL,&tt); \ 00000008 0D10A0E1 MOV R1,SP 513 514 if(status_1!=0 && tt.hour==tm_status_1.hour && tt.min==tm_status_1.min) \ 0000000C ........ LDR R4,??DataTable38 ;; 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 515 { 516 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 FC0284E5 STR R0,[R4, #+764] 517 set_my_status(); \ 000000DC ........ BL set_my_status 518 } 519 520 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 521 { 522 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 FC0284E5 STR R0,[R4, #+764] 523 set_my_status(); \ 000001A0 ........ BL set_my_status 524 } 525 526 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 527 { 528 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 FC0284E5 STR R0,[R4, #+764] 529 set_my_status(); \ 00000264 ........ BL set_my_status 530 } 531 532 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 533 { 534 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 FC0284E5 STR R0,[R4, #+764] 535 set_my_status(); \ 00000328 ........ BL set_my_status 536 } 537 538 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 539 { 540 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 FC5284E5 STR R5,[R4, #+764] 541 set_my_status(); \ 000003E4 ........ BL set_my_status 542 } 543 544 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 6A0F81E2 ADD R0,R1,#+424 \ 000003F8 040080E0 ADD R0,R0,R4 \ 000003FC 4D0000EF SWI +77 545 } \ 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 546 #endif 547 //=================================away_msg=============== 548 //////////////////////////////////////////tozhe dlja auto ping/////////////// 549 \ In segment CODE, align 4, keep-with-next 550 void DrawPing(void *canv) 551 { 552 PrintField(Ping_X,Ping_Y, PINGO, align, fonto, spaco1); \ DrawPing: \ 00000000 ........ LDR R0,??DataTable27 ;; spaco1 \ 00000004 34209FE5 LDR R2,??DrawPing_0 ;; i_rc + 6272 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 01002DE9 PUSH {R0} \ 00000014 ........ LDR R0,??DataTable28 ;; fonto \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 01002DE9 PUSH {R0} \ 00000020 ........ LDR R0,??DataTable29 ;; screen3 + 16 \ 00000024 003090E5 LDR R3,[R0, #+0] \ 00000028 14009FE5 LDR R0,??DrawPing_0+0x4 ;; Ping_Y \ 0000002C 001090E5 LDR R1,[R0, #+0] \ 00000030 10009FE5 LDR R0,??DrawPing_0+0x8 ;; Ping_X \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 ........ _BLF PrintField,??PrintField??rA 553 } \ 0000003C 0380BDE8 POP {R0,R1,PC} ;; return \ ??DrawPing_0: \ 00000040 ........ DC32 i_rc + 6272 \ 00000044 ........ DC32 Ping_Y \ 00000048 ........ DC32 Ping_X 554 555 //////////////////////////////////////////tozhe dlja auto ping/////////////// 556 557 GBSTMR remind_tmr; 558 volatile int vibra_count; 559 #ifdef ELKA 560 void SLI_Off(void); 561 #endif 562 void start_vibra2(void); 563 564 //////////////////////////reminder timer///////////////////////// 565 \ In segment CODE, align 4, keep-with-next 566 void Remind_Timer2() 567 { \ Remind_Timer2: \ 00000000 10402DE9 PUSH {R4,LR} 568 if (total_unread) \ 00000004 ........ LDR R4,??DataTable38 ;; i_rc \ 00000008 EC0394E5 LDR R0,[R4, #+1004] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} 569 { 570 vibra_count=Vibra_cc; \ 00000014 24009FE5 LDR R0,??Remind_Timer2_0 ;; Vibra_cc \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C D00384E5 STR R0,[R4, #+976] 571 start_vibra2(); \ 00000020 ........ BL start_vibra2 572 GBS_StartTimerProc(&remind_tmr, 216*30, Remind_Timer2); \ 00000024 ........ LDR R2,??DataTable16 ;; Remind_Timer2 \ 00000028 5010A0E3 MOV R1,#+80 \ 0000002C 641D81E3 ORR R1,R1,#0x1900 \ 00000030 6E0F81E2 ADD R0,R1,#+440 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 4D0000EF SWI +77 573 } 574 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return \ ??Remind_Timer2_0: \ 00000040 ........ DC32 Vibra_cc 575 \ In segment CODE, align 4, keep-with-next 576 void Reminder_timer() 577 { 578 GBS_StartTimerProc(&remind_tmr, 216*30, Remind_Timer2); \ Reminder_timer: \ 00000000 ........ LDR R2,??DataTable16 ;; Remind_Timer2 \ 00000004 10009FE5 LDR R0,??Reminder_timer_0 ;; i_rc + 6920 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 5010A0E3 MOV R1,#+80 \ 00000010 641D81E3 ORR R1,R1,#0x1900 \ 00000014 4D0000EF SWI +77 579 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??Reminder_timer_0: \ 0000001C ........ DC32 i_rc + 6920 580 //////////////////////////reminder timer///////////////////////// 581 582 //////////////////////////uptime////////////////////////// 583 //int Is_UPTIME_On; 584 int uptimeHour; 585 int uptimeMin; 586 int uptimeSec; 587 \ In segment CODE, align 4, keep-with-next 588 void UptimeMinHour() 589 { 590 uptimeSec++; \ UptimeMinHour: \ 00000000 ........ LDR R0,??DataTable38 ;; i_rc \ 00000004 201390E5 LDR R1,[R0, #+800] 591 if(uptimeSec==60) \ 00000008 1C2390E5 LDR R2,[R0, #+796] \ 0000000C 011081E2 ADD R1,R1,#+1 \ 00000010 3C0051E3 CMP R1,#+60 592 { 593 uptimeSec=0; \ 00000014 0010A003 MOVEQ R1,#+0 594 uptimeMin++; \ 00000018 01208202 ADDEQ R2,R2,#+1 \ 0000001C 201380E5 STR R1,[R0, #+800] 595 } 596 if(uptimeMin==60) \ 00000020 3C0052E3 CMP R2,#+60 \ 00000024 0300001A BNE ??UptimeMinHour_0 597 { 598 uptimeMin=0; 599 uptimeHour++; \ 00000028 181390E5 LDR R1,[R0, #+792] \ 0000002C 0020A0E3 MOV R2,#+0 \ 00000030 011081E2 ADD R1,R1,#+1 \ 00000034 181380E5 STR R1,[R0, #+792] \ ??UptimeMinHour_0: \ 00000038 1C2380E5 STR R2,[R0, #+796] 600 } 601 } \ 0000003C 1EFF2FE1 BX LR ;; return 602 603 GBSTMR uptime_tmr; 604 #ifdef NEWSGOLD 605 GBSTMR tracktmr; 606 int tracktimer; 607 #endif 608 \ In segment CODE, align 4, keep-with-next 609 void upTime() 610 { \ upTime: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 611 if(connect_state==3) \ 00000004 ........ LDR R4,??DataTable38 ;; i_rc \ 00000008 88609FE5 LDR R6,??upTime_0 ;; upTime \ 0000000C 1800A0E3 MOV R0,#+24 \ 00000010 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 ........ LDR R0,??DataTable19 ;; screen3 + 52 \ 0000001C 0070A0E3 MOV R7,#+0 \ 00000020 000090E5 LDR R0,[R0, #+0] \ 00000024 030050E3 CMP R0,#+3 \ 00000028 0F00001A BNE ??upTime_1 612 { 613 UptimeMinHour(); \ 0000002C ........ BL UptimeMinHour 614 #ifdef NEWSGOLD 615 if (tracktimer>=10)/*&&(_GetPlayStatus()!=1))*/ \ 00000030 240394E5 LDR R0,[R4, #+804] \ 00000034 0A0050E3 CMP R0,#+10 \ 00000038 070000BA BLT ??upTime_2 616 { 617 GBS_StartTimerProc(&tracktmr, 216*5, GetTags); \ 0000003C ........ LDR R2,??DataTable20 ;; GetTags \ 00000040 3810A0E3 MOV R1,#+56 \ 00000044 401E81E3 ORR R1,R1,#0x400 \ 00000048 2800A0E3 MOV R0,#+40 \ 0000004C 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000050 040080E0 ADD R0,R0,R4 \ 00000054 4D0000EF SWI +77 618 tracktimer=0; \ 00000058 247384E5 STR R7,[R4, #+804] 619 } 620 tracktimer++; \ ??upTime_2: \ 0000005C 240394E5 LDR R0,[R4, #+804] \ 00000060 010080E2 ADD R0,R0,#+1 \ 00000064 240384E5 STR R0,[R4, #+804] 621 #endif 622 GBS_StartTimerProc(&uptime_tmr, 216, upTime); \ 00000068 050000EA B ??upTime_3 623 } 624 else 625 { 626 if(!Pause_Time) \ ??upTime_1: \ 0000006C 28009FE5 LDR R0,??upTime_0+0x4 ;; Pause_Time \ 00000070 000090E5 LDR R0,[R0, #+0] \ 00000074 000050E3 CMP R0,#+0 627 { 628 uptimeHour=0; \ 00000078 18738405 STREQ R7,[R4, #+792] 629 uptimeMin=0; \ 0000007C 1C738405 STREQ R7,[R4, #+796] 630 uptimeSec=0; \ 00000080 20738405 STREQ R7,[R4, #+800] 631 } 632 GBS_StartTimerProc(&uptime_tmr, 216, upTime); \ ??upTime_3: \ 00000084 0620A0E1 MOV R2,R6 \ 00000088 D810A0E3 MOV R1,#+216 \ 0000008C 0500A0E1 MOV R0,R5 \ 00000090 4D0000EF SWI +77 633 } 634 } \ 00000094 F080BDE8 POP {R4-R7,PC} ;; return \ ??upTime_0: \ 00000098 ........ DC32 upTime \ 0000009C ........ DC32 Pause_Time 635 636 char onlineTime[128]; \ In segment CODE, align 4, keep-with-next 637 void DrawOnlineTime(void *canv) 638 { 639 if(connect_state==3) \ DrawOnlineTime: \ 00000000 ........ LDR R0,??DataTable38 ;; i_rc \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 ........ LDR R5,??DataTable31 ;; screen3 \ 0000000C 3810A0E3 MOV R1,#+56 \ 00000010 342095E5 LDR R2,[R5, #+52] \ 00000014 6C1D81E3 ORR R1,R1,#0x1B00 \ 00000018 004081E0 ADD R4,R1,R0 \ 0000001C 68109FE5 LDR R1,??DrawOnlineTime_0 ;; `?` \ 00000020 030052E3 CMP R2,#+3 \ 00000024 0700001A BNE ??DrawOnlineTime_1 640 { 641 sprintf(onlineTime,"Online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); \ 00000028 202390E5 LDR R2,[R0, #+800] \ 0000002C 04002DE9 PUSH {R2} \ 00000030 1C3390E5 LDR R3,[R0, #+796] \ 00000034 182390E5 LDR R2,[R0, #+792] \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 160000EF SWI +22 \ 00000040 04D08DE2 ADD SP,SP,#+4 \ 00000044 020000EA B ??DrawOnlineTime_2 642 } 643 else 644 sprintf(onlineTime,"Offline"); \ ??DrawOnlineTime_1: \ 00000048 181081E2 ADD R1,R1,#+24 \ 0000004C 0400A0E1 MOV R0,R4 \ 00000050 160000EF SWI +22 645 PrintField(onlineTime_x,onlineTime_y, onlineTime, align, fonto, spaco1); \ ??DrawOnlineTime_2: \ 00000054 ........ LDR R0,??DataTable27 ;; spaco1 \ 00000058 0420A0E1 MOV R2,R4 \ 0000005C 000090E5 LDR R0,[R0, #+0] \ 00000060 01002DE9 PUSH {R0} \ 00000064 ........ LDR R0,??DataTable28 ;; fonto \ 00000068 000090E5 LDR R0,[R0, #+0] \ 0000006C 01002DE9 PUSH {R0} \ 00000070 103095E5 LDR R3,[R5, #+16] \ 00000074 14009FE5 LDR R0,??DrawOnlineTime_0+0x4 ;; onlineTime_y \ 00000078 001090E5 LDR R1,[R0, #+0] \ 0000007C 10009FE5 LDR R0,??DrawOnlineTime_0+0x8 ;; onlineTime_x \ 00000080 000090E5 LDR R0,[R0, #+0] \ 00000084 ........ _BLF PrintField,??PrintField??rA 646 } \ 00000088 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??DrawOnlineTime_0: \ 0000008C ........ DC32 `?` \ 00000090 ........ DC32 onlineTime_y \ 00000094 ........ DC32 onlineTime_x 647 648 649 //---------------------- Вывод времени на идле ---------------------// 650 651 \ In segment CODE, align 4, keep-with-next 652 void DrawAutoMSG(void *canv) 653 { 654 char awayTime[64]; 655 if(away_m && showAwayIdle) \ DrawAutoMSG: \ 00000000 ........ LDR R0,??DataTable38 ;; i_rc \ 00000004 00402DE9 PUSH {LR} \ 00000008 40D04DE2 SUB SP,SP,#+64 \ 0000000C 081390E5 LDR R1,[R0, #+776] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 1800000A BEQ ??DrawAutoMSG_0 \ 00000018 ........ LDR R1,??DataTable26 ;; showAwayIdle \ 0000001C 001091E5 LDR R1,[R1, #+0] \ 00000020 000051E3 CMP R1,#+0 \ 00000024 1400000A BEQ ??DrawAutoMSG_0 656 { 657 sprintf(awayTime,"Away from [%s]",away_msg_time_dace); \ 00000028 C810A0E3 MOV R1,#+200 \ 0000002C 681D81E3 ORR R1,R1,#0x1A00 \ 00000030 002081E0 ADD R2,R1,R0 \ 00000034 48109FE5 LDR R1,??DrawAutoMSG_1 ;; `?` \ 00000038 0D00A0E1 MOV R0,SP \ 0000003C 160000EF SWI +22 658 PrintField(auto_x,auto_y, awayTime, align, fonto, spaco1); \ 00000040 ........ LDR R0,??DataTable27 ;; spaco1 \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 01002DE9 PUSH {R0} \ 0000004C ........ LDR R0,??DataTable28 ;; fonto \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 01002DE9 PUSH {R0} \ 00000058 ........ LDR R0,??DataTable29 ;; screen3 + 16 \ 0000005C 08208DE2 ADD R2,SP,#+8 \ 00000060 003090E5 LDR R3,[R0, #+0] \ 00000064 1C009FE5 LDR R0,??DrawAutoMSG_1+0x4 ;; auto_y \ 00000068 001090E5 LDR R1,[R0, #+0] \ 0000006C 18009FE5 LDR R0,??DrawAutoMSG_1+0x8 ;; auto_x \ 00000070 000090E5 LDR R0,[R0, #+0] \ 00000074 ........ _BLF PrintField,??PrintField??rA \ 00000078 08D08DE2 ADD SP,SP,#+8 659 } 660 } \ ??DrawAutoMSG_0: \ 0000007C 40D08DE2 ADD SP,SP,#+64 ;; stack cleaning \ 00000080 0080BDE8 POP {PC} ;; return \ ??DrawAutoMSG_1: \ 00000084 ........ DC32 `?` \ 00000088 ........ DC32 auto_y \ 0000008C ........ DC32 auto_x 661 662 663 //---------------------------- Input away msg ---------------------------// 664 665 //Вводим сообщение какое хотим,а не то что прописали в конфиге 666 int input_awaymsg_id; 667 668 const HEADER_DESC input_awaymsg_hdr={0,0,131,21,NULL,(int)"Ввод автосообщения",LGP_NULL}; 669 //void UpdateCLheader(void); \ In segment CODE, align 4, keep-with-next 670 int input_awaymsg_onkey(GUI *data, GUI_MSG *msg) 671 { \ input_awaymsg_onkey: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 672 WSHDR *ws; 673 if (msg->keys==0x0FFF || msg->keys==VOL_DOWN_BUTTON) \ 00000008 ........ LDR R5,??DataTable38 ;; i_rc \ 0000000C ........ LDR R6,??DataTable31 ;; screen3 \ 00000010 0140A0E1 MOV R4,R1 \ 00000014 F210D4E1 LDRSH R1,[R4, #+2] \ 00000018 0070A0E3 MOV R7,#+0 \ 0000001C FF20A0E3 MOV R2,#+255 \ 00000020 F02E82E3 ORR R2,R2,#0xF00 \ 00000024 020051E1 CMP R1,R2 \ 00000028 0E005113 CMPNE R1,#+14 \ 0000002C 2200001A BNE ??input_awaymsg_onkey_0 674 { 675 EDITCONTROL ec; 676 ExtractEditControl(data,2,&ec); 677 ws=ec.pWS; 678 zeromem(awayMsg,256); \ 00000030 ........ LDR R9,??DataTable34 ;; awayMsg \ 00000034 0D20A0E1 MOV R2,SP \ 00000038 0210A0E3 MOV R1,#+2 \ 0000003C 690100EF SWI +361 \ 00000040 28809DE5 LDR R8,[SP, #+40] \ 00000044 401FA0E3 MOV R1,#+256 \ 00000048 0900A0E1 MOV R0,R9 \ 0000004C 1D0100EF SWI +285 679 int i=0; 680 for(i=0;iwsbody[0];i++) \ 00000050 000098E5 LDR R0,[R8, #+0] \ 00000054 00A0A0E3 MOV R10,#+0 \ 00000058 B000D0E1 LDRH R0,[R0, #+0] \ 0000005C 000050E3 CMP R0,#+0 \ 00000060 0500001A BNE ??input_awaymsg_onkey_1 \ 00000064 080000EA B ??input_awaymsg_onkey_2 681 awayMsg[i]=char16to8(ws->wsbody[i+1]); \ ??input_awaymsg_onkey_3: \ 00000068 8A0080E0 ADD R0,R0,R10, LSL #+1 \ 0000006C B200D0E1 LDRH R0,[R0, #+2] \ 00000070 ........ _BLF char16to8,??char16to8??rA \ 00000074 0900CAE7 STRB R0,[R10, +R9] \ 00000078 01A08AE2 ADD R10,R10,#+1 \ ??input_awaymsg_onkey_1: \ 0000007C 000098E5 LDR R0,[R8, #+0] \ 00000080 B010D0E1 LDRH R1,[R0, #+0] \ 00000084 01005AE1 CMP R10,R1 \ 00000088 F6FFFFBA BLT ??input_awaymsg_onkey_3 682 awayMsg[i]=0; 683 684 #ifdef kluchnik2 685 char *s; 686 ExtractEditControl(data,4,&ec); 687 ws=ec.pWS; 688 s=malloc(ws->wsbody[0]); 689 *s=0; 690 for(i=0;iwsbody[0];i++) 691 *(s+i)=char16to8(ws->wsbody[i+1]); 692 *(s+i)=0; 693 strcat(awayMsg,s); 694 mfree(s); 695 #endif 696 msg_away_timer=(AUTO_ENGADE*12); \ ??input_awaymsg_onkey_2: \ 0000008C ........ LDR R0,??DataTable33 ;; AUTO_ENGADE \ 00000090 0970CAE7 STRB R7,[R10, +R9] \ 00000094 000090E5 LDR R0,[R0, #+0] \ 00000098 0C10A0E3 MOV R1,#+12 \ 0000009C 910000E0 MUL R0,R1,R0 \ 000000A0 2C0086E5 STR R0,[R6, #+44] 697 away_m=1; \ 000000A4 0100A0E3 MOV R0,#+1 \ 000000A8 080385E5 STR R0,[R5, #+776] 698 away_timer(); \ 000000AC ........ BL away_timer 699 // UpdateCLheader(); 700 GeneralFunc_flag1(input_awaymsg_id,1); \ 000000B0 280395E5 LDR R0,[R5, #+808] \ 000000B4 0110A0E3 MOV R1,#+1 \ 000000B8 3D0100EF SWI +317 701 // GeneralFuncF1(1); 702 } 703 704 if(msg->keys==LEFT_SOFT || msg->keys==RED_BUTTON) \ ??input_awaymsg_onkey_0: \ 000000BC F200D4E1 LDRSH R0,[R4, #+2] \ 000000C0 010050E3 CMP R0,#+1 \ 000000C4 0C005013 CMPNE R0,#+12 \ 000000C8 0800001A BNE ??input_awaymsg_onkey_4 705 { 706 msg_away_timer=0; 707 away_m=0; 708 if(change_back_status) \ 000000CC 100395E5 LDR R0,[R5, #+784] \ 000000D0 2C7086E5 STR R7,[R6, #+44] \ 000000D4 087385E5 STR R7,[R5, #+776] \ 000000D8 000050E3 CMP R0,#+0 \ 000000DC 0400000A BEQ ??input_awaymsg_onkey_5 709 { 710 CurrentStatus=status_rem; \ 000000E0 0C0395E5 LDR R0,[R5, #+780] \ 000000E4 FC0285E5 STR R0,[R5, #+764] 711 set_my_status(); \ 000000E8 ........ BL set_my_status 712 change_back_status=0; \ 000000EC 107385E5 STR R7,[R5, #+784] 713 } 714 // UpdateCLheader(); 715 } 716 return(0); \ ??input_awaymsg_onkey_4: \ 000000F0 0000A0E3 MOV R0,#+0 \ ??input_awaymsg_onkey_5: \ 000000F4 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000F8 F087BDE8 POP {R4-R10,PC} ;; return 717 } 718 \ In segment CODE, align 4, keep-with-next 719 void input_awaymsg_ghook(GUI *gui, int cmd) 720 { \ input_awaymsg_ghook: \ 00000000 00402DE9 PUSH {LR} 721 static SOFTKEY_DESC sk={0x0FFF,0x0000,(int)"Сохранить"}; 722 if (cmd==7) \ 00000004 070051E3 CMP R1,#+7 \ 00000008 0300001A BNE ??input_awaymsg_ghook_0 723 { 724 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} 725 } 726 if(cmd==0xA) \ ??input_awaymsg_ghook_0: \ 0000001C 0A0051E3 CMP R1,#+10 \ 00000020 0100001A BNE ??input_awaymsg_ghook_2 727 { 728 DisableIDLETMR(); // Отключаем таймер выхода по таймауту \ 00000024 7F0100EF SWI +383 \ 00000028 0080BDE8 POP {PC} 729 } 730 if (cmd==0x0C) \ ??input_awaymsg_ghook_2: \ 0000002C 0C0051E3 CMP R1,#+12 \ 00000030 0080BD18 POPNE {PC} 731 { 732 EDIT_SetCursorPos(gui,1); \ 00000034 0110A0E3 MOV R1,#+1 \ 00000038 D40100EF SWI +468 733 } 734 if(cmd==0x03){} 735 } \ 0000003C 0080BDE8 POP {PC} ;; return \ ??input_awaymsg_ghook_1: \ 00000040 ........ DC32 ??sk 736 \ In segment CODE, align 4, keep-with-next 737 void input_awaymsg_locret(void){} \ input_awaymsg_locret: \ 00000000 1EFF2FE1 BX LR ;; return 738 739 SOFTKEY_DESC input_awaymsg_sk[]= 740 { 741 {0x0018,0x0000,(int)"Лев"}, 742 {0x0001,0x0000,(int)"Прав"}, 743 {0x003D,0x0000,(int)LGP_DOIT_PIC} 744 }; 745 746 SOFTKEYSTAB input_awaymsg_skt= 747 { 748 input_awaymsg_sk,0 749 }; 750 751 const INPUTDIA_DESC input_awaymsg_desc= 752 { 753 1, 754 input_awaymsg_onkey, 755 input_awaymsg_ghook, 756 (void *)input_awaymsg_locret, 757 0, 758 &input_awaymsg_skt, 759 {0,NULL,NULL,NULL}, 760 FONT_SMALL, 761 100, 762 101, 763 0, 764 0x00000000, 765 0x40000000 766 }; 767 \ In segment CODE, align 4, keep-with-next 768 void InputAwayMsg() 769 { \ InputAwayMsg: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 770 WSHDR *wss=AllocWS(256); 771 void *ma=malloc_adr(); 772 void *eq=AllocEQueue(ma, mfree_adr()); 773 EDITCONTROL ec; 774 PrepareEditControl(&ec); 775 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 776 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 777 AddEditControlToEditQend(eq,&ec,ma); \ 00000068 0720A0E1 MOV R2,R7 \ 0000006C 04108DE2 ADD R1,SP,#+4 \ 00000070 0400A0E1 MOV R0,R4 \ 00000074 660100EF SWI +358 778 779 PrepareEditControl(&ec); \ 00000078 04008DE2 ADD R0,SP,#+4 \ 0000007C 640100EF SWI +356 780 CutWSTR(wss,0); \ 00000080 0010A0E3 MOV R1,#+0 \ 00000084 0600A0E1 MOV R0,R6 \ 00000088 260100EF SWI +294 781 ascii2ws(wss,awayMsg); \ 0000008C ........ LDR R1,??DataTable34 ;; awayMsg \ 00000090 0600A0E1 MOV R0,R6 \ 00000094 ........ _BLF ascii2ws,??ascii2ws??rA 782 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 783 AddEditControlToEditQend(eq,&ec,ma); \ 000000B4 0720A0E1 MOV R2,R7 \ 000000B8 08108DE2 ADD R1,SP,#+8 \ 000000BC 0400A0E1 MOV R0,R4 \ 000000C0 660100EF SWI +358 784 #ifdef kluchnik2 785 PrepareEditControl(&ec); 786 wsprintf(wss,"%t","Сообщение 2:\n"); 787 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); 788 AddEditControlToEditQend(eq,&ec,ma); 789 790 ascii2ws(wss,"когда смогу отвечу:)"); 791 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); 792 AddEditControlToEditQend(eq,&ec,ma); 793 #endif 794 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] 795 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] 796 797 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 + 808 \ 00000138 000081E5 STR R0,[R1, #+0] 798 } \ 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 + 808 799 800 801 //////////////////////////uptime////////////////////////// 802 #ifdef ELKA 803 GBSTMR sli_tmr; 804 void SLI_On() 805 { 806 if(Is_SLI_On) 807 SLI_SetState(1); 808 GBS_StartTimerProc(&sli_tmr, IN_TICKS(2) / 20, SLI_Off); 809 } 810 811 void SLI_Off() 812 { 813 SLI_SetState(2); 814 if(total_unread) 815 GBS_StartTimerProc(&sli_tmr, IN_TICKS(2) / 20, SLI_On); //26*SLI_time2 816 else 817 SLI_SetState(0); 818 } 819 820 void SLI_check() 821 { 822 if (total_unread) 823 SLI_On(); 824 } 825 826 void SLI_Timer() 827 { 828 GBS_StartTimerProc(&sli_tmr, 262, SLI_check); //262*SLI_time 829 } 830 #endif 831 \ In segment CODE, align 4, keep-with-next 832 void setup_ICONS(void) 833 { \ setup_ICONS: \ 00000000 30402DE9 PUSH {R4,R5,LR} 834 int i=0; \ 00000004 0040A0E3 MOV R4,#+0 835 do 836 { 837 if (!S_ICONS[i]) S_ICONS[i]=(int)MakeGlobalString(ICON_PATH,'\\',icons_names[i]); \ ??setup_ICONS_0: \ 00000008 ........ LDR R0,??DataTable38 ;; i_rc \ 0000000C 045180E0 ADD R5,R0,R4, LSL #+2 \ 00000010 740295E5 LDR R0,[R5, #+628] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0500001A BNE ??setup_ICONS_1 \ 0000001C ........ LDR R0,??DataTable40 ;; icons_names \ 00000020 5C10A0E3 MOV R1,#+92 \ 00000024 042190E7 LDR R2,[R0, +R4, LSL #+2] \ 00000028 ........ LDR R0,??DataTable39 ;; ICON_PATH \ 0000002C ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 00000030 740285E5 STR R0,[R5, #+628] 838 i++; \ ??setup_ICONS_1: \ 00000034 014084E2 ADD R4,R4,#+1 839 } 840 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 859 do 860 { 861 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 862 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 863 XStatusImg[i]=CreateIMGHDRFromPngFile(s,2); \ 00000040 0210A0E3 MOV R1,#+2 \ 00000044 0500A0E1 MOV R0,R5 \ 00000048 E90100EF SWI +489 \ 0000004C ........ LDR R1,??DataTable38 ;; i_rc \ 00000050 041181E0 ADD R1,R1,R4, LSL #+2 \ 00000054 2C0381E5 STR R0,[R1, #+812] 864 865 i++; \ ??XStatusToIMGHDR_2: \ 00000058 014084E2 ADD R4,R4,#+1 866 } 867 while(i<35); \ 0000005C 230054E3 CMP R4,#+35 \ 00000060 EDFFFFBA BLT ??XStatusToIMGHDR_1 868 } \ 00000064 F080BDE8 POP {R4-R7,PC} ;; return \ ??XStatusToIMGHDR_0: \ 00000068 ........ DC32 `?` \ 0000006C ........ DC32 XSTATUSES_PATH 869 870 \ In segment CODE, align 4, keep-with-next 871 void StatusToIMGHDR() 872 { \ StatusToIMGHDR: \ 00000000 70402DE9 PUSH {R4-R6,LR} 873 int i=0; \ 00000004 ........ LDR R5,??DataTable39 ;; ICON_PATH \ 00000008 ........ LDR R6,??DataTable40 ;; icons_names \ 0000000C 0040A0E3 MOV R4,#+0 874 do 875 { 876 #ifdef ELKA 877 icons[i]=CreateIMGHDRFromPngFile( MakeGlobalString(ICON_PATH2,'\\',icons_names[i]),2); 878 #else 879 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,??DataTable67 ;; i_rc \ 0000002C 041181E0 ADD R1,R1,R4, LSL #+2 \ 00000030 080081E5 STR R0,[R1, #+8] 880 #endif 881 i++; \ 00000034 014084E2 ADD R4,R4,#+1 882 } 883 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 896 i++; \ ??FreeStatusToIMGHDR_1: \ 00000024 014084E2 ADD R4,R4,#+1 897 } 898 while(ibitmap) mfree(XStatusImg[i]->bitmap); \ 00000048 0100A0E1 MOV R0,R1 \ 0000004C 150000EF SWI +21 904 i++; \ ??FreeStatusToIMGHDR_3: \ 00000050 014084E2 ADD R4,R4,#+1 905 } 906 while(i<35); \ 00000054 230054E3 CMP R4,#+35 \ 00000058 F5FFFFBA BLT ??FreeStatusToIMGHDR_2 907 } \ 0000005C 3080BDE8 POP {R4,R5,PC} ;; return 908 \ In segment CODE, align 4, keep-with-next 909 void free_ICONS(void) 910 { \ free_ICONS: \ 00000000 70402DE9 PUSH {R4-R6,LR} 911 int i=0; \ 00000004 0040A0E3 MOV R4,#+0 \ 00000008 0050A0E3 MOV R5,#+0 912 do 913 { 914 mfree((void*)S_ICONS[i]); \ ??free_ICONS_0: \ 0000000C ........ LDR R0,??DataTable67 ;; i_rc \ 00000010 046180E0 ADD R6,R0,R4, LSL #+2 \ 00000014 740296E5 LDR R0,[R6, #+628] 915 S_ICONS[i]=0; 916 i++; \ 00000018 014084E2 ADD R4,R4,#+1 \ 0000001C 150000EF SWI +21 \ 00000020 745286E5 STR R5,[R6, #+628] 917 } 918 while(i>2,stop_vibra); \ 0000004C 3610A0E3 MOV R1,#+54 \ 00000050 000000EA B ??start_vibra_2 1189 else 1190 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra); \ ??start_vibra_1: \ 00000054 6C10A0E3 MOV R1,#+108 \ ??start_vibra_2: \ 00000058 4D0000EF SWI +77 1191 } 1192 } \ 0000005C 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra_0: \ 00000060 ........ DC32 stop_vibra 1193 \ In segment CODE, align 4, keep-with-next 1194 void stop_vibra(void) 1195 { \ stop_vibra: \ 00000000 00402DE9 PUSH {LR} 1196 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1197 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable67 ;; i_rc \ 00000010 D01390E5 LDR R1,[R0, #+976] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 D01380E5 STR R1,[R0, #+976] \ 0000001C 0080BD08 POPEQ {PC} 1198 { 1199 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra_0 ;; start_vibra \ 00000024 C810A0E3 MOV R1,#+200 \ 00000028 741D81E3 ORR R1,R1,#0x1D00 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable62 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra_1 1200 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra_2 1201 else 1202 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra); \ ??stop_vibra_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra_2: \ 0000004C 4D0000EF SWI +77 1203 } 1204 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra_0: \ 00000054 ........ DC32 start_vibra 1205 \ In segment CODE, align 4, keep-with-next 1206 void start_vibra2(void) 1207 { 1208 void stop_vibra2(void); 1209 1210 SetVibration(vibraPower); \ start_vibra2: \ 00000000 ........ LDR R0,??DataTable59 ;; vibraPower \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 7C0000EF SWI +124 1211 if(VIBR_TYPE) \ 00000010 ........ LDR R1,??DataTable62 ;; VIBR_TYPE \ 00000014 18009FE5 LDR R0,??start_vibra2_0 ;; i_rc + 7624 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 14209FE5 LDR R2,??start_vibra2_0+0x4 ;; stop_vibra2 \ 00000020 000051E3 CMP R1,#+0 1212 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>2,stop_vibra2); \ 00000024 3610A013 MOVNE R1,#+54 1213 else 1214 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra2); \ 00000028 6C10A003 MOVEQ R1,#+108 \ 0000002C 4D0000EF SWI +77 1215 } \ 00000030 0080BDE8 POP {PC} ;; return \ ??start_vibra2_0: \ 00000034 ........ DC32 i_rc + 7624 \ 00000038 ........ DC32 stop_vibra2 1216 \ In segment CODE, align 4, keep-with-next 1217 void stop_vibra2(void) 1218 { \ stop_vibra2: \ 00000000 00402DE9 PUSH {LR} 1219 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1220 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable67 ;; i_rc \ 00000010 D01390E5 LDR R1,[R0, #+976] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 D01380E5 STR R1,[R0, #+976] \ 0000001C 0080BD08 POPEQ {PC} 1221 { 1222 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra2_0 ;; start_vibra2 \ 00000024 C810A0E3 MOV R1,#+200 \ 00000028 741D81E3 ORR R1,R1,#0x1D00 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable62 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra2_1 1223 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra2); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra2_2 1224 else 1225 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra2); \ ??stop_vibra2_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra2_2: \ 0000004C 4D0000EF SWI +77 1226 } 1227 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra2_0: \ 00000054 ........ DC32 start_vibra2 1228 \ In segment CODE, align 4, keep-with-next 1229 void ChangeVibra(void) 1230 { 1231 if (!(Is_Vibra_Enabled=!(Is_Vibra_Enabled))) \ ChangeVibra: \ 00000000 ........ LDR R0,??DataTable67 ;; i_rc \ 00000004 00402DE9 PUSH {LR} \ 00000008 6C1290E5 LDR R1,[R0, #+620] \ 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,??DataTable69 ;; 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 1273 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 1274 if ((fsize=stat.size)<=0) goto L1; \ 00000060 08709DE5 LDR R7,[SP, #+8] \ 00000064 010057E3 CMP R7,#+1 \ 00000068 070000BA BLT ??LoadTemplates_1 1275 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 1276 { 1277 L1: 1278 strcpy(fn+i,"\\0.txt"); \ ??LoadTemplates_1: \ 0000008C 081086E2 ADD R1,R6,#+8 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 1A0000EF SWI +26 1279 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 1280 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 1281 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 1282 } 1283 if (f==-1) return 0; \ ??LoadTemplates_2: \ 000000E0 040058E1 CMP R8,R4 \ 000000E4 F1FFFF0A BEQ ??LoadTemplates_4 1284 p=templates_chars=malloc(fsize+1); \ 000000E8 ........ LDR R4,??DataTable67 ;; i_rc \ 000000EC 010087E2 ADD R0,R7,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 D40384E5 STR R0,[R4, #+980] \ 000000F8 0060A0E1 MOV R6,R0 1285 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] 1286 fclose(f,&ul); \ 00000118 0D10A0E1 MOV R1,SP \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 0D0000EF SWI +13 1287 i=0; \ 00000124 0070A0E3 MOV R7,#+0 1288 pp=p; \ 00000128 0680A0E1 MOV R8,R6 \ 0000012C 020000EA B ??LoadTemplates_6 1289 for(;;) 1290 { 1291 c=*p; 1292 if (c<32) 1293 { 1294 if (pp&&(pp!=p)) 1295 { 1296 templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 1297 templates_lines[i++]=pp; 1298 } 1299 pp=NULL; 1300 if (!c) break; 1301 *p=0; 1302 } 1303 else 1304 { 1305 if (pp==NULL) pp=p; \ ??LoadTemplates_7: \ 00000130 000058E3 CMP R8,#+0 \ 00000134 0680A001 MOVEQ R8,R6 1306 } 1307 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 D80394E5 LDR R0,[R4, #+984] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 D80384E5 STR R0,[R4, #+984] \ 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 1308 } 1309 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 `?` 1310 } 1311 1312 1313 1314 //---------------------- AUTOBOT MESSAGE -------------------------// 1315 1316 1317 #ifdef kluchnik 1318 char *bot_chars; //Собственно файл 1319 char **bot_lines; //Массив указателей на строки 1320 1321 void FreeBotMessage(void) 1322 { 1323 if (bot_lines) mfree(bot_lines); 1324 if (bot_chars) mfree(bot_chars); 1325 bot_lines=NULL; 1326 bot_chars=NULL; 1327 } 1328 1329 int LoadBotMessage(unsigned int uin) 1330 { 1331 FSTATS stat; 1332 char fn[256]; 1333 int f; 1334 unsigned int ul; 1335 int i; 1336 int fsize; 1337 char *p; 1338 char *pp; 1339 int c; 1340 FreeBotMessage(); 1341 strcpy(fn,TEMPLATES_PATH); 1342 i=strlen(fn); 1343 sprintf(fn+i,"\\bot_%d.txt",uin); 1344 if (GetFileStats(fn,&stat,&ul)==-1) goto L1; 1345 if ((fsize=stat.size)<=0) goto L1; 1346 if ((f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul))==-1) 1347 { 1348 L1: 1349 strcpy(fn+i,"\\bot.txt"); 1350 if (GetFileStats(fn,&stat,&ul)==-1) return 0; 1351 if ((fsize=stat.size)<=0) return 0; 1352 f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul); 1353 } 1354 if (f==-1) return 0; 1355 p=bot_chars=malloc(fsize+1); 1356 p[fread(f,p,fsize,&ul)]=0; 1357 fclose(f,&ul); 1358 i=0; 1359 pp=p; 1360 for(;;) 1361 { 1362 c=*p; 1363 if (c<32) 1364 { 1365 if (pp&&(pp!=p)) 1366 { 1367 bot_lines=realloc(bot_lines,(i+1)*sizeof(char *)); 1368 bot_lines[i++]=pp; 1369 } 1370 pp=NULL; 1371 if (!c) break; 1372 *p=0; 1373 } 1374 else 1375 { 1376 if (pp==NULL) pp=p; 1377 } 1378 p++; 1379 } 1380 return i; 1381 } 1382 #endif 1383 1384 //=================================================================== 1385 1386 int RXstate=EOP; //-sizeof(RXpkt)..-1 - receive header, 0..RXpkt.data_len - receive data 1387 1388 TPKT RXbuf; 1389 TPKT TXbuf; 1390 1391 int connect_state=0; 1392 1393 int sock=-1; 1394 1395 volatile unsigned long TOTALRECEIVED; 1396 volatile unsigned long TOTALSENDED; 1397 volatile unsigned long ALLTOTALRECEIVED; //by BoBa 10.07 1398 volatile unsigned long ALLTOTALSENDED; 1399 1400 //volatile int sendq_l=0; //Длинна очереди для send 1401 //volatile void *sendq_p=NULL; //указатель очереди 1402 1403 volatile int is_gprs_online=1; 1404 1405 GBSTMR reconnect_tmr; 1406 1407 extern void kill_data(void *p,void (*func_p)(void *)); 1408 \ In segment CODE, align 4, keep-with-next 1409 void ElfKiller(void) 1410 { \ ElfKiller: \ 00000000 00402DE9 PUSH {LR} 1411 extern void *ELF_BEGIN; 1412 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 1413 } 1414 1415 int total_unread; 1416 1417 volatile CLIST *cltop; 1418 1419 volatile unsigned int GROUP_CACHE; //Текущая группа для добавления 1420 1421 //volatile int contactlist_menu_id; 1422 1423 GBSTMR tmr_active; 1424 1425 volatile int edchat_id; 1426 1427 //Применяется для добавления сообщений 1428 //CLIST *edcontact; 1429 //void *edgui_data; 1430 1431 //static int prev_clmenu_itemcount; 1432 1433 char clm_hdr_text[64]; 1434 1435 static const char key_clm_hdr_text[] = LG_CLT9INP; 1436 1437 static const int menusoftkeys[] = {0,1,2}; 1438 static const SOFTKEY_DESC menu_sk[] = 1439 { 1440 {0x0018, 0x0000, (int)LG_SELECT}, 1441 {0x0001, 0x0000, (int)LG_CLOSE}, 1442 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 1443 }; 1444 1445 char clmenu_sk_r[16]; 1446 static const char def_clmenu_sk_r[] = LG_CLOSE; 1447 static const char key_clmenu_sk_r[] = LG_CLEAR; 1448 1449 const SOFTKEYSTAB menu_skt = 1450 { 1451 menu_sk, 0 1452 }; 1453 1454 int tenseconds_to_ping; 1455 \ In segment CODE, align 4, keep-with-next 1456 LOGQ *NewLOGQ(const char *s) 1457 { \ NewLOGQ: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1458 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 1459 zeromem(p,sizeof(LOGQ)); \ 00000018 6010A0E3 MOV R1,#+96 \ 0000001C 1D0100EF SWI +285 1460 strcpy(p->text,s); \ 00000020 0410A0E1 MOV R1,R4 \ 00000024 600085E2 ADD R0,R5,#+96 \ 00000028 1A0000EF SWI +26 1461 return p; \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 3080BDE8 POP {R4,R5,PC} ;; return 1462 } 1463 \ In segment CODE, align 4, keep-with-next 1464 LOGQ *LastLOGQ(LOGQ **pp) 1465 { 1466 LOGQ *q=*pp; \ LastLOGQ: \ 00000000 000090E5 LDR R0,[R0, #+0] 1467 if (q) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 1EFF2F01 BXEQ LR \ 0000000C 000000EA B ??LastLOGQ_0 1468 { 1469 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 1470 } 1471 return(q); \ 00000020 1EFF2FE1 BX LR ;; return 1472 } 1473 1474 //Уничтожить лог \ In segment CODE, align 4, keep-with-next 1475 void FreeLOGQ(LOGQ **pp) 1476 { \ FreeLOGQ: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0010A0E1 MOV R1,R0 1477 LOGQ *p=*pp; \ 00000008 000091E5 LDR R0,[R1, #+0] 1478 *pp=NULL; //Сразу обрежем \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 002081E5 STR R2,[R1, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 1080BD08 POPEQ {R4,PC} 1479 while(p) 1480 { 1481 LOGQ *np=p->next; \ ??FreeLOGQ_0: \ 0000001C 004090E5 LDR R4,[R0, #+0] 1482 mfree(p); \ 00000020 150000EF SWI +21 1483 p=np; \ 00000024 0400B0E1 MOVS R0,R4 1484 } \ 00000028 FBFFFF1A BNE ??FreeLOGQ_0 1485 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 1486 1487 //Удалить элемент из лога \ In segment CODE, align 4, keep-with-next 1488 void RemoveLOGQ(LOGQ **queue, LOGQ *p) 1489 { \ RemoveLOGQ: \ 00000000 00402DE9 PUSH {LR} 1490 LOGQ *q=(LOGQ *)queue; \ 00000004 000000EA B ??RemoveLOGQ_0 1491 LOGQ *qp; 1492 while(qp=q->next) 1493 { 1494 if (qp==p) 1495 { 1496 q->next=p->next; 1497 break; 1498 } 1499 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] 1500 } 1501 mfree(p); //Если элемент вообще не в логе \ ??RemoveLOGQ_2: \ 00000028 0100A0E1 MOV R0,R1 \ 0000002C 150000EF SWI +21 1502 } \ 00000030 0080BDE8 POP {PC} ;; return 1503 1504 //Добавить элемент в лог \ In segment CODE, align 4, keep-with-next 1505 int AddLOGQ(LOGQ **queue, LOGQ *p) 1506 { 1507 LOGQ *q=(LOGQ *)queue; 1508 LOGQ *qp; 1509 int i=0; \ AddLOGQ: \ 00000000 0020A0E3 MOV R2,#+0 \ 00000004 000000EA B ??AddLOGQ_0 1510 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 1511 p->next=NULL; \ 0000001C 003081E5 STR R3,[R1, #+0] 1512 q->next=p; \ 00000020 001080E5 STR R1,[R0, #+0] 1513 return(i+1); //Теперь всего в логе элементов \ 00000024 0200A0E1 MOV R0,R2 \ 00000028 1EFF2FE1 BX LR ;; return 1514 } 1515 \ In segment CODE, align 4, keep-with-next 1516 char *GetLastXTextLOGQ(CLIST *t) 1517 { 1518 LOGQ *p = t->log; \ GetLastXTextLOGQ: \ 00000000 941090E5 LDR R1,[R0, #+148] 1519 char *s = 0; \ 00000004 0000A0E3 MOV R0,#+0 1520 if(!p) return 0; \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 0500001A BNE ??GetLastXTextLOGQ_0 \ 00000010 1EFF2FE1 BX LR 1521 while(p->next) 1522 { 1523 if((p->type&0x0F)==3) \ ??GetLastXTextLOGQ_1: \ 00000014 0C3091E5 LDR R3,[R1, #+12] \ 00000018 0F3003E2 AND R3,R3,#0xF \ 0000001C 030053E3 CMP R3,#+3 1524 s = p->text; \ 00000020 60008102 ADDEQ R0,R1,#+96 1525 p = p->next; \ 00000024 0210A0E1 MOV R1,R2 1526 } \ ??GetLastXTextLOGQ_0: \ 00000028 002091E5 LDR R2,[R1, #+0] \ 0000002C 000052E3 CMP R2,#+0 \ 00000030 F7FFFF1A BNE ??GetLastXTextLOGQ_1 1527 if((p->type&0x0F)==3) \ 00000034 0C2091E5 LDR R2,[R1, #+12] \ 00000038 0F2002E2 AND R2,R2,#0xF \ 0000003C 030052E3 CMP R2,#+3 1528 s = p->text; \ 00000040 60008102 ADDEQ R0,R1,#+96 1529 return s; \ 00000044 1EFF2FE1 BX LR ;; return 1530 } 1531 \ In segment CODE, align 4, keep-with-next 1532 int GetIconIndex(CLIST *t) 1533 { 1534 unsigned short s; 1535 if (t) \ GetIconIndex: \ 00000000 000050E3 CMP R0,#+0 \ 00000004 3400000A BEQ ??GetIconIndex_0 1536 { 1537 s=t->state; 1538 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 1539 if (t->isunread) \ 0000001C 840090E5 LDR R0,[R0, #+132] \ 00000020 000050E3 CMP R0,#+0 1540 return(IS_MSG); \ 00000024 0D00A013 MOVNE R0,#+13 \ 00000028 1EFF2F11 BXNE LR 1541 else 1542 { 1543 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 1544 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 1545 if ((s&0xF000)==0x3000) return (IS_EVIL); \ 0000004C C00D52E3 CMP R2,#+12288 \ 00000050 0700A003 MOVEQ R0,#+7 \ 00000054 1EFF2F01 BXEQ LR 1546 if ((s&0xF000)==0x4000) return (IS_DEPRESSION); \ 00000058 400C52E3 CMP R2,#+16384 \ 0000005C 0600A003 MOVEQ R0,#+6 \ 00000060 1EFF2F01 BXEQ LR 1547 if ((s&0xF000)==0x5000) return (IS_HOME); \ 00000064 500C52E3 CMP R2,#+20480 \ 00000068 0800A003 MOVEQ R0,#+8 \ 0000006C 1EFF2F01 BXEQ LR 1548 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 1549 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 1550 if (s & 0x0001) return(IS_AWAY); \ ??GetIconIndex_1: \ 00000090 010011E3 TST R1,#0x1 \ 00000094 0200A013 MOVNE R0,#+2 \ 00000098 1EFF2F11 BXNE LR 1551 if (s & 0x0005) return(IS_NA); \ 0000009C 050011E3 TST R1,#0x5 \ 000000A0 0300A013 MOVNE R0,#+3 \ 000000A4 1EFF2F11 BXNE LR 1552 if (s & 0x0011) return(IS_OCCUPIED); \ 000000A8 110011E3 TST R1,#0x11 \ 000000AC 0400A013 MOVNE R0,#+4 \ 000000B0 1EFF2F11 BXNE LR 1553 if (s & 0x0013) return(IS_DND); \ 000000B4 130011E3 TST R1,#0x13 \ 000000B8 0500A013 MOVNE R0,#+5 \ 000000BC 1EFF2F11 BXNE LR 1554 if (s & 0x0002) return(IS_FFC); \ 000000C0 020011E3 TST R1,#0x2 \ 000000C4 EFFFFF1A BNE ??GetIconIndex_2 1555 if (s & 0x0100) return(IS_INVISIBLE); \ 000000C8 400F11E3 TST R1,#0x100 \ 000000CC 0100A013 MOVNE R0,#+1 \ 000000D0 1EFF2F11 BXNE LR 1556 } 1557 } 1558 else 1559 { 1560 return(IS_UNKNOWN); 1561 } 1562 return(IS_ONLINE); \ 000000D4 0B00A0E3 MOV R0,#+11 \ 000000D8 1EFF2FE1 BX LR \ ??GetIconIndex_0: \ 000000DC 0E00A0E3 MOV R0,#+14 \ 000000E0 1EFF2FE1 BX LR ;; return 1563 } 1564 \ In segment CODE, align 4, keep-with-next 1565 LOGQ *FindContactLOGQByAck(TPKT *p) 1566 { \ FindContactLOGQByAck: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1567 CLIST *t; 1568 LockSched(); \ 00000008 460100EF SWI +326 1569 t=FindContactByUin(p->pkt.uin); \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000014 0050A0E1 MOV R5,R0 1570 UnlockSched(); \ 00000018 470100EF SWI +327 1571 unsigned int id=*((unsigned short*)(p->data)); \ 0000001C B840D4E1 LDRH R4,[R4, #+8] 1572 LOGQ *q; 1573 if (!t) return NULL; \ 00000020 000055E3 CMP R5,#+0 \ 00000024 0000A003 MOVEQ R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 1574 LockSched(); \ 0000002C 460100EF SWI +326 1575 q=t->log; \ 00000030 945095E5 LDR R5,[R5, #+148] \ 00000034 000000EA B ??FindContactLOGQByAck_0 1576 while(q) 1577 { 1578 if (q->ID==id) break; 1579 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 1580 } 1581 UnlockSched(); \ 0000004C 470100EF SWI +327 1582 return q; \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 3080BDE8 POP {R4,R5,PC} ;; return 1583 } 1584 1585 1586 1587 1588 /*----------------------------- SAVE CONTACT LIST TO FILE --------------------------------*/ 1589 \ In segment CODE, align 4, keep-with-next 1590 void CreateCLFile(void) 1591 { \ CreateCLFile: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 42DF4DE2 SUB SP,SP,#+264 1592 CLIST *t; 1593 t=(CLIST *)(&cltop); \ 00000008 ........ LDR R5,??DataTable82 ;; i_rc + 1008 1594 char *s=malloc(128); 1595 volatile int hFile_cl; 1596 unsigned int io_error_cl = 0; 1597 char fn[256]; 1598 strcpy(fn,TEMPLATES_PATH); 1599 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,??DataTable69 ;; 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 1600 unlink(fn,&io_error_cl); \ 0000003C 0D10A0E1 MOV R1,SP \ 00000040 08008DE2 ADD R0,SP,#+8 \ 00000044 6B0100EF SWI +363 1601 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] 1602 if(hFile_cl!=-1) \ 00000064 04009DE5 LDR R0,[SP, #+4] \ 00000068 010070E3 CMN R0,#+1 \ 0000006C 1C00001A BNE ??CreateCLFile_1 1603 { 1604 while(t=(CLIST *)(t->next)) 1605 { 1606 if(!t->isgroup && t->uin!=UIN) 1607 { 1608 sprintf(s, ";%d;%s;;;\r\n", t->uin, t->name); 1609 fwrite(hFile_cl, s, strlen(s), &io_error_cl); 1610 } 1611 } 1612 ShowMSG(2,(int)"Saved local.cl"); 1613 } 1614 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 1615 fclose(hFile_cl, &io_error_cl); \ 0000007C 04009DE5 LDR R0,[SP, #+4] \ 00000080 0D10A0E1 MOV R1,SP \ 00000084 0D0000EF SWI +13 1616 mfree(s); \ 00000088 0400A0E1 MOV R0,R4 \ 0000008C 150000EF SWI +21 1617 } \ 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,??DataTable70 ;; 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 `?` 1618 1619 /*-----------------------------------------------------------------------------------------*/ 1620 1621 char on_off_buf[128]; 1622 int on_off_timer=0; 1623 char ContactT9Key[32]; 1624 int kopa_online; 1625 int kopa_kontaktu; 1626 char status[64]; 1627 //void UpdateCLheader(void){}; 1628 1629 \ In segment CODE, align 4, keep-with-next 1630 void ClearContactT9Key(void) 1631 { 1632 zeromem(ContactT9Key,sizeof(ContactT9Key)); \ ClearContactT9Key: \ 00000000 0C009FE5 LDR R0,??ClearContactT9Key_0 ;; i_rc + 1424 \ 00000004 00402DE9 PUSH {LR} \ 00000008 2010A0E3 MOV R1,#+32 \ 0000000C 1D0100EF SWI +285 1633 } \ 00000010 0080BDE8 POP {PC} ;; return \ ??ClearContactT9Key_0: \ 00000014 ........ DC32 i_rc + 1424 1634 \ In segment CODE, align 4, keep-with-next 1635 void AddContactT9Key(int chr) 1636 { \ AddContactT9Key: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1637 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R5,??DataTable92 ;; i_rc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 590E85E2 ADD R0,R5,#+1424 \ 00000010 1B0000EF SWI +27 1638 if (l<(sizeof(ContactT9Key)-1)) \ 00000014 1F0050E3 CMP R0,#+31 1639 { 1640 ContactT9Key[l]=chr; \ 00000018 05008030 ADDCC R0,R0,R5 \ 0000001C 9045C035 STRBCC R4,[R0, #+1424] 1641 } 1642 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 1643 \ In segment CODE, align 4, keep-with-next 1644 void BackSpaceContactT9(void) 1645 { \ BackSpaceContactT9: \ 00000000 10402DE9 PUSH {R4,LR} 1646 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R4,??DataTable92 ;; i_rc \ 00000008 590E84E2 ADD R0,R4,#+1424 \ 0000000C 1B0000EF SWI +27 1647 if (l) \ 00000010 000050E3 CMP R0,#+0 1648 { 1649 l--; 1650 ContactT9Key[l]=0; \ 00000014 04008010 ADDNE R0,R0,R4 \ 00000018 0010A013 MOVNE R1,#+0 \ 0000001C 8F15C015 STRBNE R1,[R0, #+1423] 1651 } 1652 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 1653 1654 1655 void RecountMenu(CLIST *req, int needfocus); 1656 1657 //--------------------------------------------------------------------// 1658 1659 \ In segment CODE, align 4, keep-with-next 1660 void LongPressActionOnChat(CLIST *t,int i) 1661 { \ LongPressActionOnChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 1662 switch(i) \ 00000004 ........ LDR R4,??DataTable92 ;; i_rc \ 00000008 ........ LDR R9,??DataTable74 ;; WriteDefSettings \ 0000000C ........ LDR R6,??DataTable93 ;; screen3 \ 00000010 ........ LDR R8,??DataTable85 ;; Canvas \ 00000014 04D04DE2 SUB SP,SP,#+4 \ 00000018 7020A0E3 MOV R2,#+112 \ 0000001C 5C2D82E3 ORR R2,R2,#0x1700 \ 00000020 045082E0 ADD R5,R2,R4 \ 00000024 02A0A0E3 MOV R10,#+2 \ 00000028 0070A0E3 MOV R7,#+0 \ 0000002C 01B0A0E3 MOV R11,#+1 \ 00000030 011041E2 SUB R1,R1,#+1 \ 00000034 0C0051E3 CMP R1,#+12 \ 00000038 CC00008A 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 35516A73 DC8 +53,+81,+106,+115 \ 00000050 80889AAE DC8 +128,+136,+154,+174 \ 00000054 C5000000 DC8 +197,+0,+0,+0 1663 { 1664 case 1: 1665 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??LongPressActionOnChat_2: \ 00000058 C00394E5 LDR R0,[R4, #+960] \ 0000005C 000050E3 CMP R0,#+0 \ 00000060 00B0A013 MOVNE R11,#+0 \ 00000064 C0B384E5 STR R11,[R4, #+960] 1666 if(Is_Sounds_Enabled) \ 00000068 00005BE3 CMP R11,#+0 1667 { 1668 // ShowMSG(1,(int)"Sound 0n"); 1669 strcpy(prmsg,"Sound 0n"); \ 0000006C 14108812 ADDNE R1,R8,#+20 1670 PrintTimer=2; 1671 } 1672 else 1673 { 1674 // ShowMSG(1,(int)"Sound Off"); 1675 strcpy(prmsg,"Sound Off"); \ 00000070 20108802 ADDEQ R1,R8,#+32 \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1A0000EF SWI +26 1676 PrintTimer=2; \ 0000007C 14A086E5 STR R10,[R6, #+20] 1677 } 1678 SUBPROC((void*)WriteDefSettings); \ 00000080 0900A0E1 MOV R0,R9 \ 00000084 710100EF SWI +369 \ 00000088 B80000EA B ??LongPressActionOnChat_1 1679 break; 1680 case 2: 1681 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??LongPressActionOnChat_3: \ 0000008C 6C0294E5 LDR R0,[R4, #+620] \ 00000090 000050E3 CMP R0,#+0 \ 00000094 00B0A013 MOVNE R11,#+0 \ 00000098 6CB284E5 STR R11,[R4, #+620] 1682 SUBPROC((void*)WriteDefSettings); \ 0000009C 0900A0E1 MOV R0,R9 \ 000000A0 710100EF SWI +369 1683 if(Is_Vibra_Enabled) \ 000000A4 6C0294E5 LDR R0,[R4, #+620] \ 000000A8 000050E3 CMP R0,#+0 \ 000000AC 38108802 ADDEQ R1,R8,#+56 1684 { 1685 // ShowMSG(1,(int)"Vibra On"); 1686 strcpy(prmsg,"Vibra On"); \ 000000B0 2C108812 ADDNE R1,R8,#+44 \ ??LongPressActionOnChat_4: \ 000000B4 0500A0E1 MOV R0,R5 \ 000000B8 1A0000EF SWI +26 1687 PrintTimer=2; \ 000000BC 14A086E5 STR R10,[R6, #+20] \ 000000C0 AA0000EA B ??LongPressActionOnChat_1 1688 } 1689 else 1690 { 1691 // ShowMSG(1,(int)"Vibra Off"); 1692 strcpy(prmsg,"Vibra Off"); 1693 PrintTimer=2; 1694 } 1695 break; 1696 case 3: 1697 if(CurrentPrivateStatus!=1) \ ??LongPressActionOnChat_5: \ 000000C4 CC0394E5 LDR R0,[R4, #+972] \ 000000C8 010050E3 CMP R0,#+1 \ 000000CC 0300000A BEQ ??LongPressActionOnChat_6 1698 { 1699 SetPrivateStatus(1);//Инвиз \ 000000D0 0100A0E3 MOV R0,#+1 \ 000000D4 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 1700 // ShowMSG(1,(int)"Инвиз включен"); 1701 strcpy(prmsg,"Инвиз включен"); \ 000000D8 441088E2 ADD R1,R8,#+68 \ ??LongPressActionOnChat_7: \ 000000DC F4FFFFEA B ??LongPressActionOnChat_4 1702 PrintTimer=2; 1703 } 1704 else 1705 { 1706 SetPrivateStatus(3); \ ??LongPressActionOnChat_6: \ 000000E0 0300A0E3 MOV R0,#+3 \ 000000E4 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 1707 // ShowMSG(1,(int)"Инвиз выключен"); 1708 strcpy(prmsg,"Инвиз выключен"); \ 000000E8 541088E2 ADD R1,R8,#+84 \ 000000EC F0FFFFEA B ??LongPressActionOnChat_4 1709 PrintTimer=2; 1710 } 1711 break; 1712 case 4: 1713 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??LongPressActionOnChat_8: \ 000000F0 540294E5 LDR R0,[R4, #+596] \ 000000F4 000050E3 CMP R0,#+0 \ 000000F8 00B0A013 MOVNE R11,#+0 \ 000000FC 54B284E5 STR R11,[R4, #+596] 1714 SUBPROC((void*)WriteDefSettings); \ 00000100 0900A0E1 MOV R0,R9 \ 00000104 710100EF SWI +369 1715 if(Is_Double_Vibra_On) \ 00000108 540294E5 LDR R0,[R4, #+596] \ 0000010C 000050E3 CMP R0,#+0 1716 { 1717 // ShowMSG(1,(int)"Vibra rem On"); 1718 strcpy(prmsg,"Vibra rem On"); \ 00000110 64108812 ADDNE R1,R8,#+100 \ 00000114 E6FFFF1A BNE ??LongPressActionOnChat_4 1719 PrintTimer=2; 1720 } 1721 else 1722 { 1723 // ShowMSG(1,(int)"Vibra rem Off"); 1724 strcpy(prmsg,"Vibra rem Off"); \ 00000118 741088E2 ADD R1,R8,#+116 \ 0000011C E4FFFFEA B ??LongPressActionOnChat_4 1725 PrintTimer=2; 1726 } 1727 break; 1728 case 5: 1729 { 1730 CLIST *cl; 1731 cl=(CLIST *)(&cltop); \ ??LongPressActionOnChat_9: \ 00000120 FC9F84E2 ADD R9,R4,#+1008 \ 00000124 060000EA B ??LongPressActionOnChat_10 1732 while(cl=(CLIST *)(cl->next)) 1733 { 1734 if(cl->log) \ ??LongPressActionOnChat_11: \ 00000128 940099E5 LDR R0,[R9, #+148] \ 0000012C 000050E3 CMP R0,#+0 \ 00000130 0300000A BEQ ??LongPressActionOnChat_10 1735 { 1736 FreeLOGQ(&cl->log); \ 00000134 940089E2 ADD R0,R9,#+148 \ 00000138 ........ BL FreeLOGQ 1737 cl->msg_count=0; \ 0000013C A47089E5 STR R7,[R9, #+164] 1738 cl->isactive=0; \ 00000140 A07089E5 STR R7,[R9, #+160] 1739 } 1740 } \ ??LongPressActionOnChat_10: \ 00000144 009099E5 LDR R9,[R9, #+0] \ 00000148 000059E3 CMP R9,#+0 \ 0000014C F5FFFF1A BNE ??LongPressActionOnChat_11 1741 if(strlen(ContactT9Key)) ClearContactT9Key(); \ 00000150 590E84E2 ADD R0,R4,#+1424 \ 00000154 1B0000EF SWI +27 \ 00000158 000050E3 CMP R0,#+0 \ 0000015C 0200000A BEQ ??LongPressActionOnChat_12 \ 00000160 2010A0E3 MOV R1,#+32 \ 00000164 590E84E2 ADD R0,R4,#+1424 \ 00000168 1D0100EF SWI +285 1742 RecountMenu(NULL,1); \ ??LongPressActionOnChat_12: \ 0000016C 0110A0E3 MOV R1,#+1 \ 00000170 0700A0E1 MOV R0,R7 \ 00000174 ........ BL RecountMenu 1743 // ShowMSG(1,(int)"All chat clear!"); 1744 strcpy(prmsg,"All chat clear!"); \ 00000178 841088E2 ADD R1,R8,#+132 \ 0000017C 0500A0E1 MOV R0,R5 \ 00000180 1A0000EF SWI +26 1745 PrintTimer=3; \ 00000184 0300A0E3 MOV R0,#+3 \ 00000188 140086E5 STR R0,[R6, #+20] 1746 break; \ 0000018C 770000EA B ??LongPressActionOnChat_1 1747 } 1748 case 6: 1749 if(!away_m) \ ??LongPressActionOnChat_13: \ 00000190 080394E5 LDR R0,[R4, #+776] \ 00000194 000050E3 CMP R0,#+0 \ 00000198 0B00001A BNE ??LongPressActionOnChat_14 1750 { 1751 away_m=!away_m; \ 0000019C 08B384E5 STR R11,[R4, #+776] 1752 GBS_StopTimer(&away_tmr); \ 000001A0 E800A0E3 MOV R0,#+232 \ 000001A4 680D80E3 ORR R0,R0,#0x1A00 \ 000001A8 040080E0 ADD R0,R0,R4 \ 000001AC 440100EF SWI +324 1753 msg_away_timer=AUTO_ENGADE*12; \ 000001B0 ........ LDR R0,??DataTable77 ;; AUTO_ENGADE \ 000001B4 0C10A0E3 MOV R1,#+12 \ 000001B8 000090E5 LDR R0,[R0, #+0] \ 000001BC 910000E0 MUL R0,R1,R0 \ 000001C0 2C0086E5 STR R0,[R6, #+44] 1754 InputAwayMsg(); \ 000001C4 ........ BL InputAwayMsg \ 000001C8 680000EA B ??LongPressActionOnChat_1 1755 1756 } 1757 else 1758 { 1759 msg_away_timer=0; 1760 away_m=!away_m; 1761 if(change_back_status) \ ??LongPressActionOnChat_14: \ 000001CC 100394E5 LDR R0,[R4, #+784] \ 000001D0 2C7086E5 STR R7,[R6, #+44] \ 000001D4 087384E5 STR R7,[R4, #+776] \ 000001D8 000050E3 CMP R0,#+0 \ 000001DC 6400000A BEQ ??LongPressActionOnChat_15 1762 { 1763 CurrentStatus=status_rem; \ 000001E0 0C0394E5 LDR R0,[R4, #+780] \ 000001E4 FC0284E5 STR R0,[R4, #+764] 1764 set_my_status(); \ 000001E8 ........ BL set_my_status 1765 change_back_status=0; \ 000001EC 107384E5 STR R7,[R4, #+784] \ 000001F0 5E0000EA B ??LongPressActionOnChat_1 1766 } 1767 } 1768 // UpdateCLheader(); 1769 break; 1770 case 7: 1771 { 1772 Show_XTX=!(Show_XTX); \ ??LongPressActionOnChat_16: \ 000001F4 140394E5 LDR R0,[R4, #+788] \ 000001F8 000050E3 CMP R0,#+0 \ 000001FC 00B0A013 MOVNE R11,#+0 \ 00000200 14B384E5 STR R11,[R4, #+788] 1773 if(Show_XTX) \ 00000204 00005BE3 CMP R11,#+0 1774 { 1775 // ShowMSG(1,(int)"Default show x-status"); 1776 strcpy(prmsg,"Default show x-status"); \ 00000208 94108812 ADDNE R1,R8,#+148 \ 0000020C A8FFFF1A BNE ??LongPressActionOnChat_4 1777 PrintTimer=2; 1778 } 1779 else 1780 { 1781 // ShowMSG(1,(int)"Default show time"); 1782 strcpy(prmsg,"Default show time"); \ 00000210 AC1088E2 ADD R1,R8,#+172 \ 00000214 A6FFFFEA B ??LongPressActionOnChat_4 1783 PrintTimer=2; 1784 } 1785 } 1786 break; 1787 case 8: 1788 { 1789 WSHDR *ws; 1790 ws=AllocWS(150); \ ??LongPressActionOnChat_17: \ 00000218 9600A0E3 MOV R0,#+150 \ 0000021C 250100EF SWI +293 1791 str_2ws(ws,suc_config_name,128); \ 00000220 ........ LDR R1,??DataTable78 ;; suc_config_name \ 00000224 0040A0E1 MOV R4,R0 \ 00000228 8020A0E3 MOV R2,#+128 \ ??LongPressActionOnChat_18: \ 0000022C 6C0100EF SWI +364 1792 ExecuteFile(ws,0,0); \ 00000230 0020A0E3 MOV R2,#+0 \ 00000234 0210A0E1 MOV R1,R2 \ 00000238 0400A0E1 MOV R0,R4 \ 0000023C 940000EF SWI +148 1793 FreeWS(ws); \ 00000240 0400A0E1 MOV R0,R4 \ 00000244 290100EF SWI +297 \ 00000248 480000EA B ??LongPressActionOnChat_1 1794 } 1795 break; 1796 case 9: 1797 { 1798 WSHDR *ws; 1799 ws=AllocWS(150); \ ??LongPressActionOnChat_19: \ 0000024C 9600A0E3 MOV R0,#+150 \ 00000250 250100EF SWI +293 \ 00000254 0040A0E1 MOV R4,R0 1800 str_2ws(ws,suc_config_name_mod,128); \ 00000258 ........ LDR R0,??DataTable79 ;; suc_config_name_mod \ 0000025C 8020A0E3 MOV R2,#+128 \ 00000260 001090E5 LDR R1,[R0, #+0] \ 00000264 0400A0E1 MOV R0,R4 \ 00000268 EFFFFFEA B ??LongPressActionOnChat_18 1801 ExecuteFile(ws,0,0); 1802 FreeWS(ws); 1803 } 1804 break; 1805 case 10://ping 1806 { 1807 janis=1; \ ??LongPressActionOnChat_20: \ 0000026C ........ LDR R0,??DataTable80 ;; janis \ 00000270 00B080E5 STR R11,[R0, #+0] 1808 TPKT *p; 1809 p=malloc(sizeof(PKT)+sizeof(TTime)); \ 00000274 1000A0E3 MOV R0,#+16 \ 00000278 140000EF SWI +20 \ 0000027C 0040A0E1 MOV R4,R0 1810 GetDateTime(NULL,(TTime *)p->data); \ 00000280 081084E2 ADD R1,R4,#+8 \ 00000284 0000A0E3 MOV R0,#+0 \ 00000288 B40000EF SWI +180 1811 p->pkt.uin=0; \ 0000028C 007084E5 STR R7,[R4, #+0] 1812 p->pkt.type=T_ECHO; \ 00000290 1200A0E3 MOV R0,#+18 \ 00000294 B400C4E1 STRH R0,[R4, #+4] 1813 p->pkt.data_len=sizeof(TTime); \ 00000298 0800A0E3 MOV R0,#+8 \ 0000029C B600C4E1 STRH R0,[R4, #+6] 1814 SUBPROC((void *)SendAnswer,0,p); \ 000002A0 ........ LDR R0,??DataTable96 ;; SendAnswer \ 000002A4 0420A0E1 MOV R2,R4 \ 000002A8 0710A0E1 MOV R1,R7 \ 000002AC 710100EF SWI +369 \ 000002B0 2E0000EA B ??LongPressActionOnChat_1 1815 } 1816 break; 1817 case 11://go to idle 1818 { 1819 ClearContactT9Key(); \ ??LongPressActionOnChat_21: \ 000002B4 2010A0E3 MOV R1,#+32 \ 000002B8 590E84E2 ADD R0,R4,#+1424 \ 000002BC 1D0100EF SWI +285 1820 RecountMenu(NULL,1); \ 000002C0 0110A0E3 MOV R1,#+1 \ 000002C4 0700A0E1 MOV R0,R7 \ 000002C8 ........ BL RecountMenu 1821 silenthide=1; \ 000002CC B8B384E5 STR R11,[R4, #+952] 1822 gipc.name_to=ipc_xtask_name; \ 000002D0 DE0F88E2 ADD R0,R8,#+888 \ 000002D4 8C0084E5 STR R0,[R4, #+140] 1823 gipc.name_from=ipc_my_name; \ 000002D8 D60F88E2 ADD R0,R8,#+856 \ 000002DC 900084E5 STR R0,[R4, #+144] 1824 gipc.data=0; \ 000002E0 947084E5 STR R7,[R4, #+148] 1825 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 000002E4 8C3084E2 ADD R3,R4,#+140 \ 000002E8 0B20A0E1 MOV R2,R11 \ 000002EC B010A0E3 MOV R1,#+176 \ 000002F0 DE1C81E3 ORR R1,R1,#0xDE00 \ 000002F4 0900A0E3 MOV R0,#+9 \ 000002F8 420C80E3 ORR R0,R0,#0x4200 \ 000002FC 000100EF SWI +256 \ 00000300 1A0000EA B ??LongPressActionOnChat_1 1826 } 1827 break; 1828 case 12://hide & lock 1829 { 1830 ClearContactT9Key(); \ ??LongPressActionOnChat_22: \ 00000304 2010A0E3 MOV R1,#+32 \ 00000308 590E84E2 ADD R0,R4,#+1424 \ 0000030C 1D0100EF SWI +285 1831 RecountMenu(NULL,1); \ 00000310 0110A0E3 MOV R1,#+1 \ 00000314 0700A0E1 MOV R0,R7 \ 00000318 ........ BL RecountMenu 1832 gipc.name_to=ipc_xtask_name; \ 0000031C DE0F88E2 ADD R0,R8,#+888 \ 00000320 8C0084E5 STR R0,[R4, #+140] 1833 gipc.name_from=ipc_my_name; \ 00000324 D60F88E2 ADD R0,R8,#+856 \ 00000328 900084E5 STR R0,[R4, #+144] 1834 gipc.data=0; \ 0000032C 947084E5 STR R7,[R4, #+148] 1835 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 00000330 8C3084E2 ADD R3,R4,#+140 \ 00000334 0B20A0E1 MOV R2,R11 \ 00000338 B010A0E3 MOV R1,#+176 \ 0000033C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000340 0900A0E3 MOV R0,#+9 \ 00000344 420C80E3 ORR R0,R0,#0x4200 \ 00000348 000100EF SWI +256 1836 if (IsUnlocked()) \ 0000034C 430000EF SWI +67 \ 00000350 000050E3 CMP R0,#+0 \ 00000354 0600000A BEQ ??LongPressActionOnChat_15 1837 { 1838 KbdLock(); \ 00000358 A90000EF SWI +169 \ 0000035C 030000EA B ??LongPressActionOnChat_1 1839 } 1840 // return(-1); 1841 } 1842 break; 1843 case 13://users menu 1844 { 1845 int CreateContactMenu(CLIST *t); 1846 if(!t->isgroup) \ ??LongPressActionOnChat_23: \ 00000360 081090E5 LDR R1,[R0, #+8] \ 00000364 000051E3 CMP R1,#+0 \ 00000368 0000001A BNE ??LongPressActionOnChat_1 1847 CreateContactMenu(t); \ 0000036C ........ BL CreateContactMenu 1848 } 1849 break; 1850 }//switch() 1851 1852 for(int j=0;j<1000;) j++; \ ??LongPressActionOnChat_1: \ 00000370 0000A0E3 MOV R0,#+0 \ ??LongPressActionOnChat_15: \ 00000374 010080E2 ADD R0,R0,#+1 \ 00000378 FA0F50E3 CMP R0,#+1000 \ 0000037C FCFFFFBA BLT ??LongPressActionOnChat_15 1853 1854 } \ 00000380 F18FBDE8 POP {R0,R4-R11,PC} ;; return 1855 1856 //{"Без действия","Звук","Вибра","Инвиз","Реж.напоминания","Очистить чаты","Автоответчик","Показ.хстат/время","Конфиг","Конфиг мода","Пинг","Заблокировать","На гэ","Меню юзера"} 1857 \ In segment CODE, align 4, keep-with-next 1858 void LongPressAction(CLIST *t,int key) 1859 { \ LongPressAction: \ 00000000 00402DE9 PUSH {LR} 1860 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 1861 { 1862 case '0': LongPressActionOnChat(t,longAct_0); break; \ ??LongPressAction_1: \ 00000054 78109FE5 LDR R1,??LongPressAction_2 ;; longAct_0 \ 00000058 040000EA B ??LongPressAction_3 1863 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} 1864 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} 1865 case '3': LongPressActionOnChat(t,longAct_3); break; \ ??LongPressAction_6: \ 0000007C 5C109FE5 LDR R1,??LongPressAction_2+0xC ;; longAct_3 \ 00000080 FAFFFFEA B ??LongPressAction_3 1866 case '4': LongPressActionOnChat(t,longAct_4); break; \ ??LongPressAction_7: \ 00000084 58109FE5 LDR R1,??LongPressAction_2+0x10 ;; longAct_4 \ 00000088 F8FFFFEA B ??LongPressAction_3 1867 case '5': LongPressActionOnChat(t,longAct_5); break; \ ??LongPressAction_8: \ 0000008C 54109FE5 LDR R1,??LongPressAction_2+0x14 ;; longAct_5 \ 00000090 F6FFFFEA B ??LongPressAction_3 1868 case '6': LongPressActionOnChat(t,longAct_6); break; \ ??LongPressAction_9: \ 00000094 50109FE5 LDR R1,??LongPressAction_2+0x18 ;; longAct_6 \ 00000098 F4FFFFEA B ??LongPressAction_3 1869 case '7': LongPressActionOnChat(t,longAct_7); break; \ ??LongPressAction_10: \ 0000009C 4C109FE5 LDR R1,??LongPressAction_2+0x1C ;; longAct_7 \ 000000A0 F2FFFFEA B ??LongPressAction_3 1870 case '8': LongPressActionOnChat(t,longAct_8); break; \ ??LongPressAction_11: \ 000000A4 48109FE5 LDR R1,??LongPressAction_2+0x20 ;; longAct_8 \ 000000A8 F0FFFFEA B ??LongPressAction_3 1871 case '9': LongPressActionOnChat(t,longAct_9); break; \ ??LongPressAction_12: \ 000000AC 44109FE5 LDR R1,??LongPressAction_2+0x24 ;; longAct_9 \ 000000B0 EEFFFFEA B ??LongPressAction_3 1872 case '*': LongPressActionOnChat(t,longAct_10); break; \ ??LongPressAction_13: \ 000000B4 40109FE5 LDR R1,??LongPressAction_2+0x28 ;; longAct_10 \ 000000B8 ECFFFFEA B ??LongPressAction_3 1873 case '#': LongPressActionOnChat(t,longAct_11); break; \ ??LongPressAction_14: \ 000000BC 3C109FE5 LDR R1,??LongPressAction_2+0x2C ;; longAct_11 \ 000000C0 EAFFFFEA B ??LongPressAction_3 1874 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 1875 } 1876 } \ ??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 1877 1878 char hostbuf2[128]; 1879 1880 \ In segment CODE, align 4, keep-with-next 1881 void GetOnTotalContact(int group_id,int *_onlinetotal) 1882 { 1883 CLIST *t; 1884 t=(CLIST *)&cltop; \ GetOnTotalContact: \ 00000000 ........ LDR R2,??DataTable82 ;; i_rc + 1008 \ 00000004 30002DE9 PUSH {R4,R5} 1885 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 1886 while((t=t->next)) 1887 { 1888 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 1889 { 1890 total++; 1891 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 1892 } 1893 } \ ??GetOnTotalContact_0: \ 00000040 002092E5 LDR R2,[R2, #+0] \ 00000044 000052E3 CMP R2,#+0 \ 00000048 F3FFFF1A BNE ??GetOnTotalContact_1 1894 _onlinetotal[0]=online; \ 0000004C 003081E5 STR R3,[R1, #+0] 1895 _onlinetotal[1]=total; \ 00000050 04C081E5 STR R12,[R1, #+4] 1896 } \ 00000054 3000BDE8 POP {R4,R5} \ 00000058 1EFF2FE1 BX LR ;; return 1897 1898 //=============================================================================================== 1899 1900 int DNR_ID=0; 1901 int DNR_TRIES=3; 1902 1903 char hostname[128]; //2058 che toka 128? :) 1904 1905 int host_counter = 0; 1906 1907 //--------------------------------------------------------------------------- 1908 \ In segment CODE, align 4, keep-with-next 1909 const char *GetHost(int cnt, const char *str, char *buf) 1910 { 1911 const char *tmp = str, *begin, *end; \ GetHost: \ 00000000 0130A0E1 MOV R3,R1 1912 if(cnt) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0100001A BNE ??GetHost_0 \ 0000000C 180000EA B ??GetHost_1 1913 { 1914 for(;cnt;cnt--) 1915 { 1916 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 1917 if(!*str) str = tmp; \ 00000030 00005CE3 CMP R12,#+0 \ 00000034 0200001A BNE ??GetHost_3 \ 00000038 0310A0E1 MOV R1,R3 \ 0000003C 000000EA B ??GetHost_3 1918 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 1919 if(!*str) str = tmp; \ ??GetHost_5: \ 00000064 00005CE3 CMP R12,#+0 \ 00000068 0310A001 MOVEQ R1,R3 1920 } \ 0000006C 010050E2 SUBS R0,R0,#+1 \ 00000070 E7FFFF1A BNE ??GetHost_0 1921 } 1922 tmp = buf; \ ??GetHost_1: \ 00000074 0200A0E1 MOV R0,R2 1923 begin = str; \ 00000078 0130A0E1 MOV R3,R1 \ 0000007C 000000EA B ??GetHost_6 1924 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 1925 end = str; 1926 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 1938 } 1939 } 1940 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 1941 int GetPort(int cnt, const char *str) 1942 { \ GetPort: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 1943 const char *tmp = str; \ 00000008 01C0A0E1 MOV R12,R1 1944 char numbuf[6], numcnt = 0; \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 0030A0E3 MOV R3,#+0 1945 if(cnt) \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0100001A BNE ??GetPort_0 \ 0000001C 180000EA B ??GetPort_1 1946 { 1947 for(;cnt;cnt--) 1948 { 1949 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 1950 if(!*str) str = tmp; \ 00000040 000054E3 CMP R4,#+0 \ 00000044 0200001A BNE ??GetPort_3 \ 00000048 0C10A0E1 MOV R1,R12 \ 0000004C 000000EA B ??GetPort_3 1951 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 1952 if(!*str) str = tmp; \ ??GetPort_5: \ 00000074 000054E3 CMP R4,#+0 \ 00000078 0C10A001 MOVEQ R1,R12 1953 } \ 0000007C 010050E2 SUBS R0,R0,#+1 \ 00000080 E7FFFF1A BNE ??GetPort_0 1954 } 1955 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 1956 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} 1957 str++; 1958 numbuf[5] = 0; \ 000000BC 0520CDE5 STRB R2,[SP, #+5] \ 000000C0 030000EA B ??GetPort_7 1959 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 1960 numbuf[numcnt] = 0; //2058 \ ??GetPort_9: \ 00000100 0020C0E5 STRB R2,[R0, #+0] 1961 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 1962 1963 } 1964 // 1965 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 1966 int GetHostsCount(const char *str) 1967 { 1968 char cnt = 1; \ GetHostsCount: \ 00000000 0110A0E3 MOV R1,#+1 \ 00000004 000000EA B ??GetHostsCount_0 1969 for(;cnt;cnt++) 1970 { 1971 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 1972 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 1973 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 1974 if(!*str) return cnt; \ ??GetHostsCount_5: \ 0000005C 000052E3 CMP R2,#+0 \ 00000060 F2FFFF0A BEQ ??GetHostsCount_3 1975 } \ 00000064 011081E2 ADD R1,R1,#+1 \ 00000068 FF1011E2 ANDS R1,R1,#0xFF \ 0000006C E6FFFF1A BNE ??GetHostsCount_0 1976 return 0; \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 1EFF2FE1 BX LR ;; return 1977 } 1978 //--------------------------------------------------------------------------- 1979 \ In segment CODE, align 4, keep-with-next 1980 void create_connect(void) 1981 { \ create_connect: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 1982 // static int host_counter = 0; 1983 char hostbuf[128], buf[128]; 1984 int hostport; 1985 int ***p_res=NULL; 1986 void do_reconnect(void); 1987 SOCK_ADDR sa; 1988 //Устанавливаем соединение 1989 connect_state = 0; \ 00000004 ........ LDR R5,??DataTable93 ;; screen3 1990 int err; 1991 unsigned int ip; 1992 GBS_DelTimer(&reconnect_tmr); \ 00000008 ........ LDR R6,??DataTable92 ;; i_rc 1993 if (!IsGPRSEnabled()) \ 0000000C ........ LDR R9,??DataTable85 ;; Canvas \ 00000010 45DF4DE2 SUB SP,SP,#+276 \ 00000014 0040A0E3 MOV R4,#+0 \ 00000018 00408DE5 STR R4,[SP, #+0] \ 0000001C 344085E5 STR R4,[R5, #+52] \ 00000020 D800A0E3 MOV R0,#+216 \ 00000024 740D80E3 ORR R0,R0,#0x1D00 \ 00000028 067080E0 ADD R7,R0,R6 \ 0000002C 0700A0E1 MOV R0,R7 \ 00000030 8C0100EF SWI +396 \ 00000034 B800A0E3 MOV R0,#+184 \ 00000038 6C0D80E3 ORR R0,R0,#0x1B00 \ 0000003C 068080E0 ADD R8,R0,R6 \ 00000040 A70000EF SWI +167 \ 00000044 000050E3 CMP R0,#+0 \ 00000048 0400001A BNE ??create_connect_0 1994 { 1995 is_gprs_online=0; \ 0000004C 3C4085E5 STR R4,[R5, #+60] 1996 strcpy(logmsg,LG_GRWAITFORGPRS); \ 00000050 C01089E2 ADD R1,R9,#+192 \ 00000054 0800A0E1 MOV R0,R8 \ 00000058 1A0000EF SWI +26 1997 SMART_REDRAW(); \ 0000005C 840000EA B ??create_connect_1 1998 return; 1999 } 2000 DNR_ID=0; 2001 *socklasterr()=0; 2002 if(host_counter > GetHostsCount(NATICQ_HOST)-1) host_counter = 0; //2058 \ ??create_connect_0: \ 00000060 8CA29FE5 LDR R10,??create_connect_2+0x4 ;; NATICQ_HOST \ 00000064 444085E5 STR R4,[R5, #+68] \ 00000068 7C8100EF SWI +33148 \ 0000006C 004080E5 STR R4,[R0, #+0] \ 00000070 0A00A0E1 MOV R0,R10 \ 00000074 ........ BL GetHostsCount \ 00000078 4C1095E5 LDR R1,[R5, #+76] \ 0000007C 010040E2 SUB R0,R0,#+1 \ 00000080 010050E1 CMP R0,R1 \ 00000084 4C4085B5 STRLT R4,[R5, #+76] 2003 GetHost(host_counter, NATICQ_HOST, hostbuf); \ 00000088 4C0095E5 LDR R0,[R5, #+76] \ 0000008C 14208DE2 ADD R2,SP,#+20 \ 00000090 0A10A0E1 MOV R1,R10 \ 00000094 ........ BL GetHost 2004 hostport = GetPort(host_counter, NATICQ_HOST); \ 00000098 4C0095E5 LDR R0,[R5, #+76] \ 0000009C 0A10A0E1 MOV R1,R10 \ 000000A0 ........ BL GetPort \ 000000A4 00A0A0E1 MOV R10,R0 2005 host_counter++; \ 000000A8 4C0095E5 LDR R0,[R5, #+76] 2006 2007 sprintf(hostname, "Connect to %s:%d", hostbuf, hostport); //2058 - stavim hostname, izbavlyaemsya ot buf \ 000000AC 0A30A0E1 MOV R3,R10 \ 000000B0 010080E2 ADD R0,R0,#+1 \ 000000B4 4C0085E5 STR R0,[R5, #+76] \ 000000B8 14208DE2 ADD R2,SP,#+20 \ 000000BC D81089E2 ADD R1,R9,#+216 \ 000000C0 0800A0E3 MOV R0,#+8 \ 000000C4 7C0D80E3 ORR R0,R0,#0x1F00 \ 000000C8 060080E0 ADD R0,R0,R6 \ 000000CC 160000EF SWI +22 2008 //strcpy(hostbuf2, hostbuf); //vyvod host v get_online_time 2009 zeromem(hostbuf2,128); \ 000000D0 8800A0E3 MOV R0,#+136 \ 000000D4 780D80E3 ORR R0,R0,#0x1E00 \ 000000D8 06B080E0 ADD R11,R0,R6 \ 000000DC 8010A0E3 MOV R1,#+128 \ 000000E0 0B00A0E1 MOV R0,R11 \ 000000E4 1D0100EF SWI +285 2010 sprintf(hostbuf2, percent_s,hostbuf); \ 000000E8 14208DE2 ADD R2,SP,#+20 \ 000000EC 081089E2 ADD R1,R9,#+8 \ 000000F0 0B00A0E1 MOV R0,R11 \ 000000F4 160000EF SWI +22 2011 strcpy(logmsg,buf); \ 000000F8 94108DE2 ADD R1,SP,#+148 \ 000000FC 0800A0E1 MOV R0,R8 \ 00000100 1A0000EF SWI +26 2012 SMART_REDRAW(); \ 00000104 ........ BL SMART_REDRAW 2013 2014 ip=str2ip(hostbuf); \ 00000108 14008DE2 ADD R0,SP,#+20 \ 0000010C B70100EF SWI +439 \ 00000110 04B0E0E1 MVN R11,R4 \ 00000114 0B0050E1 CMP R0,R11 \ 00000118 0500000A BEQ ??create_connect_3 2015 if (ip!=0xFFFFFFFF) 2016 { 2017 sa.ip=ip; \ 0000011C 08008DE5 STR R0,[SP, #+8] 2018 strcpy(logmsg,"\nConnect by IP!"); //strcat->strcpy \ 00000120 EC1089E2 ADD R1,R9,#+236 \ 00000124 0800A0E1 MOV R0,R8 \ 00000128 1A0000EF SWI +26 2019 SMART_REDRAW(); \ 0000012C ........ BL SMART_REDRAW 2020 goto L_CONNECT; \ 00000130 390000EA B ??create_connect_4 2021 } \ ??create_connect_3: \ 00000134 6D1F8FE2 ADR R1,??create_connect_2 ;; "\n" \ 00000138 0800A0E1 MOV R0,R8 2022 strcat(logmsg,"\n"); \ 0000013C 170000EF SWI +23 2023 strcpy(logmsg,LG_GRSENDDNR); //strcat->strcpy \ 00000140 FC1089E2 ADD R1,R9,#+252 \ 00000144 0800A0E1 MOV R0,R8 \ 00000148 1A0000EF SWI +26 2024 SMART_REDRAW(); \ 0000014C ........ BL SMART_REDRAW 2025 err=async_gethostbyname(hostbuf,&p_res,&DNR_ID); //03461351 3<70<19<81 \ 00000150 442085E2 ADD R2,R5,#+68 \ 00000154 0D10A0E1 MOV R1,SP \ 00000158 14008DE2 ADD R0,SP,#+20 \ 0000015C B60100EF SWI +438 \ 00000160 0030B0E1 MOVS R3,R0 2026 if (err) \ 00000164 1600000A BEQ ??create_connect_5 2027 { 2028 if ((err==0xC9)||(err==0xD6)) \ 00000168 C90053E3 CMP R3,#+201 \ 0000016C D6005313 CMPNE R3,#+214 \ 00000170 0600001A BNE ??create_connect_6 2029 { 2030 if (DNR_ID) \ 00000174 440095E5 LDR R0,[R5, #+68] \ 00000178 000050E3 CMP R0,#+0 \ 0000017C 1000000A BEQ ??create_connect_5 2031 { 2032 host_counter--; \ 00000180 4C0095E5 LDR R0,[R5, #+76] \ 00000184 010040E2 SUB R0,R0,#+1 \ 00000188 4C0085E5 STR R0,[R5, #+76] 2033 return; //Ждем готовности DNR \ 0000018C 390000EA B ??create_connect_7 2034 } 2035 } 2036 else 2037 { 2038 snprintf(logmsg,255,LG_GRDNRERROR,err); \ ??create_connect_6: \ 00000190 422F89E2 ADD R2,R9,#+264 \ 00000194 FF10A0E3 MOV R1,#+255 \ 00000198 0800A0E1 MOV R0,R8 \ 0000019C 1B0100EF SWI +283 2039 SMART_REDRAW(); \ 000001A0 ........ BL SMART_REDRAW 2040 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ ??create_connect_8: \ 000001A4 ........ LDR R0,??DataTable86 ;; RECONNECT_TIME \ 000001A8 ........ LDR R2,??DataTable87 ;; do_reconnect \ 000001AC 000090E5 LDR R0,[R0, #+0] \ 000001B0 D830A0E3 MOV R3,#+216 \ 000001B4 930001E0 MUL R1,R3,R0 \ 000001B8 0700A0E1 MOV R0,R7 \ 000001BC 4D0000EF SWI +77 2041 return; \ 000001C0 2C0000EA B ??create_connect_7 2042 } 2043 } 2044 if (p_res) \ ??create_connect_5: \ 000001C4 00009DE5 LDR R0,[SP, #+0] \ 000001C8 000050E3 CMP R0,#+0 \ 000001CC 3D00000A BEQ ??create_connect_9 2045 { 2046 if (p_res[3]) \ 000001D0 0C0090E5 LDR R0,[R0, #+12] \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 4200000A BEQ ??create_connect_10 2047 { 2048 strcpy(logmsg,buf); \ 000001DC 94108DE2 ADD R1,SP,#+148 \ 000001E0 0800A0E1 MOV R0,R8 \ 000001E4 1A0000EF SWI +26 2049 strcat(logmsg,"\n"); \ 000001E8 401F8FE2 ADR R1,??create_connect_2 ;; "\n" \ 000001EC 0800A0E1 MOV R0,R8 \ 000001F0 170000EF SWI +23 2050 strcpy(logmsg,LG_GRDNROK); \ 000001F4 461F89E2 ADD R1,R9,#+280 \ 000001F8 0800A0E1 MOV R0,R8 \ 000001FC 1A0000EF SWI +26 2051 SMART_REDRAW(); \ 00000200 ........ BL SMART_REDRAW 2052 DNR_TRIES=0; \ 00000204 484085E5 STR R4,[R5, #+72] 2053 sa.ip=p_res[3][0][0]; \ 00000208 00109DE5 LDR R1,[SP, #+0] \ 0000020C 0C1091E5 LDR R1,[R1, #+12] \ 00000210 001091E5 LDR R1,[R1, #+0] \ 00000214 001091E5 LDR R1,[R1, #+0] \ 00000218 08108DE5 STR R1,[SP, #+8] 2054 L_CONNECT: 2055 sock=socket(1,1,0); \ ??create_connect_4: \ 0000021C 0020A0E3 MOV R2,#+0 \ 00000220 0110A0E3 MOV R1,#+1 \ 00000224 0100A0E1 MOV R0,R1 \ 00000228 730100EF SWI +371 \ 0000022C 380085E5 STR R0,[R5, #+56] 2056 if (sock!=-1) \ 00000230 0B0050E1 CMP R0,R11 \ 00000234 1A00000A BEQ ??create_connect_11 2057 { 2058 sa.family=1; \ 00000238 0180A0E3 MOV R8,#+1 \ 0000023C B480CDE1 STRH R8,[SP, #+4] 2059 sa.port=htons(hostport); \ 00000240 0A08A0E1 MOV R0,R10, LSL #+16 \ 00000244 2008A0E1 MOV R0,R0, LSR #+16 \ 00000248 7A0100EF SWI +378 \ 0000024C B600CDE1 STRH R0,[SP, #+6] 2060 // sa.ip=htonl(IP_ADDR(82,207,89,182)); 2061 if (connect(sock,&sa,sizeof(sa))!=-1) \ 00000250 380095E5 LDR R0,[R5, #+56] \ 00000254 1020A0E3 MOV R2,#+16 \ 00000258 04108DE2 ADD R1,SP,#+4 \ 0000025C 740100EF SWI +372 \ 00000260 0B0050E1 CMP R0,R11 \ 00000264 0500000A BEQ ??create_connect_12 2062 { 2063 connect_state=1; \ 00000268 348085E5 STR R8,[R5, #+52] 2064 TOTALRECEIVED=0; \ 0000026C DC4386E5 STR R4,[R6, #+988] 2065 TOTALSENDED=0; \ 00000270 E04386E5 STR R4,[R6, #+992] 2066 SMART_REDRAW(); \ ??create_connect_1: \ 00000274 ........ BL SMART_REDRAW \ ??create_connect_7: \ 00000278 45DF8DE2 ADD SP,SP,#+276 \ 0000027C F08FBDE8 POP {R4-R11,PC} 2067 } 2068 else 2069 { 2070 closesocket(sock); \ ??create_connect_12: \ 00000280 380095E5 LDR R0,[R5, #+56] \ 00000284 760100EF SWI +374 2071 sock=-1; \ 00000288 38B085E5 STR R11,[R5, #+56] 2072 LockSched(); \ 0000028C 460100EF SWI +326 2073 ShowMSG(1,(int)LG_MSGCANTCONN); \ 00000290 4C1F89E2 ADD R1,R9,#+304 \ 00000294 0100A0E3 MOV R0,#+1 \ 00000298 480100EF SWI +328 2074 UnlockSched(); \ 0000029C 470100EF SWI +327 2075 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 000002A0 BFFFFFEA B ??create_connect_8 2076 2077 } 2078 } 2079 else 2080 { 2081 LockSched(); \ ??create_connect_11: \ 000002A4 460100EF SWI +326 2082 ShowMSG(1,(int)LG_MSGCANTCRSC); \ 000002A8 531F89E2 ADD R1,R9,#+332 \ 000002AC 0100A0E3 MOV R0,#+1 \ 000002B0 480100EF SWI +328 2083 UnlockSched(); \ 000002B4 470100EF SWI +327 2084 //Не осилили создания сокета, закрываем GPRS-сессию 2085 GPRS_OnOff(0,1); \ 000002B8 0110A0E3 MOV R1,#+1 \ 000002BC 0000A0E3 MOV R0,#+0 \ 000002C0 8E0100EF SWI +398 \ 000002C4 EBFFFFEA B ??create_connect_7 2086 } 2087 } 2088 } 2089 else 2090 { 2091 DNR_TRIES--; \ ??create_connect_9: \ 000002C8 480095E5 LDR R0,[R5, #+72] \ 000002CC 010040E2 SUB R0,R0,#+1 \ 000002D0 480085E5 STR R0,[R5, #+72] 2092 LockSched(); \ 000002D4 460100EF SWI +326 2093 ShowMSG(1,(int)LG_MSGHOSTNFND); \ 000002D8 5E1F89E2 ADD R1,R9,#+376 \ 000002DC 0100A0E3 MOV R0,#+1 \ 000002E0 480100EF SWI +328 2094 UnlockSched(); \ 000002E4 470100EF SWI +327 \ ??create_connect_10: \ 000002E8 45DF8DE2 ADD SP,SP,#+276 ;; stack cleaning \ 000002EC F08FBDE8 POP {R4-R11,PC} ;; return \ ??create_connect_2: \ 000002F0 0A000000 DC8 "\n",+0,+0 \ 000002F4 ........ DC32 NATICQ_HOST 2095 } 2096 } 2097 2098 #ifdef SEND_TIMER 2099 GBSTMR send_tmr; 2100 #endif 2101 \ In segment CODE, align 4, keep-with-next 2102 void ClearSendQ(void) 2103 { \ ClearSendQ: \ 00000000 10402DE9 PUSH {R4,LR} 2104 mfree((void *)sendq_p); \ 00000004 ........ LDR R4,??DataTable93 ;; screen3 \ 00000008 200094E5 LDR R0,[R4, #+32] \ 0000000C 150000EF SWI +21 2105 sendq_p=NULL; \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 200084E5 STR R0,[R4, #+32] 2106 sendq_l=NULL; \ 00000018 1C0084E5 STR R0,[R4, #+28] 2107 #ifdef SEND_TIMER 2108 GBS_DelTimer(&send_tmr); 2109 #endif 2110 } \ 0000001C 1080BDE8 POP {R4,PC} ;; return 2111 \ In segment CODE, align 4, keep-with-next 2112 void end_socket(void) 2113 { \ end_socket: \ 00000000 10402DE9 PUSH {R4,LR} 2114 if (sock>=0) \ 00000004 ........ LDR R4,??DataTable93 ;; screen3 \ 00000008 380094E5 LDR R0,[R4, #+56] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0300004A BMI ??end_socket_0 2115 { 2116 shutdown(sock,2); \ 00000014 0210A0E3 MOV R1,#+2 \ 00000018 770100EF SWI +375 2117 closesocket(sock); \ 0000001C 380094E5 LDR R0,[R4, #+56] \ 00000020 760100EF SWI +374 2118 } 2119 #ifdef SEND_TIMER 2120 GBS_DelTimer(&send_tmr); 2121 #endif 2122 2123 Play(sndLostConn); \ ??end_socket_0: \ 00000024 ........ LDR R0,??DataTable90 ;; sndLostConn \ 00000028 1040BDE8 POP {R4,LR} ;; Pop \ 0000002C ........ B Play ;; tailcall 2124 } 2125 2126 #ifdef SEND_TIMER 2127 static void resend(void) 2128 { 2129 void SendAnswer(int dummy, TPKT *p); 2130 SUBPROC((void*)SendAnswer,0,0); 2131 } 2132 #endif 2133 \ In segment CODE, align 4, keep-with-next 2134 void SendAnswer(int dummy, TPKT *p) 2135 { \ SendAnswer: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 2136 int i; 2137 int j; 2138 if (connect_state<2) \ 00000004 ........ LDR R4,??DataTable93 ;; screen3 \ 00000008 0170A0E1 MOV R7,R1 \ 0000000C 340094E5 LDR R0,[R4, #+52] \ 00000010 020050E3 CMP R0,#+2 \ 00000014 020000AA BGE ??SendAnswer_0 2139 { 2140 mfree(p); \ 00000018 0700A0E1 MOV R0,R7 \ 0000001C 150000EF SWI +21 2141 return; \ 00000020 F087BDE8 POP {R4-R10,PC} 2142 } 2143 if (p) \ ??SendAnswer_0: \ 00000024 ........ LDR R5,??DataTable92 ;; i_rc \ 00000028 000057E3 CMP R7,#+0 \ 0000002C 2600000A BEQ ??SendAnswer_1 2144 { 2145 j=sizeof(PKT)+p->pkt.data_len; //Размер пакета \ 00000030 B600D7E1 LDRH R0,[R7, #+6] \ 00000034 086080E2 ADD R6,R0,#+8 2146 TOTALSENDED+=j; \ 00000038 E00395E5 LDR R0,[R5, #+992] \ 0000003C 000086E0 ADD R0,R6,R0 \ 00000040 E00385E5 STR R0,[R5, #+992] 2147 ALLTOTALSENDED+=j; //by BoBa 10.07 \ 00000044 E80395E5 LDR R0,[R5, #+1000] \ 00000048 000086E0 ADD R0,R6,R0 \ 0000004C E80385E5 STR R0,[R5, #+1000] 2148 //Проверяем, не надо ли добавить в очередь 2149 if (sendq_p) \ 00000050 200094E5 LDR R0,[R4, #+32] \ 00000054 000050E3 CMP R0,#+0 \ 00000058 0F00000A BEQ ??SendAnswer_2 2150 { 2151 //Есть очередь, добавляем в нее 2152 sendq_p=realloc((void *)sendq_p,sendq_l+j); \ 0000005C 1C1094E5 LDR R1,[R4, #+28] \ 00000060 011086E0 ADD R1,R6,R1 \ 00000064 BA0000EF SWI +186 \ 00000068 200084E5 STR R0,[R4, #+32] 2153 memcpy((char *)sendq_p+sendq_l,p,j); \ 0000006C 1C0094E5 LDR R0,[R4, #+28] \ 00000070 203094E5 LDR R3,[R4, #+32] \ 00000074 0620A0E1 MOV R2,R6 \ 00000078 0710A0E1 MOV R1,R7 \ 0000007C 030080E0 ADD R0,R0,R3 \ 00000080 1E0100EF SWI +286 2154 mfree(p); \ 00000084 0700A0E1 MOV R0,R7 \ 00000088 150000EF SWI +21 2155 sendq_l+=j; \ 0000008C 1C0094E5 LDR R0,[R4, #+28] \ 00000090 000086E0 ADD R0,R6,R0 \ 00000094 1C0084E5 STR R0,[R4, #+28] 2156 return; \ 00000098 F087BDE8 POP {R4-R10,PC} 2157 } 2158 sendq_p=p; \ ??SendAnswer_2: \ 0000009C 207084E5 STR R7,[R4, #+32] 2159 sendq_l=j; \ 000000A0 1C6084E5 STR R6,[R4, #+28] \ 000000A4 080000EA B ??SendAnswer_1 2160 } 2161 //Отправляем уже существующее в очереди 2162 while((i=sendq_l)!=0) 2163 { 2164 if (i>0x400) i=0x400; 2165 j=send(sock,(void *)sendq_p,i,0); 2166 snprintf(logmsg,255,"send res %d",j); 2167 SMART_REDRAW(); 2168 if (j<0) 2169 { 2170 j=*socklasterr(); 2171 if ((j==0xC9)||(j==0xD6)) 2172 { 2173 //Передали что хотели 2174 strcpy(logmsg,"Send delayed..."); 2175 return; //Видимо, надо ждать сообщения ENIP_BUFFER_FREE 2176 } 2177 else 2178 { 2179 //Ошибка 2180 LockSched(); 2181 ShowMSG(1,(int)"Send error!"); 2182 UnlockSched(); 2183 end_socket(); 2184 return; 2185 } 2186 } 2187 memcpy((void *)sendq_p,(char *)sendq_p+j,sendq_l-=j); //Удалили переданное \ ??SendAnswer_3: \ 000000A8 1C0094E5 LDR R0,[R4, #+28] \ 000000AC 062040E0 SUB R2,R0,R6 \ 000000B0 1C2084E5 STR R2,[R4, #+28] \ 000000B4 200094E5 LDR R0,[R4, #+32] \ 000000B8 001086E0 ADD R1,R6,R0 \ 000000BC 1E0100EF SWI +286 2188 if (j` \ 000000E4 0100A0E3 MOV R0,#+1 \ 000000E8 400E80E3 ORR R0,R0,#0x400 \ 000000EC 000057E1 CMP R7,R0 \ 000000F0 380094E5 LDR R0,[R4, #+56] \ 000000F4 407EA0A3 MOVGE R7,#+1024 \ 000000F8 0030A0E3 MOV R3,#+0 \ 000000FC 0720A0E1 MOV R2,R7 \ 00000100 790100EF SWI +377 \ 00000104 0060A0E1 MOV R6,R0 \ 00000108 B800A0E3 MOV R0,#+184 \ 0000010C 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000110 059080E0 ADD R9,R0,R5 \ 00000114 0630A0E1 MOV R3,R6 \ 00000118 0A20A0E1 MOV R2,R10 \ 0000011C FF10A0E3 MOV R1,#+255 \ 00000120 0900A0E1 MOV R0,R9 \ 00000124 1B0100EF SWI +283 \ 00000128 ........ BL SMART_REDRAW \ 0000012C 000056E3 CMP R6,#+0 \ 00000130 DCFFFF5A BPL ??SendAnswer_3 \ 00000134 7C8100EF SWI +33148 \ 00000138 006090E5 LDR R6,[R0, #+0] \ 0000013C C90056E3 CMP R6,#+201 \ 00000140 D6005613 CMPNE R6,#+214 \ 00000144 0300001A BNE ??SendAnswer_6 \ 00000148 0C108AE2 ADD R1,R10,#+12 \ 0000014C 0900A0E1 MOV R0,R9 \ 00000150 1A0000EF SWI +26 \ 00000154 F087BDE8 POP {R4-R10,PC} \ ??SendAnswer_6: \ 00000158 460100EF SWI +326 \ 0000015C 1C108AE2 ADD R1,R10,#+28 \ 00000160 0100A0E3 MOV R0,#+1 \ 00000164 480100EF SWI +328 \ 00000168 470100EF SWI +327 \ 0000016C ........ BL end_socket \ 00000170 F087BDE8 POP {R4-R10,PC} 2197 } 2198 mfree((void *)sendq_p); \ ??SendAnswer_4: \ 00000174 0100A0E1 MOV R0,R1 \ 00000178 150000EF SWI +21 2199 sendq_p=NULL; \ 0000017C 208084E5 STR R8,[R4, #+32] 2200 } \ 00000180 F087BDE8 POP {R4-R10,PC} ;; return \ ??SendAnswer_5: \ 00000184 ........ DC32 `?` 2201 2202 \ In segment CODE, align 4, keep-with-next 2203 void send_login(int dummy, TPKT *p) 2204 { 2205 connect_state=2; 2206 char rev[16]; 2207 //Кто будет менять в этом месте идентификатор клиента, буду банить на уровне сервера!!! 2208 //А Вова будет банить на форуме! 2209 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,??DataTable93 ;; screen3 \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 0200A0E3 MOV R0,#+2 \ 0000001C 340086E5 STR R0,[R6, #+52] \ 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 2210 2211 TPKT *p2=malloc(sizeof(PKT)+8); \ 00000034 1000A0E3 MOV R0,#+16 \ 00000038 140000EF SWI +20 \ 0000003C 0070A0E1 MOV R7,R0 2212 p2->pkt.uin=UIN; \ 00000040 ........ LDR R0,??DataTable95 ;; UIN 2213 p2->pkt.type=T_SETCLIENT_ID; 2214 p2->pkt.data_len=8; 2215 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 2216 SendAnswer(0,p2); \ 0000006C 0710A0E1 MOV R1,R7 \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 ........ BL SendAnswer 2217 SendAnswer(dummy,p); \ 00000078 0510A0E1 MOV R1,R5 \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 ........ BL SendAnswer 2218 RXstate=-(int)sizeof(PKT); \ 00000084 0700E0E3 MVN R0,#+7 \ 00000088 300086E5 STR R0,[R6, #+48] 2219 } \ 0000008C FF80BDE8 POP {R0-R7,PC} ;; return \ ??send_login_0: \ 00000090 ........ DC32 `?` 2220 \ In segment CODE, align 4, keep-with-next 2221 void do_ping(void) 2222 { \ do_ping: \ 00000000 00402DE9 PUSH {LR} 2223 TPKT *pingp=malloc(sizeof(PKT)); \ 00000004 0800A0E3 MOV R0,#+8 \ 00000008 140000EF SWI +20 2224 pingp->pkt.uin=UIN; \ 0000000C ........ LDR R1,??DataTable95 ;; UIN \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 2225 pingp->pkt.type=0; \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C B410C0E1 STRH R1,[R0, #+4] 2226 pingp->pkt.data_len=0; \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2227 SendAnswer(0,pingp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 0040BDE8 POP {LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 2228 } 2229 \ In segment CODE, align 4, keep-with-next 2230 void SendMSGACK(int i) 2231 { \ SendMSGACK: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 2232 TPKT *ackp=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 2233 ackp->pkt.uin=i; \ 00000010 004080E5 STR R4,[R0, #+0] 2234 ackp->pkt.type=T_MSGACK; \ 00000014 1710A0E3 MOV R1,#+23 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2235 ackp->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2236 SendAnswer(0,ackp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 1040BDE8 POP {R4,LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 2237 } 2238 \ In segment CODE, align 4, keep-with-next 2239 void RequestXText(unsigned int uin) 2240 { \ RequestXText: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 2241 TPKT *p=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 2242 p->pkt.uin=uin; \ 00000010 004080E5 STR R4,[R0, #+0] 2243 p->pkt.type=T_XTEXT_REQ; \ 00000014 1810A0E3 MOV R1,#+24 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2244 p->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2245 SUBPROC((void *)SendAnswer,0,p); \ 00000024 0020A0E1 MOV R2,R0 \ 00000028 ........ LDR R0,??DataTable96 ;; SendAnswer \ 0000002C 710100EF SWI +369 2246 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 2247 2248 int ping_time; 2249 char I_UIN[9]; 2250 char sds[]="%s%d.%s"; 2251 char mp3[]="mp3"; 2252 char wav[]="wav"; 2253 char amr[]="amr"; 2254 int ShowLoadScreen=1; 2255 \ In segment CODE, align 4, keep-with-next 2256 void get_answer(void) 2257 { \ get_answer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2258 void *p; 2259 int i=RXstate; \ 00000004 ........ LDR R5,??DataTable97 ;; screen3 \ 00000008 24D04DE2 SUB SP,SP,#+36 \ 0000000C 40DE4DE2 SUB SP,SP,#+1024 2260 int j; 2261 int n; 2262 char rb[1024]; 2263 char *rp=rb; 2264 if (connect_state<2) return; \ 00000010 340095E5 LDR R0,[R5, #+52] \ 00000014 307095E5 LDR R7,[R5, #+48] \ 00000018 24108DE2 ADD R1,SP,#+36 \ 0000001C 04108DE5 STR R1,[SP, #+4] \ 00000020 020050E3 CMP R0,#+2 \ 00000024 830100BA BLT ??get_answer_1 \ 00000028 0A0077E3 CMN R7,#+10 \ 0000002C 8101000A BEQ ??get_answer_1 2265 if (i==EOP) return; 2266 j=recv(sock,rb,sizeof(rb),0); \ 00000030 380095E5 LDR R0,[R5, #+56] \ 00000034 08669FE5 LDR R6,??get_answer_2 ;; RXbuf \ 00000038 ........ LDR R9,??DataTable108 ;; i_rc \ 0000003C 0030A0E3 MOV R3,#+0 \ 00000040 402EA0E3 MOV R2,#+1024 \ 00000044 780100EF SWI +376 \ 00000048 00008DE5 STR R0,[SP, #+0] \ 0000004C 0980A0E3 MOV R8,#+9 \ 00000050 428C88E3 ORR R8,R8,#0x4200 \ 00000054 110000EA B ??get_answer_3 2267 while(j>0) 2268 { 2269 if (i<0) 2270 { 2271 //Принимаем заголовок 2272 n=-i; //Требуемое количество байт 2273 if (j=0) 2280 { 2281 //Принимаем тельце ;) 2282 n=RXbuf.pkt.data_len; //Всего в тельце 2283 if (n>16383) 2284 { 2285 //Слишком много 2286 strcpy(logmsg,LG_GRBADPACKET); 2287 end_socket(); 2288 RXstate=EOP; 2289 return; 2290 } 2291 n-=i; //Количество требуемых байт (общая длинна тельца-текущая позиция) 2292 if (n>0) 2293 { 2294 if (jisIndividSet)//Если индивидуальные натсройки(меню на долгое вправо) 2375 { 2376 if(t->issound) Play(sndMsg);//если звук включен то играем 2377 break; 2378 } 2379 else 2380 if(t->automsgcount < automsgcount && away_m)//если сигналы автоответчика 2381 { 2382 Play(sndMsg); 2383 break; 2384 } 2385 else 2386 if(t->isaccess)//если удаленный доступ ;) 2387 { 2388 if(t->signals) Play(sndMsg); 2389 break; 2390 } 2391 else//в остальный случаях 2392 Play(sndMsg); 2393 } 2394 else 2395 { 2396 uins=RXbuf.pkt.uin; 2397 volatile int hFile_ex; 2398 unsigned int io_error_ex = 0; 2399 char ext[4]; 2400 // __root const CFG_CBOX_ITEM cfgcbox18_3_2[2]={"Mp3","Wav","Amr"}; 2401 switch(ext_type_sounds) 2402 { 2403 case 0: sprintf(ext,percent_s,mp3); break; 2404 case 1: sprintf(ext,percent_s,wav); break; 2405 case 2: sprintf(ext,percent_s,amr); break; 2406 default : sprintf(ext,percent_s,mp3); break; 2407 } 2408 2409 sprintf(talk_sound, sds, sndMsg2, uins, ext); 2410 hFile_ex = fopen(talk_sound,A_ReadOnly + A_BIN,P_READ, &io_error_ex); 2411 if(hFile_ex!=-1) 2412 { 2413 fclose(hFile_ex, &io_error_ex); 2414 Play(talk_sound); 2415 } 2416 else 2417 Play(sndMsg); 2418 } 2419 } 2420 break; 2421 case T_SSLRESP: 2422 LockSched(); 2423 ShowMSG(1,(int)RXbuf.data); 2424 UnlockSched(); 2425 break; 2426 case T_SRV_ACK: 2427 if (FindContactLOGQByAck(&RXbuf)) 2428 { 2429 Play(sndMsgSent); 2430 if(!ShowLoadScreen) SMART_REDRAW(); 2431 } 2432 case T_CLIENT_ACK: 2433 p=malloc(sizeof(PKT)+2); 2434 memcpy(p,&RXbuf,sizeof(PKT)+2); 2435 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); 2436 break; 2437 case T_ECHORET: 2438 { 2439 TDate d; 2440 TTime t; 2441 TTime *pt=(TTime *)(RXbuf.data); 2442 int s1; 2443 int s2; 2444 GetDateTime(&d,&t); 2445 s1=t.hour*3600+t.min*60+t.sec; 2446 s2=pt->hour*3600+pt->min*60+pt->sec; 2447 s1-=s2; 2448 if (s1<0) s1+=86400; 2449 curping=s1; 2450 snprintf(logmsg,255,"Ping %d-%d seconds!",s1,s1+1); 2451 sprintf(PINGO, "Ping: %d sec",s1); 2452 LockSched(); 2453 if(janis==1) 2454 { 2455 // ShowMSG(1,(int)logmsg); 2456 PrintTimer=5; 2457 strcpy(prmsg,logmsg); 2458 Play(pingsnd); 2459 janis=0; 2460 } 2461 else 2462 { 2463 if(ping_time==0) 2464 { 2465 ping_time=ping_time_config; 2466 Play(pingsnd); 2467 } 2468 else 2469 ping_time--; 2470 } 2471 UnlockSched(); 2472 } 2473 break; 2474 case T_LASTPRIVACY: 2475 n=i+sizeof(PKT); \ ??get_answer_4: \ 00000058 0B40A0E1 MOV R4,R11 2476 p=malloc(n); \ ??get_answer_5: \ 0000005C 0400A0E1 MOV R0,R4 \ 00000060 140000EF SWI +20 \ 00000064 00B0A0E1 MOV R11,R0 2477 memcpy(p,&RXbuf,n); \ 00000068 0420A0E1 MOV R2,R4 \ ??get_answer_6: \ 0000006C 0610A0E1 MOV R1,R6 \ 00000070 1E0100EF SWI +286 2478 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); \ 00000074 380095E5 LDR R0,[R5, #+56] \ 00000078 0B30A0E1 MOV R3,R11 \ 0000007C 01002DE9 PUSH {R0} \ 00000080 0020A0E3 MOV R2,#+0 \ 00000084 0710A0E1 MOV R1,R7 \ 00000088 0800A0E1 MOV R0,R8 \ 0000008C 000100EF SWI +256 \ ??get_answer_7: \ 00000090 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning 2479 break; 2480 } 2481 ad(&RXbuf); \ ??get_answer_8: \ 00000094 0600A0E1 MOV R0,R6 \ 00000098 ........ _BLF ad,??ad??rA 2482 i=-(int)sizeof(PKT); //А может еще есть данные \ 0000009C 0770E0E3 MVN R7,#+7 \ ??get_answer_3: \ 000000A0 00009DE5 LDR R0,[SP, #+0] \ 000000A4 010050E3 CMP R0,#+1 \ 000000A8 610100BA BLT ??get_answer_9 \ 000000AC 000057E3 CMP R7,#+0 \ 000000B0 0E00005A BPL ??get_answer_10 \ 000000B4 04109DE5 LDR R1,[SP, #+4] \ 000000B8 004067E2 RSB R4,R7,#+0 \ 000000BC 040050E1 CMP R0,R4 \ 000000C0 0040A0B1 MOVLT R4,R0 \ 000000C4 0420A0E1 MOV R2,R4 \ 000000C8 060087E0 ADD R0,R7,R6 \ 000000CC 080080E2 ADD R0,R0,#+8 \ 000000D0 1E0100EF SWI +286 \ 000000D4 00109DE5 LDR R1,[SP, #+0] \ 000000D8 077084E0 ADD R7,R4,R7 \ 000000DC 041041E0 SUB R1,R1,R4 \ 000000E0 00108DE5 STR R1,[SP, #+0] \ 000000E4 04109DE5 LDR R1,[SP, #+4] \ 000000E8 011084E0 ADD R1,R4,R1 \ 000000EC 04108DE5 STR R1,[SP, #+4] \ ??get_answer_10: \ 000000F0 000057E3 CMP R7,#+0 \ 000000F4 E9FFFF4A BMI ??get_answer_3 \ 000000F8 B640D6E1 LDRH R4,[R6, #+6] \ 000000FC B800A0E3 MOV R0,#+184 \ 00000100 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000104 09A080E0 ADD R10,R0,R9 \ 00000108 400C54E3 CMP R4,#+16384 \ 0000010C 080000BA BLT ??get_answer_11 \ 00000110 30159FE5 LDR R1,??get_answer_2+0x4 ;; Canvas + 396 \ 00000114 0A00A0E1 MOV R0,R10 \ 00000118 1A0000EF SWI +26 \ 0000011C ........ BL end_socket \ 00000120 0900E0E3 MVN R0,#+9 \ 00000124 300085E5 STR R0,[R5, #+48] \ 00000128 24D08DE2 ADD SP,SP,#+36 \ 0000012C 40DE8DE2 ADD SP,SP,#+1024 \ 00000130 F08FBDE8 POP {R4-R11,PC} \ ??get_answer_11: \ 00000134 074044E0 SUB R4,R4,R7 \ 00000138 010054E3 CMP R4,#+1 \ 0000013C 0E0000BA BLT ??get_answer_12 \ 00000140 00009DE5 LDR R0,[SP, #+0] \ 00000144 04109DE5 LDR R1,[SP, #+4] \ 00000148 040050E1 CMP R0,R4 \ 0000014C 0040A0B1 MOVLT R4,R0 \ 00000150 0420A0E1 MOV R2,R4 \ 00000154 060087E0 ADD R0,R7,R6 \ 00000158 080080E2 ADD R0,R0,#+8 \ 0000015C 1E0100EF SWI +286 \ 00000160 00109DE5 LDR R1,[SP, #+0] \ 00000164 077084E0 ADD R7,R4,R7 \ 00000168 041041E0 SUB R1,R1,R4 \ 0000016C 00108DE5 STR R1,[SP, #+0] \ 00000170 04109DE5 LDR R1,[SP, #+4] \ 00000174 011084E0 ADD R1,R4,R1 \ 00000178 04108DE5 STR R1,[SP, #+4] \ ??get_answer_12: \ 0000017C B600D6E1 LDRH R0,[R6, #+6] \ 00000180 070050E1 CMP R0,R7 \ 00000184 C5FFFF1A BNE ??get_answer_3 \ 00000188 DC0399E5 LDR R0,[R9, #+988] \ 0000018C 08B087E2 ADD R11,R7,#+8 \ 00000190 00008BE0 ADD R0,R11,R0 \ 00000194 DC0389E5 STR R0,[R9, #+988] \ 00000198 E40399E5 LDR R0,[R9, #+996] \ 0000019C 0010A0E3 MOV R1,#+0 \ 000001A0 00008BE0 ADD R0,R11,R0 \ 000001A4 E40389E5 STR R0,[R9, #+996] \ 000001A8 060087E0 ADD R0,R7,R6 \ 000001AC 0810C0E5 STRB R1,[R0, #+8] \ 000001B0 0600A0E1 MOV R0,R6 \ 000001B4 ........ _BLF aa,??aa??rA \ 000001B8 B400D6E1 LDRH R0,[R6, #+4] \ 000001BC 094087E2 ADD R4,R7,#+9 \ 000001C0 AE70A0E3 MOV R7,#+174 \ 000001C4 DE7C87E3 ORR R7,R7,#0xDE00 \ 000001C8 030040E2 SUB R0,R0,#+3 \ 000001CC 1C0050E3 CMP R0,#+28 \ 000001D0 AFFFFF8A BHI ??get_answer_8 \ 000001D4 021F8FE2 ADR R1,??get_answer_0 \ 000001D8 8000A0E1 MOV R0,R0, LSL #+1 \ 000001DC F01091E1 LDRSH R1,[R1, R0] \ 000001E0 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??get_answer_0: \ 000001E4 47000E00ABFF DC16 +71,+14,+65451,+64 \ 4000 \ 000001EC 9DFFABFF2900 DC16 +65437,+65451,+41,+65451 \ ABFF \ 000001F4 ABFFABFFBB00 DC16 +65451,+65451,+187,+65451 \ ABFF \ 000001FC ABFFC100CB00 DC16 +65451,+193,+203,+65451 \ ABFF \ 00000204 D0009DFF9DFF DC16 +208,+65437,+65437,+65451 \ ABFF \ 0000020C ABFFABFF9DFF DC16 +65451,+65451,+65437,+65451 \ ABFF \ 00000214 ABFFABFFABFF DC16 +65451,+65451,+65451,+65451 \ ABFF \ 0000021C 9CFF0000 DC16 +65436,+0 \ ??get_answer_13: \ 00000220 0400A0E1 MOV R0,R4 \ 00000224 140000EF SWI +20 \ 00000228 00B0A0E1 MOV R11,R0 \ 0000022C 0420A0E1 MOV R2,R4 \ 00000230 0610A0E1 MOV R1,R6 \ 00000234 1E0100EF SWI +286 \ 00000238 380095E5 LDR R0,[R5, #+56] \ 0000023C 0B30A0E1 MOV R3,R11 \ 00000240 01002DE9 PUSH {R0} \ 00000244 0020A0E3 MOV R2,#+0 \ 00000248 0710A0E1 MOV R1,R7 \ 0000024C 0800A0E1 MOV R0,R8 \ 00000250 000100EF SWI +256 \ 00000254 F0039FE5 LDR R0,??get_answer_2+0x8 ;; sndStartup \ 00000258 ........ BL Play \ 0000025C 083086E2 ADD R3,R6,#+8 \ 00000260 F22F8FE2 ADR R2,??get_answer_14 ;; "%s" \ 00000264 FF10A0E3 MOV R1,#+255 \ 00000268 0A00A0E1 MOV R0,R10 \ 0000026C 1B0100EF SWI +283 \ 00000270 0300A0E3 MOV R0,#+3 \ 00000274 340085E5 STR R0,[R5, #+52] \ 00000278 4C0095E5 LDR R0,[R5, #+76] \ 0000027C 010040E2 SUB R0,R0,#+1 \ 00000280 4C0085E5 STR R0,[R5, #+76] \ 00000284 ........ BL SMART_REDRAW \ 00000288 80FFFFEA B ??get_answer_7 \ ??get_answer_15: \ 0000028C 0B40A0E1 MOV R4,R11 \ 00000290 0400A0E1 MOV R0,R4 \ 00000294 140000EF SWI +20 \ 00000298 00B0A0E1 MOV R11,R0 \ 0000029C 0420A0E1 MOV R2,R4 \ 000002A0 0610A0E1 MOV R1,R6 \ 000002A4 1E0100EF SWI +286 \ 000002A8 B800D6E1 LDRH R0,[R6, #+8] \ 000002AC 9C239FE5 LDR R2,??get_answer_2+0xC ;; Canvas + 408 \ 000002B0 FF10A0E3 MOV R1,#+255 \ 000002B4 01002DE9 PUSH {R0} \ 000002B8 003096E5 LDR R3,[R6, #+0] \ 000002BC 0A00A0E1 MOV R0,R10 \ 000002C0 1B0100EF SWI +283 \ 000002C4 380095E5 LDR R0,[R5, #+56] \ 000002C8 0B30A0E1 MOV R3,R11 \ 000002CC 01002DE9 PUSH {R0} \ 000002D0 0020A0E3 MOV R2,#+0 \ 000002D4 0710A0E1 MOV R1,R7 \ 000002D8 0800A0E1 MOV R0,R8 \ 000002DC 000100EF SWI +256 \ 000002E0 08D08DE2 ADD SP,SP,#+8 \ 000002E4 6AFFFFEA B ??get_answer_8 \ ??get_answer_16: \ 000002E8 64239FE5 LDR R2,??get_answer_2+0x10 ;; Canvas + 420 \ 000002EC 083086E2 ADD R3,R6,#+8 \ 000002F0 FF10A0E3 MOV R1,#+255 \ 000002F4 0A00A0E1 MOV R0,R10 \ 000002F8 1B0100EF SWI +283 \ 000002FC ........ BL SMART_REDRAW \ 00000300 63FFFFEA B ??get_answer_8 \ ??get_answer_17: \ 00000304 0400A0E1 MOV R0,R4 \ 00000308 140000EF SWI +20 \ 0000030C 00B0A0E1 MOV R11,R0 \ 00000310 0420A0E1 MOV R2,R4 \ 00000314 0610A0E1 MOV R1,R6 \ 00000318 1E0100EF SWI +286 \ 0000031C 08008BE2 ADD R0,R11,#+8 \ 00000320 030000EA B ??get_answer_18 \ ??get_answer_19: \ 00000324 030051E3 CMP R1,#+3 \ 00000328 2010A0B3 MOVLT R1,#+32 \ 0000032C 0010C0B5 STRBLT R1,[R0, #+0] \ 00000330 010080E2 ADD R0,R0,#+1 \ ??get_answer_18: \ 00000334 0010D0E5 LDRB R1,[R0, #+0] \ 00000338 000051E3 CMP R1,#+0 \ 0000033C F8FFFF1A BNE ??get_answer_19 \ 00000340 002096E5 LDR R2,[R6, #+0] \ 00000344 0C139FE5 LDR R1,??get_answer_2+0x14 ;; Canvas + 428 \ 00000348 8800A0E3 MOV R0,#+136 \ 0000034C 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000350 094080E0 ADD R4,R0,R9 \ 00000354 0400A0E1 MOV R0,R4 \ 00000358 160000EF SWI +22 \ 0000035C ........ LDR R0,??DataTable99 ;; ignor_list \ 00000360 0410A0E1 MOV R1,R4 \ 00000364 180100EF SWI +280 \ 00000368 000050E3 CMP R0,#+0 \ 0000036C 48FFFF1A BNE ??get_answer_8 \ 00000370 E4229FE5 LDR R2,??get_answer_2+0x18 ;; Canvas + 436 \ 00000374 E4429FE5 LDR R4,??get_answer_2+0x1C ;; sndMsg \ 00000378 080086E2 ADD R0,R6,#+8 \ 0000037C 01002DE9 PUSH {R0} \ 00000380 003096E5 LDR R3,[R6, #+0] \ 00000384 FF10A0E3 MOV R1,#+255 \ 00000388 0A00A0E1 MOV R0,R10 \ 0000038C 1B0100EF SWI +283 \ 00000390 DC0399E5 LDR R0,[R9, #+988] \ 00000394 ........ BL SendMSGACK \ 00000398 380095E5 LDR R0,[R5, #+56] \ 0000039C 0B30A0E1 MOV R3,R11 \ 000003A0 01002DE9 PUSH {R0} \ 000003A4 0020A0E3 MOV R2,#+0 \ 000003A8 0710A0E1 MOV R1,R7 \ 000003AC 0800A0E1 MOV R0,R8 \ 000003B0 000100EF SWI +256 \ 000003B4 ........ BL SMART_REDRAW \ 000003B8 ........ LDR R0,??DataTable100 ;; extended_sounds \ 000003BC 000090E5 LDR R0,[R0, #+0] \ 000003C0 08D08DE2 ADD SP,SP,#+8 \ 000003C4 000050E3 CMP R0,#+0 \ 000003C8 000096E5 LDR R0,[R6, #+0] \ 000003CC 1A00001A BNE ??get_answer_20 \ 000003D0 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000003D4 581090E5 LDR R1,[R0, #+88] \ 000003D8 000051E3 CMP R1,#+0 \ 000003DC 0500000A BEQ ??get_answer_21 \ 000003E0 600090E5 LDR R0,[R0, #+96] \ 000003E4 000050E3 CMP R0,#+0 \ 000003E8 29FFFF0A BEQ ??get_answer_8 \ ??get_answer_22: \ 000003EC 0400A0E1 MOV R0,R4 \ ??get_answer_23: \ 000003F0 ........ BL Play \ 000003F4 26FFFFEA B ??get_answer_8 \ ??get_answer_21: \ 000003F8 ........ LDR R2,??DataTable101 ;; automsgcount \ 000003FC 7C1090E5 LDR R1,[R0, #+124] \ 00000400 002092E5 LDR R2,[R2, #+0] \ 00000404 020051E1 CMP R1,R2 \ 00000408 0200002A BCS ??get_answer_24 \ 0000040C 081399E5 LDR R1,[R9, #+776] \ 00000410 000051E3 CMP R1,#+0 \ 00000414 F4FFFF1A BNE ??get_answer_22 \ ??get_answer_24: \ 00000418 781090E5 LDR R1,[R0, #+120] \ 0000041C 000051E3 CMP R1,#+0 \ 00000420 0300000A BEQ ??get_answer_25 \ 00000424 740090E5 LDR R0,[R0, #+116] \ 00000428 000050E3 CMP R0,#+0 \ 0000042C 18FFFF0A BEQ ??get_answer_8 \ 00000430 EDFFFFEA B ??get_answer_22 \ ??get_answer_25: \ 00000434 0400A0E1 MOV R0,R4 \ 00000438 ECFFFFEA B ??get_answer_23 \ ??get_answer_20: \ 0000043C 380289E5 STR R0,[R9, #+568] \ 00000440 ........ LDR R0,??DataTable102 ;; ext_type_sounds \ 00000444 0010A0E3 MOV R1,#+0 \ 00000448 10108DE5 STR R1,[SP, #+16] \ 0000044C 000090E5 LDR R0,[R0, #+0] \ 00000450 010050E2 SUBS R0,R0,#+1 \ 00000454 0300000A BEQ ??get_answer_26 \ 00000458 010050E2 SUBS R0,R0,#+1 \ 0000045C 9C208502 ADDEQ R2,R5,#+156 \ 00000460 94208512 ADDNE R2,R5,#+148 \ 00000464 000000EA B ??get_answer_27 \ ??get_answer_26: \ 00000468 982085E2 ADD R2,R5,#+152 \ ??get_answer_27: \ 0000046C ........ LDR R1,??DataTable103 ;; Canvas + 8 \ 00000470 08008DE2 ADD R0,SP,#+8 \ 00000474 160000EF SWI +22 \ 00000478 E4219FE5 LDR R2,??get_answer_2+0x20 ;; sndMsg2 \ 0000047C 08008DE2 ADD R0,SP,#+8 \ 00000480 01002DE9 PUSH {R0} \ 00000484 383299E5 LDR R3,[R9, #+568] \ 00000488 6B7EA0E3 MOV R7,#+1712 \ 0000048C 8C1085E2 ADD R1,R5,#+140 \ 00000490 090087E0 ADD R0,R7,R9 \ 00000494 160000EF SWI +22 \ 00000498 14308DE2 ADD R3,SP,#+20 \ 0000049C 8020A0E3 MOV R2,#+128 \ 000004A0 801CA0E3 MOV R1,#+32768 \ 000004A4 090087E0 ADD R0,R7,R9 \ 000004A8 0A0000EF SWI +10 \ 000004AC 10008DE5 STR R0,[SP, #+16] \ 000004B0 10009DE5 LDR R0,[SP, #+16] \ 000004B4 04D08DE2 ADD SP,SP,#+4 \ 000004B8 010070E3 CMN R0,#+1 \ 000004BC DCFFFF0A BEQ ??get_answer_25 \ 000004C0 0C009DE5 LDR R0,[SP, #+12] \ 000004C4 10108DE2 ADD R1,SP,#+16 \ 000004C8 0D0000EF SWI +13 \ 000004CC 090087E0 ADD R0,R7,R9 \ 000004D0 C6FFFFEA B ??get_answer_23 \ ??get_answer_28: \ 000004D4 460100EF SWI +326 \ 000004D8 081086E2 ADD R1,R6,#+8 \ 000004DC 0100A0E3 MOV R0,#+1 \ 000004E0 480100EF SWI +328 \ ??get_answer_29: \ 000004E4 470100EF SWI +327 \ 000004E8 E9FEFFEA B ??get_answer_8 \ ??get_answer_30: \ 000004EC 0600A0E1 MOV R0,R6 \ 000004F0 ........ BL FindContactLOGQByAck \ 000004F4 000050E3 CMP R0,#+0 \ 000004F8 0500000A BEQ ??get_answer_31 \ 000004FC 64019FE5 LDR R0,??get_answer_2+0x24 ;; sndMsgSent \ 00000500 ........ BL Play \ 00000504 500095E5 LDR R0,[R5, #+80] \ 00000508 000050E3 CMP R0,#+0 \ 0000050C 0000001A BNE ??get_answer_31 \ 00000510 ........ BL SMART_REDRAW \ ??get_answer_31: \ 00000514 0A00A0E3 MOV R0,#+10 \ 00000518 140000EF SWI +20 \ 0000051C 00B0A0E1 MOV R11,R0 \ 00000520 0A20A0E3 MOV R2,#+10 \ 00000524 D0FEFFEA B ??get_answer_6 \ ??get_answer_32: \ 00000528 14108DE2 ADD R1,SP,#+20 \ 0000052C ........ LDR R7,??DataTable104 ;; janis \ 00000530 1C008DE2 ADD R0,SP,#+28 \ 00000534 B40000EF SWI +180 \ 00000538 1400DDE5 LDRB R0,[SP, #+20] \ 0000053C 1520DDE5 LDRB R2,[SP, #+21] \ 00000540 E11EA0E3 MOV R1,#+3600 \ 00000544 3C30A0E3 MOV R3,#+60 \ 00000548 930202E0 MUL R2,R3,R2 \ 0000054C 912020E0 MLA R0,R1,R0,R2 \ 00000550 1610DDE5 LDRB R1,[SP, #+22] \ 00000554 E12EA0E3 MOV R2,#+3600 \ 00000558 000081E0 ADD R0,R1,R0 \ 0000055C 0810D6E5 LDRB R1,[R6, #+8] \ 00000560 920101E0 MUL R1,R2,R1 \ 00000564 00219FE5 LDR R2,??get_answer_2+0x28 ;; Canvas + 448 \ 00000568 010040E0 SUB R0,R0,R1 \ 0000056C 0910D6E5 LDRB R1,[R6, #+9] \ 00000570 930101E0 MUL R1,R3,R1 \ 00000574 010040E0 SUB R0,R0,R1 \ 00000578 0A10D6E5 LDRB R1,[R6, #+10] \ 0000057C 014050E0 SUBS R4,R0,R1 \ 00000580 500BA043 MOVMI R0,#+81920 \ 00000584 460D8043 ORRMI R0,R0,#0x1180 \ 00000588 04408040 ADDMI R4,R0,R4 \ 0000058C 184085E5 STR R4,[R5, #+24] \ 00000590 010084E2 ADD R0,R4,#+1 \ 00000594 01002DE9 PUSH {R0} \ 00000598 0430A0E1 MOV R3,R4 \ 0000059C FF10A0E3 MOV R1,#+255 \ 000005A0 0A00A0E1 MOV R0,R10 \ 000005A4 1B0100EF SWI +283 \ 000005A8 C0109FE5 LDR R1,??get_answer_2+0x2C ;; Canvas + 468 \ 000005AC 0420A0E1 MOV R2,R4 \ 000005B0 BC409FE5 LDR R4,??get_answer_2+0x30 ;; pingsnd \ 000005B4 620D89E2 ADD R0,R9,#+6272 \ 000005B8 160000EF SWI +22 \ 000005BC 460100EF SWI +326 \ 000005C0 000097E5 LDR R0,[R7, #+0] \ 000005C4 04D08DE2 ADD SP,SP,#+4 \ 000005C8 010050E3 CMP R0,#+1 \ 000005CC 0B00001A BNE ??get_answer_33 \ 000005D0 0500A0E3 MOV R0,#+5 \ 000005D4 140085E5 STR R0,[R5, #+20] \ 000005D8 0A10A0E1 MOV R1,R10 \ 000005DC 7000A0E3 MOV R0,#+112 \ 000005E0 5C0D80E3 ORR R0,R0,#0x1700 \ 000005E4 090080E0 ADD R0,R0,R9 \ 000005E8 1A0000EF SWI +26 \ 000005EC 0400A0E1 MOV R0,R4 \ 000005F0 ........ BL Play \ 000005F4 0000A0E3 MOV R0,#+0 \ 000005F8 000087E5 STR R0,[R7, #+0] \ 000005FC B8FFFFEA B ??get_answer_29 \ ??get_answer_33: \ 00000600 080499E5 LDR R0,[R9, #+1032] \ 00000604 000050E3 CMP R0,#+0 \ 00000608 0500001A BNE ??get_answer_34 \ 0000060C 64009FE5 LDR R0,??get_answer_2+0x34 ;; ping_time_config \ 00000610 000090E5 LDR R0,[R0, #+0] \ 00000614 080489E5 STR R0,[R9, #+1032] \ 00000618 0400A0E1 MOV R0,R4 \ 0000061C ........ BL Play \ 00000620 AFFFFFEA B ??get_answer_29 \ ??get_answer_34: \ 00000624 010040E2 SUB R0,R0,#+1 \ 00000628 080489E5 STR R0,[R9, #+1032] \ 0000062C ACFFFFEA B ??get_answer_29 \ ??get_answer_14: \ 00000630 25730000 DC8 "%s",+0 2483 } 2484 } 2485 } 2486 RXstate=i; \ ??get_answer_9: \ 00000634 307085E5 STR R7,[R5, #+48] 2487 // GBS_StartTimerProc(&tmr_dorecv,3000,dorecv); 2488 // SMART_REDRAW(); 2489 } \ ??get_answer_1: \ 00000638 24D08DE2 ADD SP,SP,#+36 \ 0000063C 40DE8DE2 ADD SP,SP,#+1024 \ 00000640 F08FBDE8 POP {R4-R11,PC} ;; return \ ??get_answer_2: \ 00000644 ........ DC32 RXbuf \ 00000648 ........ DC32 Canvas + 396 \ 0000064C ........ DC32 sndStartup \ 00000650 ........ DC32 Canvas + 408 \ 00000654 ........ DC32 Canvas + 420 \ 00000658 ........ DC32 Canvas + 428 \ 0000065C ........ DC32 Canvas + 436 \ 00000660 ........ DC32 sndMsg \ 00000664 ........ DC32 sndMsg2 \ 00000668 ........ DC32 sndMsgSent \ 0000066C ........ DC32 Canvas + 448 \ 00000670 ........ DC32 Canvas + 468 \ 00000674 ........ DC32 pingsnd \ 00000678 ........ DC32 ping_time_config 2490 2491 2492 //=====================add to main info==================== 2493 2494 //Сюда я не лез...и че та желания нет...kluchnik ;) 2495 2496 char a_txt[45]; 2497 char s_txt[45]; 2498 char d_txt[45]; 2499 char f_txt[45]; 2500 char g_txt[45]; 2501 unsigned int main_msg_timer2; \ In segment CODE, align 4, keep-with-next 2502 void AddToMain(const char *nameu,char *si) 2503 { \ AddToMain: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0180A0E1 MOV R8,R1 2504 char *de=malloc(64); \ 00000010 4000A0E3 MOV R0,#+64 \ 00000014 140000EF SWI +20 \ 00000018 0050A0E1 MOV R5,R0 2505 int text_l; 2506 int iz; 2507 int name_l; 2508 name_l=0; 2509 text_l=0; 2510 name_l=strlen(nameu); \ 0000001C 0400A0E1 MOV R0,R4 \ 00000020 1B0000EF SWI +27 2511 iz=0; 2512 #ifdef ELKA 2513 text_l=main_lenght-name_l; 2514 #else 2515 text_l=main_lenght-name_l; \ 00000024 FC119FE5 LDR R1,??AddToMain_0 ;; main_lenght \ 00000028 0070A0E3 MOV R7,#+0 \ 0000002C 001091E5 LDR R1,[R1, #+0] 2516 #endif 2517 2518 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 2519 { 2520 while(text_l!=0) 2521 { 2522 de[iz]=si[iz]; 2523 iz++; 2524 text_l--; 2525 } 2526 if(use_cutter) 2527 { 2528 de[iz]='.'; 2529 iz++; 2530 de[iz]='.'; 2531 iz++; 2532 de[iz]='.'; 2533 iz++; 2534 } 2535 de[iz]='\0'; 2536 } 2537 else 2538 strcpy(de, si); \ 00000048 0810A0E1 MOV R1,R8 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 1A0000EF SWI +26 2539 iz=0; \ ??AddToMain_2: \ 00000054 0070A0E3 MOV R7,#+0 \ 00000058 1A0000EA B ??AddToMain_3 \ ??AddToMain_4: \ 0000005C 0810D7E7 LDRB R1,[R7, +R8] \ 00000060 019049E2 SUB R9,R9,#+1 \ 00000064 0510C7E7 STRB R1,[R7, +R5] \ 00000068 0070A0E1 MOV R7,R0 \ ??AddToMain_1: \ 0000006C 010087E2 ADD R0,R7,#+1 \ 00000070 000059E3 CMP R9,#+0 \ 00000074 F8FFFF1A BNE ??AddToMain_4 \ 00000078 AC119FE5 LDR R1,??AddToMain_0+0x4 ;; use_cutter \ 0000007C 001091E5 LDR R1,[R1, #+0] \ 00000080 000051E3 CMP R1,#+0 \ 00000084 0500000A BEQ ??AddToMain_5 \ 00000088 2E10A0E3 MOV R1,#+46 \ 0000008C 0510C7E7 STRB R1,[R7, +R5] \ 00000090 0510C0E7 STRB R1,[R0, +R5] \ 00000094 010080E2 ADD R0,R0,#+1 \ 00000098 0510C0E7 STRB R1,[R0, +R5] \ 0000009C 017080E2 ADD R7,R0,#+1 \ ??AddToMain_5: \ 000000A0 0560C7E7 STRB R6,[R7, +R5] \ 000000A4 EAFFFFEA B ??AddToMain_2 2540 while(strlen(de)!=iz) 2541 { 2542 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] 2543 if(de[iz]==0x0A) de[iz]=0x20; \ 000000B8 0510D7E7 LDRB R1,[R7, +R5] \ 000000BC 0A0051E3 CMP R1,#+10 \ 000000C0 0500C707 STRBEQ R0,[R7, +R5] 2544 iz++; \ 000000C4 017087E2 ADD R7,R7,#+1 2545 } \ ??AddToMain_3: \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 1B0000EF SWI +27 \ 000000D0 070050E1 CMP R0,R7 \ 000000D4 F3FFFF1A BNE ??AddToMain_6 2546 de[iz]='\0'; \ 000000D8 0560C7E7 STRB R6,[R7, +R5] 2547 if(main_count==0) sprintf(a_txt, "%s: %s", nameu,de); \ 000000DC ........ LDR R6,??DataTable108 ;; i_rc \ 000000E0 48719FE5 LDR R7,??AddToMain_0+0x8 ;; `?` \ 000000E4 9410A0E3 MOV R1,#+148 \ 000000E8 7C1D81E3 ORR R1,R1,#0x1F00 \ 000000EC 061081E0 ADD R1,R1,R6 \ 000000F0 00108DE5 STR R1,[SP, #+0] \ 000000F4 400296E5 LDR R0,[R6, #+576] \ 000000F8 000050E3 CMP R0,#+0 \ 000000FC 0400001A BNE ??AddToMain_7 \ 00000100 00009DE5 LDR R0,[SP, #+0] \ 00000104 0530A0E1 MOV R3,R5 \ 00000108 0420A0E1 MOV R2,R4 \ 0000010C 0710A0E1 MOV R1,R7 \ 00000110 160000EF SWI +22 2548 if(main_count==1) sprintf(s_txt, "%s: %s", nameu,de); \ ??AddToMain_7: \ 00000114 C400A0E3 MOV R0,#+196 \ 00000118 7C0D80E3 ORR R0,R0,#0x1F00 \ 0000011C 068080E0 ADD R8,R0,R6 \ 00000120 400296E5 LDR R0,[R6, #+576] \ 00000124 010050E3 CMP R0,#+1 \ 00000128 0400001A BNE ??AddToMain_8 \ 0000012C 0530A0E1 MOV R3,R5 \ 00000130 0420A0E1 MOV R2,R4 \ 00000134 0710A0E1 MOV R1,R7 \ 00000138 0800A0E1 MOV R0,R8 \ 0000013C 160000EF SWI +22 2549 if(main_count==2) sprintf(d_txt, "%s: %s", nameu,de); \ ??AddToMain_8: \ 00000140 F400A0E3 MOV R0,#+244 \ 00000144 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000148 069080E0 ADD R9,R0,R6 \ 0000014C 400296E5 LDR R0,[R6, #+576] \ 00000150 020050E3 CMP R0,#+2 \ 00000154 0400001A BNE ??AddToMain_9 \ 00000158 0530A0E1 MOV R3,R5 \ 0000015C 0420A0E1 MOV R2,R4 \ 00000160 0710A0E1 MOV R1,R7 \ 00000164 0900A0E1 MOV R0,R9 \ 00000168 160000EF SWI +22 2550 if(main_count==3) sprintf(f_txt, "%s: %s", nameu,de); \ ??AddToMain_9: \ 0000016C 2400A0E3 MOV R0,#+36 \ 00000170 800D80E3 ORR R0,R0,#0x2000 \ 00000174 06A080E0 ADD R10,R0,R6 \ 00000178 400296E5 LDR R0,[R6, #+576] \ 0000017C 030050E3 CMP R0,#+3 \ 00000180 0400001A BNE ??AddToMain_10 \ 00000184 0530A0E1 MOV R3,R5 \ 00000188 0420A0E1 MOV R2,R4 \ 0000018C 0710A0E1 MOV R1,R7 \ 00000190 0A00A0E1 MOV R0,R10 \ 00000194 160000EF SWI +22 2551 if(main_count==4) sprintf(g_txt, "%s: %s", nameu,de); \ ??AddToMain_10: \ 00000198 5400A0E3 MOV R0,#+84 \ 0000019C 800D80E3 ORR R0,R0,#0x2000 \ 000001A0 06B080E0 ADD R11,R0,R6 \ 000001A4 400296E5 LDR R0,[R6, #+576] \ 000001A8 040050E3 CMP R0,#+4 \ 000001AC 0400001A BNE ??AddToMain_11 \ 000001B0 0530A0E1 MOV R3,R5 \ 000001B4 0420A0E1 MOV R2,R4 \ 000001B8 0710A0E1 MOV R1,R7 \ 000001BC 0B00A0E1 MOV R0,R11 \ 000001C0 160000EF SWI +22 2552 if(main_count>4) \ ??AddToMain_11: \ 000001C4 400296E5 LDR R0,[R6, #+576] \ 000001C8 050050E3 CMP R0,#+5 \ 000001CC 100000BA BLT ??AddToMain_12 2553 { 2554 strcpy(a_txt, s_txt); \ 000001D0 00009DE5 LDR R0,[SP, #+0] \ 000001D4 0810A0E1 MOV R1,R8 \ 000001D8 1A0000EF SWI +26 2555 strcpy(s_txt, d_txt); \ 000001DC 0910A0E1 MOV R1,R9 \ 000001E0 0800A0E1 MOV R0,R8 \ 000001E4 1A0000EF SWI +26 2556 strcpy(d_txt, f_txt); \ 000001E8 0A10A0E1 MOV R1,R10 \ 000001EC 0900A0E1 MOV R0,R9 \ 000001F0 1A0000EF SWI +26 2557 strcpy(f_txt, g_txt); \ 000001F4 0B10A0E1 MOV R1,R11 \ 000001F8 0A00A0E1 MOV R0,R10 \ 000001FC 1A0000EF SWI +26 2558 sprintf(g_txt, "%s: %s", nameu,de); \ 00000200 0530A0E1 MOV R3,R5 \ 00000204 0420A0E1 MOV R2,R4 \ 00000208 0710A0E1 MOV R1,R7 \ 0000020C 0B00A0E1 MOV R0,R11 \ 00000210 160000EF SWI +22 2559 } 2560 mfree(de); \ ??AddToMain_12: \ 00000214 0500A0E1 MOV R0,R5 \ 00000218 150000EF SWI +21 2561 main_d=1; \ 0000021C 0100A0E3 MOV R0,#+1 \ 00000220 280286E5 STR R0,[R6, #+552] 2562 } \ 00000224 F18FBDE8 POP {R0,R4-R11,PC} ;; return \ ??AddToMain_0: \ 00000228 ........ DC32 main_lenght \ 0000022C ........ DC32 use_cutter \ 00000230 ........ DC32 `?` 2563 2564 //======================add to main info================ 2565 2566 int NEW_MSG; 2567 \ In segment CODE, align 4, keep-with-next 2568 void AddStringToLog(CLIST *t, int code, char *s, const char *name, unsigned int IDforACK,int flag) 2569 { \ 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 2570 char hs[128], *lastX; 2571 TTime tt; 2572 TDate d; 2573 GetDateTime(&d,&tt); \ 00000020 0D10A0E1 MOV R1,SP \ 00000024 08008DE2 ADD R0,SP,#+8 \ 00000028 B40000EF SWI +180 2574 int i; 2575 2576 // if(code == 3 && !LOG_XTXT) return; //Нl нуcно nоodrн?nь cennnrnуn 2577 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 2578 { 2579 #ifdef kluchnik 2580 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 2591 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 2592 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 2593 2594 LOGQ *p=NewLOGQ(s); \ ??AddStringToLog_5: \ 00000104 0800A0E1 MOV R0,R8 \ 00000108 ........ BL NewLOGQ \ 0000010C 0080A0E1 MOV R8,R0 2595 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 2596 p->type=code; \ 00000148 0C5088E5 STR R5,[R8, #+12] 2597 p->ID=IDforACK; //0-32767 \ 0000014C 087088E5 STR R7,[R8, #+8] 2598 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 2599 while(i>MAXLOGMSG) 2600 { 2601 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] 2602 RemoveLOGQ(&t->log,t->log); 2603 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 2604 } \ 00000194 060057E1 CMP R7,R6 \ 00000198 F5FFFF3A BCC ??AddStringToLog_7 2605 t->msg_count=i; \ ??AddStringToLog_6: \ 0000019C A46084E5 STR R6,[R4, #+164] 2606 if (!t->last_log) t->last_log=p; \ 000001A0 9C0094E5 LDR R0,[R4, #+156] 2607 if (code==3) \ 000001A4 ........ LDR R6,??DataTable108 ;; i_rc \ 000001A8 000050E3 CMP R0,#+0 \ 000001AC 9C808405 STREQ R8,[R4, #+156] \ 000001B0 030055E3 CMP R5,#+3 \ 000001B4 0D00001A BNE ??AddStringToLog_8 2608 { 2609 if (edchat_id) \ 000001B8 F80396E5 LDR R0,[R6, #+1016] \ 000001BC 000050E3 CMP R0,#+0 \ 000001C0 1C00000A BEQ ??AddStringToLog_9 2610 { 2611 void *data=FindGUIbyId(edchat_id,NULL); \ 000001C4 F80396E5 LDR R0,[R6, #+1016] \ 000001C8 0010A0E3 MOV R1,#+0 \ 000001CC 090200EF SWI +521 2612 if (data) \ 000001D0 000050E3 CMP R0,#+0 \ 000001D4 1700000A BEQ ??AddStringToLog_9 2613 { 2614 EDCHAT_STRUCT *ed_struct; 2615 ed_struct=EDIT_GetUserPointer(data); \ 000001D8 DF0100EF SWI +479 2616 if (ed_struct) \ 000001DC 000050E3 CMP R0,#+0 \ 000001E0 1400000A BEQ ??AddStringToLog_9 2617 { 2618 if (ed_struct->ed_contact==t) \ 000001E4 000090E5 LDR R0,[R0, #+0] \ 000001E8 040050E1 CMP R0,R4 \ 000001EC 1100001A BNE ??AddStringToLog_9 2619 { 2620 goto L_INC; 2621 } 2622 } 2623 } 2624 } 2625 goto L_NOINC; 2626 } 2627 L_INC: 2628 if (!t->isunread) total_unread++; \ ??AddStringToLog_8: \ 000001F0 840094E5 LDR R0,[R4, #+132] \ 000001F4 000050E3 CMP R0,#+0 \ 000001F8 EC039605 LDREQ R0,[R6, #+1004] \ 000001FC 01008002 ADDEQ R0,R0,#+1 \ 00000200 EC038605 STREQ R0,[R6, #+1004] 2629 if(NEW_MSG==1) \ 00000204 100496E5 LDR R0,[R6, #+1040] \ 00000208 010050E3 CMP R0,#+1 \ 0000020C 0700001A BNE ??AddStringToLog_10 2630 { 2631 t->unread_msg++; \ 00000210 880094E5 LDR R0,[R4, #+136] \ 00000214 010080E2 ADD R0,R0,#+1 \ 00000218 880084E5 STR R0,[R4, #+136] 2632 total_unread2++; \ 0000021C 580296E5 LDR R0,[R6, #+600] \ 00000220 010080E2 ADD R0,R0,#+1 \ 00000224 580286E5 STR R0,[R6, #+600] 2633 NEW_MSG=0; \ 00000228 0000A0E3 MOV R0,#+0 \ 0000022C 100486E5 STR R0,[R6, #+1040] 2634 } 2635 t->isunread=1; \ ??AddStringToLog_10: \ 00000230 0100A0E3 MOV R0,#+1 \ 00000234 840084E5 STR R0,[R4, #+132] 2636 L_NOINC: 2637 ChangeContactPos(t); \ ??AddStringToLog_9: \ 00000238 0400A0E1 MOV R0,R4 \ 0000023C ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2638 } \ ??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 2639 2640 void ParseAnswer(WSHDR *ws, const char *s); 2641 2642 int time_to_stop_t9; 2643 \ In segment CODE, align 4, keep-with-next 2644 void ParseXStatusText(WSHDR *ws, const char *s, int color) 2645 { \ ParseXStatusText: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 2646 int c; 2647 int flag=0; \ 00000010 0070A0E3 MOV R7,#+0 2648 CutWSTR(ws,0); \ 00000014 0010A0E3 MOV R1,#+0 \ 00000018 260100EF SWI +294 2649 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} 2650 wsAppendChar(ws,0xE008); \ 0000002C 0810A0E3 MOV R1,#+8 \ 00000030 E01C81E3 ORR R1,R1,#0xE000 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 1C0000EF SWI +28 2651 wsAppendChar(ws,color); \ 0000003C 0610A0E1 MOV R1,R6 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1C0000EF SWI +28 2652 wsAppendChar(ws,0xE013); \ 00000048 1310A0E3 MOV R1,#+19 \ 0000004C E01C81E3 ORR R1,R1,#0xE000 \ 00000050 0A0000EA B ??ParseXStatusText_0 2653 while((c=*s++)) 2654 { 2655 if (c==13) \ ??ParseXStatusText_1: \ 00000054 0D0050E3 CMP R0,#+13 2656 { 2657 if (!flag) \ 00000058 00005703 CMPEQ R7,#+0 \ 0000005C 0500001A BNE ??ParseXStatusText_2 2658 { 2659 flag=1; \ 00000060 0170A0E3 MOV R7,#+1 2660 wsAppendChar(ws,0xE012); \ 00000064 1210A0E3 MOV R1,#+18 \ 00000068 E01C81E3 ORR R1,R1,#0xE000 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 1C0000EF SWI +28 2661 c=' '; \ 00000074 2000A0E3 MOV R0,#+32 2662 } 2663 } 2664 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 2665 } \ 00000088 ........ LDRB R0,[R5], #+1 \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 EFFFFF1A BNE ??ParseXStatusText_1 \ 00000094 F080BDE8 POP {R4-R7,PC} ;; return 2666 } 2667 2668 //Добавление итемов в чат при получении нового сообщения \ In segment CODE, align 4, keep-with-next 2669 void AddMsgToChat(void *data) 2670 { \ AddMsgToChat: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 2671 LOGQ *p; 2672 EDITCONTROL ec; 2673 EDITC_OPTIONS ec_options; 2674 EDCHAT_STRUCT *ed_struct; 2675 int j; 2676 int color, font, type; 2677 int zc; 2678 if (!data) return; \ 00000008 000050E3 CMP R0,#+0 \ 0000000C C400000A BEQ ??AddMsgToChat_0 2679 ed_struct=EDIT_GetUserPointer(data); \ 00000010 DF0100EF SWI +479 \ 00000014 0040B0E1 MOVS R4,R0 2680 if (!ed_struct) return; \ 00000018 C100000A BEQ ??AddMsgToChat_0 2681 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 2682 2683 p=ed_struct->ed_contact->last_log; \ 0000002C 9C5090E5 LDR R5,[R0, #+156] 2684 if (p) \ 00000030 ........ LDR R6,??DataTable108 ;; i_rc \ 00000034 ........ LDR R7,??DataTable109 ;; O_ED_X_FONT_SIZE \ 00000038 ........ LDR R8,??DataTable110 ;; X_COLOR \ 0000003C ........ LDR R9,??DataTable111 ;; O_X_COLOR \ 00000040 000055E3 CMP R5,#+0 \ 00000044 A100000A BEQ ??AddMsgToChat_1 2685 { 2686 while(p) 2687 { 2688 font = ED_H_FONT_SIZE; \ ??AddMsgToChat_2: \ 00000048 ........ LDR R0,??DataTable132 ;; ED_H_FONT_SIZE 2689 if ((zc=p->acked&3)) \ 0000004C ........ LDR R1,??DataTable129 ;; 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 2690 { 2691 if (zc==1) \ 00000064 010050E3 CMP R0,#+1 \ 00000068 1E00001A BNE ??AddMsgToChat_4 2692 color=ACK_COLOR; //Зеленый \ 0000006C ........ LDR R0,??DataTable125 ;; ACK_COLOR \ 00000070 1B0000EA B ??AddMsgToChat_5 2693 else 2694 color=I_COLOR; 2695 } 2696 else 2697 { 2698 if (p->ID==0xFFFFFFFF) \ ??AddMsgToChat_3: \ 00000074 080095E5 LDR R0,[R5, #+8] \ 00000078 010070E3 CMN R0,#+1 \ 0000007C 1700001A BNE ??AddMsgToChat_6 2699 { 2700 type = p->type&0x0F; \ 00000080 0C0095E5 LDR R0,[R5, #+12] \ 00000084 0F1000E2 AND R1,R0,#0xF 2701 if(p->type&0x10) \ 00000088 100010E3 TST R0,#0x10 \ 0000008C 0B00000A BEQ ??AddMsgToChat_7 2702 { 2703 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 00000090 010051E3 CMP R1,#+1 \ 00000094 ........ LDREQ R0,??DataTable127 ;; 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,??DataTable126 ;; O_TO_COLOR \ ??AddMsgToChat_8: \ 000000B0 00B090E5 LDR R11,[R0, #+0] \ 000000B4 ........ LDR R0,??DataTable131 ;; O_ED_H_FONT_SIZE \ ??AddMsgToChat_9: \ 000000B8 00A090E5 LDR R10,[R0, #+0] \ 000000BC 090000EA B ??AddMsgToChat_4 2704 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 2705 } 2706 else 2707 { 2708 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,??DataTable123 ;; ED_X_FONT_SIZE \ 000000D4 F7FFFF0A BEQ ??AddMsgToChat_9 \ 000000D8 ........ LDR R0,??DataTable128 ;; TO_COLOR \ 000000DC 000000EA B ??AddMsgToChat_5 2709 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 2710 } 2711 } 2712 else 2713 color=UNACK_COLOR; //????? \ ??AddMsgToChat_6: \ 000000E0 ........ LDR R0,??DataTable130 ;; UNACK_COLOR \ ??AddMsgToChat_5: \ 000000E4 00B090E5 LDR R11,[R0, #+0] 2714 } 2715 PrepareEditControl(&ec); \ ??AddMsgToChat_4: \ 000000E8 10008DE2 ADD R0,SP,#+16 \ 000000EC 640100EF SWI +356 2716 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 2717 { 2718 ascii2ws(ews,p->hdr); \ 00000100 040396E5 LDR R0,[R6, #+772] \ 00000104 101085E2 ADD R1,R5,#+16 \ 00000108 ........ _BLF ascii2ws,??ascii2ws??rA 2719 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 0000010C 043396E5 LDR R3,[R6, #+772] \ 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 2720 } 2721 else 2722 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??AddMsgToChat_10: \ 00000124 0000A0E3 MOV R0,#+0 \ 00000128 01002DE9 PUSH {R0} \ 0000012C 043396E5 LDR R3,[R6, #+772] \ 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 2723 PrepareEditCOptions(&ec_options); \ 00000144 0D00A0E1 MOV R0,SP \ 00000148 C80100EF SWI +456 2724 SetPenColorToEditCOptions(&ec_options,color); \ 0000014C 0B10A0E1 MOV R1,R11 \ 00000150 0D00A0E1 MOV R0,SP \ 00000154 CC0100EF SWI +460 2725 SetFontToEditCOptions(&ec_options,font); \ 00000158 0A10A0E1 MOV R1,R10 \ 0000015C 0D00A0E1 MOV R0,SP \ 00000160 CA0100EF SWI +458 2726 CopyOptionsToEditControl(&ec,&ec_options); \ 00000164 0D10A0E1 MOV R1,SP \ 00000168 10008DE2 ADD R0,SP,#+16 \ 0000016C CE0100EF SWI +462 2727 //AddEditControlToEditQend(eq,&ec,ma); 2728 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 2729 ed_struct->ed_answer++; \ 00000184 080094E5 LDR R0,[R4, #+8] \ 00000188 010080E2 ADD R0,R0,#+1 \ 0000018C 080084E5 STR R0,[R4, #+8] 2730 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 2731 { 2732 ParseAnswer(ews,p->text); \ 000001A0 040396E5 LDR R0,[R6, #+772] \ 000001A4 601085E2 ADD R1,R5,#+96 \ 000001A8 ........ BL ParseAnswer \ 000001AC 050000EA B ??AddMsgToChat_13 2733 } 2734 else 2735 { 2736 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 040396E5 LDR R0,[R6, #+772] \ 000001BC 00209805 LDREQ R2,[R8, #+0] \ 000001C0 601085E2 ADD R1,R5,#+96 \ 000001C4 ........ BL ParseXStatusText 2737 } 2738 PrepareEditControl(&ec); \ ??AddMsgToChat_13: \ 000001C8 10008DE2 ADD R0,SP,#+16 \ 000001CC 640100EF SWI +356 2739 ConstructEditControl(&ec, 2740 ECT_NORMAL_TEXT, 2741 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 2742 ews,ews->wsbody[0]); \ 000001D0 043396E5 LDR R3,[R6, #+772] \ 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 2743 PrepareEditCOptions(&ec_options); \ 000001FC 04008DE2 ADD R0,SP,#+4 \ 00000200 C80100EF SWI +456 2744 //#ifdef M75 2745 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 2746 { 2747 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000218 100010E3 TST R0,#0x10 \ 0000021C ........ LDRNE R0,??DataTable121 ;; O_ED_FONT_SIZE \ 00000220 ........ LDREQ R0,??DataTable122 ;; ED_FONT_SIZE \ 00000224 001090E5 LDR R1,[R0, #+0] \ 00000228 090000EA B ??AddMsgToChat_15 2748 } 2749 else 2750 { 2751 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 2752 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,??DataTable123 ;; 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 2753 } 2754 //#else 2755 // SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 2756 //#endif 2757 CopyOptionsToEditControl(&ec,&ec_options); \ 0000025C 0D10A0E1 MOV R1,SP \ 00000260 10008DE2 ADD R0,SP,#+16 \ 00000264 CE0100EF SWI +462 2758 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 2759 ed_struct->ed_answer++; \ 0000027C 080094E5 LDR R0,[R4, #+8] \ 00000280 010080E2 ADD R0,R0,#+1 \ 00000284 080084E5 STR R0,[R4, #+8] 2760 p=p->next; \ 00000288 005095E5 LDR R5,[R5, #+0] 2761 } \ 0000028C 000055E3 CMP R5,#+0 \ 00000290 6CFFFF1A BNE ??AddMsgToChat_2 2762 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 2763 while(jed_answer) 2764 { 2765 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??AddMsgToChat_17: \ 000002AC 040094E5 LDR R0,[R4, #+4] \ 000002B0 0110A0E3 MOV R1,#+1 \ 000002B4 D10100EF SWI +465 2766 ed_struct->ed_answer--; \ 000002B8 080094E5 LDR R0,[R4, #+8] \ 000002BC 010040E2 SUB R0,R0,#+1 \ 000002C0 080084E5 STR R0,[R4, #+8] 2767 } \ 000002C4 000055E1 CMP R5,R0 \ 000002C8 F7FFFFBA BLT ??AddMsgToChat_17 2768 } 2769 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] 2770 if (IsGuiOnTop(edchat_id)) \ 000002D8 F80396E5 LDR R0,[R6, #+1016] \ 000002DC 350100EF SWI +309 \ 000002E0 000050E3 CMP R0,#+0 \ 000002E4 0300000A BEQ ??AddMsgToChat_18 2771 { 2772 total_unread--; \ 000002E8 EC0396E5 LDR R0,[R6, #+1004] \ 000002EC 010040E2 SUB R0,R0,#+1 \ 000002F0 EC0386E5 STR R0,[R6, #+1004] \ 000002F4 020000EA B ??AddMsgToChat_19 2773 } 2774 else 2775 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] 2776 ed_struct->ed_contact->isunread=0; \ ??AddMsgToChat_19: \ 00000304 000094E5 LDR R0,[R4, #+0] \ 00000308 845080E5 STR R5,[R0, #+132] 2777 total_unread2=total_unread2-ed_struct->ed_contact->unread_msg; \ 0000030C 581296E5 LDR R1,[R6, #+600] \ 00000310 882090E5 LDR R2,[R0, #+136] \ 00000314 021041E0 SUB R1,R1,R2 \ 00000318 581286E5 STR R1,[R6, #+600] 2778 ed_struct->ed_contact->unread_msg=0; \ 0000031C 885080E5 STR R5,[R0, #+136] 2779 ChangeContactPos(ed_struct->ed_contact); \ 00000320 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2780 // EDIT_SetFocus(data,ed_struct->ed_answer); 2781 } \ ??AddMsgToChat_0: \ 00000324 40D08DE2 ADD SP,SP,#+64 ;; stack cleaning \ 00000328 F08FBDE8 POP {R4-R11,PC} ;; return 2782 2783 //Рисуем подтверждения непосредственно \ In segment CODE, align 4, keep-with-next 2784 void DrawAck(void *data) 2785 { \ DrawAck: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 2786 LOGQ *p; 2787 EDITCONTROL ec; 2788 EDITC_OPTIONS ec_options; 2789 EDCHAT_STRUCT *ed_struct; 2790 int j; 2791 int color; 2792 int dorefresh=0; \ 0000000C 0060A0E3 MOV R6,#+0 2793 if (!data) return; \ 00000010 4C00000A BEQ ??DrawAck_0 2794 ed_struct=EDIT_GetUserPointer(data); \ 00000014 DF0100EF SWI +479 2795 if (!ed_struct) return; \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 4900000A BEQ ??DrawAck_0 2796 p=ed_struct->ed_contact->log; \ 00000020 001090E5 LDR R1,[R0, #+0] 2797 j=ed_struct->ed_answer; 2798 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 2799 while(p) 2800 { 2801 if (j>=1) //Пока возможно лишнее \ ??DrawAck_2: \ 00000040 010057E3 CMP R7,#+1 \ 00000044 340000BA BLT ??DrawAck_3 2802 { 2803 if (!(p->acked&4)) \ 00000048 040095E5 LDR R0,[R5, #+4] \ 0000004C 040010E3 TST R0,#0x4 \ 00000050 3100001A BNE ??DrawAck_3 2804 { 2805 ExtractEditControl(data,j,&ec); \ 00000054 10208DE2 ADD R2,SP,#+16 \ 00000058 0710A0E1 MOV R1,R7 \ 0000005C 0400A0E1 MOV R0,R4 \ 00000060 690100EF SWI +361 2806 PrepareEditCOptions(&ec_options); \ 00000064 0D00A0E1 MOV R0,SP \ 00000068 C80100EF SWI +456 2807 if (p->acked) \ 0000006C 040095E5 LDR R0,[R5, #+4] \ 00000070 000050E3 CMP R0,#+0 \ 00000074 0300000A BEQ ??DrawAck_4 2808 { 2809 if (p->acked==1) \ 00000078 010050E3 CMP R0,#+1 \ 0000007C ........ LDRNE R0,??DataTable129 ;; I_COLOR 2810 color=ACK_COLOR; //Зеленый \ 00000080 ........ LDREQ R0,??DataTable125 ;; ACK_COLOR \ 00000084 0F0000EA B ??DrawAck_5 2811 else 2812 color=I_COLOR; 2813 } 2814 else 2815 { 2816 if (p->ID==0xFFFFFFFF) \ ??DrawAck_4: \ 00000088 080095E5 LDR R0,[R5, #+8] \ 0000008C 010070E3 CMN R0,#+1 \ 00000090 0B00001A BNE ??DrawAck_6 2817 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,??DataTable126 ;; O_TO_COLOR \ 000000AC ........ LDREQ R0,??DataTable127 ;; O_I_COLOR \ 000000B0 040000EA B ??DrawAck_5 \ ??DrawAck_7: \ 000000B4 010050E3 CMP R0,#+1 \ 000000B8 ........ LDRNE R0,??DataTable128 ;; TO_COLOR \ 000000BC ........ LDREQ R0,??DataTable129 ;; I_COLOR \ 000000C0 000000EA B ??DrawAck_5 2818 else 2819 color=UNACK_COLOR; //Серый \ ??DrawAck_6: \ 000000C4 ........ LDR R0,??DataTable130 ;; UNACK_COLOR 2820 } 2821 SetPenColorToEditCOptions(&ec_options,color/*p->type==1?I_COLOR:TO_COLOR*/); 2822 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_H_FONT_SIZE:ED_H_FONT_SIZE); 2823 CopyOptionsToEditControl(&ec,&ec_options); 2824 StoreEditControl(data,j,&ec); 2825 p->acked|=4; //Обработали 2826 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,??DataTable131 ;; O_ED_H_FONT_SIZE \ 000000E4 ........ LDREQ R0,??DataTable132 ;; 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] 2827 } 2828 } 2829 j+=2; 2830 p=p->next; \ ??DrawAck_3: \ 0000011C 005095E5 LDR R5,[R5, #+0] \ 00000120 027087E2 ADD R7,R7,#+2 2831 } \ 00000124 000055E3 CMP R5,#+0 \ 00000128 C4FFFF1A BNE ??DrawAck_2 2832 if (IsGuiOnTop(edchat_id)&&dorefresh) RefreshGUI(); \ ??DrawAck_1: \ 0000012C 1C009FE5 LDR R0,??DrawAck_8 ;; i_rc + 1016 \ 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 + 1016 2833 } 2834 \ In segment CODE, align 4, keep-with-next 2835 void ask_my_info(void) 2836 { 2837 /* TPKT *p; 2838 CLIST *t; 2839 p=malloc(sizeof(PKT)); 2840 p->pkt.uin=UIN; 2841 p->pkt.type=T_REQINFOSHORT; 2842 p->pkt.data_len=0; 2843 // AddStringToLog(t,0x01,"Request info...",I_str); 2844 SUBPROC((void *)SendAnswer,0,p);*/ 2845 } \ ask_my_info: \ 00000000 1EFF2FE1 BX LR ;; return 2846 \ In segment CODE, align 4, keep-with-next 2847 void set_my_status(void) 2848 { \ set_my_status: \ 00000000 00402DE9 PUSH {LR} 2849 TPKT *p; 2850 p=malloc(sizeof(PKT)+1); \ 00000004 0900A0E3 MOV R0,#+9 \ 00000008 140000EF SWI +20 2851 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 001080E5 STR R1,[R0, #+0] 2852 p->pkt.type=T_MY_STATUS_CH; // Тип пакета: изменение статуса \ 00000014 0F10A0E3 MOV R1,#+15 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2853 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000001C 0110A0E3 MOV R1,#+1 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2854 p->data[0]=CurrentStatus; \ 00000024 18109FE5 LDR R1,??set_my_status_0 ;; i_rc + 764 2855 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,??DataTable146 ;; SendAnswer \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 710100EF SWI +369 2856 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??set_my_status_0: \ 00000044 ........ DC32 i_rc + 764 2857 2858 extern int Send0; 2859 \ In segment CODE, align 4, keep-with-next 2860 void set_my_xstatus(void) 2861 { \ set_my_xstatus: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 2862 #ifdef NEWSGOLD 2863 if(Is_Id3tag_Enabled) \ 00000004 ........ LDR R7,??DataTable145 ;; i_rc \ 00000008 ........ LDR R4,??DataTable146 ;; SendAnswer \ 0000000C 0CD04DE2 SUB SP,SP,#+12 \ 00000010 700297E5 LDR R0,[R7, #+624] \ 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 2864 { 2865 if(CurrentXStatus!=11 || !Is_ID3_ANY_STATUS) \ 0000002C 000397E5 LDR R0,[R7, #+768] \ 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 2866 { 2867 #endif 2868 TPKT *p; 2869 char *s1; 2870 char *s2; 2871 int l1; 2872 int l2; 2873 p=malloc(sizeof(PKT)+1); \ ??set_my_xstatus_1: \ 00000048 0900A0E3 MOV R0,#+9 \ 0000004C 140000EF SWI +20 \ 00000050 0080A0E1 MOV R8,R0 2874 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 00000054 006088E5 STR R6,[R8, #+0] 2875 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 00000058 B4A0C8E1 STRH R10,[R8, #+4] 2876 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000005C B690C8E1 STRH R9,[R8, #+6] 2877 p->data[0]=CurrentXStatus; \ 00000060 000397E5 LDR R0,[R7, #+768] 2878 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 2879 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 00000078 000397E5 LDR R0,[R7, #+768] \ 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 2880 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000090 000397E5 LDR R0,[R7, #+768] \ 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 2881 if ((!s1)||(!s2)) return; \ 000000A8 000059E3 CMP R9,#+0 \ 000000AC 00005713 CMPNE R7,#+0 \ 000000B0 F787BD08 POPEQ {R0-R2,R4-R10,PC} 2882 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 2883 p->pkt.uin=0; \ 000000CC 006088E5 STR R6,[R8, #+0] 2884 p->pkt.type=T_XTEXT_SET; \ 000000D0 B450C8E1 STRH R5,[R8, #+4] 2885 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] 2886 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 2887 p->data[l1]=0; \ 000000F8 00009DE5 LDR R0,[SP, #+0] 2888 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 2889 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} 2890 #ifdef NEWSGOLD 2891 } 2892 else 2893 { 2894 tracktimer=0; 2895 GetTags(); 2896 } 2897 } 2898 else 2899 { 2900 TPKT *p; 2901 char *s1; 2902 char *s2; 2903 int l1; 2904 int l2; 2905 p=malloc(sizeof(PKT)+1); \ ??set_my_xstatus_0: \ 00000130 0900A0E3 MOV R0,#+9 \ 00000134 140000EF SWI +20 \ 00000138 0080A0E1 MOV R8,R0 2906 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000013C 006088E5 STR R6,[R8, #+0] 2907 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 00000140 B4A0C8E1 STRH R10,[R8, #+4] 2908 p->pkt.data_len=1; // Длина пакета: 1 байт \ 00000144 B690C8E1 STRH R9,[R8, #+6] 2909 p->data[0]=CurrentXStatus; \ 00000148 000397E5 LDR R0,[R7, #+768] 2910 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 2911 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 00000160 000397E5 LDR R0,[R7, #+768] \ 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 2912 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000178 000397E5 LDR R0,[R7, #+768] \ 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 2913 if ((!s1)||(!s2)) return; \ 00000190 000059E3 CMP R9,#+0 \ 00000194 00005A13 CMPNE R10,#+0 \ 00000198 F787BD08 POPEQ {R0-R2,R4-R10,PC} 2914 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 2915 p->pkt.uin=0; \ 000001B4 006088E5 STR R6,[R8, #+0] 2916 p->pkt.type=T_XTEXT_SET; \ 000001B8 B450C8E1 STRH R5,[R8, #+4] 2917 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] 2918 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 2919 p->data[l1]=0; \ 000001E0 00009DE5 LDR R0,[SP, #+0] 2920 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 2921 SUBPROC((void *)SendAnswer,0,p); \ 00000204 0820A0E1 MOV R2,R8 \ 00000208 0010A0E3 MOV R1,#+0 \ 0000020C 0400A0E1 MOV R0,R4 \ 00000210 710100EF SWI +369 2922 tracktimer=0; \ ??set_my_xstatus_3: \ 00000214 246387E5 STR R6,[R7, #+804] 2923 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 2924 } 2925 #endif 2926 } 2927 2928 #ifdef NEWSGOLD 2929 \ In segment CODE, align 4, keep-with-next 2930 void set_my_xstatus2(void) 2931 { \ set_my_xstatus2: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 2932 TPKT *p; 2933 // char *s1; 2934 // char *s2; 2935 int l1; 2936 int l2; 2937 p=malloc(sizeof(PKT)+1); 2938 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 2939 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 2940 p->pkt.data_len=1; // Длина пакета: 1 байт 2941 p->data[0]=11; 2942 SUBPROC((void *)SendAnswer,0,p); \ 00000004 ........ LDR R6,??DataTable146 ;; SendAnswer 2943 // char *s1; 2944 char *sk2=malloc(256); 2945 // strcpy(s1, playing); 2946 // s1="Now playing:"; 2947 strcpy(sk2,teast2); 2948 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 2949 l2=strlen(sk2); \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 1B0000EF SWI +27 \ 00000074 00A0A0E1 MOV R10,R0 2950 if ((!playing)||(!sk2)) return; \ 00000078 000057E3 CMP R7,#+0 \ 0000007C F187BD08 POPEQ {R0,R4-R10,PC} 2951 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 2952 p->pkt.uin=0; \ 00000090 005084E5 STR R5,[R4, #+0] 2953 p->pkt.type=T_XTEXT_SET; \ 00000094 1A00A0E3 MOV R0,#+26 \ 00000098 B400C4E1 STRH R0,[R4, #+4] 2954 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] 2955 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 2956 p->data[l1]=0; \ 000000B8 040089E0 ADD R0,R9,R4 \ 000000BC 0850C0E5 STRB R5,[R0, #+8] 2957 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 2958 mfree(sk2); \ 000000D0 0700A0E1 MOV R0,R7 \ 000000D4 150000EF SWI +21 2959 SUBPROC((void *)SendAnswer,0,p); \ 000000D8 0420A0E1 MOV R2,R4 \ 000000DC 0010A0E3 MOV R1,#+0 \ 000000E0 0600A0E1 MOV R0,R6 \ 000000E4 710100EF SWI +369 2960 // mfree(s1); 2961 // mfree(s2); 2962 } \ 000000E8 F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??set_my_xstatus2_0: \ 000000EC ........ DC32 playing \ 000000F0 ........ DC32 teast2 2963 #endif \ In segment CODE, align 4, keep-with-next 2964 void to_develop(void) 2965 { 2966 if (silenthide) return; \ to_develop: \ 00000000 ........ LDR R0,??DataTable145 ;; i_rc \ 00000004 00402DE9 PUSH {LR} \ 00000008 B81390E5 LDR R1,[R0, #+952] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD18 POPNE {PC} 2967 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable138 ;; Canvas 2968 gipc.name_from=ipc_my_name; 2969 gipc.data=(void *)maincsm_id; 2970 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 00000018 8C3080E2 ADD R3,R0,#+140 \ 0000001C DE2F81E2 ADD R2,R1,#+888 \ 00000020 D61F81E2 ADD R1,R1,#+856 \ 00000024 901080E5 STR R1,[R0, #+144] \ 00000028 5C1290E5 LDR R1,[R0, #+604] \ 0000002C 8C2080E5 STR R2,[R0, #+140] \ 00000030 941080E5 STR R1,[R0, #+148] \ 00000034 0220A0E3 MOV R2,#+2 \ 00000038 B010A0E3 MOV R1,#+176 \ 0000003C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000040 0900A0E3 MOV R0,#+9 \ 00000044 420C80E3 ORR R0,R0,#0x4200 \ 00000048 000100EF SWI +256 2971 } \ 0000004C 0080BDE8 POP {PC} ;; return 2972 \ In segment CODE, align 4, keep-with-next 2973 void ReqAddMsgToChat(CLIST *t) 2974 { \ ReqAddMsgToChat: \ 00000000 70402DE9 PUSH {R4-R6,LR} 2975 if (edchat_id) \ 00000004 ........ LDR R5,??DataTable145 ;; i_rc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C F80395E5 LDR R0,[R5, #+1016] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 7080BD08 POPEQ {R4-R6,PC} 2976 { 2977 void *data=FindGUIbyId(edchat_id,NULL); \ 00000018 F80395E5 LDR R0,[R5, #+1016] \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 090200EF SWI +521 \ 00000024 0060A0E1 MOV R6,R0 2978 { 2979 EDCHAT_STRUCT *ed_struct; 2980 ed_struct=EDIT_GetUserPointer(data); \ 00000028 DF0100EF SWI +479 2981 if (ed_struct) \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 7080BD08 POPEQ {R4-R6,PC} 2982 { 2983 if (ed_struct->ed_contact==t) \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 040050E1 CMP R0,R4 \ 0000003C 7080BD18 POPNE {R4-R6,PC} 2984 { 2985 if (EDIT_IsBusy(data)) \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 1C0200EF SWI +540 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0400000A BEQ ??ReqAddMsgToChat_0 2986 { 2987 t->req_add=1; \ 00000050 0100A0E3 MOV R0,#+1 \ 00000054 8C0084E5 STR R0,[R4, #+140] 2988 #ifdef EVILFOX 2989 time_to_stop_t9=2; 2990 #else 2991 time_to_stop_t9=3; \ 00000058 0300A0E3 MOV R0,#+3 \ 0000005C 140485E5 STR R0,[R5, #+1044] \ 00000060 7080BDE8 POP {R4-R6,PC} 2992 #endif 2993 } 2994 else 2995 { 2996 AddMsgToChat(data); \ ??ReqAddMsgToChat_0: \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 ........ BL AddMsgToChat 2997 DirectRedrawGUI_ID(edchat_id); \ 0000006C F80395E5 LDR R0,[R5, #+1016] \ 00000070 400100EF SWI +320 2998 } 2999 } 3000 } 3001 } 3002 } 3003 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 3004 3005 GBSTMR develop; 3006 \ In segment CODE, align 4, keep-with-next 3007 void begin_to_develop() 3008 { \ begin_to_develop: \ 00000000 00402DE9 PUSH {LR} 3009 if(IsUnlocked()) \ 00000004 430000EF SWI +67 \ 00000008 000050E3 CMP R0,#+0 \ 0000000C 0100000A BEQ ??begin_to_develop_0 3010 to_develop(); \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ B to_develop ;; tailcall 3011 else 3012 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 + 8324 \ 00000020 6410A0E3 MOV R1,#+100 \ 00000024 4D0000EF SWI +77 3013 } \ 00000028 0080BDE8 POP {PC} ;; return \ ??begin_to_develop_1: \ 0000002C ........ DC32 begin_to_develop \ 00000030 ........ DC32 i_rc + 8324 3014 3015 3016 3017 //----------------------------- LOAD COMMANDS -----------------------------// 3018 //Templates 3019 char *cmd_chars; //Собственно файл 3020 char **cmd_lines; //Массив указателей на строки 3021 \ In segment CODE, align 4, keep-with-next 3022 void cmdFree(void) 3023 { \ cmdFree: \ 00000000 10402DE9 PUSH {R4,LR} 3024 if (cmd_lines) mfree(cmd_lines); \ 00000004 ........ LDR R4,??DataTable142 ;; cmd_chars \ 00000008 040094E5 LDR R0,[R4, #+4] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0000000A BEQ ??cmdFree_0 \ 00000014 150000EF SWI +21 3025 if (cmd_chars) mfree(cmd_chars); \ ??cmdFree_0: \ 00000018 000094E5 LDR R0,[R4, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0100000A BEQ ??cmdFree_1 \ 00000024 150000EF SWI +21 3026 cmd_lines=NULL; \ 00000028 0000A0E3 MOV R0,#+0 \ ??cmdFree_1: \ 0000002C 040084E5 STR R0,[R4, #+4] 3027 cmd_chars=NULL; \ 00000030 000084E5 STR R0,[R4, #+0] 3028 } \ 00000034 1080BDE8 POP {R4,PC} ;; return 3029 \ In segment CODE, align 4, keep-with-next 3030 int LoadCmd() 3031 { \ LoadCmd: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 4BDF4DE2 SUB SP,SP,#+300 3032 FSTATS stat; 3033 char fn[256]; 3034 int f; 3035 unsigned int ul; 3036 int i; 3037 int fsize; 3038 char *p; 3039 char *pp; 3040 int c; 3041 cmdFree(); \ 00000008 ........ BL cmdFree 3042 strcpy(fn,TEMPLATES_PATH); \ 0000000C ........ LDR R1,??DataTable141 ;; TEMPLATES_PATH \ 00000010 04008DE2 ADD R0,SP,#+4 \ 00000014 1A0000EF SWI +26 3043 i=strlen(fn); \ 00000018 04008DE2 ADD R0,SP,#+4 \ 0000001C 1B0000EF SWI +27 3044 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 3045 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 3046 fsize=stat.size; \ 00000044 08719DE5 LDR R7,[SP, #+264] 3047 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 3048 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 3049 p=cmd_chars=malloc(fsize+1); \ ??LoadCmd_1: \ 00000074 ........ LDR R4,??DataTable142 ;; cmd_chars \ 00000078 010087E2 ADD R0,R7,#+1 \ 0000007C 140000EF SWI +20 \ 00000080 000084E5 STR R0,[R4, #+0] \ 00000084 0060A0E1 MOV R6,R0 3050 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] 3051 fclose(f,&ul); \ 000000A4 0D10A0E1 MOV R1,SP \ 000000A8 0800A0E1 MOV R0,R8 \ 000000AC 0D0000EF SWI +13 3052 i=0; \ 000000B0 0070A0E3 MOV R7,#+0 3053 pp=p; \ 000000B4 0680A0E1 MOV R8,R6 \ 000000B8 020000EA B ??LoadCmd_3 3054 for(;;) 3055 { 3056 c=*p; 3057 if (c<32) 3058 { 3059 if (pp&&(pp!=p)) 3060 { 3061 cmd_lines=realloc(cmd_lines,(i+1)*sizeof(char *)); 3062 cmd_lines[i++]=pp; 3063 } 3064 pp=NULL; 3065 if (!c) break; 3066 *p=0; 3067 } 3068 else 3069 { 3070 if (pp==NULL) pp=p; \ ??LoadCmd_4: \ 000000BC 000058E3 CMP R8,#+0 \ 000000C0 0680A001 MOVEQ R8,R6 3071 } 3072 p++; \ ??LoadCmd_5: \ 000000C4 016086E2 ADD R6,R6,#+1 \ ??LoadCmd_3: \ 000000C8 0090D6E5 LDRB R9,[R6, #+0] \ 000000CC 200059E3 CMP R9,#+32 \ 000000D0 F9FFFFAA BGE ??LoadCmd_4 \ 000000D4 000058E3 CMP R8,#+0 \ 000000D8 06005811 CMPNE R8,R6 \ 000000DC 0600000A BEQ ??LoadCmd_6 \ 000000E0 040094E5 LDR R0,[R4, #+4] \ 000000E4 01A087E2 ADD R10,R7,#+1 \ 000000E8 0A11A0E1 LSL R1,R10,#+2 \ 000000EC BA0000EF SWI +186 \ 000000F0 040084E5 STR R0,[R4, #+4] \ 000000F4 078180E7 STR R8,[R0, +R7, LSL #+2] \ 000000F8 0A70A0E1 MOV R7,R10 \ ??LoadCmd_6: \ 000000FC 0080A0E3 MOV R8,#+0 \ 00000100 000059E3 CMP R9,#+0 3073 } 3074 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 `?` 3075 } 3076 3077 int NumOfItems=0; 3078 HEADER_DESC CmdMenuHeader={NULL,NULL,NULL,NULL,NULL,NULL,LGP_NULL}; 3079 \ In segment CODE, align 4, keep-with-next 3080 void CmdMenuItemHandler(void *data, int curitem, void *unk) 3081 { \ CmdMenuItemHandler: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 3082 void *item=AllocMenuItem(data); \ 0000000C 970100EF SWI +407 \ 00000010 0060A0E1 MOV R6,R0 3083 char *p=cmd_lines[curitem]; \ 00000014 ........ LDR R0,??DataTable144 ;; cmd_chars + 4 \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 057190E7 LDR R7,[R0, +R5, LSL #+2] 3084 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 3085 ascii2ws(ws,p); \ 00000038 0710A0E1 MOV R1,R7 \ 0000003C ........ _BLF ascii2ws,??ascii2ws??rA 3086 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 3087 } \ 00000054 F081BDE8 POP {R4-R8,PC} ;; return 3088 \ In segment CODE, align 4, keep-with-next 3089 void CmdMenuGHook(void *data, int cmd) 3090 { \ CmdMenuGHook: \ 00000000 00402DE9 PUSH {LR} 3091 if (cmd==TI_CMD_FOCUS) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0100001A BNE ??CmdMenuGHook_0 3092 { 3093 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 \ 00000010 0080BDE8 POP {PC} 3094 } 3095 if (cmd==TI_CMD_DESTROY) \ ??CmdMenuGHook_0: \ 00000014 030051E3 CMP R1,#+3 \ 00000018 0080BD18 POPNE {PC} 3096 { 3097 cmdFree(); \ 0000001C 0040BDE8 POP {LR} ;; Pop \ 00000020 ........ B cmdFree ;; tailcall 3098 } 3099 } 3100 \ In segment CODE, align 4, keep-with-next 3101 static int CmdMenuKeyHook(void *data, GUI_MSG *msg) 3102 { \ CmdMenuKeyHook: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0160A0E1 MOV R6,R1 3103 int Selected=GetCurMenuItem(data); \ 0000000C 8F0100EF SWI +399 \ 00000010 0050A0E1 MOV R5,R0 3104 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000014 0400A0E1 MOV R0,R4 \ 00000018 E00100EF SWI +480 \ 0000001C 0040A0E1 MOV R4,R0 3105 if ((msg->keys==0x18)||(msg->keys==0x3D)) \ 00000020 F200D6E1 LDRSH R0,[R6, #+2] \ 00000024 180050E3 CMP R0,#+24 \ 00000028 3D005013 CMPNE R0,#+61 \ 0000002C 1800001A BNE ??CmdMenuKeyHook_0 3106 { 3107 if (NumOfItems) \ 00000030 64009FE5 LDR R0,??CmdMenuKeyHook_1 ;; CmdMenuHeader + 20 \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 7080BD08 POPEQ {R4-R6,PC} 3108 { 3109 const char *p=cmd_lines[Selected]; \ 00000040 ........ LDR R0,??DataTable144 ;; cmd_chars + 4 \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 055190E7 LDR R5,[R0, +R5, LSL #+2] 3110 WSHDR *ws; 3111 ws=AllocWS(256); \ 0000004C 400FA0E3 MOV R0,#+256 \ 00000050 250100EF SWI +293 \ 00000054 0060A0E1 MOV R6,R0 3112 // wsprintf(ws,percent_t,p); 3113 ascii2ws(ws,p); \ 00000058 0510A0E1 MOV R1,R5 \ 0000005C ........ _BLF ascii2ws,??ascii2ws??rA 3114 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ws); \ 00000060 040094E5 LDR R0,[R4, #+4] \ 00000064 081094E5 LDR R1,[R4, #+8] \ 00000068 0620A0E1 MOV R2,R6 \ 0000006C DE0100EF SWI +478 3115 EDIT_SetCursorPos(ed_struct->ed_chatgui,wstrlen(ws)+1); \ 00000070 0600A0E1 MOV R0,R6 \ 00000074 230100EF SWI +291 \ 00000078 011080E2 ADD R1,R0,#+1 \ 0000007C 040094E5 LDR R0,[R4, #+4] \ 00000080 D40100EF SWI +468 3116 FreeWS(ws); \ 00000084 0600A0E1 MOV R0,R6 \ 00000088 290100EF SWI +297 3117 return(1); \ 0000008C 0100A0E3 MOV R0,#+1 \ 00000090 7080BDE8 POP {R4-R6,PC} 3118 } 3119 } 3120 return(0); \ ??CmdMenuKeyHook_0: \ 00000094 0000A0E3 MOV R0,#+0 \ 00000098 7080BDE8 POP {R4-R6,PC} ;; return \ ??CmdMenuKeyHook_1: \ 0000009C ........ DC32 CmdMenuHeader + 20 3121 } 3122 3123 const int CmdSoftkeys[]={0,1,2}; 3124 3125 const SOFTKEY_DESC cmd_sk[]= 3126 { 3127 {0x0004,0x0000,(int)""}, 3128 {0x0001,0x0000,(int)LG_CLOSE}, 3129 {0x003D,0x0000,(int)LGP_DOIT_PIC} 3130 }; 3131 const SOFTKEYSTAB cmd_Back_skt= 3132 { 3133 cmd_sk,0 3134 }; 3135 static const MENU_DESC CmdMenuStruct= 3136 { 3137 8,CmdMenuKeyHook,CmdMenuGHook,NULL, 3138 CmdSoftkeys, 3139 &cmd_Back_skt, 3140 0x10, 3141 CmdMenuItemHandler, 3142 NULL, //menuitems, 3143 NULL, //menuprocs, 3144 NULL 3145 }; 3146 \ In segment CODE, align 4, keep-with-next 3147 int DispCmdMenu(void *ed_gui) 3148 { \ DispCmdMenu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 3149 NumOfItems=LoadCmd(); \ 00000004 80409FE5 LDR R4,??DispCmdMenu_0 ;; CmdMenuHeader 3150 if(NumOfItems) \ 00000008 80509FE5 LDR R5,??DispCmdMenu_0+0x4 ;; `?` \ 0000000C 0060A0E1 MOV R6,R0 \ 00000010 ........ BL LoadCmd \ 00000014 140084E5 STR R0,[R4, #+20] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 1500000A BEQ ??DispCmdMenu_1 3151 { 3152 *((int *)(&CmdMenuHeader.lgp_id))=(int)"Select command"; \ 00000020 0C5084E5 STR R5,[R4, #+12] 3153 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] 3154 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 140094E5 LDR R0,[R4, #+20] \ 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} 3155 } 3156 MsgBoxError(1, (int)"FILE NOT FOUND!"); \ ??DispCmdMenu_1: \ 00000078 101085E2 ADD R1,R5,#+16 \ 0000007C 0100A0E3 MOV R0,#+1 \ 00000080 4E0000EF SWI +78 3157 return(0); \ 00000084 0000A0E3 MOV R0,#+0 \ 00000088 7080BDE8 POP {R4-R6,PC} ;; return \ ??DispCmdMenu_0: \ 0000008C ........ DC32 CmdMenuHeader \ 00000090 ........ DC32 `?` 3158 } 3159 /* 3160 char *GetStatusByIconIndex(int icon) 3161 { 3162 char *stat=malloc(32); 3163 switch(icon) 3164 { 3165 case IS_OFFLINE : sprintf(stat,"Offline"); break; 3166 case IS_INVISIBLE : sprintf(stat,"Invisable"); break; 3167 case IS_AWAY : sprintf(stat,"Away"); break; 3168 case IS_NA : sprintf(stat,"N/A"); break; 3169 case IS_OCCUPIED: sprintf(stat,"Occupied"); break; 3170 case IS_DND : sprintf(stat,"DND"); break; 3171 case IS_DEPRESSION : sprintf(stat,"Depression"); break; 3172 case IS_EVIL : sprintf(stat,"Evil"); break; 3173 case IS_HOME : sprintf(stat,"Home"); break; 3174 case IS_LUNCH : sprintf(stat,"Lunch"); break; 3175 case IS_WORK : sprintf(stat,"Work"); break; 3176 case IS_ONLINE : sprintf(stat,"Online"); break; 3177 case IS_FFC : sprintf(stat,"FFC"); break; 3178 default : sprintf(stat,"Error status"); break; 3179 } 3180 return stat; 3181 } 3182 */ 3183 \ In segment CODE, align 4, keep-with-next 3184 char *GetStatusByIconIndex(int icon) 3185 { \ GetStatusByIconIndex: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 3186 char *stat=malloc(32); \ 00000008 2000A0E3 MOV R0,#+32 \ 0000000C 140000EF SWI +20 3187 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 3188 { 3189 case IS_OFFLINE : sprintf(stat,"Отключен"); break; 3190 case IS_INVISIBLE : sprintf(stat,"Невидимый"); break; \ ??GetStatusByIconIndex_3: \ 0000003C 0C1081E2 ADD R1,R1,#+12 \ 00000040 140000EA B ??GetStatusByIconIndex_4 3191 case IS_AWAY : sprintf(stat,"Отсутсвует"); break; \ ??GetStatusByIconIndex_5: \ 00000044 181081E2 ADD R1,R1,#+24 \ 00000048 120000EA B ??GetStatusByIconIndex_4 3192 case IS_NA : sprintf(stat,"Не доступен"); break; \ ??GetStatusByIconIndex_6: \ 0000004C 241081E2 ADD R1,R1,#+36 \ 00000050 100000EA B ??GetStatusByIconIndex_4 3193 case IS_OCCUPIED: sprintf(stat,"Занят"); break; \ ??GetStatusByIconIndex_7: \ 00000054 301081E2 ADD R1,R1,#+48 \ 00000058 0E0000EA B ??GetStatusByIconIndex_4 3194 case IS_DND : sprintf(stat,"Не беспокоить");break; \ ??GetStatusByIconIndex_8: \ 0000005C 381081E2 ADD R1,R1,#+56 \ 00000060 0C0000EA B ??GetStatusByIconIndex_4 3195 case IS_DEPRESSION : sprintf(stat,"Депрессия"); break; \ ??GetStatusByIconIndex_9: \ 00000064 481081E2 ADD R1,R1,#+72 \ 00000068 0A0000EA B ??GetStatusByIconIndex_4 3196 case IS_EVIL : sprintf(stat,"Злой"); break; \ ??GetStatusByIconIndex_10: \ 0000006C 541081E2 ADD R1,R1,#+84 \ 00000070 080000EA B ??GetStatusByIconIndex_4 3197 case IS_HOME : sprintf(stat,"Дома"); break; \ ??GetStatusByIconIndex_11: \ 00000074 5C1081E2 ADD R1,R1,#+92 \ 00000078 060000EA B ??GetStatusByIconIndex_4 3198 case IS_LUNCH : sprintf(stat,"Жру"); break; \ ??GetStatusByIconIndex_12: \ 0000007C 091F8FE2 ADR R1,??GetStatusByIconIndex_1 ;; "Жру" \ 00000080 040000EA B ??GetStatusByIconIndex_4 3199 case IS_WORK : sprintf(stat,"Работа"); break; \ ??GetStatusByIconIndex_13: \ 00000084 641081E2 ADD R1,R1,#+100 \ 00000088 020000EA B ??GetStatusByIconIndex_4 3200 case IS_ONLINE : sprintf(stat,"В сети"); break; \ ??GetStatusByIconIndex_2: \ 0000008C 6C1081E2 ADD R1,R1,#+108 \ 00000090 000000EA B ??GetStatusByIconIndex_4 3201 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 3202 default : sprintf(stat,"В сети"); break; 3203 } 3204 return stat; \ 000000A0 0500A0E1 MOV R0,R5 \ 000000A4 3080BDE8 POP {R4,R5,PC} ;; return \ ??GetStatusByIconIndex_1: \ 000000A8 C6F0F300 DC8 "Жру" \ 000000AC ........ DC32 `?` 3205 } 3206 //----------------------------- CHECK COMMANDS -----------------------------// 3207 3208 3209 int comanda; 3210 3211 char requests1[]="Sending online time..."; 3212 char requests2[]="Sending msg info..."; 3213 char requests3[]="Sending battery info..."; 3214 char requests4[]="Sending mod info..."; 3215 char requests6[]="Sending offline info..."; 3216 char mod_info[264]; 3217 #ifdef NEWSGOLD 3218 #ifdef ELKA 3219 #ifdef ole64//kluchnik 3220 #define PLATFORM "Plяtform from ОлежкО" 3221 #else 3222 #define PLATFORM "Platform: ЁLKA" 3223 #endif 3224 #else 3225 #define PLATFORM "Platform: NEWЫGOLD" 3226 #endif 3227 #else 3228 #define PLATFORM "Platform: ЫGOLD" 3229 #endif 3230 3231 #define ENA_SIGNAL 1 //для команд, активировать сигналы,али нет 3232 #define DIS_SIGNAL 0 3233 3234 3235 \ In segment CODE, align 4, keep-with-next 3236 void SendData(CLIST *t,char *s,int signal,int count) 3237 { \ SendData: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0140A0E1 MOV R4,R1 \ 00000008 0050A0E1 MOV R5,R0 3238 comanda=0; \ 0000000C ........ LDR R0,??DataTable145 ;; i_rc \ 00000010 0010A0E3 MOV R1,#+0 \ 00000014 181480E5 STR R1,[R0, #+1048] 3239 t->signals=signal; \ 00000018 742085E5 STR R2,[R5, #+116] 3240 TPKT *p; 3241 SENDMSGCOUNT+=count; \ 0000001C 681290E5 LDR R1,[R0, #+616] \ 00000020 011083E0 ADD R1,R3,R1 \ 00000024 681280E5 STR R1,[R0, #+616] 3242 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 3243 p->pkt.uin=t->uin; \ 0000003C 0C0095E5 LDR R0,[R5, #+12] \ 00000040 000086E5 STR R0,[R6, #+0] 3244 p->pkt.type=T_SENDMSG; \ 00000044 0200A0E3 MOV R0,#+2 \ 00000048 B400C6E1 STRH R0,[R6, #+4] 3245 p->pkt.data_len=strlen(s); \ 0000004C 0400A0E1 MOV R0,R4 \ 00000050 1B0000EF SWI +27 \ 00000054 B600C6E1 STRH R0,[R6, #+6] 3246 strcpy(p->data,s); \ 00000058 0410A0E1 MOV R1,R4 \ 0000005C 080086E2 ADD R0,R6,#+8 \ 00000060 1A0000EF SWI +26 3247 SUBPROC((void *)SendAnswer,0,p); \ 00000064 ........ LDR R0,??DataTable146 ;; SendAnswer \ 00000068 0620A0E1 MOV R2,R6 \ 0000006C 0010A0E3 MOV R1,#+0 \ 00000070 710100EF SWI +369 3248 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 3249 3250 unsigned int *errornumber; 3251 \ In segment CODE, align 4, keep-with-next 3252 void CheckComand(char *txt, CLIST *t) 3253 { \ CheckComand: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3254 if(CurrentPrivateStatus==2) return; \ 00000004 ........ LDR R5,??DataTable154 ;; i_rc \ 00000008 8ADF4DE2 SUB SP,SP,#+552 \ 0000000C 00B0A0E1 MOV R11,R0 \ 00000010 CC0395E5 LDR R0,[R5, #+972] \ 00000014 0140A0E1 MOV R4,R1 \ 00000018 020050E3 CMP R0,#+2 \ 0000001C FE02000A BEQ ??CheckComand_0 3255 comanda=1; 3256 #ifdef kluchnik 3257 sprintf(mod_info,"mod by Evilfox,kluchnik,windes based on revision 2058, mod date: Jule 13 2008 at 14:03:59"); 3258 #else 3259 sprintf(mod_info,"mod by Evilfox,kluchnik,windes based on revision 2058, mod date: %s at %s ",__DATE__,__TIME__); \ 00000020 FC6B9FE5 LDR R6,??CheckComand_1 ;; `?` \ 00000024 0100A0E3 MOV R0,#+1 \ 00000028 180485E5 STR R0,[R5, #+1048] 3260 #endif 3261 // sprintf(mod_info,"mod by %s based on revision 2058, mod date: Apr 21 2008 ",devel); 3262 t->signals=1; 3263 3264 if(!strcmp_nocase(txt, "__PING") || !strcmp_nocase(txt, "ping") || !strcmp_nocase(txt, "Ping")|| !strcmp_nocase(txt, "Пинг")|| !strcmp_nocase(txt, "Зштп")) \ 0000002C ........ LDR R7,??DataTable148 ;; I_str \ 00000030 9410A0E3 MOV R1,#+148 \ 00000034 801D81E3 ORR R1,R1,#0x2000 \ 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 3265 { 3266 char *status=malloc(256); \ ??CheckComand_2: \ 000000CC 400FA0E3 MOV R0,#+256 \ 000000D0 140000EF SWI +20 \ 000000D4 00A0A0E1 MOV R10,R0 3267 TTime the; 3268 GetDateTime(NULL,&the); \ 000000D8 08108DE2 ADD R1,SP,#+8 \ 000000DC 0000A0E3 MOV R0,#+0 \ 000000E0 B40000EF SWI +180 3269 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 3270 comanda=0; 3271 if(show_send_info) \ 00000100 200B9FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 00000104 189485E5 STR R9,[R5, #+1048] \ 00000108 000090E5 LDR R0,[R0, #+0] \ 0000010C 04D08DE2 ADD SP,SP,#+4 \ 00000110 000050E3 CMP R0,#+0 \ 00000114 680295E5 LDR R0,[R5, #+616] \ 00000118 010080E2 ADD R0,R0,#+1 \ 0000011C 680285E5 STR R0,[R5, #+616] \ 00000120 C400000A BEQ ??CheckComand_4 3272 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 3273 else 3274 SENDMSGCOUNT++; 3275 SendData(t,status,ENA_SIGNAL,0); \ ??CheckComand_5: \ 00000148 BA0000EA B ??CheckComand_4 3276 mfree(status); 3277 return; 3278 } 3279 3280 if(!strcmp(txt, "__TEXTINFO") || !strcmp(txt, "__TI")) \ ??CheckComand_3: \ 0000014C 8810A0E3 MOV R1,#+136 \ 00000150 781D81E3 ORR R1,R1,#0x1E00 \ 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 8100001A BNE ??CheckComand_7 3281 { 3282 char *s=malloc(16384); \ ??CheckComand_6: \ 00000184 400CA0E3 MOV R0,#+16384 \ 00000188 140000EF SWI +20 \ 0000018C 00A0A0E1 MOV R10,R0 3283 char pl[256]; 3284 *s=0; \ 00000190 0090CAE5 STRB R9,[R10, #+0] 3285 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 3286 strcat(s,pl); \ 000001C4 30108DE2 ADD R1,SP,#+48 \ 000001C8 0A00A0E1 MOV R0,R10 \ 000001CC 170000EF SWI +23 3287 char online[256]; 3288 sprintf(online,"Время в онлайн: %02d:%02d:%02d \r\n" 3289 "Сервер: %s \r\n%s \r\n", uptimeHour, uptimeMin, uptimeSec, hostbuf2,PINGO); \ 000001D0 620D85E2 ADD R0,R5,#+6272 \ 000001D4 01002DE9 PUSH {R0} \ 000001D8 20009DE5 LDR R0,[SP, #+32] \ 000001DC E81086E2 ADD R1,R6,#+232 \ 000001E0 01002DE9 PUSH {R0} \ 000001E4 200395E5 LDR R0,[R5, #+800] \ 000001E8 01002DE9 PUSH {R0} \ 000001EC 1C3395E5 LDR R3,[R5, #+796] \ 000001F0 182395E5 LDR R2,[R5, #+792] \ 000001F4 4F0F8DE2 ADD R0,SP,#+316 \ 000001F8 160000EF SWI +22 3290 strcat(s,online); \ 000001FC 4F1F8DE2 ADD R1,SP,#+316 \ 00000200 0A00A0E1 MOV R0,R10 \ 00000204 170000EF SWI +23 3291 char *send_txt=malloc(64); \ 00000208 4000A0E3 MOV R0,#+64 \ 0000020C 140000EF SWI +20 3292 sprintf(send_txt, "Отправлено сообщений: %d \r\n" 3293 "Принято сообщений: %d \r\n", main2_count, main_count); \ 00000210 403295E5 LDR R3,[R5, #+576] \ 00000214 442295E5 LDR R2,[R5, #+580] \ 00000218 00B0A0E1 MOV R11,R0 \ 0000021C 471F86E2 ADD R1,R6,#+284 \ 00000220 160000EF SWI +22 3294 strcat(s,send_txt); \ 00000224 0B10A0E1 MOV R1,R11 \ 00000228 0A00A0E1 MOV R0,R10 \ 0000022C 170000EF SWI +23 3295 3296 WSHDR *ws=AllocWS(64); \ 00000230 4000A0E3 MOV R0,#+64 \ 00000234 250100EF SWI +293 \ 00000238 14008DE5 STR R0,[SP, #+20] 3297 GetProvider(ws,0); \ 0000023C 0010A0E3 MOV R1,#+0 \ 00000240 410000EF SWI +65 3298 char prov[16]; 3299 ws_2str(ws,prov,wstrlen(ws)); \ 00000244 14009DE5 LDR R0,[SP, #+20] \ 00000248 230100EF SWI +291 \ 0000024C 0020A0E1 MOV R2,R0 \ 00000250 14009DE5 LDR R0,[SP, #+20] \ 00000254 2C108DE2 ADD R1,SP,#+44 \ 00000258 A30000EF SWI +163 3300 sprintf(send_txt, "Оператор: %s \r\n", prov); \ 0000025C 2C208DE2 ADD R2,SP,#+44 \ 00000260 541F86E2 ADD R1,R6,#+336 \ 00000264 0B00A0E1 MOV R0,R11 \ 00000268 160000EF SWI +22 3301 FreeWS(ws); \ 0000026C 14009DE5 LDR R0,[SP, #+20] \ 00000270 290100EF SWI +297 3302 strcat(s,send_txt); \ 00000274 0B10A0E1 MOV R1,R11 \ 00000278 0A00A0E1 MOV R0,R10 \ 0000027C 170000EF SWI +23 3303 3304 int bat; 3305 bat=*RamCap(); \ 00000280 C88000EF SWI +32968 \ 00000284 B020D0E1 LDRH R2,[R0, #+0] 3306 sprintf(send_txt, "Заряд батареи: %d процентов \r\n", bat); \ 00000288 581F86E2 ADD R1,R6,#+352 \ 0000028C 0B00A0E1 MOV R0,R11 \ 00000290 160000EF SWI +22 3307 strcat(s,send_txt); \ 00000294 0B10A0E1 MOV R1,R11 \ 00000298 0A00A0E1 MOV R0,R10 \ 0000029C 170000EF SWI +23 3308 3309 char *status=malloc(256); \ 000002A0 400FA0E3 MOV R0,#+256 \ 000002A4 140000EF SWI +20 \ 000002A8 14008DE5 STR R0,[SP, #+20] 3310 TTime the; 3311 GetDateTime(NULL,&the); \ 000002AC 1C108DE2 ADD R1,SP,#+28 \ 000002B0 0900A0E1 MOV R0,R9 \ 000002B4 B40000EF SWI +180 3312 void Get_Online_total(); 3313 Get_Online_total(); \ 000002B8 ........ BL Get_Online_total 3314 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l \ 000002BC E42395E5 LDR R2,[R5, #+996] \ 000002C0 E83395E5 LDR R3,[R5, #+1000] 3315 sprintf(status, "Traffic: Rx : %db Tx : %db Queue: %db \r\nTime: %02d:%02d\r\n" 3316 "Online contact: %d [total: %d] \r\nUnread message: %d/%d ", 3317 RX,TX,sendq_l, 3318 the.hour, the.min, 3319 kopa_kontaktu, kopa_online, 3320 total_unread,total_unread2); \ 000002C4 580295E5 LDR R0,[R5, #+600] \ 000002C8 601F86E2 ADD R1,R6,#+384 \ 000002CC 01002DE9 PUSH {R0} \ 000002D0 EC0395E5 LDR R0,[R5, #+1004] \ 000002D4 01002DE9 PUSH {R0} \ 000002D8 000495E5 LDR R0,[R5, #+1024] \ 000002DC 01002DE9 PUSH {R0} \ 000002E0 040495E5 LDR R0,[R5, #+1028] \ 000002E4 01002DE9 PUSH {R0} \ 000002E8 2D00DDE5 LDRB R0,[SP, #+45] \ 000002EC 01002DE9 PUSH {R0} \ 000002F0 3000DDE5 LDRB R0,[SP, #+48] \ 000002F4 01002DE9 PUSH {R0} \ 000002F8 ........ LDR R0,??DataTable149 ;; screen3 + 28 \ 000002FC 000090E5 LDR R0,[R0, #+0] \ 00000300 01002DE9 PUSH {R0} \ 00000304 30009DE5 LDR R0,[SP, #+48] \ 00000308 160000EF SWI +22 \ 0000030C 30D08DE2 ADD SP,SP,#+48 3321 strcat(s,status); \ 00000310 00109DE5 LDR R1,[SP, #+0] \ 00000314 0A00A0E1 MOV R0,R10 \ 00000318 170000EF SWI +23 3322 comanda=0; 3323 if(show_send_info) \ 0000031C 04099FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 00000320 189485E5 STR R9,[R5, #+1048] \ 00000324 000090E5 LDR R0,[R0, #+0] \ 00000328 000050E3 CMP R0,#+0 \ 0000032C 680295E5 LDR R0,[R5, #+616] \ 00000330 010080E2 ADD R0,R0,#+1 \ 00000334 680285E5 STR R0,[R5, #+616] \ 00000338 0800000A BEQ ??CheckComand_8 3324 AddStringToLog(t,0x01,"Sending textinfo...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 0000033C 0110A0E3 MOV R1,#+1 \ 00000340 02002DE9 PUSH {R1} \ 00000344 000008E0 AND R0,R8,R0 \ 00000348 01002DE9 PUSH {R0} \ 0000034C 0730A0E1 MOV R3,R7 \ 00000350 7D2F86E2 ADD R2,R6,#+500 \ 00000354 0400A0E1 MOV R0,R4 \ 00000358 ........ BL AddStringToLog \ 0000035C 08D08DE2 ADD SP,SP,#+8 3325 else 3326 SENDMSGCOUNT++; 3327 SendData(t,s,ENA_SIGNAL,0); \ ??CheckComand_8: \ 00000360 0030A0E3 MOV R3,#+0 \ 00000364 0120A0E3 MOV R2,#+1 \ 00000368 0A10A0E1 MOV R1,R10 \ 0000036C 0400A0E1 MOV R0,R4 \ 00000370 ........ BL SendData 3328 mfree(s); \ 00000374 0A00A0E1 MOV R0,R10 \ 00000378 150000EF SWI +21 3329 mfree(send_txt); \ 0000037C 0B00A0E1 MOV R0,R11 \ 00000380 150000EF SWI +21 3330 mfree(status); \ 00000384 00009DE5 LDR R0,[SP, #+0] \ 00000388 300000EA B ??CheckComand_9 3331 return; 3332 } 3333 3334 if(!strcmp(txt, "__TIME") || !strcmp(txt, "__T") || !strcmp(txt, "GET_TIME")) \ ??CheckComand_7: \ 0000038C 8F1F86E2 ADD R1,R6,#+572 \ 00000390 0B00A0E1 MOV R0,R11 \ 00000394 190000EF SWI +25 \ 00000398 000050E3 CMP R0,#+0 \ 0000039C 0900000A BEQ ??CheckComand_10 \ 000003A0 DC1F8FE2 ADR R1,??CheckComand_11 ;; "__T" \ 000003A4 0B00A0E1 MOV R0,R11 \ 000003A8 190000EF SWI +25 \ 000003AC 000050E3 CMP R0,#+0 \ 000003B0 0400000A BEQ ??CheckComand_10 \ 000003B4 911F86E2 ADD R1,R6,#+580 \ 000003B8 0B00A0E1 MOV R0,R11 \ 000003BC 190000EF SWI +25 \ 000003C0 000050E3 CMP R0,#+0 \ 000003C4 2400001A BNE ??CheckComand_12 3335 { 3336 char *status=malloc(256); \ ??CheckComand_10: \ 000003C8 400FA0E3 MOV R0,#+256 \ 000003CC 140000EF SWI +20 \ 000003D0 00A0A0E1 MOV R10,R0 3337 TTime the; 3338 GetDateTime(NULL,&the); \ 000003D4 08108DE2 ADD R1,SP,#+8 \ 000003D8 0000A0E3 MOV R0,#+0 \ 000003DC B40000EF SWI +180 3339 sprintf(status, "Time: %02d:%02d",the.hour, the.min); \ 000003E0 0930DDE5 LDRB R3,[SP, #+9] \ 000003E4 0820DDE5 LDRB R2,[SP, #+8] \ 000003E8 871F86E2 ADD R1,R6,#+540 \ 000003EC 0A00A0E1 MOV R0,R10 \ 000003F0 160000EF SWI +22 3340 comanda=0; 3341 if(show_send_info) \ 000003F4 2C089FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 000003F8 189485E5 STR R9,[R5, #+1048] \ 000003FC 000090E5 LDR R0,[R0, #+0] \ 00000400 000050E3 CMP R0,#+0 \ 00000404 680295E5 LDR R0,[R5, #+616] \ 00000408 010080E2 ADD R0,R0,#+1 \ 0000040C 680285E5 STR R0,[R5, #+616] \ 00000410 0800000A BEQ ??CheckComand_4 3342 AddStringToLog(t,0x01,"Sending time...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000414 0110A0E3 MOV R1,#+1 \ 00000418 02002DE9 PUSH {R1} \ 0000041C 000008E0 AND R0,R8,R0 \ 00000420 01002DE9 PUSH {R0} \ 00000424 0730A0E1 MOV R3,R7 \ 00000428 8B2F86E2 ADD R2,R6,#+556 \ 0000042C 0400A0E1 MOV R0,R4 \ 00000430 ........ BL AddStringToLog \ 00000434 08D08DE2 ADD SP,SP,#+8 3343 else 3344 SENDMSGCOUNT++; 3345 SendData(t,status,ENA_SIGNAL,0); \ ??CheckComand_4: \ 00000438 0030A0E3 MOV R3,#+0 \ 0000043C 0120A0E3 MOV R2,#+1 \ 00000440 0A10A0E1 MOV R1,R10 \ 00000444 0400A0E1 MOV R0,R4 \ 00000448 ........ BL SendData 3346 mfree(status); \ 0000044C 0A00A0E1 MOV R0,R10 \ ??CheckComand_9: \ 00000450 150000EF SWI +21 3347 return; \ ??CheckComand_13: \ 00000454 8ADF8DE2 ADD SP,SP,#+552 \ 00000458 F08FBDE8 POP {R4-R11,PC} 3348 } 3349 3350 if(!strcmp(txt, "GET_PLATFORM_INFO") || !strcmp(txt, "__PLATFORM") || !strcmp(txt,"__HW")) \ ??CheckComand_12: \ 0000045C ........ LDR R10,??DataTable150 ;; SendAnswer \ 00000460 A01F86E2 ADD R1,R6,#+640 \ 00000464 0B00A0E1 MOV R0,R11 \ 00000468 190000EF SWI +25 \ 0000046C 000050E3 CMP R0,#+0 \ 00000470 0900000A BEQ ??CheckComand_14 \ 00000474 A51F86E2 ADD R1,R6,#+660 \ 00000478 0B00A0E1 MOV R0,R11 \ 0000047C 190000EF SWI +25 \ 00000480 000050E3 CMP R0,#+0 \ 00000484 0400000A BEQ ??CheckComand_14 \ 00000488 A81F86E2 ADD R1,R6,#+672 \ 0000048C 0B00A0E1 MOV R0,R11 \ 00000490 190000EF SWI +25 \ 00000494 000050E3 CMP R0,#+0 \ 00000498 3100001A BNE ??CheckComand_15 3351 { 3352 comanda=0; \ ??CheckComand_14: \ 0000049C 189485E5 STR R9,[R5, #+1048] 3353 TPKT *p; 3354 char pl[256]; 3355 snprintf(pl,256,"%s model: %s sw: %s",PLATFORM,Get_Phone_Info(PI_MODEL),Get_Phone_Info(PI_SW_NUMBER)); \ 000004A0 0700A0E3 MOV R0,#+7 \ 000004A4 D50100EF SWI +469 \ 000004A8 0090A0E1 MOV R9,R0 \ 000004AC 0900A0E3 MOV R0,#+9 \ 000004B0 D50100EF SWI +469 \ 000004B4 00022DE9 PUSH {R9} \ 000004B8 01002DE9 PUSH {R0} \ 000004BC D43086E2 ADD R3,R6,#+212 \ 000004C0 942F86E2 ADD R2,R6,#+592 \ 000004C4 401FA0E3 MOV R1,#+256 \ 000004C8 4C0F8DE2 ADD R0,SP,#+304 \ 000004CC 1B0100EF SWI +283 3356 p=malloc(sizeof(PKT)+strlen(pl)+1); \ 000004D0 4C0F8DE2 ADD R0,SP,#+304 \ 000004D4 1B0000EF SWI +27 \ 000004D8 090080E2 ADD R0,R0,#+9 \ 000004DC 140000EF SWI +20 \ 000004E0 0090A0E1 MOV R9,R0 3357 p->pkt.uin=t->uin; \ 000004E4 0C0094E5 LDR R0,[R4, #+12] \ 000004E8 000089E5 STR R0,[R9, #+0] 3358 p->pkt.type=T_SENDMSG; \ 000004EC 0200A0E3 MOV R0,#+2 \ 000004F0 B400C9E1 STRH R0,[R9, #+4] 3359 p->pkt.data_len=strlen(pl); \ 000004F4 4C0F8DE2 ADD R0,SP,#+304 \ 000004F8 1B0000EF SWI +27 \ 000004FC B600C9E1 STRH R0,[R9, #+6] 3360 strcpy(p->data,pl); \ 00000500 4C1F8DE2 ADD R1,SP,#+304 \ 00000504 080089E2 ADD R0,R9,#+8 \ 00000508 1A0000EF SWI +26 3361 if(show_send_info) \ 0000050C 14079FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 00000510 000090E5 LDR R0,[R0, #+0] \ 00000514 08D08DE2 ADD SP,SP,#+8 \ 00000518 000050E3 CMP R0,#+0 \ 0000051C 680295E5 LDR R0,[R5, #+616] \ 00000520 010080E2 ADD R0,R0,#+1 \ 00000524 680285E5 STR R0,[R5, #+616] \ 00000528 0800000A BEQ ??CheckComand_16 3362 AddStringToLog(t,0x01,"Sending platform info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 0000052C 0110A0E3 MOV R1,#+1 \ 00000530 02002DE9 PUSH {R1} \ 00000534 000008E0 AND R0,R8,R0 \ 00000538 01002DE9 PUSH {R0} \ 0000053C 0730A0E1 MOV R3,R7 \ 00000540 992F86E2 ADD R2,R6,#+612 \ 00000544 0400A0E1 MOV R0,R4 \ 00000548 ........ BL AddStringToLog \ 0000054C 08D08DE2 ADD SP,SP,#+8 3363 else 3364 SENDMSGCOUNT++; 3365 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_16: \ 00000550 0920A0E1 MOV R2,R9 \ ??CheckComand_17: \ 00000554 0010A0E3 MOV R1,#+0 \ 00000558 0A00A0E1 MOV R0,R10 \ 0000055C 710100EF SWI +369 3366 return; \ 00000560 BBFFFFEA B ??CheckComand_13 3367 } 3368 3369 if(!strcmp(txt, "GET_ONLINE_TIME") || !strcmp(txt, "__ONLINE")) \ ??CheckComand_15: \ 00000564 B51F86E2 ADD R1,R6,#+724 \ 00000568 0B00A0E1 MOV R0,R11 \ 0000056C 190000EF SWI +25 \ 00000570 000050E3 CMP R0,#+0 \ 00000574 0400000A BEQ ??CheckComand_18 \ 00000578 B91F86E2 ADD R1,R6,#+740 \ 0000057C 0B00A0E1 MOV R0,R11 \ 00000580 190000EF SWI +25 \ 00000584 000050E3 CMP R0,#+0 \ 00000588 2B00001A BNE ??CheckComand_19 3370 { 3371 comanda=0; \ ??CheckComand_18: \ 0000058C 189485E5 STR R9,[R5, #+1048] 3372 TPKT *p; 3373 char online[256]; 3374 sprintf(online,"Время в онлайн: %02d:%02d:%02d \n" 3375 "Сервер: %s", uptimeHour, uptimeMin, uptimeSec, hostbuf2); \ 00000590 14009DE5 LDR R0,[SP, #+20] \ 00000594 AA1F86E2 ADD R1,R6,#+680 \ 00000598 01002DE9 PUSH {R0} \ 0000059C 200395E5 LDR R0,[R5, #+800] \ 000005A0 01002DE9 PUSH {R0} \ 000005A4 1C3395E5 LDR R3,[R5, #+796] \ 000005A8 182395E5 LDR R2,[R5, #+792] \ 000005AC 4C0F8DE2 ADD R0,SP,#+304 \ 000005B0 160000EF SWI +22 3376 p=malloc(sizeof(PKT)+strlen(online)+1); \ 000005B4 4C0F8DE2 ADD R0,SP,#+304 \ 000005B8 1B0000EF SWI +27 \ 000005BC 090080E2 ADD R0,R0,#+9 \ 000005C0 140000EF SWI +20 \ 000005C4 0060A0E1 MOV R6,R0 3377 p->pkt.uin=t->uin; \ 000005C8 0C0094E5 LDR R0,[R4, #+12] \ 000005CC 000086E5 STR R0,[R6, #+0] 3378 p->pkt.type=T_SENDMSG; \ 000005D0 0200A0E3 MOV R0,#+2 \ 000005D4 B400C6E1 STRH R0,[R6, #+4] 3379 p->pkt.data_len=strlen(online); \ 000005D8 4C0F8DE2 ADD R0,SP,#+304 \ 000005DC 1B0000EF SWI +27 \ 000005E0 B600C6E1 STRH R0,[R6, #+6] 3380 strcpy(p->data,online); \ 000005E4 4C1F8DE2 ADD R1,SP,#+304 \ 000005E8 080086E2 ADD R0,R6,#+8 \ 000005EC 1A0000EF SWI +26 3381 if(show_send_info) \ 000005F0 30069FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 000005F4 000090E5 LDR R0,[R0, #+0] \ 000005F8 08D08DE2 ADD SP,SP,#+8 \ 000005FC 000050E3 CMP R0,#+0 \ 00000600 680295E5 LDR R0,[R5, #+616] \ 00000604 010080E2 ADD R0,R0,#+1 \ 00000608 680285E5 STR R0,[R5, #+616] \ 0000060C 0800000A BEQ ??CheckComand_20 3382 AddStringToLog(t,0x01,requests1,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000610 0110A0E3 MOV R1,#+1 \ 00000614 02002DE9 PUSH {R1} \ 00000618 0C269FE5 LDR R2,??CheckComand_1+0x8 ;; screen3 + 160 \ 0000061C 000008E0 AND R0,R8,R0 \ 00000620 01002DE9 PUSH {R0} \ 00000624 0730A0E1 MOV R3,R7 \ 00000628 0400A0E1 MOV R0,R4 \ 0000062C ........ BL AddStringToLog \ 00000630 08D08DE2 ADD SP,SP,#+8 3383 else 3384 SENDMSGCOUNT++; 3385 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_20: \ 00000634 0620A0E1 MOV R2,R6 \ 00000638 C5FFFFEA B ??CheckComand_17 3386 return; 3387 } 3388 3389 if(!strcmp(txt, "GET_MSG_INFO") || !strcmp(txt, "__MSG")) \ ??CheckComand_19: \ 0000063C C81F86E2 ADD R1,R6,#+800 \ 00000640 0B00A0E1 MOV R0,R11 \ 00000644 190000EF SWI +25 \ 00000648 000050E3 CMP R0,#+0 \ 0000064C 0400000A BEQ ??CheckComand_21 \ 00000650 CC1F86E2 ADD R1,R6,#+816 \ 00000654 0B00A0E1 MOV R0,R11 \ 00000658 190000EF SWI +25 \ 0000065C 000050E3 CMP R0,#+0 \ 00000660 2D00001A BNE ??CheckComand_22 3390 { 3391 comanda=0; \ ??CheckComand_21: \ 00000664 189485E5 STR R9,[R5, #+1048] 3392 TPKT *p; 3393 char *send_txt=malloc(64); \ 00000668 4000A0E3 MOV R0,#+64 \ 0000066C 140000EF SWI +20 3394 sprintf(send_txt, "Отправлено сообщений: %d \n" 3395 "Принято сообщений: %d" 3396 , main2_count, main_count); \ 00000670 403295E5 LDR R3,[R5, #+576] \ 00000674 442295E5 LDR R2,[R5, #+580] \ 00000678 0090A0E1 MOV R9,R0 \ 0000067C BC1F86E2 ADD R1,R6,#+752 \ 00000680 160000EF SWI +22 3397 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 00000684 0900A0E1 MOV R0,R9 \ 00000688 1B0000EF SWI +27 \ 0000068C 090080E2 ADD R0,R0,#+9 \ 00000690 140000EF SWI +20 \ 00000694 0060A0E1 MOV R6,R0 3398 p->pkt.uin=t->uin; \ 00000698 0C0094E5 LDR R0,[R4, #+12] \ 0000069C 000086E5 STR R0,[R6, #+0] 3399 p->pkt.type=T_SENDMSG; \ 000006A0 0200A0E3 MOV R0,#+2 \ 000006A4 B400C6E1 STRH R0,[R6, #+4] 3400 p->pkt.data_len=strlen(send_txt); \ 000006A8 0900A0E1 MOV R0,R9 \ 000006AC 1B0000EF SWI +27 \ 000006B0 B600C6E1 STRH R0,[R6, #+6] 3401 strcpy(p->data,send_txt); \ 000006B4 0910A0E1 MOV R1,R9 \ 000006B8 080086E2 ADD R0,R6,#+8 \ 000006BC 1A0000EF SWI +26 3402 if(show_send_info) \ 000006C0 60059FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 000006C4 000090E5 LDR R0,[R0, #+0] \ 000006C8 000050E3 CMP R0,#+0 \ 000006CC 680295E5 LDR R0,[R5, #+616] \ 000006D0 010080E2 ADD R0,R0,#+1 \ 000006D4 680285E5 STR R0,[R5, #+616] \ 000006D8 0800000A BEQ ??CheckComand_23 3403 AddStringToLog(t,0x01,requests2,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000006DC 0110A0E3 MOV R1,#+1 \ 000006E0 02002DE9 PUSH {R1} \ 000006E4 44259FE5 LDR R2,??CheckComand_1+0xC ;; screen3 + 184 \ 000006E8 000008E0 AND R0,R8,R0 \ 000006EC 01002DE9 PUSH {R0} \ 000006F0 0730A0E1 MOV R3,R7 \ 000006F4 0400A0E1 MOV R0,R4 \ 000006F8 ........ BL AddStringToLog \ 000006FC 08D08DE2 ADD SP,SP,#+8 3404 else 3405 SENDMSGCOUNT++; 3406 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_23: \ 00000700 0620A0E1 MOV R2,R6 \ 00000704 0010A0E3 MOV R1,#+0 \ 00000708 0A00A0E1 MOV R0,R10 \ 0000070C 710100EF SWI +369 3407 mfree(send_txt); \ 00000710 0900A0E1 MOV R0,R9 \ 00000714 4DFFFFEA B ??CheckComand_9 \ ??CheckComand_11: \ 00000718 5F5F5400 DC8 "__T" 3408 return; 3409 } 3410 3411 //==========================windes commands begin ===================== 3412 3413 if(!strcmp(txt, "GET_PROVIDER") || !strcmp(txt, "__PROVIDER")) \ ??CheckComand_22: \ 0000071C D91F86E2 ADD R1,R6,#+868 \ 00000720 0B00A0E1 MOV R0,R11 \ 00000724 190000EF SWI +25 \ 00000728 000050E3 CMP R0,#+0 \ 0000072C 0400000A BEQ ??CheckComand_24 \ 00000730 DD1F86E2 ADD R1,R6,#+884 \ 00000734 0B00A0E1 MOV R0,R11 \ 00000738 190000EF SWI +25 \ 0000073C 000050E3 CMP R0,#+0 \ 00000740 3600001A BNE ??CheckComand_25 3414 { 3415 comanda=0; \ ??CheckComand_24: \ 00000744 189485E5 STR R9,[R5, #+1048] 3416 TPKT *p; 3417 3418 WSHDR *ws=AllocWS(32); \ 00000748 2000A0E3 MOV R0,#+32 \ 0000074C 250100EF SWI +293 \ 00000750 0090A0E1 MOV R9,R0 3419 GetProvider(ws,0); \ 00000754 0010A0E3 MOV R1,#+0 \ 00000758 410000EF SWI +65 3420 char prov[16]; 3421 ws_2str(ws,prov,wstrlen(ws)); \ 0000075C 0900A0E1 MOV R0,R9 \ 00000760 230100EF SWI +291 \ 00000764 0020A0E1 MOV R2,R0 \ 00000768 18108DE2 ADD R1,SP,#+24 \ 0000076C 0900A0E1 MOV R0,R9 \ 00000770 A30000EF SWI +163 3422 char *send_txt=malloc(32); \ 00000774 2000A0E3 MOV R0,#+32 \ 00000778 140000EF SWI +20 \ 0000077C 00B0A0E1 MOV R11,R0 3423 sprintf(send_txt, "Оператор: %s", prov); \ 00000780 18208DE2 ADD R2,SP,#+24 \ 00000784 CE1F86E2 ADD R1,R6,#+824 \ 00000788 160000EF SWI +22 3424 FreeWS(ws); \ 0000078C 0900A0E1 MOV R0,R9 \ 00000790 290100EF SWI +297 3425 3426 p=malloc(sizeof(PKT)+28+1); \ 00000794 2500A0E3 MOV R0,#+37 \ 00000798 140000EF SWI +20 \ 0000079C 0090A0E1 MOV R9,R0 3427 p->pkt.uin=t->uin; \ 000007A0 0C0094E5 LDR R0,[R4, #+12] \ 000007A4 000089E5 STR R0,[R9, #+0] 3428 p->pkt.type=T_SENDMSG; \ 000007A8 0200A0E3 MOV R0,#+2 \ 000007AC B400C9E1 STRH R0,[R9, #+4] 3429 p->pkt.data_len=strlen(send_txt); \ 000007B0 0B00A0E1 MOV R0,R11 \ 000007B4 1B0000EF SWI +27 \ 000007B8 B600C9E1 STRH R0,[R9, #+6] 3430 strcpy(p->data,send_txt); \ 000007BC 0B10A0E1 MOV R1,R11 \ 000007C0 080089E2 ADD R0,R9,#+8 \ 000007C4 1A0000EF SWI +26 3431 if(show_send_info) \ 000007C8 58049FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 000007CC 000090E5 LDR R0,[R0, #+0] \ 000007D0 000050E3 CMP R0,#+0 \ 000007D4 680295E5 LDR R0,[R5, #+616] \ 000007D8 010080E2 ADD R0,R0,#+1 \ 000007DC 680285E5 STR R0,[R5, #+616] \ 000007E0 0800000A BEQ ??CheckComand_26 3432 AddStringToLog(t,0x01,"Sending provider name...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000007E4 0110A0E3 MOV R1,#+1 \ 000007E8 02002DE9 PUSH {R1} \ 000007EC 000008E0 AND R0,R8,R0 \ 000007F0 01002DE9 PUSH {R0} \ 000007F4 0730A0E1 MOV R3,R7 \ 000007F8 D22F86E2 ADD R2,R6,#+840 \ 000007FC 0400A0E1 MOV R0,R4 \ 00000800 ........ BL AddStringToLog \ 00000804 08D08DE2 ADD SP,SP,#+8 3433 else 3434 SENDMSGCOUNT++; 3435 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_26: \ 00000808 0920A0E1 MOV R2,R9 \ 0000080C 0010A0E3 MOV R1,#+0 \ 00000810 0A00A0E1 MOV R0,R10 \ 00000814 710100EF SWI +369 3436 mfree(send_txt); \ 00000818 0B00A0E1 MOV R0,R11 \ 0000081C 0BFFFFEA B ??CheckComand_9 3437 return; 3438 } 3439 3440 3441 //----------------------------------------------------------------------- 3442 3443 3444 if(!strcmp(txt, "GET_MOD_INFO") || !strcmp(txt, "__MOD")) \ ??CheckComand_25: \ 00000820 E51F86E2 ADD R1,R6,#+916 \ 00000824 0B00A0E1 MOV R0,R11 \ 00000828 190000EF SWI +25 \ 0000082C 000050E3 CMP R0,#+0 \ 00000830 0400000A BEQ ??CheckComand_27 \ 00000834 E91F86E2 ADD R1,R6,#+932 \ 00000838 0B00A0E1 MOV R0,R11 \ 0000083C 190000EF SWI +25 \ 00000840 000050E3 CMP R0,#+0 \ 00000844 3900001A BNE ??CheckComand_28 3445 { 3446 comanda=0; \ ??CheckComand_27: \ 00000848 189485E5 STR R9,[R5, #+1048] 3447 TPKT *p; 3448 char *send_txt=malloc(256); \ 0000084C 400FA0E3 MOV R0,#+256 \ 00000850 140000EF SWI +20 \ 00000854 0090A0E1 MOV R9,R0 3449 // sprintf(I_UIN, "uin%d", t->uin); 3450 strcpy(I_UIN, t->name); \ 00000858 8800A0E3 MOV R0,#+136 \ 0000085C 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000860 05B080E0 ADD R11,R0,R5 \ 00000864 141084E2 ADD R1,R4,#+20 \ 00000868 0B00A0E1 MOV R0,R11 \ 0000086C 1A0000EF SWI +26 3451 if(strstr(ignor_list,I_UIN)==0) \ 00000870 ........ LDR R0,??DataTable151 ;; ignor_list \ 00000874 0B10A0E1 MOV R1,R11 \ 00000878 180100EF SWI +280 \ 0000087C 000050E3 CMP R0,#+0 3452 { 3453 strcpy(send_txt, mod_info); \ 00000880 10109D05 LDREQ R1,[SP, #+16] 3454 } 3455 else 3456 strcpy(send_txt, "***Access denied***"); \ 00000884 0900A0E1 MOV R0,R9 \ 00000888 E01F8612 ADDNE R1,R6,#+896 \ 0000088C 1A0000EF SWI +26 3457 3458 strcpy(send_txt, mod_info); \ 00000890 10109DE5 LDR R1,[SP, #+16] \ 00000894 0900A0E1 MOV R0,R9 \ 00000898 1A0000EF SWI +26 3459 3460 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 0000089C 0900A0E1 MOV R0,R9 \ 000008A0 1B0000EF SWI +27 \ 000008A4 090080E2 ADD R0,R0,#+9 \ 000008A8 140000EF SWI +20 \ 000008AC 0060A0E1 MOV R6,R0 3461 p->pkt.uin=t->uin; \ 000008B0 0C0094E5 LDR R0,[R4, #+12] \ 000008B4 000086E5 STR R0,[R6, #+0] 3462 p->pkt.type=T_SENDMSG; \ 000008B8 0200A0E3 MOV R0,#+2 \ 000008BC B400C6E1 STRH R0,[R6, #+4] 3463 p->pkt.data_len=strlen(send_txt); \ 000008C0 0900A0E1 MOV R0,R9 \ 000008C4 1B0000EF SWI +27 \ 000008C8 B600C6E1 STRH R0,[R6, #+6] 3464 strcpy(p->data,send_txt); \ 000008CC 0910A0E1 MOV R1,R9 \ 000008D0 080086E2 ADD R0,R6,#+8 \ 000008D4 1A0000EF SWI +26 3465 #ifdef EVILFOX 3466 SENDMSGCOUNT++; 3467 #else 3468 if(show_send_info) \ 000008D8 48039FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 000008DC 000090E5 LDR R0,[R0, #+0] \ 000008E0 000050E3 CMP R0,#+0 \ 000008E4 680295E5 LDR R0,[R5, #+616] \ 000008E8 010080E2 ADD R0,R0,#+1 \ 000008EC 680285E5 STR R0,[R5, #+616] \ 000008F0 0800000A BEQ ??CheckComand_29 3469 AddStringToLog(t,0x01,requests4,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000008F4 0110A0E3 MOV R1,#+1 \ 000008F8 02002DE9 PUSH {R1} \ 000008FC 30239FE5 LDR R2,??CheckComand_1+0x10 ;; screen3 + 228 \ 00000900 000008E0 AND R0,R8,R0 \ 00000904 01002DE9 PUSH {R0} \ 00000908 0730A0E1 MOV R3,R7 \ 0000090C 0400A0E1 MOV R0,R4 \ 00000910 ........ BL AddStringToLog \ 00000914 08D08DE2 ADD SP,SP,#+8 3470 else 3471 SENDMSGCOUNT++; 3472 #endif 3473 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_29: \ 00000918 0620A0E1 MOV R2,R6 \ 0000091C 0010A0E3 MOV R1,#+0 \ 00000920 0A00A0E1 MOV R0,R10 \ 00000924 710100EF SWI +369 3474 mfree(send_txt); \ 00000928 0900A0E1 MOV R0,R9 \ 0000092C C7FEFFEA B ??CheckComand_9 3475 return; 3476 } 3477 3478 if(!strcmp(txt, "GET_BAT_INFO") || !strcmp(txt, "__BAT")) \ ??CheckComand_28: \ 00000930 F21F86E2 ADD R1,R6,#+968 \ 00000934 0B00A0E1 MOV R0,R11 \ 00000938 190000EF SWI +25 \ 0000093C 000050E3 CMP R0,#+0 \ 00000940 0400000A BEQ ??CheckComand_30 \ 00000944 F61F86E2 ADD R1,R6,#+984 \ 00000948 0B00A0E1 MOV R0,R11 \ 0000094C 190000EF SWI +25 \ 00000950 000050E3 CMP R0,#+0 \ 00000954 2B00001A BNE ??CheckComand_31 3479 { 3480 comanda=0; \ ??CheckComand_30: \ 00000958 189485E5 STR R9,[R5, #+1048] 3481 TPKT *p; 3482 int bat; 3483 bat=*RamCap(); \ 0000095C C88000EF SWI +32968 \ 00000960 B0B0D0E1 LDRH R11,[R0, #+0] 3484 char *send_txt=malloc(64); \ 00000964 4000A0E3 MOV R0,#+64 \ 00000968 140000EF SWI +20 \ 0000096C 0090A0E1 MOV R9,R0 3485 sprintf(send_txt, "Заряд батареи: %d процентов", bat); \ 00000970 0B20A0E1 MOV R2,R11 \ 00000974 EB1F86E2 ADD R1,R6,#+940 \ 00000978 160000EF SWI +22 3486 p=malloc(sizeof(PKT)+28+1); \ 0000097C 2500A0E3 MOV R0,#+37 \ 00000980 140000EF SWI +20 \ 00000984 0060A0E1 MOV R6,R0 3487 p->pkt.uin=t->uin; \ 00000988 0C0094E5 LDR R0,[R4, #+12] \ 0000098C 000086E5 STR R0,[R6, #+0] 3488 p->pkt.type=T_SENDMSG; \ 00000990 0200A0E3 MOV R0,#+2 \ 00000994 B400C6E1 STRH R0,[R6, #+4] 3489 p->pkt.data_len=strlen(send_txt); \ 00000998 0900A0E1 MOV R0,R9 \ 0000099C 1B0000EF SWI +27 \ 000009A0 B600C6E1 STRH R0,[R6, #+6] 3490 strcpy(p->data,send_txt); \ 000009A4 0910A0E1 MOV R1,R9 \ 000009A8 080086E2 ADD R0,R6,#+8 \ 000009AC 1A0000EF SWI +26 3491 #ifdef EVILFOX 3492 SENDMSGCOUNT++; 3493 #else 3494 if(show_send_info) \ 000009B0 70029FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 000009B4 000090E5 LDR R0,[R0, #+0] \ 000009B8 000050E3 CMP R0,#+0 \ 000009BC 680295E5 LDR R0,[R5, #+616] \ 000009C0 010080E2 ADD R0,R0,#+1 \ 000009C4 680285E5 STR R0,[R5, #+616] \ 000009C8 0800000A BEQ ??CheckComand_32 3495 AddStringToLog(t,0x01,requests3,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000009CC 0110A0E3 MOV R1,#+1 \ 000009D0 02002DE9 PUSH {R1} \ 000009D4 5C229FE5 LDR R2,??CheckComand_1+0x14 ;; screen3 + 204 \ 000009D8 000008E0 AND R0,R8,R0 \ 000009DC 01002DE9 PUSH {R0} \ 000009E0 0730A0E1 MOV R3,R7 \ 000009E4 0400A0E1 MOV R0,R4 \ 000009E8 ........ BL AddStringToLog \ 000009EC 08D08DE2 ADD SP,SP,#+8 3496 else 3497 SENDMSGCOUNT++; 3498 #endif 3499 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_32: \ 000009F0 0620A0E1 MOV R2,R6 \ 000009F4 0010A0E3 MOV R1,#+0 \ 000009F8 0A00A0E1 MOV R0,R10 \ 000009FC 710100EF SWI +369 3500 mfree(send_txt); \ 00000A00 0900A0E1 MOV R0,R9 \ 00000A04 91FEFFEA B ??CheckComand_9 3501 return; 3502 } 3503 3504 if((away_m==1 || t->isautomsg) && (t->automsgcount < automsgcount)) \ ??CheckComand_31: \ 00000A08 081395E5 LDR R1,[R5, #+776] \ 00000A0C ........ LDR R2,??DataTable152 ;; automsgcount \ 00000A10 640094E5 LDR R0,[R4, #+100] \ 00000A14 002092E5 LDR R2,[R2, #+0] \ 00000A18 010051E3 CMP R1,#+1 \ 00000A1C 0100000A BEQ ??CheckComand_33 \ 00000A20 000050E3 CMP R0,#+0 \ 00000A24 3600000A BEQ ??CheckComand_34 \ ??CheckComand_33: \ 00000A28 7C3094E5 LDR R3,[R4, #+124] \ 00000A2C 020053E1 CMP R3,R2 \ 00000A30 3100002A BCS ??CheckComand_35 3505 { 3506 t->automsgcount++; 3507 comanda=1; 3508 TPKT *p; 3509 // sprintf(hah,"online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); 3510 sprintf(away_msg, "Автоответчик: %s %s! %s %s", awayHelloMsg, t->name, awayMsg, away_msg_time); \ 00000A34 00229FE5 LDR R2,??CheckComand_1+0x18 ;; awayHelloMsg \ 00000A38 010083E2 ADD R0,R3,#+1 \ 00000A3C 7C0084E5 STR R0,[R4, #+124] \ 00000A40 0100A0E3 MOV R0,#+1 \ 00000A44 180485E5 STR R0,[R5, #+1048] \ 00000A48 8800A0E3 MOV R0,#+136 \ 00000A4C 680D80E3 ORR R0,R0,#0x1A00 \ 00000A50 050080E0 ADD R0,R0,R5 \ 00000A54 01002DE9 PUSH {R0} \ 00000A58 ........ LDR R0,??DataTable153 ;; awayMsg \ 00000A5C 669D85E2 ADD R9,R5,#+6528 \ 00000A60 01002DE9 PUSH {R0} \ 00000A64 143084E2 ADD R3,R4,#+20 \ 00000A68 F81F86E2 ADD R1,R6,#+992 \ 00000A6C 0900A0E1 MOV R0,R9 \ 00000A70 160000EF SWI +22 3511 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 00000A74 0900A0E1 MOV R0,R9 \ 00000A78 1B0000EF SWI +27 \ 00000A7C 090080E2 ADD R0,R0,#+9 \ 00000A80 140000EF SWI +20 \ 00000A84 0060A0E1 MOV R6,R0 3512 p->pkt.uin=t->uin; \ 00000A88 0C0094E5 LDR R0,[R4, #+12] \ 00000A8C 000086E5 STR R0,[R6, #+0] 3513 p->pkt.type=T_SENDMSG; \ 00000A90 0200A0E3 MOV R0,#+2 \ 00000A94 B400C6E1 STRH R0,[R6, #+4] 3514 p->pkt.data_len=strlen(away_msg); \ 00000A98 0900A0E1 MOV R0,R9 \ 00000A9C 1B0000EF SWI +27 \ 00000AA0 B600C6E1 STRH R0,[R6, #+6] 3515 strcpy(p->data,away_msg); \ 00000AA4 0910A0E1 MOV R1,R9 \ 00000AA8 080086E2 ADD R0,R6,#+8 \ 00000AAC 1A0000EF SWI +26 3516 if(show_send_info) \ 00000AB0 70019FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 00000AB4 000090E5 LDR R0,[R0, #+0] \ 00000AB8 08D08DE2 ADD SP,SP,#+8 \ 00000ABC 000050E3 CMP R0,#+0 \ 00000AC0 680295E5 LDR R0,[R5, #+616] \ 00000AC4 010080E2 ADD R0,R0,#+1 \ 00000AC8 680285E5 STR R0,[R5, #+616] \ 00000ACC 0800000A BEQ ??CheckComand_36 3517 { 3518 #ifdef kluchnik 3519 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF,1); 3520 #else 3521 AddStringToLog(t,0x01,requests6,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000AD0 0110A0E3 MOV R1,#+1 \ 00000AD4 02002DE9 PUSH {R1} \ 00000AD8 60219FE5 LDR R2,??CheckComand_1+0x1C ;; screen3 + 248 \ 00000ADC 000008E0 AND R0,R8,R0 \ 00000AE0 01002DE9 PUSH {R0} \ 00000AE4 0730A0E1 MOV R3,R7 \ 00000AE8 0400A0E1 MOV R0,R4 \ 00000AEC ........ BL AddStringToLog \ 00000AF0 08D08DE2 ADD SP,SP,#+8 3522 #endif 3523 } 3524 else 3525 SENDMSGCOUNT++; 3526 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_36: \ 00000AF4 0620A0E1 MOV R2,R6 \ 00000AF8 95FEFFEA B ??CheckComand_17 3527 return; 3528 } 3529 /* else 3530 if((away_m==1 || t->isautomsg) && (t->automsgcount<=(automsgcount+3)) ) 3531 { 3532 t->awaysignal=0; 3533 t->automsgcount++; 3534 sprintf(away_msg,"Бля,ну русским ж языком написали,НЕТУ МЕНЯ!!!че по сто сообщений слать?тем более если тебе делать нех..."); 3535 if(show_send_info) 3536 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF,1); 3537 else 3538 SENDMSGCOUNT++; 3539 SendData(t,away_msg,ENA_SIGNAL,0); 3540 return; 3541 }*/ 3542 else 3543 if(away_m==1 || t->isautomsg) \ ??CheckComand_35: \ 00000AFC 010051E3 CMP R1,#+1 \ 00000B00 0100000A BEQ ??CheckComand_37 \ ??CheckComand_34: \ 00000B04 000050E3 CMP R0,#+0 \ 00000B08 0100000A BEQ ??CheckComand_38 3544 { 3545 t->automsgcount=automsgcount; \ ??CheckComand_37: \ 00000B0C 7C2084E5 STR R2,[R4, #+124] 3546 return; \ 00000B10 4FFEFFEA B ??CheckComand_13 3547 } 3548 3549 3550 //---------------------------------------------------------------------------// 3551 3552 3553 if(!strcmp(txt, "GET_URL_INFO") || !strcmp(txt, "__URL"))// by kluchnik 26.03.08 \ ??CheckComand_38: \ 00000B14 5C00A0E3 MOV R0,#+92 \ 00000B18 400E80E3 ORR R0,R0,#0x400 \ 00000B1C 061080E0 ADD R1,R0,R6 \ 00000B20 0B00A0E1 MOV R0,R11 \ 00000B24 190000EF SWI +25 \ 00000B28 000050E3 CMP R0,#+0 \ 00000B2C 0600000A BEQ ??CheckComand_39 \ 00000B30 6C00A0E3 MOV R0,#+108 \ 00000B34 400E80E3 ORR R0,R0,#0x400 \ 00000B38 061080E0 ADD R1,R0,R6 \ 00000B3C 0B00A0E1 MOV R0,R11 \ 00000B40 190000EF SWI +25 \ 00000B44 000050E3 CMP R0,#+0 \ 00000B48 3000001A BNE ??CheckComand_40 3554 { 3555 comanda=0; \ ??CheckComand_39: \ 00000B4C 189485E5 STR R9,[R5, #+1048] 3556 TPKT *p; 3557 3558 char *send_txt=malloc(256); \ 00000B50 400FA0E3 MOV R0,#+256 \ 00000B54 140000EF SWI +20 \ 00000B58 0090A0E1 MOV R9,R0 3559 sprintf(send_txt,"revision 2058, mod date: %s at %s ", 3560 "http://kluchnik.jino-net.ru/naticqmod/",__DATE__,__TIME__); \ 00000B5C 580086E2 ADD R0,R6,#+88 \ 00000B60 01002DE9 PUSH {R0} \ 00000B64 4C3086E2 ADD R3,R6,#+76 \ 00000B68 422E86E2 ADD R2,R6,#+1056 \ 00000B6C FF1F86E2 ADD R1,R6,#+1020 \ 00000B70 0900A0E1 MOV R0,R9 \ 00000B74 160000EF SWI +22 3561 3562 p=malloc(sizeof(PKT)+256); \ 00000B78 420FA0E3 MOV R0,#+264 \ 00000B7C 140000EF SWI +20 \ 00000B80 00B0A0E1 MOV R11,R0 3563 p->pkt.uin=t->uin; \ 00000B84 0C0094E5 LDR R0,[R4, #+12] \ 00000B88 00008BE5 STR R0,[R11, #+0] 3564 p->pkt.type=T_SENDMSG; \ 00000B8C 0200A0E3 MOV R0,#+2 \ 00000B90 B400CBE1 STRH R0,[R11, #+4] 3565 p->pkt.data_len=strlen(send_txt); \ 00000B94 0900A0E1 MOV R0,R9 \ 00000B98 1B0000EF SWI +27 \ 00000B9C B600CBE1 STRH R0,[R11, #+6] 3566 strcpy(p->data,send_txt); \ 00000BA0 0910A0E1 MOV R1,R9 \ 00000BA4 08008BE2 ADD R0,R11,#+8 \ 00000BA8 1A0000EF SWI +26 3567 if(show_send_info) \ 00000BAC 74009FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 00000BB0 000090E5 LDR R0,[R0, #+0] \ 00000BB4 04D08DE2 ADD SP,SP,#+4 \ 00000BB8 000050E3 CMP R0,#+0 \ 00000BBC 680295E5 LDR R0,[R5, #+616] \ 00000BC0 010080E2 ADD R0,R0,#+1 \ 00000BC4 680285E5 STR R0,[R5, #+616] \ 00000BC8 0A00000A BEQ ??CheckComand_41 3568 AddStringToLog(t,0x01,"Sending url info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000BCC 0110A0E3 MOV R1,#+1 \ 00000BD0 02002DE9 PUSH {R1} \ 00000BD4 000008E0 AND R0,R8,R0 \ 00000BD8 01002DE9 PUSH {R0} \ 00000BDC 0730A0E1 MOV R3,R7 \ 00000BE0 4800A0E3 MOV R0,#+72 \ 00000BE4 400E80E3 ORR R0,R0,#0x400 \ 00000BE8 062080E0 ADD R2,R0,R6 \ 00000BEC 0400A0E1 MOV R0,R4 \ 00000BF0 ........ BL AddStringToLog \ 00000BF4 08D08DE2 ADD SP,SP,#+8 3569 else 3570 SENDMSGCOUNT++; 3571 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_41: \ 00000BF8 0B20A0E1 MOV R2,R11 \ 00000BFC 0010A0E3 MOV R1,#+0 \ 00000C00 0A00A0E1 MOV R0,R10 \ 00000C04 710100EF SWI +369 3572 mfree(send_txt); \ 00000C08 0900A0E1 MOV R0,R9 \ 00000C0C 0FFEFFEA B ??CheckComand_9 3573 return; 3574 } 3575 3576 #ifdef kluchnik // не доступно для всех,потому что имхо,будет еще большая перегрузка серверов!!!а оно нам надо? 3577 if(t->isautobot) 3578 { 3579 TPKT *p; 3580 int i=LoadBotMessage(t->uin); 3581 if(i==0) return;//если нет никаких файлов то просто возвращаемся 3582 char *pp=bot_lines[t->bot_msg]; 3583 t->bot_msg++; 3584 if(t->bot_msg==i) 3585 t->bot_msg=0; 3586 p=malloc(sizeof(PKT)+strlen(pp)+1); 3587 p->pkt.uin=t->uin; 3588 p->pkt.type=T_SENDMSG; 3589 p->pkt.data_len=strlen(pp); 3590 strcpy(p->data,pp); 3591 AddStringToLog(t,0x01,pp,"Autobot",(++SENDMSGCOUNT)&0x7FFF,1); 3592 SUBPROC((void *)SendAnswer,0,p); 3593 return; 3594 } 3595 #endif 3596 3597 CheckComand2(txt,t); \ ??CheckComand_40: \ 00000C10 0410A0E1 MOV R1,R4 \ 00000C14 0B00A0E1 MOV R0,R11 \ 00000C18 ........ _BLF CheckComand2,??CheckComand2??rA 3598 } \ ??CheckComand_0: \ 00000C1C 8ADF8DE2 ADD SP,SP,#+552 ;; stack cleaning \ 00000C20 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CheckComand_1: \ 00000C24 ........ DC32 `?` \ 00000C28 ........ DC32 show_send_info \ 00000C2C ........ DC32 screen3 + 160 \ 00000C30 ........ DC32 screen3 + 184 \ 00000C34 ........ DC32 screen3 + 228 \ 00000C38 ........ DC32 screen3 + 204 \ 00000C3C ........ DC32 awayHelloMsg \ 00000C40 ........ DC32 screen3 + 248 3599 3600 //------------- Попап месаже для подключившегося контакта -----------// 3601 extern DYNPNGICONLIST *GetXSByItem(int curitem); 3602 char INC_Nick[32]; 3603 char show_nick[32]; 3604 int INC_show; 3605 3606 char onContact[64]; 3607 int INC_show2; 3608 GBSTMR incs2; 3609 extern void DrawScreenShot(); 3610 int pp_icon; 3611 int pp_xicon; \ In segment CODE, align 4, keep-with-next 3612 void show_on_contact() 3613 { \ show_on_contact: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 3614 if(INC_show2>0/* && !(IsGuiOnTop(maingui_id))*/) \ 00000004 ........ LDR R4,??DataTable154 ;; i_rc \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 200494E5 LDR R0,[R4, #+1056] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 F387BDB8 POPLT {R0,R1,R4-R10,PC} 3615 { 3616 WSHDR *ws=AllocWS(64); \ 00000018 4000A0E3 MOV R0,#+64 \ 0000001C 250100EF SWI +293 \ 00000020 0050A0E1 MOV R5,R0 3617 ascii2ws(ws,onContact); \ 00000024 BC00A0E3 MOV R0,#+188 \ 00000028 840D80E3 ORR R0,R0,#0x2100 \ 0000002C 041080E0 ADD R1,R0,R4 \ 00000030 0500A0E1 MOV R0,R5 \ 00000034 ........ _BLF ascii2ws,??ascii2ws??rA 3618 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] 3619 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 3620 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 3621 { 3622 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 3623 INC_show2-=2; \ 00000074 200494E5 LDR R0,[R4, #+1056] \ 00000078 020040E2 SUB R0,R0,#+2 \ 0000007C 010000EA B ??show_on_contact_2 3624 } 3625 else 3626 INC_show2--; \ ??show_on_contact_1: \ 00000080 200494E5 LDR R0,[R4, #+1056] \ 00000084 010040E2 SUB R0,R0,#+1 \ ??show_on_contact_2: \ 00000088 200484E5 STR R0,[R4, #+1056] 3627 3628 int x=0; \ 0000008C 240494E5 LDR R0,[R4, #+1060] \ 00000090 0060A0E3 MOV R6,#+0 \ 00000094 000184E0 ADD R0,R4,R0, LSL #+2 \ 00000098 080090E5 LDR R0,[R0, #+8] \ 0000009C 000050E3 CMP R0,#+0 3629 if(icons[pp_icon]) 3630 x=icons[pp_icon]->w; \ 000000A0 0060D015 LDRBNE R6,[R0, #+0] 3631 3632 if(pp_xicon!=0 && XStatusImg[pp_xicon]) \ 000000A4 280494E5 LDR R0,[R4, #+1064] \ 000000A8 000050E3 CMP R0,#+0 \ 000000AC 0400000A BEQ ??show_on_contact_3 \ 000000B0 000184E0 ADD R0,R4,R0, LSL #+2 \ 000000B4 2C0390E5 LDR R0,[R0, #+812] \ 000000B8 000050E3 CMP R0,#+0 3633 x+=XStatusImg[pp_xicon]->w; \ 000000BC 0000D015 LDRBNE R0,[R0, #+0] \ 000000C0 06608010 ADDNE R6,R0,R6 3634 3635 DrawRectangle(0,0,Get_WS_width(ws,PopupFont)+x+5,GetFontYSIZE(PopupFont)+5,0,PopupOnlineCl,PopupBGCl); \ ??show_on_contact_3: \ 000000C4 ........ LDR R0,??DataTable160 ;; 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,??DataTable162 ;; 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 240494E5 LDR R0,[R4, #+1060] \ 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 3636 3637 if(icons[pp_icon]) 3638 { 3639 DrwImage(icons[pp_icon],2,3); \ 0000012C 0320A0E3 MOV R2,#+3 \ 00000130 0210A0E3 MOV R1,#+2 \ 00000134 ........ BL DrwImage 3640 DrwImage(XStatusImg[pp_xicon],4+icons[pp_icon]->w,3); \ 00000138 240494E5 LDR R0,[R4, #+1060] \ 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 280494E5 LDR R0,[R4, #+1064] \ 00000154 000184E0 ADD R0,R4,R0, LSL #+2 \ 00000158 2C0390E5 LDR R0,[R0, #+812] \ 0000015C ........ BL DrwImage 3641 } 3642 3643 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 3644 FreeWS(ws); \ 000001B8 0500A0E1 MOV R0,R5 \ 000001BC 290100EF SWI +297 3645 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 FC00A0E3 MOV R0,#+252 \ 000001CC 840D80E3 ORR R0,R0,#0x2100 \ 000001D0 040080E0 ADD R0,R0,R4 \ 000001D4 4D0000EF SWI +77 \ 000001D8 14D08DE2 ADD SP,SP,#+20 3646 } 3647 } \ 000001DC F387BDE8 POP {R0,R1,R4-R10,PC} ;; return \ ??show_on_contact_0: \ 000001E0 ........ DC32 `?` \ 000001E4 ........ DC32 PopupOnlineCl \ 000001E8 ........ DC32 show_on_contact 3648 3649 char OffContact[64]; 3650 int INC_show3; 3651 GBSTMR incs3; 3652 3653 \ In segment CODE, align 4, keep-with-next 3654 void show_off_contact() 3655 { 3656 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} 3657 if(INC_show3>0) \ 00000018 ........ LDR R4,??DataTable164 ;; i_rc \ 0000001C 2C0494E5 LDR R0,[R4, #+1068] \ 00000020 010050E3 CMP R0,#+1 \ 00000024 F38FBDB8 POPLT {R0,R1,R4-R11,PC} 3658 { 3659 WSHDR *ws=AllocWS(64); \ 00000028 4000A0E3 MOV R0,#+64 \ 0000002C 250100EF SWI +293 \ 00000030 0050A0E1 MOV R5,R0 3660 ascii2ws(ws,OffContact); \ 00000034 0C00A0E3 MOV R0,#+12 \ 00000038 880D80E3 ORR R0,R0,#0x2200 \ 0000003C 041080E0 ADD R1,R0,R4 \ 00000040 0500A0E1 MOV R0,R5 \ 00000044 ........ _BLF ascii2ws,??ascii2ws??rA 3661 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] 3662 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 3663 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 3664 { 3665 DrawScreenShot(); \ 00000080 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 3666 INC_show3-=2; \ 00000084 2C0494E5 LDR R0,[R4, #+1068] \ 00000088 020040E2 SUB R0,R0,#+2 \ 0000008C 010000EA B ??show_off_contact_2 3667 } 3668 else 3669 INC_show3--; \ ??show_off_contact_1: \ 00000090 2C0494E5 LDR R0,[R4, #+1068] \ 00000094 010040E2 SUB R0,R0,#+1 3670 3671 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 2C0484E5 STR R0,[R4, #+1068] \ 000000A0 ........ LDR R0,??DataTable160 ;; 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 3672 3673 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 3674 3675 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 3676 FreeWS(ws); \ 000001A4 0500A0E1 MOV R0,R5 \ 000001A8 290100EF SWI +297 3677 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 4C00A0E3 MOV R0,#+76 \ 000001B8 880D80E3 ORR R0,R0,#0x2200 \ 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 3678 } 3679 } 3680 3681 //---------------------------- popup message ---------------------------// 3682 3683 \ In segment CODE, align 4, keep-with-next 3684 void show_pp_sender() 3685 { \ show_pp_sender: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3686 if(INC_show>0/* && !(IsGuiOnTop(maingui_id))*/) \ 00000004 ........ LDR R4,??DataTable164 ;; i_rc \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 1C0494E5 LDR R0,[R4, #+1052] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 F38FBDB8 POPLT {R0,R1,R4-R11,PC} 3687 { 3688 WSHDR *ws=AllocWS(256); \ 00000018 400FA0E3 MOV R0,#+256 \ 0000001C 250100EF SWI +293 \ 00000020 0050A0E1 MOV R5,R0 3689 ascii2ws(ws,show_nick); \ 00000024 9C00A0E3 MOV R0,#+156 \ 00000028 840D80E3 ORR R0,R0,#0x2100 \ 0000002C 041080E0 ADD R1,R0,R4 \ 00000030 0500A0E1 MOV R0,R5 \ 00000034 ........ _BLF ascii2ws,??ascii2ws??rA 3690 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] 3691 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 3692 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 3693 { 3694 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 3695 INC_show-=2; \ 00000074 1C0494E5 LDR R0,[R4, #+1052] \ 00000078 020040E2 SUB R0,R0,#+2 \ 0000007C 010000EA B ??show_pp_sender_2 3696 } 3697 else 3698 INC_show--; \ ??show_pp_sender_1: \ 00000080 1C0494E5 LDR R0,[R4, #+1052] \ 00000084 010040E2 SUB R0,R0,#+1 \ ??show_pp_sender_2: \ 00000088 1C0484E5 STR R0,[R4, #+1052] 3699 #ifdef NEWSGOLD 3700 DrawRectangle(0,0,Get_WS_width(ws,PopupFont)+6+GetImgWidth(NumStatusToIconBar + IS_MSG),GetFontYSIZE(PopupFont)+4,0,PopupMsgCl,PopupBGCl); \ 0000008C ........ LDR R0,??DataTable160 ;; 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,??DataTable161 ;; 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,??DataTable162 ;; 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 3701 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 3702 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 3703 #else 3704 DrawRectangle(0,0,Get_WS_width(ws,PopupFont)+2,GetFontYSIZE(PopupFont)+2,0,PopupBGCl,PopupBGCl); 3705 DrawString(ws,1,1,1+Get_WS_width(ws,PopupFont)+2,1+GetFontYSIZE(PopupFont),PopupFont,0,PopupMsgCl,GetPaletteAdrByColorIndex(23)); 3706 #endif 3707 FreeWS(ws); \ 00000174 0500A0E1 MOV R0,R5 \ 00000178 290100EF SWI +297 3708 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 8400A0E3 MOV R0,#+132 \ 00000188 800D80E3 ORR R0,R0,#0x2000 \ 0000018C 040080E0 ADD R0,R0,R4 \ 00000190 4D0000EF SWI +77 \ 00000194 20D08DE2 ADD SP,SP,#+32 3709 } 3710 } \ 00000198 F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??show_pp_sender_0: \ 0000019C ........ DC32 `?_2` \ 000001A0 ........ DC32 PopupMsgCl \ 000001A4 ........ DC32 show_pp_sender 3711 3712 3713 //----------------------------------------------------------------------------------------// 3714 3715 \ In segment CODE, align 4, keep-with-next 3716 void Get_Online_total() 3717 { 3718 CLIST *t; 3719 kopa_online=0; \ Get_Online_total: \ 00000000 ........ LDR R0,??DataTable164 ;; i_rc \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 001480E5 STR R1,[R0, #+1024] 3720 kopa_kontaktu=0; \ 0000000C 041480E5 STR R1,[R0, #+1028] 3721 t=(CLIST *)(&cltop); \ 00000010 FC1F80E2 ADD R1,R0,#+1008 \ 00000014 FF30A0E3 MOV R3,#+255 \ 00000018 FF3C83E3 ORR R3,R3,#0xFF00 \ 0000001C 0A0000EA B ??Get_Online_total_0 3722 while(t=(CLIST *)(t->next)) 3723 { 3724 if (!t->isgroup) \ ??Get_Online_total_1: \ 00000020 082091E5 LDR R2,[R1, #+8] \ 00000024 000052E3 CMP R2,#+0 \ 00000028 0700001A BNE ??Get_Online_total_0 3725 { 3726 kopa_online++; \ 0000002C 002490E5 LDR R2,[R0, #+1024] \ 00000030 012082E2 ADD R2,R2,#+1 \ 00000034 002480E5 STR R2,[R0, #+1024] 3727 if (t->state!=65535) kopa_kontaktu++; \ 00000038 B425D1E1 LDRH R2,[R1, #+84] \ 0000003C 030052E1 CMP R2,R3 \ 00000040 04249015 LDRNE R2,[R0, #+1028] \ 00000044 01208212 ADDNE R2,R2,#+1 \ 00000048 04248015 STRNE R2,[R0, #+1028] 3728 } 3729 } \ ??Get_Online_total_0: \ 0000004C 001091E5 LDR R1,[R1, #+0] \ 00000050 000051E3 CMP R1,#+0 \ 00000054 F1FFFF1A BNE ??Get_Online_total_1 3730 } \ 00000058 1EFF2FE1 BX LR ;; return 3731 3732 3733 //-------------------------------------------------------------------------------------------// 3734 3735 \ In segment CODE, align 4, keep-with-next 3736 void SetIndividStatus()//set to all contact to default vibra, sound and other by kluchnik 04.04.08 3737 { 3738 CLIST *t; 3739 t=(CLIST *)(&cltop); \ SetIndividStatus: \ 00000000 ........ LDR R0,??DataTable164 ;; i_rc \ 00000004 FC1F80E2 ADD R1,R0,#+1008 \ 00000008 0B0000EA B ??SetIndividStatus_0 3740 while(t=(CLIST *)(t->next)) 3741 { 3742 if (!t->isgroup) \ ??SetIndividStatus_1: \ 0000000C 082091E5 LDR R2,[R1, #+8] \ 00000010 000052E3 CMP R2,#+0 \ 00000014 0800001A BNE ??SetIndividStatus_0 3743 { 3744 t->isvibra=1; \ 00000018 0120A0E3 MOV R2,#+1 \ 0000001C 5C2081E5 STR R2,[R1, #+92] 3745 t->issound=1; \ 00000020 602081E5 STR R2,[R1, #+96] 3746 t->isShowXst=Show_XTX; \ 00000024 143390E5 LDR R3,[R0, #+788] \ 00000028 703081E5 STR R3,[R1, #+112] 3747 #ifdef kluchnik 3748 t->isLoadHistory=1; 3749 #endif 3750 t->signals=1; \ 0000002C 742081E5 STR R2,[R1, #+116] 3751 t->isaccess=1; \ 00000030 782081E5 STR R2,[R1, #+120] 3752 3753 t->automsgcount=0; \ 00000034 0020A0E3 MOV R2,#+0 \ 00000038 7C2081E5 STR R2,[R1, #+124] 3754 } 3755 } \ ??SetIndividStatus_0: \ 0000003C 001091E5 LDR R1,[R1, #+0] \ 00000040 000051E3 CMP R1,#+0 \ 00000044 F0FFFF1A BNE ??SetIndividStatus_1 3756 } \ 00000048 1EFF2FE1 BX LR ;; return 3757 3758 //-------------------------------------------------------------------------------------------// 3759 //int ShowLoadScreen=1; 3760 int curpos; 3761 \ In segment CODE, align 4, keep-with-next 3762 ProcessPacket(TPKT *p) 3763 { \ ProcessPacket: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 50DF4DE2 SUB SP,SP,#+320 3764 CLIST *t; 3765 LOGQ *q; 3766 char s[256]; 3767 switch(p->pkt.type) \ 00000008 ........ LDR R5,??DataTable165 ;; screen3 \ 0000000C ........ LDR R7,??DataTable183 ;; Canvas \ 00000010 ........ LDR R9,??DataTable185 ;; i_rc \ 00000014 0040A0E1 MOV R4,R0 \ 00000018 B410D4E1 LDRH R1,[R4, #+4] \ 0000001C 000094E5 LDR R0,[R4, #+0] \ 00000020 0260A0E3 MOV R6,#+2 \ 00000024 0180A0E3 MOV R8,#+1 \ 00000028 00A0A0E3 MOV R10,#+0 \ 0000002C 031041E2 SUB R1,R1,#+3 \ 00000030 1C0051E3 CMP R1,#+28 \ 00000034 E002008A BHI ??ProcessPacket_1 \ 00000038 022F8FE2 ADR R2,??ProcessPacket_0 \ 0000003C 8110A0E1 MOV R1,R1, LSL #+1 \ 00000040 B12092E1 LDRH R2,[R2, R1] \ 00000044 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??ProcessPacket_0: \ 00000048 58010E00DC02 DC16 +344,+14,+732,+732 \ DC02 \ 00000050 1100DC025200 DC16 +17,+732,+82,+732 \ DC02 \ 00000058 DC02DC02DC02 DC16 +732,+732,+732,+732 \ DC02 \ 00000060 DC023F023F02 DC16 +732,+575,+575,+732 \ DC02 \ 00000068 DC0242005000 DC16 +732,+66,+80,+732 \ DC02 \ 00000070 DC02DC027202 DC16 +732,+732,+626,+732 \ DC02 \ 00000078 DC02DC02DC02 DC16 +732,+732,+732,+732 \ DC02 \ 00000080 DA020000 DC16 +730,+0 3768 { 3769 case T_LOGIN: 3770 set_my_status(); \ ??ProcessPacket_2: \ 00000084 ........ BL set_my_status 3771 set_my_xstatus(); \ 00000088 ........ BL set_my_xstatus \ 0000008C CA0200EA B ??ProcessPacket_1 3772 break; 3773 case T_CLENTRY: 3774 if (p->pkt.uin) \ ??ProcessPacket_3: \ 00000090 000050E3 CMP R0,#+0 \ 00000094 1800000A BEQ ??ProcessPacket_4 3775 { 3776 if ((t=FindContactByUin(p->pkt.uin))) \ 00000098 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 0000009C 00B0B0E1 MOVS R11,R0 \ 000000A0 0E00000A BEQ ??ProcessPacket_5 3777 { 3778 // t->state=0xFFFF; 3779 if (!t->local) strncpy(t->name,p->data,63); \ 000000A4 B4009BE5 LDR R0,[R11, #+180] \ 000000A8 000050E3 CMP R0,#+0 \ 000000AC 0300001A BNE ??ProcessPacket_6 \ 000000B0 3F20A0E3 MOV R2,#+63 \ 000000B4 081084E2 ADD R1,R4,#+8 \ 000000B8 14008BE2 ADD R0,R11,#+20 \ 000000BC 160100EF SWI +278 3780 t->group=GROUP_CACHE; \ ??ProcessPacket_6: \ 000000C0 F40399E5 LDR R0,[R9, #+1012] \ 000000C4 10008BE5 STR R0,[R11, #+16] 3781 ChangeContactPos(t); \ ??ProcessPacket_7: \ 000000C8 0B00A0E1 MOV R0,R11 \ 000000CC ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3782 RecountMenu(t,1); \ 000000D0 0110A0E3 MOV R1,#+1 \ 000000D4 0B00A0E1 MOV R0,R11 \ ??ProcessPacket_8: \ 000000D8 ........ BL RecountMenu \ 000000DC B60200EA B ??ProcessPacket_1 3783 } 3784 else 3785 { 3786 RecountMenu(AddContact(p->pkt.uin,p->data, GROUP_CACHE, 0),1); \ ??ProcessPacket_5: \ 000000E0 F42399E5 LDR R2,[R9, #+1012] \ 000000E4 000094E5 LDR R0,[R4, #+0] \ 000000E8 0030A0E3 MOV R3,#+0 \ 000000EC 081084E2 ADD R1,R4,#+8 \ 000000F0 ........ _BLF AddContact,??AddContact??rA \ 000000F4 0810A0E1 MOV R1,R8 \ 000000F8 F6FFFFEA B ??ProcessPacket_8 3787 } 3788 } 3789 else 3790 { 3791 if(VIBR_ON_CONNECT) \ ??ProcessPacket_4: \ 000000FC ........ LDR R0,??DataTable168 ;; VIBR_ON_CONNECT \ 00000100 000090E5 LDR R0,[R0, #+0] \ 00000104 000050E3 CMP R0,#+0 \ 00000108 0100000A BEQ ??ProcessPacket_9 3792 { 3793 vibra_count=1; \ 0000010C D08389E5 STR R8,[R9, #+976] 3794 start_vibra(); \ 00000110 ........ BL start_vibra 3795 } 3796 GROUP_CACHE=0; \ ??ProcessPacket_9: \ 00000114 F4A389E5 STR R10,[R9, #+1012] 3797 ask_my_info(); 3798 if (ShowLoadScreen==0 && maingui_id/*contactlist_menu_id*/) \ 00000118 500095E5 LDR R0,[R5, #+80] \ 0000011C 000050E3 CMP R0,#+0 \ 00000120 0500001A BNE ??ProcessPacket_10 \ 00000124 600299E5 LDR R0,[R9, #+608] \ 00000128 000050E3 CMP R0,#+0 \ 0000012C 0200000A BEQ ??ProcessPacket_10 3799 { 3800 RecountMenu(NULL,1); \ 00000130 0110A0E3 MOV R1,#+1 \ 00000134 0A00A0E1 MOV R0,R10 \ ??ProcessPacket_11: \ 00000138 E6FFFFEA B ??ProcessPacket_8 3801 } 3802 else 3803 { 3804 SetIndividStatus(); \ ??ProcessPacket_10: \ 0000013C ........ BL SetIndividStatus 3805 if(ShowLoadScreen) ShowLoadScreen=0; \ 00000140 500095E5 LDR R0,[R5, #+80] \ 00000144 000050E3 CMP R0,#+0 \ 00000148 50A08515 STRNE R10,[R5, #+80] 3806 SMART_REDRAW(); \ 0000014C ........ BL SMART_REDRAW \ 00000150 990200EA B ??ProcessPacket_1 3807 } 3808 } 3809 break; 3810 case T_GROUPID: 3811 if (t=FindGroupByID(GROUP_CACHE=p->pkt.uin)) \ ??ProcessPacket_12: \ 00000154 F40389E5 STR R0,[R9, #+1012] \ 00000158 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 0000015C 00B0B0E1 MOVS R11,R0 \ 00000160 0400000A BEQ ??ProcessPacket_13 3812 { 3813 strncpy(t->name,p->data,63); \ 00000164 3F20A0E3 MOV R2,#+63 \ 00000168 081084E2 ADD R1,R4,#+8 \ 0000016C 14008BE2 ADD R0,R11,#+20 \ 00000170 160100EF SWI +278 3814 ChangeContactPos(t); \ 00000174 D3FFFFEA B ??ProcessPacket_7 3815 RecountMenu(t,1); 3816 } 3817 else 3818 { 3819 RecountMenu(AddGroup(p->pkt.uin,p->data),1); \ ??ProcessPacket_13: \ 00000178 000094E5 LDR R0,[R4, #+0] \ 0000017C 081084E2 ADD R1,R4,#+8 \ 00000180 ........ _BLF AddGroup,??AddGroup??rA \ 00000184 0110A0E3 MOV R1,#+1 \ 00000188 D2FFFFEA B ??ProcessPacket_8 3820 } 3821 break; 3822 case T_GROUPFOLLOW: 3823 GROUP_CACHE=p->pkt.uin; \ ??ProcessPacket_14: \ 0000018C F40389E5 STR R0,[R9, #+1012] \ 00000190 890200EA B ??ProcessPacket_1 3824 break; 3825 case T_STATUSCHANGE: 3826 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_15: \ 00000194 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000198 00B0B0E1 MOVS R11,R0 3827 if (t) \ 0000019C 8602000A BEQ ??ProcessPacket_1 3828 { 3829 int i=t->state; \ 000001A0 B415DBE1 LDRH R1,[R11, #+84] \ 000001A4 04108DE5 STR R1,[SP, #+4] \ 000001A8 0A00D4E5 LDRB R0,[R4, #+10] \ 000001AC B615DBE1 LDRH R1,[R11, #+86] \ 000001B0 000051E1 CMP R1,R0 \ 000001B4 1D00000A BEQ ??ProcessPacket_16 3830 // CLIST *oldt=NULL; 3831 if (t->xstate!=p->data[2]) // Если картинка икс статуса сменилась 3832 { 3833 t->xstate=p->data[2]; \ 000001B8 B605CBE1 STRH R0,[R11, #+86] 3834 FreeXText(t); \ 000001BC 0B00A0E1 MOV R0,R11 \ 000001C0 ........ _BLF FreeXText,??FreeXText??rA 3835 if (t->xstate && ENA_AUTO_XTXT) // Если установлен икс статус и можно запрашивать по смене икс статуса :) \ 000001C4 B605DBE1 LDRH R0,[R11, #+86] \ 000001C8 000050E3 CMP R0,#+0 \ 000001CC 1600000A BEQ ??ProcessPacket_17 \ 000001D0 F8099FE5 LDR R0,??ProcessPacket_18+0x4 ;; ENA_AUTO_XTXT \ 000001D4 000090E5 LDR R0,[R0, #+0] \ 000001D8 000050E3 CMP R0,#+0 \ 000001DC 1200000A BEQ ??ProcessPacket_17 3836 { 3837 t->req_xtext=1; \ 000001E0 B0808BE5 STR R8,[R11, #+176] 3838 if (edchat_id) // Если открыт чат \ 000001E4 F80399E5 LDR R0,[R9, #+1016] \ 000001E8 000050E3 CMP R0,#+0 \ 000001EC 0F00000A BEQ ??ProcessPacket_16 3839 { 3840 void *data=FindGUIbyId(edchat_id,NULL); \ 000001F0 F80399E5 LDR R0,[R9, #+1016] \ 000001F4 0010A0E3 MOV R1,#+0 \ 000001F8 090200EF SWI +521 3841 if (data) \ 000001FC 000050E3 CMP R0,#+0 \ 00000200 0A00000A BEQ ??ProcessPacket_16 3842 { 3843 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 00000204 DF0100EF SWI +479 3844 if (ed_struct) \ 00000208 000050E3 CMP R0,#+0 \ 0000020C 0700000A BEQ ??ProcessPacket_16 3845 { 3846 if (ed_struct->ed_contact==t) // Если наш чат то запрашиваем текст статуса \ 00000210 000090E5 LDR R0,[R0, #+0] \ 00000214 0B0050E1 CMP R0,R11 \ 00000218 0400001A BNE ??ProcessPacket_16 3847 { 3848 t->req_xtext=0; \ 0000021C B0A08BE5 STR R10,[R11, #+176] 3849 RequestXText(t->uin); \ 00000220 0C009BE5 LDR R0,[R11, #+12] \ 00000224 ........ BL RequestXText \ 00000228 000000EA B ??ProcessPacket_16 3850 } 3851 } 3852 } 3853 } 3854 } 3855 else // Если икс статус не установлен то на всякий случай снимаем флаг получения текста 3856 { 3857 t->req_xtext=0; \ ??ProcessPacket_17: \ 0000022C B0A08BE5 STR R10,[R11, #+176] \ ??ProcessPacket_16: \ 00000230 B405DBE1 LDRH R0,[R11, #+84] \ 00000234 FF10A0E3 MOV R1,#+255 \ 00000238 FF1C81E3 ORR R1,R1,#0xFF00 \ 0000023C 010050E1 CMP R0,R1 3858 } 3859 }/* 3860 if (contactlist_menu_id) 3861 { 3862 // oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); 3863 oldt=FindContactByN(curpos); 3864 }*/ 3865 if(t->state==65535) t->change=1; \ 00000240 80808B05 STREQ R8,[R11, #+128] 3866 t->state=*((unsigned short *)(p->data)); \ 00000244 B800D4E1 LDRH R0,[R4, #+8] \ 00000248 B405CBE1 STRH R0,[R11, #+84] 3867 if((t->state!=65535)&&(t->change==1)) \ 0000024C 010050E1 CMP R0,R1 \ 00000250 0400000A BEQ ??ProcessPacket_19 \ 00000254 80009BE5 LDR R0,[R11, #+128] \ 00000258 010050E3 CMP R0,#+1 3868 { 3869 t->just_now=2; \ 0000025C 68608B05 STREQ R6,[R11, #+104] 3870 t->change=0; \ 00000260 80A08B05 STREQ R10,[R11, #+128] 3871 RefreshJustNow(); \ 00000264 28808505 STREQ R8,[R5, #+40] 3872 } 3873 3874 LogStatusChange(t); \ ??ProcessPacket_19: \ 00000268 0B00A0E1 MOV R0,R11 \ 0000026C ........ _BLF LogStatusChange,??LogStatusChange??rA 3875 LogStatusChange2(t);//пишем лог templates\\logs.txt \ 00000270 0B00A0E1 MOV R0,R11 \ 00000274 ........ _BLF LogStatusChange2,??LogStatusChange2??rA 3876 3877 ChangeContactPos(t); \ 00000278 0B00A0E1 MOV R0,R11 \ 0000027C ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3878 // RecountMenu(oldt,1); 3879 3880 if(isLogStatusChange)//isLogStatusChange // by kluchnik 05.04.08 \ 00000280 ........ LDR R0,??DataTable169 ;; isLogStatusChange \ 00000284 000090E5 LDR R0,[R0, #+0] \ 00000288 000050E3 CMP R0,#+0 \ 0000028C 2B00000A BEQ ??ProcessPacket_20 3881 { 3882 char *s=GetStatusByIconIndex(GetIconIndex(t)); \ 00000290 0B00A0E1 MOV R0,R11 \ 00000294 ........ BL GetIconIndex \ 00000298 ........ BL GetStatusByIconIndex \ 0000029C 00008DE5 STR R0,[SP, #+0] 3883 FreeXText2(t); \ 000002A0 0B00A0E1 MOV R0,R11 \ 000002A4 ........ BL FreeXText2 3884 TTime time; 3885 GetDateTime(NULL,&time); \ 000002A8 0C108DE2 ADD R1,SP,#+12 \ 000002AC 0000A0E3 MOV R0,#+0 \ 000002B0 B40000EF SWI +180 3886 char *txt=malloc(64); \ 000002B4 4000A0E3 MOV R0,#+64 \ 000002B8 140000EF SWI +20 \ 000002BC 0060A0E1 MOV R6,R0 3887 sprintf(txt," %s: %02d:%02d:%02d",s,time.hour,time.min,time.sec); \ 000002C0 0E00DDE5 LDRB R0,[SP, #+14] \ 000002C4 791F87E2 ADD R1,R7,#+484 \ 000002C8 01002DE9 PUSH {R0} \ 000002CC 1100DDE5 LDRB R0,[SP, #+17] \ 000002D0 01002DE9 PUSH {R0} \ 000002D4 1430DDE5 LDRB R3,[SP, #+20] \ 000002D8 08209DE5 LDR R2,[SP, #+8] \ 000002DC 0600A0E1 MOV R0,R6 \ 000002E0 160000EF SWI +22 3888 t->xtext2=malloc(64); \ 000002E4 4000A0E3 MOV R0,#+64 \ 000002E8 140000EF SWI +20 \ 000002EC AC008BE5 STR R0,[R11, #+172] 3889 snprintf(t->xtext2,64,txt); \ 000002F0 0620A0E1 MOV R2,R6 \ 000002F4 4010A0E3 MOV R1,#+64 \ 000002F8 1B0100EF SWI +283 3890 AddStringToLog(t,0x03,txt,"Status change",0xFFFFFFFF, 0); \ 000002FC 0A00A0E1 MOV R0,R10 \ 00000300 01002DE9 PUSH {R0} \ 00000304 7E3F87E2 ADD R3,R7,#+504 \ 00000308 0620A0E1 MOV R2,R6 \ 0000030C 0310A0E3 MOV R1,#+3 \ 00000310 0000E0E1 MVN R0,R0 \ 00000314 01002DE9 PUSH {R0} \ 00000318 0B00A0E1 MOV R0,R11 \ 0000031C ........ BL AddStringToLog 3891 ReqAddMsgToChat(t); \ 00000320 0B00A0E1 MOV R0,R11 \ 00000324 ........ BL ReqAddMsgToChat 3892 RecountMenu(NULL, 0); \ 00000328 0A10A0E1 MOV R1,R10 \ 0000032C 0100A0E1 MOV R0,R1 \ 00000330 ........ BL RecountMenu 3893 mfree(txt); \ 00000334 0600A0E1 MOV R0,R6 \ 00000338 150000EF SWI +21 \ 0000033C 10D08DE2 ADD SP,SP,#+16 3894 } 3895 3896 if ((t->state!=0xFFFF)&&(i==0xFFFF))//Звук \ ??ProcessPacket_20: \ 00000340 B405DBE1 LDRH R0,[R11, #+84] \ 00000344 88689FE5 LDR R6,??ProcessPacket_18+0x8 ;; PopupOnlineString \ 00000348 0820A0E3 MOV R2,#+8 \ 0000034C 782D82E3 ORR R2,R2,#0x1E00 \ 00000350 092082E0 ADD R2,R2,R9 \ 00000354 08208DE5 STR R2,[SP, #+8] \ 00000358 FF10A0E3 MOV R1,#+255 \ 0000035C FF1C81E3 ORR R1,R1,#0xFF00 \ 00000360 010050E1 CMP R0,R1 \ 00000364 6400000A BEQ ??ProcessPacket_21 \ 00000368 04109DE5 LDR R1,[SP, #+4] \ 0000036C FF20A0E3 MOV R2,#+255 \ 00000370 FF2C82E3 ORR R2,R2,#0xFF00 \ 00000374 020051E1 CMP R1,R2 \ 00000378 5F00001A BNE ??ProcessPacket_21 3897 { 3898 if(Is_INC_On && (PopupShow==2 || PopupShow==3)) \ 0000037C 4C0299E5 LDR R0,[R9, #+588] \ 00000380 000050E3 CMP R0,#+0 \ 00000384 2900000A BEQ ??ProcessPacket_22 \ 00000388 48089FE5 LDR R0,??ProcessPacket_18+0xC ;; PopupShow \ 0000038C 000090E5 LDR R0,[R0, #+0] \ 00000390 020050E3 CMP R0,#+2 \ 00000394 03005013 CMPNE R0,#+3 \ 00000398 2400001A BNE ??ProcessPacket_22 3899 { 3900 INC_show2=20; \ 0000039C 1400A0E3 MOV R0,#+20 \ 000003A0 200489E5 STR R0,[R9, #+1056] 3901 INC_show3=0; \ 000003A4 2CA489E5 STR R10,[R9, #+1068] 3902 3903 pp_icon=GetIconIndex(t); \ 000003A8 0B00A0E1 MOV R0,R11 \ 000003AC ........ BL GetIconIndex \ 000003B0 240489E5 STR R0,[R9, #+1060] 3904 pp_xicon=t->xstate; \ 000003B4 B605DBE1 LDRH R0,[R11, #+86] 3905 3906 sprintf(onContact,PopupOnlineString,t->name); \ 000003B8 14208BE2 ADD R2,R11,#+20 \ 000003BC 0610A0E1 MOV R1,R6 \ 000003C0 280489E5 STR R0,[R9, #+1064] \ 000003C4 BC00A0E3 MOV R0,#+188 \ 000003C8 840D80E3 ORR R0,R0,#0x2100 \ 000003CC 090080E0 ADD R0,R0,R9 \ 000003D0 160000EF SWI +22 3907 sprintf(on_off_buf,"[%s: %s]\n",t->xtext2+1,t->name); \ 000003D4 AC009BE5 LDR R0,[R11, #+172] \ 000003D8 14308BE2 ADD R3,R11,#+20 \ 000003DC 012080E2 ADD R2,R0,#+1 \ 000003E0 08009DE5 LDR R0,[SP, #+8] \ 000003E4 821F87E2 ADD R1,R7,#+520 \ 000003E8 160000EF SWI +22 3908 on_off_timer=ON_OFF_TIME; \ 000003EC E8079FE5 LDR R0,??ProcessPacket_18+0x10 ;; ON_OFF_TIME \ 000003F0 000090E5 LDR R0,[R0, #+0] \ 000003F4 400085E5 STR R0,[R5, #+64] 3909 // UpdateCLheader(); 3910 show_on_contact(); \ 000003F8 ........ BL show_on_contact 3911 if(IllByONCantact) \ 000003FC DC079FE5 LDR R0,??ProcessPacket_18+0x14 ;; IllByONCantact \ 00000400 000090E5 LDR R0,[R0, #+0] \ 00000404 000050E3 CMP R0,#+0 \ 00000408 0C00000A BEQ ??ProcessPacket_23 3912 IlluminationOn(ILL_DISP_SEND,0,ILL_SEND_TMR,ILL_RECV_FADE); \ 0000040C D0079FE5 LDR R0,??ProcessPacket_18+0x18 ;; ILL_RECV_FADE \ 00000410 0010A0E3 MOV R1,#+0 \ 00000414 003090E5 LDR R3,[R0, #+0] \ 00000418 C8079FE5 LDR R0,??ProcessPacket_18+0x1C ;; ILL_SEND_TMR \ 0000041C 002090E5 LDR R2,[R0, #+0] \ 00000420 C4079FE5 LDR R0,??ProcessPacket_18+0x20 ;; ILL_DISP_SEND \ 00000424 000090E5 LDR R0,[R0, #+0] \ 00000428 ........ BL IlluminationOn \ 0000042C 030000EA B ??ProcessPacket_23 3913 // IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); 3914 } 3915 else 3916 GBS_DelTimer(&incs2);//на всяк \ ??ProcessPacket_22: \ 00000430 FC00A0E3 MOV R0,#+252 \ 00000434 840D80E3 ORR R0,R0,#0x2100 \ 00000438 090080E0 ADD R0,R0,R9 \ 0000043C 8C0100EF SWI +396 3917 if(!extended_sounds) \ ??ProcessPacket_23: \ 00000440 ........ LDR R0,??DataTable170 ;; extended_sounds \ 00000444 A4679FE5 LDR R6,??ProcessPacket_18+0x24 ;; sndGlobal \ 00000448 000090E5 LDR R0,[R0, #+0] \ 0000044C 000050E3 CMP R0,#+0 \ 00000450 0200001A BNE ??ProcessPacket_24 3918 { 3919 Play(sndGlobal); \ 00000454 0600A0E1 MOV R0,R6 \ 00000458 ........ BL Play \ 0000045C 420000EA B ??ProcessPacket_25 3920 } 3921 else 3922 { 3923 FSTATS stat; 3924 int fsize; 3925 unsigned int ul = 0; \ ??ProcessPacket_24: \ 00000460 14A08DE5 STR R10,[SP, #+20] 3926 uins=t->uin; \ 00000464 0C009BE5 LDR R0,[R11, #+12] \ 00000468 380289E5 STR R0,[R9, #+568] 3927 char ext[4]; 3928 // __root const CFG_CBOX_ITEM cfgcbox18_3_2[2]={"Mp3","Wav","Amr"}; 3929 switch(ext_type_sounds) \ 0000046C ........ LDR R0,??DataTable171 ;; ext_type_sounds \ 00000470 000090E5 LDR R0,[R0, #+0] \ 00000474 010050E2 SUBS R0,R0,#+1 \ 00000478 0300000A BEQ ??ProcessPacket_26 \ 0000047C 010050E2 SUBS R0,R0,#+1 \ 00000480 9C208502 ADDEQ R2,R5,#+156 3930 { 3931 case 0: sprintf(ext,percent_s,mp3); break; \ 00000484 94208512 ADDNE R2,R5,#+148 \ 00000488 000000EA B ??ProcessPacket_27 3932 case 1: sprintf(ext,percent_s,wav); break; \ ??ProcessPacket_26: \ 0000048C 982085E2 ADD R2,R5,#+152 \ ??ProcessPacket_27: \ 00000490 081087E2 ADD R1,R7,#+8 \ 00000494 0D00A0E1 MOV R0,SP \ 00000498 160000EF SWI +22 3933 case 2: sprintf(ext,percent_s,amr); break; 3934 default : sprintf(ext,percent_s,mp3); break; 3935 } 3936 sprintf(talk_sound, sds, sndGlobal2, uins,ext); \ 0000049C 50279FE5 LDR R2,??ProcessPacket_18+0x28 ;; sndGlobal2 \ 000004A0 0D00A0E1 MOV R0,SP \ 000004A4 01002DE9 PUSH {R0} \ 000004A8 383299E5 LDR R3,[R9, #+568] \ 000004AC 6B7EA0E3 MOV R7,#+1712 \ 000004B0 8C1085E2 ADD R1,R5,#+140 \ 000004B4 090087E0 ADD R0,R7,R9 \ 000004B8 160000EF SWI +22 3937 GetFileStats(talk_sound,&stat,&ul); \ 000004BC 18208DE2 ADD R2,SP,#+24 \ 000004C0 471F8DE2 ADD R1,SP,#+284 \ 000004C4 090087E0 ADD R0,R7,R9 \ 000004C8 840000EF SWI +132 3938 fsize=stat.size; 3939 if(fsize>0) \ 000004CC 20019DE5 LDR R0,[SP, #+288] \ 000004D0 04D08DE2 ADD SP,SP,#+4 \ 000004D4 010050E3 CMP R0,#+1 3940 Play(talk_sound); \ 000004D8 090087A0 ADDGE R0,R7,R9 3941 else 3942 Play(sndGlobal); \ 000004DC 0600A0B1 MOVLT R0,R6 \ 000004E0 ........ BL Play 3943 t->isvibra=1; \ 000004E4 5C808BE5 STR R8,[R11, #+92] 3944 t->issound=1; \ 000004E8 60808BE5 STR R8,[R11, #+96] 3945 t->isShowXst=Show_XTX; \ 000004EC 140399E5 LDR R0,[R9, #+788] \ 000004F0 70008BE5 STR R0,[R11, #+112] 3946 #ifdef kluchnik 3947 t->isLoadHistory=1; 3948 #endif 3949 t->signals=1; \ 000004F4 74808BE5 STR R8,[R11, #+116] \ 000004F8 1B0000EA B ??ProcessPacket_25 3950 } 3951 } 3952 3953 if ((i!=0xFFFF)&&(t->state==0xFFFF))//Звук \ ??ProcessPacket_21: \ 000004FC 04109DE5 LDR R1,[SP, #+4] \ 00000500 FF20A0E3 MOV R2,#+255 \ 00000504 FF2C82E3 ORR R2,R2,#0xFF00 \ 00000508 020051E1 CMP R1,R2 \ 0000050C 1600000A BEQ ??ProcessPacket_25 \ 00000510 020050E1 CMP R0,R2 \ 00000514 1400001A BNE ??ProcessPacket_25 3954 { 3955 Play(sndSrvMsg); \ 00000518 D8069FE5 LDR R0,??ProcessPacket_18+0x2C ;; sndSrvMsg \ 0000051C ........ BL Play 3956 3957 INC_show3=20; \ 00000520 1400A0E3 MOV R0,#+20 \ 00000524 2C0489E5 STR R0,[R9, #+1068] 3958 sprintf(OffContact,PopupOnlineString,t->name); \ 00000528 14208BE2 ADD R2,R11,#+20 \ 0000052C 0610A0E1 MOV R1,R6 \ 00000530 0C00A0E3 MOV R0,#+12 \ 00000534 880D80E3 ORR R0,R0,#0x2200 \ 00000538 090080E0 ADD R0,R0,R9 \ 0000053C 160000EF SWI +22 3959 show_off_contact(); \ 00000540 ........ BL show_off_contact 3960 3961 //if(TIME_OR_MSG==2 || TIME_OR_MSG==3 | TIME_OR_MSG==4) 3962 Get_Online_total(); \ 00000544 ........ BL Get_Online_total 3963 3964 sprintf(on_off_buf,"[%s: %s]\n",t->xtext2+1,t->name); \ 00000548 AC009BE5 LDR R0,[R11, #+172] \ 0000054C 14308BE2 ADD R3,R11,#+20 \ 00000550 012080E2 ADD R2,R0,#+1 \ 00000554 08009DE5 LDR R0,[SP, #+8] \ 00000558 821F87E2 ADD R1,R7,#+520 \ 0000055C 160000EF SWI +22 3965 on_off_timer=ON_OFF_TIME; \ 00000560 74069FE5 LDR R0,??ProcessPacket_18+0x10 ;; ON_OFF_TIME \ 00000564 000090E5 LDR R0,[R0, #+0] \ 00000568 400085E5 STR R0,[R5, #+64] 3966 // UpdateCLheader(); 3967 } 3968 3969 if (edchat_id) \ ??ProcessPacket_25: \ 0000056C F80399E5 LDR R0,[R9, #+1016] \ 00000570 000050E3 CMP R0,#+0 \ 00000574 0A00000A BEQ ??ProcessPacket_28 3970 { 3971 void *data=FindGUIbyId(edchat_id,NULL); \ 00000578 F80399E5 LDR R0,[R9, #+1016] \ 0000057C 0010A0E3 MOV R1,#+0 \ 00000580 090200EF SWI +521 3972 { 3973 EDCHAT_STRUCT *ed_struct; 3974 ed_struct=EDIT_GetUserPointer(data); \ 00000584 DF0100EF SWI +479 3975 if (ed_struct) \ 00000588 000050E3 CMP R0,#+0 \ 0000058C 0400000A BEQ ??ProcessPacket_28 3976 { 3977 if (ed_struct->ed_contact==t) \ 00000590 000090E5 LDR R0,[R0, #+0] \ 00000594 0B0050E1 CMP R0,R11 \ 00000598 0100001A BNE ??ProcessPacket_28 3978 { 3979 DirectRedrawGUI_ID(edchat_id); \ 0000059C F80399E5 LDR R0,[R9, #+1016] \ 000005A0 400100EF SWI +320 3980 } 3981 } 3982 } 3983 } 3984 RefreshCL(); \ ??ProcessPacket_28: \ 000005A4 248085E5 STR R8,[R5, #+36] \ 000005A8 830100EA B ??ProcessPacket_1 3985 } 3986 break; 3987 case T_RECVMSG: 3988 NEW_MSG=1; \ ??ProcessPacket_29: \ 000005AC 108489E5 STR R8,[R9, #+1040] 3989 t=FindContactByUin(p->pkt.uin); \ 000005B0 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000005B4 00B0B0E1 MOVS R11,R0 3990 if (!t)//если не в списке \ 000005B8 0A00001A BNE ??ProcessPacket_30 3991 { 3992 sprintf(s,percent_d,p->pkt.uin); \ 000005BC 002094E5 LDR R2,[R4, #+0] \ 000005C0 0B1087E2 ADD R1,R7,#+11 \ 000005C4 18008DE2 ADD R0,SP,#+24 \ 000005C8 160000EF SWI +22 3993 t=AddContact(p->pkt.uin,s,GROUP_CACHE,0); \ 000005CC F42399E5 LDR R2,[R9, #+1012] \ 000005D0 000094E5 LDR R0,[R4, #+0] \ 000005D4 0030A0E3 MOV R3,#+0 \ 000005D8 18108DE2 ADD R1,SP,#+24 \ 000005DC ........ _BLF AddContact,??AddContact??rA \ 000005E0 00B0A0E1 MOV R11,R0 3994 CreateCLFile();//добавляем в local.cl.... \ 000005E4 ........ BL CreateCLFile 3995 } 3996 #ifdef kluchnik 3997 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: \ 00000614 8410A0E3 MOV R1,#+132 \ 00000618 801D81E3 ORR R1,R1,#0x2000 \ 0000061C 091081E0 ADD R1,R1,R9 \ 00000620 00108DE5 STR R1,[SP, #+0] \ 00000624 1400DBE5 LDRB R0,[R11, #+20] \ 00000628 230050E3 CMP R0,#+35 \ 0000062C 1700001A BNE ??ProcessPacket_32 4004 { 4005 //Если это конференция, патчим имя 4006 char *s=strchr(p->data,'>'); \ 00000630 3E10A0E3 MOV R1,#+62 \ 00000634 080084E2 ADD R0,R4,#+8 \ 00000638 180000EF SWI +24 4007 //Если нашли символ > и после него пробел и ник короче 16 символов 4008 if (s) \ 0000063C 000050E3 CMP R0,#+0 \ 00000640 1200000A BEQ ??ProcessPacket_32 4009 { 4010 if ((s[1]==' ')&&((s-p->data)<16)) \ 00000644 0110D0E5 LDRB R1,[R0, #+1] \ 00000648 200051E3 CMP R1,#+32 \ 0000064C 0F00001A BNE ??ProcessPacket_32 \ 00000650 081084E2 ADD R1,R4,#+8 \ 00000654 011040E0 SUB R1,R0,R1 \ 00000658 100051E3 CMP R1,#+16 \ 0000065C 0B0000AA BGE ??ProcessPacket_32 4011 { 4012 *s=0; //Режем строку \ 00000660 00A0C0E5 STRB R10,[R0, #+0] 4013 AddStringToLog(t,0x02,s+2,p->data,0xFFFFFFFF,1); //Добавляем имя из текста сообщения \ 00000664 0110A0E3 MOV R1,#+1 \ 00000668 02002DE9 PUSH {R1} \ 0000066C 083084E2 ADD R3,R4,#+8 \ 00000670 022080E2 ADD R2,R0,#+2 \ 00000674 0B00A0E1 MOV R0,R11 \ 00000678 001061E2 RSB R1,R1,#+0 \ 0000067C 02002DE9 PUSH {R1} \ 00000680 0610A0E1 MOV R1,R6 \ 00000684 ........ BL AddStringToLog 4014 goto L1; \ 00000688 08D08DE2 ADD SP,SP,#+8 \ 0000068C 780000EA B ??ProcessPacket_33 4015 } 4016 } 4017 } 4018 4019 //=================== tas bus jautri ===================// 4020 4021 comanda=1; \ ??ProcessPacket_32: \ 00000690 188489E5 STR R8,[R9, #+1048] 4022 #ifdef DEBUG1 4023 comanda=1; 4024 4025 if(SHOW_ACTIVE) 4026 t->isactive=ACTIVE_TIME; 4027 if(VIBR_TYPE) 4028 vibra_count=2; 4029 else 4030 vibra_count=1; 4031 4032 start_vibra(); 4033 4034 #ifdef ELKA 4035 if(SLI_TYPE) SLI_Timer(); 4036 #endif 4037 if(Is_Double_Vibra_On) 4038 { 4039 Reminder_timer(); 4040 } 4041 4042 if (Is_ILU_On) 4043 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 4044 #else//DEBUG 4045 CheckComand(p->data, t); \ 00000694 0B10A0E1 MOV R1,R11 \ 00000698 5C759FE5 LDR R7,??ProcessPacket_18+0x30 ;; ILL_RECV_TMR \ 0000069C 080084E2 ADD R0,R4,#+8 \ 000006A0 ........ BL CheckComand \ 000006A4 74209BE5 LDR R2,[R11, #+116] \ 000006A8 ........ LDR R0,??DataTable173 ;; VIBR_TYPE \ 000006AC 000052E3 CMP R2,#+0 \ 000006B0 78209B15 LDRNE R2,[R11, #+120] \ 000006B4 5A1FA0E3 MOV R1,#+360 \ 000006B8 00005213 CMPNE R2,#+0 \ 000006BC 1000000A BEQ ??ProcessPacket_34 4046 if(t->signals && t->isaccess) 4047 { 4048 #ifdef NEWSGOLD1 4049 scrsTime=0; 4050 #endif 4051 if(SHOW_ACTIVE) \ 000006C0 ........ LDR R2,??DataTable176 ;; SHOW_ACTIVE \ 000006C4 002092E5 LDR R2,[R2, #+0] \ 000006C8 000052E3 CMP R2,#+0 4052 t->isactive=ACTIVE_TIME; \ 000006CC A0108B15 STRNE R1,[R11, #+160] 4053 if(t->isvibra) \ 000006D0 5C109BE5 LDR R1,[R11, #+92] \ 000006D4 000051E3 CMP R1,#+0 \ 000006D8 2400000A BEQ ??ProcessPacket_35 4054 { 4055 if(VIBR_TYPE) \ 000006DC 000090E5 LDR R0,[R0, #+0] 4056 vibra_count=2; 4057 else 4058 vibra_count=1; 4059 if(t->automsgcountisIndividSet) \ ??ProcessPacket_34: \ 00000704 ........ LDR R2,??DataTable176 ;; SHOW_ACTIVE \ 00000708 58309BE5 LDR R3,[R11, #+88] \ 0000070C 002092E5 LDR R2,[R2, #+0] \ 00000710 000053E3 CMP R3,#+0 \ 00000714 0900000A BEQ ??ProcessPacket_37 4076 { 4077 #ifdef NEWSGOLD1 4078 scrsTime=0; 4079 #endif 4080 if(SHOW_ACTIVE) \ 00000718 000052E3 CMP R2,#+0 4081 t->isactive=ACTIVE_TIME; \ 0000071C A0108B15 STRNE R1,[R11, #+160] 4082 if(t->isvibra) \ 00000720 5C109BE5 LDR R1,[R11, #+92] \ 00000724 000051E3 CMP R1,#+0 \ 00000728 1000000A BEQ ??ProcessPacket_35 4083 { 4084 if(VIBR_TYPE) \ 0000072C 000090E5 LDR R0,[R0, #+0] \ 00000730 000050E3 CMP R0,#+0 4085 vibra_count=2; \ 00000734 D0638915 STRNE R6,[R9, #+976] 4086 else 4087 vibra_count=1; \ 00000738 D0838905 STREQ R8,[R9, #+976] 4088 if(t->automsgcount < automsgcount && away_m) 4089 start_vibra(); \ 0000073C 0A0000EA B ??ProcessPacket_36 4090 else 4091 start_vibra(); 4092 } 4093 #ifdef ELKA 4094 if(SLI_TYPE) 4095 SLI_Timer(); 4096 #endif 4097 if(Is_Double_Vibra_On) 4098 { 4099 Reminder_timer(); 4100 } 4101 4102 if (Is_ILU_On) 4103 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 4104 } 4105 else 4106 { 4107 #ifdef NEWSGOLD1 4108 scrsTime=0; 4109 #endif 4110 if(SHOW_ACTIVE) \ ??ProcessPacket_37: \ 00000740 000052E3 CMP R2,#+0 4111 t->isactive=ACTIVE_TIME; \ 00000744 A0108B15 STRNE R1,[R11, #+160] 4112 if(VIBR_TYPE) \ 00000748 000090E5 LDR R0,[R0, #+0] 4113 vibra_count=2; 4114 else 4115 vibra_count=1; 4116 if(t->automsgcount >= automsgcount) vibra_count=0; \ 0000074C ........ LDR R1,??DataTable177 ;; automsgcount \ 00000750 000050E3 CMP R0,#+0 \ 00000754 D0638915 STRNE R6,[R9, #+976] \ 00000758 D0838905 STREQ R8,[R9, #+976] \ 0000075C 7C009BE5 LDR R0,[R11, #+124] \ 00000760 001091E5 LDR R1,[R1, #+0] \ 00000764 010050E1 CMP R0,R1 \ 00000768 D0A38925 STRCS R10,[R9, #+976] 4117 start_vibra(); \ ??ProcessPacket_36: \ 0000076C ........ BL start_vibra 4118 #ifdef ELKA 4119 if(SLI_TYPE) 4120 SLI_Timer(); 4121 #endif 4122 if(Is_Double_Vibra_On) \ ??ProcessPacket_35: \ 00000770 540299E5 LDR R0,[R9, #+596] \ 00000774 000050E3 CMP R0,#+0 \ 00000778 0000000A BEQ ??ProcessPacket_38 4123 { 4124 Reminder_timer(); \ 0000077C ........ BL Reminder_timer 4125 } 4126 4127 if (Is_ILU_On) \ ??ProcessPacket_38: \ 00000780 500299E5 LDR R0,[R9, #+592] \ 00000784 000050E3 CMP R0,#+0 \ 00000788 0700000A BEQ ??ProcessPacket_39 4128 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 0000078C 50049FE5 LDR R0,??ProcessPacket_18+0x18 ;; ILL_RECV_FADE \ 00000790 002097E5 LDR R2,[R7, #+0] \ 00000794 003090E5 LDR R3,[R0, #+0] \ 00000798 60049FE5 LDR R0,??ProcessPacket_18+0x34 ;; ILL_KEYS_RECV \ 0000079C 001090E5 LDR R1,[R0, #+0] \ 000007A0 5C049FE5 LDR R0,??ProcessPacket_18+0x38 ;; ILL_DISP_RECV \ 000007A4 000090E5 LDR R0,[R0, #+0] \ 000007A8 ........ BL IlluminationOn 4129 } 4130 4131 #endif//DEBUG 4132 if(comanda==1) \ ??ProcessPacket_39: \ 000007AC 180499E5 LDR R0,[R9, #+1048] \ 000007B0 010050E3 CMP R0,#+1 \ 000007B4 2E00001A BNE ??ProcessPacket_33 4133 { 4134 AddStringToLog(t,0x02,p->data,t->name,0xFFFFFFFF,1); \ 000007B8 01002DE9 PUSH {R0} \ 000007BC 14308BE2 ADD R3,R11,#+20 \ 000007C0 082084E2 ADD R2,R4,#+8 \ 000007C4 0210A0E3 MOV R1,#+2 \ 000007C8 000068E2 RSB R0,R8,#+0 \ 000007CC 01002DE9 PUSH {R0} \ 000007D0 0B00A0E1 MOV R0,R11 \ 000007D4 ........ BL AddStringToLog 4135 main_count++; \ 000007D8 400299E5 LDR R0,[R9, #+576] \ 000007DC 010080E2 ADD R0,R0,#+1 \ 000007E0 400289E5 STR R0,[R9, #+576] 4136 if(Is_INC_On && (PopupShow==1 || PopupShow==3)) \ 000007E4 4C0299E5 LDR R0,[R9, #+588] \ 000007E8 08D08DE2 ADD SP,SP,#+8 \ 000007EC 000050E3 CMP R0,#+0 \ 000007F0 1300000A BEQ ??ProcessPacket_40 \ 000007F4 DC039FE5 LDR R0,??ProcessPacket_18+0xC ;; PopupShow \ 000007F8 000090E5 LDR R0,[R0, #+0] \ 000007FC 010050E3 CMP R0,#+1 \ 00000800 03005013 CMPNE R0,#+3 \ 00000804 0E00001A BNE ??ProcessPacket_40 4137 { 4138 sprintf(show_nick,PopupMsgString,t->name); \ 00000808 F8139FE5 LDR R1,??ProcessPacket_18+0x3C ;; PopupMsgString \ 0000080C 14208BE2 ADD R2,R11,#+20 \ 00000810 9C00A0E3 MOV R0,#+156 \ 00000814 840D80E3 ORR R0,R0,#0x2100 \ 00000818 090080E0 ADD R0,R0,R9 \ 0000081C 160000EF SWI +22 4139 if(!IsIdleUiOnTop()&&(!saver_on)) \ 00000820 C50000EF SWI +197 \ 00000824 000050E3 CMP R0,#+0 \ 00000828 3C029905 LDREQ R0,[R9, #+572] \ 0000082C 00005003 CMPEQ R0,#+0 \ 00000830 0500001A BNE ??ProcessPacket_41 4140 { 4141 INC_show=20; \ 00000834 1400A0E3 MOV R0,#+20 \ 00000838 1C0489E5 STR R0,[R9, #+1052] 4142 show_pp_sender(); \ 0000083C ........ BL show_pp_sender \ 00000840 010000EA B ??ProcessPacket_41 4143 } 4144 } 4145 else 4146 GBS_DelTimer(&develop); \ ??ProcessPacket_40: \ 00000844 00009DE5 LDR R0,[SP, #+0] \ 00000848 8C0100EF SWI +396 4147 #ifndef DEBUG 4148 main_msg_timer2=main_msg_timer;//при получении сообщения восстанавливаем таймер \ ??ProcessPacket_41: \ 0000084C B8039FE5 LDR R0,??ProcessPacket_18+0x40 ;; main_msg_timer \ 00000850 000090E5 LDR R0,[R0, #+0] \ 00000854 0C0489E5 STR R0,[R9, #+1036] 4149 if(Is_SMARTCPU_On) \ 00000858 ........ LDR R0,??DataTable178 ;; Is_SMARTCPU_On \ 0000085C 000090E5 LDR R0,[R0, #+0] \ 00000860 000050E3 CMP R0,#+0 \ 00000864 0200000A BEQ ??ProcessPacket_33 4150 AddToMain(t->name,p->data); \ 00000868 081084E2 ADD R1,R4,#+8 \ 0000086C 14008BE2 ADD R0,R11,#+20 \ 00000870 ........ BL AddToMain 4151 #endif 4152 } 4153 L1: 4154 //Разворачиваем группу, в которой пришло сообщение 4155 { 4156 CLIST *g=FindGroupByID(t->group); \ ??ProcessPacket_33: \ 00000874 10009BE5 LDR R0,[R11, #+16] \ 00000878 ........ _BLF FindGroupByID,??FindGroupByID??rA 4157 if (g) \ 0000087C 000050E3 CMP R0,#+0 4158 { 4159 if (g->state) \ 00000880 B415D011 LDRHNE R1,[R0, #+84] \ 00000884 00005113 CMPNE R1,#+0 4160 { 4161 g->state=0; \ 00000888 B4A5C011 STRHNE R10,[R0, #+84] 4162 } 4163 } 4164 } 4165 4166 ReqAddMsgToChat(t); \ 0000088C 0B00A0E1 MOV R0,R11 \ 00000890 ........ BL ReqAddMsgToChat 4167 RecountMenu(t,1); \ 00000894 0110A0E3 MOV R1,#+1 \ 00000898 0B00A0E1 MOV R0,R11 \ 0000089C ........ BL RecountMenu 4168 4169 switch (DEVELOP_IF) \ 000008A0 68039FE5 LDR R0,??ProcessPacket_18+0x44 ;; DEVELOP_IF \ 000008A4 000090E5 LDR R0,[R0, #+0] \ 000008A8 000050E3 CMP R0,#+0 \ 000008AC 0400000A BEQ ??ProcessPacket_42 \ 000008B0 010050E2 SUBS R0,R0,#+1 \ 000008B4 0B00000A BEQ ??ProcessPacket_43 \ 000008B8 020050E2 SUBS R0,R0,#+2 \ 000008BC 1300000A BEQ ??ProcessPacket_44 \ 000008C0 37FFFFEA B ??ProcessPacket_28 4170 { 4171 case 0: 4172 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) to_develop(); \ ??ProcessPacket_42: \ 000008C4 068100EF SWI +33030 \ 000008C8 080090E5 LDR R0,[R0, #+8] \ 000008CC 5C1299E5 LDR R1,[R9, #+604] \ 000008D0 0C0090E5 LDR R0,[R0, #+12] \ 000008D4 0C0090E5 LDR R0,[R0, #+12] \ 000008D8 010050E1 CMP R0,R1 \ ??ProcessPacket_45: \ 000008DC 30FFFF0A BEQ ??ProcessPacket_28 \ 000008E0 ........ BL to_develop \ 000008E4 2EFFFFEA B ??ProcessPacket_28 4173 break; 4174 case 1: 4175 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) to_develop(); \ ??ProcessPacket_43: \ 000008E8 068100EF SWI +33030 \ 000008EC 080090E5 LDR R0,[R0, #+8] \ 000008F0 5C1299E5 LDR R1,[R9, #+604] \ 000008F4 0C0090E5 LDR R0,[R0, #+12] \ 000008F8 0C0090E5 LDR R0,[R0, #+12] \ 000008FC 010050E1 CMP R0,R1 \ 00000900 27FFFF0A BEQ ??ProcessPacket_28 \ 00000904 430000EF SWI +67 \ 00000908 000050E3 CMP R0,#+0 \ 0000090C F2FFFFEA B ??ProcessPacket_45 4176 break; 4177 case 2: 4178 break; 4179 case 3: 4180 GBS_DelTimer(&develop); \ ??ProcessPacket_44: \ 00000910 00009DE5 LDR R0,[SP, #+0] \ 00000914 8C0100EF SWI +396 4181 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(!IsUnlocked())) begin_to_develop(); \ 00000918 068100EF SWI +33030 \ 0000091C 080090E5 LDR R0,[R0, #+8] \ 00000920 5C1299E5 LDR R1,[R9, #+604] \ 00000924 0C0090E5 LDR R0,[R0, #+12] \ 00000928 0C0090E5 LDR R0,[R0, #+12] \ 0000092C 010050E1 CMP R0,R1 \ 00000930 1BFFFF0A BEQ ??ProcessPacket_28 \ 00000934 430000EF SWI +67 \ 00000938 000050E3 CMP R0,#+0 \ 0000093C 18FFFF1A BNE ??ProcessPacket_28 \ 00000940 ........ BL begin_to_develop \ 00000944 16FFFFEA B ??ProcessPacket_28 4182 break; 4183 } 4184 4185 RefreshCL(); 4186 break; 4187 case T_SRV_ACK: 4188 case T_CLIENT_ACK: 4189 q=FindContactLOGQByAck(p); \ ??ProcessPacket_46: \ 00000948 0400A0E1 MOV R0,R4 \ 0000094C ........ BL FindContactLOGQByAck 4190 if (q) \ 00000950 000050E3 CMP R0,#+0 \ 00000954 9800000A BEQ ??ProcessPacket_1 4191 { 4192 q->acked=p->pkt.type==T_SRV_ACK?1:2; \ 00000958 B410D4E1 LDRH R1,[R4, #+4] \ 0000095C 100051E3 CMP R1,#+16 \ 00000960 0110A003 MOVEQ R1,#+1 \ 00000964 0210A013 MOVNE R1,#+2 \ 00000968 041080E5 STR R1,[R0, #+4] 4193 t=FindContactByUin(p->pkt.uin); \ 0000096C 000094E5 LDR R0,[R4, #+0] \ 00000970 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000974 00B0A0E1 MOV R11,R0 4194 if (edchat_id) \ 00000978 F80399E5 LDR R0,[R9, #+1016] \ 0000097C 000050E3 CMP R0,#+0 \ 00000980 8D00000A BEQ ??ProcessPacket_1 4195 { 4196 void *data=FindGUIbyId(edchat_id,NULL); \ 00000984 F80399E5 LDR R0,[R9, #+1016] \ 00000988 0010A0E3 MOV R1,#+0 \ 0000098C 090200EF SWI +521 \ 00000990 0060B0E1 MOVS R6,R0 4197 if (data) \ 00000994 8800000A BEQ ??ProcessPacket_1 4198 { 4199 EDCHAT_STRUCT *ed_struct; 4200 ed_struct=EDIT_GetUserPointer(data); \ 00000998 DF0100EF SWI +479 4201 if (ed_struct) \ 0000099C 000050E3 CMP R0,#+0 \ 000009A0 8500000A BEQ ??ProcessPacket_1 4202 { 4203 if (ed_struct->ed_contact==t) \ 000009A4 000090E5 LDR R0,[R0, #+0] \ 000009A8 0B0050E1 CMP R0,R11 \ 000009AC 8200001A BNE ??ProcessPacket_1 4204 { 4205 if (EDIT_IsBusy(data)) \ 000009B0 0600A0E1 MOV R0,R6 \ 000009B4 1C0200EF SWI +540 \ 000009B8 000050E3 CMP R0,#+0 \ 000009BC 0300000A BEQ ??ProcessPacket_47 4206 { 4207 t->req_drawack=1; \ 000009C0 90808BE5 STR R8,[R11, #+144] 4208 time_to_stop_t9=3; \ 000009C4 0300A0E3 MOV R0,#+3 \ 000009C8 140489E5 STR R0,[R9, #+1044] \ 000009CC 7A0000EA B ??ProcessPacket_1 4209 } 4210 else 4211 { 4212 DrawAck(data); \ ??ProcessPacket_47: \ 000009D0 0600A0E1 MOV R0,R6 \ 000009D4 ........ BL DrawAck 4213 if (p->pkt.type==T_SRV_ACK) \ 000009D8 B400D4E1 LDRH R0,[R4, #+4] \ 000009DC 100050E3 CMP R0,#+16 \ 000009E0 7500001A BNE ??ProcessPacket_1 4214 { 4215 SMART_REDRAW(); \ 000009E4 ........ BL SMART_REDRAW 4216 RefreshCL(); 4217 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 000009E8 F4019FE5 LDR R0,??ProcessPacket_18+0x18 ;; ILL_RECV_FADE \ 000009EC 248085E5 STR R8,[R5, #+36] \ 000009F0 003090E5 LDR R3,[R0, #+0] \ 000009F4 EC019FE5 LDR R0,??ProcessPacket_18+0x1C ;; ILL_SEND_TMR \ 000009F8 002090E5 LDR R2,[R0, #+0] \ 000009FC 10029FE5 LDR R0,??ProcessPacket_18+0x48 ;; ILL_KEYS_SEND \ 00000A00 001090E5 LDR R1,[R0, #+0] \ 00000A04 E0019FE5 LDR R0,??ProcessPacket_18+0x20 ;; ILL_DISP_SEND \ 00000A08 000090E5 LDR R0,[R0, #+0] \ 00000A0C ........ BL IlluminationOn \ 00000A10 690000EA B ??ProcessPacket_1 4218 } 4219 } 4220 } 4221 } 4222 } 4223 } 4224 } 4225 break; 4226 case T_XTEXT_ACK: 4227 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_48: \ 00000A14 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000A18 00B0B0E1 MOVS R11,R0 4228 if (t) \ 00000A1C 6600000A BEQ ??ProcessPacket_1 4229 { 4230 int i; 4231 int j; 4232 // char ss[256]; 4233 // TTime tm; 4234 FreeXText(t); \ 00000A20 ........ _BLF FreeXText,??FreeXText??rA 4235 i=p->pkt.data_len; \ 00000A24 B650D4E1 LDRH R5,[R4, #+6] 4236 memcpy(t->xtext=malloc(i),p->data,i); \ 00000A28 0500A0E1 MOV R0,R5 \ 00000A2C 140000EF SWI +20 \ 00000A30 A8008BE5 STR R0,[R11, #+168] \ 00000A34 0520A0E1 MOV R2,R5 \ 00000A38 081084E2 ADD R1,R4,#+8 \ 00000A3C 1E0100EF SWI +286 4237 t->xtext[i]=0; \ 00000A40 A8009BE5 LDR R0,[R11, #+168] 4238 // GetDateTime(0,&tm); 4239 // snprintf(ss,i+4,"%02d:%02d:%02d %s",tm.hour,tm.min,tm.sec,p->data); 4240 // memcpy(t->xtext=malloc(strlen(ss)),ss,strlen(ss)); 4241 4242 zeromem(s,256); \ 00000A44 401FA0E3 MOV R1,#+256 \ 00000A48 00A0C5E7 STRB R10,[R5, +R0] \ 00000A4C 18008DE2 ADD R0,SP,#+24 \ 00000A50 1D0100EF SWI +285 4243 strcpy(s,t->name); \ 00000A54 14108BE2 ADD R1,R11,#+20 \ 00000A58 18008DE2 ADD R0,SP,#+24 \ 00000A5C 1A0000EF SWI +26 4244 strcat(s,":\n"); \ 00000A60 591F8FE2 ADR R1,??ProcessPacket_18 ;; ":\n" \ 00000A64 18008DE2 ADD R0,SP,#+24 \ 00000A68 170000EF SWI +23 4245 i=strlen(s); \ 00000A6C 18008DE2 ADD R0,SP,#+24 \ 00000A70 1B0000EF SWI +27 4246 j=p->data[0]; \ 00000A74 0850D4E5 LDRB R5,[R4, #+8] \ 00000A78 0060A0E1 MOV R6,R0 4247 if (j>(255-i)) j=255-i; \ 00000A7C FF0066E2 RSB R0,R6,#+255 \ 00000A80 050050E1 CMP R0,R5 \ 00000A84 0050A0B1 MOVLT R5,R0 4248 strncpy(s+i,p->data+1,j); \ 00000A88 0520A0E1 MOV R2,R5 \ 00000A8C 091084E2 ADD R1,R4,#+9 \ 00000A90 18008DE2 ADD R0,SP,#+24 \ 00000A94 000086E0 ADD R0,R6,R0 \ 00000A98 160100EF SWI +278 4249 i+=j; \ 00000A9C 060085E0 ADD R0,R5,R6 4250 if (i<255) \ 00000AA0 FF0050E3 CMP R0,#+255 \ 00000AA4 100000AA BGE ??ProcessPacket_49 4251 { 4252 s[i]='\n'; \ 00000AA8 18108DE2 ADD R1,SP,#+24 \ 00000AAC 0A20A0E3 MOV R2,#+10 \ 00000AB0 0120C0E7 STRB R2,[R0, +R1] 4253 i++; \ 00000AB4 0810D4E5 LDRB R1,[R4, #+8] \ 00000AB8 B620D4E1 LDRH R2,[R4, #+6] \ 00000ABC 010080E2 ADD R0,R0,#+1 4254 j=p->pkt.data_len-p->data[0]-1; 4255 if (j>(255-i)) j=255-i; 4256 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000AC0 18308DE2 ADD R3,SP,#+24 \ 00000AC4 012042E0 SUB R2,R2,R1 \ 00000AC8 015042E2 SUB R5,R2,#+1 \ 00000ACC FF2060E2 RSB R2,R0,#+255 \ 00000AD0 050052E1 CMP R2,R5 \ 00000AD4 0250A0B1 MOVLT R5,R2 \ 00000AD8 0520A0E1 MOV R2,R5 \ 00000ADC 041081E0 ADD R1,R1,R4 \ 00000AE0 091081E2 ADD R1,R1,#+9 \ 00000AE4 030080E0 ADD R0,R0,R3 \ 00000AE8 160100EF SWI +278 4257 } 4258 4259 zeromem(s,256); \ ??ProcessPacket_49: \ 00000AEC 401FA0E3 MOV R1,#+256 \ 00000AF0 18008DE2 ADD R0,SP,#+24 \ 00000AF4 1D0100EF SWI +285 4260 i=0; 4261 j=p->data[0]; \ 00000AF8 0850D4E5 LDRB R5,[R4, #+8] 4262 if (j>(255-i)) j=255-i; 4263 strncpy(s,p->data+1,j); \ 00000AFC 091084E2 ADD R1,R4,#+9 \ 00000B00 18008DE2 ADD R0,SP,#+24 \ 00000B04 400F55E3 CMP R5,#+256 \ 00000B08 FF50A0A3 MOVGE R5,#+255 \ 00000B0C 0520A0E1 MOV R2,R5 \ 00000B10 160100EF SWI +278 4264 i+=j; 4265 if (i<255) \ 00000B14 FF0055E3 CMP R5,#+255 \ 00000B18 100000AA BGE ??ProcessPacket_50 4266 { 4267 s[i++]=13; \ 00000B1C 18108DE2 ADD R1,SP,#+24 \ 00000B20 0D20A0E3 MOV R2,#+13 \ 00000B24 0120C5E7 STRB R2,[R5, +R1] \ 00000B28 0810D4E5 LDRB R1,[R4, #+8] \ 00000B2C B620D4E1 LDRH R2,[R4, #+6] \ 00000B30 010085E2 ADD R0,R5,#+1 4268 j=p->pkt.data_len-p->data[0]-1; 4269 if (j>(255-i)) j=255-i; 4270 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000B34 18308DE2 ADD R3,SP,#+24 \ 00000B38 012042E0 SUB R2,R2,R1 \ 00000B3C 015042E2 SUB R5,R2,#+1 \ 00000B40 FF2060E2 RSB R2,R0,#+255 \ 00000B44 050052E1 CMP R2,R5 \ 00000B48 0250A0B1 MOVLT R5,R2 \ 00000B4C 0520A0E1 MOV R2,R5 \ 00000B50 041081E0 ADD R1,R1,R4 \ 00000B54 091081E2 ADD R1,R1,#+9 \ 00000B58 030080E0 ADD R0,R0,R3 \ 00000B5C 160100EF SWI +278 4271 } 4272 4273 // GetDateTime(0,&tm); 4274 // sprintf(ss,"%02d:%02d:%02d %s",tm.hour,tm.min,tm.sec,s); 4275 AddStringToLog(t,0x03,s,x_status_change,0xFFFFFFFF,1); \ ??ProcessPacket_50: \ 00000B60 0100A0E3 MOV R0,#+1 \ 00000B64 01002DE9 PUSH {R0} \ 00000B68 E03F87E2 ADD R3,R7,#+896 \ 00000B6C 0310A0E3 MOV R1,#+3 \ 00000B70 000060E2 RSB R0,R0,#+0 \ 00000B74 01002DE9 PUSH {R0} \ 00000B78 20208DE2 ADD R2,SP,#+32 \ 00000B7C 0B00A0E1 MOV R0,R11 \ 00000B80 ........ BL AddStringToLog 4276 ReqAddMsgToChat(t); \ 00000B84 0B00A0E1 MOV R0,R11 \ 00000B88 ........ BL ReqAddMsgToChat 4277 if (strlen(p->data)) // Если x-status не пустой \ 00000B8C 080084E2 ADD R0,R4,#+8 \ 00000B90 1B0000EF SWI +27 \ 00000B94 000050E3 CMP R0,#+0 \ 00000B98 08D08DE2 ADD SP,SP,#+8 4278 RecountMenu(t, 1); \ 00000B9C 0110A013 MOVNE R1,#+1 \ 00000BA0 0B00A011 MOVNE R0,R11 \ 00000BA4 4BFDFF1A BNE ??ProcessPacket_8 4279 else 4280 RecountMenu(NULL, 0); \ 00000BA8 0010A0E3 MOV R1,#+0 \ 00000BAC 0100A0E1 MOV R0,R1 \ 00000BB0 48FDFFEA B ??ProcessPacket_8 4281 } 4282 break; 4283 case T_LASTPRIVACY: 4284 CurrentPrivateStatus=p->data[0]; \ ??ProcessPacket_51: \ 00000BB4 0800D4E5 LDRB R0,[R4, #+8] \ 00000BB8 CC0389E5 STR R0,[R9, #+972] 4285 break; 4286 } 4287 mfree(p); \ ??ProcessPacket_1: \ 00000BBC 0400A0E1 MOV R0,R4 \ 00000BC0 150000EF SWI +21 4288 } \ 00000BC4 50DF8DE2 ADD SP,SP,#+320 \ 00000BC8 F08FBDE8 POP {R4-R11,PC} ;; return \ ??ProcessPacket_18: \ 00000BCC 3A0A0000 DC8 ":\n",+0 \ 00000BD0 ........ DC32 ENA_AUTO_XTXT \ 00000BD4 ........ DC32 PopupOnlineString \ 00000BD8 ........ DC32 PopupShow \ 00000BDC ........ DC32 ON_OFF_TIME \ 00000BE0 ........ DC32 IllByONCantact \ 00000BE4 ........ DC32 ILL_RECV_FADE \ 00000BE8 ........ DC32 ILL_SEND_TMR \ 00000BEC ........ DC32 ILL_DISP_SEND \ 00000BF0 ........ DC32 sndGlobal \ 00000BF4 ........ DC32 sndGlobal2 \ 00000BF8 ........ DC32 sndSrvMsg \ 00000BFC ........ DC32 ILL_RECV_TMR \ 00000C00 ........ DC32 ILL_KEYS_RECV \ 00000C04 ........ DC32 ILL_DISP_RECV \ 00000C08 ........ DC32 PopupMsgString \ 00000C0C ........ DC32 main_msg_timer \ 00000C10 ........ DC32 DEVELOP_IF \ 00000C14 ........ DC32 ILL_KEYS_SEND 4289 4290 4291 IPC_REQ tmr_gipc; \ In segment CODE, align 4, keep-with-next 4292 void process_active_timer(void) 4293 { 4294 if (connect_state>2) \ process_active_timer: \ 00000000 ........ LDR R0,??DataTable179 ;; screen3 + 52 \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ LDR R5,??DataTable185 ;; i_rc \ 00000010 0040A0E3 MOV R4,#+0 \ 00000014 030050E3 CMP R0,#+3 \ 00000018 070000BA BLT ??process_active_timer_0 4295 { 4296 if (++tenseconds_to_ping>12) \ 0000001C FC0395E5 LDR R0,[R5, #+1020] \ 00000020 010080E2 ADD R0,R0,#+1 \ 00000024 FC0385E5 STR R0,[R5, #+1020] \ 00000028 0D0050E3 CMP R0,#+13 \ 0000002C 020000BA BLT ??process_active_timer_0 4297 { 4298 tenseconds_to_ping=0; 4299 SUBPROC((void *)do_ping); \ 00000030 58009FE5 LDR R0,??process_active_timer_1 ;; do_ping \ 00000034 FC4385E5 STR R4,[R5, #+1020] \ 00000038 710100EF SWI +369 4300 } 4301 } 4302 tmr_gipc.name_to=ipc_my_name; \ ??process_active_timer_0: \ 0000003C ........ LDR R1,??DataTable183 ;; Canvas \ 00000040 D60FA0E3 MOV R0,#+856 \ 00000044 012080E0 ADD R2,R0,R1 \ 00000048 982085E5 STR R2,[R5, #+152] 4303 tmr_gipc.name_from=ipc_my_name; \ 0000004C 010080E0 ADD R0,R0,R1 \ 00000050 9C0085E5 STR R0,[R5, #+156] 4304 tmr_gipc.data=NULL; \ 00000054 A04085E5 STR R4,[R5, #+160] 4305 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_TENSECONDS,&tmr_gipc); \ 00000058 983085E2 ADD R3,R5,#+152 \ 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 4306 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000074 ........ LDR R2,??DataTable182 ;; process_active_timer \ 00000078 871EA0E3 MOV R1,#+2160 \ 0000007C E800A0E3 MOV R0,#+232 \ 00000080 740D80E3 ORR R0,R0,#0x1D00 \ 00000084 050080E0 ADD R0,R0,R5 \ 00000088 4D0000EF SWI +77 4307 } \ 0000008C 3080BDE8 POP {R4,R5,PC} ;; return \ ??process_active_timer_1: \ 00000090 ........ DC32 do_ping 4308 4309 GBSTMR tm22; \ In segment CODE, align 4, keep-with-next 4310 void OneSecTmr() 4311 { 4312 tmr_gipc.name_to=ipc_my_name; \ OneSecTmr: \ 00000000 ........ LDR R1,??DataTable183 ;; Canvas \ 00000004 10402DE9 PUSH {R4,LR} \ 00000008 ........ LDR R4,??DataTable185 ;; i_rc \ 0000000C D60FA0E3 MOV R0,#+856 \ 00000010 012080E0 ADD R2,R0,R1 \ 00000014 982084E5 STR R2,[R4, #+152] 4313 tmr_gipc.name_from=ipc_my_name; \ 00000018 010080E0 ADD R0,R0,R1 \ 0000001C 9C0084E5 STR R0,[R4, #+156] 4314 tmr_gipc.data=NULL; \ 00000020 0000A0E3 MOV R0,#+0 \ 00000024 A00084E5 STR R0,[R4, #+160] 4315 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_ONESECOND,&tmr_gipc); \ 00000028 983084E2 ADD R3,R4,#+152 \ 0000002C 0620A0E3 MOV R2,#+6 \ 00000030 B010A0E3 MOV R1,#+176 \ 00000034 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000038 0900A0E3 MOV R0,#+9 \ 0000003C 420C80E3 ORR R0,R0,#0x4200 \ 00000040 000100EF SWI +256 4316 GBS_StartTimerProc(&tm22,TMR_SECOND,OneSecTmr); \ 00000044 14209FE5 LDR R2,??OneSecTmr_0 ;; OneSecTmr \ 00000048 D810A0E3 MOV R1,#+216 \ 0000004C 5C00A0E3 MOV R0,#+92 \ 00000050 880D80E3 ORR R0,R0,#0x2200 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 4D0000EF SWI +77 4317 } \ 0000005C 1080BDE8 POP {R4,PC} ;; return \ ??OneSecTmr_0: \ 00000060 ........ DC32 OneSecTmr 4318 4319 4320 //=============================================================================================== 4321 /* 4322 extern ADDUIN addonuin[]; 4323 4324 int itemFromDisp;//кол-во на экране 4325 int totalItems;//общее количество итемов 4326 int curpos=0;//позичия курсора 4327 int curpage=1;//текущая страница 4328 4329 const char clrSelect[4]={0xFF,0x00,0x00,0x60}; 4330 const char fntSelect[4]={0xFF,0xFF,0x00,0x60}; 4331 const char bordSelect[4]={0x00,0x00,0x00,0x60}; 4332 4333 const char clrNotSelect[4]={0x00,0x00,0x00,0x60}; 4334 const char bordNotSelect[4]={0x00,0x00,0x00,0x60}; 4335 const char fntNotSelect[4]={0xFF,0xFF,0xFF,0x60}; 4336 4337 char clrBlack[]={0x00,0x00,0x00,0x64}; 4338 char clrWhite[]={0xFF,0xFF,0xFF,0x64}; 4339 //char prozr[]={0x00,0x00,0x00,0x00}; 4340 const int font=FONT_SMALL; 4341 const char _t[]="%t"; 4342 4343 extern int ParseUINS(); 4344 int USE_ADD_UIN=0; 4345 #define CLIST_Y1 (YDISP+GetFontYSIZE(font)+8) 4346 4347 static void DrawList() 4348 { 4349 int font_y = GetFontYSIZE(font)+2;//16+2 4350 int scr_w=ScreenW(); 4351 int scr_h=ScreenH()-1; 4352 // int y2=scr_w-(GetFontYSIZE(font)+2); 4353 #ifdef ELKA 4354 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-GetFontYSIZE(font)-2)-1; 4355 #else 4356 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-GetFontYSIZE(font)-2); 4357 #endif 4358 4359 LockSched(); 4360 totalItems = ParseUINS(); 4361 // Определяем количество страниц списка контактов 4362 int pageNum = sdiv(itemFromDisp, totalItems); 4363 if( itemFromDisp*pageNum < totalItems) pageNum++; //На всяк,вдруг еще страница нужна 4364 WSHDR* out_ws = AllocWS(256); 4365 int i=0; 4366 int start_y; 4367 int x=1; 4368 while(i<=totalItems) 4369 { 4370 if((i>=(curpage-1)*itemFromDisp) && (i<=itemFromDisp*curpage))//если те итемы который нужно выводить на экран со страници curpage 4371 { 4372 wsprintf(out_ws,"%d. %d",i+1,addonuin[i].uin);//имя закладки 4373 start_y = (CLIST_Y1 + (i - (curpage-1)*itemFromDisp)*font_y); //определяем начальное смещение по у 4374 4375 if(i==curpos) 4376 { 4377 DrawRoundedFrame(x-4,start_y,scr_w-1,start_y+font_y,5,5,0,bordSelect,clrSelect); 4378 DrawString(out_ws,x,start_y+2,scr_w-1,start_y+font_y,font,0,fntSelect,0); 4379 } 4380 else 4381 { 4382 DrawRoundedFrame(x,start_y+1,scr_w-1,start_y+font_y,0,0,0,bordNotSelect,clrNotSelect);//clrBlack 4383 DrawString(out_ws,x,start_y+2,scr_w-1,start_y+font_y,font,0,fntNotSelect,0); 4384 } 4385 } 4386 i++; 4387 if(i>(pageNum*itemFromDisp)) break; 4388 } 4389 UnlockSched(); 4390 FreeWS(out_ws); 4391 } 4392 4393 // Управление курсором 4394 void MoveUp() 4395 { 4396 if(!itemFromDisp)return; 4397 if(curpos<1) 4398 { 4399 curpos=totalItems; 4400 if(itemFromDisp!=totalItems) 4401 { 4402 curpage = sdiv(itemFromDisp,totalItems)+1; 4403 } 4404 else 4405 curpage = 1; 4406 } 4407 else 4408 { 4409 curpos--; 4410 if(curpos<(curpage-1)*itemFromDisp){ curpos++; curpage--; } 4411 } 4412 // REDRAW(); 4413 } 4414 4415 4416 void MoveDown() 4417 { 4418 if(!totalItems)return; 4419 curpos++; 4420 if(curpos>totalItems) { curpos=0; curpage=1; } 4421 if(curpage*itemFromDispisIndividSet=0; \ 00000010 340494E5 LDR R0,[R4, #+1076] \ 00000014 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C 581080E5 STR R1,[R0, #+88] 4469 REDRAW(); \ 00000020 720100EF SWI +370 4470 } \ 00000024 1080BDE8 POP {R4,PC} ;; return 4471 \ In segment CODE, align 4, keep-with-next 4472 void ChangeVibraContact(GUI *data) 4473 { 4474 CLIST *t; 4475 t=FindContactByUin(uinContact); \ ChangeVibraContact: \ 00000000 ........ LDR R0,??DataTable203 ;; i_rc + 1076 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 4476 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] 4477 // RefreshGUI(); 4478 REDRAW(); \ 00000024 720100EF SWI +370 4479 } \ 00000028 0080BDE8 POP {PC} ;; return 4480 \ In segment CODE, align 4, keep-with-next 4481 void ChangeSoundContact(GUI *data) 4482 { 4483 CLIST *t; 4484 t=FindContactByUin(uinContact); \ ChangeSoundContact: \ 00000000 ........ LDR R0,??DataTable203 ;; i_rc + 1076 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 4485 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] 4486 // RefreshGUI(); 4487 REDRAW(); \ 00000024 720100EF SWI +370 4488 } \ 00000028 0080BDE8 POP {PC} ;; return 4489 \ In segment CODE, align 4, keep-with-next 4490 void ChangeAutoMsg(GUI *data) 4491 { 4492 CLIST *t; 4493 t=FindContactByUin(uinContact); \ ChangeAutoMsg: \ 00000000 ........ LDR R0,??DataTable203 ;; i_rc + 1076 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 4494 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] 4495 // RefreshGUI(); 4496 REDRAW(); \ 00000024 720100EF SWI +370 4497 } \ 00000028 0080BDE8 POP {PC} ;; return 4498 \ In segment CODE, align 4, keep-with-next 4499 void ChangeShowXstatus(GUI *data) 4500 { 4501 CLIST *t; 4502 t=FindContactByUin(uinContact); \ ChangeShowXstatus: \ 00000000 ........ LDR R0,??DataTable203 ;; i_rc + 1076 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 4503 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] 4504 // RefreshGUI(); 4505 REDRAW(); \ 00000024 720100EF SWI +370 4506 } \ 00000028 0080BDE8 POP {PC} ;; return 4507 4508 #ifdef kluchnik 4509 4510 void ChangeAccess(GUI *data) 4511 { 4512 CLIST *t; 4513 t=FindContactByUin(uinContact); 4514 t->isaccess=!(t->isaccess); 4515 /// RefreshGUI(); 4516 REDRAW(); 4517 } 4518 4519 4520 void ChangeAwaySignal(GUI *data) 4521 { 4522 CLIST *t; 4523 t=FindContactByUin(uinContact); 4524 t->automsgcount=automsgcount; 4525 // RefreshGUI(); 4526 REDRAW(); 4527 } 4528 4529 void ChangeAutobot(GUI *data) 4530 { 4531 CLIST *t; 4532 t=FindContactByUin(uinContact); 4533 t->isautobot=!(t->isautobot); 4534 // RefreshGUI(); 4535 REDRAW(); 4536 } 4537 4538 void ChangeLoadHistory(GUI *data) 4539 { 4540 CLIST *t; 4541 t=FindContactByUin(uinContact); 4542 t->isLoadHistory=!(t->isLoadHistory); 4543 // RefreshGUI(); 4544 REDRAW(); 4545 } 4546 #endif //kluchnik 4547 4548 const void *menuproc[_MAX]= 4549 { 4550 (void *)RqtXText, 4551 (void *)ChangeVibraContact, 4552 (void *)ChangeSoundContact, 4553 (void *)ChangeAutoMsg, 4554 (void *)ChangeShowXstatus, 4555 #ifdef kluchnik 4556 (void *)ChangeAccess, 4557 (void *)ChangeAwaySignal, 4558 (void *)ChangeLoadHistory, 4559 (void *)ChangeAutobot, 4560 #endif 4561 }; 4562 4563 const char * const menutext[_MAX]= 4564 { 4565 "Запрос хстатуса", 4566 "Вибра", 4567 "Звук", 4568 "Автоответчик", 4569 "Показ.хстатус", 4570 #ifdef kluchnik 4571 "Удаленное управление", 4572 "Синалы автоответчика", 4573 "Загруж.историю", 4574 "Aвтобот" 4575 #endif 4576 }; 4577 4578 int hy; 4579 const char clrSelect[4]={0xFF,0x00,0x00,0x20}; 4580 const char fntSelect[4]={0xFF,0xFF,0x00,0x60}; 4581 const char bordSelect[4]={0x00,0x00,0x00,0x60}; 4582 4583 const char clrNotSelect[4]={0x00,0x00,0x00,0x00}; 4584 const char bordNotSelect[4]={0x00,0x00,0x00,0x00}; 4585 const char fntNotSelect[4]={0xFF,0xFF,0xFF,0x60}; 4586 4587 char clrBlack[]={0x00,0x00,0x00,0x64}; 4588 char clrWhite[]={0xFF,0xFF,0xFF,0x64}; 4589 char clrRed[]={0xFF,0x00,0x00,0x64}; 4590 char transparent[]={0x00,0x00,0x00,0x00}; 4591 char blue[]="\x00\x00\xFF\x64"; 4592 4593 //const int clfont=(FONT_SMALL+100);//ибо библа пнг 4594 int clfont; 4595 4596 //char clrRed2[]={0xFF,0x00,0x00,0x15}; 4597 int i_itemFromDisp;//кол-во на экране 4598 int i_totalItems;//общее количество итемов 4599 int i_curpos=1;//позичия курсора 4600 4601 GBSTMR i_tmr; 4602 4603 extern IMGHDR screen; 4604 void DrawCheckBox(int x,int y,int flag,int type); 4605 extern char *menutexts2[]; 4606 4607 RECT i_rc; 4608 \ In segment CODE, align 4, keep-with-next 4609 int DrawIconInfo(int x, int y, int curitem) 4610 { \ DrawIconInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 4611 CLIST *t; 4612 t=FindContactByUin(uinContact); \ 00000008 ........ LDR R0,??DataTable203 ;; i_rc + 1076 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 000090E5 LDR R0,[R0, #+0] \ 00000014 0260A0E1 MOV R6,R2 \ 00000018 ........ _BLF FindContactByUin,??FindContactByUin??rA 4613 4614 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 4615 { 4616 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 4617 case 2: DrawCheckBox(x,y,t->isvibra?1:0,0); break; \ ??DrawIconInfo_4: \ 00000048 5C0090E5 LDR R0,[R0, #+92] \ 0000004C 040000EA B ??DrawIconInfo_5 4618 case 3: DrawCheckBox(x,y,t->issound?1:0,0); break; \ ??DrawIconInfo_6: \ 00000050 600090E5 LDR R0,[R0, #+96] \ 00000054 020000EA B ??DrawIconInfo_5 4619 case 4: DrawCheckBox(x,y,t->isautomsg?1:0,0); break; \ ??DrawIconInfo_7: \ 00000058 640090E5 LDR R0,[R0, #+100] \ 0000005C 000000EA B ??DrawIconInfo_5 4620 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 4621 #ifdef kluchnik 4622 case 6: DrawCheckBox(x,y,t->isaccess?1:0,0); break; 4623 case 7: DrawCheckBox(x,y,t->automsgcount?1:0,0); break; 4624 case 8: DrawCheckBox(x,y,t->isLoadHistory?1:0,0); break; 4625 case 9: DrawCheckBox(x,y,t->isautobot?0:1,0); break; 4626 #endif 4627 } 4628 return 12; \ ??DrawIconInfo_1: \ 00000080 0C00A0E3 MOV R0,#+12 \ 00000084 7080BDE8 POP {R4-R6,PC} ;; return 4629 } 4630 4631 extern DYNPNGICONLIST *GetXSByItem(int curitem); 4632 char *GetStatusByIconIndex(int icon); 4633 4634 char ixtext[256]; \ In segment CODE, align 4, keep-with-next 4635 void I_DrawList() 4636 { \ I_DrawList: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 4637 int font_y = FontH(clfont)+1; \ 00000004 ........ LDR R4,??DataTable210 ;; i_rc 4638 int scr_h=ScreenH()-1; 4639 int scr_w=ScreenW()-1; 4640 4641 LockSched(); 4642 int i=1; 4643 int start_y=0; 4644 int start_x=i_rc.x+4; 4645 4646 RECT rc; 4647 CLIST *t; 4648 t=FindContactByUin(uinContact); 4649 SetFontColor(clrWhite,transparent,0); \ 00000008 ........ LDR R7,??DataTable211 ;; screen3 4650 char *s=malloc(128); 4651 sprintf(s,"Меню контакта \"%s\"",t->name); \ 0000000C 58939FE5 LDR R9,??I_DrawList_0 ;; menutext \ 00000010 10D04DE2 SUB SP,SP,#+16 \ 00000014 3C0494E5 LDR R0,[R4, #+1084] \ 00000018 0160A0E3 MOV R6,#+1 \ 0000001C ........ _BLF FontH,??FontH??rA \ 00000020 015080E2 ADD R5,R0,#+1 \ 00000024 898100EF SWI +33161 \ 00000028 888100EF SWI +33160 \ 0000002C 460100EF SWI +326 \ 00000030 F010D4E1 LDRSH R1,[R4, #+0] \ 00000034 041081E2 ADD R1,R1,#+4 \ 00000038 08108DE5 STR R1,[SP, #+8] \ 0000003C 340494E5 LDR R0,[R4, #+1076] \ 00000040 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000044 00B0A0E1 MOV R11,R0 \ 00000048 0020A0E3 MOV R2,#+0 \ 0000004C 471F87E2 ADD R1,R7,#+284 \ 00000050 450F87E2 ADD R0,R7,#+276 \ 00000054 ........ _BLF SetFontColor,??SetFontColor??rA \ 00000058 8000A0E3 MOV R0,#+128 \ 0000005C 140000EF SWI +20 \ 00000060 0080A0E1 MOV R8,R0 \ 00000064 14208BE2 ADD R2,R11,#+20 \ 00000068 7C1089E2 ADD R1,R9,#+124 \ 0000006C 160000EF SWI +22 \ 00000070 F000D4E1 LDRSH R0,[R4, #+0] \ 00000074 F410D4E1 LDRSH R1,[R4, #+4] \ 00000078 0030A0E3 MOV R3,#+0 \ 0000007C 0820A0E1 MOV R2,R8 \ 00000080 001041E0 SUB R1,R1,R0 \ 00000084 02002DE9 PUSH {R1} \ 00000088 030080E2 ADD R0,R0,#+3 \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 02002DE9 PUSH {R1} \ 00000094 02002DE9 PUSH {R1} \ 00000098 02002DE9 PUSH {R1} \ 0000009C 0110A0E3 MOV R1,#+1 \ 000000A0 02002DE9 PUSH {R1} \ 000000A4 3C1494E5 LDR R1,[R4, #+1084] \ 000000A8 02002DE9 PUSH {R1} \ 000000AC F210D4E1 LDRSH R1,[R4, #+2] \ 000000B0 011081E2 ADD R1,R1,#+1 4652 PrintText(i_rc.x+3,i_rc.y+1,s,0,clfont,1,0,0,0,i_rc.x2-i_rc.x);//item name \ 000000B4 ........ _BLF PrintText,??PrintText??rA 4653 4654 DrawLine(i_rc.x,i_rc.y+font_y,i_rc.x2,i_rc.y+font_y,0,clrWhite); \ 000000B8 F200D4E1 LDRSH R0,[R4, #+2] \ 000000BC 001085E0 ADD R1,R5,R0 \ 000000C0 450F87E2 ADD R0,R7,#+276 \ 000000C4 01002DE9 PUSH {R0} \ 000000C8 0130A0E1 MOV R3,R1 \ 000000CC 0000A0E3 MOV R0,#+0 \ 000000D0 01002DE9 PUSH {R0} \ 000000D4 F420D4E1 LDRSH R2,[R4, #+4] \ 000000D8 F000D4E1 LDRSH R0,[R4, #+0] \ 000000DC B30100EF SWI +435 4655 int back=i_rc.y; \ 000000E0 F200D4E1 LDRSH R0,[R4, #+2] \ 000000E4 0020A0E1 MOV R2,R0 \ 000000E8 2C208DE5 STR R2,[SP, #+44] 4656 i_rc.y+=4; \ 000000EC 04A080E2 ADD R10,R0,#+4 \ 000000F0 B2A0C4E1 STRH R10,[R4, #+2] 4657 4658 DrwImage(icons[GetIconIndex(t)],i_rc.x+2,i_rc.y+font_y); \ 000000F4 0B00A0E1 MOV R0,R11 \ 000000F8 ........ BL GetIconIndex \ 000000FC F010D4E1 LDRSH R1,[R4, #+0] \ 00000100 0AA8A0E1 MOV R10,R10, LSL #+16 \ 00000104 4AA8A0E1 MOV R10,R10, ASR #+16 \ 00000108 0A2085E0 ADD R2,R5,R10 \ 0000010C 021081E2 ADD R1,R1,#+2 \ 00000110 000184E0 ADD R0,R4,R0, LSL #+2 \ 00000114 080090E5 LDR R0,[R0, #+8] \ 00000118 ........ BL DrwImage 4659 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 \ 0000011C ACA09BE5 LDR R10,[R11, #+172] \ 00000120 20D08DE2 ADD SP,SP,#+32 \ 00000124 00005AE3 CMP R10,#+0 \ 00000128 90A08902 ADDEQ R10,R9,#+144 \ 0000012C 0B00A0E1 MOV R0,R11 \ 00000130 ........ BL GetIconIndex \ 00000134 F0C0D4E1 LDRSH R12,[R4, #+0] \ 00000138 F410D4E1 LDRSH R1,[R4, #+4] \ 0000013C 000184E0 ADD R0,R4,R0, LSL #+2 \ 00000140 0030A0E3 MOV R3,#+0 \ 00000144 0C1041E0 SUB R1,R1,R12 \ 00000148 02002DE9 PUSH {R1} \ 0000014C 0A20A0E1 MOV R2,R10 4660 4661 // if(t->xstate!=0) 4662 //{ 4663 // DYNPNGICONLIST *xs=GetXSByItem(t->xstate); 4664 DrwImage(XStatusImg[t->xstate],i_rc.x+2,i_rc.y+(font_y*2)); \ 00000150 85A0A0E1 LSL R10,R5,#+1 \ 00000154 0010A0E3 MOV R1,#+0 \ 00000158 02002DE9 PUSH {R1} \ 0000015C 02002DE9 PUSH {R1} \ 00000160 02002DE9 PUSH {R1} \ 00000164 0110A0E3 MOV R1,#+1 \ 00000168 02002DE9 PUSH {R1} \ 0000016C 3C1494E5 LDR R1,[R4, #+1084] \ 00000170 02002DE9 PUSH {R1} \ 00000174 0C0090E5 LDR R0,[R0, #+12] \ 00000178 F210D4E1 LDRSH R1,[R4, #+2] \ 0000017C 0000D0E5 LDRB R0,[R0, #+0] \ 00000180 011085E0 ADD R1,R5,R1 \ 00000184 0C0080E0 ADD R0,R0,R12 \ 00000188 060080E2 ADD R0,R0,#+6 \ 0000018C ........ _BLF PrintText,??PrintText??rA \ 00000190 F200D4E1 LDRSH R0,[R4, #+2] \ 00000194 00208AE0 ADD R2,R10,R0 \ 00000198 F000D4E1 LDRSH R0,[R4, #+0] \ 0000019C 021080E2 ADD R1,R0,#+2 \ 000001A0 B605DBE1 LDRH R0,[R11, #+86] \ 000001A4 000184E0 ADD R0,R4,R0, LSL #+2 \ 000001A8 2C0390E5 LDR R0,[R0, #+812] \ 000001AC ........ BL DrwImage 4665 4666 sprintf(ixtext,(t->xtext)?(t->xtext+1):("Нет хстатуса")); \ 000001B0 A8009BE5 LDR R0,[R11, #+168] \ 000001B4 18D08DE2 ADD SP,SP,#+24 \ 000001B8 000050E3 CMP R0,#+0 \ 000001BC 01108012 ADDNE R1,R0,#+1 \ 000001C0 98108902 ADDEQ R1,R9,#+152 \ 000001C4 5B0E84E2 ADD R0,R4,#+1456 \ 000001C8 160000EF SWI +22 4667 ixtext[strlen(t->xtext)-1]=0; \ 000001CC A8009BE5 LDR R0,[R11, #+168] \ 000001D0 1B0000EF SWI +27 \ 000001D4 040080E0 ADD R0,R0,R4 \ 000001D8 0010A0E3 MOV R1,#+0 \ 000001DC AF15C0E5 STRB R1,[R0, #+1455] \ 000001E0 B605DBE1 LDRH R0,[R11, #+86] \ 000001E4 F0B0D4E1 LDRSH R11,[R4, #+0] \ 000001E8 F410D4E1 LDRSH R1,[R4, #+4] \ 000001EC 000184E0 ADD R0,R4,R0, LSL #+2 \ 000001F0 2C0390E5 LDR R0,[R0, #+812] \ 000001F4 0B1041E0 SUB R1,R1,R11 \ 000001F8 0020D0E5 LDRB R2,[R0, #+0] \ 000001FC 0030A0E3 MOV R3,#+0 \ 00000200 021041E0 SUB R1,R1,R2 \ 00000204 041041E2 SUB R1,R1,#+4 \ 00000208 02002DE9 PUSH {R1} \ 0000020C 5B2E84E2 ADD R2,R4,#+1456 \ 00000210 0010A0E3 MOV R1,#+0 \ 00000214 02002DE9 PUSH {R1} \ 00000218 0110A0E3 MOV R1,#+1 \ 0000021C 02002DE9 PUSH {R1} \ 00000220 0010A0E3 MOV R1,#+0 \ 00000224 02002DE9 PUSH {R1} \ 00000228 0610A0E1 MOV R1,R6 \ 0000022C 02002DE9 PUSH {R1} \ 00000230 3C1494E5 LDR R1,[R4, #+1084] \ 00000234 02002DE9 PUSH {R1} \ 00000238 0000D0E5 LDRB R0,[R0, #+0] \ 0000023C F210D4E1 LDRSH R1,[R4, #+2] \ 00000240 0B0080E0 ADD R0,R0,R11 \ 00000244 01108AE0 ADD R1,R10,R1 \ 00000248 011041E2 SUB R1,R1,#+1 \ 0000024C 040080E2 ADD R0,R0,#+4 4668 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 \ 00000250 ........ _BLF PrintText,??PrintText??rA \ 00000254 18D08DE2 ADD SP,SP,#+24 4669 // } 4670 /* 4671 DrwImage(icons[IS_UNKNOWN],i_rc.x+2,i_rc.y+(font_y*3)-1,0,0); 4672 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); 4673 */ 4674 while(i<_MAX) 4675 { 4676 start_y = (i_rc.y + (font_y*2) + (i/* - (_curpage-1)*_itemFromDisp*/)*font_y); //определяем начальное смещение по у \ ??I_DrawList_1: \ 00000258 F200D4E1 LDRSH R0,[R4, #+2] \ 0000025C 00008AE0 ADD R0,R10,R0 \ 00000260 95062BE0 MLA R11,R5,R6,R0 4677 StoreXYXYtoRECT(&rc,start_x,start_y,i_rc.x2,start_y+font_y); \ 00000264 0B0085E0 ADD R0,R5,R11 \ 00000268 01002DE9 PUSH {R0} \ 0000026C F430D4E1 LDRSH R3,[R4, #+4] \ 00000270 0C109DE5 LDR R1,[SP, #+12] \ 00000274 0B20A0E1 MOV R2,R11 \ 00000278 04008DE2 ADD R0,SP,#+4 \ 0000027C 340100EF SWI +308 4678 if(i==i_curpos)//Если наш итем то выделяем \ 00000280 540097E5 LDR R0,[R7, #+84] \ 00000284 04D08DE2 ADD SP,SP,#+4 \ 00000288 000056E1 CMP R6,R0 \ 0000028C 1100001A BNE ??I_DrawList_2 4679 DrawRoundedFrame(rc.x-2,rc.y-2,rc.x2-5,rc.y2-4,0,0,0,MMCursorClr,MMCursorBGClr);//cursor \ 00000290 D8009FE5 LDR R0,??I_DrawList_0+0x4 ;; MMCursorBGClr \ 00000294 01002DE9 PUSH {R0} \ 00000298 D4009FE5 LDR R0,??I_DrawList_0+0x8 ;; MMCursorClr \ 0000029C 01002DE9 PUSH {R0} \ 000002A0 0000A0E3 MOV R0,#+0 \ 000002A4 01002DE9 PUSH {R0} \ 000002A8 01002DE9 PUSH {R0} \ 000002AC 01002DE9 PUSH {R0} \ 000002B0 FA01DDE1 LDRSH R0,[SP, #+26] \ 000002B4 043040E2 SUB R3,R0,#+4 \ 000002B8 F801DDE1 LDRSH R0,[SP, #+24] \ 000002BC 052040E2 SUB R2,R0,#+5 \ 000002C0 F601DDE1 LDRSH R0,[SP, #+22] \ 000002C4 021040E2 SUB R1,R0,#+2 \ 000002C8 F401DDE1 LDRSH R0,[SP, #+20] \ 000002CC 020040E2 SUB R0,R0,#+2 \ 000002D0 500100EF SWI +336 \ 000002D4 14D08DE2 ADD SP,SP,#+20 4680 4681 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: \ 000002D8 F000D4E1 LDRSH R0,[R4, #+0] \ 000002DC 0620A0E1 MOV R2,R6 \ 000002E0 0B10A0E1 MOV R1,R11 \ 000002E4 020080E2 ADD R0,R0,#+2 \ 000002E8 ........ BL DrawIconInfo \ 000002EC F410DDE1 LDRSH R1,[SP, #+4] \ 000002F0 F020DDE1 LDRSH R2,[SP, #+0] \ 000002F4 0030A0E3 MOV R3,#+0 \ 000002F8 021041E0 SUB R1,R1,R2 \ 000002FC 131041E2 SUB R1,R1,#+19 \ 00000300 02002DE9 PUSH {R1} \ 00000304 0010A0E3 MOV R1,#+0 \ 00000308 02002DE9 PUSH {R1} \ 0000030C 02002DE9 PUSH {R1} \ 00000310 02002DE9 PUSH {R1} \ 00000314 0110A0E3 MOV R1,#+1 \ 00000318 02002DE9 PUSH {R1} \ 0000031C 3C1494E5 LDR R1,[R4, #+1084] \ 00000320 02002DE9 PUSH {R1} \ 00000324 F0B0D4E1 LDRSH R11,[R4, #+0] \ 00000328 061189E0 ADD R1,R9,R6, LSL #+2 \ 0000032C 042011E5 LDR R2,[R1, #-4] \ 00000330 FA11DDE1 LDRSH R1,[SP, #+26] \ 00000334 00008BE0 ADD R0,R11,R0 \ 00000338 060080E2 ADD R0,R0,#+6 \ 0000033C 031041E2 SUB R1,R1,#+3 \ 00000340 ........ _BLF PrintText,??PrintText??rA 4682 i++; \ 00000344 016086E2 ADD R6,R6,#+1 4683 } \ 00000348 060056E3 CMP R6,#+6 \ 0000034C 18D08DE2 ADD SP,SP,#+24 \ 00000350 C0FFFFBA BLT ??I_DrawList_1 4684 UnlockSched(); \ 00000354 470100EF SWI +327 4685 i_rc.y=back; \ 00000358 0C009DE5 LDR R0,[SP, #+12] \ 0000035C B200C4E1 STRH R0,[R4, #+2] 4686 mfree(s); \ 00000360 0800A0E1 MOV R0,R8 \ 00000364 150000EF SWI +21 4687 } \ 00000368 FF8FBDE8 POP {R0-R11,PC} ;; return \ ??I_DrawList_0: \ 0000036C ........ DC32 menutext \ 00000370 ........ DC32 MMCursorBGClr \ 00000374 ........ DC32 MMCursorClr 4688 4689 // Управление курсором \ In segment CODE, align 4, keep-with-next 4690 void I_MoveUp() 4691 { 4692 if(i_curpos > 0) i_curpos--; \ I_MoveUp: \ 00000000 ........ LDR R0,??DataTable211 ;; screen3 \ 00000004 541090E5 LDR R1,[R0, #+84] \ 00000008 010051E3 CMP R1,#+1 \ 0000000C 011041A2 SUBGE R1,R1,#+1 4693 else 4694 i_curpos=_MAX-1; \ 00000010 0510A0B3 MOVLT R1,#+5 \ 00000014 541080E5 STR R1,[R0, #+84] 4695 } \ 00000018 1EFF2FE1 BX LR ;; return 4696 4697 \ In segment CODE, align 4, keep-with-next 4698 void I_MoveDown() 4699 { 4700 if(i_curpos < _MAX - 1 ) i_curpos++; \ I_MoveDown: \ 00000000 ........ LDR R0,??DataTable211 ;; screen3 \ 00000004 541090E5 LDR R1,[R0, #+84] \ 00000008 050051E3 CMP R1,#+5 \ 0000000C 011081B2 ADDLT R1,R1,#+1 4701 else i_curpos=1; \ 00000010 0110A0A3 MOVGE R1,#+1 \ 00000014 541080E5 STR R1,[R0, #+84] 4702 } \ 00000018 1EFF2FE1 BX LR ;; return 4703 \ In segment CODE, align 4, keep-with-next 4704 void I_Redraw() 4705 { \ I_Redraw: \ 00000000 00402DE9 PUSH {LR} 4706 DirectRedrawGUI(); \ 00000004 3F0100EF SWI +319 4707 } \ 00000008 0080BDE8 POP {PC} ;; return 4708 4709 4710 void DrawHeader(); 4711 \ In segment CODE, align 4, keep-with-next 4712 void I_OnRedraw(MAIN_GUI *data) 4713 { \ I_OnRedraw: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 4714 DrawHeader(); 4715 DrwImage(&screen,0,hy+2); \ 00000004 ........ LDR R4,??DataTable199 ;; i_rc 4716 // DrawRoundedFrame(0,YDISP,ScreenW()-1,ScreenH()-1,0,0,0,"\x00\x00\x00\x30","\x00\x00\x00\x30"); 4717 DrawRoundedFrame(i_rc.x,i_rc.y,i_rc.x2,i_rc.y2,0,0,0,/*"\x00\x00\x00\x45"*/MMBackgrBordClr,MMBackgrClr); \ 00000008 C0719FE5 LDR R7,??I_OnRedraw_0 ;; MMBackgrClr \ 0000000C C0619FE5 LDR R6,??I_OnRedraw_0+0x4 ;; MMBackgrBordClr \ 00000010 20D04DE2 SUB SP,SP,#+32 \ 00000014 ........ BL DrawHeader \ 00000018 380494E5 LDR R0,[R4, #+1080] \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 022080E2 ADD R2,R0,#+2 \ 00000024 AC019FE5 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 4718 I_DrawList(); \ 00000060 ........ BL I_DrawList 4719 SetScrollEdgeDelay(0); \ 00000064 0000A0E3 MOV R0,#+0 \ 00000068 ........ _BLF SetScrollEdgeDelay,??SetScrollEdgeDelay??rA 4720 if(i_curpos==0) \ 0000006C ........ LDR R0,??DataTable200 ;; screen3 + 84 \ 00000070 000090E5 LDR R0,[R0, #+0] \ 00000074 14D08DE2 ADD SP,SP,#+20 \ 00000078 000050E3 CMP R0,#+0 \ 0000007C 5100001A BNE ??I_OnRedraw_1 4721 { 4722 char xl[32] = {0}; \ 00000080 0D00A0E1 MOV R0,SP \ 00000084 0010A0E3 MOV R1,#+0 \ 00000088 0020A0E3 MOV R2,#+0 \ 0000008C 0130A0E1 MOV R3,R1 \ 00000090 0150A0E1 MOV R5,R1 \ 00000094 2E00A0E8 STM R0!,{R1-R3,R5} \ 00000098 2E0080E8 STM R0,{R1-R3,R5} 4723 char xs[128] = {0}; ^ Warning[Pe177]: variable "xs" was declared but never referenced 4724 int c; 4725 int i=0; \ 0000009C 0100A0E1 MOV R0,R1 4726 char *p=ixtext; \ 000000A0 5B5E84E2 ADD R5,R4,#+1456 4727 c=*p; 4728 while(i<32) 4729 { 4730 xl[i]=*p; \ ??I_OnRedraw_2: \ 000000A4 0020D5E5 LDRB R2,[R5, #+0] \ 000000A8 0D10A0E1 MOV R1,SP \ 000000AC 0120C0E7 STRB R2,[R0, +R1] 4731 i++; 4732 c=*p++; \ 000000B0 ........ LDRB R1,[R5], #+1 \ 000000B4 010080E2 ADD R0,R0,#+1 4733 if(c==13) break; \ 000000B8 0D0051E3 CMP R1,#+13 \ 000000BC 0100000A BEQ ??I_OnRedraw_3 4734 } \ 000000C0 200050E3 CMP R0,#+32 \ 000000C4 F6FFFFBA BLT ??I_OnRedraw_2 4735 xl[i]=0; \ ??I_OnRedraw_3: \ 000000C8 0D10A0E1 MOV R1,SP \ 000000CC 0020A0E3 MOV R2,#+0 \ 000000D0 0120C0E7 STRB R2,[R0, +R1] 4736 *p++; 4737 // sprintf(xs,p); 4738 // xs[strlen(xs)-1]=0; 4739 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); \ 000000D4 3C0494E5 LDR R0,[R4, #+1084] \ 000000D8 ........ _BLF FontH,??FontH??rA \ 000000DC 0080A0E1 MOV R8,R0 \ 000000E0 3C0494E5 LDR R0,[R4, #+1084] \ 000000E4 ........ _BLF FontH,??FontH??rA \ 000000E8 F210D4E1 LDRSH R1,[R4, #+2] \ 000000EC 80002DE9 PUSH {R7} \ 000000F0 40002DE9 PUSH {R6} \ 000000F4 0020A0E3 MOV R2,#+0 \ 000000F8 04002DE9 PUSH {R2} \ 000000FC 04002DE9 PUSH {R2} \ 00000100 04002DE9 PUSH {R2} \ 00000104 F420D4E1 LDRSH R2,[R4, #+4] \ 00000108 883181E0 ADD R3,R1,R8, LSL #+3 \ 0000010C 011080E0 ADD R1,R0,R1 \ 00000110 F000D4E1 LDRSH R0,[R4, #+0] \ 00000114 052082E2 ADD R2,R2,#+5 \ 00000118 050040E2 SUB R0,R0,#+5 \ 0000011C 500100EF SWI +336 4740 // 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 4741 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 \ 00000120 3C0494E5 LDR R0,[R4, #+1084] \ 00000124 ........ _BLF FontH,??FontH??rA \ 00000128 F420D4E1 LDRSH R2,[R4, #+4] \ 0000012C 0010A0E1 MOV R1,R0 \ 00000130 F000D4E1 LDRSH R0,[R4, #+0] \ 00000134 0030A0E3 MOV R3,#+0 \ 00000138 002042E0 SUB R2,R2,R0 \ 0000013C 04002DE9 PUSH {R2} \ 00000140 0020A0E3 MOV R2,#+0 \ 00000144 04002DE9 PUSH {R2} \ 00000148 04002DE9 PUSH {R2} \ 0000014C 0120A0E3 MOV R2,#+1 \ 00000150 04002DE9 PUSH {R2} \ 00000154 04002DE9 PUSH {R2} \ 00000158 3C2494E5 LDR R2,[R4, #+1084] \ 0000015C 04002DE9 PUSH {R2} \ 00000160 F260D4E1 LDRSH R6,[R4, #+2] \ 00000164 2C208DE2 ADD R2,SP,#+44 \ 00000168 811086E0 ADD R1,R6,R1, LSL #+1 \ 0000016C ........ _BLF PrintText,??PrintText??rA \ 00000170 2CD08DE2 ADD SP,SP,#+44 4742 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 \ 00000174 3C0494E5 LDR R0,[R4, #+1084] \ 00000178 ........ _BLF FontH,??FontH??rA \ 0000017C F420D4E1 LDRSH R2,[R4, #+4] \ 00000180 0010A0E1 MOV R1,R0 \ 00000184 F000D4E1 LDRSH R0,[R4, #+0] \ 00000188 0030A0E3 MOV R3,#+0 \ 0000018C 002042E0 SUB R2,R2,R0 \ 00000190 04002DE9 PUSH {R2} \ 00000194 0020A0E3 MOV R2,#+0 \ 00000198 04002DE9 PUSH {R2} \ 0000019C 04002DE9 PUSH {R2} \ 000001A0 0120A0E3 MOV R2,#+1 \ 000001A4 04002DE9 PUSH {R2} \ 000001A8 04002DE9 PUSH {R2} \ 000001AC 3C2494E5 LDR R2,[R4, #+1084] \ 000001B0 04002DE9 PUSH {R2} \ 000001B4 F240D4E1 LDRSH R4,[R4, #+2] \ 000001B8 012085E2 ADD R2,R5,#+1 \ 000001BC 011184E0 ADD R1,R4,R1, LSL #+2 \ 000001C0 ........ _BLF PrintText,??PrintText??rA \ 000001C4 18D08DE2 ADD SP,SP,#+24 4743 } 4744 // GBS_StartTimerProc(&i_tmr, 100, I_Redraw); 4745 } \ ??I_OnRedraw_1: \ 000001C8 20D08DE2 ADD SP,SP,#+32 ;; stack cleaning \ 000001CC F081BDE8 POP {R4-R8,PC} ;; return \ ??I_OnRedraw_0: \ 000001D0 ........ DC32 MMBackgrClr \ 000001D4 ........ DC32 MMBackgrBordClr \ 000001D8 ........ DC32 screen 4746 \ In segment CODE, align 4, keep-with-next 4747 void I_onCreate(MAIN_GUI *data, void *(*malloc_adr)(int)) 4748 { \ I_onCreate: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 4749 if(isSystemFont) clfont=100+pngFont; \ 00000008 ........ LDR R0,??DataTable197 ;; isSystemFont \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 0300000A BEQ ??I_onCreate_0 \ 00000018 ........ LDR R0,??DataTable198 ;; pngFont \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 640080E2 ADD R0,R0,#+100 \ 00000024 000000EA B ??I_onCreate_1 4750 else clfont=2; \ ??I_onCreate_0: \ 00000028 0200A0E3 MOV R0,#+2 \ ??I_onCreate_1: \ 0000002C ........ LDR R5,??DataTable199 ;; i_rc \ 00000030 3C0485E5 STR R0,[R5, #+1084] 4751 DrawRoundedFrame(0,YDISP,ScreenW()-1,ScreenH()-1,0,0,0,"\x00\x00\x00\x30","\x00\x00\x00\x30"); \ 00000034 898100EF SWI +33161 \ 00000038 0060A0E1 MOV R6,R0 \ 0000003C 888100EF SWI +33160 \ 00000040 84109FE5 LDR R1,??I_onCreate_2 ;; `?` \ 00000044 013046E2 SUB R3,R6,#+1 \ 00000048 0120A0E1 MOV R2,R1 \ 0000004C 04002DE9 PUSH {R2} \ 00000050 02002DE9 PUSH {R1} \ 00000054 0010A0E3 MOV R1,#+0 \ 00000058 02002DE9 PUSH {R1} \ 0000005C 02002DE9 PUSH {R1} \ 00000060 02002DE9 PUSH {R1} \ 00000064 012040E2 SUB R2,R0,#+1 \ 00000068 0000A0E3 MOV R0,#+0 \ 0000006C 500100EF SWI +336 4752 DoScreen(); \ 00000070 ........ _BLF DoScreen,??DoScreen??rA 4753 #ifdef ELKA 4754 i_rc.x=30; 4755 i_rc.x2=ScreenW()-25; 4756 #else 4757 i_rc.x=5; \ 00000074 0500A0E3 MOV R0,#+5 \ 00000078 B000C5E1 STRH R0,[R5, #+0] 4758 i_rc.x2=ScreenW()-5; \ 0000007C 888100EF SWI +33160 \ 00000080 050040E2 SUB R0,R0,#+5 \ 00000084 B400C5E1 STRH R0,[R5, #+4] 4759 #endif 4760 i_rc.y=hy+5; \ 00000088 380495E5 LDR R0,[R5, #+1080] \ 0000008C 050080E2 ADD R0,R0,#+5 \ 00000090 B200C5E1 STRH R0,[R5, #+2] 4761 i_rc.y2=i_rc.y+(FontH(clfont)*(_MAX+3)); \ 00000094 3C0495E5 LDR R0,[R5, #+1084] \ 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] 4762 // StoreXYXYToRECT(&i_rc,30,hy+5,ScreenW()-25,i_rc.y+(FontH(clfont)*(_MAX+4))); 4763 SetCanvasFlag(1); \ 000000AC 0100A0E3 MOV R0,#+1 \ 000000B0 ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 4764 i_curpos=1; \ 000000B4 ........ LDR R1,??DataTable200 ;; screen3 + 84 \ 000000B8 0100A0E3 MOV R0,#+1 \ 000000BC 000081E5 STR R0,[R1, #+0] 4765 data->gui.state=1; \ 000000C0 0C00C4E5 STRB R0,[R4, #+12] 4766 } \ 000000C4 14D08DE2 ADD SP,SP,#+20 \ 000000C8 7080BDE8 POP {R4-R6,PC} ;; return \ ??I_onCreate_2: \ 000000CC ........ DC32 `?` 4767 \ In segment CODE, align 4, keep-with-next 4768 void I_onClose(MAIN_GUI *data, void (*mfree_adr)(void *)) 4769 { \ I_onClose: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 4770 // mfree(ixtext); 4771 mfree(screen.bitmap); \ 00000008 18009FE5 LDR R0,??I_onClose_0 ;; screen + 4 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 150000EF SWI +21 4772 GBS_DelTimer(&i_tmr); \ 00000014 10009FE5 LDR R0,??I_onClose_0+0x4 ;; i_tmr \ 00000018 8C0100EF SWI +396 4773 data->gui.state=0; \ 0000001C 0000A0E3 MOV R0,#+0 \ 00000020 0C00C4E5 STRB R0,[R4, #+12] 4774 } \ 00000024 1080BDE8 POP {R4,PC} ;; return \ ??I_onClose_0: \ 00000028 ........ DC32 screen + 4 \ 0000002C ........ DC32 i_tmr 4775 \ In segment CODE, align 4, keep-with-next 4776 void I_onFocus(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *)) 4777 { \ I_onFocus: \ 00000000 00402DE9 PUSH {LR} 4778 data->gui.state=2; \ 00000004 0210A0E3 MOV R1,#+2 \ 00000008 0C10C0E5 STRB R1,[R0, #+12] 4779 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 4780 } \ 00000010 0080BDE8 POP {PC} ;; return 4781 \ In segment CODE, align 4, keep-with-next 4782 void I_onUnfocus(MAIN_GUI *data, void (*mfree_adr)(void *)) 4783 { 4784 if (data->gui.state!=2) return; \ I_onUnfocus: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 4785 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 4786 } \ 00000010 1EFF2FE1 BX LR ;; return 4787 \ In segment CODE, align 4, keep-with-next 4788 int I_OnKey(MAIN_GUI *data, GUI_MSG *msg) 4789 { \ I_OnKey: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0140A0E1 MOV R4,R1 4790 DirectRedrawGUI(); 4791 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 4792 { 4793 switch(msg->gbsmsg->submess) \ 0000002C 080094E5 LDR R0,[R4, #+8] \ 00000030 040050E2 SUBS R0,R0,#+4 \ 00000034 08005012 SUBSNE R0,R0,#+8 \ 00000038 1F00000A BEQ ??I_OnKey_1 \ 0000003C 2F0050E2 SUBS R0,R0,#+47 \ 00000040 0400000A BEQ ??I_OnKey_2 \ 00000044 010050E2 SUBS R0,R0,#+1 \ 00000048 1900000A BEQ ??I_OnKey_3 \ 0000004C 010050E2 SUBS R0,R0,#+1 \ 00000050 1900000A BEQ ??I_OnKey_1 \ 00000054 000000EA B ??I_OnKey_0 4794 { 4795 case UP_BUTTON: I_MoveUp(); break; \ ??I_OnKey_2: \ 00000058 ........ BL I_MoveUp 4796 case DOWN_BUTTON: I_MoveDown(); break; 4797 case LEFT_BUTTON: case RIGHT_SOFT:case RED_BUTTON: return (1); 4798 } 4799 } 4800 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 0F00001A BNE ??I_OnKey_4 4801 { 4802 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 0A00001A BNE ??I_OnKey_4 4803 { 4804 case ENTER_BUTTON: case LEFT_SOFT: case RIGHT_BUTTON: 4805 { 4806 CLIST *t; 4807 t=FindContactByUin(uinContact); 4808 t->isIndividSet=1; \ 00000080 ........ LDR R0,??DataTable203 ;; i_rc + 1076 \ 00000084 000090E5 LDR R0,[R0, #+0] \ 00000088 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 0000008C 0110A0E3 MOV R1,#+1 \ 00000090 581080E5 STR R1,[R0, #+88] 4809 ((void (*)(void))(menuproc[i_curpos-1]))(); \ 00000094 ........ LDR R0,??DataTable211 ;; screen3 \ 00000098 541090E5 LDR R1,[R0, #+84] \ 0000009C 010180E0 ADD R0,R0,R1, LSL #+2 \ 000000A0 700090E5 LDR R0,[R0, #+112] \ 000000A4 30FF2FE1 BLX R0 4810 REDRAW(); \ 000000A8 720100EF SWI +370 4811 } 4812 break; 4813 } 4814 } 4815 4816 return(0); \ ??I_OnKey_4: \ 000000AC 0000A0E3 MOV R0,#+0 \ 000000B0 7080BDE8 POP {R4-R6,PC} ;; return \ ??I_OnKey_3: \ 000000B4 ........ BL I_MoveDown \ 000000B8 E7FFFFEA B ??I_OnKey_0 \ ??I_OnKey_1: \ 000000BC 0100A0E3 MOV R0,#+1 \ 000000C0 7080BDE8 POP {R4-R6,PC} 4817 } 4818 4819 extern void kill_data(void *p, void (*func_p)(void *)); 4820 \ In segment CODE, align 4, keep-with-next 4821 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 4822 int I_method9(void){return(0);} \ I_method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 4823 4824 const void * const I_gui_methods[11]={ 4825 (void *)I_OnRedraw, 4826 (void *)I_onCreate, 4827 (void *)I_onClose, 4828 (void *)I_onFocus, 4829 (void *)I_onUnfocus, 4830 (void *)I_OnKey, 4831 0, 4832 (void *)kill_data, 4833 (void *)I_method8, 4834 (void *)I_method9, 4835 0 4836 }; 4837 \ In segment CODE, align 4, keep-with-next 4838 int CreateContactMenu(CLIST *t) 4839 { 4840 uinContact=t->uin; \ CreateContactMenu: \ 00000000 ........ LDR R1,??DataTable203 ;; i_rc + 1076 \ 00000004 10402DE9 PUSH {R4,LR} \ 00000008 0C0090E5 LDR R0,[R0, #+12] \ 0000000C 000081E5 STR R0,[R1, #+0] 4841 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000010 4000A0E3 MOV R0,#+64 \ 00000014 140000EF SWI +20 \ 00000018 0040A0E1 MOV R4,R0 4842 zeromem(main_gui,sizeof(MAIN_GUI)); \ 0000001C 4010A0E3 MOV R1,#+64 \ 00000020 1D0100EF SWI +285 4843 // main_gui->gui.canvas=(void *)(&Canvas); 4844 main_gui->gui.methods=(void *)I_gui_methods; \ 00000024 14009FE5 LDR R0,??CreateContactMenu_0 ;; I_gui_methods \ 00000028 040084E5 STR R0,[R4, #+4] 4845 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 0000002C 158000EF SWI +32789 \ 00000030 200084E5 STR R0,[R4, #+32] 4846 //patch_rect((RECT*)&Canvas,0,YDISP,ScreenW()-1,ScreenH()-1); 4847 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 4848 } 4849 4850 /*********************************************************************/ 4851 4852 int itemFromDisp;//кол-во на экране 4853 int totalItems;//общее количество итемов 4854 //int curpos=0;//позичия курсора 4855 int curpage=1;//текущая страница 4856 int collum=0;//столбцы))) 0 - первый, 1- второй 4857 const char _t[]="%t"; 4858 const char _d[]="%d"; 4859 //int clfont; 4860 4861 #ifdef ELKA 4862 #ifndef ICONBAR 4863 #undef YDISP 4864 #define YDISP 0 4865 #endif 4866 #endif 4867 4868 #define CLIST_Y1 (YDISP+FontH(clfont)+4) 4869 4870 \ In segment CODE, align 4, keep-with-next 4871 void RecountMenu(CLIST *req, int needfocus) 4872 { \ RecountMenu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 4873 int i; 4874 int j; 4875 if (!maingui_id) return; //Нечего считать \ 00000004 ........ LDR R5,??DataTable210 ;; i_rc \ 00000008 0140A0E1 MOV R4,R1 \ 0000000C 601295E5 LDR R1,[R5, #+608] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 7080BD08 POPEQ {R4-R6,PC} 4876 if (req==NULL) \ 00000018 000050E3 CMP R0,#+0 4877 { 4878 j=0; \ 0000001C 0060A003 MOVEQ R6,#+0 \ 00000020 0100000A BEQ ??RecountMenu_0 4879 } 4880 else 4881 { 4882 j=FindContactByContact(req); \ 00000024 ........ _BLF FindContactByContact,??FindContactByContact??rA \ 00000028 0060A0E1 MOV R6,R0 4883 } 4884 i=CountContacts(); \ ??RecountMenu_0: \ 0000002C ........ _BLF CountContacts,??CountContacts??rA 4885 if (j>=i) j=i-1; \ 00000030 000056E1 CMP R6,R0 \ 00000034 016040A2 SUBGE R6,R0,#+1 4886 if (j<0) j=0; \ 00000038 000056E3 CMP R6,#+0 \ 0000003C 0060A043 MOVMI R6,#+0 4887 if(needfocus) curpos=j; \ 00000040 000054E3 CMP R4,#+0 \ 00000044 30648515 STRNE R6,[R5, #+1072] 4888 // if (IsGuiOnTop(contactlist_menu_id)) 4889 SMART_REDRAW();//DirectRedrawGUI_ID(contactlist_menu_id);//contactlist_menu_id \ 00000048 ........ BL SMART_REDRAW 4890 } \ 0000004C 7080BDE8 POP {R4-R6,PC} ;; return 4891 4892 \ In segment CODE, align 4, keep-with-next 4893 void DrawStr(int x,int y,char*s,char *color,int font,int align) 4894 { \ 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 4895 SetFontColor(color,transparent,0); \ 00000014 ........ LDR R1,??DataTable206 ;; screen3 + 284 \ 00000018 0260A0E1 MOV R6,R2 \ 0000001C 0300A0E1 MOV R0,R3 \ 00000020 0020A0E3 MOV R2,#+0 \ 00000024 ........ _BLF SetFontColor,??SetFontColor??rA 4896 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 4897 //void PrintText( int x, int y, char *str, int align, int font, int space, int lineSpace, int isScroll, short fixSize, int maxLen); 4898 } \ 00000048 F381BDE8 POP {R0,R1,R4-R8,PC} ;; return 4899 \ In segment CODE, align 4, keep-with-next 4900 void DrawText(int x,int y,int x2,char*s,char *color,int font,int align,int isScroll) 4901 { \ 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 4902 SetFontColor(color,transparent,0); \ 0000001C ........ LDR R1,??DataTable206 ;; screen3 + 284 \ 00000020 0260A0E1 MOV R6,R2 \ 00000024 0370A0E1 MOV R7,R3 \ 00000028 0020A0E3 MOV R2,#+0 \ 0000002C ........ _BLF SetFontColor,??SetFontColor??rA 4903 // SetScrollEdgeDelay(0); 4904 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 4905 //int x, int y, char *str, int align, int font, int space, int lineSpace, int isScroll, short fixSize, int maxLen); 4906 } \ 00000070 18D08DE2 ADD SP,SP,#+24 \ 00000074 F087BDE8 POP {R4-R10,PC} ;; return 4907 4908 4909 IMGHDR screen3={0,0,8,""}; 4910 int shot_soft=0; 4911 \ In segment CODE, align 4, keep-with-next 4912 void DoScreen3(int h) 4913 { \ DoScreen3: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 4914 //int SCREENSIZE = ScreenH()*ScreenW(); 4915 int HSIZE = (ScreenH()-h)*ScreenW(); 4916 int ScrH=h+2; 4917 int ScrW=ScreenW(); 4918 char *ms=RamScreenBuffer(); 4919 screen3.w=ScrW; \ 00000004 ........ LDR R8,??DataTable218 ;; screen3 \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 898100EF SWI +33161 \ 00000010 045040E0 SUB R5,R0,R4 \ 00000014 888100EF SWI +33160 \ 00000018 900505E0 MUL R5,R0,R5 \ 0000001C 024084E2 ADD R4,R4,#+2 \ 00000020 888100EF SWI +33160 \ 00000024 0060A0E1 MOV R6,R0 \ 00000028 E08000EF SWI +32992 \ 0000002C 0070A0E1 MOV R7,R0 4920 screen3.h=ScrH; 4921 screen3.bitmap=malloc(ScrW*ScrH*2); \ 00000030 940600E0 MUL R0,R4,R6 \ 00000034 0060C8E5 STRB R6,[R8, #+0] \ 00000038 0140C8E5 STRB R4,[R8, #+1] \ 0000003C 8040A0E1 LSL R4,R0,#+1 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 140000EF SWI +20 \ 00000048 040088E5 STR R0,[R8, #+4] 4922 ms+=(HSIZE*2); 4923 memcpy(screen3.bitmap, ms, ScrW*ScrH*2); \ 0000004C 0420A0E1 MOV R2,R4 \ 00000050 851087E0 ADD R1,R7,R5, LSL #+1 \ 00000054 1E0100EF SWI +286 4924 } \ 00000058 F081BDE8 POP {R4-R8,PC} ;; return 4925 \ In segment CODE, align 4, keep-with-next 4926 void DrawSoftKeys(char *left,char *right) 4927 { \ DrawSoftKeys: \ 00000000 F34F2DE9 PUSH {R0,R1,R4-R11,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 4928 TTime t; 4929 char *s=malloc(32); \ 00000008 2000A0E3 MOV R0,#+32 \ 0000000C 140000EF SWI +20 \ 00000010 0040A0E1 MOV R4,R0 4930 if(!PNG_SOFTKEY) clfont=100+HeadFont; \ 00000014 ........ LDR R0,??DataTable215 ;; PNG_SOFTKEY \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0300001A BNE ??DrawSoftKeys_0 \ 00000024 ........ LDR R0,??DataTable223 ;; HeadFont \ 00000028 000090E5 LDR R0,[R0, #+0] \ 0000002C 640080E2 ADD R0,R0,#+100 \ 00000030 000000EA B ??DrawSoftKeys_1 4931 else clfont=4; \ ??DrawSoftKeys_0: \ 00000034 0400A0E3 MOV R0,#+4 \ ??DrawSoftKeys_1: \ 00000038 ........ LDR R5,??DataTable210 ;; i_rc 4932 4933 int FntH=FontH(clfont); 4934 int scr_w=ScreenW()-1; 4935 int scr_h=ScreenH()-1; 4936 4937 LockSched(); 4938 #ifdef ELKA 4939 if(shot_soft!=2) 4940 { 4941 DrawRoundedFrame(0,ScreenH()-1-FntH-2,ScreenW()-1,ScreenH()-1,0,0,0,clrBlack,clrBlack); 4942 for(int i=FontH(clfont);i>0;i-=2) 4943 DrawRoundedFrame(0,scr_h-FntH-2,scr_w,scr_h-FntH+i+2,0,0,0,SoftBackgrClr,SoftBackgrClr); 4944 4945 DoScreen3(FntH); 4946 shot_soft++; 4947 SMART_REDRAW(); 4948 return; 4949 } 4950 else 4951 DrwImage(&screen3,0,scr_h-FntH); 4952 #else 4953 DrawRoundedFrame(0,ScreenH()-1-FntH-2,ScreenW()-1,ScreenH()-1,0,0,0,clrBlack,clrBlack); \ 0000003C ........ LDR R11,??DataTable211 ;; screen3 \ 00000040 3C0485E5 STR R0,[R5, #+1084] \ 00000044 ........ _BLF FontH,??FontH??rA \ 00000048 0060A0E1 MOV R6,R0 \ 0000004C 888100EF SWI +33160 \ 00000050 017040E2 SUB R7,R0,#+1 \ 00000054 898100EF SWI +33161 \ 00000058 018040E2 SUB R8,R0,#+1 \ 0000005C 460100EF SWI +326 \ 00000060 898100EF SWI +33161 \ 00000064 0090A0E1 MOV R9,R0 \ 00000068 888100EF SWI +33160 \ 0000006C 00A0A0E1 MOV R10,R0 \ 00000070 898100EF SWI +33161 \ 00000074 441F8BE2 ADD R1,R11,#+272 \ 00000078 02002DE9 PUSH {R1} \ 0000007C 02002DE9 PUSH {R1} \ 00000080 013049E2 SUB R3,R9,#+1 \ 00000084 01204AE2 SUB R2,R10,#+1 \ 00000088 010040E2 SUB R0,R0,#+1 \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 02002DE9 PUSH {R1} \ 00000094 02002DE9 PUSH {R1} \ 00000098 02002DE9 PUSH {R1} \ 0000009C 060040E0 SUB R0,R0,R6 \ 000000A0 021040E2 SUB R1,R0,#+2 \ 000000A4 0000A0E3 MOV R0,#+0 \ 000000A8 500100EF SWI +336 4954 for(int i=FontH(clfont);i>0;i-=2) \ 000000AC 3C0495E5 LDR R0,[R5, #+1084] \ 000000B0 ........ _BLF FontH,??FontH??rA \ 000000B4 0090A0E1 MOV R9,R0 \ 000000B8 010059E3 CMP R9,#+1 \ 000000BC 14D08DE2 ADD SP,SP,#+20 \ 000000C0 110000BA BLT ??DrawSoftKeys_2 \ 000000C4 ........ LDR R10,??DataTable219 ;; SoftBackgrClr 4955 DrawRoundedFrame(0,scr_h-FntH-2,scr_w,scr_h-FntH+i,0,0,0,SoftBackgrClr,SoftBackgrClr); \ ??DrawSoftKeys_3: \ 000000C8 0A00A0E1 MOV R0,R10 \ 000000CC 01002DE9 PUSH {R0} \ 000000D0 01002DE9 PUSH {R0} \ 000000D4 0720A0E1 MOV R2,R7 \ 000000D8 0000A0E3 MOV R0,#+0 \ 000000DC 01002DE9 PUSH {R0} \ 000000E0 01002DE9 PUSH {R0} \ 000000E4 01002DE9 PUSH {R0} \ 000000E8 060048E0 SUB R0,R8,R6 \ 000000EC 003089E0 ADD R3,R9,R0 \ 000000F0 021040E2 SUB R1,R0,#+2 \ 000000F4 0000A0E3 MOV R0,#+0 \ 000000F8 500100EF SWI +336 \ 000000FC 029049E2 SUB R9,R9,#+2 \ 00000100 010059E3 CMP R9,#+1 \ 00000104 14D08DE2 ADD SP,SP,#+20 \ 00000108 EEFFFFAA BGE ??DrawSoftKeys_3 4956 #endif 4957 4958 SetFontColor((char*)SoftFontClr,transparent,0); \ ??DrawSoftKeys_2: \ 0000010C ........ LDR R9,??DataTable220 ;; SoftFontClr \ 00000110 0020A0E3 MOV R2,#+0 \ 00000114 471F8BE2 ADD R1,R11,#+284 \ 00000118 0900A0E1 MOV R0,R9 \ 0000011C ........ _BLF SetFontColor,??SetFontColor??rA 4959 4960 if(sendq_l) \ 00000120 010048E2 SUB R0,R8,#+1 \ 00000124 ........ LDR R8,??DataTable214 ;; menutext \ 00000128 066040E0 SUB R6,R0,R6 \ 0000012C 1C009BE5 LDR R0,[R11, #+28] \ 00000130 000050E3 CMP R0,#+0 \ 00000134 0A00000A BEQ ??DrawSoftKeys_4 4961 { 4962 sprintf(s,"Q: %d b",sendq_l); \ 00000138 1C209BE5 LDR R2,[R11, #+28] \ 0000013C A81088E2 ADD R1,R8,#+168 \ 00000140 0400A0E1 MOV R0,R4 \ 00000144 160000EF SWI +22 4963 PrintField(scr_w,scr_h-1-FntH,s,2,clfont,1); \ 00000148 0100A0E3 MOV R0,#+1 \ 0000014C 01002DE9 PUSH {R0} \ 00000150 3C0495E5 LDR R0,[R5, #+1084] \ 00000154 0230A0E3 MOV R3,#+2 \ 00000158 01002DE9 PUSH {R0} \ 0000015C 0420A0E1 MOV R2,R4 \ 00000160 050000EA B ??DrawSoftKeys_5 4964 // DrawStr(2,scr_h-1-FntH,s,SoftFontClr,clfont,2); 4965 } 4966 else 4967 PrintField(scr_w,scr_h-1-FntH,right,2,clfont,1); \ ??DrawSoftKeys_4: \ 00000164 0100A0E3 MOV R0,#+1 \ 00000168 01002DE9 PUSH {R0} \ 0000016C 3C0495E5 LDR R0,[R5, #+1084] \ 00000170 0230A0E3 MOV R3,#+2 \ 00000174 01002DE9 PUSH {R0} \ 00000178 14209DE5 LDR R2,[SP, #+20] \ ??DrawSoftKeys_5: \ 0000017C 0610A0E1 MOV R1,R6 \ 00000180 0700A0E1 MOV R0,R7 \ 00000184 ........ _BLF PrintField,??PrintField??rA \ 00000188 08D08DE2 ADD SP,SP,#+8 4968 4969 DrawStr(2,scr_h-1-FntH,left,(char*)SoftFontClr,clfont,0); \ 0000018C 3CA495E5 LDR R10,[R5, #+1084] \ 00000190 0020A0E3 MOV R2,#+0 \ 00000194 471F8BE2 ADD R1,R11,#+284 \ 00000198 0900A0E1 MOV R0,R9 \ 0000019C ........ _BLF SetFontColor,??SetFontColor??rA \ 000001A0 0100A0E3 MOV R0,#+1 \ 000001A4 01002DE9 PUSH {R0} \ 000001A8 00042DE9 PUSH {R10} \ 000001AC 10209DE5 LDR R2,[SP, #+16] \ 000001B0 0030A0E3 MOV R3,#+0 \ 000001B4 0610A0E1 MOV R1,R6 \ 000001B8 0200A0E3 MOV R0,#+2 \ 000001BC ........ _BLF PrintField,??PrintField??rA 4970 4971 GetDateTime(0,&t); \ 000001C0 08108DE2 ADD R1,SP,#+8 \ 000001C4 0000A0E3 MOV R0,#+0 \ 000001C8 B40000EF SWI +180 4972 sprintf(s,"%02d:%02d",t.hour,t.min); \ 000001CC 0930DDE5 LDRB R3,[SP, #+9] \ 000001D0 0820DDE5 LDRB R2,[SP, #+8] \ 000001D4 181088E2 ADD R1,R8,#+24 \ 000001D8 0400A0E1 MOV R0,R4 \ 000001DC 160000EF SWI +22 4973 PrintField(scr_w/2,scr_h-1-FntH,s,1,clfont,1); \ 000001E0 0100A0E3 MOV R0,#+1 \ 000001E4 01002DE9 PUSH {R0} \ 000001E8 3C0495E5 LDR R0,[R5, #+1084] \ 000001EC 0130A0E3 MOV R3,#+1 \ 000001F0 01002DE9 PUSH {R0} \ 000001F4 0420A0E1 MOV R2,R4 \ 000001F8 0610A0E1 MOV R1,R6 \ 000001FC A70F87E0 ADD R0,R7,R7, LSR #+31 \ 00000200 C000A0E1 ASR R0,R0,#+1 \ 00000204 ........ _BLF PrintField,??PrintField??rA 4974 UnlockSched(); \ 00000208 470100EF SWI +327 4975 4976 mfree(s); \ 0000020C 0400A0E1 MOV R0,R4 \ 00000210 150000EF SWI +21 4977 } \ 00000214 20D08DE2 ADD SP,SP,#+32 \ 00000218 F08FBDE8 POP {R4-R11,PC} ;; return 4978 \ In segment CODE, align 4, keep-with-next 4979 void DrawSoftInfo(CLIST *t) 4980 { \ DrawSoftInfo: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 18D04DE2 SUB SP,SP,#+24 4981 TTime tm; 4982 char *s=malloc(32); \ 00000008 2000A0E3 MOV R0,#+32 \ 0000000C 140000EF SWI +20 \ 00000010 0040A0E1 MOV R4,R0 4983 if(!PNG_SOFTKEY) clfont=100+HeadFont; \ 00000014 ........ LDR R0,??DataTable215 ;; PNG_SOFTKEY \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0300001A BNE ??DrawSoftInfo_0 \ 00000024 ........ LDR R0,??DataTable223 ;; HeadFont \ 00000028 000090E5 LDR R0,[R0, #+0] \ 0000002C 640080E2 ADD R0,R0,#+100 \ 00000030 000000EA B ??DrawSoftInfo_1 4984 else clfont=4; \ ??DrawSoftInfo_0: \ 00000034 0400A0E3 MOV R0,#+4 \ ??DrawSoftInfo_1: \ 00000038 ........ LDR R5,??DataTable226 ;; i_rc 4985 4986 int FntH=FontH(clfont)*2; 4987 int scr_w=ScreenW()-1; 4988 int scr_h=ScreenH()-1; 4989 4990 4991 LockSched(); 4992 // DrawRoundedFrame(0,ScreenH()-5-FntH,ScreenW()-1,ScreenH()-1,0,0,0,clrRed,0);//Рамка 4993 //DrawRoundedFrame(1,ScreenH()-5-FntH,ScreenW()-2,ScreenH()-2,0,0,0,0,AddInfoClr);//Фон 4994 4995 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l \ 0000003C ........ LDR R7,??DataTable218 ;; screen3 \ 00000040 3C0485E5 STR R0,[R5, #+1084] \ 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 E40395E5 LDR R0,[R5, #+996] \ 00000068 E81395E5 LDR R1,[R5, #+1000] \ 0000006C 1C2097E5 LDR R2,[R7, #+28] \ 00000070 000052E3 CMP R2,#+0 \ 00000074 0500000A BEQ ??DrawSoftInfo_2 4996 if(sendq_l) 4997 sprintf(s, "[T:%db/Q:%db]\n",RX+TX,sendq_l); \ 00000078 1C3097E5 LDR R3,[R7, #+28] \ 0000007C 002081E0 ADD R2,R1,R0 \ 00000080 20139FE5 LDR R1,??DrawSoftInfo_3 ;; menutext + 196 \ 00000084 0400A0E1 MOV R0,R4 \ 00000088 160000EF SWI +22 \ 0000008C 030000EA B ??DrawSoftInfo_4 4998 else 4999 sprintf(s, "[T:%db]\n",RX+TX); \ ??DrawSoftInfo_2: \ 00000090 002081E0 ADD R2,R1,R0 \ 00000094 10139FE5 LDR R1,??DrawSoftInfo_3+0x4 ;; menutext + 176 \ 00000098 0400A0E1 MOV R0,R4 \ 0000009C 160000EF SWI +22 5000 PrintField(scr_w-5,scr_h-1-FntH,s,2,clfont,1); \ ??DrawSoftInfo_4: \ 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 3C0495E5 LDR R0,[R5, #+1084] \ 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 5001 5002 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 1C008DE5 STR R0,[SP, #+28] 5003 DrawRoundedFrame(0,scr_h-1-FntH-2,scr_w-1,scr_h-1,0,0,0,clrBlack,clrBlack); \ 000000E8 440F87E2 ADD R0,R7,#+272 \ 000000EC 01002DE9 PUSH {R0} \ 000000F0 01002DE9 PUSH {R0} \ 000000F4 012046E2 SUB R2,R6,#+1 \ 000000F8 02104BE2 SUB R1,R11,#+2 \ 000000FC 0000A0E3 MOV R0,#+0 \ 00000100 01002DE9 PUSH {R0} \ 00000104 01002DE9 PUSH {R0} \ 00000108 01002DE9 PUSH {R0} \ 0000010C 1C309DE5 LDR R3,[SP, #+28] \ 00000110 500100EF SWI +336 5004 5005 if(shot_soft!=2) \ 00000114 20009DE5 LDR R0,[SP, #+32] \ 00000118 0A9040E0 SUB R9,R0,R10 \ 0000011C 600097E5 LDR R0,[R7, #+96] \ 00000120 028049E2 SUB R8,R9,#+2 \ 00000124 020050E3 CMP R0,#+2 \ 00000128 1CD08DE2 ADD SP,SP,#+28 \ 0000012C 1B00000A BEQ ??DrawSoftInfo_5 5006 { 5007 for(int i=FontH(clfont)*2+2;i>=0;i-=2) \ 00000130 3C0495E5 LDR R0,[R5, #+1084] \ 00000134 ........ _BLF FontH,??FontH??rA \ 00000138 0210A0E3 MOV R1,#+2 \ 0000013C 804091E0 ADDS R4,R1,R0, LSL #+1 \ 00000140 0E00004A BMI ??DrawSoftInfo_6 \ 00000144 ........ LDR R5,??DataTable219 ;; SoftBackgrClr 5008 DrawRoundedFrame(0,scr_h-FntH-2,scr_w,scr_h-FntH+i,0,0,0,SoftBackgrClr,SoftBackgrClr); \ ??DrawSoftInfo_7: \ 00000148 0500A0E1 MOV R0,R5 \ 0000014C 01002DE9 PUSH {R0} \ 00000150 01002DE9 PUSH {R0} \ 00000154 093084E0 ADD R3,R4,R9 \ 00000158 0620A0E1 MOV R2,R6 \ 0000015C 0810A0E1 MOV R1,R8 \ 00000160 0000A0E3 MOV R0,#+0 \ 00000164 01002DE9 PUSH {R0} \ 00000168 01002DE9 PUSH {R0} \ 0000016C 01002DE9 PUSH {R0} \ 00000170 500100EF SWI +336 \ 00000174 024054E2 SUBS R4,R4,#+2 \ 00000178 14D08DE2 ADD SP,SP,#+20 \ 0000017C F1FFFF5A BPL ??DrawSoftInfo_7 5009 5010 DoScreen3(FntH+4); \ ??DrawSoftInfo_6: \ 00000180 04008AE2 ADD R0,R10,#+4 \ 00000184 ........ BL DoScreen3 5011 shot_soft++; \ 00000188 600097E5 LDR R0,[R7, #+96] \ 0000018C 010080E2 ADD R0,R0,#+1 \ 00000190 600087E5 STR R0,[R7, #+96] 5012 SMART_REDRAW(); \ 00000194 ........ BL SMART_REDRAW 5013 return; \ 00000198 1CD08DE2 ADD SP,SP,#+28 \ 0000019C F08FBDE8 POP {R4-R11,PC} 5014 } 5015 else 5016 DrwImage(&screen3,0,scr_h-FntH-2); \ ??DrawSoftInfo_5: \ 000001A0 0820A0E1 MOV R2,R8 \ 000001A4 0010A0E3 MOV R1,#+0 \ 000001A8 0700A0E1 MOV R0,R7 \ 000001AC ........ BL DrwImage 5017 5018 SetFontColor((char*)SoftFontClr,transparent,0); \ 000001B0 ........ LDR R0,??DataTable220 ;; SoftFontClr \ 000001B4 0020A0E3 MOV R2,#+0 \ 000001B8 471F87E2 ADD R1,R7,#+284 \ 000001BC ........ _BLF SetFontColor,??SetFontColor??rA \ 000001C0 0100A0E3 MOV R0,#+1 \ 000001C4 01002DE9 PUSH {R0} \ 000001C8 3C0495E5 LDR R0,[R5, #+1084] \ 000001CC 0230A0E3 MOV R3,#+2 \ 000001D0 01002DE9 PUSH {R0} \ 000001D4 0420A0E1 MOV R2,R4 \ 000001D8 0B10A0E1 MOV R1,R11 \ 000001DC 030046E2 SUB R0,R6,#+3 5019 // DrawStr(2,scr_h-1-FntH,s,SoftFontClr,clfont,0); 5020 PrintField(scr_w-3,scr_h-1-FntH,s,2,clfont,1);//left align \ 000001E0 ........ _BLF PrintField,??PrintField??rA 5021 5022 GetDateTime(0,&tm); \ 000001E4 14108DE2 ADD R1,SP,#+20 \ 000001E8 0000A0E3 MOV R0,#+0 \ 000001EC B40000EF SWI +180 5023 sprintf(s,"%02d:%02d",tm.hour,tm.min); \ 000001F0 B8119FE5 LDR R1,??DrawSoftInfo_3+0x8 ;; menutext + 24 \ 000001F4 1530DDE5 LDRB R3,[SP, #+21] \ 000001F8 1420DDE5 LDRB R2,[SP, #+20] \ 000001FC 0400A0E1 MOV R0,R4 \ 00000200 160000EF SWI +22 5024 PrintField(scr_w-3,scr_h-1-(FntH/2),s,2,clfont,1);//left align \ 00000204 AA1F8AE0 ADD R1,R10,R10, LSR #+31 \ 00000208 C110A0E1 ASR R1,R1,#+1 \ 0000020C 10108DE5 STR R1,[SP, #+16] \ 00000210 0100A0E3 MOV R0,#+1 \ 00000214 01002DE9 PUSH {R0} \ 00000218 3C0495E5 LDR R0,[R5, #+1084] \ 0000021C 0230A0E3 MOV R3,#+2 \ 00000220 01002DE9 PUSH {R0} \ 00000224 10009DE5 LDR R0,[SP, #+16] \ 00000228 0420A0E1 MOV R2,R4 \ 0000022C 011040E0 SUB R1,R0,R1 \ 00000230 030046E2 SUB R0,R6,#+3 \ 00000234 ........ _BLF PrintField,??PrintField??rA 5025 // PrintField(scr_w/2,scr_h-1-FntH,s,1,clfont,1); 5026 5027 //void DrawText(int x,int y,int x2,char*s,char *color,int font,int align,int isScroll) 5028 DrwImage(icons[GetIconIndex(t)],2,scr_h-FntH); \ 00000238 28009DE5 LDR R0,[SP, #+40] \ 0000023C ........ BL GetIconIndex \ 00000240 0920A0E1 MOV R2,R9 \ 00000244 0210A0E3 MOV R1,#+2 \ 00000248 000185E0 ADD R0,R5,R0, LSL #+2 \ 0000024C 080090E5 LDR R0,[R0, #+8] \ 00000250 ........ BL DrwImage 5029 DrawText(6+icons[GetIconIndex(t)]->w,scr_h-FntH-2,scr_w-w,(t->xtext2?t->xtext2+1:"Ошибка"),(char*)FontInfoClr,clfont,0,0); \ 00000254 28009DE5 LDR R0,[SP, #+40] \ 00000258 AC0090E5 LDR R0,[R0, #+172] \ 0000025C 10D08DE2 ADD SP,SP,#+16 \ 00000260 000050E3 CMP R0,#+0 \ 00000264 48919F05 LDREQ R9,??DrawSoftInfo_3+0xC ;; menutext + 188 \ 00000268 01908012 ADDNE R9,R0,#+1 \ 0000026C 18009DE5 LDR R0,[SP, #+24] \ 00000270 ........ BL GetIconIndex \ 00000274 3CA495E5 LDR R10,[R5, #+1084] \ 00000278 000185E0 ADD R0,R5,R0, LSL #+2 \ 0000027C 080090E5 LDR R0,[R0, #+8] \ 00000280 0020A0E3 MOV R2,#+0 \ 00000284 0000D0E5 LDRB R0,[R0, #+0] \ 00000288 471F87E2 ADD R1,R7,#+284 \ 0000028C 06B080E2 ADD R11,R0,#+6 \ 00000290 20019FE5 LDR R0,??DrawSoftInfo_3+0x10 ;; FontInfoClr \ 00000294 ........ _BLF SetFontColor,??SetFontColor??rA \ 00000298 14109DE5 LDR R1,[SP, #+20] \ 0000029C 0030A0E3 MOV R3,#+0 \ 000002A0 011046E0 SUB R1,R6,R1 \ 000002A4 00108DE5 STR R1,[SP, #+0] \ 000002A8 0B0041E0 SUB R0,R1,R11 \ 000002AC 01002DE9 PUSH {R0} \ 000002B0 5E60A0E3 MOV R6,#+94 \ 000002B4 406F86E3 ORR R6,R6,#0x100 \ 000002B8 0920A0E1 MOV R2,R9 \ 000002BC 0000A0E3 MOV R0,#+0 \ 000002C0 01002DE9 PUSH {R0} \ 000002C4 01002DE9 PUSH {R0} \ 000002C8 0810A0E1 MOV R1,R8 \ 000002CC 0600A0E1 MOV R0,R6 \ 000002D0 01002DE9 PUSH {R0} \ 000002D4 0100A0E3 MOV R0,#+1 \ 000002D8 01002DE9 PUSH {R0} \ 000002DC 00042DE9 PUSH {R10} \ 000002E0 0B00A0E1 MOV R0,R11 \ 000002E4 ........ _BLF PrintText,??PrintText??rA 5030 5031 DrwImage(XStatusImg[t->xstate],2,scr_h-(FntH/2)); \ 000002E8 1C009DE5 LDR R0,[SP, #+28] \ 000002EC 20109DE5 LDR R1,[SP, #+32] \ 000002F0 018040E0 SUB R8,R0,R1 \ 000002F4 30009DE5 LDR R0,[SP, #+48] \ 000002F8 0820A0E1 MOV R2,R8 \ 000002FC B605D0E1 LDRH R0,[R0, #+86] \ 00000300 0210A0E3 MOV R1,#+2 \ 00000304 000185E0 ADD R0,R5,R0, LSL #+2 \ 00000308 2C0390E5 LDR R0,[R0, #+812] \ 0000030C ........ BL DrwImage 5032 SetScrollEdgeDelay(1); \ 00000310 0100A0E3 MOV R0,#+1 \ 00000314 ........ _BLF SetScrollEdgeDelay,??SetScrollEdgeDelay??rA 5033 DrawText(6+XStatusImg[t->xstate]->w,scr_h-(FntH/2)-1,scr_w-w,t->xtext?t->xtext:"Нет хстатуса",(char*)FontInfoClr,clfont,0,1); \ 00000318 30009DE5 LDR R0,[SP, #+48] \ 0000031C 0020A0E3 MOV R2,#+0 \ 00000320 A8A090E5 LDR R10,[R0, #+168] \ 00000324 18D08DE2 ADD SP,SP,#+24 \ 00000328 B605D0E1 LDRH R0,[R0, #+86] \ 0000032C 3C9495E5 LDR R9,[R5, #+1084] \ 00000330 00005AE3 CMP R10,#+0 \ 00000334 80A09F05 LDREQ R10,??DrawSoftInfo_3+0x14 ;; menutext + 152 \ 00000338 000185E0 ADD R0,R5,R0, LSL #+2 \ 0000033C 2C0390E5 LDR R0,[R0, #+812] \ 00000340 471F87E2 ADD R1,R7,#+284 \ 00000344 0000D0E5 LDRB R0,[R0, #+0] \ 00000348 065080E2 ADD R5,R0,#+6 \ 0000034C 64009FE5 LDR R0,??DrawSoftInfo_3+0x10 ;; FontInfoClr \ 00000350 ........ _BLF SetFontColor,??SetFontColor??rA \ 00000354 00009DE5 LDR R0,[SP, #+0] \ 00000358 0030A0E3 MOV R3,#+0 \ 0000035C 050040E0 SUB R0,R0,R5 \ 00000360 01002DE9 PUSH {R0} \ 00000364 0A20A0E1 MOV R2,R10 \ 00000368 011048E2 SUB R1,R8,#+1 \ 0000036C 0000A0E3 MOV R0,#+0 \ 00000370 01002DE9 PUSH {R0} \ 00000374 0100A0E3 MOV R0,#+1 \ 00000378 01002DE9 PUSH {R0} \ 0000037C 40002DE9 PUSH {R6} \ 00000380 01002DE9 PUSH {R0} \ 00000384 00022DE9 PUSH {R9} \ 00000388 0500A0E1 MOV R0,R5 \ 0000038C ........ _BLF PrintText,??PrintText??rA 5034 // DrawStr(2,scr_h-1-(FntH/2),t->xtext2,SoftFontClr,clfont,0); 5035 //DrawStr(2,scr_h-1-FntH,t->xtext,SoftFontClr,clfont,0); 5036 5037 UnlockSched(); \ 00000390 470100EF SWI +327 5038 5039 mfree(s); \ 00000394 0400A0E1 MOV R0,R4 \ 00000398 150000EF SWI +21 5040 } \ 0000039C 18D08DE2 ADD SP,SP,#+24 \ 000003A0 1CD08DE2 ADD SP,SP,#+28 \ 000003A4 F08FBDE8 POP {R4-R11,PC} ;; return \ ??DrawSoftInfo_3: \ 000003A8 ........ DC32 menutext + 196 \ 000003AC ........ DC32 menutext + 176 \ 000003B0 ........ DC32 menutext + 24 \ 000003B4 ........ DC32 menutext + 188 \ 000003B8 ........ DC32 FontInfoClr \ 000003BC ........ DC32 menutext + 152 5041 5042 int shot_header=0; 5043 IMGHDR screen4={0,0,8,""}; \ In segment CODE, align 4, keep-with-next 5044 void DoScreen4(int h) 5045 { \ DoScreen4: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 5046 //int SCREENSIZE = ScreenH()*ScreenW(); 5047 int HSIZE = (h+8)*ScreenW(); 5048 int ScrH=h+2; 5049 int ScrW=ScreenW(); 5050 char *ms=RamScreenBuffer(); 5051 screen4.w=ScrW; \ 00000004 ........ LDR R8,??DataTable228 ;; screen3 \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 085084E2 ADD R5,R4,#+8 \ 00000010 888100EF SWI +33160 \ 00000014 900505E0 MUL R5,R0,R5 \ 00000018 024084E2 ADD R4,R4,#+2 \ 0000001C 888100EF SWI +33160 \ 00000020 0060A0E1 MOV R6,R0 \ 00000024 E08000EF SWI +32992 \ 00000028 0070A0E1 MOV R7,R0 5052 screen4.h=ScrH; 5053 screen4.bitmap=malloc(ScrW*ScrH*2); \ 0000002C 940600E0 MUL R0,R4,R6 \ 00000030 0860C8E5 STRB R6,[R8, #+8] \ 00000034 0940C8E5 STRB R4,[R8, #+9] \ 00000038 8040A0E1 LSL R4,R0,#+1 \ 0000003C 0400A0E1 MOV R0,R4 \ 00000040 140000EF SWI +20 \ 00000044 0C0088E5 STR R0,[R8, #+12] 5054 ms+=(HSIZE*2); 5055 memcpy(screen4.bitmap, ms, ScrW*ScrH*2); \ 00000048 0420A0E1 MOV R2,R4 \ 0000004C 851087E0 ADD R1,R7,R5, LSL #+1 \ 00000050 1E0100EF SWI +286 5056 } \ 00000054 F081BDE8 POP {R4-R8,PC} ;; return 5057 \ In segment CODE, align 4, keep-with-next 5058 void DrawHeader() 5059 { \ DrawHeader: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 10D04DE2 SUB SP,SP,#+16 5060 SetCanvasFlag(1); \ 00000008 0100A0E3 MOV R0,#+1 \ 0000000C ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 5061 int scr_w=ScreenW()-1; \ 00000010 888100EF SWI +33160 \ 00000014 014040E2 SUB R4,R0,#+1 5062 int scr_h=ScreenH()-1; \ 00000018 898100EF SWI +33161 5063 char *s=malloc(128); \ 0000001C 8000A0E3 MOV R0,#+128 \ 00000020 140000EF SWI +20 \ 00000024 0050A0E1 MOV R5,R0 5064 char *ss=malloc(128); \ 00000028 8000A0E3 MOV R0,#+128 \ 0000002C 140000EF SWI +20 \ 00000030 0060A0E1 MOV R6,R0 5065 5066 if(!PNG_HEADER)clfont=100+HeadFont; \ 00000034 ........ LDR R0,??DataTable222 ;; PNG_HEADER \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 0300001A BNE ??DrawHeader_1 \ 00000044 ........ LDR R0,??DataTable223 ;; HeadFont \ 00000048 000090E5 LDR R0,[R0, #+0] \ 0000004C 640080E2 ADD R0,R0,#+100 \ 00000050 000000EA B ??DrawHeader_2 5067 else clfont=4; \ ??DrawHeader_1: \ 00000054 0400A0E3 MOV R0,#+4 \ ??DrawHeader_2: \ 00000058 ........ LDR R7,??DataTable226 ;; i_rc \ 0000005C 3C0487E5 STR R0,[R7, #+1084] 5068 // char clrRed[]={0xFF,0x00,0x00,0x15}; 5069 if(icons[IS_ONLINE]) \ 00000060 340097E5 LDR R0,[R7, #+52] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 3C0497E5 LDR R0,[R7, #+1084] \ 0000006C 0600000A BEQ ??DrawHeader_3 5070 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 3C0497E5 LDR R0,[R7, #+1084] 5071 else 5072 hy=FontH(clfont); \ ??DrawHeader_3: \ 0000008C ........ _BLF FontH,??FontH??rA 5073 5074 hy+=YDISP; 5075 LockSched(); 5076 5077 SetFontColor((char*)HeadFontClr,transparent,0); \ ??DrawHeader_4: \ 00000090 ........ LDR R8,??DataTable228 ;; screen3 \ 00000094 380487E5 STR R0,[R7, #+1080] \ 00000098 460100EF SWI +326 \ 0000009C 8C059FE5 LDR R0,??DrawHeader_5+0xC ;; HeadFontClr \ 000000A0 0020A0E3 MOV R2,#+0 \ 000000A4 471F88E2 ADD R1,R8,#+284 \ 000000A8 ........ _BLF SetFontColor,??SetFontColor??rA 5078 5079 #ifdef ELKA 5080 if(shot_header!=2) 5081 { 5082 DrawRoundedFrame(0,YDISP,scr_w,hy+2,0,0,0,clrBlack,clrBlack); 5083 for(int i=hy-YDISP;i>0;i-=2) 5084 DrawRoundedFrame(0,YDISP,scr_w,hy-i+2,0,0,0,HeadBackgrClr,HeadBackgrClr); 5085 DoScreen4(hy-YDISP); 5086 shot_header++; 5087 SMART_REDRAW(); 5088 return; 5089 } 5090 else 5091 DrwImage(&screen4,0,YDISP); 5092 #else 5093 DrawRoundedFrame(0,YDISP,scr_w,hy+2,0,0,0,clrBlack,clrBlack); \ 000000AC 440F88E2 ADD R0,R8,#+272 \ 000000B0 01002DE9 PUSH {R0} \ 000000B4 01002DE9 PUSH {R0} \ 000000B8 0420A0E1 MOV R2,R4 \ 000000BC 0010A0E3 MOV R1,#+0 \ 000000C0 0000A0E3 MOV R0,#+0 \ 000000C4 01002DE9 PUSH {R0} \ 000000C8 01002DE9 PUSH {R0} \ 000000CC 01002DE9 PUSH {R0} \ 000000D0 380497E5 LDR R0,[R7, #+1080] \ 000000D4 023080E2 ADD R3,R0,#+2 \ 000000D8 0000A0E3 MOV R0,#+0 \ 000000DC 500100EF SWI +336 5094 for(int i=hy-YDISP;i>0;i-=2) \ 000000E0 389497E5 LDR R9,[R7, #+1080] \ 000000E4 14D08DE2 ADD SP,SP,#+20 \ 000000E8 010059E3 CMP R9,#+1 \ 000000EC 120000BA BLT ??DrawHeader_6 \ 000000F0 3CA59FE5 LDR R10,??DrawHeader_5+0x10 ;; HeadBackgrClr 5095 DrawRoundedFrame(0,YDISP,scr_w,hy-i+2,0,0,0,HeadBackgrClr,HeadBackgrClr); \ ??DrawHeader_7: \ 000000F4 0A00A0E1 MOV R0,R10 \ 000000F8 01002DE9 PUSH {R0} \ 000000FC 01002DE9 PUSH {R0} \ 00000100 0420A0E1 MOV R2,R4 \ 00000104 0010A0E3 MOV R1,#+0 \ 00000108 0000A0E3 MOV R0,#+0 \ 0000010C 01002DE9 PUSH {R0} \ 00000110 01002DE9 PUSH {R0} \ 00000114 01002DE9 PUSH {R0} \ 00000118 380497E5 LDR R0,[R7, #+1080] \ 0000011C 090040E0 SUB R0,R0,R9 \ 00000120 023080E2 ADD R3,R0,#+2 \ 00000124 0000A0E3 MOV R0,#+0 \ 00000128 500100EF SWI +336 \ 0000012C 029049E2 SUB R9,R9,#+2 \ 00000130 010059E3 CMP R9,#+1 \ 00000134 14D08DE2 ADD SP,SP,#+20 \ 00000138 EDFFFFAA BGE ??DrawHeader_7 5096 #endif 5097 5098 #ifdef DEBUG1 5099 return; 5100 #else 5101 int x=1; 5102 int icon; 5103 if(total_unread) icon = IS_MSG; \ ??DrawHeader_6: \ 0000013C EC0397E5 LDR R0,[R7, #+1004] \ 00000140 01A0A0E3 MOV R10,#+1 \ 00000144 000050E3 CMP R0,#+0 \ 00000148 0D00A013 MOVNE R0,#+13 \ 0000014C 0500001A BNE ??DrawHeader_8 5104 else 5105 { 5106 switch(connect_state) \ 00000150 340098E5 LDR R0,[R8, #+52] \ 00000154 000050E3 CMP R0,#+0 \ 00000158 0200000A BEQ ??DrawHeader_8 \ 0000015C 030050E2 SUBS R0,R0,#+3 5107 { 5108 case 0: icon=IS_OFFLINE; break; 5109 case 3: icon=CurrentStatus; break; \ 00000160 FC029705 LDREQ R0,[R7, #+764] 5110 default: icon=IS_UNKNOWN; break; \ 00000164 0E00A013 MOVNE R0,#+14 5111 } 5112 } 5113 5114 if(icons[icon] && HEAD_STATUS) \ ??DrawHeader_8: \ 00000168 009187E0 ADD R9,R7,R0, LSL #+2 \ 0000016C 080099E5 LDR R0,[R9, #+8] \ 00000170 000050E3 CMP R0,#+0 \ 00000174 0900000A BEQ ??DrawHeader_9 \ 00000178 B8149FE5 LDR R1,??DrawHeader_5+0x14 ;; HEAD_STATUS \ 0000017C 001091E5 LDR R1,[R1, #+0] \ 00000180 000051E3 CMP R1,#+0 \ 00000184 0500000A BEQ ??DrawHeader_9 5115 { 5116 DrwImage(icons[icon],x,YDISP+1); \ 00000188 0120A0E3 MOV R2,#+1 \ 0000018C 0210A0E1 MOV R1,R2 \ 00000190 ........ BL DrwImage 5117 x+=icons[icon]->w+2;//GetImgWidth(NumStatusToIconBar+icon)+2;// + смещение по х \ 00000194 080099E5 LDR R0,[R9, #+8] \ 00000198 0000D0E5 LDRB R0,[R0, #+0] \ 0000019C 03A080E2 ADD R10,R0,#+3 5118 } 5119 5120 if(total_unread && isShowUnread) \ ??DrawHeader_9: \ 000001A0 EC2397E5 LDR R2,[R7, #+1004] \ 000001A4 90949FE5 LDR R9,??DrawHeader_5+0x18 ;; `?` \ 000001A8 000052E3 CMP R2,#+0 \ 000001AC 1A00000A BEQ ??DrawHeader_10 \ 000001B0 88049FE5 LDR R0,??DrawHeader_5+0x1C ;; isShowUnread \ 000001B4 000090E5 LDR R0,[R0, #+0] \ 000001B8 000050E3 CMP R0,#+0 \ 000001BC 1600000A BEQ ??DrawHeader_10 5121 { 5122 sprintf(s,"%d/%d",total_unread,total_unread2); \ 000001C0 583297E5 LDR R3,[R7, #+600] \ 000001C4 0C1089E2 ADD R1,R9,#+12 \ 000001C8 0500A0E1 MOV R0,R5 \ 000001CC 160000EF SWI +22 5123 DrawStr(x,YDISP+1,s,clrWhite,clfont,0); \ 000001D0 3CB497E5 LDR R11,[R7, #+1084] \ 000001D4 0020A0E3 MOV R2,#+0 \ 000001D8 471F88E2 ADD R1,R8,#+284 \ 000001DC 450F88E2 ADD R0,R8,#+276 \ 000001E0 ........ _BLF SetFontColor,??SetFontColor??rA \ 000001E4 0100A0E3 MOV R0,#+1 \ 000001E8 01002DE9 PUSH {R0} \ 000001EC 00082DE9 PUSH {R11} \ 000001F0 0030A0E3 MOV R3,#+0 \ 000001F4 0520A0E1 MOV R2,R5 \ 000001F8 0110A0E3 MOV R1,#+1 \ 000001FC 0A00A0E1 MOV R0,R10 \ 00000200 ........ _BLF PrintField,??PrintField??rA 5124 x+=GetWidth(x,YDISP+1)+1; \ 00000204 0110A0E3 MOV R1,#+1 \ 00000208 0A00A0E1 MOV R0,R10 \ 0000020C ........ _BLF GetWidth,??GetWidth??rA \ 00000210 010080E2 ADD R0,R0,#+1 \ 00000214 0AA080E0 ADD R10,R0,R10 \ 00000218 08D08DE2 ADD SP,SP,#+8 5125 } 5126 5127 if(CurrentXStatus!=0 && HEAD_XSTATUS)//если есть хстатус \ ??DrawHeader_10: \ 0000021C 000397E5 LDR R0,[R7, #+768] \ 00000220 000050E3 CMP R0,#+0 \ 00000224 0F00000A BEQ ??DrawHeader_11 \ 00000228 14149FE5 LDR R1,??DrawHeader_5+0x20 ;; HEAD_XSTATUS \ 0000022C 001091E5 LDR R1,[R1, #+0] \ 00000230 000051E3 CMP R1,#+0 \ 00000234 0A00000A BEQ ??DrawHeader_12 5128 { 5129 // DYNPNGICONLIST *xs=GetXSByItem(CurrentXStatus); 5130 // DrwImage(xs->img,x,YDISP+1); 5131 // x+=xs->img->w+1; 5132 DrwImage(XStatusImg[CurrentXStatus],x,YDISP+1); \ 00000238 0120A0E3 MOV R2,#+1 \ 0000023C 0A10A0E1 MOV R1,R10 \ 00000240 000187E0 ADD R0,R7,R0, LSL #+2 \ 00000244 2C0390E5 LDR R0,[R0, #+812] \ 00000248 ........ BL DrwImage 5133 x+=XStatusImg[CurrentXStatus]->w+1; \ 0000024C 000397E5 LDR R0,[R7, #+768] \ 00000250 000187E0 ADD R0,R7,R0, LSL #+2 \ 00000254 2C0390E5 LDR R0,[R0, #+812] \ 00000258 0000D0E5 LDRB R0,[R0, #+0] \ 0000025C 010080E2 ADD R0,R0,#+1 \ 00000260 0AA080E0 ADD R10,R0,R10 5134 } 5135 5136 int priv=0; \ ??DrawHeader_12: \ 00000264 0000A0E3 MOV R0,#+0 5137 char A_s[]="[A:%s]"; \ ??DrawHeader_11: \ 00000268 080899E8 LDM R9,{R3,R11} \ 0000026C 08108DE2 ADD R1,SP,#+8 \ 00000270 080881E8 STM R1,{R3,R11} 5138 // char t[32]; 5139 5140 switch(CurrentPrivateStatus) \ 00000274 CC1397E5 LDR R1,[R7, #+972] \ 00000278 040051E3 CMP R1,#+4 \ 0000027C 0D00008A BHI ??DrawHeader_13 \ 00000280 012F8FE2 ADR R2,??DrawHeader_0 \ 00000284 0120D2E7 LDRB R2,[R2, R1] \ 00000288 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??DrawHeader_0: \ 0000028C 01030507 DC8 +1,+3,+5,+7 \ 00000290 09000000 DC8 +9,+0,+0,+0 5141 { 5142 case 0: priv=ICON_ALL_CAN_SEE; break; \ ??DrawHeader_14: \ 00000294 1700A0E3 MOV R0,#+23 \ 00000298 060000EA B ??DrawHeader_13 5143 case 1: priv=ICON_NOBODY_CAN_SEE;break; \ ??DrawHeader_15: \ 0000029C 1B00A0E3 MOV R0,#+27 \ 000002A0 040000EA B ??DrawHeader_13 5144 case 2: priv=ICON_VISLIST_CAN_SEE; break; \ ??DrawHeader_16: \ 000002A4 1800A0E3 MOV R0,#+24 \ 000002A8 020000EA B ??DrawHeader_13 5145 case 3: priv=ICON_INVISLIST_CANNOT_SEE; break; \ ??DrawHeader_17: \ 000002AC 1900A0E3 MOV R0,#+25 \ 000002B0 000000EA B ??DrawHeader_13 5146 case 4: priv=ICON_CONTACTLIST_CAN_SEE; break; \ ??DrawHeader_18: \ 000002B4 1A00A0E3 MOV R0,#+26 5147 } 5148 5149 if(icons[priv] && HEAD_PRIVATE) \ ??DrawHeader_13: \ 000002B8 00B187E0 ADD R11,R7,R0, LSL #+2 \ 000002BC 08009BE5 LDR R0,[R11, #+8] \ 000002C0 000050E3 CMP R0,#+0 \ 000002C4 0A00000A BEQ ??DrawHeader_19 \ 000002C8 78139FE5 LDR R1,??DrawHeader_5+0x24 ;; HEAD_PRIVATE \ 000002CC 001091E5 LDR R1,[R1, #+0] \ 000002D0 000051E3 CMP R1,#+0 \ 000002D4 0600000A BEQ ??DrawHeader_19 5150 { 5151 DrwImage(icons[priv],x,YDISP+1); \ 000002D8 0120A0E3 MOV R2,#+1 \ 000002DC 0A10A0E1 MOV R1,R10 \ 000002E0 ........ BL DrwImage 5152 x+=icons[priv]->w+2; \ 000002E4 08009BE5 LDR R0,[R11, #+8] \ 000002E8 0000D0E5 LDRB R0,[R0, #+0] \ 000002EC 020080E2 ADD R0,R0,#+2 \ 000002F0 0AA080E0 ADD R10,R0,R10 5153 } 5154 5155 5156 if(!HEAD_PING) \ ??DrawHeader_19: \ 000002F4 50139FE5 LDR R1,??DrawHeader_5+0x28 ;; HEAD_PING \ 000002F8 001091E5 LDR R1,[R1, #+0] \ 000002FC 04108DE5 STR R1,[SP, #+4] \ 00000300 000051E3 CMP R1,#+0 \ 00000304 1B00001A BNE ??DrawHeader_20 5157 { 5158 int ping=0; 5159 if(curping < 3) ping=1; \ 00000308 180098E5 LDR R0,[R8, #+24] \ 0000030C 030050E3 CMP R0,#+3 \ 00000310 0C0000BA BLT ??DrawHeader_21 5160 if(curping > 3 && curping < 10) ping=2; \ 00000314 040050E3 CMP R0,#+4 \ 00000318 020000BA BLT ??DrawHeader_22 \ 0000031C 0A0050E3 CMP R0,#+10 5161 if(curping > 10 && curping < 30) ping=3; 5162 if(curping > 30) ping=4; 5163 5164 switch(ping) 5165 { 5166 case 1: ping=ICON_PING1; break; 5167 case 2: ping=ICON_PING2; break; \ 00000320 1D00A0B3 MOVLT R0,#+29 \ 00000324 080000BA BLT ??DrawHeader_23 \ ??DrawHeader_22: \ 00000328 0B0050E3 CMP R0,#+11 \ 0000032C 020000BA BLT ??DrawHeader_24 \ 00000330 1E0050E3 CMP R0,#+30 5168 case 3: ping=ICON_PING3; break; \ 00000334 1E00A0B3 MOVLT R0,#+30 \ 00000338 030000BA BLT ??DrawHeader_23 \ ??DrawHeader_24: \ 0000033C 1F0050E3 CMP R0,#+31 5169 case 4: ping=ICON_PING4; break; \ 00000340 1F00A0A3 MOVGE R0,#+31 \ 00000344 000000AA BGE ??DrawHeader_23 \ ??DrawHeader_21: \ 00000348 1C00A0E3 MOV R0,#+28 5170 default: ping=ICON_PING1; break; 5171 } 5172 5173 if(icons[ping] && !HEAD_PING) \ ??DrawHeader_23: \ 0000034C 00B187E0 ADD R11,R7,R0, LSL #+2 \ 00000350 08009BE5 LDR R0,[R11, #+8] \ 00000354 000050E3 CMP R0,#+0 \ 00000358 0600000A BEQ ??DrawHeader_20 5174 { 5175 DrwImage(icons[ping],x,YDISP+1); \ 0000035C 0120A0E3 MOV R2,#+1 \ 00000360 0A10A0E1 MOV R1,R10 \ 00000364 ........ BL DrwImage 5176 x+=icons[ping]->w+1; \ 00000368 08009BE5 LDR R0,[R11, #+8] \ 0000036C 0000D0E5 LDRB R0,[R0, #+0] \ 00000370 010080E2 ADD R0,R0,#+1 \ 00000374 0AA080E0 ADD R10,R0,R10 5177 } 5178 } 5179 5180 int cap; 5181 int x2=scr_w; 5182 #ifdef ELKA 5183 int y = YDISP-1; 5184 #else 5185 int y = YDISP+1; 5186 #endif 5187 //x2=scr_w-GetWidth(scr_w,YDISP+1); 5188 if(strlen(ContactT9Key)) \ ??DrawHeader_20: \ 00000378 F800A0E3 MOV R0,#+248 \ 0000037C 740D80E3 ORR R0,R0,#0x1D00 \ 00000380 07B080E0 ADD R11,R0,R7 \ 00000384 590E87E2 ADD R0,R7,#+1424 \ 00000388 1B0000EF SWI +27 \ 0000038C 000050E3 CMP R0,#+0 \ 00000390 1300000A BEQ ??DrawHeader_25 5189 { 5190 sprintf(s,key_clm_hdr_text); \ 00000394 341089E2 ADD R1,R9,#+52 \ 00000398 0500A0E1 MOV R0,R5 \ 0000039C 160000EF SWI +22 5191 strcat(s,ContactT9Key); \ 000003A0 591E87E2 ADD R1,R7,#+1424 \ 000003A4 0500A0E1 MOV R0,R5 \ 000003A8 170000EF SWI +23 5192 strcpy(clmenu_sk_r,key_clmenu_sk_r); \ 000003AC 081089E2 ADD R1,R9,#+8 \ 000003B0 0B00A0E1 MOV R0,R11 \ 000003B4 1A0000EF SWI +26 5193 PrintField(scr_w,y,s,2,clfont,1); \ 000003B8 0100A0E3 MOV R0,#+1 \ 000003BC 01002DE9 PUSH {R0} \ 000003C0 3C0497E5 LDR R0,[R7, #+1084] \ 000003C4 0230A0E3 MOV R3,#+2 \ 000003C8 01002DE9 PUSH {R0} \ 000003CC 0520A0E1 MOV R2,R5 \ 000003D0 0110A0E3 MOV R1,#+1 \ 000003D4 0400A0E1 MOV R0,R4 \ 000003D8 ........ _BLF PrintField,??PrintField??rA \ 000003DC 08D08DE2 ADD SP,SP,#+8 \ 000003E0 890000EA B ??DrawHeader_26 5194 } 5195 else 5196 if(on_off_timer > 0 && strlen(on_off_buf)!=0)//если кто то подключился/отключился \ ??DrawHeader_25: \ 000003E4 400098E5 LDR R0,[R8, #+64] \ 000003E8 010050E3 CMP R0,#+1 \ 000003EC 1A0000BA BLT ??DrawHeader_27 \ 000003F0 0810A0E3 MOV R1,#+8 \ 000003F4 781D81E3 ORR R1,R1,#0x1E00 \ 000003F8 071081E0 ADD R1,R1,R7 \ 000003FC 00108DE5 STR R1,[SP, #+0] \ 00000400 0100A0E1 MOV R0,R1 \ 00000404 1B0000EF SWI +27 \ 00000408 000050E3 CMP R0,#+0 \ 0000040C 1200000A BEQ ??DrawHeader_27 5197 { 5198 SetScrollEdgeDelay(1); \ 00000410 0100A0E3 MOV R0,#+1 \ 00000414 ........ _BLF SetScrollEdgeDelay,??SetScrollEdgeDelay??rA 5199 PrintText(scr_w,y,on_off_buf,2,clfont,1,350,1,0,scr_w-x-2); \ 00000418 0A0044E0 SUB R0,R4,R10 \ 0000041C 020040E2 SUB R0,R0,#+2 \ 00000420 01002DE9 PUSH {R0} \ 00000424 0230A0E3 MOV R3,#+2 \ 00000428 0000A0E3 MOV R0,#+0 \ 0000042C 01002DE9 PUSH {R0} \ 00000430 0100A0E3 MOV R0,#+1 \ 00000434 01002DE9 PUSH {R0} \ 00000438 5E00A0E3 MOV R0,#+94 \ 0000043C 400F80E3 ORR R0,R0,#0x100 \ 00000440 01002DE9 PUSH {R0} \ 00000444 0100A0E3 MOV R0,#+1 \ 00000448 01002DE9 PUSH {R0} \ 0000044C 3C0497E5 LDR R0,[R7, #+1084] \ 00000450 01002DE9 PUSH {R0} \ 00000454 18209DE5 LDR R2,[SP, #+24] \ 00000458 670000EA B ??DrawHeader_28 5200 } 5201 else 5202 { 5203 x2=scr_w; 5204 cap=*RamCap(); \ ??DrawHeader_27: \ 0000045C C88000EF SWI +32968 \ 00000460 B020D0E1 LDRH R2,[R0, #+0] 5205 sprintf(s,"[%d%%]",cap); \ 00000464 141089E2 ADD R1,R9,#+20 \ 00000468 0500A0E1 MOV R0,R5 \ 0000046C 160000EF SWI +22 5206 PrintField(scr_w,y,s,2,clfont,1);//capacity in header \ 00000470 0100A0E3 MOV R0,#+1 \ 00000474 01002DE9 PUSH {R0} \ 00000478 3C0497E5 LDR R0,[R7, #+1084] \ 0000047C 0230A0E3 MOV R3,#+2 \ 00000480 01002DE9 PUSH {R0} \ 00000484 0520A0E1 MOV R2,R5 \ 00000488 0110A0E3 MOV R1,#+1 \ 0000048C 0400A0E1 MOV R0,R4 \ 00000490 ........ _BLF PrintField,??PrintField??rA 5207 5208 x2=scr_w-GetWidth(scr_w,y); \ 00000494 0110A0E3 MOV R1,#+1 \ 00000498 0400A0E1 MOV R0,R4 \ 0000049C ........ _BLF GetWidth,??GetWidth??rA \ 000004A0 004044E0 SUB R4,R4,R0 5209 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ 000004A4 401089E2 ADD R1,R9,#+64 \ 000004A8 0B00A0E1 MOV R0,R11 \ 000004AC 1A0000EF SWI +26 5210 Get_Online_total(); \ 000004B0 ........ BL Get_Online_total 5211 5212 strcpy(s,""); \ 000004B4 5A1F8FE2 ADR R1,??DrawHeader_5 ;; "" \ 000004B8 0500A0E1 MOV R0,R5 \ 000004BC 1A0000EF SWI +26 5213 if(HEAD_PING==1) sprintf(s,"[%d с.]",curping); \ 000004C0 0C009DE5 LDR R0,[SP, #+12] \ 000004C4 08D08DE2 ADD SP,SP,#+8 \ 000004C8 010050E3 CMP R0,#+1 \ 000004CC 0300001A BNE ??DrawHeader_29 \ 000004D0 182098E5 LDR R2,[R8, #+24] \ 000004D4 1C1089E2 ADD R1,R9,#+28 \ 000004D8 0500A0E1 MOV R0,R5 \ 000004DC 160000EF SWI +22 5214 if(away_m && isShowA) \ ??DrawHeader_29: \ 000004E0 080397E5 LDR R0,[R7, #+776] \ 000004E4 000050E3 CMP R0,#+0 \ 000004E8 0C00000A BEQ ??DrawHeader_30 \ 000004EC 5C019FE5 LDR R0,??DrawHeader_5+0x2C ;; isShowA \ 000004F0 000090E5 LDR R0,[R0, #+0] \ 000004F4 000050E3 CMP R0,#+0 \ 000004F8 0800000A BEQ ??DrawHeader_30 5215 { 5216 sprintf(ss,A_s,away_msg_time_dace); \ 000004FC C800A0E3 MOV R0,#+200 \ 00000500 680D80E3 ORR R0,R0,#0x1A00 \ 00000504 072080E0 ADD R2,R0,R7 \ 00000508 08108DE2 ADD R1,SP,#+8 \ 0000050C 0600A0E1 MOV R0,R6 \ 00000510 160000EF SWI +22 5217 strcat(s,ss); \ 00000514 0610A0E1 MOV R1,R6 \ 00000518 0500A0E1 MOV R0,R5 \ 0000051C 170000EF SWI +23 5218 } 5219 if(Is_Vibra_Enabled && isShowV) strcat(s,"[V]") ; \ ??DrawHeader_30: \ 00000520 6C0297E5 LDR R0,[R7, #+620] \ 00000524 000050E3 CMP R0,#+0 \ 00000528 0600000A BEQ ??DrawHeader_31 \ 0000052C 20019FE5 LDR R0,??DrawHeader_5+0x30 ;; isShowV \ 00000530 000090E5 LDR R0,[R0, #+0] \ 00000534 000050E3 CMP R0,#+0 \ 00000538 0200000A BEQ ??DrawHeader_31 \ 0000053C 391F8FE2 ADR R1,??DrawHeader_5+0x4 ;; "[V]" \ 00000540 0500A0E1 MOV R0,R5 \ 00000544 170000EF SWI +23 5220 if(Is_Sounds_Enabled && isShowS) strcat(s,"[S]") ; \ ??DrawHeader_31: \ 00000548 C00397E5 LDR R0,[R7, #+960] \ 0000054C 000050E3 CMP R0,#+0 \ 00000550 0600000A BEQ ??DrawHeader_32 \ 00000554 FC009FE5 LDR R0,??DrawHeader_5+0x34 ;; isShowS \ 00000558 000090E5 LDR R0,[R0, #+0] \ 0000055C 000050E3 CMP R0,#+0 \ 00000560 0200000A BEQ ??DrawHeader_32 \ 00000564 301F8FE2 ADR R1,??DrawHeader_5+0x8 ;; "[S]" \ 00000568 0500A0E1 MOV R0,R5 \ 0000056C 170000EF SWI +23 5221 if(Is_Double_Vibra_On && isShowR) strcat(s,"[Vr]") ; \ ??DrawHeader_32: \ 00000570 540297E5 LDR R0,[R7, #+596] \ 00000574 000050E3 CMP R0,#+0 \ 00000578 0600000A BEQ ??DrawHeader_33 \ 0000057C D8009FE5 LDR R0,??DrawHeader_5+0x38 ;; isShowR \ 00000580 000090E5 LDR R0,[R0, #+0] \ 00000584 000050E3 CMP R0,#+0 \ 00000588 0200000A BEQ ??DrawHeader_33 \ 0000058C 241089E2 ADD R1,R9,#+36 \ 00000590 0500A0E1 MOV R0,R5 \ 00000594 170000EF SWI +23 5222 5223 if(isShowCont) \ ??DrawHeader_33: \ 00000598 C0009FE5 LDR R0,??DrawHeader_5+0x3C ;; isShowCont \ 0000059C 000090E5 LDR R0,[R0, #+0] \ 000005A0 000050E3 CMP R0,#+0 \ 000005A4 0700000A BEQ ??DrawHeader_34 5224 { 5225 sprintf(ss,"[%d/%d]",kopa_kontaktu,kopa_online); \ 000005A8 003497E5 LDR R3,[R7, #+1024] \ 000005AC 042497E5 LDR R2,[R7, #+1028] \ 000005B0 2C1089E2 ADD R1,R9,#+44 \ 000005B4 0600A0E1 MOV R0,R6 \ 000005B8 160000EF SWI +22 5226 // PrintField(x2-2,YDISP+1,s,2,clfont,1); 5227 strcat(s,ss); \ 000005BC 0610A0E1 MOV R1,R6 \ 000005C0 0500A0E1 MOV R0,R5 \ 000005C4 170000EF SWI +23 5228 } 5229 //PrintField(x2-2,YDISP+1,s,2,clfont,1); 5230 PrintText(x2,y,s,2,clfont,1,1,1,0, x2-x-2 ); \ ??DrawHeader_34: \ 000005C8 0A0044E0 SUB R0,R4,R10 \ 000005CC 020040E2 SUB R0,R0,#+2 \ 000005D0 01002DE9 PUSH {R0} \ 000005D4 0230A0E3 MOV R3,#+2 \ 000005D8 0520A0E1 MOV R2,R5 \ 000005DC 0000A0E3 MOV R0,#+0 \ 000005E0 01002DE9 PUSH {R0} \ 000005E4 0100A0E3 MOV R0,#+1 \ 000005E8 01002DE9 PUSH {R0} \ 000005EC 01002DE9 PUSH {R0} \ 000005F0 01002DE9 PUSH {R0} \ 000005F4 3C0497E5 LDR R0,[R7, #+1084] \ 000005F8 01002DE9 PUSH {R0} \ ??DrawHeader_28: \ 000005FC 0110A0E3 MOV R1,#+1 \ 00000600 0400A0E1 MOV R0,R4 \ 00000604 ........ _BLF PrintText,??PrintText??rA \ 00000608 18D08DE2 ADD SP,SP,#+24 5231 } 5232 UnlockSched(); \ ??DrawHeader_26: \ 0000060C 470100EF SWI +327 5233 mfree(s); \ 00000610 0500A0E1 MOV R0,R5 \ 00000614 150000EF SWI +21 5234 mfree(ss); \ 00000618 0600A0E1 MOV R0,R6 \ 0000061C 150000EF SWI +21 5235 #endif 5236 } \ 00000620 FF8FBDE8 POP {R0-R11,PC} ;; return \ ??DrawHeader_5: \ 00000624 00000000 DC8 "",+0,+0,+0 \ 00000628 5B565D00 DC8 "[V]" \ 0000062C 5B535D00 DC8 "[S]" \ 00000630 ........ DC32 HeadFontClr \ 00000634 ........ DC32 HeadBackgrClr \ 00000638 ........ DC32 HEAD_STATUS \ 0000063C ........ DC32 `?` \ 00000640 ........ DC32 isShowUnread \ 00000644 ........ DC32 HEAD_XSTATUS \ 00000648 ........ DC32 HEAD_PRIVATE \ 0000064C ........ DC32 HEAD_PING \ 00000650 ........ DC32 isShowA \ 00000654 ........ DC32 isShowV \ 00000658 ........ DC32 isShowS \ 0000065C ........ DC32 isShowR \ 00000660 ........ DC32 isShowCont 5237 \ In segment CODE, align 4, keep-with-next 5238 void DrawScrollBar(int cur,int total) 5239 { \ DrawScrollBar: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 5240 int scr_h=ScreenH()-1; 5241 int scr_w=ScreenW()-1; 5242 int y=scr_h-CLIST_Y1-FontH(clfont)-2; \ 00000004 ........ LDR R6,??DataTable226 ;; i_rc \ 00000008 0070A0E1 MOV R7,R0 5243 int pos=y*cur/total; 5244 int y2=y/total; 5245 int i=0; 5246 5247 DrawLine(scr_w-2,CLIST_Y1,scr_w-2,scr_h-FontH(clfont)-2,1,clrBlack); \ 0000000C ........ LDR R10,??DataTable228 ;; screen3 \ 00000010 0180A0E1 MOV R8,R1 \ 00000014 898100EF SWI +33161 \ 00000018 014040E2 SUB R4,R0,#+1 \ 0000001C 888100EF SWI +33160 \ 00000020 015040E2 SUB R5,R0,#+1 \ 00000024 3C0496E5 LDR R0,[R6, #+1084] \ 00000028 ........ _BLF FontH,??FontH??rA \ 0000002C 000044E0 SUB R0,R4,R0 \ 00000030 049040E2 SUB R9,R0,#+4 \ 00000034 3C0496E5 LDR R0,[R6, #+1084] \ 00000038 ........ _BLF FontH,??FontH??rA \ 0000003C 000049E0 SUB R0,R9,R0 \ 00000040 022040E2 SUB R2,R0,#+2 \ 00000044 970200E0 MUL R0,R7,R2 \ 00000048 0810A0E1 MOV R1,R8 \ 0000004C ........ _BLF ??div32_a,??rA??div32_a \ 00000050 0170A0E1 MOV R7,R1 \ 00000054 0200A0E1 MOV R0,R2 \ 00000058 0810A0E1 MOV R1,R8 \ 0000005C ........ _BLF ??div32_a,??rA??div32_a \ 00000060 3C0496E5 LDR R0,[R6, #+1084] \ 00000064 0180A0E1 MOV R8,R1 \ 00000068 ........ _BLF FontH,??FontH??rA \ 0000006C 0090A0E1 MOV R9,R0 \ 00000070 3C0496E5 LDR R0,[R6, #+1084] \ 00000074 ........ _BLF FontH,??FontH??rA \ 00000078 442F8AE2 ADD R2,R10,#+272 \ 0000007C 04002DE9 PUSH {R2} \ 00000080 0010A0E1 MOV R1,R0 \ 00000084 020045E2 SUB R0,R5,#+2 \ 00000088 041081E2 ADD R1,R1,#+4 \ 0000008C 0120A0E3 MOV R2,#+1 \ 00000090 04002DE9 PUSH {R2} \ 00000094 092044E0 SUB R2,R4,R9 \ 00000098 023042E2 SUB R3,R2,#+2 5248 DrawRoundedFrame(scr_w-4,CLIST_Y1+pos+1,scr_w,CLIST_Y1+pos+y2,0,0,0,clrBlack,clrBlack); \ 0000009C 044045E2 SUB R4,R5,#+4 \ 000000A0 0020A0E1 MOV R2,R0 \ 000000A4 B30100EF SWI +435 \ 000000A8 3C0496E5 LDR R0,[R6, #+1084] \ 000000AC ........ _BLF FontH,??FontH??rA \ 000000B0 0090A0E1 MOV R9,R0 \ 000000B4 3C0496E5 LDR R0,[R6, #+1084] \ 000000B8 ........ _BLF FontH,??FontH??rA \ 000000BC 441F8AE2 ADD R1,R10,#+272 \ 000000C0 02002DE9 PUSH {R1} \ 000000C4 02002DE9 PUSH {R1} \ 000000C8 0520A0E1 MOV R2,R5 \ 000000CC 000087E0 ADD R0,R7,R0 \ 000000D0 0010A0E3 MOV R1,#+0 \ 000000D4 02002DE9 PUSH {R1} \ 000000D8 02002DE9 PUSH {R1} \ 000000DC 02002DE9 PUSH {R1} \ 000000E0 091087E0 ADD R1,R7,R9 5249 5250 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 5261 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 5262 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 5263 DrawObject(&drwobj); \ 0000004C 0C008DE2 ADD R0,SP,#+12 \ 00000050 2A0100EF SWI +298 5264 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 5265 } 5266 /* 5267 #ifdef ELKA 5268 int LINE_MODE=0; 5269 int VIEW_MODE=1; 5270 #else 5271 int LINE_MODE=1; 5272 int VIEW_MODE=0; 5273 #endif 5274 */ 5275 \ In segment CODE, align 4, keep-with-next 5276 void MyRedraw() 5277 { 5278 //DirectRedrawGUI_ID(contactlist_menu_id); 5279 SMART_REDRAW(); \ MyRedraw: \ 00000000 ........ B SMART_REDRAW ;; tailcall 5280 } 5281 5282 \ In segment CODE, align 4, keep-with-next 5283 void DrawJustNow(RECT *rc,CLIST *cl) 5284 { \ DrawJustNow: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 F450D0E1 LDRSH R5,[R0, #+4] \ 00000008 F290D0E1 LDRSH R9,[R0, #+2] \ 0000000C 0160A0E1 MOV R6,R1 \ 00000010 F010D0E1 LDRSH R1,[R0, #+0] \ 00000014 84009FE5 LDR R0,??DrawJustNow_0 ;; i_rc + 1084 \ 00000018 0020A0E3 MOV R2,#+0 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 018081E2 ADD R8,R1,#+1 \ 00000024 6C1096E5 LDR R1,[R6, #+108] \ 00000028 014080E2 ADD R4,R0,#+1 \ 0000002C ........ LDR R0,??DataTable228 ;; screen3 \ 00000030 000051E3 CMP R1,#+0 \ 00000034 471F80E2 ADD R1,R0,#+284 5285 if(!cl->just_i) 5286 DrawText(rc->x+1,rc->y,rc->x2,cl->name,blue,clfont+1,0,0); \ 00000038 480F8002 ADDEQ R0,R0,#+288 5287 else 5288 DrawText(rc->x+1,rc->y,rc->x2,cl->name,clrRed,clfont+1,0,0); \ 0000003C 460F8012 ADDNE R0,R0,#+280 \ 00000040 ........ _BLF SetFontColor,??SetFontColor??rA \ 00000044 080045E0 SUB R0,R5,R8 \ 00000048 01002DE9 PUSH {R0} \ 0000004C 5E70A0E3 MOV R7,#+94 \ 00000050 407F87E3 ORR R7,R7,#0x100 \ 00000054 0030A0E3 MOV R3,#+0 \ 00000058 0000A0E3 MOV R0,#+0 \ 0000005C 01002DE9 PUSH {R0} \ 00000060 01002DE9 PUSH {R0} \ 00000064 80002DE9 PUSH {R7} \ 00000068 142086E2 ADD R2,R6,#+20 \ 0000006C 0100A0E3 MOV R0,#+1 \ 00000070 01002DE9 PUSH {R0} \ 00000074 10002DE9 PUSH {R4} \ 00000078 0910A0E1 MOV R1,R9 \ 0000007C 0800A0E1 MOV R0,R8 \ 00000080 ........ _BLF PrintText,??PrintText??rA \ 00000084 18D08DE2 ADD SP,SP,#+24 5289 5290 cl->just_i=!cl->just_i; \ 00000088 6C0096E5 LDR R0,[R6, #+108] \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 0100A003 MOVEQ R0,#+1 \ 00000094 0000A013 MOVNE R0,#+0 \ 00000098 6C0086E5 STR R0,[R6, #+108] 5291 } \ 0000009C F083BDE8 POP {R4-R9,PC} ;; return \ ??DrawJustNow_0: \ 000000A0 ........ DC32 i_rc + 1084 5292 5293 \ In segment CODE, align 4, keep-with-next 5294 void log(char *name,int i,int j) 5295 { \ log: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 41DF4DE2 SUB SP,SP,#+260 5296 int hFile; 5297 unsigned int io_error = 0; \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C 00408DE5 STR R4,[SP, #+0] 5298 char text[255]; 5299 sprintf(text,"%s - %d(%d)",name,i,j); \ 00000010 94409FE5 LDR R4,??log_0+0x4 ;; `?` \ 00000014 04002DE9 PUSH {R2} \ 00000018 0130A0E1 MOV R3,R1 \ 0000001C 0410A0E1 MOV R1,R4 \ 00000020 0020A0E1 MOV R2,R0 \ 00000024 08008DE2 ADD R0,SP,#+8 \ 00000028 160000EF SWI +22 5300 hFile = fopen("4:\\nata.txt",A_ReadWrite + A_Create + A_Append,P_READ+P_WRITE, &io_error); \ 0000002C 04308DE2 ADD R3,SP,#+4 \ 00000030 602FA0E3 MOV R2,#+384 \ 00000034 761042E2 SUB R1,R2,#+118 \ 00000038 0C0084E2 ADD R0,R4,#+12 \ 0000003C 0A0000EF SWI +10 \ 00000040 0050A0E1 MOV R5,R0 5301 if(hFile!=-1) \ 00000044 010075E3 CMN R5,#+1 \ 00000048 04D08DE2 ADD SP,SP,#+4 \ 0000004C 1000000A BEQ ??log_1 5302 { 5303 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 5304 fwrite(hFile, "\r\n", 2, &io_error); \ 0000006C 0D30A0E1 MOV R3,SP \ 00000070 0220A0E3 MOV R2,#+2 \ 00000074 0B1F8FE2 ADR R1,??log_0 ;; "\r\n" \ 00000078 0500A0E1 MOV R0,R5 \ 0000007C 0C0000EF SWI +12 5305 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} 5306 } 5307 else 5308 ShowMSG(1,(int)"Error!"); \ ??log_1: \ 00000094 181084E2 ADD R1,R4,#+24 \ 00000098 0100A0E3 MOV R0,#+1 \ 0000009C 480100EF SWI +328 5309 // mfree(text); 5310 } \ 000000A0 41DF8DE2 ADD SP,SP,#+260 \ 000000A4 3080BDE8 POP {R4,R5,PC} ;; return \ ??log_0: \ 000000A8 0D0A0000 DC8 "\r\n",+0 \ 000000AC ........ DC32 `?` 5311 5312 /* 5313 typedef struct 5314 { 5315 int type; //0-доставлен, 1-отправлен, 2-не отправлено 5316 int count;//кол-во не доставленных 5317 }ACKED; 5318 */ 5319 #define SENDED 0 5320 #define SEND 1 5321 #define NOTSEND 2 \ In segment CODE, align 4, keep-with-next 5322 ACKED *GetAck(CLIST *t) 5323 { \ GetAck: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 5324 if(!ShowProcessSend) return 0; \ 00000008 ........ LDR R0,??DataTable238 ;; 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} 5325 if(!t) return 0; \ ??GetAck_0: \ 00000020 000054E3 CMP R4,#+0 \ 00000024 FBFFFF0A BEQ ??GetAck_1 5326 if(!t->isactive) return 0; \ 00000028 A00094E5 LDR R0,[R4, #+160] \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 1080BD08 POPEQ {R4,PC} 5327 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 5328 5329 ACKED *ack=malloc(sizeof(ACKED)); \ 00000048 0800A0E3 MOV R0,#+8 \ 0000004C 140000EF SWI +20 5330 ack->type=0; \ 00000050 0010A0E3 MOV R1,#+0 \ 00000054 001080E5 STR R1,[R0, #+0] 5331 ack->count=0; \ 00000058 041080E5 STR R1,[R0, #+4] 5332 LOGQ *lp; 5333 lp=t->log; \ 0000005C 942094E5 LDR R2,[R4, #+148] \ 00000060 000052E3 CMP R2,#+0 \ 00000064 1080BD08 POPEQ {R4,PC} 5334 5335 while(lp) 5336 { 5337 if(lp->acked)//Если отправлен или доставлен \ ??GetAck_2: \ 00000068 043092E5 LDR R3,[R2, #+4] \ 0000006C 000053E3 CMP R3,#+0 \ 00000070 0300000A BEQ ??GetAck_3 5338 { 5339 if (lp->acked==1)//отправлен,но не доставлен \ 00000074 010053E3 CMP R3,#+1 \ 00000078 0500000A BEQ ??GetAck_4 5340 { 5341 ack->type = SEND; 5342 ack->count++; 5343 } 5344 else 5345 ack->type = SENDED;//доставлен(прозрачный) \ 0000007C 001080E5 STR R1,[R0, #+0] \ 00000080 070000EA B ??GetAck_5 5346 } 5347 else 5348 if (lp->ID!=0xFFFFFFFF)//не доставлено \ ??GetAck_3: \ 00000084 083092E5 LDR R3,[R2, #+8] \ 00000088 010073E3 CMN R3,#+1 \ 0000008C 0400000A BEQ ??GetAck_5 5349 { 5350 ack->type = NOTSEND; \ 00000090 0230A0E3 MOV R3,#+2 \ ??GetAck_4: \ 00000094 003080E5 STR R3,[R0, #+0] 5351 ack->count++; \ 00000098 043090E5 LDR R3,[R0, #+4] \ 0000009C 013083E2 ADD R3,R3,#+1 \ 000000A0 043080E5 STR R3,[R0, #+4] 5352 } 5353 lp=lp->next; \ ??GetAck_5: \ 000000A4 002092E5 LDR R2,[R2, #+0] 5354 } \ 000000A8 000052E3 CMP R2,#+0 \ 000000AC EDFFFF1A BNE ??GetAck_2 5355 //if(ack->type==0) return 0; 5356 //if(ack->count==0) return 0; 5357 // log(t->name,ack->type,ack->count); 5358 return ack; \ 000000B0 1080BDE8 POP {R4,PC} ;; return 5359 } 5360 5361 int clstartItem=0; 5362 int BlinkMSG=0; \ In segment CODE, align 4, keep-with-next 5363 void DrawList() 5364 { 5365 //Тут пиздец,и мне по хуй,я разбираюсь в этом и знаю что оно работает как нужно. 5366 5367 if(isSystemFont) clfont=100+pngFont; \ DrawList: \ 00000000 ........ LDR R1,??DataTable230 ;; 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,??DataTable231 ;; pngFont \ 00000020 000090E5 LDR R0,[R0, #+0] \ 00000024 640080E2 ADD R0,R0,#+100 \ 00000028 000000EA B ??DrawList_1 5368 else clfont=2; \ ??DrawList_0: \ 0000002C 0200A0E3 MOV R0,#+2 \ ??DrawList_1: \ 00000030 ........ LDR R5,??DataTable246 ;; i_rc \ 00000034 3C0485E5 STR R0,[R5, #+1084] 5369 if(!cltop) return; \ 00000038 F00395E5 LDR R0,[R5, #+1008] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 AE02000A BEQ ??DrawList_2 5370 5371 // int font_y = FontH(clfont)+2;//16+2 5372 5373 int font_y = 0; 5374 if(FontH(clfont) < icons[IS_ONLINE]->h) font_y = icons[IS_ONLINE]->h+2;//Если иконки выше чем фонт,то по высоте иконок рисуемся \ 00000044 3C0495E5 LDR R0,[R5, #+1084] \ 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 14108DB5 STRLT R1,[SP, #+20] \ 00000060 030000BA BLT ??DrawList_3 5375 else font_y = FontH(clfont)+2; \ 00000064 3C0495E5 LDR R0,[R5, #+1084] \ 00000068 ........ _BLF FontH,??FontH??rA \ 0000006C 020080E2 ADD R0,R0,#+2 \ 00000070 14008DE5 STR R0,[SP, #+20] 5376 5377 int scr_w=ScreenW()-1; \ ??DrawList_3: \ 00000074 888100EF SWI +33160 \ 00000078 010040E2 SUB R0,R0,#+1 \ 0000007C 24008DE5 STR R0,[SP, #+36] 5378 int scr_h=ScreenH()-1; \ 00000080 898100EF SWI +33161 5379 int y2; 5380 5381 //__root const unsigned int SOFT_MODE = 0; 5382 // __root const CFG_CBOX_ITEM cfgcboxI_8[3]={"Ничего,""Софты","Инфу"}; 5383 int SoftH=0; 5384 5385 if(SOFT_MODE==1) SoftH=FontH(clfont);//если показывать софты \ 00000084 ........ LDR R1,??DataTable250 ;; 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 3C0495E5 LDR R0,[R5, #+1084] \ 000000A0 ........ _BLF FontH,??FontH??rA \ 000000A4 0070A0E1 MOV R7,R0 \ 000000A8 040000EA B ??DrawList_5 5386 else if(SOFT_MODE==2) SoftH=FontH(clfont)*2;//если показывать инфу \ ??DrawList_4: \ 000000AC 020051E3 CMP R1,#+2 \ 000000B0 0200001A BNE ??DrawList_5 \ 000000B4 3C0495E5 LDR R0,[R5, #+1084] \ 000000B8 ........ _BLF FontH,??FontH??rA \ 000000BC 8070A0E1 LSL R7,R0,#+1 5387 5388 if(VIEW_MODE) \ ??DrawList_5: \ 000000C0 ........ LDR R0,??DataTable234 ;; VIEW_MODE \ 000000C4 006090E5 LDR R6,[R0, #+0] \ 000000C8 000056E3 CMP R6,#+0 \ 000000CC 0C00000A BEQ ??DrawList_6 5389 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 3C0495E5 LDR R0,[R5, #+1084] \ 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 14009DE5 LDR R0,[SP, #+20] \ 000000F4 B80000EF SWI +184 \ 000000F8 8000A0E1 LSL R0,R0,#+1 \ 000000FC 010040E2 SUB R0,R0,#+1 \ 00000100 090000EA B ??DrawList_7 5390 else 5391 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-SoftH-2); \ ??DrawList_6: \ 00000104 898100EF SWI +33161 \ 00000108 0080A0E1 MOV R8,R0 \ 0000010C 3C0495E5 LDR R0,[R5, #+1084] \ 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 14009DE5 LDR R0,[SP, #+20] \ 00000128 B80000EF SWI +184 5392 5393 CLIST *cl; 5394 int i=0; 5395 int start_y; 5396 int x=0; 5397 RECT rc; 5398 int icon; 5399 collum=0; \ ??DrawList_7: \ 0000012C ........ LDR R8,??DataTable248 ;; screen3 \ 00000130 400485E5 STR R0,[R5, #+1088] \ 00000134 0070A0E3 MOV R7,#+0 \ 00000138 0000A0E3 MOV R0,#+0 \ 0000013C 5C0088E5 STR R0,[R8, #+92] 5400 // int clfont=108; 5401 char *name=malloc(128); \ 00000140 8000A0E3 MOV R0,#+128 \ 00000144 140000EF SWI +20 \ 00000148 18008DE5 STR R0,[SP, #+24] 5402 int yy=0; \ 0000014C 0710A0E1 MOV R1,R7 \ 00000150 30108DE5 STR R1,[SP, #+48] 5403 int drawFont = clfont; 5404 5405 ACKED *ack; 5406 DYNPNGICONLIST *xs; ^ Warning[Pe177]: variable "xs" was declared but never referenced 5407 5408 LockSched(); \ 00000154 460100EF SWI +326 5409 totalItems = CountContacts(); //TotalBmk(); \ 00000158 ........ _BLF CountContacts,??CountContacts??rA 5410 5411 if(LINE_MODE) itemFromDisp--; \ 0000015C A4199FE5 LDR R1,??DrawList_8 ;; LINE_MODE \ 00000160 440485E5 STR R0,[R5, #+1092] \ 00000164 001091E5 LDR R1,[R1, #+0] \ 00000168 34108DE5 STR R1,[SP, #+52] \ 0000016C 000051E3 CMP R1,#+0 \ 00000170 40049515 LDRNE R0,[R5, #+1088] \ 00000174 01004012 SUBNE R0,R0,#+1 \ 00000178 40048515 STRNE R0,[R5, #+1088] 5412 5413 while( i < ((VIEW_MODE!=0)?(totalItems):(itemFromDisp)) ) \ ??DrawList_9: \ 0000017C 400495E5 LDR R0,[R5, #+1088] \ 00000180 000056E3 CMP R6,#+0 \ 00000184 44149515 LDRNE R1,[R5, #+1092] \ 00000188 0010A001 MOVEQ R1,R0 \ 0000018C 010057E1 CMP R7,R1 \ 00000190 570200AA BGE ??DrawList_10 5414 { 5415 if(!VIEW_MODE) goto next;//если не два столбика то пропускаем условие \ 00000194 000056E3 CMP R6,#+0 \ 00000198 1300000A BEQ ??DrawList_11 5416 if( (i>=(curpage-1)*itemFromDisp) && (i<=itemFromDisp*curpage) )//если те итемы который нужно выводить на экран со страници curpage \ 0000019C 581098E5 LDR R1,[R8, #+88] \ 000001A0 012041E2 SUB R2,R1,#+1 \ 000001A4 900202E0 MUL R2,R0,R2 \ 000001A8 020057E1 CMP R7,R2 \ 000001AC 910000A0 MULGE R0,R1,R0 \ 000001B0 070050A1 CMPGE R0,R7 \ 000001B4 460200BA BLT ??DrawList_12 \ 000001B8 0000A0E3 MOV R0,#+0 \ ??DrawList_13: \ 000001BC 070080E0 ADD R0,R0,R7 \ 000001C0 ........ _BLF FindContactByN,??FindContactByN??rA \ 000001C4 0090B0E1 MOVS R9,R0 5417 { 5418 next: 5419 cl=FindContactByN( i + ((VIEW_MODE==0)?(clstartItem):(0)) ); 5420 if(!cl) return; \ 000001C8 4C02000A BEQ ??DrawList_2 5421 if(cl)//если такой есть то рисуем его 5422 { 5423 start_y=0; 5424 if(LINE_MODE)//если в две линии \ 000001CC 34009DE5 LDR R0,[SP, #+52] \ 000001D0 00A0A0E3 MOV R10,#+0 \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 0C00000A BEQ ??DrawList_14 5425 { 5426 if(i + ((VIEW_MODE==0)?(clstartItem):(0)) > curpos ) start_y+=font_y+3; \ 000001DC 000056E3 CMP R6,#+0 \ 000001E0 68009805 LDREQ R0,[R8, #+104] \ 000001E4 0000A013 MOVNE R0,#+0 \ 000001E8 010000EA B ??DrawList_15 \ ??DrawList_11: \ 000001EC 680098E5 LDR R0,[R8, #+104] \ 000001F0 F1FFFFEA B ??DrawList_13 \ ??DrawList_15: \ 000001F4 301495E5 LDR R1,[R5, #+1072] \ 000001F8 070080E0 ADD R0,R0,R7 \ 000001FC 000051E1 CMP R1,R0 \ 00000200 14009DB5 LDRLT R0,[SP, #+20] 5427 y2=2; \ 00000204 0210A0E3 MOV R1,#+2 \ 00000208 03A080B2 ADDLT R10,R0,#+3 \ 0000020C 000000EA B ??DrawList_16 5428 } 5429 else y2=1; \ ??DrawList_14: \ 00000210 0110A0E3 MOV R1,#+1 5430 5431 if(VIEW_MODE)//если в две колонки \ ??DrawList_16: \ 00000214 14309DE5 LDR R3,[SP, #+20] \ 00000218 24209DE5 LDR R2,[SP, #+36] \ 0000021C 3C0495E5 LDR R0,[R5, #+1084] \ 00000220 910303E0 MUL R3,R1,R3 \ 00000224 05B042E2 SUB R11,R2,#+5 \ 00000228 08308DE5 STR R3,[SP, #+8] \ 0000022C 000056E3 CMP R6,#+0 \ 00000230 2B00000A BEQ ??DrawList_17 5432 { 5433 if(!collum)//если первая колонка \ 00000234 A22F82E0 ADD R2,R2,R2, LSR #+31 \ 00000238 C220A0E1 ASR R2,R2,#+1 \ 0000023C 10208DE5 STR R2,[SP, #+16] \ 00000240 5C1098E5 LDR R1,[R8, #+92] \ 00000244 000051E3 CMP R1,#+0 \ 00000248 1400001A BNE ??DrawList_18 5434 { 5435 start_y += (CLIST_Y1 + (((i - (curpage-1)*itemFromDisp)*font_y)/2) ); //определяем начальное смещение по у \ 0000024C ........ _BLF FontH,??FontH??rA \ 00000250 581098E5 LDR R1,[R8, #+88] \ 00000254 402495E5 LDR R2,[R5, #+1088] \ 00000258 011041E2 SUB R1,R1,#+1 \ 0000025C 920101E0 MUL R1,R2,R1 \ 00000260 14209DE5 LDR R2,[SP, #+20] \ 00000264 011047E0 SUB R1,R7,R1 \ 00000268 920101E0 MUL R1,R2,R1 \ 0000026C A11F81E0 ADD R1,R1,R1, LSR #+31 \ 00000270 C10080E0 ADD R0,R0,R1, ASR #+1 \ 00000274 040080E2 ADD R0,R0,#+4 \ 00000278 0AA080E0 ADD R10,R0,R10 5436 yy=start_y; \ 0000027C 30A08DE5 STR R10,[SP, #+48] 5437 StoreXYXYtoRECT(&rc, 1, start_y, (scr_w/2)-5, start_y+(font_y*y2)); \ 00000280 08009DE5 LDR R0,[SP, #+8] \ 00000284 0A20A0E1 MOV R2,R10 \ 00000288 0A0080E0 ADD R0,R0,R10 \ 0000028C 01002DE9 PUSH {R0} \ 00000290 14009DE5 LDR R0,[SP, #+20] \ 00000294 0110A0E3 MOV R1,#+1 \ 00000298 053040E2 SUB R3,R0,#+5 \ 0000029C 070000EA B ??DrawList_19 5438 } 5439 else//если вторая 5440 { 5441 StoreXYXYtoRECT(&rc, (scr_w/2)-4, yy, scr_w-5, yy+(font_y*y2)); \ ??DrawList_18: \ 000002A0 30009DE5 LDR R0,[SP, #+48] \ 000002A4 08109DE5 LDR R1,[SP, #+8] \ 000002A8 0B30A0E1 MOV R3,R11 \ 000002AC 000081E0 ADD R0,R1,R0 \ 000002B0 01002DE9 PUSH {R0} \ 000002B4 34209DE5 LDR R2,[SP, #+52] \ 000002B8 14009DE5 LDR R0,[SP, #+20] \ 000002BC 041040E2 SUB R1,R0,#+4 \ ??DrawList_19: \ 000002C0 04008DE2 ADD R0,SP,#+4 \ 000002C4 340100EF SWI +308 \ 000002C8 04D08DE2 ADD SP,SP,#+4 5442 } 5443 collum=!collum; \ 000002CC 5C0098E5 LDR R0,[R8, #+92] \ 000002D0 000050E3 CMP R0,#+0 \ 000002D4 0100A003 MOVEQ R0,#+1 \ 000002D8 0000A013 MOVNE R0,#+0 \ 000002DC 5C0088E5 STR R0,[R8, #+92] \ 000002E0 0F0000EA B ??DrawList_20 5444 } 5445 else 5446 { 5447 start_y += (CLIST_Y1 + 2 + (i/* - (curpage-1)*itemFromDisp*/)*font_y); \ ??DrawList_17: \ 000002E4 14109DE5 LDR R1,[SP, #+20] \ 000002E8 02002DE9 PUSH {R1} \ 000002EC ........ _BLF FontH,??FontH??rA \ 000002F0 0200BDE8 POP {R1} 5448 StoreXYXYtoRECT(&rc,2,start_y,scr_w-5,start_y+(font_y*y2)); \ 000002F4 0B30A0E1 MOV R3,R11 \ 000002F8 910720E0 MLA R0,R1,R7,R0 \ 000002FC 0210A0E3 MOV R1,#+2 \ 00000300 060080E2 ADD R0,R0,#+6 \ 00000304 0AA080E0 ADD R10,R0,R10 \ 00000308 08009DE5 LDR R0,[SP, #+8] \ 0000030C 0A20A0E1 MOV R2,R10 \ 00000310 0A0080E0 ADD R0,R0,R10 \ 00000314 01002DE9 PUSH {R0} \ 00000318 04008DE2 ADD R0,SP,#+4 \ 0000031C 340100EF SWI +308 \ 00000320 04D08DE2 ADD SP,SP,#+4 5449 } 5450 5451 icon=GetIconIndex(cl); \ ??DrawList_20: \ 00000324 0900A0E1 MOV R0,R9 \ 00000328 ........ BL GetIconIndex \ 0000032C 00B0A0E1 MOV R11,R0 \ 00000330 0F005BE3 CMP R11,#+15 \ 00000334 0700000A BEQ ??DrawList_21 5452 if (icon!=IS_GROUP)//если не иконка группы 5453 { 5454 ack=GetAck(cl);//Обработка процесса отправки \ 00000338 0900A0E1 MOV R0,R9 \ 0000033C ........ BL GetAck 5455 // log(cl->name,ack->type,ack->count); 5456 sprintf(name,percent_s,cl->name); \ 00000340 ........ LDR R1,??DataTable237 ;; Canvas + 8 \ 00000344 0040A0E1 MOV R4,R0 \ 00000348 18009DE5 LDR R0,[SP, #+24] \ 0000034C 142089E2 ADD R2,R9,#+20 \ 00000350 160000EF SWI +22 \ 00000354 320000EA B ??DrawList_22 5457 } 5458 else 5459 { 5460 int onlinetotal[2]; 5461 GetOnTotalContact(cl->group,onlinetotal); \ ??DrawList_21: \ 00000358 100099E5 LDR R0,[R9, #+16] \ 0000035C 40108DE2 ADD R1,SP,#+64 \ 00000360 ........ BL GetOnTotalContact 5462 if(!VIEW_MODE)//если не в два столбца \ 00000364 000056E3 CMP R6,#+0 \ 00000368 1D00001A BNE ??DrawList_23 5463 { 5464 char *s=malloc(32); \ 0000036C 2000A0E3 MOV R0,#+32 \ 00000370 140000EF SWI +20 5465 sprintf(name,percent_s,cl->name); \ 00000374 ........ LDR R1,??DataTable237 ;; Canvas + 8 \ 00000378 08008DE5 STR R0,[SP, #+8] \ 0000037C 18009DE5 LDR R0,[SP, #+24] \ 00000380 142089E2 ADD R2,R9,#+20 \ 00000384 160000EF SWI +22 5466 sprintf(s,"(%d/%d)",onlinetotal[0],onlinetotal[1]); \ 00000388 44309DE5 LDR R3,[SP, #+68] \ 0000038C 40209DE5 LDR R2,[SP, #+64] \ 00000390 74179FE5 LDR R1,??DrawList_8+0x4 ;; Canvas + 532 \ 00000394 08009DE5 LDR R0,[SP, #+8] \ 00000398 160000EF SWI +22 5467 SetFontColor((char*)GroupClr,transparent,0); \ 0000039C 6C079FE5 LDR R0,??DrawList_8+0x8 ;; GroupClr \ 000003A0 0020A0E3 MOV R2,#+0 \ 000003A4 471F88E2 ADD R1,R8,#+284 \ 000003A8 ........ _BLF SetFontColor,??SetFontColor??rA 5468 PrintField(scr_w-7,start_y,s,2,clfont,1);//capacity in header \ 000003AC 0100A0E3 MOV R0,#+1 \ 000003B0 01002DE9 PUSH {R0} \ 000003B4 3C0495E5 LDR R0,[R5, #+1084] \ 000003B8 0230A0E3 MOV R3,#+2 \ 000003BC 01002DE9 PUSH {R0} \ 000003C0 10209DE5 LDR R2,[SP, #+16] \ 000003C4 2C009DE5 LDR R0,[SP, #+44] \ 000003C8 0A10A0E1 MOV R1,R10 \ 000003CC 070040E2 SUB R0,R0,#+7 \ 000003D0 ........ _BLF PrintField,??PrintField??rA 5469 mfree(s); \ 000003D4 10009DE5 LDR R0,[SP, #+16] \ 000003D8 150000EF SWI +21 \ 000003DC 08D08DE2 ADD SP,SP,#+8 \ 000003E0 0C0000EA B ??DrawList_24 5470 } 5471 else 5472 sprintf(name,"%s%c%c(%d/%d)",cl->name,0xE01D,0xE012,onlinetotal[0],onlinetotal[1]); \ ??DrawList_23: \ 000003E4 44009DE5 LDR R0,[SP, #+68] \ 000003E8 24179FE5 LDR R1,??DrawList_8+0xC ;; Canvas + 540 \ 000003EC 01002DE9 PUSH {R0} \ 000003F0 44009DE5 LDR R0,[SP, #+68] \ 000003F4 142089E2 ADD R2,R9,#+20 \ 000003F8 01002DE9 PUSH {R0} \ 000003FC 1200A0E3 MOV R0,#+18 \ 00000400 E00C80E3 ORR R0,R0,#0xE000 \ 00000404 01002DE9 PUSH {R0} \ 00000408 0B3080E2 ADD R3,R0,#+11 \ 0000040C 24009DE5 LDR R0,[SP, #+36] \ 00000410 160000EF SWI +22 \ 00000414 0CD08DE2 ADD SP,SP,#+12 5473 if (cl->state) icon++; //Модификация иконки группы \ ??DrawList_24: \ 00000418 B405D9E1 LDRH R0,[R9, #+84] \ 0000041C 000050E3 CMP R0,#+0 \ 00000420 01B08B12 ADDNE R11,R11,#+1 5474 } 5475 5476 // DrawImg(rc.x,rc.y,NumStatusToIconBar+icon);//status 5477 if(icons[icon])//вдруг иконки нет \ ??DrawList_22: \ 00000424 0BA185E0 ADD R10,R5,R11, LSL #+2 \ 00000428 08009AE5 LDR R0,[R10, #+8] \ 0000042C 000050E3 CMP R0,#+0 \ 00000430 0F00000A BEQ ??DrawList_25 5478 { 5479 /* if(icon==IS_MSG) 5480 { 5481 if(!BlinkMSG) 5482 DrwImage(icons[((cl->just_i)?(IS_OFFLINE):(icon))],rc.x,rc.y);//draw imghdr! 5483 } 5484 else*/ 5485 DrwImage(icons[((cl->just_i)?(IS_OFFLINE):(icon))],rc.x,rc.y+1);//draw imghdr! \ 00000434 F210DDE1 LDRSH R1,[SP, #+2] \ 00000438 6C0099E5 LDR R0,[R9, #+108] \ 0000043C 000050E3 CMP R0,#+0 \ 00000440 0000A013 MOVNE R0,#+0 \ 00000444 0B00A001 MOVEQ R0,R11 \ 00000448 012081E2 ADD R2,R1,#+1 \ 0000044C F010DDE1 LDRSH R1,[SP, #+0] \ 00000450 000185E0 ADD R0,R5,R0, LSL #+2 \ 00000454 080090E5 LDR R0,[R0, #+8] \ 00000458 ........ BL DrwImage 5486 rc.x+=icons[icon]->w+2;// + смещение по х \ 0000045C 08209AE5 LDR R2,[R10, #+8] \ 00000460 F010DDE1 LDRSH R1,[SP, #+0] \ 00000464 0020D2E5 LDRB R2,[R2, #+0] \ 00000468 022082E2 ADD R2,R2,#+2 \ 0000046C 011082E0 ADD R1,R2,R1 \ 00000470 B010CDE1 STRH R1,[SP, #+0] 5487 /* if(icon==IS_MSG) 5488 BlinkMSG=!BlinkMSG; 5489 else 5490 BlinkMSG=0;*/ 5491 } 5492 5493 if(cl->unread_msg!=0) \ ??DrawList_25: \ 00000474 882099E5 LDR R2,[R9, #+136] \ 00000478 5EA0A0E3 MOV R10,#+94 \ 0000047C 40AF8AE3 ORR R10,R10,#0x100 \ 00000480 000052E3 CMP R2,#+0 \ 00000484 2E00000A BEQ ??DrawList_26 5494 { 5495 char p[3]; 5496 sprintf(p,_d,cl->unread_msg); \ 00000488 88169FE5 LDR R1,??DrawList_8+0x10 ;; Canvas + 14 \ 0000048C 3B008DE2 ADD R0,SP,#+59 \ 00000490 160000EF SWI +22 5497 DrawText(rc.x,rc.y,rc.x2,p,(cl->isactive!=0)?(clrRed):(clrBlack),(isSystemFont)?clfont:((cl->isactive!=0)?(clfont+1):(clfont)),0,0); \ 00000494 28009DE5 LDR R0,[SP, #+40] \ 00000498 3C1495E5 LDR R1,[R5, #+1084] \ 0000049C 000050E3 CMP R0,#+0 \ 000004A0 A00099E5 LDR R0,[R9, #+160] \ 000004A4 3500000A BEQ ??DrawList_27 \ 000004A8 000050E3 CMP R0,#+0 \ 000004AC 3600001A BNE ??DrawList_28 \ ??DrawList_29: \ 000004B0 440F88E2 ADD R0,R8,#+272 \ ??DrawList_30: \ 000004B4 08108DE5 STR R1,[SP, #+8] \ 000004B8 F420DDE1 LDRSH R2,[SP, #+4] \ 000004BC 471F88E2 ADD R1,R8,#+284 \ 000004C0 10208DE5 STR R2,[SP, #+16] \ 000004C4 F220DDE1 LDRSH R2,[SP, #+2] \ 000004C8 0C208DE5 STR R2,[SP, #+12] \ 000004CC F020DDE1 LDRSH R2,[SP, #+0] \ 000004D0 1C208DE5 STR R2,[SP, #+28] \ 000004D4 0020A0E3 MOV R2,#+0 \ 000004D8 ........ _BLF SetFontColor,??SetFontColor??rA \ 000004DC 10009DE5 LDR R0,[SP, #+16] \ 000004E0 1C109DE5 LDR R1,[SP, #+28] \ 000004E4 0030A0E3 MOV R3,#+0 \ 000004E8 010040E0 SUB R0,R0,R1 \ 000004EC 01002DE9 PUSH {R0} \ 000004F0 0000A0E3 MOV R0,#+0 \ 000004F4 01002DE9 PUSH {R0} \ 000004F8 01002DE9 PUSH {R0} \ 000004FC 0A00A0E1 MOV R0,R10 \ 00000500 01002DE9 PUSH {R0} \ 00000504 0100A0E3 MOV R0,#+1 \ 00000508 01002DE9 PUSH {R0} \ 0000050C 1C009DE5 LDR R0,[SP, #+28] \ 00000510 01002DE9 PUSH {R0} \ 00000514 24109DE5 LDR R1,[SP, #+36] \ 00000518 34009DE5 LDR R0,[SP, #+52] \ 0000051C 53208DE2 ADD R2,SP,#+83 \ 00000520 ........ _BLF PrintText,??PrintText??rA 5498 rc.x+=GetWidth(rc.x,rc.y)+2; \ 00000524 FA11DDE1 LDRSH R1,[SP, #+26] \ 00000528 F801DDE1 LDRSH R0,[SP, #+24] \ 0000052C ........ _BLF GetWidth,??GetWidth??rA \ 00000530 F821DDE1 LDRSH R2,[SP, #+24] \ 00000534 020080E2 ADD R0,R0,#+2 \ 00000538 020080E0 ADD R0,R0,R2 \ 0000053C B801CDE1 STRH R0,[SP, #+24] \ 00000540 18D08DE2 ADD SP,SP,#+24 5499 } 5500 5501 if(ack && ack->count && (ShowProcessSend==1 || ShowProcessSend==3)) \ ??DrawList_26: \ 00000544 ........ LDR R1,??DataTable238 ;; ShowProcessSend \ 00000548 000054E3 CMP R4,#+0 \ 0000054C 001091E5 LDR R1,[R1, #+0] \ 00000550 20108DE5 STR R1,[SP, #+32] \ 00000554 04209415 LDRNE R2,[R4, #+4] \ 00000558 00005213 CMPNE R2,#+0 \ 0000055C 3B00000A BEQ ??DrawList_31 \ 00000560 010051E3 CMP R1,#+1 \ 00000564 03005113 CMPNE R1,#+3 \ 00000568 3800001A BNE ??DrawList_31 5502 { 5503 char p[3]; 5504 if(cl->unread_msg) \ 0000056C 880099E5 LDR R0,[R9, #+136] \ 00000570 000050E3 CMP R0,#+0 \ 00000574 9C159F05 LDREQ R1,??DrawList_8+0x10 ;; Canvas + 14 5505 sprintf(p," %d",ack->count); \ 00000578 C61F8F12 ADRNE R1,??DrawList_32 ;; " %d" \ 0000057C 040000EA B ??DrawList_33 \ ??DrawList_27: \ 00000580 000050E3 CMP R0,#+0 \ 00000584 C9FFFF0A BEQ ??DrawList_29 \ 00000588 011081E2 ADD R1,R1,#+1 \ ??DrawList_28: \ 0000058C 460F88E2 ADD R0,R8,#+280 \ 00000590 C7FFFFEA B ??DrawList_30 \ ??DrawList_33: \ 00000594 38008DE2 ADD R0,SP,#+56 \ 00000598 160000EF SWI +22 5506 else 5507 sprintf(p,_d,ack->count); 5508 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) \ 0000059C 000094E5 LDR R0,[R4, #+0] \ 000005A0 010050E3 CMP R0,#+1 \ 000005A4 70059F05 LDREQ R0,??DrawList_8+0x14 ;; SendClr \ 000005A8 0200000A BEQ ??DrawList_34 \ 000005AC 020050E3 CMP R0,#+2 \ 000005B0 68059F05 LDREQ R0,??DrawList_8+0x18 ;; UnAckedClr \ 000005B4 0000A013 MOVNE R0,#+0 \ ??DrawList_34: \ 000005B8 3C2495E5 LDR R2,[R5, #+1084] \ 000005BC 471F88E2 ADD R1,R8,#+284 \ 000005C0 012082E2 ADD R2,R2,#+1 \ 000005C4 08208DE5 STR R2,[SP, #+8] \ 000005C8 F420DDE1 LDRSH R2,[SP, #+4] \ 000005CC 10208DE5 STR R2,[SP, #+16] \ 000005D0 F220DDE1 LDRSH R2,[SP, #+2] \ 000005D4 1C208DE5 STR R2,[SP, #+28] \ 000005D8 F020DDE1 LDRSH R2,[SP, #+0] \ 000005DC 0C208DE5 STR R2,[SP, #+12] \ 000005E0 0020A0E3 MOV R2,#+0 \ 000005E4 ........ _BLF SetFontColor,??SetFontColor??rA \ 000005E8 10009DE5 LDR R0,[SP, #+16] \ 000005EC 0C109DE5 LDR R1,[SP, #+12] \ 000005F0 0030A0E3 MOV R3,#+0 \ 000005F4 010040E0 SUB R0,R0,R1 \ 000005F8 01002DE9 PUSH {R0} \ 000005FC 0000A0E3 MOV R0,#+0 \ 00000600 01002DE9 PUSH {R0} \ 00000604 01002DE9 PUSH {R0} \ 00000608 0A00A0E1 MOV R0,R10 \ 0000060C 01002DE9 PUSH {R0} \ 00000610 0100A0E3 MOV R0,#+1 \ 00000614 01002DE9 PUSH {R0} \ 00000618 1C009DE5 LDR R0,[SP, #+28] \ 0000061C 01002DE9 PUSH {R0} \ 00000620 34109DE5 LDR R1,[SP, #+52] \ 00000624 24009DE5 LDR R0,[SP, #+36] \ 00000628 50208DE2 ADD R2,SP,#+80 \ 0000062C ........ _BLF PrintText,??PrintText??rA 5509 rc.x+=GetWidth(rc.x,rc.y)+2; \ 00000630 FA11DDE1 LDRSH R1,[SP, #+26] \ 00000634 F801DDE1 LDRSH R0,[SP, #+24] \ 00000638 ........ _BLF GetWidth,??GetWidth??rA \ 0000063C F821DDE1 LDRSH R2,[SP, #+24] \ 00000640 020080E2 ADD R0,R0,#+2 \ 00000644 020080E0 ADD R0,R0,R2 \ 00000648 B801CDE1 STRH R0,[SP, #+24] \ 0000064C 18D08DE2 ADD SP,SP,#+24 5510 } 5511 5512 if(i + ((VIEW_MODE==0)?(clstartItem):(0)) == curpos )//Если наш итем то выделяем \ ??DrawList_31: \ 00000650 301495E5 LDR R1,[R5, #+1072] \ 00000654 000056E3 CMP R6,#+0 \ 00000658 68009805 LDREQ R0,[R8, #+104] \ 0000065C 0000A013 MOVNE R0,#+0 \ 00000660 070080E0 ADD R0,R0,R7 \ 00000664 010050E1 CMP R0,R1 \ 00000668 6300001A BNE ??DrawList_35 5513 { 5514 DrawRoundedFrame(rc.x-1,rc.y-1,rc.x2-1,rc.y2-1,0,0,0,ClCursorBordClr,ClCursorClr); \ 0000066C B0049FE5 LDR R0,??DrawList_8+0x1C ;; ClCursorClr \ 00000670 01002DE9 PUSH {R0} \ 00000674 AC049FE5 LDR R0,??DrawList_8+0x20 ;; ClCursorBordClr \ 00000678 01002DE9 PUSH {R0} \ 0000067C 0000A0E3 MOV R0,#+0 \ 00000680 01002DE9 PUSH {R0} \ 00000684 01002DE9 PUSH {R0} \ 00000688 01002DE9 PUSH {R0} \ 0000068C FA01DDE1 LDRSH R0,[SP, #+26] \ 00000690 013040E2 SUB R3,R0,#+1 \ 00000694 F801DDE1 LDRSH R0,[SP, #+24] \ 00000698 012040E2 SUB R2,R0,#+1 \ 0000069C F601DDE1 LDRSH R0,[SP, #+22] \ 000006A0 011040E2 SUB R1,R0,#+1 \ 000006A4 F401DDE1 LDRSH R0,[SP, #+20] \ 000006A8 010040E2 SUB R0,R0,#+1 \ 000006AC 500100EF SWI +336 5515 if(LINE_MODE && icon!=IS_GROUP) \ 000006B0 48009DE5 LDR R0,[SP, #+72] \ 000006B4 14D08DE2 ADD SP,SP,#+20 \ 000006B8 000050E3 CMP R0,#+0 \ 000006BC 0F005B13 CMPNE R11,#+15 \ 000006C0 4200000A BEQ ??DrawList_36 5516 { 5517 char s[64]; 5518 if ((cl->xtext && cl->xtext[0]!=0) && (cl->isShowXst) && (cl->state!=0xFFFF))//Если контакт онлайн и показывать хстату \ 000006C4 A80099E5 LDR R0,[R9, #+168] \ 000006C8 000050E3 CMP R0,#+0 \ 000006CC 0000D015 LDRBNE R0,[R0, #+0] \ 000006D0 00005013 CMPNE R0,#+0 \ 000006D4 70009915 LDRNE R0,[R9, #+112] \ 000006D8 00005013 CMPNE R0,#+0 \ 000006DC 0F00000A BEQ ??DrawList_37 \ 000006E0 B405D9E1 LDRH R0,[R9, #+84] \ 000006E4 FF10A0E3 MOV R1,#+255 \ 000006E8 FF1C81E3 ORR R1,R1,#0xFF00 \ 000006EC 010050E1 CMP R0,R1 \ 000006F0 0A00000A BEQ ??DrawList_37 5519 { 5520 int i; 5521 zeromem(s,64); \ 000006F4 4010A0E3 MOV R1,#+64 \ 000006F8 48008DE2 ADD R0,SP,#+72 \ 000006FC 1D0100EF SWI +285 5522 i=cl->xtext[0]; \ 00000700 A80099E5 LDR R0,[R9, #+168] \ ??DrawList_38: \ 00000704 0020D0E5 LDRB R2,[R0, #+0] 5523 if (i>63) i=63; 5524 strncpy(s,cl->xtext+1,i); \ 00000708 011080E2 ADD R1,R0,#+1 \ 0000070C 48008DE2 ADD R0,SP,#+72 \ 00000710 400052E3 CMP R2,#+64 \ 00000714 3F20A0A3 MOVGE R2,#+63 \ 00000718 160100EF SWI +278 \ 0000071C 110000EA B ??DrawList_39 5525 } 5526 else 5527 if(cl->xtext2 && cl->xtext2[0]!=0 && isLogStatusChange) \ ??DrawList_37: \ 00000720 AC0099E5 LDR R0,[R9, #+172] \ 00000724 000050E3 CMP R0,#+0 \ 00000728 0000D015 LDRBNE R0,[R0, #+0] \ 0000072C 00005013 CMPNE R0,#+0 \ 00000730 0800000A BEQ ??DrawList_40 \ 00000734 ........ LDR R0,??DataTable239 ;; isLogStatusChange \ 00000738 000090E5 LDR R0,[R0, #+0] \ 0000073C 000050E3 CMP R0,#+0 \ 00000740 0400000A BEQ ??DrawList_40 5528 { 5529 int i; 5530 zeromem(s,64); \ 00000744 4010A0E3 MOV R1,#+64 \ 00000748 48008DE2 ADD R0,SP,#+72 \ 0000074C 1D0100EF SWI +285 5531 i=cl->xtext2[0]; \ 00000750 AC0099E5 LDR R0,[R9, #+172] \ 00000754 EAFFFFEA B ??DrawList_38 5532 if (i>63) i=63; 5533 strncpy(s,cl->xtext2+1,i); 5534 } 5535 else 5536 sprintf(s,percent_d,cl->uin); \ ??DrawList_40: \ 00000758 0C2099E5 LDR R2,[R9, #+12] \ 0000075C C8139FE5 LDR R1,??DrawList_8+0x24 ;; Canvas + 11 \ 00000760 48008DE2 ADD R0,SP,#+72 \ 00000764 160000EF SWI +22 5537 SetFontColor((char*)CLDescricpClr,transparent,0); \ ??DrawList_39: \ 00000768 C0039FE5 LDR R0,??DrawList_8+0x28 ;; CLDescricpClr \ 0000076C 0020A0E3 MOV R2,#+0 \ 00000770 471F88E2 ADD R1,R8,#+284 \ 00000774 ........ _BLF SetFontColor,??SetFontColor??rA 5538 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 \ 00000778 F000DDE1 LDRSH R0,[SP, #+0] \ 0000077C F410DDE1 LDRSH R1,[SP, #+4] \ 00000780 0030A0E3 MOV R3,#+0 \ 00000784 001041E0 SUB R1,R1,R0 \ 00000788 031041E2 SUB R1,R1,#+3 \ 0000078C 02002DE9 PUSH {R1} \ 00000790 010080E2 ADD R0,R0,#+1 \ 00000794 0010A0E3 MOV R1,#+0 \ 00000798 02002DE9 PUSH {R1} \ 0000079C 02002DE9 PUSH {R1} \ 000007A0 0A10A0E1 MOV R1,R10 \ 000007A4 02002DE9 PUSH {R1} \ 000007A8 0110A0E3 MOV R1,#+1 \ 000007AC 02002DE9 PUSH {R1} \ 000007B0 3C1495E5 LDR R1,[R5, #+1084] \ 000007B4 02002DE9 PUSH {R1} \ 000007B8 2CC09DE5 LDR R12,[SP, #+44] \ 000007BC FA11DDE1 LDRSH R1,[SP, #+26] \ 000007C0 60208DE2 ADD R2,SP,#+96 \ 000007C4 01108CE0 ADD R1,R12,R1 \ 000007C8 ........ _BLF PrintText,??PrintText??rA \ 000007CC 18D08DE2 ADD SP,SP,#+24 5539 } 5540 5541 if(totalItems>1) \ ??DrawList_36: \ 000007D0 441495E5 LDR R1,[R5, #+1092] \ 000007D4 020051E3 CMP R1,#+2 \ 000007D8 020000BA BLT ??DrawList_41 5542 DrawScrollBar(i+clstartItem,totalItems); \ 000007DC 680098E5 LDR R0,[R8, #+104] \ 000007E0 070080E0 ADD R0,R0,R7 \ 000007E4 ........ BL DrawScrollBar 5543 5544 if(SOFT_MODE==2) DrawSoftInfo(cl); \ ??DrawList_41: \ 000007E8 2C009DE5 LDR R0,[SP, #+44] \ 000007EC 020050E3 CMP R0,#+2 \ 000007F0 0100001A BNE ??DrawList_35 \ 000007F4 0900A0E1 MOV R0,R9 \ 000007F8 ........ BL DrawSoftInfo 5545 } 5546 5547 if(cl->xstate!=0)//если есть хстатус \ ??DrawList_35: \ 000007FC B605D9E1 LDRH R0,[R9, #+86] \ 00000800 000050E3 CMP R0,#+0 \ 00000804 0F00000A BEQ ??DrawList_42 \ 00000808 000185E0 ADD R0,R5,R0, LSL #+2 \ 0000080C 2C0390E5 LDR R0,[R0, #+812] \ 00000810 041090E5 LDR R1,[R0, #+4] \ 00000814 000051E3 CMP R1,#+0 \ 00000818 0A00000A BEQ ??DrawList_42 5548 { 5549 //xs=GetXSByItem(cl->xstate); 5550 if(XStatusImg[cl->xstate]->bitmap) 5551 { 5552 DrwImage(XStatusImg[cl->xstate],rc.x-x,rc.y+1); \ 0000081C F210DDE1 LDRSH R1,[SP, #+2] \ 00000820 012081E2 ADD R2,R1,#+1 \ 00000824 F010DDE1 LDRSH R1,[SP, #+0] \ 00000828 ........ BL DrwImage 5553 rc.x+=XStatusImg[cl->xstate]->w; \ 0000082C B625D9E1 LDRH R2,[R9, #+86] \ 00000830 F010DDE1 LDRSH R1,[SP, #+0] \ 00000834 022185E0 ADD R2,R5,R2, LSL #+2 \ 00000838 2C2392E5 LDR R2,[R2, #+812] \ 0000083C 0020D2E5 LDRB R2,[R2, #+0] \ 00000840 011082E0 ADD R1,R2,R1 \ 00000844 B010CDE1 STRH R1,[SP, #+0] 5554 } 5555 } 5556 /* 5557 if(cl->xstate!=0)//если есть хстатус 5558 { 5559 xs=GetXSByItem(cl->xstate); 5560 if(xs) 5561 { 5562 DrwImage(xs->img,rc.x-x,rc.y); 5563 rc.x+=xs->img->w; 5564 } 5565 }*/ 5566 5567 //Наш фонт,каким буим рисовать)) системный - жирный не жирный,или елси пнг фонт, то активный один,не активный другой 5568 drawFont = (isSystemFont) ? (clfont + (SelBoldActiveChat==1 ? ((cl->isactive && cl->state!=0xFFFF)?1:0) : 0)) : ((cl->isactive!=0)?(clfont+1):(clfont)); \ ??DrawList_42: \ 00000848 28209DE5 LDR R2,[SP, #+40] \ 0000084C 3C0495E5 LDR R0,[R5, #+1084] \ 00000850 A01099E5 LDR R1,[R9, #+160] \ 00000854 000052E3 CMP R2,#+0 \ 00000858 0F00000A BEQ ??DrawList_43 \ 0000085C D0229FE5 LDR R2,??DrawList_8+0x2C ;; SelBoldActiveChat \ 00000860 002092E5 LDR R2,[R2, #+0] \ 00000864 010052E3 CMP R2,#+1 \ 00000868 0700001A BNE ??DrawList_44 \ 0000086C 000051E3 CMP R1,#+0 \ 00000870 0600000A BEQ ??DrawList_45 \ 00000874 B415D9E1 LDRH R1,[R9, #+84] \ 00000878 FF20A0E3 MOV R2,#+255 \ 0000087C FF2C82E3 ORR R2,R2,#0xFF00 \ 00000880 020051E1 CMP R1,R2 \ 00000884 0110A013 MOVNE R1,#+1 \ 00000888 0000001A BNE ??DrawList_45 \ ??DrawList_44: \ 0000088C 0010A0E3 MOV R1,#+0 \ ??DrawList_45: \ 00000890 000081E0 ADD R0,R1,R0 \ 00000894 020000EA B ??DrawList_46 \ ??DrawList_32: \ 00000898 20256400 DC8 " %d" \ ??DrawList_43: \ 0000089C 000051E3 CMP R1,#+0 \ 000008A0 01008012 ADDNE R0,R0,#+1 \ ??DrawList_46: \ 000008A4 0C008DE5 STR R0,[SP, #+12] 5569 if(ack && ack->type!=SENDED && ack->type <= 2 && (ShowProcessSend==2 || ShowProcessSend==3))//если есть не отправленные \ 000008A8 000054E3 CMP R4,#+0 \ 000008AC 00209415 LDRNE R2,[R4, #+0] \ 000008B0 00005213 CMPNE R2,#+0 \ 000008B4 4600000A BEQ ??DrawList_47 \ 000008B8 030052E3 CMP R2,#+3 \ 000008BC 440000AA BGE ??DrawList_47 \ 000008C0 20009DE5 LDR R0,[SP, #+32] \ 000008C4 020050E3 CMP R0,#+2 \ 000008C8 03005013 CMPNE R0,#+3 \ 000008CC 4000001A BNE ??DrawList_47 5570 { 5571 if(!VIEW_MODE)//в один столбец, рисуем длинну по имени \ 000008D0 F210DDE1 LDRSH R1,[SP, #+2] \ 000008D4 F4C0DDE1 LDRSH R12,[SP, #+4] \ 000008D8 F000DDE1 LDRSH R0,[SP, #+0] \ 000008DC 000056E3 CMP R6,#+0 \ 000008E0 2900001A BNE ??DrawList_48 5572 { 5573 PrintText(rc.x+3,rc.y,name,0,drawFont,1,350,0,0,rc.x2); \ 000008E4 00102DE9 PUSH {R12} \ 000008E8 0020A0E3 MOV R2,#+0 \ 000008EC 04002DE9 PUSH {R2} \ 000008F0 04002DE9 PUSH {R2} \ 000008F4 0030A0E3 MOV R3,#+0 \ 000008F8 030080E2 ADD R0,R0,#+3 \ 000008FC 0A20A0E1 MOV R2,R10 \ 00000900 04002DE9 PUSH {R2} \ 00000904 0120A0E3 MOV R2,#+1 \ 00000908 04002DE9 PUSH {R2} \ 0000090C 20209DE5 LDR R2,[SP, #+32] \ 00000910 04002DE9 PUSH {R2} \ 00000914 30209DE5 LDR R2,[SP, #+48] \ 00000918 ........ _BLF PrintText,??PrintText??rA 5574 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)); \ 0000091C 000094E5 LDR R0,[R4, #+0] \ 00000920 18D08DE2 ADD SP,SP,#+24 \ 00000924 010050E3 CMP R0,#+1 \ 00000928 EC119F05 LDREQ R1,??DrawList_8+0x14 ;; SendClr \ 0000092C 0200000A BEQ ??DrawList_49 \ 00000930 020050E3 CMP R0,#+2 \ 00000934 E4119F05 LDREQ R1,??DrawList_8+0x18 ;; UnAckedClr \ 00000938 0010A013 MOVNE R1,#+0 \ ??DrawList_49: \ 0000093C 08108DE5 STR R1,[SP, #+8] \ 00000940 F000DDE1 LDRSH R0,[SP, #+0] \ 00000944 F210DDE1 LDRSH R1,[SP, #+2] \ 00000948 030080E2 ADD R0,R0,#+3 \ 0000094C ........ _BLF GetWidth,??GetWidth??rA \ 00000950 08209DE5 LDR R2,[SP, #+8] \ 00000954 0010A0E1 MOV R1,R0 \ 00000958 F000DDE1 LDRSH R0,[SP, #+0] \ 0000095C 04002DE9 PUSH {R2} \ 00000960 011080E0 ADD R1,R0,R1 \ 00000964 0020A0E3 MOV R2,#+0 \ 00000968 04002DE9 PUSH {R2} \ 0000096C 04002DE9 PUSH {R2} \ 00000970 04002DE9 PUSH {R2} \ 00000974 04002DE9 PUSH {R2} \ 00000978 FA21DDE1 LDRSH R2,[SP, #+26] \ 0000097C 023042E2 SUB R3,R2,#+2 \ 00000980 032081E2 ADD R2,R1,#+3 \ 00000984 F611DDE1 LDRSH R1,[SP, #+22] \ 00000988 0F0000EA B ??DrawList_50 5575 } 5576 else 5577 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: \ 0000098C 010052E3 CMP R2,#+1 \ 00000990 84219F05 LDREQ R2,??DrawList_8+0x14 ;; SendClr \ 00000994 0200000A BEQ ??DrawList_51 \ 00000998 020052E3 CMP R2,#+2 \ 0000099C 7C219F05 LDREQ R2,??DrawList_8+0x18 ;; UnAckedClr \ 000009A0 0020A013 MOVNE R2,#+0 \ ??DrawList_51: \ 000009A4 04002DE9 PUSH {R2} \ 000009A8 011081E2 ADD R1,R1,#+1 \ 000009AC 0020A0E3 MOV R2,#+0 \ 000009B0 04002DE9 PUSH {R2} \ 000009B4 04002DE9 PUSH {R2} \ 000009B8 04002DE9 PUSH {R2} \ 000009BC 04002DE9 PUSH {R2} \ 000009C0 FA21DDE1 LDRSH R2,[SP, #+26] \ 000009C4 023042E2 SUB R3,R2,#+2 \ 000009C8 01204CE2 SUB R2,R12,#+1 \ ??DrawList_50: \ 000009CC 500100EF SWI +336 \ 000009D0 14D08DE2 ADD SP,SP,#+20 5578 } 5579 5580 if(cl->just_now) \ ??DrawList_47: \ 000009D4 680099E5 LDR R0,[R9, #+104] \ 000009D8 000050E3 CMP R0,#+0 \ 000009DC 0300000A BEQ ??DrawList_52 5581 DrawJustNow(&rc,cl); \ 000009E0 0910A0E1 MOV R1,R9 \ 000009E4 0D00A0E1 MOV R0,SP \ 000009E8 ........ BL DrawJustNow \ 000009EC 380000EA B ??DrawList_12 \ ??DrawList_52: \ 000009F0 F000DDE1 LDRSH R0,[SP, #+0] \ 000009F4 F210DDE1 LDRSH R1,[SP, #+2] \ 000009F8 F420DDE1 LDRSH R2,[SP, #+4] \ 000009FC 030080E2 ADD R0,R0,#+3 \ 00000A00 0F005BE3 CMP R11,#+15 \ 00000A04 1600001A BNE ??DrawList_53 5582 else 5583 { 5584 if(icon==IS_GROUP)//группы,жирным цветом 5585 DrawText(rc.x+3,rc.y,rc.x2,name,(char*)GroupClr,clfont+1,0,0); \ 00000A08 3C3495E5 LDR R3,[R5, #+1084] \ 00000A0C 08208DE5 STR R2,[SP, #+8] \ 00000A10 019083E2 ADD R9,R3,#+1 \ 00000A14 10108DE5 STR R1,[SP, #+16] \ 00000A18 00B0A0E1 MOV R11,R0 \ 00000A1C EC009FE5 LDR R0,??DrawList_8+0x8 ;; GroupClr \ 00000A20 0020A0E3 MOV R2,#+0 \ 00000A24 471F88E2 ADD R1,R8,#+284 \ 00000A28 ........ _BLF SetFontColor,??SetFontColor??rA \ 00000A2C 08009DE5 LDR R0,[SP, #+8] \ 00000A30 0030A0E3 MOV R3,#+0 \ 00000A34 0B0040E0 SUB R0,R0,R11 \ 00000A38 01002DE9 PUSH {R0} \ 00000A3C 0000A0E3 MOV R0,#+0 \ 00000A40 01002DE9 PUSH {R0} \ 00000A44 01002DE9 PUSH {R0} \ 00000A48 00042DE9 PUSH {R10} \ 00000A4C 0100A0E3 MOV R0,#+1 \ 00000A50 01002DE9 PUSH {R0} \ 00000A54 00022DE9 PUSH {R9} \ 00000A58 30209DE5 LDR R2,[SP, #+48] \ 00000A5C 28109DE5 LDR R1,[SP, #+40] \ 00000A60 180000EA B ??DrawList_54 5586 else//Рисуем наши имена,жирные,систкмные,выделенные...... 5587 DrawText(rc.x+3,rc.y,rc.x2,name,(cl->isactive!=0)?((char*)ActiveClr):((char*)NotActiveClr),drawFont,0,0); \ ??DrawList_53: \ 00000A64 A03099E5 LDR R3,[R9, #+160] \ 00000A68 08208DE5 STR R2,[SP, #+8] \ 00000A6C 000053E3 CMP R3,#+0 \ 00000A70 C0309F15 LDRNE R3,??DrawList_8+0x30 ;; ActiveClr \ 00000A74 0190A0E1 MOV R9,R1 \ 00000A78 BC309F05 LDREQ R3,??DrawList_8+0x34 ;; NotActiveClr \ 00000A7C 00B0A0E1 MOV R11,R0 \ 00000A80 0020A0E3 MOV R2,#+0 \ 00000A84 471F88E2 ADD R1,R8,#+284 \ 00000A88 0300A0E1 MOV R0,R3 \ 00000A8C ........ _BLF SetFontColor,??SetFontColor??rA \ 00000A90 08009DE5 LDR R0,[SP, #+8] \ 00000A94 0030A0E3 MOV R3,#+0 \ 00000A98 0B0040E0 SUB R0,R0,R11 \ 00000A9C 01002DE9 PUSH {R0} \ 00000AA0 0910A0E1 MOV R1,R9 \ 00000AA4 0000A0E3 MOV R0,#+0 \ 00000AA8 01002DE9 PUSH {R0} \ 00000AAC 01002DE9 PUSH {R0} \ 00000AB0 00042DE9 PUSH {R10} \ 00000AB4 0100A0E3 MOV R0,#+1 \ 00000AB8 01002DE9 PUSH {R0} \ 00000ABC 20009DE5 LDR R0,[SP, #+32] \ 00000AC0 01002DE9 PUSH {R0} \ 00000AC4 30209DE5 LDR R2,[SP, #+48] \ ??DrawList_54: \ 00000AC8 0B00A0E1 MOV R0,R11 \ 00000ACC ........ _BLF PrintText,??PrintText??rA \ 00000AD0 18D08DE2 ADD SP,SP,#+24 5588 } 5589 }//if(cl) 5590 } 5591 i++; 5592 // cl=cl->next; 5593 if(i > (itemFromDisp*((VIEW_MODE!=0)?(curpage):(1))) ) break; \ ??DrawList_12: \ 00000AD4 401495E5 LDR R1,[R5, #+1088] \ 00000AD8 000056E3 CMP R6,#+0 \ 00000ADC 58009815 LDRNE R0,[R8, #+88] \ 00000AE0 017087E2 ADD R7,R7,#+1 \ 00000AE4 0100A003 MOVEQ R0,#+1 \ 00000AE8 900101E0 MUL R1,R0,R1 \ 00000AEC 070051E1 CMP R1,R7 \ 00000AF0 A1FDFFAA BGE ??DrawList_9 5594 } 5595 UnlockSched(); \ ??DrawList_10: \ 00000AF4 470100EF SWI +327 5596 mfree(name); \ 00000AF8 18009DE5 LDR R0,[SP, #+24] \ 00000AFC 150000EF SWI +21 5597 // mfree(ack); 5598 } \ ??DrawList_2: \ 00000B00 88D08DE2 ADD SP,SP,#+136 ;; stack cleaning \ 00000B04 F08FBDE8 POP {R4-R11,PC} ;; return \ ??DrawList_8: \ 00000B08 ........ DC32 LINE_MODE \ 00000B0C ........ DC32 Canvas + 532 \ 00000B10 ........ DC32 GroupClr \ 00000B14 ........ DC32 Canvas + 540 \ 00000B18 ........ DC32 Canvas + 14 \ 00000B1C ........ DC32 SendClr \ 00000B20 ........ DC32 UnAckedClr \ 00000B24 ........ DC32 ClCursorClr \ 00000B28 ........ DC32 ClCursorBordClr \ 00000B2C ........ DC32 Canvas + 11 \ 00000B30 ........ DC32 CLDescricpClr \ 00000B34 ........ DC32 SelBoldActiveChat \ 00000B38 ........ DC32 ActiveClr \ 00000B3C ........ DC32 NotActiveClr 5599 5600 // Управление курсором \ In segment CODE, align 4, keep-with-next 5601 void MoveUp2(int i) 5602 { 5603 if( curpos > itemFromDisp + 2 && totalItems!=itemFromDisp ) \ MoveUp2: \ 00000000 ........ LDR R1,??DataTable246 ;; i_rc \ 00000004 ........ LDR R2,??DataTable248 ;; screen3 \ 00000008 F0002DE9 PUSH {R4-R7} \ 0000000C 304491E5 LDR R4,[R1, #+1072] \ 00000010 40C491E5 LDR R12,[R1, #+1088] \ 00000014 683092E5 LDR R3,[R2, #+104] \ 00000018 445491E5 LDR R5,[R1, #+1092] \ 0000001C 02608CE2 ADD R6,R12,#+2 \ 00000020 040056E1 CMP R6,R4 \ 00000024 0F0000AA BGE ??MoveUp2_0 \ 00000028 0C0055E1 CMP R5,R12 \ 0000002C 0D00000A BEQ ??MoveUp2_0 5604 { 5605 curpos-=i; \ 00000030 004044E0 SUB R4,R4,R0 5606 if(clstartItem > 0 && curpos > ((itemFromDisp/2)+1) && curpos < totalItems-((itemFromDisp/2)+1)) \ 00000034 010053E3 CMP R3,#+1 \ 00000038 1F0000BA BLT ??MoveUp2_1 \ 0000003C AC6F8CE0 ADD R6,R12,R12, LSR #+31 \ 00000040 C660A0E1 ASR R6,R6,#+1 \ 00000044 017086E2 ADD R7,R6,#+1 \ 00000048 040057E1 CMP R7,R4 \ 0000004C 1A0000AA BGE ??MoveUp2_1 \ 00000050 065045E0 SUB R5,R5,R6 \ 00000054 015045E2 SUB R5,R5,#+1 \ 00000058 050054E1 CMP R4,R5 \ 0000005C 160000AA BGE ??MoveUp2_1 5607 clstartItem-=i; \ ??MoveUp2_2: \ 00000060 003043E0 SUB R3,R3,R0 \ 00000064 140000EA B ??MoveUp2_1 5608 } 5609 else 5610 if(curpos > 0) \ ??MoveUp2_0: \ 00000068 010054E3 CMP R4,#+1 \ 0000006C 0E0000BA BLT ??MoveUp2_3 5611 { 5612 curpos-=i; \ 00000070 004044E0 SUB R4,R4,R0 5613 if(clstartItem > 0 && curpos > ((itemFromDisp/2)+1)) \ 00000074 010053E3 CMP R3,#+1 \ 00000078 040000BA BLT ??MoveUp2_4 \ 0000007C AC5F8CE0 ADD R5,R12,R12, LSR #+31 \ 00000080 0160A0E3 MOV R6,#+1 \ 00000084 C55086E0 ADD R5,R6,R5, ASR #+1 \ 00000088 040055E1 CMP R5,R4 \ 0000008C F3FFFFBA BLT ??MoveUp2_2 5614 clstartItem-=i; 5615 else 5616 if(curpos < ((itemFromDisp/2)+1)) \ ??MoveUp2_4: \ 00000090 AC0F8CE0 ADD R0,R12,R12, LSR #+31 \ 00000094 0150A0E3 MOV R5,#+1 \ 00000098 C00085E0 ADD R0,R5,R0, ASR #+1 \ 0000009C 000054E1 CMP R4,R0 \ 000000A0 050000AA BGE ??MoveUp2_1 5617 clstartItem=0; \ ??MoveUp2_5: \ 000000A4 0030A0E3 MOV R3,#+0 \ 000000A8 030000EA B ??MoveUp2_1 5618 } 5619 else 5620 { 5621 curpos=totalItems; \ ??MoveUp2_3: \ 000000AC 0540A0E1 MOV R4,R5 5622 if(totalItems==itemFromDisp) \ 000000B0 0C0055E1 CMP R5,R12 \ 000000B4 FAFFFF0A BEQ ??MoveUp2_5 5623 clstartItem=0; 5624 else 5625 clstartItem=totalItems-itemFromDisp; \ 000000B8 0C3045E0 SUB R3,R5,R12 \ ??MoveUp2_1: \ 000000BC 683082E5 STR R3,[R2, #+104] \ 000000C0 304481E5 STR R4,[R1, #+1072] 5626 } 5627 } \ 000000C4 F000BDE8 POP {R4-R7} \ 000000C8 1EFF2FE1 BX LR ;; return 5628 5629 \ In segment CODE, align 4, keep-with-next 5630 void MoveDown2(int i) 5631 { 5632 if( curpos < itemFromDisp/2+1 && totalItems!=itemFromDisp ) curpos+=i; \ MoveDown2: \ 00000000 ........ LDR R1,??DataTable246 ;; i_rc \ 00000004 ........ LDR R3,??DataTable248 ;; screen3 \ 00000008 F0002DE9 PUSH {R4-R7} \ 0000000C 302491E5 LDR R2,[R1, #+1072] \ 00000010 404491E5 LDR R4,[R1, #+1088] \ 00000014 68C093E5 LDR R12,[R3, #+104] \ 00000018 445491E5 LDR R5,[R1, #+1092] \ 0000001C A46F84E0 ADD R6,R4,R4, LSR #+31 \ 00000020 0170A0E3 MOV R7,#+1 \ 00000024 C66087E0 ADD R6,R7,R6, ASR #+1 \ 00000028 060052E1 CMP R2,R6 \ 0000002C 030000AA BGE ??MoveDown2_0 \ 00000030 040055E1 CMP R5,R4 \ 00000034 0100000A BEQ ??MoveDown2_0 \ ??MoveDown2_1: \ 00000038 020080E0 ADD R0,R0,R2 \ 0000003C 0B0000EA B ??MoveDown2_2 5633 else 5634 if(curpos < totalItems - 1) \ ??MoveDown2_0: \ 00000040 016045E2 SUB R6,R5,#+1 \ 00000044 060052E1 CMP R2,R6 \ 00000048 060000AA BGE ??MoveDown2_3 5635 { 5636 if(itemFromDisp != totalItems) \ 0000004C 050054E1 CMP R4,R5 \ 00000050 F8FFFF0A BEQ ??MoveDown2_1 5637 { 5638 if(clstartItem < totalItems-itemFromDisp) \ 00000054 044045E0 SUB R4,R5,R4 \ 00000058 04005CE1 CMP R12,R4 \ 0000005C F5FFFFAA BGE ??MoveDown2_1 5639 clstartItem+=i; \ 00000060 0CC080E0 ADD R12,R0,R12 \ 00000064 F3FFFFEA B ??MoveDown2_1 5640 } 5641 /* else 5642 { 5643 if(clstartItem < itemFromDisp) 5644 clstartItem+=i; 5645 }*/ 5646 5647 curpos+=i; 5648 } 5649 else 5650 { 5651 curpos=0; \ ??MoveDown2_3: \ 00000068 0000A0E3 MOV R0,#+0 5652 clstartItem=0; \ 0000006C 00C0A0E3 MOV R12,#+0 \ ??MoveDown2_2: \ 00000070 68C083E5 STR R12,[R3, #+104] \ 00000074 300481E5 STR R0,[R1, #+1072] 5653 } 5654 } \ 00000078 F000BDE8 POP {R4-R7} \ 0000007C 1EFF2FE1 BX LR ;; return 5655 5656 /* 5657 // Управление курсором 5658 void MoveUp(int i) 5659 { 5660 if(!itemFromDisp)return; 5661 5662 if(i) curpos-=2; 5663 else curpos--; 5664 5665 if(i && curpos+2==2) 5666 { 5667 curpos=0; 5668 curpage=1; 5669 } 5670 else 5671 if(curpos<0) 5672 { 5673 curpos=totalItems; 5674 5675 if(itemFromDisp!=totalItems) 5676 { 5677 curpage = sdiv(itemFromDisp,totalItems)+1; 5678 } 5679 else 5680 curpage = 1; 5681 } 5682 else 5683 { 5684 // if(i) curpos-=2; 5685 // else curpos--; 5686 if(curpos<(curpage-1)*itemFromDisp){ curpos++; curpage--; } 5687 } 5688 } 5689 5690 void MoveDown(int i) 5691 { 5692 if(!totalItems)return; 5693 if(i) curpos+=2; 5694 else curpos++; 5695 5696 if(curpos>totalItems) { curpos=0; curpage=1; } 5697 if(curpage*itemFromDispcurpos){ curpos++; curpage--; } */ 5709 5710 if(i) curpos-=2; \ 00000018 303492E5 LDR R3,[R2, #+1072] 5711 else curpos--; 5712 5713 if(i && curpos+2==2) \ 0000001C ........ LDR R4,??DataTable248 ;; screen3 \ 00000020 000051E3 CMP R1,#+0 \ 00000024 02304312 SUBNE R3,R3,#+2 \ 00000028 01304302 SUBEQ R3,R3,#+1 \ 0000002C 303482E5 STR R3,[R2, #+1072] \ 00000030 0130A0E3 MOV R3,#+1 \ 00000034 0200000A BEQ ??MoveUp_0 \ 00000038 301492E5 LDR R1,[R2, #+1072] \ 0000003C 000051E3 CMP R1,#+0 \ 00000040 0B00000A BEQ ??MoveUp_1 5714 { 5715 curpos=0; 5716 curpage=1; 5717 } 5718 else 5719 if(curpos<0) \ ??MoveUp_0: \ 00000044 301492E5 LDR R1,[R2, #+1072] \ 00000048 000051E3 CMP R1,#+0 \ 0000004C 0A00005A BPL ??MoveUp_2 5720 { 5721 curpos=totalItems-1; \ 00000050 441492E5 LDR R1,[R2, #+1092] \ 00000054 01C041E2 SUB R12,R1,#+1 \ 00000058 30C482E5 STR R12,[R2, #+1072] 5722 5723 if(itemFromDisp!=totalItems) \ 0000005C 010050E1 CMP R0,R1 \ 00000060 0300000A BEQ ??MoveUp_1 5724 { 5725 curpage = /*(itemFromDisp/totalItems)+1;*/sdiv(itemFromDisp,totalItems)+1; \ 00000064 B80000EF SWI +184 \ 00000068 010080E2 ADD R0,R0,#+1 \ 0000006C 580084E5 STR R0,[R4, #+88] \ 00000070 1080BDE8 POP {R4,PC} 5726 } 5727 else 5728 curpage = 1; \ ??MoveUp_1: \ 00000074 583084E5 STR R3,[R4, #+88] \ 00000078 1080BDE8 POP {R4,PC} 5729 } \ ??MoveUp_2: \ 0000007C 583094E5 LDR R3,[R4, #+88] \ 00000080 013043E2 SUB R3,R3,#+1 \ 00000084 90030CE0 MUL R12,R0,R3 \ 00000088 0C0051E1 CMP R1,R12 5730 else 5731 { 5732 // if(i) curpos-=2; 5733 // else curpos--; 5734 if(curpos<(curpage-1)*itemFromDisp){ curpos++; curpage--; } \ 0000008C 010081B2 ADDLT R0,R1,#+1 \ 00000090 300482B5 STRLT R0,[R2, #+1072] \ 00000094 583084B5 STRLT R3,[R4, #+88] \ 00000098 1080BDE8 POP {R4,PC} ;; return 5735 } 5736 } 5737 \ In segment CODE, align 4, keep-with-next 5738 void MoveDown(int i) 5739 { 5740 if(!totalItems)return; \ MoveDown: \ 00000000 ........ LDR R1,??DataTable246 ;; i_rc \ 00000004 10002DE9 PUSH {R4} \ 00000008 442491E5 LDR R2,[R1, #+1092] \ 0000000C 000052E3 CMP R2,#+0 \ 00000010 1200000A BEQ ??MoveDown_0 5741 if(i) curpos+=2; \ 00000014 303491E5 LDR R3,[R1, #+1072] 5742 else curpos++; 5743 if(curpos>=totalItems) { curpos=0; curpage=1; } 5744 if(curpage*itemFromDisp` \ 00000038 8520A0E1 LSL R2,R5,#+1 \ 0000003C 02002DE9 PUSH {R1} \ 00000040 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000044 451F88E2 ADD R1,R8,#+276 \ 00000048 02002DE9 PUSH {R1} \ 0000004C 0010A0E3 MOV R1,#+0 \ 00000050 02002DE9 PUSH {R1} \ 00000054 02002DE9 PUSH {R1} \ 00000058 02002DE9 PUSH {R1} \ 0000005C A41F84E0 ADD R1,R4,R4, LSR #+31 \ 00000060 C13082E0 ADD R3,R2,R1, ASR #+1 \ 00000064 012046E2 SUB R2,R6,#+1 \ 00000068 A71F87E0 ADD R1,R7,R7, LSR #+31 \ 0000006C C11060E0 RSB R1,R0,R1, ASR #+1 \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 500100EF SWI +336 5751 SetFontColor(clrWhite,transparent,0); \ 00000078 0020A0E3 MOV R2,#+0 \ 0000007C 471F88E2 ADD R1,R8,#+284 \ 00000080 450F88E2 ADD R0,R8,#+276 \ 00000084 ........ _BLF SetFontColor,??SetFontColor??rA 5752 PrintText(ScreenW()/2+5,ScreenH()/2-FontH(FONT_MEDIUM+100)-5,prmsg,1,FONT_MEDIUM+100,1,1,0,0,ScreenW()-5); \ 00000088 888100EF SWI +33160 \ 0000008C 0060A0E1 MOV R6,R0 \ 00000090 898100EF SWI +33161 \ 00000094 0040A0E1 MOV R4,R0 \ 00000098 6800A0E3 MOV R0,#+104 \ 0000009C ........ _BLF FontH,??FontH??rA \ 000000A0 0050A0E1 MOV R5,R0 \ 000000A4 888100EF SWI +33160 \ 000000A8 50209FE5 LDR R2,??PrintMessage_0+0x4 ;; i_rc + 6000 \ 000000AC 051046E2 SUB R1,R6,#+5 \ 000000B0 02002DE9 PUSH {R1} \ 000000B4 0130A0E3 MOV R3,#+1 \ 000000B8 A00F80E0 ADD R0,R0,R0, LSR #+31 \ 000000BC 0010A0E3 MOV R1,#+0 \ 000000C0 02002DE9 PUSH {R1} \ 000000C4 02002DE9 PUSH {R1} \ 000000C8 0110A0E3 MOV R1,#+1 \ 000000CC 02002DE9 PUSH {R1} \ 000000D0 02002DE9 PUSH {R1} \ 000000D4 6810A0E3 MOV R1,#+104 \ 000000D8 02002DE9 PUSH {R1} \ 000000DC A41F84E0 ADD R1,R4,R4, LSR #+31 \ 000000E0 0540A0E3 MOV R4,#+5 \ 000000E4 C00084E0 ADD R0,R4,R0, ASR #+1 \ 000000E8 C11065E0 RSB R1,R5,R1, ASR #+1 \ 000000EC 051041E2 SUB R1,R1,#+5 \ 000000F0 ........ _BLF PrintText,??PrintText??rA \ 000000F4 2CD08DE2 ADD SP,SP,#+44 5753 } \ 000000F8 F081BDE8 POP {R4-R8,PC} ;; return \ ??PrintMessage_0: \ 000000FC ........ DC32 `?` \ 00000100 ........ DC32 i_rc + 6000 5754 5755 \ In segment CODE, align 4, keep-with-next 5756 void DrawContactList() 5757 { \ DrawContactList: \ 00000000 30402DE9 PUSH {R4,R5,LR} 5758 #ifdef DEBUG 5759 if(!IsGuiOnTop(contactlist_menu_id)) return; 5760 #endif 5761 DrawRoundedFrame(0,hy,ScreenW()-1,ScreenH()-1,0,0,0,CLBackgrClr,CLBackgrClr); \ 00000004 ........ LDR R4,??DataTable271 ;; i_rc \ 00000008 898100EF SWI +33161 \ 0000000C 0050A0E1 MOV R5,R0 \ 00000010 888100EF SWI +33160 \ 00000014 A8109FE5 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 381494E5 LDR R1,[R4, #+1080] \ 0000003C 012040E2 SUB R2,R0,#+1 \ 00000040 0000A0E3 MOV R0,#+0 \ 00000044 500100EF SWI +336 5762 // DrawRoundedFrame(0,hy,ScreenW()-1,ScreenH()-1,0,0,0,clrWhite,clrWhite); 5763 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 5764 DrawHeader(); \ ??DrawContactList_1: \ 00000068 ........ BL DrawHeader 5765 DrawList(); \ 0000006C ........ BL DrawList 5766 if(SOFT_MODE==1) DrawSoftKeys(LG_MENU,clmenu_sk_r); \ 00000070 ........ LDR R0,??DataTable250 ;; SOFT_MODE \ 00000074 000090E5 LDR R0,[R0, #+0] \ 00000078 010050E3 CMP R0,#+1 \ 0000007C 0400001A BNE ??DrawContactList_2 \ 00000080 F800A0E3 MOV R0,#+248 \ 00000084 740D80E3 ORR R0,R0,#0x1D00 \ 00000088 041080E0 ADD R1,R0,R4 \ 0000008C 34009FE5 LDR R0,??DrawContactList_0+0x4 ;; `?` \ 00000090 ........ BL DrawSoftKeys 5767 if(strlen(prmsg)!=0 && PrintTimer!=0) PrintMessage(); \ ??DrawContactList_2: \ 00000094 7000A0E3 MOV R0,#+112 \ 00000098 5C0D80E3 ORR R0,R0,#0x1700 \ 0000009C 040080E0 ADD R0,R0,R4 \ 000000A0 1B0000EF SWI +27 \ 000000A4 000050E3 CMP R0,#+0 \ 000000A8 3080BD08 POPEQ {R4,R5,PC} \ 000000AC 18009FE5 LDR R0,??DrawContactList_0+0x8 ;; screen3 + 20 \ 000000B0 000090E5 LDR R0,[R0, #+0] \ 000000B4 000050E3 CMP R0,#+0 \ 000000B8 3080BD08 POPEQ {R4,R5,PC} \ 000000BC ........ BL PrintMessage 5768 } \ 000000C0 3080BDE8 POP {R4,R5,PC} ;; return \ ??DrawContactList_0: \ 000000C4 ........ DC32 CLBackgrClr \ 000000C8 ........ DC32 `?` \ 000000CC ........ DC32 screen3 + 20 5769 5770 #ifdef DEBUG 5771 static void OnRedraw(MAIN_GUI *data) 5772 { 5773 DrawContactList(); 5774 } 5775 5776 static void onCreate(MAIN_GUI *data, void *(*malloc_adr)(int)) 5777 { 5778 #ifdef ELKA 5779 #ifdef ICONBAR 5780 DisableIconBar(0); 5781 #else 5782 DisableIconBar(1); 5783 #endif 5784 #endif 5785 5786 // StatusToIMGHDR(); 5787 data->gui.state=1; 5788 } 5789 5790 static void onClose(MAIN_GUI *data, void (*mfree_adr)(void *)) 5791 { 5792 data->gui.state=0; 5793 } 5794 5795 static void onFocus(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *)) 5796 { 5797 #ifdef ELKA 5798 #ifdef ICONBAR 5799 DisableIconBar(0); 5800 #else 5801 DisableIconBar(1); 5802 #endif 5803 #endif 5804 SetCanvasFlag(1); 5805 data->gui.state=2; 5806 DisableIDLETMR(); 5807 } 5808 5809 static void onUnfocus(MAIN_GUI *data, void (*mfree_adr)(void *)) 5810 { 5811 #ifdef ELKA 5812 DisableIconBar(0); 5813 #endif 5814 if (data->gui.state!=2) return; 5815 data->gui.state=1; 5816 } 5817 #endif 5818 5819 //int ShowLoadScreen=1; 5820 int lastKey = -1; 5821 int lastIsLongPress = 0; 5822 \ In segment CODE, align 4, keep-with-next 5823 int ClOnKey(GUI_MSG *msg) 5824 { \ ClOnKey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 5825 int key=msg->gbsmsg->submess; 5826 /* int isLongPress = 0; 5827 int ignore = 1; 5828 */ 5829 CLIST *t; 5830 // t=FindContactByN(curpos); 5831 5832 if (msg->gbsmsg->msg==LONG_PRESS) \ 00000008 ........ LDR R8,??DataTable271 ;; i_rc \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 597EA0E3 MOV R7,#+1424 \ 00000018 086090E5 LDR R6,[R0, #+8] \ 0000001C 040090E5 LDR R0,[R0, #+4] \ 00000020 9510A0E3 MOV R1,#+149 \ 00000024 401F81E3 ORR R1,R1,#0x100 \ 00000028 010050E1 CMP R0,R1 \ 0000002C 3900001A BNE ??ClOnKey_1 5833 { 5834 //isLongPress = (msg->gbsmsg->msg == LONG_PRESS); 5835 // Игнорим KEY_UP если уже обработали долгое нажатие этой же кнопки 5836 // Обрабатываем только KEY_UP и LONG_PRESS 5837 //ignore = (lastKey == key && lastIsLongPress && msg->gbsmsg->msg == KEY_UP) 5838 // || (msg->gbsmsg->msg != KEY_UP && msg->gbsmsg->msg != LONG_PRESS); 5839 // if (!ignore) 5840 LongPressAction(FindContactByN(curpos),msg->gbsmsg->submess); \ 00000030 300498E5 LDR R0,[R8, #+1072] \ 00000034 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000038 041094E5 LDR R1,[R4, #+4] \ 0000003C 081091E5 LDR R1,[R1, #+8] \ 00000040 ........ BL LongPressAction 5841 5842 // lastKey = key; 5843 // lastIsLongPress = isLongPress; 5844 5845 switch(msg->gbsmsg->submess) \ 00000044 040094E5 LDR R0,[R4, #+4] \ 00000048 080090E5 LDR R0,[R0, #+8] \ 0000004C 3B0050E2 SUBS R0,R0,#+59 \ 00000050 0600000A BEQ ??ClOnKey_2 \ 00000054 010050E2 SUBS R0,R0,#+1 \ 00000058 0B00000A BEQ ??ClOnKey_3 \ 0000005C 010050E2 SUBS R0,R0,#+1 \ 00000060 1900000A BEQ ??ClOnKey_4 \ 00000064 010050E2 SUBS R0,R0,#+1 \ 00000068 1000000A BEQ ??ClOnKey_5 \ 0000006C 1D0000EA B ??ClOnKey_6 5846 { 5847 case UP_BUTTON: if(VIEW_MODE) MoveUp(1); else MoveUp2(1)/*MoveUp(0)*/; break; \ ??ClOnKey_2: \ 00000070 ........ LDR R0,??DataTable257 ;; VIEW_MODE \ 00000074 000090E5 LDR R0,[R0, #+0] \ 00000078 000050E3 CMP R0,#+0 \ 0000007C 0100A0E3 MOV R0,#+1 \ 00000080 1700000A BEQ ??ClOnKey_7 \ ??ClOnKey_8: \ 00000084 ........ BL MoveUp \ 00000088 160000EA B ??ClOnKey_6 5848 case DOWN_BUTTON: if(VIEW_MODE) MoveDown(1); else MoveDown2(1)/*MoveDown(0)*/; break; \ ??ClOnKey_3: \ 0000008C ........ LDR R0,??DataTable257 ;; VIEW_MODE \ 00000090 000090E5 LDR R0,[R0, #+0] \ 00000094 000050E3 CMP R0,#+0 \ 00000098 0100A0E3 MOV R0,#+1 \ 0000009C 0100000A BEQ ??ClOnKey_9 \ ??ClOnKey_10: \ 000000A0 ........ BL MoveDown \ 000000A4 0F0000EA B ??ClOnKey_6 \ ??ClOnKey_9: \ 000000A8 ........ BL MoveDown2 \ 000000AC 0D0000EA B ??ClOnKey_6 5849 case RIGHT_BUTTON: if(VIEW_MODE) MoveDown(0); else MoveDown2(2)/*MoveDown(1)*/; break; \ ??ClOnKey_5: \ 000000B0 ........ LDR R0,??DataTable257 ;; VIEW_MODE \ 000000B4 000090E5 LDR R0,[R0, #+0] \ 000000B8 000050E3 CMP R0,#+0 \ 000000BC 0000A013 MOVNE R0,#+0 \ 000000C0 F6FFFF1A BNE ??ClOnKey_10 \ 000000C4 0200A0E3 MOV R0,#+2 \ 000000C8 F6FFFFEA B ??ClOnKey_9 5850 case LEFT_BUTTON: if(VIEW_MODE) MoveUp(0); else MoveUp2(2)/*MoveUp(1)*/; break; \ ??ClOnKey_4: \ 000000CC ........ LDR R0,??DataTable257 ;; VIEW_MODE \ 000000D0 000090E5 LDR R0,[R0, #+0] \ 000000D4 000050E3 CMP R0,#+0 \ 000000D8 0000A013 MOVNE R0,#+0 \ 000000DC E8FFFF1A BNE ??ClOnKey_8 \ 000000E0 0200A0E3 MOV R0,#+2 \ ??ClOnKey_7: \ 000000E4 ........ BL MoveUp2 5851 } 5852 5853 int key=msg->gbsmsg->submess; \ ??ClOnKey_6: \ 000000E8 040094E5 LDR R0,[R4, #+4] \ 000000EC 080090E5 LDR R0,[R0, #+8] 5854 if ((key>='0')&&(key<='9')) \ 000000F0 300050E3 CMP R0,#+48 \ 000000F4 070000BA BLT ??ClOnKey_1 \ 000000F8 3A0050E3 CMP R0,#+58 \ 000000FC 050000AA BGE ??ClOnKey_1 5855 { 5856 ClearContactT9Key(); \ 00000100 2010A0E3 MOV R1,#+32 \ 00000104 080087E0 ADD R0,R7,R8 \ 00000108 1D0100EF SWI +285 5857 RecountMenu(NULL,1); \ 0000010C 0110A0E3 MOV R1,#+1 \ 00000110 0000A0E3 MOV R0,#+0 \ 00000114 ........ BL RecountMenu 5858 } 5859 } 5860 5861 5862 if (msg->gbsmsg->msg==KEY_DOWN) \ ??ClOnKey_1: \ 00000118 041094E5 LDR R1,[R4, #+4] \ 0000011C 9320A0E3 MOV R2,#+147 \ 00000120 040091E5 LDR R0,[R1, #+4] \ 00000124 402F82E3 ORR R2,R2,#0x100 \ 00000128 020050E1 CMP R0,R2 \ 0000012C 1001001A BNE ??ClOnKey_11 5863 { 5864 switch(msg->gbsmsg->submess) \ 00000130 ........ LDR R9,??DataTable276 ;; screen3 \ 00000134 300498E5 LDR R0,[R8, #+1072] \ 00000138 142099E5 LDR R2,[R9, #+20] \ 0000013C ........ LDR R3,??DataTable257 ;; VIEW_MODE \ 00000140 70A0A0E3 MOV R10,#+112 \ 00000144 5CAD8AE3 ORR R10,R10,#0x1700 \ 00000148 08A08AE0 ADD R10,R10,R8 \ 0000014C 00A08DE5 STR R10,[SP, #+0] \ 00000150 081091E5 LDR R1,[R1, #+8] \ 00000154 003093E5 LDR R3,[R3, #+0] \ 00000158 01A0A0E3 MOV R10,#+1 \ 0000015C 00B0A0E3 MOV R11,#+0 \ 00000160 011041E2 SUB R1,R1,#+1 \ 00000164 3D0051E3 CMP R1,#+61 \ 00000168 B400008A BHI ??ClOnKey_12 \ 0000016C 01CF8FE2 ADR R12,??ClOnKey_0 \ 00000170 01C0DCE7 LDRB R12,[R12, R1] \ 00000174 0CF18FE0 ADD PC,PC,R12, LSL #+2 \ ??ClOnKey_0: \ 00000178 27B1B130 DC8 +39,+177,+177,+48 \ 0000017C B1B1B1B1 DC8 +177,+177,+177,+177 \ 00000180 B1B18F30 DC8 +177,+177,+143,+48 \ 00000184 979DB1B1 DC8 +151,+157,+177,+177 \ 00000188 B1B1B1B1 DC8 +177,+177,+177,+177 \ 0000018C B1B1B1B1 DC8 +177,+177,+177,+177 \ 00000190 B13CB1B1 DC8 +177,+60,+177,+177 \ 00000194 B1B1B1B1 DC8 +177,+177,+177,+177 \ 00000198 B1B1B1B1 DC8 +177,+177,+177,+177 \ 0000019C B1B1B1B1 DC8 +177,+177,+177,+177 \ 000001A0 B16AB1B1 DC8 +177,+106,+177,+177 \ 000001A4 B1B1B1B1 DC8 +177,+177,+177,+177 \ 000001A8 B1B1B1B1 DC8 +177,+177,+177,+177 \ 000001AC B1B1B1B1 DC8 +177,+177,+177,+177 \ 000001B0 B1B10F16 DC8 +177,+177,+15,+22 \ 000001B4 221D0000 DC8 +34,+29,+0,+0 5865 { 5866 case UP_BUTTON: if(VIEW_MODE) MoveUp(1); else /*MoveUp(0)*/MoveUp2(1); break; \ ??ClOnKey_13: \ 000001B8 000053E3 CMP R3,#+0 \ 000001BC 0100A0E3 MOV R0,#+1 \ 000001C0 0100000A BEQ ??ClOnKey_14 \ ??ClOnKey_15: \ 000001C4 ........ BL MoveUp \ 000001C8 9C0000EA B ??ClOnKey_12 \ ??ClOnKey_14: \ 000001CC ........ BL MoveUp2 \ 000001D0 9A0000EA B ??ClOnKey_12 5867 case DOWN_BUTTON: if(VIEW_MODE) MoveDown(1); else /*MoveDown(0)*/MoveDown2(1); break; \ ??ClOnKey_16: \ 000001D4 000053E3 CMP R3,#+0 \ 000001D8 0100A0E3 MOV R0,#+1 \ 000001DC 0100000A BEQ ??ClOnKey_17 \ ??ClOnKey_18: \ 000001E0 ........ BL MoveDown \ 000001E4 950000EA B ??ClOnKey_12 \ ??ClOnKey_17: \ 000001E8 ........ BL MoveDown2 \ 000001EC 930000EA B ??ClOnKey_12 5868 case RIGHT_BUTTON: if(VIEW_MODE) MoveDown(0); else MoveDown2(2)/*MoveDown(1)*/; break; \ ??ClOnKey_19: \ 000001F0 000053E3 CMP R3,#+0 \ 000001F4 0000A013 MOVNE R0,#+0 \ 000001F8 F8FFFF1A BNE ??ClOnKey_18 \ 000001FC 0200A0E3 MOV R0,#+2 \ 00000200 F8FFFFEA B ??ClOnKey_17 5869 case LEFT_BUTTON: if(VIEW_MODE) MoveUp(0); else MoveUp2(2)/*MoveUp(1)*/; break; \ ??ClOnKey_20: \ 00000204 000053E3 CMP R3,#+0 \ 00000208 0000A013 MOVNE R0,#+0 \ 0000020C ECFFFF1A BNE ??ClOnKey_15 \ 00000210 0200A0E3 MOV R0,#+2 \ 00000214 ECFFFFEA B ??ClOnKey_14 5870 case LEFT_SOFT: 5871 { 5872 extern void CreateMainMenu(); 5873 // DoScreen(); 5874 if(PrintTimer) \ ??ClOnKey_21: \ 00000218 000052E3 CMP R2,#+0 \ 0000021C 0400000A BEQ ??ClOnKey_22 5875 { 5876 PrintTimer=0; \ ??ClOnKey_23: \ 00000220 14B089E5 STR R11,[R9, #+20] 5877 zeromem(prmsg,256); \ 00000224 00009DE5 LDR R0,[SP, #+0] \ 00000228 401FA0E3 MOV R1,#+256 \ 0000022C 1D0100EF SWI +285 \ 00000230 820000EA B ??ClOnKey_12 5878 } 5879 else 5880 CreateMainMenu(); \ ??ClOnKey_22: \ 00000234 ........ _BLF CreateMainMenu,??CreateMainMenu??rA \ 00000238 800000EA B ??ClOnKey_12 5881 // ShowMainMenu(); 5882 }break; 5883 case RIGHT_SOFT: 5884 case RED_BUTTON: 5885 if(PrintTimer) \ ??ClOnKey_24: \ 0000023C 000052E3 CMP R2,#+0 \ 00000240 F6FFFF1A BNE ??ClOnKey_23 5886 { 5887 PrintTimer=0; 5888 zeromem(prmsg,256); 5889 } 5890 else if (strlen(ContactT9Key)) \ 00000244 080087E0 ADD R0,R7,R8 \ 00000248 1B0000EF SWI +27 \ 0000024C 000050E3 CMP R0,#+0 \ 00000250 0300000A BEQ ??ClOnKey_25 5891 { 5892 BackSpaceContactT9(); \ 00000254 ........ BL BackSpaceContactT9 5893 RecountMenu(NULL,1); \ 00000258 0110A0E3 MOV R1,#+1 \ 0000025C 0B00A0E1 MOV R0,R11 \ 00000260 510000EA B ??ClOnKey_26 5894 return(-1); 5895 } 5896 5897 else 5898 { 5899 #ifdef DEBUG 5900 ShowLoadScreen=1; 5901 return 1; 5902 #else 5903 ShowLoadScreen=1;//return 1; \ ??ClOnKey_25: \ 00000264 50A089E5 STR R10,[R9, #+80] \ 00000268 740000EA B ??ClOnKey_12 5904 #endif 5905 } 5906 break; 5907 case ENTER_BUTTON: 5908 { 5909 t=FindContactByN(curpos); \ ??ClOnKey_27: \ 0000026C ........ _BLF FindContactByN,??FindContactByN??rA \ 00000270 0050A0E1 MOV R5,R0 5910 if(PrintTimer) \ 00000274 140099E5 LDR R0,[R9, #+20] \ 00000278 000050E3 CMP R0,#+0 \ 0000027C 0400000A BEQ ??ClOnKey_28 5911 { 5912 PrintTimer=0; \ 00000280 14B089E5 STR R11,[R9, #+20] 5913 zeromem(prmsg,256); \ 00000284 00009DE5 LDR R0,[SP, #+0] \ 00000288 401FA0E3 MOV R1,#+256 \ 0000028C 1D0100EF SWI +285 \ 00000290 210000EA B ??ClOnKey_29 5914 } 5915 else 5916 if(t) \ ??ClOnKey_28: \ 00000294 000055E3 CMP R5,#+0 \ 00000298 4400000A BEQ ??ClOnKey_30 5917 { 5918 if (t->isgroup) \ 0000029C 080095E5 LDR R0,[R5, #+8] \ 000002A0 000050E3 CMP R0,#+0 \ 000002A4 0500000A BEQ ??ClOnKey_31 5919 { 5920 t->state^=0xFFFF; \ 000002A8 B405D5E1 LDRH R0,[R5, #+84] \ 000002AC FF10A0E3 MOV R1,#+255 \ 000002B0 FF1C81E3 ORR R1,R1,#0xFF00 \ 000002B4 000021E0 EOR R0,R1,R0 \ 000002B8 B405C5E1 STRH R0,[R5, #+84] 5921 RecountMenu(t,1); \ 000002BC 380000EA B ??ClOnKey_32 5922 return(-1); 5923 } 5924 if (strlen(ContactT9Key)) \ ??ClOnKey_31: \ 000002C0 080087E0 ADD R0,R7,R8 \ 000002C4 1B0000EF SWI +27 \ 000002C8 000050E3 CMP R0,#+0 \ 000002CC 0500000A BEQ ??ClOnKey_33 5925 { 5926 ClearContactT9Key(); \ 000002D0 2010A0E3 MOV R1,#+32 \ 000002D4 080087E0 ADD R0,R7,R8 \ 000002D8 1D0100EF SWI +285 5927 RecountMenu(NULL,1); \ 000002DC 0110A0E3 MOV R1,#+1 \ 000002E0 0B00A0E1 MOV R0,R11 \ 000002E4 ........ BL RecountMenu 5928 } 5929 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<0 && t) \ ??ClOnKey_35: \ 00000324 ........ _BLF CountContacts,??CountContacts??rA \ 00000328 010050E3 CMP R0,#+1 \ 0000032C 430000BA BLT ??ClOnKey_12 \ 00000330 000055E3 CMP R5,#+0 \ 00000334 4100000A BEQ ??ClOnKey_12 5936 { 5937 t=FindContactByN(curpos); \ 00000338 300498E5 LDR R0,[R8, #+1072] \ 0000033C ........ _BLF FindContactByN,??FindContactByN??rA \ 00000340 0050A0E1 MOV R5,R0 \ 00000344 020000EA B ??ClOnKey_36 5938 while(t=(CLIST *)(t->next)) 5939 { 5940 if (t->isunread) goto doit; \ ??ClOnKey_37: \ 00000348 840095E5 LDR R0,[R5, #+132] \ 0000034C 000050E3 CMP R0,#+0 \ 00000350 0D00001A BNE ??ClOnKey_38 5941 } \ ??ClOnKey_36: \ 00000354 005095E5 LDR R5,[R5, #+0] \ 00000358 000055E3 CMP R5,#+0 \ 0000035C F9FFFF1A BNE ??ClOnKey_37 5942 t=(CLIST *)(&cltop); \ 00000360 FC5F88E2 ADD R5,R8,#+1008 \ 00000364 020000EA B ??ClOnKey_39 5943 while(t=(CLIST *)(t->next)) 5944 { 5945 if (t->isunread) goto doit; \ ??ClOnKey_40: \ 00000368 840095E5 LDR R0,[R5, #+132] \ 0000036C 000050E3 CMP R0,#+0 \ 00000370 0500001A BNE ??ClOnKey_38 5946 } \ ??ClOnKey_39: \ 00000374 005095E5 LDR R5,[R5, #+0] \ 00000378 000055E3 CMP R5,#+0 \ 0000037C F9FFFF1A BNE ??ClOnKey_40 5947 if (t && Is_Show_Groups) 5948 { 5949 if (!t->isgroup) t=FindGroupByID(t->group); 5950 if (t && !t->state) 5951 { 5952 t->state^=0xFFFF; 5953 goto does; 5954 } 5955 } 5956 5957 curpage=1; \ 00000380 58A089E5 STR R10,[R9, #+88] 5958 curpos=0; \ 00000384 30B488E5 STR R11,[R8, #+1072] 5959 clstartItem=0; \ 00000388 68B089E5 STR R11,[R9, #+104] 5960 /* while(t=(CLIST *)(t->next)) 5961 { 5962 if (t->isactive) goto doit; 5963 } 5964 t=(CLIST *)(&cltop); 5965 5966 while(t=(CLIST *)(t->next)) 5967 { 5968 if (t->isactive) goto doit; 5969 } 5970 return(-1);*/ 5971 doit: 5972 { 5973 CLIST *g=FindGroupByID(t->group); \ ??ClOnKey_38: \ 0000038C 100095E5 LDR R0,[R5, #+16] \ 00000390 ........ _BLF FindGroupByID,??FindGroupByID??rA 5974 if (g) \ 00000394 000050E3 CMP R0,#+0 5975 { 5976 if (g->state) \ 00000398 B415D011 LDRHNE R1,[R0, #+84] \ 0000039C 00005113 CMPNE R1,#+0 5977 { 5978 g->state=0; \ 000003A0 B4B5C011 STRHNE R11,[R0, #+84] 5979 } 5980 } 5981 } 5982 does: 5983 RecountMenu(t,1); \ ??ClOnKey_32: \ 000003A4 0110A0E3 MOV R1,#+1 \ 000003A8 0500A0E1 MOV R0,R5 \ ??ClOnKey_26: \ 000003AC ........ BL RecountMenu 5984 return(-1); \ ??ClOnKey_30: \ 000003B0 00006AE2 RSB R0,R10,#+0 \ 000003B4 F28FBDE8 POP {R1,R4-R11,PC} 5985 } 5986 break; 5987 case GREEN_BUTTON: 5988 { 5989 // IsActiveUp=!IsActiveUp; 5990 // RecountMenu(NULL,1); 5991 t=FindContactByN(curpos); \ ??ClOnKey_41: \ 000003B8 ........ _BLF FindContactByN,??FindContactByN??rA \ 000003BC 0050A0E1 MOV R5,R0 5992 if(!t->isgroup) \ 000003C0 080095E5 LDR R0,[R5, #+8] \ 000003C4 000050E3 CMP R0,#+0 \ 000003C8 1C00001A BNE ??ClOnKey_12 5993 CreateContactMenu(t); \ 000003CC 0500A0E1 MOV R0,R5 \ 000003D0 ........ BL CreateContactMenu \ 000003D4 190000EA B ??ClOnKey_12 5994 } 5995 break; 5996 // case RED_BUTTON: return (1); 5997 case VOL_UP_BUTTON: 5998 #ifdef NEWSGOLD 5999 if(isVolUpButton) \ ??ClOnKey_42: \ 000003D8 D8019FE5 LDR R0,??ClOnKey_43 ;; isVolUpButton \ 000003DC 000090E5 LDR R0,[R0, #+0] \ 000003E0 000050E3 CMP R0,#+0 \ 000003E4 1500000A BEQ ??ClOnKey_12 6000 CreateScreenSelectGUI(); \ 000003E8 ........ _BLF CreateScreenSelectGUI,??CreateScreenSelectGUI??rA \ 000003EC 130000EA B ??ClOnKey_12 6001 #endif 6002 break; 6003 case VOL_DOWN_BUTTON: 6004 { 6005 if(isVolDownButton) \ ??ClOnKey_44: \ 000003F0 C4019FE5 LDR R0,??ClOnKey_43+0x4 ;; isVolDownButton \ 000003F4 000090E5 LDR R0,[R0, #+0] \ 000003F8 000050E3 CMP R0,#+0 \ 000003FC 0F00000A BEQ ??ClOnKey_12 6006 { 6007 if(!away_m) \ 00000400 080398E5 LDR R0,[R8, #+776] \ 00000404 000050E3 CMP R0,#+0 \ 00000408 0300001A BNE ??ClOnKey_45 6008 { 6009 away_m=!away_m; \ 0000040C 08A388E5 STR R10,[R8, #+776] 6010 main_d=1; \ 00000410 28A288E5 STR R10,[R8, #+552] 6011 InputAwayMsg(); \ 00000414 ........ BL InputAwayMsg \ 00000418 080000EA B ??ClOnKey_12 6012 } 6013 else 6014 { 6015 msg_away_timer=0; 6016 away_m=!away_m; 6017 if(change_back_status) \ ??ClOnKey_45: \ 0000041C 100398E5 LDR R0,[R8, #+784] \ 00000420 2CB089E5 STR R11,[R9, #+44] \ 00000424 08B388E5 STR R11,[R8, #+776] \ 00000428 000050E3 CMP R0,#+0 \ 0000042C 0300000A BEQ ??ClOnKey_12 6018 { 6019 CurrentStatus=status_rem; \ 00000430 0C0398E5 LDR R0,[R8, #+780] \ 00000434 FC0288E5 STR R0,[R8, #+764] 6020 set_my_status(); \ 00000438 ........ BL set_my_status 6021 change_back_status=0; \ 0000043C 10B388E5 STR R11,[R8, #+784] 6022 } 6023 } 6024 } 6025 } 6026 break; 6027 } 6028 6029 if (key=='#' && (CountContacts()>0))//Если есть хоть один контакт то выполнять,иначе возможен пикофф \ ??ClOnKey_12: \ 00000440 230056E3 CMP R6,#+35 \ 00000444 4A00001A BNE ??ClOnKey_11 \ 00000448 ........ _BLF CountContacts,??CountContacts??rA \ 0000044C 010050E3 CMP R0,#+1 \ 00000450 340000BA BLT ??ClOnKey_46 6030 { 6031 t=FindContactByN(curpos); \ 00000454 300498E5 LDR R0,[R8, #+1072] \ 00000458 ........ _BLF FindContactByN,??FindContactByN??rA \ 0000045C 0050A0E1 MOV R5,R0 6032 if(ActionResh) \ 00000460 58019FE5 LDR R0,??ClOnKey_43+0x8 ;; ActionResh \ 00000464 000090E5 LDR R0,[R0, #+0] \ 00000468 000050E3 CMP R0,#+0 \ 0000046C 1A00001A BNE ??ClOnKey_47 6033 { 6034 while(t=(CLIST *)(t->next)) 6035 { 6036 if (t->isactive) goto doit4; 6037 } 6038 t=(CLIST *)(&cltop); 6039 while(t=(CLIST *)(t->next)) 6040 { 6041 if (t->isactive) goto doit4; 6042 } 6043 return(-1); 6044 doit4: 6045 { 6046 CLIST *g=FindGroupByID(t->group); 6047 if (g) 6048 { 6049 if (g->state) 6050 { 6051 g->state=0; 6052 } 6053 } 6054 } 6055 RecountMenu(t,1); 6056 } 6057 else 6058 { 6059 if(t->log && !(t->just_now))//очистить лог \ 00000470 940095E5 LDR R0,[R5, #+148] \ 00000474 000050E3 CMP R0,#+0 \ 00000478 0600000A BEQ ??ClOnKey_48 \ 0000047C 680095E5 LDR R0,[R5, #+104] \ 00000480 000050E3 CMP R0,#+0 \ 00000484 0300001A BNE ??ClOnKey_48 6060 { 6061 FreeLOGQ(&t->log); \ 00000488 940085E2 ADD R0,R5,#+148 \ 0000048C ........ BL FreeLOGQ 6062 t->msg_count=0; \ 00000490 A4B085E5 STR R11,[R5, #+164] 6063 t->isactive=0; \ 00000494 A0B085E5 STR R11,[R5, #+160] 6064 } 6065 6066 if(t->just_now)//если контакт тока зашел,то обнуляем \ ??ClOnKey_48: \ 00000498 680095E5 LDR R0,[R5, #+104] \ 0000049C 000050E3 CMP R0,#+0 \ 000004A0 0300000A BEQ ??ClOnKey_49 6067 { 6068 CLIST *tt; 6069 tt=FindContactByUin(t->uin); \ 000004A4 0C0095E5 LDR R0,[R5, #+12] \ 000004A8 ........ _BLF FindContactByUin,??FindContactByUin??rA 6070 tt->just_now=0; \ 000004AC 68B080E5 STR R11,[R0, #+104] 6071 tt->just_i=0; \ 000004B0 6CB080E5 STR R11,[R0, #+108] 6072 } 6073 6074 if(t->uin==UIN)//если нажали на Loopback, то обнуляем все just_now'ы \ ??ClOnKey_49: \ 000004B4 ........ LDR R1,??DataTable282 ;; UIN \ 000004B8 0C0095E5 LDR R0,[R5, #+12] \ 000004BC 001091E5 LDR R1,[R1, #+0] \ 000004C0 010050E1 CMP R0,R1 \ 000004C4 2000001A BNE ??ClOnKey_50 6075 { 6076 CLIST *tt; 6077 tt=(CLIST *)(&cltop); \ 000004C8 FC0F88E2 ADD R0,R8,#+1008 \ 000004CC 1B0000EA B ??ClOnKey_51 \ ??ClOnKey_52: \ 000004D0 A00095E5 LDR R0,[R5, #+160] \ 000004D4 000050E3 CMP R0,#+0 \ 000004D8 0900001A BNE ??ClOnKey_53 \ ??ClOnKey_47: \ 000004DC 005095E5 LDR R5,[R5, #+0] \ 000004E0 000055E3 CMP R5,#+0 \ 000004E4 F9FFFF1A BNE ??ClOnKey_52 \ 000004E8 FC5F88E2 ADD R5,R8,#+1008 \ ??ClOnKey_54: \ 000004EC 005095E5 LDR R5,[R5, #+0] \ 000004F0 000055E3 CMP R5,#+0 \ 000004F4 ADFFFF0A 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 6078 while(tt=(CLIST *)(tt->next)) 6079 { 6080 if(tt->just_now){ tt->just_now=0; tt->just_i=0; } 6081 } 6082 } 6083 if(strlen(ContactT9Key)) ClearContactT9Key(); 6084 RecountMenu(NULL,0); 6085 } 6086 } 6087 } 6088 6089 if ((key>='0')&&(key<='9') && msg->gbsmsg->msg==KEY_DOWN) 6090 { 6091 AddContactT9Key(key); 6092 RecountMenu(NULL,1); 6093 return(-1); 6094 } 6095 return 0; \ ??ClOnKey_46: \ 00000528 0000A0E3 MOV R0,#+0 \ 0000052C F28FBDE8 POP {R1,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 F28FBDE8 POP {R1,R4-R11,PC} \ ??ClOnKey_43: \ 000005B8 ........ DC32 isVolUpButton \ 000005BC ........ DC32 isVolDownButton \ 000005C0 ........ DC32 ActionResh 6096 } 6097 6098 #ifdef DEBUG 6099 static int OnKey(MAIN_GUI *data, GUI_MSG *msg) 6100 { 6101 DirectRedrawGUI(); 6102 // int k=msg->gbsmsg->submess; 6103 return ClOnKey(msg); 6104 // return(0); 6105 } 6106 6107 extern void kill_data(void *p, void (*func_p)(void *)); 6108 6109 int method28(void){return(0);} 6110 int method29(void){return(0);} 6111 6112 const void * const gui_methods2[11]={ 6113 (void *)OnRedraw, 6114 (void *)onCreate, 6115 (void *)onClose, 6116 (void *)onFocus, 6117 (void *)onUnfocus, 6118 (void *)OnKey, 6119 0, 6120 (void *)kill_data, 6121 (void *)method28, 6122 (void *)method29, 6123 0 6124 }; 6125 6126 6127 6128 static void CreateCL() 6129 { 6130 const RECT Canvas={0,0,0,0}; 6131 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); 6132 zeromem(main_gui,sizeof(MAIN_GUI)); 6133 main_gui->gui.canvas=(void *)(&Canvas); 6134 main_gui->gui.methods=(void *)gui_methods2; 6135 // main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); 6136 //patch_rect((RECT*)&Canvas,0,YDISP,ScreenW()-1,ScreenH()-1); 6137 contactlist_menu_id=CreateGUI(main_gui); 6138 SMART_REDRAW(); 6139 } 6140 6141 #endif 6142 #ifdef ICONBAR 6143 #else 6144 #ifdef ELKA 6145 #undef YDISP 6146 #define YDISP 24 6147 #endif 6148 #endif 6149 6150 6151 /************************************************************************************************/ 6152 6153 \ In segment CODE, align 4, keep-with-next 6154 void DrawLoadScreen(MAIN_GUI *data) 6155 { \ DrawLoadScreen: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 0CD04DE2 SUB SP,SP,#+12 6156 int scr_w=ScreenW(); 6157 int scr_h=ScreenH(); 6158 int pos_status;//2026rev 6159 int pm = pictures_max, pl = pictures_loaded;//2026rev 6160 RECT rc=PBRECT; 6161 DrawRectangle(0,YDISP,scr_w-1,scr_h-1,0, GetPaletteAdrByColorIndex(1), GetPaletteAdrByColorIndex(1)); 6162 6163 // if(!USE_ADD_UIN)//Если не используем доп.уины 6164 //{ 6165 // DrawImg(0,0,S_ICONS[ICON_LOGO]); 6166 DrwImage(icons[ICON_LOGO],0,0); 6167 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //by BoBa 10.07 6168 if(IsShowInfo) \ 00000008 2C649FE5 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 1C149FE5 LDR R1,??DrawLoadScreen_0+0x4 ;; pictures_max \ 00000020 08008DE5 STR R0,[SP, #+8] \ 00000024 001091E5 LDR R1,[R1, #+0] \ 00000028 14049FE5 LDR R0,??DrawLoadScreen_0+0x8 ;; PBRECT \ 0000002C 00108DE5 STR R1,[SP, #+0] \ 00000030 10149FE5 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,??DataTable271 ;; 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 A8339FE5 LDR R3,??DrawLoadScreen_0+0x10 ;; IsShowInfo \ 000000A0 E41395E5 LDR R1,[R5, #+996] \ 000000A4 E82395E5 LDR R2,[R5, #+1000] \ 000000A8 003093E5 LDR R3,[R3, #+0] \ 000000AC ........ LDR R0,??DataTable276 ;; screen3 \ 000000B0 000053E3 CMP R3,#+0 \ 000000B4 0CD08DE2 ADD SP,SP,#+12 \ 000000B8 1A00000A BEQ ??DrawLoadScreen_1 6169 { 6170 wsprintf(data->ws1,LG_GRSTATESTRING,connect_state,RXstate,RX,TX,sendq_l,hostname,logmsg); \ 000000BC B830A0E3 MOV R3,#+184 \ 000000C0 6C3D83E3 ORR R3,R3,#0x1B00 \ 000000C4 053083E0 ADD R3,R3,R5 \ 000000C8 08002DE9 PUSH {R3} \ 000000CC 0830A0E3 MOV R3,#+8 \ 000000D0 7C3D83E3 ORR R3,R3,#0x1F00 \ 000000D4 053083E0 ADD R3,R3,R5 \ 000000D8 08002DE9 PUSH {R3} \ 000000DC 1C3090E5 LDR R3,[R0, #+28] \ 000000E0 08002DE9 PUSH {R3} \ 000000E4 04002DE9 PUSH {R2} \ 000000E8 02002DE9 PUSH {R1} \ 000000EC 303090E5 LDR R3,[R0, #+48] \ 000000F0 342090E5 LDR R2,[R0, #+52] \ 000000F4 340094E5 LDR R0,[R4, #+52] \ 000000F8 041086E2 ADD R1,R6,#+4 \ 000000FC 240100EF SWI +292 6171 wsprintf(data->ws2,logmsg2); \ 00000100 B800A0E3 MOV R0,#+184 \ 00000104 700D80E3 ORR R0,R0,#0x1C00 \ 00000108 051080E0 ADD R1,R0,R5 \ 0000010C 380094E5 LDR R0,[R4, #+56] \ 00000110 240100EF SWI +292 6172 wstrcat(data->ws1,data->ws2); \ 00000114 381094E5 LDR R1,[R4, #+56] \ 00000118 340094E5 LDR R0,[R4, #+52] \ 0000011C 210100EF SWI +289 \ 00000120 14D08DE2 ADD SP,SP,#+20 \ 00000124 040000EA B ??DrawLoadScreen_2 6173 } 6174 else 6175 { 6176 wsprintf(data->ws1,"State: %d, RXstate: %d",connect_state,RXstate); \ ??DrawLoadScreen_1: \ 00000128 303090E5 LDR R3,[R0, #+48] \ 0000012C 342090E5 LDR R2,[R0, #+52] \ 00000130 340094E5 LDR R0,[R4, #+52] \ 00000134 3C1086E2 ADD R1,R6,#+60 \ 00000138 240100EF SWI +292 6177 } 6178 6179 if(pm != pl) \ ??DrawLoadScreen_2: \ 0000013C 00009DE5 LDR R0,[SP, #+0] \ 00000140 04109DE5 LDR R1,[SP, #+4] \ 00000144 010050E1 CMP R0,R1 \ 00000148 2E00000A BEQ ??DrawLoadScreen_3 \ 0000014C FC029FE5 LDR R0,??DrawLoadScreen_0+0x14 ;; BGPBcolor \ 00000150 0B30A0E1 MOV R3,R11 \ 00000154 0010A0E1 MOV R1,R0 \ 00000158 02002DE9 PUSH {R1} \ 0000015C 01002DE9 PUSH {R0} \ 00000160 0A20A0E1 MOV R2,R10 \ 00000164 0810A0E1 MOV R1,R8 \ 00000168 0000A0E3 MOV R0,#+0 \ 0000016C 01002DE9 PUSH {R0} \ 00000170 0700A0E1 MOV R0,R7 6180 { 6181 /* DrawRectangle(0,scr_h-4-2*GetFontYSIZE(FONT_SMALL_BOLD),scr_w-1,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-2,0, 6182 GetPaletteAdrByColorIndex(0), 6183 GetPaletteAdrByColorIndex(0));*/ 6184 // pos_status = ((scr_w-1) * pl) / pm; 6185 /* DrawRectangle(1,scr_h-4-2*GetFontYSIZE(FONT_SMALL_BOLD)+1,pos_status,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-3,0, 6186 GetPaletteAdrByColorIndex(14), 6187 GetPaletteAdrByColorIndex(14)); */ 6188 // wstrcatprintf(data->ws1,"\nLoading images..."); 6189 6190 DrawRectangle(rc.x,rc.y,rc.x2,rc.y2,0,BGPBcolor,BGPBcolor); \ 00000174 B40100EF SWI +436 6191 pos_status = (((rc.x2-rc.x)-1) * pl) / pm; \ 00000178 10109DE5 LDR R1,[SP, #+16] \ 0000017C 07004AE0 SUB R0,R10,R7 \ 00000180 010040E2 SUB R0,R0,#+1 \ 00000184 910000E0 MUL R0,R1,R0 \ 00000188 0C109DE5 LDR R1,[SP, #+12] 6192 DrawRectangle(rc.x+2,rc.y+2,rc.x+pos_status+2,rc.y2-2,0,PBcolor,PBcolor); \ 0000018C 02304BE2 SUB R3,R11,#+2 \ 00000190 ........ _BLF ??div32_a,??rA??div32_a \ 00000194 B8029FE5 LDR R0,??DrawLoadScreen_0+0x18 ;; PBcolor \ 00000198 0020A0E1 MOV R2,R0 \ 0000019C 04002DE9 PUSH {R2} \ 000001A0 01002DE9 PUSH {R0} \ 000001A4 0000A0E3 MOV R0,#+0 \ 000001A8 01002DE9 PUSH {R0} \ 000001AC 070081E0 ADD R0,R1,R7 \ 000001B0 022080E2 ADD R2,R0,#+2 \ 000001B4 021088E2 ADD R1,R8,#+2 \ 000001B8 020087E2 ADD R0,R7,#+2 \ 000001BC B40100EF SWI +436 6193 6194 if(total_smiles) \ 000001C0 90029FE5 LDR R0,??DrawLoadScreen_0+0x1C ;; total_smiles \ 000001C4 001090E5 LDR R1,[R0, #+0] \ 000001C8 18D08DE2 ADD SP,SP,#+24 \ 000001CC 000051E3 CMP R1,#+0 \ 000001D0 0300000A BEQ ??DrawLoadScreen_4 6195 { 6196 wstrcatprintf(data->ws1,"\nLoaded %d smiles",total_smiles); \ 000001D4 002090E5 LDR R2,[R0, #+0] \ 000001D8 340094E5 LDR R0,[R4, #+52] \ 000001DC 541086E2 ADD R1,R6,#+84 \ 000001E0 160200EF SWI +534 6197 } 6198 if (xstatuses_load) \ ??DrawLoadScreen_4: \ 000001E4 70029FE5 LDR R0,??DrawLoadScreen_0+0x20 ;; xstatuses_load \ 000001E8 000090E5 LDR R0,[R0, #+0] \ 000001EC 000050E3 CMP R0,#+0 \ 000001F0 0400000A BEQ ??DrawLoadScreen_3 6199 { 6200 wstrcatprintf(data->ws1,"\nLoaded %d xstatus",total_xstatuses); \ 000001F4 64029FE5 LDR R0,??DrawLoadScreen_0+0x24 ;; total_xstatuses \ 000001F8 681086E2 ADD R1,R6,#+104 \ 000001FC 002090E5 LDR R2,[R0, #+0] \ 00000200 340094E5 LDR R0,[R4, #+52] \ 00000204 160200EF SWI +534 6201 } 6202 } 6203 6204 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: \ 00000208 1700A0E3 MOV R0,#+23 \ 0000020C 2E0100EF SWI +302 \ 00000210 00A0A0E1 MOV R10,R0 \ 00000214 0000A0E3 MOV R0,#+0 \ 00000218 2E0100EF SWI +302 \ 0000021C 00B0A0E1 MOV R11,R0 \ 00000220 0500A0E3 MOV R0,#+5 \ 00000224 C50100EF SWI +453 \ 00000228 08109DE5 LDR R1,[SP, #+8] \ 0000022C 00042DE9 PUSH {R10} \ 00000230 048041E2 SUB R8,R1,#+4 \ 00000234 00082DE9 PUSH {R11} \ 00000238 0010A0E3 MOV R1,#+0 \ 0000023C 02002DE9 PUSH {R1} \ 00000240 000048E0 SUB R0,R8,R0 \ 00000244 047049E2 SUB R7,R9,#+4 \ 00000248 0730A0E1 MOV R3,R7 \ 0000024C 0B10A0E3 MOV R1,#+11 \ 00000250 02002DE9 PUSH {R1} \ 00000254 01002DE9 PUSH {R0} \ 00000258 340094E5 LDR R0,[R4, #+52] \ 0000025C 0320A0E3 MOV R2,#+3 \ 00000260 0310A0E3 MOV R1,#+3 \ 00000264 4C0100EF SWI +332 6205 /*} 6206 else 6207 { 6208 wsprintf(data->ws1,"%t UIN!","Выберите"); 6209 DrawLine(0,CLIST_Y1-3,ScreenW()-1,CLIST_Y1-3,0,clrWhite); 6210 DrawString(data->ws1,2,YDISP+2,scr_w-1,YDISP+GetFontYSIZE(FONT_SMALL),FONT_SMALL,0,fntSelect,0); 6211 // DrawList(); 6212 } 6213 */ 6214 6215 #ifdef kluchnik 6216 int y=160; 6217 char A[]="[A] %s"; 6218 char I[]="[I]"; 6219 char V[]="[V]"; 6220 char S[]="[S]"; 6221 6222 if(CurrentPrivateStatus==1) 6223 { 6224 wsprintf(data->ws2,I); 6225 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 6226 y+=GetFontYSIZE(11)+5; 6227 } 6228 6229 if(Is_Vibra_Enabled) 6230 { 6231 wsprintf(data->ws2,V); 6232 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 6233 y+=GetFontYSIZE(11)+5; 6234 } 6235 6236 if(Is_Sounds_Enabled) 6237 { 6238 wsprintf(data->ws2,S); 6239 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 6240 y+=GetFontYSIZE(11)+5; 6241 } 6242 6243 if(Is_Double_Vibra_On) 6244 { 6245 wsprintf(data->ws2,"[Vr]"); 6246 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 6247 } 6248 6249 if(away_m) 6250 { 6251 wsprintf(data->ws2,A,away_msg_time_dace); 6252 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 6253 y+=GetFontYSIZE(11)+5; 6254 } 6255 6256 6257 wsprintf(data->ws2,"Uin: %d",UIN); 6258 DrawString(data->ws2,1,scr_h-10-4*GetFontYSIZE(FONT_SMALL_BOLD)+1,ScreenW()-1,scr_h-10-GetFontYSIZE(FONT_MEDIUM_BOLD)-3 6259 ,FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 6260 6261 if(connect_state==3) 6262 { 6263 wsprintf(data->ws2,"Online: %02d:%02d:%02d not action %d sec", uptimeHour, uptimeMin, uptimeSec,msg_away_timer*5); 6264 } 6265 else 6266 wsprintf(data->ws2,"Offline [%02d:%02d:%02d]",uptimeHour, uptimeMin, uptimeSec); 6267 DrawString(data->ws2,1,scr_h-10-3*GetFontYSIZE(FONT_SMALL_BOLD)+1,ScreenW()-1,scr_h-10-GetFontYSIZE(FONT_MEDIUM_BOLD)-3 6268 ,FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 6269 #endif 6270 6271 if(IsInvertSoftKey) \ 00000268 ........ LDR R0,??DataTable270 ;; IsInvertSoftKey \ 0000026C C990A0E1 ASR R9,R9,#+1 \ 00000270 000090E5 LDR R0,[R0, #+0] \ 00000274 14D08DE2 ADD SP,SP,#+20 \ 00000278 000050E3 CMP R0,#+0 \ 0000027C 3700000A BEQ ??DrawLoadScreen_5 6272 { 6273 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 00000280 380094E5 LDR R0,[R4, #+56] \ 00000284 7C2086E2 ADD R2,R6,#+124 \ 00000288 0610A0E1 MOV R1,R6 \ 0000028C 240100EF SWI +292 6274 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)); \ 00000290 1700A0E3 MOV R0,#+23 \ 00000294 2E0100EF SWI +302 \ 00000298 00A0A0E1 MOV R10,R0 \ 0000029C 0000A0E3 MOV R0,#+0 \ 000002A0 2E0100EF SWI +302 \ 000002A4 00B0A0E1 MOV R11,R0 \ 000002A8 0500A0E3 MOV R0,#+5 \ 000002AC C50100EF SWI +453 \ 000002B0 00042DE9 PUSH {R10} \ 000002B4 00082DE9 PUSH {R11} \ 000002B8 0410A0E3 MOV R1,#+4 \ 000002BC 02002DE9 PUSH {R1} \ 000002C0 0730A0E1 MOV R3,R7 \ 000002C4 002048E0 SUB R2,R8,R0 \ 000002C8 0510A0E3 MOV R1,#+5 \ 000002CC 02002DE9 PUSH {R1} \ 000002D0 0810A0E1 MOV R1,R8 \ 000002D4 02002DE9 PUSH {R1} \ 000002D8 380094E5 LDR R0,[R4, #+56] \ 000002DC 0910A0E1 MOV R1,R9 \ 000002E0 4C0100EF SWI +332 6275 6276 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ 000002E4 F00395E5 LDR R0,[R5, #+1008] \ 000002E8 14D08DE2 ADD SP,SP,#+20 \ 000002EC 000050E3 CMP R0,#+0 \ 000002F0 380094E5 LDR R0,[R4, #+56] \ 000002F4 84208612 ADDNE R2,R6,#+132 \ 000002F8 03208602 ADDEQ R2,R6,#+3 \ 000002FC 0610A0E1 MOV R1,R6 \ 00000300 240100EF SWI +292 6277 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)); \ 00000304 1700A0E3 MOV R0,#+23 \ 00000308 2E0100EF SWI +302 \ 0000030C 0050A0E1 MOV R5,R0 \ 00000310 0000A0E3 MOV R0,#+0 \ 00000314 2E0100EF SWI +302 \ 00000318 0060A0E1 MOV R6,R0 \ 0000031C 0500A0E3 MOV R0,#+5 \ 00000320 C50100EF SWI +453 \ 00000324 20002DE9 PUSH {R5} \ 00000328 40002DE9 PUSH {R6} \ 0000032C 0110A0E3 MOV R1,#+1 \ 00000330 02002DE9 PUSH {R1} \ 00000334 0930A0E1 MOV R3,R9 \ 00000338 002048E0 SUB R2,R8,R0 \ 0000033C 0510A0E3 MOV R1,#+5 \ 00000340 02002DE9 PUSH {R1} \ 00000344 0810A0E1 MOV R1,R8 \ 00000348 02002DE9 PUSH {R1} \ 0000034C 380094E5 LDR R0,[R4, #+56] \ 00000350 0310A0E3 MOV R1,#+3 \ 00000354 4C0100EF SWI +332 \ 00000358 14D08DE2 ADD SP,SP,#+20 \ 0000035C F78FBDE8 POP {R0-R2,R4-R11,PC} 6278 } 6279 else 6280 { 6281 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ ??DrawLoadScreen_5: \ 00000360 F00395E5 LDR R0,[R5, #+1008] \ 00000364 0610A0E1 MOV R1,R6 \ 00000368 000050E3 CMP R0,#+0 \ 0000036C 380094E5 LDR R0,[R4, #+56] \ 00000370 84208612 ADDNE R2,R6,#+132 \ 00000374 03208602 ADDEQ R2,R6,#+3 \ 00000378 240100EF SWI +292 6282 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)); \ 0000037C 1700A0E3 MOV R0,#+23 \ 00000380 2E0100EF SWI +302 \ 00000384 0050A0E1 MOV R5,R0 \ 00000388 0000A0E3 MOV R0,#+0 \ 0000038C 2E0100EF SWI +302 \ 00000390 00A0A0E1 MOV R10,R0 \ 00000394 0500A0E3 MOV R0,#+5 \ 00000398 C50100EF SWI +453 \ 0000039C 20002DE9 PUSH {R5} \ 000003A0 00042DE9 PUSH {R10} \ 000003A4 0410A0E3 MOV R1,#+4 \ 000003A8 02002DE9 PUSH {R1} \ 000003AC 0730A0E1 MOV R3,R7 \ 000003B0 002048E0 SUB R2,R8,R0 \ 000003B4 0510A0E3 MOV R1,#+5 \ 000003B8 02002DE9 PUSH {R1} \ 000003BC 0810A0E1 MOV R1,R8 \ 000003C0 02002DE9 PUSH {R1} \ 000003C4 380094E5 LDR R0,[R4, #+56] \ 000003C8 0910A0E1 MOV R1,R9 \ 000003CC 4C0100EF SWI +332 6283 6284 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 000003D0 380094E5 LDR R0,[R4, #+56] \ 000003D4 7C2086E2 ADD R2,R6,#+124 \ 000003D8 0610A0E1 MOV R1,R6 \ 000003DC 240100EF SWI +292 6285 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)); \ 000003E0 1700A0E3 MOV R0,#+23 \ 000003E4 2E0100EF SWI +302 \ 000003E8 0050A0E1 MOV R5,R0 \ 000003EC 0000A0E3 MOV R0,#+0 \ 000003F0 2E0100EF SWI +302 \ 000003F4 0060A0E1 MOV R6,R0 \ 000003F8 0500A0E3 MOV R0,#+5 \ 000003FC C50100EF SWI +453 \ 00000400 20002DE9 PUSH {R5} \ 00000404 40002DE9 PUSH {R6} \ 00000408 0110A0E3 MOV R1,#+1 \ 0000040C 02002DE9 PUSH {R1} \ 00000410 0930A0E1 MOV R3,R9 \ 00000414 002048E0 SUB R2,R8,R0 \ 00000418 0510A0E3 MOV R1,#+5 \ 0000041C 02002DE9 PUSH {R1} \ 00000420 0810A0E1 MOV R1,R8 \ 00000424 02002DE9 PUSH {R1} \ 00000428 380094E5 LDR R0,[R4, #+56] \ 0000042C 0310A0E3 MOV R1,#+3 \ 00000430 4C0100EF SWI +332 \ 00000434 28D08DE2 ADD SP,SP,#+40 6286 } 6287 /* 6288 wsprintf(data->ws2,"%d %s",addonuin[0].uin,addonuin[0].pass); 6289 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)); 6290 */ 6291 } \ 00000438 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return \ ??DrawLoadScreen_0: \ 0000043C ........ DC32 percent_t \ 00000440 ........ DC32 pictures_max \ 00000444 ........ DC32 PBRECT \ 00000448 ........ DC32 pictures_loaded \ 0000044C ........ DC32 IsShowInfo \ 00000450 ........ DC32 BGPBcolor \ 00000454 ........ DC32 PBcolor \ 00000458 ........ DC32 total_smiles \ 0000045C ........ DC32 xstatuses_load \ 00000460 ........ DC32 total_xstatuses 6292 6293 //int ShowLoadScreen=1; \ In segment CODE, align 4, keep-with-next 6294 void method0(MAIN_GUI *data) 6295 { \ method0: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 6296 // if(!IsGuiOnTop(maingui_id)) return; 6297 #ifndef DEBUG 6298 if(IsGuiOnTop(maingui_id)) \ 00000008 ........ LDR R0,??DataTable263 ;; i_rc + 608 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 350100EF SWI +309 \ 00000014 000050E3 CMP R0,#+0 \ 00000018 1080BD08 POPEQ {R4,PC} 6299 { 6300 if(ShowLoadScreen) \ 0000001C ........ LDR R0,??DataTable275 ;; screen3 + 80 \ 00000020 000090E5 LDR R0,[R0, #+0] \ 00000024 000050E3 CMP R0,#+0 \ 00000028 0200000A BEQ ??method0_0 6301 { 6302 #ifdef ELKA 6303 DisableIconBar(0); 6304 #endif 6305 DrawLoadScreen(data); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 1040BDE8 POP {R4,LR} ;; Pop \ 00000034 ........ B DrawLoadScreen ;; tailcall 6306 } 6307 else 6308 { 6309 #ifdef ELKA 6310 #ifdef ICONBAR 6311 DisableIconBar(0); 6312 #else 6313 DisableIconBar(1); 6314 #endif 6315 #endif 6316 SetCanvasFlag(1); \ ??method0_0: \ 00000038 0100A0E3 MOV R0,#+1 \ 0000003C ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 6317 DrawContactList(); \ 00000040 1040BDE8 POP {R4,LR} ;; Pop \ 00000044 ........ B DrawContactList ;; tailcall 6318 } 6319 } 6320 #else 6321 DrawLoadScreen(data); 6322 #endif 6323 } 6324 \ In segment CODE, align 4, keep-with-next 6325 void method1(MAIN_GUI *data,void *(*malloc_adr)(int)) 6326 { \ method1: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 6327 data->ws1=AllocWS(256); \ 00000008 400FA0E3 MOV R0,#+256 \ 0000000C 250100EF SWI +293 \ 00000010 340084E5 STR R0,[R4, #+52] 6328 data->ws2=AllocWS(256); \ 00000014 400FA0E3 MOV R0,#+256 \ 00000018 250100EF SWI +293 \ 0000001C 380084E5 STR R0,[R4, #+56] 6329 6330 if(isSystemFont) clfont=100+pngFont; \ 00000020 ........ LDR R0,??DataTable265 ;; isSystemFont \ 00000024 000090E5 LDR R0,[R0, #+0] \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 0300000A BEQ ??method1_0 \ 00000030 ........ LDR R0,??DataTable266 ;; pngFont \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 640080E2 ADD R0,R0,#+100 \ 0000003C 000000EA B ??method1_1 6331 else clfont=2; \ ??method1_0: \ 00000040 0200A0E3 MOV R0,#+2 \ ??method1_1: \ 00000044 ........ LDR R5,??DataTable271 ;; i_rc \ 00000048 3C0485E5 STR R0,[R5, #+1084] 6332 6333 if(icons[IS_ONLINE]) \ 0000004C 340095E5 LDR R0,[R5, #+52] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 3C0495E5 LDR R0,[R5, #+1084] \ 00000058 0600000A BEQ ??method1_2 6334 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 3C0495E5 LDR R0,[R5, #+1084] 6335 else 6336 hy=FontH(clfont); \ ??method1_2: \ 00000078 ........ _BLF FontH,??FontH??rA \ ??method1_3: \ 0000007C 380485E5 STR R0,[R5, #+1080] 6337 6338 hy+=YDISP; 6339 data->gui.state=1; \ 00000080 0100A0E3 MOV R0,#+1 \ 00000084 0C00C4E5 STRB R0,[R4, #+12] 6340 } \ 00000088 3080BDE8 POP {R4,R5,PC} ;; return 6341 \ In segment CODE, align 4, keep-with-next 6342 void method2(MAIN_GUI *data,void (*mfree_adr)(void *)) 6343 { \ method2: \ 00000000 30402DE9 PUSH {R4,R5,LR} 6344 FreeWS(data->ws1); 6345 FreeWS(data->ws2); 6346 #ifndef DEBUG 6347 mfree(screen3.bitmap); \ 00000004 ........ LDR R5,??DataTable268 ;; screen3 \ 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 040095E5 LDR R0,[R5, #+4] \ 00000020 150000EF SWI +21 6348 mfree(screen4.bitmap); \ 00000024 0C0095E5 LDR R0,[R5, #+12] \ 00000028 150000EF SWI +21 6349 #endif 6350 data->gui.state=0; \ 0000002C 0000A0E3 MOV R0,#+0 \ 00000030 0C00C4E5 STRB R0,[R4, #+12] 6351 } \ 00000034 3080BDE8 POP {R4,R5,PC} ;; return 6352 \ In segment CODE, align 4, keep-with-next 6353 void method3(MAIN_GUI *data,void *(*malloc_adr)(int),void (*mfree_adr)(void *)) 6354 { \ method3: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 6355 DisableIDLETMR(); \ 00000008 7F0100EF SWI +383 6356 data->gui.state=2; \ 0000000C 0200A0E3 MOV R0,#+2 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 6357 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 6358 \ In segment CODE, align 4, keep-with-next 6359 void method4(MAIN_GUI *data,void (*mfree_adr)(void *)) 6360 { 6361 if (data->gui.state!=2) \ method4: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 6362 return; 6363 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 6364 } \ 00000010 1EFF2FE1 BX LR ;; return 6365 6366 \ In segment CODE, align 4, keep-with-next 6367 int LoadOnKey(GUI_MSG *msg) 6368 { \ LoadOnKey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 0CD04DE2 SUB SP,SP,#+12 6369 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 5C00001A BNE ??LoadOnKey_1 6370 { 6371 switch(msg->gbsmsg->submess) \ 00000020 ........ LDR R4,??DataTable276 ;; screen3 \ 00000024 ........ LDR R0,??DataTable270 ;; IsInvertSoftKey \ 00000028 ........ LDR R7,??DataTable271 ;; i_rc \ 0000002C 082092E5 LDR R2,[R2, #+8] \ 00000030 503094E5 LDR R3,[R4, #+80] \ 00000034 38C094E5 LDR R12,[R4, #+56] \ 00000038 00E090E5 LDR LR,[R0, #+0] \ 0000003C ........ LDR R5,??DataTable289 ;; create_connect \ 00000040 ........ LDR R1,??DataTable285 ;; end_socket \ 00000044 D800A0E3 MOV R0,#+216 \ 00000048 740D80E3 ORR R0,R0,#0x1D00 \ 0000004C 076080E0 ADD R6,R0,R7 \ 00000050 ........ LDR R0,??DataTable274 ;; WriteDefSettings \ 00000054 0080E0E3 MVN R8,#+0 \ 00000058 0190A0E3 MOV R9,#+1 \ 0000005C 00A0A0E3 MOV R10,#+0 \ 00000060 012042E2 SUB R2,R2,#+1 \ 00000064 330052E3 CMP R2,#+51 \ 00000068 4900008A 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 0C46461A DC8 +12,+70,+70,+26 \ 0000007C 46464646 DC8 +70,+70,+70,+70 \ 00000080 4646202B DC8 +70,+70,+32,+43 \ 00000084 46464646 DC8 +70,+70,+70,+70 \ 00000088 46464646 DC8 +70,+70,+70,+70 \ 0000008C 46464646 DC8 +70,+70,+70,+70 \ 00000090 46464646 DC8 +70,+70,+70,+70 \ 00000094 46464646 DC8 +70,+70,+70,+70 \ 00000098 46464646 DC8 +70,+70,+70,+70 \ 0000009C 46464646 DC8 +70,+70,+70,+70 \ 000000A0 46464646 DC8 +70,+70,+70,+70 \ 000000A4 4646462E DC8 +70,+70,+70,+46 \ 000000A8 31363B41 DC8 +49,+54,+59,+65 6372 { 6373 // case ENTER_BUTTON: Enter(); break; 6374 case LEFT_SOFT: 6375 if(IsInvertSoftKey) \ ??LoadOnKey_2: \ 000000AC 00005EE3 CMP LR,#+0 \ 000000B0 0D00000A BEQ ??LoadOnKey_3 6376 { 6377 #ifdef DEBUG 6378 if (cltop || sock==-1) CreateCL();//create_contactlist_menu(); 6379 #else 6380 if(ShowLoadScreen && (cltop || sock==-1)) ShowLoadScreen=0;//показывть контакт лист \ ??LoadOnKey_4: \ 000000B4 000053E3 CMP R3,#+0 \ 000000B8 3500000A BEQ ??LoadOnKey_1 \ 000000BC F00397E5 LDR R0,[R7, #+1008] \ 000000C0 000050E3 CMP R0,#+0 \ 000000C4 0100001A BNE ??LoadOnKey_5 \ 000000C8 08005CE1 CMP R12,R8 \ 000000CC 3000001A BNE ??LoadOnKey_1 \ ??LoadOnKey_5: \ 000000D0 50A084E5 STR R10,[R4, #+80] \ 000000D4 000000EA B ??LoadOnKey_6 6381 #endif 6382 6383 // ShowLoadScreen=0; 6384 //unhooked2=1; 6385 } 6386 else// return 1; 6387 { 6388 if(ShowLoadScreen) 6389 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 6390 else 6391 ShowLoadScreen=1; \ ??LoadOnKey_7: \ 000000D8 509084E5 STR R9,[R4, #+80] \ ??LoadOnKey_6: \ 000000DC 0000A0E3 MOV R0,#+0 \ 000000E0 FE8FBDE8 POP {R1-R11,PC} 6392 } 6393 // if (cltop) remake_clmenu(); 6394 break; 6395 case RIGHT_SOFT: 6396 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} 6397 { 6398 if(ShowLoadScreen) 6399 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 6400 else 6401 ShowLoadScreen=1; 6402 } 6403 else 6404 { 6405 #ifdef DEBUG 6406 if (cltop || sock==-1)CreateCL(); //create_contactlist_menu(); 6407 #else 6408 if(ShowLoadScreen && (cltop || sock==-1)) ShowLoadScreen=0;//показывть контакт лист 6409 #endif 6410 // ShowLoadScreen=0; 6411 // unhooked2=1; 6412 } 6413 break; 6414 case GREEN_BUTTON: 6415 disautorecconect=0; \ ??LoadOnKey_9: \ 000000FC BCA387E5 STR R10,[R7, #+956] 6416 if ((connect_state==0)&&(sock==-1)) \ 00000100 340094E5 LDR R0,[R4, #+52] \ 00000104 000050E3 CMP R0,#+0 \ 00000108 08005C01 CMPEQ R12,R8 \ 0000010C 2000001A BNE ??LoadOnKey_1 6417 { 6418 GBS_DelTimer(&reconnect_tmr); \ ??LoadOnKey_10: \ 00000110 0600A0E1 MOV R0,R6 \ 00000114 8C0100EF SWI +396 6419 DNR_TRIES=3; \ 00000118 0300A0E3 MOV R0,#+3 \ 0000011C 480084E5 STR R0,[R4, #+72] 6420 SUBPROC((void *)create_connect); \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 190000EA B ??LoadOnKey_11 6421 } 6422 break; 6423 case RED_BUTTON: 6424 // extern volatile int disautorecconect; 6425 disautorecconect=1; \ ??LoadOnKey_12: \ 00000128 BC9387E5 STR R9,[R7, #+956] 6426 // extern void end_socket(void); 6427 SUBPROC((void*)end_socket); \ 0000012C 0100A0E1 MOV R0,R1 \ 00000130 160000EA B ??LoadOnKey_11 6428 break; 6429 case '0': 6430 SUBPROC((void*)end_socket); \ ??LoadOnKey_13: \ 00000134 0100A0E1 MOV R0,R1 \ 00000138 710100EF SWI +369 6431 GBS_DelTimer(&reconnect_tmr); \ 0000013C F3FFFFEA B ??LoadOnKey_10 6432 DNR_TRIES=3; 6433 SUBPROC((void *)create_connect); 6434 break; 6435 6436 //------------------------------------------------------// 6437 6438 case '1': 6439 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??LoadOnKey_14: \ 00000140 C01397E5 LDR R1,[R7, #+960] \ 00000144 000051E3 CMP R1,#+0 \ 00000148 0090A013 MOVNE R9,#+0 \ 0000014C C09387E5 STR R9,[R7, #+960] 6440 SUBPROC((void*)WriteDefSettings); \ 00000150 0E0000EA B ??LoadOnKey_11 6441 break; 6442 case '2': 6443 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??LoadOnKey_15: \ 00000154 6C1297E5 LDR R1,[R7, #+620] \ 00000158 000051E3 CMP R1,#+0 \ 0000015C 0090A013 MOVNE R9,#+0 \ 00000160 6C9287E5 STR R9,[R7, #+620] 6444 SUBPROC((void*)WriteDefSettings); \ 00000164 090000EA B ??LoadOnKey_11 6445 break; 6446 case '3': 6447 if(CurrentPrivateStatus!=1) \ ??LoadOnKey_16: \ 00000168 CC0397E5 LDR R0,[R7, #+972] \ 0000016C 010050E3 CMP R0,#+1 \ 00000170 0300A003 MOVEQ R0,#+3 6448 SetPrivateStatus(1);//Инвиз \ 00000174 0100A013 MOVNE R0,#+1 \ 00000178 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA \ 0000017C D6FFFFEA B ??LoadOnKey_6 6449 else 6450 SetPrivateStatus(3); 6451 break; 6452 case '4': 6453 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??LoadOnKey_17: \ 00000180 541297E5 LDR R1,[R7, #+596] \ 00000184 000051E3 CMP R1,#+0 \ 00000188 0090A013 MOVNE R9,#+0 \ 0000018C 549287E5 STR R9,[R7, #+596] 6454 SUBPROC((void*)WriteDefSettings); \ ??LoadOnKey_11: \ 00000190 710100EF SWI +369 6455 break; 6456 } 6457 } 6458 return 0; \ ??LoadOnKey_1: \ 00000194 0000A0E3 MOV R0,#+0 \ 00000198 FE8FBDE8 POP {R1-R11,PC} ;; return 6459 } 6460 6461 \ In segment CODE, align 4, keep-with-next 6462 int method5(MAIN_GUI *data,GUI_MSG *msg) 6463 { \ method5: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0140A0E1 MOV R4,R1 6464 DirectRedrawGUI(); \ 00000008 3F0100EF SWI +319 6465 #ifndef DEBUG 6466 if(ShowLoadScreen) \ 0000000C ........ LDR R0,??DataTable275 ;; screen3 + 80 \ 00000010 000090E5 LDR R0,[R0, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0400A0E1 MOV R0,R4 \ 0000001C 0100000A BEQ ??method5_0 6467 return LoadOnKey(msg); \ 00000020 1040BDE8 POP {R4,LR} ;; Pop \ 00000024 ........ B LoadOnKey ;; tailcall 6468 else 6469 ClOnKey(msg); \ ??method5_0: \ 00000028 ........ BL ClOnKey 6470 6471 return(0); \ 0000002C 0000A0E3 MOV R0,#+0 \ 00000030 1080BDE8 POP {R4,PC} ;; return 6472 #else 6473 return LoadOnKey(msg); 6474 #endif 6475 /* 6476 if(msg->gbsmsg->msg==LONG_PRESS || msg->gbsmsg->msg==KEY_DOWN) 6477 { 6478 switch(msg->gbsmsg->submess) 6479 { 6480 case UP_BUTTON: MoveUp(); break; 6481 case DOWN_BUTTON: MoveDown(); break; 6482 } 6483 }*/ 6484 6485 } 6486 \ In segment CODE, align 4, keep-with-next 6487 int method8(void){return(0);} \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return \ In segment CODE, align 4, keep-with-next 6488 int method9(void){return(0);} \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 6489 6490 6491 6492 const void * const gui_methods[11]={ 6493 (void *)method0, //Redraw 6494 (void *)method1, //Create 6495 (void *)method2, //Close 6496 (void *)method3, //Focus 6497 (void *)method4, //Unfocus 6498 (void *)method5, //OnKey 6499 0, 6500 (void *)kill_data, //method7, //Destroy 6501 (void *)method8, 6502 (void *)method9, 6503 0 6504 }; 6505 6506 6507 6508 int checkGui(int id); 6509 #define idlegui_id(icsm) (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 6510 6511 int _to_develop=0; \ In segment CODE, align 4, keep-with-next 6512 int my_keyhook(int key, int m) 6513 { \ my_keyhook: \ 00000000 70402DE9 PUSH {R4-R6,LR} 6514 if(m==KEY_DOWN) \ 00000004 ........ LDR R4,??DataTable276 ;; screen3 \ 00000008 0050A0E1 MOV R5,R0 \ 0000000C 9300A0E3 MOV R0,#+147 \ 00000010 400F80E3 ORR R0,R0,#0x100 \ 00000014 000051E1 CMP R1,R0 \ 00000018 1000001A BNE ??my_keyhook_0 6515 { 6516 #ifdef ELKA 6517 if ((key==CAMERA_BUTTON)&&(!IsUnlocked())) 6518 { 6519 GBS_StopTimer(&away_tmr); 6520 msg_away_timer=AUTO_ENGADE*12; 6521 away_timer(); 6522 main_d=1; 6523 } 6524 else 6525 { 6526 #endif 6527 if(Reset_timer) \ 0000001C 88009FE5 LDR R0,??my_keyhook_1 ;; Reset_timer \ 00000020 000090E5 LDR R0,[R0, #+0] \ 00000024 000050E3 CMP R0,#+0 \ 00000028 7080BD08 POPEQ {R4-R6,PC} 6528 { 6529 msg_away_timer=0; \ 0000002C 0050A0E3 MOV R5,#+0 \ 00000030 2C5084E5 STR R5,[R4, #+44] 6530 away_m=0; \ 00000034 ........ LDR R4,??DataTable290 ;; i_rc \ 00000038 085384E5 STR R5,[R4, #+776] 6531 if(change_back_status) \ 0000003C 100394E5 LDR R0,[R4, #+784] \ 00000040 000050E3 CMP R0,#+0 \ 00000044 7080BD08 POPEQ {R4-R6,PC} 6532 { 6533 CurrentStatus=status_rem; \ 00000048 0C0394E5 LDR R0,[R4, #+780] \ 0000004C FC0284E5 STR R0,[R4, #+764] 6534 set_my_status(); \ 00000050 ........ BL set_my_status 6535 change_back_status=0; \ 00000054 105384E5 STR R5,[R4, #+784] \ 00000058 0000A0E3 MOV R0,#+0 \ 0000005C 7080BDE8 POP {R4-R6,PC} 6536 } 6537 } 6538 #ifdef ELKA 6539 } 6540 #endif 6541 } 6542 6543 if(m==LONG_PRESS) \ ??my_keyhook_0: \ 00000060 020080E2 ADD R0,R0,#+2 \ 00000064 000051E1 CMP R1,R0 \ 00000068 0D00001A BNE ??my_keyhook_2 6544 { 6545 void *icsm=FindCSMbyID(CSM_root()->idle_id); \ 0000006C 068100EF SWI +33030 \ 00000070 040090E5 LDR R0,[R0, #+4] \ 00000074 080100EF SWI +264 \ 00000078 0060A0E1 MOV R6,R0 6546 if( key==VOL_DOWN_BUTTON && IsUnlocked() && !(checkGui(idlegui_id(icsm))) ) \ 0000007C 0E0055E3 CMP R5,#+14 \ 00000080 0700001A BNE ??my_keyhook_2 \ 00000084 430000EF SWI +67 \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 7080BD08 POPEQ {R4-R6,PC} \ 00000090 2C0096E5 LDR R0,[R6, #+44] \ 00000094 ........ BL checkGui \ 00000098 000050E3 CMP R0,#+0 6547 { 6548 _to_develop=1; \ 0000009C 0100A003 MOVEQ R0,#+1 \ 000000A0 6C008405 STREQ R0,[R4, #+108] 6549 //to_develop(); 6550 } 6551 } 6552 return 0; \ ??my_keyhook_2: \ 000000A4 0000A0E3 MOV R0,#+0 \ 000000A8 7080BDE8 POP {R4-R6,PC} ;; return \ ??my_keyhook_1: \ 000000AC ........ DC32 Reset_timer 6553 } \ In segment DATA_C, align 4, align-sorted 6554 /* 6555 int mode_enter; 6556 int mode; 6557 6558 int my_keyhook(int submsg, int msg) 6559 { 6560 if(Reset_timer) 6561 { 6562 msg_away_timer=0; 6563 away_m=0; 6564 if(change_back_status) 6565 { 6566 CurrentStatus=status_rem; 6567 set_my_status(); 6568 change_back_status=0; 6569 } 6570 } 6571 if (submsg!=VOL_DOWN_BUTTON) return(0); 6572 switch(msg) 6573 { 6574 case KEY_DOWN: 6575 if (mode_enter==2) 6576 { 6577 GBS_SendMessage(MMI_CEPID,KEY_UP,VOL_DOWN_BUTTON); 6578 return (0); 6579 } 6580 mode_enter=0; 6581 return (2); 6582 case KEY_UP: 6583 if (mode==1)mode=0; 6584 if (mode_enter==0) 6585 { 6586 mode_enter=2; 6587 GBS_SendMessage(MMI_CEPID,KEY_DOWN,VOL_DOWN_BUTTON); 6588 return (2); 6589 } 6590 if (mode_enter==2) 6591 { 6592 mode_enter=0; 6593 return (0); 6594 } 6595 mode_enter=0; 6596 return (2); 6597 case LONG_PRESS: 6598 mode_enter=1; 6599 if(mode==0) 6600 { 6601 void *icsm; 6602 icsm=FindCSMbyID(CSM_root()->idle_id); 6603 if(!(checkGui(idlegui_id(icsm))) && IsUnlocked()) 6604 { 6605 to_develop(); 6606 } 6607 } 6608 mode=1; 6609 break; 6610 } 6611 return(2); 6612 }*/ 6613 const RECT Canvas={0,0,0,0}; \ Canvas: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ percent_s: \ 00000008 257300 DC8 "%s" \ percent_d: \ 0000000B 256400 DC8 "%d" \ _d: \ 0000000E 256400 DC8 "%d" \ 00000011 000000 DC8 0, 0, 0 \ 00000014 536F756E6420 DC8 "Sound 0n" \ 306E00 \ 0000001D 000000 DC8 0, 0, 0 \ 00000020 536F756E6420 DC8 "Sound Off" \ 4F666600 \ 0000002A 0000 DC8 0, 0 \ 0000002C 566962726120 DC8 "Vibra On" \ 4F6E00 \ 00000035 000000 DC8 0, 0, 0 \ 00000038 566962726120 DC8 "Vibra Off" \ 4F666600 \ 00000042 0000 DC8 0, 0 \ 00000044 C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\352\353\376\367\345\355" \ E2EAEBFEF7E5 \ ED00 \ 00000052 0000 DC8 0, 0 \ 00000054 C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\373\352\353\376\367\345\355" \ E2FBEAEBFEF7 \ E5ED00 \ 00000063 00 DC8 0 \ 00000064 566962726120 DC8 "Vibra rem On" \ 72656D204F6E \ 00 \ 00000071 000000 DC8 0, 0, 0 \ 00000074 566962726120 DC8 "Vibra rem Off" \ 72656D204F66 \ 6600 \ 00000082 0000 DC8 0, 0 \ 00000084 416C6C206368 DC8 "All chat clear!" \ 617420636C65 \ 61722100 \ 00000094 44656661756C DC8 "Default show x-status" \ 742073686F77 \ 20782D737461 \ 74757300 \ 000000AA 0000 DC8 0, 0 \ 000000AC 44656661756C DC8 "Default show time" \ 742073686F77 \ 2074696D6500 \ 000000BE 0000 DC8 0, 0 \ 000000C0 57616974696E DC8 "Waiting for GPRS up..." \ 6720666F7220 \ 475052532075 \ 702E2E2E00 \ 000000D7 00 DC8 0 \ 000000D8 436F6E6E6563 DC8 "Connect to %s:%d" \ 7420746F2025 \ 733A256400 \ 000000E9 000000 DC8 0, 0, 0 \ 000000EC 0A436F6E6E65 DC8 "\012Connect by IP!" \ 637420627920 \ 49502100 \ 000000FC 53656E642044 DC8 "Send DNR..." \ 4E522E2E2E00 \ 00000108 444E52204552 DC8 "DNR ERROR %d!" \ 524F52202564 \ 2100 \ 00000116 0000 DC8 0, 0 \ 00000118 444E52204F6B DC8 "DNR Ok, connecting..." \ 2C20636F6E6E \ 656374696E67 \ 2E2E2E00 \ 0000012E 0000 DC8 0, 0 \ 00000130 CDE5E2EEE7EC DC8 "\315\345\342\356\347\354\356\346\355\356 \357\356\344\352\353\376\367\350\362\374\361\377!" \ EEE6EDEE20EF \ EEE4EAEBFEF7 \ E8F2FCF1FF21 \ 00 \ 00000149 000000 DC8 0, 0, 0 \ 0000014C CDE5E2EEE7EC DC8 "\315\345\342\356\347\354\356\346\355\356 \361\356\347\344\340\362\374 \361\356\352\345\362, \357\345\360\345\347\340\357\363\361\352 GPRS!" \ EEE6EDEE20F1 \ EEE7E4E0F2FC \ 20F1EEEAE5F2 \ 2C20EFE5F0E5 \ E7E0EFF3F1EA \ 204750525321 \ 00 \ 00000177 00 DC8 0 \ 00000178 D1E5F0E2E5F0 DC8 "\321\345\360\342\345\360 \355\345 \355\340\351\344\345\355!" \ 20EDE520EDE0 \ E9E4E5ED2100 \ 0000018A 0000 DC8 0, 0 \ 0000018C 426164207061 DC8 "Bad packet" \ 636B657400 \ 00000197 00 DC8 0 \ 00000198 534325643A20 DC8 "SC%d: %04X" \ 2530345800 \ 000001A3 00 DC8 0 \ 000001A4 4552523A2025 DC8 "ERR: %s" \ 7300 \ 000001AC 75696E256400 DC8 "uin%d" \ 000001B2 0000 DC8 0, 0 \ 000001B4 4D534725643A DC8 "MSG%d: %s" \ 20257300 \ 000001BE 0000 DC8 0, 0 \ 000001C0 50696E672025 DC8 "Ping %d-%d seconds!" \ 642D25642073 \ 65636F6E6473 \ 2100 \ 000001D4 50696E673A20 DC8 "Ping: %d sec" \ 256420736563 \ 00 \ 000001E1 000000 DC8 0, 0, 0 \ 000001E4 2025733A2025 DC8 " %s: %02d:%02d:%02d" \ 3032643A2530 \ 32643A253032 \ 6400 \ 000001F8 537461747573 DC8 "Status change" \ 206368616E67 \ 6500 \ 00000206 0000 DC8 0, 0 \ 00000208 5B25733A2025 DC8 "[%s: %s]\012" \ 735D0A00 \ 00000212 0000 DC8 0, 0 \ 00000214 2825642F2564 DC8 "(%d/%d)" \ 2900 \ 0000021C 257325632563 DC8 "%s%c%c(%d/%d)" \ 2825642F2564 \ 2900 \ 0000022A 0000 DC8 0, 0 \ 0000022C 25735C6C6F67 DC8 "%s\\logs.txt" \ 732E74787400 \ 00000238 556E72656164 DC8 "Unread: %d" \ 3A20256400 \ 00000243 00 DC8 0 \ 00000244 4E6174494351 DC8 "NatICQ config updated!" \ 20636F6E6669 \ 672075706461 \ 7465642100 \ 0000025B 00 DC8 0 \ 0000025C 257332323430 DC8 "%s2240.png" \ 2E706E6700 \ 00000267 00 DC8 0 \ 00000268 475052532075 DC8 "GPRS up, wait 10 sec..." \ 702C20776169 \ 742031302073 \ 65632E2E2E00 \ 00000280 54727920746F DC8 "Try to login..." \ 206C6F67696E \ 2E2E2E00 \ 00000290 CDE520E220F1 DC8 "\315\345 \342 \361\357\350\361\352\345" \ EFE8F1EAE500 \ 0000029C 4C6F6F706261 DC8 "Loopback" \ 636B00 \ 000002A5 000000 DC8 0, 0, 0 \ 000002A8 CDE5E2E5F0ED DC8 "\315\345\342\345\360\355\356\345 \361\356\356\341\371\345\355\350\345 ENIP_SOCK_CONNECTED!" \ EEE520F1EEEE \ E1F9E5EDE8E5 \ 20454E49505F \ 534F434B5F43 \ 4F4E4E454354 \ 45442100 \ 000002D0 CDE5E2E5F0ED DC8 "\315\345\342\345\360\355\356\345 \361\356\356\341\371\345\355\350\345 ENIP_DATA_READ" \ EEE520F1EEEE \ E1F9E5EDE8E5 \ 20454E49505F \ 444154415F52 \ 45414400 \ 000002F2 0000 DC8 0, 0 \ 000002F4 446973636F6E DC8 "Disconnected, %d bytes not sended!" \ 6E6563746564 \ 2C2025642062 \ 79746573206E \ 6F742073656E \ 6465642100 \ 00000317 00 DC8 0 \ 00000318 25730A526563 DC8 "%s\012Reconect after %d second..." \ 6F6E65637420 \ 616674657220 \ 256420736563 \ 6F6E642E2E2E \ 00 \ 00000337 00 DC8 0 \ 00000338 50696E67204E DC8 "Ping None" \ 6F6E6500 \ 00000342 0000 DC8 0, 0 \ 00000344 C2E2E5E4E8F2 DC8 "\302\342\345\344\350\362\345 UIN/\357\340\360\356\353\374!" \ E52055494E2F \ EFE0F0EEEBFC \ 2100 \ ipc_my_name: \ 00000358 4E6174494351 DC8 "NatICQ" \ 00 \ 0000035F 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000036F 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000 \ ipc_xtask_name: \ 00000378 585461736B00 DC8 "XTask" \ 0000037E 0000 DC8 0, 0 \ x_status_change: \ 00000380 582D53746174 DC8 "X-Status change" \ 757320636861 \ 6E676500 \ gui_methods: \ 00000390 ............ DC32 method0, method1, method2, method3, method4, method5, 0H \ ............ \ ............ \ ............ \ 00000000 \ 000003AC ............ DC32 kill_data, method8, method9, 0H \ ............ \ 00000000 \ In segment DATA_C, align 4, align-sorted \ ipc_test_name: \ 00000000 7465737400 DC8 "test" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_OFFLINE: \ 00000000 4F66666C696E DC8 "Offline" \ 6500 \ In segment DATA_C, align 4, align-sorted \ S_INVISIBLE: \ 00000000 496E76697369 DC8 "Invisible" \ 626C6500 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_AWAY: \ 00000000 4177617900 DC8 "Away" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_NA: \ 00000000 4E2F4100 DC8 "N/A" \ In segment DATA_C, align 4, align-sorted \ S_OCCUPIED: \ 00000000 4F6363757069 DC8 "Occupied" \ 656400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_DND: \ 00000000 444E4400 DC8 "DND" \ In segment DATA_C, align 4, align-sorted \ S_ONLINE: \ 00000000 4F6E6C696E65 DC8 "Online" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ S_FFC: \ 00000000 46464300 DC8 "FFC" \ In segment DATA_C, align 4, align-sorted \ icons_names: \ 00000000 ............ DC32 `?`, `?` \ .... \ 00000008 ............ DC32 `?`, `?` \ .... \ 00000010 ............ DC32 `?`, `?` \ .... \ 00000018 ............ DC32 `?`, `?` \ .... \ 00000020 ............ DC32 `?`, `?` \ .... \ 00000028 ............ DC32 `?`, `?` \ .... \ 00000030 ............ DC32 `?`, `?` \ .... \ 00000038 ............ DC32 `?`, `?` \ .... \ 00000040 ............ DC32 `?`, `?` \ .... \ 00000048 ............ DC32 `?`, `?` \ .... \ 00000050 ............ DC32 `?`, `?` \ .... \ 00000058 ............ DC32 `?`, `?` \ .... \ 00000060 ............ DC32 `?`, `?` \ .... \ 00000068 ............ DC32 `?`, `?` \ .... \ 00000070 ............ DC32 `?`, `?` \ .... \ 00000078 ............ DC32 `?`, `?` \ .... \ 00000080 ........ DC32 `?` \ In segment DATA_C, align 4, align-sorted \ input_awaymsg_desc: \ 00000000 01000000.... DC32 1, input_awaymsg_onkey, input_awaymsg_ghook, input_awaymsg_locret \ ............ \ ........ \ 00000010 00000000.... DC32 0, input_awaymsg_skt \ .... \ 00000018 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000020 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] 6622 // main_gui->gui.flag30=2; 6623 main_gui->gui.methods=(void *)gui_methods; \ 0000004C E40F84E2 ADD R0,R4,#+912 \ 00000050 040086E5 STR R0,[R6, #+4] 6624 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 00000054 158000EF SWI +32789 \ 00000058 200086E5 STR R0,[R6, #+32] 6625 csm->csm.state=0; \ 0000005C 107085E5 STR R7,[R5, #+16] 6626 csm->csm.unk1=0; \ 00000060 147085E5 STR R7,[R5, #+20] 6627 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,??DataTable290 ;; i_rc \ 00000074 600285E5 STR R0,[R5, #+608] 6628 ews=AllocWS(16384); \ 00000078 400CA0E3 MOV R0,#+16384 \ 0000007C 250100EF SWI +293 \ 00000080 040385E5 STR R0,[R5, #+772] 6629 // MutexCreate(&contactlist_mtx); 6630 DNR_TRIES=3; \ 00000084 ........ LDR R0,??DataTable279 ;; screen3 + 72 \ 00000088 0310A0E3 MOV R1,#+3 \ 0000008C 001080E5 STR R1,[R0, #+0] 6631 // SUBPROC((void *)InitSmiles); 6632 // SUBPROC((void *)create_connect); 6633 wsBuffer=AllocWS(4096); \ 00000090 400DA0E3 MOV R0,#+4096 \ 00000094 250100EF SWI +293 6634 char fullname[256]; 6635 snprintf(fullname,127,"%s\\logs.txt",TEMPLATES_PATH); \ 00000098 ........ LDR R3,??DataTable280 ;; TEMPLATES_PATH \ 0000009C 340285E5 STR R0,[R5, #+564] \ 000000A0 8B2F84E2 ADD R2,R4,#+556 \ 000000A4 7F10A0E3 MOV R1,#+127 \ 000000A8 0D00A0E1 MOV R0,SP \ 000000AC 1B0100EF SWI +283 6636 unlink(fullname,errornumber); \ 000000B0 481495E5 LDR R1,[R5, #+1096] \ 000000B4 0D00A0E1 MOV R0,SP \ 000000B8 6B0100EF SWI +363 6637 OneSecTmr(); \ 000000BC ........ BL OneSecTmr 6638 /* 6639 if(ParseUINS()!=0) 6640 { 6641 USE_ADD_UIN=1; 6642 InitXStatusesImg(); 6643 }*/ 6644 6645 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 000000C0 ........ LDR R2,??DataTable281 ;; process_active_timer \ 000000C4 871EA0E3 MOV R1,#+2160 \ 000000C8 E800A0E3 MOV R0,#+232 \ 000000CC 740D80E3 ORR R0,R0,#0x1D00 \ 000000D0 050080E0 ADD R0,R0,R5 \ 000000D4 4D0000EF SWI +77 6646 6647 // if(!USE_ADD_UIN) 6648 // { 6649 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000000D8 ........ LDR R0,??DataTable282 ;; UIN \ 000000DC 0B1084E2 ADD R1,R4,#+11 \ 000000E0 002090E5 LDR R2,[R0, #+0] \ 000000E4 5E00A0E3 MOV R0,#+94 \ 000000E8 C00F80E3 ORR R0,R0,#0x300 \ 000000EC 040080E0 ADD R0,R0,R4 \ 000000F0 160000EF SWI +22 6650 gipc.name_to=ipc_my_name; \ 000000F4 D60FA0E3 MOV R0,#+856 \ 000000F8 041080E0 ADD R1,R0,R4 \ 000000FC 8C1085E5 STR R1,[R5, #+140] 6651 gipc.name_from=ipc_my_name; \ 00000100 040080E0 ADD R0,R0,R4 \ 00000104 900085E5 STR R0,[R5, #+144] 6652 gipc.data=(void *)-1; \ 00000108 0700E0E1 MVN R0,R7 \ 0000010C 940085E5 STR R0,[R5, #+148] 6653 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 00000110 8C3085E2 ADD R3,R5,#+140 \ 00000114 0120A0E3 MOV R2,#+1 \ 00000118 B010A0E3 MOV R1,#+176 \ 0000011C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000120 0900A0E3 MOV R0,#+9 \ 00000124 420C80E3 ORR R0,R0,#0x4200 \ 00000128 000100EF SWI +256 6654 //} 6655 /* 6656 InitXStatusesImg(); 6657 //InitSmiles(); Это вызовется из InitXStatusesImg 6658 create_connect(); 6659 silenthide=1; 6660 gipc.name_to=ipc_xtask_name; 6661 gipc.name_from=ipc_my_name; 6662 gipc.data=0; 6663 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); 6664 */ 6665 } \ 0000012C 40DF8DE2 ADD SP,SP,#+256 \ 00000130 F080BDE8 POP {R4-R7,PC} ;; return \ ??maincsm_oncreate_0: \ 00000134 ........ DC32 Canvas 6666 6667 /* 6668 void FreeTimers() 6669 { 6670 6671 } 6672 */ \ In segment CODE, align 4, keep-with-next 6673 void maincsm_onclose(CSM_RAM *csm) 6674 { \ maincsm_onclose: \ 00000000 10402DE9 PUSH {R4,LR} 6675 WriteDefSettings(); 6676 // FreeTimers(); 6677 GBS_DelTimer(&tmr_active); \ 00000004 ........ LDR R4,??DataTable290 ;; i_rc \ 00000008 ........ BL WriteDefSettings \ 0000000C E800A0E3 MOV R0,#+232 \ 00000010 740D80E3 ORR R0,R0,#0x1D00 \ 00000014 040080E0 ADD R0,R0,R4 \ 00000018 8C0100EF SWI +396 6678 GBS_DelTimer(&tmr_vibra); \ 0000001C C800A0E3 MOV R0,#+200 \ 00000020 740D80E3 ORR R0,R0,#0x1D00 \ 00000024 040080E0 ADD R0,R0,R4 \ 00000028 8C0100EF SWI +396 6679 GBS_DelTimer(&reconnect_tmr); \ 0000002C D800A0E3 MOV R0,#+216 \ 00000030 740D80E3 ORR R0,R0,#0x1D00 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 8C0100EF SWI +396 6680 GBS_DelTimer(&tmr_illumination); \ 0000003C B800A0E3 MOV R0,#+184 \ 00000040 740D80E3 ORR R0,R0,#0x1D00 \ 00000044 040080E0 ADD R0,R0,R4 \ 00000048 8C0100EF SWI +396 6681 GBS_DelTimer(&tm22); \ 0000004C 5C00A0E3 MOV R0,#+92 \ 00000050 880D80E3 ORR R0,R0,#0x2200 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 8C0100EF SWI +396 6682 #ifdef ELKA 6683 GBS_DelTimer(&sli_tmr); 6684 #endif 6685 GBS_DelTimer(&remind_tmr); \ 0000005C 0800A0E3 MOV R0,#+8 \ 00000060 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000064 040080E0 ADD R0,R0,R4 \ 00000068 8C0100EF SWI +396 6686 GBS_DelTimer(&ping_tmr); \ 0000006C 7000A0E3 MOV R0,#+112 \ 00000070 600D80E3 ORR R0,R0,#0x1800 \ 00000074 040080E0 ADD R0,R0,R4 \ 00000078 8C0100EF SWI +396 6687 GBS_DelTimer(&uptime_tmr); \ 0000007C 1800A0E3 MOV R0,#+24 \ 00000080 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000084 040080E0 ADD R0,R0,R4 \ 00000088 8C0100EF SWI +396 6688 GBS_DelTimer(&autoChangeStatus); \ 0000008C F800A0E3 MOV R0,#+248 \ 00000090 680D80E3 ORR R0,R0,#0x1A00 \ 00000094 040080E0 ADD R0,R0,R4 \ 00000098 8C0100EF SWI +396 6689 #ifdef NEWSGOLD 6690 GBS_DelTimer(&tracktmr); \ 0000009C 2800A0E3 MOV R0,#+40 \ 000000A0 6C0D80E3 ORR R0,R0,#0x1B00 \ 000000A4 040080E0 ADD R0,R0,R4 \ 000000A8 8C0100EF SWI +396 6691 // GBS_DelTimer(&scrsTmr); 6692 #endif 6693 GBS_DelTimer(&incs2); \ 000000AC FC00A0E3 MOV R0,#+252 \ 000000B0 840D80E3 ORR R0,R0,#0x2100 \ 000000B4 040080E0 ADD R0,R0,R4 \ 000000B8 8C0100EF SWI +396 6694 GBS_DelTimer(&develop); \ 000000BC 8400A0E3 MOV R0,#+132 \ 000000C0 800D80E3 ORR R0,R0,#0x2000 \ 000000C4 040080E0 ADD R0,R0,R4 \ 000000C8 8C0100EF SWI +396 6695 GBS_DelTimer(&away_tmr); \ 000000CC E800A0E3 MOV R0,#+232 \ 000000D0 680D80E3 ORR R0,R0,#0x1A00 \ 000000D4 040080E0 ADD R0,R0,R4 \ 000000D8 8C0100EF SWI +396 6696 FreeWS(wsBuffer); \ 000000DC 340294E5 LDR R0,[R4, #+564] \ 000000E0 290100EF SWI +297 6697 6698 SetVibration(0); \ 000000E4 0000A0E3 MOV R0,#+0 \ 000000E8 7C0000EF SWI +124 6699 FreeTemplates(); \ 000000EC ........ BL FreeTemplates 6700 cmdFree(); \ 000000F0 ........ BL cmdFree 6701 #ifdef kluchnik 6702 FreeBotMessage(); 6703 #endif 6704 FreeCLIST(); \ 000000F4 ........ _BLF FreeCLIST,??FreeCLIST??rA 6705 free_ICONS(); \ 000000F8 ........ BL free_ICONS 6706 FreeStatusToIMGHDR(); \ 000000FC ........ BL FreeStatusToIMGHDR 6707 FreeXStatusText(); \ 00000100 ........ _BLF FreeXStatusText,??FreeXStatusText??rA 6708 FreeWS(ews); \ 00000104 040394E5 LDR R0,[R4, #+772] \ 00000108 290100EF SWI +297 6709 SUBPROC((void *)PrintLibFree); \ 0000010C 34009FE5 LDR R0,??maincsm_onclose_0 ;; PrintLibFree \ 00000110 710100EF SWI +369 6710 SUBPROC((void *)FreeSmiles); \ 00000114 30009FE5 LDR R0,??maincsm_onclose_0+0x4 ;; FreeSmiles \ 00000118 710100EF SWI +369 6711 SUBPROC((void *)FreeXStatusesImg); \ 0000011C 2C009FE5 LDR R0,??maincsm_onclose_0+0x8 ;; FreeXStatusesImg \ 00000120 710100EF SWI +369 6712 // FreeXStatusesImg(); 6713 RemoveKeybMsgHook((void *)my_keyhook); \ 00000124 ........ LDR R0,??DataTable284 ;; my_keyhook \ 00000128 2D0100EF SWI +301 6714 SUBPROC((void *)end_socket); \ 0000012C ........ LDR R0,??DataTable285 ;; end_socket \ 00000130 710100EF SWI +369 6715 SUBPROC((void *)ClearSendQ); \ 00000134 ........ LDR R0,??DataTable324 ;; ClearSendQ \ 00000138 710100EF SWI +369 6716 SUBPROC((void *)ElfKiller); \ 0000013C ........ LDR R0,??DataTable287 ;; ElfKiller \ 00000140 710100EF SWI +369 6717 } \ 00000144 1080BDE8 POP {R4,PC} ;; return \ ??maincsm_onclose_0: \ 00000148 ........ DC32 PrintLibFree \ 0000014C ........ DC32 FreeSmiles \ 00000150 ........ DC32 FreeXStatusesImg 6718 \ In segment CODE, align 4, keep-with-next 6719 void do_reconnect(void) 6720 { 6721 if (is_gprs_online) \ do_reconnect: \ 00000000 ........ LDR R0,??DataTable293 ;; screen3 \ 00000004 00402DE9 PUSH {LR} \ 00000008 3C1090E5 LDR R1,[R0, #+60] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 6722 { 6723 DNR_TRIES=3; \ 00000014 0310A0E3 MOV R1,#+3 \ 00000018 481080E5 STR R1,[R0, #+72] 6724 SUBPROC((void*)create_connect); \ 0000001C ........ LDR R0,??DataTable289 ;; create_connect \ 00000020 710100EF SWI +369 6725 } 6726 } \ 00000024 0080BDE8 POP {PC} ;; return 6727 \ In segment CODE, align 4, keep-with-next 6728 void CheckDoubleRun(void) 6729 { \ CheckDoubleRun: \ 00000000 10402DE9 PUSH {R4,LR} 6730 int csm_id; 6731 if ((csm_id=(int)(gipc.data))!=-1) \ 00000004 ........ LDR R4,??DataTable290 ;; i_rc \ 00000008 940094E5 LDR R0,[R4, #+148] \ 0000000C 010070E3 CMN R0,#+1 \ 00000010 1100000A BEQ ??CheckDoubleRun_0 6732 { 6733 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable294 ;; Canvas 6734 gipc.name_from=ipc_my_name; 6735 gipc.data=(void *)csm_id; \ 00000018 940084E5 STR R0,[R4, #+148] \ 0000001C DE2F81E2 ADD R2,R1,#+888 \ 00000020 8C2084E5 STR R2,[R4, #+140] \ 00000024 D61F81E2 ADD R1,R1,#+856 \ 00000028 901084E5 STR R1,[R4, #+144] 6736 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 0000002C 8C3084E2 ADD R3,R4,#+140 \ 00000030 0220A0E3 MOV R2,#+2 \ 00000034 B010A0E3 MOV R1,#+176 \ 00000038 DE1C81E3 ORR R1,R1,#0xDE00 \ 0000003C 0900A0E3 MOV R0,#+9 \ 00000040 420C80E3 ORR R0,R0,#0x4200 \ 00000044 000100EF SWI +256 6737 LockSched(); \ 00000048 460100EF SWI +326 6738 CloseCSM(maincsm_id); \ 0000004C 5C0294E5 LDR R0,[R4, #+604] \ 00000050 FC0100EF SWI +508 6739 //ShowMSG(1,(int)LG_ALREADY_STARTED); 6740 UnlockSched(); \ 00000054 470100EF SWI +327 \ 00000058 1080BDE8 POP {R4,PC} 6741 } 6742 else 6743 // if(!USE_ADD_UIN) 6744 { 6745 SUBPROC((void*)StatusToIMGHDR); \ ??CheckDoubleRun_0: \ 0000005C 14009FE5 LDR R0,??CheckDoubleRun_1 ;; StatusToIMGHDR \ 00000060 710100EF SWI +369 6746 SUBPROC((void*)XStatusToIMGHDR); \ 00000064 10009FE5 LDR R0,??CheckDoubleRun_1+0x4 ;; XStatusToIMGHDR \ 00000068 710100EF SWI +369 6747 InitXStatusesImg(); \ 0000006C ........ _BLF InitXStatusesImg,??InitXStatusesImg??rA 6748 // XStatusToIMGHDR(); 6749 //InitSmiles(); Это вызовется из InitXStatusesImg 6750 create_connect(); \ 00000070 ........ BL create_connect 6751 } 6752 /*else 6753 { 6754 InitXStatusesImg(); 6755 USE_ADD_UIN=1; 6756 }*/ 6757 6758 } \ 00000074 1080BDE8 POP {R4,PC} ;; return \ ??CheckDoubleRun_1: \ 00000078 ........ DC32 StatusToIMGHDR \ 0000007C ........ DC32 XStatusToIMGHDR 6759 6760 6761 6762 //------------------------------------------------------------// 6763 \ In segment CODE, align 4, keep-with-next 6764 int checkGui(int id) 6765 { \ checkGui: \ 00000000 10402DE9 PUSH {R4,LR} 6766 int retval = 0; \ 00000004 0040A0E3 MOV R4,#+0 6767 if (IsGuiOnTop(id)) \ 00000008 350100EF SWI +309 \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0A00000A BEQ ??checkGui_0 6768 { 6769 GUI* igui = GetTopGUI(); \ 00000014 4D0100EF SWI +333 6770 if (igui) \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 0700000A BEQ ??checkGui_0 6771 { 6772 #ifdef ELKA 6773 canvasdata = BuildCanvas(); 6774 retval = 1; 6775 #else 6776 void *idata = GetDataOfItemByID(igui, 2); \ 00000020 0210A0E3 MOV R1,#+2 \ 00000024 4F0100EF SWI +335 6777 if (idata) \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 0300000A BEQ ??checkGui_0 6778 { 6779 canvasdata = ((void **)idata)[DISPLACE_OF_IDLECANVAS / 4]; \ 00000030 10109FE5 LDR R1,??checkGui_1 ;; i_rc + 556 \ 00000034 180090E5 LDR R0,[R0, #+24] 6780 retval = 1; \ 00000038 0140A0E3 MOV R4,#+1 \ 0000003C 000081E5 STR R0,[R1, #+0] 6781 } 6782 #endif 6783 } 6784 } 6785 return retval; \ ??checkGui_0: \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1080BDE8 POP {R4,PC} ;; return \ ??checkGui_1: \ 00000048 ........ DC32 i_rc + 556 6786 } 6787 6788 6789 //-------------------------------------------------------------// 6790 #define IPC_GAME 7 6791 6792 typedef struct{ 6793 unsigned long uin; 6794 char *msg; 6795 }IPCmsg; 6796 \ In segment CODE, align 4, keep-with-next 6797 int maincsm_onmessage(CSM_RAM *data,GBS_MSG *msg) 6798 { \ maincsm_onmessage: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} 6799 6800 #ifdef ELKA 6801 if (total_unread) SLI_On(); 6802 #endif 6803 // char ss[100]; 6804 MAIN_CSM *csm=(MAIN_CSM*)data; 6805 { 6806 //IPC 6807 if (msg->msg==MSG_IPC) \ 00000004 ........ LDR R5,??DataTable328 ;; i_rc \ 00000008 20D04DE2 SUB SP,SP,#+32 \ 0000000C ........ LDR R6,??DataTable293 ;; screen3 \ 00000010 ........ LDR R8,??DataTable294 ;; Canvas \ 00000014 0140A0E1 MOV R4,R1 \ 00000018 0810A0E3 MOV R1,#+8 \ 0000001C 781D81E3 ORR R1,R1,#0x1E00 \ 00000020 051081E0 ADD R1,R1,R5 \ 00000024 04108DE5 STR R1,[SP, #+4] \ 00000028 040094E5 LDR R0,[R4, #+4] \ 0000002C 0070A0E3 MOV R7,#+0 \ 00000030 B010A0E3 MOV R1,#+176 \ 00000034 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000038 010050E1 CMP R0,R1 \ 0000003C 9C00001A BNE ??maincsm_onmessage_2 6808 { 6809 IPC_REQ *ipc; 6810 if ((ipc=(IPC_REQ*)msg->data0)) \ 00000040 0C9094E5 LDR R9,[R4, #+12] \ 00000044 000059E3 CMP R9,#+0 \ 00000048 9900000A BEQ ??maincsm_onmessage_2 6811 { 6812 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 0000004C 000099E5 LDR R0,[R9, #+0] \ 00000050 D6AFA0E3 MOV R10,#+856 \ 00000054 08108AE0 ADD R1,R10,R8 \ 00000058 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 0000005C 000050E3 CMP R0,#+0 \ 00000060 9300001A BNE ??maincsm_onmessage_2 6813 { 6814 switch (msg->submess) \ 00000064 081094E5 LDR R1,[R4, #+8] \ 00000068 040099E5 LDR R0,[R9, #+4] \ 0000006C 011041E2 SUB R1,R1,#+1 \ 00000070 050051E3 CMP R1,#+5 \ 00000074 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 6815 { 6816 case IPC_CHECK_DOUBLERUN: 6817 //Если приняли свое собственное сообщение, значит запускаем чекер 6818 if (ipc->name_from==ipc_my_name) SUBPROC((void *)CheckDoubleRun); \ ??maincsm_onmessage_3: \ 0000008C 08108AE0 ADD R1,R10,R8 \ 00000090 010050E1 CMP R0,R1 \ 00000094 0200001A BNE ??maincsm_onmessage_4 \ 00000098 FC0A9FE5 LDR R0,??maincsm_onmessage_5 ;; CheckDoubleRun \ 0000009C 710100EF SWI +369 \ 000000A0 830000EA B ??maincsm_onmessage_2 6819 else ipc->data=(void *)maincsm_id; \ ??maincsm_onmessage_4: \ 000000A4 5C0295E5 LDR R0,[R5, #+604] \ 000000A8 080089E5 STR R0,[R9, #+8] \ 000000AC 800000EA B ??maincsm_onmessage_2 6820 break; 6821 case IPC_SMILE_PROCESSED: 6822 //Только собственные смайлы ;) 6823 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextSmile); \ ??maincsm_onmessage_6: \ 000000B0 08108AE0 ADD R1,R10,R8 \ 000000B4 010050E1 CMP R0,R1 \ 000000B8 0100001A BNE ??maincsm_onmessage_7 \ 000000BC DC0A9FE5 LDR R0,??maincsm_onmessage_5+0x4 ;; ProcessNextSmile \ ??maincsm_onmessage_8: \ 000000C0 710100EF SWI +369 6824 if(ShowLoadScreen) SMART_REDRAW(); \ ??maincsm_onmessage_7: \ 000000C4 500096E5 LDR R0,[R6, #+80] \ 000000C8 000050E3 CMP R0,#+0 \ 000000CC 7800000A BEQ ??maincsm_onmessage_2 \ ??maincsm_onmessage_9: \ 000000D0 ........ BL SMART_REDRAW \ 000000D4 760000EA B ??maincsm_onmessage_2 6825 // zeromem(logmsg2,256); 6826 break; 6827 case IPC_XSTATUSIMG_PROCESSED: 6828 //Только собственные иксстатусы ;) 6829 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextXStatImg); \ ??maincsm_onmessage_10: \ 000000D8 08108AE0 ADD R1,R10,R8 \ 000000DC 010050E1 CMP R0,R1 \ 000000E0 F7FFFF1A BNE ??maincsm_onmessage_7 \ 000000E4 B80A9FE5 LDR R0,??maincsm_onmessage_5+0x8 ;; ProcessNextXStatImg \ 000000E8 F4FFFFEA B ??maincsm_onmessage_8 6830 if(ShowLoadScreen) SMART_REDRAW(); 6831 break; 6832 case IPC_ONESECOND: 6833 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_11: \ 000000EC 08108AE0 ADD R1,R10,R8 \ 000000F0 010050E1 CMP R0,R1 \ 000000F4 6E00001A BNE ??maincsm_onmessage_2 6834 { 6835 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 5C1295E5 LDR R1,[R5, #+604] \ 00000104 0C0090E5 LDR R0,[R0, #+12] \ 00000108 0C0090E5 LDR R0,[R0, #+12] \ 0000010C 010050E1 CMP R0,R1 \ 00000110 6C009615 LDRNE R0,[R6, #+108] \ 00000114 00005013 CMPNE R0,#+0 \ 00000118 0000000A BEQ ??maincsm_onmessage_12 6836 to_develop(); \ 0000011C ........ BL to_develop 6837 _to_develop=0; 6838 //if(!(--on_off_timer)) on_off_timer=0;//таймер показа подключившихся/отключившихся 6839 6840 /* if(ifJustNowRefresh) 6841 { 6842 CLIST *t=(CLIST*)cltop; 6843 int i=0; 6844 int j=0; 6845 while(t) 6846 { 6847 if(t->just_now){ --t->just_now; t->just_i=(i|j); } 6848 else t->just_i=0; 6849 t=t->next; 6850 if(j) i=!i; 6851 j=!j; 6852 } 6853 6854 t=(CLIST*)cltop; 6855 while(t) 6856 { 6857 if(t->just_now){ RefreshJustNow(); SMART_REDRAW(); return 1; } 6858 t=t->next; 6859 } 6860 ifJustNowRefresh=0; 6861 }*/ 6862 6863 if(on_off_timer>0) \ ??maincsm_onmessage_12: \ 00000120 400096E5 LDR R0,[R6, #+64] \ 00000124 6C7086E5 STR R7,[R6, #+108] \ 00000128 010050E3 CMP R0,#+1 \ 0000012C 020000BA BLT ??maincsm_onmessage_13 6864 { 6865 on_off_timer--; \ 00000130 010040E2 SUB R0,R0,#+1 \ 00000134 400086E5 STR R0,[R6, #+64] 6866 SMART_REDRAW(); \ 00000138 E4FFFFEA B ??maincsm_onmessage_9 6867 break; 6868 } 6869 else 6870 if(on_off_timer!=-1)//Надо обновить экран когда время прошло \ ??maincsm_onmessage_13: \ 0000013C 010070E3 CMN R0,#+1 \ 00000140 0500000A BEQ ??maincsm_onmessage_14 6871 { 6872 on_off_timer=-1; \ 00000144 0700E0E1 MVN R0,R7 \ 00000148 400086E5 STR R0,[R6, #+64] 6873 zeromem(on_off_buf,128); \ 0000014C 04009DE5 LDR R0,[SP, #+4] \ 00000150 8010A0E3 MOV R1,#+128 \ 00000154 1D0100EF SWI +285 6874 SMART_REDRAW(); \ 00000158 ........ BL SMART_REDRAW 6875 // UpdateCLheader(); 6876 } 6877 6878 if(PrintTimer>0) \ ??maincsm_onmessage_14: \ 0000015C 140096E5 LDR R0,[R6, #+20] \ 00000160 010050E3 CMP R0,#+1 \ 00000164 020000BA BLT ??maincsm_onmessage_15 6879 { 6880 PrintTimer--; \ 00000168 010040E2 SUB R0,R0,#+1 \ 0000016C 140086E5 STR R0,[R6, #+20] 6881 SMART_REDRAW(); \ 00000170 ........ BL SMART_REDRAW 6882 } 6883 6884 6885 if(!DoRefreshCL) break;//Если не нада обновлять \ ??maincsm_onmessage_15: \ 00000174 240096E5 LDR R0,[R6, #+36] \ 00000178 000050E3 CMP R0,#+0 \ 0000017C 4C00000A BEQ ??maincsm_onmessage_2 6886 int f=0; 6887 CLIST *t=(CLIST*)cltop; \ 00000180 F01395E5 LDR R1,[R5, #+1008] \ 00000184 0000A0E3 MOV R0,#+0 \ 00000188 030000EA B ??maincsm_onmessage_16 6888 while(t && !f) 6889 { 6890 if(t->just_now) f=1; \ ??maincsm_onmessage_17: \ 0000018C 682091E5 LDR R2,[R1, #+104] 6891 t=t->next; \ 00000190 001091E5 LDR R1,[R1, #+0] \ 00000194 000052E3 CMP R2,#+0 \ 00000198 0100A013 MOVNE R0,#+1 6892 } \ ??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 6893 6894 if(f) MyRedraw();//Если еще есть че обновлять \ ??maincsm_onmessage_18: \ 000001AC 000050E3 CMP R0,#+0 \ 000001B0 C6FFFF1A BNE ??maincsm_onmessage_9 6895 else DoRefreshCL=0; \ 000001B4 247086E5 STR R7,[R6, #+36] \ 000001B8 3D0000EA B ??maincsm_onmessage_2 6896 } 6897 break; 6898 case IPC_TENSECONDS: 6899 //Только свое сообщение 6900 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_19: \ 000001BC 08108AE0 ADD R1,R10,R8 \ 000001C0 010050E1 CMP R0,R1 \ 000001C4 3A00001A BNE ??maincsm_onmessage_2 6901 { 6902 CLIST *t=(CLIST *)cltop; 6903 int f=0; 6904 if(main_msg_timer2!=0) main_msg_timer2--; else main_msg_timer2=0; \ 000001C8 0C0495E5 LDR R0,[R5, #+1036] \ 000001CC F09395E5 LDR R9,[R5, #+1008] \ 000001D0 00A0A0E3 MOV R10,#+0 \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 1B00000A BEQ ??maincsm_onmessage_20 \ 000001DC 010040E2 SUB R0,R0,#+1 \ 000001E0 0C0485E5 STR R0,[R5, #+1036] \ 000001E4 180000EA B ??maincsm_onmessage_20 6905 while(t) 6906 { 6907 if(t->just_now) \ ??maincsm_onmessage_21: \ 000001E8 680099E5 LDR R0,[R9, #+104] \ 000001EC 000050E3 CMP R0,#+0 \ 000001F0 0400000A BEQ ??maincsm_onmessage_22 6908 { 6909 if (!(--(t->just_now))){ f=1; t->just_i=0; } \ 000001F4 010050E2 SUBS R0,R0,#+1 \ 000001F8 680089E5 STR R0,[R9, #+104] \ 000001FC 01A0A003 MOVEQ R10,#+1 \ 00000200 6C708905 STREQ R7,[R9, #+108] 6910 // RefreshJustNow(); 6911 MyRedraw(); \ 00000204 ........ BL SMART_REDRAW 6912 } 6913 6914 if (t->isactive) \ ??maincsm_onmessage_22: \ 00000208 A00099E5 LDR R0,[R9, #+160] \ 0000020C 000050E3 CMP R0,#+0 \ 00000210 0C00000A BEQ ??maincsm_onmessage_23 6915 { 6916 if (!(--(t->isactive))) \ 00000214 010050E2 SUBS R0,R0,#+1 \ 00000218 A00089E5 STR R0,[R9, #+160] \ 0000021C 0900001A BNE ??maincsm_onmessage_23 6917 { 6918 f=1; //Если дошли до 0 хотя бы один раз - надо перерисовать меню 6919 if ((t->log)&&(!t->isunread)) \ 00000220 940099E5 LDR R0,[R9, #+148] \ 00000224 01A0A0E3 MOV R10,#+1 \ 00000228 000050E3 CMP R0,#+0 \ 0000022C 0500000A BEQ ??maincsm_onmessage_23 \ 00000230 840099E5 LDR R0,[R9, #+132] \ 00000234 000050E3 CMP R0,#+0 \ 00000238 0200001A BNE ??maincsm_onmessage_23 6920 { 6921 FreeLOGQ(&t->log); \ 0000023C 940089E2 ADD R0,R9,#+148 \ 00000240 ........ BL FreeLOGQ 6922 t->msg_count=0; \ 00000244 A47089E5 STR R7,[R9, #+164] 6923 } 6924 } 6925 } 6926 t=(CLIST *)(t->next); \ ??maincsm_onmessage_23: \ 00000248 009099E5 LDR R9,[R9, #+0] 6927 } \ ??maincsm_onmessage_20: \ 0000024C 000059E3 CMP R9,#+0 \ 00000250 E4FFFF1A BNE ??maincsm_onmessage_21 6928 6929 if (f) \ 00000254 00005AE3 CMP R10,#+0 \ 00000258 0A00000A BEQ ??maincsm_onmessage_24 6930 { 6931 CLIST *oldt=NULL; 6932 if (contactlist_menu_id) \ 0000025C 641295E5 LDR R1,[R5, #+612] \ 00000260 0000A0E3 MOV R0,#+0 \ 00000264 000051E3 CMP R1,#+0 \ 00000268 0400000A BEQ ??maincsm_onmessage_25 6933 { 6934 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 0000026C 640295E5 LDR R0,[R5, #+612] \ 00000270 0010A0E3 MOV R1,#+0 \ 00000274 090200EF SWI +521 \ 00000278 8F0100EF SWI +399 \ 0000027C ........ _BLF FindContactByN,??FindContactByN??rA 6935 } 6936 RecountMenu(oldt,1); \ ??maincsm_onmessage_25: \ 00000280 0110A0E3 MOV R1,#+1 \ 00000284 ........ BL RecountMenu 6937 } 6938 6939 if (time_to_stop_t9) \ ??maincsm_onmessage_24: \ 00000288 140495E5 LDR R0,[R5, #+1044] \ 0000028C 000050E3 CMP R0,#+0 \ 00000290 0700000A BEQ ??maincsm_onmessage_2 6940 { 6941 if (!(--time_to_stop_t9)) \ 00000294 010050E2 SUBS R0,R0,#+1 \ 00000298 140485E5 STR R0,[R5, #+1044] \ 0000029C 0400001A BNE ??maincsm_onmessage_2 6942 { 6943 if (IsGuiOnTop(edchat_id)) RefreshGUI(); \ 000002A0 F80395E5 LDR R0,[R5, #+1016] \ 000002A4 350100EF SWI +309 \ 000002A8 000050E3 CMP R0,#+0 \ 000002AC 0000000A BEQ ??maincsm_onmessage_2 \ 000002B0 960100EF SWI +406 6944 } 6945 } 6946 } 6947 break; 6948 /* case IPC_SENDMSG: ; //IPC_SENDMSG by BoBa 26.06.07 6949 int l=strlen(((IPCMsg *)(ipc->data))->msg); 6950 TPKT *msg=malloc(sizeof(PKT)+l+30); 6951 msg->pkt.uin=((IPCMsg *)(ipc->data))->uin; 6952 msg->pkt.type=T_SENDMSG; 6953 msg->pkt.data_len=l; 6954 memcpy(msg->data,((IPCMsg *)(ipc->data))->msg,l); 6955 //slientsend=1; 6956 if(strstr(msg->data,PASS)==0) 6957 { 6958 SENDMSGCOUNT++; //Номер сообщения 6959 SUBPROC((void *)SendAnswer,0,msg); 6960 } 6961 else 6962 { 6963 msg->pkt.data_len=40; 6964 strcpy(msg->data, "Fuck you hacker! my password sux ur ass"); 6965 SENDMSGCOUNT++; //Номер сообщения 6966 SUBPROC((void *)SendAnswer,0,msg); 6967 } 6968 break;*/ 6969 } 6970 } 6971 } 6972 } 6973 6974 /* void *icsm; 6975 icsm=FindCSMbyID(CSM_root()->idle_id); 6976 if (icsm && checkGui(idlegui_id(icsm))) 6977 { 6978 INC_show=0; 6979 canvasdata=BuildCanvas(); //void * - belyj fon! 6980 } 6981 else 6982 { 6983 main_d=1; 6984 }*/ 6985 } 6986 6987 //---------------------------------------------------// 6988 void *icsm; 6989 icsm=FindCSMbyID(CSM_root()->idle_id); \ ??maincsm_onmessage_2: \ 000002B4 068100EF SWI +33030 \ 000002B8 040090E5 LDR R0,[R0, #+4] \ 000002BC 080100EF SWI +264 6990 if (icsm && checkGui(idlegui_id(icsm))) \ 000002C0 000050E3 CMP R0,#+0 \ 000002C4 1F01000A BEQ ??maincsm_onmessage_26 \ 000002C8 2C0090E5 LDR R0,[R0, #+44] \ 000002CC ........ BL checkGui \ 000002D0 000050E3 CMP R0,#+0 \ 000002D4 1B01000A BEQ ??maincsm_onmessage_26 6991 { 6992 int icn; 6993 6994 #ifdef NEWSGOLD 6995 if(ShowStatusIcon==0 || ShowStatusIcon==2 || ShowStatusIcon==3) //kluchnik 26.03.08 \ 000002D8 ........ LDR R0,??DataTable329 ;; ShowStatusIcon \ 000002DC 000090E5 LDR R0,[R0, #+0] \ 000002E0 000050E3 CMP R0,#+0 \ 000002E4 02005013 CMPNE R0,#+2 \ 000002E8 03005013 CMPNE R0,#+3 \ 000002EC 2B00001A BNE ??maincsm_onmessage_27 6996 { 6997 #endif 6998 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 2200000A BEQ ??maincsm_onmessage_27 6999 { 7000 if(total_unread) \ ??maincsm_onmessage_28: \ 00000314 EC0395E5 LDR R0,[R5, #+1004] \ 00000318 000050E3 CMP R0,#+0 7001 icn=IS_MSG; \ 0000031C 0D00A013 MOVNE R0,#+13 \ 00000320 0500001A BNE ??maincsm_onmessage_29 7002 else 7003 { 7004 switch(connect_state) \ 00000324 340096E5 LDR R0,[R6, #+52] \ 00000328 000050E3 CMP R0,#+0 \ 0000032C 0200000A BEQ ??maincsm_onmessage_29 \ 00000330 030050E2 SUBS R0,R0,#+3 7005 { 7006 case 0: 7007 icn=IS_OFFLINE; break; 7008 case 3: 7009 icn=CurrentStatus; //IS_ONLINE; \ 00000334 FC029505 LDREQ R0,[R5, #+764] 7010 break; 7011 default: 7012 icn=IS_UNKNOWN; break; \ 00000338 0E00A013 MOVNE R0,#+14 7013 } 7014 } 7015 7016 DrawCanvas(canvasdata,IDLEICON_X,IDLEICON_Y,IDLEICON_X+GetImgWidth((int)S_ICONS[icn])-1, 7017 IDLEICON_Y+GetImgHeight((int)S_ICONS[icn])-1,1); \ ??maincsm_onmessage_29: \ 0000033C 64B89FE5 LDR R11,??maincsm_onmessage_5+0xC ;; IDLEICON_Y \ 00000340 009185E0 ADD R9,R5,R0, LSL #+2 \ 00000344 740299E5 LDR R0,[R9, #+628] \ 00000348 210000EF SWI +33 \ 0000034C 00A0A0E1 MOV R10,R0 \ 00000350 740299E5 LDR R0,[R9, #+628] \ 00000354 220000EF SWI +34 \ 00000358 4C189FE5 LDR R1,??maincsm_onmessage_5+0x10 ;; IDLEICON_X \ 0000035C 00209BE5 LDR R2,[R11, #+0] \ 00000360 001091E5 LDR R1,[R1, #+0] \ 00000364 0130A0E3 MOV R3,#+1 \ 00000368 08002DE9 PUSH {R3} \ 0000036C 010080E0 ADD R0,R0,R1 \ 00000370 02308AE0 ADD R3,R10,R2 \ 00000374 013043E2 SUB R3,R3,#+1 \ 00000378 08002DE9 PUSH {R3} \ 0000037C 013040E2 SUB R3,R0,#+1 \ 00000380 2C0295E5 LDR R0,[R5, #+556] \ 00000384 250000EF SWI +37 7018 DrawImg(IDLEICON_X,IDLEICON_Y,S_ICONS[icn]); \ 00000388 1C089FE5 LDR R0,??maincsm_onmessage_5+0x10 ;; IDLEICON_X \ 0000038C 742299E5 LDR R2,[R9, #+628] \ 00000390 00109BE5 LDR R1,[R11, #+0] \ 00000394 000090E5 LDR R0,[R0, #+0] \ 00000398 230000EF SWI +35 \ 0000039C 08D08DE2 ADD SP,SP,#+8 7019 } 7020 #ifdef NEWSGOLD 7021 } 7022 #endif 7023 /* 7024 #ifdef kluchnik 7025 if(show_xstatus==1) 7026 #else 7027 if(show_xstatus==1 || show_xstatus==3) //kluchnik 26.03.08 7028 #endif 7029 #else 7030 if(show_xstatus==1) //kluchnik 26.03.08 7031 #endif 7032 { 7033 PNGTOP_DESC *pltop=PNG_TOP(); 7034 pltop->dyn_pltop=XStatusesImgList; 7035 DisableIDLETMR(); 7036 DrawCanvas(canvasdata,IDLEICON_XX,IDLEICON_YX,IDLEICON_XX+GetImgWidth((int)XStatusesIconArray[CurrentXStatus])-1, 7037 IDLEICON_YX+GetImgHeight((int)XStatusesIconArray[CurrentXStatus])-1,1); 7038 DrawImg(IDLEICON_XX,IDLEICON_YX,XStatusesIconArray[CurrentXStatus]); 7039 }*/ 7040 7041 7042 if(IsUnlocked()) \ ??maincsm_onmessage_27: \ 000003A0 430000EF SWI +67 \ 000003A4 000050E3 CMP R0,#+0 \ 000003A8 E600000A BEQ ??maincsm_onmessage_26 7043 { 7044 SetCanvasFlag(0); \ 000003AC 0000A0E3 MOV R0,#+0 \ 000003B0 ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 7045 if (main_d==1) \ 000003B4 280295E5 LDR R0,[R5, #+552] \ 000003B8 010050E3 CMP R0,#+1 \ 000003BC 8E00001A BNE ??maincsm_onmessage_30 7046 { 7047 int spaco2=spaco1; \ 000003C0 ........ LDR R0,??DataTable303 ;; spaco1 \ 000003C4 009090E5 LDR R9,[R0, #+0] 7048 if(Is_SMARTCPU_On && main_msg_timer2) \ 000003C8 ........ LDR R0,??DataTable297 ;; Is_SMARTCPU_On \ 000003CC 000090E5 LDR R0,[R0, #+0] \ 000003D0 000050E3 CMP R0,#+0 \ 000003D4 0C049515 LDRNE R0,[R5, #+1036] \ 000003D8 00005013 CMPNE R0,#+0 \ 000003DC 8500000A BEQ ??maincsm_onmessage_31 7049 { 7050 if(fonto==1) \ 000003E0 103096E5 LDR R3,[R6, #+16] \ 000003E4 C4079FE5 LDR R0,??maincsm_onmessage_5+0x14 ;; msg_d_x \ 000003E8 5410A0E3 MOV R1,#+84 \ 000003EC 801D81E3 ORR R1,R1,#0x2000 \ 000003F0 051081E0 ADD R1,R1,R5 \ 000003F4 18108DE5 STR R1,[SP, #+24] \ 000003F8 2410A0E3 MOV R1,#+36 \ 000003FC 801D81E3 ORR R1,R1,#0x2000 \ 00000400 051081E0 ADD R1,R1,R5 \ 00000404 14108DE5 STR R1,[SP, #+20] \ 00000408 F410A0E3 MOV R1,#+244 \ 0000040C 7C1D81E3 ORR R1,R1,#0x1F00 \ 00000410 051081E0 ADD R1,R1,R5 \ 00000414 10108DE5 STR R1,[SP, #+16] \ 00000418 C410A0E3 MOV R1,#+196 \ 0000041C 7C1D81E3 ORR R1,R1,#0x1F00 \ 00000420 051081E0 ADD R1,R1,R5 \ 00000424 0C108DE5 STR R1,[SP, #+12] \ 00000428 84179FE5 LDR R1,??maincsm_onmessage_5+0x18 ;; msg_d_y \ 0000042C 00A090E5 LDR R10,[R0, #+0] \ 00000430 001091E5 LDR R1,[R1, #+0] \ 00000434 9400A0E3 MOV R0,#+148 \ 00000438 7C0D80E3 ORR R0,R0,#0x1F00 \ 0000043C 052080E0 ADD R2,R0,R5 \ 00000440 ........ LDR R0,??DataTable350 ;; fonto \ 00000444 00108DE5 STR R1,[SP, #+0] \ 00000448 00B090E5 LDR R11,[R0, #+0] \ 0000044C 0900A0E1 MOV R0,R9 \ 00000450 01002DE9 PUSH {R0} \ 00000454 01005BE3 CMP R11,#+1 \ 00000458 2E00001A BNE ??maincsm_onmessage_32 7051 { 7052 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ 0000045C 0100A0E3 MOV R0,#+1 \ 00000460 01002DE9 PUSH {R0} \ 00000464 0A00A0E1 MOV R0,R10 \ 00000468 ........ _BLF PrintField,??PrintField??rA 7053 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, spaco2); \ 0000046C 0900A0E1 MOV R0,R9 \ 00000470 01002DE9 PUSH {R0} \ 00000474 0100A0E3 MOV R0,#+1 \ 00000478 01002DE9 PUSH {R0} \ 0000047C 301295E5 LDR R1,[R5, #+560] \ 00000480 103096E5 LDR R3,[R6, #+16] \ 00000484 1C209DE5 LDR R2,[SP, #+28] \ 00000488 10009DE5 LDR R0,[SP, #+16] \ 0000048C 001081E0 ADD R1,R1,R0 \ 00000490 0A00A0E1 MOV R0,R10 \ 00000494 ........ _BLF PrintField,??PrintField??rA 7054 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, spaco2); \ 00000498 0900A0E1 MOV R0,R9 \ 0000049C 01002DE9 PUSH {R0} \ 000004A0 0100A0E3 MOV R0,#+1 \ 000004A4 01002DE9 PUSH {R0} \ 000004A8 301295E5 LDR R1,[R5, #+560] \ 000004AC 103096E5 LDR R3,[R6, #+16] \ 000004B0 28209DE5 LDR R2,[SP, #+40] \ 000004B4 18009DE5 LDR R0,[SP, #+24] \ 000004B8 811080E0 ADD R1,R0,R1, LSL #+1 \ 000004BC 0A00A0E1 MOV R0,R10 \ 000004C0 ........ _BLF PrintField,??PrintField??rA 7055 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, spaco2); \ 000004C4 0900A0E1 MOV R0,R9 \ 000004C8 01002DE9 PUSH {R0} \ 000004CC 0100A0E3 MOV R0,#+1 \ 000004D0 01002DE9 PUSH {R0} \ 000004D4 301295E5 LDR R1,[R5, #+560] \ 000004D8 103096E5 LDR R3,[R6, #+16] \ 000004DC 34209DE5 LDR R2,[SP, #+52] \ 000004E0 20009DE5 LDR R0,[SP, #+32] \ 000004E4 811081E0 ADD R1,R1,R1, LSL #+1 \ 000004E8 001081E0 ADD R1,R1,R0 \ 000004EC 0A00A0E1 MOV R0,R10 \ 000004F0 ........ _BLF PrintField,??PrintField??rA 7056 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, spaco2); \ 000004F4 00022DE9 PUSH {R9} \ 000004F8 0100A0E3 MOV R0,#+1 \ 000004FC 01002DE9 PUSH {R0} \ 00000500 301295E5 LDR R1,[R5, #+560] \ 00000504 103096E5 LDR R3,[R6, #+16] \ 00000508 40209DE5 LDR R2,[SP, #+64] \ 0000050C 28009DE5 LDR R0,[SP, #+40] \ 00000510 011180E0 ADD R1,R0,R1, LSL #+2 \ 00000514 340000EA B ??maincsm_onmessage_33 7057 } 7058 else 7059 { 7060 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ ??maincsm_onmessage_32: \ 00000518 0B00A0E1 MOV R0,R11 \ 0000051C 01002DE9 PUSH {R0} \ 00000520 0A00A0E1 MOV R0,R10 \ 00000524 ........ _BLF PrintField,??PrintField??rA 7061 PrintField(msg_d_x,msg_d_y+GetFontYSIZE(paused_height)+1, s_txt, align, fonto, spaco2); \ 00000528 300295E5 LDR R0,[R5, #+560] \ 0000052C C50100EF SWI +453 \ 00000530 0910A0E1 MOV R1,R9 \ 00000534 02002DE9 PUSH {R1} \ 00000538 0B10A0E1 MOV R1,R11 \ 0000053C 02002DE9 PUSH {R1} \ 00000540 103096E5 LDR R3,[R6, #+16] \ 00000544 1C209DE5 LDR R2,[SP, #+28] \ 00000548 10109DE5 LDR R1,[SP, #+16] \ 0000054C 010080E0 ADD R0,R0,R1 \ 00000550 011080E2 ADD R1,R0,#+1 \ 00000554 0A00A0E1 MOV R0,R10 \ 00000558 ........ _BLF PrintField,??PrintField??rA 7062 PrintField(msg_d_x,msg_d_y+(2*GetFontYSIZE(paused_height))+2, d_txt, align, fonto, spaco2); \ 0000055C 300295E5 LDR R0,[R5, #+560] \ 00000560 C50100EF SWI +453 \ 00000564 0910A0E1 MOV R1,R9 \ 00000568 02002DE9 PUSH {R1} \ 0000056C 0B10A0E1 MOV R1,R11 \ 00000570 02002DE9 PUSH {R1} \ 00000574 103096E5 LDR R3,[R6, #+16] \ 00000578 28209DE5 LDR R2,[SP, #+40] \ 0000057C 18109DE5 LDR R1,[SP, #+24] \ 00000580 800081E0 ADD R0,R1,R0, LSL #+1 \ 00000584 021080E2 ADD R1,R0,#+2 \ 00000588 0A00A0E1 MOV R0,R10 \ 0000058C ........ _BLF PrintField,??PrintField??rA 7063 PrintField(msg_d_x,msg_d_y+(3*GetFontYSIZE(paused_height))+3, f_txt, align, fonto, spaco2); \ 00000590 300295E5 LDR R0,[R5, #+560] \ 00000594 C50100EF SWI +453 \ 00000598 0910A0E1 MOV R1,R9 \ 0000059C 02002DE9 PUSH {R1} \ 000005A0 800080E0 ADD R0,R0,R0, LSL #+1 \ 000005A4 0B10A0E1 MOV R1,R11 \ 000005A8 02002DE9 PUSH {R1} \ 000005AC 103096E5 LDR R3,[R6, #+16] \ 000005B0 34209DE5 LDR R2,[SP, #+52] \ 000005B4 20109DE5 LDR R1,[SP, #+32] \ 000005B8 010080E0 ADD R0,R0,R1 \ 000005BC 031080E2 ADD R1,R0,#+3 \ 000005C0 0A00A0E1 MOV R0,R10 \ 000005C4 ........ _BLF PrintField,??PrintField??rA 7064 PrintField(msg_d_x,msg_d_y+(4*GetFontYSIZE(paused_height))+4, g_txt, align, fonto, spaco2); \ 000005C8 300295E5 LDR R0,[R5, #+560] \ 000005CC C50100EF SWI +453 \ 000005D0 00022DE9 PUSH {R9} \ 000005D4 00082DE9 PUSH {R11} \ 000005D8 28109DE5 LDR R1,[SP, #+40] \ 000005DC 103096E5 LDR R3,[R6, #+16] \ 000005E0 40209DE5 LDR R2,[SP, #+64] \ 000005E4 000181E0 ADD R0,R1,R0, LSL #+2 \ 000005E8 041080E2 ADD R1,R0,#+4 \ ??maincsm_onmessage_33: \ 000005EC 0A00A0E1 MOV R0,R10 \ 000005F0 ........ _BLF PrintField,??PrintField??rA \ 000005F4 28D08DE2 ADD SP,SP,#+40 7065 } 7066 } 7067 main_d=0; \ ??maincsm_onmessage_31: \ 000005F8 287285E5 STR R7,[R5, #+552] 7068 } 7069 7070 if(Is_UPTIME_On) DrawOnlineTime(canvasdata); \ ??maincsm_onmessage_30: \ 000005FC B4059FE5 LDR R0,??maincsm_onmessage_5+0x1C ;; Is_UPTIME_On \ 00000600 000090E5 LDR R0,[R0, #+0] \ 00000604 000050E3 CMP R0,#+0 \ 00000608 0100000A BEQ ??maincsm_onmessage_34 \ 0000060C 2C0295E5 LDR R0,[R5, #+556] \ 00000610 ........ BL DrawOnlineTime 7071 if(Is_PING_On && isPingIdle) DrawPing(canvasdata); \ ??maincsm_onmessage_34: \ 00000614 480295E5 LDR R0,[R5, #+584] \ 00000618 000050E3 CMP R0,#+0 \ 0000061C 0500000A BEQ ??maincsm_onmessage_35 \ 00000620 94059FE5 LDR R0,??maincsm_onmessage_5+0x20 ;; isPingIdle \ 00000624 000090E5 LDR R0,[R0, #+0] \ 00000628 000050E3 CMP R0,#+0 \ 0000062C 0100000A BEQ ??maincsm_onmessage_35 \ 00000630 2C0295E5 LDR R0,[R5, #+556] \ 00000634 ........ BL DrawPing 7072 if(Auto_Status && showAwayIdle) DrawAutoMSG(canvasdata); \ ??maincsm_onmessage_35: \ 00000638 ........ LDR R0,??DataTable299 ;; Auto_Status \ 0000063C 000090E5 LDR R0,[R0, #+0] \ 00000640 000050E3 CMP R0,#+0 \ 00000644 0500000A BEQ ??maincsm_onmessage_36 \ 00000648 ........ LDR R0,??DataTable300 ;; showAwayIdle \ 0000064C 000090E5 LDR R0,[R0, #+0] \ 00000650 000050E3 CMP R0,#+0 \ 00000654 0100000A BEQ ??maincsm_onmessage_36 \ 00000658 2C0295E5 LDR R0,[R5, #+556] \ 0000065C ........ BL DrawAutoMSG 7073 if(Is_Unread_On) \ ??maincsm_onmessage_36: \ 00000660 58059FE5 LDR R0,??maincsm_onmessage_5+0x24 ;; Is_Unread_On \ 00000664 000090E5 LDR R0,[R0, #+0] \ 00000668 000050E3 CMP R0,#+0 \ 0000066C 1200000A BEQ ??maincsm_onmessage_37 7074 { 7075 sprintf(unread_msg_info, "Unread: %d", total_unread2); \ 00000670 582295E5 LDR R2,[R5, #+600] \ 00000674 739EA0E3 MOV R9,#+1840 \ 00000678 8E1F88E2 ADD R1,R8,#+568 \ 0000067C 050089E0 ADD R0,R9,R5 \ 00000680 160000EF SWI +22 7076 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, spaco1); \ 00000684 ........ LDR R0,??DataTable303 ;; spaco1 \ 00000688 052089E0 ADD R2,R9,R5 \ 0000068C 000090E5 LDR R0,[R0, #+0] \ 00000690 01002DE9 PUSH {R0} \ 00000694 ........ LDR R0,??DataTable350 ;; fonto \ 00000698 000090E5 LDR R0,[R0, #+0] \ 0000069C 01002DE9 PUSH {R0} \ 000006A0 103096E5 LDR R3,[R6, #+16] \ 000006A4 18059FE5 LDR R0,??maincsm_onmessage_5+0x28 ;; unread_Y \ 000006A8 001090E5 LDR R1,[R0, #+0] \ 000006AC 14059FE5 LDR R0,??maincsm_onmessage_5+0x2C ;; unread_X \ 000006B0 000090E5 LDR R0,[R0, #+0] \ 000006B4 ........ _BLF PrintField,??PrintField??rA \ 000006B8 08D08DE2 ADD SP,SP,#+8 7077 } 7078 7079 if(Is_Online_On && strlen(on_off_buf)!=0) \ ??maincsm_onmessage_37: \ 000006BC 08059FE5 LDR R0,??maincsm_onmessage_5+0x30 ;; Is_Online_On \ 000006C0 000090E5 LDR R0,[R0, #+0] \ 000006C4 000050E3 CMP R0,#+0 \ 000006C8 1E00000A BEQ ??maincsm_onmessage_26 \ 000006CC 04009DE5 LDR R0,[SP, #+4] \ 000006D0 1B0000EF SWI +27 \ 000006D4 000050E3 CMP R0,#+0 \ 000006D8 1A00000A BEQ ??maincsm_onmessage_26 7080 { 7081 char *s=malloc(128); \ 000006DC 8000A0E3 MOV R0,#+128 \ 000006E0 140000EF SWI +20 7082 sprintf(s,percent_s,on_off_buf); \ 000006E4 04209DE5 LDR R2,[SP, #+4] \ 000006E8 0090A0E1 MOV R9,R0 \ 000006EC 081088E2 ADD R1,R8,#+8 \ 000006F0 160000EF SWI +22 7083 s[strlen(s)-1]=0; \ 000006F4 0900A0E1 MOV R0,R9 \ 000006F8 1B0000EF SWI +27 \ 000006FC 090080E0 ADD R0,R0,R9 \ 00000700 017040E5 STRB R7,[R0, #-1] 7084 PrintField(online_x,online_y,s, Is_Online_On_Align, fonto, spaco1); \ 00000704 ........ LDR R0,??DataTable303 ;; spaco1 \ 00000708 0920A0E1 MOV R2,R9 \ 0000070C 000090E5 LDR R0,[R0, #+0] \ 00000710 01002DE9 PUSH {R0} \ 00000714 ........ LDR R0,??DataTable350 ;; fonto \ 00000718 000090E5 LDR R0,[R0, #+0] \ 0000071C 01002DE9 PUSH {R0} \ 00000720 A8049FE5 LDR R0,??maincsm_onmessage_5+0x34 ;; Is_Online_On_Align \ 00000724 003090E5 LDR R3,[R0, #+0] \ 00000728 A4049FE5 LDR R0,??maincsm_onmessage_5+0x38 ;; online_y \ 0000072C 001090E5 LDR R1,[R0, #+0] \ 00000730 A0049FE5 LDR R0,??maincsm_onmessage_5+0x3C ;; online_x \ 00000734 000090E5 LDR R0,[R0, #+0] \ 00000738 ........ _BLF PrintField,??PrintField??rA 7085 mfree(s); \ 0000073C 0900A0E1 MOV R0,R9 \ 00000740 150000EF SWI +21 \ 00000744 08D08DE2 ADD SP,SP,#+8 7086 } 7087 }//if(IsUnlocked()) 7088 } 7089 7090 7091 //-----------------------------------------------------------// 7092 7093 7094 if (msg->msg==MSG_RECONFIGURE_REQ) \ ??maincsm_onmessage_26: \ 00000748 040094E5 LDR R0,[R4, #+4] \ 0000074C AF10A0E3 MOV R1,#+175 \ 00000750 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000754 010050E1 CMP R0,R1 \ 00000758 4D00001A BNE ??maincsm_onmessage_38 7095 { 7096 //if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) 7097 if( (strcmp_nocase(suc_config_name,(char *)msg->data0)==0) 7098 || (strcmp_nocase(suc_config_name_mod,(char *)msg->data0)==0)) \ 0000075C ........ LDR R0,??DataTable339 ;; suc_config_name \ 00000760 0C1094E5 LDR R1,[R4, #+12] \ 00000764 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000768 000050E3 CMP R0,#+0 \ 0000076C 0500000A BEQ ??maincsm_onmessage_39 \ 00000770 ........ LDR R0,??DataTable306 ;; suc_config_name_mod \ 00000774 0C1094E5 LDR R1,[R4, #+12] \ 00000778 000090E5 LDR R0,[R0, #+0] \ 0000077C ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000780 000050E3 CMP R0,#+0 \ 00000784 4200001A BNE ??maincsm_onmessage_38 7099 { 7100 ShowMSG(1,(int)"NatICQ config updated!"); 7101 // InitConfig(); 7102 UpdateConfig(); 7103 #ifdef NEWSGOLD 7104 initTags(); 7105 #endif 7106 shot_soft=0; 7107 shot_header=0; 7108 PrintLibInit(4); 7109 FontPathInit((char *)fontpath, 1); 7110 FontPathInit((char *)fontpath2, 1); \ ??maincsm_onmessage_39: \ 00000788 ........ LDR R10,??DataTable342 ;; fontpath2 7111 FontPathInit((char *)fontpath3, 1);//#ifdef ELKA \ 0000078C ........ LDR R11,??DataTable343 ;; fontpath3 7112 FontPathInit((char *)fontpath4, 1); \ 00000790 ........ LDR R9,??DataTable344 ;; fontpath4 \ 00000794 911F88E2 ADD R1,R8,#+580 \ 00000798 0100A0E3 MOV R0,#+1 \ 0000079C 480100EF SWI +328 \ 000007A0 ........ _BLF UpdateConfig,??UpdateConfig??rA \ 000007A4 ........ _BLF initTags,??initTags??rA \ 000007A8 607086E5 STR R7,[R6, #+96] \ 000007AC 647086E5 STR R7,[R6, #+100] \ 000007B0 0400A0E3 MOV R0,#+4 \ 000007B4 ........ _BLF PrintLibInit,??PrintLibInit??rA \ 000007B8 ........ LDR R0,??DataTable341 ;; fontpath \ 000007BC 0110A0E3 MOV R1,#+1 \ 000007C0 ........ _BLF FontPathInit,??FontPathInit??rA \ 000007C4 0110A0E3 MOV R1,#+1 \ 000007C8 0A00A0E1 MOV R0,R10 \ 000007CC ........ _BLF FontPathInit,??FontPathInit??rA \ 000007D0 0110A0E3 MOV R1,#+1 \ 000007D4 0B00A0E1 MOV R0,R11 \ 000007D8 ........ _BLF FontPathInit,??FontPathInit??rA \ 000007DC 0110A0E3 MOV R1,#+1 \ 000007E0 0900A0E1 MOV R0,R9 \ 000007E4 ........ _BLF FontPathInit,??FontPathInit??rA 7113 7114 if(!strlen(fontpath2) || !strlen(fontpath3)) clfont=100+FONT_SMALL; \ 000007E8 0A00A0E1 MOV R0,R10 \ 000007EC 1B0000EF SWI +27 \ 000007F0 000050E3 CMP R0,#+0 \ 000007F4 0300000A BEQ ??maincsm_onmessage_40 \ 000007F8 0B00A0E1 MOV R0,R11 \ 000007FC 1B0000EF SWI +27 \ 00000800 000050E3 CMP R0,#+0 \ 00000804 0100001A BNE ??maincsm_onmessage_41 \ ??maincsm_onmessage_40: \ 00000808 6F00A0E3 MOV R0,#+111 \ 0000080C 3C0485E5 STR R0,[R5, #+1084] 7115 if(!strlen(fontpath4)) { PNG_SOFTKEY=0; PNG_HEADER=0; } \ ??maincsm_onmessage_41: \ 00000810 0900A0E1 MOV R0,R9 \ 00000814 1B0000EF SWI +27 \ 00000818 000050E3 CMP R0,#+0 \ 0000081C 0300001A BNE ??maincsm_onmessage_42 \ 00000820 ........ LDR R0,??DataTable347 ;; PNG_SOFTKEY \ 00000824 007080E5 STR R7,[R0, #+0] \ 00000828 ........ LDR R0,??DataTable348 ;; PNG_HEADER \ 0000082C 007080E5 STR R7,[R0, #+0] 7116 if(fonto==1) \ ??maincsm_onmessage_42: \ 00000830 ........ LDR R0,??DataTable350 ;; fonto \ 00000834 00B090E5 LDR R11,[R0, #+0] \ 00000838 01005BE3 CMP R11,#+1 \ 0000083C 0B00001A BNE ??maincsm_onmessage_43 7117 { 7118 char *heght=malloc(64); \ 00000840 4000A0E3 MOV R0,#+64 \ 00000844 140000EF SWI +20 7119 sprintf(heght, "%s2240.png", fontpath); \ 00000848 ........ LDR R2,??DataTable341 ;; fontpath \ 0000084C 0090A0E1 MOV R9,R0 \ 00000850 971F88E2 ADD R1,R8,#+604 \ 00000854 160000EF SWI +22 7120 paused_height=GetImgHeight((int)heght); \ 00000858 0900A0E1 MOV R0,R9 \ 0000085C 210000EF SWI +33 \ 00000860 300285E5 STR R0,[R5, #+560] 7121 mfree(heght); \ 00000864 0900A0E1 MOV R0,R9 \ 00000868 150000EF SWI +21 \ 0000086C 010000EA B ??maincsm_onmessage_44 7122 } 7123 else 7124 paused_height=fonto-100; \ ??maincsm_onmessage_43: \ 00000870 64004BE2 SUB R0,R11,#+100 \ 00000874 300285E5 STR R0,[R5, #+560] 7125 //#endif 7126 free_ICONS(); \ ??maincsm_onmessage_44: \ 00000878 ........ BL free_ICONS 7127 setup_ICONS(); \ 0000087C ........ BL setup_ICONS 7128 ResortCL(); \ 00000880 ........ _BLF ResortCL,??ResortCL??rA 7129 RecountMenu(NULL,1); \ 00000884 0110A0E3 MOV R1,#+1 \ 00000888 0000A0E3 MOV R0,#+0 \ 0000088C ........ BL RecountMenu 7130 init_time_zone(); \ 00000890 ........ BL init_time_zone 7131 // InitSmiles(); 7132 } 7133 } 7134 7135 if (msg->msg==MSG_GUI_DESTROYED) \ ??maincsm_onmessage_38: \ 00000894 040094E5 LDR R0,[R4, #+4] \ 00000898 0E10A0E3 MOV R1,#+14 \ 0000089C 641C81E3 ORR R1,R1,#0x6400 \ 000008A0 010050E1 CMP R0,R1 \ 000008A4 0D00001A BNE ??maincsm_onmessage_45 7136 { 7137 if ((int)msg->data0==csm->gui_id) \ 000008A8 20109DE5 LDR R1,[SP, #+32] \ 000008AC 0C0094E5 LDR R0,[R4, #+12] \ 000008B0 281091E5 LDR R1,[R1, #+40] \ 000008B4 010050E1 CMP R0,R1 7138 { 7139 csm->csm.state=-3; \ 000008B8 20009D05 LDREQ R0,[SP, #+32] \ 000008BC 0210E003 MVNEQ R1,#+2 \ 000008C0 10108005 STREQ R1,[R0, #+16] 7140 } 7141 if ((int)msg->data0==contactlist_menu_id) \ 000008C4 0C0094E5 LDR R0,[R4, #+12] \ 000008C8 641295E5 LDR R1,[R5, #+612] \ 000008CC 010050E1 CMP R0,R1 7142 { 7143 contactlist_menu_id=0; \ 000008D0 64728505 STREQ R7,[R5, #+612] 7144 //prev_clmenu_itemcount=0; 7145 } 7146 if ((int)msg->data0==edchat_id) \ 000008D4 F81395E5 LDR R1,[R5, #+1016] \ 000008D8 010050E1 CMP R0,R1 7147 { 7148 edchat_id=0; \ 000008DC F8738505 STREQ R7,[R5, #+1016] 7149 } 7150 } 7151 7152 if (msg->msg==MSG_HELPER_TRANSLATOR) \ ??maincsm_onmessage_45: \ 000008E0 040094E5 LDR R0,[R4, #+4] \ 000008E4 AE10A0E3 MOV R1,#+174 \ 000008E8 DE1C81E3 ORR R1,R1,#0xDE00 \ 000008EC 010050E1 CMP R0,R1 \ 000008F0 2900001A BNE ??maincsm_onmessage_46 7153 { 7154 switch((int)msg->data0) \ 000008F4 0C0094E5 LDR R0,[R4, #+12] \ 000008F8 101094E5 LDR R1,[R4, #+16] \ 000008FC ........ LDR R10,??DataTable315 ;; do_reconnect \ 00000900 D820A0E3 MOV R2,#+216 \ 00000904 742D82E3 ORR R2,R2,#0x1D00 \ 00000908 054082E0 ADD R4,R2,R5 \ 0000090C 882F42E2 SUB R2,R2,#+544 \ 00000910 059082E0 ADD R9,R2,R5 \ 00000914 01B0A0E3 MOV R11,#+1 \ 00000918 802050E2 SUBS R2,R0,#+128 \ 0000091C 0800000A BEQ ??maincsm_onmessage_47 \ 00000920 022052E2 SUBS R2,R2,#+2 \ 00000924 0200000A BEQ ??maincsm_onmessage_48 \ 00000928 122052E2 SUBS R2,R2,#+18 \ 0000092C 1200000A BEQ ??maincsm_onmessage_49 \ 00000930 1C0000EA B ??maincsm_onmessage_50 7155 { 7156 case LMAN_DISCONNECT_IND: 7157 is_gprs_online=0; \ ??maincsm_onmessage_48: \ 00000934 3C7086E5 STR R7,[R6, #+60] 7158 return(1); \ 00000938 0100A0E3 MOV R0,#+1 \ 0000093C 24D08DE2 ADD SP,SP,#+36 \ 00000940 F08FBDE8 POP {R4-R11,PC} ;; return 7159 case LMAN_CONNECT_CNF: 7160 vibra_count=1; \ ??maincsm_onmessage_47: \ 00000944 D0B385E5 STR R11,[R5, #+976] 7161 start_vibra(); \ 00000948 ........ BL start_vibra 7162 is_gprs_online=1; \ 0000094C 3CB086E5 STR R11,[R6, #+60] 7163 strcpy(logmsg,LG_GRGPRSUP); \ 00000950 9A1F88E2 ADD R1,R8,#+616 \ 00000954 0900A0E1 MOV R0,R9 \ 00000958 1A0000EF SWI +26 7164 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 0000095C ........ LDR R0,??DataTable326 ;; RECONNECT_TIME \ 00000960 0A20A0E1 MOV R2,R10 \ 00000964 000090E5 LDR R0,[R0, #+0] \ 00000968 D830A0E3 MOV R3,#+216 \ 0000096C 930001E0 MUL R1,R3,R0 \ 00000970 0400A0E1 MOV R0,R4 \ 00000974 4D0000EF SWI +77 7165 return(1); \ 00000978 070000EA B ??maincsm_onmessage_46 7166 case ENIP_DNR_HOST_BY_NAME: 7167 if ((int)msg->data1==DNR_ID) \ ??maincsm_onmessage_49: \ 0000097C 440096E5 LDR R0,[R6, #+68] \ 00000980 000051E1 CMP R1,R0 \ 00000984 0400001A BNE ??maincsm_onmessage_46 7168 { 7169 if (DNR_TRIES) SUBPROC((void *)create_connect); \ 00000988 480096E5 LDR R0,[R6, #+72] \ 0000098C 000050E3 CMP R0,#+0 \ 00000990 0100000A BEQ ??maincsm_onmessage_46 \ 00000994 ........ LDR R0,??DataTable317 ;; create_connect \ ??maincsm_onmessage_51: \ 00000998 710100EF SWI +369 7170 } 7171 return(1); \ ??maincsm_onmessage_46: \ 0000099C 0100A0E3 MOV R0,#+1 \ ??maincsm_onmessage_52: \ 000009A0 24D08DE2 ADD SP,SP,#+36 \ 000009A4 F08FBDE8 POP {R4-R11,PC} 7172 } 7173 if ((int)msg->data1==sock) \ ??maincsm_onmessage_50: \ 000009A8 382096E5 LDR R2,[R6, #+56] \ 000009AC 020051E1 CMP R1,R2 \ 000009B0 F9FFFF1A BNE ??maincsm_onmessage_46 7174 { 7175 //Если наш сокет 7176 if ((((unsigned int)msg->data0)>>28)==0xA) \ 000009B4 201EA0E1 LSR R1,R0,#+28 \ 000009B8 0A0051E3 CMP R1,#+10 \ 000009BC 0200001A BNE ??maincsm_onmessage_53 7177 { 7178 //Принят пакет 7179 ProcessPacket((TPKT *)msg->data0); \ 000009C0 ........ BL ProcessPacket 7180 return(0); \ 000009C4 0000A0E3 MOV R0,#+0 \ 000009C8 F4FFFFEA B ??maincsm_onmessage_52 7181 } 7182 switch((int)msg->data0) \ ??maincsm_onmessage_53: \ 000009CC 341096E5 LDR R1,[R6, #+52] \ 000009D0 8A0040E2 SUB R0,R0,#+138 \ 000009D4 050050E3 CMP R0,#+5 \ 000009D8 EFFFFF8A BHI ??maincsm_onmessage_46 \ 000009DC 012F8FE2 ADR R2,??maincsm_onmessage_1 \ 000009E0 D02092E1 LDRSB R2,[R2, R0] \ 000009E4 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_1: \ 000009E8 34342F01 DC8 +52,+52,+47,+1 \ 000009EC 3D390000 DC8 +61,+57,+0,+0 7183 { 7184 case ENIP_SOCK_CONNECTED: 7185 if (connect_state==1) \ ??maincsm_onmessage_54: \ 000009F0 010051E3 CMP R1,#+1 \ 000009F4 2700001A BNE ??maincsm_onmessage_55 7186 { 7187 if(VIBR_ON_CONNECT) \ 000009F8 ........ LDR R0,??DataTable322 ;; VIBR_ON_CONNECT \ 000009FC 000090E5 LDR R0,[R0, #+0] \ 00000A00 000050E3 CMP R0,#+0 7188 vibra_count=2; \ 00000A04 0200A013 MOVNE R0,#+2 \ 00000A08 D0038515 STRNE R0,[R5, #+976] 7189 else 7190 vibra_count=1; \ 00000A0C D0B38505 STREQ R11,[R5, #+976] 7191 start_vibra(); \ 00000A10 ........ BL start_vibra 7192 //Соединение установленно, посылаем пакет login 7193 strcpy(logmsg, LG_GRTRYLOGIN); \ 00000A14 A01F88E2 ADD R1,R8,#+640 \ 00000A18 0900A0E1 MOV R0,R9 \ 00000A1C 1A0000EF SWI +26 7194 { 7195 SUBPROC((void *)ab,0,0); \ 00000A20 B4019FE5 LDR R0,??maincsm_onmessage_5+0x40 ;; ab \ 00000A24 0020A0E3 MOV R2,#+0 \ 00000A28 0210A0E1 MOV R1,R2 \ 00000A2C 710100EF SWI +369 7196 /* int i=strlen(PASS); 7197 TPKT *p=malloc(sizeof(PKT)+i); 7198 p->pkt.uin=UIN; 7199 p->pkt.type=T_REQLOGIN; 7200 p->pkt.data_len=i; 7201 memcpy(p->data,PASS,i); 7202 SUBPROC((void *)send_login,0,p);*/ 7203 } 7204 GROUP_CACHE=0; \ 00000A30 F47385E5 STR R7,[R5, #+1012] 7205 SENDMSGCOUNT=0; //Начинаем отсчет \ 00000A34 687285E5 STR R7,[R5, #+616] 7206 if (!FindGroupByID(0)) AddGroup(0,LG_GROUPNOTINLIST); \ 00000A38 0700A0E1 MOV R0,R7 \ 00000A3C ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000A40 000050E3 CMP R0,#+0 \ 00000A44 0100001A BNE ??maincsm_onmessage_56 \ 00000A48 A41F88E2 ADD R1,R8,#+656 \ 00000A4C ........ _BLF AddGroup,??AddGroup??rA 7207 if (!FindContactByUin(UIN) && (IsShowLoopback)) AddContact(UIN, LG_CLLOOPBACK,0,1); \ ??maincsm_onmessage_56: \ 00000A50 ........ LDR R4,??DataTable338 ;; UIN \ 00000A54 000094E5 LDR R0,[R4, #+0] \ 00000A58 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000A5C 000050E3 CMP R0,#+0 \ 00000A60 0800001A BNE ??maincsm_onmessage_57 \ 00000A64 74019FE5 LDR R0,??maincsm_onmessage_5+0x44 ;; IsShowLoopback \ 00000A68 000090E5 LDR R0,[R0, #+0] \ 00000A6C 000050E3 CMP R0,#+0 \ 00000A70 0400000A BEQ ??maincsm_onmessage_57 \ 00000A74 000094E5 LDR R0,[R4, #+0] \ 00000A78 0130A0E3 MOV R3,#+1 \ 00000A7C 0720A0E1 MOV R2,R7 \ 00000A80 A71F88E2 ADD R1,R8,#+668 \ 00000A84 ........ _BLF AddContact,??AddContact??rA 7208 SUBPROC((void *)LoadLocalCL); \ ??maincsm_onmessage_57: \ 00000A88 54019FE5 LDR R0,??maincsm_onmessage_5+0x48 ;; LoadLocalCL \ 00000A8C 710100EF SWI +369 7209 SMART_REDRAW(); \ 00000A90 ........ BL SMART_REDRAW \ 00000A94 C0FFFFEA B ??maincsm_onmessage_46 7210 } 7211 else 7212 { 7213 ShowMSG(1,(int)LG_MSGILLEGMSGCON); \ ??maincsm_onmessage_55: \ 00000A98 AA1F88E2 ADD R1,R8,#+680 \ ??maincsm_onmessage_58: \ 00000A9C 0100A0E3 MOV R0,#+1 \ 00000AA0 480100EF SWI +328 \ 00000AA4 BCFFFFEA B ??maincsm_onmessage_46 7214 } 7215 break; 7216 case ENIP_SOCK_DATA_READ: 7217 if (connect_state>=2) \ ??maincsm_onmessage_59: \ 00000AA8 020051E3 CMP R1,#+2 7218 { 7219 //Если посылали send 7220 SUBPROC((void *)get_answer); \ 00000AAC 34019FA5 LDRGE R0,??maincsm_onmessage_5+0x4C ;; get_answer \ 00000AB0 B8FFFFAA BGE ??maincsm_onmessage_51 7221 //SMART_REDRAW(); 7222 } 7223 else 7224 { 7225 ShowMSG(1,(int)LG_MSGILLEGMSGREA); \ 00000AB4 B41F88E2 ADD R1,R8,#+720 \ 00000AB8 F7FFFFEA B ??maincsm_onmessage_58 7226 } 7227 break; 7228 case ENIP_BUFFER_FREE: 7229 case ENIP_BUFFER_FREE1: 7230 SUBPROC((void *)SendAnswer,0,0); \ ??maincsm_onmessage_60: \ 00000ABC ........ LDR R0,??DataTable320 ;; SendAnswer \ 00000AC0 0020A0E3 MOV R2,#+0 \ 00000AC4 0210A0E1 MOV R1,R2 \ 00000AC8 710100EF SWI +369 \ 00000ACC B2FFFFEA B ??maincsm_onmessage_46 7231 break; 7232 case ENIP_SOCK_REMOTE_CLOSED: 7233 //Закрыт со стороны сервера 7234 if (connect_state) \ ??maincsm_onmessage_61: \ 00000AD0 000051E3 CMP R1,#+0 \ 00000AD4 B0FFFF0A BEQ ??maincsm_onmessage_46 7235 SUBPROC((void *)end_socket); \ 00000AD8 ........ LDR R0,??DataTable321 ;; end_socket \ 00000ADC ADFFFFEA B ??maincsm_onmessage_51 7236 break; 7237 case ENIP_SOCK_CLOSED: 7238 //strcpy(logmsg, "No connection"); 7239 //Dump not received 7240 /* if (RXstate>(-(int)sizeof(PKT))) 7241 { 7242 unsigned int err; 7243 int f=fopen("4:\\NATICQ.dump",A_ReadWrite+A_Create+A_Truncate+A_BIN,P_READ+P_WRITE,&err); 7244 if (f!=-1) 7245 { 7246 fwrite(f,&RXbuf,RXstate+sizeof(PKT),&err); 7247 fclose(f,&err); 7248 } 7249 }*/ 7250 FillAllOffline(); \ ??maincsm_onmessage_62: \ 00000AE0 ........ _BLF FillAllOffline,??FillAllOffline??rA 7251 RecountMenu(NULL,1); \ 00000AE4 0110A0E3 MOV R1,#+1 \ 00000AE8 0700A0E1 MOV R0,R7 \ 00000AEC ........ BL RecountMenu 7252 connect_state=0; 7253 sock=-1; \ 00000AF0 0700E0E1 MVN R0,R7 \ 00000AF4 380086E5 STR R0,[R6, #+56] 7254 if(VIBR_ON_CONNECT) \ 00000AF8 ........ LDR R0,??DataTable322 ;; VIBR_ON_CONNECT \ 00000AFC 347086E5 STR R7,[R6, #+52] \ 00000B00 000090E5 LDR R0,[R0, #+0] \ 00000B04 000050E3 CMP R0,#+0 7255 vibra_count=4; \ 00000B08 0400A013 MOVNE R0,#+4 \ 00000B0C D0038515 STRNE R0,[R5, #+976] 7256 else 7257 vibra_count=1; \ 00000B10 D0B38505 STREQ R11,[R5, #+976] 7258 7259 start_vibra(); \ 00000B14 ........ BL start_vibra 7260 if (sendq_p) \ 00000B18 200096E5 LDR R0,[R6, #+32] \ 00000B1C 000050E3 CMP R0,#+0 \ 00000B20 0400000A BEQ ??maincsm_onmessage_63 7261 { 7262 snprintf(logmsg,255,"Disconnected, %d bytes not sended!",sendq_l); \ 00000B24 1C3096E5 LDR R3,[R6, #+28] \ 00000B28 BD2F88E2 ADD R2,R8,#+756 \ 00000B2C FF10A0E3 MOV R1,#+255 \ 00000B30 0900A0E1 MOV R0,R9 \ 00000B34 1B0100EF SWI +283 7263 7264 #ifdef LOG 7265 char *s=malloc(256); 7266 TTime tt; 7267 TDate d; 7268 GetDateTime(&d,&tt); 7269 CLIST *t; 7270 t=(CLIST*)cltop; 7271 ACKED *ack; 7272 int i=0; 7273 while(t) 7274 { 7275 ack=GetAck(t); 7276 if(ack) i+=ack->count; 7277 t=t->next; 7278 } 7279 // ACKED *GetAck(CLIST *t) 7280 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", 7281 uptimeHour, uptimeMin, uptimeSec, hostbuf2,tt.hour,tt.min,tt.sec,d.day,curping,total_unread,i,logmsg); 7282 logwrite(s); 7283 mfree(s); 7284 #endif 7285 } 7286 Play(sndLostConn); \ ??maincsm_onmessage_63: \ 00000B38 ........ LDR R0,??DataTable323 ;; sndLostConn \ 00000B3C ........ BL Play 7287 SMART_REDRAW(); \ 00000B40 ........ BL SMART_REDRAW 7288 SUBPROC((void *)ClearSendQ); \ 00000B44 ........ LDR R0,??DataTable324 ;; ClearSendQ \ 00000B48 710100EF SWI +369 7289 #ifdef EVILFOX 7290 if (!disautorecconect) GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*12,do_reconnect); 7291 #else 7292 if (!disautorecconect) \ 00000B4C BC0395E5 LDR R0,[R5, #+956] \ 00000B50 000050E3 CMP R0,#+0 \ 00000B54 90FFFF1A BNE ??maincsm_onmessage_46 7293 { 7294 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000B58 ........ LDR R0,??DataTable326 ;; RECONNECT_TIME \ 00000B5C 0A20A0E1 MOV R2,R10 \ 00000B60 000090E5 LDR R0,[R0, #+0] \ 00000B64 D830A0E3 MOV R3,#+216 \ 00000B68 930001E0 MUL R1,R3,R0 \ 00000B6C 0400A0E1 MOV R0,R4 \ 00000B70 4D0000EF SWI +77 7295 snprintf(logmsg,255,"%s\nReconect after %d second...",logmsg, RECONNECT_TIME); //2058 \ 00000B74 ........ LDR R0,??DataTable326 ;; RECONNECT_TIME \ 00000B78 0930A0E1 MOV R3,R9 \ 00000B7C 000090E5 LDR R0,[R0, #+0] \ 00000B80 C62F88E2 ADD R2,R8,#+792 \ 00000B84 01002DE9 PUSH {R0} \ 00000B88 FF10A0E3 MOV R1,#+255 \ 00000B8C 0900A0E1 MOV R0,R9 \ 00000B90 1B0100EF SWI +283 \ 00000B94 04D08DE2 ADD SP,SP,#+4 \ 00000B98 7FFFFFEA B ??maincsm_onmessage_46 \ ??maincsm_onmessage_5: \ 00000B9C ........ DC32 CheckDoubleRun \ 00000BA0 ........ DC32 ProcessNextSmile \ 00000BA4 ........ DC32 ProcessNextXStatImg \ 00000BA8 ........ DC32 IDLEICON_Y \ 00000BAC ........ DC32 IDLEICON_X \ 00000BB0 ........ DC32 msg_d_x \ 00000BB4 ........ DC32 msg_d_y \ 00000BB8 ........ DC32 Is_UPTIME_On \ 00000BBC ........ DC32 isPingIdle \ 00000BC0 ........ DC32 Is_Unread_On \ 00000BC4 ........ DC32 unread_Y \ 00000BC8 ........ DC32 unread_X \ 00000BCC ........ DC32 Is_Online_On \ 00000BD0 ........ DC32 Is_Online_On_Align \ 00000BD4 ........ DC32 online_y \ 00000BD8 ........ DC32 online_x \ 00000BDC ........ DC32 ab \ 00000BE0 ........ DC32 IsShowLoopback \ 00000BE4 ........ DC32 LoadLocalCL \ 00000BE8 ........ DC32 get_answer 7296 #ifdef LOG 7297 char *s=malloc(256); 7298 TTime tt; 7299 TDate d; 7300 GetDateTime(&d,&tt); 7301 CLIST *t; 7302 t=(CLIST*)cltop; 7303 ACKED *ack; 7304 int i=0; 7305 while(t) 7306 { 7307 ack=GetAck(t); 7308 if(ack) i+=ack->count; 7309 t=t->next; 7310 } 7311 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", 7312 uptimeHour, uptimeMin, uptimeSec, hostbuf2,tt.hour,tt.min,tt.sec,d.day,curping,total_unread,i,logmsg); 7313 logwrite(s); 7314 mfree(s); 7315 #endif 7316 } 7317 7318 #endif 7319 break; 7320 } 7321 } 7322 } 7323 return(1); 7324 } \ In segment DATA_I, align 4, align-sorted \ screen3: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ screen4: \ 00000008 DS8 8 \ 00000010 REQUIRE `?` \ align: \ 00000010 DS8 4 \ 00000014 REQUIRE `?` \ PrintTimer: \ 00000014 DS8 4 \ 00000018 REQUIRE `?` \ curping: \ 00000018 DS8 4 \ 0000001C REQUIRE `?` \ sendq_l: \ 0000001C DS8 4 \ 00000020 REQUIRE `?` \ sendq_p: \ 00000020 DS8 4 \ 00000024 REQUIRE `?` \ DoRefreshCL: \ 00000024 DS8 4 \ 00000028 REQUIRE `?` \ ifJustNowRefresh: \ 00000028 DS8 4 \ 0000002C REQUIRE `?` \ msg_away_timer: \ 0000002C DS8 4 \ 00000030 REQUIRE `?` \ RXstate: \ 00000030 DS8 4 \ 00000034 REQUIRE `?` \ connect_state: \ 00000034 DS8 4 \ 00000038 REQUIRE `?` \ sock: \ 00000038 DS8 4 \ 0000003C REQUIRE `?` \ is_gprs_online: \ 0000003C DS8 4 \ 00000040 REQUIRE `?` \ on_off_timer: \ 00000040 DS8 4 \ 00000044 REQUIRE `?` \ DNR_ID: \ 00000044 DS8 4 \ 00000048 REQUIRE `?` \ DNR_TRIES: \ 00000048 DS8 4 \ 0000004C REQUIRE `?` \ host_counter: \ 0000004C DS8 4 \ 00000050 REQUIRE `?` \ ShowLoadScreen: \ 00000050 DS8 4 \ 00000054 REQUIRE `?` \ i_curpos: \ 00000054 DS8 4 \ 00000058 REQUIRE `?` \ curpage: \ 00000058 DS8 4 \ 0000005C REQUIRE `?` \ collum: \ 0000005C DS8 4 \ 00000060 REQUIRE `?` \ shot_soft: \ 00000060 DS8 4 \ 00000064 REQUIRE `?` \ shot_header: \ 00000064 DS8 4 \ 00000068 REQUIRE `?` \ clstartItem: \ 00000068 DS8 4 \ 0000006C REQUIRE `?` \ _to_develop: \ 0000006C DS8 4 \ 00000070 REQUIRE `?` 7325 7326 7327 //-------------------- ICON IN ICONBAR --------------------// 7328 7329 //kluchnik 26.03.08 7330 #ifdef NEWSGOLD 7331 #pragma swi_number=0x27 7332 __swi __arm void AddIconToIconBar(int pic, short *num); 7333 7334 int iconmsg=1; \ iconmsg: \ 00000070 DS8 4 \ 00000074 REQUIRE `?` \ menuproc: \ 00000074 DS8 24 \ 0000008C REQUIRE `?` \ sds: \ 0000008C DS8 8 \ 00000094 REQUIRE `?` \ mp3: \ 00000094 DS8 4 \ 00000098 REQUIRE `?` \ wav: \ 00000098 DS8 4 \ 0000009C REQUIRE `?` \ amr: \ 0000009C DS8 4 \ 000000A0 REQUIRE `?` \ requests1: \ 000000A0 DS8 24 \ 000000B8 REQUIRE `?` \ requests2: \ 000000B8 DS8 20 \ 000000CC REQUIRE `?` \ requests3: \ 000000CC DS8 24 \ 000000E4 REQUIRE `?` \ requests4: \ 000000E4 DS8 20 \ 000000F8 REQUIRE `?` \ requests6: \ 000000F8 DS8 24 \ 00000110 REQUIRE `?` \ clrBlack: \ 00000110 DS8 4 \ 00000114 REQUIRE `?` \ clrWhite: \ 00000114 DS8 4 \ 00000118 REQUIRE `?` \ clrRed: \ 00000118 DS8 4 \ 0000011C REQUIRE `?` \ transparent: \ 0000011C DS8 4 \ 00000120 REQUIRE `?` \ blue: \ 00000120 DS8 8 \ 00000128 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 `?` \ NumOfItems: \ 00000014 DS8 4 \ 00000018 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ lastKey: \ 00000000 DS8 4 \ 00000004 REQUIRE `?` \ In segment CODE, align 4, keep-with-next 7335 void addIconBar(short* num) 7336 { \ addIconBar: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 7337 if(IsGuiOnTop(maingui_id) && !ShowStatusToIconBar) goto next;// return; \ 00000004 ........ LDR R6,??DataTable327 ;; screen3 \ 00000008 ........ LDR R7,??DataTable328 ;; i_rc \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 600297E5 LDR R0,[R7, #+608] \ 00000014 0850A0E3 MOV R5,#+8 \ 00000018 805D85E3 ORR R5,R5,#0x2000 \ 0000001C 350100EF SWI +309 \ 00000020 000050E3 CMP R0,#+0 \ 00000024 0300000A BEQ ??addIconBar_0 \ 00000028 94029FE5 LDR R0,??addIconBar_1 ;; ShowStatusToIconBar \ 0000002C 000090E5 LDR R0,[R0, #+0] \ 00000030 000050E3 CMP R0,#+0 \ 00000034 5200000A BEQ ??addIconBar_2 7338 7339 int icn; 7340 if(ShowStatusIcon==1 || ShowStatusIcon==3) \ ??addIconBar_0: \ 00000038 ........ LDR R0,??DataTable329 ;; ShowStatusIcon \ 0000003C 000090E5 LDR R0,[R0, #+0] \ 00000040 010050E3 CMP R0,#+1 \ 00000044 03005013 CMPNE R0,#+3 \ 00000048 2C00001A BNE ??addIconBar_3 7341 { 7342 if(total_unread) \ 0000004C EC0397E5 LDR R0,[R7, #+1004] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 2200000A BEQ ??addIconBar_4 7343 { 7344 if(blink_mess) iconmsg=1; \ 00000058 68029FE5 LDR R0,??addIconBar_1+0x4 ;; blink_mess \ 0000005C 0180A0E3 MOV R8,#+1 \ 00000060 000090E5 LDR R0,[R0, #+0] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 70808615 STRNE R8,[R6, #+112] \ 0000006C 0200001A BNE ??addIconBar_5 7345 AddIconToIconBar(NumStatusToIconBar +(iconmsg==1?IS_MSG:7777), num); \ 00000070 700096E5 LDR R0,[R6, #+112] \ 00000074 010050E3 CMP R0,#+1 \ 00000078 0100001A BNE ??addIconBar_6 \ ??addIconBar_5: \ 0000007C 0D00A0E3 MOV R0,#+13 \ 00000080 010000EA B ??addIconBar_7 \ ??addIconBar_6: \ 00000084 6100A0E3 MOV R0,#+97 \ 00000088 780D80E3 ORR R0,R0,#0x1E00 \ ??addIconBar_7: \ 0000008C ........ LDR R2,??DataTable333 ;; NumStatusToIconBar \ 00000090 0410A0E1 MOV R1,R4 \ 00000094 002092E5 LDR R2,[R2, #+0] \ 00000098 020080E0 ADD R0,R0,R2 \ 0000009C 270000EF SWI +39 7346 iconmsg=!iconmsg; \ 000000A0 700096E5 LDR R0,[R6, #+112] \ 000000A4 000050E3 CMP R0,#+0 \ 000000A8 0080A013 MOVNE R8,#+0 \ 000000AC 708086E5 STR R8,[R6, #+112] 7347 } 7348 else 7349 { 7350 switch(connect_state) 7351 { 7352 case 0: 7353 icn=IS_OFFLINE; 7354 break; 7355 case 3: 7356 icn=CurrentStatus; //IS_ONLINE; 7357 break; 7358 default: 7359 icn=IS_UNKNOWN; break; 7360 } 7361 AddIconToIconBar(NumStatusToIconBar + icn, num); 7362 } 7363 } 7364 else 7365 { 7366 if(ShowStatusIcon==2)//Если показывать и иконбаре везде,кроме идле 7367 { 7368 if(!(IsIdleUiOnTop())) 7369 { 7370 if(total_unread) 7371 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); 7372 else 7373 { 7374 switch(connect_state) 7375 { 7376 case 0: 7377 icn=IS_OFFLINE; break; 7378 case 3: 7379 icn=CurrentStatus; //IS_ONLINE; 7380 break; 7381 default: 7382 icn=IS_UNKNOWN; break; 7383 } 7384 AddIconToIconBar(NumStatusToIconBar + icn, num); 7385 } 7386 } 7387 } 7388 } 7389 7390 if(show_xstatus==2 || show_xstatus==3) \ ??addIconBar_8: \ 000000B0 14029FE5 LDR R0,??addIconBar_1+0x8 ;; show_xstatus \ 000000B4 000090E5 LDR R0,[R0, #+0] \ 000000B8 020050E3 CMP R0,#+2 \ 000000BC 03005013 CMPNE R0,#+3 \ 000000C0 2F00001A BNE ??addIconBar_2 7391 { 7392 if(total_unread2 && total_unread2<10) \ 000000C4 580297E5 LDR R0,[R7, #+600] \ 000000C8 000050E3 CMP R0,#+0 \ 000000CC 2400000A BEQ ??addIconBar_9 \ 000000D0 0A0050E3 CMP R0,#+10 \ 000000D4 220000AA BGE ??addIconBar_9 7393 AddIconToIconBar(8200 + total_unread2, num); \ 000000D8 0410A0E1 MOV R1,R4 \ 000000DC 000085E0 ADD R0,R5,R0 \ 000000E0 260000EA B ??addIconBar_10 \ ??addIconBar_4: \ 000000E4 340096E5 LDR R0,[R6, #+52] \ 000000E8 000050E3 CMP R0,#+0 \ 000000EC 1700000A BEQ ??addIconBar_11 \ 000000F0 030050E2 SUBS R0,R0,#+3 \ 000000F4 1400001A BNE ??addIconBar_12 \ ??addIconBar_13: \ 000000F8 FC0297E5 LDR R0,[R7, #+764] \ 000000FC 130000EA B ??addIconBar_11 \ ??addIconBar_3: \ 00000100 020050E3 CMP R0,#+2 \ 00000104 E9FFFF1A BNE ??addIconBar_8 \ 00000108 C50000EF SWI +197 \ 0000010C 000050E3 CMP R0,#+0 \ 00000110 E6FFFF1A BNE ??addIconBar_8 \ 00000114 EC0397E5 LDR R0,[R7, #+1004] \ 00000118 000050E3 CMP R0,#+0 \ 0000011C 0500000A BEQ ??addIconBar_14 \ 00000120 ........ LDR R0,??DataTable333 ;; NumStatusToIconBar \ 00000124 0410A0E1 MOV R1,R4 \ 00000128 000090E5 LDR R0,[R0, #+0] \ 0000012C 0D0080E2 ADD R0,R0,#+13 \ ??addIconBar_15: \ 00000130 270000EF SWI +39 \ 00000134 DDFFFFEA B ??addIconBar_8 \ ??addIconBar_14: \ 00000138 340096E5 LDR R0,[R6, #+52] \ 0000013C 000050E3 CMP R0,#+0 \ 00000140 0200000A BEQ ??addIconBar_11 \ 00000144 030050E2 SUBS R0,R0,#+3 \ 00000148 EAFFFF0A BEQ ??addIconBar_13 \ ??addIconBar_12: \ 0000014C 0E00A0E3 MOV R0,#+14 \ ??addIconBar_11: \ 00000150 ........ LDR R2,??DataTable333 ;; NumStatusToIconBar \ 00000154 0410A0E1 MOV R1,R4 \ 00000158 002092E5 LDR R2,[R2, #+0] \ 0000015C 020080E0 ADD R0,R0,R2 \ 00000160 F2FFFFEA B ??addIconBar_15 7394 else 7395 if(CurrentXStatus!=0) \ ??addIconBar_9: \ 00000164 000397E5 LDR R0,[R7, #+768] \ 00000168 000050E3 CMP R0,#+0 \ 0000016C 0400000A BEQ ??addIconBar_2 7396 AddIconToIconBar(NumXStatusToIconBar+CurrentXStatus,num); \ 00000170 58219FE5 LDR R2,??addIconBar_1+0xC ;; NumXStatusToIconBar \ 00000174 0410A0E1 MOV R1,R4 \ 00000178 002092E5 LDR R2,[R2, #+0] \ 0000017C 020080E0 ADD R0,R0,R2 \ ??addIconBar_10: \ 00000180 270000EF SWI +39 7397 } 7398 7399 7400 next: 7401 if(PingToIconBar) \ ??addIconBar_2: \ 00000184 48019FE5 LDR R0,??addIconBar_1+0x10 ;; PingToIconBar \ 00000188 000090E5 LDR R0,[R0, #+0] \ 0000018C 000050E3 CMP R0,#+0 \ 00000190 1400000A BEQ ??addIconBar_16 7402 { 7403 int ping=0; 7404 if(curping < 3) ping=0; \ 00000194 180096E5 LDR R0,[R6, #+24] \ 00000198 030050E3 CMP R0,#+3 \ 0000019C 0C0000BA BLT ??addIconBar_17 7405 else if(curping > 3 && curping < 10) ping=1; \ 000001A0 040050E3 CMP R0,#+4 \ 000001A4 020000BA BLT ??addIconBar_18 \ 000001A8 0A0050E3 CMP R0,#+10 \ 000001AC 0100A0B3 MOVLT R0,#+1 \ 000001B0 080000BA BLT ??addIconBar_19 7406 else if(curping > 10 && curping < 30) ping=2; \ ??addIconBar_18: \ 000001B4 0B0050E3 CMP R0,#+11 \ 000001B8 020000BA BLT ??addIconBar_20 \ 000001BC 1E0050E3 CMP R0,#+30 \ 000001C0 0200A0B3 MOVLT R0,#+2 \ 000001C4 030000BA BLT ??addIconBar_19 7407 else if(curping > 30) ping=3; \ ??addIconBar_20: \ 000001C8 1F0050E3 CMP R0,#+31 \ 000001CC 0300A0A3 MOVGE R0,#+3 \ 000001D0 000000AA BGE ??addIconBar_19 7408 else ping=0; \ ??addIconBar_17: \ 000001D4 0000A0E3 MOV R0,#+0 7409 7410 AddIconToIconBar(8210 + ping ,num); \ ??addIconBar_19: \ 000001D8 0410A0E1 MOV R1,R4 \ 000001DC 0A2085E2 ADD R2,R5,#+10 \ 000001E0 000082E0 ADD R0,R2,R0 \ 000001E4 270000EF SWI +39 7411 } 7412 7413 7414 if(ADDITION_UIN!=0) \ ??addIconBar_16: \ 000001E8 E8009FE5 LDR R0,??addIconBar_1+0x14 ;; ADDITION_UIN \ 000001EC 006090E5 LDR R6,[R0, #+0] \ 000001F0 000056E3 CMP R6,#+0 \ 000001F4 F081BD08 POPEQ {R4-R8,PC} 7415 { 7416 if(IsGuiOnTop(maingui_id) && !ShowAddStatusToIconBar) return;//Если не показывать когда гуй вверху,выходим нах \ 000001F8 600297E5 LDR R0,[R7, #+608] \ 000001FC 350100EF SWI +309 \ 00000200 000050E3 CMP R0,#+0 \ 00000204 0300000A BEQ ??addIconBar_21 \ 00000208 CC009FE5 LDR R0,??addIconBar_1+0x18 ;; ShowAddStatusToIconBar \ 0000020C 000090E5 LDR R0,[R0, #+0] \ 00000210 000050E3 CMP R0,#+0 \ 00000214 F081BD08 POPEQ {R4-R8,PC} 7417 7418 CLIST *t; 7419 t=FindContactByUin(ADDITION_UIN); \ ??addIconBar_21: \ 00000218 0600A0E1 MOV R0,R6 \ 0000021C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000220 0060B0E1 MOVS R6,R0 7420 if(t) \ 00000224 F081BD08 POPEQ {R4-R8,PC} 7421 { 7422 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) \ 00000228 B405D6E1 LDRH R0,[R6, #+84] \ 0000022C FF10A0E3 MOV R1,#+255 \ 00000230 FF1C81E3 ORR R1,R1,#0xFF00 \ 00000234 010050E1 CMP R0,R1 \ 00000238 F081BD08 POPEQ {R4-R8,PC} \ 0000023C 0600A0E1 MOV R0,R6 \ 00000240 ........ BL GetIconIndex \ 00000244 0E0050E3 CMP R0,#+14 \ 00000248 F081BD08 POPEQ {R4-R8,PC} 7423 { 7424 if(show_add_state) \ 0000024C 8C009FE5 LDR R0,??addIconBar_1+0x1C ;; show_add_state \ 00000250 000090E5 LDR R0,[R0, #+0] \ 00000254 000050E3 CMP R0,#+0 \ 00000258 0600000A BEQ ??addIconBar_22 7425 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); \ 0000025C 0600A0E1 MOV R0,R6 \ 00000260 ........ BL GetIconIndex \ 00000264 ........ LDR R2,??DataTable333 ;; NumStatusToIconBar \ 00000268 0410A0E1 MOV R1,R4 \ 0000026C 002092E5 LDR R2,[R2, #+0] \ 00000270 020080E0 ADD R0,R0,R2 \ 00000274 270000EF SWI +39 7426 7427 if(t->isunread) \ ??addIconBar_22: \ 00000278 840096E5 LDR R0,[R6, #+132] \ 0000027C 000050E3 CMP R0,#+0 \ 00000280 0300000A BEQ ??addIconBar_23 7428 AddIconToIconBar(8200 + t->unread_msg, num); \ 00000284 880096E5 LDR R0,[R6, #+136] \ 00000288 0410A0E1 MOV R1,R4 \ 0000028C 000085E0 ADD R0,R5,R0 \ 00000290 090000EA B ??addIconBar_24 7429 else 7430 if(show_add_xstate && t->xstate!=0) \ ??addIconBar_23: \ 00000294 48009FE5 LDR R0,??addIconBar_1+0x20 ;; show_add_xstate \ 00000298 000090E5 LDR R0,[R0, #+0] \ 0000029C 000050E3 CMP R0,#+0 \ 000002A0 B605D611 LDRHNE R0,[R6, #+86] \ 000002A4 00005013 CMPNE R0,#+0 \ 000002A8 F081BD08 POPEQ {R4-R8,PC} 7431 AddIconToIconBar(NumXStatusToIconBar + t->xstate, num); \ 000002AC 1C209FE5 LDR R2,??addIconBar_1+0xC ;; NumXStatusToIconBar \ 000002B0 0410A0E1 MOV R1,R4 \ 000002B4 002092E5 LDR R2,[R2, #+0] \ 000002B8 020080E0 ADD R0,R0,R2 \ ??addIconBar_24: \ 000002BC 270000EF SWI +39 \ 000002C0 F081BDE8 POP {R4-R8,PC} ;; return \ ??addIconBar_1: \ 000002C4 ........ DC32 ShowStatusToIconBar \ 000002C8 ........ DC32 blink_mess \ 000002CC ........ DC32 show_xstatus \ 000002D0 ........ DC32 NumXStatusToIconBar \ 000002D4 ........ DC32 PingToIconBar \ 000002D8 ........ DC32 ADDITION_UIN \ 000002DC ........ DC32 ShowAddStatusToIconBar \ 000002E0 ........ DC32 show_add_state \ 000002E4 ........ DC32 show_add_xstate 7432 } 7433 } 7434 } 7435 } 7436 7437 typedef struct 7438 { 7439 char check_name[8]; 7440 int addr; 7441 }ICONBAR_H; 7442 7443 #endif 7444 \ In segment DATA_C, align 4, align-sorted 7445 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 7446 7447 unsigned short maincsm_name_body[140]; 7448 7449 struct 7450 { 7451 CSM_DESC maincsm; 7452 WSHDR maincsm_name; 7453 #ifdef NEWSGOLD 7454 ICONBAR_H iconbar_handler; 7455 #endif \ In segment DATA_I, align 4, align-sorted 7456 }MAINCSM = \ MAINCSM: \ 00000000 DS8 72 \ 00000048 REQUIRE `?` 7457 { 7458 { 7459 maincsm_onmessage, 7460 maincsm_oncreate, 7461 #ifdef NEWSGOLD 7462 0, 7463 0, 7464 0, 7465 0, 7466 #endif 7467 maincsm_onclose, 7468 sizeof(MAIN_CSM), 7469 1, 7470 &minus11 7471 }, 7472 { 7473 maincsm_name_body, 7474 NAMECSM_MAGIC1, 7475 NAMECSM_MAGIC2, 7476 0x0, 7477 139 7478 } 7479 #ifdef NEWSGOLD 7480 , 7481 { 7482 "IconBar" 7483 } 7484 #endif 7485 }; 7486 \ In segment CODE, align 4, keep-with-next 7487 void UpdateCSMname(void) 7488 { 7489 wsprintf((WSHDR *)(&MAINCSM.maincsm_name), "NATICQ: %d",UIN); \ UpdateCSMname: \ 00000000 ........ LDR R0,??DataTable338 ;; UIN \ 00000004 10109FE5 LDR R1,??UpdateCSMname_0 ;; `?` \ 00000008 00402DE9 PUSH {LR} \ 0000000C 002090E5 LDR R2,[R0, #+0] \ 00000010 08009FE5 LDR R0,??UpdateCSMname_0+0x4 ;; MAINCSM + 40 \ 00000014 240100EF SWI +292 7490 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??UpdateCSMname_0: \ 0000001C ........ DC32 `?` \ 00000020 ........ DC32 MAINCSM + 40 7491 7492 #ifdef NEWSGOLD \ In segment CODE, align 4, keep-with-next 7493 void SetIconBarHandler() 7494 { 7495 MAINCSM.iconbar_handler.addr = (int)addIconBar; \ SetIconBarHandler: \ 00000000 08009FE5 LDR R0,??SetIconBarHandler_0 ;; MAINCSM + 68 \ 00000004 ........ LDR R1,??DataTable349 ;; addIconBar \ 00000008 001080E5 STR R1,[R0, #+0] 7496 } \ 0000000C 1EFF2FE1 BX LR ;; return \ ??SetIconBarHandler_0: \ 00000010 ........ DC32 MAINCSM + 68 7497 #endif 7498 \ In segment CODE, align 4, keep-with-next 7499 int main(char *filename) 7500 { \ main: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 \ 00000008 0060A0E1 MOV R6,R0 7501 MAIN_CSM main_csm; 7502 char *s; 7503 int len; 7504 WSHDR *ws; 7505 if(UpdateConfig() == -1) return 0; \ 0000000C ........ _BLF UpdateConfig,??UpdateConfig??rA \ 00000010 010070E3 CMN R0,#+1 \ 00000014 8800000A BEQ ??main_0 7506 // InitConfig2(); 7507 7508 sprintf(PINGO, "Ping None"); \ 00000018 ........ LDR R4,??DataTable355 ;; i_rc \ 0000001C ........ LDR R5,??DataTable337 ;; Canvas \ 00000020 620D84E2 ADD R0,R4,#+6272 \ 00000024 CE1F85E2 ADD R1,R5,#+824 \ 00000028 160000EF SWI +22 7509 7510 s=strrchr(filename,'\\'); 7511 len=(s-filename)+1; \ 0000002C 5C10A0E3 MOV R1,#+92 \ 00000030 0600A0E1 MOV R0,R6 \ 00000034 170100EF SWI +279 \ 00000038 060040E0 SUB R0,R0,R6 \ 0000003C 017080E2 ADD R7,R0,#+1 7512 strncpy(elf_path,filename,len); \ 00000040 0720A0E1 MOV R2,R7 \ 00000044 0610A0E1 MOV R1,R6 \ 00000048 490E84E2 ADD R0,R4,#+1168 \ 0000004C 160100EF SWI +278 7513 elf_path[len]=0; \ 00000050 0060A0E3 MOV R6,#+0 \ 00000054 040087E0 ADD R0,R7,R4 \ 00000058 9064C0E5 STRB R6,[R0, #+1168] 7514 if (!UIN) \ 0000005C ........ LDR R0,??DataTable338 ;; UIN \ 00000060 000090E5 LDR R0,[R0, #+0] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 1500001A BNE ??main_1 7515 { 7516 LockSched(); \ 0000006C 460100EF SWI +326 7517 ShowMSG(1,(int)LG_MSGNOUINPASS); \ 00000070 D11F85E2 ADD R1,R5,#+836 \ 00000074 0100A0E3 MOV R0,#+1 \ 00000078 480100EF SWI +328 7518 ws=AllocWS(150); \ 0000007C 9600A0E3 MOV R0,#+150 \ 00000080 250100EF SWI +293 7519 str_2ws(ws,suc_config_name,128); \ 00000084 ........ LDR R1,??DataTable339 ;; suc_config_name \ 00000088 0040A0E1 MOV R4,R0 \ 0000008C 8020A0E3 MOV R2,#+128 \ 00000090 6C0100EF SWI +364 7520 ExecuteFile(ws,0,0); \ 00000094 0020A0E3 MOV R2,#+0 \ 00000098 0210A0E1 MOV R1,R2 \ 0000009C 0400A0E1 MOV R0,R4 \ 000000A0 940000EF SWI +148 7521 FreeWS(ws); \ 000000A4 0400A0E1 MOV R0,R4 \ 000000A8 290100EF SWI +297 7522 UnlockSched(); \ 000000AC 470100EF SWI +327 7523 SUBPROC((void *)ElfKiller); \ 000000B0 ........ LDR R0,??DataTable340 ;; ElfKiller \ 000000B4 710100EF SWI +369 7524 return 0; \ 000000B8 0600A0E1 MOV R0,R6 \ 000000BC 2CD08DE2 ADD SP,SP,#+44 \ 000000C0 F08FBDE8 POP {R4-R11,PC} 7525 } 7526 7527 ReadDefSettings(); 7528 setup_ICONS(); 7529 LoadXStatusText(); 7530 UpdateCSMname(); 7531 LockSched(); 7532 maincsm_id=CreateCSM(&MAINCSM.maincsm,&main_csm,0); \ ??main_1: \ 000000C4 7C719FE5 LDR R7,??main_2 ;; MAINCSM 7533 UnlockSched(); 7534 7535 PrintLibInit(4); 7536 FontPathInit((char *)fontpath, 1); \ 000000C8 ........ LDR R8,??DataTable341 ;; fontpath 7537 FontPathInit((char *)fontpath2, 1); \ 000000CC ........ LDR R9,??DataTable342 ;; fontpath2 7538 FontPathInit((char *)fontpath3, 1); \ 000000D0 ........ LDR R10,??DataTable343 ;; fontpath3 7539 FontPathInit((char *)fontpath4, 1); \ 000000D4 ........ LDR R11,??DataTable344 ;; fontpath4 \ 000000D8 ........ BL ReadDefSettings \ 000000DC ........ BL setup_ICONS \ 000000E0 ........ _BLF LoadXStatusText,??LoadXStatusText??rA \ 000000E4 ........ BL UpdateCSMname \ 000000E8 460100EF SWI +326 \ 000000EC 0020A0E3 MOV R2,#+0 \ 000000F0 0D10A0E1 MOV R1,SP \ 000000F4 0700A0E1 MOV R0,R7 \ 000000F8 070100EF SWI +263 \ 000000FC 5C0284E5 STR R0,[R4, #+604] \ 00000100 470100EF SWI +327 \ 00000104 0400A0E3 MOV R0,#+4 \ 00000108 ........ _BLF PrintLibInit,??PrintLibInit??rA \ 0000010C 0110A0E3 MOV R1,#+1 \ 00000110 0800A0E1 MOV R0,R8 \ 00000114 ........ _BLF FontPathInit,??FontPathInit??rA \ 00000118 0110A0E3 MOV R1,#+1 \ 0000011C 0900A0E1 MOV R0,R9 \ 00000120 ........ _BLF FontPathInit,??FontPathInit??rA \ 00000124 0110A0E3 MOV R1,#+1 \ 00000128 0A00A0E1 MOV R0,R10 \ 0000012C ........ _BLF FontPathInit,??FontPathInit??rA \ 00000130 0110A0E3 MOV R1,#+1 \ 00000134 0B00A0E1 MOV R0,R11 \ 00000138 ........ _BLF FontPathInit,??FontPathInit??rA 7540 SetCanvasFlag(1); \ 0000013C 0100A0E3 MOV R0,#+1 \ 00000140 ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 7541 7542 if(isSystemFont) clfont=100+pngFont; \ 00000144 ........ LDR R0,??DataTable345 ;; isSystemFont \ 00000148 000090E5 LDR R0,[R0, #+0] \ 0000014C 000050E3 CMP R0,#+0 \ 00000150 0300000A BEQ ??main_3 \ 00000154 ........ LDR R0,??DataTable346 ;; pngFont \ 00000158 000090E5 LDR R0,[R0, #+0] \ 0000015C 640080E2 ADD R0,R0,#+100 \ 00000160 000000EA B ??main_4 7543 else clfont=2; \ ??main_3: \ 00000164 0200A0E3 MOV R0,#+2 \ ??main_4: \ 00000168 3C0484E5 STR R0,[R4, #+1084] 7544 7545 if(!strlen(fontpath2) || !strlen(fontpath3)) clfont=100+FONT_SMALL; \ 0000016C 0900A0E1 MOV R0,R9 \ 00000170 1B0000EF SWI +27 \ 00000174 000050E3 CMP R0,#+0 \ 00000178 0300000A BEQ ??main_5 \ 0000017C 0A00A0E1 MOV R0,R10 \ 00000180 1B0000EF SWI +27 \ 00000184 000050E3 CMP R0,#+0 \ 00000188 0100001A BNE ??main_6 \ ??main_5: \ 0000018C 6F00A0E3 MOV R0,#+111 \ 00000190 3C0484E5 STR R0,[R4, #+1084] 7546 if(!strlen(fontpath4)) { PNG_SOFTKEY=0; PNG_HEADER=0; } \ ??main_6: \ 00000194 0B00A0E1 MOV R0,R11 \ 00000198 1B0000EF SWI +27 \ 0000019C 000050E3 CMP R0,#+0 \ 000001A0 0300001A BNE ??main_7 \ 000001A4 ........ LDR R0,??DataTable347 ;; PNG_SOFTKEY \ 000001A8 006080E5 STR R6,[R0, #+0] \ 000001AC ........ LDR R0,??DataTable348 ;; PNG_HEADER \ 000001B0 006080E5 STR R6,[R0, #+0] 7547 7548 away_timer(); \ ??main_7: \ 000001B4 ........ BL away_timer 7549 #ifdef NEWSGOLD 7550 SetIconBarHandler(); \ 000001B8 ........ LDR R0,??DataTable349 ;; addIconBar \ 000001BC 440087E5 STR R0,[R7, #+68] 7551 #endif 7552 if(fonto==1) \ 000001C0 ........ LDR R0,??DataTable350 ;; fonto \ 000001C4 000090E5 LDR R0,[R0, #+0] \ 000001C8 010050E3 CMP R0,#+1 \ 000001CC 0B00001A BNE ??main_8 7553 { 7554 char *heght=malloc(64); \ 000001D0 4000A0E3 MOV R0,#+64 \ 000001D4 140000EF SWI +20 \ 000001D8 0060A0E1 MOV R6,R0 7555 sprintf(heght, "%s2240.png", fontpath); \ 000001DC 0820A0E1 MOV R2,R8 \ 000001E0 971F85E2 ADD R1,R5,#+604 \ 000001E4 160000EF SWI +22 7556 paused_height=GetImgHeight((int)heght); \ 000001E8 0600A0E1 MOV R0,R6 \ 000001EC 210000EF SWI +33 \ 000001F0 300284E5 STR R0,[R4, #+560] 7557 mfree(heght); \ 000001F4 0600A0E1 MOV R0,R6 \ 000001F8 150000EF SWI +21 \ 000001FC 010000EA B ??main_9 7558 } 7559 else 7560 paused_height=fonto-100; \ ??main_8: \ 00000200 640040E2 SUB R0,R0,#+100 \ 00000204 300284E5 STR R0,[R4, #+560] 7561 7562 GBS_StartTimerProc(&ping_tmr, 12000, Pinger2); \ ??main_9: \ 00000208 ........ LDR R2,??DataTable351 ;; Pinger2 \ 0000020C E010A0E3 MOV R1,#+224 \ 00000210 B81D81E3 ORR R1,R1,#0x2E00 \ 00000214 7000A0E3 MOV R0,#+112 \ 00000218 600D80E3 ORR R0,R0,#0x1800 \ 0000021C 040080E0 ADD R0,R0,R4 \ 00000220 4D0000EF SWI +77 7563 upTime(); \ 00000224 ........ BL upTime 7564 #ifdef NEWSGOLD 7565 //ScreenSaverTimer(); 7566 initTags(); \ 00000228 ........ _BLF initTags,??initTags??rA 7567 #endif 7568 7569 #ifndef DEBUG 7570 AutoChangeStatus_timer(); \ 0000022C ........ BL AutoChangeStatus_timer 7571 #endif 7572 init_time_zone(); \ 00000230 ........ BL init_time_zone 7573 AddKeybMsgHook((void *)my_keyhook); \ 00000234 ........ LDR R0,??DataTable352 ;; my_keyhook \ 00000238 2B0100EF SWI +299 7574 return 0; \ ??main_0: \ 0000023C 0000A0E3 MOV R0,#+0 \ 00000240 2CD08DE2 ADD SP,SP,#+44 \ 00000244 F08FBDE8 POP {R4-R11,PC} ;; return \ ??main_2: \ 00000248 ........ DC32 MAINCSM 7575 } 7576 7577 //=========================================================== 7578 // Edit chat 7579 //=========================================================== 7580 \ In segment CODE, align 4, keep-with-next 7581 void edchat_locret(void){} \ edchat_locret: \ 00000000 1EFF2FE1 BX LR ;; return 7582 \ In segment CODE, align 4, keep-with-next 7583 char *ExtractAnswer(WSHDR *ws) 7584 { \ ExtractAnswer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 7585 S_SMILES *t; 7586 int c; 7587 int len=0; 7588 int scur; 7589 char *msg=NULL; 7590 unsigned short *wsbody=ws->wsbody; \ 00000004 005090E5 LDR R5,[R0, #+0] \ 00000008 0040A0E3 MOV R4,#+0 7591 int wslen=wsbody[0]; \ 0000000C B060D5E1 LDRH R6,[R5, #+0] \ 00000010 0070A0E3 MOV R7,#+0 7592 if (wslen) \ 00000014 000056E3 CMP R6,#+0 \ 00000018 3C00000A BEQ ??ExtractAnswer_0 7593 { 7594 for (int i=0; i=0xE100) 7598 { 7599 t=FindSmileByUni(c); 7600 if (t) 7601 { 7602 if (t->lines) 7603 { 7604 len+=strlen(t->lines->text); 7605 } 7606 } 7607 else len++; 7608 } 7609 else len++; 7610 } 7611 7612 msg=malloc(len+1); \ ??ExtractAnswer_2: \ 00000024 010084E2 ADD R0,R4,#+1 \ 00000028 140000EF SWI +20 \ 0000002C 0070A0E1 MOV R7,R0 7613 scur=0; \ 00000030 0090A0E3 MOV R9,#+0 7614 for (int wcur=0; wcur=0xE100) 7619 { 7620 t=FindSmileByUni(c); 7621 if (t) 7622 { 7623 int w; 7624 char *s; 7625 if (t->lines) 7626 { 7627 s=t->lines->text; 7628 while ((w=*s++) && scurnext)) \ FindNextActiveContact: \ ??FindNextActiveContact_0: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0300000A BEQ ??FindNextActiveContact_1 7655 { 7656 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 7657 } 7658 t=(CLIST *)(&cltop); \ ??FindNextActiveContact_1: \ 0000001C ........ LDR R0,??DataTable354 ;; i_rc + 1008 \ 00000020 020000EA B ??FindNextActiveContact_2 7659 while(t=(CLIST *)(t->next)) 7660 { 7661 if (t->isactive) return t; \ ??FindNextActiveContact_3: \ 00000024 A01090E5 LDR R1,[R0, #+160] \ 00000028 000051E3 CMP R1,#+0 \ 0000002C 1EFF2F11 BXNE LR 7662 } \ ??FindNextActiveContact_2: \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 F9FFFF1A BNE ??FindNextActiveContact_3 7663 return NULL; \ 0000003C 1EFF2FE1 BX LR ;; return 7664 } 7665 \ In segment CODE, align 4, keep-with-next 7666 CLIST *FindPrevActiveContact(CLIST *t) 7667 { 7668 CLIST *cl; 7669 CLIST *cl_active=NULL; 7670 cl=(CLIST *)(&cltop); \ FindPrevActiveContact: \ 00000000 ........ LDR R2,??DataTable354 ;; i_rc + 1008 \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 020000EA B ??FindPrevActiveContact_0 7671 7672 7673 while(cl=cl->next) 7674 { 7675 if (cl==t) 7676 { 7677 if (cl_active==NULL) break; 7678 else return (cl_active); 7679 } 7680 else 7681 { 7682 if (cl->isactive) cl_active=cl; \ ??FindPrevActiveContact_1: \ 0000000C A03092E5 LDR R3,[R2, #+160] \ 00000010 000053E3 CMP R3,#+0 \ 00000014 0210A011 MOVNE R1,R2 7683 } \ ??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 7684 } 7685 while(t) \ ??FindPrevActiveContact_2: \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 FBFFFF0A BEQ ??FindPrevActiveContact_3 7686 { 7687 if (t->isactive) cl_active=t; \ 00000044 A02090E5 LDR R2,[R0, #+160] \ 00000048 000052E3 CMP R2,#+0 \ 0000004C 0010A011 MOVNE R1,R0 7688 t=t->next; \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 F8FFFFEA B ??FindPrevActiveContact_2 7689 } 7690 return cl_active; 7691 } 7692 7693 \ In segment CODE, align 4, keep-with-next 7694 void ed_options_handler(USR_MENU_ITEM *item) 7695 { \ ed_options_handler: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 7696 EDCHAT_STRUCT *ed_struct=item->user_pointer; 7697 CLIST *t; 7698 int i=item->cur_item; 7699 if (item->type==0) \ 00000004 ........ LDR R5,??DataTable355 ;; 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 7700 { 7701 if(IsMultiBuffer) \ 00000024 ........ LDR R3,??DataTable357 ;; IsMultiBuffer \ 00000028 D81395E5 LDR R1,[R5, #+984] \ 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 7702 { 7703 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 7704 { 7705 case 0: 7706 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 7707 ascii2ws(item->ws,"Cмайлы"); \ 00000080 0C009705 LDREQ R0,[R7, #+12] \ 00000084 0810A001 MOVEQ R1,R8 \ 00000088 180000EA B ??ed_options_handler_8 7708 else 7709 ascii2ws(item->ws,"В буфер"); 7710 break; 7711 case 1: 7712 ascii2ws(item->ws,"Из буфера"); \ ??ed_options_handler_4: \ 0000008C 101088E2 ADD R1,R8,#+16 \ 00000090 160000EA B ??ed_options_handler_8 7713 break; 7714 case 2: 7715 ascii2ws(item->ws,"Команда"); \ ??ed_options_handler_5: \ 00000094 1C1088E2 ADD R1,R8,#+28 \ 00000098 140000EA B ??ed_options_handler_8 7716 break; 7717 case 3: 7718 ascii2ws(item->ws,"Очистить буфер"); \ ??ed_options_handler_6: \ 0000009C 241088E2 ADD R1,R8,#+36 \ 000000A0 120000EA B ??ed_options_handler_8 7719 break; 7720 default: 7721 i-=4; \ ??ed_options_handler_7: \ 000000A4 046046E2 SUB R6,R6,#+4 7722 if (iloaded_templates) ascii2ws(item->ws,templates_lines[i]); \ 000000A8 0D0000EA B ??ed_options_handler_9 7723 break; 7724 } 7725 } 7726 else 7727 { 7728 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 7729 { 7730 case 0: 7731 ascii2ws(item->ws,LG_MNUEDNEXTACT); \ ??ed_options_handler_10: \ 000000C8 341088E2 ADD R1,R8,#+52 \ 000000CC 070000EA B ??ed_options_handler_8 7732 break; 7733 case 1: 7734 ascii2ws(item->ws,LG_MNUEDPREVACT); \ ??ed_options_handler_11: \ 000000D0 441088E2 ADD R1,R8,#+68 \ 000000D4 050000EA B ??ed_options_handler_8 7735 break; 7736 case 2: 7737 ascii2ws(item->ws,"Команды"); \ ??ed_options_handler_12: \ 000000D8 541088E2 ADD R1,R8,#+84 \ 000000DC 030000EA B ??ed_options_handler_8 7738 break; 7739 default: 7740 i-=3; \ ??ed_options_handler_13: \ 000000E0 036046E2 SUB R6,R6,#+3 7741 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 7742 break; 7743 } 7744 } 7745 } 7746 7747 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 7748 { 7749 if(IsMultiBuffer) \ 00000100 ........ LDR R3,??DataTable357 ;; IsMultiBuffer \ 00000104 D81395E5 LDR R1,[R5, #+984] \ 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 7750 { 7751 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 7752 { 7753 case 0: 7754 { 7755 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 7756 CreateSmileSelectGUI(ed_struct); \ 00000150 0400A0E1 MOV R0,R4 \ 00000154 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA \ 00000158 340000EA B ??ed_options_handler_22 7757 else 7758 { 7759 int ed; 7760 EDITCONTROL ec; 7761 EDITCONTROL ec_hdr; 7762 7763 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 7764 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 7765 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 7766 7767 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 00000188 340295E5 LDR R0,[R5, #+564] \ 0000018C 230100EF SWI +291 \ 00000190 012080E2 ADD R2,R0,#+1 \ 00000194 340295E5 LDR R0,[R5, #+564] \ 00000198 3E10A0E3 MOV R1,#+62 \ 0000019C 1D0000EF SWI +29 7768 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 000001A0 340295E5 LDR R0,[R5, #+564] \ 000001A4 230100EF SWI +291 \ 000001A8 012080E2 ADD R2,R0,#+1 \ 000001AC 340295E5 LDR R0,[R5, #+564] \ 000001B0 2010A0E3 MOV R1,#+32 \ 000001B4 1D0000EF SWI +29 7769 wstrcat(wsBuffer,ec_hdr.pWS); \ 000001B8 28109DE5 LDR R1,[SP, #+40] \ 000001BC 340295E5 LDR R0,[R5, #+564] \ 000001C0 210100EF SWI +289 7770 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 000001C4 340295E5 LDR R0,[R5, #+564] \ 000001C8 230100EF SWI +291 \ 000001CC 012080E2 ADD R2,R0,#+1 \ 000001D0 340295E5 LDR R0,[R5, #+564] \ 000001D4 0A10A0E3 MOV R1,#+10 \ 000001D8 1D0000EF SWI +29 7771 7772 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 000001DC 340295E5 LDR R0,[R5, #+564] \ 000001E0 230100EF SWI +291 \ 000001E4 012080E2 ADD R2,R0,#+1 \ 000001E8 340295E5 LDR R0,[R5, #+564] \ 000001EC 3E10A0E3 MOV R1,#+62 \ 000001F0 1D0000EF SWI +29 7773 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 000001F4 340295E5 LDR R0,[R5, #+564] \ 000001F8 230100EF SWI +291 \ 000001FC 012080E2 ADD R2,R0,#+1 \ 00000200 340295E5 LDR R0,[R5, #+564] \ 00000204 2010A0E3 MOV R1,#+32 \ 00000208 1D0000EF SWI +29 7774 wstrcat(wsBuffer,ec.pWS); \ 0000020C 54109DE5 LDR R1,[SP, #+84] \ 00000210 340295E5 LDR R0,[R5, #+564] \ 00000214 210100EF SWI +289 7775 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 00000218 340295E5 LDR R0,[R5, #+564] \ 0000021C 230100EF SWI +291 \ 00000220 012080E2 ADD R2,R0,#+1 \ 00000224 340295E5 LDR R0,[R5, #+564] \ 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} 7776 } 7777 } 7778 break; 7779 case 1: 7780 { 7781 EDITCONTROL ec; 7782 WSHDR *ws; 7783 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 7784 ws=AllocWS(ec.pWS->wsbody[0]+wsBuffer->wsbody[0]+1); \ 00000244 28009DE5 LDR R0,[SP, #+40] \ 00000248 341295E5 LDR R1,[R5, #+564] \ 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 7785 wstrcpy(ws,ec.pWS); \ 00000268 28109DE5 LDR R1,[SP, #+40] \ 0000026C 0060A0E1 MOV R6,R0 \ 00000270 1F0100EF SWI +287 7786 wstrcat(ws,wsBuffer); \ 00000274 341295E5 LDR R1,[R5, #+564] \ 00000278 0600A0E1 MOV R0,R6 \ 0000027C 210100EF SWI +289 7787 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 7788 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 7789 } 7790 break; 7791 case 2: 7792 DispCmdMenu(ed_struct); \ ??ed_options_handler_18: \ 000002A8 0400A0E1 MOV R0,R4 \ 000002AC ........ BL DispCmdMenu \ 000002B0 DEFFFFEA B ??ed_options_handler_22 7793 break; 7794 case 3: 7795 CutWSTR(wsBuffer,0); \ ??ed_options_handler_19: \ 000002B4 340295E5 LDR R0,[R5, #+564] \ 000002B8 0010A0E3 MOV R1,#+0 \ 000002BC 260100EF SWI +294 \ 000002C0 DAFFFFEA B ??ed_options_handler_22 7796 break; 7797 default: 7798 i-=4; \ ??ed_options_handler_20: \ 000002C4 046046E2 SUB R6,R6,#+4 7799 if (iloaded_templates) \ 000002C8 020056E1 CMP R6,R2 \ 000002CC 760000AA BGE ??ed_options_handler_14 7800 { 7801 EDITCONTROL ec; 7802 WSHDR *ed_ws; 7803 int c; 7804 char *p=templates_lines[i]; \ 000002D0 065191E7 LDR R5,[R1, +R6, LSL #+2] 7805 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 7806 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 7807 wstrcpy(ed_ws,ec.pWS); \ 000002FC 28109DE5 LDR R1,[SP, #+40] \ 00000300 0060A0E1 MOV R6,R0 \ 00000304 1F0100EF SWI +287 7808 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 7809 { 7810 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 7811 while(c=*p++) 7812 { 7813 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 7814 } \ ??ed_options_handler_24: \ 00000344 ........ LDRB R0,[R5], #+1 \ 00000348 000050E3 CMP R0,#+0 \ 0000034C F6FFFF1A BNE ??ed_options_handler_25 7815 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 7816 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 7817 } 7818 else 7819 { 7820 while(c=*p++) 7821 { 7822 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 7823 } \ ??ed_options_handler_23: \ 00000380 ........ LDRB R0,[R5], #+1 \ 00000384 000050E3 CMP R0,#+0 \ 00000388 F8FFFF1A BNE ??ed_options_handler_28 7824 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 0000038C 400000EA B ??ed_options_handler_29 7825 } 7826 FreeWS(ed_ws); 7827 } 7828 break; 7829 } 7830 } 7831 else 7832 { 7833 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 7834 { 7835 case 0: 7836 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 7837 if (t && t!=ed_struct->ed_contact) \ 000003BC 07005411 CMPNE R4,R7 \ 000003C0 3900000A BEQ ??ed_options_handler_14 7838 { 7839 GeneralFunc_flag1(edchat_id,1); \ 000003C4 F80395E5 LDR R0,[R5, #+1016] \ 000003C8 0110A0E3 MOV R1,#+1 \ 000003CC 3D0100EF SWI +317 7840 CreateEditChat(t); \ 000003D0 0400A0E1 MOV R0,R4 \ 000003D4 ........ BL CreateEditChat \ 000003D8 94FFFFEA B ??ed_options_handler_22 7841 } 7842 break; 7843 case 1: 7844 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 7845 if (t && t!=ed_struct->ed_contact) 7846 { 7847 GeneralFunc_flag1(edchat_id,1); 7848 CreateEditChat(t); 7849 } 7850 break; 7851 case 2: 7852 DispCmdMenu(ed_struct); 7853 break; 7854 default: 7855 i-=3; \ ??ed_options_handler_32: \ 000003E8 036046E2 SUB R6,R6,#+3 7856 if (iloaded_templates) \ 000003EC 020056E1 CMP R6,R2 \ 000003F0 2D0000AA BGE ??ed_options_handler_14 7857 { 7858 EDITCONTROL ec; 7859 WSHDR *ed_ws; 7860 int c; 7861 char *p=templates_lines[i]; \ 000003F4 065191E7 LDR R5,[R1, +R6, LSL #+2] 7862 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 7863 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 7864 wstrcpy(ed_ws,ec.pWS); \ 00000420 28109DE5 LDR R1,[SP, #+40] \ 00000424 0060A0E1 MOV R6,R0 \ 00000428 1F0100EF SWI +287 7865 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 7866 { 7867 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 7868 while(c=*p++) 7869 { 7870 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 7871 } \ ??ed_options_handler_35: \ 00000468 ........ LDRB R0,[R5], #+1 \ 0000046C 000050E3 CMP R0,#+0 \ 00000470 F6FFFF1A BNE ??ed_options_handler_36 7872 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 00000474 B5FFFFEA B ??ed_options_handler_26 7873 EDIT_SetCursorPos(ed_struct->ed_chatgui,pos); 7874 } 7875 else 7876 { 7877 while(c=*p++) 7878 { 7879 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 7880 } \ ??ed_options_handler_34: \ 00000488 ........ LDRB R0,[R5], #+1 \ 0000048C 000050E3 CMP R0,#+0 \ 00000490 F8FFFF1A BNE ??ed_options_handler_37 7881 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 7882 } 7883 FreeWS(ed_ws); \ ??ed_options_handler_27: \ 000004A4 0600A0E1 MOV R0,R6 \ 000004A8 290100EF SWI +297 7884 } 7885 break; 7886 } 7887 } 7888 } 7889 } \ ??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 `?` 7890 \ In segment CODE, align 4, keep-with-next 7891 unsigned short * wstrstr(unsigned short *ws, char *str, int *wslen, int len) 7892 { \ 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 7893 char *s; 7894 unsigned short *w; 7895 int l; 7896 7897 while(*wslen >= len) 7898 { 7899 s = str; 7900 w = ws; 7901 l = len; 7902 for(; (char16to8(*w) == *s) && l; w++, s++, l--); 7903 if(!l) return ws; 7904 ws++; 7905 (*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} 7906 } 7907 return 0; \ ??wstrstr_2: \ 00000074 0000A0E3 MOV R0,#+0 \ 00000078 F087BDE8 POP {R4-R10,PC} ;; return 7908 7909 } 7910 \ In segment CODE, align 4, keep-with-next 7911 int IsUrl(WSHDR *ws, int pos, char *link) 7912 { \ IsUrl: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0150A0E1 MOV R5,R1 7913 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 7914 7915 int len = wstrlen(ws); 7916 unsigned short *str = ws->wsbody+1, *tmp, *begin; 7917 tmp = str; 7918 7919 begin = str = wstrstr(str, "http://", &len, 7); \ 0000000C ........ LDR R7,??DataTable359 ;; `?` \ 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 7920 7921 while(str && (begin-tmp <= pos)) 7922 { 7923 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 7924 if(str-tmp >= pos-2) 7925 { 7926 for(;begin < str; begin++, link++) 7927 *link = char16to8(*begin); 7928 link[str-begin] = 0; 7929 return 1; 7930 } 7931 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 7932 } 7933 7934 len = wstrlen(ws); \ ??IsUrl_2: \ 00000080 04009DE5 LDR R0,[SP, #+4] \ 00000084 230100EF SWI +291 \ 00000088 00008DE5 STR R0,[SP, #+0] 7935 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} 7936 while(str && (begin-tmp <= pos)) 7937 { 7938 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 7939 if(str-tmp >= pos-2) 7940 { 7941 for(;begin < str; begin++, link++) 7942 *link = char16to8(*begin); 7943 link[str-begin] = 0; 7944 return 1; 7945 } 7946 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 7947 } 7948 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 7949 } 7950 7951 #define UTF16_DIS_UNDERLINE (0xE002) 7952 #define UTF16_ENA_UNDERLINE (0xE001) 7953 \ In segment CODE, align 4, keep-with-next 7954 void ParseAnswer(WSHDR *ws, const char *s) 7955 { \ ParseAnswer: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0040A0E1 MOV R4,R0 7956 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 7957 S_SMILES *t; 7958 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 7959 STXT_SMILES *st; 7960 unsigned int wchar; 7961 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 7962 CutWSTR(ws,0); \ 00000034 0010A0E3 MOV R1,#+0 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 260100EF SWI +294 \ 00000040 160000EA B ??ParseAnswer_1 7963 int i; 7964 while(wchar=*s) 7965 { 7966 if(s==strstr(s, "http://") || s == strstr(s, "www.")) 7967 { 7968 wsAppendChar(ws,UTF16_ENA_UNDERLINE); 7969 while(*s && strchr(valid, *s)) 7970 { 7971 wchar=char8to16(*s); \ ??ParseAnswer_2: \ 00000044 ........ LDRB R0,[R5], #+1 \ 00000048 ........ _BLF char8to16,??char8to16??rA 7972 wsAppendChar(ws,wchar); \ 0000004C 0010A0E1 MOV R1,R0 \ ??ParseAnswer_3: \ 00000050 0400A0E1 MOV R0,R4 \ 00000054 1C0000EF SWI +28 7973 s++; 7974 } \ 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 7975 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 7976 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 7977 continue; \ ??ParseAnswer_1: \ 000000A0 0070D5E5 LDRB R7,[R5, #+0] \ 000000A4 000057E3 CMP R7,#+0 \ 000000A8 4F00000A BEQ ??ParseAnswer_5 \ 000000AC ........ LDR R9,??DataTable359 ;; `?` \ 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 7978 } 7979 t=t_root; \ ??ParseAnswer_7: \ 000000E4 0690A0E1 MOV R9,R6 \ 000000E8 230000EA B ??ParseAnswer_8 7980 while(t) 7981 { 7982 st=t->lines; 7983 while(st) 7984 { 7985 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 7986 { 7987 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 7988 } 7989 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] 7990 } \ ??ParseAnswer_13: \ 00000170 00005AE3 CMP R10,#+0 \ 00000174 DCFFFF1A BNE ??ParseAnswer_9 7991 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 7992 } 7993 L1: 7994 if (t) 7995 { 7996 wchar=t->uni_smile; 7997 s+=strlen(st->text); 7998 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); 7999 } 8000 else 8001 { 8002 wchar=char8to16(wchar); \ 00000188 0700A0E1 MOV R0,R7 \ 0000018C ........ _BLF char8to16,??char8to16??rA \ 00000190 0070A0E1 MOV R7,R0 8003 s++; 8004 ulb>>=8; 8005 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 8006 } \ ??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 8007 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 8008 } 8009 i=ws->wsbody[0]; \ ??ParseAnswer_5: \ 000001EC 000094E5 LDR R0,[R4, #+0] \ 000001F0 B010D0E1 LDRH R1,[R0, #+0] \ 000001F4 000000EA B ??ParseAnswer_15 8010 while(i>1) 8011 { 8012 if (ws->wsbody[i--]!=13) break; 8013 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 8014 } 8015 } \ 0000021C F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??ParseAnswer_0: \ 00000220 ........ DC32 s_top 8016 \ In segment CODE, align 4, keep-with-next 8017 void SaveAnswer(CLIST *cl, WSHDR *ws) 8018 { \ SaveAnswer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0100A0E1 MOV R0,R1 8019 char *p=ExtractAnswer(ws); \ 0000000C ........ BL ExtractAnswer \ 00000010 0050A0E1 MOV R5,R0 8020 mfree(cl->answer); \ 00000014 980094E5 LDR R0,[R4, #+152] \ 00000018 150000EF SWI +21 8021 cl->answer=p; \ 0000001C 985084E5 STR R5,[R4, #+152] 8022 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 8023 8024 //links applicator 8025 8026 \ In segment CODE, align 4, keep-with-next 8027 int GetTempName(void) 8028 { \ GetTempName: \ 00000000 00402DE9 PUSH {LR} \ 00000004 10D04DE2 SUB SP,SP,#+16 8029 static const int DMonth[]={0,31,59,90,120,151,181,212,243,273,304,334,365}; 8030 unsigned long iday; 8031 TTime tt; 8032 TDate dd; 8033 GetDateTime(&dd,&tt); \ 00000008 08108DE2 ADD R1,SP,#+8 \ 0000000C 0D00A0E1 MOV R0,SP \ 00000010 B40000EF SWI +180 8034 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 8035 iday=365*dd.year+DMonth[dd.month-1]+(dd.day - 1); 8036 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] 8037 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 8038 iday++; \ ??GetTempName_1: \ 00000078 011081E2 ADD R1,R1,#+1 8039 iday=(tt.sec+60*(tt.min+60*(tt.hour+24* iday))); 8040 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 8041 } \ 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 8042 8043 \ In segment CODE, align 4, keep-with-next 8044 void recon() 8045 { 8046 SUBPROC((void*)end_socket); \ recon: \ 00000000 ........ LDR R0,??DataTable360 ;; end_socket \ 00000004 00402DE9 PUSH {LR} \ 00000008 710100EF SWI +369 8047 GBS_DelTimer(&reconnect_tmr); \ 0000000C 18009FE5 LDR R0,??recon_0 ;; i_rc + 7640 \ 00000010 8C0100EF SWI +396 8048 DNR_TRIES=3; \ 00000014 ........ LDR R0,??DataTable361 ;; screen3 + 72 \ 00000018 0310A0E3 MOV R1,#+3 \ 0000001C 001080E5 STR R1,[R0, #+0] 8049 SUBPROC((void *)create_connect); \ 00000020 ........ LDR R0,??DataTable362 ;; create_connect \ 00000024 710100EF SWI +369 8050 } \ 00000028 0080BDE8 POP {PC} ;; return \ ??recon_0: \ 0000002C ........ DC32 i_rc + 7640 8051 \ In segment CODE, align 4, keep-with-next 8052 int edchat_onkey(GUI *data, GUI_MSG *msg) 8053 { \ edchat_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 8054 //-1 - do redraw 8055 GBS_DelTimer(&tmr_illumination); \ 00000004 ........ LDR R6,??DataTable372 ;; i_rc \ 00000008 4CDF4DE2 SUB SP,SP,#+304 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0170A0E1 MOV R7,R1 \ 00000014 B800A0E3 MOV R0,#+184 \ 00000018 740D80E3 ORR R0,R0,#0x1D00 \ 0000001C 060080E0 ADD R0,R0,R6 \ 00000020 8C0100EF SWI +396 8056 CLIST *t; 8057 TPKT *p; 8058 EDITCONTROL ec; 8059 int len, f;//2026rev 8060 unsigned err;//2026rev 8061 char *s; 8062 int l=msg->gbsmsg->submess; \ 00000024 040097E5 LDR R0,[R7, #+4] \ 00000028 088090E5 LDR R8,[R0, #+8] 8063 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 DF0100EF SWI +479 \ 00000034 0050A0E1 MOV R5,R0 8064 char fn[256]; 8065 8066 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 8067 { 8068 void ec_menu(EDCHAT_STRUCT *); 8069 ec_menu(ed_struct); \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 ........ BL ec_menu 8070 return(-1); \ ??edchat_onkey_1: \ 00000054 8B0000EA B ??edchat_onkey_2 8071 } 8072 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 8073 8074 void AddSmile(GUI *data); 8075 if (msg->gbsmsg->msg==LONG_PRESS) 8076 { 8077 if (l==RIGHT_BUTTON) \ 00000080 3E0058E3 CMP R8,#+62 \ 00000084 3A00001A BNE ??edchat_onkey_6 8078 { 8079 if(LongRightAction==2 && EDIT_GetFocus(data)==ed_struct->ed_answer) \ 00000088 3C059FE5 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 8080 CreateSmileSelectGUI(ed_struct); \ 000000AC 0500A0E1 MOV R0,R5 \ 000000B0 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 8081 else 8082 if(LongRightAction==1) 8083 { 8084 if (EDIT_GetFocus(data)==ed_struct->ed_answer) 8085 { 8086 ExtractEditControl(data,ed_struct->ed_answer,&ec); 8087 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) 8088 { 8089 t=FindNextActiveContact(ed_struct->ed_contact); 8090 if (t && t!=ed_struct->ed_contact) 8091 { 8092 CreateEditChat(t); 8093 return(1); 8094 } 8095 } 8096 } 8097 } 8098 } 8099 8100 if (l==LEFT_BUTTON && LongLeftAction) 8101 { 8102 if (EDIT_GetFocus(data)==ed_struct->ed_answer) 8103 { 8104 ExtractEditControl(data,ed_struct->ed_answer,&ec); 8105 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) 8106 { 8107 t=FindPrevActiveContact(ed_struct->ed_contact); 8108 if (t && t!=ed_struct->ed_contact) 8109 { 8110 CreateEditChat(t); 8111 return(1); 8112 } 8113 } 8114 } 8115 } 8116 //#ifdef ELKA 8117 if (l==VOL_DOWN_BUTTON) 8118 { 8119 #ifdef kluchnik 8120 if((EDIT_GetFocus(data)==ed_struct->ed_answer)) 8121 #else 8122 if(LongVolDownAction) 8123 #endif 8124 { 8125 WSHDR *ws; 8126 ExtractEditControl(data,ed_struct->ed_answer,&ec); 8127 if(wstrlen(ec.pWS)>0) 8128 { 8129 ws=AllocWS(1); 8130 CutWSTR(ws,0); 8131 8132 EDIT_SetFocus(data,ed_struct->ed_answer); 8133 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 8134 8135 FreeWS(ws); 8136 RefreshGUI(); 8137 } 8138 } 8139 else 8140 { 8141 int pos; 8142 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 8143 { 8144 EDIT_SetFocus(data, pos); 8145 EDIT_SetCursorPos(data, 1); 8146 } 8147 return (-1); 8148 } 8149 8150 } 8151 8152 if (l==VOL_UP_BUTTON) 8153 { 8154 if(LongVolUpAction) 8155 { 8156 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); 8157 ascii2ws(ws,last_msg_buffer); 8158 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); 8159 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 8160 FreeWS(ws); 8161 RefreshGUI(); 8162 } 8163 else 8164 { 8165 int pos; 8166 if ((pos=EDIT_GetFocus(data)-2)>=2) 8167 { 8168 EDIT_SetFocus(data, pos); 8169 EDIT_SetCursorPos(data, 1); 8170 } 8171 return (-1); 8172 } 8173 } 8174 //#endif 8175 #ifdef kluchnik 8176 if(l==LEFT_BUTTON && EDIT_GetFocus(ed_struct->ed_chatgui)!=ed_struct->ed_answer && EDIT_GetCursorPos(data)==1) 8177 { 8178 int ed; 8179 EDITCONTROL ec; 8180 ed=EDIT_GetFocus(ed_struct->ed_chatgui); 8181 ExtractEditControl(ed_struct->ed_chatgui,ed,&ec); 8182 8183 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); 8184 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); 8185 wstrcat(wsBuffer,ec.pWS); 8186 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); 8187 8188 ShowMSG(1,(int)"Message add to buffer"); 8189 } 8190 #endif 8191 } 8192 8193 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 8194 { 8195 if ((l>='0')&&(l<='9')) \ 000000CC 300058E3 CMP R8,#+48 \ 000000D0 840000BA BLT ??edchat_onkey_10 \ 000000D4 3A0058E3 CMP R8,#+58 \ 000000D8 060000AA BGE ??edchat_onkey_9 8196 { 8197 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 8198 EDIT_SetFocus(data,ed_struct->ed_answer); \ 000000F0 0400A0E1 MOV R0,R4 \ 000000F4 9B0100EF SWI +411 8199 } 8200 8201 if (l==GREEN_BUTTON) 8202 { 8203 if (connect_state==3) 8204 { 8205 if ((t=ed_struct->ed_contact)) 8206 { 8207 ExtractEditControl(data,ed_struct->ed_answer,&ec); 8208 SaveAnswer(t,ec.pWS); 8209 if ((s=t->answer)) 8210 { 8211 if ((len=strlen(s))) 8212 { 8213 msg_away_timer=0; 8214 away_m=0; 8215 t->automsgcount=0; 8216 if(change_back_status) 8217 { 8218 CurrentStatus=status_rem; 8219 set_my_status(); 8220 change_back_status=0; 8221 } 8222 if(SHOW_ACTIVE) 8223 t->isactive=ACTIVE_TIME; 8224 p=malloc(sizeof(PKT)+len+1); 8225 p->pkt.uin=t->uin; 8226 p->pkt.type=T_SENDMSG; 8227 p->pkt.data_len=len; 8228 strcpy(p->data,s); 8229 //#ifdef ELKA 8230 strcpy(last_msg_buffer, s); 8231 //#endif 8232 AddStringToLog(t,0x01,p->data,I_str,(++SENDMSGCOUNT)&0x7FFF,1); //Номер сообщения 8233 SUBPROC((void *)SendAnswer,0,p); 8234 main2_count++; 8235 mfree(t->answer); 8236 t->answer=NULL; 8237 // request_remake_edchat=1; 8238 EDIT_SetFocus(data,ed_struct->ed_answer); 8239 CutWSTR(ews,0); 8240 EDIT_SetTextToFocused(data,ews); 8241 AddMsgToChat(data); 8242 RecountMenu(t,1); 8243 return(-1); 8244 } 8245 } 8246 } 8247 } 8248 } 8249 //================2026rev-begin 8250 if (l==ENTER_BUTTON) 8251 { 8252 if (!EDIT_IsMarkModeActive(data)) // ?????? ???? ?? ????????? 8253 { 8254 int pos, len; 8255 char *link; 8256 ExtractEditControl(ed_struct->ed_chatgui,EDIT_GetFocus(ed_struct->ed_chatgui),&ec); 8257 wstrcpy(ews,ec.pWS); 8258 pos = EDIT_GetCursorPos(data); 8259 len = wstrlen(ews); 8260 link = malloc(len+1); 8261 8262 if(IsUrl(ews, pos, link) && IsOpenBrowser) 8263 { 8264 snprintf(fn, 255, "%s\\tmp%u.url", TEMPLATES_PATH, GetTempName); 8265 if ((f=fopen(fn,A_WriteOnly+A_BIN+A_Create+A_Truncate,P_WRITE,&err))!=-1) 8266 { 8267 fwrite(f,link,strlen(link),&err); 8268 fclose(f,&err); 8269 str_2ws(ews,fn,256); 8270 ExecuteFile(ews,0,0); 8271 unlink(fn, &err); 8272 } 8273 mfree(link); 8274 return (-1); 8275 } 8276 else 8277 { 8278 int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 8279 8280 if(IsMultiBuffer) 8281 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+4); 8282 else 8283 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+3); 8284 8285 mfree(link); 8286 return (-1); 8287 } 8288 } 8289 } 8290 8291 //================ 2026rev-end =================// 8292 8293 if (l==VOL_UP_BUTTON) 8294 { 8295 int pos; 8296 8297 if ((pos=EDIT_GetFocus(data)-2)>=2) 8298 { 8299 EDIT_SetFocus(data, pos); 8300 EDIT_SetCursorPos(data, 1); 8301 } 8302 return (-1); 8303 } 8304 if (l==VOL_DOWN_BUTTON) 8305 { 8306 int pos; 8307 8308 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 8309 { 8310 EDIT_SetFocus(data, pos); 8311 EDIT_SetCursorPos(data, 1); 8312 } 8313 return (-1); 8314 } 8315 } 8316 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 4C049FE5 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 DC039FE5 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 34039FE5 LDR R0,??edchat_onkey_7+0xC ;; LongVolUpAction \ 000002A0 000090E5 LDR R0,[R0, #+0] \ 000002A4 000050E3 CMP R0,#+0 \ 000002A8 0900000A BEQ ??edchat_onkey_17 \ 000002AC 770E86E2 ADD R0,R6,#+1904 \ 000002B0 1B0000EF SWI +27 \ 000002B4 010080E2 ADD R0,R0,#+1 \ 000002B8 250100EF SWI +293 \ 000002BC 0090A0E1 MOV R9,R0 \ 000002C0 771E86E2 ADD R1,R6,#+1904 \ 000002C4 ........ _BLF ascii2ws,??ascii2ws??rA \ 000002C8 081095E5 LDR R1,[R5, #+8] \ 000002CC 040095E5 LDR R0,[R5, #+4] \ 000002D0 D9FFFFEA B ??edchat_onkey_15 \ ??edchat_onkey_17: \ 000002D4 0400A0E1 MOV R0,R4 \ 000002D8 820100EF SWI +386 \ 000002DC 021040E2 SUB R1,R0,#+2 \ 000002E0 020051E3 CMP R1,#+2 \ 000002E4 E1FFFFEA B ??edchat_onkey_16 \ ??edchat_onkey_10: \ 000002E8 0B0058E3 CMP R8,#+11 \ 000002EC 5900001A BNE ??edchat_onkey_18 \ 000002F0 ........ LDR R11,??DataTable364 ;; screen3 \ 000002F4 34009BE5 LDR R0,[R11, #+52] \ 000002F8 030050E3 CMP R0,#+3 \ 000002FC 7DFFFF1A BNE ??edchat_onkey_9 \ 00000300 009095E5 LDR R9,[R5, #+0] \ 00000304 000059E3 CMP R9,#+0 \ 00000308 7AFFFF0A BEQ ??edchat_onkey_9 \ 0000030C 081095E5 LDR R1,[R5, #+8] \ 00000310 04208DE2 ADD R2,SP,#+4 \ 00000314 0400A0E1 MOV R0,R4 \ 00000318 690100EF SWI +361 \ 0000031C 2C109DE5 LDR R1,[SP, #+44] \ 00000320 0900A0E1 MOV R0,R9 \ 00000324 ........ BL SaveAnswer \ 00000328 987099E5 LDR R7,[R9, #+152] \ 0000032C 000057E3 CMP R7,#+0 \ 00000330 70FFFF0A BEQ ??edchat_onkey_9 \ 00000334 0700A0E1 MOV R0,R7 \ 00000338 1B0000EF SWI +27 \ 0000033C 0080B0E1 MOVS R8,R0 \ 00000340 6CFFFF0A BEQ ??edchat_onkey_9 \ 00000344 00A0A0E3 MOV R10,#+0 \ 00000348 2CA08BE5 STR R10,[R11, #+44] \ 0000034C 08A386E5 STR R10,[R6, #+776] \ 00000350 7CA089E5 STR R10,[R9, #+124] \ 00000354 100396E5 LDR R0,[R6, #+784] \ 00000358 000050E3 CMP R0,#+0 \ 0000035C 0300000A BEQ ??edchat_onkey_19 \ 00000360 0C0396E5 LDR R0,[R6, #+780] \ 00000364 FC0286E5 STR R0,[R6, #+764] \ 00000368 ........ BL set_my_status \ 0000036C 10A386E5 STR R10,[R6, #+784] \ ??edchat_onkey_19: \ 00000370 ........ LDR R0,??DataTable365 ;; SHOW_ACTIVE \ 00000374 000090E5 LDR R0,[R0, #+0] \ 00000378 000050E3 CMP R0,#+0 \ 0000037C 5A0FA013 MOVNE R0,#+360 \ 00000380 A0008915 STRNE R0,[R9, #+160] \ 00000384 090088E2 ADD R0,R8,#+9 \ 00000388 140000EF SWI +20 \ 0000038C 00B0A0E1 MOV R11,R0 \ 00000390 0C0099E5 LDR R0,[R9, #+12] \ 00000394 0710A0E1 MOV R1,R7 \ 00000398 00008BE5 STR R0,[R11, #+0] \ 0000039C 0200A0E3 MOV R0,#+2 \ 000003A0 B400CBE1 STRH R0,[R11, #+4] \ 000003A4 B680CBE1 STRH R8,[R11, #+6] \ 000003A8 08008BE2 ADD R0,R11,#+8 \ 000003AC 1A0000EF SWI +26 \ 000003B0 0710A0E1 MOV R1,R7 \ 000003B4 770E86E2 ADD R0,R6,#+1904 \ 000003B8 1A0000EF SWI +26 \ 000003BC 680296E5 LDR R0,[R6, #+616] \ 000003C0 ........ LDR R3,??DataTable400 ;; I_str \ 000003C4 010080E2 ADD R0,R0,#+1 \ 000003C8 680286E5 STR R0,[R6, #+616] \ 000003CC 0110A0E3 MOV R1,#+1 \ 000003D0 02002DE9 PUSH {R1} \ 000003D4 8008A0E1 LSL R0,R0,#+17 \ 000003D8 A008A0E1 LSR R0,R0,#+17 \ 000003DC 01002DE9 PUSH {R0} \ 000003E0 08208BE2 ADD R2,R11,#+8 \ 000003E4 0900A0E1 MOV R0,R9 \ 000003E8 ........ BL AddStringToLog \ 000003EC ........ LDR R0,??DataTable401 ;; SendAnswer \ 000003F0 0B20A0E1 MOV R2,R11 \ 000003F4 0010A0E3 MOV R1,#+0 \ 000003F8 710100EF SWI +369 \ 000003FC 440296E5 LDR R0,[R6, #+580] \ 00000400 010080E2 ADD R0,R0,#+1 \ 00000404 440286E5 STR R0,[R6, #+580] \ 00000408 980099E5 LDR R0,[R9, #+152] \ 0000040C 150000EF SWI +21 \ 00000410 98A089E5 STR R10,[R9, #+152] \ 00000414 081095E5 LDR R1,[R5, #+8] \ 00000418 0400A0E1 MOV R0,R4 \ 0000041C 9B0100EF SWI +411 \ 00000420 040396E5 LDR R0,[R6, #+772] \ 00000424 0A10A0E1 MOV R1,R10 \ 00000428 260100EF SWI +294 \ 0000042C 041396E5 LDR R1,[R6, #+772] \ 00000430 0400A0E1 MOV R0,R4 \ 00000434 810100EF SWI +385 \ 00000438 0400A0E1 MOV R0,R4 \ 0000043C ........ BL AddMsgToChat \ 00000440 0110A0E3 MOV R1,#+1 \ 00000444 0900A0E1 MOV R0,R9 \ 00000448 ........ BL RecountMenu \ 0000044C 0A00E0E1 MVN R0,R10 \ 00000450 08D08DE2 ADD SP,SP,#+8 \ 00000454 8CFFFFEA B ??edchat_onkey_4 \ ??edchat_onkey_18: \ 00000458 1A0058E3 CMP R8,#+26 \ 0000045C 5500001A BNE ??edchat_onkey_20 \ 00000460 0400A0E1 MOV R0,R4 \ 00000464 D80100EF SWI +472 \ 00000468 000050E3 CMP R0,#+0 \ 0000046C 21FFFF1A BNE ??edchat_onkey_9 \ 00000470 040095E5 LDR R0,[R5, #+4] \ 00000474 820100EF SWI +386 \ 00000478 04208DE2 ADD R2,SP,#+4 \ 0000047C 0010A0E1 MOV R1,R0 \ 00000480 040095E5 LDR R0,[R5, #+4] \ 00000484 690100EF SWI +361 \ 00000488 040396E5 LDR R0,[R6, #+772] \ 0000048C 2C109DE5 LDR R1,[SP, #+44] \ 00000490 1F0100EF SWI +287 \ 00000494 0400A0E1 MOV R0,R4 \ 00000498 D30100EF SWI +467 \ 0000049C 0080A0E1 MOV R8,R0 \ 000004A0 040396E5 LDR R0,[R6, #+772] \ 000004A4 230100EF SWI +291 \ 000004A8 010080E2 ADD R0,R0,#+1 \ 000004AC 140000EF SWI +20 \ 000004B0 0070A0E1 MOV R7,R0 \ 000004B4 040396E5 LDR R0,[R6, #+772] \ 000004B8 0720A0E1 MOV R2,R7 \ 000004BC 0810A0E1 MOV R1,R8 \ 000004C0 ........ BL IsUrl \ 000004C4 000050E3 CMP R0,#+0 \ 000004C8 2C00000A BEQ ??edchat_onkey_21 \ 000004CC 08019FE5 LDR R0,??edchat_onkey_7+0x10 ;; IsOpenBrowser \ 000004D0 000090E5 LDR R0,[R0, #+0] \ 000004D4 000050E3 CMP R0,#+0 \ 000004D8 2800000A BEQ ??edchat_onkey_21 \ 000004DC FC009FE5 LDR R0,??edchat_onkey_7+0x14 ;; GetTempName \ 000004E0 ........ LDR R3,??DataTable368 ;; TEMPLATES_PATH \ 000004E4 F8209FE5 LDR R2,??edchat_onkey_7+0x18 ;; `?` \ 000004E8 01002DE9 PUSH {R0} \ 000004EC FF10A0E3 MOV R1,#+255 \ 000004F0 34008DE2 ADD R0,SP,#+52 \ 000004F4 1B0100EF SWI +283 \ 000004F8 04308DE2 ADD R3,SP,#+4 \ 000004FC 402FA0E3 MOV R2,#+256 \ 00000500 0110A0E3 MOV R1,#+1 \ 00000504 831C81E3 ORR R1,R1,#0x8300 \ 00000508 34008DE2 ADD R0,SP,#+52 \ 0000050C 0A0000EF SWI +10 \ 00000510 0040A0E1 MOV R4,R0 \ 00000514 010074E3 CMN R4,#+1 \ 00000518 04D08DE2 ADD SP,SP,#+4 \ 0000051C 1400000A BEQ ??edchat_onkey_22 \ 00000520 0700A0E1 MOV R0,R7 \ 00000524 1B0000EF SWI +27 \ 00000528 0020A0E1 MOV R2,R0 \ 0000052C 0D30A0E1 MOV R3,SP \ 00000530 0710A0E1 MOV R1,R7 \ 00000534 0400A0E1 MOV R0,R4 \ 00000538 0C0000EF SWI +12 \ 0000053C 0D10A0E1 MOV R1,SP \ 00000540 0400A0E1 MOV R0,R4 \ 00000544 0D0000EF SWI +13 \ 00000548 040396E5 LDR R0,[R6, #+772] \ 0000054C 402FA0E3 MOV R2,#+256 \ 00000550 30108DE2 ADD R1,SP,#+48 \ 00000554 6C0100EF SWI +364 \ 00000558 040396E5 LDR R0,[R6, #+772] \ 0000055C 0020A0E3 MOV R2,#+0 \ 00000560 0010A0E3 MOV R1,#+0 \ 00000564 940000EF SWI +148 \ 00000568 0D10A0E1 MOV R1,SP \ 0000056C 30008DE2 ADD R0,SP,#+48 \ 00000570 6B0100EF SWI +363 \ ??edchat_onkey_22: \ 00000574 0700A0E1 MOV R0,R7 \ 00000578 150000EF SWI +21 \ 0000057C 41FFFFEA B ??edchat_onkey_2 \ ??edchat_onkey_21: \ 00000580 000095E5 LDR R0,[R5, #+0] \ 00000584 0C0090E5 LDR R0,[R0, #+12] \ 00000588 ........ BL LoadTemplates \ 0000058C ........ LDR R2,??DataTable369 ;; IsMultiBuffer \ 00000590 50109FE5 LDR R1,??edchat_onkey_7+0x1C ;; ed_options_handler \ 00000594 100085E5 STR R0,[R5, #+16] \ 00000598 002092E5 LDR R2,[R2, #+0] \ 0000059C 000052E3 CMP R2,#+0 \ 000005A0 03308002 ADDEQ R3,R0,#+3 \ 000005A4 04308012 ADDNE R3,R0,#+4 \ 000005A8 0520A0E1 MOV R2,R5 \ 000005AC 0400A0E1 MOV R0,R4 \ 000005B0 E50100EF SWI +485 \ 000005B4 EEFFFFEA B ??edchat_onkey_22 \ ??edchat_onkey_20: \ 000005B8 0D0058E3 CMP R8,#+13 \ 000005BC 44FFFF0A BEQ ??edchat_onkey_17 \ ??edchat_onkey_23: \ 000005C0 0E0058E3 CMP R8,#+14 \ 000005C4 CBFEFF1A BNE ??edchat_onkey_9 \ 000005C8 23FFFFEA B ??edchat_onkey_14 \ ??edchat_onkey_7: \ 000005CC ........ DC32 LongRightAction \ 000005D0 ........ DC32 LongLeftAction \ 000005D4 ........ DC32 LongVolDownAction \ 000005D8 ........ DC32 LongVolUpAction \ 000005DC ........ DC32 IsOpenBrowser \ 000005E0 ........ DC32 GetTempName \ 000005E4 ........ DC32 `?` \ 000005E8 ........ DC32 ed_options_handler 8317 //1: close 8318 } 8319 8320 static const HEADER_DESC edchat_hdr={0,0,NULL,NULL,NULL,0,LGP_NULL}; 8321 8322 void (*old_ed_redraw)(void *data); \ In segment CODE, align 4, keep-with-next 8323 void my_ed_redraw(void *data) 8324 { \ my_ed_redraw: \ 00000000 30402DE9 PUSH {R4,R5,LR} 8325 void *edchat_gui; 8326 EDCHAT_STRUCT *ed_struct; 8327 if (old_ed_redraw) old_ed_redraw(data); \ 00000004 ........ LDR R4,??DataTable372 ;; i_rc \ 00000008 4C1494E5 LDR R1,[R4, #+1100] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0100000A BEQ ??my_ed_redraw_0 \ 00000014 31FF2FE1 BLX R1 8328 edchat_gui=FindGUIbyId(edchat_id,NULL); \ 00000018 0010A0E3 MOV R1,#+0 \ ??my_ed_redraw_0: \ 0000001C F80394E5 LDR R0,[R4, #+1016] \ 00000020 090200EF SWI +521 8329 if (edchat_gui) \ 00000024 000050E3 CMP R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 8330 { 8331 ed_struct=EDIT_GetUserPointer(edchat_gui); \ 0000002C DF0100EF SWI +479 8332 if (ed_struct) \ 00000030 000050E3 CMP R0,#+0 \ 00000034 3080BD08 POPEQ {R4,R5,PC} 8333 { 8334 int icon, width; 8335 #ifndef NEWSGOLD 8336 icon=*(S_ICONS+GetIconIndex(ed_struct->ed_contact)); 8337 ((HEADER_DESC *)&edchat_hdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); 8338 DrawImg(ScreenW()-1-width,1,icon); 8339 #else 8340 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 744290E5 LDR R4,[R0, #+628] 8341 width=GetImgWidth(icon); \ 00000048 0400A0E1 MOV R0,R4 \ 0000004C 220000EF SWI +34 \ 00000050 0050A0E1 MOV R5,R0 8342 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 8343 /* DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 8344 GetPaletteAdrByColorIndex(0), 8345 GetPaletteAdrByColorIndex(EDIT_IsBusy(edchat_gui)?3:4));*/ 8346 #endif 8347 } 8348 } 8349 } \ 0000006C 3080BDE8 POP {R4,R5,PC} ;; return 8350 \ In segment CODE, align 4, keep-with-next 8351 void edchat_ghook(GUI *data, int cmd) 8352 { \ edchat_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 8353 8354 static const SOFTKEY_DESC sk={0x0FFF,0x0000,(int)LG_MENU}; 8355 static const SOFTKEY_DESC sk_cancel={0x0FF0,0x0000,(int)LG_CLOSE}; 8356 // static SOFTKEY_DESC sk={0x0018,0x0000,(int)"Menu"}; 8357 int j; 8358 EDITCONTROL ec; 8359 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); 8360 PNGTOP_DESC *pltop=PNG_TOP(); 8361 if (cmd==9) \ 00000004 ........ LDR R4,??DataTable372 ;; 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 8362 { 8363 GBS_DelTimer(&tmr_illumination); //by BoBa 25.06.07 \ 00000030 B800A0E3 MOV R0,#+184 \ 00000034 740D80E3 ORR R0,R0,#0x1D00 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 8C0100EF SWI +396 8364 pltop->dyn_pltop=NULL; \ 00000040 086088E5 STR R6,[R8, #+8] \ 00000044 170000EA B ??edchat_ghook_1 8365 } 8366 if (cmd==2) \ ??edchat_ghook_0: \ 00000048 081097E5 LDR R1,[R7, #+8] \ 0000004C 020059E3 CMP R9,#+2 \ 00000050 1600001A BNE ??edchat_ghook_2 8367 { 8368 ed_struct->ed_chatgui=data; \ 00000054 045087E5 STR R5,[R7, #+4] 8369 // edgui_data=data; 8370 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000058 0500A0E1 MOV R0,R5 \ 0000005C 9B0100EF SWI +411 8371 8372 static void *methods[16]; 8373 void **m=GetDataOfItemByID(data,2); \ 00000060 0210A0E3 MOV R1,#+2 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 4F0100EF SWI +335 \ 0000006C 0050B0E1 MOVS R5,R0 8374 if (m) 8375 { 8376 if (m[1]) \ 00000070 04009515 LDRNE R0,[R5, #+4] \ 00000074 00005013 CMPNE R0,#+0 \ 00000078 6300000A BEQ ??edchat_ghook_3 8377 { 8378 memcpy(methods,m[1],sizeof(methods)); \ 0000007C 456EA0E3 MOV R6,#+1104 \ 00000080 4020A0E3 MOV R2,#+64 \ 00000084 0010A0E1 MOV R1,R0 \ 00000088 040086E0 ADD R0,R6,R4 \ 0000008C 1E0100EF SWI +286 8379 old_ed_redraw=(void (*)(void *))(methods[0]); \ 00000090 040096E7 LDR R0,[R6, +R4] \ 00000094 4C0484E5 STR R0,[R4, #+1100] 8380 methods[0]=(void *)my_ed_redraw; \ 00000098 74019FE5 LDR R0,??edchat_ghook_4 ;; my_ed_redraw \ 0000009C 040086E7 STR R0,[R6, +R4] 8381 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} 8382 } 8383 } 8384 } 8385 if (cmd==3) \ ??edchat_ghook_2: \ 000000B0 030059E3 CMP R9,#+3 \ 000000B4 0E00001A BNE ??edchat_ghook_5 8386 { 8387 // if (edgui_data==data) edgui_data=NULL; 8388 if (ed_struct->ed_contact) \ 000000B8 000097E5 LDR R0,[R7, #+0] \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 0500000A BEQ ??edchat_ghook_6 8389 { 8390 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C4 0D20A0E1 MOV R2,SP \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 690100EF SWI +361 8391 SaveAnswer(ed_struct->ed_contact,ec.pWS); \ 000000D0 28109DE5 LDR R1,[SP, #+40] \ 000000D4 000097E5 LDR R0,[R7, #+0] \ 000000D8 ........ BL SaveAnswer 8392 } 8393 RecountMenu(ed_struct->ed_contact,1); \ ??edchat_ghook_6: \ 000000DC 000097E5 LDR R0,[R7, #+0] \ 000000E0 0110A0E3 MOV R1,#+1 \ 000000E4 ........ BL RecountMenu 8394 mfree(ed_struct); \ 000000E8 0700A0E1 MOV R0,R7 \ 000000EC 150000EF SWI +21 \ 000000F0 ECFFFFEA B ??edchat_ghook_1 8395 } 8396 if (cmd==0x0A) \ ??edchat_ghook_5: \ 000000F4 0A0059E3 CMP R9,#+10 \ 000000F8 0900001A BNE ??edchat_ghook_7 8397 { 8398 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] 8399 DisableIDLETMR(); \ 00000108 7F0100EF SWI +383 8400 total_unread-=ed_struct->requested_decrement_total_unread; \ 0000010C EC0394E5 LDR R0,[R4, #+1004] \ 00000110 0C1097E5 LDR R1,[R7, #+12] \ 00000114 010040E0 SUB R0,R0,R1 \ 00000118 EC0384E5 STR R0,[R4, #+1004] 8401 ed_struct->requested_decrement_total_unread=0; \ 0000011C 0C6087E5 STR R6,[R7, #+12] \ 00000120 E0FFFFEA B ??edchat_ghook_1 8402 #ifdef ELKA 8403 if (!total_unread) 8404 { 8405 SLI_Off(); 8406 } 8407 #endif 8408 /* if (request_close_edchat) 8409 { 8410 request_close_edchat=0; 8411 GeneralFunc_flag1(edchat_id,1); 8412 return; 8413 }*/ 8414 } 8415 if (cmd==7) \ ??edchat_ghook_7: \ 00000124 070059E3 CMP R9,#+7 \ 00000128 2800001A BNE ??edchat_ghook_8 8416 { 8417 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 8418 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 8419 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 8420 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 8421 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 8422 { 8423 time_to_stop_t9=0; \ 00000184 146484E5 STR R6,[R4, #+1044] 8424 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 8425 { 8426 ed_struct->ed_contact->req_add=0; \ 00000198 8C6080E5 STR R6,[R0, #+140] 8427 AddMsgToChat(data); \ 0000019C 0500A0E1 MOV R0,R5 \ 000001A0 ........ BL AddMsgToChat 8428 RecountMenu(ed_struct->ed_contact,1); \ 000001A4 000097E5 LDR R0,[R7, #+0] \ 000001A8 0110A0E3 MOV R1,#+1 \ 000001AC ........ BL RecountMenu 8429 } 8430 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 8431 { 8432 ed_struct->ed_contact->req_drawack=0; \ 000001C0 906080E5 STR R6,[R0, #+144] 8433 DrawAck(data); \ 000001C4 0500A0E1 MOV R0,R5 \ 000001C8 ........ BL DrawAck \ 000001CC B5FFFFEA B ??edchat_ghook_1 8434 } 8435 } 8436 } 8437 if (cmd==0x0C) \ ??edchat_ghook_8: \ 000001D0 0C0059E3 CMP R9,#+12 \ 000001D4 0C00001A BNE ??edchat_ghook_3 8438 { 8439 j=EDIT_GetFocus(data); \ 000001D8 0500A0E1 MOV R0,R5 \ 000001DC 820100EF SWI +386 \ 000001E0 0040A0E1 MOV R4,R0 8440 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 8441 EDIT_SetCursorPos(data,1); \ 00000200 0110A0E3 MOV R1,#+1 \ 00000204 0500A0E1 MOV R0,R5 \ 00000208 D40100EF SWI +468 8442 } 8443 } \ ??edchat_ghook_3: \ 0000020C 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 00000210 F083BDE8 POP {R4-R9,PC} ;; return \ ??edchat_ghook_4: \ 00000214 ........ DC32 my_ed_redraw \ 00000218 ........ DC32 SmilesImgList \ 0000021C ........ DC32 ??sk_1 \ In segment DATA_Z, align 4, align-sorted \ i_rc: \ 00000000 DS8 8 \ icons: \ 00000008 DS8 132 \ gipc: \ 0000008C DS8 12 \ tmr_gipc: \ 00000098 DS8 12 \ def_set: \ 000000A4 DS8 388 \ main_d: \ 00000228 DS8 4 \ canvasdata: \ 0000022C DS8 4 \ paused_height: \ 00000230 DS8 4 \ wsBuffer: \ 00000234 DS8 4 \ uins: \ 00000238 DS8 4 \ saver_on: \ 0000023C DS8 4 \ main_count: \ 00000240 DS8 4 \ main2_count: \ 00000244 DS8 4 \ Is_PING_On: \ 00000248 DS8 4 \ Is_INC_On: \ 0000024C DS8 4 \ Is_ILU_On: \ 00000250 DS8 4 \ Is_Double_Vibra_On: \ 00000254 DS8 4 \ total_unread2: \ 00000258 DS8 4 \ maincsm_id: \ 0000025C DS8 4 \ maingui_id: \ 00000260 DS8 4 \ contactlist_menu_id: \ 00000264 DS8 4 \ SENDMSGCOUNT: \ 00000268 DS8 4 \ Is_Vibra_Enabled: \ 0000026C DS8 4 \ Is_Id3tag_Enabled: \ 00000270 DS8 4 \ S_ICONS: \ 00000274 DS8 136 \ CurrentStatus: \ 000002FC DS8 4 \ CurrentXStatus: \ 00000300 DS8 4 \ ews: \ 00000304 DS8 4 \ away_m: \ 00000308 DS8 4 \ status_rem: \ 0000030C DS8 4 \ change_back_status: \ 00000310 DS8 4 \ Show_XTX: \ 00000314 DS8 4 \ uptimeHour: \ 00000318 DS8 4 \ uptimeMin: \ 0000031C DS8 4 \ uptimeSec: \ 00000320 DS8 4 \ tracktimer: \ 00000324 DS8 4 \ input_awaymsg_id: \ 00000328 DS8 4 \ XStatusImg: \ 0000032C DS8 140 \ silenthide: \ 000003B8 DS8 4 \ disautorecconect: \ 000003BC DS8 4 \ Is_Sounds_Enabled: \ 000003C0 DS8 4 \ Is_Show_Offline: \ 000003C4 DS8 4 \ Is_Show_Groups: \ 000003C8 DS8 4 \ CurrentPrivateStatus: \ 000003CC DS8 4 \ vibra_count: \ 000003D0 DS8 4 \ templates_chars: \ 000003D4 DS8 4 \ templates_lines: \ 000003D8 DS8 4 \ TOTALRECEIVED: \ 000003DC DS8 4 \ TOTALSENDED: \ 000003E0 DS8 4 \ ALLTOTALRECEIVED: \ 000003E4 DS8 4 \ ALLTOTALSENDED: \ 000003E8 DS8 4 \ total_unread: \ 000003EC DS8 4 \ cltop: \ 000003F0 DS8 4 \ GROUP_CACHE: \ 000003F4 DS8 4 \ edchat_id: \ 000003F8 DS8 4 \ tenseconds_to_ping: \ 000003FC DS8 4 \ kopa_online: \ 00000400 DS8 4 \ kopa_kontaktu: \ 00000404 DS8 4 \ ping_time: \ 00000408 DS8 4 \ main_msg_timer2: \ 0000040C DS8 4 \ NEW_MSG: \ 00000410 DS8 4 \ time_to_stop_t9: \ 00000414 DS8 4 \ comanda: \ 00000418 DS8 4 \ INC_show: \ 0000041C DS8 4 \ INC_show2: \ 00000420 DS8 4 \ pp_icon: \ 00000424 DS8 4 \ pp_xicon: \ 00000428 DS8 4 \ INC_show3: \ 0000042C DS8 4 \ curpos: \ 00000430 DS8 4 \ uinContact: \ 00000434 DS8 4 \ hy: \ 00000438 DS8 4 \ clfont: \ 0000043C DS8 4 \ itemFromDisp: \ 00000440 DS8 4 \ totalItems: \ 00000444 DS8 4 \ errornumber: \ 00000448 DS8 4 \ old_ed_redraw: \ 0000044C DS8 4 \ 00000450 DS8 64 \ elf_path: \ 00000490 DS8 256 \ ContactT9Key: \ 00000590 DS8 32 \ ixtext: \ 000005B0 DS8 256 \ talk_sound: \ 000006B0 DS8 128 \ unread_msg_info: \ 00000730 DS8 64 \ last_msg_buffer: \ 00000770 DS8 4096 \ prmsg: \ 00001770 DS8 256 \ ping_tmr: \ 00001870 DS8 16 \ PINGO: \ 00001880 DS8 256 \ away_msg: \ 00001980 DS8 264 \ away_msg_time: \ 00001A88 DS8 64 \ away_msg_time_dace: \ 00001AC8 DS8 16 \ tim_zone: \ 00001AD8 DS8 16 \ away_tmr: \ 00001AE8 DS8 16 \ autoChangeStatus: \ 00001AF8 DS8 16 \ remind_tmr: \ 00001B08 DS8 16 \ uptime_tmr: \ 00001B18 DS8 16 \ tracktmr: \ 00001B28 DS8 16 \ onlineTime: \ 00001B38 DS8 128 \ logmsg: \ 00001BB8 DS8 256 \ logmsg2: \ 00001CB8 DS8 256 \ tmr_illumination: \ 00001DB8 DS8 16 \ tmr_vibra: \ 00001DC8 DS8 16 \ reconnect_tmr: \ 00001DD8 DS8 16 \ tmr_active: \ 00001DE8 DS8 16 \ clmenu_sk_r: \ 00001DF8 DS8 16 \ on_off_buf: \ 00001E08 DS8 128 \ hostbuf2: \ 00001E88 DS8 128 \ hostname: \ 00001F08 DS8 128 \ I_UIN: \ 00001F88 DS8 12 \ a_txt: \ 00001F94 DS8 48 \ s_txt: \ 00001FC4 DS8 48 \ d_txt: \ 00001FF4 DS8 48 \ f_txt: \ 00002024 DS8 48 \ g_txt: \ 00002054 DS8 48 \ develop: \ 00002084 DS8 16 \ mod_info: \ 00002094 DS8 264 \ show_nick: \ 0000219C DS8 32 \ onContact: \ 000021BC DS8 64 \ incs2: \ 000021FC DS8 16 \ OffContact: \ 0000220C DS8 64 \ incs3: \ 0000224C DS8 16 \ tm22: \ 0000225C DS8 16 \ In segment DATA_Z, align 4, align-sorted \ IsActiveUp: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted \ timeh: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted \ timemin: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted \ RXbuf: \ 00000000 DS8 16392 \ In segment DATA_Z, align 4, align-sorted \ TXbuf: \ 00000000 DS8 16392 \ In segment DATA_Z, align 4, align-sorted \ clm_hdr_text: \ 00000000 DS8 64 \ In segment DATA_Z, align 4, align-sorted \ status: \ 00000000 DS8 64 \ In segment DATA_Z, align 4, align-sorted \ cmd_chars: \ 00000000 DS8 4 \ cmd_lines: \ 00000004 DS8 4 \ In segment DATA_Z, align 4, align-sorted \ INC_Nick: \ 00000000 DS8 32 \ In segment DATA_Z, align 4, align-sorted \ i_itemFromDisp: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted \ i_totalItems: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted \ i_tmr: \ 00000000 DS8 16 \ In segment DATA_Z, align 4, align-sorted \ BlinkMSG: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted \ lastIsLongPress: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted \ maincsm_name_body: \ 00000000 DS8 280 \ In segment DATA_C, align 4, align-sorted 8444 8445 8446 8447 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 `?` 8448 { 8449 1, 8450 edchat_onkey, 8451 edchat_ghook, 8452 (void *)edchat_locret, 8453 0, 8454 &menu_skt, 8455 {0,NULL,NULL,NULL}, 8456 FONT_SMALL, 8457 100, 8458 101, 8459 0, 8460 // 0x00000001 - Выровнять по правому краю 8461 // 0x00000002 - Выровнять по центру 8462 // 0x00000004 - Инверсия знакомест 8463 // 0x00000008 - UnderLine 8464 // 0x00000020 - Не переносить слова 8465 // 0x00000200 - bold 8466 0, 8467 // 0x00000002 - ReadOnly 8468 // 0x00000004 - Не двигается курсор 8469 // 0x40000000 - Поменять местами софт-кнопки 8470 0x40000000 8471 }; 8472 \ In segment CODE, align 4, keep-with-next 8473 void CreateEditChat(CLIST *t) 8474 { \ CreateEditChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 8475 8476 void *ma=malloc_adr(); 8477 void *eq; 8478 EDITCONTROL ec; 8479 EDITC_OPTIONS ec_options; 8480 int color, font, type; 8481 int zc; 8482 8483 LOGQ *lp; 8484 int edchat_toitem; 8485 // edcontact=t; 8486 8487 *((int *)(&edchat_hdr.lgp_id))=(int)t->name; \ 00000004 6C649FE5 LDR R6,??CreateEditChat_0 ;; edchat_desc 8488 // *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+GetIconIndex(t); 8489 *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+IS_NULLICON; \ 00000008 ........ LDR R7,??DataTable372 ;; 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 AE0F87E2 ADD R0,R7,#+696 \ 00000028 400086E5 STR R0,[R6, #+64] 8490 8491 eq=AllocEQueue(ma,mfree_adr()); \ 0000002C 158000EF SWI +32789 \ 00000030 0010A0E1 MOV R1,R0 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 630100EF SWI +355 8492 8493 /* hist = malloc(256); 8494 if(!GetHistory(hist, 256, t->uin)) 8495 { 8496 ascii2ws(ews,hist); 8497 PrepareEditControl(&ec); 8498 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL|ECF_DISABLE_T9,ews,ews->wsbody[0]); 8499 } 8500 mfree(hist); 8501 8502 AddEditControlToEditQend(eq,&ec,ma); */ 8503 lp=t->log; \ 0000003C 949094E5 LDR R9,[R4, #+148] \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 000059E3 CMP R9,#+0 \ 00000048 8F00000A BEQ ??CreateEditChat_1 8504 8505 while(lp) 8506 { 8507 font = ED_H_FONT_SIZE; \ ??CreateEditChat_2: \ 0000004C ........ LDR R0,??DataTable373 ;; ED_H_FONT_SIZE 8508 if ((zc=lp->acked&3))//Если отправлен или доставлен \ 00000050 ........ LDR R1,??DataTable374 ;; 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 8509 { 8510 if (zc==1) \ 00000068 010050E3 CMP R0,#+1 \ 0000006C 2200001A BNE ??CreateEditChat_4 8511 color=ACK_COLOR; //Зеленый, отправлен,но не доставлен \ 00000070 ........ LDR R0,??DataTable375 ;; ACK_COLOR \ 00000074 1F0000EA B ??CreateEditChat_5 8512 else 8513 color=I_COLOR;//доставлен 8514 } 8515 else//иначе входящее сообщение 8516 { 8517 if (lp->ID==0xFFFFFFFF) \ ??CreateEditChat_3: \ 00000078 080099E5 LDR R0,[R9, #+8] \ 0000007C 010070E3 CMN R0,#+1 \ 00000080 1B00001A BNE ??CreateEditChat_6 8518 { 8519 type = lp->type&0x0F; \ 00000084 0C0099E5 LDR R0,[R9, #+12] \ 00000088 0F1000E2 AND R1,R0,#0xF 8520 if(lp->type&0x10)//история \ 0000008C 100010E3 TST R0,#0x10 \ 00000090 0D00000A BEQ ??CreateEditChat_7 8521 { 8522 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 00000094 010051E3 CMP R1,#+1 \ 00000098 ........ LDREQ R0,??DataTable376 ;; O_I_COLOR \ 0000009C 0700000A BEQ ??CreateEditChat_8 \ 000000A0 030051E3 CMP R1,#+3 \ 000000A4 0400001A BNE ??CreateEditChat_9 \ 000000A8 ........ LDR R0,??DataTable389 ;; O_X_COLOR \ 000000AC 00B090E5 LDR R11,[R0, #+0] \ 000000B0 ........ LDR R0,??DataTable391 ;; O_ED_X_FONT_SIZE \ ??CreateEditChat_10: \ 000000B4 00A090E5 LDR R10,[R0, #+0] \ 000000B8 0F0000EA B ??CreateEditChat_4 \ ??CreateEditChat_9: \ 000000BC ........ LDR R0,??DataTable379 ;; O_TO_COLOR \ ??CreateEditChat_8: \ 000000C0 00B090E5 LDR R11,[R0, #+0] \ 000000C4 ........ LDR R0,??DataTable380 ;; O_ED_H_FONT_SIZE \ 000000C8 F9FFFFEA B ??CreateEditChat_10 8523 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 8524 } 8525 else//текущий чат 8526 { 8527 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,??DataTable390 ;; X_COLOR \ 000000E0 00B090E5 LDR R11,[R0, #+0] \ 000000E4 ........ LDR R0,??DataTable392 ;; ED_X_FONT_SIZE \ 000000E8 F1FFFFEA B ??CreateEditChat_10 \ ??CreateEditChat_11: \ 000000EC ........ LDR R0,??DataTable383 ;; TO_COLOR \ 000000F0 000000EA B ??CreateEditChat_5 8528 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 8529 } 8530 } 8531 else//если не входящее 8532 color=UNACK_COLOR; //то знач не доставлено \ ??CreateEditChat_6: \ 000000F4 ........ LDR R0,??DataTable384 ;; UNACK_COLOR \ ??CreateEditChat_5: \ 000000F8 00B090E5 LDR R11,[R0, #+0] 8533 } 8534 8535 PrepareEditControl(&ec); \ ??CreateEditChat_4: \ 000000FC 10008DE2 ADD R0,SP,#+16 \ 00000100 640100EF SWI +356 8536 8537 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 8538 { 8539 ascii2ws(ews,lp->hdr); \ 00000114 040397E5 LDR R0,[R7, #+772] \ 00000118 101089E2 ADD R1,R9,#+16 \ 0000011C ........ _BLF ascii2ws,??ascii2ws??rA 8540 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000120 043397E5 LDR R3,[R7, #+772] \ 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 8541 } 8542 else 8543 { 8544 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??CreateEditChat_12: \ 00000138 0000A0E3 MOV R0,#+0 \ 0000013C 01002DE9 PUSH {R0} \ 00000140 043397E5 LDR R3,[R7, #+772] \ 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 8545 } 8546 8547 PrepareEditCOptions(&ec_options); \ 00000158 0D00A0E1 MOV R0,SP \ 0000015C C80100EF SWI +456 8548 SetPenColorToEditCOptions(&ec_options,color); \ 00000160 0B10A0E1 MOV R1,R11 \ 00000164 0D00A0E1 MOV R0,SP \ 00000168 CC0100EF SWI +460 8549 SetFontToEditCOptions(&ec_options,font); \ 0000016C 0A10A0E1 MOV R1,R10 \ 00000170 0D00A0E1 MOV R0,SP \ 00000174 CA0100EF SWI +458 8550 CopyOptionsToEditControl(&ec,&ec_options); \ 00000178 0D10A0E1 MOV R1,SP \ 0000017C 10008DE2 ADD R0,SP,#+16 \ 00000180 CE0100EF SWI +462 8551 AddEditControlToEditQend(eq,&ec,ma); \ 00000184 0520A0E1 MOV R2,R5 \ 00000188 10108DE2 ADD R1,SP,#+16 \ 0000018C 0800A0E1 MOV R0,R8 \ 00000190 660100EF SWI +358 8552 8553 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 8554 { 8555 ParseAnswer(ews,lp->text); \ 000001A4 040397E5 LDR R0,[R7, #+772] \ 000001A8 601089E2 ADD R1,R9,#+96 \ 000001AC ........ BL ParseAnswer \ 000001B0 060000EA B ??CreateEditChat_15 8556 } 8557 else 8558 { 8559 ParseXStatusText(ews,lp->text,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_14: \ 000001B4 100010E3 TST R0,#0x10 \ 000001B8 ........ LDRNE R0,??DataTable389 ;; O_X_COLOR \ 000001BC 601089E2 ADD R1,R9,#+96 \ 000001C0 ........ LDREQ R0,??DataTable390 ;; X_COLOR \ 000001C4 002090E5 LDR R2,[R0, #+0] \ 000001C8 040397E5 LDR R0,[R7, #+772] \ 000001CC ........ BL ParseXStatusText 8560 } 8561 8562 PrepareEditControl(&ec); \ ??CreateEditChat_15: \ 000001D0 10008DE2 ADD R0,SP,#+16 \ 000001D4 640100EF SWI +356 8563 ConstructEditControl(&ec, 8564 ECT_NORMAL_TEXT, 8565 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 8566 ews,ews->wsbody[0]); \ 000001D8 043397E5 LDR R3,[R7, #+772] \ 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 8567 PrepareEditCOptions(&ec_options); \ 00000204 04008DE2 ADD R0,SP,#+4 \ 00000208 C80100EF SWI +456 8568 //#ifdef M75 8569 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 8570 { 8571 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000220 100010E3 TST R0,#0x10 \ 00000224 ........ LDRNE R0,??DataTable387 ;; O_ED_FONT_SIZE \ 00000228 ........ LDREQ R0,??DataTable394 ;; ED_FONT_SIZE \ 0000022C 090000EA B ??CreateEditChat_17 8572 } 8573 else 8574 { 8575 SetPenColorToEditCOptions(&ec_options,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_16: \ 00000230 100010E3 TST R0,#0x10 \ 00000234 ........ LDRNE R0,??DataTable389 ;; O_X_COLOR \ 00000238 ........ LDREQ R0,??DataTable390 ;; X_COLOR \ 0000023C 001090E5 LDR R1,[R0, #+0] \ 00000240 0D00A0E1 MOV R0,SP \ 00000244 CC0100EF SWI +460 8576 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,??DataTable391 ;; O_ED_X_FONT_SIZE \ 00000254 ........ LDREQ R0,??DataTable392 ;; ED_X_FONT_SIZE \ ??CreateEditChat_17: \ 00000258 001090E5 LDR R1,[R0, #+0] \ 0000025C 0D00A0E1 MOV R0,SP \ 00000260 CA0100EF SWI +458 8577 } 8578 //#else 8579 // SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 8580 //#endif 8581 CopyOptionsToEditControl(&ec,&ec_options); \ 00000264 0D10A0E1 MOV R1,SP \ 00000268 10008DE2 ADD R0,SP,#+16 \ 0000026C CE0100EF SWI +462 8582 AddEditControlToEditQend(eq,&ec,ma); \ 00000270 0520A0E1 MOV R2,R5 \ 00000274 10108DE2 ADD R1,SP,#+16 \ 00000278 0800A0E1 MOV R0,R8 \ 0000027C 660100EF SWI +358 8583 lp=lp->next; \ 00000280 009099E5 LDR R9,[R9, #+0] 8584 } \ 00000284 000059E3 CMP R9,#+0 \ 00000288 6FFFFF1A BNE ??CreateEditChat_2 8585 if (t->isunread) total_unread--; \ ??CreateEditChat_1: \ 0000028C 840094E5 LDR R0,[R4, #+132] 8586 total_unread2=total_unread2-t->unread_msg; 8587 t->unread_msg=0; \ 00000290 0090A0E3 MOV R9,#+0 \ 00000294 000050E3 CMP R0,#+0 \ 00000298 EC039715 LDRNE R0,[R7, #+1004] \ 0000029C 01004012 SUBNE R0,R0,#+1 \ 000002A0 EC038715 STRNE R0,[R7, #+1004] \ 000002A4 580297E5 LDR R0,[R7, #+600] \ 000002A8 881094E5 LDR R1,[R4, #+136] \ 000002AC 010040E0 SUB R0,R0,R1 \ 000002B0 580287E5 STR R0,[R7, #+600] \ 000002B4 889084E5 STR R9,[R4, #+136] 8588 t->isunread=0; \ 000002B8 849084E5 STR R9,[R4, #+132] 8589 ChangeContactPos(t); \ 000002BC 0400A0E1 MOV R0,R4 \ 000002C0 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 8590 wsprintf(ews, "-------"); \ 000002C4 040397E5 LDR R0,[R7, #+772] \ 000002C8 4C1086E2 ADD R1,R6,#+76 \ 000002CC 240100EF SWI +292 8591 PrepareEditControl(&ec); \ 000002D0 10008DE2 ADD R0,SP,#+16 \ 000002D4 640100EF SWI +356 8592 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000002D8 043397E5 LDR R3,[R7, #+772] \ 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 8593 PrepareEditCOptions(&ec_options); \ 000002F8 04008DE2 ADD R0,SP,#+4 \ 000002FC C80100EF SWI +456 8594 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000300 ........ LDR R0,??DataTable394 ;; ED_FONT_SIZE \ 00000304 001090E5 LDR R1,[R0, #+0] \ 00000308 04008DE2 ADD R0,SP,#+4 \ 0000030C CA0100EF SWI +458 8595 CopyOptionsToEditControl(&ec,&ec_options); \ 00000310 04108DE2 ADD R1,SP,#+4 \ 00000314 14008DE2 ADD R0,SP,#+20 \ 00000318 CE0100EF SWI +462 8596 AddEditControlToEditQend(eq,&ec,ma); \ 0000031C 0520A0E1 MOV R2,R5 \ 00000320 14108DE2 ADD R1,SP,#+20 \ 00000324 0800A0E1 MOV R0,R8 \ 00000328 660100EF SWI +358 8597 8598 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 040397E5 LDR R0,[R7, #+772] \ 00000340 ........ BL ParseAnswer \ 00000344 020000EA B ??CreateEditChat_19 8599 else CutWSTR(ews,0); \ ??CreateEditChat_18: \ 00000348 040397E5 LDR R0,[R7, #+772] \ 0000034C 0010A0E3 MOV R1,#+0 \ 00000350 260100EF SWI +294 8600 PrepareEditControl(&ec); \ ??CreateEditChat_19: \ 00000354 10008DE2 ADD R0,SP,#+16 \ 00000358 640100EF SWI +356 8601 // ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,1024); 8602 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 043397E5 LDR R3,[R7, #+772] \ 00000378 402DA013 MOVNE R2,#+4096 \ 0000037C 0020A003 MOVEQ R2,#+0 \ 00000380 14008DE2 ADD R0,SP,#+20 \ 00000384 650100EF SWI +357 8603 8604 PrepareEditCOptions(&ec_options); \ 00000388 04008DE2 ADD R0,SP,#+4 \ 0000038C C80100EF SWI +456 8605 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000390 ........ LDR R0,??DataTable394 ;; ED_FONT_SIZE \ 00000394 001090E5 LDR R1,[R0, #+0] \ 00000398 04008DE2 ADD R0,SP,#+4 \ 0000039C CA0100EF SWI +458 8606 CopyOptionsToEditControl(&ec,&ec_options); \ 000003A0 04108DE2 ADD R1,SP,#+4 \ 000003A4 14008DE2 ADD R0,SP,#+20 \ 000003A8 CE0100EF SWI +462 8607 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 8608 8609 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 8610 { 8611 FreeXText(t); \ 000003D0 0400A0E1 MOV R0,R4 \ 000003D4 ........ _BLF FreeXText,??FreeXText??rA 8612 t->req_xtext=0; \ 000003D8 B09084E5 STR R9,[R4, #+176] 8613 RequestXText(t->uin); \ 000003DC 0C0094E5 LDR R0,[R4, #+12] \ 000003E0 ........ BL RequestXText 8614 } 8615 8616 EDCHAT_STRUCT *ed_struct=malloc(sizeof(EDCHAT_STRUCT)); \ ??CreateEditChat_20: \ 000003E4 1400A0E3 MOV R0,#+20 \ 000003E8 140000EF SWI +20 \ 000003EC 0050A0E1 MOV R5,R0 8617 ed_struct->ed_contact=t; \ 000003F0 004085E5 STR R4,[R5, #+0] 8618 ed_struct->ed_answer=edchat_toitem; \ 000003F4 08A085E5 STR R10,[R5, #+8] 8619 ed_struct->requested_decrement_total_unread=0; \ 000003F8 0C9085E5 STR R9,[R5, #+12] 8620 t->req_add=0; \ 000003FC 8C9084E5 STR R9,[R4, #+140] 8621 t->last_log=NULL; \ 00000400 9C9084E5 STR R9,[R4, #+156] 8622 8623 // int scr_w=ScreenW(); 8624 // int scr_h=ScreenH(); 8625 // int head_h=HeaderH(); 8626 8627 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] 8628 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] 8629 // edchat_desc.font=ED_FONT_SIZE; 8630 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 F80387E5 STR R0,[R7, #+1016] 8631 } \ 00000470 40D08DE2 ADD SP,SP,#+64 \ 00000474 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CreateEditChat_0: \ 00000478 ........ DC32 edchat_desc \ 0000047C ........ DC32 FIRST_LETTER 8632 8633 //----------------------------------------------------------------------------- 8634 8635 #define EC_MNU_MAX 9 8636 \ In segment CODE, align 4, keep-with-next 8637 void Quote(GUI *data) 8638 { \ Quote: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 8639 int q_n; 8640 EDITCONTROL ec, ec_hdr; 8641 EDITCONTROL ec_ed; 8642 WSHDR *ed_ws; 8643 WSHDR *ws; 8644 8645 EDCHAT_STRUCT *ed_struct; 8646 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 8647 8648 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 8649 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 8650 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 8651 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 8652 8653 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 8654 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 8655 { 8656 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 8657 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote_1 8658 } 8659 else 8660 CutWSTR(ed_ws,0); \ ??Quote_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 8661 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 8662 { 8663 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 8664 } 8665 else 8666 { 8667 wstrcat(ed_ws,ec.pWS); \ ??Quote_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 8668 } 8669 int ed_pos=0; \ ??Quote_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 8670 do 8671 { 8672 ed_pos++; \ ??Quote_4: \ 000000D0 017080E2 ADD R7,R0,#+1 8673 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 8674 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 8675 } 8676 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 8677 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 8678 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 8679 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 8680 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 8681 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 8682 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 8683 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 8684 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 8685 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 0000017C 040094E5 LDR R0,[R4, #+4] \ 00000180 0610A0E1 MOV R1,R6 \ 00000184 810100EF SWI +385 8686 FreeWS(ws); \ 00000188 0600A0E1 MOV R0,R6 \ 0000018C 290100EF SWI +297 8687 GeneralFuncF1(1); \ 00000190 0100A0E3 MOV R0,#+1 \ 00000194 3B0100EF SWI +315 8688 } \ 00000198 84D08DE2 ADD SP,SP,#+132 \ 0000019C F080BDE8 POP {R4-R7,PC} ;; return 8689 \ In segment CODE, align 4, keep-with-next 8690 void Quote2(GUI *data)//цитирование без фокуса на ответ 8691 { \ Quote2: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 8692 int q_n; 8693 EDITCONTROL ec, ec_hdr; 8694 EDITCONTROL ec_ed; 8695 WSHDR *ed_ws; 8696 WSHDR *ws; 8697 8698 EDCHAT_STRUCT *ed_struct; 8699 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 8700 8701 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 8702 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 8703 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 8704 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 8705 8706 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 8707 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 8708 { 8709 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 8710 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote2_1 8711 } 8712 else 8713 CutWSTR(ed_ws,0); \ ??Quote2_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 8714 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 8715 { 8716 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 8717 } 8718 else 8719 { 8720 wstrcat(ed_ws,ec.pWS); \ ??Quote2_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 8721 } 8722 int ed_pos=0; \ ??Quote2_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 8723 do 8724 { 8725 ed_pos++; \ ??Quote2_4: \ 000000D0 017080E2 ADD R7,R0,#+1 8726 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 8727 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 8728 } 8729 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 8730 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 8731 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 8732 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 8733 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 8734 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 8735 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 8736 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 8737 int ii=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000170 040094E5 LDR R0,[R4, #+4] \ 00000174 820100EF SWI +386 8738 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 8739 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000188 040094E5 LDR R0,[R4, #+4] \ 0000018C 0610A0E1 MOV R1,R6 \ 00000190 810100EF SWI +385 8740 EDIT_SetFocus(ed_struct->ed_chatgui,ii); \ 00000194 040094E5 LDR R0,[R4, #+4] \ 00000198 0510A0E1 MOV R1,R5 \ 0000019C 9B0100EF SWI +411 8741 FreeWS(ws); \ 000001A0 0600A0E1 MOV R0,R6 \ 000001A4 290100EF SWI +297 8742 GeneralFuncF1(1); \ 000001A8 0100A0E3 MOV R0,#+1 \ 000001AC 3B0100EF SWI +315 8743 } \ 000001B0 84D08DE2 ADD SP,SP,#+132 \ 000001B4 F080BDE8 POP {R4-R7,PC} ;; return 8744 8745 \ In segment CODE, align 4, keep-with-next 8746 void GetShortInfo(GUI *data) 8747 { \ GetShortInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} 8748 EDCHAT_STRUCT *ed_struct; 8749 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 8750 8751 TPKT *p; 8752 CLIST *t; 8753 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,??DataTable406 ;; screen3 + 52 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 030050E3 CMP R0,#+3 \ 00000024 1B00001A BNE ??GetShortInfo_0 8754 { 8755 p=malloc(sizeof(PKT)); \ 00000028 0800A0E3 MOV R0,#+8 \ 0000002C 140000EF SWI +20 8756 p->pkt.uin=t->uin; 8757 p->pkt.type=T_REQINFOSHORT; 8758 p->pkt.data_len=0; 8759 AddStringToLog(t, 0x01, "Request info...", I_str,0xFFFFFFFF,1); \ 00000030 ........ LDR R3,??DataTable400 ;; 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 8760 AddMsgToChat(ed_struct->ed_chatgui); \ 00000070 040094E5 LDR R0,[R4, #+4] \ 00000074 ........ BL AddMsgToChat 8761 RecountMenu(t,1); \ 00000078 0110A0E3 MOV R1,#+1 \ 0000007C 0500A0E1 MOV R0,R5 \ 00000080 ........ BL RecountMenu 8762 SUBPROC((void *)SendAnswer,0,p); \ 00000084 ........ LDR R0,??DataTable401 ;; SendAnswer \ 00000088 0620A0E1 MOV R2,R6 \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 710100EF SWI +369 \ 00000094 08D08DE2 ADD SP,SP,#+8 8763 } 8764 GeneralFuncF1(1); \ ??GetShortInfo_0: \ 00000098 0100A0E3 MOV R0,#+1 \ 0000009C 3B0100EF SWI +315 8765 } \ 000000A0 7080BDE8 POP {R4-R6,PC} ;; return \ ??GetShortInfo_1: \ 000000A4 ........ DC32 `?` 8766 8767 void AskNickAndAddContact(EDCHAT_STRUCT *); \ In segment CODE, align 4, keep-with-next 8768 void AddCurContact(GUI *data) 8769 { \ AddCurContact: \ 00000000 00402DE9 PUSH {LR} 8770 EDCHAT_STRUCT *ed_struct; 8771 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 8772 8773 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,??DataTable406 ;; screen3 + 52 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0000001A BNE ??AddCurContact_0 \ 00000024 ........ _BLF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA 8774 GeneralFuncF1(1); \ ??AddCurContact_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 3B0100EF SWI +315 8775 } \ 00000030 0080BDE8 POP {PC} ;; return 8776 \ In segment CODE, align 4, keep-with-next 8777 void SendAuthReq(GUI *data) 8778 { \ SendAuthReq: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 14D04DE2 SUB SP,SP,#+20 8779 EDCHAT_STRUCT *ed_struct; 8780 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 8781 8782 TPKT *p; 8783 CLIST *t; 8784 int l; 8785 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,??DataTable406 ;; screen3 + 52 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthReq_1 8787 { 8788 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 8789 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 8790 p->pkt.type=T_AUTHREQ; 8791 p->pkt.data_len=l; 8792 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 8793 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 ........ LDR R3,??DataTable400 ;; 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 8794 AddMsgToChat(ed_struct->ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 8795 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 ........ BL RecountMenu 8796 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable401 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 8797 } 8798 GeneralFuncF1(1); \ ??SendAuthReq_1: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 8799 } \ 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,??DataTable406 ;; screen3 + 52 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthGrant_1 8811 { 8812 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 8813 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 8814 p->pkt.type=T_AUTHGRANT; 8815 p->pkt.data_len=l; 8816 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 8817 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 ........ LDR R3,??DataTable403 ;; 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 8818 AddMsgToChat(ed_struct->ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 8819 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 ........ BL RecountMenu 8820 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable404 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 8821 } 8822 GeneralFuncF1(1); \ ??SendAuthGrant_1: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 8823 } \ 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 8833 { 8834 if(HISTORY_SAVE_TYPE) \ 00000024 ........ LDR R1,??DataTable405 ;; 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 8835 { 8836 if(HISTORY_TYPE) \ 00000050 01002DE9 PUSH {R0} \ 00000054 00005CE3 CMP R12,#+0 \ 00000058 0500000A BEQ ??OpenLogfile_3 8837 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 8838 else 8839 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 8840 } 8841 else 8842 { 8843 if(HISTORY_TYPE) \ ??OpenLogfile_2: \ 0000008C 00005CE3 CMP R12,#+0 \ 00000090 0200000A BEQ ??OpenLogfile_6 8844 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 8845 else 8846 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 8847 } 8848 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 8849 } 8850 FreeWS(ws); \ ??OpenLogfile_0: \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 290100EF SWI +297 8851 GeneralFuncF1(1); \ 000000C8 0100A0E3 MOV R0,#+1 \ 000000CC 3B0100EF SWI +315 8852 } \ 000000D0 3080BDE8 POP {R4,R5,PC} ;; return \ ??OpenLogfile_1: \ 000000D4 ........ DC32 HISTORY_SAVE_TYPE \ 000000D8 ........ DC32 HISTORY_TYPE \ 000000DC ........ DC32 `?` \ 000000E0 ........ DC32 HIST_PATH 8853 \ In segment CODE, align 4, keep-with-next 8854 void ClearLog(GUI *data/*,void *dummy*/) 8855 { \ ClearLog: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 8856 EDITCONTROL ec; 8857 EDCHAT_STRUCT *ed_struct; 8858 WSHDR *ws; 8859 CLIST *t; 8860 8861 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 8862 8863 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 8864 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 8865 { 8866 ws=AllocWS(1); \ 00000030 0100A0E3 MOV R0,#+1 \ 00000034 250100EF SWI +293 \ 00000038 0050A0E1 MOV R5,R0 8867 CutWSTR(ws,0); \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 260100EF SWI +294 8868 8869 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 8870 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000050 040094E5 LDR R0,[R4, #+4] \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 810100EF SWI +385 8871 8872 FreeWS(ws); \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 290100EF SWI +297 8873 GeneralFuncF1(1); \ 00000064 1D0000EA B ??ClearLog_1 8874 } 8875 else 8876 { 8877 8878 if ((t=ed_struct->ed_contact)) \ ??ClearLog_0: \ 00000068 005094E5 LDR R5,[R4, #+0] \ 0000006C 000055E3 CMP R5,#+0 \ 00000070 1C00000A BEQ ??ClearLog_2 8879 { 8880 if (t->log) \ 00000074 940095E5 LDR R0,[R5, #+148] \ 00000078 0060A0E3 MOV R6,#+0 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 1200000A BEQ ??ClearLog_3 8881 { 8882 FreeLOGQ(&t->log); \ 00000084 940085E2 ADD R0,R5,#+148 \ 00000088 ........ BL FreeLOGQ 8883 t->msg_count=0; \ 0000008C A46085E5 STR R6,[R5, #+164] 8884 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 8885 { 8886 while(ed_struct->ed_answer!=2) 8887 { 8888 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??ClearLog_5: \ 000000AC 040094E5 LDR R0,[R4, #+4] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 D10100EF SWI +465 8889 ed_struct->ed_answer--; \ 000000B8 080094E5 LDR R0,[R4, #+8] \ 000000BC 010040E2 SUB R0,R0,#+1 \ 000000C0 080084E5 STR R0,[R4, #+8] 8890 } \ ??ClearLog_4: \ 000000C4 080094E5 LDR R0,[R4, #+8] \ 000000C8 020050E3 CMP R0,#+2 \ 000000CC F6FFFF1A BNE ??ClearLog_5 8891 } 8892 } 8893 t->isactive=0; //by BoBa 18.06.07 \ ??ClearLog_3: \ 000000D0 A06085E5 STR R6,[R5, #+160] 8894 RecountMenu(t,1); \ 000000D4 0110A0E3 MOV R1,#+1 \ 000000D8 0500A0E1 MOV R0,R5 \ 000000DC ........ BL RecountMenu 8895 GeneralFuncF1(1); \ ??ClearLog_1: \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 3B0100EF SWI +315 8896 } 8897 } 8898 } \ ??ClearLog_2: \ 000000E8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000EC 7080BDE8 POP {R4-R6,PC} ;; return 8899 \ In segment CODE, align 4, keep-with-next 8900 void ecmenu_ghook(void *data, int cmd) 8901 { \ ecmenu_ghook: \ 00000000 00402DE9 PUSH {LR} 8902 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 8903 { 8904 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 8905 } 8906 } \ 00000010 0080BDE8 POP {PC} ;; return 8907 \ In segment DATA_C, align 4, align-sorted 8908 static const MENUITEM_DESC ecmenu_ITEMS[EC_MNU_MAX]= \ ecmenu_ITEMS: \ 00000000 00000000.... DC32 0H, `?ed_contact)) \ 0000000C 001094E5 LDR R1,[R4, #+0] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 4B00000A BEQ ??ec_menu_0 8957 { 8958 if (t->name) \ 00000018 34019FE5 LDR R0,??ec_menu_1+0x4 ;; ecm_contactname \ 0000001C 142091E2 ADDS R2,R1,#+20 \ 00000020 0300000A BEQ ??ec_menu_2 8959 { 8960 strncpy(ecm_contactname,t->name,63); \ 00000024 3F20A0E3 MOV R2,#+63 \ 00000028 141081E2 ADD R1,R1,#+20 \ 0000002C 160100EF SWI +278 \ 00000030 020000EA B ??ec_menu_3 8961 } 8962 else 8963 { 8964 sprintf(ecm_contactname,"%u",t->uin); \ ??ec_menu_2: \ 00000034 0C2091E5 LDR R2,[R1, #+12] \ 00000038 441F8FE2 ADR R1,??ec_menu_1 ;; "%u" \ 0000003C 160000EF SWI +22 8965 } 8966 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ec_menu_3: \ 00000040 040094E5 LDR R0,[R4, #+4] \ 00000044 820100EF SWI +386 \ 00000048 083094E5 LDR R3,[R4, #+8] \ 0000004C 0220A0E3 MOV R2,#+2 \ 00000050 0010A0E3 MOV R1,#+0 \ 00000054 030050E1 CMP R0,R3 \ 00000058 0400001A BNE ??ec_menu_4 8967 { 8968 to_remove[++remove]=0; \ 0000005C 04108DE5 STR R1,[SP, #+4] 8969 to_remove[++remove]=1; \ 00000060 0250A0E3 MOV R5,#+2 \ 00000064 0130A0E3 MOV R3,#+1 \ 00000068 08308DE5 STR R3,[SP, #+8] \ 0000006C 010000EA B ??ec_menu_5 8970 } 8971 else 8972 { 8973 // to_remove[++remove]=1; 8974 to_remove[++remove]=2; \ ??ec_menu_4: \ 00000070 0150A0E3 MOV R5,#+1 \ 00000074 04208DE5 STR R2,[SP, #+4] 8975 } 8976 8977 if (ed_struct->ed_answer<=2) \ ??ec_menu_5: \ 00000078 080094E5 LDR R0,[R4, #+8] \ 0000007C 030050E3 CMP R0,#+3 \ 00000080 030000AA BGE ??ec_menu_6 8978 to_remove[++remove]=7; \ 00000084 015085E2 ADD R5,R5,#+1 \ 00000088 0D00A0E1 MOV R0,SP \ 0000008C 0730A0E3 MOV R3,#+7 \ 00000090 053180E7 STR R3,[R0, +R5, LSL #+2] 8979 8980 if (!ed_struct->ed_contact || connect_state!=3) \ ??ec_menu_6: \ 00000094 000094E5 LDR R0,[R4, #+0] \ 00000098 000050E3 CMP R0,#+0 \ 0000009C 0300000A BEQ ??ec_menu_7 \ 000000A0 ........ LDR R0,??DataTable406 ;; screen3 + 52 \ 000000A4 000090E5 LDR R0,[R0, #+0] \ 000000A8 030050E3 CMP R0,#+3 \ 000000AC 1000000A BEQ ??ec_menu_8 8981 { 8982 to_remove[++remove]=2; \ ??ec_menu_7: \ 000000B0 010085E2 ADD R0,R5,#+1 \ 000000B4 0D30A0E1 MOV R3,SP \ 000000B8 002183E7 STR R2,[R3, +R0, LSL #+2] 8983 to_remove[++remove]=3; \ 000000BC 010080E2 ADD R0,R0,#+1 \ 000000C0 0D20A0E1 MOV R2,SP \ 000000C4 0330A0E3 MOV R3,#+3 \ 000000C8 003182E7 STR R3,[R2, +R0, LSL #+2] 8984 to_remove[++remove]=4; \ 000000CC 010080E2 ADD R0,R0,#+1 \ 000000D0 0430A0E3 MOV R3,#+4 \ 000000D4 003182E7 STR R3,[R2, +R0, LSL #+2] 8985 to_remove[++remove]=5; \ 000000D8 010080E2 ADD R0,R0,#+1 \ 000000DC 0530A0E3 MOV R3,#+5 \ 000000E0 003182E7 STR R3,[R2, +R0, LSL #+2] 8986 to_remove[++remove]=6; \ 000000E4 015080E2 ADD R5,R0,#+1 \ 000000E8 0D00A0E1 MOV R0,SP \ 000000EC 0620A0E3 MOV R2,#+6 \ 000000F0 052180E7 STR R2,[R0, +R5, LSL #+2] 8987 } 8988 8989 patch_header(&ecmenu_HDR); \ ??ec_menu_8: \ 000000F4 5C609FE5 LDR R6,??ec_menu_1+0x8 ;; ecmenu_HDR \ 000000F8 001086E5 STR R1,[R6, #+0] \ 000000FC 888100EF SWI +33160 \ 00000100 010040E2 SUB R0,R0,#+1 \ 00000104 B400C6E1 STRH R0,[R6, #+4] \ 00000108 8A8100EF SWI +33162 \ 0000010C 010040E2 SUB R0,R0,#+1 \ 00000110 B600C6E1 STRH R0,[R6, #+6] 8990 to_remove[0]=remove; \ 00000114 00508DE5 STR R5,[SP, #+0] 8991 CreateMenu(0,0,&ecmenu_STRUCT,&ecmenu_HDR,0,EC_MNU_MAX,ed_struct,to_remove); \ 00000118 0D00A0E1 MOV R0,SP \ 0000011C 01002DE9 PUSH {R0} \ 00000120 10002DE9 PUSH {R4} \ 00000124 0630A0E1 MOV R3,R6 \ 00000128 0900A0E3 MOV R0,#+9 \ 0000012C 01002DE9 PUSH {R0} \ 00000130 142086E2 ADD R2,R6,#+20 \ 00000134 0010A0E3 MOV R1,#+0 \ 00000138 0000A0E3 MOV R0,#+0 \ 0000013C 01002DE9 PUSH {R0} \ 00000140 520100EF SWI +338 \ 00000144 10D08DE2 ADD SP,SP,#+16 8992 } 8993 } \ ??ec_menu_0: \ 00000148 28D08DE2 ADD SP,SP,#+40 ;; stack cleaning \ 0000014C 7080BDE8 POP {R4-R6,PC} ;; return \ ??ec_menu_1: \ 00000150 25750000 DC8 "%u",+0 \ 00000154 ........ DC32 ecm_contactname \ 00000158 ........ DC32 ecmenu_HDR 8994 8995 \ In segment CODE, align 4, keep-with-next 8996 void AskNickAndAddContact(EDCHAT_STRUCT *ed_struct) 8997 { 8998 CreateAddContactGrpDialog(ed_struct->ed_contact); \ AskNickAndAddContact: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 ........ _BF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA ;; tailcall 8999 } 9000 \ In segment CODE, align 4, keep-with-next 9001 void AddSmile(GUI *data) 9002 { \ AddSmile: \ 00000000 00402DE9 PUSH {LR} 9003 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 9004 CreateSmileSelectGUI(ed_struct); \ 00000008 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 9005 GeneralFuncF1(1); \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0100EF SWI +315 9006 } \ 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 screen3 + 28 \ In segment CODE, align 4, keep-with-next \ ??DataTable3: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable4: \ 00000000 ........ DC32 i_rc + 608 \ In segment CODE, align 4, keep-with-next \ ??DataTable6: \ 00000000 ........ DC32 menutext \ In segment CODE, align 4, keep-with-next \ ??DataTable9: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable16: \ 00000000 ........ DC32 Remind_Timer2 \ In segment CODE, align 4, keep-with-next \ ??DataTable19: \ 00000000 ........ DC32 screen3 + 52 \ In segment CODE, align 4, keep-with-next \ ??DataTable20: \ 00000000 ........ DC32 GetTags \ In segment CODE, align 4, keep-with-next \ ??DataTable26: \ 00000000 ........ DC32 showAwayIdle \ In segment CODE, align 4, keep-with-next \ ??DataTable27: \ 00000000 ........ DC32 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable28: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable29: \ 00000000 ........ DC32 screen3 + 16 \ In segment CODE, align 4, keep-with-next \ ??DataTable31: \ 00000000 ........ DC32 screen3 \ In segment CODE, align 4, keep-with-next \ ??DataTable33: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable34: \ 00000000 ........ DC32 awayMsg \ In segment CODE, align 4, keep-with-next \ ??DataTable38: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable39: \ 00000000 ........ DC32 ICON_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable40: \ 00000000 ........ DC32 icons_names \ In segment CODE, align 4, keep-with-next \ ??DataTable49: \ 00000000 ........ DC32 def_setting \ In segment CODE, align 4, keep-with-next \ ??DataTable52: \ 00000000 ........ DC32 IsActiveUp \ In segment CODE, align 4, keep-with-next \ ??DataTable53: \ 00000000 ........ DC32 ind_set_xstatus \ In segment CODE, align 4, keep-with-next \ ??DataTable59: \ 00000000 ........ DC32 vibraPower \ In segment CODE, align 4, keep-with-next \ ??DataTable62: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable67: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable69: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable70: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable74: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable77: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable78: \ 00000000 ........ DC32 suc_config_name \ In segment CODE, align 4, keep-with-next \ ??DataTable79: \ 00000000 ........ DC32 suc_config_name_mod \ In segment CODE, align 4, keep-with-next \ ??DataTable80: \ 00000000 ........ DC32 janis \ In segment CODE, align 4, keep-with-next \ ??DataTable82: \ 00000000 ........ DC32 i_rc + 1008 \ In segment CODE, align 4, keep-with-next \ ??DataTable85: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable86: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable87: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable90: \ 00000000 ........ DC32 sndLostConn \ In segment CODE, align 4, keep-with-next \ ??DataTable92: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable93: \ 00000000 ........ DC32 screen3 \ In segment CODE, align 4, keep-with-next \ ??DataTable95: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable96: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable97: \ 00000000 ........ DC32 screen3 \ In segment CODE, align 4, keep-with-next \ ??DataTable99: \ 00000000 ........ DC32 ignor_list \ In segment CODE, align 4, keep-with-next \ ??DataTable100: \ 00000000 ........ DC32 extended_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable101: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable102: \ 00000000 ........ DC32 ext_type_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable103: \ 00000000 ........ DC32 Canvas + 8 \ In segment CODE, align 4, keep-with-next \ ??DataTable104: \ 00000000 ........ DC32 janis \ In segment CODE, align 4, keep-with-next \ ??DataTable106: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable108: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable109: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable110: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable111: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable121: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable122: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable123: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable125: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable126: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable127: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable128: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable129: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable130: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable131: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable132: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable138: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable141: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable142: \ 00000000 ........ DC32 cmd_chars \ In segment CODE, align 4, keep-with-next \ ??DataTable144: \ 00000000 ........ DC32 cmd_chars + 4 \ In segment CODE, align 4, keep-with-next \ ??DataTable145: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable146: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable148: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable149: \ 00000000 ........ DC32 screen3 + 28 \ In segment CODE, align 4, keep-with-next \ ??DataTable150: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable151: \ 00000000 ........ DC32 ignor_list \ In segment CODE, align 4, keep-with-next \ ??DataTable152: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable153: \ 00000000 ........ DC32 awayMsg \ In segment CODE, align 4, keep-with-next \ ??DataTable154: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable160: \ 00000000 ........ DC32 PopupFont \ In segment CODE, align 4, keep-with-next \ ??DataTable161: \ 00000000 ........ DC32 NumStatusToIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable162: \ 00000000 ........ DC32 PopupBGCl \ In segment CODE, align 4, keep-with-next \ ??DataTable164: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable165: \ 00000000 ........ DC32 screen3 \ In segment CODE, align 4, keep-with-next \ ??DataTable168: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable169: \ 00000000 ........ DC32 isLogStatusChange \ In segment CODE, align 4, keep-with-next \ ??DataTable170: \ 00000000 ........ DC32 extended_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable171: \ 00000000 ........ DC32 ext_type_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable172: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable173: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable176: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable177: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable178: \ 00000000 ........ DC32 Is_SMARTCPU_On \ In segment CODE, align 4, keep-with-next \ ??DataTable179: \ 00000000 ........ DC32 screen3 + 52 \ In segment CODE, align 4, keep-with-next \ ??DataTable182: \ 00000000 ........ DC32 process_active_timer \ In segment CODE, align 4, keep-with-next \ ??DataTable183: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable185: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable197: \ 00000000 ........ DC32 isSystemFont \ In segment CODE, align 4, keep-with-next \ ??DataTable198: \ 00000000 ........ DC32 pngFont \ In segment CODE, align 4, keep-with-next \ ??DataTable199: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable200: \ 00000000 ........ DC32 screen3 + 84 \ In segment CODE, align 4, keep-with-next \ ??DataTable203: \ 00000000 ........ DC32 i_rc + 1076 \ In segment CODE, align 4, keep-with-next \ ??DataTable206: \ 00000000 ........ DC32 screen3 + 284 \ In segment CODE, align 4, keep-with-next \ ??DataTable210: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable211: \ 00000000 ........ DC32 screen3 \ In segment CODE, align 4, keep-with-next \ ??DataTable214: \ 00000000 ........ DC32 menutext \ In segment CODE, align 4, keep-with-next \ ??DataTable215: \ 00000000 ........ DC32 PNG_SOFTKEY \ In segment CODE, align 4, keep-with-next \ ??DataTable218: \ 00000000 ........ DC32 screen3 \ In segment CODE, align 4, keep-with-next \ ??DataTable219: \ 00000000 ........ DC32 SoftBackgrClr \ In segment CODE, align 4, keep-with-next \ ??DataTable220: \ 00000000 ........ DC32 SoftFontClr \ In segment CODE, align 4, keep-with-next \ ??DataTable222: \ 00000000 ........ DC32 PNG_HEADER \ In segment CODE, align 4, keep-with-next \ ??DataTable223: \ 00000000 ........ DC32 HeadFont \ In segment CODE, align 4, keep-with-next \ ??DataTable226: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable228: \ 00000000 ........ DC32 screen3 \ In segment CODE, align 4, keep-with-next \ ??DataTable230: \ 00000000 ........ DC32 isSystemFont \ In segment CODE, align 4, keep-with-next \ ??DataTable231: \ 00000000 ........ DC32 pngFont \ In segment CODE, align 4, keep-with-next \ ??DataTable234: \ 00000000 ........ DC32 VIEW_MODE \ In segment CODE, align 4, keep-with-next \ ??DataTable237: \ 00000000 ........ DC32 Canvas + 8 \ In segment CODE, align 4, keep-with-next \ ??DataTable238: \ 00000000 ........ DC32 ShowProcessSend \ In segment CODE, align 4, keep-with-next \ ??DataTable239: \ 00000000 ........ DC32 isLogStatusChange \ In segment CODE, align 4, keep-with-next \ ??DataTable246: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable248: \ 00000000 ........ DC32 screen3 \ In segment CODE, align 4, keep-with-next \ ??DataTable250: \ 00000000 ........ DC32 SOFT_MODE \ In segment CODE, align 4, keep-with-next \ ??DataTable257: \ 00000000 ........ DC32 VIEW_MODE \ In segment CODE, align 4, keep-with-next \ ??DataTable258: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable263: \ 00000000 ........ DC32 i_rc + 608 \ In segment CODE, align 4, keep-with-next \ ??DataTable265: \ 00000000 ........ DC32 isSystemFont \ In segment CODE, align 4, keep-with-next \ ??DataTable266: \ 00000000 ........ DC32 pngFont \ In segment CODE, align 4, keep-with-next \ ??DataTable268: \ 00000000 ........ DC32 screen3 \ In segment CODE, align 4, keep-with-next \ ??DataTable270: \ 00000000 ........ DC32 IsInvertSoftKey \ In segment CODE, align 4, keep-with-next \ ??DataTable271: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable274: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable275: \ 00000000 ........ DC32 screen3 + 80 \ In segment CODE, align 4, keep-with-next \ ??DataTable276: \ 00000000 ........ DC32 screen3 \ In segment CODE, align 4, keep-with-next \ ??DataTable279: \ 00000000 ........ DC32 screen3 + 72 \ In segment CODE, align 4, keep-with-next \ ??DataTable280: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable281: \ 00000000 ........ DC32 process_active_timer \ In segment CODE, align 4, keep-with-next \ ??DataTable282: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable284: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable285: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable287: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable289: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable290: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable293: \ 00000000 ........ DC32 screen3 \ In segment CODE, align 4, keep-with-next \ ??DataTable294: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable297: \ 00000000 ........ DC32 Is_SMARTCPU_On \ In segment CODE, align 4, keep-with-next \ ??DataTable299: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable300: \ 00000000 ........ DC32 showAwayIdle \ In segment CODE, align 4, keep-with-next \ ??DataTable303: \ 00000000 ........ DC32 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable306: \ 00000000 ........ DC32 suc_config_name_mod \ In segment CODE, align 4, keep-with-next \ ??DataTable315: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable317: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable320: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable321: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable322: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable323: \ 00000000 ........ DC32 sndLostConn \ In segment CODE, align 4, keep-with-next \ ??DataTable324: \ 00000000 ........ DC32 ClearSendQ \ In segment CODE, align 4, keep-with-next \ ??DataTable326: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable327: \ 00000000 ........ DC32 screen3 \ In segment CODE, align 4, keep-with-next \ ??DataTable328: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable329: \ 00000000 ........ DC32 ShowStatusIcon \ In segment CODE, align 4, keep-with-next \ ??DataTable333: \ 00000000 ........ DC32 NumStatusToIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable337: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable338: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable339: \ 00000000 ........ DC32 suc_config_name \ In segment CODE, align 4, keep-with-next \ ??DataTable340: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable341: \ 00000000 ........ DC32 fontpath \ In segment CODE, align 4, keep-with-next \ ??DataTable342: \ 00000000 ........ DC32 fontpath2 \ In segment CODE, align 4, keep-with-next \ ??DataTable343: \ 00000000 ........ DC32 fontpath3 \ In segment CODE, align 4, keep-with-next \ ??DataTable344: \ 00000000 ........ DC32 fontpath4 \ In segment CODE, align 4, keep-with-next \ ??DataTable345: \ 00000000 ........ DC32 isSystemFont \ In segment CODE, align 4, keep-with-next \ ??DataTable346: \ 00000000 ........ DC32 pngFont \ In segment CODE, align 4, keep-with-next \ ??DataTable347: \ 00000000 ........ DC32 PNG_SOFTKEY \ In segment CODE, align 4, keep-with-next \ ??DataTable348: \ 00000000 ........ DC32 PNG_HEADER \ In segment CODE, align 4, keep-with-next \ ??DataTable349: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable350: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable351: \ 00000000 ........ DC32 Pinger2 \ In segment CODE, align 4, keep-with-next \ ??DataTable352: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable354: \ 00000000 ........ DC32 i_rc + 1008 \ In segment CODE, align 4, keep-with-next \ ??DataTable355: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable357: \ 00000000 ........ DC32 IsMultiBuffer \ In segment CODE, align 4, keep-with-next \ ??DataTable359: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable360: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable361: \ 00000000 ........ DC32 screen3 + 72 \ In segment CODE, align 4, keep-with-next \ ??DataTable362: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable364: \ 00000000 ........ DC32 screen3 \ In segment CODE, align 4, keep-with-next \ ??DataTable365: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable368: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable369: \ 00000000 ........ DC32 IsMultiBuffer \ In segment CODE, align 4, keep-with-next \ ??DataTable372: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable373: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable374: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable375: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable376: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable379: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable380: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable383: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable384: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable387: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable389: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable390: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable391: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable392: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable394: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable400: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable401: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable403: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable404: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable405: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable406: \ 00000000 ........ DC32 screen3 + 52 \ In segment CODE, align 4, keep-with-next \ ??DataTable407: \ 00000000 ........ DC32 GetTags \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 0000 DC8 0, 0 \ 00000002 0800 DC16 8 \ 00000004 ........ DC32 `?` \ `?`: \ 00000008 0000 DC8 0, 0 \ 0000000A 0800 DC16 8 \ 0000000C ........ DC32 `?` \ `?`: \ 00000010 00000000 DC32 0 \ `?`: \ 00000014 00000000 DC32 0 \ `?`: \ 00000018 00000000 DC32 0 \ `?`: \ 0000001C 00000000 DC32 0 \ `?`: \ 00000020 00000000 DC32 0H \ `?`: \ 00000024 00000000 DC32 0 \ `?`: \ 00000028 00000000 DC32 0 \ `?`: \ 0000002C 00000000 DC32 0 \ `?`: \ 00000030 F6FFFFFF DC32 -10 \ `?`: \ 00000034 00000000 DC32 0 \ `?`: \ 00000038 FFFFFFFF DC32 -1 \ `?`: \ 0000003C 01000000 DC32 1 \ `?`: \ 00000040 00000000 DC32 0 \ `?`: \ 00000044 00000000 DC32 0 \ `?`: \ 00000048 03000000 DC32 3 \ `?`: \ 0000004C 00000000 DC32 0 \ `?`: \ 00000050 01000000 DC32 1 \ `?`: \ 00000054 01000000 DC32 1 \ `?`: \ 00000058 01000000 DC32 1 \ `?`: \ 0000005C 00000000 DC32 0 \ `?`: \ 00000060 00000000 DC32 0 \ `?`: \ 00000064 00000000 DC32 0 \ `?`: \ 00000068 00000000 DC32 0 \ `?`: \ 0000006C 00000000 DC32 0 \ `?`: \ 00000070 01000000 DC32 1 \ `?`: \ 00000074 ............ DC32 RqtXText, ChangeVibraContact, ChangeSoundContact, ChangeAutoMsg \ ............ \ ........ \ 00000084 ........ DC32 ChangeShowXstatus \ 00000088 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000008C 257325642E25 DC8 "%s%d.%s" \ 7300 \ `?`: \ 00000094 6D703300 DC8 "mp3" \ `?`: \ 00000098 77617600 DC8 "wav" \ `?`: \ 0000009C 616D7200 DC8 "amr" \ `?`: \ 000000A0 53656E64696E DC8 "Sending online time..." \ 67206F6E6C69 \ 6E652074696D \ 652E2E2E00 \ 000000B7 00 DC8 0 \ `?`: \ 000000B8 53656E64696E DC8 "Sending msg info..." \ 67206D736720 \ 696E666F2E2E \ 2E00 \ `?`: \ 000000CC 53656E64696E DC8 "Sending battery info..." \ 672062617474 \ 65727920696E \ 666F2E2E2E00 \ `?`: \ 000000E4 53656E64696E DC8 "Sending mod info..." \ 67206D6F6420 \ 696E666F2E2E \ 2E00 \ `?`: \ 000000F8 53656E64696E DC8 "Sending offline info..." \ 67206F66666C \ 696E6520696E \ 666F2E2E2E00 \ `?`: \ 00000110 00000064 DC8 0, 0, 0, 100 \ `?`: \ 00000114 FFFFFF64 DC8 255, 255, 255, 100 \ `?`: \ 00000118 FF000064 DC8 255, 0, 0, 100 \ `?`: \ 0000011C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000120 0000FF6400 DC8 0, 0, 0FFH, 64H, 0 \ 00000125 000000 DC8 0, 0, 0 \ 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 DC32 0 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 FFFFFFFF DC32 -1 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 ............ DC32 maincsm_onmessage, maincsm_oncreate, 0, 0, 0, 0, maincsm_onclose \ ....00000000 \ 000000000000 \ 000000000000 \ ........ \ 0000001C 2C0000000100 DC32 44, 1, minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ 0000........ \ ........CCCC \ AA5555AA3333 \ 00000000 \ 00000038 8B00 DC16 139 \ 0000003A 0000 DC8 0, 0 \ 0000003C 49636F6E4261 DC8 "IconBar" \ 7200 \ 00000044 00000000 DC8 0, 0, 0, 0 \ 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 446563203130 DC8 "Dec 10 2010" \ 203230313000 \ 00000058 32323A31313A DC8 "22:11:44" \ 343400 \ 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 4, align-sorted \ `?`: \ 00000000 2573202D2025 DC8 "%s - %d(%d)" \ 642825642900 \ 0000000C 343A5C6E6174 DC8 "4:\\nata.txt" \ 612E74787400 \ 00000018 4572726F7221 DC8 "Error!" \ 00 \ 0000001F 00 DC8 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 0D0A00 DC8 "\015\012" \ In segment DATA_C, align 4, align-sorted \ 00000000 20256400 DC8 " %d" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 0000004000 DC8 0, 0, 0, 40H, 0 \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CCE5EDFE00 DC8 "\314\345\355\376" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 70696E67312E DC8 "ping1.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 70696E67322E DC8 "ping2.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 70696E67332E DC8 "ping3.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 70696E67342E DC8 "ping4.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 62672E706E67 DC8 "bg.png" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CBE5E200 DC8 "\313\345\342" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CFF0E0E200 DC8 "\317\360\340\342" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2FBE1EEF000 DC8 "\302\373\341\356\360" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7E0EAF0FBF2 DC8 "\307\340\352\360\373\362\374" \ FC00 \ In segment DATA_C, align 1, align-sorted \ `?`: \ 00000000 00 DC8 "" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2E8E1F0E000 DC8 "\302\350\341\360\340" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7E2F3EA00 DC8 "\307\342\363\352" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `? 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 312 maincsm_onclose 340 do_reconnect 40 CheckDoubleRun 128 checkGui 76 maincsm_onmessage 3052 screen3 296 sk 8 input_awaymsg_sk 24 input_awaymsg_skt 8 CmdMenuHeader 24 lastKey 4 addIconBar 744 minus11 4 MAINCSM 72 UpdateCSMname 36 SetIconBarHandler 20 main 588 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 48 edchat_onkey 1516 my_ed_redraw 112 edchat_ghook 544 i_rc 8812 IsActiveUp 4 timeh 4 timemin 4 RXbuf 16392 TXbuf 16392 clm_hdr_text 64 status 64 cmd_chars 8 INC_Nick 32 i_itemFromDisp 4 i_totalItems 4 i_tmr 16 BlinkMSG 4 lastIsLongPress 4 maincsm_name_body 280 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 ecm_contactname 64 ecmenu_HDR 64 ec_menu 348 AskNickAndAddContact 8 AddSmile 24 ??DataTable1 4 ??DataTable2 4 ??DataTable3 4 ??DataTable4 4 ??DataTable6 4 ??DataTable9 4 ??DataTable16 4 ??DataTable19 4 ??DataTable20 4 ??DataTable26 4 ??DataTable27 4 ??DataTable28 4 ??DataTable29 4 ??DataTable31 4 ??DataTable33 4 ??DataTable34 4 ??DataTable38 4 ??DataTable39 4 ??DataTable40 4 ??DataTable49 4 ??DataTable52 4 ??DataTable53 4 ??DataTable59 4 ??DataTable62 4 ??DataTable67 4 ??DataTable69 4 ??DataTable70 4 ??DataTable74 4 ??DataTable77 4 ??DataTable78 4 ??DataTable79 4 ??DataTable80 4 ??DataTable82 4 ??DataTable85 4 ??DataTable86 4 ??DataTable87 4 ??DataTable90 4 ??DataTable92 4 ??DataTable93 4 ??DataTable95 4 ??DataTable96 4 ??DataTable97 4 ??DataTable99 4 ??DataTable100 4 ??DataTable101 4 ??DataTable102 4 ??DataTable103 4 ??DataTable104 4 ??DataTable106 4 ??DataTable108 4 ??DataTable109 4 ??DataTable110 4 ??DataTable111 4 ??DataTable121 4 ??DataTable122 4 ??DataTable123 4 ??DataTable125 4 ??DataTable126 4 ??DataTable127 4 ??DataTable128 4 ??DataTable129 4 ??DataTable130 4 ??DataTable131 4 ??DataTable132 4 ??DataTable138 4 ??DataTable141 4 ??DataTable142 4 ??DataTable144 4 ??DataTable145 4 ??DataTable146 4 ??DataTable148 4 ??DataTable149 4 ??DataTable150 4 ??DataTable151 4 ??DataTable152 4 ??DataTable153 4 ??DataTable154 4 ??DataTable160 4 ??DataTable161 4 ??DataTable162 4 ??DataTable164 4 ??DataTable165 4 ??DataTable168 4 ??DataTable169 4 ??DataTable170 4 ??DataTable171 4 ??DataTable172 4 ??DataTable173 4 ??DataTable176 4 ??DataTable177 4 ??DataTable178 4 ??DataTable179 4 ??DataTable182 4 ??DataTable183 4 ??DataTable185 4 ??DataTable197 4 ??DataTable198 4 ??DataTable199 4 ??DataTable200 4 ??DataTable203 4 ??DataTable206 4 ??DataTable210 4 ??DataTable211 4 ??DataTable214 4 ??DataTable215 4 ??DataTable218 4 ??DataTable219 4 ??DataTable220 4 ??DataTable222 4 ??DataTable223 4 ??DataTable226 4 ??DataTable228 4 ??DataTable230 4 ??DataTable231 4 ??DataTable234 4 ??DataTable237 4 ??DataTable238 4 ??DataTable239 4 ??DataTable246 4 ??DataTable248 4 ??DataTable250 4 ??DataTable257 4 ??DataTable258 4 ??DataTable263 4 ??DataTable265 4 ??DataTable266 4 ??DataTable268 4 ??DataTable270 4 ??DataTable271 4 ??DataTable274 4 ??DataTable275 4 ??DataTable276 4 ??DataTable279 4 ??DataTable280 4 ??DataTable281 4 ??DataTable282 4 ??DataTable284 4 ??DataTable285 4 ??DataTable287 4 ??DataTable289 4 ??DataTable290 4 ??DataTable293 4 ??DataTable294 4 ??DataTable297 4 ??DataTable299 4 ??DataTable300 4 ??DataTable303 4 ??DataTable306 4 ??DataTable315 4 ??DataTable317 4 ??DataTable320 4 ??DataTable321 4 ??DataTable322 4 ??DataTable323 4 ??DataTable324 4 ??DataTable326 4 ??DataTable327 4 ??DataTable328 4 ??DataTable329 4 ??DataTable333 4 ??DataTable337 4 ??DataTable338 4 ??DataTable339 4 ??DataTable340 4 ??DataTable341 4 ??DataTable342 4 ??DataTable343 4 ??DataTable344 4 ??DataTable345 4 ??DataTable346 4 ??DataTable347 4 ??DataTable348 4 ??DataTable349 4 ??DataTable350 4 ??DataTable351 4 ??DataTable352 4 ??DataTable354 4 ??DataTable355 4 ??DataTable357 4 ??DataTable359 4 ??DataTable360 4 ??DataTable361 4 ??DataTable362 4 ??DataTable364 4 ??DataTable365 4 ??DataTable368 4 ??DataTable369 4 ??DataTable372 4 ??DataTable373 4 ??DataTable374 4 ??DataTable375 4 ??DataTable376 4 ??DataTable379 4 ??DataTable380 4 ??DataTable383 4 ??DataTable384 4 ??DataTable387 4 ??DataTable389 4 ??DataTable390 4 ??DataTable391 4 ??DataTable392 4 ??DataTable394 4 ??DataTable400 4 ??DataTable401 4 ??DataTable403 4 ??DataTable404 4 ??DataTable405 4 ??DataTable406 4 ??DataTable407 4 ? 296 ? 8 ? 24 ? 8 ? 24 ? 4 ? 72 ? 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 ? 32 ? 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 ?