############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 23/Sep/2008 14:34:13 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\main.c # # Command line = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\main.c -D # # NEWSGOLD -D ELKA -D kluchnik -D BCFGGEN # # --preprocess D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\k # # luchnik\List\ -lC D:\Pasha\elf\_MY_PROJECT_\naticq_m # # od2\kluchnik\List\ -o D:\Pasha\elf\_MY_PROJECT_\nati # # cq_mod2\kluchnik\Obj\ -s9 --cpu_mode arm --endian # # little --cpu ARM926EJ-S --stack_align 4 --interwork # # -e --fpu None --dlib_config "D:\Pasha\Embedded # # Workbench 4.0 Evaluation2\ARM\LIB\dl5tpainl8n.h" -I # # "D:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\INC\" --inline_threshold=2 # # List file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\kluchnik\List\ # # main.lst # # Object file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\kluchnik\Obj\m # # ain.r79 # # # # # ############################################################################## D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\main.c 1 #include "../inc/swilib.h" 2 #include "../inc/cfg_items.h" 3 #include "../inc/pnglist.h" 4 #include "configs.h" 5 #include "NatICQ.h" 6 #include "history.h" 7 #include "conf_loader.h" 8 #include "mainmenu.h" 9 #include "main.h" 10 #include "language.h" 11 #include "../inc/xtask_ipc.h" 12 #include "smiles.h" 13 #include "naticq_ipc.h" 14 #include "status_change.h" 15 #include "strings.h" 16 #include "manage_cl.h" 17 #include "cl_work.h" 18 #include "select_smile.h" 19 #include "revision.h" 20 #include "print.h" 21 #ifdef NEWSGOLD 22 #include "screen_save.h" 23 #include "player_tags.h" 24 #endif 25 #include "swilib2.h" 26 #include "rect_patcher.h" 27 #include "addon.h" 28 29 extern int *XStatusesIconArray; 30 31 #ifndef NEWSGOLD 32 #define SEND_TIMER 33 #endif 34 35 #define IN_TICKS(sec) (sec * TMR_SECOND) 36 37 38 //------------- ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ -------------// 39 40 int main_d; 41 int align=0; 42 //int space=1; 43 void *canvasdata; 44 int paused_height; 45 WSHDR *wsBuffer;//мультибуффер 46 47 char talk_sound[128]; 48 int uins; 49 //char m_1[]="unofficial! private use only"; 50 //char m_2[]="mod by (c)Evilfox 315384924"; 51 char unread_msg_info[64]; 52 53 int saver_on; 54 55 #ifdef NEWSGOLD 56 extern char teast2[256]; 57 #endif 58 59 //#ifdef ELKA 60 char last_msg_buffer[4096]; 61 //#endif 62 63 //-------------------------------------------------// 64 65 char prmsg[256];//вывод попап 66 int PrintTimer=0;//время попап 67 int curping=0; //тукущий пинг 68 69 //-------------------- AUTOPING -------------------// 70 71 GBSTMR ping_tmr; 72 static void PingToServer2(void) 73 { 74 TPKT *p; 75 p=malloc(sizeof(PKT)+sizeof(TTime)); 76 GetDateTime(NULL,(TTime *)p->data); 77 p->pkt.uin=0; 78 p->pkt.type=T_ECHO; 79 p->pkt.data_len=sizeof(TTime); 80 SUBPROC((void *)SendAnswer,0,p); 81 } 82 83 int Is_PING_On; 84 \ In segment CODE, align 4, keep-with-next 85 void Pinger2() 86 { 87 if(Is_PING_On) \ Pinger2: \ 00000000 ........ LDR R0,??DataTable33 ;; i_rc \ 00000004 70402DE9 PUSH {R4-R6,LR} \ 00000008 ........ LDR R5,??DataTable1 ;; Pinger2 \ 0000000C D010A0E3 MOV R1,#+208 \ 00000010 601D81E3 ORR R1,R1,#0x1800 \ 00000014 004081E0 ADD R4,R1,R0 \ 00000018 B40290E5 LDR R0,[R0, #+692] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1500000A BEQ ??Pinger2_0 88 { 89 PingToServer2(); \ 00000024 1000A0E3 MOV R0,#+16 \ 00000028 140000EF SWI +20 \ 0000002C 0060A0E1 MOV R6,R0 \ 00000030 081086E2 ADD R1,R6,#+8 \ 00000034 0000A0E3 MOV R0,#+0 \ 00000038 B40000EF SWI +180 \ 0000003C 0000A0E3 MOV R0,#+0 \ 00000040 000086E5 STR R0,[R6, #+0] \ 00000044 1200A0E3 MOV R0,#+18 \ 00000048 B400C6E1 STRH R0,[R6, #+4] \ 0000004C 0800A0E3 MOV R0,#+8 \ 00000050 B600C6E1 STRH R0,[R6, #+6] \ 00000054 ........ LDR R0,??DataTable2 ;; SendAnswer \ 00000058 0620A0E1 MOV R2,R6 \ 0000005C 0010A0E3 MOV R1,#+0 \ 00000060 710100EF SWI +369 90 GBS_StartTimerProc(&ping_tmr, 12960, Pinger2); \ 00000064 0520A0E1 MOV R2,R5 \ 00000068 A010A0E3 MOV R1,#+160 \ 0000006C C81D81E3 ORR R1,R1,#0x3200 \ 00000070 0400A0E1 MOV R0,R4 \ 00000074 4D0000EF SWI +77 \ 00000078 7080BDE8 POP {R4-R6,PC} 91 } 92 else 93 GBS_StartTimerProc(&ping_tmr, 2160, Pinger2); \ ??Pinger2_0: \ 0000007C 0520A0E1 MOV R2,R5 \ 00000080 871EA0E3 MOV R1,#+2160 \ 00000084 0400A0E1 MOV R0,R4 \ 00000088 4D0000EF SWI +77 94 } \ 0000008C 7080BDE8 POP {R4-R6,PC} ;; return 95 96 //-------------------------------------------------// 97 98 99 100 extern volatile int total_smiles; 101 extern volatile int total_xstatuses; 102 extern volatile int xstatuses_load; 103 extern volatile int pictures_max; //2026rev 104 extern volatile int pictures_loaded; //2026rev 105 106 #ifdef ELKA 107 int Is_SLI_On;//мигаем светодиодом 108 #endif 109 110 int Is_SMARTCPU_On;//Вывод сообщений на гэ 111 int Is_INC_On;//Popup message 112 int Is_ILU_On;//Режим подсветки 113 int Is_Double_Vibra_On;//Режим напоминания 114 int total_unread; 115 int total_unread2; 116 117 #ifdef ELKA \ In segment DATA_C, align 4, align-sorted 118 const int SLI_TYPE=1; \ SLI_TYPE: \ 00000000 01000000 DC32 1 119 #endif 120 121 char PINGO[256]; 122 123 #ifdef ELKA 124 extern const unsigned int SLI_time; 125 extern const unsigned int SLI_time2; 126 #endif 127 //#define USE_MLMENU 128 #define USE_GUI //графический интерфейс 129 130 #define TMR_SECOND 216 131 132 //IPC 133 const char ipc_my_name[32]=IPC_NATICQ_NAME; 134 const char ipc_xtask_name[]=IPC_XTASK_NAME; 135 const char ipc_test_name[]="test"; 136 IPC_REQ gipc; 137 138 139 char elf_path[256]; 140 int maincsm_id; 141 int maingui_id; 142 \ In segment CODE, align 4, keep-with-next 143 void SMART_REDRAW(void) 144 { \ SMART_REDRAW: \ 00000000 10402DE9 PUSH {R4,LR} 145 int f; 146 LockSched(); \ 00000004 460100EF SWI +326 147 f=IsGuiOnTop(maingui_id); \ 00000008 1C009FE5 LDR R0,??SMART_REDRAW_0 ;; i_rc + 724 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 350100EF SWI +309 \ 00000014 0040A0E1 MOV R4,R0 148 UnlockSched(); \ 00000018 470100EF SWI +327 149 if (f) REDRAW(); \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} \ 00000024 720100EF SWI +370 150 } \ 00000028 1080BDE8 POP {R4,PC} ;; return \ ??SMART_REDRAW_0: \ 0000002C ........ DC32 i_rc + 724 151 152 //По 10 секунд 153 #define ACTIVE_TIME 360 154 155 //Максимальное количество сообщений в логе 156 //#define MAXLOGMSG (20) 157 158 // Строковые описания статусов 159 160 const char S_OFFLINE[]="Offline"; 161 const char S_INVISIBLE[]="Invisible"; 162 const char S_AWAY[]="Away"; 163 const char S_NA[]="N/A"; 164 const char S_OCCUPIED[]="Occupied"; 165 const char S_DND[]="DND"; 166 const char S_ONLINE[]="Online"; 167 const char S_FFC[]="FFC"; 168 169 volatile int SENDMSGCOUNT; 170 #ifdef kluchnik1 171 int IsActiveUp=1; 172 #else 173 int IsActiveUp=0; 174 #endif 175 int Is_Vibra_Enabled; 176 int Is_Id3tag_Enabled; 177 unsigned int Is_Sounds_Enabled; 178 int Is_Show_Offline; 179 int Is_Show_Groups; 180 181 int S_ICONS[TOTAL_ICONS+1]; 182 183 #define EOP -10 184 int CurrentStatus; 185 int CurrentXStatus; 186 187 WSHDR *ews; 188 189 static const char * const icons_names[TOTAL_ICONS]= 190 { 191 "offline.png", 192 "invisible.png", 193 "away.png", 194 "na.png", 195 "occupied.png", 196 "dnd.png", 197 "depression.png", 198 "evil.png", 199 "home.png", 200 "lunch.png", 201 "work.png", 202 "online.png", 203 "ffc.png", 204 "message.png", 205 "unknown.png", 206 "groupon.png", 207 "groupoff.png", 208 "null.png", 209 "addcont.png", 210 "head.png", 211 "logo.png", 212 "ping.png", 213 "settings.png", 214 "vis1.png", 215 "vis2.png", 216 "vis3.png", 217 "vis4.png", 218 "vis5.png", 219 "ping1.png", 220 "ping2.png", 221 "ping3.png", 222 "ping4.png", 223 "bg.png" 224 }; 225 226 227 228 229 //------------------------ SCREEN SAVER TIMER ---------------------------// 230 231 #ifdef NEWSGOLD 232 GBSTMR scrsTmr; 233 int scrsTime; \ In segment CODE, align 4, keep-with-next 234 void ScreenSaverTimer() 235 { \ ScreenSaverTimer: \ 00000000 70402DE9 PUSH {R4-R6,LR} 236 if(scrsTime==screenSaverTime) \ 00000004 ........ LDR R4,??DataTable33 ;; i_rc \ 00000008 68609FE5 LDR R6,??ScreenSaverTimer_0 ;; ScreenSaverTimer \ 0000000C 7C1394E5 LDR R1,[R4, #+892] \ 00000010 E000A0E3 MOV R0,#+224 \ 00000014 640D80E3 ORR R0,R0,#0x1900 \ 00000018 045080E0 ADD R5,R0,R4 \ 0000001C 58009FE5 LDR R0,??ScreenSaverTimer_0+0x4 ;; screenSaverTime \ 00000020 000090E5 LDR R0,[R0, #+0] \ 00000024 000051E1 CMP R1,R0 \ 00000028 0600001A BNE ??ScreenSaverTimer_1 237 { 238 scrsTime=screenSaverTime;//на всякий случай \ 0000002C 7C0384E5 STR R0,[R4, #+892] 239 CloseScreensaver(); \ 00000030 9C0000EF SWI +156 240 DrawScreenSaver(); \ 00000034 200000EF SWI +32 241 GBS_StartTimerProc(&scrsTmr, 216*10, ScreenSaverTimer); \ 00000038 0620A0E1 MOV R2,R6 \ 0000003C 871EA0E3 MOV R1,#+2160 \ 00000040 0500A0E1 MOV R0,R5 \ 00000044 4D0000EF SWI +77 242 } 243 if(isScreenSaverEna) \ ??ScreenSaverTimer_1: \ 00000048 30009FE5 LDR R0,??ScreenSaverTimer_0+0x8 ;; isScreenSaverEna 244 scrsTime++; 245 GBS_StartTimerProc(&scrsTmr, 216*5, ScreenSaverTimer); \ 0000004C 0620A0E1 MOV R2,R6 \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 3810A0E3 MOV R1,#+56 \ 00000058 000050E3 CMP R0,#+0 \ 0000005C 7C039415 LDRNE R0,[R4, #+892] \ 00000060 401E81E3 ORR R1,R1,#0x400 \ 00000064 01008012 ADDNE R0,R0,#+1 \ 00000068 7C038415 STRNE R0,[R4, #+892] \ 0000006C 0500A0E1 MOV R0,R5 \ 00000070 4D0000EF SWI +77 246 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return \ ??ScreenSaverTimer_0: \ 00000078 ........ DC32 ScreenSaverTimer \ 0000007C ........ DC32 screenSaverTime \ 00000080 ........ DC32 isScreenSaverEna 247 #endif 248 249 250 //-----------------------------------------------------------------------// 251 252 253 int msg_away_timer=0;//Счетчик для автостатуса 254 char away_msg[264];//Само сообщение для ответа 255 char away_msg_time[64];//Время когда сработал таймер 256 char away_msg_time_dace[16];//время отсутвтвия для вывода на идле 257 //char *inp_away_msg2;//Текст сообщения,если будем писать сами(на долгую 6 или VOL_DOWN_BUTTON),а не брать из конфига 258 char tim_zone[16]; \ In segment DATA_Z, align 4, align-sorted 259 int timeh; \ timeh: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 260 int timemin; \ timemin: \ 00000000 DS8 4 261 int away_m;//состояние автоответчика 262 int status_rem;//Для сохранения текущего статуса 263 int change_back_status;//вернуть предыдущий статус или нет 264 GBSTMR away_tmr; 265 266 267 int Show_XTX;//Показывать хстатус или время он лайн \ In segment CODE, align 4, keep-with-next 268 void FreeXText2(CLIST *t) 269 { \ FreeXText2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 270 if (t->xtext2) { mfree(t->xtext2); t->xtext2=NULL; } \ 00000008 B80094E5 LDR R0,[R4, #+184] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} \ 00000014 150000EF SWI +21 \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C B80084E5 STR R0,[R4, #+184] 271 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 272 \ In segment CODE, align 4, keep-with-next 273 void away_timer()//Таймер автостатуса 274 { \ away_timer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 275 if(msg_away_timer==(AUTO_ENGADE*12)) \ 00000004 ........ LDR R4,??DataTable10 ;; addIconBar \ 00000008 ........ LDR R10,??DataTable30 ;; AUTO_ENGADE \ 0000000C ........ LDR R5,??DataTable33 ;; i_rc \ 00000010 ........ LDR R9,??DataTable7 ;; `?` \ 00000014 0CD04DE2 SUB SP,SP,#+12 \ 00000018 00109AE5 LDR R1,[R10, #+0] \ 0000001C F800A0E3 MOV R0,#+248 \ 00000020 680D80E3 ORR R0,R0,#0x1A00 \ 00000024 056080E0 ADD R6,R0,R5 \ 00000028 500080E2 ADD R0,R0,#+80 \ 0000002C 057080E0 ADD R7,R0,R5 \ 00000030 100040E2 SUB R0,R0,#+16 \ 00000034 058080E0 ADD R8,R0,R5 \ 00000038 800395E5 LDR R0,[R5, #+896] \ 0000003C 0C20A0E3 MOV R2,#+12 \ 00000040 920101E0 MUL R1,R2,R1 \ 00000044 010050E1 CMP R0,R1 \ 00000048 1E00001A BNE ??away_timer_0 276 { 277 TTime tt; 278 GetDateTime(NULL,&tt); \ 0000004C 0D10A0E1 MOV R1,SP \ 00000050 0000A0E3 MOV R0,#+0 \ 00000054 B40000EF SWI +180 279 sprintf(away_msg_time_dace, "%02d:%02d", tt.hour, tt.min); \ 00000058 0130DDE5 LDRB R3,[SP, #+1] \ 0000005C 0020DDE5 LDRB R2,[SP, #+0] \ 00000060 0910A0E1 MOV R1,R9 \ 00000064 0800A0E1 MOV R0,R8 \ 00000068 160000EF SWI +22 280 sprintf(away_msg_time, "( Отсутствую примерно с %02d:%02d [%s] )", tt.hour, tt.min, tim_zone); \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 01002DE9 PUSH {R0} \ 00000074 0530DDE5 LDRB R3,[SP, #+5] \ 00000078 0420DDE5 LDRB R2,[SP, #+4] \ 0000007C 0C1089E2 ADD R1,R9,#+12 \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 160000EF SWI +22 281 away_m=1; 282 if(CurrentStatus!=2 && CurrentStatus!=isAutoStatusOn) \ 00000088 700395E5 LDR R0,[R5, #+880] \ 0000008C 01B0A0E3 MOV R11,#+1 \ 00000090 84B385E5 STR R11,[R5, #+900] \ 00000094 020050E3 CMP R0,#+2 \ 00000098 04D08DE2 ADD SP,SP,#+4 \ 0000009C 0900000A BEQ ??away_timer_0 \ 000000A0 E4109FE5 LDR R1,??away_timer_1 ;; isAutoStatusOn \ 000000A4 001091E5 LDR R1,[R1, #+0] \ 000000A8 010050E1 CMP R0,R1 \ 000000AC 0500000A BEQ ??away_timer_0 283 { 284 status_rem=CurrentStatus; \ 000000B0 880385E5 STR R0,[R5, #+904] 285 CurrentStatus=2; \ 000000B4 0200A0E3 MOV R0,#+2 \ 000000B8 700385E5 STR R0,[R5, #+880] 286 set_my_status(); \ 000000BC ........ BL set_my_status 287 #ifdef NEWSGOLD 288 void SetIconBarHandler(); 289 SetIconBarHandler(); \ 000000C0 D04085E5 STR R4,[R5, #+208] 290 #endif 291 change_back_status=1; \ 000000C4 8CB385E5 STR R11,[R5, #+908] 292 } 293 } 294 295 if( (IsOnNAStatus) && (msg_away_timer==((AUTO_ENGADE*12)+(NAStatusTime*12))) )//Включить переключение на недоступен,в минутах \ ??away_timer_0: \ 000000C8 C0009FE5 LDR R0,??away_timer_1+0x4 ;; IsOnNAStatus \ 000000CC 000090E5 LDR R0,[R0, #+0] \ 000000D0 000050E3 CMP R0,#+0 \ 000000D4 1E00000A BEQ ??away_timer_2 \ 000000D8 B4209FE5 LDR R2,??away_timer_1+0x8 ;; NAStatusTime \ 000000DC 00109AE5 LDR R1,[R10, #+0] \ 000000E0 002092E5 LDR R2,[R2, #+0] \ 000000E4 800395E5 LDR R0,[R5, #+896] \ 000000E8 011082E0 ADD R1,R2,R1 \ 000000EC 0C20A0E3 MOV R2,#+12 \ 000000F0 920101E0 MUL R1,R2,R1 \ 000000F4 010050E1 CMP R0,R1 \ 000000F8 1500001A BNE ??away_timer_2 296 { 297 TTime tt; 298 GetDateTime(NULL,&tt); \ 000000FC 0D10A0E1 MOV R1,SP \ 00000100 0000A0E3 MOV R0,#+0 \ 00000104 B40000EF SWI +180 299 sprintf(away_msg_time_dace, "%02d:%02d", tt.hour, tt.min); \ 00000108 0130DDE5 LDRB R3,[SP, #+1] \ 0000010C 0020DDE5 LDRB R2,[SP, #+0] \ 00000110 0910A0E1 MOV R1,R9 \ 00000114 0800A0E1 MOV R0,R8 \ 00000118 160000EF SWI +22 300 sprintf(away_msg_time, "( Недоступен примерно с %02d:%02d [%s] )", tt.hour, tt.min, tim_zone); \ 0000011C 80002DE9 PUSH {R7} \ 00000120 0530DDE5 LDRB R3,[SP, #+5] \ 00000124 0420DDE5 LDRB R2,[SP, #+4] \ 00000128 381089E2 ADD R1,R9,#+56 \ 0000012C 0600A0E1 MOV R0,R6 \ 00000130 160000EF SWI +22 301 if(CurrentStatus!=3) \ 00000134 700395E5 LDR R0,[R5, #+880] \ 00000138 04D08DE2 ADD SP,SP,#+4 \ 0000013C 030050E3 CMP R0,#+3 \ 00000140 0300000A BEQ ??away_timer_2 302 { 303 CurrentStatus=3; \ 00000144 0300A0E3 MOV R0,#+3 \ 00000148 700385E5 STR R0,[R5, #+880] 304 set_my_status(); \ 0000014C ........ BL set_my_status 305 #ifdef NEWSGOLD 306 void SetIconBarHandler(); 307 SetIconBarHandler(); \ 00000150 D04085E5 STR R4,[R5, #+208] 308 #endif 309 } 310 } 311 312 if(Auto_Status) \ ??away_timer_2: \ 00000154 ........ LDR R0,??DataTable8 ;; Auto_Status 313 msg_away_timer++; 314 GBS_StartTimerProc(&away_tmr, 216*5, away_timer); \ 00000158 38209FE5 LDR R2,??away_timer_1+0xC ;; away_timer \ 0000015C 000090E5 LDR R0,[R0, #+0] \ 00000160 3810A0E3 MOV R1,#+56 \ 00000164 000050E3 CMP R0,#+0 \ 00000168 80039515 LDRNE R0,[R5, #+896] \ 0000016C 401E81E3 ORR R1,R1,#0x400 \ 00000170 01008012 ADDNE R0,R0,#+1 \ 00000174 80038515 STRNE R0,[R5, #+896] \ 00000178 5800A0E3 MOV R0,#+88 \ 0000017C 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000180 050080E0 ADD R0,R0,R5 \ 00000184 4D0000EF SWI +77 315 } \ 00000188 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return \ ??away_timer_1: \ 0000018C ........ DC32 isAutoStatusOn \ 00000190 ........ DC32 IsOnNAStatus \ 00000194 ........ DC32 NAStatusTime \ 00000198 ........ DC32 away_timer 316 317 \ In segment CODE, align 4, keep-with-next 318 void init_time_zone() 319 { 320 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 + 6984 \ 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 321 { 322 case 0: 323 sprintf(tim_zone, "GMT -12:00"); 324 break; 325 case 1: 326 sprintf(tim_zone, "GMT -11:00"); \ ??init_time_zone_2: \ 0000004C 0C1081E2 ADD R1,R1,#+12 \ 00000050 160000EF SWI +22 \ 00000054 0080BDE8 POP {PC} 327 break; 328 case 2: 329 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} 330 break; 331 case 3: 332 sprintf(tim_zone, "GMT -09:00"); \ ??init_time_zone_5: \ 00000064 241081E2 ADD R1,R1,#+36 \ 00000068 FBFFFFEA B ??init_time_zone_4 333 break; 334 case 4: 335 sprintf(tim_zone, "GMT -08:00"); \ ??init_time_zone_6: \ 0000006C 301081E2 ADD R1,R1,#+48 \ 00000070 F9FFFFEA B ??init_time_zone_4 336 break; 337 case 5: 338 sprintf(tim_zone, "GMT -07:00"); \ ??init_time_zone_7: \ 00000074 3C1081E2 ADD R1,R1,#+60 \ 00000078 F7FFFFEA B ??init_time_zone_4 339 break; 340 case 6: 341 sprintf(tim_zone, "GMT -06:00"); \ ??init_time_zone_8: \ 0000007C 481081E2 ADD R1,R1,#+72 \ 00000080 F5FFFFEA B ??init_time_zone_4 342 break; 343 case 7: 344 sprintf(tim_zone, "GMT -05:00"); \ ??init_time_zone_9: \ 00000084 541081E2 ADD R1,R1,#+84 \ 00000088 F3FFFFEA B ??init_time_zone_4 345 break; 346 case 8: 347 sprintf(tim_zone, "GMT -04:00"); \ ??init_time_zone_10: \ 0000008C 601081E2 ADD R1,R1,#+96 \ 00000090 F1FFFFEA B ??init_time_zone_4 348 break; 349 case 9: 350 sprintf(tim_zone, "GMT -03:30"); \ ??init_time_zone_11: \ 00000094 6C1081E2 ADD R1,R1,#+108 \ 00000098 EFFFFFEA B ??init_time_zone_4 351 break; 352 case 10: 353 sprintf(tim_zone, "GMT -03:00"); \ ??init_time_zone_12: \ 0000009C 781081E2 ADD R1,R1,#+120 \ 000000A0 EDFFFFEA B ??init_time_zone_4 354 break; 355 case 11: 356 sprintf(tim_zone, "GMT -02:00"); \ ??init_time_zone_13: \ 000000A4 841081E2 ADD R1,R1,#+132 \ 000000A8 EBFFFFEA B ??init_time_zone_4 357 break; 358 case 12: 359 sprintf(tim_zone, "GMT -01:00"); \ ??init_time_zone_14: \ 000000AC 901081E2 ADD R1,R1,#+144 \ 000000B0 E9FFFFEA B ??init_time_zone_4 360 break; 361 case 13: 362 sprintf(tim_zone, "GMT 00:00"); \ ??init_time_zone_15: \ 000000B4 9C1081E2 ADD R1,R1,#+156 \ 000000B8 E7FFFFEA B ??init_time_zone_4 363 break; 364 case 14: 365 sprintf(tim_zone, "GMT +01:00"); \ ??init_time_zone_16: \ 000000BC A81081E2 ADD R1,R1,#+168 \ 000000C0 E5FFFFEA B ??init_time_zone_4 366 break; 367 case 15: 368 sprintf(tim_zone, "GMT +02:00"); \ ??init_time_zone_17: \ 000000C4 B41081E2 ADD R1,R1,#+180 \ 000000C8 E3FFFFEA B ??init_time_zone_4 369 break; 370 case 16: 371 sprintf(tim_zone, "GMT +03:00"); \ ??init_time_zone_18: \ 000000CC C01081E2 ADD R1,R1,#+192 \ 000000D0 E1FFFFEA B ??init_time_zone_4 372 break; 373 case 17: 374 sprintf(tim_zone, "GMT +03:30"); \ ??init_time_zone_19: \ 000000D4 CC1081E2 ADD R1,R1,#+204 \ 000000D8 DFFFFFEA B ??init_time_zone_4 375 break; 376 case 18: 377 sprintf(tim_zone, "GMT +04:00"); \ ??init_time_zone_20: \ 000000DC D81081E2 ADD R1,R1,#+216 \ 000000E0 DDFFFFEA B ??init_time_zone_4 378 break; 379 case 19: 380 sprintf(tim_zone, "GMT +04:30"); \ ??init_time_zone_21: \ 000000E4 E41081E2 ADD R1,R1,#+228 \ 000000E8 DBFFFFEA B ??init_time_zone_4 381 break; 382 case 20: 383 sprintf(tim_zone, "GMT +05:00"); \ ??init_time_zone_22: \ 000000EC F01081E2 ADD R1,R1,#+240 \ 000000F0 D9FFFFEA B ??init_time_zone_4 384 break; 385 case 21: 386 sprintf(tim_zone, "GMT +05:30"); \ ??init_time_zone_23: \ 000000F4 FC1081E2 ADD R1,R1,#+252 \ 000000F8 D7FFFFEA B ??init_time_zone_4 387 break; 388 case 22: 389 sprintf(tim_zone, "GMT +05:45"); \ ??init_time_zone_24: \ 000000FC 421F81E2 ADD R1,R1,#+264 \ 00000100 D5FFFFEA B ??init_time_zone_4 390 break; 391 case 23: 392 sprintf(tim_zone, "GMT +06:00"); \ ??init_time_zone_25: \ 00000104 451F81E2 ADD R1,R1,#+276 \ 00000108 D3FFFFEA B ??init_time_zone_4 393 break; 394 case 24: 395 sprintf(tim_zone, "GMT +06:30"); \ ??init_time_zone_26: \ 0000010C 481F81E2 ADD R1,R1,#+288 \ 00000110 D1FFFFEA B ??init_time_zone_4 396 break; 397 case 25: 398 sprintf(tim_zone, "GMT +07:00"); \ ??init_time_zone_27: \ 00000114 4B1F81E2 ADD R1,R1,#+300 \ 00000118 CFFFFFEA B ??init_time_zone_4 399 break; 400 case 26: 401 sprintf(tim_zone, "GMT +08:00"); \ ??init_time_zone_28: \ 0000011C 4E1F81E2 ADD R1,R1,#+312 \ 00000120 CDFFFFEA B ??init_time_zone_4 402 break; 403 case 27: 404 sprintf(tim_zone, "GMT +09:00"); \ ??init_time_zone_29: \ 00000124 511F81E2 ADD R1,R1,#+324 \ 00000128 CBFFFFEA B ??init_time_zone_4 405 break; 406 case 28: 407 sprintf(tim_zone, "GMT +09:30"); \ ??init_time_zone_30: \ 0000012C 541F81E2 ADD R1,R1,#+336 \ 00000130 C9FFFFEA B ??init_time_zone_4 408 break; 409 case 29: 410 sprintf(tim_zone, "GMT +10:00"); \ ??init_time_zone_31: \ 00000134 571F81E2 ADD R1,R1,#+348 \ 00000138 C7FFFFEA B ??init_time_zone_4 411 break; 412 case 30: 413 sprintf(tim_zone, "GMT +11:00"); \ ??init_time_zone_32: \ 0000013C 5A1F81E2 ADD R1,R1,#+360 \ 00000140 C5FFFFEA B ??init_time_zone_4 414 break; 415 case 31: 416 sprintf(tim_zone, "GMT +12:00"); \ ??init_time_zone_33: \ 00000144 5D1F81E2 ADD R1,R1,#+372 \ 00000148 C3FFFFEA B ??init_time_zone_4 417 break; 418 case 32: 419 sprintf(tim_zone, "GMT +13:00"); \ ??init_time_zone_34: \ 0000014C 601F81E2 ADD R1,R1,#+384 \ 00000150 160000EF SWI +22 420 break; 421 } 422 } \ ??init_time_zone_35: \ 00000154 0080BDE8 POP {PC} ;; return \ ??init_time_zone_1: \ 00000158 ........ DC32 time_zone \ 0000015C ........ DC32 i_rc + 6984 \ 00000160 ........ DC32 `?` 423 424 425 //------------------------ AUTO CHANGE STATUS ------------------------------// 426 427 void SetIconBarHandler(); 428 GBSTMR autoChangeStatus; 429 #pragma inline 430 static unsigned int GetStatusByIndex(int pos) 431 { 432 switch(pos) 433 { 434 case 1: 435 return IS_ONLINE; 436 case 2: 437 return IS_AWAY; 438 case 3: 439 return IS_NA; 440 case 4: 441 return IS_DND; 442 case 5: 443 return IS_OCCUPIED; 444 case 6: 445 return IS_FFC; 446 case 7: 447 return IS_INVISIBLE; 448 case 8: 449 return IS_DEPRESSION; 450 case 9: 451 return IS_EVIL; 452 case 10: 453 return IS_HOME; 454 case 11: 455 return IS_LUNCH; 456 case 12: 457 return IS_WORK; 458 } 459 return IS_UNKNOWN; 460 } 461 \ In segment CODE, align 4, keep-with-next 462 void AutoChangeStatus_timer()//Таймер автосмены статуса 463 { \ AutoChangeStatus_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 464 TTime tt; 465 GetDateTime(NULL,&tt); \ 00000008 0D10A0E1 MOV R1,SP 466 467 if(status_1!=0 && tt.hour==tm_status_1.hour && tt.min==tm_status_1.min) \ 0000000C ........ LDR R4,??DataTable33 ;; i_rc \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 B40000EF SWI +180 \ 00000018 EC039FE5 LDR R0,??AutoChangeStatus_timer_5 ;; status_1 \ 0000001C 0150A0E3 MOV R5,#+1 \ 00000020 000090E5 LDR R0,[R0, #+0] \ 00000024 000050E3 CMP R0,#+0 \ 00000028 2C00000A BEQ ??AutoChangeStatus_timer_6 \ 0000002C DC139FE5 LDR R1,??AutoChangeStatus_timer_5+0x4 ;; tm_status_1 \ 00000030 0020DDE5 LDRB R2,[SP, #+0] \ 00000034 0030D1E5 LDRB R3,[R1, #+0] \ 00000038 030052E1 CMP R2,R3 \ 0000003C 2700001A BNE ??AutoChangeStatus_timer_6 \ 00000040 0120DDE5 LDRB R2,[SP, #+1] \ 00000044 0110D1E5 LDRB R1,[R1, #+1] \ 00000048 010052E1 CMP R2,R1 \ 0000004C 2300001A BNE ??AutoChangeStatus_timer_6 468 { 469 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 700384E5 STR R0,[R4, #+880] 470 set_my_status(); \ 000000DC ........ BL set_my_status 471 } 472 473 if(status_2!=0 && tt.hour==tm_status_2.hour && tt.min==tm_status_2.min) \ ??AutoChangeStatus_timer_6: \ 000000E0 2C039FE5 LDR R0,??AutoChangeStatus_timer_5+0x8 ;; status_2 \ 000000E4 000090E5 LDR R0,[R0, #+0] \ 000000E8 000050E3 CMP R0,#+0 \ 000000EC 2C00000A BEQ ??AutoChangeStatus_timer_21 \ 000000F0 20139FE5 LDR R1,??AutoChangeStatus_timer_5+0xC ;; tm_status_2 \ 000000F4 0020DDE5 LDRB R2,[SP, #+0] \ 000000F8 0030D1E5 LDRB R3,[R1, #+0] \ 000000FC 030052E1 CMP R2,R3 \ 00000100 2700001A BNE ??AutoChangeStatus_timer_21 \ 00000104 0120DDE5 LDRB R2,[SP, #+1] \ 00000108 0110D1E5 LDRB R1,[R1, #+1] \ 0000010C 010052E1 CMP R2,R1 \ 00000110 2300001A BNE ??AutoChangeStatus_timer_21 474 { 475 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 700384E5 STR R0,[R4, #+880] 476 set_my_status(); \ 000001A0 ........ BL set_my_status 477 } 478 479 if(status_3!=0 && tt.hour==tm_status_3.hour && tt.min==tm_status_3.min) \ ??AutoChangeStatus_timer_21: \ 000001A4 70029FE5 LDR R0,??AutoChangeStatus_timer_5+0x10 ;; status_3 \ 000001A8 000090E5 LDR R0,[R0, #+0] \ 000001AC 000050E3 CMP R0,#+0 \ 000001B0 2C00000A BEQ ??AutoChangeStatus_timer_36 \ 000001B4 64129FE5 LDR R1,??AutoChangeStatus_timer_5+0x14 ;; tm_status_3 \ 000001B8 0020DDE5 LDRB R2,[SP, #+0] \ 000001BC 0030D1E5 LDRB R3,[R1, #+0] \ 000001C0 030052E1 CMP R2,R3 \ 000001C4 2700001A BNE ??AutoChangeStatus_timer_36 \ 000001C8 0120DDE5 LDRB R2,[SP, #+1] \ 000001CC 0110D1E5 LDRB R1,[R1, #+1] \ 000001D0 010052E1 CMP R2,R1 \ 000001D4 2300001A BNE ??AutoChangeStatus_timer_36 480 { 481 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 700384E5 STR R0,[R4, #+880] 482 set_my_status(); \ 00000264 ........ BL set_my_status 483 } 484 485 if(status_4!=0 && tt.hour==tm_status_4.hour && tt.min==tm_status_4.min) \ ??AutoChangeStatus_timer_36: \ 00000268 B4019FE5 LDR R0,??AutoChangeStatus_timer_5+0x18 ;; status_4 \ 0000026C 000090E5 LDR R0,[R0, #+0] \ 00000270 000050E3 CMP R0,#+0 \ 00000274 2C00000A BEQ ??AutoChangeStatus_timer_51 \ 00000278 A8119FE5 LDR R1,??AutoChangeStatus_timer_5+0x1C ;; tm_status_4 \ 0000027C 0020DDE5 LDRB R2,[SP, #+0] \ 00000280 0030D1E5 LDRB R3,[R1, #+0] \ 00000284 030052E1 CMP R2,R3 \ 00000288 2700001A BNE ??AutoChangeStatus_timer_51 \ 0000028C 0120DDE5 LDRB R2,[SP, #+1] \ 00000290 0110D1E5 LDRB R1,[R1, #+1] \ 00000294 010052E1 CMP R2,R1 \ 00000298 2300001A BNE ??AutoChangeStatus_timer_51 486 { 487 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 700384E5 STR R0,[R4, #+880] 488 set_my_status(); \ 00000328 ........ BL set_my_status 489 } 490 491 if(status_5!=0 && tt.hour==tm_status_5.hour && tt.min==tm_status_5.min) \ ??AutoChangeStatus_timer_51: \ 0000032C F8009FE5 LDR R0,??AutoChangeStatus_timer_5+0x20 ;; status_5 \ 00000330 000090E5 LDR R0,[R0, #+0] \ 00000334 000050E3 CMP R0,#+0 \ 00000338 2A00000A BEQ ??AutoChangeStatus_timer_66 \ 0000033C EC109FE5 LDR R1,??AutoChangeStatus_timer_5+0x24 ;; tm_status_5 \ 00000340 0020DDE5 LDRB R2,[SP, #+0] \ 00000344 0030D1E5 LDRB R3,[R1, #+0] \ 00000348 030052E1 CMP R2,R3 \ 0000034C 2500001A BNE ??AutoChangeStatus_timer_66 \ 00000350 0120DDE5 LDRB R2,[SP, #+1] \ 00000354 0110D1E5 LDRB R1,[R1, #+1] \ 00000358 010052E1 CMP R2,R1 \ 0000035C 2100001A BNE ??AutoChangeStatus_timer_66 492 { 493 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 705384E5 STR R5,[R4, #+880] 494 set_my_status(); \ 000003E4 ........ BL set_my_status 495 } 496 #ifdef ELKA 497 SetIconBarHandler(); \ ??AutoChangeStatus_timer_66: \ 000003E8 ........ LDR R0,??DataTable10 ;; addIconBar 498 #endif 499 500 GBS_StartTimerProc(&autoChangeStatus, 216*10, AutoChangeStatus_timer); \ 000003EC 40209FE5 LDR R2,??AutoChangeStatus_timer_5+0x28 ;; AutoChangeStatus_timer \ 000003F0 D00084E5 STR R0,[R4, #+208] \ 000003F4 871EA0E3 MOV R1,#+2160 \ 000003F8 6800A0E3 MOV R0,#+104 \ 000003FC 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000400 040080E0 ADD R0,R0,R4 \ 00000404 4D0000EF SWI +77 501 } \ 00000408 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??AutoChangeStatus_timer_5: \ 0000040C ........ DC32 status_1 \ 00000410 ........ DC32 tm_status_1 \ 00000414 ........ DC32 status_2 \ 00000418 ........ DC32 tm_status_2 \ 0000041C ........ DC32 status_3 \ 00000420 ........ DC32 tm_status_3 \ 00000424 ........ DC32 status_4 \ 00000428 ........ DC32 tm_status_4 \ 0000042C ........ DC32 status_5 \ 00000430 ........ DC32 tm_status_5 \ 00000434 ........ DC32 AutoChangeStatus_timer 502 //=================================away_msg=============== 503 //////////////////////////////////////////tozhe dlja auto ping/////////////// 504 \ In segment CODE, align 4, keep-with-next 505 void DrawPing(void *canv) 506 { 507 PrintField(Ping_X,Ping_Y, PINGO, align, fonto, spaco1); \ DrawPing: \ 00000000 ........ LDR R1,??DataTable26 ;; spaco1 \ 00000004 ........ LDR R0,??DataTable33 ;; i_rc \ 00000008 00402DE9 PUSH {LR} \ 0000000C 001091E5 LDR R1,[R1, #+0] \ 00000010 02002DE9 PUSH {R1} \ 00000014 ........ LDR R1,??DataTable27 ;; fonto \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 02002DE9 PUSH {R1} \ 00000020 943290E5 LDR R3,[R0, #+660] \ 00000024 E010A0E3 MOV R1,#+224 \ 00000028 601D81E3 ORR R1,R1,#0x1800 \ 0000002C 002081E0 ADD R2,R1,R0 \ 00000030 10009FE5 LDR R0,??DrawPing_0 ;; Ping_Y \ 00000034 001090E5 LDR R1,[R0, #+0] \ 00000038 0C009FE5 LDR R0,??DrawPing_0+0x4 ;; Ping_X \ 0000003C 000090E5 LDR R0,[R0, #+0] \ 00000040 ........ _BLF PrintField,??PrintField??rA 508 } \ 00000044 0380BDE8 POP {R0,R1,PC} ;; return \ ??DrawPing_0: \ 00000048 ........ DC32 Ping_Y \ 0000004C ........ DC32 Ping_X 509 510 //////////////////////////////////////////tozhe dlja auto ping/////////////// 511 512 GBSTMR remind_tmr; 513 volatile int vibra_count; 514 #ifdef ELKA 515 void SLI_Off(void); 516 #endif 517 void start_vibra2(void); 518 519 //////////////////////////reminder timer///////////////////////// 520 \ In segment CODE, align 4, keep-with-next 521 void Remind_Timer2() 522 { \ Remind_Timer2: \ 00000000 10402DE9 PUSH {R4,LR} 523 if (total_unread) \ 00000004 ........ LDR R4,??DataTable33 ;; i_rc \ 00000008 000494E5 LDR R0,[R4, #+1024] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} 524 { 525 vibra_count=Vibra_cc; \ 00000014 24009FE5 LDR R0,??Remind_Timer2_0 ;; Vibra_cc \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C C40384E5 STR R0,[R4, #+964] 526 start_vibra2(); \ 00000020 ........ BL start_vibra2 527 GBS_StartTimerProc(&remind_tmr, 6480, Remind_Timer2); \ 00000024 ........ LDR R2,??DataTable16 ;; Remind_Timer2 \ 00000028 5010A0E3 MOV R1,#+80 \ 0000002C 641D81E3 ORR R1,R1,#0x1900 \ 00000030 8A0F81E3 ORR R0,R1,#0x228 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 4D0000EF SWI +77 528 } 529 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return \ ??Remind_Timer2_0: \ 00000040 ........ DC32 Vibra_cc 530 \ In segment CODE, align 4, keep-with-next 531 void Reminder_timer() 532 { 533 GBS_StartTimerProc(&remind_tmr, 6480, Remind_Timer2); \ Reminder_timer: \ 00000000 ........ LDR R2,??DataTable16 ;; Remind_Timer2 \ 00000004 10009FE5 LDR R0,??Reminder_timer_0 ;; i_rc + 7032 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 5010A0E3 MOV R1,#+80 \ 00000010 641D81E3 ORR R1,R1,#0x1900 \ 00000014 4D0000EF SWI +77 534 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??Reminder_timer_0: \ 0000001C ........ DC32 i_rc + 7032 535 //////////////////////////reminder timer///////////////////////// 536 537 //////////////////////////uptime////////////////////////// 538 int Is_UPTIME_On; 539 int uptimeHour; 540 int uptimeMin; 541 int uptimeSec; 542 \ In segment CODE, align 4, keep-with-next 543 void UptimeMinHour() 544 { 545 uptimeSec++; \ UptimeMinHour: \ 00000000 ........ LDR R0,??DataTable33 ;; i_rc \ 00000004 A01390E5 LDR R1,[R0, #+928] 546 if(uptimeSec==60) \ 00000008 9C2390E5 LDR R2,[R0, #+924] \ 0000000C 011081E2 ADD R1,R1,#+1 \ 00000010 3C0051E3 CMP R1,#+60 547 { 548 uptimeSec=0; \ 00000014 0010A003 MOVEQ R1,#+0 549 uptimeMin++; \ 00000018 01208202 ADDEQ R2,R2,#+1 \ 0000001C A01380E5 STR R1,[R0, #+928] 550 } 551 if(uptimeMin==60) \ 00000020 3C0052E3 CMP R2,#+60 \ 00000024 0300001A BNE ??UptimeMinHour_0 552 { 553 uptimeMin=0; 554 uptimeHour++; \ 00000028 981390E5 LDR R1,[R0, #+920] \ 0000002C 0020A0E3 MOV R2,#+0 \ 00000030 011081E2 ADD R1,R1,#+1 \ 00000034 981380E5 STR R1,[R0, #+920] \ ??UptimeMinHour_0: \ 00000038 9C2380E5 STR R2,[R0, #+924] 555 } 556 } \ 0000003C 1EFF2FE1 BX LR ;; return 557 558 GBSTMR uptime_tmr; 559 #ifdef NEWSGOLD 560 GBSTMR tracktmr; 561 int tracktimer; 562 #endif 563 \ In segment CODE, align 4, keep-with-next 564 void upTime() 565 { \ upTime: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 566 if(connect_state==3) \ 00000004 ........ LDR R4,??DataTable33 ;; i_rc \ 00000008 84609FE5 LDR R6,??upTime_0 ;; upTime \ 0000000C 8800A0E3 MOV R0,#+136 \ 00000010 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 DC0394E5 LDR R0,[R4, #+988] \ 0000001C 0070A0E3 MOV R7,#+0 \ 00000020 030050E3 CMP R0,#+3 \ 00000024 0F00001A BNE ??upTime_1 567 { 568 UptimeMinHour(); \ 00000028 ........ BL UptimeMinHour 569 #ifdef NEWSGOLD 570 if (tracktimer>=10)/*&&(_GetPlayStatus()!=1))*/ \ 0000002C A40394E5 LDR R0,[R4, #+932] \ 00000030 0A0050E3 CMP R0,#+10 \ 00000034 070000BA BLT ??upTime_2 571 { 572 GBS_StartTimerProc(&tracktmr, 216*5, GetTags); \ 00000038 ........ LDR R2,??DataTable19 ;; GetTags \ 0000003C 3810A0E3 MOV R1,#+56 \ 00000040 401E81E3 ORR R1,R1,#0x400 \ 00000044 9800A0E3 MOV R0,#+152 \ 00000048 6C0D80E3 ORR R0,R0,#0x1B00 \ 0000004C 040080E0 ADD R0,R0,R4 \ 00000050 4D0000EF SWI +77 573 tracktimer=0; \ 00000054 A47384E5 STR R7,[R4, #+932] 574 } 575 tracktimer++; \ ??upTime_2: \ 00000058 A40394E5 LDR R0,[R4, #+932] \ 0000005C 010080E2 ADD R0,R0,#+1 \ 00000060 A40384E5 STR R0,[R4, #+932] 576 #endif 577 GBS_StartTimerProc(&uptime_tmr, 216, upTime); \ 00000064 050000EA B ??upTime_3 578 } 579 else 580 { 581 if(!Pause_Time) \ ??upTime_1: \ 00000068 28009FE5 LDR R0,??upTime_0+0x4 ;; Pause_Time \ 0000006C 000090E5 LDR R0,[R0, #+0] \ 00000070 000050E3 CMP R0,#+0 582 { 583 uptimeHour=0; \ 00000074 98738405 STREQ R7,[R4, #+920] 584 uptimeMin=0; \ 00000078 9C738405 STREQ R7,[R4, #+924] 585 uptimeSec=0; \ 0000007C A0738405 STREQ R7,[R4, #+928] 586 } 587 GBS_StartTimerProc(&uptime_tmr, 216, upTime); \ ??upTime_3: \ 00000080 0620A0E1 MOV R2,R6 \ 00000084 D810A0E3 MOV R1,#+216 \ 00000088 0500A0E1 MOV R0,R5 \ 0000008C 4D0000EF SWI +77 588 } 589 } \ 00000090 F080BDE8 POP {R4-R7,PC} ;; return \ ??upTime_0: \ 00000094 ........ DC32 upTime \ 00000098 ........ DC32 Pause_Time 590 591 char onlineTime[128]; \ In segment CODE, align 4, keep-with-next 592 void DrawOnlineTime(void *canv) 593 { \ DrawOnlineTime: \ 00000000 30402DE9 PUSH {R4,R5,LR} 594 if(connect_state==3) \ 00000004 ........ LDR R4,??DataTable33 ;; i_rc \ 00000008 A800A0E3 MOV R0,#+168 \ 0000000C DC1394E5 LDR R1,[R4, #+988] \ 00000010 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 ........ LDR R0,??DataTable21 ;; `?` \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0800001A BNE ??DrawOnlineTime_0 595 { 596 sprintf(onlineTime,"Online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); \ 00000024 A01394E5 LDR R1,[R4, #+928] \ 00000028 02002DE9 PUSH {R1} \ 0000002C 9C3394E5 LDR R3,[R4, #+924] \ 00000030 982394E5 LDR R2,[R4, #+920] \ 00000034 101080E2 ADD R1,R0,#+16 \ 00000038 0500A0E1 MOV R0,R5 \ 0000003C 160000EF SWI +22 \ 00000040 04D08DE2 ADD SP,SP,#+4 \ 00000044 020000EA B ??DrawOnlineTime_1 597 } 598 else 599 sprintf(onlineTime,"Offline"); \ ??DrawOnlineTime_0: \ 00000048 081080E2 ADD R1,R0,#+8 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 160000EF SWI +22 600 PrintField(onlineTime_x,onlineTime_y, onlineTime, align, fonto, spaco1); \ ??DrawOnlineTime_1: \ 00000054 ........ LDR R0,??DataTable26 ;; spaco1 \ 00000058 0520A0E1 MOV R2,R5 \ 0000005C 000090E5 LDR R0,[R0, #+0] \ 00000060 01002DE9 PUSH {R0} \ 00000064 ........ LDR R0,??DataTable27 ;; fonto \ 00000068 000090E5 LDR R0,[R0, #+0] \ 0000006C 01002DE9 PUSH {R0} \ 00000070 943294E5 LDR R3,[R4, #+660] \ 00000074 10009FE5 LDR R0,??DrawOnlineTime_2 ;; onlineTime_y \ 00000078 001090E5 LDR R1,[R0, #+0] \ 0000007C 0C009FE5 LDR R0,??DrawOnlineTime_2+0x4 ;; onlineTime_x \ 00000080 000090E5 LDR R0,[R0, #+0] \ 00000084 ........ _BLF PrintField,??PrintField??rA 601 } \ 00000088 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??DrawOnlineTime_2: \ 0000008C ........ DC32 onlineTime_y \ 00000090 ........ DC32 onlineTime_x 602 603 604 //---------------------- Вывод времени на идле ---------------------// 605 606 \ In segment CODE, align 4, keep-with-next 607 void DrawAutoMSG(void *canv) 608 { \ DrawAutoMSG: \ 00000000 10402DE9 PUSH {R4,LR} 609 char awayTime[64]; 610 if(away_m && showAwayIdle) \ 00000004 ........ LDR R4,??DataTable33 ;; i_rc \ 00000008 40D04DE2 SUB SP,SP,#+64 \ 0000000C 840394E5 LDR R0,[R4, #+900] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 1700000A BEQ ??DrawAutoMSG_0 \ 00000018 ........ LDR R0,??DataTable25 ;; showAwayIdle \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 1300000A BEQ ??DrawAutoMSG_0 611 { 612 sprintf(awayTime,"Away from [%s]",away_msg_time_dace); \ 00000028 50109FE5 LDR R1,??DrawAutoMSG_1 ;; `?` \ 0000002C 3800A0E3 MOV R0,#+56 \ 00000030 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000034 042080E0 ADD R2,R0,R4 \ 00000038 0D00A0E1 MOV R0,SP \ 0000003C 160000EF SWI +22 613 PrintField(auto_x,auto_y, awayTime, align, fonto, spaco1); \ 00000040 ........ LDR R0,??DataTable26 ;; spaco1 \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 01002DE9 PUSH {R0} \ 0000004C ........ LDR R0,??DataTable27 ;; fonto \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 01002DE9 PUSH {R0} \ 00000058 943294E5 LDR R3,[R4, #+660] \ 0000005C 20009FE5 LDR R0,??DrawAutoMSG_1+0x4 ;; auto_y \ 00000060 08208DE2 ADD R2,SP,#+8 \ 00000064 001090E5 LDR R1,[R0, #+0] \ 00000068 18009FE5 LDR R0,??DrawAutoMSG_1+0x8 ;; auto_x \ 0000006C 000090E5 LDR R0,[R0, #+0] \ 00000070 ........ _BLF PrintField,??PrintField??rA \ 00000074 08D08DE2 ADD SP,SP,#+8 614 } 615 } \ ??DrawAutoMSG_0: \ 00000078 40D08DE2 ADD SP,SP,#+64 ;; stack cleaning \ 0000007C 1080BDE8 POP {R4,PC} ;; return \ ??DrawAutoMSG_1: \ 00000080 ........ DC32 `?` \ 00000084 ........ DC32 auto_y \ 00000088 ........ DC32 auto_x 616 617 618 //---------------------------- Input away msg ---------------------------// 619 620 //Вводим сообщение какое хотим,а не то что прописали в конфиге 621 int input_awaymsg_id; 622 623 const HEADER_DESC input_awaymsg_hdr={0,0,131,21,NULL,(int)"Ввод автосообщения",LGP_NULL}; 624 void UpdateCLheader(void); \ In segment CODE, align 4, keep-with-next 625 int input_awaymsg_onkey(GUI *data, GUI_MSG *msg) 626 { \ input_awaymsg_onkey: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 627 WSHDR *ws; 628 if (msg->keys==0x0FFF || msg->keys==VOL_DOWN_BUTTON) \ 00000008 ........ LDR R4,??DataTable33 ;; i_rc \ 0000000C 0160A0E1 MOV R6,R1 \ 00000010 F210D6E1 LDRSH R1,[R6, #+2] \ 00000014 0050A0E3 MOV R5,#+0 \ 00000018 FF20A0E3 MOV R2,#+255 \ 0000001C F02E82E3 ORR R2,R2,#0xF00 \ 00000020 020051E1 CMP R1,R2 \ 00000024 0E005113 CMPNE R1,#+14 \ 00000028 2200001A BNE ??input_awaymsg_onkey_0 629 { 630 EDITCONTROL ec; 631 ExtractEditControl(data,2,&ec); 632 ws=ec.pWS; 633 zeromem(awayMsg,256); \ 0000002C ........ LDR R8,??DataTable31 ;; awayMsg \ 00000030 0D20A0E1 MOV R2,SP \ 00000034 0210A0E3 MOV R1,#+2 \ 00000038 690100EF SWI +361 \ 0000003C 28709DE5 LDR R7,[SP, #+40] \ 00000040 401FA0E3 MOV R1,#+256 \ 00000044 0800A0E1 MOV R0,R8 \ 00000048 1D0100EF SWI +285 634 int i=0; 635 for(i=0;iwsbody[0];i++) \ 0000004C 000097E5 LDR R0,[R7, #+0] \ 00000050 0090A0E3 MOV R9,#+0 \ 00000054 B000D0E1 LDRH R0,[R0, #+0] \ 00000058 000050E3 CMP R0,#+0 \ 0000005C 0500001A BNE ??input_awaymsg_onkey_1 \ 00000060 080000EA B ??input_awaymsg_onkey_2 636 awayMsg[i]=char16to8(ws->wsbody[i+1]); \ ??input_awaymsg_onkey_3: \ 00000064 890080E0 ADD R0,R0,R9, LSL #+1 \ 00000068 B200D0E1 LDRH R0,[R0, #+2] \ 0000006C ........ _BLF char16to8,??char16to8??rA \ 00000070 0800C9E7 STRB R0,[R9, +R8] \ 00000074 019089E2 ADD R9,R9,#+1 \ ??input_awaymsg_onkey_1: \ 00000078 000097E5 LDR R0,[R7, #+0] \ 0000007C B010D0E1 LDRH R1,[R0, #+0] \ 00000080 010059E1 CMP R9,R1 \ 00000084 F6FFFFBA BLT ??input_awaymsg_onkey_3 637 awayMsg[i]=0; 638 639 #ifdef kluchnik2 640 char *s; 641 ExtractEditControl(data,4,&ec); 642 ws=ec.pWS; 643 s=malloc(ws->wsbody[0]); 644 *s=0; 645 for(i=0;iwsbody[0];i++) 646 *(s+i)=char16to8(ws->wsbody[i+1]); 647 *(s+i)=0; 648 strcat(awayMsg,s); 649 mfree(s); 650 #endif 651 msg_away_timer=(AUTO_ENGADE*12); \ ??input_awaymsg_onkey_2: \ 00000088 ........ LDR R0,??DataTable30 ;; AUTO_ENGADE \ 0000008C 0850C9E7 STRB R5,[R9, +R8] \ 00000090 000090E5 LDR R0,[R0, #+0] \ 00000094 0C10A0E3 MOV R1,#+12 \ 00000098 910000E0 MUL R0,R1,R0 \ 0000009C 800384E5 STR R0,[R4, #+896] 652 away_m=1; \ 000000A0 0100A0E3 MOV R0,#+1 \ 000000A4 840384E5 STR R0,[R4, #+900] 653 away_timer(); \ 000000A8 ........ BL away_timer 654 UpdateCLheader(); 655 GeneralFunc_flag1(input_awaymsg_id,1); \ 000000AC A80394E5 LDR R0,[R4, #+936] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 3D0100EF SWI +317 656 // GeneralFuncF1(1); 657 } 658 659 if(msg->keys==LEFT_SOFT || msg->keys==RED_BUTTON) \ ??input_awaymsg_onkey_0: \ 000000B8 F200D6E1 LDRSH R0,[R6, #+2] \ 000000BC 010050E3 CMP R0,#+1 \ 000000C0 0C005013 CMPNE R0,#+12 \ 000000C4 0800001A BNE ??input_awaymsg_onkey_4 660 { 661 msg_away_timer=0; 662 away_m=0; 663 if(change_back_status) \ 000000C8 8C0394E5 LDR R0,[R4, #+908] \ 000000CC 805384E5 STR R5,[R4, #+896] \ 000000D0 845384E5 STR R5,[R4, #+900] \ 000000D4 000050E3 CMP R0,#+0 \ 000000D8 0400000A BEQ ??input_awaymsg_onkey_5 664 { 665 CurrentStatus=status_rem; \ 000000DC 880394E5 LDR R0,[R4, #+904] \ 000000E0 700384E5 STR R0,[R4, #+880] 666 set_my_status(); \ 000000E4 ........ BL set_my_status 667 change_back_status=0; \ 000000E8 8C5384E5 STR R5,[R4, #+908] 668 } 669 UpdateCLheader(); 670 } 671 return(0); \ ??input_awaymsg_onkey_4: \ 000000EC 0000A0E3 MOV R0,#+0 \ ??input_awaymsg_onkey_5: \ 000000F0 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000F4 F083BDE8 POP {R4-R9,PC} ;; return 672 } 673 \ In segment CODE, align 4, keep-with-next 674 void input_awaymsg_ghook(GUI *gui, int cmd) 675 { \ input_awaymsg_ghook: \ 00000000 00402DE9 PUSH {LR} 676 static SOFTKEY_DESC sk={0x0FFF,0x0000,(int)"Сохранить"}; 677 if (cmd==7) \ 00000004 070051E3 CMP R1,#+7 \ 00000008 0300001A BNE ??input_awaymsg_ghook_0 678 { 679 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} 680 } 681 if(cmd==0xA) \ ??input_awaymsg_ghook_0: \ 0000001C 0A0051E3 CMP R1,#+10 \ 00000020 0100001A BNE ??input_awaymsg_ghook_2 682 { 683 DisableIDLETMR(); // Отключаем таймер выхода по таймауту \ 00000024 7F0100EF SWI +383 \ 00000028 0080BDE8 POP {PC} 684 } 685 if (cmd==0x0C) \ ??input_awaymsg_ghook_2: \ 0000002C 0C0051E3 CMP R1,#+12 \ 00000030 0080BD18 POPNE {PC} 686 { 687 EDIT_SetCursorPos(gui,1); \ 00000034 0110A0E3 MOV R1,#+1 \ 00000038 D40100EF SWI +468 688 } 689 if(cmd==0x03){} 690 } \ 0000003C 0080BDE8 POP {PC} ;; return \ ??input_awaymsg_ghook_1: \ 00000040 ........ DC32 ??sk 691 \ In segment CODE, align 4, keep-with-next 692 void input_awaymsg_locret(void){} \ input_awaymsg_locret: \ 00000000 1EFF2FE1 BX LR ;; return 693 694 SOFTKEY_DESC input_awaymsg_sk[]= 695 { 696 {0x0018,0x0000,(int)"Лев"}, 697 {0x0001,0x0000,(int)"Прав"}, 698 {0x003D,0x0000,(int)LGP_DOIT_PIC} 699 }; 700 701 SOFTKEYSTAB input_awaymsg_skt= 702 { 703 input_awaymsg_sk,0 704 }; 705 706 const INPUTDIA_DESC input_awaymsg_desc= 707 { 708 1, 709 input_awaymsg_onkey, 710 input_awaymsg_ghook, 711 (void *)input_awaymsg_locret, 712 0, 713 &input_awaymsg_skt, 714 {0,NULL,NULL,NULL}, 715 FONT_SMALL, 716 100, 717 101, 718 0, 719 0x00000000, 720 0x40000000 721 }; 722 \ In segment CODE, align 4, keep-with-next 723 void InputAwayMsg() 724 { \ InputAwayMsg: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 725 WSHDR *wss=AllocWS(256); 726 void *ma=malloc_adr(); 727 void *eq=AllocEQueue(ma, mfree_adr()); 728 EDITCONTROL ec; 729 PrepareEditControl(&ec); 730 wsprintf(wss,"%t","Сообщение:\n"); \ 00000004 44519FE5 LDR R5,??InputAwayMsg_0+0x4 ;; input_awaymsg_desc \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 0000000C 400FA0E3 MOV R0,#+256 \ 00000010 250100EF SWI +293 \ 00000014 0060A0E1 MOV R6,R0 \ 00000018 148000EF SWI +32788 \ 0000001C 0070A0E1 MOV R7,R0 \ 00000020 158000EF SWI +32789 \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0700A0E1 MOV R0,R7 \ 0000002C 630100EF SWI +355 \ 00000030 0040A0E1 MOV R4,R0 \ 00000034 0D00A0E1 MOV R0,SP \ 00000038 640100EF SWI +356 \ 0000003C 4C2085E2 ADD R2,R5,#+76 \ 00000040 411F8FE2 ADR R1,??InputAwayMsg_0 ;; "%t" \ 00000044 0600A0E1 MOV R0,R6 \ 00000048 240100EF SWI +292 731 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 732 AddEditControlToEditQend(eq,&ec,ma); \ 00000068 0720A0E1 MOV R2,R7 \ 0000006C 04108DE2 ADD R1,SP,#+4 \ 00000070 0400A0E1 MOV R0,R4 \ 00000074 660100EF SWI +358 733 734 PrepareEditControl(&ec); \ 00000078 04008DE2 ADD R0,SP,#+4 \ 0000007C 640100EF SWI +356 735 CutWSTR(wss,0); \ 00000080 0010A0E3 MOV R1,#+0 \ 00000084 0600A0E1 MOV R0,R6 \ 00000088 260100EF SWI +294 736 ascii2ws(wss,awayMsg); \ 0000008C ........ LDR R1,??DataTable31 ;; awayMsg \ 00000090 0600A0E1 MOV R0,R6 \ 00000094 ........ _BLF ascii2ws,??ascii2ws??rA 737 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 738 AddEditControlToEditQend(eq,&ec,ma); \ 000000B4 0720A0E1 MOV R2,R7 \ 000000B8 08108DE2 ADD R1,SP,#+8 \ 000000BC 0400A0E1 MOV R0,R4 \ 000000C0 660100EF SWI +358 739 #ifdef kluchnik2 740 PrepareEditControl(&ec); 741 wsprintf(wss,"%t","Сообщение 2:\n"); 742 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); 743 AddEditControlToEditQend(eq,&ec,ma); 744 745 ascii2ws(wss,"когда смогу отвечу:)"); 746 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); 747 AddEditControlToEditQend(eq,&ec,ma); 748 #endif 749 patch_header(&input_awaymsg_hdr); \ 000000C4 0060A0E3 MOV R6,#+0 \ 000000C8 B863C5E1 STRH R6,[R5, #+56] \ 000000CC 1800A0E3 MOV R0,#+24 \ 000000D0 BA03C5E1 STRH R0,[R5, #+58] \ 000000D4 888100EF SWI +33160 \ 000000D8 010040E2 SUB R0,R0,#+1 \ 000000DC BC03C5E1 STRH R0,[R5, #+60] \ 000000E0 8A8100EF SWI +33162 \ 000000E4 170080E2 ADD R0,R0,#+23 \ 000000E8 BE03C5E1 STRH R0,[R5, #+62] 750 patch_input(&input_awaymsg_desc); \ 000000EC B861C5E1 STRH R6,[R5, #+24] \ 000000F0 8A8100EF SWI +33162 \ 000000F4 190080E2 ADD R0,R0,#+25 \ 000000F8 BA01C5E1 STRH R0,[R5, #+26] \ 000000FC 888100EF SWI +33160 \ 00000100 010040E2 SUB R0,R0,#+1 \ 00000104 BC01C5E1 STRH R0,[R5, #+28] \ 00000108 898100EF SWI +33161 \ 0000010C 0060A0E1 MOV R6,R0 \ 00000110 8B8100EF SWI +33163 \ 00000114 000046E0 SUB R0,R6,R0 \ 00000118 010040E2 SUB R0,R0,#+1 \ 0000011C BE01C5E1 STRH R0,[R5, #+30] 751 752 input_awaymsg_id=CreateInputTextDialog(&input_awaymsg_desc,&input_awaymsg_hdr,eq,1,0);//создаем диалоговое окно \ 00000120 0000A0E3 MOV R0,#+0 \ 00000124 01002DE9 PUSH {R0} \ 00000128 0130A0E3 MOV R3,#+1 \ 0000012C 0420A0E1 MOV R2,R4 \ 00000130 381085E2 ADD R1,R5,#+56 \ 00000134 0500A0E1 MOV R0,R5 \ 00000138 670100EF SWI +359 \ 0000013C 10109FE5 LDR R1,??InputAwayMsg_0+0x8 ;; i_rc + 936 \ 00000140 000081E5 STR R0,[R1, #+0] 753 } \ 00000144 38D08DE2 ADD SP,SP,#+56 \ 00000148 F080BDE8 POP {R4-R7,PC} ;; return \ ??InputAwayMsg_0: \ 0000014C 25740000 DC8 "%t",+0 \ 00000150 ........ DC32 input_awaymsg_desc \ 00000154 ........ DC32 i_rc + 936 754 755 756 //////////////////////////uptime////////////////////////// 757 #ifdef ELKA 758 GBSTMR sli_tmr; \ In segment CODE, align 4, keep-with-next 759 void SLI_On() 760 { \ SLI_On: \ 00000000 10402DE9 PUSH {R4,LR} 761 if(Is_SLI_On) \ 00000004 ........ LDR R4,??DataTable33 ;; i_rc \ 00000008 B80294E5 LDR R0,[R4, #+696] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0100000A BEQ ??SLI_On_0 762 SLI_SetState(1); \ 00000014 0100A0E3 MOV R0,#+1 \ 00000018 360000EF SWI +54 763 GBS_StartTimerProc(&sli_tmr, IN_TICKS(2) / 20, SLI_Off); \ ??SLI_On_0: \ 0000001C 14209FE5 LDR R2,??SLI_On_1 ;; SLI_Off \ 00000020 1510A0E3 MOV R1,#+21 \ 00000024 2800A0E3 MOV R0,#+40 \ 00000028 700D80E3 ORR R0,R0,#0x1C00 \ 0000002C 040080E0 ADD R0,R0,R4 \ 00000030 4D0000EF SWI +77 764 } \ 00000034 1080BDE8 POP {R4,PC} ;; return \ ??SLI_On_1: \ 00000038 ........ DC32 SLI_Off 765 \ In segment CODE, align 4, keep-with-next 766 void SLI_Off() 767 { \ SLI_Off: \ 00000000 00402DE9 PUSH {LR} 768 SLI_SetState(2); \ 00000004 0200A0E3 MOV R0,#+2 \ 00000008 360000EF SWI +54 769 if(total_unread) \ 0000000C ........ LDR R0,??DataTable33 ;; i_rc \ 00000010 001490E5 LDR R1,[R0, #+1024] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0600000A BEQ ??SLI_Off_0 770 GBS_StartTimerProc(&sli_tmr, IN_TICKS(2) / 20, SLI_On); //26*SLI_time2 \ 0000001C 20209FE5 LDR R2,??SLI_Off_1 ;; SLI_On \ 00000020 1510A0E3 MOV R1,#+21 \ 00000024 2830A0E3 MOV R3,#+40 \ 00000028 703D83E3 ORR R3,R3,#0x1C00 \ 0000002C 000083E0 ADD R0,R3,R0 \ 00000030 4D0000EF SWI +77 \ 00000034 0080BDE8 POP {PC} 771 else 772 SLI_SetState(0); \ ??SLI_Off_0: \ 00000038 0000A0E3 MOV R0,#+0 \ 0000003C 360000EF SWI +54 773 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??SLI_Off_1: \ 00000044 ........ DC32 SLI_On 774 \ In segment CODE, align 4, keep-with-next 775 void SLI_check() 776 { 777 if (total_unread) \ SLI_check: \ 00000000 14009FE5 LDR R0,??SLI_check_0 ;; i_rc + 1024 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0080BD08 POPEQ {PC} 778 SLI_On(); \ 00000014 ........ BL SLI_On 779 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??SLI_check_0: \ 0000001C ........ DC32 i_rc + 1024 780 \ In segment CODE, align 4, keep-with-next 781 void SLI_Timer() 782 { 783 GBS_StartTimerProc(&sli_tmr, 262, SLI_check); //262*SLI_time \ SLI_Timer: \ 00000000 14209FE5 LDR R2,??SLI_Timer_0 ;; SLI_check \ 00000004 14009FE5 LDR R0,??SLI_Timer_0+0x4 ;; i_rc + 7208 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 0610A0E3 MOV R1,#+6 \ 00000010 401F81E3 ORR R1,R1,#0x100 \ 00000014 4D0000EF SWI +77 784 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??SLI_Timer_0: \ 0000001C ........ DC32 SLI_check \ 00000020 ........ DC32 i_rc + 7208 785 #endif 786 \ In segment CODE, align 4, keep-with-next 787 void setup_ICONS(void) 788 { \ setup_ICONS: \ 00000000 30402DE9 PUSH {R4,R5,LR} 789 int i=0; \ 00000004 0040A0E3 MOV R4,#+0 790 do 791 { 792 if (!S_ICONS[i]) S_ICONS[i]=(int)MakeGlobalString(ICON_PATH,'\\',icons_names[i]); \ ??setup_ICONS_0: \ 00000008 ........ LDR R0,??DataTable64 ;; i_rc \ 0000000C 045180E0 ADD R5,R0,R4, LSL #+2 \ 00000010 E80295E5 LDR R0,[R5, #+744] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0500001A BNE ??setup_ICONS_1 \ 0000001C ........ LDR R0,??DataTable36 ;; icons_names \ 00000020 5C10A0E3 MOV R1,#+92 \ 00000024 042190E7 LDR R2,[R0, +R4, LSL #+2] \ 00000028 14009FE5 LDR R0,??setup_ICONS_2 ;; ICON_PATH \ 0000002C ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 00000030 E80285E5 STR R0,[R5, #+744] 793 i++; \ ??setup_ICONS_1: \ 00000034 014084E2 ADD R4,R4,#+1 794 } 795 while(ibitmap); \ 0000001C 080090E5 LDR R0,[R0, #+8] \ 00000020 150000EF SWI +21 818 i++; \ ??FreeStatusToIMGHDR_1: \ 00000024 014084E2 ADD R4,R4,#+1 819 } 820 while(i>2,stop_vibra); \ 0000004C 3610A0E3 MOV R1,#+54 \ 00000050 000000EA B ??start_vibra_2 1103 else 1104 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra); \ ??start_vibra_1: \ 00000054 6C10A0E3 MOV R1,#+108 \ ??start_vibra_2: \ 00000058 4D0000EF SWI +77 1105 } 1106 } \ 0000005C 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra_0: \ 00000060 ........ DC32 stop_vibra 1107 \ In segment CODE, align 4, keep-with-next 1108 void stop_vibra(void) 1109 { \ stop_vibra: \ 00000000 00402DE9 PUSH {LR} 1110 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1111 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable64 ;; i_rc \ 00000010 C41390E5 LDR R1,[R0, #+964] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 C41380E5 STR R1,[R0, #+964] \ 0000001C 0080BD08 POPEQ {PC} 1112 { 1113 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra_0 ;; start_vibra \ 00000024 4810A0E3 MOV R1,#+72 \ 00000028 781D81E3 ORR R1,R1,#0x1E00 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable56 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra_1 1114 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra_2 1115 else 1116 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra); \ ??stop_vibra_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra_2: \ 0000004C 4D0000EF SWI +77 1117 } 1118 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra_0: \ 00000054 ........ DC32 start_vibra 1119 \ In segment CODE, align 4, keep-with-next 1120 void start_vibra2(void) 1121 { 1122 void stop_vibra2(void); 1123 1124 SetVibration(vibraPower); \ start_vibra2: \ 00000000 ........ LDR R0,??DataTable53 ;; vibraPower \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 7C0000EF SWI +124 1125 if(VIBR_TYPE) \ 00000010 ........ LDR R1,??DataTable56 ;; VIBR_TYPE \ 00000014 18009FE5 LDR R0,??start_vibra2_0 ;; i_rc + 7752 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 14209FE5 LDR R2,??start_vibra2_0+0x4 ;; stop_vibra2 \ 00000020 000051E3 CMP R1,#+0 1126 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>2,stop_vibra2); \ 00000024 3610A013 MOVNE R1,#+54 1127 else 1128 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra2); \ 00000028 6C10A003 MOVEQ R1,#+108 \ 0000002C 4D0000EF SWI +77 1129 } \ 00000030 0080BDE8 POP {PC} ;; return \ ??start_vibra2_0: \ 00000034 ........ DC32 i_rc + 7752 \ 00000038 ........ DC32 stop_vibra2 1130 \ In segment CODE, align 4, keep-with-next 1131 void stop_vibra2(void) 1132 { \ stop_vibra2: \ 00000000 00402DE9 PUSH {LR} 1133 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1134 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable64 ;; i_rc \ 00000010 C41390E5 LDR R1,[R0, #+964] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 C41380E5 STR R1,[R0, #+964] \ 0000001C 0080BD08 POPEQ {PC} 1135 { 1136 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra2_0 ;; start_vibra2 \ 00000024 4810A0E3 MOV R1,#+72 \ 00000028 781D81E3 ORR R1,R1,#0x1E00 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable56 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra2_1 1137 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra2); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra2_2 1138 else 1139 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra2); \ ??stop_vibra2_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra2_2: \ 0000004C 4D0000EF SWI +77 1140 } 1141 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra2_0: \ 00000054 ........ DC32 start_vibra2 1142 \ In segment CODE, align 4, keep-with-next 1143 void ChangeVibra(void) 1144 { 1145 if (!(Is_Vibra_Enabled=!(Is_Vibra_Enabled))) \ ChangeVibra: \ 00000000 ........ LDR R0,??DataTable64 ;; i_rc \ 00000004 00402DE9 PUSH {LR} \ 00000008 E01290E5 LDR R1,[R0, #+736] \ 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,??DataTable66 ;; 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 1187 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 1188 if ((fsize=stat.size)<=0) goto L1; \ 00000060 08709DE5 LDR R7,[SP, #+8] \ 00000064 010057E3 CMP R7,#+1 \ 00000068 070000BA BLT ??LoadTemplates_1 1189 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 1190 { 1191 L1: 1192 strcpy(fn+i,"\\0.txt"); \ ??LoadTemplates_1: \ 0000008C 081086E2 ADD R1,R6,#+8 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 1A0000EF SWI +26 1193 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 1194 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 1195 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 1196 } 1197 if (f==-1) return 0; \ ??LoadTemplates_2: \ 000000E0 040058E1 CMP R8,R4 \ 000000E4 F1FFFF0A BEQ ??LoadTemplates_4 1198 p=templates_chars=malloc(fsize+1); \ 000000E8 ........ LDR R4,??DataTable64 ;; i_rc \ 000000EC 010087E2 ADD R0,R7,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 C80384E5 STR R0,[R4, #+968] \ 000000F8 0060A0E1 MOV R6,R0 1199 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] 1200 fclose(f,&ul); \ 00000118 0D10A0E1 MOV R1,SP \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 0D0000EF SWI +13 1201 i=0; \ 00000124 0070A0E3 MOV R7,#+0 1202 pp=p; \ 00000128 0680A0E1 MOV R8,R6 \ 0000012C 020000EA B ??LoadTemplates_6 1203 for(;;) 1204 { 1205 c=*p; 1206 if (c<32) 1207 { 1208 if (pp&&(pp!=p)) 1209 { 1210 templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 1211 templates_lines[i++]=pp; 1212 } 1213 pp=NULL; 1214 if (!c) break; 1215 *p=0; 1216 } 1217 else 1218 { 1219 if (pp==NULL) pp=p; \ ??LoadTemplates_7: \ 00000130 000058E3 CMP R8,#+0 \ 00000134 0680A001 MOVEQ R8,R6 1220 } 1221 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 CC0394E5 LDR R0,[R4, #+972] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 CC0384E5 STR R0,[R4, #+972] \ 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 1222 } 1223 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 `?` 1224 } 1225 1226 1227 1228 //---------------------- AUTOBOT MESSAGE -------------------------// 1229 1230 1231 #ifdef kluchnik 1232 char *bot_chars; //Собственно файл 1233 char **bot_lines; //Массив указателей на строки 1234 \ In segment CODE, align 4, keep-with-next 1235 void FreeBotMessage(void) 1236 { \ FreeBotMessage: \ 00000000 10402DE9 PUSH {R4,LR} 1237 if (bot_lines) mfree(bot_lines); \ 00000004 ........ LDR R4,??DataTable64 ;; i_rc \ 00000008 D40394E5 LDR R0,[R4, #+980] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0000000A BEQ ??FreeBotMessage_0 \ 00000014 150000EF SWI +21 1238 if (bot_chars) mfree(bot_chars); \ ??FreeBotMessage_0: \ 00000018 D00394E5 LDR R0,[R4, #+976] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0100000A BEQ ??FreeBotMessage_1 \ 00000024 150000EF SWI +21 1239 bot_lines=NULL; \ 00000028 0000A0E3 MOV R0,#+0 \ ??FreeBotMessage_1: \ 0000002C D40384E5 STR R0,[R4, #+980] 1240 bot_chars=NULL; \ 00000030 D00384E5 STR R0,[R4, #+976] 1241 } \ 00000034 1080BDE8 POP {R4,PC} ;; return 1242 \ In segment CODE, align 4, keep-with-next 1243 int LoadBotMessage(unsigned int uin) 1244 { \ LoadBotMessage: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 1245 FSTATS stat; 1246 char fn[256]; 1247 int f; 1248 unsigned int ul; 1249 int i; 1250 int fsize; 1251 char *p; 1252 char *pp; 1253 int c; 1254 FreeBotMessage(); 1255 strcpy(fn,TEMPLATES_PATH); 1256 i=strlen(fn); 1257 sprintf(fn+i,"\\bot_%d.txt",uin); \ 00000004 7C619FE5 LDR R6,??LoadBotMessage_0 ;; `?` \ 00000008 4BDF4DE2 SUB SP,SP,#+300 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ BL FreeBotMessage \ 00000014 ........ LDR R1,??DataTable66 ;; 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 1258 if (GetFileStats(fn,&stat,&ul)==-1) goto L1; \ 00000044 0040E0E3 MVN R4,#+0 \ 00000048 0D20A0E1 MOV R2,SP \ 0000004C 04108DE2 ADD R1,SP,#+4 \ 00000050 2C008DE2 ADD R0,SP,#+44 \ 00000054 840000EF SWI +132 \ 00000058 040050E1 CMP R0,R4 \ 0000005C 0A00000A BEQ ??LoadBotMessage_1 1259 if ((fsize=stat.size)<=0) goto L1; \ 00000060 08709DE5 LDR R7,[SP, #+8] \ 00000064 010057E3 CMP R7,#+1 \ 00000068 070000BA BLT ??LoadBotMessage_1 1260 if ((f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul))==-1) \ 0000006C 0D30A0E1 MOV R3,SP \ 00000070 8020A0E3 MOV R2,#+128 \ 00000074 801CA0E3 MOV R1,#+32768 \ 00000078 2C008DE2 ADD R0,SP,#+44 \ 0000007C 0A0000EF SWI +10 \ 00000080 0080A0E1 MOV R8,R0 \ 00000084 040058E1 CMP R8,R4 \ 00000088 1400001A BNE ??LoadBotMessage_2 1261 { 1262 L1: 1263 strcpy(fn+i,"\\bot.txt"); \ ??LoadBotMessage_1: \ 0000008C 0C1086E2 ADD R1,R6,#+12 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 1A0000EF SWI +26 1264 if (GetFileStats(fn,&stat,&ul)==-1) return 0; \ 00000098 0D20A0E1 MOV R2,SP \ 0000009C 04108DE2 ADD R1,SP,#+4 \ 000000A0 2C008DE2 ADD R0,SP,#+44 \ 000000A4 840000EF SWI +132 \ 000000A8 040050E1 CMP R0,R4 \ 000000AC 0200001A BNE ??LoadBotMessage_3 \ ??LoadBotMessage_4: \ 000000B0 0000A0E3 MOV R0,#+0 \ ??LoadBotMessage_5: \ 000000B4 4BDF8DE2 ADD SP,SP,#+300 ;; stack cleaning \ 000000B8 F087BDE8 POP {R4-R10,PC} ;; return 1265 if ((fsize=stat.size)<=0) return 0; \ ??LoadBotMessage_3: \ 000000BC 08709DE5 LDR R7,[SP, #+8] \ 000000C0 010057E3 CMP R7,#+1 \ 000000C4 F9FFFFBA BLT ??LoadBotMessage_4 1266 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 1267 } 1268 if (f==-1) return 0; \ ??LoadBotMessage_2: \ 000000E0 040058E1 CMP R8,R4 \ 000000E4 F1FFFF0A BEQ ??LoadBotMessage_4 1269 p=bot_chars=malloc(fsize+1); \ 000000E8 ........ LDR R4,??DataTable64 ;; i_rc \ 000000EC 010087E2 ADD R0,R7,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 D00384E5 STR R0,[R4, #+976] \ 000000F8 0060A0E1 MOV R6,R0 1270 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] 1271 fclose(f,&ul); \ 00000118 0D10A0E1 MOV R1,SP \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 0D0000EF SWI +13 1272 i=0; \ 00000124 0070A0E3 MOV R7,#+0 1273 pp=p; \ 00000128 0680A0E1 MOV R8,R6 \ 0000012C 020000EA B ??LoadBotMessage_6 1274 for(;;) 1275 { 1276 c=*p; 1277 if (c<32) 1278 { 1279 if (pp&&(pp!=p)) 1280 { 1281 bot_lines=realloc(bot_lines,(i+1)*sizeof(char *)); 1282 bot_lines[i++]=pp; 1283 } 1284 pp=NULL; 1285 if (!c) break; 1286 *p=0; 1287 } 1288 else 1289 { 1290 if (pp==NULL) pp=p; \ ??LoadBotMessage_7: \ 00000130 000058E3 CMP R8,#+0 \ 00000134 0680A001 MOVEQ R8,R6 1291 } 1292 p++; \ ??LoadBotMessage_8: \ 00000138 016086E2 ADD R6,R6,#+1 \ ??LoadBotMessage_6: \ 0000013C 0090D6E5 LDRB R9,[R6, #+0] \ 00000140 200059E3 CMP R9,#+32 \ 00000144 F9FFFFAA BGE ??LoadBotMessage_7 \ 00000148 000058E3 CMP R8,#+0 \ 0000014C 06005811 CMPNE R8,R6 \ 00000150 0600000A BEQ ??LoadBotMessage_9 \ 00000154 D40394E5 LDR R0,[R4, #+980] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 D40384E5 STR R0,[R4, #+980] \ 00000168 078180E7 STR R8,[R0, +R7, LSL #+2] \ 0000016C 0A70A0E1 MOV R7,R10 \ ??LoadBotMessage_9: \ 00000170 0080A0E3 MOV R8,#+0 \ 00000174 000059E3 CMP R9,#+0 1293 } 1294 return i; \ 00000178 0700A001 MOVEQ R0,R7 \ 0000017C CCFFFF0A BEQ ??LoadBotMessage_5 \ 00000180 0050C6E5 STRB R5,[R6, #+0] \ 00000184 EBFFFFEA B ??LoadBotMessage_8 \ ??LoadBotMessage_0: \ 00000188 ........ DC32 `?` 1295 } 1296 #endif 1297 1298 //=================================================================== 1299 1300 int RXstate=EOP; //-sizeof(RXpkt)..-1 - receive header, 0..RXpkt.data_len - receive data 1301 \ In segment DATA_Z, align 4, align-sorted 1302 TPKT RXbuf; \ RXbuf: \ 00000000 DS8 16392 \ In segment DATA_Z, align 4, align-sorted 1303 TPKT TXbuf; \ TXbuf: \ 00000000 DS8 16392 1304 1305 int connect_state=0; 1306 1307 int sock=-1; 1308 1309 volatile unsigned long TOTALRECEIVED; 1310 volatile unsigned long TOTALSENDED; 1311 volatile unsigned long ALLTOTALRECEIVED; //by BoBa 10.07 1312 volatile unsigned long ALLTOTALSENDED; 1313 1314 volatile int sendq_l=0; //Длинна очереди для send 1315 volatile void *sendq_p=NULL; //указатель очереди 1316 1317 volatile int is_gprs_online=1; 1318 1319 GBSTMR reconnect_tmr; 1320 1321 extern void kill_data(void *p,void (*func_p)(void *)); 1322 \ In segment CODE, align 4, keep-with-next 1323 void ElfKiller(void) 1324 { \ ElfKiller: \ 00000000 00402DE9 PUSH {LR} 1325 extern void *ELF_BEGIN; 1326 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 1327 } 1328 1329 int total_unread; 1330 1331 volatile CLIST *cltop; 1332 1333 volatile unsigned int GROUP_CACHE; //Текущая группа для добавления 1334 1335 volatile int contactlist_menu_id; 1336 1337 GBSTMR tmr_active; 1338 1339 volatile int edchat_id; 1340 1341 //Применяется для добавления сообщений 1342 //CLIST *edcontact; 1343 //void *edgui_data; 1344 1345 //static int prev_clmenu_itemcount; 1346 \ In segment DATA_Z, align 4, align-sorted 1347 char clm_hdr_text[64]; \ clm_hdr_text: \ 00000000 DS8 64 1348 //static const char def_clm_hdr_text[] = LG_CLTITLE; 1349 static const char key_clm_hdr_text[] = LG_CLT9INP; 1350 #ifdef kluchnik \ In segment DATA_Z, align 4, align-sorted 1351 int ICON_HD; \ ICON_HD: \ 00000000 DS8 4 1352 //static const HEADER_DESC contactlist_menuhdr = {0, 0, 0, 0, S_ICONS+IS_NULLICON, (int)clm_hdr_text, LGP_NULL}; 1353 #else 1354 static const HEADER_DESC contactlist_menuhdr = {0, 0, 0, 0, S_ICONS+ICON_HEAD, (int)clm_hdr_text, LGP_NULL}; 1355 #endif 1356 1357 static const int menusoftkeys[] = {0,1,2}; 1358 static const SOFTKEY_DESC menu_sk[] = 1359 { 1360 {0x0018, 0x0000, (int)LG_SELECT}, 1361 {0x0001, 0x0000, (int)LG_CLOSE}, 1362 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 1363 }; 1364 1365 char clmenu_sk_r[16]; 1366 static const char def_clmenu_sk_r[] = LG_CLOSE; 1367 static const char key_clmenu_sk_r[] = LG_CLEAR; 1368 1369 /*static const SOFTKEY_DESC clmenu_sk[]= 1370 { 1371 {0x0018, 0x0000, (int)LG_OPTIONS}, 1372 {0x0001, 0x0000, (int)clmenu_sk_r}, 1373 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 1374 }; 1375 */ 1376 const SOFTKEYSTAB menu_skt = 1377 { 1378 menu_sk, 0 1379 }; 1380 1381 /*static const SOFTKEYSTAB clmenu_skt = 1382 { 1383 clmenu_sk, 0 1384 };*/ 1385 1386 void contactlist_menu_ghook(void *data, int cmd); 1387 int contactlist_menu_onkey(void *data, GUI_MSG *msg); 1388 void contactlist_menu_iconhndl(void *data, int curitem, void *unk); 1389 1390 #ifdef USE_MLMENU 1391 static const ML_MENU_DESC contactlist_menu= 1392 { 1393 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 1394 menusoftkeys, 1395 &clmenu_skt, 1396 0x11, //+0x400 1397 contactlist_menu_iconhndl, 1398 NULL, //Items 1399 NULL, //Procs 1400 0, //n 1401 1 //Добавочных строк 1402 }; 1403 #endif 1404 1405 //GBSTMR tmr_ping; 1406 int tenseconds_to_ping; 1407 \ In segment CODE, align 4, keep-with-next 1408 LOGQ *NewLOGQ(const char *s) 1409 { \ NewLOGQ: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1410 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 1411 zeromem(p,sizeof(LOGQ)); \ 00000018 6010A0E3 MOV R1,#+96 \ 0000001C 1D0100EF SWI +285 1412 strcpy(p->text,s); \ 00000020 0410A0E1 MOV R1,R4 \ 00000024 600085E2 ADD R0,R5,#+96 \ 00000028 1A0000EF SWI +26 1413 return p; \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 3080BDE8 POP {R4,R5,PC} ;; return 1414 } 1415 \ In segment CODE, align 4, keep-with-next 1416 LOGQ *LastLOGQ(LOGQ **pp) 1417 { 1418 LOGQ *q=*pp; \ LastLOGQ: \ 00000000 000090E5 LDR R0,[R0, #+0] 1419 if (q) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 1EFF2F01 BXEQ LR \ 0000000C 000000EA B ??LastLOGQ_0 1420 { 1421 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 1422 } 1423 return(q); \ 00000020 1EFF2FE1 BX LR ;; return 1424 } 1425 1426 //Уничтожить лог \ In segment CODE, align 4, keep-with-next 1427 void FreeLOGQ(LOGQ **pp) 1428 { \ FreeLOGQ: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0010A0E1 MOV R1,R0 1429 LOGQ *p=*pp; \ 00000008 000091E5 LDR R0,[R1, #+0] 1430 *pp=NULL; //Сразу обрежем \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 002081E5 STR R2,[R1, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 1080BD08 POPEQ {R4,PC} 1431 while(p) 1432 { 1433 LOGQ *np=p->next; \ ??FreeLOGQ_0: \ 0000001C 004090E5 LDR R4,[R0, #+0] 1434 mfree(p); \ 00000020 150000EF SWI +21 1435 p=np; \ 00000024 0400B0E1 MOVS R0,R4 1436 } \ 00000028 FBFFFF1A BNE ??FreeLOGQ_0 1437 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 1438 1439 //Удалить элемент из лога \ In segment CODE, align 4, keep-with-next 1440 void RemoveLOGQ(LOGQ **queue, LOGQ *p) 1441 { \ RemoveLOGQ: \ 00000000 00402DE9 PUSH {LR} 1442 LOGQ *q=(LOGQ *)queue; \ 00000004 000000EA B ??RemoveLOGQ_0 1443 LOGQ *qp; 1444 while(qp=q->next) 1445 { 1446 if (qp==p) 1447 { 1448 q->next=p->next; 1449 break; 1450 } 1451 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] 1452 } 1453 mfree(p); //Если элемент вообще не в логе \ ??RemoveLOGQ_2: \ 00000028 0100A0E1 MOV R0,R1 \ 0000002C 150000EF SWI +21 1454 } \ 00000030 0080BDE8 POP {PC} ;; return 1455 1456 //Добавить элемент в лог \ In segment CODE, align 4, keep-with-next 1457 int AddLOGQ(LOGQ **queue, LOGQ *p) 1458 { 1459 LOGQ *q=(LOGQ *)queue; 1460 LOGQ *qp; 1461 int i=0; \ AddLOGQ: \ 00000000 0020A0E3 MOV R2,#+0 \ 00000004 000000EA B ??AddLOGQ_0 1462 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 1463 p->next=NULL; \ 0000001C 003081E5 STR R3,[R1, #+0] 1464 q->next=p; \ 00000020 001080E5 STR R1,[R0, #+0] 1465 return(i+1); //Теперь всего в логе элементов \ 00000024 0200A0E1 MOV R0,R2 \ 00000028 1EFF2FE1 BX LR ;; return 1466 } 1467 \ In segment CODE, align 4, keep-with-next 1468 char *GetLastXTextLOGQ(CLIST *t) 1469 { 1470 LOGQ *p = t->log; \ GetLastXTextLOGQ: \ 00000000 A01090E5 LDR R1,[R0, #+160] 1471 char *s = 0; \ 00000004 0000A0E3 MOV R0,#+0 1472 if(!p) return 0; \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 0500001A BNE ??GetLastXTextLOGQ_0 \ 00000010 1EFF2FE1 BX LR 1473 while(p->next) 1474 { 1475 if((p->type&0x0F)==3) \ ??GetLastXTextLOGQ_1: \ 00000014 0C3091E5 LDR R3,[R1, #+12] \ 00000018 0F3003E2 AND R3,R3,#0xF \ 0000001C 030053E3 CMP R3,#+3 1476 s = p->text; \ 00000020 60008102 ADDEQ R0,R1,#+96 1477 p = p->next; \ 00000024 0210A0E1 MOV R1,R2 1478 } \ ??GetLastXTextLOGQ_0: \ 00000028 002091E5 LDR R2,[R1, #+0] \ 0000002C 000052E3 CMP R2,#+0 \ 00000030 F7FFFF1A BNE ??GetLastXTextLOGQ_1 1479 if((p->type&0x0F)==3) \ 00000034 0C2091E5 LDR R2,[R1, #+12] \ 00000038 0F2002E2 AND R2,R2,#0xF \ 0000003C 030052E3 CMP R2,#+3 1480 s = p->text; \ 00000040 60008102 ADDEQ R0,R1,#+96 1481 return s; \ 00000044 1EFF2FE1 BX LR ;; return 1482 } 1483 \ In segment CODE, align 4, keep-with-next 1484 int GetIconIndex(CLIST *t) 1485 { 1486 unsigned short s; 1487 if (t) \ GetIconIndex: \ 00000000 000050E3 CMP R0,#+0 \ 00000004 3400000A BEQ ??GetIconIndex_0 1488 { 1489 s=t->state; 1490 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 1491 if (t->isunread) \ 0000001C 900090E5 LDR R0,[R0, #+144] \ 00000020 000050E3 CMP R0,#+0 1492 return(IS_MSG); \ 00000024 0D00A013 MOVNE R0,#+13 \ 00000028 1EFF2F11 BXNE LR 1493 else 1494 { 1495 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 1496 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 1497 if ((s&0xF000)==0x3000) return (IS_EVIL); \ 0000004C C00D52E3 CMP R2,#+12288 \ 00000050 0700A003 MOVEQ R0,#+7 \ 00000054 1EFF2F01 BXEQ LR 1498 if ((s&0xF000)==0x4000) return (IS_DEPRESSION); \ 00000058 400C52E3 CMP R2,#+16384 \ 0000005C 0600A003 MOVEQ R0,#+6 \ 00000060 1EFF2F01 BXEQ LR 1499 if ((s&0xF000)==0x5000) return (IS_HOME); \ 00000064 500C52E3 CMP R2,#+20480 \ 00000068 0800A003 MOVEQ R0,#+8 \ 0000006C 1EFF2F01 BXEQ LR 1500 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 1501 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 1502 if (s & 0x0001) return(IS_AWAY); \ ??GetIconIndex_1: \ 00000090 010011E3 TST R1,#0x1 \ 00000094 0200A013 MOVNE R0,#+2 \ 00000098 1EFF2F11 BXNE LR 1503 if (s & 0x0005) return(IS_NA); \ 0000009C 050011E3 TST R1,#0x5 \ 000000A0 0300A013 MOVNE R0,#+3 \ 000000A4 1EFF2F11 BXNE LR 1504 if (s & 0x0011) return(IS_OCCUPIED); \ 000000A8 110011E3 TST R1,#0x11 \ 000000AC 0400A013 MOVNE R0,#+4 \ 000000B0 1EFF2F11 BXNE LR 1505 if (s & 0x0013) return(IS_DND); \ 000000B4 130011E3 TST R1,#0x13 \ 000000B8 0500A013 MOVNE R0,#+5 \ 000000BC 1EFF2F11 BXNE LR 1506 if (s & 0x0002) return(IS_FFC); \ 000000C0 020011E3 TST R1,#0x2 \ 000000C4 EFFFFF1A BNE ??GetIconIndex_2 1507 if (s & 0x0100) return(IS_INVISIBLE); \ 000000C8 400F11E3 TST R1,#0x100 \ 000000CC 0100A013 MOVNE R0,#+1 \ 000000D0 1EFF2F11 BXNE LR 1508 } 1509 } 1510 else 1511 { 1512 return(IS_UNKNOWN); 1513 } 1514 return(IS_ONLINE); \ 000000D4 0B00A0E3 MOV R0,#+11 \ 000000D8 1EFF2FE1 BX LR \ ??GetIconIndex_0: \ 000000DC 0E00A0E3 MOV R0,#+14 \ 000000E0 1EFF2FE1 BX LR ;; return 1515 } 1516 \ In segment CODE, align 4, keep-with-next 1517 LOGQ *FindContactLOGQByAck(TPKT *p) 1518 { \ FindContactLOGQByAck: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1519 CLIST *t; 1520 LockSched(); \ 00000008 460100EF SWI +326 1521 t=FindContactByUin(p->pkt.uin); \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000014 0050A0E1 MOV R5,R0 1522 UnlockSched(); \ 00000018 470100EF SWI +327 1523 unsigned int id=*((unsigned short*)(p->data)); \ 0000001C B840D4E1 LDRH R4,[R4, #+8] 1524 LOGQ *q; 1525 if (!t) return NULL; \ 00000020 000055E3 CMP R5,#+0 \ 00000024 0000A003 MOVEQ R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 1526 LockSched(); \ 0000002C 460100EF SWI +326 1527 q=t->log; \ 00000030 A05095E5 LDR R5,[R5, #+160] \ 00000034 000000EA B ??FindContactLOGQByAck_0 1528 while(q) 1529 { 1530 if (q->ID==id) break; 1531 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 1532 } 1533 UnlockSched(); \ 0000004C 470100EF SWI +327 1534 return q; \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 3080BDE8 POP {R4,R5,PC} ;; return 1535 } 1536 1537 1538 1539 1540 /*----------------------------- SAVE CONTACT LIST TO FILE --------------------------------*/ 1541 \ In segment CODE, align 4, keep-with-next 1542 void CreateCLFile(void) 1543 { \ CreateCLFile: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 42DF4DE2 SUB SP,SP,#+264 1544 CLIST *t; 1545 t=(CLIST *)(&cltop); \ 00000008 ........ LDR R5,??DataTable78 ;; i_rc + 1028 1546 char *s=malloc(128); 1547 volatile int hFile_cl; 1548 unsigned int io_error_cl = 0; 1549 char fn[256]; 1550 strcpy(fn,TEMPLATES_PATH); 1551 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,??DataTable66 ;; 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 1552 unlink(fn,&io_error_cl); \ 0000003C 0D10A0E1 MOV R1,SP \ 00000040 08008DE2 ADD R0,SP,#+8 \ 00000044 6B0100EF SWI +363 1553 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] 1554 if(hFile_cl!=-1) \ 00000064 04009DE5 LDR R0,[SP, #+4] \ 00000068 010070E3 CMN R0,#+1 \ 0000006C 1C00001A BNE ??CreateCLFile_1 1555 { 1556 while(t=(CLIST *)(t->next)) 1557 { 1558 if(!t->isgroup && t->uin!=UIN) 1559 { 1560 sprintf(s, ";%d;%s;;;\r\n", t->uin, t->name); 1561 fwrite(hFile_cl, s, strlen(s), &io_error_cl); 1562 } 1563 } 1564 ShowMSG(2,(int)"Saved local.cl"); 1565 } 1566 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 1567 fclose(hFile_cl, &io_error_cl); \ 0000007C 04009DE5 LDR R0,[SP, #+4] \ 00000080 0D10A0E1 MOV R1,SP \ 00000084 0D0000EF SWI +13 1568 mfree(s); \ 00000088 0400A0E1 MOV R0,R4 \ 0000008C 150000EF SWI +21 1569 } \ 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,??DataTable88 ;; 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 `?` 1570 1571 /*-----------------------------------------------------------------------------------------*/ 1572 1573 char on_off_buf[128]; 1574 int on_off_timer=0; 1575 char ContactT9Key[32]; 1576 int kopa_online; 1577 int kopa_kontaktu; \ In segment DATA_Z, align 4, align-sorted 1578 char status[64]; \ status: \ 00000000 DS8 64 \ In segment CODE, align 4, keep-with-next 1579 void UpdateCLheader(void){}; \ UpdateCLheader: \ 00000000 1EFF2FE1 BX LR ;; return 1580 1581 #ifdef USE_MLMENU 1582 #define nmeth 24 1583 1584 void * gui_methods2[nmeth]; 1585 void * old_redraw; 1586 1587 typedef void (*tredraw)(void *data); 1588 char prozr[]={0x00,0x00,0x00,0x64}; 1589 void new_redraw(void *data) 1590 { 1591 ((tredraw)old_redraw)(data); 1592 char s[64]; 1593 sprintf(s,"%s\\HEAD.png",ICON_PATH); 1594 int x=GetImgWidth((int)s); 1595 /*#ifdef ELKA 1596 #else 1597 DrawRectangle(0,YDISP,ScreenW()-1,ScreenH()-1,0,prozr,prozr); 1598 #endif*/ 1599 PrintText(x+7,YDISP+2,status,0,fonto,1,1,0,0,ScreenW()-x); 1600 #ifdef kluchnik 1601 switch(CurrentPrivateStatus) 1602 { 1603 case 0: ICON_HD=ICON_ALL_CAN_SEE; break; 1604 case 1: ICON_HD=ICON_NOBODY_CAN_SEE; break; 1605 case 2: ICON_HD=ICON_VISLIST_CAN_SEE; break; 1606 case 3: ICON_HD=ICON_INVISLIST_CANNOT_SEE; break; 1607 case 4: ICON_HD=ICON_CONTACTLIST_CAN_SEE; break; 1608 default : ICON_HD=ICON_HEAD; break; 1609 } 1610 int icon; 1611 icon=*(S_ICONS+ICON_HD); 1612 DrawImg(3,YDISP+3,icon); 1613 #endif 1614 } 1615 1616 /* 1617 void (*old_ed_redraw)(void *data); 1618 void my_ed_redraw2(void *data) 1619 { 1620 void *gui; 1621 char s[128]; 1622 sprintf(s,"%s\\HEAD.png",ICON_PATH); 1623 int x=GetImgWidth((int)s); 1624 if (old_ed_redraw) old_ed_redraw(data); 1625 gui=FindGUIbyId(contactlist_menu_id,NULL); 1626 if (gui) 1627 { 1628 ClearScreen(); 1629 // canvasdata=BuildCanvas(); 1630 PrintText(x+7,YDISP+2,status,0,fonto,1,1,0,0,ScreenW()-x); 1631 switch(CurrentPrivateStatus) 1632 { 1633 case 0: ICON_HD=ICON_ALL_CAN_SEE; break; 1634 case 1: ICON_HD=ICON_NOBODY_CAN_SEE; break; 1635 case 2: ICON_HD=ICON_VISLIST_CAN_SEE; break; 1636 case 3: ICON_HD=ICON_INVISLIST_CANNOT_SEE; break; 1637 case 4: ICON_HD=ICON_CONTACTLIST_CAN_SEE; break; 1638 default : ICON_HD=ICON_HEAD; break; 1639 } 1640 int icon, width; 1641 #ifdef NEWSGOLD 1642 icon=*(S_ICONS+ICON_HD); 1643 ((HEADER_DESC *)&contactlist_menuhdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); 1644 DrawImg(ScreenW()-1-width,1,icon); 1645 #else 1646 icon=*(S_ICONS+ICON_HD); 1647 width=GetImgWidth(icon); 1648 DrawImg(2,((HeaderH()-width)>>1)+YDISP,icon); 1649 #endif 1650 1651 } 1652 }*/ 1653 1654 void UpdateCLheader(void) 1655 { 1656 if (strlen(ContactT9Key)) 1657 { 1658 zeromem(status,64); 1659 strcpy(clm_hdr_text,key_clm_hdr_text); 1660 strcat(clm_hdr_text,ContactT9Key); 1661 strcpy(clmenu_sk_r,key_clmenu_sk_r); 1662 } 1663 else 1664 { 1665 TTime the; 1666 GetDateTime(NULL,&the); 1667 char t[64]; 1668 char s[32]; 1669 void Get_Online_total(); 1670 Get_Online_total(); 1671 zeromem(clm_hdr_text,64); 1672 zeromem(status,64); 1673 switch(TIME_OR_MSG) 1674 { 1675 case 0: 1676 sprintf(clm_hdr_text, "%s(%02d:%02d)",def_clm_hdr_text,the.hour,the.min); 1677 break; 1678 case 1: 1679 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,total_unread,total_unread2); 1680 break; 1681 case 2: 1682 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,kopa_kontaktu,kopa_online); 1683 break; 1684 case 3: 1685 { 1686 if(isShowTime) { sprintf(t,"[%02d:%02d]",the.hour,the.min); strcat(status,t); } 1687 if(isShowCont) { sprintf(s,"[%d/%d]",kopa_kontaktu,kopa_online); strcat(clm_hdr_text,s); } 1688 if(isShowUnread) { sprintf(s,"[%d/%d]",total_unread,total_unread2); strcat(clm_hdr_text,s); } 1689 if(isShowTime) strcat(clm_hdr_text,t); 1690 if(away_m && isShowA) strcat(clm_hdr_text,"[A]"); 1691 if(CurrentPrivateStatus==1 && isShowI) strcat(clm_hdr_text,"[I]") ; 1692 if(Is_Vibra_Enabled && isShowV) strcat(clm_hdr_text,"[V]") ; 1693 if(Is_Sounds_Enabled && isShowS) strcat(clm_hdr_text,"[S]") ; 1694 if(Is_Double_Vibra_On && isShowR) strcat(clm_hdr_text,"[R]") ; 1695 if(Show_XTX && isShowTmXs) strcat(clm_hdr_text,"[Xs]"); 1696 else if(isShowTmXs) strcat(clm_hdr_text,"[Tm]"); 1697 if(isShowBat) 1698 { 1699 int bat=*RamCap(); 1700 char s[4]; 1701 sprintf(s,"[%d%%]",bat); 1702 strcat(clm_hdr_text,s); 1703 } 1704 1705 } 1706 break; 1707 case 4://png 1708 { 1709 #ifdef kluchnik 1710 char A_s[]="[A [%s] ]"; 1711 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l 1712 if(on_off_timer > 0 && strlen(on_off_buf)!=0) 1713 sprintf(status,on_off_buf); 1714 else 1715 { 1716 sprintf(status, "[Rx:%db/Tx:%db/Queue:%db]\n",RX,TX,sendq_l); 1717 } 1718 sprintf(t,"[%d/%d] [%d/%d] ",kopa_kontaktu, kopa_online,total_unread,total_unread2); 1719 strcat(status,t); 1720 char A_s[]="[A [%s] ]"; 1721 if(away_m && isShowA) { sprintf(t,A_s,away_msg_time_dace); strcat(status,t); } 1722 #else 1723 char s[32]; 1724 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l 1725 #ifdef NEWSGOLD 1726 if(on_off_timer>0 && strlen(on_off_buf)!=0) 1727 sprintf(status,on_off_buf); 1728 else 1729 if(ShowTraff) 1730 sprintf(status, "[T:%db/Queue:%db]\n",RX+TX,sendq_l); 1731 #else 1732 if(on_off_timer>0 && strlen(on_off_buf)!=0) 1733 sprintf(status,on_off_buf); 1734 else 1735 if(ShowTraff) 1736 sprintf(status, "[T:%db/Q:%db]\n",RX+TX,sendq_l); 1737 #endif 1738 //sprintf(status, "%s\n",def_clm_hdr_text); 1739 if(isShowTime) { sprintf(t,"[%02d:%02d]",the.hour,the.min); strcat(status,t); } 1740 if(isShowCont) { sprintf(s,"[%d/%d]",kopa_kontaktu,kopa_online); strcat(status,s); } 1741 if(isShowUnread) { sprintf(s,"[%d/%d]",total_unread,total_unread2); strcat(status,s); } 1742 if(away_m && isShowA) { strcat(status,"[A]"); } 1743 #endif 1744 1745 if(CurrentPrivateStatus==1 && isShowI) strcat(status,"[I]"); 1746 if(Is_Vibra_Enabled && isShowV) strcat(status,"[V]"); 1747 if(Is_Sounds_Enabled && isShowS) strcat(status,"[S]"); 1748 if(Is_Double_Vibra_On && isShowR) strcat(status,"[R]"); 1749 if(Show_XTX && isShowTmXs) strcat(status,"[Xs]"); 1750 else 1751 if(isShowTmXs) strcat(status,"[Tm]"); 1752 if(isShowBat) 1753 { 1754 int bat=*RamCap(); 1755 char s[4]; 1756 sprintf(s,"[%d%%]",bat); 1757 strcat(status,s); 1758 } 1759 zeromem(clm_hdr_text,64); 1760 } 1761 break; 1762 default : 1763 sprintf(clm_hdr_text, percent_s,def_clm_hdr_text); 1764 break; 1765 } 1766 strcpy(clmenu_sk_r,def_clmenu_sk_r); 1767 } 1768 } 1769 #endif //USE_MLMENU 1770 \ In segment CODE, align 4, keep-with-next 1771 void ClearContactT9Key(void) 1772 { 1773 zeromem(ContactT9Key,sizeof(ContactT9Key)); \ ClearContactT9Key: \ 00000000 0C009FE5 LDR R0,??ClearContactT9Key_0 ;; i_rc + 1480 \ 00000004 00402DE9 PUSH {LR} \ 00000008 2010A0E3 MOV R1,#+32 \ 0000000C 1D0100EF SWI +285 1774 } \ 00000010 0080BDE8 POP {PC} ;; return \ ??ClearContactT9Key_0: \ 00000014 ........ DC32 i_rc + 1480 1775 \ In segment CODE, align 4, keep-with-next 1776 void AddContactT9Key(int chr) 1777 { \ AddContactT9Key: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1778 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R5,??DataTable86 ;; i_rc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C C800A0E3 MOV R0,#+200 \ 00000010 500E80E3 ORR R0,R0,#0x500 \ 00000014 050080E0 ADD R0,R0,R5 \ 00000018 1B0000EF SWI +27 1779 if (l<(sizeof(ContactT9Key)-1)) \ 0000001C 1F0050E3 CMP R0,#+31 1780 { 1781 ContactT9Key[l]=chr; \ 00000020 05008030 ADDCC R0,R0,R5 \ 00000024 C845C035 STRBCC R4,[R0, #+1480] 1782 } 1783 } \ 00000028 3080BDE8 POP {R4,R5,PC} ;; return 1784 \ In segment CODE, align 4, keep-with-next 1785 void BackSpaceContactT9(void) 1786 { \ BackSpaceContactT9: \ 00000000 10402DE9 PUSH {R4,LR} 1787 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R4,??DataTable86 ;; i_rc \ 00000008 C800A0E3 MOV R0,#+200 \ 0000000C 500E80E3 ORR R0,R0,#0x500 \ 00000010 040080E0 ADD R0,R0,R4 \ 00000014 1B0000EF SWI +27 1788 if (l) \ 00000018 000050E3 CMP R0,#+0 1789 { 1790 l--; 1791 ContactT9Key[l]=0; \ 0000001C 04008010 ADDNE R0,R0,R4 \ 00000020 0010A013 MOVNE R1,#+0 \ 00000024 C715C015 STRBNE R1,[R0, #+1479] 1792 } 1793 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 1794 1795 #ifdef USE_MLMENU 1796 void create_contactlist_menu(void) 1797 { 1798 int i; 1799 i=CountContacts(); 1800 prev_clmenu_itemcount=i; 1801 UpdateCLheader(); 1802 patch_header(&contactlist_menuhdr); 1803 contactlist_menu_id=CreateMultiLinesMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i); 1804 } 1805 1806 static int unhooked2=1; 1807 1808 void contactlist_menu_ghook(void *data, int cmd) 1809 { 1810 PNGTOP_DESC *pltop=PNG_TOP(); 1811 if (cmd==9) 1812 { 1813 pltop->dyn_pltop=NULL; 1814 } 1815 static int unhooked=1; 1816 if( ((unhooked) || (unhooked2)) && (TIME_OR_MSG==4) ) 1817 { 1818 if(!(strlen(ContactT9Key))) 1819 { 1820 GUI * gui=(GUI*)data; 1821 memcpy(&gui_methods2,gui->methods,nmeth*4); 1822 gui->methods=&gui_methods2; 1823 old_redraw=gui_methods2[0]; 1824 gui_methods2[0]=(void*)&new_redraw; 1825 } 1826 unhooked=0; 1827 unhooked2=0; 1828 } 1829 /* 1830 if (cmd==2) 1831 { 1832 static void *methods[16]; 1833 void **m=GetDataOfItemByID(data,2); 1834 if (m) 1835 { 1836 if (m[1]) 1837 { 1838 memcpy(methods,m[1],sizeof(methods)); 1839 old_ed_redraw=(void (*)(void *))(methods[0]); 1840 methods[0]=(void *)my_ed_redraw2; 1841 m[1]=methods; 1842 } 1843 } 1844 }*/ 1845 1846 if (cmd==0x0A) 1847 { 1848 silenthide=0; 1849 pltop->dyn_pltop=XStatusesImgList; 1850 DisableIDLETMR(); 1851 } 1852 } 1853 1854 void RecountMenu(CLIST *req, int needfocus) 1855 { 1856 int i; 1857 int j; 1858 void *data; 1859 UpdateCLheader(); 1860 if (!contactlist_menu_id) return; //Нечего считать 1861 data=FindGUIbyId(contactlist_menu_id,NULL); 1862 if (req==NULL) 1863 { 1864 j=0; 1865 } 1866 else 1867 { 1868 j=FindContactByContact(req); 1869 } 1870 i=CountContacts(); 1871 if (j>=i) j=i-1; 1872 if (j<0) j=0; 1873 if (i!=prev_clmenu_itemcount) 1874 { 1875 prev_clmenu_itemcount=i; 1876 Menu_SetItemCountDyn(data,i); 1877 } 1878 if(needfocus) SetCursorToMenuItem(data,j); //2058 1879 if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); 1880 } 1881 1882 #endif //USE_MLMENU 1883 1884 void RecountMenu(CLIST *req, int needfocus); 1885 1886 //--------------------------------------------------------------------// 1887 1888 \ In segment CODE, align 4, keep-with-next 1889 void LongPressActionOnChat(CLIST *t,int i) 1890 { \ LongPressActionOnChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 1891 switch(i) \ 00000004 ........ LDR R4,??DataTable86 ;; i_rc \ 00000008 ........ LDR R9,??DataTable71 ;; WriteDefSettings \ 0000000C ........ LDR R7,??DataTable80 ;; Canvas \ 00000010 04D04DE2 SUB SP,SP,#+4 \ 00000014 D020A0E3 MOV R2,#+208 \ 00000018 5C2D82E3 ORR R2,R2,#0x1700 \ 0000001C 045082E0 ADD R5,R2,R4 \ 00000020 02A0A0E3 MOV R10,#+2 \ 00000024 0060A0E3 MOV R6,#+0 \ 00000028 01B0A0E3 MOV R11,#+1 \ 0000002C C880A0E3 MOV R8,#+200 \ 00000030 508E88E3 ORR R8,R8,#0x500 \ 00000034 011041E2 SUB R1,R1,#+1 \ 00000038 0C0051E3 CMP R1,#+12 \ 0000003C F18FBD88 POPHI {R0,R4-R11,PC} \ 00000040 012F8FE2 ADR R2,??LongPressActionOnChat_0 \ 00000044 0120D2E7 LDRB R2,[R2, R1] \ 00000048 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??LongPressActionOnChat_0: \ 0000004C 03101E29 DC8 +3,+16,+30,+41 \ 00000050 34516A72 DC8 +52,+81,+106,+114 \ 00000054 768395A9 DC8 +118,+131,+149,+169 \ 00000058 C0000000 DC8 +192,+0,+0,+0 1892 { 1893 case 1: 1894 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??LongPressActionOnChat_1: \ 0000005C B40394E5 LDR R0,[R4, #+948] \ 00000060 000050E3 CMP R0,#+0 \ 00000064 00B0A013 MOVNE R11,#+0 \ 00000068 B4B384E5 STR R11,[R4, #+948] 1895 if(Is_Sounds_Enabled) \ 0000006C 00005BE3 CMP R11,#+0 1896 { 1897 // ShowMSG(1,(int)"Sound 0n"); 1898 strcpy(prmsg,"Sound 0n"); \ 00000070 14108712 ADDNE R1,R7,#+20 1899 PrintTimer=2; 1900 } 1901 else 1902 { 1903 // ShowMSG(1,(int)"Sound Off"); 1904 strcpy(prmsg,"Sound Off"); \ 00000074 20108702 ADDEQ R1,R7,#+32 \ 00000078 0500A0E1 MOV R0,R5 \ 0000007C 1A0000EF SWI +26 1905 PrintTimer=2; \ 00000080 ACA284E5 STR R10,[R4, #+684] 1906 } 1907 SUBPROC((void*)WriteDefSettings); \ 00000084 0900A0E1 MOV R0,R9 \ 00000088 710100EF SWI +369 \ 0000008C F18FBDE8 POP {R0,R4-R11,PC} 1908 break; 1909 case 2: 1910 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??LongPressActionOnChat_2: \ 00000090 E00294E5 LDR R0,[R4, #+736] \ 00000094 000050E3 CMP R0,#+0 \ 00000098 00B0A013 MOVNE R11,#+0 \ 0000009C E0B284E5 STR R11,[R4, #+736] 1911 SUBPROC((void*)WriteDefSettings); \ 000000A0 0900A0E1 MOV R0,R9 \ 000000A4 710100EF SWI +369 1912 if(Is_Vibra_Enabled) \ 000000A8 E00294E5 LDR R0,[R4, #+736] \ 000000AC 000050E3 CMP R0,#+0 1913 { 1914 // ShowMSG(1,(int)"Vibra On"); 1915 strcpy(prmsg,"Vibra On"); \ 000000B0 2C108712 ADDNE R1,R7,#+44 1916 PrintTimer=2; 1917 } 1918 else 1919 { 1920 // ShowMSG(1,(int)"Vibra Off"); 1921 strcpy(prmsg,"Vibra Off"); \ 000000B4 38108702 ADDEQ R1,R7,#+56 \ ??LongPressActionOnChat_3: \ 000000B8 0500A0E1 MOV R0,R5 \ 000000BC 1A0000EF SWI +26 1922 PrintTimer=2; \ 000000C0 ACA284E5 STR R10,[R4, #+684] \ 000000C4 F18FBDE8 POP {R0,R4-R11,PC} 1923 } 1924 break; 1925 case 3: 1926 if(CurrentPrivateStatus!=1) \ ??LongPressActionOnChat_4: \ 000000C8 C00394E5 LDR R0,[R4, #+960] \ 000000CC 010050E3 CMP R0,#+1 \ 000000D0 0300000A BEQ ??LongPressActionOnChat_5 1927 { 1928 SetPrivateStatus(1);//Инвиз \ 000000D4 0100A0E3 MOV R0,#+1 \ 000000D8 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 1929 // ShowMSG(1,(int)"Инвиз включен"); 1930 strcpy(prmsg,"Инвиз включен"); \ 000000DC 441087E2 ADD R1,R7,#+68 \ 000000E0 F4FFFFEA B ??LongPressActionOnChat_3 1931 PrintTimer=2; 1932 } 1933 else 1934 { 1935 SetPrivateStatus(3); \ ??LongPressActionOnChat_5: \ 000000E4 0300A0E3 MOV R0,#+3 \ 000000E8 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 1936 // ShowMSG(1,(int)"Инвиз выключен"); 1937 strcpy(prmsg,"Инвиз выключен"); \ 000000EC 541087E2 ADD R1,R7,#+84 \ 000000F0 F0FFFFEA B ??LongPressActionOnChat_3 1938 PrintTimer=2; 1939 } 1940 break; 1941 case 4: 1942 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??LongPressActionOnChat_6: \ 000000F4 C80294E5 LDR R0,[R4, #+712] \ 000000F8 000050E3 CMP R0,#+0 \ 000000FC 00B0A013 MOVNE R11,#+0 \ 00000100 C8B284E5 STR R11,[R4, #+712] 1943 SUBPROC((void*)WriteDefSettings); \ 00000104 0900A0E1 MOV R0,R9 \ 00000108 710100EF SWI +369 1944 if(Is_Double_Vibra_On) \ 0000010C C80294E5 LDR R0,[R4, #+712] \ 00000110 000050E3 CMP R0,#+0 \ 00000114 74108702 ADDEQ R1,R7,#+116 1945 { 1946 // ShowMSG(1,(int)"Vibra rem On"); 1947 strcpy(prmsg,"Vibra rem On"); \ 00000118 64108712 ADDNE R1,R7,#+100 \ 0000011C E5FFFFEA B ??LongPressActionOnChat_3 1948 PrintTimer=2; 1949 } 1950 else 1951 { 1952 // ShowMSG(1,(int)"Vibra rem Off"); 1953 strcpy(prmsg,"Vibra rem Off"); 1954 PrintTimer=2; 1955 } 1956 break; 1957 case 5: 1958 { 1959 CLIST *cl; 1960 cl=(CLIST *)(&cltop); \ ??LongPressActionOnChat_7: \ 00000120 710F48E2 SUB R0,R8,#+452 \ 00000124 049080E0 ADD R9,R0,R4 \ 00000128 060000EA B ??LongPressActionOnChat_8 1961 while(cl=(CLIST *)(cl->next)) 1962 { 1963 if(cl->log) \ ??LongPressActionOnChat_9: \ 0000012C A00099E5 LDR R0,[R9, #+160] \ 00000130 000050E3 CMP R0,#+0 \ 00000134 0300000A BEQ ??LongPressActionOnChat_8 1964 { 1965 FreeLOGQ(&cl->log); \ 00000138 A00089E2 ADD R0,R9,#+160 \ 0000013C ........ BL FreeLOGQ 1966 cl->msg_count=0; \ 00000140 B06089E5 STR R6,[R9, #+176] 1967 cl->isactive=0; \ 00000144 AC6089E5 STR R6,[R9, #+172] 1968 } 1969 } \ ??LongPressActionOnChat_8: \ 00000148 009099E5 LDR R9,[R9, #+0] \ 0000014C 000059E3 CMP R9,#+0 \ 00000150 F5FFFF1A BNE ??LongPressActionOnChat_9 1970 if(strlen(ContactT9Key)) ClearContactT9Key(); \ 00000154 040088E0 ADD R0,R8,R4 \ 00000158 1B0000EF SWI +27 \ 0000015C 000050E3 CMP R0,#+0 \ 00000160 0200000A BEQ ??LongPressActionOnChat_10 \ 00000164 2010A0E3 MOV R1,#+32 \ 00000168 040088E0 ADD R0,R8,R4 \ 0000016C 1D0100EF SWI +285 1971 RecountMenu(NULL,1); \ ??LongPressActionOnChat_10: \ 00000170 0110A0E3 MOV R1,#+1 \ 00000174 0600A0E1 MOV R0,R6 \ 00000178 ........ BL RecountMenu 1972 // ShowMSG(1,(int)"All chat clear!"); 1973 strcpy(prmsg,"All chat clear!"); \ 0000017C 841087E2 ADD R1,R7,#+132 \ 00000180 0500A0E1 MOV R0,R5 \ 00000184 1A0000EF SWI +26 1974 PrintTimer=3; \ 00000188 0300A0E3 MOV R0,#+3 \ 0000018C AC0284E5 STR R0,[R4, #+684] 1975 break; \ 00000190 F18FBDE8 POP {R0,R4-R11,PC} 1976 } 1977 case 6: 1978 if(!away_m) \ ??LongPressActionOnChat_11: \ 00000194 840394E5 LDR R0,[R4, #+900] \ 00000198 000050E3 CMP R0,#+0 \ 0000019C 0B00001A BNE ??LongPressActionOnChat_12 1979 { 1980 away_m=!away_m; \ 000001A0 84B384E5 STR R11,[R4, #+900] 1981 GBS_StopTimer(&away_tmr); \ 000001A4 5800A0E3 MOV R0,#+88 \ 000001A8 6C0D80E3 ORR R0,R0,#0x1B00 \ 000001AC 040080E0 ADD R0,R0,R4 \ 000001B0 440100EF SWI +324 1982 msg_away_timer=AUTO_ENGADE*12; \ 000001B4 ........ LDR R0,??DataTable73 ;; AUTO_ENGADE \ 000001B8 0C10A0E3 MOV R1,#+12 \ 000001BC 000090E5 LDR R0,[R0, #+0] \ 000001C0 910000E0 MUL R0,R1,R0 \ 000001C4 800384E5 STR R0,[R4, #+896] 1983 InputAwayMsg(); \ 000001C8 ........ BL InputAwayMsg \ 000001CC F18FBDE8 POP {R0,R4-R11,PC} 1984 1985 } 1986 else 1987 { 1988 msg_away_timer=0; 1989 away_m=!away_m; 1990 if(change_back_status) \ ??LongPressActionOnChat_12: \ 000001D0 8C0394E5 LDR R0,[R4, #+908] \ 000001D4 806384E5 STR R6,[R4, #+896] \ 000001D8 846384E5 STR R6,[R4, #+900] \ 000001DC 000050E3 CMP R0,#+0 \ 000001E0 F18FBD08 POPEQ {R0,R4-R11,PC} 1991 { 1992 CurrentStatus=status_rem; \ 000001E4 880394E5 LDR R0,[R4, #+904] \ 000001E8 700384E5 STR R0,[R4, #+880] 1993 set_my_status(); \ 000001EC ........ BL set_my_status 1994 change_back_status=0; \ 000001F0 8C6384E5 STR R6,[R4, #+908] \ 000001F4 F18FBDE8 POP {R0,R4-R11,PC} 1995 } 1996 } 1997 UpdateCLheader(); 1998 break; 1999 case 7: 2000 { 2001 Show_XTX=!(Show_XTX); \ ??LongPressActionOnChat_13: \ 000001F8 900394E5 LDR R0,[R4, #+912] \ 000001FC 000050E3 CMP R0,#+0 \ 00000200 00B0A013 MOVNE R11,#+0 \ 00000204 90B384E5 STR R11,[R4, #+912] 2002 if(Show_XTX) \ 00000208 00005BE3 CMP R11,#+0 \ 0000020C AC108702 ADDEQ R1,R7,#+172 2003 { 2004 // ShowMSG(1,(int)"Default show x-status"); 2005 strcpy(prmsg,"Default show x-status"); \ 00000210 94108712 ADDNE R1,R7,#+148 \ 00000214 A7FFFFEA B ??LongPressActionOnChat_3 2006 PrintTimer=2; 2007 } 2008 else 2009 { 2010 // ShowMSG(1,(int)"Default show time"); 2011 strcpy(prmsg,"Default show time"); 2012 PrintTimer=2; 2013 } 2014 } 2015 break; 2016 case 8: 2017 { 2018 WSHDR *ws; 2019 ws=AllocWS(150); \ ??LongPressActionOnChat_14: \ 00000218 9600A0E3 MOV R0,#+150 \ 0000021C 250100EF SWI +293 2020 str_2ws(ws,suc_config_name,128); \ 00000220 ........ LDR R1,??DataTable74 ;; suc_config_name \ 00000224 020000EA B ??LongPressActionOnChat_15 2021 ExecuteFile(ws,0,0); 2022 FreeWS(ws); 2023 } 2024 break; 2025 case 9: 2026 { 2027 WSHDR *ws; 2028 ws=AllocWS(150); \ ??LongPressActionOnChat_16: \ 00000228 9600A0E3 MOV R0,#+150 \ 0000022C 250100EF SWI +293 2029 str_2ws(ws,suc_config_name_mod,128); \ 00000230 ........ LDR R1,??DataTable75 ;; suc_config_name_mod \ ??LongPressActionOnChat_15: \ 00000234 0040A0E1 MOV R4,R0 \ 00000238 8020A0E3 MOV R2,#+128 \ 0000023C 6C0100EF SWI +364 2030 ExecuteFile(ws,0,0); \ 00000240 0020A0E3 MOV R2,#+0 \ 00000244 0210A0E1 MOV R1,R2 \ 00000248 0400A0E1 MOV R0,R4 \ 0000024C 940000EF SWI +148 2031 FreeWS(ws); \ 00000250 0400A0E1 MOV R0,R4 \ 00000254 290100EF SWI +297 \ 00000258 F18FBDE8 POP {R0,R4-R11,PC} 2032 } 2033 break; 2034 case 10://ping 2035 { 2036 janis=1; \ ??LongPressActionOnChat_17: \ 0000025C ........ LDR R0,??DataTable76 ;; janis \ 00000260 00B080E5 STR R11,[R0, #+0] 2037 TPKT *p; 2038 p=malloc(sizeof(PKT)+sizeof(TTime)); \ 00000264 1000A0E3 MOV R0,#+16 \ 00000268 140000EF SWI +20 \ 0000026C 0040A0E1 MOV R4,R0 2039 GetDateTime(NULL,(TTime *)p->data); \ 00000270 081084E2 ADD R1,R4,#+8 \ 00000274 0000A0E3 MOV R0,#+0 \ 00000278 B40000EF SWI +180 2040 p->pkt.uin=0; \ 0000027C 006084E5 STR R6,[R4, #+0] 2041 p->pkt.type=T_ECHO; \ 00000280 1200A0E3 MOV R0,#+18 \ 00000284 B400C4E1 STRH R0,[R4, #+4] 2042 p->pkt.data_len=sizeof(TTime); \ 00000288 0800A0E3 MOV R0,#+8 \ 0000028C B600C4E1 STRH R0,[R4, #+6] 2043 SUBPROC((void *)SendAnswer,0,p); \ 00000290 ........ LDR R0,??DataTable89 ;; SendAnswer \ 00000294 0420A0E1 MOV R2,R4 \ 00000298 0610A0E1 MOV R1,R6 \ 0000029C 710100EF SWI +369 \ 000002A0 F18FBDE8 POP {R0,R4-R11,PC} 2044 } 2045 break; 2046 case 11://go to idle 2047 { 2048 ClearContactT9Key(); \ ??LongPressActionOnChat_18: \ 000002A4 2010A0E3 MOV R1,#+32 \ 000002A8 040088E0 ADD R0,R8,R4 \ 000002AC 1D0100EF SWI +285 2049 RecountMenu(NULL,1); \ 000002B0 0110A0E3 MOV R1,#+1 \ 000002B4 0600A0E1 MOV R0,R6 \ 000002B8 ........ BL RecountMenu 2050 silenthide=1; \ 000002BC ACB384E5 STR R11,[R4, #+940] 2051 gipc.name_to=ipc_xtask_name; \ 000002C0 ED0F87E2 ADD R0,R7,#+948 \ 000002C4 D40084E5 STR R0,[R4, #+212] 2052 gipc.name_from=ipc_my_name; \ 000002C8 E50F87E2 ADD R0,R7,#+916 \ 000002CC D80084E5 STR R0,[R4, #+216] 2053 gipc.data=0; \ 000002D0 DC6084E5 STR R6,[R4, #+220] 2054 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 000002D4 D43084E2 ADD R3,R4,#+212 \ 000002D8 0B20A0E1 MOV R2,R11 \ 000002DC B010A0E3 MOV R1,#+176 \ 000002E0 DE1C81E3 ORR R1,R1,#0xDE00 \ 000002E4 0900A0E3 MOV R0,#+9 \ 000002E8 420C80E3 ORR R0,R0,#0x4200 \ 000002EC 000100EF SWI +256 \ 000002F0 F18FBDE8 POP {R0,R4-R11,PC} 2055 } 2056 break; 2057 case 12://hide & lock 2058 { 2059 ClearContactT9Key(); \ ??LongPressActionOnChat_19: \ 000002F4 2010A0E3 MOV R1,#+32 \ 000002F8 040088E0 ADD R0,R8,R4 \ 000002FC 1D0100EF SWI +285 2060 RecountMenu(NULL,1); \ 00000300 0110A0E3 MOV R1,#+1 \ 00000304 0600A0E1 MOV R0,R6 \ 00000308 ........ BL RecountMenu 2061 gipc.name_to=ipc_xtask_name; \ 0000030C ED0F87E2 ADD R0,R7,#+948 \ 00000310 D40084E5 STR R0,[R4, #+212] 2062 gipc.name_from=ipc_my_name; \ 00000314 E50F87E2 ADD R0,R7,#+916 \ 00000318 D80084E5 STR R0,[R4, #+216] 2063 gipc.data=0; \ 0000031C DC6084E5 STR R6,[R4, #+220] 2064 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 00000320 D43084E2 ADD R3,R4,#+212 \ 00000324 0B20A0E1 MOV R2,R11 \ 00000328 B010A0E3 MOV R1,#+176 \ 0000032C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000330 0900A0E3 MOV R0,#+9 \ 00000334 420C80E3 ORR R0,R0,#0x4200 \ 00000338 000100EF SWI +256 2065 if (IsUnlocked()) \ 0000033C 430000EF SWI +67 \ 00000340 000050E3 CMP R0,#+0 \ 00000344 F18FBD08 POPEQ {R0,R4-R11,PC} 2066 { 2067 KbdLock(); \ 00000348 A90000EF SWI +169 \ 0000034C F18FBDE8 POP {R0,R4-R11,PC} 2068 } 2069 // return(-1); 2070 } 2071 break; 2072 case 13://users menu 2073 { 2074 int CreateContactMenu(CLIST *t); 2075 if(!t->isgroup) \ ??LongPressActionOnChat_20: \ 00000350 081090E5 LDR R1,[R0, #+8] \ 00000354 000051E3 CMP R1,#+0 \ 00000358 F18FBD18 POPNE {R0,R4-R11,PC} 2076 CreateContactMenu(t); \ 0000035C ........ BL CreateContactMenu 2077 } 2078 break; 2079 }//switch() 2080 } \ ??LongPressActionOnChat_21: \ 00000360 F18FBDE8 POP {R0,R4-R11,PC} ;; return 2081 2082 //{"Без действия","Звук","Вибра","Инвиз","Реж.напоминания","Очистить чаты","Автоответчик","Показ.хстат/время","Конфиг","Конфиг мода","Пинг","Заблокировать","На гэ","Меню юзера"} 2083 \ In segment CODE, align 4, keep-with-next 2084 void LongPressAction(CLIST *t,int key) 2085 { \ LongPressAction: \ 00000000 00402DE9 PUSH {LR} 2086 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 2087 { 2088 case '0': LongPressActionOnChat(t,longAct_0); break; \ ??LongPressAction_1: \ 00000054 78109FE5 LDR R1,??LongPressAction_2 ;; longAct_0 \ 00000058 040000EA B ??LongPressAction_3 2089 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} 2090 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} 2091 case '3': LongPressActionOnChat(t,longAct_3); break; \ ??LongPressAction_6: \ 0000007C 5C109FE5 LDR R1,??LongPressAction_2+0xC ;; longAct_3 \ 00000080 FAFFFFEA B ??LongPressAction_3 2092 case '4': LongPressActionOnChat(t,longAct_4); break; \ ??LongPressAction_7: \ 00000084 58109FE5 LDR R1,??LongPressAction_2+0x10 ;; longAct_4 \ 00000088 F8FFFFEA B ??LongPressAction_3 2093 case '5': LongPressActionOnChat(t,longAct_5); break; \ ??LongPressAction_8: \ 0000008C 54109FE5 LDR R1,??LongPressAction_2+0x14 ;; longAct_5 \ 00000090 F6FFFFEA B ??LongPressAction_3 2094 case '6': LongPressActionOnChat(t,longAct_6); break; \ ??LongPressAction_9: \ 00000094 50109FE5 LDR R1,??LongPressAction_2+0x18 ;; longAct_6 \ 00000098 F4FFFFEA B ??LongPressAction_3 2095 case '7': LongPressActionOnChat(t,longAct_7); break; \ ??LongPressAction_10: \ 0000009C 4C109FE5 LDR R1,??LongPressAction_2+0x1C ;; longAct_7 \ 000000A0 F2FFFFEA B ??LongPressAction_3 2096 case '8': LongPressActionOnChat(t,longAct_8); break; \ ??LongPressAction_11: \ 000000A4 48109FE5 LDR R1,??LongPressAction_2+0x20 ;; longAct_8 \ 000000A8 F0FFFFEA B ??LongPressAction_3 2097 case '9': LongPressActionOnChat(t,longAct_9); break; \ ??LongPressAction_12: \ 000000AC 44109FE5 LDR R1,??LongPressAction_2+0x24 ;; longAct_9 \ 000000B0 EEFFFFEA B ??LongPressAction_3 2098 case '*': LongPressActionOnChat(t,longAct_10); break; \ ??LongPressAction_13: \ 000000B4 40109FE5 LDR R1,??LongPressAction_2+0x28 ;; longAct_10 \ 000000B8 ECFFFFEA B ??LongPressAction_3 2099 case '#': LongPressActionOnChat(t,longAct_11); break; \ ??LongPressAction_14: \ 000000BC 3C109FE5 LDR R1,??LongPressAction_2+0x2C ;; longAct_11 \ 000000C0 EAFFFFEA B ??LongPressAction_3 2100 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 2101 } 2102 } \ ??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 2103 2104 char hostbuf2[128]; 2105 #ifdef USE_MLMENU 2106 int contactlist_menu_onkey(void *data, GUI_MSG *msg) 2107 { 2108 #ifdef NEWSGOLD 2109 scrsTime=0; 2110 #endif 2111 2112 CLIST *t; 2113 int i; 2114 i=GetCurMenuItem(data); 2115 t=FindContactByN(i); 2116 2117 if (msg->keys==0x18) 2118 { 2119 ShowMainMenu(); 2120 return(-1); 2121 } 2122 2123 if (msg->keys==0x3D) 2124 { 2125 if (t) 2126 { 2127 if (t->isgroup) 2128 { 2129 t->state^=0xFFFF; 2130 RecountMenu(t,1); 2131 return(-1); 2132 } 2133 if (strlen(ContactT9Key)) 2134 { 2135 ClearContactT9Key(); 2136 RecountMenu(NULL,1); 2137 } 2138 #ifdef kluchnik 2139 if(!t->isactive && HISTORY_BUFFER && (t->isLoadHistory && t->isIndividSet)) GetHistory(t, 64<isactive && HISTORY_BUFFER) GetHistory(t, 64<isactive && HISTORY_BUFFER) GetHistory(t, 64<keys==1) 2151 { 2152 if (strlen(ContactT9Key)) 2153 { 2154 BackSpaceContactT9(); 2155 RecountMenu(NULL,1); 2156 return(-1); 2157 } 2158 } 2159 2160 if (msg->gbsmsg->msg==KEY_DOWN) 2161 { 2162 int key=msg->gbsmsg->submess; 2163 if ((key>='0')&&(key<='9')) 2164 { 2165 AddContactT9Key(key); 2166 RecountMenu(NULL,1); 2167 return(-1); 2168 } 2169 2170 if (key==VOL_UP_BUTTON && isVolUpButton) 2171 { 2172 #ifdef NEWSGOLD 2173 CreateScreenSelectGUI(); 2174 #else 2175 char *small_info=malloc(256); 2176 sprintf(small_info, "Время в онлайн:\n" 2177 "%02d:%02d:%02d\n" 2178 "Сервер:\n%s" 2179 ,uptimeHour, uptimeMin, uptimeSec, hostbuf2); 2180 ShowMSG(1,(int)small_info); 2181 mfree(small_info); 2182 #endif 2183 } 2184 2185 if(msg->gbsmsg->submess==VOL_DOWN_BUTTON && isVolDownButton) 2186 { 2187 if(!away_m) 2188 { 2189 away_m=!away_m; 2190 /* GBS_StopTimer(&away_tmr); 2191 msg_away_timer=AUTO_ENGADE; 2192 away_timer();*/ 2193 main_d=1; 2194 InputAwayMsg(); 2195 } 2196 else 2197 { 2198 msg_away_timer=0; 2199 away_m=!away_m; 2200 if(change_back_status) 2201 { 2202 CurrentStatus=status_rem; 2203 set_my_status(); 2204 change_back_status=0; 2205 } 2206 } 2207 UpdateCLheader(); 2208 RefreshGUI(); 2209 } 2210 2211 if(key==GREEN_BUTTON) 2212 { 2213 IsActiveUp=!IsActiveUp; 2214 RecountMenu(NULL,1); 2215 return(-1); 2216 } 2217 2218 if(key==LEFT_BUTTON && (CountContacts()>0)) 2219 { 2220 while(t=(CLIST *)(t->next)) 2221 { 2222 if (t->isunread) goto doit; 2223 } 2224 t=(CLIST *)(&cltop); 2225 while(t=(CLIST *)(t->next)) 2226 { 2227 if (t->isunread) goto doit; 2228 } 2229 if (t && Is_Show_Groups) { 2230 if (!t->isgroup) 2231 t=FindGroupByID(t->group); 2232 if (t && !t->state) { 2233 t->state^=0xFFFF; 2234 goto does; 2235 } 2236 } 2237 doit: 2238 { 2239 CLIST *g=FindGroupByID(t->group); 2240 if (g) 2241 { 2242 if (g->state) 2243 { 2244 g->state=0; 2245 } 2246 } 2247 } 2248 does: 2249 RecountMenu(t,1); 2250 return(-1); 2251 } 2252 2253 if (key=='*' && (CountContacts()>0)) 2254 { 2255 while(t=(CLIST *)(t->next)) 2256 { 2257 if (t->just_now) goto doit3; 2258 } 2259 t=(CLIST *)(&cltop); 2260 while(t=(CLIST *)(t->next)) 2261 { 2262 if (t->just_now) goto doit3; 2263 } 2264 return(-1); 2265 doit3: 2266 { 2267 CLIST *g=FindGroupByID(t->group); 2268 if (g) 2269 { 2270 if (g->state) 2271 { 2272 g->state=0; 2273 } 2274 } 2275 } 2276 RecountMenu(t,1); 2277 return(-1); 2278 } 2279 2280 if (key=='#' && (CountContacts()>0))//Если есть хоть один контакт то выполнять,иначе возможен пикофф 2281 { 2282 if(ActionResh) 2283 { 2284 while(t=(CLIST *)(t->next)) 2285 { 2286 if (t->isactive) goto doit4; 2287 } 2288 t=(CLIST *)(&cltop); 2289 while(t=(CLIST *)(t->next)) 2290 { 2291 if (t->isactive) goto doit4; 2292 } 2293 return(-1); 2294 doit4: 2295 { 2296 CLIST *g=FindGroupByID(t->group); 2297 if (g) 2298 { 2299 if (g->state) 2300 { 2301 g->state=0; 2302 } 2303 } 2304 } 2305 RecountMenu(t,1); 2306 } 2307 else 2308 { 2309 if(t->log && !(t->just_now))//очистить лог 2310 { 2311 FreeLOGQ(&t->log); 2312 t->msg_count=0; 2313 t->isactive=0; 2314 } 2315 2316 if(t->just_now)//если контакт тока зашел,то обнуляем 2317 { 2318 CLIST *tt; 2319 tt=FindContactByUin(t->uin); 2320 tt->just_now=0; 2321 } 2322 2323 if(t->uin==UIN)//если нажали на Loopback, то обнуляем все just_now'ы 2324 { 2325 CLIST *tt; 2326 tt=(CLIST *)(&cltop); 2327 while(tt=(CLIST *)(tt->next)) 2328 { 2329 if(tt->just_now) tt->just_now=0; 2330 } 2331 } 2332 2333 if(strlen(ContactT9Key)) ClearContactT9Key(); 2334 RecountMenu(NULL,0); 2335 } 2336 return(-1); 2337 } 2338 2339 if (key==RIGHT_BUTTON) 2340 { 2341 //Послать запрос текста XStatus 2342 if (t) 2343 { 2344 if (!t->isgroup) 2345 { 2346 FreeXText(t); 2347 t->req_xtext=0; 2348 RequestXText(t->uin); 2349 RefreshGUI(); 2350 return(-1); 2351 } 2352 } 2353 } 2354 } 2355 2356 if (msg->gbsmsg->msg==LONG_PRESS) 2357 { 2358 LongPressAction(t,msg->gbsmsg->submess); 2359 2360 int key=msg->gbsmsg->submess; 2361 if ((key>='0')&&(key<='9')) 2362 { 2363 ClearContactT9Key(); 2364 UpdateCLheader(); 2365 RecountMenu(NULL,1); 2366 } 2367 } 2368 return(0); 2369 } 2370 #endif //USE_MLMENU 2371 \ In segment CODE, align 4, keep-with-next 2372 void GetOnTotalContact(int group_id,int *_onlinetotal) 2373 { 2374 CLIST *t; 2375 t=(CLIST *)&cltop; \ GetOnTotalContact: \ 00000000 ........ LDR R2,??DataTable78 ;; i_rc + 1028 \ 00000004 30002DE9 PUSH {R4,R5} 2376 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 2377 while((t=t->next)) 2378 { 2379 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 2380 { 2381 total++; 2382 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 2383 } 2384 } \ ??GetOnTotalContact_0: \ 00000040 002092E5 LDR R2,[R2, #+0] \ 00000044 000052E3 CMP R2,#+0 \ 00000048 F3FFFF1A BNE ??GetOnTotalContact_1 2385 _onlinetotal[0]=online; \ 0000004C 003081E5 STR R3,[R1, #+0] 2386 _onlinetotal[1]=total; \ 00000050 04C081E5 STR R12,[R1, #+4] 2387 } \ 00000054 3000BDE8 POP {R4,R5} \ 00000058 1EFF2FE1 BX LR ;; return 2388 2389 #ifdef USE_MLMENU 2390 void contactlist_menu_iconhndl(void *data, int curitem, void *unk) 2391 { 2392 CLIST *t; 2393 #ifdef USE_MLMENU 2394 void *item=AllocMLMenuItem(data); 2395 #else 2396 void *item=AllocMenuItem(data); 2397 #endif 2398 int icon; 2399 2400 WSHDR *ws2; 2401 #ifdef USE_MLMENU 2402 WSHDR *ws4; 2403 #endif 2404 WSHDR ws1loc, *ws1; 2405 unsigned short num[128]; 2406 ws1=CreateLocalWS(&ws1loc,num,128); 2407 #ifdef USE_MLMENU 2408 WSHDR ws3loc, *ws3; 2409 unsigned short num3[128]; 2410 ws3=CreateLocalWS(&ws3loc,num3,128); 2411 char s[64]; 2412 #endif 2413 t=FindContactByN(curitem); 2414 if (t) 2415 { 2416 icon=GetIconIndex(t); 2417 if (icon!=IS_GROUP) 2418 { 2419 if(t->just_now) 2420 { 2421 char *test=malloc(64); 2422 sprintf(test, ">> %s <<", t->name); 2423 wsprintf(ws1,percent_t,test); 2424 mfree(test); 2425 } 2426 else 2427 wsprintf(ws1,percent_t,t->name); 2428 if (t->just_now) 2429 { 2430 wsInsertChar(ws1,0x0004,1); 2431 wsInsertChar(ws1,0xE008,1); 2432 } 2433 else 2434 if (t->isactive) 2435 { 2436 wsInsertChar(ws1,0x0002,1); 2437 wsInsertChar(ws1,0xE008,1); 2438 } 2439 2440 #ifdef USE_MLMENU 2441 if ((t->xtext && t->xtext[0]!=0) && (t->isShowXst) && (t->state!=0xFFFF))//Если контакт онлайн и показывать хстату 2442 { 2443 int i; 2444 zeromem(s,64); 2445 i=t->xtext[0]; 2446 if (i>63) i=63; 2447 strncpy(s,t->xtext+1,i); 2448 wsprintf(ws3,"%c%t",0xE012,s); 2449 } 2450 else 2451 if(t->xtext2 && t->xtext2[0]!=0 && isLogStatusChange) 2452 { 2453 int i; 2454 zeromem(s,64); 2455 i=t->xtext2[0]; 2456 if (i>63) i=63; 2457 strncpy(s,t->xtext2+1,i); 2458 wsprintf(ws3,"%c%t",0xE012,s); 2459 } 2460 else 2461 wsprintf(ws3,percent_d,t->uin); 2462 if ((t->xstatexstate)) 2463 { 2464 wsInsertChar(ws3,FIRST_UCS2_BITMAP+t->xstate,1); 2465 } 2466 #endif 2467 } 2468 else 2469 { 2470 int onlinetotal[2]; 2471 GetOnTotalContact(t->group,onlinetotal); 2472 #ifdef USE_MLMENU 2473 wsprintf(ws1,percent_t,t->name); 2474 wsprintf(ws3,"(%d/%d)",onlinetotal[0],onlinetotal[1]); 2475 #else 2476 wsprintf(ws1,"%t%c%c(%d/%d)",t->name,0xE01D,0xE012,onlinetotal[0],onlinetotal[1]); 2477 #endif 2478 if (t->state) icon++; //Модификация иконки группы 2479 } 2480 } 2481 else 2482 { 2483 wsprintf(ws1, LG_CLERROR); 2484 } 2485 ws2=AllocMenuWS(data,ws1->wsbody[0]+1); 2486 wstrcpy(ws2,ws1); 2487 2488 /* 2489 #ifdef kluchnik 2490 if ((t->xstatexstate)) 2491 { 2492 wsInsertChar(ws2,NumXStatusToIconBar+t->xstate,1); 2493 } 2494 #endif 2495 */ 2496 2497 SetMenuItemIconArray(data, item, S_ICONS+icon); 2498 #ifdef USE_MLMENU 2499 ws4=AllocMenuWS(data,ws3->wsbody[0]); 2500 wstrcpy(ws4,ws3); 2501 SetMLMenuItemText(data, item, ws2, ws4, curitem); 2502 #else 2503 SetMenuItemText(data, item, ws2, curitem); 2504 #endif 2505 } 2506 #endif //USE_MLMENU 2507 2508 //=============================================================================================== 2509 2510 int DNR_ID=0; 2511 int DNR_TRIES=3; 2512 2513 char hostname[128]; //2058 che toka 128? :) 2514 2515 int host_counter = 0; 2516 2517 //--------------------------------------------------------------------------- 2518 \ In segment CODE, align 4, keep-with-next 2519 const char *GetHost(int cnt, const char *str, char *buf) 2520 { 2521 const char *tmp = str, *begin, *end; \ GetHost: \ 00000000 0130A0E1 MOV R3,R1 2522 if(cnt) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0100001A BNE ??GetHost_0 \ 0000000C 180000EA B ??GetHost_1 2523 { 2524 for(;cnt;cnt--) 2525 { 2526 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 2527 if(!*str) str = tmp; \ 00000030 00005CE3 CMP R12,#+0 \ 00000034 0200001A BNE ??GetHost_3 \ 00000038 0310A0E1 MOV R1,R3 \ 0000003C 000000EA B ??GetHost_3 2528 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 2529 if(!*str) str = tmp; \ ??GetHost_5: \ 00000064 00005CE3 CMP R12,#+0 \ 00000068 0310A001 MOVEQ R1,R3 2530 } \ 0000006C 010050E2 SUBS R0,R0,#+1 \ 00000070 E7FFFF1A BNE ??GetHost_0 2531 } 2532 tmp = buf; \ ??GetHost_1: \ 00000074 0200A0E1 MOV R0,R2 2533 begin = str; \ 00000078 0130A0E1 MOV R3,R1 \ 0000007C 000000EA B ??GetHost_6 2534 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 2535 end = str; 2536 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 2548 } 2549 } 2550 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 2551 int GetPort(int cnt, const char *str) 2552 { \ GetPort: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 2553 const char *tmp = str; \ 00000008 01C0A0E1 MOV R12,R1 2554 char numbuf[6], numcnt = 0; \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 0030A0E3 MOV R3,#+0 2555 if(cnt) \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0100001A BNE ??GetPort_0 \ 0000001C 180000EA B ??GetPort_1 2556 { 2557 for(;cnt;cnt--) 2558 { 2559 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 2560 if(!*str) str = tmp; \ 00000040 000054E3 CMP R4,#+0 \ 00000044 0200001A BNE ??GetPort_3 \ 00000048 0C10A0E1 MOV R1,R12 \ 0000004C 000000EA B ??GetPort_3 2561 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 2562 if(!*str) str = tmp; \ ??GetPort_5: \ 00000074 000054E3 CMP R4,#+0 \ 00000078 0C10A001 MOVEQ R1,R12 2563 } \ 0000007C 010050E2 SUBS R0,R0,#+1 \ 00000080 E7FFFF1A BNE ??GetPort_0 2564 } 2565 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 2566 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} 2567 str++; 2568 numbuf[5] = 0; \ 000000BC 0520CDE5 STRB R2,[SP, #+5] \ 000000C0 030000EA B ??GetPort_7 2569 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 2570 numbuf[numcnt] = 0; //2058 \ ??GetPort_9: \ 00000100 0020C0E5 STRB R2,[R0, #+0] 2571 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 2572 2573 } 2574 // 2575 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 2576 int GetHostsCount(const char *str) 2577 { 2578 char cnt = 1; \ GetHostsCount: \ 00000000 0110A0E3 MOV R1,#+1 \ 00000004 000000EA B ??GetHostsCount_0 2579 for(;cnt;cnt++) 2580 { 2581 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 2582 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 2583 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 2584 if(!*str) return cnt; \ ??GetHostsCount_5: \ 0000005C 000052E3 CMP R2,#+0 \ 00000060 F2FFFF0A BEQ ??GetHostsCount_3 2585 } \ 00000064 011081E2 ADD R1,R1,#+1 \ 00000068 FF1011E2 ANDS R1,R1,#0xFF \ 0000006C E6FFFF1A BNE ??GetHostsCount_0 2586 return 0; \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 1EFF2FE1 BX LR ;; return 2587 } 2588 //--------------------------------------------------------------------------- 2589 \ In segment CODE, align 4, keep-with-next 2590 void create_connect(void) 2591 { \ create_connect: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2592 // static int host_counter = 0; 2593 char hostbuf[128], buf[128]; 2594 int hostport; 2595 int ***p_res=NULL; 2596 void do_reconnect(void); 2597 SOCK_ADDR sa; 2598 //Устанавливаем соединение 2599 connect_state = 0; \ 00000004 ........ LDR R5,??DataTable86 ;; i_rc 2600 int err; 2601 unsigned int ip; 2602 GBS_DelTimer(&reconnect_tmr); 2603 if (!IsGPRSEnabled()) \ 00000008 ........ LDR R8,??DataTable80 ;; Canvas \ 0000000C 45DF4DE2 SUB SP,SP,#+276 \ 00000010 0040A0E3 MOV R4,#+0 \ 00000014 00408DE5 STR R4,[SP, #+0] \ 00000018 DC4385E5 STR R4,[R5, #+988] \ 0000001C 5800A0E3 MOV R0,#+88 \ 00000020 780D80E3 ORR R0,R0,#0x1E00 \ 00000024 056080E0 ADD R6,R0,R5 \ 00000028 0600A0E1 MOV R0,R6 \ 0000002C 8C0100EF SWI +396 \ 00000030 3800A0E3 MOV R0,#+56 \ 00000034 700D80E3 ORR R0,R0,#0x1C00 \ 00000038 057080E0 ADD R7,R0,R5 \ 0000003C A70000EF SWI +167 \ 00000040 000050E3 CMP R0,#+0 \ 00000044 0400001A BNE ??create_connect_0 2604 { 2605 is_gprs_online=0; \ 00000048 FC4385E5 STR R4,[R5, #+1020] 2606 strcpy(logmsg,LG_GRWAITFORGPRS); \ 0000004C C01088E2 ADD R1,R8,#+192 \ 00000050 0700A0E1 MOV R0,R7 \ 00000054 1A0000EF SWI +26 2607 SMART_REDRAW(); \ 00000058 870000EA B ??create_connect_1 2608 return; 2609 } 2610 DNR_ID=0; 2611 *socklasterr()=0; 2612 if(host_counter > GetHostsCount(NATICQ_HOST)-1) host_counter = 0; //2058 \ ??create_connect_0: \ 0000005C 98929FE5 LDR R9,??create_connect_2+0x4 ;; NATICQ_HOST \ 00000060 244485E5 STR R4,[R5, #+1060] \ 00000064 7C8100EF SWI +33148 \ 00000068 004080E5 STR R4,[R0, #+0] \ 0000006C 0900A0E1 MOV R0,R9 \ 00000070 ........ BL GetHostsCount \ 00000074 2C1495E5 LDR R1,[R5, #+1068] \ 00000078 010040E2 SUB R0,R0,#+1 \ 0000007C 010050E1 CMP R0,R1 \ 00000080 2C4485B5 STRLT R4,[R5, #+1068] 2613 GetHost(host_counter, NATICQ_HOST, hostbuf); \ 00000084 2C0495E5 LDR R0,[R5, #+1068] \ 00000088 14208DE2 ADD R2,SP,#+20 \ 0000008C 0910A0E1 MOV R1,R9 \ 00000090 ........ BL GetHost 2614 hostport = GetPort(host_counter, NATICQ_HOST); \ 00000094 2C0495E5 LDR R0,[R5, #+1068] \ 00000098 0910A0E1 MOV R1,R9 \ 0000009C ........ BL GetPort \ 000000A0 0090A0E1 MOV R9,R0 2615 host_counter++; \ 000000A4 2C0495E5 LDR R0,[R5, #+1068] 2616 2617 sprintf(hostname, "Connect to %s:%d", hostbuf, hostport); //2058 - stavim hostname, izbavlyaemsya ot buf \ 000000A8 0930A0E1 MOV R3,R9 \ 000000AC 010080E2 ADD R0,R0,#+1 \ 000000B0 2C0485E5 STR R0,[R5, #+1068] \ 000000B4 14208DE2 ADD R2,SP,#+20 \ 000000B8 D81088E2 ADD R1,R8,#+216 \ 000000BC 8800A0E3 MOV R0,#+136 \ 000000C0 7C0D80E3 ORR R0,R0,#0x1F00 \ 000000C4 050080E0 ADD R0,R0,R5 \ 000000C8 160000EF SWI +22 2618 //strcpy(hostbuf2, hostbuf); //vyvod host v get_online_time 2619 zeromem(hostbuf2,128); \ 000000CC 0800A0E3 MOV R0,#+8 \ 000000D0 7C0D80E3 ORR R0,R0,#0x1F00 \ 000000D4 05A080E0 ADD R10,R0,R5 \ 000000D8 8010A0E3 MOV R1,#+128 \ 000000DC 0A00A0E1 MOV R0,R10 \ 000000E0 1D0100EF SWI +285 2620 sprintf(hostbuf2, percent_s,hostbuf); \ 000000E4 14208DE2 ADD R2,SP,#+20 \ 000000E8 081088E2 ADD R1,R8,#+8 \ 000000EC 0A00A0E1 MOV R0,R10 2621 strcpy(logmsg,buf); 2622 SMART_REDRAW(); 2623 2624 ip=str2ip(hostbuf); \ 000000F0 ........ LDR R10,??DataTable81 ;; do_reconnect \ 000000F4 160000EF SWI +22 \ 000000F8 94108DE2 ADD R1,SP,#+148 \ 000000FC 0700A0E1 MOV R0,R7 \ 00000100 1A0000EF SWI +26 \ 00000104 ........ BL SMART_REDRAW \ 00000108 14008DE2 ADD R0,SP,#+20 \ 0000010C B70100EF SWI +439 \ 00000110 04B0E0E1 MVN R11,R4 \ 00000114 0B0050E1 CMP R0,R11 \ 00000118 0500000A BEQ ??create_connect_3 2625 if (ip!=0xFFFFFFFF) 2626 { 2627 sa.ip=ip; \ 0000011C 08008DE5 STR R0,[SP, #+8] 2628 strcpy(logmsg,"\nConnect by IP!"); //strcat->strcpy \ 00000120 EC1088E2 ADD R1,R8,#+236 \ 00000124 0700A0E1 MOV R0,R7 \ 00000128 1A0000EF SWI +26 2629 SMART_REDRAW(); \ 0000012C ........ BL SMART_REDRAW 2630 goto L_CONNECT; \ 00000130 3B0000EA B ??create_connect_4 2631 } \ ??create_connect_3: \ 00000134 6F1F8FE2 ADR R1,??create_connect_2 ;; "\n" \ 00000138 0700A0E1 MOV R0,R7 2632 strcat(logmsg,"\n"); \ 0000013C 170000EF SWI +23 2633 strcpy(logmsg,LG_GRSENDDNR); //strcat->strcpy \ 00000140 FC1088E2 ADD R1,R8,#+252 \ 00000144 0700A0E1 MOV R0,R7 \ 00000148 1A0000EF SWI +26 2634 SMART_REDRAW(); \ 0000014C ........ BL SMART_REDRAW 2635 err=async_gethostbyname(hostbuf,&p_res,&DNR_ID); //03461351 3<70<19<81 \ 00000150 2400A0E3 MOV R0,#+36 \ 00000154 400E80E3 ORR R0,R0,#0x400 \ 00000158 052080E0 ADD R2,R0,R5 \ 0000015C 0D10A0E1 MOV R1,SP \ 00000160 14008DE2 ADD R0,SP,#+20 \ 00000164 B60100EF SWI +438 \ 00000168 0030B0E1 MOVS R3,R0 2636 if (err) \ 0000016C 1600000A BEQ ??create_connect_5 2637 { 2638 if ((err==0xC9)||(err==0xD6)) \ 00000170 C90053E3 CMP R3,#+201 \ 00000174 D6005313 CMPNE R3,#+214 \ 00000178 0600001A BNE ??create_connect_6 2639 { 2640 if (DNR_ID) \ 0000017C 240495E5 LDR R0,[R5, #+1060] \ 00000180 000050E3 CMP R0,#+0 \ 00000184 1000000A BEQ ??create_connect_5 2641 { 2642 host_counter--; \ 00000188 2C0495E5 LDR R0,[R5, #+1068] \ 0000018C 010040E2 SUB R0,R0,#+1 \ 00000190 2C0485E5 STR R0,[R5, #+1068] 2643 return; //Ждем готовности DNR \ 00000194 390000EA B ??create_connect_7 2644 } 2645 } 2646 else 2647 { 2648 snprintf(logmsg,255,LG_GRDNRERROR,err); \ ??create_connect_6: \ 00000198 422F88E2 ADD R2,R8,#+264 \ 0000019C FF10A0E3 MOV R1,#+255 \ 000001A0 0700A0E1 MOV R0,R7 \ 000001A4 1B0100EF SWI +283 2649 SMART_REDRAW(); \ 000001A8 ........ BL SMART_REDRAW 2650 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ ??create_connect_8: \ 000001AC ........ LDR R0,??DataTable82 ;; RECONNECT_TIME \ 000001B0 0A20A0E1 MOV R2,R10 \ 000001B4 000090E5 LDR R0,[R0, #+0] \ 000001B8 D830A0E3 MOV R3,#+216 \ 000001BC 930001E0 MUL R1,R3,R0 \ 000001C0 0600A0E1 MOV R0,R6 \ 000001C4 4D0000EF SWI +77 2651 return; \ 000001C8 2C0000EA B ??create_connect_7 2652 } 2653 } 2654 if (p_res) \ ??create_connect_5: \ 000001CC 00009DE5 LDR R0,[SP, #+0] \ 000001D0 000050E3 CMP R0,#+0 \ 000001D4 3D00000A BEQ ??create_connect_9 2655 { 2656 if (p_res[3]) \ 000001D8 0C0090E5 LDR R0,[R0, #+12] \ 000001DC 000050E3 CMP R0,#+0 \ 000001E0 4200000A BEQ ??create_connect_10 2657 { 2658 strcpy(logmsg,buf); \ 000001E4 94108DE2 ADD R1,SP,#+148 \ 000001E8 0700A0E1 MOV R0,R7 \ 000001EC 1A0000EF SWI +26 2659 strcat(logmsg,"\n"); \ 000001F0 401F8FE2 ADR R1,??create_connect_2 ;; "\n" \ 000001F4 0700A0E1 MOV R0,R7 \ 000001F8 170000EF SWI +23 2660 strcpy(logmsg,LG_GRDNROK); \ 000001FC 461F88E2 ADD R1,R8,#+280 \ 00000200 0700A0E1 MOV R0,R7 \ 00000204 1A0000EF SWI +26 2661 SMART_REDRAW(); \ 00000208 ........ BL SMART_REDRAW 2662 DNR_TRIES=0; \ 0000020C 284485E5 STR R4,[R5, #+1064] 2663 sa.ip=p_res[3][0][0]; \ 00000210 00109DE5 LDR R1,[SP, #+0] \ 00000214 0C1091E5 LDR R1,[R1, #+12] \ 00000218 001091E5 LDR R1,[R1, #+0] \ 0000021C 001091E5 LDR R1,[R1, #+0] \ 00000220 08108DE5 STR R1,[SP, #+8] 2664 L_CONNECT: 2665 sock=socket(1,1,0); \ ??create_connect_4: \ 00000224 0020A0E3 MOV R2,#+0 \ 00000228 0110A0E3 MOV R1,#+1 \ 0000022C 0100A0E1 MOV R0,R1 \ 00000230 730100EF SWI +371 \ 00000234 E00385E5 STR R0,[R5, #+992] 2666 if (sock!=-1) \ 00000238 0B0050E1 CMP R0,R11 \ 0000023C 1A00000A BEQ ??create_connect_11 2667 { 2668 sa.family=1; \ 00000240 0170A0E3 MOV R7,#+1 \ 00000244 B470CDE1 STRH R7,[SP, #+4] 2669 sa.port=htons(hostport); \ 00000248 0908A0E1 MOV R0,R9, LSL #+16 \ 0000024C 2008A0E1 MOV R0,R0, LSR #+16 \ 00000250 7A0100EF SWI +378 \ 00000254 B600CDE1 STRH R0,[SP, #+6] 2670 // sa.ip=htonl(IP_ADDR(82,207,89,182)); 2671 if (connect(sock,&sa,sizeof(sa))!=-1) \ 00000258 E00395E5 LDR R0,[R5, #+992] \ 0000025C 1020A0E3 MOV R2,#+16 \ 00000260 04108DE2 ADD R1,SP,#+4 \ 00000264 740100EF SWI +372 \ 00000268 0B0050E1 CMP R0,R11 \ 0000026C 0500000A BEQ ??create_connect_12 2672 { 2673 connect_state=1; \ 00000270 DC7385E5 STR R7,[R5, #+988] 2674 TOTALRECEIVED=0; \ 00000274 E44385E5 STR R4,[R5, #+996] 2675 TOTALSENDED=0; \ 00000278 E84385E5 STR R4,[R5, #+1000] 2676 SMART_REDRAW(); \ ??create_connect_1: \ 0000027C ........ BL SMART_REDRAW \ ??create_connect_7: \ 00000280 45DF8DE2 ADD SP,SP,#+276 \ 00000284 F08FBDE8 POP {R4-R11,PC} 2677 } 2678 else 2679 { 2680 closesocket(sock); \ ??create_connect_12: \ 00000288 E00395E5 LDR R0,[R5, #+992] \ 0000028C 760100EF SWI +374 2681 sock=-1; \ 00000290 E0B385E5 STR R11,[R5, #+992] 2682 LockSched(); \ 00000294 460100EF SWI +326 2683 ShowMSG(1,(int)LG_MSGCANTCONN); \ 00000298 4C1F88E2 ADD R1,R8,#+304 \ 0000029C 0100A0E3 MOV R0,#+1 \ 000002A0 480100EF SWI +328 2684 UnlockSched(); \ 000002A4 470100EF SWI +327 2685 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 000002A8 BFFFFFEA B ??create_connect_8 2686 2687 } 2688 } 2689 else 2690 { 2691 LockSched(); \ ??create_connect_11: \ 000002AC 460100EF SWI +326 2692 ShowMSG(1,(int)LG_MSGCANTCRSC); \ 000002B0 531F88E2 ADD R1,R8,#+332 \ 000002B4 0100A0E3 MOV R0,#+1 \ 000002B8 480100EF SWI +328 2693 UnlockSched(); \ 000002BC 470100EF SWI +327 2694 //Не осилили создания сокета, закрываем GPRS-сессию 2695 GPRS_OnOff(0,1); \ 000002C0 0110A0E3 MOV R1,#+1 \ 000002C4 0000A0E3 MOV R0,#+0 \ 000002C8 8E0100EF SWI +398 \ 000002CC EBFFFFEA B ??create_connect_7 2696 } 2697 } 2698 } 2699 else 2700 { 2701 DNR_TRIES--; \ ??create_connect_9: \ 000002D0 280495E5 LDR R0,[R5, #+1064] \ 000002D4 010040E2 SUB R0,R0,#+1 \ 000002D8 280485E5 STR R0,[R5, #+1064] 2702 LockSched(); \ 000002DC 460100EF SWI +326 2703 ShowMSG(1,(int)LG_MSGHOSTNFND); \ 000002E0 5E1F88E2 ADD R1,R8,#+376 \ 000002E4 0100A0E3 MOV R0,#+1 \ 000002E8 480100EF SWI +328 2704 UnlockSched(); \ 000002EC 470100EF SWI +327 \ ??create_connect_10: \ 000002F0 45DF8DE2 ADD SP,SP,#+276 ;; stack cleaning \ 000002F4 F08FBDE8 POP {R4-R11,PC} ;; return \ ??create_connect_2: \ 000002F8 0A000000 DC8 "\n",+0,+0 \ 000002FC ........ DC32 NATICQ_HOST 2705 } 2706 } 2707 2708 #ifdef SEND_TIMER 2709 GBSTMR send_tmr; 2710 #endif 2711 \ In segment CODE, align 4, keep-with-next 2712 void ClearSendQ(void) 2713 { \ ClearSendQ: \ 00000000 10402DE9 PUSH {R4,LR} 2714 mfree((void *)sendq_p); \ 00000004 ........ LDR R4,??DataTable86 ;; i_rc \ 00000008 F80394E5 LDR R0,[R4, #+1016] \ 0000000C 150000EF SWI +21 2715 sendq_p=NULL; \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 F80384E5 STR R0,[R4, #+1016] 2716 sendq_l=NULL; \ 00000018 F40384E5 STR R0,[R4, #+1012] 2717 #ifdef SEND_TIMER 2718 GBS_DelTimer(&send_tmr); 2719 #endif 2720 } \ 0000001C 1080BDE8 POP {R4,PC} ;; return 2721 \ In segment CODE, align 4, keep-with-next 2722 void end_socket(void) 2723 { \ end_socket: \ 00000000 10402DE9 PUSH {R4,LR} 2724 if (sock>=0) \ 00000004 ........ LDR R4,??DataTable86 ;; i_rc \ 00000008 E00394E5 LDR R0,[R4, #+992] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD48 POPMI {R4,PC} 2725 { 2726 shutdown(sock,2); \ 00000014 0210A0E3 MOV R1,#+2 \ 00000018 770100EF SWI +375 2727 closesocket(sock); \ 0000001C E00394E5 LDR R0,[R4, #+992] \ 00000020 760100EF SWI +374 2728 } 2729 #ifdef SEND_TIMER 2730 GBS_DelTimer(&send_tmr); 2731 #endif 2732 } \ 00000024 1080BDE8 POP {R4,PC} ;; return 2733 2734 #ifdef SEND_TIMER 2735 static void resend(void) 2736 { 2737 void SendAnswer(int dummy, TPKT *p); 2738 SUBPROC((void*)SendAnswer,0,0); 2739 } 2740 #endif 2741 \ In segment CODE, align 4, keep-with-next 2742 void SendAnswer(int dummy, TPKT *p) 2743 { \ SendAnswer: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 2744 int i; 2745 int j; 2746 if (connect_state<2) \ 00000004 ........ LDR R4,??DataTable86 ;; i_rc \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C DC0394E5 LDR R0,[R4, #+988] \ 00000010 020050E3 CMP R0,#+2 \ 00000014 020000AA BGE ??SendAnswer_0 2747 { 2748 mfree(p); \ 00000018 0600A0E1 MOV R0,R6 \ 0000001C 150000EF SWI +21 2749 return; \ 00000020 F083BDE8 POP {R4-R9,PC} 2750 } 2751 if (p) \ ??SendAnswer_0: \ 00000024 000056E3 CMP R6,#+0 \ 00000028 2600000A BEQ ??SendAnswer_1 2752 { 2753 j=sizeof(PKT)+p->pkt.data_len; //Размер пакета \ 0000002C B600D6E1 LDRH R0,[R6, #+6] \ 00000030 085080E2 ADD R5,R0,#+8 2754 TOTALSENDED+=j; \ 00000034 E80394E5 LDR R0,[R4, #+1000] \ 00000038 000085E0 ADD R0,R5,R0 \ 0000003C E80384E5 STR R0,[R4, #+1000] 2755 ALLTOTALSENDED+=j; //by BoBa 10.07 \ 00000040 F00394E5 LDR R0,[R4, #+1008] \ 00000044 000085E0 ADD R0,R5,R0 \ 00000048 F00384E5 STR R0,[R4, #+1008] 2756 //Проверяем, не надо ли добавить в очередь 2757 if (sendq_p) \ 0000004C F80394E5 LDR R0,[R4, #+1016] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0F00000A BEQ ??SendAnswer_2 2758 { 2759 //Есть очередь, добавляем в нее 2760 sendq_p=realloc((void *)sendq_p,sendq_l+j); \ 00000058 F41394E5 LDR R1,[R4, #+1012] \ 0000005C 011085E0 ADD R1,R5,R1 \ 00000060 BA0000EF SWI +186 \ 00000064 F80384E5 STR R0,[R4, #+1016] 2761 memcpy((char *)sendq_p+sendq_l,p,j); \ 00000068 F40394E5 LDR R0,[R4, #+1012] \ 0000006C F83394E5 LDR R3,[R4, #+1016] \ 00000070 0520A0E1 MOV R2,R5 \ 00000074 0610A0E1 MOV R1,R6 \ 00000078 030080E0 ADD R0,R0,R3 \ 0000007C 1E0100EF SWI +286 2762 mfree(p); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 150000EF SWI +21 2763 sendq_l+=j; \ 00000088 F40394E5 LDR R0,[R4, #+1012] \ 0000008C 000085E0 ADD R0,R5,R0 \ 00000090 F40384E5 STR R0,[R4, #+1012] 2764 return; \ 00000094 F083BDE8 POP {R4-R9,PC} 2765 } 2766 sendq_p=p; \ ??SendAnswer_2: \ 00000098 F86384E5 STR R6,[R4, #+1016] 2767 sendq_l=j; \ 0000009C F45384E5 STR R5,[R4, #+1012] \ 000000A0 080000EA B ??SendAnswer_1 2768 } 2769 //Отправляем уже существующее в очереди 2770 while((i=sendq_l)!=0) 2771 { 2772 if (i>0x400) i=0x400; 2773 j=send(sock,(void *)sendq_p,i,0); 2774 snprintf(logmsg,255,"send res %d",j); 2775 SMART_REDRAW(); 2776 if (j<0) 2777 { 2778 j=*socklasterr(); 2779 if ((j==0xC9)||(j==0xD6)) 2780 { 2781 //Передали что хотели 2782 strcpy(logmsg,"Send delayed..."); 2783 return; //Видимо, надо ждать сообщения ENIP_BUFFER_FREE 2784 } 2785 else 2786 { 2787 //Ошибка 2788 LockSched(); 2789 ShowMSG(1,(int)"Send error!"); 2790 UnlockSched(); 2791 end_socket(); 2792 return; 2793 } 2794 } 2795 memcpy((void *)sendq_p,(char *)sendq_p+j,sendq_l-=j); //Удалили переданное \ ??SendAnswer_3: \ 000000A4 F40394E5 LDR R0,[R4, #+1012] \ 000000A8 052040E0 SUB R2,R0,R5 \ 000000AC F42384E5 STR R2,[R4, #+1012] \ 000000B0 F80394E5 LDR R0,[R4, #+1016] \ 000000B4 001085E0 ADD R1,R5,R0 \ 000000B8 1E0100EF SWI +286 2796 if (j` \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 400E80E3 ORR R0,R0,#0x400 \ 000000E8 000057E1 CMP R7,R0 \ 000000EC E00394E5 LDR R0,[R4, #+992] \ 000000F0 407EA0A3 MOVGE R7,#+1024 \ 000000F4 0030A0E3 MOV R3,#+0 \ 000000F8 0720A0E1 MOV R2,R7 \ 000000FC 790100EF SWI +377 \ 00000100 0050A0E1 MOV R5,R0 \ 00000104 3800A0E3 MOV R0,#+56 \ 00000108 700D80E3 ORR R0,R0,#0x1C00 \ 0000010C 048080E0 ADD R8,R0,R4 \ 00000110 0530A0E1 MOV R3,R5 \ 00000114 0920A0E1 MOV R2,R9 \ 00000118 FF10A0E3 MOV R1,#+255 \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 1B0100EF SWI +283 \ 00000124 ........ BL SMART_REDRAW \ 00000128 000055E3 CMP R5,#+0 \ 0000012C DCFFFF5A BPL ??SendAnswer_3 \ 00000130 7C8100EF SWI +33148 \ 00000134 005090E5 LDR R5,[R0, #+0] \ 00000138 C90055E3 CMP R5,#+201 \ 0000013C D6005513 CMPNE R5,#+214 \ 00000140 0300001A BNE ??SendAnswer_6 \ 00000144 0C1089E2 ADD R1,R9,#+12 \ 00000148 0800A0E1 MOV R0,R8 \ 0000014C 1A0000EF SWI +26 \ 00000150 F083BDE8 POP {R4-R9,PC} \ ??SendAnswer_6: \ 00000154 460100EF SWI +326 \ 00000158 1C1089E2 ADD R1,R9,#+28 \ 0000015C 0100A0E3 MOV R0,#+1 \ 00000160 480100EF SWI +328 \ 00000164 470100EF SWI +327 \ 00000168 ........ BL end_socket \ 0000016C F083BDE8 POP {R4-R9,PC} 2805 } 2806 mfree((void *)sendq_p); \ ??SendAnswer_4: \ 00000170 0100A0E1 MOV R0,R1 \ 00000174 150000EF SWI +21 2807 sendq_p=NULL; \ 00000178 F86384E5 STR R6,[R4, #+1016] 2808 } \ 0000017C F083BDE8 POP {R4-R9,PC} ;; return \ ??SendAnswer_5: \ 00000180 ........ DC32 `?` 2809 2810 \ In segment CODE, align 4, keep-with-next 2811 void send_login(int dummy, TPKT *p) 2812 { 2813 connect_state=2; 2814 char rev[16]; 2815 //Кто будет менять в этом месте идентификатор клиента, буду банить на уровне сервера!!! 2816 //А Вова будет банить на форуме! 2817 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,??DataTable86 ;; i_rc \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 0200A0E3 MOV R0,#+2 \ 0000001C DC0386E5 STR R0,[R6, #+988] \ 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 2818 2819 TPKT *p2=malloc(sizeof(PKT)+8); \ 00000034 1000A0E3 MOV R0,#+16 \ 00000038 140000EF SWI +20 \ 0000003C 0070A0E1 MOV R7,R0 2820 p2->pkt.uin=UIN; \ 00000040 ........ LDR R0,??DataTable88 ;; UIN 2821 p2->pkt.type=T_SETCLIENT_ID; 2822 p2->pkt.data_len=8; 2823 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 2824 SendAnswer(0,p2); \ 0000006C 0710A0E1 MOV R1,R7 \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 ........ BL SendAnswer 2825 SendAnswer(dummy,p); \ 00000078 0510A0E1 MOV R1,R5 \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 ........ BL SendAnswer 2826 RXstate=-(int)sizeof(PKT); \ 00000084 0700E0E3 MVN R0,#+7 \ 00000088 D80386E5 STR R0,[R6, #+984] 2827 } \ 0000008C FF80BDE8 POP {R0-R7,PC} ;; return \ ??send_login_0: \ 00000090 ........ DC32 `?` 2828 \ In segment CODE, align 4, keep-with-next 2829 void do_ping(void) 2830 { \ do_ping: \ 00000000 00402DE9 PUSH {LR} 2831 TPKT *pingp=malloc(sizeof(PKT)); \ 00000004 0800A0E3 MOV R0,#+8 \ 00000008 140000EF SWI +20 2832 pingp->pkt.uin=UIN; \ 0000000C ........ LDR R1,??DataTable88 ;; UIN \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 2833 pingp->pkt.type=0; \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C B410C0E1 STRH R1,[R0, #+4] 2834 pingp->pkt.data_len=0; \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2835 SendAnswer(0,pingp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 0040BDE8 POP {LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 2836 } 2837 \ In segment CODE, align 4, keep-with-next 2838 void SendMSGACK(int i) 2839 { \ SendMSGACK: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 2840 TPKT *ackp=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 2841 ackp->pkt.uin=i; \ 00000010 004080E5 STR R4,[R0, #+0] 2842 ackp->pkt.type=T_MSGACK; \ 00000014 1710A0E3 MOV R1,#+23 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2843 ackp->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2844 SendAnswer(0,ackp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 1040BDE8 POP {R4,LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 2845 } 2846 \ In segment CODE, align 4, keep-with-next 2847 void RequestXText(unsigned int uin) 2848 { \ RequestXText: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 2849 TPKT *p=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 2850 p->pkt.uin=uin; \ 00000010 004080E5 STR R4,[R0, #+0] 2851 p->pkt.type=T_XTEXT_REQ; \ 00000014 1810A0E3 MOV R1,#+24 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2852 p->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2853 SUBPROC((void *)SendAnswer,0,p); \ 00000024 0020A0E1 MOV R2,R0 \ 00000028 ........ LDR R0,??DataTable89 ;; SendAnswer \ 0000002C 710100EF SWI +369 2854 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 2855 2856 extern int main2_count; 2857 2858 int ping_time; 2859 char I_UIN[9]; 2860 char sds[]="%s%d.%s"; 2861 char mp3[]="mp3"; 2862 char wav[]="wav"; 2863 char amr[]="amr"; 2864 \ In segment CODE, align 4, keep-with-next 2865 void get_answer(void) 2866 { \ get_answer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2867 void *p; 2868 int i=RXstate; \ 00000004 ........ LDR R5,??DataTable101 ;; i_rc \ 00000008 42DE4DE2 SUB SP,SP,#+1056 2869 int j; 2870 int n; 2871 char rb[1024]; 2872 char *rp=rb; 2873 if (connect_state<2) return; \ 0000000C DC0395E5 LDR R0,[R5, #+988] \ 00000010 D88395E5 LDR R8,[R5, #+984] \ 00000014 20108DE2 ADD R1,SP,#+32 \ 00000018 00108DE5 STR R1,[SP, #+0] \ 0000001C 020050E3 CMP R0,#+2 \ 00000020 7B0100BA BLT ??get_answer_1 \ 00000024 0A0078E3 CMN R8,#+10 \ 00000028 7901000A BEQ ??get_answer_1 2874 if (i==EOP) return; 2875 j=recv(sock,rb,sizeof(rb),0); \ 0000002C E00395E5 LDR R0,[R5, #+992] \ 00000030 0030A0E3 MOV R3,#+0 \ 00000034 402EA0E3 MOV R2,#+1024 \ 00000038 780100EF SWI +376 \ 0000003C 0060A0E1 MOV R6,R0 \ 00000040 0990A0E3 MOV R9,#+9 \ 00000044 429C89E3 ORR R9,R9,#0x4200 \ 00000048 0E0000EA B ??get_answer_2 2876 while(j>0) 2877 { 2878 if (i<0) 2879 { 2880 //Принимаем заголовок 2881 n=-i; //Требуемое количество байт 2882 if (j=0) 2889 { 2890 //Принимаем тельце ;) 2891 n=RXbuf.pkt.data_len; //Всего в тельце 2892 if (n>16383) 2893 { 2894 //Слишком много 2895 strcpy(logmsg,LG_GRBADPACKET); 2896 end_socket(); 2897 RXstate=EOP; 2898 return; 2899 } 2900 n-=i; //Количество требуемых байт (общая длинна тельца-текущая позиция) 2901 if (n>0) 2902 { 2903 if (jisIndividSet)//Если индивидуальные натсройки(меню на долгое вправо) 2988 { 2989 if(t->issound) Play(sndMsg);//если звук включен то играем 2990 break; 2991 } 2992 else 2993 if(t->automsgcount < automsgcount && away_m)//если сигналы автоответчика 2994 { 2995 Play(sndMsg); 2996 break; 2997 } 2998 else 2999 if(t->isaccess)//если удаленный доступ ;) 3000 { 3001 if(t->signals) Play(sndMsg); 3002 break; 3003 } 3004 else//в остальный случаях 3005 Play(sndMsg); 3006 } 3007 else 3008 { 3009 uins=RXbuf.pkt.uin; 3010 volatile int hFile_ex; 3011 unsigned int io_error_ex = 0; 3012 char ext[4]; 3013 // __root const CFG_CBOX_ITEM cfgcbox18_3_2[2]={"Mp3","Wav","Amr"}; 3014 switch(ext_type_sounds) 3015 { 3016 case 0: sprintf(ext,percent_s,mp3); break; 3017 case 1: sprintf(ext,percent_s,wav); break; 3018 case 2: sprintf(ext,percent_s,amr); break; 3019 default : sprintf(ext,percent_s,mp3); break; 3020 } 3021 3022 sprintf(talk_sound, sds, sndMsg2, uins, ext); 3023 hFile_ex = fopen(talk_sound,A_ReadOnly + A_BIN,P_READ, &io_error_ex); 3024 if(hFile_ex!=-1) 3025 { 3026 fclose(hFile_ex, &io_error_ex); 3027 Play(talk_sound); 3028 } 3029 else 3030 Play(sndMsg); 3031 } 3032 } 3033 break; 3034 case T_SSLRESP: 3035 LockSched(); 3036 ShowMSG(1,(int)RXbuf.data); 3037 UnlockSched(); 3038 break; 3039 case T_SRV_ACK: 3040 if (FindContactLOGQByAck(&RXbuf)) Play(sndMsgSent); 3041 case T_CLIENT_ACK: 3042 p=malloc(sizeof(PKT)+2); 3043 memcpy(p,&RXbuf,sizeof(PKT)+2); 3044 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); 3045 break; 3046 case T_ECHORET: 3047 { 3048 TDate d; 3049 TTime t; 3050 TTime *pt=(TTime *)(RXbuf.data); 3051 int s1; 3052 int s2; 3053 GetDateTime(&d,&t); 3054 s1=t.hour*3600+t.min*60+t.sec; 3055 s2=pt->hour*3600+pt->min*60+pt->sec; 3056 s1-=s2; 3057 if (s1<0) s1+=86400; 3058 curping=s1; 3059 snprintf(logmsg,255,"Ping %d-%d seconds!",s1,s1+1); 3060 sprintf(PINGO, "Ping: %d sec",s1); 3061 LockSched(); 3062 if(janis==1) 3063 { 3064 // ShowMSG(1,(int)logmsg); 3065 PrintTimer=5; 3066 strcpy(prmsg,logmsg); 3067 Play(pingsnd); 3068 janis=0; 3069 } 3070 else 3071 { 3072 if(ping_time==0) 3073 { 3074 ping_time=ping_time_config; 3075 Play(pingsnd); 3076 } 3077 else 3078 ping_time--; 3079 } 3080 UnlockSched(); 3081 } 3082 break; 3083 case T_LASTPRIVACY: 3084 n=i+sizeof(PKT); \ ??get_answer_3: \ 0000004C 0040A0E1 MOV R4,R0 3085 p=malloc(n); \ ??get_answer_4: \ 00000050 140000EF SWI +20 \ 00000054 00B0A0E1 MOV R11,R0 3086 memcpy(p,&RXbuf,n); \ 00000058 0420A0E1 MOV R2,R4 \ ??get_answer_5: \ 0000005C 0710A0E1 MOV R1,R7 \ 00000060 1E0100EF SWI +286 3087 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); \ 00000064 E00395E5 LDR R0,[R5, #+992] \ 00000068 0B30A0E1 MOV R3,R11 \ 0000006C 01002DE9 PUSH {R0} \ 00000070 0020A0E3 MOV R2,#+0 \ 00000074 0810A0E1 MOV R1,R8 \ 00000078 0900A0E1 MOV R0,R9 \ 0000007C 000100EF SWI +256 \ ??get_answer_6: \ 00000080 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning 3088 break; 3089 } 3090 i=-(int)sizeof(PKT); //А может еще есть данные \ ??get_answer_7: \ 00000084 0780E0E3 MVN R8,#+7 \ ??get_answer_2: \ 00000088 010056E3 CMP R6,#+1 \ 0000008C 5F0100BA BLT ??get_answer_8 \ 00000090 84759FE5 LDR R7,??get_answer_9 ;; RXbuf \ 00000094 000058E3 CMP R8,#+0 \ 00000098 0C00005A BPL ??get_answer_10 \ 0000009C 00109DE5 LDR R1,[SP, #+0] \ 000000A0 004068E2 RSB R4,R8,#+0 \ 000000A4 040056E1 CMP R6,R4 \ 000000A8 0640A0B1 MOVLT R4,R6 \ 000000AC 0420A0E1 MOV R2,R4 \ 000000B0 070088E0 ADD R0,R8,R7 \ 000000B4 080080E2 ADD R0,R0,#+8 \ 000000B8 1E0100EF SWI +286 \ 000000BC 00109DE5 LDR R1,[SP, #+0] \ 000000C0 088084E0 ADD R8,R4,R8 \ 000000C4 046046E0 SUB R6,R6,R4 \ 000000C8 011084E0 ADD R1,R4,R1 \ 000000CC 00108DE5 STR R1,[SP, #+0] \ ??get_answer_10: \ 000000D0 000058E3 CMP R8,#+0 \ 000000D4 EBFFFF4A BMI ??get_answer_2 \ 000000D8 B640D7E1 LDRH R4,[R7, #+6] \ 000000DC 3800A0E3 MOV R0,#+56 \ 000000E0 700D80E3 ORR R0,R0,#0x1C00 \ 000000E4 05A080E0 ADD R10,R0,R5 \ 000000E8 400C54E3 CMP R4,#+16384 \ 000000EC 070000BA BLT ??get_answer_11 \ 000000F0 28159FE5 LDR R1,??get_answer_9+0x4 ;; Canvas + 396 \ 000000F4 0A00A0E1 MOV R0,R10 \ 000000F8 1A0000EF SWI +26 \ 000000FC ........ BL end_socket \ 00000100 0900E0E3 MVN R0,#+9 \ 00000104 D80385E5 STR R0,[R5, #+984] \ 00000108 42DE8DE2 ADD SP,SP,#+1056 \ 0000010C F08FBDE8 POP {R4-R11,PC} \ ??get_answer_11: \ 00000110 084044E0 SUB R4,R4,R8 \ 00000114 010054E3 CMP R4,#+1 \ 00000118 0B0000BA BLT ??get_answer_12 \ 0000011C 00109DE5 LDR R1,[SP, #+0] \ 00000120 040056E1 CMP R6,R4 \ 00000124 0640A0B1 MOVLT R4,R6 \ 00000128 0420A0E1 MOV R2,R4 \ 0000012C 070088E0 ADD R0,R8,R7 \ 00000130 080080E2 ADD R0,R0,#+8 \ 00000134 1E0100EF SWI +286 \ 00000138 00109DE5 LDR R1,[SP, #+0] \ 0000013C 088084E0 ADD R8,R4,R8 \ 00000140 046046E0 SUB R6,R6,R4 \ 00000144 011084E0 ADD R1,R4,R1 \ 00000148 00108DE5 STR R1,[SP, #+0] \ ??get_answer_12: \ 0000014C B600D7E1 LDRH R0,[R7, #+6] \ 00000150 080050E1 CMP R0,R8 \ 00000154 CBFFFF1A BNE ??get_answer_2 \ 00000158 E41395E5 LDR R1,[R5, #+996] \ 0000015C 080088E2 ADD R0,R8,#+8 \ 00000160 011080E0 ADD R1,R0,R1 \ 00000164 E41385E5 STR R1,[R5, #+996] \ 00000168 EC1395E5 LDR R1,[R5, #+1004] \ 0000016C 0020A0E3 MOV R2,#+0 \ 00000170 011080E0 ADD R1,R0,R1 \ 00000174 EC1385E5 STR R1,[R5, #+1004] \ 00000178 071088E0 ADD R1,R8,R7 \ 0000017C 0820C1E5 STRB R2,[R1, #+8] \ 00000180 B410D7E1 LDRH R1,[R7, #+4] \ 00000184 094088E2 ADD R4,R8,#+9 \ 00000188 AE80A0E3 MOV R8,#+174 \ 0000018C DE8C88E3 ORR R8,R8,#0xDE00 \ 00000190 031041E2 SUB R1,R1,#+3 \ 00000194 1C0051E3 CMP R1,#+28 \ 00000198 B9FFFF8A BHI ??get_answer_7 \ 0000019C 022F8FE2 ADR R2,??get_answer_0 \ 000001A0 8110A0E1 MOV R1,R1, LSL #+1 \ 000001A4 F12092E1 LDRSH R2,[R2, R1] \ 000001A8 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??get_answer_0: \ 000001AC 48000E00B5FF DC16 +72,+14,+65461,+65 \ 4100 \ 000001B4 2900B5FF2B00 DC16 +41,+65461,+43,+65461 \ B5FF \ 000001BC B5FFB5FFC200 DC16 +65461,+65461,+194,+65461 \ B5FF \ 000001C4 B5FFC800CE00 DC16 +65461,+200,+206,+65461 \ B5FF \ 000001CC D30029002900 DC16 +211,+41,+41,+65461 \ B5FF \ 000001D4 B5FFB5FF2900 DC16 +65461,+65461,+41,+65461 \ B5FF \ 000001DC B5FFB5FFB5FF DC16 +65461,+65461,+65461,+65461 \ B5FF \ 000001E4 A7FF0000 DC16 +65447,+0 \ ??get_answer_13: \ 000001E8 0400A0E1 MOV R0,R4 \ 000001EC 140000EF SWI +20 \ 000001F0 00B0A0E1 MOV R11,R0 \ 000001F4 0420A0E1 MOV R2,R4 \ 000001F8 0710A0E1 MOV R1,R7 \ 000001FC 1E0100EF SWI +286 \ 00000200 E00395E5 LDR R0,[R5, #+992] \ 00000204 0B30A0E1 MOV R3,R11 \ 00000208 01002DE9 PUSH {R0} \ 0000020C 0020A0E3 MOV R2,#+0 \ 00000210 0810A0E1 MOV R1,R8 \ 00000214 0900A0E1 MOV R0,R9 \ 00000218 000100EF SWI +256 \ 0000021C 00049FE5 LDR R0,??get_answer_9+0x8 ;; sndStartup \ 00000220 ........ BL Play \ 00000224 083087E2 ADD R3,R7,#+8 \ 00000228 EB2F8FE2 ADR R2,??get_answer_14 ;; "%s" \ 0000022C FF10A0E3 MOV R1,#+255 \ 00000230 0A00A0E1 MOV R0,R10 \ 00000234 1B0100EF SWI +283 \ 00000238 0300A0E3 MOV R0,#+3 \ 0000023C DC0385E5 STR R0,[R5, #+988] \ 00000240 2C0495E5 LDR R0,[R5, #+1068] \ 00000244 010040E2 SUB R0,R0,#+1 \ 00000248 2C0485E5 STR R0,[R5, #+1068] \ 0000024C ........ BL SMART_REDRAW \ 00000250 8AFFFFEA B ??get_answer_6 \ ??get_answer_15: \ 00000254 0400A0E1 MOV R0,R4 \ 00000258 7CFFFFEA B ??get_answer_4 \ ??get_answer_16: \ 0000025C 0040A0E1 MOV R4,R0 \ 00000260 140000EF SWI +20 \ 00000264 00B0A0E1 MOV R11,R0 \ 00000268 0420A0E1 MOV R2,R4 \ 0000026C 0710A0E1 MOV R1,R7 \ 00000270 1E0100EF SWI +286 \ 00000274 B800D7E1 LDRH R0,[R7, #+8] \ 00000278 A8239FE5 LDR R2,??get_answer_9+0xC ;; Canvas + 408 \ 0000027C FF10A0E3 MOV R1,#+255 \ 00000280 01002DE9 PUSH {R0} \ 00000284 003097E5 LDR R3,[R7, #+0] \ 00000288 0A00A0E1 MOV R0,R10 \ 0000028C 1B0100EF SWI +283 \ 00000290 E00395E5 LDR R0,[R5, #+992] \ 00000294 0B30A0E1 MOV R3,R11 \ 00000298 01002DE9 PUSH {R0} \ 0000029C 0020A0E3 MOV R2,#+0 \ 000002A0 0810A0E1 MOV R1,R8 \ 000002A4 0900A0E1 MOV R0,R9 \ 000002A8 000100EF SWI +256 \ 000002AC 08D08DE2 ADD SP,SP,#+8 \ 000002B0 73FFFFEA B ??get_answer_7 \ ??get_answer_17: \ 000002B4 70239FE5 LDR R2,??get_answer_9+0x10 ;; Canvas + 420 \ 000002B8 083087E2 ADD R3,R7,#+8 \ 000002BC FF10A0E3 MOV R1,#+255 \ 000002C0 0A00A0E1 MOV R0,R10 \ 000002C4 1B0100EF SWI +283 \ 000002C8 ........ BL SMART_REDRAW \ 000002CC 6CFFFFEA B ??get_answer_7 \ ??get_answer_18: \ 000002D0 0400A0E1 MOV R0,R4 \ 000002D4 140000EF SWI +20 \ 000002D8 00B0A0E1 MOV R11,R0 \ 000002DC 0420A0E1 MOV R2,R4 \ 000002E0 0710A0E1 MOV R1,R7 \ 000002E4 1E0100EF SWI +286 \ 000002E8 08008BE2 ADD R0,R11,#+8 \ 000002EC 030000EA B ??get_answer_19 \ ??get_answer_20: \ 000002F0 030051E3 CMP R1,#+3 \ 000002F4 2010A0B3 MOVLT R1,#+32 \ 000002F8 0010C0B5 STRBLT R1,[R0, #+0] \ 000002FC 010080E2 ADD R0,R0,#+1 \ ??get_answer_19: \ 00000300 0010D0E5 LDRB R1,[R0, #+0] \ 00000304 000051E3 CMP R1,#+0 \ 00000308 F8FFFF1A BNE ??get_answer_20 \ 0000030C ........ LDR R0,??DataTable91 ;; addIconBar \ 00000310 002097E5 LDR R2,[R7, #+0] \ 00000314 14139FE5 LDR R1,??get_answer_9+0x14 ;; Canvas + 428 \ 00000318 D00085E5 STR R0,[R5, #+208] \ 0000031C 0800A0E3 MOV R0,#+8 \ 00000320 800D80E3 ORR R0,R0,#0x2000 \ 00000324 054080E0 ADD R4,R0,R5 \ 00000328 0400A0E1 MOV R0,R4 \ 0000032C 160000EF SWI +22 \ 00000330 ........ LDR R0,??DataTable92 ;; ignor_list \ 00000334 0410A0E1 MOV R1,R4 \ 00000338 180100EF SWI +280 \ 0000033C 000050E3 CMP R0,#+0 \ 00000340 4FFFFF1A BNE ??get_answer_7 \ 00000344 E8229FE5 LDR R2,??get_answer_9+0x18 ;; Canvas + 436 \ 00000348 E8429FE5 LDR R4,??get_answer_9+0x1C ;; sndMsg \ 0000034C 080087E2 ADD R0,R7,#+8 \ 00000350 01002DE9 PUSH {R0} \ 00000354 003097E5 LDR R3,[R7, #+0] \ 00000358 FF10A0E3 MOV R1,#+255 \ 0000035C 0A00A0E1 MOV R0,R10 \ 00000360 1B0100EF SWI +283 \ 00000364 E40395E5 LDR R0,[R5, #+996] \ 00000368 ........ BL SendMSGACK \ 0000036C E00395E5 LDR R0,[R5, #+992] \ 00000370 0B30A0E1 MOV R3,R11 \ 00000374 01002DE9 PUSH {R0} \ 00000378 0020A0E3 MOV R2,#+0 \ 0000037C 0810A0E1 MOV R1,R8 \ 00000380 0900A0E1 MOV R0,R9 \ 00000384 000100EF SWI +256 \ 00000388 ........ BL SMART_REDRAW \ 0000038C ........ LDR R0,??DataTable93 ;; extended_sounds \ 00000390 000090E5 LDR R0,[R0, #+0] \ 00000394 08D08DE2 ADD SP,SP,#+8 \ 00000398 000050E3 CMP R0,#+0 \ 0000039C 000097E5 LDR R0,[R7, #+0] \ 000003A0 1A00001A BNE ??get_answer_21 \ 000003A4 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000003A8 641090E5 LDR R1,[R0, #+100] \ 000003AC 000051E3 CMP R1,#+0 \ 000003B0 0500000A BEQ ??get_answer_22 \ 000003B4 6C0090E5 LDR R0,[R0, #+108] \ 000003B8 000050E3 CMP R0,#+0 \ 000003BC 30FFFF0A BEQ ??get_answer_7 \ ??get_answer_23: \ 000003C0 0400A0E1 MOV R0,R4 \ ??get_answer_24: \ 000003C4 ........ BL Play \ 000003C8 2DFFFFEA B ??get_answer_7 \ ??get_answer_22: \ 000003CC ........ LDR R2,??DataTable94 ;; automsgcount \ 000003D0 881090E5 LDR R1,[R0, #+136] \ 000003D4 002092E5 LDR R2,[R2, #+0] \ 000003D8 020051E1 CMP R1,R2 \ 000003DC 0200002A BCS ??get_answer_25 \ 000003E0 841395E5 LDR R1,[R5, #+900] \ 000003E4 000051E3 CMP R1,#+0 \ 000003E8 F4FFFF1A BNE ??get_answer_23 \ ??get_answer_25: \ 000003EC 841090E5 LDR R1,[R0, #+132] \ 000003F0 000051E3 CMP R1,#+0 \ 000003F4 0300000A BEQ ??get_answer_26 \ 000003F8 800090E5 LDR R0,[R0, #+128] \ 000003FC 000050E3 CMP R0,#+0 \ 00000400 1FFFFF0A BEQ ??get_answer_7 \ 00000404 EDFFFFEA B ??get_answer_23 \ ??get_answer_26: \ 00000408 0400A0E1 MOV R0,R4 \ 0000040C ECFFFFEA B ??get_answer_24 \ ??get_answer_21: \ 00000410 A40285E5 STR R0,[R5, #+676] \ 00000414 ........ LDR R0,??DataTable95 ;; ext_type_sounds \ 00000418 0010A0E3 MOV R1,#+0 \ 0000041C 0C108DE5 STR R1,[SP, #+12] \ 00000420 000090E5 LDR R0,[R0, #+0] \ 00000424 010050E2 SUBS R0,R0,#+1 \ 00000428 0300000A BEQ ??get_answer_27 \ 0000042C 010050E2 SUBS R0,R0,#+1 \ 00000430 2400A003 MOVEQ R0,#+36 \ 00000434 1C00A013 MOVNE R0,#+28 \ 00000438 000000EA B ??get_answer_28 \ ??get_answer_27: \ 0000043C 2000A0E3 MOV R0,#+32 \ ??get_answer_28: \ 00000440 F4119FE5 LDR R1,??get_answer_9+0x20 ;; Canvas + 8 \ 00000444 800D80E3 ORR R0,R0,#0x2000 \ 00000448 052080E0 ADD R2,R0,R5 \ 0000044C 04008DE2 ADD R0,SP,#+4 \ 00000450 160000EF SWI +22 \ 00000454 E4219FE5 LDR R2,??get_answer_9+0x24 ;; sndMsg2 \ 00000458 04008DE2 ADD R0,SP,#+4 \ 0000045C 01002DE9 PUSH {R0} \ 00000460 A43295E5 LDR R3,[R5, #+676] \ 00000464 717EA0E3 MOV R7,#+1808 \ 00000468 1400A0E3 MOV R0,#+20 \ 0000046C 800D80E3 ORR R0,R0,#0x2000 \ 00000470 051080E0 ADD R1,R0,R5 \ 00000474 050087E0 ADD R0,R7,R5 \ 00000478 160000EF SWI +22 \ 0000047C 10308DE2 ADD R3,SP,#+16 \ 00000480 8020A0E3 MOV R2,#+128 \ 00000484 801CA0E3 MOV R1,#+32768 \ 00000488 050087E0 ADD R0,R7,R5 \ 0000048C 0A0000EF SWI +10 \ 00000490 0C008DE5 STR R0,[SP, #+12] \ 00000494 0C009DE5 LDR R0,[SP, #+12] \ 00000498 04D08DE2 ADD SP,SP,#+4 \ 0000049C 010070E3 CMN R0,#+1 \ 000004A0 D8FFFF0A BEQ ??get_answer_26 \ 000004A4 08009DE5 LDR R0,[SP, #+8] \ 000004A8 0C108DE2 ADD R1,SP,#+12 \ 000004AC 0D0000EF SWI +13 \ 000004B0 050087E0 ADD R0,R7,R5 \ 000004B4 C2FFFFEA B ??get_answer_24 \ ??get_answer_29: \ 000004B8 460100EF SWI +326 \ 000004BC 081087E2 ADD R1,R7,#+8 \ 000004C0 0100A0E3 MOV R0,#+1 \ 000004C4 480100EF SWI +328 \ ??get_answer_30: \ 000004C8 470100EF SWI +327 \ 000004CC ECFEFFEA B ??get_answer_7 \ ??get_answer_31: \ 000004D0 0700A0E1 MOV R0,R7 \ 000004D4 ........ BL FindContactLOGQByAck \ 000004D8 000050E3 CMP R0,#+0 \ 000004DC 0100000A BEQ ??get_answer_32 \ 000004E0 5C019FE5 LDR R0,??get_answer_9+0x28 ;; sndMsgSent \ 000004E4 ........ BL Play \ ??get_answer_32: \ 000004E8 0A00A0E3 MOV R0,#+10 \ 000004EC 140000EF SWI +20 \ 000004F0 00B0A0E1 MOV R11,R0 \ 000004F4 0A20A0E3 MOV R2,#+10 \ 000004F8 D7FEFFEA B ??get_answer_5 \ ??get_answer_33: \ 000004FC 10108DE2 ADD R1,SP,#+16 \ 00000500 18008DE2 ADD R0,SP,#+24 \ 00000504 B40000EF SWI +180 \ 00000508 1000DDE5 LDRB R0,[SP, #+16] \ 0000050C 1120DDE5 LDRB R2,[SP, #+17] \ 00000510 E11EA0E3 MOV R1,#+3600 \ 00000514 3C30A0E3 MOV R3,#+60 \ 00000518 930202E0 MUL R2,R3,R2 \ 0000051C 912020E0 MLA R0,R1,R0,R2 \ 00000520 1210DDE5 LDRB R1,[SP, #+18] \ 00000524 E12EA0E3 MOV R2,#+3600 \ 00000528 000081E0 ADD R0,R1,R0 \ 0000052C 0810D7E5 LDRB R1,[R7, #+8] \ 00000530 920101E0 MUL R1,R2,R1 \ 00000534 0C219FE5 LDR R2,??get_answer_9+0x2C ;; Canvas + 448 \ 00000538 010040E0 SUB R0,R0,R1 \ 0000053C 0910D7E5 LDRB R1,[R7, #+9] \ 00000540 930101E0 MUL R1,R3,R1 \ 00000544 010040E0 SUB R0,R0,R1 \ 00000548 0A10D7E5 LDRB R1,[R7, #+10] \ 0000054C ........ LDR R7,??DataTable96 ;; janis \ 00000550 014050E0 SUBS R4,R0,R1 \ 00000554 500BA043 MOVMI R0,#+81920 \ 00000558 460D8043 ORRMI R0,R0,#0x1180 \ 0000055C 04408040 ADDMI R4,R0,R4 \ 00000560 B04285E5 STR R4,[R5, #+688] \ 00000564 010084E2 ADD R0,R4,#+1 \ 00000568 01002DE9 PUSH {R0} \ 0000056C 0430A0E1 MOV R3,R4 \ 00000570 FF10A0E3 MOV R1,#+255 \ 00000574 0A00A0E1 MOV R0,R10 \ 00000578 1B0100EF SWI +283 \ 0000057C C8109FE5 LDR R1,??get_answer_9+0x30 ;; Canvas + 468 \ 00000580 0420A0E1 MOV R2,R4 \ 00000584 C4409FE5 LDR R4,??get_answer_9+0x34 ;; pingsnd \ 00000588 E000A0E3 MOV R0,#+224 \ 0000058C 600D80E3 ORR R0,R0,#0x1800 \ 00000590 050080E0 ADD R0,R0,R5 \ 00000594 160000EF SWI +22 \ 00000598 460100EF SWI +326 \ 0000059C 000097E5 LDR R0,[R7, #+0] \ 000005A0 04D08DE2 ADD SP,SP,#+4 \ 000005A4 010050E3 CMP R0,#+1 \ 000005A8 0C00001A BNE ??get_answer_34 \ 000005AC 0500A0E3 MOV R0,#+5 \ 000005B0 AC0285E5 STR R0,[R5, #+684] \ 000005B4 0A10A0E1 MOV R1,R10 \ 000005B8 D000A0E3 MOV R0,#+208 \ 000005BC 5C0D80E3 ORR R0,R0,#0x1700 \ 000005C0 050080E0 ADD R0,R0,R5 \ 000005C4 1A0000EF SWI +26 \ 000005C8 0400A0E1 MOV R0,R4 \ 000005CC ........ BL Play \ 000005D0 0000A0E3 MOV R0,#+0 \ 000005D4 000087E5 STR R0,[R7, #+0] \ 000005D8 BAFFFFEA B ??get_answer_30 \ ??get_answer_14: \ 000005DC 25730000 DC8 "%s",+0 \ ??get_answer_34: \ 000005E0 300495E5 LDR R0,[R5, #+1072] \ 000005E4 000050E3 CMP R0,#+0 \ 000005E8 0500001A BNE ??get_answer_35 \ 000005EC 60009FE5 LDR R0,??get_answer_9+0x38 ;; ping_time_config \ 000005F0 000090E5 LDR R0,[R0, #+0] \ 000005F4 300485E5 STR R0,[R5, #+1072] \ 000005F8 0400A0E1 MOV R0,R4 \ 000005FC ........ BL Play \ 00000600 B0FFFFEA B ??get_answer_30 \ ??get_answer_35: \ 00000604 010040E2 SUB R0,R0,#+1 \ 00000608 300485E5 STR R0,[R5, #+1072] \ 0000060C ADFFFFEA B ??get_answer_30 3091 } 3092 } 3093 } 3094 RXstate=i; \ ??get_answer_8: \ 00000610 D88385E5 STR R8,[R5, #+984] 3095 // GBS_StartTimerProc(&tmr_dorecv,3000,dorecv); 3096 // SMART_REDRAW(); 3097 } \ ??get_answer_1: \ 00000614 42DE8DE2 ADD SP,SP,#+1056 ;; stack cleaning \ 00000618 F08FBDE8 POP {R4-R11,PC} ;; return \ ??get_answer_9: \ 0000061C ........ DC32 RXbuf \ 00000620 ........ DC32 Canvas + 396 \ 00000624 ........ DC32 sndStartup \ 00000628 ........ DC32 Canvas + 408 \ 0000062C ........ DC32 Canvas + 420 \ 00000630 ........ DC32 Canvas + 428 \ 00000634 ........ DC32 Canvas + 436 \ 00000638 ........ DC32 sndMsg \ 0000063C ........ DC32 Canvas + 8 \ 00000640 ........ DC32 sndMsg2 \ 00000644 ........ DC32 sndMsgSent \ 00000648 ........ DC32 Canvas + 448 \ 0000064C ........ DC32 Canvas + 468 \ 00000650 ........ DC32 pingsnd \ 00000654 ........ DC32 ping_time_config 3098 3099 3100 extern int main_count; 3101 3102 //=====================add to main info==================== 3103 3104 //Сюда я не лез...и че та желания нет...kluchnik ;) 3105 3106 char a_txt[45]; 3107 char s_txt[45]; 3108 char d_txt[45]; 3109 char f_txt[45]; 3110 char g_txt[45]; 3111 unsigned int main_msg_timer2; \ In segment CODE, align 4, keep-with-next 3112 void AddToMain(const char *nameu,char *si) 3113 { \ AddToMain: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0180A0E1 MOV R8,R1 3114 char *de=malloc(64); \ 00000010 4000A0E3 MOV R0,#+64 \ 00000014 140000EF SWI +20 \ 00000018 0050A0E1 MOV R5,R0 3115 int text_l; 3116 int iz; 3117 int name_l; 3118 name_l=0; 3119 text_l=0; 3120 name_l=strlen(nameu); \ 0000001C 0400A0E1 MOV R0,R4 \ 00000020 1B0000EF SWI +27 3121 iz=0; 3122 #ifdef ELKA 3123 text_l=main_lenght-name_l; \ 00000024 04129FE5 LDR R1,??AddToMain_0 ;; main_lenght \ 00000028 0070A0E3 MOV R7,#+0 \ 0000002C 001091E5 LDR R1,[R1, #+0] 3124 #else 3125 text_l=main_lenght-name_l; 3126 #endif 3127 3128 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 3129 { 3130 while(text_l!=0) 3131 { 3132 de[iz]=si[iz]; 3133 iz++; 3134 text_l--; 3135 } 3136 if(use_cutter) 3137 { 3138 de[iz]='.'; 3139 iz++; 3140 de[iz]='.'; 3141 iz++; 3142 de[iz]='.'; 3143 iz++; 3144 } 3145 de[iz]='\0'; 3146 } 3147 else 3148 strcpy(de, si); \ 00000048 0810A0E1 MOV R1,R8 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 1A0000EF SWI +26 3149 iz=0; \ ??AddToMain_2: \ 00000054 0070A0E3 MOV R7,#+0 \ 00000058 1A0000EA B ??AddToMain_3 \ ??AddToMain_4: \ 0000005C 0810D7E7 LDRB R1,[R7, +R8] \ 00000060 019049E2 SUB R9,R9,#+1 \ 00000064 0510C7E7 STRB R1,[R7, +R5] \ 00000068 0070A0E1 MOV R7,R0 \ ??AddToMain_1: \ 0000006C 010087E2 ADD R0,R7,#+1 \ 00000070 000059E3 CMP R9,#+0 \ 00000074 F8FFFF1A BNE ??AddToMain_4 \ 00000078 B4119FE5 LDR R1,??AddToMain_0+0x4 ;; use_cutter \ 0000007C 001091E5 LDR R1,[R1, #+0] \ 00000080 000051E3 CMP R1,#+0 \ 00000084 0500000A BEQ ??AddToMain_5 \ 00000088 2E10A0E3 MOV R1,#+46 \ 0000008C 0510C7E7 STRB R1,[R7, +R5] \ 00000090 0510C0E7 STRB R1,[R0, +R5] \ 00000094 010080E2 ADD R0,R0,#+1 \ 00000098 0510C0E7 STRB R1,[R0, +R5] \ 0000009C 017080E2 ADD R7,R0,#+1 \ ??AddToMain_5: \ 000000A0 0560C7E7 STRB R6,[R7, +R5] \ 000000A4 EAFFFFEA B ??AddToMain_2 3150 while(strlen(de)!=iz) 3151 { 3152 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] 3153 if(de[iz]==0x0A) de[iz]=0x20; \ 000000B8 0510D7E7 LDRB R1,[R7, +R5] \ 000000BC 0A0051E3 CMP R1,#+10 \ 000000C0 0500C707 STRBEQ R0,[R7, +R5] 3154 iz++; \ 000000C4 017087E2 ADD R7,R7,#+1 3155 } \ ??AddToMain_3: \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 1B0000EF SWI +27 \ 000000D0 070050E1 CMP R0,R7 \ 000000D4 F3FFFF1A BNE ??AddToMain_6 3156 de[iz]='\0'; 3157 if(main_count==0) sprintf(a_txt, "%s: %s", nameu,de); \ 000000D8 ........ LDR R8,??DataTable97 ;; main_count \ 000000DC 0560C7E7 STRB R6,[R7, +R5] \ 000000E0 ........ LDR R6,??DataTable101 ;; i_rc \ 000000E4 4C719FE5 LDR R7,??AddToMain_0+0x8 ;; `?` \ 000000E8 2810A0E3 MOV R1,#+40 \ 000000EC 801D81E3 ORR R1,R1,#0x2000 \ 000000F0 061081E0 ADD R1,R1,R6 \ 000000F4 04108DE5 STR R1,[SP, #+4] \ 000000F8 000098E5 LDR R0,[R8, #+0] \ 000000FC 000050E3 CMP R0,#+0 \ 00000100 0400001A BNE ??AddToMain_7 \ 00000104 04009DE5 LDR R0,[SP, #+4] \ 00000108 0530A0E1 MOV R3,R5 \ 0000010C 0420A0E1 MOV R2,R4 \ 00000110 0710A0E1 MOV R1,R7 \ 00000114 160000EF SWI +22 3158 if(main_count==1) sprintf(s_txt, "%s: %s", nameu,de); \ ??AddToMain_7: \ 00000118 5810A0E3 MOV R1,#+88 \ 0000011C 801D81E3 ORR R1,R1,#0x2000 \ 00000120 061081E0 ADD R1,R1,R6 \ 00000124 00108DE5 STR R1,[SP, #+0] \ 00000128 000098E5 LDR R0,[R8, #+0] \ 0000012C 010050E3 CMP R0,#+1 \ 00000130 0400001A BNE ??AddToMain_8 \ 00000134 00009DE5 LDR R0,[SP, #+0] \ 00000138 0530A0E1 MOV R3,R5 \ 0000013C 0420A0E1 MOV R2,R4 \ 00000140 0710A0E1 MOV R1,R7 \ 00000144 160000EF SWI +22 3159 if(main_count==2) sprintf(d_txt, "%s: %s", nameu,de); \ ??AddToMain_8: \ 00000148 8800A0E3 MOV R0,#+136 \ 0000014C 800D80E3 ORR R0,R0,#0x2000 \ 00000150 069080E0 ADD R9,R0,R6 \ 00000154 000098E5 LDR R0,[R8, #+0] \ 00000158 020050E3 CMP R0,#+2 \ 0000015C 0400001A BNE ??AddToMain_9 \ 00000160 0530A0E1 MOV R3,R5 \ 00000164 0420A0E1 MOV R2,R4 \ 00000168 0710A0E1 MOV R1,R7 \ 0000016C 0900A0E1 MOV R0,R9 \ 00000170 160000EF SWI +22 3160 if(main_count==3) sprintf(f_txt, "%s: %s", nameu,de); \ ??AddToMain_9: \ 00000174 B800A0E3 MOV R0,#+184 \ 00000178 800D80E3 ORR R0,R0,#0x2000 \ 0000017C 06A080E0 ADD R10,R0,R6 \ 00000180 000098E5 LDR R0,[R8, #+0] \ 00000184 030050E3 CMP R0,#+3 \ 00000188 0400001A BNE ??AddToMain_10 \ 0000018C 0530A0E1 MOV R3,R5 \ 00000190 0420A0E1 MOV R2,R4 \ 00000194 0710A0E1 MOV R1,R7 \ 00000198 0A00A0E1 MOV R0,R10 \ 0000019C 160000EF SWI +22 3161 if(main_count==4) sprintf(g_txt, "%s: %s", nameu,de); \ ??AddToMain_10: \ 000001A0 E800A0E3 MOV R0,#+232 \ 000001A4 800D80E3 ORR R0,R0,#0x2000 \ 000001A8 06B080E0 ADD R11,R0,R6 \ 000001AC 000098E5 LDR R0,[R8, #+0] \ 000001B0 040050E3 CMP R0,#+4 \ 000001B4 0400001A BNE ??AddToMain_11 \ 000001B8 0530A0E1 MOV R3,R5 \ 000001BC 0420A0E1 MOV R2,R4 \ 000001C0 0710A0E1 MOV R1,R7 \ 000001C4 0B00A0E1 MOV R0,R11 \ 000001C8 160000EF SWI +22 3162 if(main_count>4) \ ??AddToMain_11: \ 000001CC 000098E5 LDR R0,[R8, #+0] \ 000001D0 050050E3 CMP R0,#+5 \ 000001D4 100000BA BLT ??AddToMain_12 3163 { 3164 strcpy(a_txt, s_txt); \ 000001D8 00109DE5 LDR R1,[SP, #+0] \ 000001DC 04009DE5 LDR R0,[SP, #+4] \ 000001E0 1A0000EF SWI +26 3165 strcpy(s_txt, d_txt); \ 000001E4 00009DE5 LDR R0,[SP, #+0] \ 000001E8 0910A0E1 MOV R1,R9 \ 000001EC 1A0000EF SWI +26 3166 strcpy(d_txt, f_txt); \ 000001F0 0A10A0E1 MOV R1,R10 \ 000001F4 0900A0E1 MOV R0,R9 \ 000001F8 1A0000EF SWI +26 3167 strcpy(f_txt, g_txt); \ 000001FC 0B10A0E1 MOV R1,R11 \ 00000200 0A00A0E1 MOV R0,R10 \ 00000204 1A0000EF SWI +26 3168 sprintf(g_txt, "%s: %s", nameu,de); \ 00000208 0530A0E1 MOV R3,R5 \ 0000020C 0420A0E1 MOV R2,R4 \ 00000210 0710A0E1 MOV R1,R7 \ 00000214 0B00A0E1 MOV R0,R11 \ 00000218 160000EF SWI +22 3169 } 3170 mfree(de); \ ??AddToMain_12: \ 0000021C 0500A0E1 MOV R0,R5 \ 00000220 150000EF SWI +21 3171 main_d=1; \ 00000224 0100A0E3 MOV R0,#+1 \ 00000228 900286E5 STR R0,[R6, #+656] 3172 } \ 0000022C F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??AddToMain_0: \ 00000230 ........ DC32 main_lenght \ 00000234 ........ DC32 use_cutter \ 00000238 ........ DC32 `?` 3173 3174 //======================add to main info================ 3175 3176 int NEW_MSG; 3177 \ In segment CODE, align 4, keep-with-next 3178 void AddStringToLog(CLIST *t, int code, char *s, const char *name, unsigned int IDforACK,int flag) 3179 { \ 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 3180 char hs[128], *lastX; 3181 TTime tt; 3182 TDate d; 3183 GetDateTime(&d,&tt); \ 00000020 0D10A0E1 MOV R1,SP \ 00000024 08008DE2 ADD R0,SP,#+8 \ 00000028 B40000EF SWI +180 3184 int i; 3185 3186 // if(code == 3 && !LOG_XTXT) return; //Нl нуcно nоodrн?nь cennnrnуn 3187 if ( code==3 && NOT_LOG_SAME_XTXT ) \ 0000002C 030055E3 CMP R5,#+3 \ 00000030 1600001A BNE ??AddStringToLog_0 \ 00000034 10029FE5 LDR R0,??AddStringToLog_1 ;; NOT_LOG_SAME_XTXT \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 1200000A BEQ ??AddStringToLog_0 3188 { 3189 #ifdef kluchnik 3190 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 3201 if(code != 3 || ((LOG_XTXT) && (flag)))//Нужно сохранять иксстатус \ 000000D0 030055E3 CMP R5,#+3 \ 000000D4 14D08DE2 ADD SP,SP,#+20 \ 000000D8 0400001A BNE ??AddStringToLog_4 \ 000000DC 70019FE5 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 3202 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 3203 3204 LOGQ *p=NewLOGQ(s); \ ??AddStringToLog_5: \ 00000104 0800A0E1 MOV R0,R8 \ 00000108 ........ BL NewLOGQ \ 0000010C 0080A0E1 MOV R8,R0 3205 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] 3206 p->type=code; 3207 p->ID=IDforACK; //0-32767 3208 i=AddLOGQ(&t->log,p); \ 00000118 38619FE5 LDR R6,??AddStringToLog_1+0xC ;; MAXLOGMSG \ 0000011C 20208AE2 ADD R2,R10,#+32 \ 00000120 01002DE9 PUSH {R0} \ 00000124 1500DDE5 LDRB R0,[SP, #+21] \ 00000128 4F10A0E3 MOV R1,#+79 \ 0000012C 01002DE9 PUSH {R0} \ 00000130 0E00DDE5 LDRB R0,[SP, #+14] \ 00000134 01002DE9 PUSH {R0} \ 00000138 1100DDE5 LDRB R0,[SP, #+17] \ 0000013C 01002DE9 PUSH {R0} \ 00000140 1430DDE5 LDRB R3,[SP, #+20] \ 00000144 100088E2 ADD R0,R8,#+16 \ 00000148 1B0100EF SWI +283 \ 0000014C 0C5088E5 STR R5,[R8, #+12] \ 00000150 087088E5 STR R7,[R8, #+8] \ 00000154 0810A0E1 MOV R1,R8 \ 00000158 A00084E2 ADD R0,R4,#+160 \ 0000015C ........ BL AddLOGQ \ 00000160 0070A0E1 MOV R7,R0 \ 00000164 000096E5 LDR R0,[R6, #+0] \ 00000168 14D08DE2 ADD SP,SP,#+20 \ 0000016C 070050E1 CMP R0,R7 \ 00000170 0A00002A BCS ??AddStringToLog_6 3209 while(i>MAXLOGMSG) 3210 { 3211 if (t->log==t->last_log) t->last_log=t->last_log->next; \ ??AddStringToLog_7: \ 00000174 A80094E5 LDR R0,[R4, #+168] \ 00000178 A01094E5 LDR R1,[R4, #+160] 3212 RemoveLOGQ(&t->log,t->log); 3213 i--; \ 0000017C 017047E2 SUB R7,R7,#+1 \ 00000180 000051E1 CMP R1,R0 \ 00000184 00009005 LDREQ R0,[R0, #+0] \ 00000188 A8008405 STREQ R0,[R4, #+168] \ 0000018C A00084E2 ADD R0,R4,#+160 \ 00000190 ........ BL RemoveLOGQ 3214 } \ 00000194 000096E5 LDR R0,[R6, #+0] \ 00000198 070050E1 CMP R0,R7 \ 0000019C F4FFFF3A BCC ??AddStringToLog_7 3215 t->msg_count=i; 3216 if (!t->last_log) t->last_log=p; 3217 if (code==3) \ ??AddStringToLog_6: \ 000001A0 ........ LDR R6,??DataTable101 ;; i_rc \ 000001A4 B07084E5 STR R7,[R4, #+176] \ 000001A8 A80094E5 LDR R0,[R4, #+168] \ 000001AC 000050E3 CMP R0,#+0 \ 000001B0 A8808405 STREQ R8,[R4, #+168] \ 000001B4 030055E3 CMP R5,#+3 \ 000001B8 0D00001A BNE ??AddStringToLog_8 3218 { 3219 if (edchat_id) \ 000001BC 100496E5 LDR R0,[R6, #+1040] \ 000001C0 000050E3 CMP R0,#+0 \ 000001C4 1C00000A BEQ ??AddStringToLog_9 3220 { 3221 void *data=FindGUIbyId(edchat_id,NULL); \ 000001C8 100496E5 LDR R0,[R6, #+1040] \ 000001CC 0010A0E3 MOV R1,#+0 \ 000001D0 090200EF SWI +521 3222 if (data) \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 1700000A BEQ ??AddStringToLog_9 3223 { 3224 EDCHAT_STRUCT *ed_struct; 3225 ed_struct=EDIT_GetUserPointer(data); \ 000001DC DF0100EF SWI +479 3226 if (ed_struct) \ 000001E0 000050E3 CMP R0,#+0 \ 000001E4 1400000A BEQ ??AddStringToLog_9 3227 { 3228 if (ed_struct->ed_contact==t) \ 000001E8 000090E5 LDR R0,[R0, #+0] \ 000001EC 040050E1 CMP R0,R4 \ 000001F0 1100001A BNE ??AddStringToLog_9 3229 { 3230 goto L_INC; 3231 } 3232 } 3233 } 3234 } 3235 goto L_NOINC; 3236 } 3237 L_INC: 3238 if (!t->isunread) total_unread++; \ ??AddStringToLog_8: \ 000001F4 900094E5 LDR R0,[R4, #+144] \ 000001F8 000050E3 CMP R0,#+0 \ 000001FC 00049605 LDREQ R0,[R6, #+1024] \ 00000200 01008002 ADDEQ R0,R0,#+1 \ 00000204 00048605 STREQ R0,[R6, #+1024] 3239 if(NEW_MSG==1) \ 00000208 380496E5 LDR R0,[R6, #+1080] \ 0000020C 010050E3 CMP R0,#+1 \ 00000210 0700001A BNE ??AddStringToLog_10 3240 { 3241 t->unread_msg++; \ 00000214 940094E5 LDR R0,[R4, #+148] \ 00000218 010080E2 ADD R0,R0,#+1 \ 0000021C 940084E5 STR R0,[R4, #+148] 3242 total_unread2++; \ 00000220 CC0296E5 LDR R0,[R6, #+716] \ 00000224 010080E2 ADD R0,R0,#+1 \ 00000228 CC0286E5 STR R0,[R6, #+716] 3243 NEW_MSG=0; \ 0000022C 0000A0E3 MOV R0,#+0 \ 00000230 380486E5 STR R0,[R6, #+1080] 3244 } 3245 t->isunread=1; \ ??AddStringToLog_10: \ 00000234 0100A0E3 MOV R0,#+1 \ 00000238 900084E5 STR R0,[R4, #+144] 3246 L_NOINC: 3247 ChangeContactPos(t); \ ??AddStringToLog_9: \ 0000023C 0400A0E1 MOV R0,R4 \ 00000240 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3248 } \ ??AddStringToLog_3: \ 00000244 90D08DE2 ADD SP,SP,#+144 ;; stack cleaning \ 00000248 F087BDE8 POP {R4-R10,PC} ;; return \ ??AddStringToLog_1: \ 0000024C ........ DC32 NOT_LOG_SAME_XTXT \ 00000250 ........ DC32 `?` \ 00000254 ........ DC32 LOG_XTXT \ 00000258 ........ DC32 MAXLOGMSG 3249 3250 void ParseAnswer(WSHDR *ws, const char *s); 3251 3252 int time_to_stop_t9; 3253 \ In segment CODE, align 4, keep-with-next 3254 void ParseXStatusText(WSHDR *ws, const char *s, int color) 3255 { \ ParseXStatusText: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 3256 int c; 3257 int flag=0; \ 00000010 0070A0E3 MOV R7,#+0 3258 CutWSTR(ws,0); \ 00000014 0010A0E3 MOV R1,#+0 \ 00000018 260100EF SWI +294 3259 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} 3260 wsAppendChar(ws,0xE008); \ 0000002C 0810A0E3 MOV R1,#+8 \ 00000030 E01C81E3 ORR R1,R1,#0xE000 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 1C0000EF SWI +28 3261 wsAppendChar(ws,color); \ 0000003C 0610A0E1 MOV R1,R6 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1C0000EF SWI +28 3262 wsAppendChar(ws,0xE013); \ 00000048 1310A0E3 MOV R1,#+19 \ 0000004C E01C81E3 ORR R1,R1,#0xE000 \ 00000050 0A0000EA B ??ParseXStatusText_0 3263 while((c=*s++)) 3264 { 3265 if (c==13) \ ??ParseXStatusText_1: \ 00000054 0D0050E3 CMP R0,#+13 3266 { 3267 if (!flag) \ 00000058 00005703 CMPEQ R7,#+0 \ 0000005C 0500001A BNE ??ParseXStatusText_2 3268 { 3269 flag=1; \ 00000060 0170A0E3 MOV R7,#+1 3270 wsAppendChar(ws,0xE012); \ 00000064 1210A0E3 MOV R1,#+18 \ 00000068 E01C81E3 ORR R1,R1,#0xE000 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 1C0000EF SWI +28 3271 c=' '; \ 00000074 2000A0E3 MOV R0,#+32 3272 } 3273 } 3274 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 3275 } \ 00000088 ........ LDRB R0,[R5], #+1 \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 EFFFFF1A BNE ??ParseXStatusText_1 \ 00000094 F080BDE8 POP {R4-R7,PC} ;; return 3276 } 3277 3278 //Добавление итемов в чат при получении нового сообщения \ In segment CODE, align 4, keep-with-next 3279 void AddMsgToChat(void *data) 3280 { \ AddMsgToChat: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 3281 LOGQ *p; 3282 EDITCONTROL ec; 3283 EDITC_OPTIONS ec_options; 3284 EDCHAT_STRUCT *ed_struct; 3285 int j; 3286 int color, font, type; 3287 int zc; 3288 if (!data) return; \ 00000008 000050E3 CMP R0,#+0 \ 0000000C C400000A BEQ ??AddMsgToChat_0 3289 ed_struct=EDIT_GetUserPointer(data); \ 00000010 DF0100EF SWI +479 \ 00000014 0040B0E1 MOVS R4,R0 3290 if (!ed_struct) return; \ 00000018 C100000A BEQ ??AddMsgToChat_0 3291 if (!ed_struct->ed_contact->isunread) return; \ 0000001C 000094E5 LDR R0,[R4, #+0] \ 00000020 901090E5 LDR R1,[R0, #+144] \ 00000024 000051E3 CMP R1,#+0 \ 00000028 BD00000A BEQ ??AddMsgToChat_0 3292 3293 p=ed_struct->ed_contact->last_log; \ 0000002C A85090E5 LDR R5,[R0, #+168] 3294 if (p) \ 00000030 ........ LDR R6,??DataTable101 ;; i_rc \ 00000034 ........ LDR R7,??DataTable102 ;; O_ED_X_FONT_SIZE \ 00000038 ........ LDR R8,??DataTable103 ;; X_COLOR \ 0000003C ........ LDR R9,??DataTable104 ;; O_X_COLOR \ 00000040 000055E3 CMP R5,#+0 \ 00000044 A100000A BEQ ??AddMsgToChat_1 3295 { 3296 while(p) 3297 { 3298 font = ED_H_FONT_SIZE; \ ??AddMsgToChat_2: \ 00000048 ........ LDR R0,??DataTable125 ;; ED_H_FONT_SIZE 3299 if ((zc=p->acked&3)) \ 0000004C ........ LDR R1,??DataTable122 ;; 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 3300 { 3301 if (zc==1) \ 00000064 010050E3 CMP R0,#+1 \ 00000068 1E00001A BNE ??AddMsgToChat_4 3302 color=ACK_COLOR; //Зеленый \ 0000006C ........ LDR R0,??DataTable118 ;; ACK_COLOR \ 00000070 1B0000EA B ??AddMsgToChat_5 3303 else 3304 color=I_COLOR; 3305 } 3306 else 3307 { 3308 if (p->ID==0xFFFFFFFF) \ ??AddMsgToChat_3: \ 00000074 080095E5 LDR R0,[R5, #+8] \ 00000078 010070E3 CMN R0,#+1 \ 0000007C 1700001A BNE ??AddMsgToChat_6 3309 { 3310 type = p->type&0x0F; \ 00000080 0C0095E5 LDR R0,[R5, #+12] \ 00000084 0F1000E2 AND R1,R0,#0xF 3311 if(p->type&0x10) \ 00000088 100010E3 TST R0,#0x10 \ 0000008C 0B00000A BEQ ??AddMsgToChat_7 3312 { 3313 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 00000090 010051E3 CMP R1,#+1 \ 00000094 ........ LDREQ R0,??DataTable120 ;; 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,??DataTable119 ;; O_TO_COLOR \ ??AddMsgToChat_8: \ 000000B0 00B090E5 LDR R11,[R0, #+0] \ 000000B4 ........ LDR R0,??DataTable124 ;; O_ED_H_FONT_SIZE \ ??AddMsgToChat_9: \ 000000B8 00A090E5 LDR R10,[R0, #+0] \ 000000BC 090000EA B ??AddMsgToChat_4 3314 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 3315 } 3316 else 3317 { 3318 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,??DataTable116 ;; ED_X_FONT_SIZE \ 000000D4 F7FFFF0A BEQ ??AddMsgToChat_9 \ 000000D8 ........ LDR R0,??DataTable121 ;; TO_COLOR \ 000000DC 000000EA B ??AddMsgToChat_5 3319 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 3320 } 3321 } 3322 else 3323 color=UNACK_COLOR; //????? \ ??AddMsgToChat_6: \ 000000E0 ........ LDR R0,??DataTable123 ;; UNACK_COLOR \ ??AddMsgToChat_5: \ 000000E4 00B090E5 LDR R11,[R0, #+0] 3324 } 3325 PrepareEditControl(&ec); \ ??AddMsgToChat_4: \ 000000E8 10008DE2 ADD R0,SP,#+16 \ 000000EC 640100EF SWI +356 3326 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 3327 { 3328 ascii2ws(ews,p->hdr); \ 00000100 780396E5 LDR R0,[R6, #+888] \ 00000104 101085E2 ADD R1,R5,#+16 \ 00000108 ........ _BLF ascii2ws,??ascii2ws??rA 3329 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 0000010C 783396E5 LDR R3,[R6, #+888] \ 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 3330 } 3331 else 3332 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??AddMsgToChat_10: \ 00000124 0000A0E3 MOV R0,#+0 \ 00000128 01002DE9 PUSH {R0} \ 0000012C 783396E5 LDR R3,[R6, #+888] \ 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 3333 PrepareEditCOptions(&ec_options); \ 00000144 0D00A0E1 MOV R0,SP \ 00000148 C80100EF SWI +456 3334 SetPenColorToEditCOptions(&ec_options,color); \ 0000014C 0B10A0E1 MOV R1,R11 \ 00000150 0D00A0E1 MOV R0,SP \ 00000154 CC0100EF SWI +460 3335 SetFontToEditCOptions(&ec_options,font); \ 00000158 0A10A0E1 MOV R1,R10 \ 0000015C 0D00A0E1 MOV R0,SP \ 00000160 CA0100EF SWI +458 3336 CopyOptionsToEditControl(&ec,&ec_options); \ 00000164 0D10A0E1 MOV R1,SP \ 00000168 10008DE2 ADD R0,SP,#+16 \ 0000016C CE0100EF SWI +462 3337 //AddEditControlToEditQend(eq,&ec,ma); 3338 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 3339 ed_struct->ed_answer++; \ 00000184 080094E5 LDR R0,[R4, #+8] \ 00000188 010080E2 ADD R0,R0,#+1 \ 0000018C 080084E5 STR R0,[R4, #+8] 3340 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 3341 { 3342 ParseAnswer(ews,p->text); \ 000001A0 780396E5 LDR R0,[R6, #+888] \ 000001A4 601085E2 ADD R1,R5,#+96 \ 000001A8 ........ BL ParseAnswer \ 000001AC 050000EA B ??AddMsgToChat_13 3343 } 3344 else 3345 { 3346 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 780396E5 LDR R0,[R6, #+888] \ 000001BC 00209805 LDREQ R2,[R8, #+0] \ 000001C0 601085E2 ADD R1,R5,#+96 \ 000001C4 ........ BL ParseXStatusText 3347 } 3348 PrepareEditControl(&ec); \ ??AddMsgToChat_13: \ 000001C8 10008DE2 ADD R0,SP,#+16 \ 000001CC 640100EF SWI +356 3349 ConstructEditControl(&ec, 3350 ECT_NORMAL_TEXT, 3351 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 3352 ews,ews->wsbody[0]); \ 000001D0 783396E5 LDR R3,[R6, #+888] \ 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 3353 PrepareEditCOptions(&ec_options); \ 000001FC 04008DE2 ADD R0,SP,#+4 \ 00000200 C80100EF SWI +456 3354 //#ifdef M75 3355 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 3356 { 3357 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000218 100010E3 TST R0,#0x10 \ 0000021C ........ LDRNE R0,??DataTable114 ;; O_ED_FONT_SIZE \ 00000220 ........ LDREQ R0,??DataTable115 ;; ED_FONT_SIZE \ 00000224 001090E5 LDR R1,[R0, #+0] \ 00000228 090000EA B ??AddMsgToChat_15 3358 } 3359 else 3360 { 3361 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 3362 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,??DataTable116 ;; 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 3363 } 3364 //#else 3365 // SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 3366 //#endif 3367 CopyOptionsToEditControl(&ec,&ec_options); \ 0000025C 0D10A0E1 MOV R1,SP \ 00000260 10008DE2 ADD R0,SP,#+16 \ 00000264 CE0100EF SWI +462 3368 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 3369 ed_struct->ed_answer++; \ 0000027C 080094E5 LDR R0,[R4, #+8] \ 00000280 010080E2 ADD R0,R0,#+1 \ 00000284 080084E5 STR R0,[R4, #+8] 3370 p=p->next; \ 00000288 005095E5 LDR R5,[R5, #+0] 3371 } \ 0000028C 000055E3 CMP R5,#+0 \ 00000290 6CFFFF1A BNE ??AddMsgToChat_2 3372 j=((ed_struct->ed_contact->msg_count+1)*2); //Ожидаемый ed_answer \ 00000294 001094E5 LDR R1,[R4, #+0] \ 00000298 B01091E5 LDR R1,[R1, #+176] \ 0000029C 011081E2 ADD R1,R1,#+1 \ 000002A0 8150A0E1 LSL R5,R1,#+1 \ 000002A4 000055E1 CMP R5,R0 \ 000002A8 070000AA BGE ??AddMsgToChat_16 3373 while(jed_answer) 3374 { 3375 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??AddMsgToChat_17: \ 000002AC 040094E5 LDR R0,[R4, #+4] \ 000002B0 0110A0E3 MOV R1,#+1 \ 000002B4 D10100EF SWI +465 3376 ed_struct->ed_answer--; \ 000002B8 080094E5 LDR R0,[R4, #+8] \ 000002BC 010040E2 SUB R0,R0,#+1 \ 000002C0 080084E5 STR R0,[R4, #+8] 3377 } \ 000002C4 000055E1 CMP R5,R0 \ 000002C8 F7FFFFBA BLT ??AddMsgToChat_17 3378 } 3379 ed_struct->ed_contact->last_log=NULL; \ ??AddMsgToChat_16: \ 000002CC 0050A0E3 MOV R5,#+0 \ ??AddMsgToChat_1: \ 000002D0 000094E5 LDR R0,[R4, #+0] \ 000002D4 A85080E5 STR R5,[R0, #+168] 3380 if (IsGuiOnTop(edchat_id)) \ 000002D8 100496E5 LDR R0,[R6, #+1040] \ 000002DC 350100EF SWI +309 \ 000002E0 000050E3 CMP R0,#+0 \ 000002E4 0300000A BEQ ??AddMsgToChat_18 3381 { 3382 total_unread--; \ 000002E8 000496E5 LDR R0,[R6, #+1024] \ 000002EC 010040E2 SUB R0,R0,#+1 \ 000002F0 000486E5 STR R0,[R6, #+1024] \ 000002F4 020000EA B ??AddMsgToChat_19 3383 } 3384 else 3385 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] 3386 ed_struct->ed_contact->isunread=0; \ ??AddMsgToChat_19: \ 00000304 000094E5 LDR R0,[R4, #+0] \ 00000308 905080E5 STR R5,[R0, #+144] 3387 total_unread2=total_unread2-ed_struct->ed_contact->unread_msg; \ 0000030C CC1296E5 LDR R1,[R6, #+716] \ 00000310 942090E5 LDR R2,[R0, #+148] \ 00000314 021041E0 SUB R1,R1,R2 \ 00000318 CC1286E5 STR R1,[R6, #+716] 3388 ed_struct->ed_contact->unread_msg=0; \ 0000031C 945080E5 STR R5,[R0, #+148] 3389 ChangeContactPos(ed_struct->ed_contact); \ 00000320 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3390 // EDIT_SetFocus(data,ed_struct->ed_answer); 3391 } \ ??AddMsgToChat_0: \ 00000324 40D08DE2 ADD SP,SP,#+64 ;; stack cleaning \ 00000328 F08FBDE8 POP {R4-R11,PC} ;; return 3392 3393 //Рисуем подтверждения непосредственно \ In segment CODE, align 4, keep-with-next 3394 void DrawAck(void *data) 3395 { \ DrawAck: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 3396 LOGQ *p; 3397 EDITCONTROL ec; 3398 EDITC_OPTIONS ec_options; 3399 EDCHAT_STRUCT *ed_struct; 3400 int j; 3401 int color; 3402 int dorefresh=0; \ 0000000C 0060A0E3 MOV R6,#+0 3403 if (!data) return; \ 00000010 4C00000A BEQ ??DrawAck_0 3404 ed_struct=EDIT_GetUserPointer(data); \ 00000014 DF0100EF SWI +479 3405 if (!ed_struct) return; \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 4900000A BEQ ??DrawAck_0 3406 p=ed_struct->ed_contact->log; \ 00000020 001090E5 LDR R1,[R0, #+0] 3407 j=ed_struct->ed_answer; 3408 j-=(ed_struct->ed_contact->msg_count*2)+1; //Номер собственно хедера верхнего итема \ 00000024 080090E5 LDR R0,[R0, #+8] \ 00000028 A05091E5 LDR R5,[R1, #+160] \ 0000002C B01091E5 LDR R1,[R1, #+176] \ 00000030 000055E3 CMP R5,#+0 \ 00000034 810040E0 SUB R0,R0,R1, LSL #+1 \ 00000038 017040E2 SUB R7,R0,#+1 \ 0000003C 3A00000A BEQ ??DrawAck_1 3409 while(p) 3410 { 3411 if (j>=1) //Пока возможно лишнее \ ??DrawAck_2: \ 00000040 010057E3 CMP R7,#+1 \ 00000044 340000BA BLT ??DrawAck_3 3412 { 3413 if (!(p->acked&4)) \ 00000048 040095E5 LDR R0,[R5, #+4] \ 0000004C 040010E3 TST R0,#0x4 \ 00000050 3100001A BNE ??DrawAck_3 3414 { 3415 ExtractEditControl(data,j,&ec); \ 00000054 10208DE2 ADD R2,SP,#+16 \ 00000058 0710A0E1 MOV R1,R7 \ 0000005C 0400A0E1 MOV R0,R4 \ 00000060 690100EF SWI +361 3416 PrepareEditCOptions(&ec_options); \ 00000064 0D00A0E1 MOV R0,SP \ 00000068 C80100EF SWI +456 3417 if (p->acked) \ 0000006C 040095E5 LDR R0,[R5, #+4] \ 00000070 000050E3 CMP R0,#+0 \ 00000074 0300000A BEQ ??DrawAck_4 3418 { 3419 if (p->acked==1) \ 00000078 010050E3 CMP R0,#+1 \ 0000007C ........ LDRNE R0,??DataTable122 ;; I_COLOR 3420 color=ACK_COLOR; //Зеленый \ 00000080 ........ LDREQ R0,??DataTable118 ;; ACK_COLOR \ 00000084 0F0000EA B ??DrawAck_5 3421 else 3422 color=I_COLOR; 3423 } 3424 else 3425 { 3426 if (p->ID==0xFFFFFFFF) \ ??DrawAck_4: \ 00000088 080095E5 LDR R0,[R5, #+8] \ 0000008C 010070E3 CMN R0,#+1 \ 00000090 0B00001A BNE ??DrawAck_6 3427 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,??DataTable119 ;; O_TO_COLOR \ 000000AC ........ LDREQ R0,??DataTable120 ;; O_I_COLOR \ 000000B0 040000EA B ??DrawAck_5 \ ??DrawAck_7: \ 000000B4 010050E3 CMP R0,#+1 \ 000000B8 ........ LDRNE R0,??DataTable121 ;; TO_COLOR \ 000000BC ........ LDREQ R0,??DataTable122 ;; I_COLOR \ 000000C0 000000EA B ??DrawAck_5 3428 else 3429 color=UNACK_COLOR; //Серый \ ??DrawAck_6: \ 000000C4 ........ LDR R0,??DataTable123 ;; UNACK_COLOR 3430 } 3431 SetPenColorToEditCOptions(&ec_options,color/*p->type==1?I_COLOR:TO_COLOR*/); 3432 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_H_FONT_SIZE:ED_H_FONT_SIZE); 3433 CopyOptionsToEditControl(&ec,&ec_options); 3434 StoreEditControl(data,j,&ec); 3435 p->acked|=4; //Обработали 3436 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,??DataTable124 ;; O_ED_H_FONT_SIZE \ 000000E4 ........ LDREQ R0,??DataTable125 ;; 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] 3437 } 3438 } 3439 j+=2; 3440 p=p->next; \ ??DrawAck_3: \ 0000011C 005095E5 LDR R5,[R5, #+0] \ 00000120 027087E2 ADD R7,R7,#+2 3441 } \ 00000124 000055E3 CMP R5,#+0 \ 00000128 C4FFFF1A BNE ??DrawAck_2 3442 if (IsGuiOnTop(edchat_id)&&dorefresh) RefreshGUI(); \ ??DrawAck_1: \ 0000012C 1C009FE5 LDR R0,??DrawAck_8 ;; i_rc + 1040 \ 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 + 1040 3443 } 3444 \ In segment CODE, align 4, keep-with-next 3445 void ask_my_info(void) 3446 { 3447 /* TPKT *p; 3448 CLIST *t; 3449 p=malloc(sizeof(PKT)); 3450 p->pkt.uin=UIN; 3451 p->pkt.type=T_REQINFOSHORT; 3452 p->pkt.data_len=0; 3453 // AddStringToLog(t,0x01,"Request info...",I_str); 3454 SUBPROC((void *)SendAnswer,0,p);*/ 3455 } \ ask_my_info: \ 00000000 1EFF2FE1 BX LR ;; return 3456 \ In segment CODE, align 4, keep-with-next 3457 void set_my_status(void) 3458 { \ set_my_status: \ 00000000 00402DE9 PUSH {LR} 3459 TPKT *p; 3460 p=malloc(sizeof(PKT)+1); \ 00000004 0900A0E3 MOV R0,#+9 \ 00000008 140000EF SWI +20 3461 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 001080E5 STR R1,[R0, #+0] 3462 p->pkt.type=T_MY_STATUS_CH; // Тип пакета: изменение статуса \ 00000014 0F10A0E3 MOV R1,#+15 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 3463 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000001C 0110A0E3 MOV R1,#+1 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3464 p->data[0]=CurrentStatus; \ 00000024 18109FE5 LDR R1,??set_my_status_0 ;; i_rc + 880 3465 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,??DataTable138 ;; SendAnswer \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 710100EF SWI +369 3466 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??set_my_status_0: \ 00000044 ........ DC32 i_rc + 880 3467 3468 extern int Send0; 3469 \ In segment CODE, align 4, keep-with-next 3470 void set_my_xstatus(void) 3471 { \ set_my_xstatus: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 3472 #ifdef NEWSGOLD 3473 if(Is_Id3tag_Enabled) \ 00000004 ........ LDR R7,??DataTable137 ;; i_rc \ 00000008 ........ LDR R4,??DataTable138 ;; SendAnswer \ 0000000C 0CD04DE2 SUB SP,SP,#+12 \ 00000010 E40297E5 LDR R0,[R7, #+740] \ 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 3474 { 3475 if(CurrentXStatus!=11 || !Is_ID3_ANY_STATUS) \ 0000002C 740397E5 LDR R0,[R7, #+884] \ 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 3476 { 3477 #endif 3478 TPKT *p; 3479 char *s1; 3480 char *s2; 3481 int l1; 3482 int l2; 3483 p=malloc(sizeof(PKT)+1); \ ??set_my_xstatus_1: \ 00000048 0900A0E3 MOV R0,#+9 \ 0000004C 140000EF SWI +20 \ 00000050 0080A0E1 MOV R8,R0 3484 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 00000054 006088E5 STR R6,[R8, #+0] 3485 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 00000058 B4A0C8E1 STRH R10,[R8, #+4] 3486 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000005C B690C8E1 STRH R9,[R8, #+6] 3487 p->data[0]=CurrentXStatus; \ 00000060 740397E5 LDR R0,[R7, #+884] 3488 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 3489 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 00000078 740397E5 LDR R0,[R7, #+884] \ 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 3490 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000090 740397E5 LDR R0,[R7, #+884] \ 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 3491 if ((!s1)||(!s2)) return; \ 000000A8 000059E3 CMP R9,#+0 \ 000000AC 00005713 CMPNE R7,#+0 \ 000000B0 F787BD08 POPEQ {R0-R2,R4-R10,PC} 3492 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 3493 p->pkt.uin=0; \ 000000CC 006088E5 STR R6,[R8, #+0] 3494 p->pkt.type=T_XTEXT_SET; \ 000000D0 B450C8E1 STRH R5,[R8, #+4] 3495 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] 3496 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 3497 p->data[l1]=0; \ 000000F8 00009DE5 LDR R0,[SP, #+0] 3498 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 3499 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} 3500 #ifdef NEWSGOLD 3501 } 3502 else 3503 { 3504 tracktimer=0; 3505 GetTags(); 3506 } 3507 } 3508 else 3509 { 3510 TPKT *p; 3511 char *s1; 3512 char *s2; 3513 int l1; 3514 int l2; 3515 p=malloc(sizeof(PKT)+1); \ ??set_my_xstatus_0: \ 00000130 0900A0E3 MOV R0,#+9 \ 00000134 140000EF SWI +20 \ 00000138 0080A0E1 MOV R8,R0 3516 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000013C 006088E5 STR R6,[R8, #+0] 3517 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 00000140 B4A0C8E1 STRH R10,[R8, #+4] 3518 p->pkt.data_len=1; // Длина пакета: 1 байт \ 00000144 B690C8E1 STRH R9,[R8, #+6] 3519 p->data[0]=CurrentXStatus; \ 00000148 740397E5 LDR R0,[R7, #+884] 3520 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 3521 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 00000160 740397E5 LDR R0,[R7, #+884] \ 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 3522 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000178 740397E5 LDR R0,[R7, #+884] \ 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 3523 if ((!s1)||(!s2)) return; \ 00000190 000059E3 CMP R9,#+0 \ 00000194 00005A13 CMPNE R10,#+0 \ 00000198 F787BD08 POPEQ {R0-R2,R4-R10,PC} 3524 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 3525 p->pkt.uin=0; \ 000001B4 006088E5 STR R6,[R8, #+0] 3526 p->pkt.type=T_XTEXT_SET; \ 000001B8 B450C8E1 STRH R5,[R8, #+4] 3527 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] 3528 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 3529 p->data[l1]=0; \ 000001E0 00009DE5 LDR R0,[SP, #+0] 3530 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 3531 SUBPROC((void *)SendAnswer,0,p); \ 00000204 0820A0E1 MOV R2,R8 \ 00000208 0010A0E3 MOV R1,#+0 \ 0000020C 0400A0E1 MOV R0,R4 \ 00000210 710100EF SWI +369 3532 tracktimer=0; \ ??set_my_xstatus_3: \ 00000214 A46387E5 STR R6,[R7, #+932] 3533 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 3534 } 3535 #endif 3536 } 3537 3538 #ifdef NEWSGOLD 3539 \ In segment CODE, align 4, keep-with-next 3540 void set_my_xstatus2(void) 3541 { \ set_my_xstatus2: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 3542 TPKT *p; 3543 // char *s1; 3544 // char *s2; 3545 int l1; 3546 int l2; 3547 p=malloc(sizeof(PKT)+1); 3548 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 3549 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 3550 p->pkt.data_len=1; // Длина пакета: 1 байт 3551 p->data[0]=11; 3552 SUBPROC((void *)SendAnswer,0,p); \ 00000004 ........ LDR R6,??DataTable138 ;; SendAnswer 3553 // char *s1; 3554 char *sk2=malloc(256); 3555 // strcpy(s1, playing); 3556 // s1="Now playing:"; 3557 strcpy(sk2,teast2); 3558 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 3559 l2=strlen(sk2); \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 1B0000EF SWI +27 \ 00000074 00A0A0E1 MOV R10,R0 3560 if ((!playing)||(!sk2)) return; \ 00000078 000057E3 CMP R7,#+0 \ 0000007C F187BD08 POPEQ {R0,R4-R10,PC} 3561 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 3562 p->pkt.uin=0; \ 00000090 005084E5 STR R5,[R4, #+0] 3563 p->pkt.type=T_XTEXT_SET; \ 00000094 1A00A0E3 MOV R0,#+26 \ 00000098 B400C4E1 STRH R0,[R4, #+4] 3564 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] 3565 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 3566 p->data[l1]=0; \ 000000B8 040089E0 ADD R0,R9,R4 \ 000000BC 0850C0E5 STRB R5,[R0, #+8] 3567 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 3568 mfree(sk2); \ 000000D0 0700A0E1 MOV R0,R7 \ 000000D4 150000EF SWI +21 3569 SUBPROC((void *)SendAnswer,0,p); \ 000000D8 0420A0E1 MOV R2,R4 \ 000000DC 0010A0E3 MOV R1,#+0 \ 000000E0 0600A0E1 MOV R0,R6 \ 000000E4 710100EF SWI +369 3570 // mfree(s1); 3571 // mfree(s2); 3572 } \ 000000E8 F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??set_my_xstatus2_0: \ 000000EC ........ DC32 playing \ 000000F0 ........ DC32 teast2 3573 #endif \ In segment CODE, align 4, keep-with-next 3574 void to_develop(void) 3575 { 3576 if (silenthide) return; \ to_develop: \ 00000000 ........ LDR R0,??DataTable137 ;; i_rc \ 00000004 00402DE9 PUSH {LR} \ 00000008 AC1390E5 LDR R1,[R0, #+940] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD18 POPNE {PC} 3577 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable131 ;; Canvas 3578 gipc.name_from=ipc_my_name; 3579 gipc.data=(void *)maincsm_id; 3580 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 00000018 D43080E2 ADD R3,R0,#+212 \ 0000001C ED2F81E2 ADD R2,R1,#+948 \ 00000020 E51F81E2 ADD R1,R1,#+916 \ 00000024 D81080E5 STR R1,[R0, #+216] \ 00000028 D01290E5 LDR R1,[R0, #+720] \ 0000002C D42080E5 STR R2,[R0, #+212] \ 00000030 DC1080E5 STR R1,[R0, #+220] \ 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 3581 } \ 0000004C 0080BDE8 POP {PC} ;; return 3582 \ In segment CODE, align 4, keep-with-next 3583 void ReqAddMsgToChat(CLIST *t) 3584 { \ ReqAddMsgToChat: \ 00000000 70402DE9 PUSH {R4-R6,LR} 3585 if (edchat_id) \ 00000004 ........ LDR R5,??DataTable137 ;; i_rc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 100495E5 LDR R0,[R5, #+1040] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 7080BD08 POPEQ {R4-R6,PC} 3586 { 3587 void *data=FindGUIbyId(edchat_id,NULL); \ 00000018 100495E5 LDR R0,[R5, #+1040] \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 090200EF SWI +521 \ 00000024 0060A0E1 MOV R6,R0 3588 { 3589 EDCHAT_STRUCT *ed_struct; 3590 ed_struct=EDIT_GetUserPointer(data); \ 00000028 DF0100EF SWI +479 3591 if (ed_struct) \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 7080BD08 POPEQ {R4-R6,PC} 3592 { 3593 if (ed_struct->ed_contact==t) \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 040050E1 CMP R0,R4 \ 0000003C 7080BD18 POPNE {R4-R6,PC} 3594 { 3595 if (EDIT_IsBusy(data)) \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 1C0200EF SWI +540 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0400000A BEQ ??ReqAddMsgToChat_0 3596 { 3597 t->req_add=1; \ 00000050 0100A0E3 MOV R0,#+1 \ 00000054 980084E5 STR R0,[R4, #+152] 3598 #ifdef EVILFOX 3599 time_to_stop_t9=2; 3600 #else 3601 time_to_stop_t9=3; \ 00000058 0300A0E3 MOV R0,#+3 \ 0000005C 3C0485E5 STR R0,[R5, #+1084] \ 00000060 7080BDE8 POP {R4-R6,PC} 3602 #endif 3603 } 3604 else 3605 { 3606 AddMsgToChat(data); \ ??ReqAddMsgToChat_0: \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 ........ BL AddMsgToChat 3607 DirectRedrawGUI_ID(edchat_id); \ 0000006C 100495E5 LDR R0,[R5, #+1040] \ 00000070 400100EF SWI +320 3608 } 3609 } 3610 } 3611 } 3612 } 3613 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 3614 3615 GBSTMR develop; 3616 \ In segment CODE, align 4, keep-with-next 3617 void begin_to_develop() 3618 { \ begin_to_develop: \ 00000000 00402DE9 PUSH {LR} 3619 if(IsUnlocked()) \ 00000004 430000EF SWI +67 \ 00000008 000050E3 CMP R0,#+0 \ 0000000C 0100000A BEQ ??begin_to_develop_0 3620 to_develop(); \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ B to_develop ;; tailcall 3621 else 3622 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 + 8472 \ 00000020 6410A0E3 MOV R1,#+100 \ 00000024 4D0000EF SWI +77 3623 } \ 00000028 0080BDE8 POP {PC} ;; return \ ??begin_to_develop_1: \ 0000002C ........ DC32 begin_to_develop \ 00000030 ........ DC32 i_rc + 8472 3624 3625 3626 3627 //----------------------------- LOAD COMMANDS -----------------------------// 3628 //Templates 3629 char *cmd_chars; //Собственно файл 3630 char **cmd_lines; //Массив указателей на строки 3631 \ In segment CODE, align 4, keep-with-next 3632 void cmdFree(void) 3633 { \ cmdFree: \ 00000000 10402DE9 PUSH {R4,LR} 3634 if (cmd_lines) mfree(cmd_lines); \ 00000004 ........ LDR R4,??DataTable136 ;; CmdMenuHeader \ 00000008 180094E5 LDR R0,[R4, #+24] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0000000A BEQ ??cmdFree_0 \ 00000014 150000EF SWI +21 3635 if (cmd_chars) mfree(cmd_chars); \ ??cmdFree_0: \ 00000018 140094E5 LDR R0,[R4, #+20] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0100000A BEQ ??cmdFree_1 \ 00000024 150000EF SWI +21 3636 cmd_lines=NULL; \ 00000028 0000A0E3 MOV R0,#+0 \ ??cmdFree_1: \ 0000002C 180084E5 STR R0,[R4, #+24] 3637 cmd_chars=NULL; \ 00000030 140084E5 STR R0,[R4, #+20] 3638 } \ 00000034 1080BDE8 POP {R4,PC} ;; return 3639 \ In segment CODE, align 4, keep-with-next 3640 int LoadCmd() 3641 { \ LoadCmd: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 4BDF4DE2 SUB SP,SP,#+300 3642 FSTATS stat; 3643 char fn[256]; 3644 int f; 3645 unsigned int ul; 3646 int i; 3647 int fsize; 3648 char *p; 3649 char *pp; 3650 int c; 3651 cmdFree(); \ 00000008 ........ BL cmdFree 3652 strcpy(fn,TEMPLATES_PATH); \ 0000000C ........ LDR R1,??DataTable134 ;; TEMPLATES_PATH \ 00000010 04008DE2 ADD R0,SP,#+4 \ 00000014 1A0000EF SWI +26 3653 i=strlen(fn); \ 00000018 04008DE2 ADD R0,SP,#+4 \ 0000001C 1B0000EF SWI +27 3654 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 3655 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 3656 fsize=stat.size; \ 00000044 08719DE5 LDR R7,[SP, #+264] 3657 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 3658 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 3659 p=cmd_chars=malloc(fsize+1); \ ??LoadCmd_1: \ 00000074 ........ LDR R4,??DataTable136 ;; CmdMenuHeader \ 00000078 010087E2 ADD R0,R7,#+1 \ 0000007C 140000EF SWI +20 \ 00000080 140084E5 STR R0,[R4, #+20] \ 00000084 0060A0E1 MOV R6,R0 3660 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] 3661 fclose(f,&ul); \ 000000A4 0D10A0E1 MOV R1,SP \ 000000A8 0800A0E1 MOV R0,R8 \ 000000AC 0D0000EF SWI +13 3662 i=0; \ 000000B0 0070A0E3 MOV R7,#+0 3663 pp=p; \ 000000B4 0680A0E1 MOV R8,R6 \ 000000B8 020000EA B ??LoadCmd_3 3664 for(;;) 3665 { 3666 c=*p; 3667 if (c<32) 3668 { 3669 if (pp&&(pp!=p)) 3670 { 3671 cmd_lines=realloc(cmd_lines,(i+1)*sizeof(char *)); 3672 cmd_lines[i++]=pp; 3673 } 3674 pp=NULL; 3675 if (!c) break; 3676 *p=0; 3677 } 3678 else 3679 { 3680 if (pp==NULL) pp=p; \ ??LoadCmd_4: \ 000000BC 000058E3 CMP R8,#+0 \ 000000C0 0680A001 MOVEQ R8,R6 3681 } 3682 p++; \ ??LoadCmd_5: \ 000000C4 016086E2 ADD R6,R6,#+1 \ ??LoadCmd_3: \ 000000C8 0090D6E5 LDRB R9,[R6, #+0] \ 000000CC 200059E3 CMP R9,#+32 \ 000000D0 F9FFFFAA BGE ??LoadCmd_4 \ 000000D4 000058E3 CMP R8,#+0 \ 000000D8 06005811 CMPNE R8,R6 \ 000000DC 0600000A BEQ ??LoadCmd_6 \ 000000E0 180094E5 LDR R0,[R4, #+24] \ 000000E4 01A087E2 ADD R10,R7,#+1 \ 000000E8 0A11A0E1 LSL R1,R10,#+2 \ 000000EC BA0000EF SWI +186 \ 000000F0 180084E5 STR R0,[R4, #+24] \ 000000F4 078180E7 STR R8,[R0, +R7, LSL #+2] \ 000000F8 0A70A0E1 MOV R7,R10 \ ??LoadCmd_6: \ 000000FC 0080A0E3 MOV R8,#+0 \ 00000100 000059E3 CMP R9,#+0 3683 } 3684 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 `?` 3685 } 3686 3687 int NumOfItems=0; 3688 HEADER_DESC CmdMenuHeader={NULL,NULL,NULL,NULL,NULL,NULL,LGP_NULL}; 3689 \ In segment CODE, align 4, keep-with-next 3690 void CmdMenuItemHandler(void *data, int curitem, void *unk) 3691 { \ CmdMenuItemHandler: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 3692 void *item=AllocMenuItem(data); \ 0000000C 970100EF SWI +407 \ 00000010 0060A0E1 MOV R6,R0 3693 char *p=cmd_lines[curitem]; \ 00000014 3C009FE5 LDR R0,??CmdMenuItemHandler_0 ;; CmdMenuHeader + 24 \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 057190E7 LDR R7,[R0, +R5, LSL #+2] 3694 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 3695 ascii2ws(ws,p); \ 00000038 0710A0E1 MOV R1,R7 \ 0000003C ........ _BLF ascii2ws,??ascii2ws??rA 3696 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 3697 } \ 00000054 F081BDE8 POP {R4-R8,PC} ;; return \ ??CmdMenuItemHandler_0: \ 00000058 ........ DC32 CmdMenuHeader + 24 3698 \ In segment CODE, align 4, keep-with-next 3699 void CmdMenuGHook(void *data, int cmd) 3700 { \ CmdMenuGHook: \ 00000000 00402DE9 PUSH {LR} 3701 if (cmd==TI_CMD_FOCUS) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0100001A BNE ??CmdMenuGHook_0 3702 { 3703 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 \ 00000010 0080BDE8 POP {PC} 3704 } 3705 if (cmd==TI_CMD_DESTROY) \ ??CmdMenuGHook_0: \ 00000014 030051E3 CMP R1,#+3 \ 00000018 0080BD18 POPNE {PC} 3706 { 3707 cmdFree(); \ 0000001C 0040BDE8 POP {LR} ;; Pop \ 00000020 ........ B cmdFree ;; tailcall 3708 } 3709 } 3710 \ In segment CODE, align 4, keep-with-next 3711 static int CmdMenuKeyHook(void *data, GUI_MSG *msg) 3712 { \ CmdMenuKeyHook: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 3713 int Selected=GetCurMenuItem(data); \ 0000000C 8F0100EF SWI +399 \ 00000010 0060A0E1 MOV R6,R0 3714 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000014 0400A0E1 MOV R0,R4 \ 00000018 E00100EF SWI +480 \ 0000001C 0040A0E1 MOV R4,R0 3715 if ((msg->keys==0x18)||(msg->keys==0x3D)) \ 00000020 F200D5E1 LDRSH R0,[R5, #+2] \ 00000024 180050E3 CMP R0,#+24 \ 00000028 3D005013 CMPNE R0,#+61 \ 0000002C 1700001A BNE ??CmdMenuKeyHook_0 3716 { 3717 if (NumOfItems) \ 00000030 ........ LDR R0,??DataTable136 ;; CmdMenuHeader \ 00000034 1C1090E5 LDR R1,[R0, #+28] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 1300000A BEQ ??CmdMenuKeyHook_0 3718 { 3719 const char *p=cmd_lines[Selected]; \ 00000040 180090E5 LDR R0,[R0, #+24] \ 00000044 065190E7 LDR R5,[R0, +R6, LSL #+2] 3720 WSHDR *ws; 3721 ws=AllocWS(256); \ 00000048 400FA0E3 MOV R0,#+256 \ 0000004C 250100EF SWI +293 \ 00000050 0060A0E1 MOV R6,R0 3722 // wsprintf(ws,percent_t,p); 3723 ascii2ws(ws,p); \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 ........ _BLF ascii2ws,??ascii2ws??rA 3724 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ws); \ 0000005C 040094E5 LDR R0,[R4, #+4] \ 00000060 081094E5 LDR R1,[R4, #+8] \ 00000064 0620A0E1 MOV R2,R6 \ 00000068 DE0100EF SWI +478 3725 EDIT_SetCursorPos(ed_struct->ed_chatgui,wstrlen(ws)+1); \ 0000006C 0600A0E1 MOV R0,R6 \ 00000070 230100EF SWI +291 \ 00000074 011080E2 ADD R1,R0,#+1 \ 00000078 040094E5 LDR R0,[R4, #+4] \ 0000007C D40100EF SWI +468 3726 FreeWS(ws); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 290100EF SWI +297 3727 return(1); \ 00000088 0100A0E3 MOV R0,#+1 \ 0000008C 7080BDE8 POP {R4-R6,PC} 3728 } 3729 } 3730 return(0); \ ??CmdMenuKeyHook_0: \ 00000090 0000A0E3 MOV R0,#+0 \ 00000094 7080BDE8 POP {R4-R6,PC} ;; return 3731 } 3732 3733 const int CmdSoftkeys[]={0,1,2}; 3734 3735 const SOFTKEY_DESC cmd_sk[]= 3736 { 3737 {0x0004,0x0000,(int)""}, 3738 {0x0001,0x0000,(int)LG_CLOSE}, 3739 {0x003D,0x0000,(int)LGP_DOIT_PIC} 3740 }; 3741 const SOFTKEYSTAB cmd_Back_skt= 3742 { 3743 cmd_sk,0 3744 }; 3745 static const MENU_DESC CmdMenuStruct= 3746 { 3747 8,CmdMenuKeyHook,CmdMenuGHook,NULL, 3748 CmdSoftkeys, 3749 &cmd_Back_skt, 3750 0x10, 3751 CmdMenuItemHandler, 3752 NULL, //menuitems, 3753 NULL, //menuprocs, 3754 NULL 3755 }; 3756 \ In segment CODE, align 4, keep-with-next 3757 int DispCmdMenu(void *ed_gui) 3758 { \ DispCmdMenu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 3759 NumOfItems=LoadCmd(); \ 00000004 88509FE5 LDR R5,??DispCmdMenu_0 ;; CmdMenuHeader 3760 if(NumOfItems) \ 00000008 88609FE5 LDR R6,??DispCmdMenu_0+0x4 ;; `?` \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ BL LoadCmd \ 00000014 1C0085E5 STR R0,[R5, #+28] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 1700000A BEQ ??DispCmdMenu_1 3761 { 3762 *((int *)(&CmdMenuHeader.lgp_id))=(int)"Select command"; \ 00000020 0C6085E5 STR R6,[R5, #+12] 3763 patch_header(&CmdMenuHeader); \ 00000024 0000A0E3 MOV R0,#+0 \ 00000028 B000C5E1 STRH R0,[R5, #+0] \ 0000002C 1800A0E3 MOV R0,#+24 \ 00000030 B200C5E1 STRH R0,[R5, #+2] \ 00000034 888100EF SWI +33160 \ 00000038 010040E2 SUB R0,R0,#+1 \ 0000003C B400C5E1 STRH R0,[R5, #+4] \ 00000040 8A8100EF SWI +33162 \ 00000044 170080E2 ADD R0,R0,#+23 \ 00000048 B600C5E1 STRH R0,[R5, #+6] 3764 return CreateMenu(0,0,&CmdMenuStruct,&CmdMenuHeader,0,NumOfItems,ed_gui,0); \ 0000004C 0000A0E3 MOV R0,#+0 \ 00000050 01002DE9 PUSH {R0} \ 00000054 10002DE9 PUSH {R4} \ 00000058 1C0095E5 LDR R0,[R5, #+28] \ 0000005C 0530A0E1 MOV R3,R5 \ 00000060 01002DE9 PUSH {R0} \ 00000064 202086E2 ADD R2,R6,#+32 \ 00000068 0010A0E3 MOV R1,#+0 \ 0000006C 0000A0E3 MOV R0,#+0 \ 00000070 01002DE9 PUSH {R0} \ 00000074 520100EF SWI +338 \ 00000078 10D08DE2 ADD SP,SP,#+16 \ 0000007C 7080BDE8 POP {R4-R6,PC} 3765 } 3766 MsgBoxError(1, (int)"FILE NOT FOUND!"); \ ??DispCmdMenu_1: \ 00000080 101086E2 ADD R1,R6,#+16 \ 00000084 0100A0E3 MOV R0,#+1 \ 00000088 4E0000EF SWI +78 3767 return(0); \ 0000008C 0000A0E3 MOV R0,#+0 \ 00000090 7080BDE8 POP {R4-R6,PC} ;; return \ ??DispCmdMenu_0: \ 00000094 ........ DC32 CmdMenuHeader \ 00000098 ........ DC32 `?` 3768 } 3769 /* 3770 char *GetStatusByIconIndex(int icon) 3771 { 3772 char *stat=malloc(32); 3773 switch(icon) 3774 { 3775 case IS_OFFLINE : sprintf(stat,"Offline"); break; 3776 case IS_INVISIBLE : sprintf(stat,"Invisable"); break; 3777 case IS_AWAY : sprintf(stat,"Away"); break; 3778 case IS_NA : sprintf(stat,"N/A"); break; 3779 case IS_OCCUPIED: sprintf(stat,"Occupied"); break; 3780 case IS_DND : sprintf(stat,"DND"); break; 3781 case IS_DEPRESSION : sprintf(stat,"Depression"); break; 3782 case IS_EVIL : sprintf(stat,"Evil"); break; 3783 case IS_HOME : sprintf(stat,"Home"); break; 3784 case IS_LUNCH : sprintf(stat,"Lunch"); break; 3785 case IS_WORK : sprintf(stat,"Work"); break; 3786 case IS_ONLINE : sprintf(stat,"Online"); break; 3787 case IS_FFC : sprintf(stat,"FFC"); break; 3788 default : sprintf(stat,"Error status"); break; 3789 } 3790 return stat; 3791 } 3792 */ 3793 \ In segment CODE, align 4, keep-with-next 3794 char *GetStatusByIconIndex(int icon) 3795 { \ GetStatusByIconIndex: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 3796 char *stat=malloc(32); \ 00000008 2000A0E3 MOV R0,#+32 \ 0000000C 140000EF SWI +20 3797 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 3798 { 3799 case IS_OFFLINE : sprintf(stat,"Отключен"); break; 3800 case IS_INVISIBLE : sprintf(stat,"Невидимый"); break; \ ??GetStatusByIconIndex_3: \ 0000003C 0C1081E2 ADD R1,R1,#+12 \ 00000040 140000EA B ??GetStatusByIconIndex_4 3801 case IS_AWAY : sprintf(stat,"Отсутсвует"); break; \ ??GetStatusByIconIndex_5: \ 00000044 181081E2 ADD R1,R1,#+24 \ 00000048 120000EA B ??GetStatusByIconIndex_4 3802 case IS_NA : sprintf(stat,"Не доступен"); break; \ ??GetStatusByIconIndex_6: \ 0000004C 241081E2 ADD R1,R1,#+36 \ 00000050 100000EA B ??GetStatusByIconIndex_4 3803 case IS_OCCUPIED: sprintf(stat,"Занят"); break; \ ??GetStatusByIconIndex_7: \ 00000054 301081E2 ADD R1,R1,#+48 \ 00000058 0E0000EA B ??GetStatusByIconIndex_4 3804 case IS_DND : sprintf(stat,"Не беспокоить");break; \ ??GetStatusByIconIndex_8: \ 0000005C 381081E2 ADD R1,R1,#+56 \ 00000060 0C0000EA B ??GetStatusByIconIndex_4 3805 case IS_DEPRESSION : sprintf(stat,"Депрессия"); break; \ ??GetStatusByIconIndex_9: \ 00000064 481081E2 ADD R1,R1,#+72 \ 00000068 0A0000EA B ??GetStatusByIconIndex_4 3806 case IS_EVIL : sprintf(stat,"Злой"); break; \ ??GetStatusByIconIndex_10: \ 0000006C 541081E2 ADD R1,R1,#+84 \ 00000070 080000EA B ??GetStatusByIconIndex_4 3807 case IS_HOME : sprintf(stat,"Дома"); break; \ ??GetStatusByIconIndex_11: \ 00000074 5C1081E2 ADD R1,R1,#+92 \ 00000078 060000EA B ??GetStatusByIconIndex_4 3808 case IS_LUNCH : sprintf(stat,"Жру"); break; \ ??GetStatusByIconIndex_12: \ 0000007C 091F8FE2 ADR R1,??GetStatusByIconIndex_1 ;; "Жру" \ 00000080 040000EA B ??GetStatusByIconIndex_4 3809 case IS_WORK : sprintf(stat,"Работа"); break; \ ??GetStatusByIconIndex_13: \ 00000084 641081E2 ADD R1,R1,#+100 \ 00000088 020000EA B ??GetStatusByIconIndex_4 3810 case IS_ONLINE : sprintf(stat,"В сети"); break; \ ??GetStatusByIconIndex_2: \ 0000008C 6C1081E2 ADD R1,R1,#+108 \ 00000090 000000EA B ??GetStatusByIconIndex_4 3811 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 3812 default : sprintf(stat,"В сети"); break; 3813 } 3814 return stat; \ 000000A0 0500A0E1 MOV R0,R5 \ 000000A4 3080BDE8 POP {R4,R5,PC} ;; return \ ??GetStatusByIconIndex_1: \ 000000A8 C6F0F300 DC8 "Жру" \ 000000AC ........ DC32 `?` 3815 } 3816 //----------------------------- CHECK COMMANDS -----------------------------// 3817 3818 3819 int comanda; 3820 3821 char requests1[]="Sending online time..."; 3822 char requests2[]="Sending msg info..."; 3823 char requests3[]="Sending battery info..."; 3824 char requests4[]="Sending mod info..."; 3825 char requests6[]="Sending offline info..."; 3826 char mod_info[264]; 3827 #ifdef NEWSGOLD 3828 #ifdef ELKA 3829 #ifdef ole64//kluchnik 3830 #define PLATFORM "Plяtform from ОлежкО" 3831 #else 3832 #define PLATFORM "Platform: ЁLKA" 3833 #endif 3834 #else 3835 #define PLATFORM "Platform: NEWЫGOLD" 3836 #endif 3837 #else 3838 #define PLATFORM "Platform: ЫGOLD" 3839 #endif 3840 3841 #define ENA_SIGNAL 1 //для команд, активировать сигналы,али нет 3842 #define DIS_SIGNAL 0 3843 3844 3845 \ In segment CODE, align 4, keep-with-next 3846 void SendData(CLIST *t,char *s,int signal,int count) 3847 { \ SendData: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0140A0E1 MOV R4,R1 \ 00000008 0050A0E1 MOV R5,R0 3848 comanda=0; \ 0000000C ........ LDR R0,??DataTable137 ;; i_rc \ 00000010 0010A0E3 MOV R1,#+0 \ 00000014 401480E5 STR R1,[R0, #+1088] 3849 t->signals=signal; \ 00000018 802085E5 STR R2,[R5, #+128] 3850 TPKT *p; 3851 SENDMSGCOUNT+=count; \ 0000001C D81290E5 LDR R1,[R0, #+728] \ 00000020 011083E0 ADD R1,R3,R1 \ 00000024 D81280E5 STR R1,[R0, #+728] 3852 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 3853 p->pkt.uin=t->uin; \ 0000003C 0C0095E5 LDR R0,[R5, #+12] \ 00000040 000086E5 STR R0,[R6, #+0] 3854 p->pkt.type=T_SENDMSG; \ 00000044 0200A0E3 MOV R0,#+2 \ 00000048 B400C6E1 STRH R0,[R6, #+4] 3855 p->pkt.data_len=strlen(s); \ 0000004C 0400A0E1 MOV R0,R4 \ 00000050 1B0000EF SWI +27 \ 00000054 B600C6E1 STRH R0,[R6, #+6] 3856 strcpy(p->data,s); \ 00000058 0410A0E1 MOV R1,R4 \ 0000005C 080086E2 ADD R0,R6,#+8 \ 00000060 1A0000EF SWI +26 3857 SUBPROC((void *)SendAnswer,0,p); \ 00000064 ........ LDR R0,??DataTable138 ;; SendAnswer \ 00000068 0620A0E1 MOV R2,R6 \ 0000006C 0010A0E3 MOV R1,#+0 \ 00000070 710100EF SWI +369 3858 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 3859 3860 unsigned int *errornumber; 3861 \ In segment CODE, align 4, keep-with-next 3862 void CheckComand(char *txt, CLIST *t) 3863 { \ CheckComand: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3864 if(CurrentPrivateStatus==2) return; \ 00000004 ........ LDR R5,??DataTable153 ;; i_rc \ 00000008 89DF4DE2 SUB SP,SP,#+548 \ 0000000C 00B0A0E1 MOV R11,R0 \ 00000010 C00395E5 LDR R0,[R5, #+960] \ 00000014 0140A0E1 MOV R4,R1 \ 00000018 020050E3 CMP R0,#+2 \ 0000001C F502000A BEQ ??CheckComand_0 3865 comanda=1; 3866 #ifdef kluchnik 3867 sprintf(mod_info,"mod by Evilfox,kluchnik,windes based on revision 2058, mod date: Jule 13 2008 at 14:03:59"); \ 00000020 D86B9FE5 LDR R6,??CheckComand_1 ;; `?` \ 00000024 0100A0E3 MOV R0,#+1 \ 00000028 400485E5 STR R0,[R5, #+1088] 3868 #else 3869 sprintf(mod_info,"mod by Evilfox,kluchnik,windes based on revision 2058, mod date: %s at %s ",__DATE__,__TIME__); 3870 #endif 3871 // sprintf(mod_info,"mod by %s based on revision 2058, mod date: Apr 21 2008 ",devel); 3872 t->signals=1; 3873 if(!strcmp(txt, "__TEXTINFO") || !strcmp(txt, "__TI")) \ 0000002C ........ LDR R7,??DataTable140 ;; I_str \ 00000030 861D85E2 ADD R1,R5,#+8576 \ 00000034 0C108DE5 STR R1,[SP, #+12] \ 00000038 0C009DE5 LDR R0,[SP, #+12] \ 0000003C 0610A0E1 MOV R1,R6 \ 00000040 160000EF SWI +22 \ 00000044 0100A0E3 MOV R0,#+1 \ 00000048 800084E5 STR R0,[R4, #+128] \ 0000004C 0810A0E3 MOV R1,#+8 \ 00000050 7C1D81E3 ORR R1,R1,#0x1F00 \ 00000054 051081E0 ADD R1,R1,R5 \ 00000058 10108DE5 STR R1,[SP, #+16] \ 0000005C 0080A0E3 MOV R8,#+0 \ 00000060 691F86E2 ADD R1,R6,#+420 \ 00000064 0B00A0E1 MOV R0,R11 \ 00000068 190000EF SWI +25 \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 0400000A BEQ ??CheckComand_2 \ 00000074 6C1F86E2 ADD R1,R6,#+432 \ 00000078 0B00A0E1 MOV R0,R11 \ 0000007C 190000EF SWI +25 \ 00000080 000050E3 CMP R0,#+0 \ 00000084 8600001A BNE ??CheckComand_3 3874 { 3875 char *s=malloc(16384); \ ??CheckComand_2: \ 00000088 400CA0E3 MOV R0,#+16384 \ 0000008C 140000EF SWI +20 \ 00000090 0090A0E1 MOV R9,R0 3876 char pl[256]; 3877 *s=0; \ 00000094 0080C9E5 STRB R8,[R9, #+0] 3878 snprintf(pl,256,"%s model: %s sw: %s\r\n",PLATFORM,Get_Phone_Info(PI_MODEL),Get_Phone_Info(PI_SW_NUMBER)); \ 00000098 0700A0E3 MOV R0,#+7 \ 0000009C D50100EF SWI +469 \ 000000A0 00A0A0E1 MOV R10,R0 \ 000000A4 0900A0E3 MOV R0,#+9 \ 000000A8 D50100EF SWI +469 \ 000000AC 00042DE9 PUSH {R10} \ 000000B0 01002DE9 PUSH {R0} \ 000000B4 743086E2 ADD R3,R6,#+116 \ 000000B8 5C2086E2 ADD R2,R6,#+92 \ 000000BC 401FA0E3 MOV R1,#+256 \ 000000C0 2C008DE2 ADD R0,SP,#+44 \ 000000C4 1B0100EF SWI +283 3879 strcat(s,pl); \ 000000C8 2C108DE2 ADD R1,SP,#+44 \ 000000CC 0900A0E1 MOV R0,R9 \ 000000D0 170000EF SWI +23 3880 char online[256]; 3881 sprintf(online,"Время в онлайн: %02d:%02d:%02d \r\n" 3882 "Сервер: %s \r\n%s \r\n", uptimeHour, uptimeMin, uptimeSec, hostbuf2,PINGO); \ 000000D4 E000A0E3 MOV R0,#+224 \ 000000D8 600D80E3 ORR R0,R0,#0x1800 \ 000000DC 050080E0 ADD R0,R0,R5 \ 000000E0 01002DE9 PUSH {R0} \ 000000E4 1C009DE5 LDR R0,[SP, #+28] \ 000000E8 841086E2 ADD R1,R6,#+132 \ 000000EC 01002DE9 PUSH {R0} \ 000000F0 A00395E5 LDR R0,[R5, #+928] \ 000000F4 01002DE9 PUSH {R0} \ 000000F8 9C3395E5 LDR R3,[R5, #+924] \ 000000FC 982395E5 LDR R2,[R5, #+920] \ 00000100 4E0F8DE2 ADD R0,SP,#+312 \ 00000104 160000EF SWI +22 3883 strcat(s,online); \ 00000108 4E1F8DE2 ADD R1,SP,#+312 \ 0000010C 0900A0E1 MOV R0,R9 \ 00000110 170000EF SWI +23 3884 char *send_txt=malloc(64); \ 00000114 4000A0E3 MOV R0,#+64 \ 00000118 140000EF SWI +20 \ 0000011C 00A0A0E1 MOV R10,R0 3885 sprintf(send_txt, "Отправлено сообщений: %d \r\n" 3886 "Принято сообщений: %d \r\n", main2_count, main_count); \ 00000120 ........ LDR R0,??DataTable144 ;; main_count \ 00000124 B81086E2 ADD R1,R6,#+184 \ 00000128 003090E5 LDR R3,[R0, #+0] \ 0000012C ........ LDR R0,??DataTable145 ;; main2_count \ 00000130 002090E5 LDR R2,[R0, #+0] \ 00000134 0A00A0E1 MOV R0,R10 \ 00000138 160000EF SWI +22 3887 strcat(s,send_txt); \ 0000013C 0A10A0E1 MOV R1,R10 \ 00000140 0900A0E1 MOV R0,R9 \ 00000144 170000EF SWI +23 3888 3889 WSHDR *ws=AllocWS(64); \ 00000148 4000A0E3 MOV R0,#+64 \ 0000014C 250100EF SWI +293 \ 00000150 00B0A0E1 MOV R11,R0 3890 GetProvider(ws,0); \ 00000154 0010A0E3 MOV R1,#+0 \ 00000158 410000EF SWI +65 3891 char prov[16]; 3892 ws_2str(ws,prov,wstrlen(ws)); \ 0000015C 0B00A0E1 MOV R0,R11 \ 00000160 230100EF SWI +291 \ 00000164 0020A0E1 MOV R2,R0 \ 00000168 28108DE2 ADD R1,SP,#+40 \ 0000016C 0B00A0E1 MOV R0,R11 \ 00000170 A30000EF SWI +163 3893 sprintf(send_txt, "Оператор: %s \r\n", prov); \ 00000174 28208DE2 ADD R2,SP,#+40 \ 00000178 EC1086E2 ADD R1,R6,#+236 \ 0000017C 0A00A0E1 MOV R0,R10 \ 00000180 160000EF SWI +22 3894 FreeWS(ws); \ 00000184 0B00A0E1 MOV R0,R11 \ 00000188 290100EF SWI +297 3895 strcat(s,send_txt); \ 0000018C 0A10A0E1 MOV R1,R10 \ 00000190 0900A0E1 MOV R0,R9 \ 00000194 170000EF SWI +23 3896 3897 int bat; 3898 bat=*RamCap(); \ 00000198 C88000EF SWI +32968 \ 0000019C B020D0E1 LDRH R2,[R0, #+0] 3899 sprintf(send_txt, "Заряд батареи: %d процентов \r\n", bat); \ 000001A0 FC1086E2 ADD R1,R6,#+252 \ 000001A4 0A00A0E1 MOV R0,R10 \ 000001A8 160000EF SWI +22 3900 strcat(s,send_txt); \ 000001AC 0A10A0E1 MOV R1,R10 \ 000001B0 0900A0E1 MOV R0,R9 \ 000001B4 170000EF SWI +23 3901 3902 char *status=malloc(256); \ 000001B8 400FA0E3 MOV R0,#+256 \ 000001BC 140000EF SWI +20 \ 000001C0 00B0A0E1 MOV R11,R0 3903 TTime the; 3904 GetDateTime(NULL,&the); \ 000001C4 18108DE2 ADD R1,SP,#+24 \ 000001C8 0800A0E1 MOV R0,R8 \ 000001CC B40000EF SWI +180 3905 void Get_Online_total(); 3906 Get_Online_total(); \ 000001D0 ........ BL Get_Online_total 3907 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l \ 000001D4 EC2395E5 LDR R2,[R5, #+1004] \ 000001D8 F03395E5 LDR R3,[R5, #+1008] 3908 sprintf(status, "Traffic: Rx : %db Tx : %db Queue: %db \r\nTime: %02d:%02d\r\n" 3909 "Online contact: %d [total: %d] \r\nUnread message: %d/%d ", 3910 RX,TX,sendq_l, 3911 the.hour, the.min, 3912 kopa_kontaktu, kopa_online, 3913 total_unread,total_unread2); \ 000001DC CC0295E5 LDR R0,[R5, #+716] \ 000001E0 471F86E2 ADD R1,R6,#+284 \ 000001E4 01002DE9 PUSH {R0} \ 000001E8 000495E5 LDR R0,[R5, #+1024] \ 000001EC 01002DE9 PUSH {R0} \ 000001F0 1C0495E5 LDR R0,[R5, #+1052] \ 000001F4 01002DE9 PUSH {R0} \ 000001F8 200495E5 LDR R0,[R5, #+1056] \ 000001FC 01002DE9 PUSH {R0} \ 00000200 2900DDE5 LDRB R0,[SP, #+41] \ 00000204 01002DE9 PUSH {R0} \ 00000208 2C00DDE5 LDRB R0,[SP, #+44] \ 0000020C 01002DE9 PUSH {R0} \ 00000210 F40395E5 LDR R0,[R5, #+1012] \ 00000214 01002DE9 PUSH {R0} \ 00000218 0B00A0E1 MOV R0,R11 \ 0000021C 160000EF SWI +22 \ 00000220 30D08DE2 ADD SP,SP,#+48 3914 strcat(s,status); \ 00000224 0B10A0E1 MOV R1,R11 \ 00000228 0900A0E1 MOV R0,R9 \ 0000022C 170000EF SWI +23 3915 comanda=0; 3916 if(show_send_info) \ 00000230 CC099FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 00000234 408485E5 STR R8,[R5, #+1088] \ 00000238 000090E5 LDR R0,[R0, #+0] \ 0000023C 000050E3 CMP R0,#+0 \ 00000240 D80295E5 LDR R0,[R5, #+728] \ 00000244 010080E2 ADD R0,R0,#+1 \ 00000248 D80285E5 STR R0,[R5, #+728] \ 0000024C 0900000A BEQ ??CheckComand_4 3917 AddStringToLog(t,0x01,"Sending textinfo...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000250 0110A0E3 MOV R1,#+1 \ 00000254 02002DE9 PUSH {R1} \ 00000258 8008A0E1 LSL R0,R0,#+17 \ 0000025C A008A0E1 LSR R0,R0,#+17 \ 00000260 01002DE9 PUSH {R0} \ 00000264 0730A0E1 MOV R3,R7 \ 00000268 642F86E2 ADD R2,R6,#+400 \ 0000026C 0400A0E1 MOV R0,R4 \ 00000270 ........ BL AddStringToLog \ 00000274 08D08DE2 ADD SP,SP,#+8 3918 else 3919 SENDMSGCOUNT++; 3920 SendData(t,s,ENA_SIGNAL,0); \ ??CheckComand_4: \ 00000278 0030A0E3 MOV R3,#+0 \ 0000027C 0120A0E3 MOV R2,#+1 \ 00000280 0910A0E1 MOV R1,R9 \ 00000284 0400A0E1 MOV R0,R4 \ 00000288 ........ BL SendData 3921 mfree(s); \ 0000028C 0900A0E1 MOV R0,R9 \ 00000290 150000EF SWI +21 3922 mfree(send_txt); \ 00000294 0A00A0E1 MOV R0,R10 \ 00000298 150000EF SWI +21 3923 mfree(status); \ 0000029C 0B00A0E1 MOV R0,R11 \ 000002A0 690100EA B ??CheckComand_5 3924 return; 3925 } 3926 3927 if(!strcmp(txt, "__TIME") || !strcmp(txt, "__T") || !strcmp(txt, "GET_TIME")) \ ??CheckComand_3: \ 000002A4 761F86E2 ADD R1,R6,#+472 \ 000002A8 0B00A0E1 MOV R0,R11 \ 000002AC 190000EF SWI +25 \ 000002B0 000050E3 CMP R0,#+0 \ 000002B4 0900000A BEQ ??CheckComand_6 \ 000002B8 DC1F8FE2 ADR R1,??CheckComand_7 ;; "__T" \ 000002BC 0B00A0E1 MOV R0,R11 \ 000002C0 190000EF SWI +25 \ 000002C4 000050E3 CMP R0,#+0 \ 000002C8 0400000A BEQ ??CheckComand_6 \ 000002CC 781F86E2 ADD R1,R6,#+480 \ 000002D0 0B00A0E1 MOV R0,R11 \ 000002D4 190000EF SWI +25 \ 000002D8 000050E3 CMP R0,#+0 \ 000002DC 2300001A BNE ??CheckComand_8 3928 { 3929 char *status=malloc(256); \ ??CheckComand_6: \ 000002E0 400FA0E3 MOV R0,#+256 \ 000002E4 140000EF SWI +20 \ 000002E8 0090A0E1 MOV R9,R0 3930 TTime the; 3931 GetDateTime(NULL,&the); \ 000002EC 04108DE2 ADD R1,SP,#+4 \ 000002F0 0000A0E3 MOV R0,#+0 \ 000002F4 B40000EF SWI +180 3932 sprintf(status, "Time: %02d:%02d",the.hour, the.min); \ 000002F8 0530DDE5 LDRB R3,[SP, #+5] \ 000002FC 0420DDE5 LDRB R2,[SP, #+4] \ 00000300 6E1F86E2 ADD R1,R6,#+440 \ 00000304 0900A0E1 MOV R0,R9 \ 00000308 160000EF SWI +22 3933 comanda=0; 3934 if(show_send_info) \ 0000030C F0089FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 00000310 408485E5 STR R8,[R5, #+1088] \ 00000314 000090E5 LDR R0,[R0, #+0] \ 00000318 000050E3 CMP R0,#+0 \ 0000031C D80295E5 LDR R0,[R5, #+728] \ 00000320 010080E2 ADD R0,R0,#+1 \ 00000324 D80285E5 STR R0,[R5, #+728] \ 00000328 0900000A BEQ ??CheckComand_9 3935 AddStringToLog(t,0x01,"Sending time...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 0000032C 0110A0E3 MOV R1,#+1 \ 00000330 02002DE9 PUSH {R1} \ 00000334 8008A0E1 LSL R0,R0,#+17 \ 00000338 A008A0E1 LSR R0,R0,#+17 \ 0000033C 01002DE9 PUSH {R0} \ 00000340 0730A0E1 MOV R3,R7 \ 00000344 722F86E2 ADD R2,R6,#+456 \ 00000348 0400A0E1 MOV R0,R4 \ 0000034C ........ BL AddStringToLog \ 00000350 08D08DE2 ADD SP,SP,#+8 3936 else 3937 SENDMSGCOUNT++; 3938 SendData(t,status,ENA_SIGNAL,0); \ ??CheckComand_9: \ 00000354 0030A0E3 MOV R3,#+0 \ 00000358 0120A0E3 MOV R2,#+1 \ 0000035C 0910A0E1 MOV R1,R9 \ 00000360 0400A0E1 MOV R0,R4 \ 00000364 ........ BL SendData 3939 mfree(status); \ 00000368 0900A0E1 MOV R0,R9 \ 0000036C 360100EA B ??CheckComand_5 3940 return; 3941 } 3942 3943 if(!strcmp(txt, "GET_PLATFORM_INFO") || !strcmp(txt, "__PLATFORM") || !strcmp(txt,"__HW")) \ ??CheckComand_8: \ 00000370 ........ LDR R9,??DataTable143 ;; SendAnswer \ 00000374 02A0A0E3 MOV R10,#+2 \ 00000378 871F86E2 ADD R1,R6,#+540 \ 0000037C 0B00A0E1 MOV R0,R11 \ 00000380 190000EF SWI +25 \ 00000384 000050E3 CMP R0,#+0 \ 00000388 0900000A BEQ ??CheckComand_10 \ 0000038C 8C1F86E2 ADD R1,R6,#+560 \ 00000390 0B00A0E1 MOV R0,R11 \ 00000394 190000EF SWI +25 \ 00000398 000050E3 CMP R0,#+0 \ 0000039C 0400000A BEQ ??CheckComand_10 \ 000003A0 8F1F86E2 ADD R1,R6,#+572 \ 000003A4 0B00A0E1 MOV R0,R11 \ 000003A8 190000EF SWI +25 \ 000003AC 000050E3 CMP R0,#+0 \ 000003B0 3100001A BNE ??CheckComand_11 3944 { 3945 comanda=0; \ ??CheckComand_10: \ 000003B4 408485E5 STR R8,[R5, #+1088] 3946 TPKT *p; 3947 char pl[256]; 3948 snprintf(pl,256,"%s model: %s sw: %s",PLATFORM,Get_Phone_Info(PI_MODEL),Get_Phone_Info(PI_SW_NUMBER)); \ 000003B8 0700A0E3 MOV R0,#+7 \ 000003BC D50100EF SWI +469 \ 000003C0 0080A0E1 MOV R8,R0 \ 000003C4 0900A0E3 MOV R0,#+9 \ 000003C8 D50100EF SWI +469 \ 000003CC 00012DE9 PUSH {R8} \ 000003D0 01002DE9 PUSH {R0} \ 000003D4 743086E2 ADD R3,R6,#+116 \ 000003D8 7B2F86E2 ADD R2,R6,#+492 \ 000003DC 401FA0E3 MOV R1,#+256 \ 000003E0 4B0F8DE2 ADD R0,SP,#+300 \ 000003E4 1B0100EF SWI +283 3949 p=malloc(sizeof(PKT)+strlen(pl)+1); \ 000003E8 4B0F8DE2 ADD R0,SP,#+300 \ 000003EC 1B0000EF SWI +27 \ 000003F0 090080E2 ADD R0,R0,#+9 \ 000003F4 140000EF SWI +20 \ 000003F8 0080A0E1 MOV R8,R0 3950 p->pkt.uin=t->uin; \ 000003FC 0C0094E5 LDR R0,[R4, #+12] \ 00000400 000088E5 STR R0,[R8, #+0] 3951 p->pkt.type=T_SENDMSG; \ 00000404 B4A0C8E1 STRH R10,[R8, #+4] 3952 p->pkt.data_len=strlen(pl); \ 00000408 4B0F8DE2 ADD R0,SP,#+300 \ 0000040C 1B0000EF SWI +27 \ 00000410 B600C8E1 STRH R0,[R8, #+6] 3953 strcpy(p->data,pl); \ 00000414 4B1F8DE2 ADD R1,SP,#+300 \ 00000418 080088E2 ADD R0,R8,#+8 \ 0000041C 1A0000EF SWI +26 3954 if(show_send_info) \ 00000420 DC079FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 00000424 000090E5 LDR R0,[R0, #+0] \ 00000428 08D08DE2 ADD SP,SP,#+8 \ 0000042C 000050E3 CMP R0,#+0 \ 00000430 D80295E5 LDR R0,[R5, #+728] \ 00000434 010080E2 ADD R0,R0,#+1 \ 00000438 D80285E5 STR R0,[R5, #+728] \ 0000043C 0900000A BEQ ??CheckComand_12 3955 AddStringToLog(t,0x01,"Sending platform info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000440 0110A0E3 MOV R1,#+1 \ 00000444 02002DE9 PUSH {R1} \ 00000448 8008A0E1 LSL R0,R0,#+17 \ 0000044C A008A0E1 LSR R0,R0,#+17 \ 00000450 01002DE9 PUSH {R0} \ 00000454 0730A0E1 MOV R3,R7 \ 00000458 802F86E2 ADD R2,R6,#+512 \ 0000045C 0400A0E1 MOV R0,R4 \ 00000460 ........ BL AddStringToLog \ 00000464 08D08DE2 ADD SP,SP,#+8 3956 else 3957 SENDMSGCOUNT++; 3958 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_12: \ 00000468 0820A0E1 MOV R2,R8 \ ??CheckComand_13: \ 0000046C 0010A0E3 MOV R1,#+0 \ 00000470 0900A0E1 MOV R0,R9 \ 00000474 710100EF SWI +369 3959 return; \ 00000478 F40000EA B ??CheckComand_14 3960 } 3961 3962 if(!strcmp(txt, "GET_ONLINE_TIME") || !strcmp(txt, "__ONLINE")) \ ??CheckComand_11: \ 0000047C 9C1F86E2 ADD R1,R6,#+624 \ 00000480 0B00A0E1 MOV R0,R11 \ 00000484 190000EF SWI +25 \ 00000488 000050E3 CMP R0,#+0 \ 0000048C 0400000A BEQ ??CheckComand_15 \ 00000490 A01F86E2 ADD R1,R6,#+640 \ 00000494 0B00A0E1 MOV R0,R11 \ 00000498 190000EF SWI +25 \ 0000049C 000050E3 CMP R0,#+0 \ 000004A0 2D00001A BNE ??CheckComand_16 3963 { 3964 comanda=0; \ ??CheckComand_15: \ 000004A4 408485E5 STR R8,[R5, #+1088] 3965 TPKT *p; 3966 char online[256]; 3967 sprintf(online,"Время в онлайн: %02d:%02d:%02d \n" 3968 "Сервер: %s", uptimeHour, uptimeMin, uptimeSec, hostbuf2); \ 000004A8 10009DE5 LDR R0,[SP, #+16] \ 000004AC 911F86E2 ADD R1,R6,#+580 \ 000004B0 01002DE9 PUSH {R0} \ 000004B4 A00395E5 LDR R0,[R5, #+928] \ 000004B8 01002DE9 PUSH {R0} \ 000004BC 9C3395E5 LDR R3,[R5, #+924] \ 000004C0 982395E5 LDR R2,[R5, #+920] \ 000004C4 4B0F8DE2 ADD R0,SP,#+300 \ 000004C8 160000EF SWI +22 3969 p=malloc(sizeof(PKT)+strlen(online)+1); \ 000004CC 4B0F8DE2 ADD R0,SP,#+300 \ 000004D0 1B0000EF SWI +27 \ 000004D4 090080E2 ADD R0,R0,#+9 \ 000004D8 140000EF SWI +20 \ 000004DC 0060A0E1 MOV R6,R0 3970 p->pkt.uin=t->uin; \ 000004E0 0C0094E5 LDR R0,[R4, #+12] \ 000004E4 000086E5 STR R0,[R6, #+0] 3971 p->pkt.type=T_SENDMSG; \ 000004E8 B4A0C6E1 STRH R10,[R6, #+4] 3972 p->pkt.data_len=strlen(online); \ 000004EC 4B0F8DE2 ADD R0,SP,#+300 \ 000004F0 1B0000EF SWI +27 \ 000004F4 B600C6E1 STRH R0,[R6, #+6] 3973 strcpy(p->data,online); \ 000004F8 4B1F8DE2 ADD R1,SP,#+300 \ 000004FC 080086E2 ADD R0,R6,#+8 \ 00000500 1A0000EF SWI +26 3974 if(show_send_info) \ 00000504 F8069FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 00000508 000090E5 LDR R0,[R0, #+0] \ 0000050C 08D08DE2 ADD SP,SP,#+8 \ 00000510 000050E3 CMP R0,#+0 \ 00000514 D80295E5 LDR R0,[R5, #+728] \ 00000518 010080E2 ADD R0,R0,#+1 \ 0000051C D80285E5 STR R0,[R5, #+728] \ 00000520 0B00000A BEQ ??CheckComand_17 3975 AddStringToLog(t,0x01,requests1,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000524 0110A0E3 MOV R1,#+1 \ 00000528 02002DE9 PUSH {R1} \ 0000052C 8008A0E1 LSL R0,R0,#+17 \ 00000530 A008A0E1 LSR R0,R0,#+17 \ 00000534 01002DE9 PUSH {R0} \ 00000538 0730A0E1 MOV R3,R7 \ 0000053C 2800A0E3 MOV R0,#+40 \ 00000540 840D80E3 ORR R0,R0,#0x2100 \ 00000544 052080E0 ADD R2,R0,R5 \ 00000548 0400A0E1 MOV R0,R4 \ 0000054C ........ BL AddStringToLog \ 00000550 08D08DE2 ADD SP,SP,#+8 3976 else 3977 SENDMSGCOUNT++; 3978 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_17: \ 00000554 0620A0E1 MOV R2,R6 \ 00000558 C3FFFFEA B ??CheckComand_13 3979 return; 3980 } 3981 3982 if(!strcmp(txt, "GET_MSG_INFO") || !strcmp(txt, "__MSG")) \ ??CheckComand_16: \ 0000055C AF1F86E2 ADD R1,R6,#+700 \ 00000560 0B00A0E1 MOV R0,R11 \ 00000564 190000EF SWI +25 \ 00000568 000050E3 CMP R0,#+0 \ 0000056C 0400000A BEQ ??CheckComand_18 \ 00000570 B31F86E2 ADD R1,R6,#+716 \ 00000574 0B00A0E1 MOV R0,R11 \ 00000578 190000EF SWI +25 \ 0000057C 000050E3 CMP R0,#+0 \ 00000580 2B00001A BNE ??CheckComand_19 3983 { 3984 comanda=0; \ ??CheckComand_18: \ 00000584 408485E5 STR R8,[R5, #+1088] 3985 TPKT *p; 3986 char *send_txt=malloc(64); \ 00000588 4000A0E3 MOV R0,#+64 \ 0000058C 140000EF SWI +20 \ 00000590 0080A0E1 MOV R8,R0 3987 sprintf(send_txt, "Отправлено сообщений: %d \n" 3988 "Принято сообщений: %d" 3989 , main2_count, main_count); \ 00000594 ........ LDR R0,??DataTable144 ;; main_count \ 00000598 A31F86E2 ADD R1,R6,#+652 \ 0000059C 003090E5 LDR R3,[R0, #+0] \ 000005A0 ........ LDR R0,??DataTable145 ;; main2_count \ 000005A4 002090E5 LDR R2,[R0, #+0] \ 000005A8 0800A0E1 MOV R0,R8 \ 000005AC 160000EF SWI +22 3990 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000005B0 0800A0E1 MOV R0,R8 \ 000005B4 1B0000EF SWI +27 \ 000005B8 090080E2 ADD R0,R0,#+9 \ 000005BC 140000EF SWI +20 \ 000005C0 0060A0E1 MOV R6,R0 3991 p->pkt.uin=t->uin; \ 000005C4 0C0094E5 LDR R0,[R4, #+12] \ 000005C8 000086E5 STR R0,[R6, #+0] 3992 p->pkt.type=T_SENDMSG; \ 000005CC B4A0C6E1 STRH R10,[R6, #+4] 3993 p->pkt.data_len=strlen(send_txt); \ 000005D0 0800A0E1 MOV R0,R8 \ 000005D4 1B0000EF SWI +27 \ 000005D8 B600C6E1 STRH R0,[R6, #+6] 3994 strcpy(p->data,send_txt); \ 000005DC 0810A0E1 MOV R1,R8 \ 000005E0 080086E2 ADD R0,R6,#+8 \ 000005E4 1A0000EF SWI +26 3995 if(show_send_info) \ 000005E8 14069FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 000005EC 000090E5 LDR R0,[R0, #+0] \ 000005F0 000050E3 CMP R0,#+0 \ 000005F4 D80295E5 LDR R0,[R5, #+728] \ 000005F8 010080E2 ADD R0,R0,#+1 \ 000005FC D80285E5 STR R0,[R5, #+728] \ 00000600 8C00000A BEQ ??CheckComand_20 3996 AddStringToLog(t,0x01,requests2,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000604 0110A0E3 MOV R1,#+1 \ 00000608 02002DE9 PUSH {R1} \ 0000060C 8008A0E1 LSL R0,R0,#+17 \ 00000610 A008A0E1 LSR R0,R0,#+17 \ 00000614 01002DE9 PUSH {R0} \ 00000618 0730A0E1 MOV R3,R7 \ 0000061C 852D85E2 ADD R2,R5,#+8512 \ 00000620 0400A0E1 MOV R0,R4 \ 00000624 ........ BL AddStringToLog \ 00000628 08D08DE2 ADD SP,SP,#+8 3997 else 3998 SENDMSGCOUNT++; 3999 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_21: \ 0000062C 810000EA B ??CheckComand_20 \ ??CheckComand_7: \ 00000630 5F5F5400 DC8 "__T" 4000 mfree(send_txt); 4001 return; 4002 } 4003 4004 //==========================windes commands begin ===================== 4005 4006 if(!strcmp(txt, "GET_PROVIDER") || !strcmp(txt, "__PROVIDER")) \ ??CheckComand_19: \ 00000634 C01F86E2 ADD R1,R6,#+768 \ 00000638 0B00A0E1 MOV R0,R11 \ 0000063C 190000EF SWI +25 \ 00000640 000050E3 CMP R0,#+0 \ 00000644 0400000A BEQ ??CheckComand_22 \ 00000648 C41F86E2 ADD R1,R6,#+784 \ 0000064C 0B00A0E1 MOV R0,R11 \ 00000650 190000EF SWI +25 \ 00000654 000050E3 CMP R0,#+0 \ 00000658 3600001A BNE ??CheckComand_23 4007 { 4008 comanda=0; \ ??CheckComand_22: \ 0000065C 408485E5 STR R8,[R5, #+1088] 4009 TPKT *p; 4010 4011 WSHDR *ws=AllocWS(32); \ 00000660 2000A0E3 MOV R0,#+32 \ 00000664 250100EF SWI +293 \ 00000668 0080A0E1 MOV R8,R0 4012 GetProvider(ws,0); \ 0000066C 0010A0E3 MOV R1,#+0 \ 00000670 410000EF SWI +65 4013 char prov[16]; 4014 ws_2str(ws,prov,wstrlen(ws)); \ 00000674 0800A0E1 MOV R0,R8 \ 00000678 230100EF SWI +291 \ 0000067C 0020A0E1 MOV R2,R0 \ 00000680 14108DE2 ADD R1,SP,#+20 \ 00000684 0800A0E1 MOV R0,R8 \ 00000688 A30000EF SWI +163 4015 char *send_txt=malloc(32); \ 0000068C 2000A0E3 MOV R0,#+32 \ 00000690 140000EF SWI +20 \ 00000694 00B0A0E1 MOV R11,R0 4016 sprintf(send_txt, "Оператор: %s", prov); \ 00000698 14208DE2 ADD R2,SP,#+20 \ 0000069C B51F86E2 ADD R1,R6,#+724 \ 000006A0 160000EF SWI +22 4017 FreeWS(ws); \ 000006A4 0800A0E1 MOV R0,R8 \ 000006A8 290100EF SWI +297 4018 4019 p=malloc(sizeof(PKT)+28+1); \ 000006AC 2500A0E3 MOV R0,#+37 \ 000006B0 140000EF SWI +20 \ 000006B4 0080A0E1 MOV R8,R0 4020 p->pkt.uin=t->uin; \ 000006B8 0C0094E5 LDR R0,[R4, #+12] \ 000006BC 000088E5 STR R0,[R8, #+0] 4021 p->pkt.type=T_SENDMSG; \ 000006C0 B4A0C8E1 STRH R10,[R8, #+4] 4022 p->pkt.data_len=strlen(send_txt); \ 000006C4 0B00A0E1 MOV R0,R11 \ 000006C8 1B0000EF SWI +27 \ 000006CC B600C8E1 STRH R0,[R8, #+6] 4023 strcpy(p->data,send_txt); \ 000006D0 0B10A0E1 MOV R1,R11 \ 000006D4 080088E2 ADD R0,R8,#+8 \ 000006D8 1A0000EF SWI +26 4024 if(show_send_info) \ 000006DC 20059FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 000006E0 000090E5 LDR R0,[R0, #+0] \ 000006E4 000050E3 CMP R0,#+0 \ 000006E8 D80295E5 LDR R0,[R5, #+728] \ 000006EC 010080E2 ADD R0,R0,#+1 \ 000006F0 D80285E5 STR R0,[R5, #+728] \ 000006F4 0900000A BEQ ??CheckComand_24 4025 AddStringToLog(t,0x01,"Sending provider name...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000006F8 0110A0E3 MOV R1,#+1 \ 000006FC 02002DE9 PUSH {R1} \ 00000700 8008A0E1 LSL R0,R0,#+17 \ 00000704 A008A0E1 LSR R0,R0,#+17 \ 00000708 01002DE9 PUSH {R0} \ 0000070C 0730A0E1 MOV R3,R7 \ 00000710 B92F86E2 ADD R2,R6,#+740 \ 00000714 0400A0E1 MOV R0,R4 \ 00000718 ........ BL AddStringToLog \ 0000071C 08D08DE2 ADD SP,SP,#+8 4026 else 4027 SENDMSGCOUNT++; 4028 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_24: \ 00000720 0820A0E1 MOV R2,R8 \ 00000724 0010A0E3 MOV R1,#+0 \ 00000728 0900A0E1 MOV R0,R9 \ 0000072C 710100EF SWI +369 4029 mfree(send_txt); \ 00000730 0B00A0E1 MOV R0,R11 \ 00000734 440000EA B ??CheckComand_5 4030 return; 4031 } 4032 4033 4034 //----------------------------------------------------------------------- 4035 4036 4037 if(!strcmp(txt, "GET_MOD_INFO") || !strcmp(txt, "__MOD")) \ ??CheckComand_23: \ 00000738 CC1F86E2 ADD R1,R6,#+816 \ 0000073C 0B00A0E1 MOV R0,R11 \ 00000740 190000EF SWI +25 \ 00000744 000050E3 CMP R0,#+0 \ 00000748 0400000A BEQ ??CheckComand_25 \ 0000074C D01F86E2 ADD R1,R6,#+832 \ 00000750 0B00A0E1 MOV R0,R11 \ 00000754 190000EF SWI +25 \ 00000758 000050E3 CMP R0,#+0 \ 0000075C 3D00001A BNE ??CheckComand_26 4038 { 4039 comanda=0; \ ??CheckComand_25: \ 00000760 408485E5 STR R8,[R5, #+1088] 4040 TPKT *p; 4041 char *send_txt=malloc(256); \ 00000764 400FA0E3 MOV R0,#+256 \ 00000768 140000EF SWI +20 \ 0000076C 0080A0E1 MOV R8,R0 4042 // sprintf(I_UIN, "uin%d", t->uin); 4043 strcpy(I_UIN, t->name); \ 00000770 0800A0E3 MOV R0,#+8 \ 00000774 800D80E3 ORR R0,R0,#0x2000 \ 00000778 05B080E0 ADD R11,R0,R5 \ 0000077C 141084E2 ADD R1,R4,#+20 \ 00000780 0B00A0E1 MOV R0,R11 \ 00000784 1A0000EF SWI +26 4044 if(strstr(ignor_list,I_UIN)==0) \ 00000788 ........ LDR R0,??DataTable146 ;; ignor_list \ 0000078C 0B10A0E1 MOV R1,R11 \ 00000790 180100EF SWI +280 \ 00000794 000050E3 CMP R0,#+0 4045 { 4046 strcpy(send_txt, mod_info); \ 00000798 0C109D05 LDREQ R1,[SP, #+12] 4047 } 4048 else 4049 strcpy(send_txt, "***Access denied***"); \ 0000079C 0800A0E1 MOV R0,R8 \ 000007A0 C71F8612 ADDNE R1,R6,#+796 \ 000007A4 1A0000EF SWI +26 4050 4051 strcpy(send_txt, mod_info); \ 000007A8 0C109DE5 LDR R1,[SP, #+12] \ 000007AC 0800A0E1 MOV R0,R8 \ 000007B0 1A0000EF SWI +26 4052 4053 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000007B4 0800A0E1 MOV R0,R8 \ 000007B8 1B0000EF SWI +27 \ 000007BC 090080E2 ADD R0,R0,#+9 \ 000007C0 140000EF SWI +20 \ 000007C4 0060A0E1 MOV R6,R0 4054 p->pkt.uin=t->uin; \ 000007C8 0C0094E5 LDR R0,[R4, #+12] \ 000007CC 000086E5 STR R0,[R6, #+0] 4055 p->pkt.type=T_SENDMSG; \ 000007D0 B4A0C6E1 STRH R10,[R6, #+4] 4056 p->pkt.data_len=strlen(send_txt); \ 000007D4 0800A0E1 MOV R0,R8 \ 000007D8 1B0000EF SWI +27 \ 000007DC B600C6E1 STRH R0,[R6, #+6] 4057 strcpy(p->data,send_txt); \ 000007E0 0810A0E1 MOV R1,R8 \ 000007E4 080086E2 ADD R0,R6,#+8 \ 000007E8 1A0000EF SWI +26 4058 #ifdef EVILFOX 4059 SENDMSGCOUNT++; 4060 #else 4061 if(show_send_info) \ 000007EC 10049FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 000007F0 000090E5 LDR R0,[R0, #+0] \ 000007F4 000050E3 CMP R0,#+0 \ 000007F8 D80295E5 LDR R0,[R5, #+728] \ 000007FC 010080E2 ADD R0,R0,#+1 \ 00000800 D80285E5 STR R0,[R5, #+728] \ 00000804 0B00000A BEQ ??CheckComand_20 4062 AddStringToLog(t,0x01,requests4,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000808 0110A0E3 MOV R1,#+1 \ 0000080C 02002DE9 PUSH {R1} \ 00000810 8008A0E1 LSL R0,R0,#+17 \ 00000814 A008A0E1 LSR R0,R0,#+17 \ 00000818 01002DE9 PUSH {R0} \ 0000081C 0730A0E1 MOV R3,R7 \ 00000820 6C00A0E3 MOV R0,#+108 \ 00000824 840D80E3 ORR R0,R0,#0x2100 \ 00000828 052080E0 ADD R2,R0,R5 \ 0000082C 0400A0E1 MOV R0,R4 \ 00000830 ........ BL AddStringToLog \ 00000834 08D08DE2 ADD SP,SP,#+8 4063 else 4064 SENDMSGCOUNT++; 4065 #endif 4066 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_20: \ 00000838 0620A0E1 MOV R2,R6 \ ??CheckComand_27: \ 0000083C 0010A0E3 MOV R1,#+0 \ 00000840 0900A0E1 MOV R0,R9 \ 00000844 710100EF SWI +369 4067 mfree(send_txt); \ 00000848 0800A0E1 MOV R0,R8 \ ??CheckComand_5: \ 0000084C 150000EF SWI +21 \ ??CheckComand_14: \ 00000850 89DF8DE2 ADD SP,SP,#+548 \ 00000854 F08FBDE8 POP {R4-R11,PC} 4068 return; 4069 } 4070 4071 if(!strcmp(txt, "GET_BAT_INFO") || !strcmp(txt, "__BAT")) \ ??CheckComand_26: \ 00000858 D91F86E2 ADD R1,R6,#+868 \ 0000085C 0B00A0E1 MOV R0,R11 \ 00000860 190000EF SWI +25 \ 00000864 000050E3 CMP R0,#+0 \ 00000868 0400000A BEQ ??CheckComand_28 \ 0000086C DD1F86E2 ADD R1,R6,#+884 \ 00000870 0B00A0E1 MOV R0,R11 \ 00000874 190000EF SWI +25 \ 00000878 000050E3 CMP R0,#+0 \ 0000087C 2800001A BNE ??CheckComand_29 4072 { 4073 comanda=0; \ ??CheckComand_28: \ 00000880 408485E5 STR R8,[R5, #+1088] 4074 TPKT *p; 4075 int bat; 4076 bat=*RamCap(); \ 00000884 C88000EF SWI +32968 \ 00000888 B0B0D0E1 LDRH R11,[R0, #+0] 4077 char *send_txt=malloc(64); \ 0000088C 4000A0E3 MOV R0,#+64 \ 00000890 140000EF SWI +20 \ 00000894 0080A0E1 MOV R8,R0 4078 sprintf(send_txt, "Заряд батареи: %d процентов", bat); \ 00000898 0B20A0E1 MOV R2,R11 \ 0000089C D21F86E2 ADD R1,R6,#+840 \ 000008A0 160000EF SWI +22 4079 p=malloc(sizeof(PKT)+28+1); \ 000008A4 2500A0E3 MOV R0,#+37 \ 000008A8 140000EF SWI +20 \ 000008AC 0060A0E1 MOV R6,R0 4080 p->pkt.uin=t->uin; \ 000008B0 0C0094E5 LDR R0,[R4, #+12] \ 000008B4 000086E5 STR R0,[R6, #+0] 4081 p->pkt.type=T_SENDMSG; \ 000008B8 B4A0C6E1 STRH R10,[R6, #+4] 4082 p->pkt.data_len=strlen(send_txt); \ 000008BC 0800A0E1 MOV R0,R8 \ 000008C0 1B0000EF SWI +27 \ 000008C4 B600C6E1 STRH R0,[R6, #+6] 4083 strcpy(p->data,send_txt); \ 000008C8 0810A0E1 MOV R1,R8 \ 000008CC 080086E2 ADD R0,R6,#+8 \ 000008D0 1A0000EF SWI +26 4084 #ifdef EVILFOX 4085 SENDMSGCOUNT++; 4086 #else 4087 if(show_send_info) \ 000008D4 28039FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 000008D8 000090E5 LDR R0,[R0, #+0] \ 000008DC 000050E3 CMP R0,#+0 \ 000008E0 D80295E5 LDR R0,[R5, #+728] \ 000008E4 010080E2 ADD R0,R0,#+1 \ 000008E8 D80285E5 STR R0,[R5, #+728] \ 000008EC D1FFFF0A BEQ ??CheckComand_20 4088 AddStringToLog(t,0x01,requests3,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000008F0 0110A0E3 MOV R1,#+1 \ 000008F4 02002DE9 PUSH {R1} \ 000008F8 8008A0E1 LSL R0,R0,#+17 \ 000008FC A008A0E1 LSR R0,R0,#+17 \ 00000900 01002DE9 PUSH {R0} \ 00000904 0730A0E1 MOV R3,R7 \ 00000908 5400A0E3 MOV R0,#+84 \ 0000090C 840D80E3 ORR R0,R0,#0x2100 \ 00000910 052080E0 ADD R2,R0,R5 \ 00000914 0400A0E1 MOV R0,R4 \ 00000918 ........ BL AddStringToLog \ 0000091C 08D08DE2 ADD SP,SP,#+8 4089 else 4090 SENDMSGCOUNT++; 4091 #endif 4092 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_30: \ 00000920 C4FFFFEA B ??CheckComand_20 4093 mfree(send_txt); 4094 return; 4095 } 4096 4097 if((away_m==1 || t->isautomsg) && (t->automsgcount < automsgcount)) \ ??CheckComand_29: \ 00000924 841395E5 LDR R1,[R5, #+900] \ 00000928 ........ LDR R2,??DataTable147 ;; automsgcount \ 0000092C 700094E5 LDR R0,[R4, #+112] \ 00000930 002092E5 LDR R2,[R2, #+0] \ 00000934 010051E3 CMP R1,#+1 \ 00000938 0100000A BEQ ??CheckComand_31 \ 0000093C 000050E3 CMP R0,#+0 \ 00000940 3700000A BEQ ??CheckComand_32 \ ??CheckComand_31: \ 00000944 883094E5 LDR R3,[R4, #+136] \ 00000948 020053E1 CMP R3,R2 \ 0000094C 3200002A BCS ??CheckComand_33 4098 { 4099 t->automsgcount++; 4100 comanda=1; 4101 TPKT *p; 4102 // sprintf(hah,"online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); 4103 sprintf(away_msg, "Автоответчик: %s %s! %s %s", awayHelloMsg, t->name, awayMsg, away_msg_time); \ 00000950 B0229FE5 LDR R2,??CheckComand_1+0x8 ;; awayHelloMsg \ 00000954 010083E2 ADD R0,R3,#+1 \ 00000958 880084E5 STR R0,[R4, #+136] \ 0000095C 0100A0E3 MOV R0,#+1 \ 00000960 400485E5 STR R0,[R5, #+1088] \ 00000964 F000A0E3 MOV R0,#+240 \ 00000968 640D80E3 ORR R0,R0,#0x1900 \ 0000096C 058080E0 ADD R8,R0,R5 \ 00000970 420F80E2 ADD R0,R0,#+264 \ 00000974 050080E0 ADD R0,R0,R5 \ 00000978 01002DE9 PUSH {R0} \ 0000097C ........ LDR R0,??DataTable148 ;; awayMsg \ 00000980 143084E2 ADD R3,R4,#+20 \ 00000984 01002DE9 PUSH {R0} \ 00000988 DF1F86E2 ADD R1,R6,#+892 \ 0000098C 0800A0E1 MOV R0,R8 \ 00000990 160000EF SWI +22 4104 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 00000994 0800A0E1 MOV R0,R8 \ 00000998 1B0000EF SWI +27 \ 0000099C 090080E2 ADD R0,R0,#+9 \ 000009A0 140000EF SWI +20 \ 000009A4 0060A0E1 MOV R6,R0 4105 p->pkt.uin=t->uin; \ 000009A8 0C0094E5 LDR R0,[R4, #+12] \ 000009AC 000086E5 STR R0,[R6, #+0] 4106 p->pkt.type=T_SENDMSG; \ 000009B0 B4A0C6E1 STRH R10,[R6, #+4] 4107 p->pkt.data_len=strlen(away_msg); \ 000009B4 0800A0E1 MOV R0,R8 \ 000009B8 1B0000EF SWI +27 \ 000009BC B600C6E1 STRH R0,[R6, #+6] 4108 strcpy(p->data,away_msg); \ 000009C0 0810A0E1 MOV R1,R8 \ 000009C4 080086E2 ADD R0,R6,#+8 \ 000009C8 1A0000EF SWI +26 4109 if(show_send_info) \ 000009CC 30029FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 000009D0 000090E5 LDR R0,[R0, #+0] \ 000009D4 08D08DE2 ADD SP,SP,#+8 \ 000009D8 000050E3 CMP R0,#+0 \ 000009DC D80295E5 LDR R0,[R5, #+728] \ 000009E0 010080E2 ADD R0,R0,#+1 \ 000009E4 D80285E5 STR R0,[R5, #+728] \ 000009E8 0900000A BEQ ??CheckComand_34 4110 #ifdef kluchnik 4111 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000009EC 0110A0E3 MOV R1,#+1 \ 000009F0 02002DE9 PUSH {R1} \ 000009F4 8008A0E1 LSL R0,R0,#+17 \ 000009F8 A008A0E1 LSR R0,R0,#+17 \ 000009FC 01002DE9 PUSH {R0} \ 00000A00 0730A0E1 MOV R3,R7 \ 00000A04 0820A0E1 MOV R2,R8 \ 00000A08 0400A0E1 MOV R0,R4 \ 00000A0C ........ BL AddStringToLog \ 00000A10 08D08DE2 ADD SP,SP,#+8 4112 #else 4113 AddStringToLog(t,0x01,requests6,I_str,(++SENDMSGCOUNT)&0x7FFF,1); 4114 #endif 4115 else 4116 SENDMSGCOUNT++; 4117 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_34: \ 00000A14 0620A0E1 MOV R2,R6 \ 00000A18 93FEFFEA B ??CheckComand_13 4118 return; 4119 } 4120 #ifdef kluchnik 4121 else 4122 if((away_m==1 || t->isautomsg) && (t->uin==438532198)){ t->automsgcount=0;/* t->awaysignal=1;*/ return; } \ ??CheckComand_33: \ 00000A1C 010051E3 CMP R1,#+1 \ 00000A20 0100000A BEQ ??CheckComand_35 \ ??CheckComand_32: \ 00000A24 000050E3 CMP R0,#+0 \ 00000A28 0600000A BEQ ??CheckComand_36 \ ??CheckComand_35: \ 00000A2C 0C3094E5 LDR R3,[R4, #+12] \ 00000A30 ........ LDR R12,??DataTable149 ;; 0x1a237866 \ 00000A34 0C0053E1 CMP R3,R12 \ 00000A38 88808405 STREQ R8,[R4, #+136] \ 00000A3C 6D00000A BEQ ??CheckComand_0 4123 /* else 4124 if((away_m==1 || t->isautomsg) && (t->automsgcount<=(automsgcount+3)) ) 4125 { 4126 t->awaysignal=0; 4127 t->automsgcount++; 4128 sprintf(away_msg,"Бля,ну русским ж языком написали,НЕТУ МЕНЯ!!!че по сто сообщений слать?тем более если тебе делать нех..."); 4129 if(show_send_info) 4130 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF,1); 4131 else 4132 SENDMSGCOUNT++; 4133 SendData(t,away_msg,ENA_SIGNAL,0); 4134 return; 4135 }*/ 4136 #endif 4137 else 4138 if(away_m==1 || t->isautomsg) \ 00000A40 010051E3 CMP R1,#+1 \ 00000A44 0100000A BEQ ??CheckComand_37 \ ??CheckComand_36: \ 00000A48 000050E3 CMP R0,#+0 \ 00000A4C 0100000A BEQ ??CheckComand_38 4139 { 4140 t->automsgcount=automsgcount; \ ??CheckComand_37: \ 00000A50 882084E5 STR R2,[R4, #+136] 4141 return; \ 00000A54 7DFFFFEA B ??CheckComand_14 4142 } 4143 4144 4145 //---------------------------------------------------------------------------// 4146 4147 4148 if(!strcmp(txt, "GET_URL_INFO") || !strcmp(txt, "__URL"))// by kluchnik 26.03.08 \ ??CheckComand_38: \ 00000A58 411E86E2 ADD R1,R6,#+1040 \ 00000A5C 0B00A0E1 MOV R0,R11 \ 00000A60 190000EF SWI +25 \ 00000A64 000050E3 CMP R0,#+0 \ 00000A68 0400000A BEQ ??CheckComand_39 \ 00000A6C 421E86E2 ADD R1,R6,#+1056 \ 00000A70 0B00A0E1 MOV R0,R11 \ 00000A74 190000EF SWI +25 \ 00000A78 000050E3 CMP R0,#+0 \ 00000A7C 2A00001A BNE ??CheckComand_40 4149 { 4150 comanda=0; \ ??CheckComand_39: \ 00000A80 408485E5 STR R8,[R5, #+1088] 4151 TPKT *p; 4152 4153 char *send_txt=malloc(256); \ 00000A84 400FA0E3 MOV R0,#+256 \ 00000A88 140000EF SWI +20 \ 00000A8C 0080A0E1 MOV R8,R0 4154 sprintf(send_txt,"revision 2058, mod date: %s at %s ", 4155 "http://kluchnik.jino-net.ru/naticqmod/",__DATE__,__TIME__); \ 00000A90 FC0F86E2 ADD R0,R6,#+1008 \ 00000A94 01002DE9 PUSH {R0} \ 00000A98 F93F86E2 ADD R3,R6,#+996 \ 00000A9C EF2F86E2 ADD R2,R6,#+956 \ 00000AA0 E61F86E2 ADD R1,R6,#+920 \ 00000AA4 0800A0E1 MOV R0,R8 \ 00000AA8 160000EF SWI +22 4156 4157 p=malloc(sizeof(PKT)+256); \ 00000AAC 420FA0E3 MOV R0,#+264 \ 00000AB0 140000EF SWI +20 \ 00000AB4 00B0A0E1 MOV R11,R0 4158 p->pkt.uin=t->uin; \ 00000AB8 0C0094E5 LDR R0,[R4, #+12] \ 00000ABC 00008BE5 STR R0,[R11, #+0] 4159 p->pkt.type=T_SENDMSG; \ 00000AC0 B4A0CBE1 STRH R10,[R11, #+4] 4160 p->pkt.data_len=strlen(send_txt); \ 00000AC4 0800A0E1 MOV R0,R8 \ 00000AC8 1B0000EF SWI +27 \ 00000ACC B600CBE1 STRH R0,[R11, #+6] 4161 strcpy(p->data,send_txt); \ 00000AD0 0810A0E1 MOV R1,R8 \ 00000AD4 08008BE2 ADD R0,R11,#+8 \ 00000AD8 1A0000EF SWI +26 4162 if(show_send_info) \ 00000ADC 20019FE5 LDR R0,??CheckComand_1+0x4 ;; show_send_info \ 00000AE0 000090E5 LDR R0,[R0, #+0] \ 00000AE4 04D08DE2 ADD SP,SP,#+4 \ 00000AE8 000050E3 CMP R0,#+0 \ 00000AEC D80295E5 LDR R0,[R5, #+728] \ 00000AF0 010080E2 ADD R0,R0,#+1 \ 00000AF4 D80285E5 STR R0,[R5, #+728] \ 00000AF8 0900000A BEQ ??CheckComand_41 4163 AddStringToLog(t,0x01,"Sending url info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000AFC 0110A0E3 MOV R1,#+1 \ 00000B00 02002DE9 PUSH {R1} \ 00000B04 8008A0E1 LSL R0,R0,#+17 \ 00000B08 A008A0E1 LSR R0,R0,#+17 \ 00000B0C 01002DE9 PUSH {R0} \ 00000B10 0730A0E1 MOV R3,R7 \ 00000B14 FF2F86E2 ADD R2,R6,#+1020 \ 00000B18 0400A0E1 MOV R0,R4 \ 00000B1C ........ BL AddStringToLog \ 00000B20 08D08DE2 ADD SP,SP,#+8 4164 else 4165 SENDMSGCOUNT++; 4166 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_41: \ 00000B24 0B20A0E1 MOV R2,R11 \ 00000B28 43FFFFEA B ??CheckComand_27 4167 mfree(send_txt); 4168 return; 4169 } 4170 4171 #ifdef kluchnik // не доступно для всех,потому что имхо,будет еще большая перегрузка серверов!!!а оно нам надо? 4172 if(t->isautobot) \ ??CheckComand_40: \ 00000B2C 5C0094E5 LDR R0,[R4, #+92] \ 00000B30 000050E3 CMP R0,#+0 \ 00000B34 2C00000A BEQ ??CheckComand_42 4173 { 4174 TPKT *p; 4175 int i=LoadBotMessage(t->uin); \ 00000B38 0C0094E5 LDR R0,[R4, #+12] \ 00000B3C ........ BL LoadBotMessage 4176 if(i==0) return;//если нет никаких файлов то просто возвращаемся \ 00000B40 000050E3 CMP R0,#+0 \ 00000B44 2B00000A BEQ ??CheckComand_0 4177 char *pp=bot_lines[t->bot_msg]; \ 00000B48 581094E5 LDR R1,[R4, #+88] \ 00000B4C D42395E5 LDR R2,[R5, #+980] \ 00000B50 017192E7 LDR R7,[R2, +R1, LSL #+2] 4178 t->bot_msg++; \ 00000B54 011081E2 ADD R1,R1,#+1 \ 00000B58 581084E5 STR R1,[R4, #+88] 4179 if(t->bot_msg==i) \ 00000B5C 000051E1 CMP R1,R0 4180 t->bot_msg=0; \ 00000B60 58808405 STREQ R8,[R4, #+88] 4181 p=malloc(sizeof(PKT)+strlen(pp)+1); \ 00000B64 0700A0E1 MOV R0,R7 \ 00000B68 1B0000EF SWI +27 \ 00000B6C 090080E2 ADD R0,R0,#+9 \ 00000B70 140000EF SWI +20 \ 00000B74 0080A0E1 MOV R8,R0 4182 p->pkt.uin=t->uin; \ 00000B78 0C0094E5 LDR R0,[R4, #+12] \ 00000B7C 000088E5 STR R0,[R8, #+0] 4183 p->pkt.type=T_SENDMSG; \ 00000B80 B4A0C8E1 STRH R10,[R8, #+4] 4184 p->pkt.data_len=strlen(pp); \ 00000B84 0700A0E1 MOV R0,R7 \ 00000B88 1B0000EF SWI +27 \ 00000B8C B600C8E1 STRH R0,[R8, #+6] 4185 strcpy(p->data,pp); \ 00000B90 0710A0E1 MOV R1,R7 \ 00000B94 080088E2 ADD R0,R8,#+8 \ 00000B98 1A0000EF SWI +26 4186 AddStringToLog(t,0x01,pp,"Autobot",(++SENDMSGCOUNT)&0x7FFF,1); \ 00000B9C D80295E5 LDR R0,[R5, #+728] \ 00000BA0 0110A0E3 MOV R1,#+1 \ 00000BA4 010080E2 ADD R0,R0,#+1 \ 00000BA8 D80285E5 STR R0,[R5, #+728] \ 00000BAC 02002DE9 PUSH {R1} \ 00000BB0 8008A0E1 LSL R0,R0,#+17 \ 00000BB4 A008A0E1 LSR R0,R0,#+17 \ 00000BB8 01002DE9 PUSH {R0} \ 00000BBC 0720A0E1 MOV R2,R7 \ 00000BC0 2800A0E3 MOV R0,#+40 \ 00000BC4 400E80E3 ORR R0,R0,#0x400 \ 00000BC8 063080E0 ADD R3,R0,R6 \ 00000BCC 0400A0E1 MOV R0,R4 \ 00000BD0 ........ BL AddStringToLog 4187 SUBPROC((void *)SendAnswer,0,p); \ 00000BD4 0820A0E1 MOV R2,R8 \ 00000BD8 0010A0E3 MOV R1,#+0 \ 00000BDC 0900A0E1 MOV R0,R9 \ 00000BE0 710100EF SWI +369 4188 return; \ 00000BE4 08D08DE2 ADD SP,SP,#+8 \ 00000BE8 18FFFFEA B ??CheckComand_14 4189 } 4190 #endif 4191 4192 CheckComand2(txt,t); \ ??CheckComand_42: \ 00000BEC 0410A0E1 MOV R1,R4 \ 00000BF0 0B00A0E1 MOV R0,R11 \ 00000BF4 ........ _BLF CheckComand2,??CheckComand2??rA 4193 } \ ??CheckComand_0: \ 00000BF8 89DF8DE2 ADD SP,SP,#+548 ;; stack cleaning \ 00000BFC F08FBDE8 POP {R4-R11,PC} ;; return \ ??CheckComand_1: \ 00000C00 ........ DC32 `?` \ 00000C04 ........ DC32 show_send_info \ 00000C08 ........ DC32 awayHelloMsg 4194 4195 //------------- Попап месаже для подключившегося контакта -----------// 4196 \ In segment DATA_Z, align 4, align-sorted 4197 char INC_Nick[32]; \ INC_Nick: \ 00000000 DS8 32 4198 char show_nick[32]; 4199 int INC_show; 4200 4201 char onContact[64]; 4202 int INC_show2; 4203 GBSTMR incs2; 4204 extern void DrawScreenShot(); 4205 \ In segment CODE, align 4, keep-with-next 4206 void show_on_contact() 4207 { \ show_on_contact: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 4208 if(INC_show2>0/* && !(IsGuiOnTop(maingui_id))*/) \ 00000004 ........ LDR R4,??DataTable153 ;; i_rc \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 480494E5 LDR R0,[R4, #+1096] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 F383BDB8 POPLT {R0,R1,R4-R9,PC} 4209 { 4210 WSHDR *ws=AllocWS(64); \ 00000018 4000A0E3 MOV R0,#+64 \ 0000001C 250100EF SWI +293 \ 00000020 0050A0E1 MOV R5,R0 4211 ascii2ws(ws,onContact); \ 00000024 A800A0E3 MOV R0,#+168 \ 00000028 880D80E3 ORR R0,R0,#0x2200 \ 0000002C 041080E0 ADD R1,R0,R4 \ 00000030 0500A0E1 MOV R0,R5 \ 00000034 ........ _BLF ascii2ws,??ascii2ws??rA 4212 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] 4213 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 00000040 0C219FE5 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 4214 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 4215 { 4216 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 4217 INC_show2-=2; \ 00000074 480494E5 LDR R0,[R4, #+1096] \ 00000078 020040E2 SUB R0,R0,#+2 \ 0000007C 010000EA B ??show_on_contact_2 4218 } 4219 else 4220 INC_show2--; \ ??show_on_contact_1: \ 00000080 480494E5 LDR R0,[R4, #+1096] \ 00000084 010040E2 SUB R0,R0,#+1 4221 DrawRectangle(0,0,Get_WS_width(ws,PopupFont)+5,GetFontYSIZE(PopupFont)+5,0,PopupOnlineCl,PopupBGCl); \ ??show_on_contact_2: \ 00000088 ........ LDR R6,??DataTable154 ;; PopupFont \ 0000008C C4709FE5 LDR R7,??show_on_contact_0+0x4 ;; PopupOnlineCl \ 00000090 480484E5 STR R0,[R4, #+1096] \ 00000094 000096E5 LDR R0,[R6, #+0] \ 00000098 C50100EF SWI +453 \ 0000009C 001096E5 LDR R1,[R6, #+0] \ 000000A0 0080A0E1 MOV R8,R0 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 080200EF SWI +520 \ 000000AC ........ LDR R1,??DataTable156 ;; PopupBGCl \ 000000B0 053088E2 ADD R3,R8,#+5 \ 000000B4 02002DE9 PUSH {R1} \ 000000B8 052080E2 ADD R2,R0,#+5 \ 000000BC 0000A0E3 MOV R0,#+0 \ 000000C0 0710A0E1 MOV R1,R7 \ 000000C4 02002DE9 PUSH {R1} \ 000000C8 0010A0E3 MOV R1,#+0 \ 000000CC 02002DE9 PUSH {R1} \ 000000D0 B40100EF SWI +436 4222 DrawString(ws,2,2,1+Get_WS_width(ws,PopupFont)+2,1+GetFontYSIZE(PopupFont),PopupFont,0,PopupOnlineCl,GetPaletteAdrByColorIndex(23)); \ 000000D4 1700A0E3 MOV R0,#+23 \ 000000D8 2E0100EF SWI +302 \ 000000DC 0090A0E1 MOV R9,R0 \ 000000E0 000096E5 LDR R0,[R6, #+0] \ 000000E4 C50100EF SWI +453 \ 000000E8 001096E5 LDR R1,[R6, #+0] \ 000000EC 0080A0E1 MOV R8,R0 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 080200EF SWI +520 \ 000000F8 00022DE9 PUSH {R9} \ 000000FC 80002DE9 PUSH {R7} \ 00000100 0010A0E3 MOV R1,#+0 \ 00000104 02002DE9 PUSH {R1} \ 00000108 001096E5 LDR R1,[R6, #+0] \ 0000010C 033080E2 ADD R3,R0,#+3 \ 00000110 02002DE9 PUSH {R1} \ 00000114 0220A0E3 MOV R2,#+2 \ 00000118 0500A0E1 MOV R0,R5 \ 0000011C 011088E2 ADD R1,R8,#+1 \ 00000120 02002DE9 PUSH {R1} \ 00000124 0210A0E1 MOV R1,R2 \ 00000128 4C0100EF SWI +332 4223 FreeWS(ws); \ 0000012C 0500A0E1 MOV R0,R5 \ 00000130 290100EF SWI +297 4224 GBS_StartTimerProc(&incs2, 15, show_on_contact); \ 00000134 20209FE5 LDR R2,??show_on_contact_0+0x8 ;; show_on_contact \ 00000138 0F10A0E3 MOV R1,#+15 \ 0000013C E800A0E3 MOV R0,#+232 \ 00000140 880D80E3 ORR R0,R0,#0x2200 \ 00000144 040080E0 ADD R0,R0,R4 \ 00000148 4D0000EF SWI +77 \ 0000014C 20D08DE2 ADD SP,SP,#+32 4225 } 4226 // else 4227 // RefreshGUI(); 4228 } \ 00000150 F383BDE8 POP {R0,R1,R4-R9,PC} ;; return \ ??show_on_contact_0: \ 00000154 ........ DC32 `?` \ 00000158 ........ DC32 PopupOnlineCl \ 0000015C ........ DC32 show_on_contact 4229 4230 4231 //---------------------------- popup message ---------------------------// 4232 4233 \ In segment CODE, align 4, keep-with-next 4234 void show_pp_sender() 4235 { \ show_pp_sender: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 4236 if(INC_show>0/* && !(IsGuiOnTop(maingui_id))*/) \ 00000004 ........ LDR R4,??DataTable153 ;; i_rc \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 440494E5 LDR R0,[R4, #+1092] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 F38FBDB8 POPLT {R0,R1,R4-R11,PC} 4237 { 4238 WSHDR *ws=AllocWS(256); \ 00000018 400FA0E3 MOV R0,#+256 \ 0000001C 250100EF SWI +293 \ 00000020 0050A0E1 MOV R5,R0 4239 ascii2ws(ws,show_nick); \ 00000024 8800A0E3 MOV R0,#+136 \ 00000028 880D80E3 ORR R0,R0,#0x2200 \ 0000002C 041080E0 ADD R1,R0,R4 \ 00000030 0500A0E1 MOV R0,R5 \ 00000034 ........ _BLF ascii2ws,??ascii2ws??rA 4240 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] 4241 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 00000040 5C219FE5 LDR R2,??show_pp_sender_0 ;; `?_1` \ 00000044 0C0090E5 LDR R0,[R0, #+12] \ 00000048 480092E8 LDM R2,{R3,R6} \ 0000004C 080090E5 LDR R0,[R0, #+8] \ 00000050 0D10A0E1 MOV R1,SP \ 00000054 040090E5 LDR R0,[R0, #+4] \ 00000058 480081E8 STM R1,{R3,R6} \ 0000005C 010040E2 SUB R0,R0,#+1 4242 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 4243 { 4244 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 4245 INC_show-=2; \ 00000074 440494E5 LDR R0,[R4, #+1092] \ 00000078 020040E2 SUB R0,R0,#+2 \ 0000007C 010000EA B ??show_pp_sender_2 4246 } 4247 else 4248 INC_show--; \ ??show_pp_sender_1: \ 00000080 440494E5 LDR R0,[R4, #+1092] \ 00000084 010040E2 SUB R0,R0,#+1 4249 #ifdef NEWSGOLD 4250 DrawRectangle(0,0,Get_WS_width(ws,PopupFont)+6+GetImgWidth(NumStatusToIconBar + IS_MSG),GetFontYSIZE(PopupFont)+4,0,PopupMsgCl,PopupBGCl); \ ??show_pp_sender_2: \ 00000088 ........ LDR R6,??DataTable154 ;; PopupFont \ 0000008C ........ LDR R11,??DataTable155 ;; NumStatusToIconBar \ 00000090 440484E5 STR R0,[R4, #+1092] \ 00000094 000096E5 LDR R0,[R6, #+0] \ 00000098 C50100EF SWI +453 \ 0000009C 001096E5 LDR R1,[R6, #+0] \ 000000A0 0070A0E1 MOV R7,R0 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 080200EF SWI +520 \ 000000AC 0080A0E1 MOV R8,R0 \ 000000B0 00009BE5 LDR R0,[R11, #+0] \ 000000B4 0D0080E2 ADD R0,R0,#+13 \ 000000B8 220000EF SWI +34 \ 000000BC ........ LDR R1,??DataTable156 ;; PopupBGCl \ 000000C0 043087E2 ADD R3,R7,#+4 \ 000000C4 02002DE9 PUSH {R1} \ 000000C8 D8109FE5 LDR R1,??show_pp_sender_0+0x4 ;; PopupMsgCl \ 000000CC 080080E0 ADD R0,R0,R8 \ 000000D0 02002DE9 PUSH {R1} \ 000000D4 062080E2 ADD R2,R0,#+6 \ 000000D8 0000A0E3 MOV R0,#+0 \ 000000DC 0010A0E3 MOV R1,#+0 \ 000000E0 02002DE9 PUSH {R1} \ 000000E4 B40100EF SWI +436 4251 DrawImg(2,2,NumStatusToIconBar + IS_MSG);//GetImgWidth((int)S_ICONS[icn] \ 000000E8 00009BE5 LDR R0,[R11, #+0] \ 000000EC 0210A0E3 MOV R1,#+2 \ 000000F0 0D2080E2 ADD R2,R0,#+13 \ 000000F4 0100A0E1 MOV R0,R1 \ 000000F8 230000EF SWI +35 4252 DrawString(ws,GetImgWidth(NumStatusToIconBar + IS_MSG)+4,1,GetImgWidth(NumStatusToIconBar + IS_MSG)+Get_WS_width(ws,PopupFont)+4,1+GetFontYSIZE(PopupFont),PopupFont,0,PopupMsgCl,GetPaletteAdrByColorIndex(23)); \ 000000FC 1700A0E3 MOV R0,#+23 \ 00000100 2E0100EF SWI +302 \ 00000104 0070A0E1 MOV R7,R0 \ 00000108 000096E5 LDR R0,[R6, #+0] \ 0000010C C50100EF SWI +453 \ 00000110 0080A0E1 MOV R8,R0 \ 00000114 00009BE5 LDR R0,[R11, #+0] \ 00000118 0D0080E2 ADD R0,R0,#+13 \ 0000011C 220000EF SWI +34 \ 00000120 001096E5 LDR R1,[R6, #+0] \ 00000124 0090A0E1 MOV R9,R0 \ 00000128 0500A0E1 MOV R0,R5 \ 0000012C 080200EF SWI +520 \ 00000130 00A0A0E1 MOV R10,R0 \ 00000134 00009BE5 LDR R0,[R11, #+0] \ 00000138 0D0080E2 ADD R0,R0,#+13 \ 0000013C 220000EF SWI +34 \ 00000140 60109FE5 LDR R1,??show_pp_sender_0+0x4 ;; PopupMsgCl \ 00000144 80002DE9 PUSH {R7} \ 00000148 02002DE9 PUSH {R1} \ 0000014C 0120A0E3 MOV R2,#+1 \ 00000150 0010A0E3 MOV R1,#+0 \ 00000154 02002DE9 PUSH {R1} \ 00000158 001096E5 LDR R1,[R6, #+0] \ 0000015C 02002DE9 PUSH {R1} \ 00000160 011088E2 ADD R1,R8,#+1 \ 00000164 02002DE9 PUSH {R1} \ 00000168 09108AE0 ADD R1,R10,R9 \ 0000016C 043081E2 ADD R3,R1,#+4 \ 00000170 041080E2 ADD R1,R0,#+4 \ 00000174 0500A0E1 MOV R0,R5 \ 00000178 4C0100EF SWI +332 4253 #else 4254 DrawRectangle(0,0,Get_WS_width(ws,PopupFont)+2,GetFontYSIZE(PopupFont)+2,0,PopupBGCl,PopupBGCl); 4255 DrawString(ws,1,1,1+Get_WS_width(ws,PopupFont)+2,1+GetFontYSIZE(PopupFont),PopupFont,0,PopupMsgCl,GetPaletteAdrByColorIndex(23)); 4256 #endif 4257 FreeWS(ws); \ 0000017C 0500A0E1 MOV R0,R5 \ 00000180 290100EF SWI +297 4258 GBS_StartTimerProc(&develop, 10, show_pp_sender); \ 00000184 20209FE5 LDR R2,??show_pp_sender_0+0x8 ;; show_pp_sender \ 00000188 0A10A0E3 MOV R1,#+10 \ 0000018C 1800A0E3 MOV R0,#+24 \ 00000190 840D80E3 ORR R0,R0,#0x2100 \ 00000194 040080E0 ADD R0,R0,R4 \ 00000198 4D0000EF SWI +77 \ 0000019C 20D08DE2 ADD SP,SP,#+32 4259 } 4260 } \ 000001A0 F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??show_pp_sender_0: \ 000001A4 ........ DC32 `?_1` \ 000001A8 ........ DC32 PopupMsgCl \ 000001AC ........ DC32 show_pp_sender 4261 4262 4263 //----------------------------------------------------------------------------------------// 4264 4265 \ In segment CODE, align 4, keep-with-next 4266 void Get_Online_total() 4267 { 4268 CLIST *t; 4269 kopa_online=0; \ Get_Online_total: \ 00000000 ........ LDR R0,??DataTable177 ;; i_rc \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 1C1480E5 STR R1,[R0, #+1052] 4270 kopa_kontaktu=0; \ 0000000C 201480E5 STR R1,[R0, #+1056] 4271 t=(CLIST *)(&cltop); \ 00000010 0410A0E3 MOV R1,#+4 \ 00000014 401E81E3 ORR R1,R1,#0x400 \ 00000018 001081E0 ADD R1,R1,R0 \ 0000001C FF30A0E3 MOV R3,#+255 \ 00000020 FF3C83E3 ORR R3,R3,#0xFF00 \ 00000024 0A0000EA B ??Get_Online_total_0 4272 while(t=(CLIST *)(t->next)) 4273 { 4274 if (!t->isgroup) \ ??Get_Online_total_1: \ 00000028 082091E5 LDR R2,[R1, #+8] \ 0000002C 000052E3 CMP R2,#+0 \ 00000030 0700001A BNE ??Get_Online_total_0 4275 { 4276 kopa_online++; \ 00000034 1C2490E5 LDR R2,[R0, #+1052] \ 00000038 012082E2 ADD R2,R2,#+1 \ 0000003C 1C2480E5 STR R2,[R0, #+1052] 4277 if (t->state!=65535) kopa_kontaktu++; \ 00000040 B425D1E1 LDRH R2,[R1, #+84] \ 00000044 030052E1 CMP R2,R3 \ 00000048 20249015 LDRNE R2,[R0, #+1056] \ 0000004C 01208212 ADDNE R2,R2,#+1 \ 00000050 20248015 STRNE R2,[R0, #+1056] 4278 } 4279 } \ ??Get_Online_total_0: \ 00000054 001091E5 LDR R1,[R1, #+0] \ 00000058 000051E3 CMP R1,#+0 \ 0000005C F1FFFF1A BNE ??Get_Online_total_1 4280 } \ 00000060 1EFF2FE1 BX LR ;; return 4281 4282 4283 //-------------------------------------------------------------------------------------------// 4284 4285 \ In segment CODE, align 4, keep-with-next 4286 void SetIndividStatus()//set to all contact to default vibra, sound and other by kluchnik 04.04.08 4287 { 4288 CLIST *t; 4289 t=(CLIST *)(&cltop); \ SetIndividStatus: \ 00000000 ........ LDR R0,??DataTable177 ;; i_rc \ 00000004 0410A0E3 MOV R1,#+4 \ 00000008 401E81E3 ORR R1,R1,#0x400 \ 0000000C 001081E0 ADD R1,R1,R0 \ 00000010 0C0000EA B ??SetIndividStatus_0 4290 while(t=(CLIST *)(t->next)) 4291 { 4292 if (!t->isgroup) \ ??SetIndividStatus_1: \ 00000014 082091E5 LDR R2,[R1, #+8] \ 00000018 000052E3 CMP R2,#+0 \ 0000001C 0900001A BNE ??SetIndividStatus_0 4293 { 4294 t->isvibra=1; \ 00000020 0120A0E3 MOV R2,#+1 \ 00000024 682081E5 STR R2,[R1, #+104] 4295 t->issound=1; \ 00000028 6C2081E5 STR R2,[R1, #+108] 4296 t->isShowXst=Show_XTX; \ 0000002C 903390E5 LDR R3,[R0, #+912] \ 00000030 7C3081E5 STR R3,[R1, #+124] 4297 #ifdef kluchnik 4298 t->isLoadHistory=1; \ 00000034 602081E5 STR R2,[R1, #+96] 4299 #endif 4300 t->signals=1; \ 00000038 802081E5 STR R2,[R1, #+128] 4301 t->isaccess=1; \ 0000003C 842081E5 STR R2,[R1, #+132] 4302 4303 t->automsgcount=0; \ 00000040 0020A0E3 MOV R2,#+0 \ 00000044 882081E5 STR R2,[R1, #+136] 4304 } 4305 } \ ??SetIndividStatus_0: \ 00000048 001091E5 LDR R1,[R1, #+0] \ 0000004C 000051E3 CMP R1,#+0 \ 00000050 EFFFFF1A BNE ??SetIndividStatus_1 4306 } \ 00000054 1EFF2FE1 BX LR ;; return 4307 4308 //-------------------------------------------------------------------------------------------// 4309 int ShowLoadScreen=1; 4310 int curpos; 4311 \ In segment CODE, align 4, keep-with-next 4312 ProcessPacket(TPKT *p) 4313 { \ ProcessPacket: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 8FDF4DE2 SUB SP,SP,#+572 4314 CLIST *t; 4315 LOGQ *q; 4316 char s[256]; 4317 switch(p->pkt.type) \ 00000008 BCAB9FE5 LDR R10,??ProcessPacket_1+0x4 ;; ILL_RECV_FADE \ 0000000C ........ LDR R5,??DataTable175 ;; Canvas \ 00000010 ........ LDR R7,??DataTable177 ;; i_rc \ 00000014 0040A0E1 MOV R4,R0 \ 00000018 B410D4E1 LDRH R1,[R4, #+4] \ 0000001C 000094E5 LDR R0,[R4, #+0] \ 00000020 0160A0E3 MOV R6,#+1 \ 00000024 02B0A0E3 MOV R11,#+2 \ 00000028 0080A0E3 MOV R8,#+0 \ 0000002C 031041E2 SUB R1,R1,#+3 \ 00000030 1C0051E3 CMP R1,#+28 \ 00000034 DF02008A BHI ??ProcessPacket_2 \ 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 39010E00DB02 DC16 +313,+14,+731,+731 \ DB02 \ 00000050 1100DB024D00 DC16 +17,+731,+77,+731 \ DB02 \ 00000058 DB02DB02DB02 DC16 +731,+731,+731,+731 \ DB02 \ 00000060 DB0223022302 DC16 +731,+547,+547,+731 \ DB02 \ 00000068 DB023D004B00 DC16 +731,+61,+75,+731 \ DB02 \ 00000070 DB02DB025302 DC16 +731,+731,+595,+731 \ DB02 \ 00000078 DB02DB02DB02 DC16 +731,+731,+731,+731 \ DB02 \ 00000080 D9020000 DC16 +729,+0 4318 { 4319 case T_LOGIN: 4320 set_my_status(); \ ??ProcessPacket_3: \ 00000084 ........ BL set_my_status 4321 set_my_xstatus(); \ 00000088 ........ BL set_my_xstatus \ 0000008C C90200EA B ??ProcessPacket_2 4322 break; 4323 case T_CLENTRY: 4324 if (p->pkt.uin) \ ??ProcessPacket_4: \ 00000090 000050E3 CMP R0,#+0 \ 00000094 1800000A BEQ ??ProcessPacket_5 4325 { 4326 if ((t=FindContactByUin(p->pkt.uin))) \ 00000098 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 0000009C 0090B0E1 MOVS R9,R0 \ 000000A0 0E00000A BEQ ??ProcessPacket_6 4327 { 4328 // t->state=0xFFFF; 4329 if (!t->local) strncpy(t->name,p->data,63); \ 000000A4 C00099E5 LDR R0,[R9, #+192] \ 000000A8 000050E3 CMP R0,#+0 \ 000000AC 0300001A BNE ??ProcessPacket_7 \ 000000B0 3F20A0E3 MOV R2,#+63 \ 000000B4 081084E2 ADD R1,R4,#+8 \ 000000B8 140089E2 ADD R0,R9,#+20 \ 000000BC 160100EF SWI +278 4330 t->group=GROUP_CACHE; \ ??ProcessPacket_7: \ 000000C0 080497E5 LDR R0,[R7, #+1032] \ 000000C4 100089E5 STR R0,[R9, #+16] 4331 ChangeContactPos(t); \ ??ProcessPacket_8: \ 000000C8 0900A0E1 MOV R0,R9 \ 000000CC ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4332 RecountMenu(t,1); \ 000000D0 0110A0E3 MOV R1,#+1 \ 000000D4 0900A0E1 MOV R0,R9 \ ??ProcessPacket_9: \ 000000D8 ........ BL RecountMenu \ 000000DC B50200EA B ??ProcessPacket_2 4333 } 4334 else 4335 { 4336 RecountMenu(AddContact(p->pkt.uin,p->data, GROUP_CACHE, 0),1); \ ??ProcessPacket_6: \ 000000E0 082497E5 LDR R2,[R7, #+1032] \ 000000E4 000094E5 LDR R0,[R4, #+0] \ 000000E8 0030A0E3 MOV R3,#+0 \ 000000EC 081084E2 ADD R1,R4,#+8 \ 000000F0 ........ _BLF AddContact,??AddContact??rA \ 000000F4 0610A0E1 MOV R1,R6 \ 000000F8 F6FFFFEA B ??ProcessPacket_9 4337 } 4338 } 4339 else 4340 { 4341 if(VIBR_ON_CONNECT) \ ??ProcessPacket_5: \ 000000FC ........ LDR R0,??DataTable161 ;; VIBR_ON_CONNECT \ 00000100 000090E5 LDR R0,[R0, #+0] \ 00000104 000050E3 CMP R0,#+0 \ 00000108 0100000A BEQ ??ProcessPacket_10 4342 { 4343 vibra_count=1; \ 0000010C C46387E5 STR R6,[R7, #+964] 4344 start_vibra(); \ 00000110 ........ BL start_vibra 4345 } 4346 GROUP_CACHE=0; \ ??ProcessPacket_10: \ 00000114 088487E5 STR R8,[R7, #+1032] 4347 ask_my_info(); 4348 if (maingui_id/*contactlist_menu_id*/) \ 00000118 D40297E5 LDR R0,[R7, #+724] \ 0000011C 000050E3 CMP R0,#+0 \ 00000120 0200000A BEQ ??ProcessPacket_11 4349 { 4350 RecountMenu(NULL,1); \ 00000124 0110A0E3 MOV R1,#+1 \ 00000128 0800A0E1 MOV R0,R8 \ ??ProcessPacket_12: \ 0000012C E9FFFFEA B ??ProcessPacket_9 4351 } 4352 else 4353 { 4354 #ifdef USE_MLMENU 4355 unhooked2=1; 4356 create_contactlist_menu(); 4357 #endif 4358 // CreateCL(); 4359 // if(ShowLoadScreen) 4360 SetIndividStatus(); \ ??ProcessPacket_11: \ 00000130 ........ BL SetIndividStatus 4361 ShowLoadScreen=0; \ 00000134 4C8487E5 STR R8,[R7, #+1100] 4362 SMART_REDRAW(); \ 00000138 ........ BL SMART_REDRAW \ 0000013C 9D0200EA B ??ProcessPacket_2 4363 } 4364 } 4365 break; 4366 case T_GROUPID: 4367 if (t=FindGroupByID(GROUP_CACHE=p->pkt.uin)) \ ??ProcessPacket_13: \ 00000140 080487E5 STR R0,[R7, #+1032] \ 00000144 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000148 0090B0E1 MOVS R9,R0 \ 0000014C 0400000A BEQ ??ProcessPacket_14 4368 { 4369 strncpy(t->name,p->data,63); \ 00000150 3F20A0E3 MOV R2,#+63 \ 00000154 081084E2 ADD R1,R4,#+8 \ 00000158 140089E2 ADD R0,R9,#+20 \ 0000015C 160100EF SWI +278 4370 ChangeContactPos(t); \ 00000160 D8FFFFEA B ??ProcessPacket_8 4371 RecountMenu(t,1); 4372 } 4373 else 4374 { 4375 RecountMenu(AddGroup(p->pkt.uin,p->data),1); \ ??ProcessPacket_14: \ 00000164 000094E5 LDR R0,[R4, #+0] \ 00000168 081084E2 ADD R1,R4,#+8 \ 0000016C ........ _BLF AddGroup,??AddGroup??rA \ 00000170 0110A0E3 MOV R1,#+1 \ 00000174 D7FFFFEA B ??ProcessPacket_9 4376 } 4377 break; 4378 case T_GROUPFOLLOW: 4379 GROUP_CACHE=p->pkt.uin; \ ??ProcessPacket_15: \ 00000178 080487E5 STR R0,[R7, #+1032] \ 0000017C 8D0200EA B ??ProcessPacket_2 4380 break; 4381 case T_STATUSCHANGE: 4382 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_16: \ 00000180 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000184 0090B0E1 MOVS R9,R0 4383 if (t) \ 00000188 8A02000A BEQ ??ProcessPacket_2 4384 { 4385 int i=t->state; \ 0000018C B415D9E1 LDRH R1,[R9, #+84] \ 00000190 0C108DE5 STR R1,[SP, #+12] \ 00000194 0A00D4E5 LDRB R0,[R4, #+10] \ 00000198 B615D9E1 LDRH R1,[R9, #+86] \ 0000019C 000051E1 CMP R1,R0 \ 000001A0 1D00000A BEQ ??ProcessPacket_17 4386 // CLIST *oldt=NULL; 4387 if (t->xstate!=p->data[2]) // Если картинка икс статуса сменилась 4388 { 4389 t->xstate=p->data[2]; \ 000001A4 B605C9E1 STRH R0,[R9, #+86] 4390 FreeXText(t); \ 000001A8 0900A0E1 MOV R0,R9 \ 000001AC ........ _BLF FreeXText,??FreeXText??rA 4391 if (t->xstate && ENA_AUTO_XTXT) // Если установлен икс статус и можно запрашивать по смене икс статуса :) \ 000001B0 B605D9E1 LDRH R0,[R9, #+86] \ 000001B4 000050E3 CMP R0,#+0 \ 000001B8 1600000A BEQ ??ProcessPacket_18 \ 000001BC 0C0A9FE5 LDR R0,??ProcessPacket_1+0x8 ;; ENA_AUTO_XTXT \ 000001C0 000090E5 LDR R0,[R0, #+0] \ 000001C4 000050E3 CMP R0,#+0 \ 000001C8 1200000A BEQ ??ProcessPacket_18 4392 { 4393 t->req_xtext=1; \ 000001CC BC6089E5 STR R6,[R9, #+188] 4394 if (edchat_id) // Если открыт чат \ 000001D0 100497E5 LDR R0,[R7, #+1040] \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 0F00000A BEQ ??ProcessPacket_17 4395 { 4396 void *data=FindGUIbyId(edchat_id,NULL); \ 000001DC 100497E5 LDR R0,[R7, #+1040] \ 000001E0 0010A0E3 MOV R1,#+0 \ 000001E4 090200EF SWI +521 4397 if (data) \ 000001E8 000050E3 CMP R0,#+0 \ 000001EC 0A00000A BEQ ??ProcessPacket_17 4398 { 4399 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 000001F0 DF0100EF SWI +479 4400 if (ed_struct) \ 000001F4 000050E3 CMP R0,#+0 \ 000001F8 0700000A BEQ ??ProcessPacket_17 4401 { 4402 if (ed_struct->ed_contact==t) // Если наш чат то запрашиваем текст статуса \ 000001FC 000090E5 LDR R0,[R0, #+0] \ 00000200 090050E1 CMP R0,R9 \ 00000204 0400001A BNE ??ProcessPacket_17 4403 { 4404 t->req_xtext=0; \ 00000208 BC8089E5 STR R8,[R9, #+188] 4405 RequestXText(t->uin); \ 0000020C 0C0099E5 LDR R0,[R9, #+12] \ 00000210 ........ BL RequestXText \ 00000214 000000EA B ??ProcessPacket_17 4406 } 4407 } 4408 } 4409 } 4410 } 4411 else // Если икс статус не установлен то на всякий случай снимаем флаг получения текста 4412 { 4413 t->req_xtext=0; \ ??ProcessPacket_18: \ 00000218 BC8089E5 STR R8,[R9, #+188] 4414 } 4415 }/* 4416 if (contactlist_menu_id) 4417 { 4418 // oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); 4419 oldt=FindContactByN(curpos); 4420 }*/ 4421 if(t->state==65535) t->change=1; \ ??ProcessPacket_17: \ 0000021C B405D9E1 LDRH R0,[R9, #+84] \ 00000220 FFA0A0E3 MOV R10,#+255 \ 00000224 FFAC8AE3 ORR R10,R10,#0xFF00 \ 00000228 0A0050E1 CMP R0,R10 \ 0000022C 8C608905 STREQ R6,[R9, #+140] 4422 t->state=*((unsigned short *)(p->data)); \ 00000230 B800D4E1 LDRH R0,[R4, #+8] \ 00000234 B405C9E1 STRH R0,[R9, #+84] 4423 if((t->state!=65535)&&(t->change==1)) \ 00000238 0A0050E1 CMP R0,R10 \ 0000023C 0300000A BEQ ??ProcessPacket_19 \ 00000240 8C0099E5 LDR R0,[R9, #+140] \ 00000244 010050E3 CMP R0,#+1 4424 { 4425 t->just_now=2; \ 00000248 74B08905 STREQ R11,[R9, #+116] 4426 t->change=0; \ 0000024C 8C808905 STREQ R8,[R9, #+140] 4427 } 4428 4429 LogStatusChange(t); \ ??ProcessPacket_19: \ 00000250 0900A0E1 MOV R0,R9 \ 00000254 ........ _BLF LogStatusChange,??LogStatusChange??rA 4430 LogStatusChange2(t);//пишем лог templates\\logs.txt \ 00000258 0900A0E1 MOV R0,R9 \ 0000025C ........ _BLF LogStatusChange2,??LogStatusChange2??rA 4431 4432 ChangeContactPos(t); \ 00000260 0900A0E1 MOV R0,R9 \ 00000264 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4433 // RecountMenu(oldt,1); 4434 4435 if(isLogStatusChange)//isLogStatusChange // by kluchnik 05.04.08 \ 00000268 ........ LDR R0,??DataTable162 ;; isLogStatusChange \ 0000026C 000090E5 LDR R0,[R0, #+0] \ 00000270 000050E3 CMP R0,#+0 \ 00000274 2B00000A BEQ ??ProcessPacket_20 4436 { 4437 char *s=GetStatusByIconIndex(GetIconIndex(t)); \ 00000278 0900A0E1 MOV R0,R9 \ 0000027C ........ BL GetIconIndex \ 00000280 ........ BL GetStatusByIconIndex \ 00000284 00008DE5 STR R0,[SP, #+0] 4438 FreeXText2(t); \ 00000288 0900A0E1 MOV R0,R9 \ 0000028C ........ BL FreeXText2 4439 TTime time; 4440 GetDateTime(NULL,&time); \ 00000290 04108DE2 ADD R1,SP,#+4 \ 00000294 0000A0E3 MOV R0,#+0 \ 00000298 B40000EF SWI +180 4441 char *txt=malloc(64); \ 0000029C 4000A0E3 MOV R0,#+64 \ 000002A0 140000EF SWI +20 \ 000002A4 00B0A0E1 MOV R11,R0 4442 sprintf(txt," %s: %02d:%02d:%02d",s,time.hour,time.min,time.sec); \ 000002A8 0600DDE5 LDRB R0,[SP, #+6] \ 000002AC 791F85E2 ADD R1,R5,#+484 \ 000002B0 01002DE9 PUSH {R0} \ 000002B4 0900DDE5 LDRB R0,[SP, #+9] \ 000002B8 01002DE9 PUSH {R0} \ 000002BC 0C30DDE5 LDRB R3,[SP, #+12] \ 000002C0 08209DE5 LDR R2,[SP, #+8] \ 000002C4 0B00A0E1 MOV R0,R11 \ 000002C8 160000EF SWI +22 4443 t->xtext2=malloc(64); \ 000002CC 4000A0E3 MOV R0,#+64 \ 000002D0 140000EF SWI +20 \ 000002D4 B80089E5 STR R0,[R9, #+184] 4444 snprintf(t->xtext2,64,txt); \ 000002D8 0B20A0E1 MOV R2,R11 \ 000002DC 4010A0E3 MOV R1,#+64 \ 000002E0 1B0100EF SWI +283 4445 AddStringToLog(t,0x03,txt,"Status change",0xFFFFFFFF, 0); \ 000002E4 0800A0E1 MOV R0,R8 \ 000002E8 01002DE9 PUSH {R0} \ 000002EC 7E3F85E2 ADD R3,R5,#+504 \ 000002F0 0B20A0E1 MOV R2,R11 \ 000002F4 0310A0E3 MOV R1,#+3 \ 000002F8 0000E0E1 MVN R0,R0 \ 000002FC 01002DE9 PUSH {R0} \ 00000300 0900A0E1 MOV R0,R9 \ 00000304 ........ BL AddStringToLog 4446 ReqAddMsgToChat(t); \ 00000308 0900A0E1 MOV R0,R9 \ 0000030C ........ BL ReqAddMsgToChat 4447 RecountMenu(NULL, 0); \ 00000310 0810A0E1 MOV R1,R8 \ 00000314 0100A0E1 MOV R0,R1 \ 00000318 ........ BL RecountMenu 4448 mfree(txt); \ 0000031C 0B00A0E1 MOV R0,R11 \ 00000320 150000EF SWI +21 \ 00000324 10D08DE2 ADD SP,SP,#+16 4449 } 4450 4451 if ((t->state!=0xFFFF)&&(i==0xFFFF))//Звук \ ??ProcessPacket_20: \ 00000328 B405D9E1 LDRH R0,[R9, #+84] \ 0000032C 8810A0E3 MOV R1,#+136 \ 00000330 781D81E3 ORR R1,R1,#0x1E00 \ 00000334 07B081E0 ADD R11,R1,R7 \ 00000338 0A0050E1 CMP R0,R10 \ 0000033C 5500000A BEQ ??ProcessPacket_21 \ 00000340 0C109DE5 LDR R1,[SP, #+12] \ 00000344 0A0051E1 CMP R1,R10 \ 00000348 5200001A BNE ??ProcessPacket_21 4452 { 4453 if(Is_INC_On && (PopupShow==2 || PopupShow==3)) \ 0000034C C00297E5 LDR R0,[R7, #+704] \ 00000350 000050E3 CMP R0,#+0 \ 00000354 1700000A BEQ ??ProcessPacket_22 \ 00000358 74089FE5 LDR R0,??ProcessPacket_1+0xC ;; PopupShow \ 0000035C 000090E5 LDR R0,[R0, #+0] \ 00000360 020050E3 CMP R0,#+2 \ 00000364 03005013 CMPNE R0,#+3 \ 00000368 1200001A BNE ??ProcessPacket_22 4454 { 4455 INC_show2=20; 4456 sprintf(onContact,PopupOnlineString,t->name); \ 0000036C 64189FE5 LDR R1,??ProcessPacket_1+0x10 ;; PopupOnlineString \ 00000370 1400A0E3 MOV R0,#+20 \ 00000374 480487E5 STR R0,[R7, #+1096] \ 00000378 142089E2 ADD R2,R9,#+20 \ 0000037C A800A0E3 MOV R0,#+168 \ 00000380 880D80E3 ORR R0,R0,#0x2200 \ 00000384 070080E0 ADD R0,R0,R7 \ 00000388 160000EF SWI +22 4457 sprintf(on_off_buf,"[%s: %s]\n",t->xtext2+1,t->name); \ 0000038C B80099E5 LDR R0,[R9, #+184] \ 00000390 143089E2 ADD R3,R9,#+20 \ 00000394 012080E2 ADD R2,R0,#+1 \ 00000398 821F85E2 ADD R1,R5,#+520 \ 0000039C 0B00A0E1 MOV R0,R11 \ 000003A0 160000EF SWI +22 4458 on_off_timer=ON_OFF_TIME; \ 000003A4 30089FE5 LDR R0,??ProcessPacket_1+0x14 ;; ON_OFF_TIME \ 000003A8 000090E5 LDR R0,[R0, #+0] \ 000003AC 180487E5 STR R0,[R7, #+1048] 4459 UpdateCLheader(); 4460 show_on_contact(); \ 000003B0 ........ BL show_on_contact \ 000003B4 030000EA B ??ProcessPacket_23 4461 } 4462 else 4463 GBS_DelTimer(&incs2);//на всяк \ ??ProcessPacket_22: \ 000003B8 E800A0E3 MOV R0,#+232 \ 000003BC 880D80E3 ORR R0,R0,#0x2200 \ 000003C0 070080E0 ADD R0,R0,R7 \ 000003C4 8C0100EF SWI +396 4464 if(!extended_sounds) \ ??ProcessPacket_23: \ 000003C8 ........ LDR R0,??DataTable163 ;; extended_sounds \ 000003CC 0CA89FE5 LDR R10,??ProcessPacket_1+0x18 ;; sndGlobal \ 000003D0 000090E5 LDR R0,[R0, #+0] \ 000003D4 000050E3 CMP R0,#+0 \ 000003D8 0200001A BNE ??ProcessPacket_24 4465 { 4466 Play(sndGlobal); \ 000003DC 0A00A0E1 MOV R0,R10 \ 000003E0 ........ BL Play \ 000003E4 420000EA B ??ProcessPacket_25 4467 } 4468 else 4469 { 4470 FSTATS stat; 4471 int fsize; 4472 unsigned int ul = 0; \ ??ProcessPacket_24: \ 000003E8 10808DE5 STR R8,[SP, #+16] 4473 uins=t->uin; \ 000003EC 0C0099E5 LDR R0,[R9, #+12] \ 000003F0 A40287E5 STR R0,[R7, #+676] 4474 char ext[4]; 4475 // __root const CFG_CBOX_ITEM cfgcbox18_3_2[2]={"Mp3","Wav","Amr"}; 4476 switch(ext_type_sounds) \ 000003F4 ........ LDR R0,??DataTable164 ;; ext_type_sounds \ 000003F8 000090E5 LDR R0,[R0, #+0] \ 000003FC 010050E2 SUBS R0,R0,#+1 \ 00000400 0300000A BEQ ??ProcessPacket_26 \ 00000404 010050E2 SUBS R0,R0,#+1 \ 00000408 2400A003 MOVEQ R0,#+36 4477 { 4478 case 0: sprintf(ext,percent_s,mp3); break; \ 0000040C 1C00A013 MOVNE R0,#+28 \ 00000410 000000EA B ??ProcessPacket_27 4479 case 1: sprintf(ext,percent_s,wav); break; \ ??ProcessPacket_26: \ 00000414 2000A0E3 MOV R0,#+32 \ ??ProcessPacket_27: \ 00000418 800D80E3 ORR R0,R0,#0x2000 \ 0000041C 072080E0 ADD R2,R0,R7 \ 00000420 081085E2 ADD R1,R5,#+8 \ 00000424 0D00A0E1 MOV R0,SP \ 00000428 160000EF SWI +22 4480 case 2: sprintf(ext,percent_s,amr); break; 4481 default : sprintf(ext,percent_s,mp3); break; 4482 } 4483 sprintf(talk_sound, sds, sndGlobal2, uins,ext); \ 0000042C B0279FE5 LDR R2,??ProcessPacket_1+0x1C ;; sndGlobal2 \ 00000430 0D00A0E1 MOV R0,SP \ 00000434 01002DE9 PUSH {R0} \ 00000438 A43297E5 LDR R3,[R7, #+676] \ 0000043C 715EA0E3 MOV R5,#+1808 \ 00000440 1400A0E3 MOV R0,#+20 \ 00000444 800D80E3 ORR R0,R0,#0x2000 \ 00000448 071080E0 ADD R1,R0,R7 \ 0000044C 070085E0 ADD R0,R5,R7 \ 00000450 160000EF SWI +22 4484 GetFileStats(talk_sound,&stat,&ul); \ 00000454 14208DE2 ADD R2,SP,#+20 \ 00000458 861F8DE2 ADD R1,SP,#+536 \ 0000045C 070085E0 ADD R0,R5,R7 \ 00000460 840000EF SWI +132 4485 fsize=stat.size; 4486 if(fsize>0) \ 00000464 1C029DE5 LDR R0,[SP, #+540] \ 00000468 04D08DE2 ADD SP,SP,#+4 \ 0000046C 010050E3 CMP R0,#+1 4487 Play(talk_sound); \ 00000470 070085A0 ADDGE R0,R5,R7 4488 else 4489 Play(sndGlobal); \ 00000474 0A00A0B1 MOVLT R0,R10 \ 00000478 ........ BL Play 4490 t->isvibra=1; \ 0000047C 686089E5 STR R6,[R9, #+104] 4491 t->issound=1; \ 00000480 6C6089E5 STR R6,[R9, #+108] 4492 t->isShowXst=Show_XTX; \ 00000484 900397E5 LDR R0,[R7, #+912] \ 00000488 7C0089E5 STR R0,[R9, #+124] 4493 #ifdef kluchnik 4494 t->isLoadHistory=1; \ 0000048C 606089E5 STR R6,[R9, #+96] 4495 #endif 4496 t->signals=1; \ 00000490 806089E5 STR R6,[R9, #+128] \ 00000494 160000EA B ??ProcessPacket_25 4497 } 4498 } 4499 4500 if ((i!=0xFFFF)&&(t->state==0xFFFF))//Звук \ ??ProcessPacket_21: \ 00000498 0C109DE5 LDR R1,[SP, #+12] \ 0000049C 0A0051E1 CMP R1,R10 \ 000004A0 1300000A BEQ ??ProcessPacket_25 \ 000004A4 0A0050E1 CMP R0,R10 \ 000004A8 1100001A BNE ??ProcessPacket_25 4501 { 4502 Play(sndSrvMsg); \ 000004AC 34079FE5 LDR R0,??ProcessPacket_1+0x20 ;; sndSrvMsg \ 000004B0 ........ BL Play 4503 if(TIME_OR_MSG==2 || TIME_OR_MSG==3 | TIME_OR_MSG==4) \ 000004B4 30079FE5 LDR R0,??ProcessPacket_1+0x24 ;; TIME_OR_MSG \ 000004B8 000090E5 LDR R0,[R0, #+0] \ 000004BC 020050E3 CMP R0,#+2 \ 000004C0 03005013 CMPNE R0,#+3 \ 000004C4 04005013 CMPNE R0,#+4 \ 000004C8 0000001A BNE ??ProcessPacket_28 4504 Get_Online_total(); \ 000004CC ........ BL Get_Online_total 4505 sprintf(on_off_buf,"[%s: %s]\n",t->xtext2+1,t->name); \ ??ProcessPacket_28: \ 000004D0 B80099E5 LDR R0,[R9, #+184] \ 000004D4 143089E2 ADD R3,R9,#+20 \ 000004D8 012080E2 ADD R2,R0,#+1 \ 000004DC 821F85E2 ADD R1,R5,#+520 \ 000004E0 0B00A0E1 MOV R0,R11 \ 000004E4 160000EF SWI +22 4506 on_off_timer=ON_OFF_TIME; \ 000004E8 EC069FE5 LDR R0,??ProcessPacket_1+0x14 ;; ON_OFF_TIME \ 000004EC 000090E5 LDR R0,[R0, #+0] \ 000004F0 180487E5 STR R0,[R7, #+1048] 4507 UpdateCLheader(); 4508 } 4509 4510 if (edchat_id) \ ??ProcessPacket_25: \ 000004F4 100497E5 LDR R0,[R7, #+1040] \ 000004F8 000050E3 CMP R0,#+0 \ 000004FC AD01000A BEQ ??ProcessPacket_2 4511 { 4512 void *data=FindGUIbyId(edchat_id,NULL); \ 00000500 100497E5 LDR R0,[R7, #+1040] \ 00000504 0010A0E3 MOV R1,#+0 \ 00000508 090200EF SWI +521 4513 { 4514 EDCHAT_STRUCT *ed_struct; 4515 ed_struct=EDIT_GetUserPointer(data); \ 0000050C DF0100EF SWI +479 4516 if (ed_struct) \ 00000510 000050E3 CMP R0,#+0 \ 00000514 A701000A BEQ ??ProcessPacket_2 4517 { 4518 if (ed_struct->ed_contact==t) \ 00000518 000090E5 LDR R0,[R0, #+0] \ 0000051C 090050E1 CMP R0,R9 \ 00000520 A401001A BNE ??ProcessPacket_2 4519 { 4520 DirectRedrawGUI_ID(edchat_id); \ 00000524 100497E5 LDR R0,[R7, #+1040] \ 00000528 400100EF SWI +320 \ 0000052C A10100EA B ??ProcessPacket_2 4521 } 4522 } 4523 } 4524 } 4525 } 4526 break; 4527 case T_RECVMSG: 4528 NEW_MSG=1; \ ??ProcessPacket_29: \ 00000530 386487E5 STR R6,[R7, #+1080] 4529 t=FindContactByUin(p->pkt.uin); \ 00000534 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000538 0090B0E1 MOVS R9,R0 4530 if (!t)//если не в списке \ 0000053C 0A00001A BNE ??ProcessPacket_30 4531 { 4532 sprintf(s,percent_d,p->pkt.uin); \ 00000540 002094E5 LDR R2,[R4, #+0] \ 00000544 0B1085E2 ADD R1,R5,#+11 \ 00000548 450F8DE2 ADD R0,SP,#+276 \ 0000054C 160000EF SWI +22 4533 t=AddContact(p->pkt.uin,s,GROUP_CACHE,0); \ 00000550 082497E5 LDR R2,[R7, #+1032] \ 00000554 000094E5 LDR R0,[R4, #+0] \ 00000558 0030A0E3 MOV R3,#+0 \ 0000055C 451F8DE2 ADD R1,SP,#+276 \ 00000560 ........ _BLF AddContact,??AddContact??rA \ 00000564 0090A0E1 MOV R9,R0 4534 CreateCLFile(); \ 00000568 ........ BL CreateCLFile 4535 } 4536 #ifdef kluchnik 4537 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: \ 00000598 1810A0E3 MOV R1,#+24 \ 0000059C 841D81E3 ORR R1,R1,#0x2100 \ 000005A0 071081E0 ADD R1,R1,R7 \ 000005A4 00108DE5 STR R1,[SP, #+0] \ 000005A8 1400D9E5 LDRB R0,[R9, #+20] \ 000005AC 230050E3 CMP R0,#+35 \ 000005B0 1700001A BNE ??ProcessPacket_32 4544 { 4545 //Если это конференция, патчим имя 4546 char *s=strchr(p->data,'>'); \ 000005B4 3E10A0E3 MOV R1,#+62 \ 000005B8 080084E2 ADD R0,R4,#+8 \ 000005BC 180000EF SWI +24 4547 //Если нашли символ > и после него пробел и ник короче 16 символов 4548 if (s) \ 000005C0 000050E3 CMP R0,#+0 \ 000005C4 1200000A BEQ ??ProcessPacket_32 4549 { 4550 if ((s[1]==' ')&&((s-p->data)<16)) \ 000005C8 0110D0E5 LDRB R1,[R0, #+1] \ 000005CC 200051E3 CMP R1,#+32 \ 000005D0 0F00001A BNE ??ProcessPacket_32 \ 000005D4 081084E2 ADD R1,R4,#+8 \ 000005D8 011040E0 SUB R1,R0,R1 \ 000005DC 100051E3 CMP R1,#+16 \ 000005E0 0B0000AA BGE ??ProcessPacket_32 4551 { 4552 *s=0; //Режем строку \ 000005E4 0080C0E5 STRB R8,[R0, #+0] 4553 AddStringToLog(t,0x02,s+2,p->data,0xFFFFFFFF,1); //Добавляем имя из текста сообщения \ 000005E8 0110A0E3 MOV R1,#+1 \ 000005EC 02002DE9 PUSH {R1} \ 000005F0 083084E2 ADD R3,R4,#+8 \ 000005F4 022080E2 ADD R2,R0,#+2 \ 000005F8 0900A0E1 MOV R0,R9 \ 000005FC 001061E2 RSB R1,R1,#+0 \ 00000600 02002DE9 PUSH {R1} \ 00000604 0B10A0E1 MOV R1,R11 \ 00000608 ........ BL AddStringToLog 4554 goto L1; \ 0000060C 08D08DE2 ADD SP,SP,#+8 \ 00000610 7B0000EA B ??ProcessPacket_33 4555 } 4556 } 4557 } 4558 4559 //=================== tas bus jautri ===================// 4560 4561 comanda=1; \ ??ProcessPacket_32: \ 00000614 406487E5 STR R6,[R7, #+1088] 4562 CheckComand(p->data, t); \ 00000618 0910A0E1 MOV R1,R9 \ 0000061C CC559FE5 LDR R5,??ProcessPacket_1+0x28 ;; ILL_RECV_TMR \ 00000620 080084E2 ADD R0,R4,#+8 \ 00000624 ........ BL CheckComand \ 00000628 803099E5 LDR R3,[R9, #+128] \ 0000062C ........ LDR R0,??DataTable184 ;; automsgcount \ 00000630 ........ LDR R1,??DataTable167 ;; VIBR_TYPE \ 00000634 000053E3 CMP R3,#+0 \ 00000638 84309915 LDRNE R3,[R9, #+132] \ 0000063C 5A2FA0E3 MOV R2,#+360 \ 00000640 00005313 CMPNE R3,#+0 \ 00000644 1000000A BEQ ??ProcessPacket_34 4563 if(t->signals && t->isaccess) 4564 { 4565 #ifdef NEWSGOLD 4566 scrsTime=0; 4567 #endif 4568 if(SHOW_ACTIVE) \ 00000648 ........ LDR R3,??DataTable170 ;; SHOW_ACTIVE \ 0000064C 7C8387E5 STR R8,[R7, #+892] \ 00000650 003093E5 LDR R3,[R3, #+0] \ 00000654 000053E3 CMP R3,#+0 4569 t->isactive=ACTIVE_TIME; \ 00000658 AC208915 STRNE R2,[R9, #+172] 4570 if(t->isvibra) \ 0000065C 682099E5 LDR R2,[R9, #+104] \ 00000660 000052E3 CMP R2,#+0 \ 00000664 2500000A BEQ ??ProcessPacket_35 4571 { 4572 if(VIBR_TYPE) \ 00000668 001091E5 LDR R1,[R1, #+0] \ 0000066C 000051E3 CMP R1,#+0 4573 vibra_count=2; \ 00000670 C4B38715 STRNE R11,[R7, #+964] 4574 else 4575 vibra_count=1; \ 00000674 C4638705 STREQ R6,[R7, #+964] 4576 if(t->automsgcountisIndividSet) \ ??ProcessPacket_34: \ 0000068C 643099E5 LDR R3,[R9, #+100] \ 00000690 7C8387E5 STR R8,[R7, #+892] \ 00000694 000053E3 CMP R3,#+0 \ 00000698 0B00000A BEQ ??ProcessPacket_37 4593 { 4594 #ifdef NEWSGOLD 4595 scrsTime=0; 4596 #endif 4597 if(SHOW_ACTIVE) \ 0000069C ........ LDR R0,??DataTable170 ;; SHOW_ACTIVE \ 000006A0 000090E5 LDR R0,[R0, #+0] \ 000006A4 000050E3 CMP R0,#+0 4598 t->isactive=ACTIVE_TIME; \ 000006A8 AC208915 STRNE R2,[R9, #+172] 4599 if(t->isvibra) \ 000006AC 680099E5 LDR R0,[R9, #+104] \ 000006B0 000050E3 CMP R0,#+0 \ 000006B4 1100000A BEQ ??ProcessPacket_35 4600 { 4601 if(VIBR_TYPE) \ 000006B8 000091E5 LDR R0,[R1, #+0] \ 000006BC 000050E3 CMP R0,#+0 4602 vibra_count=2; \ 000006C0 C4B38715 STRNE R11,[R7, #+964] 4603 else 4604 vibra_count=1; \ 000006C4 C4638705 STREQ R6,[R7, #+964] 4605 if(t->automsgcount < automsgcount && away_m) 4606 start_vibra(); \ 000006C8 0B0000EA B ??ProcessPacket_36 4607 else 4608 start_vibra(); 4609 } 4610 #ifdef ELKA 4611 if(SLI_TYPE) 4612 SLI_Timer(); 4613 #endif 4614 if(Is_Double_Vibra_On) 4615 { 4616 Reminder_timer(); 4617 } 4618 4619 if (Is_ILU_On) 4620 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 4621 } 4622 else 4623 { 4624 #ifdef NEWSGOLD 4625 scrsTime=0; 4626 #endif 4627 if(SHOW_ACTIVE) \ ??ProcessPacket_37: \ 000006CC ........ LDR R3,??DataTable170 ;; SHOW_ACTIVE \ 000006D0 003093E5 LDR R3,[R3, #+0] \ 000006D4 000053E3 CMP R3,#+0 4628 t->isactive=ACTIVE_TIME; \ 000006D8 AC208915 STRNE R2,[R9, #+172] 4629 if(VIBR_TYPE) \ 000006DC 001091E5 LDR R1,[R1, #+0] \ 000006E0 000051E3 CMP R1,#+0 4630 vibra_count=2; \ 000006E4 C4B38715 STRNE R11,[R7, #+964] 4631 else 4632 vibra_count=1; \ 000006E8 C4638705 STREQ R6,[R7, #+964] 4633 if(t->automsgcount >= automsgcount) vibra_count=0; \ 000006EC 881099E5 LDR R1,[R9, #+136] \ 000006F0 000090E5 LDR R0,[R0, #+0] \ 000006F4 000051E1 CMP R1,R0 \ 000006F8 C4838725 STRCS R8,[R7, #+964] 4634 start_vibra(); \ ??ProcessPacket_36: \ 000006FC ........ BL start_vibra 4635 #ifdef ELKA 4636 if(SLI_TYPE) 4637 SLI_Timer(); \ ??ProcessPacket_35: \ 00000700 ........ BL SLI_Timer 4638 #endif 4639 if(Is_Double_Vibra_On) \ 00000704 C80297E5 LDR R0,[R7, #+712] \ 00000708 000050E3 CMP R0,#+0 \ 0000070C 0000000A BEQ ??ProcessPacket_38 4640 { 4641 Reminder_timer(); \ 00000710 ........ BL Reminder_timer 4642 } 4643 4644 if (Is_ILU_On) \ ??ProcessPacket_38: \ 00000714 C40297E5 LDR R0,[R7, #+708] \ 00000718 000050E3 CMP R0,#+0 \ 0000071C 0600000A BEQ ??ProcessPacket_39 4645 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 00000720 CC049FE5 LDR R0,??ProcessPacket_1+0x2C ;; ILL_KEYS_RECV \ 00000724 00309AE5 LDR R3,[R10, #+0] \ 00000728 001090E5 LDR R1,[R0, #+0] \ 0000072C C4049FE5 LDR R0,??ProcessPacket_1+0x30 ;; ILL_DISP_RECV \ 00000730 002095E5 LDR R2,[R5, #+0] \ 00000734 000090E5 LDR R0,[R0, #+0] \ 00000738 ........ BL IlluminationOn 4646 } 4647 4648 if(comanda==1) \ ??ProcessPacket_39: \ 0000073C 400497E5 LDR R0,[R7, #+1088] \ 00000740 010050E3 CMP R0,#+1 \ 00000744 2E00001A BNE ??ProcessPacket_33 4649 { 4650 AddStringToLog(t,0x02,p->data,t->name,0xFFFFFFFF,1); \ 00000748 01002DE9 PUSH {R0} \ 0000074C 143089E2 ADD R3,R9,#+20 \ 00000750 082084E2 ADD R2,R4,#+8 \ 00000754 0210A0E3 MOV R1,#+2 \ 00000758 000066E2 RSB R0,R6,#+0 \ 0000075C 01002DE9 PUSH {R0} \ 00000760 0900A0E1 MOV R0,R9 \ 00000764 ........ BL AddStringToLog 4651 main_count++; \ 00000768 ........ LDR R0,??DataTable171 ;; main_count \ 0000076C 001090E5 LDR R1,[R0, #+0] \ 00000770 011081E2 ADD R1,R1,#+1 \ 00000774 001080E5 STR R1,[R0, #+0] 4652 if(Is_INC_On && (PopupShow==1 || PopupShow==3)) \ 00000778 C00297E5 LDR R0,[R7, #+704] \ 0000077C 08D08DE2 ADD SP,SP,#+8 \ 00000780 000050E3 CMP R0,#+0 \ 00000784 1300000A BEQ ??ProcessPacket_40 \ 00000788 44049FE5 LDR R0,??ProcessPacket_1+0xC ;; PopupShow \ 0000078C 000090E5 LDR R0,[R0, #+0] \ 00000790 010050E3 CMP R0,#+1 \ 00000794 03005013 CMPNE R0,#+3 \ 00000798 0E00001A BNE ??ProcessPacket_40 4653 { 4654 sprintf(show_nick,PopupMsgString,t->name); \ 0000079C 58149FE5 LDR R1,??ProcessPacket_1+0x34 ;; PopupMsgString \ 000007A0 142089E2 ADD R2,R9,#+20 \ 000007A4 8800A0E3 MOV R0,#+136 \ 000007A8 880D80E3 ORR R0,R0,#0x2200 \ 000007AC 070080E0 ADD R0,R0,R7 \ 000007B0 160000EF SWI +22 4655 if(!IsIdleUiOnTop()&&(!saver_on)) \ 000007B4 C50000EF SWI +197 \ 000007B8 000050E3 CMP R0,#+0 \ 000007BC A8029705 LDREQ R0,[R7, #+680] \ 000007C0 00005003 CMPEQ R0,#+0 \ 000007C4 0500001A BNE ??ProcessPacket_41 4656 { 4657 INC_show=20; \ 000007C8 1400A0E3 MOV R0,#+20 \ 000007CC 440487E5 STR R0,[R7, #+1092] 4658 show_pp_sender(); \ 000007D0 ........ BL show_pp_sender \ 000007D4 010000EA B ??ProcessPacket_41 4659 } 4660 } 4661 else 4662 GBS_DelTimer(&develop); \ ??ProcessPacket_40: \ 000007D8 00009DE5 LDR R0,[SP, #+0] \ 000007DC 8C0100EF SWI +396 4663 4664 main_msg_timer2=main_msg_timer;//при получении сообщения восстанавливаем таймер \ ??ProcessPacket_41: \ 000007E0 18049FE5 LDR R0,??ProcessPacket_1+0x38 ;; main_msg_timer \ 000007E4 000090E5 LDR R0,[R0, #+0] \ 000007E8 340487E5 STR R0,[R7, #+1076] 4665 if(Is_SMARTCPU_On) \ 000007EC BC0297E5 LDR R0,[R7, #+700] \ 000007F0 000050E3 CMP R0,#+0 \ 000007F4 0200000A BEQ ??ProcessPacket_33 4666 AddToMain(t->name,p->data); \ 000007F8 081084E2 ADD R1,R4,#+8 \ 000007FC 140089E2 ADD R0,R9,#+20 \ 00000800 ........ BL AddToMain 4667 } 4668 L1: 4669 //Разворачиваем группу, в которой пришло сообщение 4670 { 4671 CLIST *g=FindGroupByID(t->group); \ ??ProcessPacket_33: \ 00000804 100099E5 LDR R0,[R9, #+16] \ 00000808 ........ _BLF FindGroupByID,??FindGroupByID??rA 4672 if (g) \ 0000080C 000050E3 CMP R0,#+0 4673 { 4674 if (g->state) \ 00000810 B415D011 LDRHNE R1,[R0, #+84] \ 00000814 00005113 CMPNE R1,#+0 4675 { 4676 g->state=0; \ 00000818 B485C011 STRHNE R8,[R0, #+84] 4677 } 4678 } 4679 } 4680 4681 ReqAddMsgToChat(t); \ 0000081C 0900A0E1 MOV R0,R9 \ 00000820 ........ BL ReqAddMsgToChat 4682 RecountMenu(t,1); \ 00000824 0110A0E3 MOV R1,#+1 \ 00000828 0900A0E1 MOV R0,R9 \ 0000082C ........ BL RecountMenu 4683 4684 switch (DEVELOP_IF) \ 00000830 CC039FE5 LDR R0,??ProcessPacket_1+0x3C ;; DEVELOP_IF \ 00000834 000090E5 LDR R0,[R0, #+0] \ 00000838 000050E3 CMP R0,#+0 \ 0000083C 0400000A BEQ ??ProcessPacket_42 \ 00000840 010050E2 SUBS R0,R0,#+1 \ 00000844 0B00000A BEQ ??ProcessPacket_43 \ 00000848 020050E2 SUBS R0,R0,#+2 \ 0000084C 1300000A BEQ ??ProcessPacket_44 \ 00000850 D80000EA B ??ProcessPacket_2 4685 { 4686 case 0: 4687 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) to_develop(); \ ??ProcessPacket_42: \ 00000854 068100EF SWI +33030 \ 00000858 080090E5 LDR R0,[R0, #+8] \ 0000085C D01297E5 LDR R1,[R7, #+720] \ 00000860 0C0090E5 LDR R0,[R0, #+12] \ 00000864 0C0090E5 LDR R0,[R0, #+12] \ 00000868 010050E1 CMP R0,R1 \ ??ProcessPacket_45: \ 0000086C D100000A BEQ ??ProcessPacket_2 \ 00000870 ........ BL to_develop \ 00000874 CF0000EA B ??ProcessPacket_2 4688 break; 4689 case 1: 4690 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) to_develop(); \ ??ProcessPacket_43: \ 00000878 068100EF SWI +33030 \ 0000087C 080090E5 LDR R0,[R0, #+8] \ 00000880 D01297E5 LDR R1,[R7, #+720] \ 00000884 0C0090E5 LDR R0,[R0, #+12] \ 00000888 0C0090E5 LDR R0,[R0, #+12] \ 0000088C 010050E1 CMP R0,R1 \ 00000890 C800000A BEQ ??ProcessPacket_2 \ 00000894 430000EF SWI +67 \ 00000898 000050E3 CMP R0,#+0 \ 0000089C F2FFFFEA B ??ProcessPacket_45 4691 break; 4692 case 2: 4693 break; 4694 case 3: 4695 GBS_DelTimer(&develop); \ ??ProcessPacket_44: \ 000008A0 00009DE5 LDR R0,[SP, #+0] \ 000008A4 8C0100EF SWI +396 4696 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(!IsUnlocked())) begin_to_develop(); \ 000008A8 068100EF SWI +33030 \ 000008AC 080090E5 LDR R0,[R0, #+8] \ 000008B0 D01297E5 LDR R1,[R7, #+720] \ 000008B4 0C0090E5 LDR R0,[R0, #+12] \ 000008B8 0C0090E5 LDR R0,[R0, #+12] \ 000008BC 010050E1 CMP R0,R1 \ 000008C0 BC00000A BEQ ??ProcessPacket_2 \ 000008C4 430000EF SWI +67 \ 000008C8 000050E3 CMP R0,#+0 \ 000008CC B900001A BNE ??ProcessPacket_2 \ 000008D0 ........ BL begin_to_develop \ 000008D4 B70000EA B ??ProcessPacket_2 4697 break; 4698 } 4699 break; 4700 case T_SRV_ACK: 4701 case T_CLIENT_ACK: 4702 q=FindContactLOGQByAck(p); \ ??ProcessPacket_46: \ 000008D8 0400A0E1 MOV R0,R4 \ 000008DC ........ BL FindContactLOGQByAck 4703 if (q) \ 000008E0 000050E3 CMP R0,#+0 \ 000008E4 B300000A BEQ ??ProcessPacket_2 4704 { 4705 q->acked=p->pkt.type==T_SRV_ACK?1:2; \ 000008E8 B410D4E1 LDRH R1,[R4, #+4] \ 000008EC 100051E3 CMP R1,#+16 \ 000008F0 0110A003 MOVEQ R1,#+1 \ 000008F4 0210A013 MOVNE R1,#+2 \ 000008F8 041080E5 STR R1,[R0, #+4] 4706 t=FindContactByUin(p->pkt.uin); \ 000008FC 000094E5 LDR R0,[R4, #+0] \ 00000900 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000904 0090A0E1 MOV R9,R0 4707 if (edchat_id) \ 00000908 100497E5 LDR R0,[R7, #+1040] \ 0000090C 000050E3 CMP R0,#+0 \ 00000910 A800000A BEQ ??ProcessPacket_2 4708 { 4709 void *data=FindGUIbyId(edchat_id,NULL); \ 00000914 100497E5 LDR R0,[R7, #+1040] \ 00000918 0010A0E3 MOV R1,#+0 \ 0000091C 090200EF SWI +521 \ 00000920 0050B0E1 MOVS R5,R0 4710 if (data) \ 00000924 A300000A BEQ ??ProcessPacket_2 4711 { 4712 EDCHAT_STRUCT *ed_struct; 4713 ed_struct=EDIT_GetUserPointer(data); \ 00000928 DF0100EF SWI +479 4714 if (ed_struct) \ 0000092C 000050E3 CMP R0,#+0 \ 00000930 A000000A BEQ ??ProcessPacket_2 4715 { 4716 if (ed_struct->ed_contact==t) \ 00000934 000090E5 LDR R0,[R0, #+0] \ 00000938 090050E1 CMP R0,R9 \ 0000093C 9D00001A BNE ??ProcessPacket_2 4717 { 4718 if (EDIT_IsBusy(data)) \ 00000940 0500A0E1 MOV R0,R5 \ 00000944 1C0200EF SWI +540 \ 00000948 000050E3 CMP R0,#+0 \ 0000094C 0300000A BEQ ??ProcessPacket_47 4719 { 4720 t->req_drawack=1; \ 00000950 9C6089E5 STR R6,[R9, #+156] 4721 time_to_stop_t9=3; \ 00000954 0300A0E3 MOV R0,#+3 \ 00000958 3C0487E5 STR R0,[R7, #+1084] \ 0000095C 950000EA B ??ProcessPacket_2 4722 } 4723 else { 4724 DrawAck(data); \ ??ProcessPacket_47: \ 00000960 0500A0E1 MOV R0,R5 \ 00000964 ........ BL DrawAck 4725 if (p->pkt.type==T_SRV_ACK) \ 00000968 B400D4E1 LDRH R0,[R4, #+4] \ 0000096C 100050E3 CMP R0,#+16 \ 00000970 9000001A BNE ??ProcessPacket_2 4726 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 00000974 8C029FE5 LDR R0,??ProcessPacket_1+0x40 ;; ILL_SEND_TMR \ 00000978 00309AE5 LDR R3,[R10, #+0] \ 0000097C 002090E5 LDR R2,[R0, #+0] \ 00000980 84029FE5 LDR R0,??ProcessPacket_1+0x44 ;; ILL_KEYS_SEND \ 00000984 001090E5 LDR R1,[R0, #+0] \ 00000988 80029FE5 LDR R0,??ProcessPacket_1+0x48 ;; ILL_DISP_SEND \ 0000098C 000090E5 LDR R0,[R0, #+0] \ 00000990 ........ BL IlluminationOn \ 00000994 870000EA B ??ProcessPacket_2 4727 } 4728 } 4729 } 4730 } 4731 } 4732 } 4733 break; 4734 case T_XTEXT_ACK: 4735 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_48: \ 00000998 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 0000099C 0090B0E1 MOVS R9,R0 4736 if (t) \ 000009A0 8400000A BEQ ??ProcessPacket_2 4737 { 4738 int i; 4739 int j; 4740 char ss[256]; 4741 TTime tm; 4742 FreeXText(t); \ 000009A4 ........ _BLF FreeXText,??FreeXText??rA 4743 i=p->pkt.data_len; \ 000009A8 B670D4E1 LDRH R7,[R4, #+6] 4744 // memcpy(t->xtext=malloc(i),p->data,i); 4745 GetDateTime(0,&tm); \ 000009AC 04108DE2 ADD R1,SP,#+4 \ 000009B0 0000A0E3 MOV R0,#+0 \ 000009B4 B40000EF SWI +180 4746 snprintf(ss,i+4,"%02d:%02d:%02d %s",tm.hour,tm.min,tm.sec,p->data); \ 000009B8 080084E2 ADD R0,R4,#+8 \ 000009BC 01002DE9 PUSH {R0} \ 000009C0 0A00DDE5 LDRB R0,[SP, #+10] \ 000009C4 856FA0E3 MOV R6,#+532 \ 000009C8 052086E0 ADD R2,R6,R5 \ 000009CC 01002DE9 PUSH {R0} \ 000009D0 0D00DDE5 LDRB R0,[SP, #+13] \ 000009D4 041087E2 ADD R1,R7,#+4 \ 000009D8 01002DE9 PUSH {R0} \ 000009DC 1030DDE5 LDRB R3,[SP, #+16] \ 000009E0 20008DE2 ADD R0,SP,#+32 \ 000009E4 1B0100EF SWI +283 4747 memcpy(t->xtext=malloc(strlen(ss)),ss,strlen(ss)); \ 000009E8 20008DE2 ADD R0,SP,#+32 \ 000009EC 1B0000EF SWI +27 \ 000009F0 0070A0E1 MOV R7,R0 \ 000009F4 20008DE2 ADD R0,SP,#+32 \ 000009F8 1B0000EF SWI +27 \ 000009FC 140000EF SWI +20 \ 00000A00 B40089E5 STR R0,[R9, #+180] \ 00000A04 0720A0E1 MOV R2,R7 \ 00000A08 20108DE2 ADD R1,SP,#+32 \ 00000A0C 1E0100EF SWI +286 4748 4749 zeromem(s,256); \ 00000A10 401FA0E3 MOV R1,#+256 \ 00000A14 480F8DE2 ADD R0,SP,#+288 \ 00000A18 1D0100EF SWI +285 4750 strcpy(s,t->name); \ 00000A1C 141089E2 ADD R1,R9,#+20 \ 00000A20 480F8DE2 ADD R0,SP,#+288 \ 00000A24 1A0000EF SWI +26 4751 strcat(s,":\n"); \ 00000A28 661F8FE2 ADR R1,??ProcessPacket_1 ;; ":\n" \ 00000A2C 480F8DE2 ADD R0,SP,#+288 \ 00000A30 170000EF SWI +23 4752 i=strlen(s); \ 00000A34 480F8DE2 ADD R0,SP,#+288 \ 00000A38 1B0000EF SWI +27 4753 j=p->data[0]; \ 00000A3C 0870D4E5 LDRB R7,[R4, #+8] \ 00000A40 0080A0E1 MOV R8,R0 4754 if (j>(255-i)) j=255-i; \ 00000A44 FF0068E2 RSB R0,R8,#+255 \ 00000A48 070050E1 CMP R0,R7 \ 00000A4C 0CD08DE2 ADD SP,SP,#+12 \ 00000A50 0070A0B1 MOVLT R7,R0 4755 strncpy(s+i,p->data+1,j); \ 00000A54 0720A0E1 MOV R2,R7 \ 00000A58 091084E2 ADD R1,R4,#+9 \ 00000A5C 450F8DE2 ADD R0,SP,#+276 \ 00000A60 000088E0 ADD R0,R8,R0 \ 00000A64 160100EF SWI +278 4756 i+=j; \ 00000A68 080087E0 ADD R0,R7,R8 4757 if (i<255) \ 00000A6C FF0050E3 CMP R0,#+255 \ 00000A70 100000AA BGE ??ProcessPacket_49 4758 { 4759 s[i]='\n'; \ 00000A74 451F8DE2 ADD R1,SP,#+276 \ 00000A78 0A20A0E3 MOV R2,#+10 \ 00000A7C 0120C0E7 STRB R2,[R0, +R1] 4760 i++; \ 00000A80 0810D4E5 LDRB R1,[R4, #+8] \ 00000A84 B620D4E1 LDRH R2,[R4, #+6] \ 00000A88 010080E2 ADD R0,R0,#+1 4761 j=p->pkt.data_len-p->data[0]-1; 4762 if (j>(255-i)) j=255-i; 4763 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000A8C 453F8DE2 ADD R3,SP,#+276 \ 00000A90 012042E0 SUB R2,R2,R1 \ 00000A94 017042E2 SUB R7,R2,#+1 \ 00000A98 FF2060E2 RSB R2,R0,#+255 \ 00000A9C 070052E1 CMP R2,R7 \ 00000AA0 0270A0B1 MOVLT R7,R2 \ 00000AA4 0720A0E1 MOV R2,R7 \ 00000AA8 041081E0 ADD R1,R1,R4 \ 00000AAC 091081E2 ADD R1,R1,#+9 \ 00000AB0 030080E0 ADD R0,R0,R3 \ 00000AB4 160100EF SWI +278 4764 } 4765 4766 zeromem(s,256); \ ??ProcessPacket_49: \ 00000AB8 401FA0E3 MOV R1,#+256 \ 00000ABC 450F8DE2 ADD R0,SP,#+276 \ 00000AC0 1D0100EF SWI +285 4767 i=0; 4768 j=p->data[0]; \ 00000AC4 0870D4E5 LDRB R7,[R4, #+8] 4769 if (j>(255-i)) j=255-i; 4770 strncpy(s,p->data+1,j); \ 00000AC8 091084E2 ADD R1,R4,#+9 \ 00000ACC 450F8DE2 ADD R0,SP,#+276 \ 00000AD0 400F57E3 CMP R7,#+256 \ 00000AD4 FF70A0A3 MOVGE R7,#+255 \ 00000AD8 0720A0E1 MOV R2,R7 \ 00000ADC 160100EF SWI +278 4771 i+=j; 4772 if (i<255) \ 00000AE0 FF0057E3 CMP R7,#+255 \ 00000AE4 100000AA BGE ??ProcessPacket_50 4773 { 4774 s[i++]=13; \ 00000AE8 451F8DE2 ADD R1,SP,#+276 \ 00000AEC 0D20A0E3 MOV R2,#+13 \ 00000AF0 0120C7E7 STRB R2,[R7, +R1] \ 00000AF4 0810D4E5 LDRB R1,[R4, #+8] \ 00000AF8 B620D4E1 LDRH R2,[R4, #+6] \ 00000AFC 010087E2 ADD R0,R7,#+1 4775 j=p->pkt.data_len-p->data[0]-1; 4776 if (j>(255-i)) j=255-i; 4777 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000B00 453F8DE2 ADD R3,SP,#+276 \ 00000B04 012042E0 SUB R2,R2,R1 \ 00000B08 017042E2 SUB R7,R2,#+1 \ 00000B0C FF2060E2 RSB R2,R0,#+255 \ 00000B10 070052E1 CMP R2,R7 \ 00000B14 0270A0B1 MOVLT R7,R2 \ 00000B18 0720A0E1 MOV R2,R7 \ 00000B1C 041081E0 ADD R1,R1,R4 \ 00000B20 091081E2 ADD R1,R1,#+9 \ 00000B24 030080E0 ADD R0,R0,R3 \ 00000B28 160100EF SWI +278 4778 } 4779 4780 GetDateTime(0,&tm); \ ??ProcessPacket_50: \ 00000B2C 04108DE2 ADD R1,SP,#+4 \ 00000B30 0000A0E3 MOV R0,#+0 \ 00000B34 B40000EF SWI +180 4781 sprintf(ss,"%02d:%02d:%02d %s",tm.hour,tm.min,tm.sec,s); \ 00000B38 450F8DE2 ADD R0,SP,#+276 \ 00000B3C 01002DE9 PUSH {R0} \ 00000B40 0A00DDE5 LDRB R0,[SP, #+10] \ 00000B44 051086E0 ADD R1,R6,R5 \ 00000B48 01002DE9 PUSH {R0} \ 00000B4C 0D30DDE5 LDRB R3,[SP, #+13] \ 00000B50 0C20DDE5 LDRB R2,[SP, #+12] \ 00000B54 1C008DE2 ADD R0,SP,#+28 \ 00000B58 160000EF SWI +22 4782 AddStringToLog(t,0x03,ss,x_status_change,0xFFFFFFFF,1); \ 00000B5C 0100A0E3 MOV R0,#+1 \ 00000B60 01002DE9 PUSH {R0} \ 00000B64 EF3F85E2 ADD R3,R5,#+956 \ 00000B68 0310A0E3 MOV R1,#+3 \ 00000B6C 000060E2 RSB R0,R0,#+0 \ 00000B70 01002DE9 PUSH {R0} \ 00000B74 24208DE2 ADD R2,SP,#+36 \ 00000B78 0900A0E1 MOV R0,R9 \ 00000B7C ........ BL AddStringToLog 4783 ReqAddMsgToChat(t); \ 00000B80 0900A0E1 MOV R0,R9 \ 00000B84 ........ BL ReqAddMsgToChat 4784 if (strlen(p->data)) // Если x-status не пустой \ 00000B88 080084E2 ADD R0,R4,#+8 \ 00000B8C 1B0000EF SWI +27 \ 00000B90 000050E3 CMP R0,#+0 \ 00000B94 10D08DE2 ADD SP,SP,#+16 4785 RecountMenu(t, 1); \ 00000B98 0110A013 MOVNE R1,#+1 \ 00000B9C 0900A011 MOVNE R0,R9 \ 00000BA0 4CFDFF1A BNE ??ProcessPacket_9 4786 else 4787 RecountMenu(NULL, 0); \ 00000BA4 0010A0E3 MOV R1,#+0 \ 00000BA8 0000A0E3 MOV R0,#+0 \ 00000BAC 49FDFFEA B ??ProcessPacket_9 4788 } 4789 break; 4790 case T_LASTPRIVACY: 4791 CurrentPrivateStatus=p->data[0]; \ ??ProcessPacket_51: \ 00000BB0 0800D4E5 LDRB R0,[R4, #+8] \ 00000BB4 C00387E5 STR R0,[R7, #+960] 4792 break; 4793 } 4794 mfree(p); \ ??ProcessPacket_2: \ 00000BB8 0400A0E1 MOV R0,R4 \ 00000BBC 150000EF SWI +21 4795 } \ 00000BC0 8FDF8DE2 ADD SP,SP,#+572 \ 00000BC4 F08FBDE8 POP {R4-R11,PC} ;; return \ ??ProcessPacket_1: \ 00000BC8 3A0A0000 DC8 ":\n",+0 \ 00000BCC ........ DC32 ILL_RECV_FADE \ 00000BD0 ........ DC32 ENA_AUTO_XTXT \ 00000BD4 ........ DC32 PopupShow \ 00000BD8 ........ DC32 PopupOnlineString \ 00000BDC ........ DC32 ON_OFF_TIME \ 00000BE0 ........ DC32 sndGlobal \ 00000BE4 ........ DC32 sndGlobal2 \ 00000BE8 ........ DC32 sndSrvMsg \ 00000BEC ........ DC32 TIME_OR_MSG \ 00000BF0 ........ DC32 ILL_RECV_TMR \ 00000BF4 ........ DC32 ILL_KEYS_RECV \ 00000BF8 ........ DC32 ILL_DISP_RECV \ 00000BFC ........ DC32 PopupMsgString \ 00000C00 ........ DC32 main_msg_timer \ 00000C04 ........ DC32 DEVELOP_IF \ 00000C08 ........ DC32 ILL_SEND_TMR \ 00000C0C ........ DC32 ILL_KEYS_SEND \ 00000C10 ........ DC32 ILL_DISP_SEND 4796 4797 4798 IPC_REQ tmr_gipc; \ In segment CODE, align 4, keep-with-next 4799 void process_active_timer(void) 4800 { \ process_active_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} 4801 if (connect_state>2) \ 00000004 ........ LDR R5,??DataTable177 ;; i_rc \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C DC0395E5 LDR R0,[R5, #+988] \ 00000010 030050E3 CMP R0,#+3 \ 00000014 070000BA BLT ??process_active_timer_0 4802 { 4803 if (++tenseconds_to_ping>12) \ 00000018 140495E5 LDR R0,[R5, #+1044] \ 0000001C 010080E2 ADD R0,R0,#+1 \ 00000020 140485E5 STR R0,[R5, #+1044] \ 00000024 0D0050E3 CMP R0,#+13 \ 00000028 020000BA BLT ??process_active_timer_0 4804 { 4805 tenseconds_to_ping=0; 4806 SUBPROC((void *)do_ping); \ 0000002C 5C009FE5 LDR R0,??process_active_timer_1 ;; do_ping \ 00000030 144485E5 STR R4,[R5, #+1044] \ 00000034 710100EF SWI +369 4807 } 4808 } 4809 tmr_gipc.name_to=ipc_my_name; \ ??process_active_timer_0: \ 00000038 ........ LDR R2,??DataTable175 ;; Canvas \ 0000003C A10FA0E3 MOV R0,#+644 \ 00000040 E51FA0E3 MOV R1,#+916 \ 00000044 023081E0 ADD R3,R1,R2 \ 00000048 053080E7 STR R3,[R0, +R5] 4810 tmr_gipc.name_from=ipc_my_name; \ 0000004C 021081E0 ADD R1,R1,R2 \ 00000050 881285E5 STR R1,[R5, #+648] 4811 tmr_gipc.data=NULL; \ 00000054 8C4285E5 STR R4,[R5, #+652] 4812 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_TENSECONDS,&tmr_gipc); \ 00000058 053080E0 ADD R3,R0,R5 \ 0000005C 0420A0E3 MOV R2,#+4 \ 00000060 B010A0E3 MOV R1,#+176 \ 00000064 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000068 0900A0E3 MOV R0,#+9 \ 0000006C 420C80E3 ORR R0,R0,#0x4200 \ 00000070 000100EF SWI +256 4813 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000074 ........ LDR R2,??DataTable174 ;; process_active_timer \ 00000078 871EA0E3 MOV R1,#+2160 \ 0000007C 6800A0E3 MOV R0,#+104 \ 00000080 780D80E3 ORR R0,R0,#0x1E00 \ 00000084 050080E0 ADD R0,R0,R5 \ 00000088 4D0000EF SWI +77 4814 } \ 0000008C 3080BDE8 POP {R4,R5,PC} ;; return \ ??process_active_timer_1: \ 00000090 ........ DC32 do_ping 4815 4816 GBSTMR tm22; \ In segment CODE, align 4, keep-with-next 4817 void OneSecTmr() 4818 { 4819 tmr_gipc.name_to=ipc_my_name; \ OneSecTmr: \ 00000000 ........ LDR R2,??DataTable175 ;; Canvas \ 00000004 10402DE9 PUSH {R4,LR} \ 00000008 ........ LDR R4,??DataTable177 ;; i_rc \ 0000000C A10FA0E3 MOV R0,#+644 \ 00000010 E51FA0E3 MOV R1,#+916 \ 00000014 023081E0 ADD R3,R1,R2 \ 00000018 043080E7 STR R3,[R0, +R4] 4820 tmr_gipc.name_from=ipc_my_name; \ 0000001C 021081E0 ADD R1,R1,R2 \ 00000020 881284E5 STR R1,[R4, #+648] 4821 tmr_gipc.data=NULL; \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 8C1284E5 STR R1,[R4, #+652] 4822 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_ONESECOND,&tmr_gipc); \ 0000002C 043080E0 ADD R3,R0,R4 \ 00000030 0620A0E3 MOV R2,#+6 \ 00000034 B010A0E3 MOV R1,#+176 \ 00000038 DE1C81E3 ORR R1,R1,#0xDE00 \ 0000003C 0900A0E3 MOV R0,#+9 \ 00000040 420C80E3 ORR R0,R0,#0x4200 \ 00000044 000100EF SWI +256 4823 GBS_StartTimerProc(&tm22,TMR_SECOND,OneSecTmr); \ 00000048 14209FE5 LDR R2,??OneSecTmr_0 ;; OneSecTmr \ 0000004C D810A0E3 MOV R1,#+216 \ 00000050 F800A0E3 MOV R0,#+248 \ 00000054 880D80E3 ORR R0,R0,#0x2200 \ 00000058 040080E0 ADD R0,R0,R4 \ 0000005C 4D0000EF SWI +77 4824 } \ 00000060 1080BDE8 POP {R4,PC} ;; return \ ??OneSecTmr_0: \ 00000064 ........ DC32 OneSecTmr 4825 4826 4827 //=============================================================================================== 4828 /* 4829 extern ADDUIN addonuin[]; 4830 4831 int itemFromDisp;//кол-во на экране 4832 int totalItems;//общее количество итемов 4833 int curpos=0;//позичия курсора 4834 int curpage=1;//текущая страница 4835 4836 const char clrSelect[4]={0xFF,0x00,0x00,0x60}; 4837 const char fntSelect[4]={0xFF,0xFF,0x00,0x60}; 4838 const char bordSelect[4]={0x00,0x00,0x00,0x60}; 4839 4840 const char clrNotSelect[4]={0x00,0x00,0x00,0x60}; 4841 const char bordNotSelect[4]={0x00,0x00,0x00,0x60}; 4842 const char fntNotSelect[4]={0xFF,0xFF,0xFF,0x60}; 4843 4844 char clrBlack[]={0x00,0x00,0x00,0x64}; 4845 char clrWhite[]={0xFF,0xFF,0xFF,0x64}; 4846 //char prozr[]={0x00,0x00,0x00,0x00}; 4847 const int font=FONT_SMALL; 4848 const char _t[]="%t"; 4849 4850 extern int ParseUINS(); 4851 int USE_ADD_UIN=0; 4852 #define CLIST_Y1 (YDISP+GetFontYSIZE(font)+8) 4853 4854 static void DrawList() 4855 { 4856 int font_y = GetFontYSIZE(font)+2;//16+2 4857 int scr_w=ScreenW(); 4858 int scr_h=ScreenH()-1; 4859 // int y2=scr_w-(GetFontYSIZE(font)+2); 4860 #ifdef ELKA 4861 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-GetFontYSIZE(font)-2)-1; 4862 #else 4863 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-GetFontYSIZE(font)-2); 4864 #endif 4865 4866 LockSched(); 4867 totalItems = ParseUINS(); 4868 // Определяем количество страниц списка контактов 4869 int pageNum = sdiv(itemFromDisp, totalItems); 4870 if( itemFromDisp*pageNum < totalItems) pageNum++; //На всяк,вдруг еще страница нужна 4871 WSHDR* out_ws = AllocWS(256); 4872 int i=0; 4873 int start_y; 4874 int x=1; 4875 while(i<=totalItems) 4876 { 4877 if((i>=(curpage-1)*itemFromDisp) && (i<=itemFromDisp*curpage))//если те итемы который нужно выводить на экран со страници curpage 4878 { 4879 wsprintf(out_ws,"%d. %d",i+1,addonuin[i].uin);//имя закладки 4880 start_y = (CLIST_Y1 + (i - (curpage-1)*itemFromDisp)*font_y); //определяем начальное смещение по у 4881 4882 if(i==curpos) 4883 { 4884 DrawRoundedFrame(x-4,start_y,scr_w-1,start_y+font_y,5,5,0,bordSelect,clrSelect); 4885 DrawString(out_ws,x,start_y+2,scr_w-1,start_y+font_y,font,0,fntSelect,0); 4886 } 4887 else 4888 { 4889 DrawRoundedFrame(x,start_y+1,scr_w-1,start_y+font_y,0,0,0,bordNotSelect,clrNotSelect);//clrBlack 4890 DrawString(out_ws,x,start_y+2,scr_w-1,start_y+font_y,font,0,fntNotSelect,0); 4891 } 4892 } 4893 i++; 4894 if(i>(pageNum*itemFromDisp)) break; 4895 } 4896 UnlockSched(); 4897 FreeWS(out_ws); 4898 } 4899 4900 // Управление курсором 4901 void MoveUp() 4902 { 4903 if(!itemFromDisp)return; 4904 if(curpos<1) 4905 { 4906 curpos=totalItems; 4907 if(itemFromDisp!=totalItems) 4908 { 4909 curpage = sdiv(itemFromDisp,totalItems)+1; 4910 } 4911 else 4912 curpage = 1; 4913 } 4914 else 4915 { 4916 curpos--; 4917 if(curpos<(curpage-1)*itemFromDisp){ curpos++; curpage--; } 4918 } 4919 // REDRAW(); 4920 } 4921 4922 4923 void MoveDown() 4924 { 4925 if(!totalItems)return; 4926 curpos++; 4927 if(curpos>totalItems) { curpos=0; curpage=1; } 4928 if(curpage*itemFromDispisIndividSet=0; \ 00000010 540494E5 LDR R0,[R4, #+1108] \ 00000014 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C 641080E5 STR R1,[R0, #+100] 4976 REDRAW(); \ 00000020 720100EF SWI +370 4977 } \ 00000024 1080BDE8 POP {R4,PC} ;; return 4978 \ In segment CODE, align 4, keep-with-next 4979 static void ChangeVibraContact(GUI *data) 4980 { 4981 CLIST *t; 4982 t=FindContactByUin(uinContact); \ ChangeVibraContact: \ 00000000 ........ LDR R0,??DataTable196 ;; i_rc + 1108 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 4983 t->isvibra=!(t->isvibra); \ 00000010 681090E5 LDR R1,[R0, #+104] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 681080E5 STR R1,[R0, #+104] 4984 // RefreshGUI(); 4985 REDRAW(); \ 00000024 720100EF SWI +370 4986 } \ 00000028 0080BDE8 POP {PC} ;; return 4987 \ In segment CODE, align 4, keep-with-next 4988 static void ChangeSoundContact(GUI *data) 4989 { 4990 CLIST *t; 4991 t=FindContactByUin(uinContact); \ ChangeSoundContact: \ 00000000 ........ LDR R0,??DataTable196 ;; i_rc + 1108 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 4992 t->issound=!(t->issound); \ 00000010 6C1090E5 LDR R1,[R0, #+108] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 6C1080E5 STR R1,[R0, #+108] 4993 // RefreshGUI(); 4994 REDRAW(); \ 00000024 720100EF SWI +370 4995 } \ 00000028 0080BDE8 POP {PC} ;; return 4996 \ In segment CODE, align 4, keep-with-next 4997 static void ChangeAutoMsg(GUI *data) 4998 { 4999 CLIST *t; 5000 t=FindContactByUin(uinContact); \ ChangeAutoMsg: \ 00000000 ........ LDR R0,??DataTable196 ;; i_rc + 1108 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 5001 t->isautomsg=!(t->isautomsg); \ 00000010 701090E5 LDR R1,[R0, #+112] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 701080E5 STR R1,[R0, #+112] 5002 // RefreshGUI(); 5003 REDRAW(); \ 00000024 720100EF SWI +370 5004 } \ 00000028 0080BDE8 POP {PC} ;; return 5005 \ In segment CODE, align 4, keep-with-next 5006 static void ChangeShowXstatus(GUI *data) 5007 { 5008 CLIST *t; 5009 t=FindContactByUin(uinContact); \ ChangeShowXstatus: \ 00000000 ........ LDR R0,??DataTable196 ;; i_rc + 1108 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 5010 t->isShowXst=!(t->isShowXst); \ 00000010 7C1090E5 LDR R1,[R0, #+124] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 7C1080E5 STR R1,[R0, #+124] 5011 // RefreshGUI(); 5012 REDRAW(); \ 00000024 720100EF SWI +370 5013 } \ 00000028 0080BDE8 POP {PC} ;; return 5014 5015 #ifdef kluchnik 5016 \ In segment CODE, align 4, keep-with-next 5017 static void ChangeAccess(GUI *data) 5018 { 5019 CLIST *t; 5020 t=FindContactByUin(uinContact); \ ChangeAccess: \ 00000000 ........ LDR R0,??DataTable196 ;; i_rc + 1108 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 5021 t->isaccess=!(t->isaccess); \ 00000010 841090E5 LDR R1,[R0, #+132] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 841080E5 STR R1,[R0, #+132] 5022 /// RefreshGUI(); 5023 REDRAW(); \ 00000024 720100EF SWI +370 5024 } \ 00000028 0080BDE8 POP {PC} ;; return 5025 5026 \ In segment CODE, align 4, keep-with-next 5027 static void ChangeAwaySignal(GUI *data) 5028 { 5029 CLIST *t; 5030 t=FindContactByUin(uinContact); \ ChangeAwaySignal: \ 00000000 ........ LDR R0,??DataTable196 ;; i_rc + 1108 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 5031 t->automsgcount=automsgcount; \ 00000010 ........ LDR R1,??DataTable184 ;; automsgcount \ 00000014 001091E5 LDR R1,[R1, #+0] \ 00000018 881080E5 STR R1,[R0, #+136] 5032 // RefreshGUI(); 5033 REDRAW(); \ 0000001C 720100EF SWI +370 5034 } \ 00000020 0080BDE8 POP {PC} ;; return 5035 \ In segment CODE, align 4, keep-with-next 5036 static void ChangeAutobot(GUI *data) 5037 { 5038 CLIST *t; 5039 t=FindContactByUin(uinContact); \ ChangeAutobot: \ 00000000 ........ LDR R0,??DataTable196 ;; i_rc + 1108 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 5040 t->isautobot=!(t->isautobot); \ 00000010 5C1090E5 LDR R1,[R0, #+92] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 5C1080E5 STR R1,[R0, #+92] 5041 // RefreshGUI(); 5042 REDRAW(); \ 00000024 720100EF SWI +370 5043 } \ 00000028 0080BDE8 POP {PC} ;; return 5044 \ In segment CODE, align 4, keep-with-next 5045 static void ChangeLoadHistory(GUI *data) 5046 { 5047 CLIST *t; 5048 t=FindContactByUin(uinContact); \ ChangeLoadHistory: \ 00000000 ........ LDR R0,??DataTable196 ;; i_rc + 1108 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 5049 t->isLoadHistory=!(t->isLoadHistory); \ 00000010 601090E5 LDR R1,[R0, #+96] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 601080E5 STR R1,[R0, #+96] 5050 // RefreshGUI(); 5051 REDRAW(); \ 00000024 720100EF SWI +370 5052 } \ 00000028 0080BDE8 POP {PC} ;; return 5053 #endif //kluchnik 5054 5055 static const void *menuproc[_MAX]= 5056 { 5057 (void *)RqtXText, 5058 (void *)ChangeVibraContact, 5059 (void *)ChangeSoundContact, 5060 (void *)ChangeAutoMsg, 5061 (void *)ChangeShowXstatus, 5062 #ifdef kluchnik 5063 (void *)ChangeAccess, 5064 (void *)ChangeAwaySignal, 5065 (void *)ChangeLoadHistory, 5066 (void *)ChangeAutobot, 5067 #endif 5068 }; 5069 5070 static const char * const menutext[_MAX]= 5071 { 5072 "Запрос хстатуса", 5073 "Вибра", 5074 "Звук", 5075 "Автоответчик", 5076 "Показ.хстатус", 5077 #ifdef kluchnik 5078 "Удаленное управление", 5079 "Синалы автоответчика", 5080 "Загруж.историю", 5081 "Aвтобот" 5082 #endif 5083 }; 5084 5085 int hy; 5086 const char clrSelect[4]={0xFF,0x00,0x00,0x20}; 5087 const char fntSelect[4]={0xFF,0xFF,0x00,0x60}; 5088 const char bordSelect[4]={0x00,0x00,0x00,0x60}; 5089 5090 const char clrNotSelect[4]={0x00,0x00,0x00,0x00}; 5091 const char bordNotSelect[4]={0x00,0x00,0x00,0x00}; 5092 const char fntNotSelect[4]={0xFF,0xFF,0xFF,0x60}; 5093 5094 char clrBlack[]={0x00,0x00,0x00,0x64}; 5095 char clrWhite[]={0xFF,0xFF,0xFF,0x64}; 5096 char clrRed[]={0xFF,0x00,0x00,0x64}; 5097 char transparent[]={0x00,0x00,0x00,0x00}; 5098 char blue[]="\x00\x00\xFF\x64"; 5099 5100 //const int clfont=(FONT_SMALL+100);//ибо библа пнг 5101 int clfont; 5102 5103 //char clrRed2[]={0xFF,0x00,0x00,0x15}; \ In segment DATA_Z, align 4, align-sorted 5104 int i_itemFromDisp;//кол-во на экране \ i_itemFromDisp: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 5105 int i_totalItems;//общее количество итемов \ i_totalItems: \ 00000000 DS8 4 5106 int i_curpos=1;//позичия курсора 5107 5108 GBSTMR i_tmr; 5109 5110 extern IMGHDR screen; 5111 void DrawCheckBox(int x,int y,int flag,int type); 5112 extern char *menutexts2[]; 5113 5114 RECT i_rc; 5115 \ In segment CODE, align 4, keep-with-next 5116 int DrawIconInfo(int x, int y, int curitem) 5117 { \ DrawIconInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 5118 CLIST *t; 5119 t=FindContactByUin(uinContact); \ 00000008 ........ LDR R0,??DataTable196 ;; i_rc + 1108 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 000090E5 LDR R0,[R0, #+0] \ 00000014 0260A0E1 MOV R6,R2 \ 00000018 ........ _BLF FindContactByUin,??FindContactByUin??rA 5120 5121 switch(curitem) \ 0000001C 016046E2 SUB R6,R6,#+1 \ 00000020 080056E3 CMP R6,#+8 \ 00000024 2A00008A BHI ??DrawIconInfo_1 \ 00000028 011F8FE2 ADR R1,??DrawIconInfo_0 \ 0000002C 0610D1E7 LDRB R1,[R1, R6] \ 00000030 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??DrawIconInfo_0: \ 00000034 02050B0D DC8 +2,+5,+11,+13 \ 00000038 13151719 DC8 +19,+21,+23,+25 \ 0000003C 1F000000 DC8 +31,+0,+0,+0 5122 { 5123 case 1: DrawCheckBox(x,y,1,1);/*DrwImage(icons[ICON_PING],x,y,0,0);*/ break;// return icons[ICON_PING]->w; \ ??DrawIconInfo_2: \ 00000040 0130A0E3 MOV R3,#+1 \ 00000044 0120A0E3 MOV R2,#+1 \ 00000048 1E0000EA B ??DrawIconInfo_3 5124 case 2: DrawCheckBox(x,y,t->isvibra?1:0,0); break; \ ??DrawIconInfo_4: \ 0000004C 680090E5 LDR R0,[R0, #+104] \ ??DrawIconInfo_5: \ 00000050 0030A0E3 MOV R3,#+0 \ 00000054 000050E3 CMP R0,#+0 \ 00000058 0120A013 MOVNE R2,#+1 \ 0000005C 0020A003 MOVEQ R2,#+0 \ 00000060 180000EA B ??DrawIconInfo_3 5125 case 3: DrawCheckBox(x,y,t->issound?1:0,0); break; \ ??DrawIconInfo_6: \ 00000064 6C0090E5 LDR R0,[R0, #+108] \ 00000068 F8FFFFEA B ??DrawIconInfo_5 5126 case 4: DrawCheckBox(x,y,t->isautomsg?1:0,0); break; \ ??DrawIconInfo_7: \ 0000006C 700090E5 LDR R0,[R0, #+112] \ ??DrawIconInfo_8: \ 00000070 0030A0E3 MOV R3,#+0 \ 00000074 000050E3 CMP R0,#+0 \ 00000078 0120A013 MOVNE R2,#+1 \ 0000007C 0020A003 MOVEQ R2,#+0 \ 00000080 100000EA B ??DrawIconInfo_3 5127 case 5: DrawCheckBox(x,y,t->isShowXst?1:0,0); break; \ ??DrawIconInfo_9: \ 00000084 7C0090E5 LDR R0,[R0, #+124] \ 00000088 F0FFFFEA B ??DrawIconInfo_5 5128 #ifdef kluchnik 5129 case 6: DrawCheckBox(x,y,t->isaccess?1:0,0); break; \ ??DrawIconInfo_10: \ 0000008C 840090E5 LDR R0,[R0, #+132] \ 00000090 F6FFFFEA B ??DrawIconInfo_8 5130 case 7: DrawCheckBox(x,y,t->automsgcount?1:0,0); break; \ ??DrawIconInfo_11: \ 00000094 880090E5 LDR R0,[R0, #+136] \ 00000098 ECFFFFEA B ??DrawIconInfo_5 5131 case 8: DrawCheckBox(x,y,t->isLoadHistory?1:0,0); break; \ ??DrawIconInfo_12: \ 0000009C 600090E5 LDR R0,[R0, #+96] \ 000000A0 0030A0E3 MOV R3,#+0 \ 000000A4 000050E3 CMP R0,#+0 \ 000000A8 0120A013 MOVNE R2,#+1 \ 000000AC 0020A003 MOVEQ R2,#+0 \ 000000B0 040000EA B ??DrawIconInfo_3 5132 case 9: DrawCheckBox(x,y,t->isautobot?0:1,0); break; \ ??DrawIconInfo_13: \ 000000B4 5C0090E5 LDR R0,[R0, #+92] \ 000000B8 0030A0E3 MOV R3,#+0 \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 0020A013 MOVNE R2,#+0 \ 000000C4 0120A003 MOVEQ R2,#+1 \ ??DrawIconInfo_3: \ 000000C8 0510A0E1 MOV R1,R5 \ 000000CC 0400A0E1 MOV R0,R4 \ 000000D0 ........ _BLF DrawCheckBox,??DrawCheckBox??rA 5133 #endif 5134 } 5135 return 12; \ ??DrawIconInfo_1: \ 000000D4 0C00A0E3 MOV R0,#+12 \ 000000D8 7080BDE8 POP {R4-R6,PC} ;; return 5136 } 5137 5138 extern DYNPNGICONLIST *GetXSByItem(int curitem); 5139 char *GetStatusByIconIndex(int icon); 5140 5141 char ixtext[256]; \ In segment CODE, align 4, keep-with-next 5142 static void I_DrawList() 5143 { \ I_DrawList: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 5144 int font_y = FontH(clfont)+1; \ 00000004 ........ LDR R4,??DataTable202 ;; i_rc 5145 int scr_h=ScreenH()-1; 5146 int scr_w=ScreenW()-1; 5147 5148 LockSched(); 5149 int i=1; 5150 int start_y=0; 5151 int start_x=i_rc.x+4; 5152 5153 RECT rc; 5154 CLIST *t; 5155 t=FindContactByUin(uinContact); 5156 SetFontColor(clrWhite,transparent,0); 5157 char *s=malloc(128); 5158 sprintf(s,"Меню контакта \"%s\"",t->name); \ 00000008 84939FE5 LDR R9,??I_DrawList_0 ;; menutext \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 5C0494E5 LDR R0,[R4, #+1116] \ 00000014 0160A0E3 MOV R6,#+1 \ 00000018 ........ _BLF FontH,??FontH??rA \ 0000001C 015080E2 ADD R5,R0,#+1 \ 00000020 898100EF SWI +33161 \ 00000024 888100EF SWI +33160 \ 00000028 460100EF SWI +326 \ 0000002C F010D4E1 LDRSH R1,[R4, #+0] \ 00000030 041081E2 ADD R1,R1,#+4 \ 00000034 08108DE5 STR R1,[SP, #+8] \ 00000038 540494E5 LDR R0,[R4, #+1108] \ 0000003C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000040 0070A0E1 MOV R7,R0 \ 00000044 0C00A0E3 MOV R0,#+12 \ 00000048 8C0D80E3 ORR R0,R0,#0x2300 \ 0000004C 04A080E0 ADD R10,R0,R4 \ 00000050 0020A0E3 MOV R2,#+0 \ 00000054 080080E2 ADD R0,R0,#+8 \ 00000058 041080E0 ADD R1,R0,R4 \ 0000005C 0A00A0E1 MOV R0,R10 \ 00000060 ........ _BLF SetFontColor,??SetFontColor??rA \ 00000064 8000A0E3 MOV R0,#+128 \ 00000068 140000EF SWI +20 \ 0000006C 0080A0E1 MOV R8,R0 \ 00000070 142087E2 ADD R2,R7,#+20 \ 00000074 281089E2 ADD R1,R9,#+40 \ 00000078 160000EF SWI +22 \ 0000007C F000D4E1 LDRSH R0,[R4, #+0] \ 00000080 F410D4E1 LDRSH R1,[R4, #+4] \ 00000084 0030A0E3 MOV R3,#+0 \ 00000088 0820A0E1 MOV R2,R8 \ 0000008C 001041E0 SUB R1,R1,R0 \ 00000090 02002DE9 PUSH {R1} \ 00000094 030080E2 ADD R0,R0,#+3 \ 00000098 0010A0E3 MOV R1,#+0 \ 0000009C 02002DE9 PUSH {R1} \ 000000A0 02002DE9 PUSH {R1} \ 000000A4 02002DE9 PUSH {R1} \ 000000A8 0110A0E3 MOV R1,#+1 \ 000000AC 02002DE9 PUSH {R1} \ 000000B0 5C1494E5 LDR R1,[R4, #+1116] \ 000000B4 02002DE9 PUSH {R1} \ 000000B8 F210D4E1 LDRSH R1,[R4, #+2] \ 000000BC 011081E2 ADD R1,R1,#+1 5159 PrintText(i_rc.x+3,i_rc.y+1,s,0,clfont,1,0,0,0,i_rc.x2-i_rc.x);//item name \ 000000C0 ........ _BLF PrintText,??PrintText??rA 5160 5161 DrawLine(i_rc.x,i_rc.y+font_y,i_rc.x2,i_rc.y+font_y,0,clrWhite); \ 000000C4 F200D4E1 LDRSH R0,[R4, #+2] \ 000000C8 00042DE9 PUSH {R10} \ 000000CC 001085E0 ADD R1,R5,R0 \ 000000D0 0000A0E3 MOV R0,#+0 \ 000000D4 01002DE9 PUSH {R0} \ 000000D8 F420D4E1 LDRSH R2,[R4, #+4] \ 000000DC F000D4E1 LDRSH R0,[R4, #+0] \ 000000E0 0130A0E1 MOV R3,R1 \ 000000E4 B30100EF SWI +435 5162 int back=i_rc.y; \ 000000E8 F200D4E1 LDRSH R0,[R4, #+2] \ 000000EC 0020A0E1 MOV R2,R0 \ 000000F0 2C208DE5 STR R2,[SP, #+44] 5163 i_rc.y+=4; \ 000000F4 04A080E2 ADD R10,R0,#+4 \ 000000F8 B2A0C4E1 STRH R10,[R4, #+2] 5164 5165 DrwImage(icons[GetIconIndex(t)],i_rc.x+2,i_rc.y+font_y,0,0); \ 000000FC 0700A0E1 MOV R0,R7 \ 00000100 ........ BL GetIconIndex \ 00000104 0010A0E3 MOV R1,#+0 \ 00000108 02002DE9 PUSH {R1} \ 0000010C 0130A0E1 MOV R3,R1 \ 00000110 F010D4E1 LDRSH R1,[R4, #+0] \ 00000114 0AA8A0E1 MOV R10,R10, LSL #+16 \ 00000118 4AA8A0E1 MOV R10,R10, ASR #+16 \ 0000011C 0A2085E0 ADD R2,R5,R10 \ 00000120 021081E2 ADD R1,R1,#+2 \ 00000124 000184E0 ADD R0,R4,R0, LSL #+2 \ 00000128 080090E5 LDR R0,[R0, #+8] \ 0000012C ........ BL DrwImage \ 00000130 24D08DE2 ADD SP,SP,#+36 5166 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 \ 00000134 B8A097E5 LDR R10,[R7, #+184] \ 00000138 0700A0E1 MOV R0,R7 \ 0000013C 00005AE3 CMP R10,#+0 \ 00000140 3CA08902 ADDEQ R10,R9,#+60 \ 00000144 ........ BL GetIconIndex \ 00000148 F0B0D4E1 LDRSH R11,[R4, #+0] \ 0000014C F410D4E1 LDRSH R1,[R4, #+4] \ 00000150 000184E0 ADD R0,R4,R0, LSL #+2 \ 00000154 0030A0E3 MOV R3,#+0 \ 00000158 0B1041E0 SUB R1,R1,R11 \ 0000015C 02002DE9 PUSH {R1} \ 00000160 0A20A0E1 MOV R2,R10 5167 5168 // if(t->xstate!=0) 5169 //{ 5170 DYNPNGICONLIST *xs=GetXSByItem(t->xstate); 5171 DrwImage(xs->img,i_rc.x+2,i_rc.y+(font_y*2),0,0); \ 00000164 85A0A0E1 LSL R10,R5,#+1 \ 00000168 0010A0E3 MOV R1,#+0 \ 0000016C 02002DE9 PUSH {R1} \ 00000170 02002DE9 PUSH {R1} \ 00000174 02002DE9 PUSH {R1} \ 00000178 0110A0E3 MOV R1,#+1 \ 0000017C 02002DE9 PUSH {R1} \ 00000180 5C1494E5 LDR R1,[R4, #+1116] \ 00000184 02002DE9 PUSH {R1} \ 00000188 0C0090E5 LDR R0,[R0, #+12] \ 0000018C F210D4E1 LDRSH R1,[R4, #+2] \ 00000190 B000D0E1 LDRH R0,[R0, #+0] \ 00000194 011085E0 ADD R1,R5,R1 \ 00000198 0B0080E0 ADD R0,R0,R11 \ 0000019C 060080E2 ADD R0,R0,#+6 \ 000001A0 ........ _BLF PrintText,??PrintText??rA \ 000001A4 B605D7E1 LDRH R0,[R7, #+86] \ 000001A8 ........ _BLF GetXSByItem,??GetXSByItem??rA \ 000001AC 00B0A0E1 MOV R11,R0 \ 000001B0 0000A0E3 MOV R0,#+0 \ 000001B4 01002DE9 PUSH {R0} \ 000001B8 0030A0E1 MOV R3,R0 \ 000001BC F200D4E1 LDRSH R0,[R4, #+2] \ 000001C0 00208AE0 ADD R2,R10,R0 \ 000001C4 F000D4E1 LDRSH R0,[R4, #+0] \ 000001C8 021080E2 ADD R1,R0,#+2 \ 000001CC 08009BE5 LDR R0,[R11, #+8] \ 000001D0 ........ BL DrwImage 5172 5173 sprintf(ixtext,(t->xtext)?(t->xtext):("Нет хстатуса")); \ 000001D4 B41097E5 LDR R1,[R7, #+180] \ 000001D8 1CD08DE2 ADD SP,SP,#+28 \ 000001DC 000051E3 CMP R1,#+0 \ 000001E0 44108902 ADDEQ R1,R9,#+68 \ 000001E4 E800A0E3 MOV R0,#+232 \ 000001E8 500E80E3 ORR R0,R0,#0x500 \ 000001EC 040080E0 ADD R0,R0,R4 \ 000001F0 160000EF SWI +22 5174 ixtext[strlen(t->xtext)]=0; \ 000001F4 B40097E5 LDR R0,[R7, #+180] \ 000001F8 1B0000EF SWI +27 \ 000001FC 040080E0 ADD R0,R0,R4 \ 00000200 0010A0E3 MOV R1,#+0 \ 00000204 E815C0E5 STRB R1,[R0, #+1512] 5175 PrintText(i_rc.x+xs->img->w+4,i_rc.y+(font_y*2)-1,ixtext,0,clfont,1,0,1,0,i_rc.x2-i_rc.x-xs->img->w-4);//item name \ 00000208 08009BE5 LDR R0,[R11, #+8] \ 0000020C F070D4E1 LDRSH R7,[R4, #+0] \ 00000210 F410D4E1 LDRSH R1,[R4, #+4] \ 00000214 B020D0E1 LDRH R2,[R0, #+0] \ 00000218 0030A0E3 MOV R3,#+0 \ 0000021C 071041E0 SUB R1,R1,R7 \ 00000220 021041E0 SUB R1,R1,R2 \ 00000224 041041E2 SUB R1,R1,#+4 \ 00000228 02002DE9 PUSH {R1} \ 0000022C 0010A0E3 MOV R1,#+0 \ 00000230 02002DE9 PUSH {R1} \ 00000234 0110A0E3 MOV R1,#+1 \ 00000238 02002DE9 PUSH {R1} \ 0000023C 0010A0E3 MOV R1,#+0 \ 00000240 02002DE9 PUSH {R1} \ 00000244 0610A0E1 MOV R1,R6 \ 00000248 02002DE9 PUSH {R1} \ 0000024C 5C1494E5 LDR R1,[R4, #+1116] \ 00000250 02002DE9 PUSH {R1} \ 00000254 B000D0E1 LDRH R0,[R0, #+0] \ 00000258 E810A0E3 MOV R1,#+232 \ 0000025C 501E81E3 ORR R1,R1,#0x500 \ 00000260 042081E0 ADD R2,R1,R4 \ 00000264 F210D4E1 LDRSH R1,[R4, #+2] \ 00000268 070080E0 ADD R0,R0,R7 \ 0000026C 040080E2 ADD R0,R0,#+4 \ 00000270 01108AE0 ADD R1,R10,R1 \ 00000274 011041E2 SUB R1,R1,#+1 \ 00000278 ........ _BLF PrintText,??PrintText??rA \ 0000027C 18D08DE2 ADD SP,SP,#+24 5176 // } 5177 /* 5178 DrwImage(icons[IS_UNKNOWN],i_rc.x+2,i_rc.y+(font_y*3)-1,0,0); 5179 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); 5180 */ 5181 while(i<_MAX) 5182 { 5183 start_y = (i_rc.y + (font_y*2) + (i/* - (_curpage-1)*_itemFromDisp*/)*font_y); //определяем начальное смещение по у \ ??I_DrawList_1: \ 00000280 F200D4E1 LDRSH R0,[R4, #+2] \ 00000284 00008AE0 ADD R0,R10,R0 \ 00000288 950627E0 MLA R7,R5,R6,R0 5184 StoreXYXYtoRECT(&rc,start_x,start_y,i_rc.x2,start_y+font_y); \ 0000028C 070085E0 ADD R0,R5,R7 \ 00000290 01002DE9 PUSH {R0} \ 00000294 F430D4E1 LDRSH R3,[R4, #+4] \ 00000298 0C109DE5 LDR R1,[SP, #+12] \ 0000029C 0720A0E1 MOV R2,R7 \ 000002A0 04008DE2 ADD R0,SP,#+4 \ 000002A4 340100EF SWI +308 5185 if(i==i_curpos)//Если наш итем то выделяем \ 000002A8 600494E5 LDR R0,[R4, #+1120] \ 000002AC 04D08DE2 ADD SP,SP,#+4 \ 000002B0 000056E1 CMP R6,R0 \ 000002B4 1100001A BNE ??I_DrawList_2 5186 DrawRoundedFrame(rc.x-2,rc.y-2,rc.x2-5,rc.y2-4,0,0,0,MMCursorClr,MMCursorBGClr);//cursor \ 000002B8 D8009FE5 LDR R0,??I_DrawList_0+0x4 ;; MMCursorBGClr \ 000002BC 01002DE9 PUSH {R0} \ 000002C0 D4009FE5 LDR R0,??I_DrawList_0+0x8 ;; MMCursorClr \ 000002C4 01002DE9 PUSH {R0} \ 000002C8 0000A0E3 MOV R0,#+0 \ 000002CC 01002DE9 PUSH {R0} \ 000002D0 01002DE9 PUSH {R0} \ 000002D4 01002DE9 PUSH {R0} \ 000002D8 FA01DDE1 LDRSH R0,[SP, #+26] \ 000002DC 043040E2 SUB R3,R0,#+4 \ 000002E0 F801DDE1 LDRSH R0,[SP, #+24] \ 000002E4 052040E2 SUB R2,R0,#+5 \ 000002E8 F601DDE1 LDRSH R0,[SP, #+22] \ 000002EC 021040E2 SUB R1,R0,#+2 \ 000002F0 F401DDE1 LDRSH R0,[SP, #+20] \ 000002F4 020040E2 SUB R0,R0,#+2 \ 000002F8 500100EF SWI +336 \ 000002FC 14D08DE2 ADD SP,SP,#+20 5187 5188 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: \ 00000300 F000D4E1 LDRSH R0,[R4, #+0] \ 00000304 0620A0E1 MOV R2,R6 \ 00000308 0710A0E1 MOV R1,R7 \ 0000030C 020080E2 ADD R0,R0,#+2 \ 00000310 ........ BL DrawIconInfo \ 00000314 F410DDE1 LDRSH R1,[SP, #+4] \ 00000318 F020DDE1 LDRSH R2,[SP, #+0] \ 0000031C 0030A0E3 MOV R3,#+0 \ 00000320 021041E0 SUB R1,R1,R2 \ 00000324 131041E2 SUB R1,R1,#+19 \ 00000328 02002DE9 PUSH {R1} \ 0000032C 0010A0E3 MOV R1,#+0 \ 00000330 02002DE9 PUSH {R1} \ 00000334 02002DE9 PUSH {R1} \ 00000338 02002DE9 PUSH {R1} \ 0000033C 0110A0E3 MOV R1,#+1 \ 00000340 02002DE9 PUSH {R1} \ 00000344 5C1494E5 LDR R1,[R4, #+1116] \ 00000348 02002DE9 PUSH {R1} \ 0000034C F070D4E1 LDRSH R7,[R4, #+0] \ 00000350 061189E0 ADD R1,R9,R6, LSL #+2 \ 00000354 042011E5 LDR R2,[R1, #-4] \ 00000358 FA11DDE1 LDRSH R1,[SP, #+26] \ 0000035C 000087E0 ADD R0,R7,R0 \ 00000360 060080E2 ADD R0,R0,#+6 \ 00000364 031041E2 SUB R1,R1,#+3 \ 00000368 ........ _BLF PrintText,??PrintText??rA 5189 i++; \ 0000036C 016086E2 ADD R6,R6,#+1 5190 } \ 00000370 0A0056E3 CMP R6,#+10 \ 00000374 18D08DE2 ADD SP,SP,#+24 \ 00000378 C0FFFFBA BLT ??I_DrawList_1 5191 UnlockSched(); \ 0000037C 470100EF SWI +327 5192 i_rc.y=back; \ 00000380 0C009DE5 LDR R0,[SP, #+12] \ 00000384 B200C4E1 STRH R0,[R4, #+2] 5193 mfree(s); \ 00000388 0800A0E1 MOV R0,R8 \ 0000038C 150000EF SWI +21 5194 } \ 00000390 FF8FBDE8 POP {R0-R11,PC} ;; return \ ??I_DrawList_0: \ 00000394 ........ DC32 menutext \ 00000398 ........ DC32 MMCursorBGClr \ 0000039C ........ DC32 MMCursorClr 5195 5196 // Управление курсором \ In segment CODE, align 4, keep-with-next 5197 void I_MoveUp() 5198 { 5199 if(i_curpos > 0) i_curpos--; \ I_MoveUp: \ 00000000 ........ LDR R0,??DataTable202 ;; i_rc \ 00000004 601490E5 LDR R1,[R0, #+1120] \ 00000008 010051E3 CMP R1,#+1 \ 0000000C 011041A2 SUBGE R1,R1,#+1 5200 else 5201 i_curpos=_MAX-1; \ 00000010 0910A0B3 MOVLT R1,#+9 \ 00000014 601480E5 STR R1,[R0, #+1120] 5202 } \ 00000018 1EFF2FE1 BX LR ;; return 5203 5204 \ In segment CODE, align 4, keep-with-next 5205 void I_MoveDown() 5206 { 5207 if(i_curpos < _MAX - 1 ) i_curpos++; \ I_MoveDown: \ 00000000 ........ LDR R0,??DataTable202 ;; i_rc \ 00000004 601490E5 LDR R1,[R0, #+1120] \ 00000008 090051E3 CMP R1,#+9 \ 0000000C 011081B2 ADDLT R1,R1,#+1 5208 else i_curpos=1; \ 00000010 0110A0A3 MOVGE R1,#+1 \ 00000014 601480E5 STR R1,[R0, #+1120] 5209 } \ 00000018 1EFF2FE1 BX LR ;; return 5210 \ In segment CODE, align 4, keep-with-next 5211 void I_Redraw() 5212 { \ I_Redraw: \ 00000000 00402DE9 PUSH {LR} 5213 DirectRedrawGUI(); \ 00000004 3F0100EF SWI +319 5214 } \ 00000008 0080BDE8 POP {PC} ;; return 5215 5216 5217 void DrawHeader(); 5218 \ In segment CODE, align 4, keep-with-next 5219 static void I_OnRedraw(MAIN_GUI *data) 5220 { \ I_OnRedraw: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 5221 DrawHeader(); 5222 DrwImage(&screen,0,hy+2,0,0); \ 00000004 ........ LDR R4,??DataTable194 ;; i_rc 5223 DrawRoundedFrame(0,0,ScreenW()-1,ScreenH()-1,0,0,0,"\x00\x00\x00\x30","\x00\x00\x00\x30"); 5224 DrawRoundedFrame(i_rc.x,i_rc.y,i_rc.x2,i_rc.y2,0,0,0,/*"\x00\x00\x00\x45"*/MMBackgrBordClr,MMBackgrClr); \ 00000008 78619FE5 LDR R6,??I_OnRedraw_0 ;; MMBackgrClr \ 0000000C ........ BL DrawHeader \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 01002DE9 PUSH {R0} \ 00000018 580494E5 LDR R0,[R4, #+1112] \ 0000001C 0030A0E3 MOV R3,#+0 \ 00000020 022080E2 ADD R2,R0,#+2 \ 00000024 60019FE5 LDR R0,??I_OnRedraw_0+0x4 ;; screen \ 00000028 0310A0E1 MOV R1,R3 \ 0000002C ........ BL DrwImage \ 00000030 898100EF SWI +33161 \ 00000034 0050A0E1 MOV R5,R0 \ 00000038 888100EF SWI +33160 \ 0000003C 4C119FE5 LDR R1,??I_OnRedraw_0+0x8 ;; `?` \ 00000040 013045E2 SUB R3,R5,#+1 \ 00000044 48519FE5 LDR R5,??I_OnRedraw_0+0xC ;; MMBackgrBordClr \ 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 0100A0E1 MOV R0,R1 \ 0000006C 500100EF SWI +336 \ 00000070 0600A0E1 MOV R0,R6 \ 00000074 01002DE9 PUSH {R0} \ 00000078 0500A0E1 MOV R0,R5 \ 0000007C 01002DE9 PUSH {R0} \ 00000080 0000A0E3 MOV R0,#+0 \ 00000084 01002DE9 PUSH {R0} \ 00000088 01002DE9 PUSH {R0} \ 0000008C 01002DE9 PUSH {R0} \ 00000090 F630D4E1 LDRSH R3,[R4, #+6] \ 00000094 F420D4E1 LDRSH R2,[R4, #+4] \ 00000098 F210D4E1 LDRSH R1,[R4, #+2] \ 0000009C F000D4E1 LDRSH R0,[R4, #+0] \ 000000A0 500100EF SWI +336 \ 000000A4 2CD08DE2 ADD SP,SP,#+44 5225 I_DrawList(); \ 000000A8 ........ BL I_DrawList 5226 SetScrollEdgeDelay(0); \ 000000AC 0000A0E3 MOV R0,#+0 \ 000000B0 ........ _BLF SetScrollEdgeDelay,??SetScrollEdgeDelay??rA 5227 if(i_curpos==0) \ 000000B4 600494E5 LDR R0,[R4, #+1120] \ 000000B8 000050E3 CMP R0,#+0 \ 000000BC 2A00001A BNE ??I_OnRedraw_1 5228 { 5229 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); \ 000000C0 5C0494E5 LDR R0,[R4, #+1116] \ 000000C4 ........ _BLF FontH,??FontH??rA \ 000000C8 0070A0E1 MOV R7,R0 \ 000000CC 5C0494E5 LDR R0,[R4, #+1116] \ 000000D0 ........ _BLF FontH,??FontH??rA \ 000000D4 F210D4E1 LDRSH R1,[R4, #+2] \ 000000D8 40002DE9 PUSH {R6} \ 000000DC 20002DE9 PUSH {R5} \ 000000E0 0020A0E3 MOV R2,#+0 \ 000000E4 04002DE9 PUSH {R2} \ 000000E8 04002DE9 PUSH {R2} \ 000000EC 04002DE9 PUSH {R2} \ 000000F0 0C20A0E3 MOV R2,#+12 \ 000000F4 921723E0 MLA R3,R2,R7,R1 \ 000000F8 F420D4E1 LDRSH R2,[R4, #+4] \ 000000FC 011080E0 ADD R1,R0,R1 \ 00000100 F000D4E1 LDRSH R0,[R4, #+0] \ 00000104 052082E2 ADD R2,R2,#+5 \ 00000108 050040E2 SUB R0,R0,#+5 \ 0000010C 500100EF SWI +336 5230 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 \ 00000110 5C0494E5 LDR R0,[R4, #+1116] \ 00000114 ........ _BLF FontH,??FontH??rA \ 00000118 F420D4E1 LDRSH R2,[R4, #+4] \ 0000011C 0010A0E1 MOV R1,R0 \ 00000120 F000D4E1 LDRSH R0,[R4, #+0] \ 00000124 0030A0E3 MOV R3,#+0 \ 00000128 002042E0 SUB R2,R2,R0 \ 0000012C 04002DE9 PUSH {R2} \ 00000130 0020A0E3 MOV R2,#+0 \ 00000134 04002DE9 PUSH {R2} \ 00000138 04002DE9 PUSH {R2} \ 0000013C 0120A0E3 MOV R2,#+1 \ 00000140 04002DE9 PUSH {R2} \ 00000144 04002DE9 PUSH {R2} \ 00000148 5C2494E5 LDR R2,[R4, #+1116] \ 0000014C 04002DE9 PUSH {R2} \ 00000150 F250D4E1 LDRSH R5,[R4, #+2] \ 00000154 E820A0E3 MOV R2,#+232 \ 00000158 502E82E3 ORR R2,R2,#0x500 \ 0000015C 042082E0 ADD R2,R2,R4 \ 00000160 811085E0 ADD R1,R5,R1, LSL #+1 \ 00000164 ........ _BLF PrintText,??PrintText??rA \ 00000168 2CD08DE2 ADD SP,SP,#+44 5231 } 5232 GBS_StartTimerProc(&i_tmr, 100, I_Redraw); \ ??I_OnRedraw_1: \ 0000016C 24209FE5 LDR R2,??I_OnRedraw_0+0x10 ;; I_Redraw \ 00000170 6410A0E3 MOV R1,#+100 \ 00000174 2000A0E3 MOV R0,#+32 \ 00000178 8C0D80E3 ORR R0,R0,#0x2300 \ 0000017C 040080E0 ADD R0,R0,R4 \ 00000180 4D0000EF SWI +77 5233 } \ 00000184 F080BDE8 POP {R4-R7,PC} ;; return \ ??I_OnRedraw_0: \ 00000188 ........ DC32 MMBackgrClr \ 0000018C ........ DC32 screen \ 00000190 ........ DC32 `?` \ 00000194 ........ DC32 MMBackgrBordClr \ 00000198 ........ DC32 I_Redraw 5234 \ In segment CODE, align 4, keep-with-next 5235 static void I_onCreate(MAIN_GUI *data, void *(*malloc_adr)(int)) 5236 { \ I_onCreate: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 5237 if(isSystemFont) clfont=100+pngFont; \ 00000008 ........ LDR R0,??DataTable192 ;; isSystemFont \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 0300000A BEQ ??I_onCreate_0 \ 00000018 ........ LDR R0,??DataTable193 ;; pngFont \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 640080E2 ADD R0,R0,#+100 \ 00000024 000000EA B ??I_onCreate_1 5238 else clfont=2; \ ??I_onCreate_0: \ 00000028 0200A0E3 MOV R0,#+2 \ ??I_onCreate_1: \ 0000002C ........ LDR R5,??DataTable194 ;; i_rc \ 00000030 5C0485E5 STR R0,[R5, #+1116] 5239 DoScreen(); \ 00000034 ........ _BLF DoScreen,??DoScreen??rA 5240 i_rc.x=30; \ 00000038 1E00A0E3 MOV R0,#+30 \ 0000003C B000C5E1 STRH R0,[R5, #+0] 5241 i_rc.y=hy+5; \ 00000040 580495E5 LDR R0,[R5, #+1112] \ 00000044 050080E2 ADD R0,R0,#+5 \ 00000048 B200C5E1 STRH R0,[R5, #+2] 5242 i_rc.x2=ScreenW()-25; \ 0000004C 888100EF SWI +33160 \ 00000050 190040E2 SUB R0,R0,#+25 \ 00000054 B400C5E1 STRH R0,[R5, #+4] 5243 i_rc.y2=i_rc.y+(FontH(clfont)*(_MAX+3)); \ 00000058 5C0495E5 LDR R0,[R5, #+1116] \ 0000005C ........ _BLF FontH,??FontH??rA \ 00000060 F210D5E1 LDRSH R1,[R5, #+2] \ 00000064 0D20A0E3 MOV R2,#+13 \ 00000068 921020E0 MLA R0,R2,R0,R1 \ 0000006C B600C5E1 STRH R0,[R5, #+6] 5244 // StoreXYXYToRECT(&i_rc,30,hy+5,ScreenW()-25,i_rc.y+(FontH(clfont)*(_MAX+4))); 5245 SetCanvasFlag(1); \ 00000070 0100A0E3 MOV R0,#+1 \ 00000074 ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 5246 i_curpos=1; \ 00000078 0100A0E3 MOV R0,#+1 \ 0000007C 600485E5 STR R0,[R5, #+1120] 5247 data->gui.state=1; \ 00000080 0C00C4E5 STRB R0,[R4, #+12] 5248 } \ 00000084 3080BDE8 POP {R4,R5,PC} ;; return 5249 \ In segment CODE, align 4, keep-with-next 5250 static void I_onClose(MAIN_GUI *data, void (*mfree_adr)(void *)) 5251 { \ I_onClose: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 5252 mfree(screen.bitmap); \ 00000008 18009FE5 LDR R0,??I_onClose_0 ;; screen + 8 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 150000EF SWI +21 5253 GBS_DelTimer(&i_tmr); \ 00000014 10009FE5 LDR R0,??I_onClose_0+0x4 ;; i_rc + 8992 \ 00000018 8C0100EF SWI +396 5254 data->gui.state=0; \ 0000001C 0000A0E3 MOV R0,#+0 \ 00000020 0C00C4E5 STRB R0,[R4, #+12] 5255 } \ 00000024 1080BDE8 POP {R4,PC} ;; return \ ??I_onClose_0: \ 00000028 ........ DC32 screen + 8 \ 0000002C ........ DC32 i_rc + 8992 5256 \ In segment CODE, align 4, keep-with-next 5257 static void I_onFocus(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *)) 5258 { \ I_onFocus: \ 00000000 00402DE9 PUSH {LR} 5259 data->gui.state=2; \ 00000004 0210A0E3 MOV R1,#+2 \ 00000008 0C10C0E5 STRB R1,[R0, #+12] 5260 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 5261 } \ 00000010 0080BDE8 POP {PC} ;; return 5262 \ In segment CODE, align 4, keep-with-next 5263 static void I_onUnfocus(MAIN_GUI *data, void (*mfree_adr)(void *)) 5264 { 5265 if (data->gui.state!=2) return; \ I_onUnfocus: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 5266 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 5267 } \ 00000010 1EFF2FE1 BX LR ;; return 5268 \ In segment CODE, align 4, keep-with-next 5269 static int I_OnKey(MAIN_GUI *data, GUI_MSG *msg) 5270 { \ I_OnKey: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0140A0E1 MOV R4,R1 5271 DirectRedrawGUI(); 5272 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 5273 { 5274 switch(msg->gbsmsg->submess) \ 0000002C 080094E5 LDR R0,[R4, #+8] \ 00000030 040050E2 SUBS R0,R0,#+4 \ 00000034 08005012 SUBSNE R0,R0,#+8 \ 00000038 1E00000A BEQ ??I_OnKey_1 \ 0000003C 2F0050E2 SUBS R0,R0,#+47 \ 00000040 0400000A BEQ ??I_OnKey_2 \ 00000044 010050E2 SUBS R0,R0,#+1 \ 00000048 1800000A BEQ ??I_OnKey_3 \ 0000004C 010050E2 SUBS R0,R0,#+1 \ 00000050 1800000A BEQ ??I_OnKey_1 \ 00000054 000000EA B ??I_OnKey_0 5275 { 5276 case UP_BUTTON: I_MoveUp(); break; \ ??I_OnKey_2: \ 00000058 ........ BL I_MoveUp 5277 case DOWN_BUTTON: I_MoveDown(); break; 5278 case LEFT_BUTTON: case RIGHT_SOFT:case RED_BUTTON: return (1); 5279 } 5280 } 5281 if (msg->gbsmsg->msg==KEY_DOWN || msg->gbsmsg->msg==LONG_PRESS) \ ??I_OnKey_0: \ 0000005C 040094E5 LDR R0,[R4, #+4] \ 00000060 060050E1 CMP R0,R6 \ 00000064 05005011 CMPNE R0,R5 \ 00000068 0E00001A BNE ??I_OnKey_4 5282 { 5283 switch(msg->gbsmsg->submess) \ 0000006C 080094E5 LDR R0,[R4, #+8] \ 00000070 010050E2 SUBS R0,R0,#+1 \ 00000074 19005012 SUBSNE R0,R0,#+25 \ 00000078 24005012 SUBSNE R0,R0,#+36 \ 0000007C 0900001A BNE ??I_OnKey_4 5284 { 5285 case ENTER_BUTTON: case LEFT_SOFT: case RIGHT_BUTTON: 5286 { 5287 CLIST *t; 5288 t=FindContactByUin(uinContact); 5289 t->isIndividSet=1; \ 00000080 ........ LDR R4,??DataTable202 ;; i_rc \ 00000084 540494E5 LDR R0,[R4, #+1108] \ 00000088 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 0000008C 0110A0E3 MOV R1,#+1 \ 00000090 641080E5 STR R1,[R0, #+100] 5290 ((void (*)(void))(menuproc[i_curpos-1]))(); \ 00000094 600494E5 LDR R0,[R4, #+1120] \ 00000098 000184E0 ADD R0,R4,R0, LSL #+2 \ 0000009C E40690E5 LDR R0,[R0, #+1764] \ 000000A0 30FF2FE1 BLX R0 5291 REDRAW(); \ 000000A4 720100EF SWI +370 5292 } 5293 break; 5294 } 5295 } 5296 5297 return(0); \ ??I_OnKey_4: \ 000000A8 0000A0E3 MOV R0,#+0 \ 000000AC 7080BDE8 POP {R4-R6,PC} ;; return \ ??I_OnKey_3: \ 000000B0 ........ BL I_MoveDown \ 000000B4 E8FFFFEA B ??I_OnKey_0 \ ??I_OnKey_1: \ 000000B8 0100A0E3 MOV R0,#+1 \ 000000BC 7080BDE8 POP {R4-R6,PC} 5298 } 5299 5300 extern void kill_data(void *p, void (*func_p)(void *)); 5301 \ In segment CODE, align 4, keep-with-next 5302 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 5303 int I_method9(void){return(0);} \ I_method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 5304 5305 const void * const I_gui_methods[11]={ 5306 (void *)I_OnRedraw, 5307 (void *)I_onCreate, 5308 (void *)I_onClose, 5309 (void *)I_onFocus, 5310 (void *)I_onUnfocus, 5311 (void *)I_OnKey, 5312 0, 5313 (void *)kill_data, 5314 (void *)I_method8, 5315 (void *)I_method9, 5316 0 5317 }; 5318 \ In segment CODE, align 4, keep-with-next 5319 int CreateContactMenu(CLIST *t) 5320 { 5321 uinContact=t->uin; \ CreateContactMenu: \ 00000000 ........ LDR R1,??DataTable196 ;; i_rc + 1108 \ 00000004 10402DE9 PUSH {R4,LR} \ 00000008 0C0090E5 LDR R0,[R0, #+12] \ 0000000C 000081E5 STR R0,[R1, #+0] 5322 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000010 4000A0E3 MOV R0,#+64 \ 00000014 140000EF SWI +20 \ 00000018 0040A0E1 MOV R4,R0 5323 zeromem(main_gui,sizeof(MAIN_GUI)); \ 0000001C 4010A0E3 MOV R1,#+64 \ 00000020 1D0100EF SWI +285 5324 // main_gui->gui.canvas=(void *)(&Canvas); 5325 main_gui->gui.methods=(void *)I_gui_methods; \ 00000024 14009FE5 LDR R0,??CreateContactMenu_0 ;; I_gui_methods \ 00000028 040084E5 STR R0,[R4, #+4] 5326 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 0000002C 158000EF SWI +32789 \ 00000030 200084E5 STR R0,[R4, #+32] 5327 //patch_rect((RECT*)&Canvas,0,YDISP,ScreenW()-1,ScreenH()-1); 5328 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 5329 } 5330 5331 /*********************************************************************/ 5332 5333 int itemFromDisp;//кол-во на экране 5334 int totalItems;//общее количество итемов 5335 //int curpos=0;//позичия курсора 5336 int curpage=1;//текущая страница 5337 int collum=0;//столбцы))) 0 - первый, 1- второй 5338 const char _t[]="%t"; 5339 const char _d[]="%d"; 5340 //int clfont; 5341 5342 #ifdef ELKA 5343 #ifndef ICONBAR 5344 #undef YDISP 5345 #define YDISP 0 5346 #endif 5347 #endif 5348 5349 #define CLIST_Y1 (YDISP+FontH(clfont)+4) 5350 5351 \ In segment CODE, align 4, keep-with-next 5352 void RecountMenu(CLIST *req, int needfocus) 5353 { \ RecountMenu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 5354 int i; 5355 int j; 5356 if (!maingui_id) return; //Нечего считать \ 00000004 ........ LDR R5,??DataTable202 ;; i_rc \ 00000008 0140A0E1 MOV R4,R1 \ 0000000C D41295E5 LDR R1,[R5, #+724] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 7080BD08 POPEQ {R4-R6,PC} 5357 if (req==NULL) \ 00000018 000050E3 CMP R0,#+0 5358 { 5359 j=0; \ 0000001C 0060A003 MOVEQ R6,#+0 \ 00000020 0100000A BEQ ??RecountMenu_0 5360 } 5361 else 5362 { 5363 j=FindContactByContact(req); \ 00000024 ........ _BLF FindContactByContact,??FindContactByContact??rA \ 00000028 0060A0E1 MOV R6,R0 5364 } 5365 i=CountContacts(); \ ??RecountMenu_0: \ 0000002C ........ _BLF CountContacts,??CountContacts??rA 5366 if (j>=i) j=i-1; \ 00000030 000056E1 CMP R6,R0 \ 00000034 016040A2 SUBGE R6,R0,#+1 5367 if (j<0) j=0; \ 00000038 000056E3 CMP R6,#+0 \ 0000003C 0060A043 MOVMI R6,#+0 5368 if(needfocus) curpos=j; \ 00000040 000054E3 CMP R4,#+0 \ 00000044 50648515 STRNE R6,[R5, #+1104] 5369 // if (IsGuiOnTop(contactlist_menu_id)) 5370 SMART_REDRAW();//DirectRedrawGUI_ID(contactlist_menu_id);//contactlist_menu_id \ 00000048 ........ BL SMART_REDRAW 5371 } \ 0000004C 7080BDE8 POP {R4-R6,PC} ;; return 5372 5373 \ In segment CODE, align 4, keep-with-next 5374 void DrawStr(int x,int y,char*s,char *color,int font,int align) 5375 { \ 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 5376 SetFontColor(color,transparent,0); \ 00000014 ........ LDR R1,??DataTable199 ;; i_rc + 8980 \ 00000018 0260A0E1 MOV R6,R2 \ 0000001C 0300A0E1 MOV R0,R3 \ 00000020 0020A0E3 MOV R2,#+0 \ 00000024 ........ _BLF SetFontColor,??SetFontColor??rA 5377 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 5378 //void PrintText( int x, int y, char *str, int align, int font, int space, int lineSpace, int isScroll, short fixSize, int maxLen); 5379 } \ 00000048 F381BDE8 POP {R0,R1,R4-R8,PC} ;; return 5380 \ In segment CODE, align 4, keep-with-next 5381 void DrawText(int x,int y,int x2,char*s,char *color,int font,int align,int isScroll) 5382 { \ 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 5383 SetFontColor(color,transparent,0); \ 0000001C ........ LDR R1,??DataTable199 ;; i_rc + 8980 \ 00000020 0260A0E1 MOV R6,R2 \ 00000024 0370A0E1 MOV R7,R3 \ 00000028 0020A0E3 MOV R2,#+0 \ 0000002C ........ _BLF SetFontColor,??SetFontColor??rA 5384 // SetScrollEdgeDelay(0); 5385 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 5386 //int x, int y, char *str, int align, int font, int space, int lineSpace, int isScroll, short fixSize, int maxLen); 5387 } \ 00000070 18D08DE2 ADD SP,SP,#+24 \ 00000074 F087BDE8 POP {R4-R10,PC} ;; return 5388 \ In segment CODE, align 4, keep-with-next 5389 void DrawSoftKeys(char *right,char *left) 5390 { \ DrawSoftKeys: \ 00000000 F34F2DE9 PUSH {R0,R1,R4-R11,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 5391 TTime t; 5392 char *s=malloc(32); \ 00000008 2000A0E3 MOV R0,#+32 \ 0000000C 140000EF SWI +20 \ 00000010 0040A0E1 MOV R4,R0 5393 if(!PNG_SOFTKEY) clfont=100+HeadFont; \ 00000014 ........ LDR R0,??DataTable200 ;; PNG_SOFTKEY \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0300001A BNE ??DrawSoftKeys_0 \ 00000024 ........ LDR R0,??DataTable205 ;; HeadFont \ 00000028 000090E5 LDR R0,[R0, #+0] \ 0000002C 640080E2 ADD R0,R0,#+100 \ 00000030 000000EA B ??DrawSoftKeys_1 5394 else clfont=4; \ ??DrawSoftKeys_0: \ 00000034 0400A0E3 MOV R0,#+4 \ ??DrawSoftKeys_1: \ 00000038 ........ LDR R5,??DataTable202 ;; i_rc \ 0000003C 5C0485E5 STR R0,[R5, #+1116] 5395 5396 int FntH=FontH(clfont); \ 00000040 ........ _BLF FontH,??FontH??rA \ 00000044 0060A0E1 MOV R6,R0 5397 int scr_w=ScreenW()-1; \ 00000048 888100EF SWI +33160 \ 0000004C 017040E2 SUB R7,R0,#+1 5398 int scr_h=ScreenH()-1; \ 00000050 898100EF SWI +33161 \ 00000054 018040E2 SUB R8,R0,#+1 5399 5400 LockSched(); \ 00000058 460100EF SWI +326 5401 DrawRoundedFrame(0,ScreenH()-1-FntH-2,ScreenW()-1,ScreenH()-1,0,0,0,clrBlack,clrBlack); \ 0000005C 898100EF SWI +33161 \ 00000060 0090A0E1 MOV R9,R0 \ 00000064 888100EF SWI +33160 \ 00000068 00A0A0E1 MOV R10,R0 \ 0000006C 898100EF SWI +33161 \ 00000070 0810A0E3 MOV R1,#+8 \ 00000074 8C1D81E3 ORR R1,R1,#0x2300 \ 00000078 051081E0 ADD R1,R1,R5 \ 0000007C 0120A0E1 MOV R2,R1 \ 00000080 04002DE9 PUSH {R2} \ 00000084 02002DE9 PUSH {R1} \ 00000088 013049E2 SUB R3,R9,#+1 \ 0000008C 01204AE2 SUB R2,R10,#+1 \ 00000090 010040E2 SUB R0,R0,#+1 \ 00000094 0010A0E3 MOV R1,#+0 \ 00000098 02002DE9 PUSH {R1} \ 0000009C 02002DE9 PUSH {R1} \ 000000A0 02002DE9 PUSH {R1} \ 000000A4 060040E0 SUB R0,R0,R6 \ 000000A8 021040E2 SUB R1,R0,#+2 \ 000000AC 0000A0E3 MOV R0,#+0 \ 000000B0 500100EF SWI +336 5402 for(int i=FontH(clfont);i>0;i-=2) \ 000000B4 5C0495E5 LDR R0,[R5, #+1116] \ 000000B8 ........ _BLF FontH,??FontH??rA \ 000000BC 0090A0E1 MOV R9,R0 \ 000000C0 010059E3 CMP R9,#+1 \ 000000C4 14D08DE2 ADD SP,SP,#+20 \ 000000C8 100000BA BLT ??DrawSoftKeys_2 \ 000000CC 00B19FE5 LDR R11,??DrawSoftKeys_3 ;; SoftBackgrClr \ 000000D0 06A048E0 SUB R10,R8,R6 5403 DrawRoundedFrame(0,scr_h-FntH-2,scr_w,scr_h-FntH+i,0,0,0,SoftBackgrClr,SoftBackgrClr); \ ??DrawSoftKeys_4: \ 000000D4 0A3089E0 ADD R3,R9,R10 \ 000000D8 0B00A0E1 MOV R0,R11 \ 000000DC 01002DE9 PUSH {R0} \ 000000E0 01002DE9 PUSH {R0} \ 000000E4 0720A0E1 MOV R2,R7 \ 000000E8 02104AE2 SUB R1,R10,#+2 \ 000000EC 029049E2 SUB R9,R9,#+2 \ 000000F0 0000A0E3 MOV R0,#+0 \ 000000F4 01002DE9 PUSH {R0} \ 000000F8 01002DE9 PUSH {R0} \ 000000FC 01002DE9 PUSH {R0} \ 00000100 500100EF SWI +336 \ 00000104 010059E3 CMP R9,#+1 \ 00000108 14D08DE2 ADD SP,SP,#+20 \ 0000010C F0FFFFAA BGE ??DrawSoftKeys_4 5404 5405 DrawStr(2,scr_h-1-FntH,right,SoftFontClr,clfont,0); \ ??DrawSoftKeys_2: \ 00000110 5C9495E5 LDR R9,[R5, #+1116] \ 00000114 1400A0E3 MOV R0,#+20 \ 00000118 8C0D80E3 ORR R0,R0,#0x2300 \ 0000011C 051080E0 ADD R1,R0,R5 \ 00000120 B0009FE5 LDR R0,??DrawSoftKeys_3+0x4 ;; SoftFontClr \ 00000124 0020A0E3 MOV R2,#+0 \ 00000128 ........ _BLF SetFontColor,??SetFontColor??rA \ 0000012C 010048E2 SUB R0,R8,#+1 \ 00000130 066040E0 SUB R6,R0,R6 \ 00000134 0100A0E3 MOV R0,#+1 \ 00000138 01002DE9 PUSH {R0} \ 0000013C 00022DE9 PUSH {R9} \ 00000140 10209DE5 LDR R2,[SP, #+16] \ 00000144 0030A0E3 MOV R3,#+0 \ 00000148 0610A0E1 MOV R1,R6 \ 0000014C 0200A0E3 MOV R0,#+2 \ 00000150 ........ _BLF PrintField,??PrintField??rA 5406 PrintField(scr_w,scr_h-1-FntH,left,2,clfont,1); \ 00000154 0100A0E3 MOV R0,#+1 \ 00000158 01002DE9 PUSH {R0} \ 0000015C 5C0495E5 LDR R0,[R5, #+1116] \ 00000160 0230A0E3 MOV R3,#+2 \ 00000164 01002DE9 PUSH {R0} \ 00000168 1C209DE5 LDR R2,[SP, #+28] \ 0000016C 0610A0E1 MOV R1,R6 \ 00000170 0700A0E1 MOV R0,R7 \ 00000174 ........ _BLF PrintField,??PrintField??rA 5407 5408 GetDateTime(0,&t); \ 00000178 10108DE2 ADD R1,SP,#+16 \ 0000017C 0000A0E3 MOV R0,#+0 \ 00000180 B40000EF SWI +180 5409 sprintf(s,"%02d:%02d",t.hour,t.min); \ 00000184 1130DDE5 LDRB R3,[SP, #+17] \ 00000188 1020DDE5 LDRB R2,[SP, #+16] \ 0000018C ........ LDR R1,??DataTable203 ;; `?` \ 00000190 0400A0E1 MOV R0,R4 \ 00000194 160000EF SWI +22 5410 PrintField(scr_w/2,scr_h-1-FntH,s,1,clfont,1); \ 00000198 0100A0E3 MOV R0,#+1 \ 0000019C 01002DE9 PUSH {R0} \ 000001A0 5C0495E5 LDR R0,[R5, #+1116] \ 000001A4 0130A0E3 MOV R3,#+1 \ 000001A8 01002DE9 PUSH {R0} \ 000001AC 0420A0E1 MOV R2,R4 \ 000001B0 0610A0E1 MOV R1,R6 \ 000001B4 A70F87E0 ADD R0,R7,R7, LSR #+31 \ 000001B8 C000A0E1 ASR R0,R0,#+1 \ 000001BC ........ _BLF PrintField,??PrintField??rA 5411 UnlockSched(); \ 000001C0 470100EF SWI +327 5412 5413 mfree(s); \ 000001C4 0400A0E1 MOV R0,R4 \ 000001C8 150000EF SWI +21 5414 } \ 000001CC 28D08DE2 ADD SP,SP,#+40 \ 000001D0 F08FBDE8 POP {R4-R11,PC} ;; return \ ??DrawSoftKeys_3: \ 000001D4 ........ DC32 SoftBackgrClr \ 000001D8 ........ DC32 SoftFontClr 5415 \ In segment CODE, align 4, keep-with-next 5416 void DrawHeader() 5417 { \ DrawHeader: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 5418 int scr_w=ScreenW()-1; \ 00000008 888100EF SWI +33160 \ 0000000C 014040E2 SUB R4,R0,#+1 5419 int scr_h=ScreenH()-1; \ 00000010 898100EF SWI +33161 5420 char *s=malloc(128); \ 00000014 8000A0E3 MOV R0,#+128 \ 00000018 140000EF SWI +20 \ 0000001C 0050A0E1 MOV R5,R0 5421 char *ss=malloc(128); \ 00000020 8000A0E3 MOV R0,#+128 \ 00000024 140000EF SWI +20 \ 00000028 0060A0E1 MOV R6,R0 5422 5423 if(!PNG_HEADER)clfont=100+HeadFont; \ 0000002C ........ LDR R0,??DataTable204 ;; PNG_HEADER \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 0300001A BNE ??DrawHeader_1 \ 0000003C ........ LDR R0,??DataTable205 ;; HeadFont \ 00000040 000090E5 LDR R0,[R0, #+0] \ 00000044 640080E2 ADD R0,R0,#+100 \ 00000048 000000EA B ??DrawHeader_2 5424 else clfont=4; \ ??DrawHeader_1: \ 0000004C 0400A0E3 MOV R0,#+4 \ ??DrawHeader_2: \ 00000050 ........ LDR R7,??DataTable208 ;; i_rc \ 00000054 5C0487E5 STR R0,[R7, #+1116] 5425 // char clrRed[]={0xFF,0x00,0x00,0x15}; 5426 if(icons[IS_ONLINE]) \ 00000058 340097E5 LDR R0,[R7, #+52] \ 0000005C 000050E3 CMP R0,#+0 \ 00000060 5C0497E5 LDR R0,[R7, #+1116] \ 00000064 0600000A BEQ ??DrawHeader_3 5427 hy=(icons[IS_ONLINE]->h > FontH(clfont)) ? (icons[IS_ONLINE]->h) : (FontH(clfont)); \ 00000068 ........ _BLF FontH,??FontH??rA \ 0000006C 341097E5 LDR R1,[R7, #+52] \ 00000070 B220D1E1 LDRH R2,[R1, #+2] \ 00000074 020050E1 CMP R0,R2 \ 00000078 0200A0B1 MOVLT R0,R2 \ 0000007C 010000BA BLT ??DrawHeader_4 \ 00000080 5C0497E5 LDR R0,[R7, #+1116] 5428 else 5429 hy=FontH(clfont); \ ??DrawHeader_3: \ 00000084 ........ _BLF FontH,??FontH??rA \ ??DrawHeader_4: \ 00000088 580487E5 STR R0,[R7, #+1112] 5430 5431 hy+=YDISP; 5432 LockSched(); \ 0000008C 460100EF SWI +326 5433 5434 SetFontColor(HeadFontClr,transparent,0); \ 00000090 1400A0E3 MOV R0,#+20 \ 00000094 8C0D80E3 ORR R0,R0,#0x2300 \ 00000098 07A080E0 ADD R10,R0,R7 \ 0000009C 94059FE5 LDR R0,??DrawHeader_5+0xC ;; HeadFontClr \ 000000A0 0020A0E3 MOV R2,#+0 \ 000000A4 0A10A0E1 MOV R1,R10 \ 000000A8 ........ _BLF SetFontColor,??SetFontColor??rA 5435 DrawRoundedFrame(0,YDISP,scr_w,hy+2,0,0,0,clrBlack,clrBlack); \ 000000AC 0800A0E3 MOV R0,#+8 \ 000000B0 8C0D80E3 ORR R0,R0,#0x2300 \ 000000B4 070080E0 ADD R0,R0,R7 \ 000000B8 0010A0E1 MOV R1,R0 \ 000000BC 02002DE9 PUSH {R1} \ 000000C0 01002DE9 PUSH {R0} \ 000000C4 0420A0E1 MOV R2,R4 \ 000000C8 0010A0E3 MOV R1,#+0 \ 000000CC 0000A0E3 MOV R0,#+0 \ 000000D0 01002DE9 PUSH {R0} \ 000000D4 01002DE9 PUSH {R0} \ 000000D8 01002DE9 PUSH {R0} \ 000000DC 580497E5 LDR R0,[R7, #+1112] \ 000000E0 023080E2 ADD R3,R0,#+2 \ 000000E4 0000A0E3 MOV R0,#+0 \ 000000E8 500100EF SWI +336 5436 5437 for(int i=hy-YDISP;i>0;i-=2) \ 000000EC 588497E5 LDR R8,[R7, #+1112] \ 000000F0 14D08DE2 ADD SP,SP,#+20 \ 000000F4 010058E3 CMP R8,#+1 \ 000000F8 120000BA BLT ??DrawHeader_6 \ 000000FC 38959FE5 LDR R9,??DrawHeader_5+0x10 ;; HeadBackgrClr 5438 DrawRoundedFrame(0,YDISP,scr_w,hy-i+2,0,0,0,HeadBackgrClr,HeadBackgrClr); \ ??DrawHeader_7: \ 00000100 0900A0E1 MOV R0,R9 \ 00000104 01002DE9 PUSH {R0} \ 00000108 01002DE9 PUSH {R0} \ 0000010C 0420A0E1 MOV R2,R4 \ 00000110 0010A0E3 MOV R1,#+0 \ 00000114 0000A0E3 MOV R0,#+0 \ 00000118 01002DE9 PUSH {R0} \ 0000011C 01002DE9 PUSH {R0} \ 00000120 01002DE9 PUSH {R0} \ 00000124 580497E5 LDR R0,[R7, #+1112] \ 00000128 080040E0 SUB R0,R0,R8 \ 0000012C 023080E2 ADD R3,R0,#+2 \ 00000130 0000A0E3 MOV R0,#+0 \ 00000134 500100EF SWI +336 \ 00000138 028048E2 SUB R8,R8,#+2 \ 0000013C 010058E3 CMP R8,#+1 \ 00000140 14D08DE2 ADD SP,SP,#+20 \ 00000144 EDFFFFAA BGE ??DrawHeader_7 5439 5440 int x=1; 5441 int icon; 5442 if(total_unread) icon = IS_MSG; \ ??DrawHeader_6: \ 00000148 000497E5 LDR R0,[R7, #+1024] \ 0000014C 0180A0E3 MOV R8,#+1 \ 00000150 000050E3 CMP R0,#+0 \ 00000154 0D00A013 MOVNE R0,#+13 \ 00000158 0500001A BNE ??DrawHeader_8 5443 else 5444 { 5445 switch(connect_state) \ 0000015C DC0397E5 LDR R0,[R7, #+988] \ 00000160 000050E3 CMP R0,#+0 \ 00000164 0200000A BEQ ??DrawHeader_8 \ 00000168 030050E2 SUBS R0,R0,#+3 5446 { 5447 case 0: icon=IS_OFFLINE; break; 5448 case 3: icon=CurrentStatus; break; \ 0000016C 70039705 LDREQ R0,[R7, #+880] 5449 default: icon=IS_UNKNOWN; break; \ 00000170 0E00A013 MOVNE R0,#+14 5450 } 5451 } 5452 5453 if(icons[icon] && HEAD_STATUS) \ ??DrawHeader_8: \ 00000174 009187E0 ADD R9,R7,R0, LSL #+2 \ 00000178 080099E5 LDR R0,[R9, #+8] \ 0000017C 000050E3 CMP R0,#+0 \ 00000180 0D00000A BEQ ??DrawHeader_9 \ 00000184 B4149FE5 LDR R1,??DrawHeader_5+0x14 ;; HEAD_STATUS \ 00000188 001091E5 LDR R1,[R1, #+0] \ 0000018C 000051E3 CMP R1,#+0 \ 00000190 0900000A BEQ ??DrawHeader_9 5454 { 5455 DrwImage(icons[icon],x,YDISP+1,0,0); \ 00000194 0010A0E3 MOV R1,#+0 \ 00000198 02002DE9 PUSH {R1} \ 0000019C 0030A0E3 MOV R3,#+0 \ 000001A0 0820A0E1 MOV R2,R8 \ 000001A4 0210A0E1 MOV R1,R2 \ 000001A8 ........ BL DrwImage 5456 x+=icons[icon]->w+2;//GetImgWidth(NumStatusToIconBar+icon)+2;// + смещение по х \ 000001AC 080099E5 LDR R0,[R9, #+8] \ 000001B0 B000D0E1 LDRH R0,[R0, #+0] \ 000001B4 04D08DE2 ADD SP,SP,#+4 \ 000001B8 038080E2 ADD R8,R0,#+3 5457 } 5458 5459 if(total_unread) \ ??DrawHeader_9: \ 000001BC 002497E5 LDR R2,[R7, #+1024] \ 000001C0 7C949FE5 LDR R9,??DrawHeader_5+0x18 ;; `?` \ 000001C4 000052E3 CMP R2,#+0 \ 000001C8 1800000A BEQ ??DrawHeader_10 5460 { 5461 sprintf(s,"%d/%d",total_unread,total_unread2); \ 000001CC CC3297E5 LDR R3,[R7, #+716] \ 000001D0 1C1089E2 ADD R1,R9,#+28 \ 000001D4 0500A0E1 MOV R0,R5 \ 000001D8 160000EF SWI +22 5462 DrawStr(x,YDISP+1,s,clrWhite,clfont,0); \ 000001DC 5CB497E5 LDR R11,[R7, #+1116] \ 000001E0 0020A0E3 MOV R2,#+0 \ 000001E4 0A10A0E1 MOV R1,R10 \ 000001E8 0C00A0E3 MOV R0,#+12 \ 000001EC 8C0D80E3 ORR R0,R0,#0x2300 \ 000001F0 070080E0 ADD R0,R0,R7 \ 000001F4 ........ _BLF SetFontColor,??SetFontColor??rA \ 000001F8 0100A0E3 MOV R0,#+1 \ 000001FC 01002DE9 PUSH {R0} \ 00000200 00082DE9 PUSH {R11} \ 00000204 0030A0E3 MOV R3,#+0 \ 00000208 0520A0E1 MOV R2,R5 \ 0000020C 0110A0E3 MOV R1,#+1 \ 00000210 0800A0E1 MOV R0,R8 \ 00000214 ........ _BLF PrintField,??PrintField??rA 5463 x+=GetWidth(x,YDISP+1)+1; \ 00000218 0110A0E3 MOV R1,#+1 \ 0000021C 0800A0E1 MOV R0,R8 \ 00000220 ........ _BLF GetWidth,??GetWidth??rA \ 00000224 010080E2 ADD R0,R0,#+1 \ 00000228 088080E0 ADD R8,R0,R8 \ 0000022C 08D08DE2 ADD SP,SP,#+8 5464 } 5465 5466 if(CurrentXStatus!=0 && HEAD_XSTATUS)//если есть хстатус \ ??DrawHeader_10: \ 00000230 740397E5 LDR R0,[R7, #+884] \ 00000234 000050E3 CMP R0,#+0 \ 00000238 1200000A BEQ ??DrawHeader_11 \ 0000023C 04149FE5 LDR R1,??DrawHeader_5+0x1C ;; HEAD_XSTATUS \ 00000240 001091E5 LDR R1,[R1, #+0] \ 00000244 000051E3 CMP R1,#+0 \ 00000248 0D00000A BEQ ??DrawHeader_12 5467 { 5468 DYNPNGICONLIST *xs=GetXSByItem(CurrentXStatus); \ 0000024C ........ _BLF GetXSByItem,??GetXSByItem??rA \ 00000250 00A0A0E1 MOV R10,R0 5469 DrwImage(xs->img,x,YDISP+1,0,0); \ 00000254 0000A0E3 MOV R0,#+0 \ 00000258 01002DE9 PUSH {R0} \ 0000025C 0030A0E3 MOV R3,#+0 \ 00000260 0120A0E3 MOV R2,#+1 \ 00000264 08009AE5 LDR R0,[R10, #+8] \ 00000268 0810A0E1 MOV R1,R8 \ 0000026C ........ BL DrwImage 5470 x+=xs->img->w+1; \ 00000270 08009AE5 LDR R0,[R10, #+8] \ 00000274 B000D0E1 LDRH R0,[R0, #+0] \ 00000278 04D08DE2 ADD SP,SP,#+4 \ 0000027C 010080E2 ADD R0,R0,#+1 \ 00000280 088080E0 ADD R8,R0,R8 5471 } 5472 5473 int priv=0; \ ??DrawHeader_12: \ 00000284 0000A0E3 MOV R0,#+0 5474 char A_s[]="[A:%s]"; \ ??DrawHeader_11: \ 00000288 080499E8 LDM R9,{R3,R10} \ 0000028C 0D10A0E1 MOV R1,SP \ 00000290 080481E8 STM R1,{R3,R10} 5475 // char t[32]; 5476 5477 switch(CurrentPrivateStatus) \ 00000294 C01397E5 LDR R1,[R7, #+960] \ 00000298 040051E3 CMP R1,#+4 \ 0000029C 0D00008A BHI ??DrawHeader_13 \ 000002A0 012F8FE2 ADR R2,??DrawHeader_0 \ 000002A4 0120D2E7 LDRB R2,[R2, R1] \ 000002A8 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??DrawHeader_0: \ 000002AC 01030507 DC8 +1,+3,+5,+7 \ 000002B0 09000000 DC8 +9,+0,+0,+0 5478 { 5479 case 0: priv=ICON_ALL_CAN_SEE; break; \ ??DrawHeader_14: \ 000002B4 1700A0E3 MOV R0,#+23 \ 000002B8 060000EA B ??DrawHeader_13 5480 case 1: priv=ICON_NOBODY_CAN_SEE;break; \ ??DrawHeader_15: \ 000002BC 1B00A0E3 MOV R0,#+27 \ 000002C0 040000EA B ??DrawHeader_13 5481 case 2: priv=ICON_VISLIST_CAN_SEE; break; \ ??DrawHeader_16: \ 000002C4 1800A0E3 MOV R0,#+24 \ 000002C8 020000EA B ??DrawHeader_13 5482 case 3: priv=ICON_INVISLIST_CANNOT_SEE; break; \ ??DrawHeader_17: \ 000002CC 1900A0E3 MOV R0,#+25 \ 000002D0 000000EA B ??DrawHeader_13 5483 case 4: priv=ICON_CONTACTLIST_CAN_SEE; break; \ ??DrawHeader_18: \ 000002D4 1A00A0E3 MOV R0,#+26 5484 } 5485 5486 if(icons[priv] && HEAD_PRIVATE) \ ??DrawHeader_13: \ 000002D8 00A187E0 ADD R10,R7,R0, LSL #+2 \ 000002DC 08009AE5 LDR R0,[R10, #+8] \ 000002E0 000050E3 CMP R0,#+0 \ 000002E4 0E00000A BEQ ??DrawHeader_19 \ 000002E8 5C139FE5 LDR R1,??DrawHeader_5+0x20 ;; HEAD_PRIVATE \ 000002EC 001091E5 LDR R1,[R1, #+0] \ 000002F0 000051E3 CMP R1,#+0 \ 000002F4 0A00000A BEQ ??DrawHeader_19 5487 { 5488 DrwImage(icons[priv],x,YDISP+1,0,0); \ 000002F8 0010A0E3 MOV R1,#+0 \ 000002FC 02002DE9 PUSH {R1} \ 00000300 0030A0E3 MOV R3,#+0 \ 00000304 0120A0E3 MOV R2,#+1 \ 00000308 0810A0E1 MOV R1,R8 \ 0000030C ........ BL DrwImage 5489 x+=icons[priv]->w+2; \ 00000310 08009AE5 LDR R0,[R10, #+8] \ 00000314 B000D0E1 LDRH R0,[R0, #+0] \ 00000318 04D08DE2 ADD SP,SP,#+4 \ 0000031C 020080E2 ADD R0,R0,#+2 \ 00000320 088080E0 ADD R8,R0,R8 5490 } 5491 5492 int ping=0; 5493 if(curping < 3) ping=1; \ ??DrawHeader_19: \ 00000324 B00297E5 LDR R0,[R7, #+688] \ 00000328 030050E3 CMP R0,#+3 \ 0000032C 0C0000BA BLT ??DrawHeader_20 5494 if(curping > 3 && curping < 10) ping=2; \ 00000330 040050E3 CMP R0,#+4 \ 00000334 020000BA BLT ??DrawHeader_21 \ 00000338 0A0050E3 CMP R0,#+10 5495 if(curping > 10 && curping < 30) ping=3; 5496 if(curping > 30) ping=4; 5497 5498 switch(ping) 5499 { 5500 case 1: ping=ICON_PING1; break; 5501 case 2: ping=ICON_PING2; break; \ 0000033C 1D00A0B3 MOVLT R0,#+29 \ 00000340 080000BA BLT ??DrawHeader_22 \ ??DrawHeader_21: \ 00000344 0B0050E3 CMP R0,#+11 \ 00000348 020000BA BLT ??DrawHeader_23 \ 0000034C 1E0050E3 CMP R0,#+30 5502 case 3: ping=ICON_PING3; break; \ 00000350 1E00A0B3 MOVLT R0,#+30 \ 00000354 030000BA BLT ??DrawHeader_22 \ ??DrawHeader_23: \ 00000358 1F0050E3 CMP R0,#+31 5503 case 4: ping=ICON_PING4; break; \ 0000035C 1F00A0A3 MOVGE R0,#+31 \ 00000360 000000AA BGE ??DrawHeader_22 \ ??DrawHeader_20: \ 00000364 1C00A0E3 MOV R0,#+28 5504 default: ping=ICON_PING1; break; 5505 } 5506 5507 if(icons[ping] && HEAD_PING) \ ??DrawHeader_22: \ 00000368 00A187E0 ADD R10,R7,R0, LSL #+2 \ 0000036C 08009AE5 LDR R0,[R10, #+8] \ 00000370 000050E3 CMP R0,#+0 \ 00000374 0E00000A BEQ ??DrawHeader_24 \ 00000378 D0129FE5 LDR R1,??DrawHeader_5+0x24 ;; HEAD_PING \ 0000037C 001091E5 LDR R1,[R1, #+0] \ 00000380 000051E3 CMP R1,#+0 \ 00000384 0A00000A BEQ ??DrawHeader_24 5508 { 5509 DrwImage(icons[ping],x,YDISP+1,0,0); \ 00000388 0010A0E3 MOV R1,#+0 \ 0000038C 02002DE9 PUSH {R1} \ 00000390 0030A0E3 MOV R3,#+0 \ 00000394 0120A0E3 MOV R2,#+1 \ 00000398 0810A0E1 MOV R1,R8 \ 0000039C ........ BL DrwImage 5510 x+=icons[ping]->w+1; \ 000003A0 08009AE5 LDR R0,[R10, #+8] \ 000003A4 B000D0E1 LDRH R0,[R0, #+0] \ 000003A8 04D08DE2 ADD SP,SP,#+4 \ 000003AC 010080E2 ADD R0,R0,#+1 \ 000003B0 088080E0 ADD R8,R0,R8 5511 } 5512 5513 int cap; 5514 int x2=scr_w; 5515 //x2=scr_w-GetWidth(scr_w,YDISP+1); 5516 if(strlen(ContactT9Key)) \ ??DrawHeader_24: \ 000003B4 7800A0E3 MOV R0,#+120 \ 000003B8 780D80E3 ORR R0,R0,#0x1E00 \ 000003BC 07A080E0 ADD R10,R0,R7 \ 000003C0 C8B0A0E3 MOV R11,#+200 \ 000003C4 50BE8BE3 ORR R11,R11,#0x500 \ 000003C8 07008BE0 ADD R0,R11,R7 \ 000003CC 1B0000EF SWI +27 \ 000003D0 000050E3 CMP R0,#+0 \ 000003D4 1300000A BEQ ??DrawHeader_25 5517 { 5518 sprintf(s,key_clm_hdr_text); \ 000003D8 241089E2 ADD R1,R9,#+36 \ 000003DC 0500A0E1 MOV R0,R5 \ 000003E0 160000EF SWI +22 5519 strcat(s,ContactT9Key); \ 000003E4 07108BE0 ADD R1,R11,R7 \ 000003E8 0500A0E1 MOV R0,R5 \ 000003EC 170000EF SWI +23 5520 strcpy(clmenu_sk_r,key_clmenu_sk_r); \ 000003F0 081089E2 ADD R1,R9,#+8 \ 000003F4 0A00A0E1 MOV R0,R10 \ 000003F8 1A0000EF SWI +26 5521 PrintField(scr_w,YDISP+1,s,2,clfont,1); \ 000003FC 0100A0E3 MOV R0,#+1 \ 00000400 01002DE9 PUSH {R0} \ 00000404 5C0497E5 LDR R0,[R7, #+1116] \ 00000408 0230A0E3 MOV R3,#+2 \ 0000040C 01002DE9 PUSH {R0} \ 00000410 0520A0E1 MOV R2,R5 \ 00000414 0110A0E3 MOV R1,#+1 \ 00000418 0400A0E1 MOV R0,R4 \ 0000041C ........ _BLF PrintField,??PrintField??rA \ 00000420 08D08DE2 ADD SP,SP,#+8 \ 00000424 7A0000EA B ??DrawHeader_26 5522 } 5523 else 5524 if(on_off_timer > 0 && strlen(on_off_buf)!=0)//если кто то подключился/отключился \ ??DrawHeader_25: \ 00000428 180497E5 LDR R0,[R7, #+1048] \ 0000042C 010050E3 CMP R0,#+1 \ 00000430 150000BA BLT ??DrawHeader_27 \ 00000434 630D8BE2 ADD R0,R11,#+6336 \ 00000438 07B080E0 ADD R11,R0,R7 \ 0000043C 0B00A0E1 MOV R0,R11 \ 00000440 1B0000EF SWI +27 \ 00000444 000050E3 CMP R0,#+0 \ 00000448 0F00000A BEQ ??DrawHeader_27 5525 { 5526 SetScrollEdgeDelay(1); \ 0000044C 0100A0E3 MOV R0,#+1 \ 00000450 ........ _BLF SetScrollEdgeDelay,??SetScrollEdgeDelay??rA 5527 PrintText(scr_w,YDISP+1,on_off_buf,2,clfont,1,350,1,0,scr_w-x-2); \ 00000454 080044E0 SUB R0,R4,R8 \ 00000458 020040E2 SUB R0,R0,#+2 \ 0000045C 01002DE9 PUSH {R0} \ 00000460 0230A0E3 MOV R3,#+2 \ 00000464 0B20A0E1 MOV R2,R11 \ 00000468 0000A0E3 MOV R0,#+0 \ 0000046C 01002DE9 PUSH {R0} \ 00000470 0100A0E3 MOV R0,#+1 \ 00000474 01002DE9 PUSH {R0} \ 00000478 5E00A0E3 MOV R0,#+94 \ 0000047C 400F80E3 ORR R0,R0,#0x100 \ 00000480 01002DE9 PUSH {R0} \ 00000484 0100A0E3 MOV R0,#+1 \ 00000488 5A0000EA B ??DrawHeader_28 5528 } 5529 else 5530 { 5531 x2=scr_w; 5532 cap=*RamCap(); \ ??DrawHeader_27: \ 0000048C C88000EF SWI +32968 \ 00000490 B020D0E1 LDRH R2,[R0, #+0] 5533 sprintf(s,"[%d%%]",cap); \ 00000494 0C1089E2 ADD R1,R9,#+12 \ 00000498 0500A0E1 MOV R0,R5 \ 0000049C 160000EF SWI +22 5534 PrintField(scr_w,YDISP+1,s,2,clfont,1);//capacity in header \ 000004A0 0100A0E3 MOV R0,#+1 \ 000004A4 01002DE9 PUSH {R0} \ 000004A8 5C0497E5 LDR R0,[R7, #+1116] \ 000004AC 0230A0E3 MOV R3,#+2 \ 000004B0 01002DE9 PUSH {R0} \ 000004B4 0520A0E1 MOV R2,R5 \ 000004B8 0110A0E3 MOV R1,#+1 \ 000004BC 0400A0E1 MOV R0,R4 \ 000004C0 ........ _BLF PrintField,??PrintField??rA 5535 5536 x2=scr_w-GetWidth(scr_w,YDISP+1); \ 000004C4 0110A0E3 MOV R1,#+1 \ 000004C8 0400A0E1 MOV R0,R4 \ 000004CC ........ _BLF GetWidth,??GetWidth??rA \ 000004D0 004044E0 SUB R4,R4,R0 5537 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ 000004D4 301089E2 ADD R1,R9,#+48 \ 000004D8 0A00A0E1 MOV R0,R10 \ 000004DC 1A0000EF SWI +26 5538 Get_Online_total(); \ 000004E0 ........ BL Get_Online_total 5539 5540 strcpy(s,""); \ 000004E4 501F8FE2 ADR R1,??DrawHeader_5 ;; "" \ 000004E8 0500A0E1 MOV R0,R5 \ 000004EC 1A0000EF SWI +26 5541 if(away_m && isShowA) sprintf(s,A_s,away_msg_time_dace); \ 000004F0 840397E5 LDR R0,[R7, #+900] \ 000004F4 08D08DE2 ADD SP,SP,#+8 \ 000004F8 000050E3 CMP R0,#+0 \ 000004FC 0900000A BEQ ??DrawHeader_29 \ 00000500 4C019FE5 LDR R0,??DrawHeader_5+0x28 ;; isShowA \ 00000504 000090E5 LDR R0,[R0, #+0] \ 00000508 000050E3 CMP R0,#+0 \ 0000050C 0500000A BEQ ??DrawHeader_29 \ 00000510 3800A0E3 MOV R0,#+56 \ 00000514 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000518 072080E0 ADD R2,R0,R7 \ 0000051C 0D10A0E1 MOV R1,SP \ 00000520 0500A0E1 MOV R0,R5 \ 00000524 160000EF SWI +22 5542 if(Is_Vibra_Enabled && isShowV) strcat(s,"[V]") ; \ ??DrawHeader_29: \ 00000528 E00297E5 LDR R0,[R7, #+736] \ 0000052C 000050E3 CMP R0,#+0 \ 00000530 0600000A BEQ ??DrawHeader_30 \ 00000534 1C019FE5 LDR R0,??DrawHeader_5+0x2C ;; isShowV \ 00000538 000090E5 LDR R0,[R0, #+0] \ 0000053C 000050E3 CMP R0,#+0 \ 00000540 0200000A BEQ ??DrawHeader_30 \ 00000544 391F8FE2 ADR R1,??DrawHeader_5+0x4 ;; "[V]" \ 00000548 0500A0E1 MOV R0,R5 \ 0000054C 170000EF SWI +23 5543 if(Is_Sounds_Enabled && isShowS) strcat(s,"[S]") ; \ ??DrawHeader_30: \ 00000550 B40397E5 LDR R0,[R7, #+948] \ 00000554 000050E3 CMP R0,#+0 \ 00000558 0600000A BEQ ??DrawHeader_31 \ 0000055C F8009FE5 LDR R0,??DrawHeader_5+0x30 ;; isShowS \ 00000560 000090E5 LDR R0,[R0, #+0] \ 00000564 000050E3 CMP R0,#+0 \ 00000568 0200000A BEQ ??DrawHeader_31 \ 0000056C 301F8FE2 ADR R1,??DrawHeader_5+0x8 ;; "[S]" \ 00000570 0500A0E1 MOV R0,R5 \ 00000574 170000EF SWI +23 5544 if(Is_Double_Vibra_On && isShowR) strcat(s,"[Vr]") ; \ ??DrawHeader_31: \ 00000578 C80297E5 LDR R0,[R7, #+712] \ 0000057C 000050E3 CMP R0,#+0 \ 00000580 0600000A BEQ ??DrawHeader_32 \ 00000584 D4009FE5 LDR R0,??DrawHeader_5+0x34 ;; isShowR \ 00000588 000090E5 LDR R0,[R0, #+0] \ 0000058C 000050E3 CMP R0,#+0 \ 00000590 0200000A BEQ ??DrawHeader_32 \ 00000594 C8109FE5 LDR R1,??DrawHeader_5+0x38 ;; `?` + 40 \ 00000598 0500A0E1 MOV R0,R5 \ 0000059C 170000EF SWI +23 5545 5546 if(isShowCont) \ ??DrawHeader_32: \ 000005A0 C0009FE5 LDR R0,??DrawHeader_5+0x3C ;; isShowCont \ 000005A4 000090E5 LDR R0,[R0, #+0] \ 000005A8 000050E3 CMP R0,#+0 \ 000005AC 0700000A BEQ ??DrawHeader_33 5547 { 5548 sprintf(ss,"[%d/%d]",kopa_kontaktu,kopa_online); \ 000005B0 1C3497E5 LDR R3,[R7, #+1052] \ 000005B4 202497E5 LDR R2,[R7, #+1056] \ 000005B8 141089E2 ADD R1,R9,#+20 \ 000005BC 0600A0E1 MOV R0,R6 \ 000005C0 160000EF SWI +22 5549 // PrintField(x2-2,YDISP+1,s,2,clfont,1); 5550 strcat(s,ss); \ 000005C4 0610A0E1 MOV R1,R6 \ 000005C8 0500A0E1 MOV R0,R5 \ 000005CC 170000EF SWI +23 5551 } 5552 //PrintField(x2-2,YDISP+1,s,2,clfont,1); 5553 PrintText(x2,YDISP+1,s,2,clfont,1,1,1,0, x2-x-2 ); \ ??DrawHeader_33: \ 000005D0 080044E0 SUB R0,R4,R8 \ 000005D4 020040E2 SUB R0,R0,#+2 \ 000005D8 01002DE9 PUSH {R0} \ 000005DC 0230A0E3 MOV R3,#+2 \ 000005E0 0520A0E1 MOV R2,R5 \ 000005E4 0000A0E3 MOV R0,#+0 \ 000005E8 01002DE9 PUSH {R0} \ 000005EC 0100A0E3 MOV R0,#+1 \ 000005F0 01002DE9 PUSH {R0} \ 000005F4 01002DE9 PUSH {R0} \ ??DrawHeader_28: \ 000005F8 01002DE9 PUSH {R0} \ 000005FC 5C0497E5 LDR R0,[R7, #+1116] \ 00000600 01002DE9 PUSH {R0} \ 00000604 0110A0E3 MOV R1,#+1 \ 00000608 0400A0E1 MOV R0,R4 \ 0000060C ........ _BLF PrintText,??PrintText??rA \ 00000610 18D08DE2 ADD SP,SP,#+24 5554 } 5555 UnlockSched(); \ ??DrawHeader_26: \ 00000614 470100EF SWI +327 5556 mfree(s); \ 00000618 0500A0E1 MOV R0,R5 \ 0000061C 150000EF SWI +21 5557 mfree(ss); \ 00000620 0600A0E1 MOV R0,R6 \ 00000624 150000EF SWI +21 5558 } \ 00000628 F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??DrawHeader_5: \ 0000062C 00000000 DC8 "",+0,+0,+0 \ 00000630 5B565D00 DC8 "[V]" \ 00000634 5B535D00 DC8 "[S]" \ 00000638 ........ DC32 HeadFontClr \ 0000063C ........ DC32 HeadBackgrClr \ 00000640 ........ DC32 HEAD_STATUS \ 00000644 ........ DC32 `?` \ 00000648 ........ DC32 HEAD_XSTATUS \ 0000064C ........ DC32 HEAD_PRIVATE \ 00000650 ........ DC32 HEAD_PING \ 00000654 ........ DC32 isShowA \ 00000658 ........ DC32 isShowV \ 0000065C ........ DC32 isShowS \ 00000660 ........ DC32 isShowR \ 00000664 ........ DC32 `?` + 40 \ 00000668 ........ DC32 isShowCont 5559 \ In segment CODE, align 4, keep-with-next 5560 void DrawScrollBar(int cur,int total) 5561 { \ DrawScrollBar: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 5562 int scr_h=ScreenH()-1; 5563 int scr_w=ScreenW()-1; 5564 int y=scr_h-CLIST_Y1-FontH(clfont)-2; \ 00000004 ........ LDR R6,??DataTable208 ;; i_rc \ 00000008 0070A0E1 MOV R7,R0 \ 0000000C 0180A0E1 MOV R8,R1 \ 00000010 898100EF SWI +33161 \ 00000014 014040E2 SUB R4,R0,#+1 \ 00000018 888100EF SWI +33160 \ 0000001C 015040E2 SUB R5,R0,#+1 \ 00000020 5C0496E5 LDR R0,[R6, #+1116] \ 00000024 ........ _BLF FontH,??FontH??rA \ 00000028 000044E0 SUB R0,R4,R0 \ 0000002C 049040E2 SUB R9,R0,#+4 \ 00000030 5C0496E5 LDR R0,[R6, #+1116] \ 00000034 ........ _BLF FontH,??FontH??rA \ 00000038 000049E0 SUB R0,R9,R0 \ 0000003C 022040E2 SUB R2,R0,#+2 5565 int pos=y*cur/total; \ 00000040 970200E0 MUL R0,R7,R2 \ 00000044 0810A0E1 MOV R1,R8 \ 00000048 ........ _BLF ??div32_a,??rA??div32_a \ 0000004C 0170A0E1 MOV R7,R1 5566 int y2=y/total; \ 00000050 0200A0E1 MOV R0,R2 \ 00000054 0810A0E1 MOV R1,R8 \ 00000058 ........ _BLF ??div32_a,??rA??div32_a 5567 int i=0; 5568 5569 DrawLine(scr_w-2,CLIST_Y1,scr_w-2,scr_h-FontH(clfont)-2,1,clrBlack); \ 0000005C 5C0496E5 LDR R0,[R6, #+1116] \ 00000060 0180A0E1 MOV R8,R1 \ 00000064 ........ _BLF FontH,??FontH??rA \ 00000068 0090A0E1 MOV R9,R0 \ 0000006C 5C0496E5 LDR R0,[R6, #+1116] \ 00000070 ........ _BLF FontH,??FontH??rA \ 00000074 0820A0E3 MOV R2,#+8 \ 00000078 8C2D82E3 ORR R2,R2,#0x2300 \ 0000007C 06A082E0 ADD R10,R2,R6 \ 00000080 0A20A0E1 MOV R2,R10 \ 00000084 04002DE9 PUSH {R2} \ 00000088 0010A0E1 MOV R1,R0 \ 0000008C 020045E2 SUB R0,R5,#+2 \ 00000090 041081E2 ADD R1,R1,#+4 \ 00000094 0120A0E3 MOV R2,#+1 \ 00000098 04002DE9 PUSH {R2} \ 0000009C 092044E0 SUB R2,R4,R9 \ 000000A0 023042E2 SUB R3,R2,#+2 5570 DrawRoundedFrame(scr_w-4,CLIST_Y1+pos+1,scr_w,CLIST_Y1+pos+y2,0,0,0,clrBlack,clrBlack); \ 000000A4 044045E2 SUB R4,R5,#+4 \ 000000A8 0020A0E1 MOV R2,R0 \ 000000AC B30100EF SWI +435 \ 000000B0 5C0496E5 LDR R0,[R6, #+1116] \ 000000B4 ........ _BLF FontH,??FontH??rA \ 000000B8 0090A0E1 MOV R9,R0 \ 000000BC 5C0496E5 LDR R0,[R6, #+1116] \ 000000C0 ........ _BLF FontH,??FontH??rA \ 000000C4 0A10A0E1 MOV R1,R10 \ 000000C8 02002DE9 PUSH {R1} \ 000000CC 00042DE9 PUSH {R10} \ 000000D0 0520A0E1 MOV R2,R5 \ 000000D4 0010A0E3 MOV R1,#+0 \ 000000D8 02002DE9 PUSH {R1} \ 000000DC 02002DE9 PUSH {R1} \ 000000E0 02002DE9 PUSH {R1} \ 000000E4 000087E0 ADD R0,R7,R0 \ 000000E8 091087E0 ADD R1,R7,R9 5571 5572 for(i=0;iw,img->h); \ 00000010 B200D4E1 LDRH R0,[R4, #+2] \ 00000014 0350A0E1 MOV R5,R3 \ 00000018 01002DE9 PUSH {R0} \ 0000001C B030D4E1 LDRH R3,[R4, #+0] \ 00000020 04008DE2 ADD R0,SP,#+4 \ 00000024 330100EF SWI +307 5582 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 5583 SetColor(&drwobj,pen,brush); \ 0000003C 0620A0E1 MOV R2,R6 \ 00000040 0510A0E1 MOV R1,R5 \ 00000044 0C008DE2 ADD R0,SP,#+12 \ 00000048 4B0100EF SWI +331 5584 DrawObject(&drwobj); \ 0000004C 0C008DE2 ADD R0,SP,#+12 \ 00000050 2A0100EF SWI +298 5585 } \ 00000054 30D08DE2 ADD SP,SP,#+48 \ 00000058 7080BDE8 POP {R4-R6,PC} ;; return 5586 /* 5587 #ifdef ELKA 5588 int LINE_MODE=0; 5589 int VIEW_MODE=1; 5590 #else 5591 int LINE_MODE=1; 5592 int VIEW_MODE=0; 5593 #endif 5594 */ \ In segment DATA_Z, align 4, align-sorted 5595 GBSTMR cltmr; \ cltmr: \ 00000000 DS8 16 \ In segment CODE, align 4, keep-with-next 5596 void MyRedraw() 5597 { 5598 //DirectRedrawGUI_ID(contactlist_menu_id); 5599 SMART_REDRAW(); \ MyRedraw: \ 00000000 ........ B SMART_REDRAW ;; tailcall 5600 } 5601 5602 \ In segment CODE, align 4, keep-with-next 5603 void DrawJustNow(RECT *rc,CLIST *cl,char *name) 5604 { \ DrawJustNow: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 F290D0E1 LDRSH R9,[R0, #+2] \ 00000008 F480D0E1 LDRSH R8,[R0, #+4] \ 0000000C 0140A0E1 MOV R4,R1 \ 00000010 F010D0E1 LDRSH R1,[R0, #+0] \ 00000014 ........ LDR R0,??DataTable208 ;; i_rc \ 00000018 0250A0E1 MOV R5,R2 \ 0000001C 782094E5 LDR R2,[R4, #+120] \ 00000020 01A081E2 ADD R10,R1,#+1 \ 00000024 5C1490E5 LDR R1,[R0, #+1116] \ 00000028 000052E3 CMP R2,#+0 \ 0000002C 017081E2 ADD R7,R1,#+1 \ 00000030 1410A0E3 MOV R1,#+20 \ 00000034 8C1D81E3 ORR R1,R1,#0x2300 \ 00000038 001081E0 ADD R1,R1,R0 \ 0000003C 0020A0E3 MOV R2,#+0 5605 if(!cl->just_i) 5606 DrawText(rc->x+1,rc->y,rc->x2,name,blue,clfont+1,0,0); \ 00000040 1830A003 MOVEQ R3,#+24 5607 else 5608 DrawText(rc->x+1,rc->y,rc->x2,name,clrRed,clfont+1,0,0); \ 00000044 1030A013 MOVNE R3,#+16 \ 00000048 8C3D83E3 ORR R3,R3,#0x2300 \ 0000004C 000083E0 ADD R0,R3,R0 \ 00000050 ........ _BLF SetFontColor,??SetFontColor??rA \ 00000054 0A0048E0 SUB R0,R8,R10 \ 00000058 01002DE9 PUSH {R0} \ 0000005C 5E60A0E3 MOV R6,#+94 \ 00000060 406F86E3 ORR R6,R6,#0x100 \ 00000064 0030A0E3 MOV R3,#+0 \ 00000068 0000A0E3 MOV R0,#+0 \ 0000006C 01002DE9 PUSH {R0} \ 00000070 01002DE9 PUSH {R0} \ 00000074 40002DE9 PUSH {R6} \ 00000078 0520A0E1 MOV R2,R5 \ 0000007C 0100A0E3 MOV R0,#+1 \ 00000080 01002DE9 PUSH {R0} \ 00000084 80002DE9 PUSH {R7} \ 00000088 0910A0E1 MOV R1,R9 \ 0000008C 0A00A0E1 MOV R0,R10 \ 00000090 ........ _BLF PrintText,??PrintText??rA \ 00000094 18D08DE2 ADD SP,SP,#+24 5609 5610 cl->just_i=!cl->just_i; \ 00000098 780094E5 LDR R0,[R4, #+120] \ 0000009C 000050E3 CMP R0,#+0 \ 000000A0 0100A003 MOVEQ R0,#+1 \ 000000A4 0000A013 MOVNE R0,#+0 \ 000000A8 780084E5 STR R0,[R4, #+120] 5611 } \ 000000AC F087BDE8 POP {R4-R10,PC} ;; return 5612 5613 int clstartItem=0; \ In segment CODE, align 4, keep-with-next 5614 static void DrawList() 5615 { \ DrawList: \ 00000000 ........ LDR R0,??DataTable223 ;; isSystemFont \ 00000004 F04F2DE9 PUSH {R4-R11,LR} \ 00000008 74D04DE2 SUB SP,SP,#+116 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 0300000A BEQ ??DrawList_0 5616 if(isSystemFont) clfont=100+pngFont; \ 00000018 ........ LDR R0,??DataTable210 ;; pngFont \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 640080E2 ADD R0,R0,#+100 \ 00000024 000000EA B ??DrawList_1 5617 else clfont=2; \ ??DrawList_0: \ 00000028 0200A0E3 MOV R0,#+2 \ ??DrawList_1: \ 0000002C ........ LDR R4,??DataTable230 ;; i_rc \ 00000030 5C0484E5 STR R0,[R4, #+1116] 5618 if(!cltop) return; \ 00000034 040494E5 LDR R0,[R4, #+1028] \ 00000038 000050E3 CMP R0,#+0 \ 0000003C EE01000A BEQ ??DrawList_2 5619 int font_y = FontH(clfont)+2;//16+2 \ 00000040 5C0494E5 LDR R0,[R4, #+1116] \ 00000044 ........ _BLF FontH,??FontH??rA \ 00000048 020080E2 ADD R0,R0,#+2 \ 0000004C 08008DE5 STR R0,[SP, #+8] 5620 int scr_w=ScreenW()-1; \ 00000050 888100EF SWI +33160 \ 00000054 010040E2 SUB R0,R0,#+1 \ 00000058 18008DE5 STR R0,[SP, #+24] 5621 int scr_h=ScreenH()-1; \ 0000005C 898100EF SWI +33161 \ 00000060 ........ LDR R0,??DataTable224 ;; VIEW_MODE \ 00000064 000090E5 LDR R0,[R0, #+0] \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 0F00000A BEQ ??DrawList_3 5622 int y2; 5623 5624 if(VIEW_MODE) 5625 itemFromDisp = (sdiv(font_y,ScreenH()-CLIST_Y1-FontH(clfont)-2)*2)-1;//((font_y/(ScreenH()-CLIST_Y1-FontH(clfont)-2))*2)-1; \ 00000070 898100EF SWI +33161 \ 00000074 0050A0E1 MOV R5,R0 \ 00000078 5C0494E5 LDR R0,[R4, #+1116] \ 0000007C ........ _BLF FontH,??FontH??rA \ 00000080 0060A0E1 MOV R6,R0 \ 00000084 5C0494E5 LDR R0,[R4, #+1116] \ 00000088 ........ _BLF FontH,??FontH??rA \ 0000008C 061045E0 SUB R1,R5,R6 \ 00000090 041041E2 SUB R1,R1,#+4 \ 00000094 000041E0 SUB R0,R1,R0 \ 00000098 021040E2 SUB R1,R0,#+2 \ 0000009C 08009DE5 LDR R0,[SP, #+8] \ 000000A0 B80000EF SWI +184 \ 000000A4 8000A0E1 LSL R0,R0,#+1 \ 000000A8 010040E2 SUB R0,R0,#+1 \ 000000AC 0C0000EA B ??DrawList_4 5626 else 5627 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-FontH(clfont)-2); \ ??DrawList_3: \ 000000B0 898100EF SWI +33161 \ 000000B4 0050A0E1 MOV R5,R0 \ 000000B8 5C0494E5 LDR R0,[R4, #+1116] \ 000000BC ........ _BLF FontH,??FontH??rA \ 000000C0 0060A0E1 MOV R6,R0 \ 000000C4 5C0494E5 LDR R0,[R4, #+1116] \ 000000C8 ........ _BLF FontH,??FontH??rA \ 000000CC 061045E0 SUB R1,R5,R6 \ 000000D0 041041E2 SUB R1,R1,#+4 \ 000000D4 000041E0 SUB R0,R1,R0 \ 000000D8 021040E2 SUB R1,R0,#+2 \ 000000DC 08009DE5 LDR R0,[SP, #+8] \ 000000E0 B80000EF SWI +184 \ ??DrawList_4: \ 000000E4 640484E5 STR R0,[R4, #+1124] 5628 5629 CLIST *cl; 5630 int i=0; \ 000000E8 0050A0E3 MOV R5,#+0 \ 000000EC 0000A0E3 MOV R0,#+0 \ 000000F0 700484E5 STR R0,[R4, #+1136] 5631 int start_y; 5632 int x=0; 5633 RECT rc; 5634 int icon; 5635 collum=0; 5636 // int clfont=108; 5637 char *name=malloc(128); \ 000000F4 8000A0E3 MOV R0,#+128 \ 000000F8 140000EF SWI +20 \ 000000FC 0060A0E1 MOV R6,R0 5638 int yy=0; \ 00000100 0510A0E1 MOV R1,R5 \ 00000104 1C108DE5 STR R1,[SP, #+28] 5639 DYNPNGICONLIST *xs; 5640 5641 LockSched(); \ 00000108 460100EF SWI +326 5642 totalItems = CountContacts(); //TotalBmk(); \ 0000010C ........ _BLF CountContacts,??CountContacts??rA \ 00000110 680484E5 STR R0,[R4, #+1128] \ 00000114 ........ LDR R0,??DataTable221 ;; LINE_MODE \ 00000118 000090E5 LDR R0,[R0, #+0] \ 0000011C 000050E3 CMP R0,#+0 5643 5644 // if(itemFromDisp*font_y > (CLIST_Y1 - (2-FontH(clfont)))) itemFromDisp--; //Вдруг надпись будет налазить на софты ;) 5645 if(LINE_MODE) itemFromDisp--; \ 00000120 64049415 LDRNE R0,[R4, #+1124] \ 00000124 01004012 SUBNE R0,R0,#+1 \ 00000128 64048415 STRNE R0,[R4, #+1124] 5646 5647 while( i < ((VIEW_MODE!=0)?(totalItems):(itemFromDisp)) ) \ ??DrawList_5: \ 0000012C ........ LDR R1,??DataTable224 ;; VIEW_MODE \ 00000130 640494E5 LDR R0,[R4, #+1124] \ 00000134 001091E5 LDR R1,[R1, #+0] \ 00000138 000051E3 CMP R1,#+0 \ 0000013C 68249415 LDRNE R2,[R4, #+1128] \ 00000140 0020A001 MOVEQ R2,R0 \ 00000144 020055E1 CMP R5,R2 \ 00000148 A80100AA BGE ??DrawList_6 5648 { 5649 if(!VIEW_MODE) goto next;//если не два столбика то пропускаем условие \ 0000014C 000051E3 CMP R1,#+0 \ 00000150 1600000A BEQ ??DrawList_7 5650 if( (i>=(curpage-1)*itemFromDisp) && (i<=itemFromDisp*curpage) )//если те итемы который нужно выводить на экран со страници curpage \ 00000154 6C1494E5 LDR R1,[R4, #+1132] \ 00000158 012041E2 SUB R2,R1,#+1 \ 0000015C 900202E0 MUL R2,R0,R2 \ 00000160 020055E1 CMP R5,R2 \ 00000164 910000A0 MULGE R0,R1,R0 \ 00000168 050050A1 CMPGE R0,R5 \ 0000016C 8F0100BA BLT ??DrawList_8 \ 00000170 0000A0E3 MOV R0,#+0 \ ??DrawList_9: \ 00000174 050080E0 ADD R0,R0,R5 \ 00000178 ........ _BLF FindContactByN,??FindContactByN??rA \ 0000017C 0070B0E1 MOVS R7,R0 5651 { 5652 next: 5653 cl=FindContactByN( i + ((VIEW_MODE==0)?(clstartItem):(0)) ); 5654 if(!cl) return; \ 00000180 9D01000A BEQ ??DrawList_2 5655 if(cl)//если такой есть то рисуем его 5656 { 5657 start_y=0; 5658 if(LINE_MODE)//если в две линии \ 00000184 ........ LDR R0,??DataTable224 ;; VIEW_MODE \ 00000188 00A0A0E3 MOV R10,#+0 \ 0000018C 001090E5 LDR R1,[R0, #+0] \ 00000190 ........ LDR R0,??DataTable221 ;; LINE_MODE \ 00000194 000090E5 LDR R0,[R0, #+0] \ 00000198 000050E3 CMP R0,#+0 \ 0000019C 0C00000A BEQ ??DrawList_10 5659 { 5660 if(i + ((VIEW_MODE==0)?(clstartItem):(0)) > curpos ) start_y+=font_y+3; \ 000001A0 000051E3 CMP R1,#+0 \ 000001A4 74049405 LDREQ R0,[R4, #+1140] \ 000001A8 0000A013 MOVNE R0,#+0 \ 000001AC 010000EA B ??DrawList_11 \ ??DrawList_7: \ 000001B0 740494E5 LDR R0,[R4, #+1140] \ 000001B4 EEFFFFEA B ??DrawList_9 \ ??DrawList_11: \ 000001B8 502494E5 LDR R2,[R4, #+1104] \ 000001BC 050080E0 ADD R0,R0,R5 \ 000001C0 000052E1 CMP R2,R0 \ 000001C4 08009DB5 LDRLT R0,[SP, #+8] 5661 y2=2; \ 000001C8 0220A0E3 MOV R2,#+2 \ 000001CC 03A080B2 ADDLT R10,R0,#+3 \ 000001D0 000000EA B ??DrawList_12 5662 } 5663 else y2=1; \ ??DrawList_10: \ 000001D4 0120A0E3 MOV R2,#+1 5664 5665 if(VIEW_MODE)//если в две колонки \ ??DrawList_12: \ 000001D8 18809DE5 LDR R8,[SP, #+24] \ 000001DC 5C0494E5 LDR R0,[R4, #+1116] \ 000001E0 058048E2 SUB R8,R8,#+5 \ 000001E4 0C808DE5 STR R8,[SP, #+12] \ 000001E8 08309DE5 LDR R3,[SP, #+8] \ 000001EC 000051E3 CMP R1,#+0 \ 000001F0 920308E0 MUL R8,R2,R3 \ 000001F4 2700000A BEQ ??DrawList_13 5666 { 5667 if(!collum)//если первая колонка \ 000001F8 18109DE5 LDR R1,[SP, #+24] \ 000001FC A11F81E0 ADD R1,R1,R1, LSR #+31 \ 00000200 C190A0E1 ASR R9,R1,#+1 \ 00000204 701494E5 LDR R1,[R4, #+1136] \ 00000208 000051E3 CMP R1,#+0 \ 0000020C 1200001A BNE ??DrawList_14 5668 { 5669 start_y += (CLIST_Y1 + (((i - (curpage-1)*itemFromDisp)*font_y)/2) ); //определяем начальное смещение по у \ 00000210 ........ _BLF FontH,??FontH??rA \ 00000214 6C1494E5 LDR R1,[R4, #+1132] \ 00000218 642494E5 LDR R2,[R4, #+1124] \ 0000021C 011041E2 SUB R1,R1,#+1 \ 00000220 920101E0 MUL R1,R2,R1 \ 00000224 08209DE5 LDR R2,[SP, #+8] \ 00000228 011045E0 SUB R1,R5,R1 \ 0000022C 920101E0 MUL R1,R2,R1 5670 yy=start_y; 5671 StoreXYXYtoRECT(&rc, 1, start_y, (scr_w/2)-5, start_y+(font_y*y2)); \ 00000230 053049E2 SUB R3,R9,#+5 \ 00000234 A11F81E0 ADD R1,R1,R1, LSR #+31 \ 00000238 C10080E0 ADD R0,R0,R1, ASR #+1 \ 0000023C 040080E2 ADD R0,R0,#+4 \ 00000240 0AA080E0 ADD R10,R0,R10 \ 00000244 1CA08DE5 STR R10,[SP, #+28] \ 00000248 0A0088E0 ADD R0,R8,R10 \ 0000024C 01002DE9 PUSH {R0} \ 00000250 0A20A0E1 MOV R2,R10 \ 00000254 0110A0E3 MOV R1,#+1 \ 00000258 050000EA B ??DrawList_15 5672 } 5673 else//если вторая 5674 { 5675 StoreXYXYtoRECT(&rc, (scr_w/2)-4, yy, scr_w-5, yy+(font_y*y2)); \ ??DrawList_14: \ 0000025C 1C009DE5 LDR R0,[SP, #+28] \ 00000260 041049E2 SUB R1,R9,#+4 \ 00000264 000088E0 ADD R0,R8,R0 \ 00000268 01002DE9 PUSH {R0} \ 0000026C 10309DE5 LDR R3,[SP, #+16] \ 00000270 20209DE5 LDR R2,[SP, #+32] \ ??DrawList_15: \ 00000274 04008DE2 ADD R0,SP,#+4 \ 00000278 340100EF SWI +308 \ 0000027C 04D08DE2 ADD SP,SP,#+4 5676 } 5677 collum=!collum; \ 00000280 700494E5 LDR R0,[R4, #+1136] \ 00000284 000050E3 CMP R0,#+0 \ 00000288 0100A003 MOVEQ R0,#+1 \ 0000028C 0000A013 MOVNE R0,#+0 \ 00000290 700484E5 STR R0,[R4, #+1136] \ 00000294 0C0000EA B ??DrawList_16 5678 } 5679 else 5680 { 5681 start_y += (CLIST_Y1 + 2 + (i/* - (curpage-1)*itemFromDisp*/)*font_y); //?????????? ????????? ???????? ?? ? \ ??DrawList_13: \ 00000298 0390A0E1 MOV R9,R3 \ 0000029C ........ _BLF FontH,??FontH??rA \ 000002A0 990520E0 MLA R0,R9,R5,R0 5682 StoreXYXYtoRECT(&rc,2,start_y,scr_w-5,start_y+(font_y*y2)); \ 000002A4 0210A0E3 MOV R1,#+2 \ 000002A8 060080E2 ADD R0,R0,#+6 \ 000002AC 0AA080E0 ADD R10,R0,R10 \ 000002B0 0A0088E0 ADD R0,R8,R10 \ 000002B4 01002DE9 PUSH {R0} \ 000002B8 10309DE5 LDR R3,[SP, #+16] \ 000002BC 0A20A0E1 MOV R2,R10 \ 000002C0 04008DE2 ADD R0,SP,#+4 \ 000002C4 340100EF SWI +308 \ 000002C8 04D08DE2 ADD SP,SP,#+4 5683 } 5684 5685 icon=GetIconIndex(cl); 5686 if (icon!=IS_GROUP)//если не иконка группы \ ??DrawList_16: \ 000002CC ........ LDR R8,??DataTable217 ;; Canvas \ 000002D0 0700A0E1 MOV R0,R7 \ 000002D4 ........ BL GetIconIndex \ 000002D8 0090A0E1 MOV R9,R0 \ 000002DC 0810A0E3 MOV R1,#+8 \ 000002E0 8C1D81E3 ORR R1,R1,#0x2300 \ 000002E4 041081E0 ADD R1,R1,R4 \ 000002E8 14108DE5 STR R1,[SP, #+20] \ 000002EC 1410A0E3 MOV R1,#+20 \ 000002F0 8C1D81E3 ORR R1,R1,#0x2300 \ 000002F4 041081E0 ADD R1,R1,R4 \ 000002F8 10108DE5 STR R1,[SP, #+16] \ 000002FC 0F0059E3 CMP R9,#+15 \ 00000300 0400000A BEQ ??DrawList_17 5687 { 5688 sprintf(name,percent_s,cl->name); \ 00000304 142087E2 ADD R2,R7,#+20 \ 00000308 081088E2 ADD R1,R8,#+8 \ 0000030C 0600A0E1 MOV R0,R6 \ 00000310 160000EF SWI +22 \ 00000314 330000EA B ??DrawList_18 5689 } 5690 else 5691 { 5692 int onlinetotal[2]; 5693 GetOnTotalContact(cl->group,onlinetotal); \ ??DrawList_17: \ 00000318 100097E5 LDR R0,[R7, #+16] \ 0000031C 24108DE2 ADD R1,SP,#+36 \ 00000320 ........ BL GetOnTotalContact 5694 if(!VIEW_MODE)//если не в два столбца \ 00000324 ........ LDR R0,??DataTable224 ;; VIEW_MODE \ 00000328 000090E5 LDR R0,[R0, #+0] \ 0000032C 000050E3 CMP R0,#+0 \ 00000330 1C00001A BNE ??DrawList_19 5695 { 5696 char *s=malloc(32); \ 00000334 2000A0E3 MOV R0,#+32 \ 00000338 140000EF SWI +20 \ 0000033C 00B0A0E1 MOV R11,R0 5697 sprintf(name,percent_s,cl->name); \ 00000340 142087E2 ADD R2,R7,#+20 \ 00000344 081088E2 ADD R1,R8,#+8 \ 00000348 0600A0E1 MOV R0,R6 \ 0000034C 160000EF SWI +22 5698 sprintf(s,"(%d/%d)",onlinetotal[0],onlinetotal[1]); \ 00000350 28309DE5 LDR R3,[SP, #+40] \ 00000354 24209DE5 LDR R2,[SP, #+36] \ 00000358 8A1F88E2 ADD R1,R8,#+552 \ 0000035C 0B00A0E1 MOV R0,R11 \ 00000360 160000EF SWI +22 5699 SetFontColor((char*)clrBlack,transparent,0); \ 00000364 10109DE5 LDR R1,[SP, #+16] \ 00000368 14009DE5 LDR R0,[SP, #+20] \ 0000036C 0020A0E3 MOV R2,#+0 \ 00000370 ........ _BLF SetFontColor,??SetFontColor??rA 5700 PrintField(scr_w-5,start_y,s,2,clfont,1);//capacity in header \ 00000374 0100A0E3 MOV R0,#+1 \ 00000378 01002DE9 PUSH {R0} \ 0000037C 5C0494E5 LDR R0,[R4, #+1116] \ 00000380 0230A0E3 MOV R3,#+2 \ 00000384 01002DE9 PUSH {R0} \ 00000388 0B20A0E1 MOV R2,R11 \ 0000038C 14009DE5 LDR R0,[SP, #+20] \ 00000390 0A10A0E1 MOV R1,R10 \ 00000394 ........ _BLF PrintField,??PrintField??rA 5701 mfree(s); \ 00000398 0B00A0E1 MOV R0,R11 \ 0000039C 150000EF SWI +21 \ 000003A0 08D08DE2 ADD SP,SP,#+8 \ 000003A4 0C0000EA B ??DrawList_20 5702 } 5703 else 5704 sprintf(name,"%s%c%c(%d/%d)",cl->name,0xE01D,0xE012,onlinetotal[0],onlinetotal[1]); \ ??DrawList_19: \ 000003A8 28009DE5 LDR R0,[SP, #+40] \ 000003AC 142087E2 ADD R2,R7,#+20 \ 000003B0 01002DE9 PUSH {R0} \ 000003B4 28009DE5 LDR R0,[SP, #+40] \ 000003B8 8C1F88E2 ADD R1,R8,#+560 \ 000003BC 01002DE9 PUSH {R0} \ 000003C0 1200A0E3 MOV R0,#+18 \ 000003C4 E00C80E3 ORR R0,R0,#0xE000 \ 000003C8 01002DE9 PUSH {R0} \ 000003CC 0B3080E2 ADD R3,R0,#+11 \ 000003D0 0600A0E1 MOV R0,R6 \ 000003D4 160000EF SWI +22 \ 000003D8 0CD08DE2 ADD SP,SP,#+12 5705 if (cl->state) icon++; //Модификация иконки группы \ ??DrawList_20: \ 000003DC B405D7E1 LDRH R0,[R7, #+84] \ 000003E0 000050E3 CMP R0,#+0 \ 000003E4 01908912 ADDNE R9,R9,#+1 5706 } 5707 5708 // DrawImg(rc.x,rc.y,NumStatusToIconBar+icon);//status 5709 5710 DrwImage(icons[((cl->just_i)?(IS_OFFLINE):(icon))],rc.x,rc.y,0,0);//draw imghdr! \ ??DrawList_18: \ 000003E8 780097E5 LDR R0,[R7, #+120] \ 000003EC 0010A0E3 MOV R1,#+0 \ 000003F0 02002DE9 PUSH {R1} \ 000003F4 F620DDE1 LDRSH R2,[SP, #+6] \ 000003F8 000050E3 CMP R0,#+0 \ 000003FC 0000A013 MOVNE R0,#+0 \ 00000400 F410DDE1 LDRSH R1,[SP, #+4] \ 00000404 0900A001 MOVEQ R0,R9 \ 00000408 0030A0E3 MOV R3,#+0 \ 0000040C 000184E0 ADD R0,R4,R0, LSL #+2 \ 00000410 080090E5 LDR R0,[R0, #+8] 5711 rc.x+=icons[icon]->w+2;//GetImgWidth(NumStatusToIconBar+icon)+2;// + смещение по х 5712 if(cl->unread_msg!=0) \ 00000414 5EA0A0E3 MOV R10,#+94 \ 00000418 ........ BL DrwImage \ 0000041C F410DDE1 LDRSH R1,[SP, #+4] \ 00000420 092184E0 ADD R2,R4,R9, LSL #+2 \ 00000424 082092E5 LDR R2,[R2, #+8] \ 00000428 40AF8AE3 ORR R10,R10,#0x100 \ 0000042C F020D2E1 LDRSH R2,[R2, #+0] \ 00000430 022082E2 ADD R2,R2,#+2 \ 00000434 011082E0 ADD R1,R2,R1 \ 00000438 B410CDE1 STRH R1,[SP, #+4] \ 0000043C 942097E5 LDR R2,[R7, #+148] \ 00000440 04D08DE2 ADD SP,SP,#+4 \ 00000444 000052E3 CMP R2,#+0 \ 00000448 2D00000A BEQ ??DrawList_21 5713 { 5714 char p[3]; 5715 sprintf(p,_d,cl->unread_msg); \ 0000044C 0E1088E2 ADD R1,R8,#+14 \ 00000450 20008DE2 ADD R0,SP,#+32 \ 00000454 160000EF SWI +22 5716 DrawText(rc.x,rc.y,rc.x2,p,(cl->isactive!=0)?(clrRed):(clrBlack),(isSystemFont)?clfont:((cl->isactive!=0)?(clfont+1):(clfont)),0,0); \ 00000458 ........ LDR R0,??DataTable223 ;; isSystemFont \ 0000045C 5C1494E5 LDR R1,[R4, #+1116] \ 00000460 000090E5 LDR R0,[R0, #+0] \ 00000464 000050E3 CMP R0,#+0 \ 00000468 AC0097E5 LDR R0,[R7, #+172] \ 0000046C 2A00000A BEQ ??DrawList_22 \ 00000470 000050E3 CMP R0,#+0 \ 00000474 2B00001A BNE ??DrawList_23 \ ??DrawList_24: \ 00000478 14009DE5 LDR R0,[SP, #+20] \ ??DrawList_25: \ 0000047C 0C108DE5 STR R1,[SP, #+12] \ 00000480 F420DDE1 LDRSH R2,[SP, #+4] \ 00000484 2C208DE5 STR R2,[SP, #+44] \ 00000488 F220DDE1 LDRSH R2,[SP, #+2] \ 0000048C 30208DE5 STR R2,[SP, #+48] \ 00000490 F0B0DDE1 LDRSH R11,[SP, #+0] \ 00000494 10109DE5 LDR R1,[SP, #+16] \ 00000498 0020A0E3 MOV R2,#+0 \ 0000049C ........ _BLF SetFontColor,??SetFontColor??rA \ 000004A0 2C009DE5 LDR R0,[SP, #+44] \ 000004A4 0030A0E3 MOV R3,#+0 \ 000004A8 0B0040E0 SUB R0,R0,R11 \ 000004AC 01002DE9 PUSH {R0} \ 000004B0 0000A0E3 MOV R0,#+0 \ 000004B4 01002DE9 PUSH {R0} \ 000004B8 01002DE9 PUSH {R0} \ 000004BC 0A00A0E1 MOV R0,R10 \ 000004C0 01002DE9 PUSH {R0} \ 000004C4 0100A0E3 MOV R0,#+1 \ 000004C8 01002DE9 PUSH {R0} \ 000004CC 20009DE5 LDR R0,[SP, #+32] \ 000004D0 01002DE9 PUSH {R0} \ 000004D4 48109DE5 LDR R1,[SP, #+72] \ 000004D8 38208DE2 ADD R2,SP,#+56 \ 000004DC 0B00A0E1 MOV R0,R11 \ 000004E0 ........ _BLF PrintText,??PrintText??rA 5717 rc.x+=GetWidth(rc.x,rc.y)+2; \ 000004E4 FA11DDE1 LDRSH R1,[SP, #+26] \ 000004E8 F801DDE1 LDRSH R0,[SP, #+24] \ 000004EC ........ _BLF GetWidth,??GetWidth??rA \ 000004F0 F821DDE1 LDRSH R2,[SP, #+24] \ 000004F4 020080E2 ADD R0,R0,#+2 \ 000004F8 020080E0 ADD R0,R0,R2 \ 000004FC B801CDE1 STRH R0,[SP, #+24] \ 00000500 18D08DE2 ADD SP,SP,#+24 5718 } 5719 5720 if(i + ((VIEW_MODE==0)?(clstartItem):(0)) == curpos )//Если наш итем то выделяем \ ??DrawList_21: \ 00000504 ........ LDR R0,??DataTable224 ;; VIEW_MODE \ 00000508 000090E5 LDR R0,[R0, #+0] \ 0000050C 000050E3 CMP R0,#+0 \ 00000510 74049405 LDREQ R0,[R4, #+1140] \ 00000514 0000A013 MOVNE R0,#+0 \ 00000518 060000EA B ??DrawList_26 \ ??DrawList_22: \ 0000051C 000050E3 CMP R0,#+0 \ 00000520 D4FFFF0A BEQ ??DrawList_24 \ 00000524 011081E2 ADD R1,R1,#+1 \ ??DrawList_23: \ 00000528 1000A0E3 MOV R0,#+16 \ 0000052C 8C0D80E3 ORR R0,R0,#0x2300 \ 00000530 040080E0 ADD R0,R0,R4 \ 00000534 D0FFFFEA B ??DrawList_25 \ ??DrawList_26: \ 00000538 501494E5 LDR R1,[R4, #+1104] \ 0000053C 050080E0 ADD R0,R0,R5 \ 00000540 010050E1 CMP R0,R1 \ 00000544 5F00001A BNE ??DrawList_27 5721 { 5722 DrawRoundedFrame(rc.x-1,rc.y-1,rc.x2-1,rc.y2-1,0,0,0,ClCursorBordClr,ClCursorClr); \ 00000548 B4029FE5 LDR R0,??DrawList_28 ;; ClCursorClr \ 0000054C 01002DE9 PUSH {R0} \ 00000550 B0029FE5 LDR R0,??DrawList_28+0x4 ;; ClCursorBordClr \ 00000554 01002DE9 PUSH {R0} \ 00000558 0000A0E3 MOV R0,#+0 \ 0000055C 01002DE9 PUSH {R0} \ 00000560 01002DE9 PUSH {R0} \ 00000564 01002DE9 PUSH {R0} \ 00000568 FA01DDE1 LDRSH R0,[SP, #+26] \ 0000056C 013040E2 SUB R3,R0,#+1 \ 00000570 F801DDE1 LDRSH R0,[SP, #+24] \ 00000574 012040E2 SUB R2,R0,#+1 \ 00000578 F601DDE1 LDRSH R0,[SP, #+22] \ 0000057C 011040E2 SUB R1,R0,#+1 \ 00000580 F401DDE1 LDRSH R0,[SP, #+20] \ 00000584 010040E2 SUB R0,R0,#+1 \ 00000588 500100EF SWI +336 5723 if(LINE_MODE && icon!=IS_GROUP) \ 0000058C ........ LDR R0,??DataTable221 ;; LINE_MODE \ 00000590 000090E5 LDR R0,[R0, #+0] \ 00000594 14D08DE2 ADD SP,SP,#+20 \ 00000598 000050E3 CMP R0,#+0 \ 0000059C 0F005913 CMPNE R9,#+15 \ 000005A0 4200000A BEQ ??DrawList_29 5724 { 5725 char s[64]; 5726 if ((cl->xtext && cl->xtext[0]!=0) && (cl->isShowXst) && (cl->state!=0xFFFF))//Если контакт онлайн и показывать хстату \ 000005A4 B40097E5 LDR R0,[R7, #+180] \ 000005A8 000050E3 CMP R0,#+0 \ 000005AC 0000D015 LDRBNE R0,[R0, #+0] \ 000005B0 00005013 CMPNE R0,#+0 \ 000005B4 7C009715 LDRNE R0,[R7, #+124] \ 000005B8 00005013 CMPNE R0,#+0 \ 000005BC 0F00000A BEQ ??DrawList_30 \ 000005C0 B405D7E1 LDRH R0,[R7, #+84] \ 000005C4 FF10A0E3 MOV R1,#+255 \ 000005C8 FF1C81E3 ORR R1,R1,#0xFF00 \ 000005CC 010050E1 CMP R0,R1 \ 000005D0 0A00000A BEQ ??DrawList_30 5727 { 5728 int i; 5729 zeromem(s,64); \ 000005D4 4010A0E3 MOV R1,#+64 \ 000005D8 34008DE2 ADD R0,SP,#+52 \ 000005DC 1D0100EF SWI +285 5730 i=cl->xtext[0]; \ 000005E0 B40097E5 LDR R0,[R7, #+180] \ ??DrawList_31: \ 000005E4 0020D0E5 LDRB R2,[R0, #+0] 5731 if (i>63) i=63; 5732 strncpy(s,cl->xtext+1,i); \ 000005E8 011080E2 ADD R1,R0,#+1 \ 000005EC 34008DE2 ADD R0,SP,#+52 \ 000005F0 400052E3 CMP R2,#+64 \ 000005F4 3F20A0A3 MOVGE R2,#+63 \ 000005F8 160100EF SWI +278 \ 000005FC 110000EA B ??DrawList_32 5733 } 5734 else 5735 if(cl->xtext2 && cl->xtext2[0]!=0 && isLogStatusChange) \ ??DrawList_30: \ 00000600 B80097E5 LDR R0,[R7, #+184] \ 00000604 000050E3 CMP R0,#+0 \ 00000608 0000D015 LDRBNE R0,[R0, #+0] \ 0000060C 00005013 CMPNE R0,#+0 \ 00000610 0800000A BEQ ??DrawList_33 \ 00000614 ........ LDR R0,??DataTable222 ;; isLogStatusChange \ 00000618 000090E5 LDR R0,[R0, #+0] \ 0000061C 000050E3 CMP R0,#+0 \ 00000620 0400000A BEQ ??DrawList_33 5736 { 5737 int i; 5738 zeromem(s,64); \ 00000624 4010A0E3 MOV R1,#+64 \ 00000628 34008DE2 ADD R0,SP,#+52 \ 0000062C 1D0100EF SWI +285 5739 i=cl->xtext2[0]; \ 00000630 B80097E5 LDR R0,[R7, #+184] \ 00000634 EAFFFFEA B ??DrawList_31 5740 if (i>63) i=63; 5741 strncpy(s,cl->xtext2+1,i); 5742 } 5743 else 5744 sprintf(s,percent_d,cl->uin); \ ??DrawList_33: \ 00000638 0C2097E5 LDR R2,[R7, #+12] \ 0000063C 0B1088E2 ADD R1,R8,#+11 \ 00000640 34008DE2 ADD R0,SP,#+52 \ 00000644 160000EF SWI +22 5745 SetFontColor((char*)clrBlack,transparent,0); \ ??DrawList_32: \ 00000648 10109DE5 LDR R1,[SP, #+16] \ 0000064C 14009DE5 LDR R0,[SP, #+20] \ 00000650 0020A0E3 MOV R2,#+0 \ 00000654 ........ _BLF SetFontColor,??SetFontColor??rA 5746 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 \ 00000658 F000DDE1 LDRSH R0,[SP, #+0] \ 0000065C F410DDE1 LDRSH R1,[SP, #+4] \ 00000660 0030A0E3 MOV R3,#+0 \ 00000664 001041E0 SUB R1,R1,R0 \ 00000668 031041E2 SUB R1,R1,#+3 \ 0000066C 02002DE9 PUSH {R1} \ 00000670 010080E2 ADD R0,R0,#+1 \ 00000674 0010A0E3 MOV R1,#+0 \ 00000678 02002DE9 PUSH {R1} \ 0000067C 02002DE9 PUSH {R1} \ 00000680 0A10A0E1 MOV R1,R10 \ 00000684 02002DE9 PUSH {R1} \ 00000688 0110A0E3 MOV R1,#+1 \ 0000068C 02002DE9 PUSH {R1} \ 00000690 5C1494E5 LDR R1,[R4, #+1116] \ 00000694 02002DE9 PUSH {R1} \ 00000698 20809DE5 LDR R8,[SP, #+32] \ 0000069C FA11DDE1 LDRSH R1,[SP, #+26] \ 000006A0 4C208DE2 ADD R2,SP,#+76 \ 000006A4 011088E0 ADD R1,R8,R1 \ 000006A8 ........ _BLF PrintText,??PrintText??rA \ 000006AC 18D08DE2 ADD SP,SP,#+24 5747 } 5748 5749 if(totalItems>1) \ ??DrawList_29: \ 000006B0 681494E5 LDR R1,[R4, #+1128] \ 000006B4 020051E3 CMP R1,#+2 \ 000006B8 020000BA BLT ??DrawList_27 5750 DrawScrollBar(i+clstartItem,totalItems); \ 000006BC 740494E5 LDR R0,[R4, #+1140] \ 000006C0 050080E0 ADD R0,R0,R5 \ 000006C4 ........ BL DrawScrollBar 5751 } 5752 5753 if(cl->xstate!=0)//если есть хстатус \ ??DrawList_27: \ 000006C8 B605D7E1 LDRH R0,[R7, #+86] \ 000006CC 000050E3 CMP R0,#+0 \ 000006D0 0F00000A BEQ ??DrawList_34 5754 { 5755 xs=GetXSByItem(cl->xstate); \ 000006D4 ........ _BLF GetXSByItem,??GetXSByItem??rA \ 000006D8 0080B0E1 MOVS R8,R0 5756 if(xs) \ 000006DC 0C00000A BEQ ??DrawList_34 5757 { 5758 DrwImage(xs->img,rc.x-x,rc.y,0,0); \ 000006E0 0000A0E3 MOV R0,#+0 \ 000006E4 01002DE9 PUSH {R0} \ 000006E8 F620DDE1 LDRSH R2,[SP, #+6] \ 000006EC F410DDE1 LDRSH R1,[SP, #+4] \ 000006F0 080098E5 LDR R0,[R8, #+8] \ 000006F4 0030A0E3 MOV R3,#+0 \ 000006F8 ........ BL DrwImage 5759 rc.x+=xs->img->w; \ 000006FC 082098E5 LDR R2,[R8, #+8] \ 00000700 F410DDE1 LDRSH R1,[SP, #+4] \ 00000704 F020D2E1 LDRSH R2,[R2, #+0] \ 00000708 011082E0 ADD R1,R2,R1 \ 0000070C B410CDE1 STRH R1,[SP, #+4] \ 00000710 04D08DE2 ADD SP,SP,#+4 5760 } 5761 } 5762 5763 if(cl->just_now) \ ??DrawList_34: \ 00000714 740097E5 LDR R0,[R7, #+116] \ 00000718 000050E3 CMP R0,#+0 \ 0000071C 0400000A BEQ ??DrawList_35 5764 DrawJustNow(&rc,cl,name); \ 00000720 0620A0E1 MOV R2,R6 \ 00000724 0710A0E1 MOV R1,R7 \ 00000728 0D00A0E1 MOV R0,SP \ 0000072C ........ BL DrawJustNow \ 00000730 1E0000EA B ??DrawList_8 5765 else 5766 DrawText(rc.x+3,rc.y,rc.x2,name,(cl->isactive!=0)?(ActiveClr):(NotActiveClr),(isSystemFont)?clfont:((cl->isactive!=0)?(clfont+1):(clfont)),0,0); \ ??DrawList_35: \ 00000734 ........ LDR R1,??DataTable223 ;; isSystemFont \ 00000738 AC0097E5 LDR R0,[R7, #+172] \ 0000073C 001091E5 LDR R1,[R1, #+0] \ 00000740 5C7494E5 LDR R7,[R4, #+1116] \ 00000744 000051E3 CMP R1,#+0 \ 00000748 1F00000A BEQ ??DrawList_36 \ 0000074C 000050E3 CMP R0,#+0 \ 00000750 2000001A BNE ??DrawList_37 \ ??DrawList_38: \ 00000754 B0009FE5 LDR R0,??DrawList_28+0x8 ;; NotActiveClr \ ??DrawList_39: \ 00000758 F480DDE1 LDRSH R8,[SP, #+4] \ 0000075C F010DDE1 LDRSH R1,[SP, #+0] \ 00000760 F290DDE1 LDRSH R9,[SP, #+2] \ 00000764 0020A0E3 MOV R2,#+0 \ 00000768 03B081E2 ADD R11,R1,#+3 \ 0000076C 10109DE5 LDR R1,[SP, #+16] \ 00000770 ........ _BLF SetFontColor,??SetFontColor??rA \ 00000774 0B0048E0 SUB R0,R8,R11 \ 00000778 01002DE9 PUSH {R0} \ 0000077C 0030A0E3 MOV R3,#+0 \ 00000780 0620A0E1 MOV R2,R6 \ 00000784 0910A0E1 MOV R1,R9 \ 00000788 0000A0E3 MOV R0,#+0 \ 0000078C 01002DE9 PUSH {R0} \ 00000790 01002DE9 PUSH {R0} \ 00000794 00042DE9 PUSH {R10} \ 00000798 0100A0E3 MOV R0,#+1 \ 0000079C 01002DE9 PUSH {R0} \ 000007A0 80002DE9 PUSH {R7} \ 000007A4 0B00A0E1 MOV R0,R11 \ 000007A8 ........ _BLF PrintText,??PrintText??rA \ 000007AC 18D08DE2 ADD SP,SP,#+24 5767 }//if(cl) 5768 } 5769 i++; 5770 if(i > (itemFromDisp*((VIEW_MODE!=0)?(curpage):(1))) ) break; \ ??DrawList_8: \ 000007B0 ........ LDR R0,??DataTable224 ;; VIEW_MODE \ 000007B4 015085E2 ADD R5,R5,#+1 \ 000007B8 000090E5 LDR R0,[R0, #+0] \ 000007BC 000050E3 CMP R0,#+0 \ 000007C0 6C049415 LDRNE R0,[R4, #+1132] \ 000007C4 0100A003 MOVEQ R0,#+1 \ 000007C8 040000EA B ??DrawList_40 \ ??DrawList_36: \ 000007CC 000050E3 CMP R0,#+0 \ 000007D0 DFFFFF0A BEQ ??DrawList_38 \ 000007D4 017087E2 ADD R7,R7,#+1 \ ??DrawList_37: \ 000007D8 30009FE5 LDR R0,??DrawList_28+0xC ;; ActiveClr \ 000007DC DDFFFFEA B ??DrawList_39 \ ??DrawList_40: \ 000007E0 641494E5 LDR R1,[R4, #+1124] \ 000007E4 900101E0 MUL R1,R0,R1 \ 000007E8 050051E1 CMP R1,R5 \ 000007EC 4EFEFFAA BGE ??DrawList_5 5771 } 5772 UnlockSched(); \ ??DrawList_6: \ 000007F0 470100EF SWI +327 5773 mfree(name); \ 000007F4 0600A0E1 MOV R0,R6 \ 000007F8 150000EF SWI +21 5774 } \ ??DrawList_2: \ 000007FC 74D08DE2 ADD SP,SP,#+116 ;; stack cleaning \ 00000800 F08FBDE8 POP {R4-R11,PC} ;; return \ ??DrawList_28: \ 00000804 ........ DC32 ClCursorClr \ 00000808 ........ DC32 ClCursorBordClr \ 0000080C ........ DC32 NotActiveClr \ 00000810 ........ DC32 ActiveClr 5775 // Управление курсором \ In segment CODE, align 4, keep-with-next 5776 void MoveUp2(int i) 5777 { 5778 if(curpos > itemFromDisp + 2 ) \ MoveUp2: \ 00000000 ........ LDR R1,??DataTable230 ;; i_rc \ 00000004 70002DE9 PUSH {R4-R6} \ 00000008 50C491E5 LDR R12,[R1, #+1104] \ 0000000C 643491E5 LDR R3,[R1, #+1124] \ 00000010 742491E5 LDR R2,[R1, #+1140] \ 00000014 684491E5 LDR R4,[R1, #+1128] \ 00000018 025083E2 ADD R5,R3,#+2 \ 0000001C 0C0055E1 CMP R5,R12 \ 00000020 0D0000AA BGE ??MoveUp2_0 5779 { 5780 curpos-=i; \ 00000024 00C04CE0 SUB R12,R12,R0 5781 if(clstartItem > 0 && curpos > ((itemFromDisp/2)+1) && curpos < totalItems-((itemFromDisp/2)+1)) \ 00000028 010052E3 CMP R2,#+1 \ 0000002C 1F0000BA BLT ??MoveUp2_1 \ 00000030 A35F83E0 ADD R5,R3,R3, LSR #+31 \ 00000034 C550A0E1 ASR R5,R5,#+1 \ 00000038 016085E2 ADD R6,R5,#+1 \ 0000003C 0C0056E1 CMP R6,R12 \ 00000040 1A0000AA BGE ??MoveUp2_1 \ 00000044 054044E0 SUB R4,R4,R5 \ 00000048 014044E2 SUB R4,R4,#+1 \ 0000004C 04005CE1 CMP R12,R4 \ 00000050 160000AA BGE ??MoveUp2_1 5782 clstartItem-=i; \ ??MoveUp2_2: \ 00000054 002042E0 SUB R2,R2,R0 \ 00000058 140000EA B ??MoveUp2_1 5783 } 5784 else 5785 if(curpos > 0) \ ??MoveUp2_0: \ 0000005C 01005CE3 CMP R12,#+1 \ 00000060 0E0000BA BLT ??MoveUp2_3 5786 { 5787 curpos-=i; \ 00000064 00C04CE0 SUB R12,R12,R0 5788 if(clstartItem > 0 && curpos > ((itemFromDisp/2)+1)) \ 00000068 010052E3 CMP R2,#+1 \ 0000006C 040000BA BLT ??MoveUp2_4 \ 00000070 A34F83E0 ADD R4,R3,R3, LSR #+31 \ 00000074 0150A0E3 MOV R5,#+1 \ 00000078 C44085E0 ADD R4,R5,R4, ASR #+1 \ 0000007C 0C0054E1 CMP R4,R12 \ 00000080 F3FFFFBA BLT ??MoveUp2_2 5789 clstartItem-=i; 5790 else 5791 if(curpos < ((itemFromDisp/2)+1)) \ ??MoveUp2_4: \ 00000084 A30F83E0 ADD R0,R3,R3, LSR #+31 \ 00000088 0130A0E3 MOV R3,#+1 \ 0000008C C00083E0 ADD R0,R3,R0, ASR #+1 \ 00000090 00005CE1 CMP R12,R0 \ 00000094 050000AA BGE ??MoveUp2_1 5792 clstartItem=0; \ 00000098 0020A0E3 MOV R2,#+0 \ 0000009C 030000EA B ??MoveUp2_1 5793 } 5794 else 5795 { 5796 curpos=totalItems-1; \ ??MoveUp2_3: \ 000000A0 01C044E2 SUB R12,R4,#+1 5797 if(totalItems==itemFromDisp) \ 000000A4 030054E1 CMP R4,R3 5798 clstartItem=1;//totalItems-itemFromDisp/2;//-itemFromDisp;//-((itemFromDisp/2)+1)); \ 000000A8 0120A003 MOVEQ R2,#+1 5799 else 5800 clstartItem=totalItems-itemFromDisp; \ 000000AC 03204410 SUBNE R2,R4,R3 \ ??MoveUp2_1: \ 000000B0 742481E5 STR R2,[R1, #+1140] \ 000000B4 50C481E5 STR R12,[R1, #+1104] 5801 } 5802 } \ 000000B8 7000BDE8 POP {R4-R6} \ 000000BC 1EFF2FE1 BX LR ;; return 5803 5804 \ In segment CODE, align 4, keep-with-next 5805 void MoveDown2(int i) 5806 { 5807 if(curpos < itemFromDisp - ((itemFromDisp/2)+1) ) curpos+=i; \ MoveDown2: \ 00000000 ........ LDR R1,??DataTable230 ;; i_rc \ 00000004 30002DE9 PUSH {R4,R5} \ 00000008 502491E5 LDR R2,[R1, #+1104] \ 0000000C 64C491E5 LDR R12,[R1, #+1124] \ 00000010 743491E5 LDR R3,[R1, #+1140] \ 00000014 AC4F8CE0 ADD R4,R12,R12, LSR #+31 \ 00000018 C4404CE0 SUB R4,R12,R4, ASR #+1 \ 0000001C 014044E2 SUB R4,R4,#+1 \ 00000020 040052E1 CMP R2,R4 \ 00000024 010000AA BGE ??MoveDown2_0 \ ??MoveDown2_1: \ 00000028 020080E0 ADD R0,R0,R2 \ 0000002C 0A0000EA B ??MoveDown2_2 5808 else 5809 if(curpos < totalItems - 1) \ ??MoveDown2_0: \ 00000030 684491E5 LDR R4,[R1, #+1128] \ 00000034 015044E2 SUB R5,R4,#+1 \ 00000038 050052E1 CMP R2,R5 \ 0000003C 040000AA BGE ??MoveDown2_3 5810 { 5811 if(clstartItem < totalItems-itemFromDisp) \ 00000040 0C4044E0 SUB R4,R4,R12 \ 00000044 040053E1 CMP R3,R4 \ 00000048 F6FFFFAA BGE ??MoveDown2_1 5812 clstartItem+=i; \ 0000004C 033080E0 ADD R3,R0,R3 \ 00000050 F4FFFFEA B ??MoveDown2_1 5813 curpos+=i; 5814 } 5815 else 5816 { 5817 curpos=0; \ ??MoveDown2_3: \ 00000054 0000A0E3 MOV R0,#+0 5818 clstartItem=0; \ 00000058 0030A0E3 MOV R3,#+0 \ ??MoveDown2_2: \ 0000005C 743481E5 STR R3,[R1, #+1140] \ 00000060 500481E5 STR R0,[R1, #+1104] 5819 } 5820 } \ 00000064 3000BDE8 POP {R4,R5} \ 00000068 1EFF2FE1 BX LR ;; return 5821 5822 5823 // Управление курсором \ In segment CODE, align 4, keep-with-next 5824 void MoveUp(int i) 5825 { \ MoveUp: \ 00000000 10402DE9 PUSH {R4,LR} 5826 if(!itemFromDisp)return; \ 00000004 ........ LDR R4,??DataTable230 ;; i_rc \ 00000008 0010A0E1 MOV R1,R0 \ 0000000C 640494E5 LDR R0,[R4, #+1124] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 1080BD08 POPEQ {R4,PC} 5827 /* if(i) curpos-=2; 5828 else curpos--; 5829 if(curpos<1) { curpos=totalItems-1; curpage=sdiv(itemFromDisp,totalItems)+1; } 5830 if(curpage*itemFromDisp>curpos){ curpos++; curpage--; } */ 5831 5832 if(i) curpos-=2; \ 00000018 502494E5 LDR R2,[R4, #+1104] \ 0000001C 000051E3 CMP R1,#+0 \ 00000020 02204212 SUBNE R2,R2,#+2 5833 else curpos--; \ 00000024 01204202 SUBEQ R2,R2,#+1 \ 00000028 502484E5 STR R2,[R4, #+1104] 5834 5835 if(i && curpos+2==2) \ 0000002C 0120A0E3 MOV R2,#+1 \ 00000030 0200000A BEQ ??MoveUp_0 \ 00000034 501494E5 LDR R1,[R4, #+1104] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0B00000A BEQ ??MoveUp_1 5836 { 5837 curpos=0; 5838 curpage=1; 5839 } 5840 else 5841 if(curpos<0) \ ??MoveUp_0: \ 00000040 501494E5 LDR R1,[R4, #+1104] \ 00000044 000051E3 CMP R1,#+0 \ 00000048 0A00005A BPL ??MoveUp_2 5842 { 5843 curpos=totalItems-1; \ 0000004C 681494E5 LDR R1,[R4, #+1128] \ 00000050 013041E2 SUB R3,R1,#+1 \ 00000054 503484E5 STR R3,[R4, #+1104] 5844 5845 if(itemFromDisp!=totalItems) \ 00000058 010050E1 CMP R0,R1 \ 0000005C 0300000A BEQ ??MoveUp_1 5846 { 5847 curpage = /*(itemFromDisp/totalItems)+1;*/sdiv(itemFromDisp,totalItems)+1; \ 00000060 B80000EF SWI +184 \ 00000064 010080E2 ADD R0,R0,#+1 \ 00000068 6C0484E5 STR R0,[R4, #+1132] \ 0000006C 1080BDE8 POP {R4,PC} 5848 } 5849 else 5850 curpage = 1; \ ??MoveUp_1: \ 00000070 6C2484E5 STR R2,[R4, #+1132] \ 00000074 1080BDE8 POP {R4,PC} 5851 } \ ??MoveUp_2: \ 00000078 6C2494E5 LDR R2,[R4, #+1132] \ 0000007C 012042E2 SUB R2,R2,#+1 \ 00000080 900203E0 MUL R3,R0,R2 \ 00000084 030051E1 CMP R1,R3 5852 else 5853 { 5854 // if(i) curpos-=2; 5855 // else curpos--; 5856 if(curpos<(curpage-1)*itemFromDisp){ curpos++; curpage--; } \ 00000088 010081B2 ADDLT R0,R1,#+1 \ 0000008C 500484B5 STRLT R0,[R4, #+1104] \ 00000090 6C2484B5 STRLT R2,[R4, #+1132] \ 00000094 1080BDE8 POP {R4,PC} ;; return 5857 } 5858 } 5859 \ In segment CODE, align 4, keep-with-next 5860 void MoveDown(int i) 5861 { 5862 if(!totalItems)return; \ MoveDown: \ 00000000 ........ LDR R1,??DataTable230 ;; i_rc \ 00000004 682491E5 LDR R2,[R1, #+1128] \ 00000008 000052E3 CMP R2,#+0 \ 0000000C 1EFF2F01 BXEQ LR 5863 if(i) curpos+=2; \ 00000010 503491E5 LDR R3,[R1, #+1104] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 02008312 ADDNE R0,R3,#+2 5864 else curpos++; \ 0000001C 01008302 ADDEQ R0,R3,#+1 5865 if(curpos>=totalItems) { curpos=0; curpage=1; } 5866 if(curpage*itemFromDisp` \ 00000044 8620A0E1 LSL R2,R6,#+1 \ 00000048 02002DE9 PUSH {R1} \ 0000004C 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000050 0910A0E1 MOV R1,R9 \ 00000054 02002DE9 PUSH {R1} \ 00000058 0010A0E3 MOV R1,#+0 \ 0000005C 02002DE9 PUSH {R1} \ 00000060 02002DE9 PUSH {R1} \ 00000064 02002DE9 PUSH {R1} \ 00000068 A51F85E0 ADD R1,R5,R5, LSR #+31 \ 0000006C C13082E0 ADD R3,R2,R1, ASR #+1 \ 00000070 012047E2 SUB R2,R7,#+1 \ 00000074 A81F88E0 ADD R1,R8,R8, LSR #+31 \ 00000078 C11060E0 RSB R1,R0,R1, ASR #+1 \ 0000007C 0000A0E3 MOV R0,#+0 \ 00000080 500100EF SWI +336 5873 SetFontColor(clrWhite,transparent,0); \ 00000084 0020A0E3 MOV R2,#+0 \ 00000088 1400A0E3 MOV R0,#+20 \ 0000008C 8C0D80E3 ORR R0,R0,#0x2300 \ 00000090 041080E0 ADD R1,R0,R4 \ 00000094 0900A0E1 MOV R0,R9 \ 00000098 ........ _BLF SetFontColor,??SetFontColor??rA 5874 PrintText(ScreenW()/2+5,ScreenH()/2-FontH(FONT_MEDIUM+100)-5,prmsg,1,FONT_MEDIUM+100,1,1,0,0,256); \ 0000009C 898100EF SWI +33161 \ 000000A0 0050A0E1 MOV R5,R0 \ 000000A4 6800A0E3 MOV R0,#+104 \ 000000A8 ........ _BLF FontH,??FontH??rA \ 000000AC 0060A0E1 MOV R6,R0 \ 000000B0 888100EF SWI +33160 \ 000000B4 401FA0E3 MOV R1,#+256 \ 000000B8 02002DE9 PUSH {R1} \ 000000BC 0130A0E3 MOV R3,#+1 \ 000000C0 A00F80E0 ADD R0,R0,R0, LSR #+31 \ 000000C4 0010A0E3 MOV R1,#+0 \ 000000C8 02002DE9 PUSH {R1} \ 000000CC 02002DE9 PUSH {R1} \ 000000D0 0110A0E3 MOV R1,#+1 \ 000000D4 02002DE9 PUSH {R1} \ 000000D8 02002DE9 PUSH {R1} \ 000000DC 6810A0E3 MOV R1,#+104 \ 000000E0 02002DE9 PUSH {R1} \ 000000E4 D010A0E3 MOV R1,#+208 \ 000000E8 5C1D81E3 ORR R1,R1,#0x1700 \ 000000EC 042081E0 ADD R2,R1,R4 \ 000000F0 A51F85E0 ADD R1,R5,R5, LSR #+31 \ 000000F4 C11066E0 RSB R1,R6,R1, ASR #+1 \ 000000F8 051041E2 SUB R1,R1,#+5 \ 000000FC 0540A0E3 MOV R4,#+5 \ 00000100 C00084E0 ADD R0,R4,R0, ASR #+1 \ 00000104 ........ _BLF PrintText,??PrintText??rA \ 00000108 2CD08DE2 ADD SP,SP,#+44 5875 } \ 0000010C F083BDE8 POP {R4-R9,PC} ;; return \ ??PrintMessage_0: \ 00000110 ........ DC32 `?` 5876 5877 \ In segment CODE, align 4, keep-with-next 5878 void DrawContactList() 5879 { \ DrawContactList: \ 00000000 30402DE9 PUSH {R4,R5,LR} 5880 DrawRoundedFrame(0,hy,ScreenW()-1,ScreenH()-1,0,0,0,CLBackgrClr,CLBackgrClr); \ 00000004 ........ LDR R4,??DataTable230 ;; i_rc \ 00000008 898100EF SWI +33161 \ 0000000C 0050A0E1 MOV R5,R0 \ 00000010 888100EF SWI +33160 \ 00000014 90109FE5 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 581494E5 LDR R1,[R4, #+1112] \ 0000003C 012040E2 SUB R2,R0,#+1 \ 00000040 0000A0E3 MOV R0,#+0 \ 00000044 500100EF SWI +336 5881 // DrawRoundedFrame(0,hy,ScreenW()-1,ScreenH()-1,0,0,0,clrWhite,clrWhite); 5882 DrwImage(icons[ICON_BG],0,0,0,0); \ 00000048 0000A0E3 MOV R0,#+0 \ 0000004C 01002DE9 PUSH {R0} \ 00000050 0020A0E1 MOV R2,R0 \ 00000054 0010A0E1 MOV R1,R0 \ 00000058 880094E5 LDR R0,[R4, #+136] \ 0000005C 0030A0E3 MOV R3,#+0 \ 00000060 ........ BL DrwImage 5883 DrawSoftKeys(LG_MENU,clmenu_sk_r); \ 00000064 7800A0E3 MOV R0,#+120 \ 00000068 780D80E3 ORR R0,R0,#0x1E00 \ 0000006C 041080E0 ADD R1,R0,R4 \ 00000070 38009FE5 LDR R0,??DrawContactList_0+0x4 ;; `?` \ 00000074 ........ BL DrawSoftKeys 5884 DrawHeader(); \ 00000078 ........ BL DrawHeader 5885 DrawList(); \ 0000007C ........ BL DrawList 5886 if(strlen(prmsg)!=0 && PrintTimer!=0) PrintMessage(); \ 00000080 D000A0E3 MOV R0,#+208 \ 00000084 5C0D80E3 ORR R0,R0,#0x1700 \ 00000088 040080E0 ADD R0,R0,R4 \ 0000008C 1B0000EF SWI +27 \ 00000090 000050E3 CMP R0,#+0 \ 00000094 18D08DE2 ADD SP,SP,#+24 \ 00000098 AC029415 LDRNE R0,[R4, #+684] \ 0000009C 00005013 CMPNE R0,#+0 \ 000000A0 3080BD08 POPEQ {R4,R5,PC} \ 000000A4 ........ BL PrintMessage 5887 } \ 000000A8 3080BDE8 POP {R4,R5,PC} ;; return \ ??DrawContactList_0: \ 000000AC ........ DC32 CLBackgrClr \ 000000B0 ........ DC32 `?` 5888 5889 //int ShowLoadScreen=1; 5890 int lastKey = -1; 5891 int lastIsLongPress = 0; 5892 \ In segment CODE, align 4, keep-with-next 5893 int ClOnKey(GUI_MSG *msg) 5894 { \ ClOnKey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 5895 int key=msg->gbsmsg->submess; 5896 int isLongPress = 0; 5897 int ignore = 1; 5898 5899 CLIST *t; 5900 t=FindContactByN(curpos); \ 00000004 ........ LDR R6,??DataTable239 ;; i_rc 5901 5902 if (msg->gbsmsg->msg==LONG_PRESS) \ 00000008 ........ LDR R10,??DataTable232 ;; VIEW_MODE \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 C880A0E3 MOV R8,#+200 \ 00000018 085090E5 LDR R5,[R0, #+8] \ 0000001C 500496E5 LDR R0,[R6, #+1104] \ 00000020 508E88E3 ORR R8,R8,#0x500 \ 00000024 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000028 0070A0E1 MOV R7,R0 \ 0000002C 040094E5 LDR R0,[R4, #+4] \ 00000030 9510A0E3 MOV R1,#+149 \ 00000034 042090E5 LDR R2,[R0, #+4] \ 00000038 401F81E3 ORR R1,R1,#0x100 \ 0000003C 010052E1 CMP R2,R1 \ 00000040 4400001A BNE ??ClOnKey_1 5903 { 5904 isLongPress = (msg->gbsmsg->msg == LONG_PRESS); 5905 // Игнорим KEY_UP если уже обработали долгое нажатие этой же кнопки 5906 // Обрабатываем только KEY_UP и LONG_PRESS 5907 ignore = (lastKey == key && lastIsLongPress && msg->gbsmsg->msg == KEY_UP) 5908 || (msg->gbsmsg->msg != KEY_UP && msg->gbsmsg->msg != LONG_PRESS); \ 00000044 782496E5 LDR R2,[R6, #+1144] \ 00000048 0190A003 MOVEQ R9,#+1 \ 0000004C 0090A013 MOVNE R9,#+0 \ 00000050 050052E1 CMP R2,R5 \ 00000054 0500001A BNE ??ClOnKey_2 \ 00000058 7C2496E5 LDR R2,[R6, #+1148] \ 0000005C 000052E3 CMP R2,#+0 \ 00000060 0200000A BEQ ??ClOnKey_2 \ 00000064 042090E5 LDR R2,[R0, #+4] \ 00000068 650F52E3 CMP R2,#+404 \ 0000006C 0600000A BEQ ??ClOnKey_3 \ ??ClOnKey_2: \ 00000070 042090E5 LDR R2,[R0, #+4] \ 00000074 650F52E3 CMP R2,#+404 \ 00000078 01005211 CMPNE R2,R1 \ 0000007C 0200001A BNE ??ClOnKey_3 5909 if (!ignore) 5910 LongPressAction(t,msg->gbsmsg->submess); \ 00000080 081090E5 LDR R1,[R0, #+8] \ 00000084 0700A0E1 MOV R0,R7 \ 00000088 ........ BL LongPressAction 5911 5912 lastKey = key; \ ??ClOnKey_3: \ 0000008C 785486E5 STR R5,[R6, #+1144] 5913 lastIsLongPress = isLongPress; \ 00000090 7C9486E5 STR R9,[R6, #+1148] 5914 5915 switch(msg->gbsmsg->submess) \ 00000094 040094E5 LDR R0,[R4, #+4] \ 00000098 080090E5 LDR R0,[R0, #+8] \ 0000009C 3B0050E2 SUBS R0,R0,#+59 \ 000000A0 0600000A BEQ ??ClOnKey_4 \ 000000A4 010050E2 SUBS R0,R0,#+1 \ 000000A8 0A00000A BEQ ??ClOnKey_5 \ 000000AC 010050E2 SUBS R0,R0,#+1 \ 000000B0 1600000A BEQ ??ClOnKey_6 \ 000000B4 010050E2 SUBS R0,R0,#+1 \ 000000B8 0E00000A BEQ ??ClOnKey_7 \ 000000BC 190000EA B ??ClOnKey_8 5916 { 5917 case UP_BUTTON: if(VIEW_MODE) MoveUp(1); else MoveUp2(1)/*MoveUp(0)*/; break; \ ??ClOnKey_4: \ 000000C0 00009AE5 LDR R0,[R10, #+0] \ 000000C4 000050E3 CMP R0,#+0 \ 000000C8 0100A0E3 MOV R0,#+1 \ 000000CC 1400000A BEQ ??ClOnKey_9 \ ??ClOnKey_10: \ 000000D0 ........ BL MoveUp \ 000000D4 130000EA B ??ClOnKey_8 5918 case DOWN_BUTTON: if(VIEW_MODE) MoveDown(1); else MoveDown2(1)/*MoveDown(0)*/; break; \ ??ClOnKey_5: \ 000000D8 00009AE5 LDR R0,[R10, #+0] \ 000000DC 000050E3 CMP R0,#+0 \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 0100000A BEQ ??ClOnKey_11 \ ??ClOnKey_12: \ 000000E8 ........ BL MoveDown \ 000000EC 0D0000EA B ??ClOnKey_8 \ ??ClOnKey_11: \ 000000F0 ........ BL MoveDown2 \ 000000F4 0B0000EA B ??ClOnKey_8 5919 case RIGHT_BUTTON: if(VIEW_MODE) MoveDown(0); else MoveDown2(2)/*MoveDown(1)*/; break; \ ??ClOnKey_7: \ 000000F8 00009AE5 LDR R0,[R10, #+0] \ 000000FC 000050E3 CMP R0,#+0 \ 00000100 0000A013 MOVNE R0,#+0 \ 00000104 F7FFFF1A BNE ??ClOnKey_12 \ 00000108 0200A0E3 MOV R0,#+2 \ 0000010C F7FFFFEA B ??ClOnKey_11 5920 case LEFT_BUTTON: if(VIEW_MODE) MoveUp(0); else MoveUp2(2)/*MoveUp(1)*/; break; \ ??ClOnKey_6: \ 00000110 00009AE5 LDR R0,[R10, #+0] \ 00000114 000050E3 CMP R0,#+0 \ 00000118 0000A013 MOVNE R0,#+0 \ 0000011C EBFFFF1A BNE ??ClOnKey_10 \ 00000120 0200A0E3 MOV R0,#+2 \ ??ClOnKey_9: \ 00000124 ........ BL MoveUp2 5921 } 5922 5923 int key=msg->gbsmsg->submess; \ ??ClOnKey_8: \ 00000128 040094E5 LDR R0,[R4, #+4] \ 0000012C 080090E5 LDR R0,[R0, #+8] 5924 if ((key>='0')&&(key<='9')) \ 00000130 300050E3 CMP R0,#+48 \ 00000134 070000BA BLT ??ClOnKey_1 \ 00000138 3A0050E3 CMP R0,#+58 \ 0000013C 050000AA BGE ??ClOnKey_1 5925 { 5926 ClearContactT9Key(); \ 00000140 2010A0E3 MOV R1,#+32 \ 00000144 060088E0 ADD R0,R8,R6 \ 00000148 1D0100EF SWI +285 5927 RecountMenu(NULL,1); \ 0000014C 0110A0E3 MOV R1,#+1 \ 00000150 0000A0E3 MOV R0,#+0 \ 00000154 ........ BL RecountMenu 5928 } 5929 } 5930 5931 5932 if (msg->gbsmsg->msg==KEY_DOWN) \ ??ClOnKey_1: \ 00000158 041094E5 LDR R1,[R4, #+4] \ 0000015C 9390A0E3 MOV R9,#+147 \ 00000160 040091E5 LDR R0,[R1, #+4] \ 00000164 409F89E3 ORR R9,R9,#0x100 \ 00000168 090050E1 CMP R0,R9 \ 0000016C FF00001A BNE ??ClOnKey_13 5933 { 5934 switch(msg->gbsmsg->submess) \ 00000170 081091E5 LDR R1,[R1, #+8] \ 00000174 AC2296E5 LDR R2,[R6, #+684] \ 00000178 083097E5 LDR R3,[R7, #+8] \ 0000017C 00C09AE5 LDR R12,[R10, #+0] \ 00000180 D000A0E3 MOV R0,#+208 \ 00000184 5C0D80E3 ORR R0,R0,#0x1700 \ 00000188 060080E0 ADD R0,R0,R6 \ 0000018C 01A0A0E3 MOV R10,#+1 \ 00000190 00B0A0E3 MOV R11,#+0 \ 00000194 011041E2 SUB R1,R1,#+1 \ 00000198 3D0051E3 CMP R1,#+61 \ 0000019C A700008A BHI ??ClOnKey_14 \ 000001A0 01EF8FE2 ADR LR,??ClOnKey_0 \ 000001A4 01E0DEE7 LDRB LR,[LR, R1] \ 000001A8 0EF18FE0 ADD PC,PC,LR, LSL #+2 \ ??ClOnKey_0: \ 000001AC 27A4A42F DC8 +39,+164,+164,+47 \ 000001B0 A4A4A4A4 DC8 +164,+164,+164,+164 \ 000001B4 A4A4852F DC8 +164,+164,+133,+47 \ 000001B8 8A90A4A4 DC8 +138,+144,+164,+164 \ 000001BC A4A4A4A4 DC8 +164,+164,+164,+164 \ 000001C0 A4A4A4A4 DC8 +164,+164,+164,+164 \ 000001C4 A43BA4A4 DC8 +164,+59,+164,+164 \ 000001C8 A4A4A4A4 DC8 +164,+164,+164,+164 \ 000001CC A4A4A4A4 DC8 +164,+164,+164,+164 \ 000001D0 A4A4A4A4 DC8 +164,+164,+164,+164 \ 000001D4 A464A4A4 DC8 +164,+100,+164,+164 \ 000001D8 A4A4A4A4 DC8 +164,+164,+164,+164 \ 000001DC A4A4A4A4 DC8 +164,+164,+164,+164 \ 000001E0 A4A4A4A4 DC8 +164,+164,+164,+164 \ 000001E4 A4A40F16 DC8 +164,+164,+15,+22 \ 000001E8 221D0000 DC8 +34,+29,+0,+0 5935 { 5936 case UP_BUTTON: if(VIEW_MODE) MoveUp(1); else /*MoveUp(0)*/MoveUp2(1); break; \ ??ClOnKey_15: \ 000001EC 00005CE3 CMP R12,#+0 \ 000001F0 0100A0E3 MOV R0,#+1 \ 000001F4 0100000A BEQ ??ClOnKey_16 \ ??ClOnKey_17: \ 000001F8 ........ BL MoveUp \ 000001FC 8F0000EA B ??ClOnKey_14 \ ??ClOnKey_16: \ 00000200 ........ BL MoveUp2 \ 00000204 8D0000EA B ??ClOnKey_14 5937 case DOWN_BUTTON: if(VIEW_MODE) MoveDown(1); else /*MoveDown(0)*/MoveDown2(1); break; \ ??ClOnKey_18: \ 00000208 00005CE3 CMP R12,#+0 \ 0000020C 0100A0E3 MOV R0,#+1 \ 00000210 0100000A BEQ ??ClOnKey_19 \ ??ClOnKey_20: \ 00000214 ........ BL MoveDown \ 00000218 880000EA B ??ClOnKey_14 \ ??ClOnKey_19: \ 0000021C ........ BL MoveDown2 \ 00000220 860000EA B ??ClOnKey_14 5938 case RIGHT_BUTTON: if(VIEW_MODE) MoveDown(0); else MoveDown2(2)/*MoveDown(1)*/; break; \ ??ClOnKey_21: \ 00000224 00005CE3 CMP R12,#+0 \ 00000228 0000A013 MOVNE R0,#+0 \ 0000022C F8FFFF1A BNE ??ClOnKey_20 \ 00000230 0200A0E3 MOV R0,#+2 \ 00000234 F8FFFFEA B ??ClOnKey_19 5939 case LEFT_BUTTON: if(VIEW_MODE) MoveUp(0); else MoveUp2(2)/*MoveUp(1)*/; break; \ ??ClOnKey_22: \ 00000238 00005CE3 CMP R12,#+0 \ 0000023C 0000A013 MOVNE R0,#+0 \ 00000240 ECFFFF1A BNE ??ClOnKey_17 \ 00000244 0200A0E3 MOV R0,#+2 \ 00000248 ECFFFFEA B ??ClOnKey_16 5940 case LEFT_SOFT: 5941 { 5942 extern void CreateMainMenu(); 5943 // DoScreen(); 5944 if(PrintTimer) \ ??ClOnKey_23: \ 0000024C 000052E3 CMP R2,#+0 \ 00000250 0300000A BEQ ??ClOnKey_24 5945 { 5946 PrintTimer=0; \ ??ClOnKey_25: \ 00000254 ACB286E5 STR R11,[R6, #+684] 5947 zeromem(prmsg,256); \ 00000258 401FA0E3 MOV R1,#+256 \ 0000025C 1D0100EF SWI +285 \ 00000260 760000EA B ??ClOnKey_14 5948 } 5949 else 5950 CreateMainMenu(); \ ??ClOnKey_24: \ 00000264 ........ _BLF CreateMainMenu,??CreateMainMenu??rA \ 00000268 740000EA B ??ClOnKey_14 5951 // ShowMainMenu(); 5952 }break; 5953 case RIGHT_SOFT: 5954 case RED_BUTTON: 5955 if(PrintTimer) \ ??ClOnKey_26: \ 0000026C 000052E3 CMP R2,#+0 \ 00000270 F7FFFF1A BNE ??ClOnKey_25 5956 { 5957 PrintTimer=0; 5958 zeromem(prmsg,256); 5959 } 5960 else if (strlen(ContactT9Key)) \ 00000274 060088E0 ADD R0,R8,R6 \ 00000278 1B0000EF SWI +27 \ 0000027C 000050E3 CMP R0,#+0 \ 00000280 0300000A BEQ ??ClOnKey_27 5961 { 5962 BackSpaceContactT9(); \ 00000284 ........ BL BackSpaceContactT9 5963 RecountMenu(NULL,1); \ 00000288 0110A0E3 MOV R1,#+1 \ 0000028C 0B00A0E1 MOV R0,R11 \ 00000290 480000EA B ??ClOnKey_28 5964 return(-1); 5965 } 5966 5967 else 5968 ShowLoadScreen=1;//return 1; \ ??ClOnKey_27: \ 00000294 4CA486E5 STR R10,[R6, #+1100] \ 00000298 680000EA B ??ClOnKey_14 5969 break; 5970 case ENTER_BUTTON: 5971 { 5972 if(PrintTimer) \ ??ClOnKey_29: \ 0000029C 000052E3 CMP R2,#+0 \ 000002A0 0300000A BEQ ??ClOnKey_30 5973 { 5974 PrintTimer=0; \ 000002A4 ACB286E5 STR R11,[R6, #+684] 5975 zeromem(prmsg,256); \ 000002A8 401FA0E3 MOV R1,#+256 \ 000002AC 1D0100EF SWI +285 \ 000002B0 200000EA B ??ClOnKey_31 5976 } 5977 else 5978 if(t) \ ??ClOnKey_30: \ 000002B4 000057E3 CMP R7,#+0 \ 000002B8 3F00000A BEQ ??ClOnKey_32 5979 { 5980 if (t->isgroup) \ 000002BC 000053E3 CMP R3,#+0 \ 000002C0 0500000A BEQ ??ClOnKey_33 5981 { 5982 t->state^=0xFFFF; \ 000002C4 B405D7E1 LDRH R0,[R7, #+84] \ 000002C8 FF10A0E3 MOV R1,#+255 \ 000002CC FF1C81E3 ORR R1,R1,#0xFF00 \ 000002D0 000021E0 EOR R0,R1,R0 \ 000002D4 B405C7E1 STRH R0,[R7, #+84] 5983 RecountMenu(t,1); \ 000002D8 340000EA B ??ClOnKey_34 5984 return(-1); 5985 } 5986 if (strlen(ContactT9Key)) \ ??ClOnKey_33: \ 000002DC 060088E0 ADD R0,R8,R6 \ 000002E0 1B0000EF SWI +27 \ 000002E4 000050E3 CMP R0,#+0 \ 000002E8 0500000A BEQ ??ClOnKey_35 5987 { 5988 ClearContactT9Key(); \ 000002EC 2010A0E3 MOV R1,#+32 \ 000002F0 060088E0 ADD R0,R8,R6 \ 000002F4 1D0100EF SWI +285 5989 RecountMenu(NULL,1); \ 000002F8 0110A0E3 MOV R1,#+1 \ 000002FC 0B00A0E1 MOV R0,R11 \ 00000300 ........ BL RecountMenu 5990 } 5991 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<0) \ ??ClOnKey_37: \ 00000340 ........ _BLF CountContacts,??CountContacts??rA \ 00000344 010050E3 CMP R0,#+1 \ 00000348 3C0000BA BLT ??ClOnKey_14 \ 0000034C 020000EA B ??ClOnKey_38 5998 { 5999 while(t=(CLIST *)(t->next)) 6000 { 6001 if (t->isunread) goto doit; \ ??ClOnKey_39: \ 00000350 900097E5 LDR R0,[R7, #+144] \ 00000354 000050E3 CMP R0,#+0 \ 00000358 0E00001A BNE ??ClOnKey_40 6002 } \ ??ClOnKey_38: \ 0000035C 007097E5 LDR R7,[R7, #+0] \ 00000360 000057E3 CMP R7,#+0 \ 00000364 F9FFFF1A BNE ??ClOnKey_39 6003 t=(CLIST *)(&cltop); \ 00000368 710F48E2 SUB R0,R8,#+452 \ 0000036C 067080E0 ADD R7,R0,R6 \ 00000370 020000EA B ??ClOnKey_41 6004 while(t=(CLIST *)(t->next)) 6005 { 6006 if (t->isunread) goto doit; \ ??ClOnKey_42: \ 00000374 900097E5 LDR R0,[R7, #+144] \ 00000378 000050E3 CMP R0,#+0 \ 0000037C 0500001A BNE ??ClOnKey_40 6007 } \ ??ClOnKey_41: \ 00000380 007097E5 LDR R7,[R7, #+0] \ 00000384 000057E3 CMP R7,#+0 \ 00000388 F9FFFF1A BNE ??ClOnKey_42 6008 if (t && Is_Show_Groups) 6009 { 6010 if (!t->isgroup) t=FindGroupByID(t->group); 6011 if (t && !t->state) 6012 { 6013 t->state^=0xFFFF; 6014 goto does; 6015 } 6016 } 6017 6018 curpage=1; \ 0000038C 6CA486E5 STR R10,[R6, #+1132] 6019 curpos=0; \ 00000390 50B486E5 STR R11,[R6, #+1104] 6020 clstartItem=0; \ 00000394 74B486E5 STR R11,[R6, #+1140] 6021 /* while(t=(CLIST *)(t->next)) 6022 { 6023 if (t->isactive) goto doit; 6024 } 6025 t=(CLIST *)(&cltop); 6026 6027 while(t=(CLIST *)(t->next)) 6028 { 6029 if (t->isactive) goto doit; 6030 } 6031 return(-1);*/ 6032 doit: 6033 { 6034 CLIST *g=FindGroupByID(t->group); \ ??ClOnKey_40: \ 00000398 100097E5 LDR R0,[R7, #+16] \ 0000039C ........ _BLF FindGroupByID,??FindGroupByID??rA 6035 if (g) \ 000003A0 000050E3 CMP R0,#+0 6036 { 6037 if (g->state) \ 000003A4 B415D011 LDRHNE R1,[R0, #+84] \ 000003A8 00005113 CMPNE R1,#+0 6038 { 6039 g->state=0; \ 000003AC B4B5C011 STRHNE R11,[R0, #+84] 6040 } 6041 } 6042 } 6043 does: 6044 RecountMenu(t,1); \ ??ClOnKey_34: \ 000003B0 0110A0E3 MOV R1,#+1 \ 000003B4 0700A0E1 MOV R0,R7 \ ??ClOnKey_28: \ 000003B8 ........ BL RecountMenu 6045 return(-1); \ ??ClOnKey_32: \ 000003BC 00006AE2 RSB R0,R10,#+0 \ 000003C0 F08FBDE8 POP {R4-R11,PC} 6046 } 6047 break; 6048 case GREEN_BUTTON: 6049 { 6050 // IsActiveUp=!IsActiveUp; 6051 // RecountMenu(NULL,1); 6052 if(!t->isgroup) \ ??ClOnKey_43: \ 000003C4 000053E3 CMP R3,#+0 \ 000003C8 1C00001A BNE ??ClOnKey_14 6053 CreateContactMenu(t); \ 000003CC 0700A0E1 MOV R0,R7 \ 000003D0 ........ BL CreateContactMenu \ 000003D4 190000EA B ??ClOnKey_14 6054 } 6055 break; 6056 // case RED_BUTTON: return (1); 6057 case VOL_UP_BUTTON: 6058 #ifdef NEWSGOLD 6059 if(isVolUpButton) \ ??ClOnKey_44: \ 000003D8 CC019FE5 LDR R0,??ClOnKey_45 ;; isVolUpButton \ 000003DC 000090E5 LDR R0,[R0, #+0] \ 000003E0 000050E3 CMP R0,#+0 \ 000003E4 1500000A BEQ ??ClOnKey_14 6060 CreateScreenSelectGUI(); \ 000003E8 ........ _BLF CreateScreenSelectGUI,??CreateScreenSelectGUI??rA \ 000003EC 130000EA B ??ClOnKey_14 6061 #endif 6062 break; 6063 case VOL_DOWN_BUTTON: 6064 { 6065 if(isVolDownButton) \ ??ClOnKey_46: \ 000003F0 B8019FE5 LDR R0,??ClOnKey_45+0x4 ;; isVolDownButton \ 000003F4 000090E5 LDR R0,[R0, #+0] \ 000003F8 000050E3 CMP R0,#+0 \ 000003FC 0F00000A BEQ ??ClOnKey_14 6066 { 6067 if(!away_m) \ 00000400 840396E5 LDR R0,[R6, #+900] \ 00000404 000050E3 CMP R0,#+0 \ 00000408 0300001A BNE ??ClOnKey_47 6068 { 6069 away_m=!away_m; \ 0000040C 84A386E5 STR R10,[R6, #+900] 6070 main_d=1; \ 00000410 90A286E5 STR R10,[R6, #+656] 6071 InputAwayMsg(); \ 00000414 ........ BL InputAwayMsg \ 00000418 080000EA B ??ClOnKey_14 6072 } 6073 else 6074 { 6075 msg_away_timer=0; 6076 away_m=!away_m; 6077 if(change_back_status) \ ??ClOnKey_47: \ 0000041C 8C0396E5 LDR R0,[R6, #+908] \ 00000420 80B386E5 STR R11,[R6, #+896] \ 00000424 84B386E5 STR R11,[R6, #+900] \ 00000428 000050E3 CMP R0,#+0 \ 0000042C 0300000A BEQ ??ClOnKey_14 6078 { 6079 CurrentStatus=status_rem; \ 00000430 880396E5 LDR R0,[R6, #+904] \ 00000434 700386E5 STR R0,[R6, #+880] 6080 set_my_status(); \ 00000438 ........ BL set_my_status 6081 change_back_status=0; \ 0000043C 8CB386E5 STR R11,[R6, #+908] 6082 } 6083 } 6084 } 6085 } 6086 break; 6087 } 6088 6089 if (key=='#' && (CountContacts()>0))//Если есть хоть один контакт то выполнять,иначе возможен пикофф \ ??ClOnKey_14: \ 00000440 230055E3 CMP R5,#+35 \ 00000444 4900001A BNE ??ClOnKey_13 \ 00000448 ........ _BLF CountContacts,??CountContacts??rA \ 0000044C 010050E3 CMP R0,#+1 \ 00000450 330000BA BLT ??ClOnKey_48 6090 { 6091 if(ActionResh) \ 00000454 58019FE5 LDR R0,??ClOnKey_45+0x8 ;; ActionResh \ 00000458 000090E5 LDR R0,[R0, #+0] \ 0000045C 000050E3 CMP R0,#+0 \ 00000460 1B00001A BNE ??ClOnKey_49 6092 { 6093 while(t=(CLIST *)(t->next)) 6094 { 6095 if (t->isactive) goto doit4; 6096 } 6097 t=(CLIST *)(&cltop); 6098 while(t=(CLIST *)(t->next)) 6099 { 6100 if (t->isactive) goto doit4; 6101 } 6102 return(-1); 6103 doit4: 6104 { 6105 CLIST *g=FindGroupByID(t->group); 6106 if (g) 6107 { 6108 if (g->state) 6109 { 6110 g->state=0; 6111 } 6112 } 6113 } 6114 RecountMenu(t,1); 6115 } 6116 else 6117 { 6118 if(t->log && !(t->just_now))//очистить лог \ 00000464 A00097E5 LDR R0,[R7, #+160] \ 00000468 000050E3 CMP R0,#+0 \ 0000046C 0600000A BEQ ??ClOnKey_50 \ 00000470 740097E5 LDR R0,[R7, #+116] \ 00000474 000050E3 CMP R0,#+0 \ 00000478 0300001A BNE ??ClOnKey_50 6119 { 6120 FreeLOGQ(&t->log); \ 0000047C A00087E2 ADD R0,R7,#+160 \ 00000480 ........ BL FreeLOGQ 6121 t->msg_count=0; \ 00000484 B0B087E5 STR R11,[R7, #+176] 6122 t->isactive=0; \ 00000488 ACB087E5 STR R11,[R7, #+172] 6123 } 6124 6125 if(t->just_now)//если контакт тока зашел,то обнуляем \ ??ClOnKey_50: \ 0000048C 740097E5 LDR R0,[R7, #+116] \ 00000490 000050E3 CMP R0,#+0 \ 00000494 0300000A BEQ ??ClOnKey_51 6126 { 6127 CLIST *tt; 6128 tt=FindContactByUin(t->uin); \ 00000498 0C0097E5 LDR R0,[R7, #+12] \ 0000049C ........ _BLF FindContactByUin,??FindContactByUin??rA 6129 tt->just_now=0; \ 000004A0 74B080E5 STR R11,[R0, #+116] 6130 tt->just_i=0; \ 000004A4 78B080E5 STR R11,[R0, #+120] 6131 } 6132 6133 if(t->uin==UIN)//если нажали на Loopback, то обнуляем все just_now'ы \ ??ClOnKey_51: \ 000004A8 ........ LDR R1,??DataTable237 ;; UIN \ 000004AC 0C0097E5 LDR R0,[R7, #+12] \ 000004B0 001091E5 LDR R1,[R1, #+0] \ 000004B4 010050E1 CMP R0,R1 \ 000004B8 2200001A BNE ??ClOnKey_52 6134 { 6135 CLIST *tt; 6136 tt=(CLIST *)(&cltop); \ 000004BC 710F48E2 SUB R0,R8,#+452 \ 000004C0 060080E0 ADD R0,R0,R6 \ 000004C4 1C0000EA B ??ClOnKey_53 \ ??ClOnKey_54: \ 000004C8 AC0097E5 LDR R0,[R7, #+172] \ 000004CC 000050E3 CMP R0,#+0 \ 000004D0 0A00001A BNE ??ClOnKey_55 \ ??ClOnKey_49: \ 000004D4 007097E5 LDR R7,[R7, #+0] \ 000004D8 000057E3 CMP R7,#+0 \ 000004DC F9FFFF1A BNE ??ClOnKey_54 \ 000004E0 710F48E2 SUB R0,R8,#+452 \ 000004E4 067080E0 ADD R7,R0,R6 \ ??ClOnKey_56: \ 000004E8 007097E5 LDR R7,[R7, #+0] \ 000004EC 000057E3 CMP R7,#+0 \ 000004F0 B1FFFF0A BEQ ??ClOnKey_32 \ 000004F4 AC0097E5 LDR R0,[R7, #+172] \ 000004F8 000050E3 CMP R0,#+0 \ 000004FC F9FFFF0A BEQ ??ClOnKey_56 \ ??ClOnKey_55: \ 00000500 100097E5 LDR R0,[R7, #+16] \ 00000504 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000508 000050E3 CMP R0,#+0 \ 0000050C B415D011 LDRHNE R1,[R0, #+84] \ 00000510 00005113 CMPNE R1,#+0 \ 00000514 B4B5C011 STRHNE R11,[R0, #+84] \ 00000518 0110A0E3 MOV R1,#+1 \ 0000051C 0700A0E1 MOV R0,R7 \ ??ClOnKey_57: \ 00000520 ........ BL RecountMenu 6137 while(tt=(CLIST *)(tt->next)) 6138 { 6139 if(tt->just_now){ tt->just_now=0; tt->just_i=0; } 6140 } 6141 } 6142 if(strlen(ContactT9Key)) ClearContactT9Key(); 6143 RecountMenu(NULL,0); 6144 } 6145 } 6146 } 6147 6148 if ((key>='0')&&(key<='9') && msg->gbsmsg->msg==KEY_DOWN) 6149 { 6150 AddContactT9Key(key); 6151 RecountMenu(NULL,1); 6152 return(-1); 6153 } 6154 return 0; \ ??ClOnKey_48: \ 00000524 0000A0E3 MOV R0,#+0 \ 00000528 F08FBDE8 POP {R4-R11,PC} ;; return \ ??ClOnKey_58: \ 0000052C 741090E5 LDR R1,[R0, #+116] \ 00000530 000051E3 CMP R1,#+0 \ 00000534 74B08015 STRNE R11,[R0, #+116] \ 00000538 78B08015 STRNE R11,[R0, #+120] \ ??ClOnKey_53: \ 0000053C 000090E5 LDR R0,[R0, #+0] \ 00000540 000050E3 CMP R0,#+0 \ 00000544 F8FFFF1A BNE ??ClOnKey_58 \ ??ClOnKey_52: \ 00000548 060088E0 ADD R0,R8,R6 \ 0000054C 1B0000EF SWI +27 \ 00000550 000050E3 CMP R0,#+0 \ 00000554 0200000A BEQ ??ClOnKey_59 \ 00000558 2010A0E3 MOV R1,#+32 \ 0000055C 060088E0 ADD R0,R8,R6 \ 00000560 1D0100EF SWI +285 \ ??ClOnKey_59: \ 00000564 0010A0E3 MOV R1,#+0 \ 00000568 0100A0E1 MOV R0,R1 \ 0000056C EBFFFFEA B ??ClOnKey_57 \ ??ClOnKey_13: \ 00000570 300055E3 CMP R5,#+48 \ 00000574 EAFFFFBA BLT ??ClOnKey_48 \ 00000578 3A0055E3 CMP R5,#+58 \ 0000057C E8FFFFAA BGE ??ClOnKey_48 \ 00000580 040094E5 LDR R0,[R4, #+4] \ 00000584 040090E5 LDR R0,[R0, #+4] \ 00000588 090050E1 CMP R0,R9 \ 0000058C E4FFFF1A BNE ??ClOnKey_48 \ 00000590 0500A0E1 MOV R0,R5 \ 00000594 ........ BL AddContactT9Key \ 00000598 0110A0E3 MOV R1,#+1 \ 0000059C 0000A0E3 MOV R0,#+0 \ 000005A0 ........ BL RecountMenu \ 000005A4 0000E0E3 MVN R0,#+0 \ 000005A8 F08FBDE8 POP {R4-R11,PC} \ ??ClOnKey_45: \ 000005AC ........ DC32 isVolUpButton \ 000005B0 ........ DC32 isVolDownButton \ 000005B4 ........ DC32 ActionResh 6155 } 6156 6157 #ifdef ICONBAR 6158 #else 6159 #ifdef ELKA 6160 #undef YDISP 6161 #define YDISP 24 6162 #endif 6163 #endif 6164 6165 6166 /************************************************************************************************/ 6167 6168 \ In segment CODE, align 4, keep-with-next 6169 void DrawLoadScreen(MAIN_GUI *data) 6170 { \ DrawLoadScreen: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 24D04DE2 SUB SP,SP,#+36 6171 int scr_w=ScreenW(); 6172 int scr_h=ScreenH(); 6173 int pos_status;//2026rev 6174 int pm = pictures_max, pl = pictures_loaded;//2026rev 6175 RECT rc=PBRECT; 6176 DrawRectangle(0,YDISP,scr_w-1,scr_h-1,0, GetPaletteAdrByColorIndex(1), GetPaletteAdrByColorIndex(1)); 6177 6178 // if(!USE_ADD_UIN)//Если не используем доп.уины 6179 //{ 6180 // DrawImg(0,0,S_ICONS[ICON_LOGO]); 6181 DrwImage(icons[ICON_LOGO],0,0,0,0); 6182 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //by BoBa 10.07 6183 if(IsShowInfo) \ 00000008 ........ LDR R9,??DataTable235 ;; `?` \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 888100EF SWI +33160 \ 00000014 08008DE5 STR R0,[SP, #+8] \ 00000018 898100EF SWI +33161 \ 0000001C 64189FE5 LDR R1,??DrawLoadScreen_0 ;; pictures_loaded \ 00000020 04008DE5 STR R0,[SP, #+4] \ 00000024 60089FE5 LDR R0,??DrawLoadScreen_0+0x4 ;; pictures_max \ 00000028 005090E5 LDR R5,[R0, #+0] \ 0000002C 001091E5 LDR R1,[R1, #+0] \ 00000030 58089FE5 LDR R0,??DrawLoadScreen_0+0x8 ;; PBRECT \ 00000034 00108DE5 STR R1,[SP, #+0] \ 00000038 F0A0D0E1 LDRSH R10,[R0, #+0] \ 0000003C F2B0D0E1 LDRSH R11,[R0, #+2] \ 00000040 F460D0E1 LDRSH R6,[R0, #+4] \ 00000044 F670D0E1 LDRSH R7,[R0, #+6] \ 00000048 0100A0E3 MOV R0,#+1 \ 0000004C 2E0100EF SWI +302 \ 00000050 0080A0E1 MOV R8,R0 \ 00000054 0100A0E3 MOV R0,#+1 \ 00000058 2E0100EF SWI +302 \ 0000005C 00012DE9 PUSH {R8} \ 00000060 ........ LDR R8,??DataTable239 ;; i_rc \ 00000064 01002DE9 PUSH {R0} \ 00000068 1810A0E3 MOV R1,#+24 \ 0000006C 0000A0E3 MOV R0,#+0 \ 00000070 01002DE9 PUSH {R0} \ 00000074 10009DE5 LDR R0,[SP, #+16] \ 00000078 013040E2 SUB R3,R0,#+1 \ 0000007C 14009DE5 LDR R0,[SP, #+20] \ 00000080 012040E2 SUB R2,R0,#+1 \ 00000084 0000A0E3 MOV R0,#+0 \ 00000088 B40100EF SWI +436 \ 0000008C 0000A0E3 MOV R0,#+0 \ 00000090 01002DE9 PUSH {R0} \ 00000094 0030A0E3 MOV R3,#+0 \ 00000098 0020A0E1 MOV R2,R0 \ 0000009C 0010A0E1 MOV R1,R0 \ 000000A0 580098E5 LDR R0,[R8, #+88] \ 000000A4 ........ BL DrwImage \ 000000A8 E4279FE5 LDR R2,??DrawLoadScreen_0+0xC ;; IsShowInfo \ 000000AC EC0398E5 LDR R0,[R8, #+1004] \ 000000B0 F01398E5 LDR R1,[R8, #+1008] \ 000000B4 002092E5 LDR R2,[R2, #+0] \ 000000B8 10D08DE2 ADD SP,SP,#+16 \ 000000BC 000052E3 CMP R2,#+0 \ 000000C0 1A00000A BEQ ??DrawLoadScreen_1 6184 { 6185 wsprintf(data->ws1,LG_GRSTATESTRING,connect_state,RXstate,RX,TX,sendq_l,hostname,logmsg); \ 000000C4 3820A0E3 MOV R2,#+56 \ 000000C8 702D82E3 ORR R2,R2,#0x1C00 \ 000000CC 082082E0 ADD R2,R2,R8 \ 000000D0 04002DE9 PUSH {R2} \ 000000D4 8820A0E3 MOV R2,#+136 \ 000000D8 7C2D82E3 ORR R2,R2,#0x1F00 \ 000000DC 082082E0 ADD R2,R2,R8 \ 000000E0 04002DE9 PUSH {R2} \ 000000E4 F42398E5 LDR R2,[R8, #+1012] \ 000000E8 04002DE9 PUSH {R2} \ 000000EC 02002DE9 PUSH {R1} \ 000000F0 01002DE9 PUSH {R0} \ 000000F4 D83398E5 LDR R3,[R8, #+984] \ 000000F8 DC2398E5 LDR R2,[R8, #+988] \ 000000FC 340094E5 LDR R0,[R4, #+52] \ 00000100 301089E2 ADD R1,R9,#+48 \ 00000104 240100EF SWI +292 6186 wsprintf(data->ws2,logmsg2); \ 00000108 3800A0E3 MOV R0,#+56 \ 0000010C 740D80E3 ORR R0,R0,#0x1D00 \ 00000110 081080E0 ADD R1,R0,R8 \ 00000114 380094E5 LDR R0,[R4, #+56] \ 00000118 240100EF SWI +292 6187 wstrcat(data->ws1,data->ws2); \ 0000011C 381094E5 LDR R1,[R4, #+56] \ 00000120 340094E5 LDR R0,[R4, #+52] \ 00000124 210100EF SWI +289 \ 00000128 14D08DE2 ADD SP,SP,#+20 \ 0000012C 040000EA B ??DrawLoadScreen_2 6188 } 6189 else 6190 { 6191 wsprintf(data->ws1,"State: %d, RXstate: %d",connect_state,RXstate); \ ??DrawLoadScreen_1: \ 00000130 D83398E5 LDR R3,[R8, #+984] \ 00000134 DC2398E5 LDR R2,[R8, #+988] \ 00000138 340094E5 LDR R0,[R4, #+52] \ 0000013C 681089E2 ADD R1,R9,#+104 \ 00000140 240100EF SWI +292 6192 } 6193 6194 if(pm != pl) \ ??DrawLoadScreen_2: \ 00000144 00009DE5 LDR R0,[SP, #+0] \ 00000148 000055E1 CMP R5,R0 \ 0000014C 2E00000A BEQ ??DrawLoadScreen_3 6195 { 6196 /* DrawRectangle(0,scr_h-4-2*GetFontYSIZE(FONT_SMALL_BOLD),scr_w-1,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-2,0, 6197 GetPaletteAdrByColorIndex(0), 6198 GetPaletteAdrByColorIndex(0));*/ 6199 // pos_status = ((scr_w-1) * pl) / pm; 6200 /* DrawRectangle(1,scr_h-4-2*GetFontYSIZE(FONT_SMALL_BOLD)+1,pos_status,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-3,0, 6201 GetPaletteAdrByColorIndex(14), 6202 GetPaletteAdrByColorIndex(14)); */ 6203 // wstrcatprintf(data->ws1,"\nLoading images..."); 6204 6205 DrawRectangle(rc.x,rc.y,rc.x2,rc.y2,0,BGPBcolor,BGPBcolor); \ 00000150 40079FE5 LDR R0,??DrawLoadScreen_0+0x10 ;; BGPBcolor \ 00000154 0730A0E1 MOV R3,R7 \ 00000158 0010A0E1 MOV R1,R0 \ 0000015C 02002DE9 PUSH {R1} \ 00000160 01002DE9 PUSH {R0} \ 00000164 0620A0E1 MOV R2,R6 \ 00000168 0B10A0E1 MOV R1,R11 \ 0000016C 0000A0E3 MOV R0,#+0 \ 00000170 01002DE9 PUSH {R0} \ 00000174 0A00A0E1 MOV R0,R10 \ 00000178 B40100EF SWI +436 6206 pos_status = (((rc.x2-rc.x)-1) * pl) / pm; \ 0000017C 0C109DE5 LDR R1,[SP, #+12] \ 00000180 0A0046E0 SUB R0,R6,R10 \ 00000184 010040E2 SUB R0,R0,#+1 \ 00000188 910000E0 MUL R0,R1,R0 \ 0000018C 0510A0E1 MOV R1,R5 \ 00000190 ........ _BLF ??div32_a,??rA??div32_a 6207 DrawRectangle(rc.x+2,rc.y+2,rc.x+pos_status+2,rc.y2-2,0,PBcolor,PBcolor); \ 00000194 00079FE5 LDR R0,??DrawLoadScreen_0+0x14 ;; PBcolor \ 00000198 023047E2 SUB R3,R7,#+2 \ 0000019C 0020A0E1 MOV R2,R0 \ 000001A0 04002DE9 PUSH {R2} \ 000001A4 01002DE9 PUSH {R0} \ 000001A8 0000A0E3 MOV R0,#+0 \ 000001AC 01002DE9 PUSH {R0} \ 000001B0 0A0081E0 ADD R0,R1,R10 \ 000001B4 022080E2 ADD R2,R0,#+2 \ 000001B8 02108BE2 ADD R1,R11,#+2 \ 000001BC 02008AE2 ADD R0,R10,#+2 \ 000001C0 B40100EF SWI +436 6208 6209 if(total_smiles) \ 000001C4 D4069FE5 LDR R0,??DrawLoadScreen_0+0x18 ;; total_smiles \ 000001C8 001090E5 LDR R1,[R0, #+0] \ 000001CC 18D08DE2 ADD SP,SP,#+24 \ 000001D0 000051E3 CMP R1,#+0 \ 000001D4 0300000A BEQ ??DrawLoadScreen_4 6210 { 6211 wstrcatprintf(data->ws1,"\nLoaded %d smiles",total_smiles); \ 000001D8 002090E5 LDR R2,[R0, #+0] \ 000001DC 340094E5 LDR R0,[R4, #+52] \ 000001E0 801089E2 ADD R1,R9,#+128 \ 000001E4 160200EF SWI +534 6212 } 6213 if (xstatuses_load) \ ??DrawLoadScreen_4: \ 000001E8 B4069FE5 LDR R0,??DrawLoadScreen_0+0x1C ;; xstatuses_load \ 000001EC 000090E5 LDR R0,[R0, #+0] \ 000001F0 000050E3 CMP R0,#+0 \ 000001F4 0400000A BEQ ??DrawLoadScreen_3 6214 { 6215 wstrcatprintf(data->ws1,"\nLoaded %d xstatus",total_xstatuses); \ 000001F8 A8069FE5 LDR R0,??DrawLoadScreen_0+0x20 ;; total_xstatuses \ 000001FC 941089E2 ADD R1,R9,#+148 \ 00000200 002090E5 LDR R2,[R0, #+0] \ 00000204 340094E5 LDR R0,[R4, #+52] \ 00000208 160200EF SWI +534 6216 } 6217 } 6218 6219 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: \ 0000020C 1700A0E3 MOV R0,#+23 \ 00000210 2E0100EF SWI +302 \ 00000214 0060A0E1 MOV R6,R0 \ 00000218 0000A0E3 MOV R0,#+0 \ 0000021C 2E0100EF SWI +302 \ 00000220 0070A0E1 MOV R7,R0 \ 00000224 0500A0E3 MOV R0,#+5 \ 00000228 C50100EF SWI +453 \ 0000022C 08209DE5 LDR R2,[SP, #+8] \ 00000230 042042E2 SUB R2,R2,#+4 \ 00000234 0C208DE5 STR R2,[SP, #+12] \ 00000238 04109DE5 LDR R1,[SP, #+4] \ 0000023C 40002DE9 PUSH {R6} \ 00000240 045041E2 SUB R5,R1,#+4 \ 00000244 80002DE9 PUSH {R7} \ 00000248 0010A0E3 MOV R1,#+0 \ 0000024C 02002DE9 PUSH {R1} \ 00000250 000045E0 SUB R0,R5,R0 \ 00000254 0230A0E1 MOV R3,R2 \ 00000258 1B20A0E3 MOV R2,#+27 \ 0000025C 0810A0E3 MOV R1,#+8 \ 00000260 02002DE9 PUSH {R1} \ 00000264 01002DE9 PUSH {R0} \ 00000268 340094E5 LDR R0,[R4, #+52] \ 0000026C 0310A0E3 MOV R1,#+3 6220 /*} 6221 else 6222 { 6223 wsprintf(data->ws1,"%t UIN!","Выберите"); 6224 DrawLine(0,CLIST_Y1-3,ScreenW()-1,CLIST_Y1-3,0,clrWhite); 6225 DrawString(data->ws1,2,YDISP+2,scr_w-1,YDISP+GetFontYSIZE(FONT_SMALL),FONT_SMALL,0,fntSelect,0); 6226 // DrawList(); 6227 } 6228 */ 6229 6230 #ifdef kluchnik 6231 int y=160; \ 00000270 A060A0E3 MOV R6,#+160 \ 00000274 4C0100EF SWI +332 6232 char A[]="[A] %s"; \ 00000278 2C169FE5 LDR R1,??DrawLoadScreen_0+0x24 ;; `?` \ 0000027C 30008DE2 ADD R0,SP,#+48 \ 00000280 0C0091E8 LDM R1,{R2,R3} \ 00000284 0C0080E8 STM R0,{R2,R3} 6233 char I[]="[I]"; \ 00000288 001099E5 LDR R1,[R9, #0] \ 0000028C 24008DE2 ADD R0,SP,#+36 \ 00000290 001080E5 STR R1,[R0, #+0] 6234 char V[]="[V]"; \ 00000294 14169FE5 LDR R1,??DrawLoadScreen_0+0x28 ;; `?_1` \ 00000298 28008DE2 ADD R0,SP,#+40 \ 0000029C 002091E5 LDR R2,[R1, #0] 6235 char S[]="[S]"; \ 000002A0 0C169FE5 LDR R1,??DrawLoadScreen_0+0x2C ;; `?_1` \ 000002A4 002080E5 STR R2,[R0, #+0] \ 000002A8 002091E5 LDR R2,[R1, #0] \ 000002AC 2C008DE2 ADD R0,SP,#+44 \ 000002B0 002080E5 STR R2,[R0, #+0] 6236 6237 if(CurrentPrivateStatus==1) \ 000002B4 C00398E5 LDR R0,[R8, #+960] \ 000002B8 14D08DE2 ADD SP,SP,#+20 \ 000002BC 010050E3 CMP R0,#+1 \ 000002C0 1D00001A BNE ??DrawLoadScreen_5 6238 { 6239 wsprintf(data->ws2,I); \ 000002C4 380094E5 LDR R0,[R4, #+56] \ 000002C8 10108DE2 ADD R1,SP,#+16 \ 000002CC 240100EF SWI +292 6240 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); \ 000002D0 1700A0E3 MOV R0,#+23 \ 000002D4 2E0100EF SWI +302 \ 000002D8 0070A0E1 MOV R7,R0 \ 000002DC 0200A0E3 MOV R0,#+2 \ 000002E0 2E0100EF SWI +302 \ 000002E4 00A0A0E1 MOV R10,R0 \ 000002E8 0B00A0E3 MOV R0,#+11 \ 000002EC C50100EF SWI +453 \ 000002F0 0060A0E1 MOV R6,R0 \ 000002F4 888100EF SWI +33160 \ 000002F8 80002DE9 PUSH {R7} \ 000002FC 00042DE9 PUSH {R10} \ 00000300 0010A0E3 MOV R1,#+0 \ 00000304 02002DE9 PUSH {R1} \ 00000308 013040E2 SUB R3,R0,#+1 \ 0000030C A020A0E3 MOV R2,#+160 \ 00000310 0B10A0E3 MOV R1,#+11 \ 00000314 02002DE9 PUSH {R1} \ 00000318 A01086E2 ADD R1,R6,#+160 \ 0000031C 02002DE9 PUSH {R1} \ 00000320 380094E5 LDR R0,[R4, #+56] \ 00000324 0210A0E3 MOV R1,#+2 \ 00000328 4C0100EF SWI +332 6241 y+=GetFontYSIZE(11)+5; \ 0000032C 0B00A0E3 MOV R0,#+11 \ 00000330 C50100EF SWI +453 \ 00000334 A56080E2 ADD R6,R0,#+165 \ 00000338 14D08DE2 ADD SP,SP,#+20 6242 } 6243 6244 if(Is_Vibra_Enabled) \ ??DrawLoadScreen_5: \ 0000033C E00298E5 LDR R0,[R8, #+736] \ 00000340 000050E3 CMP R0,#+0 \ 00000344 1E00000A BEQ ??DrawLoadScreen_6 6245 { 6246 wsprintf(data->ws2,V); \ 00000348 380094E5 LDR R0,[R4, #+56] \ 0000034C 14108DE2 ADD R1,SP,#+20 \ 00000350 240100EF SWI +292 6247 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); \ 00000354 1700A0E3 MOV R0,#+23 \ 00000358 2E0100EF SWI +302 \ 0000035C 0070A0E1 MOV R7,R0 \ 00000360 0200A0E3 MOV R0,#+2 \ 00000364 2E0100EF SWI +302 \ 00000368 00A0A0E1 MOV R10,R0 \ 0000036C 0B00A0E3 MOV R0,#+11 \ 00000370 C50100EF SWI +453 \ 00000374 00B0A0E1 MOV R11,R0 \ 00000378 888100EF SWI +33160 \ 0000037C 80002DE9 PUSH {R7} \ 00000380 00042DE9 PUSH {R10} \ 00000384 0010A0E3 MOV R1,#+0 \ 00000388 02002DE9 PUSH {R1} \ 0000038C 013040E2 SUB R3,R0,#+1 \ 00000390 0620A0E1 MOV R2,R6 \ 00000394 0B10A0E3 MOV R1,#+11 \ 00000398 02002DE9 PUSH {R1} \ 0000039C 06108BE0 ADD R1,R11,R6 \ 000003A0 02002DE9 PUSH {R1} \ 000003A4 380094E5 LDR R0,[R4, #+56] \ 000003A8 0210A0E3 MOV R1,#+2 \ 000003AC 4C0100EF SWI +332 6248 y+=GetFontYSIZE(11)+5; \ 000003B0 0B00A0E3 MOV R0,#+11 \ 000003B4 C50100EF SWI +453 \ 000003B8 050080E2 ADD R0,R0,#+5 \ 000003BC 066080E0 ADD R6,R0,R6 \ 000003C0 14D08DE2 ADD SP,SP,#+20 6249 } 6250 6251 if(Is_Sounds_Enabled) \ ??DrawLoadScreen_6: \ 000003C4 B40398E5 LDR R0,[R8, #+948] \ 000003C8 000050E3 CMP R0,#+0 \ 000003CC 1E00000A BEQ ??DrawLoadScreen_7 6252 { 6253 wsprintf(data->ws2,S); \ 000003D0 380094E5 LDR R0,[R4, #+56] \ 000003D4 18108DE2 ADD R1,SP,#+24 \ 000003D8 240100EF SWI +292 6254 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); \ 000003DC 1700A0E3 MOV R0,#+23 \ 000003E0 2E0100EF SWI +302 \ 000003E4 0070A0E1 MOV R7,R0 \ 000003E8 0200A0E3 MOV R0,#+2 \ 000003EC 2E0100EF SWI +302 \ 000003F0 00A0A0E1 MOV R10,R0 \ 000003F4 0B00A0E3 MOV R0,#+11 \ 000003F8 C50100EF SWI +453 \ 000003FC 00B0A0E1 MOV R11,R0 \ 00000400 888100EF SWI +33160 \ 00000404 80002DE9 PUSH {R7} \ 00000408 00042DE9 PUSH {R10} \ 0000040C 0010A0E3 MOV R1,#+0 \ 00000410 02002DE9 PUSH {R1} \ 00000414 013040E2 SUB R3,R0,#+1 \ 00000418 0620A0E1 MOV R2,R6 \ 0000041C 0B10A0E3 MOV R1,#+11 \ 00000420 02002DE9 PUSH {R1} \ 00000424 06108BE0 ADD R1,R11,R6 \ 00000428 02002DE9 PUSH {R1} \ 0000042C 380094E5 LDR R0,[R4, #+56] \ 00000430 0210A0E3 MOV R1,#+2 \ 00000434 4C0100EF SWI +332 6255 y+=GetFontYSIZE(11)+5; \ 00000438 0B00A0E3 MOV R0,#+11 \ 0000043C C50100EF SWI +453 \ 00000440 050080E2 ADD R0,R0,#+5 \ 00000444 066080E0 ADD R6,R0,R6 \ 00000448 14D08DE2 ADD SP,SP,#+20 6256 } 6257 6258 if(Is_Double_Vibra_On) \ ??DrawLoadScreen_7: \ 0000044C C80298E5 LDR R0,[R8, #+712] \ 00000450 000050E3 CMP R0,#+0 \ 00000454 1A00000A BEQ ??DrawLoadScreen_8 6259 { 6260 wsprintf(data->ws2,"[Vr]"); \ 00000458 380094E5 LDR R0,[R4, #+56] \ 0000045C 281089E2 ADD R1,R9,#+40 \ 00000460 240100EF SWI +292 6261 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); \ 00000464 1700A0E3 MOV R0,#+23 \ 00000468 2E0100EF SWI +302 \ 0000046C 0070A0E1 MOV R7,R0 \ 00000470 0200A0E3 MOV R0,#+2 \ 00000474 2E0100EF SWI +302 \ 00000478 00A0A0E1 MOV R10,R0 \ 0000047C 0B00A0E3 MOV R0,#+11 \ 00000480 C50100EF SWI +453 \ 00000484 00B0A0E1 MOV R11,R0 \ 00000488 888100EF SWI +33160 \ 0000048C 80002DE9 PUSH {R7} \ 00000490 00042DE9 PUSH {R10} \ 00000494 0010A0E3 MOV R1,#+0 \ 00000498 02002DE9 PUSH {R1} \ 0000049C 013040E2 SUB R3,R0,#+1 \ 000004A0 0620A0E1 MOV R2,R6 \ 000004A4 0B10A0E3 MOV R1,#+11 \ 000004A8 02002DE9 PUSH {R1} \ 000004AC 06108BE0 ADD R1,R11,R6 \ 000004B0 02002DE9 PUSH {R1} \ 000004B4 380094E5 LDR R0,[R4, #+56] \ 000004B8 0210A0E3 MOV R1,#+2 \ 000004BC 4C0100EF SWI +332 \ 000004C0 14D08DE2 ADD SP,SP,#+20 6262 } 6263 6264 if(away_m) \ ??DrawLoadScreen_8: \ 000004C4 840398E5 LDR R0,[R8, #+900] \ 000004C8 000050E3 CMP R0,#+0 \ 000004CC 1F00000A BEQ ??DrawLoadScreen_9 6265 { 6266 wsprintf(data->ws2,A,away_msg_time_dace); \ 000004D0 3800A0E3 MOV R0,#+56 \ 000004D4 6C0D80E3 ORR R0,R0,#0x1B00 \ 000004D8 082080E0 ADD R2,R0,R8 \ 000004DC 380094E5 LDR R0,[R4, #+56] \ 000004E0 1C108DE2 ADD R1,SP,#+28 \ 000004E4 240100EF SWI +292 6267 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); \ 000004E8 1700A0E3 MOV R0,#+23 \ 000004EC 2E0100EF SWI +302 \ 000004F0 0070A0E1 MOV R7,R0 \ 000004F4 0200A0E3 MOV R0,#+2 \ 000004F8 2E0100EF SWI +302 \ 000004FC 00A0A0E1 MOV R10,R0 \ 00000500 0B00A0E3 MOV R0,#+11 \ 00000504 C50100EF SWI +453 \ 00000508 00B0A0E1 MOV R11,R0 \ 0000050C 888100EF SWI +33160 \ 00000510 80002DE9 PUSH {R7} \ 00000514 00042DE9 PUSH {R10} \ 00000518 0010A0E3 MOV R1,#+0 \ 0000051C 02002DE9 PUSH {R1} \ 00000520 013040E2 SUB R3,R0,#+1 \ 00000524 0620A0E1 MOV R2,R6 \ 00000528 0B10A0E3 MOV R1,#+11 \ 0000052C 02002DE9 PUSH {R1} \ 00000530 06108BE0 ADD R1,R11,R6 \ 00000534 02002DE9 PUSH {R1} \ 00000538 380094E5 LDR R0,[R4, #+56] \ 0000053C 0210A0E3 MOV R1,#+2 \ 00000540 4C0100EF SWI +332 6268 y+=GetFontYSIZE(11)+5; \ 00000544 0B00A0E3 MOV R0,#+11 \ 00000548 C50100EF SWI +453 \ 0000054C 14D08DE2 ADD SP,SP,#+20 6269 } 6270 6271 6272 wsprintf(data->ws2,"Uin: %d",UIN); \ ??DrawLoadScreen_9: \ 00000550 ........ LDR R0,??DataTable237 ;; UIN \ 00000554 A81089E2 ADD R1,R9,#+168 \ 00000558 002090E5 LDR R2,[R0, #+0] \ 0000055C 380094E5 LDR R0,[R4, #+56] \ 00000560 240100EF SWI +292 6273 DrawString(data->ws2,1,scr_h-10-4*GetFontYSIZE(FONT_SMALL_BOLD)+1,ScreenW()-1,scr_h-10-GetFontYSIZE(FONT_MEDIUM_BOLD)-3 6274 ,FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 00000564 1700A0E3 MOV R0,#+23 \ 00000568 2E0100EF SWI +302 \ 0000056C 0060A0E1 MOV R6,R0 \ 00000570 0000A0E3 MOV R0,#+0 \ 00000574 2E0100EF SWI +302 \ 00000578 0070A0E1 MOV R7,R0 \ 0000057C 0500A0E3 MOV R0,#+5 \ 00000580 C50100EF SWI +453 \ 00000584 00A0A0E1 MOV R10,R0 \ 00000588 888100EF SWI +33160 \ 0000058C 00B0A0E1 MOV R11,R0 \ 00000590 0900A0E3 MOV R0,#+9 \ 00000594 C50100EF SWI +453 \ 00000598 04209DE5 LDR R2,[SP, #+4] \ 0000059C 0010A0E3 MOV R1,#+0 \ 000005A0 0A2042E2 SUB R2,R2,#+10 \ 000005A4 00208DE5 STR R2,[SP, #+0] \ 000005A8 40002DE9 PUSH {R6} \ 000005AC 80002DE9 PUSH {R7} \ 000005B0 02002DE9 PUSH {R1} \ 000005B4 01304BE2 SUB R3,R11,#+1 \ 000005B8 000142E0 SUB R0,R2,R0, LSL #+2 \ 000005BC 0810A0E3 MOV R1,#+8 \ 000005C0 02002DE9 PUSH {R1} \ 000005C4 0A1042E0 SUB R1,R2,R10 \ 000005C8 012080E2 ADD R2,R0,#+1 \ 000005CC 031041E2 SUB R1,R1,#+3 \ 000005D0 02002DE9 PUSH {R1} \ 000005D4 380094E5 LDR R0,[R4, #+56] \ 000005D8 0110A0E3 MOV R1,#+1 \ 000005DC 4C0100EF SWI +332 6275 6276 if(connect_state==3) \ 000005E0 DC0398E5 LDR R0,[R8, #+988] \ 000005E4 14D08DE2 ADD SP,SP,#+20 \ 000005E8 030050E3 CMP R0,#+3 \ 000005EC 0B00001A BNE ??DrawLoadScreen_10 6277 { 6278 wsprintf(data->ws2,"Online: %02d:%02d:%02d not action %d sec", uptimeHour, uptimeMin, uptimeSec,msg_away_timer*5); \ 000005F0 800398E5 LDR R0,[R8, #+896] \ 000005F4 B01089E2 ADD R1,R9,#+176 \ 000005F8 000180E0 ADD R0,R0,R0, LSL #+2 \ 000005FC 01002DE9 PUSH {R0} \ 00000600 A00398E5 LDR R0,[R8, #+928] \ 00000604 01002DE9 PUSH {R0} \ 00000608 9C3398E5 LDR R3,[R8, #+924] \ 0000060C 982398E5 LDR R2,[R8, #+920] \ 00000610 380094E5 LDR R0,[R4, #+56] \ 00000614 240100EF SWI +292 \ 00000618 08D08DE2 ADD SP,SP,#+8 \ 0000061C 020000EA B ??DrawLoadScreen_11 6279 } 6280 else 6281 wsprintf(data->ws2,"Offline"); \ ??DrawLoadScreen_10: \ 00000620 380094E5 LDR R0,[R4, #+56] \ 00000624 081089E2 ADD R1,R9,#+8 \ 00000628 240100EF SWI +292 6282 DrawString(data->ws2,1,scr_h-10-3*GetFontYSIZE(FONT_SMALL_BOLD)+1,ScreenW()-1,scr_h-10-GetFontYSIZE(FONT_MEDIUM_BOLD)-3 6283 ,FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ ??DrawLoadScreen_11: \ 0000062C 1700A0E3 MOV R0,#+23 \ 00000630 2E0100EF SWI +302 \ 00000634 0060A0E1 MOV R6,R0 \ 00000638 0000A0E3 MOV R0,#+0 \ 0000063C 2E0100EF SWI +302 \ 00000640 0070A0E1 MOV R7,R0 \ 00000644 0500A0E3 MOV R0,#+5 \ 00000648 C50100EF SWI +453 \ 0000064C 00A0A0E1 MOV R10,R0 \ 00000650 888100EF SWI +33160 \ 00000654 00B0A0E1 MOV R11,R0 \ 00000658 0900A0E3 MOV R0,#+9 \ 0000065C C50100EF SWI +453 \ 00000660 40002DE9 PUSH {R6} \ 00000664 80002DE9 PUSH {R7} \ 00000668 0010A0E3 MOV R1,#+0 \ 0000066C 02002DE9 PUSH {R1} \ 00000670 01304BE2 SUB R3,R11,#+1 \ 00000674 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000678 0810A0E3 MOV R1,#+8 \ 0000067C 02002DE9 PUSH {R1} \ 00000680 10109DE5 LDR R1,[SP, #+16] \ 00000684 0A1041E0 SUB R1,R1,R10 \ 00000688 031041E2 SUB R1,R1,#+3 \ 0000068C 02002DE9 PUSH {R1} \ 00000690 14109DE5 LDR R1,[SP, #+20] \ 00000694 000041E0 SUB R0,R1,R0 \ 00000698 012080E2 ADD R2,R0,#+1 \ 0000069C 380094E5 LDR R0,[R4, #+56] \ 000006A0 0110A0E3 MOV R1,#+1 \ 000006A4 4C0100EF SWI +332 6284 #endif 6285 6286 if(IsInvertSoftKey) \ 000006A8 1C009DE5 LDR R0,[SP, #+28] \ 000006AC C060A0E1 ASR R6,R0,#+1 \ 000006B0 ........ LDR R0,??DataTable244 ;; IsInvertSoftKey \ 000006B4 000090E5 LDR R0,[R0, #+0] \ 000006B8 14D08DE2 ADD SP,SP,#+20 \ 000006BC 000050E3 CMP R0,#+0 \ 000006C0 3800000A BEQ ??DrawLoadScreen_12 6287 { 6288 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 000006C4 380094E5 LDR R0,[R4, #+56] \ 000006C8 DC2089E2 ADD R2,R9,#+220 \ 000006CC 041089E2 ADD R1,R9,#+4 \ 000006D0 240100EF SWI +292 6289 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)); \ 000006D4 1700A0E3 MOV R0,#+23 \ 000006D8 2E0100EF SWI +302 \ 000006DC 0070A0E1 MOV R7,R0 \ 000006E0 0000A0E3 MOV R0,#+0 \ 000006E4 2E0100EF SWI +302 \ 000006E8 00A0A0E1 MOV R10,R0 \ 000006EC 0500A0E3 MOV R0,#+5 \ 000006F0 C50100EF SWI +453 \ 000006F4 80002DE9 PUSH {R7} \ 000006F8 00042DE9 PUSH {R10} \ 000006FC 0410A0E3 MOV R1,#+4 \ 00000700 02002DE9 PUSH {R1} \ 00000704 002045E0 SUB R2,R5,R0 \ 00000708 0510A0E3 MOV R1,#+5 \ 0000070C 02002DE9 PUSH {R1} \ 00000710 0510A0E1 MOV R1,R5 \ 00000714 02002DE9 PUSH {R1} \ 00000718 20309DE5 LDR R3,[SP, #+32] \ 0000071C 380094E5 LDR R0,[R4, #+56] \ 00000720 0610A0E1 MOV R1,R6 \ 00000724 4C0100EF SWI +332 6290 6291 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ 00000728 040498E5 LDR R0,[R8, #+1028] \ 0000072C 14D08DE2 ADD SP,SP,#+20 \ 00000730 000050E3 CMP R0,#+0 \ 00000734 380094E5 LDR R0,[R4, #+56] \ 00000738 E4208912 ADDNE R2,R9,#+228 \ 0000073C 07208902 ADDEQ R2,R9,#+7 \ 00000740 041089E2 ADD R1,R9,#+4 \ 00000744 240100EF SWI +292 6292 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)); \ 00000748 1700A0E3 MOV R0,#+23 \ 0000074C 2E0100EF SWI +302 \ 00000750 0070A0E1 MOV R7,R0 \ 00000754 0000A0E3 MOV R0,#+0 \ 00000758 2E0100EF SWI +302 \ 0000075C 0080A0E1 MOV R8,R0 \ 00000760 0500A0E3 MOV R0,#+5 \ 00000764 C50100EF SWI +453 \ 00000768 80002DE9 PUSH {R7} \ 0000076C 00012DE9 PUSH {R8} \ 00000770 0110A0E3 MOV R1,#+1 \ 00000774 02002DE9 PUSH {R1} \ 00000778 0630A0E1 MOV R3,R6 \ 0000077C 002045E0 SUB R2,R5,R0 \ 00000780 0510A0E3 MOV R1,#+5 \ 00000784 02002DE9 PUSH {R1} \ 00000788 0510A0E1 MOV R1,R5 \ 0000078C 02002DE9 PUSH {R1} \ 00000790 380094E5 LDR R0,[R4, #+56] \ 00000794 0310A0E3 MOV R1,#+3 \ 00000798 4C0100EF SWI +332 \ 0000079C 14D08DE2 ADD SP,SP,#+20 \ 000007A0 24D08DE2 ADD SP,SP,#+36 \ 000007A4 F08FBDE8 POP {R4-R11,PC} 6293 } 6294 else 6295 { 6296 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ ??DrawLoadScreen_12: \ 000007A8 040498E5 LDR R0,[R8, #+1028] \ 000007AC 041089E2 ADD R1,R9,#+4 \ 000007B0 000050E3 CMP R0,#+0 \ 000007B4 380094E5 LDR R0,[R4, #+56] \ 000007B8 E4208912 ADDNE R2,R9,#+228 \ 000007BC 07208902 ADDEQ R2,R9,#+7 \ 000007C0 240100EF SWI +292 6297 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)); \ 000007C4 1700A0E3 MOV R0,#+23 \ 000007C8 2E0100EF SWI +302 \ 000007CC 0070A0E1 MOV R7,R0 \ 000007D0 0000A0E3 MOV R0,#+0 \ 000007D4 2E0100EF SWI +302 \ 000007D8 0080A0E1 MOV R8,R0 \ 000007DC 0500A0E3 MOV R0,#+5 \ 000007E0 C50100EF SWI +453 \ 000007E4 80002DE9 PUSH {R7} \ 000007E8 00012DE9 PUSH {R8} \ 000007EC 0410A0E3 MOV R1,#+4 \ 000007F0 02002DE9 PUSH {R1} \ 000007F4 002045E0 SUB R2,R5,R0 \ 000007F8 0510A0E3 MOV R1,#+5 \ 000007FC 02002DE9 PUSH {R1} \ 00000800 0510A0E1 MOV R1,R5 \ 00000804 02002DE9 PUSH {R1} \ 00000808 20309DE5 LDR R3,[SP, #+32] \ 0000080C 380094E5 LDR R0,[R4, #+56] \ 00000810 0610A0E1 MOV R1,R6 \ 00000814 4C0100EF SWI +332 6298 6299 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 00000818 380094E5 LDR R0,[R4, #+56] \ 0000081C DC2089E2 ADD R2,R9,#+220 \ 00000820 041089E2 ADD R1,R9,#+4 \ 00000824 240100EF SWI +292 6300 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)); \ 00000828 1700A0E3 MOV R0,#+23 \ 0000082C 2E0100EF SWI +302 \ 00000830 0070A0E1 MOV R7,R0 \ 00000834 0000A0E3 MOV R0,#+0 \ 00000838 2E0100EF SWI +302 \ 0000083C 0080A0E1 MOV R8,R0 \ 00000840 0500A0E3 MOV R0,#+5 \ 00000844 C50100EF SWI +453 \ 00000848 80002DE9 PUSH {R7} \ 0000084C 00012DE9 PUSH {R8} \ 00000850 0110A0E3 MOV R1,#+1 \ 00000854 02002DE9 PUSH {R1} \ 00000858 0630A0E1 MOV R3,R6 \ 0000085C 002045E0 SUB R2,R5,R0 \ 00000860 0510A0E3 MOV R1,#+5 \ 00000864 02002DE9 PUSH {R1} \ 00000868 0510A0E1 MOV R1,R5 \ 0000086C 02002DE9 PUSH {R1} \ 00000870 380094E5 LDR R0,[R4, #+56] \ 00000874 0310A0E3 MOV R1,#+3 \ 00000878 4C0100EF SWI +332 \ 0000087C 28D08DE2 ADD SP,SP,#+40 6301 } 6302 /* 6303 wsprintf(data->ws2,"%d %s",addonuin[0].uin,addonuin[0].pass); 6304 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)); 6305 */ 6306 } \ 00000880 24D08DE2 ADD SP,SP,#+36 \ 00000884 F08FBDE8 POP {R4-R11,PC} ;; return \ ??DrawLoadScreen_0: \ 00000888 ........ DC32 pictures_loaded \ 0000088C ........ DC32 pictures_max \ 00000890 ........ DC32 PBRECT \ 00000894 ........ DC32 IsShowInfo \ 00000898 ........ DC32 BGPBcolor \ 0000089C ........ DC32 PBcolor \ 000008A0 ........ DC32 total_smiles \ 000008A4 ........ DC32 xstatuses_load \ 000008A8 ........ DC32 total_xstatuses \ 000008AC ........ DC32 `?` \ 000008B0 ........ DC32 `?_1` \ 000008B4 ........ DC32 `?_1` 6307 6308 //int ShowLoadScreen=1; \ In segment CODE, align 4, keep-with-next 6309 void method0(MAIN_GUI *data) 6310 { \ method0: \ 00000000 30402DE9 PUSH {R4,R5,LR} 6311 if(IsGuiOnTop(maingui_id)) \ 00000004 ........ LDR R5,??DataTable239 ;; i_rc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C D40295E5 LDR R0,[R5, #+724] \ 00000010 350100EF SWI +309 \ 00000014 000050E3 CMP R0,#+0 \ 00000018 3080BD08 POPEQ {R4,R5,PC} 6312 { 6313 if(ShowLoadScreen) \ 0000001C 4C0495E5 LDR R0,[R5, #+1100] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 0400000A BEQ ??method0_0 6314 { 6315 #ifdef ELKA 6316 DisableIconBar(0); \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 3B0200EF SWI +571 6317 #endif 6318 DrawLoadScreen(data); \ 00000030 0400A0E1 MOV R0,R4 \ 00000034 3040BDE8 POP {R4,R5,LR} ;; Pop \ 00000038 ........ B DrawLoadScreen ;; tailcall 6319 } 6320 else 6321 { 6322 #ifdef ELKA 6323 #ifdef ICONBAR 6324 DisableIconBar(0); 6325 #else 6326 DisableIconBar(1); \ ??method0_0: \ 0000003C 0100A0E3 MOV R0,#+1 \ 00000040 3B0200EF SWI +571 6327 #endif 6328 #endif 6329 SetCanvasFlag(1); \ 00000044 0100A0E3 MOV R0,#+1 \ 00000048 ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 6330 DrawContactList(); \ 0000004C 3040BDE8 POP {R4,R5,LR} ;; Pop \ 00000050 ........ B DrawContactList ;; tailcall 6331 } 6332 } 6333 } 6334 \ In segment CODE, align 4, keep-with-next 6335 void method1(MAIN_GUI *data,void *(*malloc_adr)(int)) 6336 { \ method1: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 6337 data->ws1=AllocWS(256); \ 00000008 400FA0E3 MOV R0,#+256 \ 0000000C 250100EF SWI +293 \ 00000010 340084E5 STR R0,[R4, #+52] 6338 data->ws2=AllocWS(256); \ 00000014 400FA0E3 MOV R0,#+256 \ 00000018 250100EF SWI +293 \ 0000001C 380084E5 STR R0,[R4, #+56] 6339 6340 if(isSystemFont) clfont=100+pngFont; \ 00000020 ........ LDR R0,??DataTable240 ;; isSystemFont \ 00000024 000090E5 LDR R0,[R0, #+0] \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 0300000A BEQ ??method1_0 \ 00000030 ........ LDR R0,??DataTable241 ;; pngFont \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 640080E2 ADD R0,R0,#+100 \ 0000003C 000000EA B ??method1_1 6341 else clfont=2; \ ??method1_0: \ 00000040 0200A0E3 MOV R0,#+2 \ ??method1_1: \ 00000044 ........ LDR R5,??DataTable264 ;; i_rc \ 00000048 5C0485E5 STR R0,[R5, #+1116] 6342 6343 if(icons[IS_ONLINE]) \ 0000004C 340095E5 LDR R0,[R5, #+52] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 5C0495E5 LDR R0,[R5, #+1116] \ 00000058 0600000A BEQ ??method1_2 6344 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 B220D1E1 LDRH R2,[R1, #+2] \ 00000068 020050E1 CMP R0,R2 \ 0000006C 0200A0B1 MOVLT R0,R2 \ 00000070 010000BA BLT ??method1_3 \ 00000074 5C0495E5 LDR R0,[R5, #+1116] 6345 else 6346 hy=FontH(clfont); \ ??method1_2: \ 00000078 ........ _BLF FontH,??FontH??rA 6347 6348 hy+=YDISP; \ ??method1_3: \ 0000007C 180080E2 ADD R0,R0,#+24 \ 00000080 580485E5 STR R0,[R5, #+1112] 6349 6350 data->gui.state=1; \ 00000084 0100A0E3 MOV R0,#+1 \ 00000088 0C00C4E5 STRB R0,[R4, #+12] 6351 } \ 0000008C 3080BDE8 POP {R4,R5,PC} ;; return 6352 \ In segment CODE, align 4, keep-with-next 6353 void method2(MAIN_GUI *data,void (*mfree_adr)(void *)) 6354 { \ method2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 6355 FreeWS(data->ws1); \ 00000008 340094E5 LDR R0,[R4, #+52] \ 0000000C 290100EF SWI +297 6356 FreeWS(data->ws2); \ 00000010 380094E5 LDR R0,[R4, #+56] \ 00000014 290100EF SWI +297 6357 data->gui.state=0; \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 0C00C4E5 STRB R0,[R4, #+12] 6358 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 6359 \ In segment CODE, align 4, keep-with-next 6360 void method3(MAIN_GUI *data,void *(*malloc_adr)(int),void (*mfree_adr)(void *)) 6361 { \ method3: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 6362 DisableIDLETMR(); \ 00000008 7F0100EF SWI +383 6363 data->gui.state=2; \ 0000000C 0200A0E3 MOV R0,#+2 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 6364 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 6365 \ In segment CODE, align 4, keep-with-next 6366 void method4(MAIN_GUI *data,void (*mfree_adr)(void *)) 6367 { \ method4: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 6368 if (data->gui.state!=2) \ 00000008 0C00D4E5 LDRB R0,[R4, #+12] \ 0000000C 020050E3 CMP R0,#+2 \ 00000010 1080BD18 POPNE {R4,PC} 6369 return; 6370 /*#ifdef ELKA 6371 DisableIconBar(0); 6372 #endif*/ 6373 GBS_DelTimer(&cltmr); \ 00000014 0C009FE5 LDR R0,??method4_0 ;; cltmr \ 00000018 8C0100EF SWI +396 6374 data->gui.state=1; \ 0000001C 0100A0E3 MOV R0,#+1 \ 00000020 0C00C4E5 STRB R0,[R4, #+12] 6375 } \ 00000024 1080BDE8 POP {R4,PC} ;; return \ ??method4_0: \ 00000028 ........ DC32 cltmr 6376 6377 \ In segment CODE, align 4, keep-with-next 6378 int LoadOnKey(GUI_MSG *msg) 6379 { \ LoadOnKey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 0CD04DE2 SUB SP,SP,#+12 6380 if (msg->gbsmsg->msg==KEY_DOWN) \ 00000008 04C090E5 LDR R12,[R0, #+4] \ 0000000C 9310A0E3 MOV R1,#+147 \ 00000010 04009CE5 LDR R0,[R12, #+4] \ 00000014 401F81E3 ORR R1,R1,#0x100 \ 00000018 010050E1 CMP R0,R1 \ 0000001C 6400001A BNE ??LoadOnKey_1 6381 { 6382 switch(msg->gbsmsg->submess) \ 00000020 ........ LDR R4,??DataTable264 ;; i_rc \ 00000024 ........ LDR R0,??DataTable244 ;; IsInvertSoftKey \ 00000028 08C09CE5 LDR R12,[R12, #+8] \ 0000002C 4CE494E5 LDR LR,[R4, #+1100] \ 00000030 E08394E5 LDR R8,[R4, #+992] \ 00000034 009090E5 LDR R9,[R0, #+0] \ 00000038 ........ LDR R5,??DataTable263 ;; create_connect \ 0000003C ........ LDR R1,??DataTable259 ;; end_socket \ 00000040 5800A0E3 MOV R0,#+88 \ 00000044 780D80E3 ORR R0,R0,#0x1E00 \ 00000048 046080E0 ADD R6,R0,R4 \ 0000004C ........ LDR R0,??DataTable247 ;; WriteDefSettings \ 00000050 00A0E0E3 MVN R10,#+0 \ 00000054 0370A0E3 MOV R7,#+3 \ 00000058 0120A0E3 MOV R2,#+1 \ 0000005C 0030A0E3 MOV R3,#+0 \ 00000060 01C04CE2 SUB R12,R12,#+1 \ 00000064 35005CE3 CMP R12,#+53 \ 00000068 5100008A BHI ??LoadOnKey_1 \ 0000006C 01BF8FE2 ADR R11,??LoadOnKey_0 \ 00000070 0CB0DBE7 LDRB R11,[R11, R12] \ 00000074 0BF18FE0 ADD PC,PC,R11, LSL #+2 \ ??LoadOnKey_0: \ 00000078 0D4E4E1A DC8 +13,+78,+78,+26 \ 0000007C 4E4E4E4E DC8 +78,+78,+78,+78 \ 00000080 4E4E2026 DC8 +78,+78,+32,+38 \ 00000084 4E4E4E4E DC8 +78,+78,+78,+78 \ 00000088 4E4E4E4E DC8 +78,+78,+78,+78 \ 0000008C 4E4E4E4E DC8 +78,+78,+78,+78 \ 00000090 4E4E4E4E DC8 +78,+78,+78,+78 \ 00000094 4E4E4E4E DC8 +78,+78,+78,+78 \ 00000098 4E4E4E4E DC8 +78,+78,+78,+78 \ 0000009C 4E4E4E4E DC8 +78,+78,+78,+78 \ 000000A0 4E4E4E4E DC8 +78,+78,+78,+78 \ 000000A4 4E4E4E29 DC8 +78,+78,+78,+41 \ 000000A8 32373C42 DC8 +50,+55,+60,+66 \ 000000AC 47490000 DC8 +71,+73,+0,+0 6383 { 6384 // case ENTER_BUTTON: Enter(); break; 6385 case LEFT_SOFT: 6386 if(IsInvertSoftKey) \ ??LoadOnKey_2: \ 000000B0 000059E3 CMP R9,#+0 \ 000000B4 0C00000A BEQ ??LoadOnKey_3 6387 { 6388 if(ShowLoadScreen && (cltop || sock==-1)) ShowLoadScreen=0;//показывть контакт лист \ ??LoadOnKey_4: \ 000000B8 00005EE3 CMP LR,#+0 \ 000000BC 3C00000A BEQ ??LoadOnKey_1 \ 000000C0 040494E5 LDR R0,[R4, #+1028] \ 000000C4 000050E3 CMP R0,#+0 \ 000000C8 0100001A BNE ??LoadOnKey_5 \ 000000CC 0A0058E1 CMP R8,R10 \ 000000D0 3700001A BNE ??LoadOnKey_1 \ ??LoadOnKey_5: \ 000000D4 4C3484E5 STR R3,[R4, #+1100] \ 000000D8 170000EA B ??LoadOnKey_6 6389 //if (cltop || sock==-1) CreateCL();//create_contactlist_menu(); 6390 //unhooked2=1; 6391 } 6392 else// return 1; 6393 { 6394 if(ShowLoadScreen) 6395 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 6396 else 6397 ShowLoadScreen=1; \ ??LoadOnKey_7: \ 000000DC 4C2484E5 STR R2,[R4, #+1100] \ 000000E0 150000EA B ??LoadOnKey_6 6398 } 6399 // if (cltop) remake_clmenu(); 6400 break; 6401 case RIGHT_SOFT: 6402 if(IsInvertSoftKey) \ ??LoadOnKey_8: \ 000000E4 000059E3 CMP R9,#+0 \ 000000E8 F2FFFF0A BEQ ??LoadOnKey_4 \ ??LoadOnKey_3: \ 000000EC 00005EE3 CMP LR,#+0 \ 000000F0 F9FFFF0A BEQ ??LoadOnKey_7 \ 000000F4 0100A0E3 MOV R0,#+1 \ 000000F8 FE8FBDE8 POP {R1-R11,PC} 6403 { 6404 if(ShowLoadScreen) 6405 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 6406 else 6407 ShowLoadScreen=1; 6408 } 6409 else 6410 { 6411 if(ShowLoadScreen && (cltop || sock==-1)) ShowLoadScreen=0;//показывть контакт лист 6412 // if (cltop || sock==-1)CreateCL(); //create_contactlist_menu(); 6413 // unhooked2=1; 6414 } 6415 break; 6416 case GREEN_BUTTON: 6417 disautorecconect=0; \ ??LoadOnKey_9: \ 000000FC B03384E5 STR R3,[R4, #+944] 6418 if ((connect_state==0)&&(sock==-1)) \ 00000100 DC0394E5 LDR R0,[R4, #+988] \ 00000104 000050E3 CMP R0,#+0 \ 00000108 0A005801 CMPEQ R8,R10 \ 0000010C 2800001A BNE ??LoadOnKey_1 6419 { 6420 GBS_DelTimer(&reconnect_tmr); \ 00000110 040000EA B ??LoadOnKey_10 6421 DNR_TRIES=3; 6422 SUBPROC((void *)create_connect); 6423 } 6424 break; 6425 case RED_BUTTON: 6426 // extern volatile int disautorecconect; 6427 disautorecconect=1; \ ??LoadOnKey_11: \ 00000114 B02384E5 STR R2,[R4, #+944] 6428 // extern void end_socket(void); 6429 SUBPROC((void*)end_socket); \ 00000118 0100A0E1 MOV R0,R1 \ 0000011C 050000EA B ??LoadOnKey_12 6430 break; 6431 case '0': 6432 SUBPROC((void*)end_socket); \ ??LoadOnKey_13: \ 00000120 0100A0E1 MOV R0,R1 \ 00000124 710100EF SWI +369 6433 GBS_DelTimer(&reconnect_tmr); \ ??LoadOnKey_10: \ 00000128 0600A0E1 MOV R0,R6 \ 0000012C 8C0100EF SWI +396 6434 DNR_TRIES=3; \ 00000130 287484E5 STR R7,[R4, #+1064] 6435 SUBPROC((void *)create_connect); \ 00000134 0500A0E1 MOV R0,R5 \ ??LoadOnKey_12: \ 00000138 710100EF SWI +369 \ ??LoadOnKey_6: \ 0000013C 0000A0E3 MOV R0,#+0 \ 00000140 FE8FBDE8 POP {R1-R11,PC} 6436 break; 6437 6438 //------------------------------------------------------// 6439 6440 case '1': 6441 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??LoadOnKey_14: \ 00000144 B41394E5 LDR R1,[R4, #+948] \ 00000148 000051E3 CMP R1,#+0 \ 0000014C 0020A013 MOVNE R2,#+0 \ 00000150 B42384E5 STR R2,[R4, #+948] 6442 SUBPROC((void*)WriteDefSettings); \ 00000154 F7FFFFEA B ??LoadOnKey_12 6443 break; 6444 case '2': 6445 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??LoadOnKey_15: \ 00000158 E01294E5 LDR R1,[R4, #+736] \ 0000015C 000051E3 CMP R1,#+0 \ 00000160 0020A013 MOVNE R2,#+0 \ 00000164 E02284E5 STR R2,[R4, #+736] 6446 SUBPROC((void*)WriteDefSettings); \ 00000168 F2FFFFEA B ??LoadOnKey_12 6447 break; 6448 case '3': 6449 if(CurrentPrivateStatus!=1) \ ??LoadOnKey_16: \ 0000016C C00394E5 LDR R0,[R4, #+960] \ 00000170 010050E3 CMP R0,#+1 \ 00000174 0300A003 MOVEQ R0,#+3 6450 SetPrivateStatus(1);//Инвиз \ 00000178 0100A013 MOVNE R0,#+1 \ 0000017C ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA \ 00000180 EDFFFFEA B ??LoadOnKey_6 6451 else 6452 SetPrivateStatus(3); 6453 break; 6454 case '4': 6455 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??LoadOnKey_17: \ 00000184 C81294E5 LDR R1,[R4, #+712] \ 00000188 000051E3 CMP R1,#+0 \ 0000018C 0020A013 MOVNE R2,#+0 \ 00000190 C82284E5 STR R2,[R4, #+712] 6456 SUBPROC((void*)WriteDefSettings); \ 00000194 E7FFFFEA B ??LoadOnKey_12 6457 break; 6458 case '5': LINE_MODE=!LINE_MODE; break; \ ??LoadOnKey_18: \ 00000198 ........ LDR R0,??DataTable248 ;; LINE_MODE \ 0000019C 000000EA B ??LoadOnKey_19 6459 case '6': VIEW_MODE=!VIEW_MODE; break; \ ??LoadOnKey_20: \ 000001A0 ........ LDR R0,??DataTable249 ;; VIEW_MODE \ ??LoadOnKey_19: \ 000001A4 001090E5 LDR R1,[R0, #+0] \ 000001A8 000051E3 CMP R1,#+0 \ 000001AC 0020A013 MOVNE R2,#+0 \ 000001B0 002080E5 STR R2,[R0, #+0] 6460 } 6461 } 6462 return 0; \ ??LoadOnKey_1: \ 000001B4 0000A0E3 MOV R0,#+0 \ 000001B8 FE8FBDE8 POP {R1-R11,PC} ;; return 6463 } 6464 6465 \ In segment CODE, align 4, keep-with-next 6466 int method5(MAIN_GUI *data,GUI_MSG *msg) 6467 { \ method5: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0140A0E1 MOV R4,R1 6468 DirectRedrawGUI(); \ 00000008 3F0100EF SWI +319 6469 if(ShowLoadScreen) \ 0000000C 20009FE5 LDR R0,??method5_0 ;; i_rc + 1100 \ 00000010 000090E5 LDR R0,[R0, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0400A0E1 MOV R0,R4 \ 0000001C 0100000A BEQ ??method5_1 6470 return LoadOnKey(msg); \ 00000020 1040BDE8 POP {R4,LR} ;; Pop \ 00000024 ........ B LoadOnKey ;; tailcall 6471 else 6472 ClOnKey(msg); \ ??method5_1: \ 00000028 ........ BL ClOnKey 6473 /* 6474 if(msg->gbsmsg->msg==LONG_PRESS || msg->gbsmsg->msg==KEY_DOWN) 6475 { 6476 switch(msg->gbsmsg->submess) 6477 { 6478 case UP_BUTTON: MoveUp(); break; 6479 case DOWN_BUTTON: MoveDown(); break; 6480 } 6481 }*/ 6482 6483 return(0); \ 0000002C 0000A0E3 MOV R0,#+0 \ 00000030 1080BDE8 POP {R4,PC} ;; return \ ??method5_0: \ 00000034 ........ DC32 i_rc + 1100 6484 } 6485 \ In segment CODE, align 4, keep-with-next 6486 int method8(void){return(0);} \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return \ In segment CODE, align 4, keep-with-next 6487 int method9(void){return(0);} \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 6488 6489 6490 6491 const void * const gui_methods[11]={ 6492 (void *)method0, //Redraw 6493 (void *)method1, //Create 6494 (void *)method2, //Close 6495 (void *)method3, //Focus 6496 (void *)method4, //Unfocus 6497 (void *)method5, //OnKey 6498 0, 6499 (void *)kill_data, //method7, //Destroy 6500 (void *)method8, 6501 (void *)method9, 6502 0 6503 }; 6504 6505 6506 6507 int checkGui(int id); 6508 #define idlegui_id(icsm) (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 6509 \ In segment CODE, align 4, keep-with-next 6510 int my_keyhook(int key, int m) 6511 { \ my_keyhook: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0050A0E1 MOV R5,R0 6512 if(m==KEY_DOWN) \ 00000008 9300A0E3 MOV R0,#+147 \ 0000000C 400F80E3 ORR R0,R0,#0x100 \ 00000010 000051E1 CMP R1,R0 \ 00000014 2200001A BNE ??my_keyhook_0 6513 { 6514 #ifdef ELKA 6515 if ((key==CAMERA_BUTTON)&&(!IsUnlocked())) \ 00000018 ........ LDR R4,??DataTable264 ;; i_rc \ 0000001C 140055E3 CMP R5,#+20 \ 00000020 0F00001A BNE ??my_keyhook_1 \ 00000024 430000EF SWI +67 \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 0C00001A BNE ??my_keyhook_1 6516 { 6517 GBS_StopTimer(&away_tmr); \ 00000030 5800A0E3 MOV R0,#+88 \ 00000034 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 440100EF SWI +324 6518 msg_away_timer=AUTO_ENGADE*12; \ 00000040 ........ LDR R0,??DataTable251 ;; AUTO_ENGADE \ 00000044 0C10A0E3 MOV R1,#+12 \ 00000048 000090E5 LDR R0,[R0, #+0] \ 0000004C 910000E0 MUL R0,R1,R0 \ 00000050 800384E5 STR R0,[R4, #+896] 6519 away_timer(); \ 00000054 ........ BL away_timer 6520 main_d=1; \ 00000058 0100A0E3 MOV R0,#+1 \ 0000005C 900284E5 STR R0,[R4, #+656] \ 00000060 0D0000EA B ??my_keyhook_2 6521 } 6522 else 6523 { 6524 #endif 6525 if(Reset_timer) \ ??my_keyhook_1: \ 00000064 84009FE5 LDR R0,??my_keyhook_3 ;; Reset_timer \ 00000068 000090E5 LDR R0,[R0, #+0] \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 3080BD08 POPEQ {R4,R5,PC} 6526 { 6527 msg_away_timer=0; 6528 away_m=0; 6529 if(change_back_status) \ 00000074 8C0394E5 LDR R0,[R4, #+908] \ 00000078 0050A0E3 MOV R5,#+0 \ 0000007C 805384E5 STR R5,[R4, #+896] \ 00000080 845384E5 STR R5,[R4, #+900] \ 00000084 000050E3 CMP R0,#+0 \ 00000088 3080BD08 POPEQ {R4,R5,PC} 6530 { 6531 CurrentStatus=status_rem; \ 0000008C 880394E5 LDR R0,[R4, #+904] \ 00000090 700384E5 STR R0,[R4, #+880] 6532 set_my_status(); \ 00000094 ........ BL set_my_status 6533 change_back_status=0; \ 00000098 8C5384E5 STR R5,[R4, #+908] \ ??my_keyhook_2: \ 0000009C 0000A0E3 MOV R0,#+0 \ 000000A0 3080BDE8 POP {R4,R5,PC} 6534 } 6535 } 6536 #ifdef ELKA 6537 } 6538 #endif 6539 } 6540 6541 if(m==LONG_PRESS) \ ??my_keyhook_0: \ 000000A4 020080E2 ADD R0,R0,#+2 \ 000000A8 000051E1 CMP R1,R0 \ 000000AC 0D00001A BNE ??my_keyhook_4 6542 { 6543 void *icsm=FindCSMbyID(CSM_root()->idle_id); \ 000000B0 068100EF SWI +33030 \ 000000B4 040090E5 LDR R0,[R0, #+4] \ 000000B8 080100EF SWI +264 \ 000000BC 0040A0E1 MOV R4,R0 6544 if( key==VOL_DOWN_BUTTON && IsUnlocked() && !(checkGui(idlegui_id(icsm))) ) \ 000000C0 0E0055E3 CMP R5,#+14 \ 000000C4 0700001A BNE ??my_keyhook_4 \ 000000C8 430000EF SWI +67 \ 000000CC 000050E3 CMP R0,#+0 \ 000000D0 3080BD08 POPEQ {R4,R5,PC} \ 000000D4 2C0094E5 LDR R0,[R4, #+44] \ 000000D8 ........ BL checkGui \ 000000DC 000050E3 CMP R0,#+0 \ 000000E0 0000001A BNE ??my_keyhook_4 6545 { 6546 to_develop(); \ 000000E4 ........ BL to_develop 6547 } 6548 } 6549 return 0; \ ??my_keyhook_4: \ 000000E8 0000A0E3 MOV R0,#+0 \ 000000EC 3080BDE8 POP {R4,R5,PC} ;; return \ ??my_keyhook_3: \ 000000F0 ........ DC32 Reset_timer 6550 } \ In segment DATA_C, align 4, align-sorted 6551 /* 6552 int mode_enter; 6553 int mode; 6554 6555 int my_keyhook(int submsg, int msg) 6556 { 6557 if(Reset_timer) 6558 { 6559 msg_away_timer=0; 6560 away_m=0; 6561 if(change_back_status) 6562 { 6563 CurrentStatus=status_rem; 6564 set_my_status(); 6565 change_back_status=0; 6566 } 6567 } 6568 if (submsg!=VOL_DOWN_BUTTON) return(0); 6569 switch(msg) 6570 { 6571 case KEY_DOWN: 6572 if (mode_enter==2) 6573 { 6574 GBS_SendMessage(MMI_CEPID,KEY_UP,VOL_DOWN_BUTTON); 6575 return (0); 6576 } 6577 mode_enter=0; 6578 return (2); 6579 case KEY_UP: 6580 if (mode==1)mode=0; 6581 if (mode_enter==0) 6582 { 6583 mode_enter=2; 6584 GBS_SendMessage(MMI_CEPID,KEY_DOWN,VOL_DOWN_BUTTON); 6585 return (2); 6586 } 6587 if (mode_enter==2) 6588 { 6589 mode_enter=0; 6590 return (0); 6591 } 6592 mode_enter=0; 6593 return (2); 6594 case LONG_PRESS: 6595 mode_enter=1; 6596 if(mode==0) 6597 { 6598 void *icsm; 6599 icsm=FindCSMbyID(CSM_root()->idle_id); 6600 if(!(checkGui(idlegui_id(icsm))) && IsUnlocked()) 6601 { 6602 to_develop(); 6603 } 6604 } 6605 mode=1; 6606 break; 6607 } 6608 return(2); 6609 }*/ 6610 const RECT Canvas={0,0,0,0}; \ Canvas: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ percent_s: \ 00000008 257300 DC8 "%s" \ percent_d: \ 0000000B 256400 DC8 "%d" \ _d: \ 0000000E 256400 DC8 "%d" \ 00000011 000000 DC8 0, 0, 0 \ 00000014 536F756E6420 DC8 "Sound 0n" \ 306E00 \ 0000001D 000000 DC8 0, 0, 0 \ 00000020 536F756E6420 DC8 "Sound Off" \ 4F666600 \ 0000002A 0000 DC8 0, 0 \ 0000002C 566962726120 DC8 "Vibra On" \ 4F6E00 \ 00000035 000000 DC8 0, 0, 0 \ 00000038 566962726120 DC8 "Vibra Off" \ 4F666600 \ 00000042 0000 DC8 0, 0 \ 00000044 C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\352\353\376\367\345\355" \ E2EAEBFEF7E5 \ ED00 \ 00000052 0000 DC8 0, 0 \ 00000054 C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\373\352\353\376\367\345\355" \ E2FBEAEBFEF7 \ E5ED00 \ 00000063 00 DC8 0 \ 00000064 566962726120 DC8 "Vibra rem On" \ 72656D204F6E \ 00 \ 00000071 000000 DC8 0, 0, 0 \ 00000074 566962726120 DC8 "Vibra rem Off" \ 72656D204F66 \ 6600 \ 00000082 0000 DC8 0, 0 \ 00000084 416C6C206368 DC8 "All chat clear!" \ 617420636C65 \ 61722100 \ 00000094 44656661756C DC8 "Default show x-status" \ 742073686F77 \ 20782D737461 \ 74757300 \ 000000AA 0000 DC8 0, 0 \ 000000AC 44656661756C DC8 "Default show time" \ 742073686F77 \ 2074696D6500 \ 000000BE 0000 DC8 0, 0 \ 000000C0 57616974696E DC8 "Waiting for GPRS up..." \ 6720666F7220 \ 475052532075 \ 702E2E2E00 \ 000000D7 00 DC8 0 \ 000000D8 436F6E6E6563 DC8 "Connect to %s:%d" \ 7420746F2025 \ 733A256400 \ 000000E9 000000 DC8 0, 0, 0 \ 000000EC 0A436F6E6E65 DC8 "\012Connect by IP!" \ 637420627920 \ 49502100 \ 000000FC 53656E642044 DC8 "Send DNR..." \ 4E522E2E2E00 \ 00000108 444E52204552 DC8 "DNR ERROR %d!" \ 524F52202564 \ 2100 \ 00000116 0000 DC8 0, 0 \ 00000118 444E52204F6B DC8 "DNR Ok, connecting..." \ 2C20636F6E6E \ 656374696E67 \ 2E2E2E00 \ 0000012E 0000 DC8 0, 0 \ 00000130 CDE5E2EEE7EC DC8 "\315\345\342\356\347\354\356\346\355\356 \357\356\344\352\353\376\367\350\362\374\361\377!" \ EEE6EDEE20EF \ EEE4EAEBFEF7 \ E8F2FCF1FF21 \ 00 \ 00000149 000000 DC8 0, 0, 0 \ 0000014C CDE5E2EEE7EC DC8 "\315\345\342\356\347\354\356\346\355\356 \361\356\347\344\340\362\374 \361\356\352\345\362, \357\345\360\345\347\340\357\363\361\352 GPRS!" \ EEE6EDEE20F1 \ EEE7E4E0F2FC \ 20F1EEEAE5F2 \ 2C20EFE5F0E5 \ E7E0EFF3F1EA \ 204750525321 \ 00 \ 00000177 00 DC8 0 \ 00000178 D1E5F0E2E5F0 DC8 "\321\345\360\342\345\360 \355\345 \355\340\351\344\345\355!" \ 20EDE520EDE0 \ E9E4E5ED2100 \ 0000018A 0000 DC8 0, 0 \ 0000018C 426164207061 DC8 "Bad packet" \ 636B657400 \ 00000197 00 DC8 0 \ 00000198 534325643A20 DC8 "SC%d: %04X" \ 2530345800 \ 000001A3 00 DC8 0 \ 000001A4 4552523A2025 DC8 "ERR: %s" \ 7300 \ 000001AC 75696E256400 DC8 "uin%d" \ 000001B2 0000 DC8 0, 0 \ 000001B4 4D534725643A DC8 "MSG%d: %s" \ 20257300 \ 000001BE 0000 DC8 0, 0 \ 000001C0 50696E672025 DC8 "Ping %d-%d seconds!" \ 642D25642073 \ 65636F6E6473 \ 2100 \ 000001D4 50696E673A20 DC8 "Ping: %d sec" \ 256420736563 \ 00 \ 000001E1 000000 DC8 0, 0, 0 \ 000001E4 2025733A2025 DC8 " %s: %02d:%02d:%02d" \ 3032643A2530 \ 32643A253032 \ 6400 \ 000001F8 537461747573 DC8 "Status change" \ 206368616E67 \ 6500 \ 00000206 0000 DC8 0, 0 \ 00000208 5B25733A2025 DC8 "[%s: %s]\012" \ 735D0A00 \ 00000212 0000 DC8 0, 0 \ 00000214 253032643A25 DC8 "%02d:%02d:%02d %s" \ 3032643A2530 \ 326420257300 \ 00000226 0000 DC8 0, 0 \ 00000228 2825642F2564 DC8 "(%d/%d)" \ 2900 \ 00000230 257325632563 DC8 "%s%c%c(%d/%d)" \ 2825642F2564 \ 2900 \ 0000023E 0000 DC8 0, 0 \ 00000240 25735C6C6F67 DC8 "%s\\logs.txt" \ 732E74787400 \ 0000024C 4675636B2079 DC8 "Fuck you hacker! my password sux ur ass" \ 6F7520686163 \ 6B657221206D \ 792070617373 \ 776F72642073 \ 757820757220 \ 61737300 \ 00000274 556E72656164 DC8 "Unread: %d" \ 3A20256400 \ 0000027F 00 DC8 0 \ 00000280 4E6174494351 DC8 "NatICQ config updated!" \ 20636F6E6669 \ 672075706461 \ 7465642100 \ 00000297 00 DC8 0 \ 00000298 257332323430 DC8 "%s2240.png" \ 2E706E6700 \ 000002A3 00 DC8 0 \ 000002A4 475052532075 DC8 "GPRS up, wait 10 sec..." \ 702C20776169 \ 742031302073 \ 65632E2E2E00 \ 000002BC 54727920746F DC8 "Try to login..." \ 206C6F67696E \ 2E2E2E00 \ 000002CC CDE520E220F1 DC8 "\315\345 \342 \361\357\350\361\352\345" \ EFE8F1EAE500 \ 000002D8 4C6F6F706261 DC8 "Loopback" \ 636B00 \ 000002E1 000000 DC8 0, 0, 0 \ 000002E4 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 \ 0000030C 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 \ 0000032E 0000 DC8 0, 0 \ 00000330 446973636F6E DC8 "Disconnected, %d bytes not sended!" \ 6E6563746564 \ 2C2025642062 \ 79746573206E \ 6F742073656E \ 6465642100 \ 00000353 00 DC8 0 \ 00000354 25730A526563 DC8 "%s\012Reconect after %d second..." \ 6F6E65637420 \ 616674657220 \ 256420736563 \ 6F6E642E2E2E \ 00 \ 00000373 00 DC8 0 \ 00000374 50696E67204E DC8 "Ping None" \ 6F6E6500 \ 0000037E 0000 DC8 0, 0 \ 00000380 C2E2E5E4E8F2 DC8 "\302\342\345\344\350\362\345 UIN/\357\340\360\356\353\374!" \ E52055494E2F \ EFE0F0EEEBFC \ 2100 \ ipc_my_name: \ 00000394 4E6174494351 DC8 "NatICQ" \ 00 \ 0000039B 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003AB 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000 \ ipc_xtask_name: \ 000003B4 585461736B00 DC8 "XTask" \ 000003BA 0000 DC8 0, 0 \ x_status_change: \ 000003BC 582D53746174 DC8 "X-Status change" \ 757320636861 \ 6E676500 \ gui_methods: \ 000003CC ............ DC32 method0, method1, method2, method3, method4, method5, 0H \ ............ \ ............ \ ............ \ 00000000 \ 000003E8 ............ DC32 kill_data, method8, method9, 0H \ ............ \ 00000000 \ In segment DATA_C, align 4, align-sorted \ ipc_test_name: \ 00000000 7465737400 DC8 "test" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_OFFLINE: \ 00000000 4F66666C696E DC8 "Offline" \ 6500 \ In segment DATA_C, align 4, align-sorted \ S_INVISIBLE: \ 00000000 496E76697369 DC8 "Invisible" \ 626C6500 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_AWAY: \ 00000000 4177617900 DC8 "Away" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_NA: \ 00000000 4E2F4100 DC8 "N/A" \ In segment DATA_C, align 4, align-sorted \ S_OCCUPIED: \ 00000000 4F6363757069 DC8 "Occupied" \ 656400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_DND: \ 00000000 444E4400 DC8 "DND" \ In segment DATA_C, align 4, align-sorted \ S_ONLINE: \ 00000000 4F6E6C696E65 DC8 "Online" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ S_FFC: \ 00000000 46464300 DC8 "FFC" \ In segment DATA_C, align 4, align-sorted \ icons_names: \ 00000000 ............ DC32 `?`, `?` \ .... \ 00000008 ............ DC32 `?`, `?` \ .... \ 00000010 ............ DC32 `?`, `?` \ .... \ 00000018 ............ DC32 `?`, `?` \ .... \ 00000020 ............ DC32 `?`, `?` \ .... \ 00000028 ............ DC32 `?`, `?` \ .... \ 00000030 ............ DC32 `?`, `?` \ .... \ 00000038 ............ DC32 `?`, `?` \ .... \ 00000040 ............ DC32 `?`, `?` \ .... \ 00000048 ............ DC32 `?`, `?` \ .... \ 00000050 ............ DC32 `?`, `?` \ .... \ 00000058 ............ DC32 `?`, `?` \ .... \ 00000060 ............ DC32 `?`, `?` \ .... \ 00000068 ............ DC32 `?`, `?` \ .... \ 00000070 ............ DC32 `?`, `?` \ .... \ 00000078 ............ DC32 `?`, `?` \ .... \ 00000080 ........ DC32 `?` \ In segment DATA_C, align 4, align-sorted \ input_awaymsg_desc: \ 00000000 01000000.... DC32 1, input_awaymsg_onkey, input_awaymsg_ghook, input_awaymsg_locret \ ............ \ ........ \ 00000010 00000000.... DC32 0, input_awaymsg_skt \ .... \ 00000018 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000020 080000006400 DC32 8, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ input_awaymsg_hdr: \ 00000038 000000008300 DC16 0, 0, 131, 21 \ 1500 \ 00000040 00000000.... DC32 0H, `?`: \ 00000000 5B495D00 DC8 "[I]" \ percent_t: \ 00000004 257400 DC8 "%t" \ empty_str: \ 00000007 00 DC8 "" \ 00000008 4F66666C696E DC8 "Offline" \ 6500 \ 00000010 4F6E6C696E65 DC8 "Online: %02d:%02d:%02d" \ 3A2025303264 \ 3A253032643A \ 2530326400 \ 00000027 00 DC8 0 \ 00000028 5B56725D00 DC8 "[Vr]" \ 0000002D 000000 DC8 0, 0, 0 \ 00000030 53746174653A DC8 53H, 74H, 61H, 74H, 65H, 3AH, 20H, 25H \ 2025 \ 00000038 642C20525873 DC8 64H, 2CH, 20H, 52H, 58H, 73H, 74H, 61H \ 7461 \ 00000040 74653A202564 DC8 74H, 65H, 3AH, 20H, 25H, 64H, 0AH, 52H \ 0A52 \ 00000048 783A2564622C DC8 78H, 3AH, 25H, 64H, 62H, 2CH, 54H, 78H \ 5478 \ 00000050 3A2564620A51 DC8 3AH, 25H, 64H, 62H, 0AH, 51H, 75H, 65H \ 7565 \ 00000058 75653A202564 DC8 75H, 65H, 3AH, 20H, 25H, 64H, 62H, 0AH \ 620A \ 00000060 25730A257300 DC8 25H, 73H, 0AH, 25H, 73H, 0 \ 00000066 0000 DC8 0, 0 \ 00000068 53746174653A DC8 "State: %d, RXstate: %d" \ 2025642C2052 \ 587374617465 \ 3A20256400 \ 0000007F 00 DC8 0 \ 00000080 0A4C6F616465 DC8 "\012Loaded %d smiles" \ 642025642073 \ 6D696C657300 \ 00000092 0000 DC8 0, 0 \ 00000094 0A4C6F616465 DC8 "\012Loaded %d xstatus" \ 642025642078 \ 737461747573 \ 00 \ 000000A7 00 DC8 0 \ 000000A8 55696E3A2025 DC8 "Uin: %d" \ 6400 \ 000000B0 4F6E6C696E65 DC8 "Online: %02d:%02d:%02d not action %d sec" \ 3A2025303264 \ 3A253032643A \ 253032642020 \ 206E6F742061 \ 6374696F6E20 \ 256420736563 \ 00 \ 000000DB 00 DC8 0 \ 000000DC 4578697400 DC8 "Exit" \ 000000E1 000000 DC8 0, 0, 0 \ 000000E4 434C69737400 DC8 "CList" \ 000000EA 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ def_setting: \ 00000000 25736465665F DC8 "%sdef_settings_mod_%d" \ 73657474696E \ 67735F6D6F64 \ 5F256400 \ 00000016 0000 DC8 0, 0 \ def_sett: \ 00000018 25736465665F DC8 "%sdef_statusset_mod_%d" \ 737461747573 \ 7365745F6D6F \ 645F256400 \ 0000002F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5B413A25735D DC8 "[A:%s]" \ 00 \ 00000007 00 DC8 0 \ 00000008 3C4300 DC8 "` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ menu_skt: \ 00000000 ........0000 DC32 menu_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ CmdSoftkeys: \ 00000000 000000000100 DC32 0, 1, 2 \ 000002000000 \ In segment DATA_C, align 4, align-sorted \ cmd_sk: \ 00000000 04000000 DC16 4, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ cmd_Back_skt: \ 00000000 ........0000 DC32 cmd_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 53656C656374 DC8 "Select command" \ 20636F6D6D61 \ 6E6400 \ 0000000F 00 DC8 0 \ 00000010 46494C45204E DC8 "FILE NOT FOUND!" \ 4F5420464F55 \ 4E442100 \ 00000020 08000000.... DC32 8, CmdMenuKeyHook, CmdMenuGHook, 0H, CmdSoftkeys, cmd_Back_skt, 16 \ ............ \ 00000000.... \ ............ \ 10000000 \ 0000003C ........0000 DC32 CmdMenuItemHandler, 0H, 0H, 0 \ 000000000000 \ 00000000 \ In segment DATA_C, align 4, align-sorted \ menutext: \ 00000000 ........ DC32 `?` \ 00000008 ........ DC32 `?` \ 0000000C ........ DC32 `?` \ 00000024 00000000 DC8 0, 0, 0, 0 \ 00000028 CCE5EDFE20EA DC8 "\314\345\355\376 \352\356\355\362\340\352\362\340 \"%s\"" \ EEEDF2E0EAF2 \ E02022257322 \ 00 \ 0000003B 00 DC8 0 \ 0000003C CEF4F4EBE0E9 DC8 "\316\364\364\353\340\351\355" \ ED00 \ 00000044 CDE5F220F5F1 DC8 "\315\345\362 \365\361\362\340\362\363\361\340" \ F2E0F2F3F1E0 \ 00 \ 00000051 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ clrSelect: \ 00000000 FF000020 DC8 255, 0, 0, 32 \ In segment DATA_C, align 4, align-sorted \ fntSelect: \ 00000000 FFFF0060 DC8 255, 255, 0, 96 \ In segment DATA_C, align 4, align-sorted \ bordSelect: \ 00000000 00000060 DC8 0, 0, 0, 96 \ In segment DATA_C, align 4, align-sorted \ clrNotSelect: \ 00000000 00000000 DC8 0, 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ bordNotSelect: \ 00000000 00000000 DC8 0, 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ fntNotSelect: \ 00000000 FFFFFF60 DC8 255, 255, 255, 96 \ In segment DATA_C, align 4, align-sorted \ I_gui_methods: \ 00000000 ............ DC32 I_OnRedraw, I_onCreate, I_onClose, I_onFocus, I_onUnfocus, I_OnKey \ ............ \ ............ \ ............ \ 00000018 00000000.... DC32 0H, kill_data, I_method8, I_method9, 0H \ ............ \ ........0000 \ 0000 \ In segment DATA_C, align 1, align-sorted \ _t: \ 00000000 257400 DC8 "%t" 6611 unsigned int *errornumber; \ In segment CODE, align 4, keep-with-next 6612 void maincsm_oncreate(CSM_RAM *data) 6613 { \ maincsm_oncreate: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 40DF4DE2 SUB SP,SP,#+256 \ 00000008 0050A0E1 MOV R5,R0 6614 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 0000000C 4000A0E3 MOV R0,#+64 \ 00000010 140000EF SWI +20 \ 00000014 0060A0E1 MOV R6,R0 6615 MAIN_CSM*csm=(MAIN_CSM*)data; 6616 zeromem(main_gui,sizeof(MAIN_GUI)); \ 00000018 4010A0E3 MOV R1,#+64 \ 0000001C 1D0100EF SWI +285 6617 patch_rect((RECT*)&Canvas,0,0,ScreenW()-1,ScreenH()-1); \ 00000020 898100EF SWI +33161 \ 00000024 0040A0E1 MOV R4,R0 \ 00000028 888100EF SWI +33160 \ 0000002C 011044E2 SUB R1,R4,#+1 \ 00000030 00419FE5 LDR R4,??maincsm_oncreate_0 ;; Canvas \ 00000034 010040E2 SUB R0,R0,#+1 \ 00000038 0070A0E3 MOV R7,#+0 \ 0000003C 007084E5 STR R7,[R4, #+0] \ 00000040 B400C4E1 STRH R0,[R4, #+4] \ 00000044 B610C4E1 STRH R1,[R4, #+6] 6618 main_gui->gui.canvas=(void *)(&Canvas); \ 00000048 004086E5 STR R4,[R6, #+0] 6619 // main_gui->gui.flag30=2; 6620 main_gui->gui.methods=(void *)gui_methods; \ 0000004C F30F84E2 ADD R0,R4,#+972 \ 00000050 040086E5 STR R0,[R6, #+4] 6621 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 00000054 158000EF SWI +32789 \ 00000058 200086E5 STR R0,[R6, #+32] 6622 csm->csm.state=0; \ 0000005C 107085E5 STR R7,[R5, #+16] 6623 csm->csm.unk1=0; \ 00000060 147085E5 STR R7,[R5, #+20] 6624 maingui_id=csm->gui_id=CreateGUI(main_gui); \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 370100EF SWI +311 \ 0000006C 280085E5 STR R0,[R5, #+40] \ 00000070 ........ LDR R5,??DataTable264 ;; i_rc \ 00000074 D40285E5 STR R0,[R5, #+724] 6625 ews=AllocWS(16384); \ 00000078 400CA0E3 MOV R0,#+16384 \ 0000007C 250100EF SWI +293 \ 00000080 780385E5 STR R0,[R5, #+888] 6626 // MutexCreate(&contactlist_mtx); 6627 DNR_TRIES=3; \ 00000084 0300A0E3 MOV R0,#+3 \ 00000088 280485E5 STR R0,[R5, #+1064] 6628 // SUBPROC((void *)InitSmiles); 6629 // SUBPROC((void *)create_connect); 6630 wsBuffer=AllocWS(4096); \ 0000008C 400DA0E3 MOV R0,#+4096 \ 00000090 250100EF SWI +293 6631 char fullname[256]; 6632 snprintf(fullname,127,"%s\\logs.txt",TEMPLATES_PATH); \ 00000094 ........ LDR R3,??DataTable253 ;; TEMPLATES_PATH \ 00000098 A00285E5 STR R0,[R5, #+672] \ 0000009C 902F84E2 ADD R2,R4,#+576 \ 000000A0 7F10A0E3 MOV R1,#+127 \ 000000A4 0D00A0E1 MOV R0,SP \ 000000A8 1B0100EF SWI +283 6633 unlink(fullname,errornumber); \ 000000AC 801495E5 LDR R1,[R5, #+1152] \ 000000B0 0D00A0E1 MOV R0,SP \ 000000B4 6B0100EF SWI +363 6634 OneSecTmr(); \ 000000B8 ........ BL OneSecTmr 6635 SUBPROC((void*)StatusToIMGHDR); \ 000000BC 78009FE5 LDR R0,??maincsm_oncreate_0+0x4 ;; StatusToIMGHDR \ 000000C0 710100EF SWI +369 6636 /* 6637 if(ParseUINS()!=0) 6638 { 6639 USE_ADD_UIN=1; 6640 InitXStatusesImg(); 6641 }*/ 6642 6643 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 000000C4 ........ LDR R2,??DataTable254 ;; process_active_timer \ 000000C8 871EA0E3 MOV R1,#+2160 \ 000000CC 6800A0E3 MOV R0,#+104 \ 000000D0 780D80E3 ORR R0,R0,#0x1E00 \ 000000D4 050080E0 ADD R0,R0,R5 \ 000000D8 4D0000EF SWI +77 6644 6645 // if(!USE_ADD_UIN) 6646 // { 6647 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000000DC ........ LDR R0,??DataTable255 ;; UIN \ 000000E0 0B1084E2 ADD R1,R4,#+11 \ 000000E4 002090E5 LDR R2,[R0, #+0] \ 000000E8 9A00A0E3 MOV R0,#+154 \ 000000EC C00F80E3 ORR R0,R0,#0x300 \ 000000F0 040080E0 ADD R0,R0,R4 \ 000000F4 160000EF SWI +22 6648 gipc.name_to=ipc_my_name; \ 000000F8 E50FA0E3 MOV R0,#+916 \ 000000FC 041080E0 ADD R1,R0,R4 \ 00000100 D41085E5 STR R1,[R5, #+212] 6649 gipc.name_from=ipc_my_name; \ 00000104 040080E0 ADD R0,R0,R4 \ 00000108 D80085E5 STR R0,[R5, #+216] 6650 gipc.data=(void *)-1; \ 0000010C 0700E0E1 MVN R0,R7 \ 00000110 DC0085E5 STR R0,[R5, #+220] 6651 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 00000114 D43085E2 ADD R3,R5,#+212 \ 00000118 0120A0E3 MOV R2,#+1 \ 0000011C B010A0E3 MOV R1,#+176 \ 00000120 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000124 0900A0E3 MOV R0,#+9 \ 00000128 420C80E3 ORR R0,R0,#0x4200 \ 0000012C 000100EF SWI +256 6652 //} 6653 /* 6654 InitXStatusesImg(); 6655 //InitSmiles(); Это вызовется из InitXStatusesImg 6656 create_connect(); 6657 silenthide=1; 6658 gipc.name_to=ipc_xtask_name; 6659 gipc.name_from=ipc_my_name; 6660 gipc.data=0; 6661 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); 6662 */ 6663 } \ 00000130 40DF8DE2 ADD SP,SP,#+256 \ 00000134 F080BDE8 POP {R4-R7,PC} ;; return \ ??maincsm_oncreate_0: \ 00000138 ........ DC32 Canvas \ 0000013C ........ DC32 StatusToIMGHDR 6664 6665 \ In segment CODE, align 4, keep-with-next 6666 void FreeTimers() 6667 { \ FreeTimers: \ 00000000 10402DE9 PUSH {R4,LR} 6668 GBS_DelTimer(&tmr_active); \ 00000004 ........ LDR R4,??DataTable264 ;; i_rc \ 00000008 6800A0E3 MOV R0,#+104 \ 0000000C 780D80E3 ORR R0,R0,#0x1E00 \ 00000010 040080E0 ADD R0,R0,R4 \ 00000014 8C0100EF SWI +396 6669 GBS_DelTimer(&tmr_vibra); \ 00000018 4800A0E3 MOV R0,#+72 \ 0000001C 780D80E3 ORR R0,R0,#0x1E00 \ 00000020 040080E0 ADD R0,R0,R4 \ 00000024 8C0100EF SWI +396 6670 GBS_DelTimer(&reconnect_tmr); \ 00000028 5800A0E3 MOV R0,#+88 \ 0000002C 780D80E3 ORR R0,R0,#0x1E00 \ 00000030 040080E0 ADD R0,R0,R4 \ 00000034 8C0100EF SWI +396 6671 GBS_DelTimer(&tmr_illumination); \ 00000038 3800A0E3 MOV R0,#+56 \ 0000003C 780D80E3 ORR R0,R0,#0x1E00 \ 00000040 040080E0 ADD R0,R0,R4 \ 00000044 8C0100EF SWI +396 6672 GBS_DelTimer(&tm22); \ 00000048 F800A0E3 MOV R0,#+248 \ 0000004C 880D80E3 ORR R0,R0,#0x2200 \ 00000050 040080E0 ADD R0,R0,R4 \ 00000054 8C0100EF SWI +396 6673 #ifdef ELKA 6674 GBS_DelTimer(&sli_tmr); \ 00000058 2800A0E3 MOV R0,#+40 \ 0000005C 700D80E3 ORR R0,R0,#0x1C00 \ 00000060 040080E0 ADD R0,R0,R4 \ 00000064 8C0100EF SWI +396 6675 #endif 6676 GBS_DelTimer(&remind_tmr); \ 00000068 7800A0E3 MOV R0,#+120 \ 0000006C 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000070 040080E0 ADD R0,R0,R4 \ 00000074 8C0100EF SWI +396 6677 GBS_DelTimer(&ping_tmr); \ 00000078 D000A0E3 MOV R0,#+208 \ 0000007C 600D80E3 ORR R0,R0,#0x1800 \ 00000080 040080E0 ADD R0,R0,R4 \ 00000084 8C0100EF SWI +396 6678 GBS_DelTimer(&uptime_tmr); \ 00000088 8800A0E3 MOV R0,#+136 \ 0000008C 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000090 040080E0 ADD R0,R0,R4 \ 00000094 8C0100EF SWI +396 6679 GBS_DelTimer(&autoChangeStatus); \ 00000098 6800A0E3 MOV R0,#+104 \ 0000009C 6C0D80E3 ORR R0,R0,#0x1B00 \ 000000A0 040080E0 ADD R0,R0,R4 \ 000000A4 8C0100EF SWI +396 6680 #ifdef NEWSGOLD 6681 GBS_DelTimer(&tracktmr); \ 000000A8 9800A0E3 MOV R0,#+152 \ 000000AC 6C0D80E3 ORR R0,R0,#0x1B00 \ 000000B0 040080E0 ADD R0,R0,R4 \ 000000B4 8C0100EF SWI +396 6682 GBS_DelTimer(&scrsTmr); \ 000000B8 E000A0E3 MOV R0,#+224 \ 000000BC 640D80E3 ORR R0,R0,#0x1900 \ 000000C0 040080E0 ADD R0,R0,R4 \ 000000C4 8C0100EF SWI +396 6683 #endif 6684 GBS_DelTimer(&incs2); \ 000000C8 E800A0E3 MOV R0,#+232 \ 000000CC 880D80E3 ORR R0,R0,#0x2200 \ 000000D0 040080E0 ADD R0,R0,R4 \ 000000D4 8C0100EF SWI +396 6685 GBS_DelTimer(&develop); \ 000000D8 1800A0E3 MOV R0,#+24 \ 000000DC 840D80E3 ORR R0,R0,#0x2100 \ 000000E0 040080E0 ADD R0,R0,R4 \ 000000E4 8C0100EF SWI +396 6686 GBS_DelTimer(&away_tmr); \ 000000E8 5800A0E3 MOV R0,#+88 \ 000000EC 6C0D80E3 ORR R0,R0,#0x1B00 \ 000000F0 040080E0 ADD R0,R0,R4 \ 000000F4 8C0100EF SWI +396 6687 } \ 000000F8 1080BDE8 POP {R4,PC} ;; return 6688 \ In segment CODE, align 4, keep-with-next 6689 void maincsm_onclose(CSM_RAM *csm) 6690 { \ maincsm_onclose: \ 00000000 10402DE9 PUSH {R4,LR} 6691 WriteDefSettings(); 6692 FreeTimers(); 6693 FreeWS(wsBuffer); \ 00000004 ........ LDR R4,??DataTable264 ;; i_rc \ 00000008 ........ BL WriteDefSettings \ 0000000C ........ BL FreeTimers \ 00000010 A00294E5 LDR R0,[R4, #+672] \ 00000014 290100EF SWI +297 6694 SetVibration(0); \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 7C0000EF SWI +124 6695 FreeTemplates(); \ 00000020 ........ BL FreeTemplates 6696 cmdFree(); \ 00000024 ........ BL cmdFree 6697 #ifdef kluchnik 6698 FreeBotMessage(); \ 00000028 ........ BL FreeBotMessage 6699 #endif 6700 FreeCLIST(); \ 0000002C ........ _BLF FreeCLIST,??FreeCLIST??rA 6701 free_ICONS(); \ 00000030 ........ BL free_ICONS 6702 FreeStatusToIMGHDR(); \ 00000034 ........ BL FreeStatusToIMGHDR 6703 FreeWS(ews); \ 00000038 780394E5 LDR R0,[R4, #+888] \ 0000003C 290100EF SWI +297 6704 FreeXStatusText(); \ 00000040 ........ _BLF FreeXStatusText,??FreeXStatusText??rA 6705 PrintLibFree(); \ 00000044 ........ _BLF PrintLibFree,??PrintLibFree??rA 6706 RemoveKeybMsgHook((void *)my_keyhook); \ 00000048 ........ LDR R0,??DataTable258 ;; my_keyhook \ 0000004C 2D0100EF SWI +301 6707 SUBPROC((void *)FreeSmiles); \ 00000050 1C009FE5 LDR R0,??maincsm_onclose_0 ;; FreeSmiles \ 00000054 710100EF SWI +369 6708 // SUBPROC((void *)FreeXStatusesImg); 6709 SUBPROC((void *)end_socket); \ 00000058 ........ LDR R0,??DataTable259 ;; end_socket \ 0000005C 710100EF SWI +369 6710 SUBPROC((void *)ClearSendQ); \ 00000060 ........ LDR R0,??DataTable291 ;; ClearSendQ \ 00000064 710100EF SWI +369 6711 SUBPROC((void *)ElfKiller); \ 00000068 ........ LDR R0,??DataTable261 ;; ElfKiller \ 0000006C 710100EF SWI +369 6712 } \ 00000070 1080BDE8 POP {R4,PC} ;; return \ ??maincsm_onclose_0: \ 00000074 ........ DC32 FreeSmiles 6713 \ In segment CODE, align 4, keep-with-next 6714 void do_reconnect(void) 6715 { 6716 if (is_gprs_online) \ do_reconnect: \ 00000000 ........ LDR R0,??DataTable264 ;; i_rc \ 00000004 00402DE9 PUSH {LR} \ 00000008 FC1390E5 LDR R1,[R0, #+1020] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 6717 { 6718 DNR_TRIES=3; \ 00000014 0310A0E3 MOV R1,#+3 \ 00000018 281480E5 STR R1,[R0, #+1064] 6719 SUBPROC((void*)create_connect); \ 0000001C ........ LDR R0,??DataTable263 ;; create_connect \ 00000020 710100EF SWI +369 6720 } 6721 } \ 00000024 0080BDE8 POP {PC} ;; return 6722 \ In segment CODE, align 4, keep-with-next 6723 void CheckDoubleRun(void) 6724 { \ CheckDoubleRun: \ 00000000 10402DE9 PUSH {R4,LR} 6725 int csm_id; 6726 if ((csm_id=(int)(gipc.data))!=-1) \ 00000004 ........ LDR R4,??DataTable264 ;; i_rc \ 00000008 DC0094E5 LDR R0,[R4, #+220] \ 0000000C 010070E3 CMN R0,#+1 \ 00000010 1100000A BEQ ??CheckDoubleRun_0 6727 { 6728 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable267 ;; Canvas 6729 gipc.name_from=ipc_my_name; 6730 gipc.data=(void *)csm_id; \ 00000018 DC0084E5 STR R0,[R4, #+220] \ 0000001C ED2F81E2 ADD R2,R1,#+948 \ 00000020 D42084E5 STR R2,[R4, #+212] \ 00000024 E51F81E2 ADD R1,R1,#+916 \ 00000028 D81084E5 STR R1,[R4, #+216] 6731 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 0000002C D43084E2 ADD R3,R4,#+212 \ 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 6732 LockSched(); \ 00000048 460100EF SWI +326 6733 CloseCSM(maincsm_id); \ 0000004C D00294E5 LDR R0,[R4, #+720] \ 00000050 FC0100EF SWI +508 6734 //ShowMSG(1,(int)LG_ALREADY_STARTED); 6735 UnlockSched(); \ 00000054 470100EF SWI +327 \ 00000058 1080BDE8 POP {R4,PC} 6736 } 6737 else 6738 // if(!USE_ADD_UIN) 6739 { 6740 InitXStatusesImg(); \ ??CheckDoubleRun_0: \ 0000005C ........ _BLF InitXStatusesImg,??InitXStatusesImg??rA 6741 //InitSmiles(); Это вызовется из InitXStatusesImg 6742 create_connect(); \ 00000060 ........ BL create_connect 6743 } 6744 /*else 6745 { 6746 InitXStatusesImg(); 6747 USE_ADD_UIN=1; 6748 }*/ 6749 6750 } \ 00000064 1080BDE8 POP {R4,PC} ;; return 6751 6752 6753 6754 //------------------------------------------------------------// 6755 \ In segment CODE, align 4, keep-with-next 6756 int checkGui(int id) 6757 { \ checkGui: \ 00000000 10402DE9 PUSH {R4,LR} 6758 int retval = 0; \ 00000004 0040A0E3 MOV R4,#+0 6759 if (IsGuiOnTop(id)) \ 00000008 350100EF SWI +309 \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0600000A BEQ ??checkGui_0 6760 { 6761 GUI* igui = GetTopGUI(); 6762 if (igui) \ 00000014 4D0100EF SWI +333 \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 0300000A BEQ ??checkGui_0 6763 { 6764 #ifdef ELKA 6765 canvasdata = BuildCanvas(); \ 00000020 F18000EF SWI +33009 \ 00000024 0C109FE5 LDR R1,??checkGui_1 ;; i_rc + 664 6766 retval = 1; \ 00000028 0140A0E3 MOV R4,#+1 \ 0000002C 000081E5 STR R0,[R1, #+0] 6767 #else 6768 void *idata = GetDataOfItemByID(igui, 2); 6769 if (idata) 6770 { 6771 canvasdata = ((void **)idata)[DISPLACE_OF_IDLECANVAS / 4]; 6772 retval = 1; 6773 } 6774 #endif 6775 } 6776 } 6777 return retval; \ ??checkGui_0: \ 00000030 0400A0E1 MOV R0,R4 \ 00000034 1080BDE8 POP {R4,PC} ;; return \ ??checkGui_1: \ 00000038 ........ DC32 i_rc + 664 6778 } 6779 6780 6781 //-------------------------------------------------------------// 6782 #define IPC_GAME 7 6783 6784 typedef struct{ 6785 unsigned long uin; 6786 char *msg; 6787 }IPCmsg; 6788 \ In segment CODE, align 4, keep-with-next 6789 int maincsm_onmessage(CSM_RAM *data,GBS_MSG *msg) 6790 { \ maincsm_onmessage: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} 6791 6792 // char ss[100]; 6793 MAIN_CSM *csm=(MAIN_CSM*)data; 6794 { 6795 //IPC 6796 if (msg->msg==MSG_IPC) \ 00000004 ........ LDR R5,??DataTable266 ;; i_rc \ 00000008 20D04DE2 SUB SP,SP,#+32 \ 0000000C ........ LDR R7,??DataTable267 ;; Canvas \ 00000010 0140A0E1 MOV R4,R1 \ 00000014 8810A0E3 MOV R1,#+136 \ 00000018 781D81E3 ORR R1,R1,#0x1E00 \ 0000001C 051081E0 ADD R1,R1,R5 \ 00000020 00108DE5 STR R1,[SP, #+0] \ 00000024 040094E5 LDR R0,[R4, #+4] \ 00000028 0060A0E3 MOV R6,#+0 \ 0000002C B010A0E3 MOV R1,#+176 \ 00000030 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000034 010050E1 CMP R0,R1 \ 00000038 AE00001A BNE ??maincsm_onmessage_2 6797 { 6798 IPC_REQ *ipc; 6799 if ((ipc=(IPC_REQ*)msg->data0)) \ 0000003C 0C8094E5 LDR R8,[R4, #+12] \ 00000040 000058E3 CMP R8,#+0 \ 00000044 AB00000A BEQ ??maincsm_onmessage_2 6800 { 6801 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 00000048 000098E5 LDR R0,[R8, #+0] \ 0000004C E59FA0E3 MOV R9,#+916 \ 00000050 071089E0 ADD R1,R9,R7 \ 00000054 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000058 000050E3 CMP R0,#+0 \ 0000005C A500001A BNE ??maincsm_onmessage_2 6802 { 6803 switch (msg->submess) \ 00000060 081094E5 LDR R1,[R4, #+8] \ 00000064 040098E5 LDR R0,[R8, #+4] \ 00000068 011041E2 SUB R1,R1,#+1 \ 0000006C 050051E3 CMP R1,#+5 \ 00000070 A000008A BHI ??maincsm_onmessage_2 \ 00000074 012F8FE2 ADR R2,??maincsm_onmessage_0 \ 00000078 0120D2E7 LDRB R2,[R2, R1] \ 0000007C 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_0: \ 00000080 010A143C DC8 +1,+10,+20,+60 \ 00000084 7A190000 DC8 +122,+25,+0,+0 6804 { 6805 case IPC_CHECK_DOUBLERUN: 6806 //Если приняли свое собственное сообщение, значит запускаем чекер 6807 if (ipc->name_from==ipc_my_name) SUBPROC((void *)CheckDoubleRun); \ ??maincsm_onmessage_3: \ 00000088 071089E0 ADD R1,R9,R7 \ 0000008C 010050E1 CMP R0,R1 \ 00000090 0200001A BNE ??maincsm_onmessage_4 \ 00000094 300C9FE5 LDR R0,??maincsm_onmessage_5 ;; CheckDoubleRun \ 00000098 710100EF SWI +369 \ 0000009C 950000EA B ??maincsm_onmessage_2 6808 else ipc->data=(void *)maincsm_id; \ ??maincsm_onmessage_4: \ 000000A0 D00295E5 LDR R0,[R5, #+720] \ 000000A4 080088E5 STR R0,[R8, #+8] \ 000000A8 920000EA B ??maincsm_onmessage_2 6809 break; 6810 case IPC_SMILE_PROCESSED: 6811 //Только собственные смайлы ;) 6812 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextSmile); \ ??maincsm_onmessage_6: \ 000000AC 071089E0 ADD R1,R9,R7 \ 000000B0 010050E1 CMP R0,R1 \ 000000B4 0100001A BNE ??maincsm_onmessage_7 \ 000000B8 100C9FE5 LDR R0,??maincsm_onmessage_5+0x4 ;; ProcessNextSmile \ ??maincsm_onmessage_8: \ 000000BC 710100EF SWI +369 6813 if(ShowLoadScreen) SMART_REDRAW(); \ ??maincsm_onmessage_7: \ 000000C0 4C0495E5 LDR R0,[R5, #+1100] \ ??maincsm_onmessage_9: \ 000000C4 000050E3 CMP R0,#+0 \ 000000C8 8A00000A BEQ ??maincsm_onmessage_2 \ ??maincsm_onmessage_10: \ 000000CC ........ BL SMART_REDRAW \ 000000D0 880000EA B ??maincsm_onmessage_2 6814 // zeromem(logmsg2,256); 6815 break; 6816 case IPC_XSTATUSIMG_PROCESSED: 6817 //Только собственные иксстатусы ;) 6818 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextXStatImg); \ ??maincsm_onmessage_11: \ 000000D4 071089E0 ADD R1,R9,R7 \ 000000D8 010050E1 CMP R0,R1 \ 000000DC F7FFFF1A BNE ??maincsm_onmessage_7 \ 000000E0 EC0B9FE5 LDR R0,??maincsm_onmessage_5+0x8 ;; ProcessNextXStatImg \ 000000E4 F4FFFFEA B ??maincsm_onmessage_8 6819 if(ShowLoadScreen) SMART_REDRAW(); 6820 break; 6821 case IPC_ONESECOND: 6822 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_12: \ 000000E8 071089E0 ADD R1,R9,R7 \ 000000EC 010050E1 CMP R0,R1 \ 000000F0 8000001A BNE ??maincsm_onmessage_2 6823 { 6824 //if(!(--on_off_timer)) on_off_timer=0;//таймер показа подключившихся/отключившихся 6825 if(on_off_timer>0) \ 000000F4 180495E5 LDR R0,[R5, #+1048] \ 000000F8 010050E3 CMP R0,#+1 \ 000000FC 020000BA BLT ??maincsm_onmessage_13 6826 { 6827 on_off_timer--; \ 00000100 010040E2 SUB R0,R0,#+1 \ 00000104 180485E5 STR R0,[R5, #+1048] 6828 SMART_REDRAW(); \ 00000108 EFFFFFEA B ??maincsm_onmessage_10 6829 break; 6830 } 6831 else 6832 if(on_off_timer!=-1) \ ??maincsm_onmessage_13: \ 0000010C 010070E3 CMN R0,#+1 \ 00000110 0500000A BEQ ??maincsm_onmessage_14 6833 { 6834 on_off_timer=-1; \ 00000114 0600E0E1 MVN R0,R6 \ 00000118 180485E5 STR R0,[R5, #+1048] 6835 zeromem(on_off_buf,128); \ 0000011C 00009DE5 LDR R0,[SP, #+0] \ 00000120 8010A0E3 MOV R1,#+128 \ 00000124 1D0100EF SWI +285 6836 SMART_REDRAW(); \ 00000128 ........ BL SMART_REDRAW 6837 // UpdateCLheader(); 6838 } 6839 6840 if(PrintTimer>0) \ ??maincsm_onmessage_14: \ 0000012C AC0295E5 LDR R0,[R5, #+684] \ 00000130 010050E3 CMP R0,#+1 \ 00000134 020000BA BLT ??maincsm_onmessage_15 6841 { 6842 PrintTimer--; \ 00000138 010040E2 SUB R0,R0,#+1 \ 0000013C AC0285E5 STR R0,[R5, #+684] 6843 SMART_REDRAW(); \ 00000140 ........ BL SMART_REDRAW 6844 } 6845 6846 int f=0; 6847 CLIST *t=(CLIST*)cltop; \ ??maincsm_onmessage_15: \ 00000144 041495E5 LDR R1,[R5, #+1028] \ 00000148 0000A0E3 MOV R0,#+0 \ 0000014C 030000EA B ??maincsm_onmessage_16 6848 while(t && !f) 6849 { 6850 if(t->just_now) f=1; \ ??maincsm_onmessage_17: \ 00000150 742091E5 LDR R2,[R1, #+116] 6851 t=t->next; \ 00000154 001091E5 LDR R1,[R1, #+0] \ 00000158 000052E3 CMP R2,#+0 \ 0000015C 0100A013 MOVNE R0,#+1 6852 } \ ??maincsm_onmessage_16: \ 00000160 000051E3 CMP R1,#+0 \ 00000164 D6FFFF0A BEQ ??maincsm_onmessage_9 \ 00000168 000050E3 CMP R0,#+0 \ 0000016C F7FFFF0A BEQ ??maincsm_onmessage_17 6853 6854 /* t=(CLIST*)cltop; 6855 while(t) 6856 { 6857 if(t->just_now) 6858 t->just_i=!t->just_i; 6859 t=t->next; 6860 } */ 6861 6862 if(f)/* GBS_StartTimerProc(&cltmr, 216, MyRedraw);*/MyRedraw(); \ 00000170 D3FFFFEA B ??maincsm_onmessage_9 6863 } 6864 break; 6865 case IPC_TENSECONDS: 6866 //Только свое сообщение 6867 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_18: \ 00000174 071089E0 ADD R1,R9,R7 \ 00000178 010050E1 CMP R0,R1 \ 0000017C 5D00001A BNE ??maincsm_onmessage_2 6868 { 6869 CLIST *t=(CLIST *)cltop; 6870 int f=0; 6871 if(main_msg_timer2!=0) main_msg_timer2--; else main_msg_timer2=0; \ 00000180 340495E5 LDR R0,[R5, #+1076] \ 00000184 048495E5 LDR R8,[R5, #+1028] \ 00000188 0090A0E3 MOV R9,#+0 \ 0000018C 000050E3 CMP R0,#+0 \ 00000190 1A00000A BEQ ??maincsm_onmessage_19 \ 00000194 010040E2 SUB R0,R0,#+1 \ 00000198 340485E5 STR R0,[R5, #+1076] \ 0000019C 170000EA B ??maincsm_onmessage_19 6872 while(t) 6873 { 6874 if(t->just_now) \ ??maincsm_onmessage_20: \ 000001A0 740098E5 LDR R0,[R8, #+116] \ 000001A4 000050E3 CMP R0,#+0 \ 000001A8 0300000A BEQ ??maincsm_onmessage_21 6875 { 6876 if (!(--(t->just_now))){ f=1; t->just_i=0; } \ 000001AC 010050E2 SUBS R0,R0,#+1 \ 000001B0 740088E5 STR R0,[R8, #+116] \ 000001B4 0190A003 MOVEQ R9,#+1 \ 000001B8 78608805 STREQ R6,[R8, #+120] 6877 } 6878 if (t->isactive) \ ??maincsm_onmessage_21: \ 000001BC AC0098E5 LDR R0,[R8, #+172] \ 000001C0 000050E3 CMP R0,#+0 \ 000001C4 0C00000A BEQ ??maincsm_onmessage_22 6879 { 6880 if (!(--(t->isactive))) \ 000001C8 010050E2 SUBS R0,R0,#+1 \ 000001CC AC0088E5 STR R0,[R8, #+172] \ 000001D0 0900001A BNE ??maincsm_onmessage_22 6881 { 6882 f=1; //Если дошли до 0 хотя бы один раз - надо перерисовать меню 6883 if ((t->log)&&(!t->isunread)) \ 000001D4 A00098E5 LDR R0,[R8, #+160] \ 000001D8 0190A0E3 MOV R9,#+1 \ 000001DC 000050E3 CMP R0,#+0 \ 000001E0 0500000A BEQ ??maincsm_onmessage_22 \ 000001E4 900098E5 LDR R0,[R8, #+144] \ 000001E8 000050E3 CMP R0,#+0 \ 000001EC 0200001A BNE ??maincsm_onmessage_22 6884 { 6885 FreeLOGQ(&t->log); \ 000001F0 A00088E2 ADD R0,R8,#+160 \ 000001F4 ........ BL FreeLOGQ 6886 t->msg_count=0; \ 000001F8 B06088E5 STR R6,[R8, #+176] 6887 } 6888 } 6889 } 6890 t=(CLIST *)(t->next); \ ??maincsm_onmessage_22: \ 000001FC 008098E5 LDR R8,[R8, #+0] 6891 } \ ??maincsm_onmessage_19: \ 00000200 000058E3 CMP R8,#+0 \ 00000204 E5FFFF1A BNE ??maincsm_onmessage_20 6892 if (f) \ 00000208 000059E3 CMP R9,#+0 \ 0000020C 0A00000A BEQ ??maincsm_onmessage_23 6893 { 6894 CLIST *oldt=NULL; 6895 if (contactlist_menu_id) \ 00000210 0C1495E5 LDR R1,[R5, #+1036] \ 00000214 0000A0E3 MOV R0,#+0 \ 00000218 000051E3 CMP R1,#+0 \ 0000021C 0400000A BEQ ??maincsm_onmessage_24 6896 { 6897 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 00000220 0C0495E5 LDR R0,[R5, #+1036] \ 00000224 0010A0E3 MOV R1,#+0 \ 00000228 090200EF SWI +521 \ 0000022C 8F0100EF SWI +399 \ 00000230 ........ _BLF FindContactByN,??FindContactByN??rA 6898 } 6899 RecountMenu(oldt,1); \ ??maincsm_onmessage_24: \ 00000234 0110A0E3 MOV R1,#+1 \ 00000238 ........ BL RecountMenu 6900 } 6901 if (time_to_stop_t9) \ ??maincsm_onmessage_23: \ 0000023C 3C0495E5 LDR R0,[R5, #+1084] \ 00000240 000050E3 CMP R0,#+0 \ 00000244 2B00000A BEQ ??maincsm_onmessage_2 6902 { 6903 if (!(--time_to_stop_t9)) \ 00000248 010050E2 SUBS R0,R0,#+1 \ 0000024C 3C0485E5 STR R0,[R5, #+1084] \ 00000250 2800001A BNE ??maincsm_onmessage_2 6904 { 6905 if (IsGuiOnTop(edchat_id)) RefreshGUI(); \ 00000254 100495E5 LDR R0,[R5, #+1040] \ 00000258 350100EF SWI +309 \ 0000025C 000050E3 CMP R0,#+0 \ 00000260 2400000A BEQ ??maincsm_onmessage_2 \ 00000264 960100EF SWI +406 \ 00000268 220000EA B ??maincsm_onmessage_2 6906 } 6907 } 6908 } 6909 break; 6910 case IPC_SENDMSG: ; //IPC_SENDMSG by BoBa 26.06.07 6911 int l=strlen(((IPCMsg *)(ipc->data))->msg); \ ??maincsm_onmessage_25: \ 0000026C 080098E5 LDR R0,[R8, #+8] \ 00000270 040090E5 LDR R0,[R0, #+4] \ 00000274 1B0000EF SWI +27 \ 00000278 0090A0E1 MOV R9,R0 6912 TPKT *msg=malloc(sizeof(PKT)+l+30); \ 0000027C 260089E2 ADD R0,R9,#+38 \ 00000280 140000EF SWI +20 \ 00000284 00A0A0E1 MOV R10,R0 6913 msg->pkt.uin=((IPCMsg *)(ipc->data))->uin; \ 00000288 080098E5 LDR R0,[R8, #+8] 6914 msg->pkt.type=T_SENDMSG; 6915 msg->pkt.data_len=l; 6916 memcpy(msg->data,((IPCMsg *)(ipc->data))->msg,l); \ 0000028C 0920A0E1 MOV R2,R9 \ 00000290 000090E5 LDR R0,[R0, #+0] \ 00000294 00008AE5 STR R0,[R10, #+0] \ 00000298 0200A0E3 MOV R0,#+2 \ 0000029C B400CAE1 STRH R0,[R10, #+4] \ 000002A0 B690CAE1 STRH R9,[R10, #+6] \ 000002A4 080098E5 LDR R0,[R8, #+8] \ 000002A8 041090E5 LDR R1,[R0, #+4] \ 000002AC 08008AE2 ADD R0,R10,#+8 \ 000002B0 1E0100EF SWI +286 6917 //slientsend=1; 6918 if(strstr(msg->data,PASS)==0) \ 000002B4 1C1A9FE5 LDR R1,??maincsm_onmessage_5+0xC ;; PASS \ 000002B8 08008AE2 ADD R0,R10,#+8 \ 000002BC 180100EF SWI +280 \ 000002C0 000050E3 CMP R0,#+0 \ 000002C4 0400000A BEQ ??maincsm_onmessage_26 6919 { 6920 SENDMSGCOUNT++; //Номер сообщения 6921 SUBPROC((void *)SendAnswer,0,msg); 6922 } 6923 else 6924 { 6925 msg->pkt.data_len=40; \ 000002C8 2800A0E3 MOV R0,#+40 \ 000002CC B600CAE1 STRH R0,[R10, #+6] 6926 strcpy(msg->data, "Fuck you hacker! my password sux ur ass"); \ 000002D0 931F87E2 ADD R1,R7,#+588 \ 000002D4 08008AE2 ADD R0,R10,#+8 \ 000002D8 1A0000EF SWI +26 6927 SENDMSGCOUNT++; //Номер сообщения \ ??maincsm_onmessage_26: \ 000002DC D80295E5 LDR R0,[R5, #+728] 6928 SUBPROC((void *)SendAnswer,0,msg); \ 000002E0 0A20A0E1 MOV R2,R10 \ 000002E4 010080E2 ADD R0,R0,#+1 \ 000002E8 D80285E5 STR R0,[R5, #+728] \ 000002EC ........ LDR R0,??DataTable289 ;; SendAnswer \ 000002F0 0010A0E3 MOV R1,#+0 \ 000002F4 710100EF SWI +369 6929 } 6930 break; 6931 } 6932 } 6933 } 6934 } 6935 //Нарисуем иконочку моего статуса 6936 //#define idlegui_id (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 6937 //CSM_RAM *icsm=FindCSMbyID(CSM_root()->idle_id); 6938 // if (IsGuiOnTop(idlegui_id)/*&&IsUnlocked()*/) //Если IdleGui на самом верху 6939 // { 6940 void *icsm; 6941 icsm=FindCSMbyID(CSM_root()->idle_id); \ ??maincsm_onmessage_2: \ 000002F8 068100EF SWI +33030 \ 000002FC 040090E5 LDR R0,[R0, #+4] \ 00000300 080100EF SWI +264 \ 00000304 000050E3 CMP R0,#+0 \ 00000308 0B00000A BEQ ??maincsm_onmessage_27 \ 0000030C 2C0090E5 LDR R0,[R0, #+44] 6942 if (icsm && checkGui(idlegui_id(icsm))) \ 00000310 ........ BL checkGui \ 00000314 000050E3 CMP R0,#+0 \ 00000318 0700000A BEQ ??maincsm_onmessage_27 6943 { 6944 // GUI *igui=GetTopGUI(); 6945 // if (igui) //И он существует 6946 //{ 6947 INC_show=0; \ 0000031C 446485E5 STR R6,[R5, #+1092] 6948 canvasdata=BuildCanvas(); //void * - belyj fon! \ 00000320 F18000EF SWI +33009 \ 00000324 980285E5 STR R0,[R5, #+664] 6949 //Тут трохи поменял 6950 // by Rainmaker: Рисуем канву только для иконки и выводим в своих координатах 6951 #ifdef ELKA 6952 if (total_unread) \ 00000328 000495E5 LDR R0,[R5, #+1024] \ 0000032C 000050E3 CMP R0,#+0 \ 00000330 0300000A BEQ ??maincsm_onmessage_28 6953 SLI_On(); \ 00000334 ........ BL SLI_On \ 00000338 010000EA B ??maincsm_onmessage_28 6954 #endif 6955 } 6956 //} 6957 else 6958 { 6959 main_d=1; \ ??maincsm_onmessage_27: \ 0000033C 0100A0E3 MOV R0,#+1 \ 00000340 900285E5 STR R0,[R5, #+656] 6960 } 6961 } 6962 6963 //---------------------------------------------------// 6964 void *icsm; 6965 icsm=FindCSMbyID(CSM_root()->idle_id); 6966 if (icsm && checkGui(idlegui_id(icsm))) \ ??maincsm_onmessage_28: \ 00000344 ........ LDR R8,??DataTable269 ;; fonto \ 00000348 068100EF SWI +33030 \ 0000034C 040090E5 LDR R0,[R0, #+4] \ 00000350 080100EF SWI +264 \ 00000354 000050E3 CMP R0,#+0 \ 00000358 3F01000A BEQ ??maincsm_onmessage_29 \ 0000035C 2C0090E5 LDR R0,[R0, #+44] \ 00000360 ........ BL checkGui \ 00000364 000050E3 CMP R0,#+0 \ 00000368 3B01000A BEQ ??maincsm_onmessage_29 6967 { 6968 int icn; 6969 if(total_unread) \ 0000036C 000495E5 LDR R0,[R5, #+1024] \ 00000370 000050E3 CMP R0,#+0 6970 icn=IS_MSG; \ 00000374 0D90A013 MOVNE R9,#+13 \ 00000378 0A00001A BNE ??maincsm_onmessage_30 6971 else 6972 { 6973 switch(connect_state) \ 0000037C DC0395E5 LDR R0,[R5, #+988] \ 00000380 000050E3 CMP R0,#+0 \ 00000384 0200000A BEQ ??maincsm_onmessage_31 \ 00000388 030050E2 SUBS R0,R0,#+3 \ 0000038C 0200000A BEQ ??maincsm_onmessage_32 \ 00000390 030000EA B ??maincsm_onmessage_33 6974 { 6975 case 0: 6976 icn=IS_OFFLINE; break; \ ??maincsm_onmessage_31: \ 00000394 0090A0E3 MOV R9,#+0 \ 00000398 020000EA B ??maincsm_onmessage_30 6977 case 3: 6978 icn=CurrentStatus; //IS_ONLINE; \ ??maincsm_onmessage_32: \ 0000039C 709395E5 LDR R9,[R5, #+880] \ 000003A0 000000EA B ??maincsm_onmessage_30 6979 break; 6980 default: 6981 icn=IS_UNKNOWN; break; \ ??maincsm_onmessage_33: \ 000003A4 0E90A0E3 MOV R9,#+14 6982 } 6983 } 6984 6985 #ifdef NEWSGOLD 6986 if(ShowStatusIcon==0 || ShowStatusIcon==2 || ShowStatusIcon==3) //kluchnik 26.03.08 \ ??maincsm_onmessage_30: \ 000003A8 ........ LDR R0,??DataTable293 ;; ShowStatusIcon \ 000003AC 000090E5 LDR R0,[R0, #+0] \ 000003B0 000050E3 CMP R0,#+0 \ 000003B4 02005013 CMPNE R0,#+2 \ 000003B8 03005013 CMPNE R0,#+3 \ 000003BC 2100001A BNE ??maincsm_onmessage_34 6987 { 6988 #endif 6989 if((IsUnlocked()) || (!IsUnlocked()) || (IsScreenSaver())) \ 000003C0 430000EF SWI +67 \ 000003C4 000050E3 CMP R0,#+0 \ 000003C8 0500001A BNE ??maincsm_onmessage_35 \ 000003CC 430000EF SWI +67 \ 000003D0 000050E3 CMP R0,#+0 \ 000003D4 0200000A BEQ ??maincsm_onmessage_35 \ 000003D8 420000EF SWI +66 \ 000003DC 000050E3 CMP R0,#+0 \ 000003E0 1800000A BEQ ??maincsm_onmessage_34 6990 { 6991 DrawCanvas(canvasdata,IDLEICON_X,IDLEICON_Y,IDLEICON_X+GetImgWidth((int)S_ICONS[icn])-1, 6992 IDLEICON_Y+GetImgHeight((int)S_ICONS[icn])-1,1); \ ??maincsm_onmessage_35: \ 000003E4 F0B89FE5 LDR R11,??maincsm_onmessage_5+0x10 ;; IDLEICON_Y \ 000003E8 099185E0 ADD R9,R5,R9, LSL #+2 \ 000003EC E80299E5 LDR R0,[R9, #+744] \ 000003F0 210000EF SWI +33 \ 000003F4 00A0A0E1 MOV R10,R0 \ 000003F8 E80299E5 LDR R0,[R9, #+744] \ 000003FC 220000EF SWI +34 \ 00000400 D8189FE5 LDR R1,??maincsm_onmessage_5+0x14 ;; IDLEICON_X \ 00000404 00209BE5 LDR R2,[R11, #+0] \ 00000408 001091E5 LDR R1,[R1, #+0] \ 0000040C 0130A0E3 MOV R3,#+1 \ 00000410 08002DE9 PUSH {R3} \ 00000414 010080E0 ADD R0,R0,R1 \ 00000418 02308AE0 ADD R3,R10,R2 \ 0000041C 013043E2 SUB R3,R3,#+1 \ 00000420 08002DE9 PUSH {R3} \ 00000424 013040E2 SUB R3,R0,#+1 \ 00000428 980295E5 LDR R0,[R5, #+664] \ 0000042C 250000EF SWI +37 6993 DrawImg(IDLEICON_X,IDLEICON_Y,S_ICONS[icn]); \ 00000430 A8089FE5 LDR R0,??maincsm_onmessage_5+0x14 ;; IDLEICON_X \ 00000434 E82299E5 LDR R2,[R9, #+744] \ 00000438 00109BE5 LDR R1,[R11, #+0] \ 0000043C 000090E5 LDR R0,[R0, #+0] \ 00000440 230000EF SWI +35 \ 00000444 08D08DE2 ADD SP,SP,#+8 6994 } 6995 #ifdef NEWSGOLD 6996 } 6997 #ifdef kluchnik 6998 if(show_xstatus==1) \ ??maincsm_onmessage_34: \ 00000448 ........ LDR R0,??DataTable295 ;; show_xstatus \ 0000044C 000090E5 LDR R0,[R0, #+0] \ 00000450 010050E3 CMP R0,#+1 \ 00000454 2300001A BNE ??maincsm_onmessage_36 6999 #else 7000 if(show_xstatus==1 || show_xstatus==3) //kluchnik 26.03.08 7001 #endif 7002 #else 7003 if(show_xstatus==1) //kluchnik 26.03.08 7004 #endif 7005 { 7006 PNGTOP_DESC *pltop=PNG_TOP(); 7007 pltop->dyn_pltop=XStatusesImgList; 7008 DisableIDLETMR(); 7009 DrawCanvas(canvasdata,IDLEICON_XX,IDLEICON_YX,IDLEICON_XX+GetImgWidth((int)XStatusesIconArray[CurrentXStatus])-1, 7010 IDLEICON_YX+GetImgHeight((int)XStatusesIconArray[CurrentXStatus])-1,1); \ 00000458 84989FE5 LDR R9,??maincsm_onmessage_5+0x18 ;; XStatusesIconArray \ 0000045C 84B89FE5 LDR R11,??maincsm_onmessage_5+0x1C ;; IDLEICON_YX \ 00000460 B98100EF SWI +33209 \ 00000464 80189FE5 LDR R1,??maincsm_onmessage_5+0x20 ;; XStatusesImgList \ 00000468 001091E5 LDR R1,[R1, #+0] \ 0000046C 081080E5 STR R1,[R0, #+8] \ 00000470 7F0100EF SWI +383 \ 00000474 740395E5 LDR R0,[R5, #+884] \ 00000478 001099E5 LDR R1,[R9, #+0] \ 0000047C 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 00000480 210000EF SWI +33 \ 00000484 001099E5 LDR R1,[R9, #+0] \ 00000488 00A0A0E1 MOV R10,R0 \ 0000048C 740395E5 LDR R0,[R5, #+884] \ 00000490 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 00000494 220000EF SWI +34 \ 00000498 50189FE5 LDR R1,??maincsm_onmessage_5+0x24 ;; IDLEICON_XX \ 0000049C 00209BE5 LDR R2,[R11, #+0] \ 000004A0 001091E5 LDR R1,[R1, #+0] \ 000004A4 0130A0E3 MOV R3,#+1 \ 000004A8 08002DE9 PUSH {R3} \ 000004AC 010080E0 ADD R0,R0,R1 \ 000004B0 02308AE0 ADD R3,R10,R2 \ 000004B4 013043E2 SUB R3,R3,#+1 \ 000004B8 08002DE9 PUSH {R3} \ 000004BC 013040E2 SUB R3,R0,#+1 \ 000004C0 980295E5 LDR R0,[R5, #+664] \ 000004C4 250000EF SWI +37 7011 DrawImg(IDLEICON_XX,IDLEICON_YX,XStatusesIconArray[CurrentXStatus]); \ 000004C8 740395E5 LDR R0,[R5, #+884] \ 000004CC 001099E5 LDR R1,[R9, #+0] \ 000004D0 002191E7 LDR R2,[R1, +R0, LSL #+2] \ 000004D4 14089FE5 LDR R0,??maincsm_onmessage_5+0x24 ;; IDLEICON_XX \ 000004D8 00109BE5 LDR R1,[R11, #+0] \ 000004DC 000090E5 LDR R0,[R0, #+0] \ 000004E0 230000EF SWI +35 \ 000004E4 08D08DE2 ADD SP,SP,#+8 7012 } 7013 7014 7015 if(IsUnlocked()) \ ??maincsm_onmessage_36: \ 000004E8 430000EF SWI +67 \ 000004EC 000050E3 CMP R0,#+0 \ 000004F0 D900000A BEQ ??maincsm_onmessage_29 7016 { 7017 SetCanvasFlag(0); \ 000004F4 0000A0E3 MOV R0,#+0 \ 000004F8 ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 7018 if (main_d==1) \ 000004FC 900295E5 LDR R0,[R5, #+656] \ 00000500 010050E3 CMP R0,#+1 \ 00000504 8A00001A BNE ??maincsm_onmessage_37 7019 { 7020 if(Is_SMARTCPU_On && main_msg_timer2) \ 00000508 BC0295E5 LDR R0,[R5, #+700] \ 0000050C 000050E3 CMP R0,#+0 \ 00000510 34049515 LDRNE R0,[R5, #+1076] \ 00000514 00005013 CMPNE R0,#+0 \ 00000518 8400000A BEQ ??maincsm_onmessage_38 7021 { 7022 if(fonto==1) \ 0000051C D0979FE5 LDR R9,??maincsm_onmessage_5+0x28 ;; msg_d_x \ 00000520 D0A79FE5 LDR R10,??maincsm_onmessage_5+0x2C ;; msg_d_y \ 00000524 D0B79FE5 LDR R11,??maincsm_onmessage_5+0x30 ;; spaco2 \ 00000528 943295E5 LDR R3,[R5, #+660] \ 0000052C E810A0E3 MOV R1,#+232 \ 00000530 801D81E3 ORR R1,R1,#0x2000 \ 00000534 051081E0 ADD R1,R1,R5 \ 00000538 18108DE5 STR R1,[SP, #+24] \ 0000053C B810A0E3 MOV R1,#+184 \ 00000540 801D81E3 ORR R1,R1,#0x2000 \ 00000544 051081E0 ADD R1,R1,R5 \ 00000548 14108DE5 STR R1,[SP, #+20] \ 0000054C 8810A0E3 MOV R1,#+136 \ 00000550 801D81E3 ORR R1,R1,#0x2000 \ 00000554 051081E0 ADD R1,R1,R5 \ 00000558 10108DE5 STR R1,[SP, #+16] \ 0000055C 5810A0E3 MOV R1,#+88 \ 00000560 801D81E3 ORR R1,R1,#0x2000 \ 00000564 051081E0 ADD R1,R1,R5 \ 00000568 0C108DE5 STR R1,[SP, #+12] \ 0000056C 000099E5 LDR R0,[R9, #+0] \ 00000570 00109AE5 LDR R1,[R10, #+0] \ 00000574 00C09BE5 LDR R12,[R11, #+0] \ 00000578 00E098E5 LDR LR,[R8, #+0] \ 0000057C 00102DE9 PUSH {R12} \ 00000580 2820A0E3 MOV R2,#+40 \ 00000584 802D82E3 ORR R2,R2,#0x2000 \ 00000588 052082E0 ADD R2,R2,R5 \ 0000058C 01005EE3 CMP LR,#+1 \ 00000590 2E00001A BNE ??maincsm_onmessage_39 7023 { 7024 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ 00000594 01C0A0E3 MOV R12,#+1 \ 00000598 00102DE9 PUSH {R12} \ 0000059C ........ _BLF PrintField,??PrintField??rA 7025 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, spaco2); \ 000005A0 00009BE5 LDR R0,[R11, #+0] \ 000005A4 01002DE9 PUSH {R0} \ 000005A8 000098E5 LDR R0,[R8, #+0] \ 000005AC 01002DE9 PUSH {R0} \ 000005B0 9C1295E5 LDR R1,[R5, #+668] \ 000005B4 943295E5 LDR R3,[R5, #+660] \ 000005B8 1C209DE5 LDR R2,[SP, #+28] \ 000005BC 00009AE5 LDR R0,[R10, #+0] \ 000005C0 001081E0 ADD R1,R1,R0 \ 000005C4 000099E5 LDR R0,[R9, #+0] \ 000005C8 ........ _BLF PrintField,??PrintField??rA 7026 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, spaco2); \ 000005CC 00009BE5 LDR R0,[R11, #+0] \ 000005D0 01002DE9 PUSH {R0} \ 000005D4 000098E5 LDR R0,[R8, #+0] \ 000005D8 01002DE9 PUSH {R0} \ 000005DC 9C1295E5 LDR R1,[R5, #+668] \ 000005E0 943295E5 LDR R3,[R5, #+660] \ 000005E4 28209DE5 LDR R2,[SP, #+40] \ 000005E8 00009AE5 LDR R0,[R10, #+0] \ 000005EC 811080E0 ADD R1,R0,R1, LSL #+1 \ 000005F0 000099E5 LDR R0,[R9, #+0] \ 000005F4 ........ _BLF PrintField,??PrintField??rA 7027 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, spaco2); \ 000005F8 00009BE5 LDR R0,[R11, #+0] \ 000005FC 01002DE9 PUSH {R0} \ 00000600 000098E5 LDR R0,[R8, #+0] \ 00000604 01002DE9 PUSH {R0} \ 00000608 9C1295E5 LDR R1,[R5, #+668] \ 0000060C 943295E5 LDR R3,[R5, #+660] \ 00000610 34209DE5 LDR R2,[SP, #+52] \ 00000614 00009AE5 LDR R0,[R10, #+0] \ 00000618 811081E0 ADD R1,R1,R1, LSL #+1 \ 0000061C 001081E0 ADD R1,R1,R0 \ 00000620 000099E5 LDR R0,[R9, #+0] \ 00000624 ........ _BLF PrintField,??PrintField??rA 7028 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, spaco2); \ 00000628 00009BE5 LDR R0,[R11, #+0] \ 0000062C 01002DE9 PUSH {R0} \ 00000630 000098E5 LDR R0,[R8, #+0] \ 00000634 01002DE9 PUSH {R0} \ 00000638 9C1295E5 LDR R1,[R5, #+668] \ 0000063C 943295E5 LDR R3,[R5, #+660] \ 00000640 40209DE5 LDR R2,[SP, #+64] \ 00000644 00009AE5 LDR R0,[R10, #+0] \ 00000648 011180E0 ADD R1,R0,R1, LSL #+2 \ 0000064C 340000EA B ??maincsm_onmessage_40 7029 } 7030 else 7031 { 7032 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ ??maincsm_onmessage_39: \ 00000650 00402DE9 PUSH {LR} \ 00000654 ........ _BLF PrintField,??PrintField??rA 7033 PrintField(msg_d_x,msg_d_y+GetFontYSIZE(paused_height)+1, s_txt, align, fonto, spaco2); \ 00000658 9C0295E5 LDR R0,[R5, #+668] \ 0000065C C50100EF SWI +453 \ 00000660 00109BE5 LDR R1,[R11, #+0] \ 00000664 02002DE9 PUSH {R1} \ 00000668 001098E5 LDR R1,[R8, #+0] \ 0000066C 02002DE9 PUSH {R1} \ 00000670 943295E5 LDR R3,[R5, #+660] \ 00000674 1C209DE5 LDR R2,[SP, #+28] \ 00000678 00109AE5 LDR R1,[R10, #+0] \ 0000067C 010080E0 ADD R0,R0,R1 \ 00000680 011080E2 ADD R1,R0,#+1 \ 00000684 000099E5 LDR R0,[R9, #+0] \ 00000688 ........ _BLF PrintField,??PrintField??rA 7034 PrintField(msg_d_x,msg_d_y+(2*GetFontYSIZE(paused_height))+2, d_txt, align, fonto, spaco2); \ 0000068C 9C0295E5 LDR R0,[R5, #+668] \ 00000690 C50100EF SWI +453 \ 00000694 00109BE5 LDR R1,[R11, #+0] \ 00000698 02002DE9 PUSH {R1} \ 0000069C 001098E5 LDR R1,[R8, #+0] \ 000006A0 02002DE9 PUSH {R1} \ 000006A4 943295E5 LDR R3,[R5, #+660] \ 000006A8 28209DE5 LDR R2,[SP, #+40] \ 000006AC 00109AE5 LDR R1,[R10, #+0] \ 000006B0 800081E0 ADD R0,R1,R0, LSL #+1 \ 000006B4 021080E2 ADD R1,R0,#+2 \ 000006B8 000099E5 LDR R0,[R9, #+0] \ 000006BC ........ _BLF PrintField,??PrintField??rA 7035 PrintField(msg_d_x,msg_d_y+(3*GetFontYSIZE(paused_height))+3, f_txt, align, fonto, spaco2); \ 000006C0 9C0295E5 LDR R0,[R5, #+668] \ 000006C4 C50100EF SWI +453 \ 000006C8 00109BE5 LDR R1,[R11, #+0] \ 000006CC 800080E0 ADD R0,R0,R0, LSL #+1 \ 000006D0 02002DE9 PUSH {R1} \ 000006D4 001098E5 LDR R1,[R8, #+0] \ 000006D8 02002DE9 PUSH {R1} \ 000006DC 943295E5 LDR R3,[R5, #+660] \ 000006E0 34209DE5 LDR R2,[SP, #+52] \ 000006E4 00109AE5 LDR R1,[R10, #+0] \ 000006E8 010080E0 ADD R0,R0,R1 \ 000006EC 031080E2 ADD R1,R0,#+3 \ 000006F0 000099E5 LDR R0,[R9, #+0] \ 000006F4 ........ _BLF PrintField,??PrintField??rA 7036 PrintField(msg_d_x,msg_d_y+(4*GetFontYSIZE(paused_height))+4, g_txt, align, fonto, spaco2); \ 000006F8 9C0295E5 LDR R0,[R5, #+668] \ 000006FC C50100EF SWI +453 \ 00000700 00109BE5 LDR R1,[R11, #+0] \ 00000704 02002DE9 PUSH {R1} \ 00000708 001098E5 LDR R1,[R8, #+0] \ 0000070C 02002DE9 PUSH {R1} \ 00000710 943295E5 LDR R3,[R5, #+660] \ 00000714 40209DE5 LDR R2,[SP, #+64] \ 00000718 00109AE5 LDR R1,[R10, #+0] \ 0000071C 000181E0 ADD R0,R1,R0, LSL #+2 \ 00000720 041080E2 ADD R1,R0,#+4 \ ??maincsm_onmessage_40: \ 00000724 000099E5 LDR R0,[R9, #+0] \ 00000728 ........ _BLF PrintField,??PrintField??rA \ 0000072C 28D08DE2 ADD SP,SP,#+40 7037 } 7038 } 7039 main_d=0; \ ??maincsm_onmessage_38: \ 00000730 906285E5 STR R6,[R5, #+656] 7040 } 7041 7042 if(Is_UPTIME_On) DrawOnlineTime(canvasdata); \ ??maincsm_onmessage_37: \ 00000734 940395E5 LDR R0,[R5, #+916] \ 00000738 000050E3 CMP R0,#+0 \ 0000073C 0100000A BEQ ??maincsm_onmessage_41 \ 00000740 980295E5 LDR R0,[R5, #+664] \ 00000744 ........ BL DrawOnlineTime 7043 if(Is_PING_On) DrawPing(canvasdata); \ ??maincsm_onmessage_41: \ 00000748 B40295E5 LDR R0,[R5, #+692] \ 0000074C 000050E3 CMP R0,#+0 \ 00000750 0100000A BEQ ??maincsm_onmessage_42 \ 00000754 980295E5 LDR R0,[R5, #+664] \ 00000758 ........ BL DrawPing 7044 if(Auto_Status && showAwayIdle) DrawAutoMSG(canvasdata); \ ??maincsm_onmessage_42: \ 0000075C ........ LDR R0,??DataTable272 ;; Auto_Status \ 00000760 000090E5 LDR R0,[R0, #+0] \ 00000764 000050E3 CMP R0,#+0 \ 00000768 0500000A BEQ ??maincsm_onmessage_43 \ 0000076C ........ LDR R0,??DataTable273 ;; showAwayIdle \ 00000770 000090E5 LDR R0,[R0, #+0] \ 00000774 000050E3 CMP R0,#+0 \ 00000778 0100000A BEQ ??maincsm_onmessage_43 \ 0000077C 980295E5 LDR R0,[R5, #+664] \ 00000780 ........ BL DrawAutoMSG 7045 if(Is_Unread_On) \ ??maincsm_onmessage_43: \ 00000784 74059FE5 LDR R0,??maincsm_onmessage_5+0x34 ;; Is_Unread_On \ 00000788 ........ LDR R9,??DataTable274 ;; spaco1 \ 0000078C 000090E5 LDR R0,[R0, #+0] \ 00000790 000050E3 CMP R0,#+0 \ 00000794 1000000A BEQ ??maincsm_onmessage_44 7046 { 7047 sprintf(unread_msg_info, "Unread: %d", total_unread2); \ 00000798 CC2295E5 LDR R2,[R5, #+716] \ 0000079C 79AEA0E3 MOV R10,#+1936 \ 000007A0 9D1F87E2 ADD R1,R7,#+628 \ 000007A4 05008AE0 ADD R0,R10,R5 \ 000007A8 160000EF SWI +22 7048 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, spaco1); \ 000007AC 000099E5 LDR R0,[R9, #+0] \ 000007B0 05208AE0 ADD R2,R10,R5 \ 000007B4 01002DE9 PUSH {R0} \ 000007B8 000098E5 LDR R0,[R8, #+0] \ 000007BC 01002DE9 PUSH {R0} \ 000007C0 943295E5 LDR R3,[R5, #+660] \ 000007C4 38059FE5 LDR R0,??maincsm_onmessage_5+0x38 ;; unread_Y \ 000007C8 001090E5 LDR R1,[R0, #+0] \ 000007CC 34059FE5 LDR R0,??maincsm_onmessage_5+0x3C ;; unread_X \ 000007D0 000090E5 LDR R0,[R0, #+0] \ 000007D4 ........ _BLF PrintField,??PrintField??rA \ 000007D8 08D08DE2 ADD SP,SP,#+8 7049 } 7050 7051 if(Is_Online_On && strlen(on_off_buf)!=0) \ ??maincsm_onmessage_44: \ 000007DC 28059FE5 LDR R0,??maincsm_onmessage_5+0x40 ;; Is_Online_On \ 000007E0 000090E5 LDR R0,[R0, #+0] \ 000007E4 000050E3 CMP R0,#+0 \ 000007E8 1B00000A BEQ ??maincsm_onmessage_29 \ 000007EC 00009DE5 LDR R0,[SP, #+0] \ 000007F0 1B0000EF SWI +27 \ 000007F4 000050E3 CMP R0,#+0 \ 000007F8 1700000A BEQ ??maincsm_onmessage_29 7052 { 7053 char *s=malloc(128); \ 000007FC 8000A0E3 MOV R0,#+128 \ 00000800 140000EF SWI +20 7054 sprintf(s,percent_s,on_off_buf); \ 00000804 00209DE5 LDR R2,[SP, #+0] \ 00000808 00A0A0E1 MOV R10,R0 \ 0000080C 081087E2 ADD R1,R7,#+8 \ 00000810 160000EF SWI +22 7055 s[strlen(s)-1]=0; \ 00000814 0A00A0E1 MOV R0,R10 \ 00000818 1B0000EF SWI +27 \ 0000081C 0A0080E0 ADD R0,R0,R10 \ 00000820 016040E5 STRB R6,[R0, #-1] 7056 PrintField(online_x,online_y,s, align, fonto, spaco1); \ 00000824 000099E5 LDR R0,[R9, #+0] \ 00000828 0A20A0E1 MOV R2,R10 \ 0000082C 01002DE9 PUSH {R0} \ 00000830 000098E5 LDR R0,[R8, #+0] \ 00000834 01002DE9 PUSH {R0} \ 00000838 943295E5 LDR R3,[R5, #+660] \ 0000083C CC049FE5 LDR R0,??maincsm_onmessage_5+0x44 ;; online_y \ 00000840 001090E5 LDR R1,[R0, #+0] \ 00000844 C8049FE5 LDR R0,??maincsm_onmessage_5+0x48 ;; online_x \ 00000848 000090E5 LDR R0,[R0, #+0] \ 0000084C ........ _BLF PrintField,??PrintField??rA 7057 mfree(s); \ 00000850 0A00A0E1 MOV R0,R10 \ 00000854 150000EF SWI +21 \ 00000858 08D08DE2 ADD SP,SP,#+8 7058 } 7059 }//if(IsUnlocked()) 7060 } 7061 7062 7063 //-----------------------------------------------------------// 7064 7065 7066 if (msg->msg==MSG_RECONFIGURE_REQ) \ ??maincsm_onmessage_29: \ 0000085C 040094E5 LDR R0,[R4, #+4] \ 00000860 AF10A0E3 MOV R1,#+175 \ 00000864 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000868 010050E1 CMP R0,R1 \ 0000086C 4900001A BNE ??maincsm_onmessage_45 7067 { 7068 //if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) 7069 if( (strcmp_nocase(suc_config_name,(char *)msg->data0)==0) 7070 || (strcmp_nocase(suc_config_name_mod,(char *)msg->data0)==0)) \ 00000870 ........ LDR R0,??DataTable302 ;; suc_config_name \ 00000874 0C1094E5 LDR R1,[R4, #+12] \ 00000878 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 0000087C 000050E3 CMP R0,#+0 \ 00000880 0400000A BEQ ??maincsm_onmessage_46 \ 00000884 ........ LDR R0,??DataTable276 ;; suc_config_name_mod \ 00000888 0C1094E5 LDR R1,[R4, #+12] \ 0000088C ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000890 000050E3 CMP R0,#+0 \ 00000894 3F00001A BNE ??maincsm_onmessage_45 7071 { 7072 ShowMSG(1,(int)"NatICQ config updated!"); 7073 // InitConfig(); 7074 UpdateConfig(); 7075 #ifdef NEWSGOLD 7076 initTags(); 7077 #endif 7078 PrintLibInit(4); 7079 FontPathInit((char *)fontpath, 1); 7080 FontPathInit((char *)fontpath2, 1); \ ??maincsm_onmessage_46: \ 00000898 ........ LDR R10,??DataTable305 ;; fontpath2 7081 FontPathInit((char *)fontpath3, 1);//#ifdef ELKA \ 0000089C ........ LDR R11,??DataTable306 ;; fontpath3 7082 FontPathInit((char *)fontpath4, 1); \ 000008A0 ........ LDR R9,??DataTable307 ;; fontpath4 \ 000008A4 A01F87E2 ADD R1,R7,#+640 \ 000008A8 0100A0E3 MOV R0,#+1 \ 000008AC 480100EF SWI +328 \ 000008B0 ........ _BLF UpdateConfig,??UpdateConfig??rA \ 000008B4 ........ _BLF initTags,??initTags??rA \ 000008B8 0400A0E3 MOV R0,#+4 \ 000008BC ........ _BLF PrintLibInit,??PrintLibInit??rA \ 000008C0 ........ LDR R0,??DataTable304 ;; fontpath \ 000008C4 0110A0E3 MOV R1,#+1 \ 000008C8 ........ _BLF FontPathInit,??FontPathInit??rA \ 000008CC 0110A0E3 MOV R1,#+1 \ 000008D0 0A00A0E1 MOV R0,R10 \ 000008D4 ........ _BLF FontPathInit,??FontPathInit??rA \ 000008D8 0110A0E3 MOV R1,#+1 \ 000008DC 0B00A0E1 MOV R0,R11 \ 000008E0 ........ _BLF FontPathInit,??FontPathInit??rA \ 000008E4 0110A0E3 MOV R1,#+1 \ 000008E8 0900A0E1 MOV R0,R9 \ 000008EC ........ _BLF FontPathInit,??FontPathInit??rA 7083 7084 if(!strlen(fontpath2) || !strlen(fontpath3)) clfont=100+FONT_SMALL; \ 000008F0 0A00A0E1 MOV R0,R10 \ 000008F4 1B0000EF SWI +27 \ 000008F8 000050E3 CMP R0,#+0 \ 000008FC 0300000A BEQ ??maincsm_onmessage_47 \ 00000900 0B00A0E1 MOV R0,R11 \ 00000904 1B0000EF SWI +27 \ 00000908 000050E3 CMP R0,#+0 \ 0000090C 0100001A BNE ??maincsm_onmessage_48 \ ??maincsm_onmessage_47: \ 00000910 6C00A0E3 MOV R0,#+108 \ 00000914 5C0485E5 STR R0,[R5, #+1116] 7085 if(!strlen(fontpath4)) { PNG_SOFTKEY=0; PNG_HEADER=0; } \ ??maincsm_onmessage_48: \ 00000918 0900A0E1 MOV R0,R9 \ 0000091C 1B0000EF SWI +27 \ 00000920 000050E3 CMP R0,#+0 \ 00000924 0300001A BNE ??maincsm_onmessage_49 \ 00000928 ........ LDR R0,??DataTable310 ;; PNG_SOFTKEY \ 0000092C 006080E5 STR R6,[R0, #+0] \ 00000930 ........ LDR R0,??DataTable311 ;; PNG_HEADER \ 00000934 006080E5 STR R6,[R0, #+0] 7086 if(fonto==1) \ ??maincsm_onmessage_49: \ 00000938 000098E5 LDR R0,[R8, #+0] \ 0000093C 010050E3 CMP R0,#+1 \ 00000940 0B00001A BNE ??maincsm_onmessage_50 7087 { 7088 char *heght=malloc(64); \ 00000944 4000A0E3 MOV R0,#+64 \ 00000948 140000EF SWI +20 7089 sprintf(heght, "%s2240.png", fontpath); \ 0000094C ........ LDR R2,??DataTable304 ;; fontpath \ 00000950 0080A0E1 MOV R8,R0 \ 00000954 A61F87E2 ADD R1,R7,#+664 \ 00000958 160000EF SWI +22 7090 paused_height=GetImgHeight((int)heght); \ 0000095C 0800A0E1 MOV R0,R8 \ 00000960 210000EF SWI +33 \ 00000964 9C0285E5 STR R0,[R5, #+668] 7091 mfree(heght); \ 00000968 0800A0E1 MOV R0,R8 \ 0000096C 150000EF SWI +21 \ 00000970 010000EA B ??maincsm_onmessage_51 7092 } 7093 else 7094 paused_height=fonto-100; \ ??maincsm_onmessage_50: \ 00000974 640040E2 SUB R0,R0,#+100 \ 00000978 9C0285E5 STR R0,[R5, #+668] 7095 //#endif 7096 free_ICONS(); \ ??maincsm_onmessage_51: \ 0000097C ........ BL free_ICONS 7097 setup_ICONS(); \ 00000980 ........ BL setup_ICONS 7098 ResortCL(); \ 00000984 ........ _BLF ResortCL,??ResortCL??rA 7099 RecountMenu(NULL,1); \ 00000988 0110A0E3 MOV R1,#+1 \ 0000098C 0000A0E3 MOV R0,#+0 \ 00000990 ........ BL RecountMenu 7100 init_time_zone(); \ 00000994 ........ BL init_time_zone 7101 // InitSmiles(); 7102 } 7103 } 7104 7105 if (msg->msg==MSG_GUI_DESTROYED) \ ??maincsm_onmessage_45: \ 00000998 040094E5 LDR R0,[R4, #+4] \ 0000099C 0E10A0E3 MOV R1,#+14 \ 000009A0 641C81E3 ORR R1,R1,#0x6400 \ 000009A4 010050E1 CMP R0,R1 \ 000009A8 0D00001A BNE ??maincsm_onmessage_52 7106 { 7107 if ((int)msg->data0==csm->gui_id) \ 000009AC 20109DE5 LDR R1,[SP, #+32] \ 000009B0 0C0094E5 LDR R0,[R4, #+12] \ 000009B4 281091E5 LDR R1,[R1, #+40] \ 000009B8 010050E1 CMP R0,R1 7108 { 7109 csm->csm.state=-3; \ 000009BC 20009D05 LDREQ R0,[SP, #+32] \ 000009C0 0210E003 MVNEQ R1,#+2 \ 000009C4 10108005 STREQ R1,[R0, #+16] 7110 } 7111 if ((int)msg->data0==contactlist_menu_id) \ 000009C8 0C0094E5 LDR R0,[R4, #+12] \ 000009CC 0C1495E5 LDR R1,[R5, #+1036] \ 000009D0 010050E1 CMP R0,R1 7112 { 7113 contactlist_menu_id=0; \ 000009D4 0C648505 STREQ R6,[R5, #+1036] 7114 //prev_clmenu_itemcount=0; 7115 } 7116 if ((int)msg->data0==edchat_id) \ 000009D8 101495E5 LDR R1,[R5, #+1040] \ 000009DC 010050E1 CMP R0,R1 7117 { 7118 edchat_id=0; \ 000009E0 10648505 STREQ R6,[R5, #+1040] 7119 } 7120 } 7121 7122 if (msg->msg==MSG_HELPER_TRANSLATOR) \ ??maincsm_onmessage_52: \ 000009E4 040094E5 LDR R0,[R4, #+4] \ 000009E8 AE10A0E3 MOV R1,#+174 \ 000009EC DE1C81E3 ORR R1,R1,#0xDE00 \ 000009F0 010050E1 CMP R0,R1 \ 000009F4 1000001A BNE ??maincsm_onmessage_53 7123 { 7124 switch((int)msg->data0) \ 000009F8 0C0094E5 LDR R0,[R4, #+12] \ 000009FC 101094E5 LDR R1,[R4, #+16] \ 00000A00 ........ LDR R9,??DataTable284 ;; RECONNECT_TIME \ 00000A04 ........ LDR R10,??DataTable285 ;; do_reconnect \ 00000A08 5820A0E3 MOV R2,#+88 \ 00000A0C 782D82E3 ORR R2,R2,#0x1E00 \ 00000A10 054082E0 ADD R4,R2,R5 \ 00000A14 882F42E2 SUB R2,R2,#+544 \ 00000A18 058082E0 ADD R8,R2,R5 \ 00000A1C 802050E2 SUBS R2,R0,#+128 \ 00000A20 0800000A BEQ ??maincsm_onmessage_54 \ 00000A24 022052E2 SUBS R2,R2,#+2 \ 00000A28 0200000A BEQ ??maincsm_onmessage_55 \ 00000A2C 122052E2 SUBS R2,R2,#+18 \ 00000A30 1300000A BEQ ??maincsm_onmessage_56 \ 00000A34 1D0000EA B ??maincsm_onmessage_57 7125 { 7126 case LMAN_DISCONNECT_IND: 7127 is_gprs_online=0; \ ??maincsm_onmessage_55: \ 00000A38 FC6385E5 STR R6,[R5, #+1020] 7128 return(1); \ ??maincsm_onmessage_53: \ 00000A3C 0100A0E3 MOV R0,#+1 \ 00000A40 24D08DE2 ADD SP,SP,#+36 \ 00000A44 F08FBDE8 POP {R4-R11,PC} ;; return 7129 case LMAN_CONNECT_CNF: 7130 vibra_count=1; \ ??maincsm_onmessage_54: \ 00000A48 0100A0E3 MOV R0,#+1 \ 00000A4C C40385E5 STR R0,[R5, #+964] 7131 start_vibra(); \ 00000A50 ........ BL start_vibra 7132 is_gprs_online=1; \ 00000A54 0100A0E3 MOV R0,#+1 \ 00000A58 FC0385E5 STR R0,[R5, #+1020] 7133 strcpy(logmsg,LG_GRGPRSUP); \ 00000A5C A91F87E2 ADD R1,R7,#+676 \ 00000A60 0800A0E1 MOV R0,R8 \ 00000A64 1A0000EF SWI +26 7134 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000A68 000099E5 LDR R0,[R9, #+0] \ 00000A6C 0A20A0E1 MOV R2,R10 \ 00000A70 D830A0E3 MOV R3,#+216 \ 00000A74 930001E0 MUL R1,R3,R0 \ 00000A78 0400A0E1 MOV R0,R4 \ 00000A7C 4D0000EF SWI +77 7135 return(1); \ 00000A80 070000EA B ??maincsm_onmessage_58 7136 case ENIP_DNR_HOST_BY_NAME: 7137 if ((int)msg->data1==DNR_ID) \ ??maincsm_onmessage_56: \ 00000A84 240495E5 LDR R0,[R5, #+1060] \ 00000A88 000051E1 CMP R1,R0 \ 00000A8C EAFFFF1A BNE ??maincsm_onmessage_53 7138 { 7139 if (DNR_TRIES) SUBPROC((void *)create_connect); \ 00000A90 280495E5 LDR R0,[R5, #+1064] \ 00000A94 000050E3 CMP R0,#+0 \ 00000A98 E7FFFF0A BEQ ??maincsm_onmessage_53 \ 00000A9C ........ LDR R0,??DataTable286 ;; create_connect \ ??maincsm_onmessage_59: \ 00000AA0 710100EF SWI +369 7140 } 7141 return(1); \ ??maincsm_onmessage_58: \ 00000AA4 0100A0E3 MOV R0,#+1 \ ??maincsm_onmessage_60: \ 00000AA8 24D08DE2 ADD SP,SP,#+36 \ 00000AAC F08FBDE8 POP {R4-R11,PC} 7142 } 7143 if ((int)msg->data1==sock) \ ??maincsm_onmessage_57: \ 00000AB0 E02395E5 LDR R2,[R5, #+992] \ 00000AB4 020051E1 CMP R1,R2 \ 00000AB8 DFFFFF1A BNE ??maincsm_onmessage_53 7144 { 7145 //Если наш сокет 7146 if ((((unsigned int)msg->data0)>>28)==0xA) \ 00000ABC 201EA0E1 LSR R1,R0,#+28 \ 00000AC0 0A0051E3 CMP R1,#+10 \ 00000AC4 0200001A BNE ??maincsm_onmessage_61 7147 { 7148 //Принят пакет 7149 ProcessPacket((TPKT *)msg->data0); \ 00000AC8 ........ BL ProcessPacket 7150 return(0); \ 00000ACC 0000A0E3 MOV R0,#+0 \ 00000AD0 F4FFFFEA B ??maincsm_onmessage_60 7151 } 7152 switch((int)msg->data0) \ ??maincsm_onmessage_61: \ 00000AD4 DC1395E5 LDR R1,[R5, #+988] \ 00000AD8 ........ LDR R11,??DataTable287 ;; VIBR_ON_CONNECT \ 00000ADC 8A0040E2 SUB R0,R0,#+138 \ 00000AE0 050050E3 CMP R0,#+5 \ 00000AE4 D4FFFF8A BHI ??maincsm_onmessage_53 \ 00000AE8 012F8FE2 ADR R2,??maincsm_onmessage_1 \ 00000AEC D02092E1 LDRSB R2,[R2, R0] \ 00000AF0 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_1: \ 00000AF4 42423D01 DC8 +66,+66,+61,+1 \ 00000AF8 4B470000 DC8 +75,+71,+0,+0 7153 { 7154 case ENIP_SOCK_CONNECTED: 7155 if (connect_state==1) \ ??maincsm_onmessage_62: \ 00000AFC 010051E3 CMP R1,#+1 \ 00000B00 3500001A BNE ??maincsm_onmessage_63 7156 { 7157 if(VIBR_ON_CONNECT) \ 00000B04 00009BE5 LDR R0,[R11, #+0] 7158 vibra_count=2; 7159 else 7160 vibra_count=1; 7161 start_vibra(); 7162 //Соединение установленно, посылаем пакет login 7163 strcpy(logmsg, LG_GRTRYLOGIN); 7164 { 7165 int i=strlen(PASS); 7166 TPKT *p=malloc(sizeof(PKT)+i); 7167 p->pkt.uin=UIN; \ 00000B08 ........ LDR R4,??DataTable301 ;; UIN \ 00000B0C 000050E3 CMP R0,#+0 \ 00000B10 0200A013 MOVNE R0,#+2 \ 00000B14 0100A003 MOVEQ R0,#+1 \ 00000B18 C40385E5 STR R0,[R5, #+964] \ 00000B1C ........ BL start_vibra \ 00000B20 AF1F87E2 ADD R1,R7,#+700 \ 00000B24 0800A0E1 MOV R0,R8 \ 00000B28 1A0000EF SWI +26 \ 00000B2C A4019FE5 LDR R0,??maincsm_onmessage_5+0xC ;; PASS \ 00000B30 1B0000EF SWI +27 \ 00000B34 0080A0E1 MOV R8,R0 \ 00000B38 080088E2 ADD R0,R8,#+8 \ 00000B3C 140000EF SWI +20 7168 p->pkt.type=T_REQLOGIN; 7169 p->pkt.data_len=i; 7170 memcpy(p->data,PASS,i); \ 00000B40 90119FE5 LDR R1,??maincsm_onmessage_5+0xC ;; PASS \ 00000B44 0090A0E1 MOV R9,R0 \ 00000B48 000094E5 LDR R0,[R4, #+0] \ 00000B4C 0820A0E1 MOV R2,R8 \ 00000B50 000089E5 STR R0,[R9, #+0] \ 00000B54 0100A0E3 MOV R0,#+1 \ 00000B58 B400C9E1 STRH R0,[R9, #+4] \ 00000B5C B680C9E1 STRH R8,[R9, #+6] \ 00000B60 080089E2 ADD R0,R9,#+8 \ 00000B64 1E0100EF SWI +286 7171 SUBPROC((void *)send_login,0,p); \ 00000B68 A8019FE5 LDR R0,??maincsm_onmessage_5+0x4C ;; send_login \ 00000B6C 0920A0E1 MOV R2,R9 \ 00000B70 0010A0E3 MOV R1,#+0 \ 00000B74 710100EF SWI +369 7172 } 7173 GROUP_CACHE=0; \ 00000B78 086485E5 STR R6,[R5, #+1032] 7174 SENDMSGCOUNT=0; //Начинаем отсчет \ 00000B7C D86285E5 STR R6,[R5, #+728] 7175 if (!FindGroupByID(0)) AddGroup(0,LG_GROUPNOTINLIST); \ 00000B80 0600A0E1 MOV R0,R6 \ 00000B84 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000B88 000050E3 CMP R0,#+0 \ 00000B8C 0100001A BNE ??maincsm_onmessage_64 \ 00000B90 B31F87E2 ADD R1,R7,#+716 \ 00000B94 ........ _BLF AddGroup,??AddGroup??rA 7176 if (!FindContactByUin(UIN) && (IsShowLoopback)) AddContact(UIN, LG_CLLOOPBACK,0,1); \ ??maincsm_onmessage_64: \ 00000B98 000094E5 LDR R0,[R4, #+0] \ 00000B9C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000BA0 000050E3 CMP R0,#+0 \ 00000BA4 0800001A BNE ??maincsm_onmessage_65 \ 00000BA8 6C019FE5 LDR R0,??maincsm_onmessage_5+0x50 ;; IsShowLoopback \ 00000BAC 000090E5 LDR R0,[R0, #+0] \ 00000BB0 000050E3 CMP R0,#+0 \ 00000BB4 0400000A BEQ ??maincsm_onmessage_65 \ 00000BB8 000094E5 LDR R0,[R4, #+0] \ 00000BBC 0130A0E3 MOV R3,#+1 \ 00000BC0 0020A0E3 MOV R2,#+0 \ 00000BC4 B61F87E2 ADD R1,R7,#+728 \ 00000BC8 ........ _BLF AddContact,??AddContact??rA 7177 SUBPROC((void *)LoadLocalCL); \ ??maincsm_onmessage_65: \ 00000BCC 4C019FE5 LDR R0,??maincsm_onmessage_5+0x54 ;; LoadLocalCL \ 00000BD0 710100EF SWI +369 7178 SMART_REDRAW(); \ 00000BD4 ........ BL SMART_REDRAW \ 00000BD8 B1FFFFEA B ??maincsm_onmessage_58 7179 } 7180 else 7181 { 7182 ShowMSG(1,(int)LG_MSGILLEGMSGCON); \ ??maincsm_onmessage_63: \ 00000BDC B91F87E2 ADD R1,R7,#+740 \ ??maincsm_onmessage_66: \ 00000BE0 0100A0E3 MOV R0,#+1 \ 00000BE4 480100EF SWI +328 \ 00000BE8 ADFFFFEA B ??maincsm_onmessage_58 7183 } 7184 break; 7185 case ENIP_SOCK_DATA_READ: 7186 if (connect_state>=2) \ ??maincsm_onmessage_67: \ 00000BEC 020051E3 CMP R1,#+2 7187 { 7188 //Если посылали send 7189 SUBPROC((void *)get_answer); \ 00000BF0 2C019FA5 LDRGE R0,??maincsm_onmessage_5+0x58 ;; get_answer \ 00000BF4 A9FFFFAA BGE ??maincsm_onmessage_59 7190 //SMART_REDRAW(); 7191 } 7192 else 7193 { 7194 ShowMSG(1,(int)LG_MSGILLEGMSGREA); \ 00000BF8 C31F87E2 ADD R1,R7,#+780 \ 00000BFC F7FFFFEA B ??maincsm_onmessage_66 7195 } 7196 break; 7197 case ENIP_BUFFER_FREE: 7198 case ENIP_BUFFER_FREE1: 7199 SUBPROC((void *)SendAnswer,0,0); \ ??maincsm_onmessage_68: \ 00000C00 ........ LDR R0,??DataTable289 ;; SendAnswer \ 00000C04 0020A0E3 MOV R2,#+0 \ 00000C08 0210A0E1 MOV R1,R2 \ 00000C0C 710100EF SWI +369 \ 00000C10 A3FFFFEA B ??maincsm_onmessage_58 7200 break; 7201 case ENIP_SOCK_REMOTE_CLOSED: 7202 //Закрыт со стороны сервера 7203 if (connect_state) \ ??maincsm_onmessage_69: \ 00000C14 000051E3 CMP R1,#+0 \ 00000C18 87FFFF0A BEQ ??maincsm_onmessage_53 7204 SUBPROC((void *)end_socket); \ 00000C1C ........ LDR R0,??DataTable290 ;; end_socket \ 00000C20 9EFFFFEA B ??maincsm_onmessage_59 7205 break; 7206 case ENIP_SOCK_CLOSED: 7207 //strcpy(logmsg, "No connection"); 7208 //Dump not received 7209 /* if (RXstate>(-(int)sizeof(PKT))) 7210 { 7211 unsigned int err; 7212 int f=fopen("4:\\NATICQ.dump",A_ReadWrite+A_Create+A_Truncate+A_BIN,P_READ+P_WRITE,&err); 7213 if (f!=-1) 7214 { 7215 fwrite(f,&RXbuf,RXstate+sizeof(PKT),&err); 7216 fclose(f,&err); 7217 } 7218 }*/ 7219 FillAllOffline(); \ ??maincsm_onmessage_70: \ 00000C24 ........ _BLF FillAllOffline,??FillAllOffline??rA 7220 RecountMenu(NULL,1); \ 00000C28 0110A0E3 MOV R1,#+1 \ 00000C2C 0000A0E3 MOV R0,#+0 \ 00000C30 ........ BL RecountMenu 7221 connect_state=0; 7222 sock=-1; \ 00000C34 0600E0E1 MVN R0,R6 \ 00000C38 E00385E5 STR R0,[R5, #+992] 7223 if(VIBR_ON_CONNECT) \ 00000C3C 00009BE5 LDR R0,[R11, #+0] \ 00000C40 DC6385E5 STR R6,[R5, #+988] \ 00000C44 000050E3 CMP R0,#+0 7224 vibra_count=4; \ 00000C48 0400A013 MOVNE R0,#+4 7225 else 7226 vibra_count=1; \ 00000C4C 0100A003 MOVEQ R0,#+1 \ 00000C50 C40385E5 STR R0,[R5, #+964] 7227 7228 start_vibra(); \ 00000C54 ........ BL start_vibra 7229 if (sendq_p) \ 00000C58 F80395E5 LDR R0,[R5, #+1016] \ 00000C5C 000050E3 CMP R0,#+0 \ 00000C60 0400000A BEQ ??maincsm_onmessage_71 7230 { 7231 snprintf(logmsg,255,"Disconnected, %d bytes not sended!",sendq_l); \ 00000C64 F43395E5 LDR R3,[R5, #+1012] \ 00000C68 CC2F87E2 ADD R2,R7,#+816 \ 00000C6C FF10A0E3 MOV R1,#+255 \ 00000C70 0800A0E1 MOV R0,R8 \ 00000C74 1B0100EF SWI +283 7232 } 7233 SMART_REDRAW(); \ ??maincsm_onmessage_71: \ 00000C78 ........ BL SMART_REDRAW 7234 SUBPROC((void *)ClearSendQ); \ 00000C7C ........ LDR R0,??DataTable291 ;; ClearSendQ \ 00000C80 710100EF SWI +369 7235 #ifdef EVILFOX 7236 if (!disautorecconect) GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*12,do_reconnect); 7237 #else 7238 if (!disautorecconect) \ 00000C84 B00395E5 LDR R0,[R5, #+944] \ 00000C88 000050E3 CMP R0,#+0 \ 00000C8C 6AFFFF1A BNE ??maincsm_onmessage_53 7239 { 7240 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000C90 000099E5 LDR R0,[R9, #+0] \ 00000C94 0A20A0E1 MOV R2,R10 \ 00000C98 D830A0E3 MOV R3,#+216 \ 00000C9C 930001E0 MUL R1,R3,R0 \ 00000CA0 0400A0E1 MOV R0,R4 \ 00000CA4 4D0000EF SWI +77 7241 snprintf(logmsg,255,"%s\nReconect after %d second...",logmsg, RECONNECT_TIME); //2058 \ 00000CA8 000099E5 LDR R0,[R9, #+0] \ 00000CAC 0830A0E1 MOV R3,R8 \ 00000CB0 01002DE9 PUSH {R0} \ 00000CB4 D52F87E2 ADD R2,R7,#+852 \ 00000CB8 FF10A0E3 MOV R1,#+255 \ 00000CBC 0800A0E1 MOV R0,R8 \ 00000CC0 1B0100EF SWI +283 \ 00000CC4 04D08DE2 ADD SP,SP,#+4 \ 00000CC8 75FFFFEA B ??maincsm_onmessage_58 \ ??maincsm_onmessage_5: \ 00000CCC ........ DC32 CheckDoubleRun \ 00000CD0 ........ DC32 ProcessNextSmile \ 00000CD4 ........ DC32 ProcessNextXStatImg \ 00000CD8 ........ DC32 PASS \ 00000CDC ........ DC32 IDLEICON_Y \ 00000CE0 ........ DC32 IDLEICON_X \ 00000CE4 ........ DC32 XStatusesIconArray \ 00000CE8 ........ DC32 IDLEICON_YX \ 00000CEC ........ DC32 XStatusesImgList \ 00000CF0 ........ DC32 IDLEICON_XX \ 00000CF4 ........ DC32 msg_d_x \ 00000CF8 ........ DC32 msg_d_y \ 00000CFC ........ DC32 spaco2 \ 00000D00 ........ DC32 Is_Unread_On \ 00000D04 ........ DC32 unread_Y \ 00000D08 ........ DC32 unread_X \ 00000D0C ........ DC32 Is_Online_On \ 00000D10 ........ DC32 online_y \ 00000D14 ........ DC32 online_x \ 00000D18 ........ DC32 send_login \ 00000D1C ........ DC32 IsShowLoopback \ 00000D20 ........ DC32 LoadLocalCL \ 00000D24 ........ DC32 get_answer 7242 } 7243 7244 #endif 7245 break; 7246 } 7247 } 7248 } 7249 return(1); 7250 } 7251 7252 7253 //-------------------- ICON IN ICONBAR --------------------// 7254 7255 //kluchnik 26.03.08 7256 #ifdef NEWSGOLD 7257 #pragma swi_number=0x27 7258 __swi __arm void AddIconToIconBar(int pic, short *num); 7259 7260 \ In segment CODE, align 4, keep-with-next 7261 void addIconBar(short* num) 7262 { \ addIconBar: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 7263 if(IsGuiOnTop(maingui_id) && ShowStatusToIconBar) return; \ 00000004 ........ LDR R8,??DataTable318 ;; i_rc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C D40298E5 LDR R0,[R8, #+724] \ 00000010 350100EF SWI +309 \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0300000A BEQ ??addIconBar_0 \ 0000001C 6C029FE5 LDR R0,??addIconBar_1 ;; ShowStatusToIconBar \ 00000020 000090E5 LDR R0,[R0, #+0] \ 00000024 000050E3 CMP R0,#+0 \ 00000028 F083BD18 POPNE {R4-R9,PC} 7264 7265 int icn; 7266 if(ShowStatusIcon==1 || ShowStatusIcon==3) \ ??addIconBar_0: \ 0000002C ........ LDR R0,??DataTable293 ;; ShowStatusIcon \ 00000030 ........ LDR R5,??DataTable294 ;; NumStatusToIconBar \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 010050E3 CMP R0,#+1 \ 0000003C 03005013 CMPNE R0,#+3 \ 00000040 1D00001A BNE ??addIconBar_2 7267 { 7268 if(total_unread) \ 00000044 000498E5 LDR R0,[R8, #+1024] \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 1300000A BEQ ??addIconBar_3 7269 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); \ ??addIconBar_4: \ 00000050 000095E5 LDR R0,[R5, #+0] \ 00000054 0410A0E1 MOV R1,R4 \ 00000058 0D0080E2 ADD R0,R0,#+13 \ ??addIconBar_5: \ 0000005C 270000EF SWI +39 7270 else 7271 { 7272 switch(connect_state) 7273 { 7274 case 0: 7275 icn=IS_OFFLINE; break; 7276 case 3: 7277 icn=CurrentStatus; //IS_ONLINE; 7278 break; 7279 default: 7280 icn=IS_UNKNOWN; break; 7281 } 7282 AddIconToIconBar(NumStatusToIconBar + icn, num); 7283 } 7284 } 7285 else 7286 { 7287 if(ShowStatusIcon==2)//Если показывать и иконбаре везде,кроме идле 7288 { 7289 if(!(IsIdleUiOnTop())) 7290 { 7291 if(total_unread) 7292 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); 7293 else 7294 { 7295 switch(connect_state) 7296 { 7297 case 0: 7298 icn=IS_OFFLINE; break; 7299 case 3: 7300 icn=CurrentStatus; //IS_ONLINE; 7301 break; 7302 default: 7303 icn=IS_UNKNOWN; break; 7304 } 7305 AddIconToIconBar(NumStatusToIconBar + icn, num); 7306 } 7307 } 7308 } 7309 } 7310 7311 if(show_xstatus==2 || show_xstatus==3) \ ??addIconBar_6: \ 00000060 ........ LDR R0,??DataTable295 ;; show_xstatus \ 00000064 28629FE5 LDR R6,??addIconBar_1+0x4 ;; NumXStatusToIconBar \ 00000068 000090E5 LDR R0,[R0, #+0] \ 0000006C 0870A0E3 MOV R7,#+8 \ 00000070 807D87E3 ORR R7,R7,#0x2000 \ 00000074 020050E3 CMP R0,#+2 \ 00000078 03005013 CMPNE R0,#+3 \ 0000007C 2700001A BNE ??addIconBar_7 7312 { 7313 if(total_unread2 && total_unread2<10) \ 00000080 CC0298E5 LDR R0,[R8, #+716] \ 00000084 000050E3 CMP R0,#+0 \ 00000088 1D00000A BEQ ??addIconBar_8 \ 0000008C 0A0050E3 CMP R0,#+10 \ 00000090 1B0000AA BGE ??addIconBar_8 7314 AddIconToIconBar(8200 + total_unread2, num); \ 00000094 0410A0E1 MOV R1,R4 \ 00000098 000087E0 ADD R0,R7,R0 \ 0000009C 1E0000EA B ??addIconBar_9 \ ??addIconBar_3: \ 000000A0 DC0398E5 LDR R0,[R8, #+988] \ 000000A4 000050E3 CMP R0,#+0 \ 000000A8 1100000A BEQ ??addIconBar_10 \ 000000AC 030050E2 SUBS R0,R0,#+3 \ 000000B0 0E00001A BNE ??addIconBar_11 \ ??addIconBar_12: \ 000000B4 700398E5 LDR R0,[R8, #+880] \ 000000B8 0D0000EA B ??addIconBar_10 \ ??addIconBar_2: \ 000000BC 020050E3 CMP R0,#+2 \ 000000C0 E6FFFF1A BNE ??addIconBar_6 \ 000000C4 C50000EF SWI +197 \ 000000C8 000050E3 CMP R0,#+0 \ 000000CC E3FFFF1A BNE ??addIconBar_6 \ 000000D0 000498E5 LDR R0,[R8, #+1024] \ 000000D4 000050E3 CMP R0,#+0 \ 000000D8 DCFFFF1A BNE ??addIconBar_4 \ 000000DC DC0398E5 LDR R0,[R8, #+988] \ 000000E0 000050E3 CMP R0,#+0 \ 000000E4 0200000A BEQ ??addIconBar_10 \ 000000E8 030050E2 SUBS R0,R0,#+3 \ 000000EC F0FFFF0A BEQ ??addIconBar_12 \ ??addIconBar_11: \ 000000F0 0E00A0E3 MOV R0,#+14 \ ??addIconBar_10: \ 000000F4 002095E5 LDR R2,[R5, #+0] \ 000000F8 0410A0E1 MOV R1,R4 \ 000000FC 020080E0 ADD R0,R0,R2 \ 00000100 D5FFFFEA B ??addIconBar_5 7315 else 7316 if(CurrentXStatus!=0) \ ??addIconBar_8: \ 00000104 740398E5 LDR R0,[R8, #+884] \ 00000108 000050E3 CMP R0,#+0 \ 0000010C 0300000A BEQ ??addIconBar_7 7317 AddIconToIconBar(NumXStatusToIconBar+CurrentXStatus,num); \ 00000110 002096E5 LDR R2,[R6, #+0] \ 00000114 0410A0E1 MOV R1,R4 \ 00000118 020080E0 ADD R0,R0,R2 \ ??addIconBar_9: \ 0000011C 270000EF SWI +39 7318 } 7319 7320 if(PingToIconBar) \ ??addIconBar_7: \ 00000120 70019FE5 LDR R0,??addIconBar_1+0x8 ;; PingToIconBar \ 00000124 000090E5 LDR R0,[R0, #+0] \ 00000128 000050E3 CMP R0,#+0 \ 0000012C 1400000A BEQ ??addIconBar_13 7321 { 7322 int ping=0; 7323 if(curping < 3) ping=0; \ 00000130 B00298E5 LDR R0,[R8, #+688] \ 00000134 030050E3 CMP R0,#+3 \ 00000138 0C0000BA BLT ??addIconBar_14 7324 else if(curping > 3 && curping < 10) ping=1; \ 0000013C 040050E3 CMP R0,#+4 \ 00000140 020000BA BLT ??addIconBar_15 \ 00000144 0A0050E3 CMP R0,#+10 \ 00000148 0100A0B3 MOVLT R0,#+1 \ 0000014C 080000BA BLT ??addIconBar_16 7325 else if(curping > 10 && curping < 30) ping=2; \ ??addIconBar_15: \ 00000150 0B0050E3 CMP R0,#+11 \ 00000154 020000BA BLT ??addIconBar_17 \ 00000158 1E0050E3 CMP R0,#+30 \ 0000015C 0200A0B3 MOVLT R0,#+2 \ 00000160 030000BA BLT ??addIconBar_16 7326 else if(curping > 30) ping=3; \ ??addIconBar_17: \ 00000164 1F0050E3 CMP R0,#+31 \ 00000168 0300A0A3 MOVGE R0,#+3 \ 0000016C 000000AA BGE ??addIconBar_16 7327 else ping=0; \ ??addIconBar_14: \ 00000170 0000A0E3 MOV R0,#+0 7328 7329 AddIconToIconBar(8210 + ping ,num); \ ??addIconBar_16: \ 00000174 0410A0E1 MOV R1,R4 \ 00000178 0A2087E2 ADD R2,R7,#+10 \ 0000017C 000082E0 ADD R0,R2,R0 \ 00000180 270000EF SWI +39 7330 } 7331 7332 #ifdef kluchnik 7333 CLIST *t; 7334 t=FindContactByUin(438532198); \ ??addIconBar_13: \ 00000184 ........ LDR R0,??DataTable296 ;; 0x1a237866 7335 if(t) \ 00000188 FF80A0E3 MOV R8,#+255 \ 0000018C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000190 0090B0E1 MOVS R9,R0 \ 00000194 FF8C88E3 ORR R8,R8,#0xFF00 \ 00000198 1B00000A BEQ ??addIconBar_18 7336 { 7337 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) \ 0000019C B405D9E1 LDRH R0,[R9, #+84] \ 000001A0 080050E1 CMP R0,R8 \ 000001A4 0900000A BEQ ??addIconBar_19 \ 000001A8 0900A0E1 MOV R0,R9 \ 000001AC ........ BL GetIconIndex \ 000001B0 0E0050E3 CMP R0,#+14 \ 000001B4 0500000A BEQ ??addIconBar_19 7338 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); \ 000001B8 0900A0E1 MOV R0,R9 \ 000001BC ........ BL GetIconIndex \ 000001C0 002095E5 LDR R2,[R5, #+0] \ 000001C4 0410A0E1 MOV R1,R4 \ 000001C8 020080E0 ADD R0,R0,R2 \ 000001CC 270000EF SWI +39 7339 7340 if(t->isunread && t->unread_msg<10) \ ??addIconBar_19: \ 000001D0 900099E5 LDR R0,[R9, #+144] \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 0400000A BEQ ??addIconBar_20 \ 000001DC 940099E5 LDR R0,[R9, #+148] \ 000001E0 0A0050E3 CMP R0,#+10 7341 AddIconToIconBar(8200 + t->unread_msg, num); \ 000001E4 0410A0B1 MOVLT R1,R4 \ 000001E8 000087B0 ADDLT R0,R7,R0 \ 000001EC 050000BA BLT ??addIconBar_21 7342 else 7343 if(t->xstate!=0) \ ??addIconBar_20: \ 000001F0 B605D9E1 LDRH R0,[R9, #+86] \ 000001F4 000050E3 CMP R0,#+0 \ 000001F8 0300000A BEQ ??addIconBar_18 7344 AddIconToIconBar(NumXStatusToIconBar+t->xstate,num); \ 000001FC 002096E5 LDR R2,[R6, #+0] \ 00000200 0410A0E1 MOV R1,R4 \ 00000204 020080E0 ADD R0,R0,R2 \ ??addIconBar_21: \ 00000208 270000EF SWI +39 7345 } 7346 #endif 7347 7348 if(ADDITION_UIN!=0) \ ??addIconBar_18: \ 0000020C 88009FE5 LDR R0,??addIconBar_1+0xC ;; ADDITION_UIN \ 00000210 000090E5 LDR R0,[R0, #+0] \ 00000214 000050E3 CMP R0,#+0 \ 00000218 F083BD08 POPEQ {R4-R9,PC} 7349 { 7350 CLIST *t; 7351 t=FindContactByUin(ADDITION_UIN); \ 0000021C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000220 0070B0E1 MOVS R7,R0 7352 if(t) 7353 { 7354 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) \ 00000224 B405D711 LDRHNE R0,[R7, #+84] \ 00000228 08005011 CMPNE R0,R8 \ 0000022C F083BD08 POPEQ {R4-R9,PC} \ 00000230 0700A0E1 MOV R0,R7 \ 00000234 ........ BL GetIconIndex \ 00000238 0E0050E3 CMP R0,#+14 \ 0000023C F083BD08 POPEQ {R4-R9,PC} 7355 { 7356 if(show_add_state) \ 00000240 58009FE5 LDR R0,??addIconBar_1+0x10 ;; show_add_state \ 00000244 000090E5 LDR R0,[R0, #+0] \ 00000248 000050E3 CMP R0,#+0 \ 0000024C 0500000A BEQ ??addIconBar_22 7357 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); \ 00000250 0700A0E1 MOV R0,R7 \ 00000254 ........ BL GetIconIndex \ 00000258 002095E5 LDR R2,[R5, #+0] \ 0000025C 0410A0E1 MOV R1,R4 \ 00000260 020080E0 ADD R0,R0,R2 \ 00000264 270000EF SWI +39 7358 if(show_add_xstate) \ ??addIconBar_22: \ 00000268 34009FE5 LDR R0,??addIconBar_1+0x14 ;; show_add_xstate \ 0000026C 000090E5 LDR R0,[R0, #+0] \ 00000270 000050E3 CMP R0,#+0 \ 00000274 F083BD08 POPEQ {R4-R9,PC} 7359 AddIconToIconBar(NumXStatusToIconBar + t->xstate, num); \ 00000278 B625D7E1 LDRH R2,[R7, #+86] \ 0000027C 000096E5 LDR R0,[R6, #+0] \ 00000280 0410A0E1 MOV R1,R4 \ 00000284 000082E0 ADD R0,R2,R0 \ 00000288 270000EF SWI +39 \ 0000028C F083BDE8 POP {R4-R9,PC} ;; return \ ??addIconBar_1: \ 00000290 ........ DC32 ShowStatusToIconBar \ 00000294 ........ DC32 NumXStatusToIconBar \ 00000298 ........ DC32 PingToIconBar \ 0000029C ........ DC32 ADDITION_UIN \ 000002A0 ........ DC32 show_add_state \ 000002A4 ........ DC32 show_add_xstate 7360 } 7361 } 7362 } 7363 } 7364 7365 typedef struct 7366 { 7367 char check_name[8]; 7368 int addr; 7369 }ICONBAR_H; 7370 7371 #endif 7372 \ In segment DATA_C, align 4, align-sorted 7373 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 7374 \ In segment DATA_Z, align 4, align-sorted 7375 unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 7376 7377 struct 7378 { 7379 CSM_DESC maincsm; 7380 WSHDR maincsm_name; 7381 #ifdef NEWSGOLD 7382 ICONBAR_H iconbar_handler; 7383 #endif 7384 }MAINCSM = 7385 { 7386 { 7387 maincsm_onmessage, 7388 maincsm_oncreate, 7389 #ifdef NEWSGOLD 7390 0, 7391 0, 7392 0, 7393 0, 7394 #endif 7395 maincsm_onclose, 7396 sizeof(MAIN_CSM), 7397 1, 7398 &minus11 7399 }, 7400 { 7401 maincsm_name_body, 7402 NAMECSM_MAGIC1, 7403 NAMECSM_MAGIC2, 7404 0x0, 7405 139 7406 } 7407 #ifdef NEWSGOLD 7408 , 7409 { 7410 "IconBar" 7411 } 7412 #endif 7413 }; 7414 \ In segment CODE, align 4, keep-with-next 7415 void UpdateCSMname(void) 7416 { 7417 wsprintf((WSHDR *)(&MAINCSM.maincsm_name), "NATICQ: %d",UIN); \ UpdateCSMname: \ 00000000 ........ LDR R0,??DataTable301 ;; UIN \ 00000004 10109FE5 LDR R1,??UpdateCSMname_0 ;; `?` \ 00000008 00402DE9 PUSH {LR} \ 0000000C 002090E5 LDR R2,[R0, #+0] \ 00000010 08009FE5 LDR R0,??UpdateCSMname_0+0x4 ;; i_rc + 180 \ 00000014 240100EF SWI +292 7418 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??UpdateCSMname_0: \ 0000001C ........ DC32 `?` \ 00000020 ........ DC32 i_rc + 180 7419 7420 #ifdef NEWSGOLD \ In segment CODE, align 4, keep-with-next 7421 void SetIconBarHandler() 7422 { 7423 MAINCSM.iconbar_handler.addr = (int)addIconBar; \ SetIconBarHandler: \ 00000000 08009FE5 LDR R0,??SetIconBarHandler_0 ;; i_rc + 208 \ 00000004 ........ LDR R1,??DataTable312 ;; addIconBar \ 00000008 001080E5 STR R1,[R0, #+0] 7424 } \ 0000000C 1EFF2FE1 BX LR ;; return \ ??SetIconBarHandler_0: \ 00000010 ........ DC32 i_rc + 208 7425 #endif 7426 \ In segment CODE, align 4, keep-with-next 7427 int main(char *filename) 7428 { \ main: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 7429 MAIN_CSM main_csm; 7430 char *s; 7431 int len; 7432 WSHDR *ws; 7433 UpdateConfig(); 7434 //InitConfig(); 7435 7436 sprintf(PINGO, "Ping None"); \ 00000004 ........ LDR R4,??DataTable318 ;; i_rc \ 00000008 ........ LDR R5,??DataTable300 ;; Canvas \ 0000000C 2CD04DE2 SUB SP,SP,#+44 \ 00000010 0060A0E1 MOV R6,R0 \ 00000014 ........ _BLF UpdateConfig,??UpdateConfig??rA \ 00000018 DD1F85E2 ADD R1,R5,#+884 \ 0000001C E000A0E3 MOV R0,#+224 \ 00000020 600D80E3 ORR R0,R0,#0x1800 \ 00000024 040080E0 ADD R0,R0,R4 \ 00000028 160000EF SWI +22 7437 7438 s=strrchr(filename,'\\'); 7439 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 7440 strncpy(elf_path,filename,len); \ 00000040 0720A0E1 MOV R2,R7 \ 00000044 0610A0E1 MOV R1,R6 \ 00000048 C800A0E3 MOV R0,#+200 \ 0000004C 400E80E3 ORR R0,R0,#0x400 \ 00000050 040080E0 ADD R0,R0,R4 \ 00000054 160100EF SWI +278 7441 elf_path[len]=0; \ 00000058 0060A0E3 MOV R6,#+0 \ 0000005C 040087E0 ADD R0,R7,R4 \ 00000060 C864C0E5 STRB R6,[R0, #+1224] 7442 if (!UIN) \ 00000064 ........ LDR R0,??DataTable301 ;; UIN \ 00000068 000090E5 LDR R0,[R0, #+0] \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 1500001A BNE ??main_0 7443 { 7444 LockSched(); \ 00000074 460100EF SWI +326 7445 ShowMSG(1,(int)LG_MSGNOUINPASS); \ 00000078 E01F85E2 ADD R1,R5,#+896 \ 0000007C 0100A0E3 MOV R0,#+1 \ 00000080 480100EF SWI +328 7446 ws=AllocWS(150); \ 00000084 9600A0E3 MOV R0,#+150 \ 00000088 250100EF SWI +293 7447 str_2ws(ws,suc_config_name,128); \ 0000008C ........ LDR R1,??DataTable302 ;; suc_config_name \ 00000090 0040A0E1 MOV R4,R0 \ 00000094 8020A0E3 MOV R2,#+128 \ 00000098 6C0100EF SWI +364 7448 ExecuteFile(ws,0,0); \ 0000009C 0020A0E3 MOV R2,#+0 \ 000000A0 0210A0E1 MOV R1,R2 \ 000000A4 0400A0E1 MOV R0,R4 \ 000000A8 940000EF SWI +148 7449 FreeWS(ws); \ 000000AC 0400A0E1 MOV R0,R4 \ 000000B0 290100EF SWI +297 7450 UnlockSched(); \ 000000B4 470100EF SWI +327 7451 SUBPROC((void *)ElfKiller); \ 000000B8 ........ LDR R0,??DataTable303 ;; ElfKiller \ 000000BC 710100EF SWI +369 7452 return 0; \ 000000C0 0600A0E1 MOV R0,R6 \ 000000C4 2CD08DE2 ADD SP,SP,#+44 \ 000000C8 F087BDE8 POP {R4-R10,PC} 7453 } 7454 ReadDefSettings(); 7455 setup_ICONS(); 7456 LoadXStatusText(); 7457 UpdateCSMname(); 7458 LockSched(); 7459 maincsm_id=CreateCSM(&MAINCSM.maincsm,&main_csm,0); 7460 UnlockSched(); 7461 7462 PrintLibInit(4); 7463 FontPathInit((char *)fontpath, 1); \ ??main_0: \ 000000CC ........ LDR R7,??DataTable304 ;; fontpath 7464 FontPathInit((char *)fontpath2, 1); \ 000000D0 ........ LDR R8,??DataTable305 ;; fontpath2 7465 FontPathInit((char *)fontpath3, 1); \ 000000D4 ........ LDR R9,??DataTable306 ;; fontpath3 7466 FontPathInit((char *)fontpath4, 1); \ 000000D8 ........ LDR R10,??DataTable307 ;; fontpath4 \ 000000DC ........ BL ReadDefSettings \ 000000E0 ........ BL setup_ICONS \ 000000E4 ........ _BLF LoadXStatusText,??LoadXStatusText??rA \ 000000E8 ........ BL UpdateCSMname \ 000000EC 460100EF SWI +326 \ 000000F0 0020A0E3 MOV R2,#+0 \ 000000F4 0D10A0E1 MOV R1,SP \ 000000F8 8C0084E2 ADD R0,R4,#+140 \ 000000FC 070100EF SWI +263 \ 00000100 D00284E5 STR R0,[R4, #+720] \ 00000104 470100EF SWI +327 \ 00000108 0400A0E3 MOV R0,#+4 \ 0000010C ........ _BLF PrintLibInit,??PrintLibInit??rA \ 00000110 0110A0E3 MOV R1,#+1 \ 00000114 0700A0E1 MOV R0,R7 \ 00000118 ........ _BLF FontPathInit,??FontPathInit??rA \ 0000011C 0110A0E3 MOV R1,#+1 \ 00000120 0800A0E1 MOV R0,R8 \ 00000124 ........ _BLF FontPathInit,??FontPathInit??rA \ 00000128 0110A0E3 MOV R1,#+1 \ 0000012C 0900A0E1 MOV R0,R9 \ 00000130 ........ _BLF FontPathInit,??FontPathInit??rA \ 00000134 0110A0E3 MOV R1,#+1 \ 00000138 0A00A0E1 MOV R0,R10 \ 0000013C ........ _BLF FontPathInit,??FontPathInit??rA 7467 SetCanvasFlag(1); \ 00000140 0100A0E3 MOV R0,#+1 \ 00000144 ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 7468 7469 if(isSystemFont) clfont=100+pngFont; \ 00000148 ........ LDR R0,??DataTable308 ;; isSystemFont \ 0000014C 000090E5 LDR R0,[R0, #+0] \ 00000150 000050E3 CMP R0,#+0 \ 00000154 0300000A BEQ ??main_1 \ 00000158 ........ LDR R0,??DataTable309 ;; pngFont \ 0000015C 000090E5 LDR R0,[R0, #+0] \ 00000160 640080E2 ADD R0,R0,#+100 \ 00000164 000000EA B ??main_2 7470 else clfont=2; \ ??main_1: \ 00000168 0200A0E3 MOV R0,#+2 \ ??main_2: \ 0000016C 5C0484E5 STR R0,[R4, #+1116] 7471 7472 if(!strlen(fontpath2) || !strlen(fontpath3)) clfont=100+FONT_SMALL; \ 00000170 0800A0E1 MOV R0,R8 \ 00000174 1B0000EF SWI +27 \ 00000178 000050E3 CMP R0,#+0 \ 0000017C 0300000A BEQ ??main_3 \ 00000180 0900A0E1 MOV R0,R9 \ 00000184 1B0000EF SWI +27 \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 0100001A BNE ??main_4 \ ??main_3: \ 00000190 6C00A0E3 MOV R0,#+108 \ 00000194 5C0484E5 STR R0,[R4, #+1116] 7473 if(!strlen(fontpath4)) { PNG_SOFTKEY=0; PNG_HEADER=0; } \ ??main_4: \ 00000198 0A00A0E1 MOV R0,R10 \ 0000019C 1B0000EF SWI +27 \ 000001A0 000050E3 CMP R0,#+0 \ 000001A4 0300001A BNE ??main_5 \ 000001A8 ........ LDR R0,??DataTable310 ;; PNG_SOFTKEY \ 000001AC 006080E5 STR R6,[R0, #+0] \ 000001B0 ........ LDR R0,??DataTable311 ;; PNG_HEADER \ 000001B4 006080E5 STR R6,[R0, #+0] 7474 7475 away_timer(); \ ??main_5: \ 000001B8 ........ BL away_timer 7476 #ifdef NEWSGOLD 7477 SetIconBarHandler(); \ 000001BC ........ LDR R0,??DataTable312 ;; addIconBar \ 000001C0 D00084E5 STR R0,[R4, #+208] 7478 #endif 7479 if(fonto==1) \ 000001C4 ........ LDR R0,??DataTable313 ;; fonto \ 000001C8 000090E5 LDR R0,[R0, #+0] \ 000001CC 010050E3 CMP R0,#+1 \ 000001D0 0B00001A BNE ??main_6 7480 { 7481 char *heght=malloc(64); \ 000001D4 4000A0E3 MOV R0,#+64 \ 000001D8 140000EF SWI +20 \ 000001DC 0060A0E1 MOV R6,R0 7482 sprintf(heght, "%s2240.png", fontpath); \ 000001E0 0720A0E1 MOV R2,R7 \ 000001E4 A61F85E2 ADD R1,R5,#+664 \ 000001E8 160000EF SWI +22 7483 paused_height=GetImgHeight((int)heght); \ 000001EC 0600A0E1 MOV R0,R6 \ 000001F0 210000EF SWI +33 \ 000001F4 9C0284E5 STR R0,[R4, #+668] 7484 mfree(heght); \ 000001F8 0600A0E1 MOV R0,R6 \ 000001FC 150000EF SWI +21 \ 00000200 010000EA B ??main_7 7485 } 7486 else 7487 paused_height=fonto-100; \ ??main_6: \ 00000204 640040E2 SUB R0,R0,#+100 \ 00000208 9C0284E5 STR R0,[R4, #+668] 7488 7489 GBS_StartTimerProc(&ping_tmr, 12000, Pinger2); \ ??main_7: \ 0000020C ........ LDR R2,??DataTable314 ;; Pinger2 \ 00000210 E010A0E3 MOV R1,#+224 \ 00000214 B81D81E3 ORR R1,R1,#0x2E00 \ 00000218 D000A0E3 MOV R0,#+208 \ 0000021C 600D80E3 ORR R0,R0,#0x1800 \ 00000220 040080E0 ADD R0,R0,R4 \ 00000224 4D0000EF SWI +77 7490 upTime(); \ 00000228 ........ BL upTime 7491 #ifdef NEWSGOLD 7492 ScreenSaverTimer(); \ 0000022C ........ BL ScreenSaverTimer 7493 initTags(); \ 00000230 ........ _BLF initTags,??initTags??rA 7494 #endif 7495 AutoChangeStatus_timer(); \ 00000234 ........ BL AutoChangeStatus_timer 7496 init_time_zone(); \ 00000238 ........ BL init_time_zone 7497 AddKeybMsgHook((void *)my_keyhook); \ 0000023C ........ LDR R0,??DataTable315 ;; my_keyhook \ 00000240 2B0100EF SWI +299 7498 return 0; \ 00000244 0000A0E3 MOV R0,#+0 \ 00000248 2CD08DE2 ADD SP,SP,#+44 \ 0000024C F087BDE8 POP {R4-R10,PC} ;; return 7499 } 7500 7501 //=========================================================== 7502 // Edit chat 7503 //=========================================================== 7504 \ In segment CODE, align 4, keep-with-next 7505 void edchat_locret(void){} \ edchat_locret: \ 00000000 1EFF2FE1 BX LR ;; return 7506 \ In segment CODE, align 4, keep-with-next 7507 char *ExtractAnswer(WSHDR *ws) 7508 { \ ExtractAnswer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 7509 S_SMILES *t; 7510 int c; 7511 int len=0; 7512 int scur; 7513 char *msg=NULL; 7514 unsigned short *wsbody=ws->wsbody; \ 00000004 005090E5 LDR R5,[R0, #+0] \ 00000008 0040A0E3 MOV R4,#+0 7515 int wslen=wsbody[0]; \ 0000000C B060D5E1 LDRH R6,[R5, #+0] \ 00000010 0070A0E3 MOV R7,#+0 7516 if (wslen) \ 00000014 000056E3 CMP R6,#+0 \ 00000018 3C00000A BEQ ??ExtractAnswer_0 7517 { 7518 for (int i=0; i=0xE100) 7522 { 7523 t=FindSmileByUni(c); 7524 if (t) 7525 { 7526 if (t->lines) 7527 { 7528 len+=strlen(t->lines->text); 7529 } 7530 } 7531 else len++; 7532 } 7533 else len++; 7534 } 7535 7536 msg=malloc(len+1); \ ??ExtractAnswer_2: \ 00000024 010084E2 ADD R0,R4,#+1 \ 00000028 140000EF SWI +20 \ 0000002C 0070A0E1 MOV R7,R0 7537 scur=0; \ 00000030 0090A0E3 MOV R9,#+0 7538 for (int wcur=0; wcur=0xE100) 7543 { 7544 t=FindSmileByUni(c); 7545 if (t) 7546 { 7547 int w; 7548 char *s; 7549 if (t->lines) 7550 { 7551 s=t->lines->text; 7552 while ((w=*s++) && scurnext)) \ FindNextActiveContact: \ ??FindNextActiveContact_0: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0300000A BEQ ??FindNextActiveContact_1 7579 { 7580 if (t->isactive) return t; \ 0000000C AC1090E5 LDR R1,[R0, #+172] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 F9FFFF0A BEQ ??FindNextActiveContact_0 \ 00000018 1EFF2FE1 BX LR 7581 } 7582 t=(CLIST *)(&cltop); \ ??FindNextActiveContact_1: \ 0000001C ........ LDR R0,??DataTable317 ;; i_rc + 1028 \ 00000020 020000EA B ??FindNextActiveContact_2 7583 while(t=(CLIST *)(t->next)) 7584 { 7585 if (t->isactive) return t; \ ??FindNextActiveContact_3: \ 00000024 AC1090E5 LDR R1,[R0, #+172] \ 00000028 000051E3 CMP R1,#+0 \ 0000002C 1EFF2F11 BXNE LR 7586 } \ ??FindNextActiveContact_2: \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 F9FFFF1A BNE ??FindNextActiveContact_3 7587 return NULL; \ 0000003C 1EFF2FE1 BX LR ;; return 7588 } 7589 \ In segment CODE, align 4, keep-with-next 7590 CLIST *FindPrevActiveContact(CLIST *t) 7591 { 7592 CLIST *cl; 7593 CLIST *cl_active=NULL; 7594 cl=(CLIST *)(&cltop); \ FindPrevActiveContact: \ 00000000 ........ LDR R2,??DataTable317 ;; i_rc + 1028 \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 020000EA B ??FindPrevActiveContact_0 7595 7596 7597 while(cl=cl->next) 7598 { 7599 if (cl==t) 7600 { 7601 if (cl_active==NULL) break; 7602 else return (cl_active); 7603 } 7604 else 7605 { 7606 if (cl->isactive) cl_active=cl; \ ??FindPrevActiveContact_1: \ 0000000C AC3092E5 LDR R3,[R2, #+172] \ 00000010 000053E3 CMP R3,#+0 \ 00000014 0210A011 MOVNE R1,R2 7607 } \ ??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 7608 } 7609 while(t) \ ??FindPrevActiveContact_2: \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 FBFFFF0A BEQ ??FindPrevActiveContact_3 7610 { 7611 if (t->isactive) cl_active=t; \ 00000044 AC2090E5 LDR R2,[R0, #+172] \ 00000048 000052E3 CMP R2,#+0 \ 0000004C 0010A011 MOVNE R1,R0 7612 t=t->next; \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 F8FFFFEA B ??FindPrevActiveContact_2 7613 } 7614 return cl_active; 7615 } 7616 7617 \ In segment CODE, align 4, keep-with-next 7618 void ed_options_handler(USR_MENU_ITEM *item) 7619 { \ ed_options_handler: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 7620 EDCHAT_STRUCT *ed_struct=item->user_pointer; 7621 CLIST *t; 7622 int i=item->cur_item; 7623 if (item->type==0) \ 00000004 ........ LDR R5,??DataTable318 ;; i_rc \ 00000008 58D04DE2 SUB SP,SP,#+88 \ 0000000C ........ LDR R7,??DataTable319 ;; IsMultiBuffer \ 00000010 0080A0E1 MOV R8,R0 \ 00000014 0000D8E5 LDRB R0,[R8, #+0] \ 00000018 044098E5 LDR R4,[R8, #+4] \ 0000001C B860D8E1 LDRH R6,[R8, #+8] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 3200001A BNE ??ed_options_handler_0 7624 { 7625 if(IsMultiBuffer) \ 00000028 003097E5 LDR R3,[R7, #+0] \ 0000002C CC1395E5 LDR R1,[R5, #+972] \ 00000030 102094E5 LDR R2,[R4, #+16] \ 00000034 0C0098E5 LDR R0,[R8, #+12] \ 00000038 70949FE5 LDR R9,??ed_options_handler_1 ;; `?` \ 0000003C 000053E3 CMP R3,#+0 \ 00000040 1900000A BEQ ??ed_options_handler_2 7626 { 7627 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 7628 { 7629 case 0: 7630 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ed_options_handler_3: \ 00000068 040094E5 LDR R0,[R4, #+4] \ 0000006C 820100EF SWI +386 \ 00000070 081094E5 LDR R1,[R4, #+8] \ 00000074 010050E1 CMP R0,R1 \ 00000078 0C009815 LDRNE R0,[R8, #+12] \ 0000007C 08108912 ADDNE R1,R9,#+8 7631 ascii2ws(item->ws,"Cмайлы"); \ 00000080 0C009805 LDREQ R0,[R8, #+12] \ 00000084 0910A001 MOVEQ R1,R9 \ 00000088 180000EA B ??ed_options_handler_8 7632 else 7633 ascii2ws(item->ws,"В буфер"); 7634 break; 7635 case 1: 7636 ascii2ws(item->ws,"Из буфера"); \ ??ed_options_handler_4: \ 0000008C 101089E2 ADD R1,R9,#+16 \ 00000090 160000EA B ??ed_options_handler_8 7637 break; 7638 case 2: 7639 ascii2ws(item->ws,"Команда"); \ ??ed_options_handler_5: \ 00000094 1C1089E2 ADD R1,R9,#+28 \ 00000098 140000EA B ??ed_options_handler_8 7640 break; 7641 case 3: 7642 ascii2ws(item->ws,"Очистить буфер"); \ ??ed_options_handler_6: \ 0000009C 241089E2 ADD R1,R9,#+36 \ 000000A0 120000EA B ??ed_options_handler_8 7643 break; 7644 default: 7645 i-=4; \ ??ed_options_handler_7: \ 000000A4 046046E2 SUB R6,R6,#+4 7646 if (iloaded_templates) ascii2ws(item->ws,templates_lines[i]); \ 000000A8 0D0000EA B ??ed_options_handler_9 7647 break; 7648 } 7649 } 7650 else 7651 { 7652 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 7653 { 7654 case 0: 7655 ascii2ws(item->ws,LG_MNUEDNEXTACT); \ ??ed_options_handler_10: \ 000000C8 341089E2 ADD R1,R9,#+52 \ 000000CC 070000EA B ??ed_options_handler_8 7656 break; 7657 case 1: 7658 ascii2ws(item->ws,LG_MNUEDPREVACT); \ ??ed_options_handler_11: \ 000000D0 441089E2 ADD R1,R9,#+68 \ 000000D4 050000EA B ??ed_options_handler_8 7659 break; 7660 case 2: 7661 ascii2ws(item->ws,"Команды"); \ ??ed_options_handler_12: \ 000000D8 541089E2 ADD R1,R9,#+84 \ 000000DC 030000EA B ??ed_options_handler_8 7662 break; 7663 default: 7664 i-=3; \ ??ed_options_handler_13: \ 000000E0 036046E2 SUB R6,R6,#+3 7665 if (iloaded_templates) ascii2ws(item->ws,templates_lines[i]); \ ??ed_options_handler_9: \ 000000E4 020056E1 CMP R6,R2 \ 000000E8 EE0000AA BGE ??ed_options_handler_14 \ 000000EC 061191E7 LDR R1,[R1, +R6, LSL #+2] \ ??ed_options_handler_8: \ 000000F0 ........ _BLF ascii2ws,??ascii2ws??rA 7666 break; 7667 } 7668 } 7669 } 7670 7671 if (item->type==1) \ ??ed_options_handler_0: \ 000000F4 0000D8E5 LDRB R0,[R8, #+0] \ 000000F8 010050E3 CMP R0,#+1 \ 000000FC E900001A BNE ??ed_options_handler_14 7672 { 7673 if(IsMultiBuffer) \ 00000100 003097E5 LDR R3,[R7, #+0] \ 00000104 CC1395E5 LDR R1,[R5, #+972] \ 00000108 102094E5 LDR R2,[R4, #+16] \ 0000010C 040094E5 LDR R0,[R4, #+4] \ 00000110 000053E3 CMP R3,#+0 \ 00000114 9C00000A BEQ ??ed_options_handler_15 7674 { 7675 switch(i) \ 00000118 0630B0E1 MOVS R3,R6 \ 0000011C 0600000A BEQ ??ed_options_handler_16 \ 00000120 013056E2 SUBS R3,R6,#+1 \ 00000124 4200000A BEQ ??ed_options_handler_17 \ 00000128 013053E2 SUBS R3,R3,#+1 \ 0000012C 5C00000A BEQ ??ed_options_handler_18 \ 00000130 013053E2 SUBS R3,R3,#+1 \ 00000134 5D00000A BEQ ??ed_options_handler_19 \ 00000138 600000EA B ??ed_options_handler_20 7676 { 7677 case 0: 7678 { 7679 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ed_options_handler_16: \ 0000013C 820100EF SWI +386 \ 00000140 081094E5 LDR R1,[R4, #+8] \ 00000144 010050E1 CMP R0,R1 \ 00000148 0200001A BNE ??ed_options_handler_21 7680 CreateSmileSelectGUI(ed_struct); \ 0000014C 0400A0E1 MOV R0,R4 \ 00000150 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA \ 00000154 340000EA B ??ed_options_handler_22 7681 else 7682 { 7683 int ed; 7684 EDITCONTROL ec; 7685 EDITCONTROL ec_hdr; 7686 7687 ed=EDIT_GetFocus(ed_struct->ed_chatgui); \ ??ed_options_handler_21: \ 00000158 040094E5 LDR R0,[R4, #+4] \ 0000015C 820100EF SWI +386 \ 00000160 0060A0E1 MOV R6,R0 7688 ExtractEditControl(ed_struct->ed_chatgui,ed,&ec); \ 00000164 040094E5 LDR R0,[R4, #+4] \ 00000168 2C208DE2 ADD R2,SP,#+44 \ 0000016C 0610A0E1 MOV R1,R6 \ 00000170 690100EF SWI +361 7689 ExtractEditControl(ed_struct->ed_chatgui,ed-1,&ec_hdr); \ 00000174 040094E5 LDR R0,[R4, #+4] \ 00000178 0D20A0E1 MOV R2,SP \ 0000017C 011046E2 SUB R1,R6,#+1 \ 00000180 690100EF SWI +361 7690 7691 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 00000184 A00295E5 LDR R0,[R5, #+672] \ 00000188 230100EF SWI +291 \ 0000018C 012080E2 ADD R2,R0,#+1 \ 00000190 A00295E5 LDR R0,[R5, #+672] \ 00000194 3E10A0E3 MOV R1,#+62 \ 00000198 1D0000EF SWI +29 7692 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 0000019C A00295E5 LDR R0,[R5, #+672] \ 000001A0 230100EF SWI +291 \ 000001A4 012080E2 ADD R2,R0,#+1 \ 000001A8 A00295E5 LDR R0,[R5, #+672] \ 000001AC 2010A0E3 MOV R1,#+32 \ 000001B0 1D0000EF SWI +29 7693 wstrcat(wsBuffer,ec_hdr.pWS); \ 000001B4 28109DE5 LDR R1,[SP, #+40] \ 000001B8 A00295E5 LDR R0,[R5, #+672] \ 000001BC 210100EF SWI +289 7694 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 000001C0 A00295E5 LDR R0,[R5, #+672] \ 000001C4 230100EF SWI +291 \ 000001C8 012080E2 ADD R2,R0,#+1 \ 000001CC A00295E5 LDR R0,[R5, #+672] \ 000001D0 0A10A0E3 MOV R1,#+10 \ 000001D4 1D0000EF SWI +29 7695 7696 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 000001D8 A00295E5 LDR R0,[R5, #+672] \ 000001DC 230100EF SWI +291 \ 000001E0 012080E2 ADD R2,R0,#+1 \ 000001E4 A00295E5 LDR R0,[R5, #+672] \ 000001E8 3E10A0E3 MOV R1,#+62 \ 000001EC 1D0000EF SWI +29 7697 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 000001F0 A00295E5 LDR R0,[R5, #+672] \ 000001F4 230100EF SWI +291 \ 000001F8 012080E2 ADD R2,R0,#+1 \ 000001FC A00295E5 LDR R0,[R5, #+672] \ 00000200 2010A0E3 MOV R1,#+32 \ 00000204 1D0000EF SWI +29 7698 wstrcat(wsBuffer,ec.pWS); \ 00000208 54109DE5 LDR R1,[SP, #+84] \ 0000020C A00295E5 LDR R0,[R5, #+672] \ 00000210 210100EF SWI +289 7699 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 00000214 A00295E5 LDR R0,[R5, #+672] \ 00000218 230100EF SWI +291 \ 0000021C 012080E2 ADD R2,R0,#+1 \ 00000220 A00295E5 LDR R0,[R5, #+672] \ 00000224 0A10A0E3 MOV R1,#+10 \ 00000228 1D0000EF SWI +29 \ ??ed_options_handler_22: \ 0000022C 58D08DE2 ADD SP,SP,#+88 \ 00000230 F083BDE8 POP {R4-R9,PC} 7700 } 7701 } 7702 break; 7703 case 1: 7704 { 7705 EDITCONTROL ec; 7706 WSHDR *ws; 7707 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); \ ??ed_options_handler_17: \ 00000234 081094E5 LDR R1,[R4, #+8] \ 00000238 0D20A0E1 MOV R2,SP \ 0000023C 690100EF SWI +361 7708 ws=AllocWS(ec.pWS->wsbody[0]+wsBuffer->wsbody[0]+1); \ 00000240 28009DE5 LDR R0,[SP, #+40] \ 00000244 A01295E5 LDR R1,[R5, #+672] \ 00000248 000090E5 LDR R0,[R0, #+0] \ 0000024C 001091E5 LDR R1,[R1, #+0] \ 00000250 B000D0E1 LDRH R0,[R0, #+0] \ 00000254 B010D1E1 LDRH R1,[R1, #+0] \ 00000258 000081E0 ADD R0,R1,R0 \ 0000025C 010080E2 ADD R0,R0,#+1 \ 00000260 250100EF SWI +293 7709 wstrcpy(ws,ec.pWS); \ 00000264 28109DE5 LDR R1,[SP, #+40] \ 00000268 0060A0E1 MOV R6,R0 \ 0000026C 1F0100EF SWI +287 7710 wstrcat(ws,wsBuffer); \ 00000270 A01295E5 LDR R1,[R5, #+672] \ 00000274 0600A0E1 MOV R0,R6 \ 00000278 210100EF SWI +289 7711 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ws); \ 0000027C 040094E5 LDR R0,[R4, #+4] \ 00000280 081094E5 LDR R1,[R4, #+8] \ 00000284 0620A0E1 MOV R2,R6 \ 00000288 DE0100EF SWI +478 7712 EDIT_SetCursorPos(ed_struct->ed_chatgui,wstrlen(ws)); \ 0000028C 0600A0E1 MOV R0,R6 \ 00000290 230100EF SWI +291 \ 00000294 0010A0E1 MOV R1,R0 \ 00000298 040094E5 LDR R0,[R4, #+4] \ 0000029C D40100EF SWI +468 \ 000002A0 E1FFFFEA B ??ed_options_handler_22 7713 } 7714 break; 7715 case 2: 7716 DispCmdMenu(ed_struct); \ ??ed_options_handler_18: \ 000002A4 0400A0E1 MOV R0,R4 \ 000002A8 ........ BL DispCmdMenu \ 000002AC DEFFFFEA B ??ed_options_handler_22 7717 break; 7718 case 3: 7719 CutWSTR(wsBuffer,0); \ ??ed_options_handler_19: \ 000002B0 A00295E5 LDR R0,[R5, #+672] \ 000002B4 0010A0E3 MOV R1,#+0 \ 000002B8 260100EF SWI +294 \ 000002BC DAFFFFEA B ??ed_options_handler_22 7720 break; 7721 default: 7722 i-=4; \ ??ed_options_handler_20: \ 000002C0 046046E2 SUB R6,R6,#+4 7723 if (iloaded_templates) \ 000002C4 020056E1 CMP R6,R2 \ 000002C8 760000AA BGE ??ed_options_handler_14 7724 { 7725 EDITCONTROL ec; 7726 WSHDR *ed_ws; 7727 int c; 7728 char *p=templates_lines[i]; \ 000002CC 065191E7 LDR R5,[R1, +R6, LSL #+2] 7729 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); \ 000002D0 081094E5 LDR R1,[R4, #+8] \ 000002D4 0D20A0E1 MOV R2,SP \ 000002D8 690100EF SWI +361 7730 ed_ws=AllocWS(ec.pWS->wsbody[0]+strlen(p)); \ 000002DC 0500A0E1 MOV R0,R5 \ 000002E0 1B0000EF SWI +27 \ 000002E4 28109DE5 LDR R1,[SP, #+40] \ 000002E8 001091E5 LDR R1,[R1, #+0] \ 000002EC B010D1E1 LDRH R1,[R1, #+0] \ 000002F0 010080E0 ADD R0,R0,R1 \ 000002F4 250100EF SWI +293 7731 wstrcpy(ed_ws,ec.pWS); \ 000002F8 28109DE5 LDR R1,[SP, #+40] \ 000002FC 0060A0E1 MOV R6,R0 \ 00000300 1F0100EF SWI +287 7732 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ 00000304 040094E5 LDR R0,[R4, #+4] \ 00000308 820100EF SWI +386 \ 0000030C 081094E5 LDR R1,[R4, #+8] \ 00000310 010050E1 CMP R0,R1 \ 00000314 1800001A BNE ??ed_options_handler_23 7733 { 7734 int pos=EDIT_GetCursorPos(ed_struct->ed_chatgui); \ 00000318 040094E5 LDR R0,[R4, #+4] \ 0000031C D30100EF SWI +467 \ 00000320 0070A0E1 MOV R7,R0 \ 00000324 050000EA B ??ed_options_handler_24 7735 while(c=*p++) 7736 { 7737 wsInsertChar(ed_ws,char8to16(c),pos++); \ ??ed_options_handler_25: \ 00000328 ........ _BLF char8to16,??char8to16??rA \ 0000032C 0720A0E1 MOV R2,R7 \ 00000330 0010A0E1 MOV R1,R0 \ 00000334 0600A0E1 MOV R0,R6 \ 00000338 1D0000EF SWI +29 \ 0000033C 017087E2 ADD R7,R7,#+1 7738 } \ ??ed_options_handler_24: \ 00000340 ........ LDRB R0,[R5], #+1 \ 00000344 000050E3 CMP R0,#+0 \ 00000348 F6FFFF1A BNE ??ed_options_handler_25 7739 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ ??ed_options_handler_26: \ 0000034C 081094E5 LDR R1,[R4, #+8] \ 00000350 040094E5 LDR R0,[R4, #+4] \ 00000354 0620A0E1 MOV R2,R6 \ 00000358 DE0100EF SWI +478 7740 EDIT_SetCursorPos(ed_struct->ed_chatgui,pos); \ 0000035C 040094E5 LDR R0,[R4, #+4] \ 00000360 0710A0E1 MOV R1,R7 \ 00000364 D40100EF SWI +468 \ 00000368 4C0000EA B ??ed_options_handler_27 7741 } 7742 else 7743 { 7744 while(c=*p++) 7745 { 7746 wsAppendChar(ed_ws,char8to16(c)); \ ??ed_options_handler_28: \ 0000036C ........ _BLF char8to16,??char8to16??rA \ 00000370 0010A0E1 MOV R1,R0 \ 00000374 0600A0E1 MOV R0,R6 \ 00000378 1C0000EF SWI +28 7747 } \ ??ed_options_handler_23: \ 0000037C ........ LDRB R0,[R5], #+1 \ 00000380 000050E3 CMP R0,#+0 \ 00000384 F8FFFF1A BNE ??ed_options_handler_28 7748 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 00000388 400000EA B ??ed_options_handler_29 7749 } 7750 FreeWS(ed_ws); 7751 } 7752 break; 7753 } 7754 } 7755 else 7756 { 7757 switch(i) \ ??ed_options_handler_15: \ 0000038C 007094E5 LDR R7,[R4, #+0] \ 00000390 0630B0E1 MOVS R3,R6 \ 00000394 0400000A BEQ ??ed_options_handler_30 \ 00000398 013056E2 SUBS R3,R6,#+1 \ 0000039C 0D00000A BEQ ??ed_options_handler_31 \ 000003A0 013053E2 SUBS R3,R3,#+1 \ 000003A4 BEFFFF0A BEQ ??ed_options_handler_18 \ 000003A8 0D0000EA B ??ed_options_handler_32 7758 { 7759 case 0: 7760 t=FindNextActiveContact(ed_struct->ed_contact); \ ??ed_options_handler_30: \ 000003AC 0700A0E1 MOV R0,R7 \ 000003B0 ........ BL FindNextActiveContact \ ??ed_options_handler_33: \ 000003B4 0040B0E1 MOVS R4,R0 7761 if (t && t!=ed_struct->ed_contact) \ 000003B8 07005411 CMPNE R4,R7 \ 000003BC 3900000A BEQ ??ed_options_handler_14 7762 { 7763 GeneralFunc_flag1(edchat_id,1); \ 000003C0 100495E5 LDR R0,[R5, #+1040] \ 000003C4 0110A0E3 MOV R1,#+1 \ 000003C8 3D0100EF SWI +317 7764 CreateEditChat(t); \ 000003CC 0400A0E1 MOV R0,R4 \ 000003D0 ........ BL CreateEditChat \ 000003D4 94FFFFEA B ??ed_options_handler_22 7765 } 7766 break; 7767 case 1: 7768 t=FindPrevActiveContact(ed_struct->ed_contact); \ ??ed_options_handler_31: \ 000003D8 0700A0E1 MOV R0,R7 \ 000003DC ........ BL FindPrevActiveContact \ 000003E0 F3FFFFEA B ??ed_options_handler_33 7769 if (t && t!=ed_struct->ed_contact) 7770 { 7771 GeneralFunc_flag1(edchat_id,1); 7772 CreateEditChat(t); 7773 } 7774 break; 7775 case 2: 7776 DispCmdMenu(ed_struct); 7777 break; 7778 default: 7779 i-=3; \ ??ed_options_handler_32: \ 000003E4 036046E2 SUB R6,R6,#+3 7780 if (iloaded_templates) \ 000003E8 020056E1 CMP R6,R2 \ 000003EC 2D0000AA BGE ??ed_options_handler_14 7781 { 7782 EDITCONTROL ec; 7783 WSHDR *ed_ws; 7784 int c; 7785 char *p=templates_lines[i]; \ 000003F0 065191E7 LDR R5,[R1, +R6, LSL #+2] 7786 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); \ 000003F4 081094E5 LDR R1,[R4, #+8] \ 000003F8 0D20A0E1 MOV R2,SP \ 000003FC 690100EF SWI +361 7787 ed_ws=AllocWS(ec.pWS->wsbody[0]+strlen(p)); \ 00000400 0500A0E1 MOV R0,R5 \ 00000404 1B0000EF SWI +27 \ 00000408 28109DE5 LDR R1,[SP, #+40] \ 0000040C 001091E5 LDR R1,[R1, #+0] \ 00000410 B010D1E1 LDRH R1,[R1, #+0] \ 00000414 010080E0 ADD R0,R0,R1 \ 00000418 250100EF SWI +293 7788 wstrcpy(ed_ws,ec.pWS); \ 0000041C 28109DE5 LDR R1,[SP, #+40] \ 00000420 0060A0E1 MOV R6,R0 \ 00000424 1F0100EF SWI +287 7789 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ 00000428 040094E5 LDR R0,[R4, #+4] \ 0000042C 820100EF SWI +386 \ 00000430 081094E5 LDR R1,[R4, #+8] \ 00000434 010050E1 CMP R0,R1 \ 00000438 1100001A BNE ??ed_options_handler_34 7790 { 7791 int pos=EDIT_GetCursorPos(ed_struct->ed_chatgui); \ 0000043C 040094E5 LDR R0,[R4, #+4] \ 00000440 D30100EF SWI +467 \ 00000444 0070A0E1 MOV R7,R0 \ 00000448 050000EA B ??ed_options_handler_35 7792 while(c=*p++) 7793 { 7794 wsInsertChar(ed_ws,char8to16(c),pos++); \ ??ed_options_handler_36: \ 0000044C ........ _BLF char8to16,??char8to16??rA \ 00000450 0010A0E1 MOV R1,R0 \ 00000454 0720A0E1 MOV R2,R7 \ 00000458 0600A0E1 MOV R0,R6 \ 0000045C 1D0000EF SWI +29 \ 00000460 017087E2 ADD R7,R7,#+1 7795 } \ ??ed_options_handler_35: \ 00000464 ........ LDRB R0,[R5], #+1 \ 00000468 000050E3 CMP R0,#+0 \ 0000046C F6FFFF1A BNE ??ed_options_handler_36 7796 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 00000470 B5FFFFEA B ??ed_options_handler_26 7797 EDIT_SetCursorPos(ed_struct->ed_chatgui,pos); 7798 } 7799 else 7800 { 7801 while(c=*p++) 7802 { 7803 wsAppendChar(ed_ws,char8to16(c)); \ ??ed_options_handler_37: \ 00000474 ........ _BLF char8to16,??char8to16??rA \ 00000478 0010A0E1 MOV R1,R0 \ 0000047C 0600A0E1 MOV R0,R6 \ 00000480 1C0000EF SWI +28 7804 } \ ??ed_options_handler_34: \ 00000484 ........ LDRB R0,[R5], #+1 \ 00000488 000050E3 CMP R0,#+0 \ 0000048C F8FFFF1A BNE ??ed_options_handler_37 7805 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ ??ed_options_handler_29: \ 00000490 081094E5 LDR R1,[R4, #+8] \ 00000494 040094E5 LDR R0,[R4, #+4] \ 00000498 0620A0E1 MOV R2,R6 \ 0000049C DE0100EF SWI +478 7806 } 7807 FreeWS(ed_ws); \ ??ed_options_handler_27: \ 000004A0 0600A0E1 MOV R0,R6 \ 000004A4 290100EF SWI +297 7808 } 7809 break; 7810 } 7811 } 7812 } 7813 } \ ??ed_options_handler_14: \ 000004A8 58D08DE2 ADD SP,SP,#+88 ;; stack cleaning \ 000004AC F083BDE8 POP {R4-R9,PC} ;; return \ ??ed_options_handler_1: \ 000004B0 ........ DC32 `?` 7814 \ In segment CODE, align 4, keep-with-next 7815 unsigned short * wstrstr(unsigned short *ws, char *str, int *wslen, int len) 7816 { \ 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 7817 char *s; 7818 unsigned short *w; 7819 int l; 7820 7821 while(*wslen >= len) 7822 { 7823 s = str; 7824 w = ws; 7825 l = len; 7826 for(; (char16to8(*w) == *s) && l; w++, s++, l--); 7827 if(!l) return ws; 7828 ws++; 7829 (*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} 7830 } 7831 return 0; \ ??wstrstr_2: \ 00000074 0000A0E3 MOV R0,#+0 \ 00000078 F087BDE8 POP {R4-R10,PC} ;; return 7832 7833 } 7834 \ In segment CODE, align 4, keep-with-next 7835 int IsUrl(WSHDR *ws, int pos, char *link) 7836 { \ IsUrl: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0150A0E1 MOV R5,R1 7837 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 7838 7839 int len = wstrlen(ws); 7840 unsigned short *str = ws->wsbody+1, *tmp, *begin; 7841 tmp = str; 7842 7843 begin = str = wstrstr(str, "http://", &len, 7); \ 0000000C ........ LDR R7,??DataTable321 ;; `?` \ 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 7844 7845 while(str && (begin-tmp <= pos)) 7846 { 7847 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 7848 if(str-tmp >= pos-2) 7849 { 7850 for(;begin < str; begin++, link++) 7851 *link = char16to8(*begin); 7852 link[str-begin] = 0; 7853 return 1; 7854 } 7855 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 7856 } 7857 7858 len = wstrlen(ws); \ ??IsUrl_2: \ 00000080 04009DE5 LDR R0,[SP, #+4] \ 00000084 230100EF SWI +291 \ 00000088 00008DE5 STR R0,[SP, #+0] 7859 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} 7860 while(str && (begin-tmp <= pos)) 7861 { 7862 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 7863 if(str-tmp >= pos-2) 7864 { 7865 for(;begin < str; begin++, link++) 7866 *link = char16to8(*begin); 7867 link[str-begin] = 0; 7868 return 1; 7869 } 7870 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 7871 } 7872 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 7873 } 7874 7875 #define UTF16_DIS_UNDERLINE (0xE002) 7876 #define UTF16_ENA_UNDERLINE (0xE001) 7877 \ In segment CODE, align 4, keep-with-next 7878 void ParseAnswer(WSHDR *ws, const char *s) 7879 { \ ParseAnswer: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0040A0E1 MOV R4,R0 7880 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 7881 S_SMILES *t; 7882 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 7883 STXT_SMILES *st; 7884 unsigned int wchar; 7885 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 7886 CutWSTR(ws,0); \ 00000034 0010A0E3 MOV R1,#+0 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 260100EF SWI +294 \ 00000040 160000EA B ??ParseAnswer_1 7887 int i; 7888 while(wchar=*s) 7889 { 7890 if(s==strstr(s, "http://") || s == strstr(s, "www.")) 7891 { 7892 wsAppendChar(ws,UTF16_ENA_UNDERLINE); 7893 while(*s && strchr(valid, *s)) 7894 { 7895 wchar=char8to16(*s); \ ??ParseAnswer_2: \ 00000044 ........ LDRB R0,[R5], #+1 \ 00000048 ........ _BLF char8to16,??char8to16??rA 7896 wsAppendChar(ws,wchar); \ 0000004C 0010A0E1 MOV R1,R0 \ ??ParseAnswer_3: \ 00000050 0400A0E1 MOV R0,R4 \ 00000054 1C0000EF SWI +28 7897 s++; 7898 } \ 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 7899 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 7900 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 7901 continue; \ ??ParseAnswer_1: \ 000000A0 0070D5E5 LDRB R7,[R5, #+0] \ 000000A4 000057E3 CMP R7,#+0 \ 000000A8 4F00000A BEQ ??ParseAnswer_5 \ 000000AC ........ LDR R9,??DataTable321 ;; `?` \ 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 7902 } 7903 t=t_root; \ ??ParseAnswer_7: \ 000000E4 0690A0E1 MOV R9,R6 \ 000000E8 230000EA B ??ParseAnswer_8 7904 while(t) 7905 { 7906 st=t->lines; 7907 while(st) 7908 { 7909 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 7910 { 7911 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 7912 } 7913 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] 7914 } \ ??ParseAnswer_13: \ 00000170 00005AE3 CMP R10,#+0 \ 00000174 DCFFFF1A BNE ??ParseAnswer_9 7915 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 7916 } 7917 L1: 7918 if (t) 7919 { 7920 wchar=t->uni_smile; 7921 s+=strlen(st->text); 7922 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); 7923 } 7924 else 7925 { 7926 wchar=char8to16(wchar); \ 00000188 0700A0E1 MOV R0,R7 \ 0000018C ........ _BLF char8to16,??char8to16??rA \ 00000190 0070A0E1 MOV R7,R0 7927 s++; 7928 ulb>>=8; 7929 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 7930 } \ ??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 7931 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 7932 } 7933 i=ws->wsbody[0]; \ ??ParseAnswer_5: \ 000001EC 000094E5 LDR R0,[R4, #+0] \ 000001F0 B010D0E1 LDRH R1,[R0, #+0] \ 000001F4 000000EA B ??ParseAnswer_15 7934 while(i>1) 7935 { 7936 if (ws->wsbody[i--]!=13) break; 7937 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 7938 } 7939 } \ 0000021C F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??ParseAnswer_0: \ 00000220 ........ DC32 s_top 7940 \ In segment CODE, align 4, keep-with-next 7941 void SaveAnswer(CLIST *cl, WSHDR *ws) 7942 { \ SaveAnswer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0100A0E1 MOV R0,R1 7943 char *p=ExtractAnswer(ws); \ 0000000C ........ BL ExtractAnswer \ 00000010 0050A0E1 MOV R5,R0 7944 mfree(cl->answer); \ 00000014 A40094E5 LDR R0,[R4, #+164] \ 00000018 150000EF SWI +21 7945 cl->answer=p; \ 0000001C A45084E5 STR R5,[R4, #+164] 7946 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 7947 7948 //links applicator 7949 7950 \ In segment CODE, align 4, keep-with-next 7951 int GetTempName(void) 7952 { \ GetTempName: \ 00000000 00402DE9 PUSH {LR} \ 00000004 10D04DE2 SUB SP,SP,#+16 7953 static const int DMonth[]={0,31,59,90,120,151,181,212,243,273,304,334,365}; 7954 unsigned long iday; 7955 TTime tt; 7956 TDate dd; 7957 GetDateTime(&dd,&tt); \ 00000008 08108DE2 ADD R1,SP,#+8 \ 0000000C 0D00A0E1 MOV R0,SP \ 00000010 B40000EF SWI +180 7958 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 7959 iday=365*dd.year+DMonth[dd.month-1]+(dd.day - 1); 7960 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] 7961 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 7962 iday++; \ ??GetTempName_1: \ 00000078 011081E2 ADD R1,R1,#+1 7963 iday=(tt.sec+60*(tt.min+60*(tt.hour+24* iday))); 7964 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 7965 } \ 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 7966 7967 \ In segment CODE, align 4, keep-with-next 7968 void recon() 7969 { 7970 SUBPROC((void*)end_socket); \ recon: \ 00000000 ........ LDR R0,??DataTable322 ;; end_socket \ 00000004 10402DE9 PUSH {R4,LR} 7971 GBS_DelTimer(&reconnect_tmr); \ 00000008 ........ LDR R4,??DataTable334 ;; i_rc \ 0000000C 710100EF SWI +369 \ 00000010 5800A0E3 MOV R0,#+88 \ 00000014 780D80E3 ORR R0,R0,#0x1E00 \ 00000018 040080E0 ADD R0,R0,R4 \ 0000001C 8C0100EF SWI +396 7972 DNR_TRIES=3; \ 00000020 0300A0E3 MOV R0,#+3 \ 00000024 280484E5 STR R0,[R4, #+1064] 7973 SUBPROC((void *)create_connect); \ 00000028 ........ LDR R0,??DataTable324 ;; create_connect \ 0000002C 710100EF SWI +369 7974 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 7975 \ In segment CODE, align 4, keep-with-next 7976 int edchat_onkey(GUI *data, GUI_MSG *msg) 7977 { \ edchat_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 7978 //-1 - do redraw 7979 GBS_DelTimer(&tmr_illumination); \ 00000004 ........ LDR R6,??DataTable334 ;; i_rc \ 00000008 57DF4DE2 SUB SP,SP,#+348 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0180A0E1 MOV R8,R1 \ 00000014 3800A0E3 MOV R0,#+56 \ 00000018 780D80E3 ORR R0,R0,#0x1E00 \ 0000001C 060080E0 ADD R0,R0,R6 \ 00000020 8C0100EF SWI +396 7980 CLIST *t; 7981 TPKT *p; 7982 EDITCONTROL ec; 7983 int len, f;//2026rev 7984 unsigned err;//2026rev 7985 char *s; 7986 int l=msg->gbsmsg->submess; \ 00000024 040098E5 LDR R0,[R8, #+4] \ 00000028 089090E5 LDR R9,[R0, #+8] 7987 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 DF0100EF SWI +479 \ 00000034 0050A0E1 MOV R5,R0 7988 char fn[256]; 7989 7990 if (msg->keys==0xFFF) \ 00000038 F200D8E1 LDRSH R0,[R8, #+2] \ 0000003C FF10A0E3 MOV R1,#+255 \ 00000040 F01E81E3 ORR R1,R1,#0xF00 \ 00000044 010050E1 CMP R0,R1 \ 00000048 0200001A BNE ??edchat_onkey_0 7991 { 7992 void ec_menu(EDCHAT_STRUCT *); 7993 ec_menu(ed_struct); \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 ........ BL ec_menu 7994 return(-1); \ ??edchat_onkey_1: \ 00000054 B40000EA B ??edchat_onkey_2 7995 } 7996 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 B10000EA B ??edchat_onkey_4 7997 7998 void AddSmile(GUI *data); 7999 if (msg->gbsmsg->msg==LONG_PRESS) \ ??edchat_onkey_3: \ 00000068 040098E5 LDR R0,[R8, #+4] \ 0000006C FC759FE5 LDR R7,??edchat_onkey_5 ;; `?` \ 00000070 040090E5 LDR R0,[R0, #+4] \ 00000074 9510A0E3 MOV R1,#+149 \ 00000078 401F81E3 ORR R1,R1,#0x100 \ 0000007C 010050E1 CMP R0,R1 \ 00000080 6D00001A BNE ??edchat_onkey_6 8000 { 8001 if (l==RIGHT_BUTTON) \ 00000084 3E0059E3 CMP R9,#+62 \ 00000088 2800001A BNE ??edchat_onkey_7 8002 { 8003 if(LongRightAction==2 && EDIT_GetFocus(data)==ed_struct->ed_answer) \ 0000008C E0A59FE5 LDR R10,??edchat_onkey_5+0x4 ;; LongRightAction \ 00000090 00009AE5 LDR R0,[R10, #+0] \ 00000094 020050E3 CMP R0,#+2 \ 00000098 0700001A BNE ??edchat_onkey_8 \ 0000009C 0400A0E1 MOV R0,R4 \ 000000A0 820100EF SWI +386 \ 000000A4 081095E5 LDR R1,[R5, #+8] \ 000000A8 010050E1 CMP R0,R1 \ 000000AC 0200001A BNE ??edchat_onkey_8 8004 CreateSmileSelectGUI(ed_struct); \ 000000B0 0500A0E1 MOV R0,R5 \ 000000B4 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA \ 000000B8 5F0000EA B ??edchat_onkey_6 8005 else 8006 if(LongRightAction==1) \ ??edchat_onkey_8: \ 000000BC 00009AE5 LDR R0,[R10, #+0] \ 000000C0 010050E3 CMP R0,#+1 \ 000000C4 5C00001A BNE ??edchat_onkey_6 8007 { 8008 if (EDIT_GetFocus(data)==ed_struct->ed_answer) \ 000000C8 0400A0E1 MOV R0,R4 \ 000000CC 820100EF SWI +386 \ 000000D0 081095E5 LDR R1,[R5, #+8] \ 000000D4 010050E1 CMP R0,R1 \ 000000D8 5700001A BNE ??edchat_onkey_6 8009 { 8010 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000DC 04208DE2 ADD R2,SP,#+4 \ 000000E0 0400A0E1 MOV R0,R4 \ 000000E4 690100EF SWI +361 8011 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) \ 000000E8 0400A0E1 MOV R0,R4 \ 000000EC D30100EF SWI +467 \ 000000F0 2C109DE5 LDR R1,[SP, #+44] \ 000000F4 010040E2 SUB R0,R0,#+1 \ 000000F8 001091E5 LDR R1,[R1, #+0] \ 000000FC B010D1E1 LDRH R1,[R1, #+0] \ 00000100 000051E1 CMP R1,R0 \ 00000104 4C00001A BNE ??edchat_onkey_6 8012 { 8013 t=FindNextActiveContact(ed_struct->ed_contact); \ 00000108 00B095E5 LDR R11,[R5, #+0] \ 0000010C 0B00A0E1 MOV R0,R11 \ 00000110 ........ BL FindNextActiveContact \ 00000114 00A0B0E1 MOVS R10,R0 8014 if (t && t!=ed_struct->ed_contact) \ 00000118 0B005A11 CMPNE R10,R11 \ 0000011C 4600000A BEQ ??edchat_onkey_6 8015 { 8016 CreateEditChat(t); \ ??edchat_onkey_9: \ 00000120 0A00A0E1 MOV R0,R10 \ 00000124 ........ BL CreateEditChat 8017 return(1); \ 00000128 0100A0E3 MOV R0,#+1 \ 0000012C 7F0000EA B ??edchat_onkey_4 8018 } 8019 } 8020 } 8021 } 8022 } 8023 if (l==LEFT_BUTTON && LongLeftAction) \ ??edchat_onkey_7: \ 00000130 3D0059E3 CMP R9,#+61 \ 00000134 5400001A BNE ??edchat_onkey_10 \ 00000138 38059FE5 LDR R0,??edchat_onkey_5+0x8 ;; LongLeftAction \ 0000013C 000090E5 LDR R0,[R0, #+0] \ 00000140 000050E3 CMP R0,#+0 \ 00000144 1500000A BEQ ??edchat_onkey_11 8024 { 8025 if (EDIT_GetFocus(data)==ed_struct->ed_answer) \ 00000148 0400A0E1 MOV R0,R4 \ 0000014C 820100EF SWI +386 \ 00000150 081095E5 LDR R1,[R5, #+8] \ 00000154 010050E1 CMP R0,R1 \ 00000158 1000001A BNE ??edchat_onkey_11 8026 { 8027 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 0000015C 04208DE2 ADD R2,SP,#+4 \ 00000160 0400A0E1 MOV R0,R4 \ 00000164 690100EF SWI +361 8028 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) \ 00000168 0400A0E1 MOV R0,R4 \ 0000016C D30100EF SWI +467 \ 00000170 2C109DE5 LDR R1,[SP, #+44] \ 00000174 010040E2 SUB R0,R0,#+1 \ 00000178 001091E5 LDR R1,[R1, #+0] \ 0000017C B010D1E1 LDRH R1,[R1, #+0] \ 00000180 000051E1 CMP R1,R0 \ 00000184 0500001A BNE ??edchat_onkey_11 8029 { 8030 t=FindPrevActiveContact(ed_struct->ed_contact); \ 00000188 00B095E5 LDR R11,[R5, #+0] \ 0000018C 0B00A0E1 MOV R0,R11 \ 00000190 ........ BL FindPrevActiveContact \ 00000194 00A0B0E1 MOVS R10,R0 8031 if (t && t!=ed_struct->ed_contact) \ 00000198 0B005A11 CMPNE R10,R11 \ 0000019C DFFFFF1A BNE ??edchat_onkey_9 \ ??edchat_onkey_11: \ 000001A0 040095E5 LDR R0,[R5, #+4] \ 000001A4 820100EF SWI +386 \ 000001A8 081095E5 LDR R1,[R5, #+8] \ 000001AC 010050E1 CMP R0,R1 \ 000001B0 2100000A BEQ ??edchat_onkey_6 \ 000001B4 0400A0E1 MOV R0,R4 \ 000001B8 D30100EF SWI +467 \ 000001BC 010050E3 CMP R0,#+1 \ 000001C0 1D00001A BNE ??edchat_onkey_6 8032 { 8033 CreateEditChat(t); 8034 return(1); 8035 } 8036 } 8037 } 8038 } 8039 //#ifdef ELKA 8040 if (l==VOL_DOWN_BUTTON) 8041 { 8042 #ifdef kluchnik 8043 if((EDIT_GetFocus(data)==ed_struct->ed_answer)) 8044 #else 8045 if(LongVolDownAction) 8046 #endif 8047 { 8048 WSHDR *ws; 8049 ExtractEditControl(data,ed_struct->ed_answer,&ec); 8050 if(wstrlen(ec.pWS)>0) 8051 { 8052 ws=AllocWS(1); 8053 CutWSTR(ws,0); 8054 8055 EDIT_SetFocus(data,ed_struct->ed_answer); 8056 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 8057 8058 FreeWS(ws); 8059 RefreshGUI(); 8060 } 8061 } 8062 else 8063 { 8064 int pos; 8065 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 8066 { 8067 EDIT_SetFocus(data, pos); 8068 EDIT_SetCursorPos(data, 1); 8069 } 8070 return (-1); 8071 } 8072 8073 } 8074 8075 if (l==VOL_UP_BUTTON) 8076 { 8077 if(LongVolUpAction) 8078 { 8079 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); 8080 ascii2ws(ws,last_msg_buffer); 8081 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); 8082 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 8083 FreeWS(ws); 8084 RefreshGUI(); 8085 } 8086 else 8087 { 8088 int pos; 8089 if ((pos=EDIT_GetFocus(data)-2)>=2) 8090 { 8091 EDIT_SetFocus(data, pos); 8092 EDIT_SetCursorPos(data, 1); 8093 } 8094 return (-1); 8095 } 8096 } 8097 //#endif 8098 #ifdef kluchnik 8099 if(l==LEFT_BUTTON && EDIT_GetFocus(ed_struct->ed_chatgui)!=ed_struct->ed_answer && EDIT_GetCursorPos(data)==1) 8100 { 8101 int ed; 8102 EDITCONTROL ec; 8103 ed=EDIT_GetFocus(ed_struct->ed_chatgui); \ 000001C4 040095E5 LDR R0,[R5, #+4] \ 000001C8 820100EF SWI +386 8104 ExtractEditControl(ed_struct->ed_chatgui,ed,&ec); \ 000001CC 4C2F8DE2 ADD R2,SP,#+304 \ 000001D0 0010A0E1 MOV R1,R0 \ 000001D4 040095E5 LDR R0,[R5, #+4] \ 000001D8 690100EF SWI +361 8105 8106 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 000001DC A00296E5 LDR R0,[R6, #+672] \ 000001E0 230100EF SWI +291 \ 000001E4 012080E2 ADD R2,R0,#+1 \ 000001E8 A00296E5 LDR R0,[R6, #+672] \ 000001EC 3E10A0E3 MOV R1,#+62 \ 000001F0 1D0000EF SWI +29 8107 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 000001F4 A00296E5 LDR R0,[R6, #+672] \ 000001F8 230100EF SWI +291 \ 000001FC 012080E2 ADD R2,R0,#+1 \ 00000200 A00296E5 LDR R0,[R6, #+672] \ 00000204 2010A0E3 MOV R1,#+32 \ 00000208 1D0000EF SWI +29 8108 wstrcat(wsBuffer,ec.pWS); \ 0000020C 58119DE5 LDR R1,[SP, #+344] \ 00000210 A00296E5 LDR R0,[R6, #+672] \ 00000214 210100EF SWI +289 8109 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 00000218 A00296E5 LDR R0,[R6, #+672] \ 0000021C 230100EF SWI +291 \ 00000220 012080E2 ADD R2,R0,#+1 \ 00000224 A00296E5 LDR R0,[R6, #+672] \ 00000228 0A10A0E3 MOV R1,#+10 \ 0000022C 1D0000EF SWI +29 8110 8111 ShowMSG(1,(int)"Message add to buffer"); \ 00000230 0710A0E1 MOV R1,R7 \ 00000234 0100A0E3 MOV R0,#+1 \ 00000238 480100EF SWI +328 8112 } 8113 #endif 8114 } 8115 8116 if (msg->gbsmsg->msg==KEY_DOWN) \ ??edchat_onkey_6: \ 0000023C 040098E5 LDR R0,[R8, #+4] \ 00000240 9310A0E3 MOV R1,#+147 \ 00000244 040090E5 LDR R0,[R0, #+4] \ 00000248 401F81E3 ORR R1,R1,#0x100 \ 0000024C 010050E1 CMP R0,R1 \ 00000250 0A00001A BNE ??edchat_onkey_12 8117 { 8118 if ((l>='0')&&(l<='9')) \ 00000254 300059E3 CMP R9,#+48 \ 00000258 4B0000BA BLT ??edchat_onkey_13 \ 0000025C 3A0059E3 CMP R9,#+58 \ 00000260 060000AA BGE ??edchat_onkey_12 8119 { 8120 if (EDIT_GetFocus(data)!=ed_struct->ed_answer) \ 00000264 0400A0E1 MOV R0,R4 \ 00000268 820100EF SWI +386 \ 0000026C 081095E5 LDR R1,[R5, #+8] \ 00000270 010050E1 CMP R0,R1 \ 00000274 0100000A BEQ ??edchat_onkey_12 8121 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000278 0400A0E1 MOV R0,R4 \ 0000027C 9B0100EF SWI +411 8122 } 8123 8124 if (l==GREEN_BUTTON) 8125 { 8126 if (connect_state==3) 8127 { 8128 if ((t=ed_struct->ed_contact)) 8129 { 8130 ExtractEditControl(data,ed_struct->ed_answer,&ec); 8131 SaveAnswer(t,ec.pWS); 8132 if ((s=t->answer)) 8133 { 8134 if ((len=strlen(s))) 8135 { 8136 msg_away_timer=0; 8137 away_m=0; 8138 t->automsgcount=0; 8139 if(change_back_status) 8140 { 8141 CurrentStatus=status_rem; 8142 set_my_status(); 8143 change_back_status=0; 8144 } 8145 if(SHOW_ACTIVE) 8146 t->isactive=ACTIVE_TIME; 8147 p=malloc(sizeof(PKT)+len+1); 8148 p->pkt.uin=t->uin; 8149 p->pkt.type=T_SENDMSG; 8150 p->pkt.data_len=len; 8151 strcpy(p->data,s); 8152 //#ifdef ELKA 8153 strcpy(last_msg_buffer, s); 8154 //#endif 8155 AddStringToLog(t,0x01,p->data,I_str,(++SENDMSGCOUNT)&0x7FFF,1); //Номер сообщения 8156 SUBPROC((void *)SendAnswer,0,p); 8157 main2_count++; 8158 mfree(t->answer); 8159 t->answer=NULL; 8160 // request_remake_edchat=1; 8161 EDIT_SetFocus(data,ed_struct->ed_answer); 8162 CutWSTR(ews,0); 8163 EDIT_SetTextToFocused(data,ews); 8164 AddMsgToChat(data); 8165 RecountMenu(t,1); 8166 return(-1); 8167 } 8168 } 8169 } 8170 } 8171 } 8172 //================2026rev-begin 8173 if (l==ENTER_BUTTON) 8174 { 8175 if (!EDIT_IsMarkModeActive(data)) // ?????? ???? ?? ????????? 8176 { 8177 int pos, len; 8178 char *link; 8179 ExtractEditControl(ed_struct->ed_chatgui,EDIT_GetFocus(ed_struct->ed_chatgui),&ec); 8180 wstrcpy(ews,ec.pWS); 8181 pos = EDIT_GetCursorPos(data); 8182 len = wstrlen(ews); 8183 link = malloc(len+1); 8184 8185 if(IsUrl(ews, pos, link) && IsOpenBrowser) 8186 { 8187 snprintf(fn, 255, "%s\\tmp%u.url", TEMPLATES_PATH, GetTempName); 8188 if ((f=fopen(fn,A_WriteOnly+A_BIN+A_Create+A_Truncate,P_WRITE,&err))!=-1) 8189 { 8190 fwrite(f,link,strlen(link),&err); 8191 fclose(f,&err); 8192 str_2ws(ews,fn,256); 8193 ExecuteFile(ews,0,0); 8194 unlink(fn, &err); 8195 } 8196 mfree(link); 8197 return (-1); 8198 } 8199 else 8200 { 8201 int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 8202 8203 if(IsMultiBuffer) 8204 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+4); 8205 else 8206 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+3); 8207 8208 mfree(link); 8209 return (-1); 8210 } 8211 } 8212 } 8213 8214 //================ 2026rev-end =================// 8215 8216 if (l==VOL_UP_BUTTON) 8217 { 8218 int pos; 8219 8220 if ((pos=EDIT_GetFocus(data)-2)>=2) 8221 { 8222 EDIT_SetFocus(data, pos); 8223 EDIT_SetCursorPos(data, 1); 8224 } 8225 return (-1); 8226 } 8227 if (l==VOL_DOWN_BUTTON) 8228 { 8229 int pos; 8230 8231 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 8232 { 8233 EDIT_SetFocus(data, pos); 8234 EDIT_SetCursorPos(data, 1); 8235 } 8236 return (-1); 8237 } 8238 } 8239 return(0); //Do standart keys \ ??edchat_onkey_12: \ 00000280 0000A0E3 MOV R0,#+0 \ 00000284 57DF8DE2 ADD SP,SP,#+348 \ 00000288 F08FBDE8 POP {R4-R11,PC} ;; return \ ??edchat_onkey_10: \ 0000028C 0E0059E3 CMP R9,#+14 \ 00000290 2800001A BNE ??edchat_onkey_14 \ 00000294 0400A0E1 MOV R0,R4 \ 00000298 820100EF SWI +386 \ 0000029C 081095E5 LDR R1,[R5, #+8] \ 000002A0 010050E1 CMP R0,R1 \ 000002A4 1500001A BNE ??edchat_onkey_15 \ 000002A8 04208DE2 ADD R2,SP,#+4 \ 000002AC 0400A0E1 MOV R0,R4 \ 000002B0 690100EF SWI +361 \ 000002B4 2C009DE5 LDR R0,[SP, #+44] \ 000002B8 230100EF SWI +291 \ 000002BC 010050E3 CMP R0,#+1 \ 000002C0 DDFFFFBA BLT ??edchat_onkey_6 \ 000002C4 0100A0E3 MOV R0,#+1 \ 000002C8 250100EF SWI +293 \ 000002CC 00A0A0E1 MOV R10,R0 \ 000002D0 0010A0E3 MOV R1,#+0 \ 000002D4 260100EF SWI +294 \ 000002D8 081095E5 LDR R1,[R5, #+8] \ 000002DC 0400A0E1 MOV R0,R4 \ ??edchat_onkey_16: \ 000002E0 9B0100EF SWI +411 \ 000002E4 040095E5 LDR R0,[R5, #+4] \ 000002E8 0A10A0E1 MOV R1,R10 \ 000002EC 810100EF SWI +385 \ 000002F0 0A00A0E1 MOV R0,R10 \ 000002F4 290100EF SWI +297 \ 000002F8 960100EF SWI +406 \ 000002FC CEFFFFEA B ??edchat_onkey_6 \ ??edchat_onkey_15: \ 00000300 0400A0E1 MOV R0,R4 \ 00000304 820100EF SWI +386 \ 00000308 021080E2 ADD R1,R0,#+2 \ 0000030C 080095E5 LDR R0,[R5, #+8] \ 00000310 010050E1 CMP R0,R1 \ ??edchat_onkey_17: \ 00000314 040000BA BLT ??edchat_onkey_2 \ 00000318 0400A0E1 MOV R0,R4 \ 0000031C 9B0100EF SWI +411 \ 00000320 0110A0E3 MOV R1,#+1 \ 00000324 0400A0E1 MOV R0,R4 \ 00000328 D40100EF SWI +468 \ ??edchat_onkey_2: \ 0000032C 0000E0E3 MVN R0,#+0 \ ??edchat_onkey_4: \ 00000330 57DF8DE2 ADD SP,SP,#+348 \ 00000334 F08FBDE8 POP {R4-R11,PC} \ ??edchat_onkey_14: \ 00000338 0D0059E3 CMP R9,#+13 \ 0000033C BEFFFF1A BNE ??edchat_onkey_6 \ 00000340 34039FE5 LDR R0,??edchat_onkey_5+0xC ;; LongVolUpAction \ 00000344 000090E5 LDR R0,[R0, #+0] \ 00000348 000050E3 CMP R0,#+0 \ 0000034C 0900000A BEQ ??edchat_onkey_18 \ 00000350 7D0E86E2 ADD R0,R6,#+2000 \ 00000354 1B0000EF SWI +27 \ 00000358 010080E2 ADD R0,R0,#+1 \ 0000035C 250100EF SWI +293 \ 00000360 00A0A0E1 MOV R10,R0 \ 00000364 7D1E86E2 ADD R1,R6,#+2000 \ 00000368 ........ _BLF ascii2ws,??ascii2ws??rA \ 0000036C 081095E5 LDR R1,[R5, #+8] \ 00000370 040095E5 LDR R0,[R5, #+4] \ 00000374 D9FFFFEA B ??edchat_onkey_16 \ ??edchat_onkey_18: \ 00000378 0400A0E1 MOV R0,R4 \ 0000037C 820100EF SWI +386 \ 00000380 021040E2 SUB R1,R0,#+2 \ 00000384 020051E3 CMP R1,#+2 \ 00000388 E1FFFFEA B ??edchat_onkey_17 \ ??edchat_onkey_13: \ 0000038C 0B0059E3 CMP R9,#+11 \ 00000390 5900001A BNE ??edchat_onkey_19 \ 00000394 DC0396E5 LDR R0,[R6, #+988] \ 00000398 030050E3 CMP R0,#+3 \ 0000039C B7FFFF1A BNE ??edchat_onkey_12 \ 000003A0 00A095E5 LDR R10,[R5, #+0] \ 000003A4 00005AE3 CMP R10,#+0 \ 000003A8 B4FFFF0A BEQ ??edchat_onkey_12 \ 000003AC 081095E5 LDR R1,[R5, #+8] \ 000003B0 04208DE2 ADD R2,SP,#+4 \ 000003B4 0400A0E1 MOV R0,R4 \ 000003B8 690100EF SWI +361 \ 000003BC 2C109DE5 LDR R1,[SP, #+44] \ 000003C0 0A00A0E1 MOV R0,R10 \ 000003C4 ........ BL SaveAnswer \ 000003C8 A4909AE5 LDR R9,[R10, #+164] \ 000003CC 000059E3 CMP R9,#+0 \ 000003D0 AAFFFF0A BEQ ??edchat_onkey_12 \ 000003D4 0900A0E1 MOV R0,R9 \ 000003D8 1B0000EF SWI +27 \ 000003DC 00B0B0E1 MOVS R11,R0 \ 000003E0 A6FFFF0A BEQ ??edchat_onkey_12 \ 000003E4 0070A0E3 MOV R7,#+0 \ 000003E8 807386E5 STR R7,[R6, #+896] \ 000003EC 847386E5 STR R7,[R6, #+900] \ 000003F0 88708AE5 STR R7,[R10, #+136] \ 000003F4 8C0396E5 LDR R0,[R6, #+908] \ 000003F8 000050E3 CMP R0,#+0 \ 000003FC 0300000A BEQ ??edchat_onkey_20 \ 00000400 880396E5 LDR R0,[R6, #+904] \ 00000404 700386E5 STR R0,[R6, #+880] \ 00000408 ........ BL set_my_status \ 0000040C 8C7386E5 STR R7,[R6, #+908] \ ??edchat_onkey_20: \ 00000410 ........ LDR R0,??DataTable326 ;; SHOW_ACTIVE \ 00000414 000090E5 LDR R0,[R0, #+0] \ 00000418 000050E3 CMP R0,#+0 \ 0000041C 5A0FA013 MOVNE R0,#+360 \ 00000420 AC008A15 STRNE R0,[R10, #+172] \ 00000424 09008BE2 ADD R0,R11,#+9 \ 00000428 140000EF SWI +20 \ 0000042C 0080A0E1 MOV R8,R0 \ 00000430 0C009AE5 LDR R0,[R10, #+12] \ 00000434 0910A0E1 MOV R1,R9 \ 00000438 000088E5 STR R0,[R8, #+0] \ 0000043C 0200A0E3 MOV R0,#+2 \ 00000440 B400C8E1 STRH R0,[R8, #+4] \ 00000444 B6B0C8E1 STRH R11,[R8, #+6] \ 00000448 080088E2 ADD R0,R8,#+8 \ 0000044C 1A0000EF SWI +26 \ 00000450 0910A0E1 MOV R1,R9 \ 00000454 7D0E86E2 ADD R0,R6,#+2000 \ 00000458 1A0000EF SWI +26 \ 0000045C D80296E5 LDR R0,[R6, #+728] \ 00000460 ........ LDR R3,??DataTable362 ;; I_str \ 00000464 010080E2 ADD R0,R0,#+1 \ 00000468 D80286E5 STR R0,[R6, #+728] \ 0000046C 0110A0E3 MOV R1,#+1 \ 00000470 02002DE9 PUSH {R1} \ 00000474 8008A0E1 LSL R0,R0,#+17 \ 00000478 A008A0E1 LSR R0,R0,#+17 \ 0000047C 01002DE9 PUSH {R0} \ 00000480 082088E2 ADD R2,R8,#+8 \ 00000484 0A00A0E1 MOV R0,R10 \ 00000488 ........ BL AddStringToLog \ 0000048C ........ LDR R0,??DataTable363 ;; SendAnswer \ 00000490 0820A0E1 MOV R2,R8 \ 00000494 0010A0E3 MOV R1,#+0 \ 00000498 710100EF SWI +369 \ 0000049C ........ LDR R0,??DataTable329 ;; main2_count \ 000004A0 001090E5 LDR R1,[R0, #+0] \ 000004A4 011081E2 ADD R1,R1,#+1 \ 000004A8 001080E5 STR R1,[R0, #+0] \ 000004AC A4009AE5 LDR R0,[R10, #+164] \ 000004B0 150000EF SWI +21 \ 000004B4 A4708AE5 STR R7,[R10, #+164] \ 000004B8 081095E5 LDR R1,[R5, #+8] \ 000004BC 0400A0E1 MOV R0,R4 \ 000004C0 9B0100EF SWI +411 \ 000004C4 780396E5 LDR R0,[R6, #+888] \ 000004C8 0710A0E1 MOV R1,R7 \ 000004CC 260100EF SWI +294 \ 000004D0 781396E5 LDR R1,[R6, #+888] \ 000004D4 0400A0E1 MOV R0,R4 \ 000004D8 810100EF SWI +385 \ 000004DC 0400A0E1 MOV R0,R4 \ 000004E0 ........ BL AddMsgToChat \ 000004E4 0110A0E3 MOV R1,#+1 \ 000004E8 0A00A0E1 MOV R0,R10 \ 000004EC ........ BL RecountMenu \ 000004F0 0700E0E1 MVN R0,R7 \ 000004F4 08D08DE2 ADD SP,SP,#+8 \ 000004F8 8CFFFFEA B ??edchat_onkey_4 \ ??edchat_onkey_19: \ 000004FC 1A0059E3 CMP R9,#+26 \ 00000500 5500001A BNE ??edchat_onkey_21 \ 00000504 0400A0E1 MOV R0,R4 \ 00000508 D80100EF SWI +472 \ 0000050C 000050E3 CMP R0,#+0 \ 00000510 5AFFFF1A BNE ??edchat_onkey_12 \ 00000514 040095E5 LDR R0,[R5, #+4] \ 00000518 820100EF SWI +386 \ 0000051C 04208DE2 ADD R2,SP,#+4 \ 00000520 0010A0E1 MOV R1,R0 \ 00000524 040095E5 LDR R0,[R5, #+4] \ 00000528 690100EF SWI +361 \ 0000052C 780396E5 LDR R0,[R6, #+888] \ 00000530 2C109DE5 LDR R1,[SP, #+44] \ 00000534 1F0100EF SWI +287 \ 00000538 0400A0E1 MOV R0,R4 \ 0000053C D30100EF SWI +467 \ 00000540 0090A0E1 MOV R9,R0 \ 00000544 780396E5 LDR R0,[R6, #+888] \ 00000548 230100EF SWI +291 \ 0000054C 010080E2 ADD R0,R0,#+1 \ 00000550 140000EF SWI +20 \ 00000554 0080A0E1 MOV R8,R0 \ 00000558 780396E5 LDR R0,[R6, #+888] \ 0000055C 0820A0E1 MOV R2,R8 \ 00000560 0910A0E1 MOV R1,R9 \ 00000564 ........ BL IsUrl \ 00000568 000050E3 CMP R0,#+0 \ 0000056C 2C00000A BEQ ??edchat_onkey_22 \ 00000570 08019FE5 LDR R0,??edchat_onkey_5+0x10 ;; IsOpenBrowser \ 00000574 000090E5 LDR R0,[R0, #+0] \ 00000578 000050E3 CMP R0,#+0 \ 0000057C 2800000A BEQ ??edchat_onkey_22 \ 00000580 FC009FE5 LDR R0,??edchat_onkey_5+0x14 ;; GetTempName \ 00000584 ........ LDR R3,??DataTable330 ;; TEMPLATES_PATH \ 00000588 01002DE9 PUSH {R0} \ 0000058C 182087E2 ADD R2,R7,#+24 \ 00000590 FF10A0E3 MOV R1,#+255 \ 00000594 34008DE2 ADD R0,SP,#+52 \ 00000598 1B0100EF SWI +283 \ 0000059C 04308DE2 ADD R3,SP,#+4 \ 000005A0 402FA0E3 MOV R2,#+256 \ 000005A4 0110A0E3 MOV R1,#+1 \ 000005A8 831C81E3 ORR R1,R1,#0x8300 \ 000005AC 34008DE2 ADD R0,SP,#+52 \ 000005B0 0A0000EF SWI +10 \ 000005B4 0040A0E1 MOV R4,R0 \ 000005B8 010074E3 CMN R4,#+1 \ 000005BC 04D08DE2 ADD SP,SP,#+4 \ 000005C0 1400000A BEQ ??edchat_onkey_23 \ 000005C4 0800A0E1 MOV R0,R8 \ 000005C8 1B0000EF SWI +27 \ 000005CC 0020A0E1 MOV R2,R0 \ 000005D0 0D30A0E1 MOV R3,SP \ 000005D4 0810A0E1 MOV R1,R8 \ 000005D8 0400A0E1 MOV R0,R4 \ 000005DC 0C0000EF SWI +12 \ 000005E0 0D10A0E1 MOV R1,SP \ 000005E4 0400A0E1 MOV R0,R4 \ 000005E8 0D0000EF SWI +13 \ 000005EC 780396E5 LDR R0,[R6, #+888] \ 000005F0 402FA0E3 MOV R2,#+256 \ 000005F4 30108DE2 ADD R1,SP,#+48 \ 000005F8 6C0100EF SWI +364 \ 000005FC 780396E5 LDR R0,[R6, #+888] \ 00000600 0020A0E3 MOV R2,#+0 \ 00000604 0010A0E3 MOV R1,#+0 \ 00000608 940000EF SWI +148 \ 0000060C 0D10A0E1 MOV R1,SP \ 00000610 30008DE2 ADD R0,SP,#+48 \ 00000614 6B0100EF SWI +363 \ ??edchat_onkey_23: \ 00000618 0800A0E1 MOV R0,R8 \ 0000061C 150000EF SWI +21 \ 00000620 41FFFFEA B ??edchat_onkey_2 \ ??edchat_onkey_22: \ 00000624 000095E5 LDR R0,[R5, #+0] \ 00000628 0C0090E5 LDR R0,[R0, #+12] \ 0000062C ........ BL LoadTemplates \ 00000630 ........ LDR R2,??DataTable331 ;; IsMultiBuffer \ 00000634 4C109FE5 LDR R1,??edchat_onkey_5+0x18 ;; ed_options_handler \ 00000638 100085E5 STR R0,[R5, #+16] \ 0000063C 002092E5 LDR R2,[R2, #+0] \ 00000640 000052E3 CMP R2,#+0 \ 00000644 03308002 ADDEQ R3,R0,#+3 \ 00000648 04308012 ADDNE R3,R0,#+4 \ 0000064C 0520A0E1 MOV R2,R5 \ 00000650 0400A0E1 MOV R0,R4 \ 00000654 E50100EF SWI +485 \ 00000658 EEFFFFEA B ??edchat_onkey_23 \ ??edchat_onkey_21: \ 0000065C 0D0059E3 CMP R9,#+13 \ 00000660 44FFFF0A BEQ ??edchat_onkey_18 \ ??edchat_onkey_24: \ 00000664 0E0059E3 CMP R9,#+14 \ 00000668 04FFFF1A BNE ??edchat_onkey_12 \ 0000066C 23FFFFEA B ??edchat_onkey_15 \ ??edchat_onkey_5: \ 00000670 ........ DC32 `?` \ 00000674 ........ DC32 LongRightAction \ 00000678 ........ DC32 LongLeftAction \ 0000067C ........ DC32 LongVolUpAction \ 00000680 ........ DC32 IsOpenBrowser \ 00000684 ........ DC32 GetTempName \ 00000688 ........ DC32 ed_options_handler 8240 //1: close 8241 } 8242 8243 static const HEADER_DESC edchat_hdr={0,0,NULL,NULL,NULL,0,LGP_NULL}; 8244 8245 void (*old_ed_redraw)(void *data); \ In segment CODE, align 4, keep-with-next 8246 void my_ed_redraw(void *data) 8247 { \ my_ed_redraw: \ 00000000 30402DE9 PUSH {R4,R5,LR} 8248 void *edchat_gui; 8249 EDCHAT_STRUCT *ed_struct; 8250 if (old_ed_redraw) old_ed_redraw(data); \ 00000004 ........ LDR R4,??DataTable334 ;; i_rc \ 00000008 841494E5 LDR R1,[R4, #+1156] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0100000A BEQ ??my_ed_redraw_0 \ 00000014 31FF2FE1 BLX R1 8251 edchat_gui=FindGUIbyId(edchat_id,NULL); \ 00000018 0010A0E3 MOV R1,#+0 \ ??my_ed_redraw_0: \ 0000001C 100494E5 LDR R0,[R4, #+1040] \ 00000020 090200EF SWI +521 8252 if (edchat_gui) \ 00000024 000050E3 CMP R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 8253 { 8254 ed_struct=EDIT_GetUserPointer(edchat_gui); \ 0000002C DF0100EF SWI +479 8255 if (ed_struct) \ 00000030 000050E3 CMP R0,#+0 \ 00000034 3080BD08 POPEQ {R4,R5,PC} 8256 { 8257 int icon, width; 8258 #ifndef NEWSGOLD 8259 icon=*(S_ICONS+GetIconIndex(ed_struct->ed_contact)); 8260 ((HEADER_DESC *)&edchat_hdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); 8261 DrawImg(ScreenW()-1-width,1,icon); 8262 #else 8263 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 E84290E5 LDR R4,[R0, #+744] 8264 width=GetImgWidth(icon); \ 00000048 0400A0E1 MOV R0,R4 \ 0000004C 220000EF SWI +34 \ 00000050 0050A0E1 MOV R5,R0 8265 DrawImg(2,((HeaderH()-width)>>1)+YDISP,icon); \ 00000054 8A8100EF SWI +33162 \ 00000058 0420A0E1 MOV R2,R4 \ 0000005C 050040E0 SUB R0,R0,R5 \ 00000060 1810A0E3 MOV R1,#+24 \ 00000064 C01081E0 ADD R1,R1,R0, ASR #+1 \ 00000068 0200A0E3 MOV R0,#+2 \ 0000006C 230000EF SWI +35 8266 /* DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 8267 GetPaletteAdrByColorIndex(0), 8268 GetPaletteAdrByColorIndex(EDIT_IsBusy(edchat_gui)?3:4));*/ 8269 #endif 8270 } 8271 } 8272 } \ 00000070 3080BDE8 POP {R4,R5,PC} ;; return 8273 \ In segment CODE, align 4, keep-with-next 8274 void edchat_ghook(GUI *data, int cmd) 8275 { \ edchat_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 8276 8277 static const SOFTKEY_DESC sk={0x0FFF,0x0000,(int)LG_MENU}; 8278 static const SOFTKEY_DESC sk_cancel={0x0FF0,0x0000,(int)LG_CLOSE}; 8279 // static SOFTKEY_DESC sk={0x0018,0x0000,(int)"Menu"}; 8280 int j; 8281 EDITCONTROL ec; 8282 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); 8283 PNGTOP_DESC *pltop=PNG_TOP(); 8284 if (cmd==9) \ 00000004 ........ LDR R4,??DataTable334 ;; 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 8285 { 8286 GBS_DelTimer(&tmr_illumination); //by BoBa 25.06.07 \ 00000030 3800A0E3 MOV R0,#+56 \ 00000034 780D80E3 ORR R0,R0,#0x1E00 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 8C0100EF SWI +396 8287 pltop->dyn_pltop=NULL; \ 00000040 086088E5 STR R6,[R8, #+8] \ 00000044 180000EA B ??edchat_ghook_1 8288 } 8289 if (cmd==2) \ ??edchat_ghook_0: \ 00000048 081097E5 LDR R1,[R7, #+8] \ 0000004C 020059E3 CMP R9,#+2 \ 00000050 1700001A BNE ??edchat_ghook_2 8290 { 8291 ed_struct->ed_chatgui=data; \ 00000054 045087E5 STR R5,[R7, #+4] 8292 // edgui_data=data; 8293 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000058 0500A0E1 MOV R0,R5 \ 0000005C 9B0100EF SWI +411 8294 8295 static void *methods[16]; 8296 void **m=GetDataOfItemByID(data,2); \ 00000060 0210A0E3 MOV R1,#+2 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 4F0100EF SWI +335 \ 0000006C 0050B0E1 MOVS R5,R0 8297 if (m) 8298 { 8299 if (m[1]) \ 00000070 04009515 LDRNE R0,[R5, #+4] \ 00000074 00005013 CMPNE R0,#+0 \ 00000078 6800000A BEQ ??edchat_ghook_3 8300 { 8301 memcpy(methods,m[1],sizeof(methods)); \ 0000007C 8860A0E3 MOV R6,#+136 \ 00000080 406E86E3 ORR R6,R6,#0x400 \ 00000084 4020A0E3 MOV R2,#+64 \ 00000088 0010A0E1 MOV R1,R0 \ 0000008C 040086E0 ADD R0,R6,R4 \ 00000090 1E0100EF SWI +286 8302 old_ed_redraw=(void (*)(void *))(methods[0]); \ 00000094 040096E7 LDR R0,[R6, +R4] \ 00000098 840484E5 STR R0,[R4, #+1156] 8303 methods[0]=(void *)my_ed_redraw; \ 0000009C 84019FE5 LDR R0,??edchat_ghook_4 ;; my_ed_redraw \ 000000A0 040086E7 STR R0,[R6, +R4] 8304 m[1]=methods; \ 000000A4 040086E0 ADD R0,R6,R4 \ 000000A8 040085E5 STR R0,[R5, #+4] \ ??edchat_ghook_1: \ 000000AC 2CD08DE2 ADD SP,SP,#+44 \ 000000B0 F083BDE8 POP {R4-R9,PC} 8305 } 8306 } 8307 } 8308 if (cmd==3) \ ??edchat_ghook_2: \ 000000B4 030059E3 CMP R9,#+3 \ 000000B8 0E00001A BNE ??edchat_ghook_5 8309 { 8310 // if (edgui_data==data) edgui_data=NULL; 8311 if (ed_struct->ed_contact) \ 000000BC 000097E5 LDR R0,[R7, #+0] \ 000000C0 000050E3 CMP R0,#+0 \ 000000C4 0500000A BEQ ??edchat_ghook_6 8312 { 8313 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C8 0D20A0E1 MOV R2,SP \ 000000CC 0500A0E1 MOV R0,R5 \ 000000D0 690100EF SWI +361 8314 SaveAnswer(ed_struct->ed_contact,ec.pWS); \ 000000D4 28109DE5 LDR R1,[SP, #+40] \ 000000D8 000097E5 LDR R0,[R7, #+0] \ 000000DC ........ BL SaveAnswer 8315 } 8316 RecountMenu(ed_struct->ed_contact,1); \ ??edchat_ghook_6: \ 000000E0 000097E5 LDR R0,[R7, #+0] \ 000000E4 0110A0E3 MOV R1,#+1 \ 000000E8 ........ BL RecountMenu 8317 mfree(ed_struct); \ 000000EC 0700A0E1 MOV R0,R7 \ 000000F0 150000EF SWI +21 \ 000000F4 ECFFFFEA B ??edchat_ghook_1 8318 } 8319 if (cmd==0x0A) \ ??edchat_ghook_5: \ 000000F8 0A0059E3 CMP R9,#+10 \ 000000FC 0D00001A BNE ??edchat_ghook_7 8320 { 8321 pltop->dyn_pltop=SmilesImgList; \ 00000100 24019FE5 LDR R0,??edchat_ghook_4+0x4 ;; SmilesImgList \ 00000104 000090E5 LDR R0,[R0, #+0] \ 00000108 080088E5 STR R0,[R8, #+8] 8322 DisableIDLETMR(); \ 0000010C 7F0100EF SWI +383 8323 total_unread-=ed_struct->requested_decrement_total_unread; \ 00000110 000494E5 LDR R0,[R4, #+1024] \ 00000114 0C1097E5 LDR R1,[R7, #+12] \ 00000118 010040E0 SUB R0,R0,R1 \ 0000011C 000484E5 STR R0,[R4, #+1024] 8324 ed_struct->requested_decrement_total_unread=0; \ 00000120 0C6087E5 STR R6,[R7, #+12] 8325 #ifdef ELKA 8326 if (!total_unread) \ 00000124 000494E5 LDR R0,[R4, #+1024] \ 00000128 000050E3 CMP R0,#+0 \ 0000012C 3B00001A BNE ??edchat_ghook_3 8327 { 8328 SLI_Off(); \ 00000130 ........ BL SLI_Off \ 00000134 DCFFFFEA B ??edchat_ghook_1 8329 } 8330 #endif 8331 /* if (request_close_edchat) 8332 { 8333 request_close_edchat=0; 8334 GeneralFunc_flag1(edchat_id,1); 8335 return; 8336 }*/ 8337 } 8338 if (cmd==7) \ ??edchat_ghook_7: \ 00000138 070059E3 CMP R9,#+7 \ 0000013C 2800001A BNE ??edchat_ghook_8 8339 { 8340 SetSoftKey(data,&sk,SET_SOFT_KEY_N); \ 00000140 E8809FE5 LDR R8,??edchat_ghook_4+0x8 ;; ??sk_1 \ 00000144 0020A0E3 MOV R2,#+0 \ 00000148 0810A0E1 MOV R1,R8 \ 0000014C 0500A0E1 MOV R0,R5 \ 00000150 680100EF SWI +360 8341 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000154 081097E5 LDR R1,[R7, #+8] \ 00000158 0D20A0E1 MOV R2,SP \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 690100EF SWI +361 8342 if (ec.pWS->wsbody[0]==0) \ 00000164 28009DE5 LDR R0,[SP, #+40] \ 00000168 000090E5 LDR R0,[R0, #+0] \ 0000016C B000D0E1 LDRH R0,[R0, #+0] \ 00000170 000050E3 CMP R0,#+0 \ 00000174 0300001A BNE ??edchat_ghook_9 8343 SetSoftKey(data,&sk_cancel,SET_SOFT_KEY_N==0?1:0); \ 00000178 0120A0E3 MOV R2,#+1 \ 0000017C 081088E2 ADD R1,R8,#+8 \ 00000180 0500A0E1 MOV R0,R5 \ 00000184 680100EF SWI +360 8344 if (!EDIT_IsBusy(data)) \ ??edchat_ghook_9: \ 00000188 0500A0E1 MOV R0,R5 \ 0000018C 1C0200EF SWI +540 \ 00000190 000050E3 CMP R0,#+0 \ 00000194 2100001A BNE ??edchat_ghook_3 8345 { 8346 time_to_stop_t9=0; \ 00000198 3C6484E5 STR R6,[R4, #+1084] 8347 if (ed_struct->ed_contact->req_add) \ 0000019C 000097E5 LDR R0,[R7, #+0] \ 000001A0 981090E5 LDR R1,[R0, #+152] \ 000001A4 000051E3 CMP R1,#+0 \ 000001A8 0500000A BEQ ??edchat_ghook_10 8348 { 8349 ed_struct->ed_contact->req_add=0; \ 000001AC 986080E5 STR R6,[R0, #+152] 8350 AddMsgToChat(data); \ 000001B0 0500A0E1 MOV R0,R5 \ 000001B4 ........ BL AddMsgToChat 8351 RecountMenu(ed_struct->ed_contact,1); \ 000001B8 000097E5 LDR R0,[R7, #+0] \ 000001BC 0110A0E3 MOV R1,#+1 \ 000001C0 ........ BL RecountMenu 8352 } 8353 if (ed_struct->ed_contact->req_drawack) \ ??edchat_ghook_10: \ 000001C4 000097E5 LDR R0,[R7, #+0] \ 000001C8 9C1090E5 LDR R1,[R0, #+156] \ 000001CC 000051E3 CMP R1,#+0 \ 000001D0 1200000A BEQ ??edchat_ghook_3 8354 { 8355 ed_struct->ed_contact->req_drawack=0; \ 000001D4 9C6080E5 STR R6,[R0, #+156] 8356 DrawAck(data); \ 000001D8 0500A0E1 MOV R0,R5 \ 000001DC ........ BL DrawAck \ 000001E0 B1FFFFEA B ??edchat_ghook_1 8357 } 8358 } 8359 } 8360 if (cmd==0x0C) \ ??edchat_ghook_8: \ 000001E4 0C0059E3 CMP R9,#+12 \ 000001E8 0C00001A BNE ??edchat_ghook_3 8361 { 8362 j=EDIT_GetFocus(data); \ 000001EC 0500A0E1 MOV R0,R5 \ 000001F0 820100EF SWI +386 \ 000001F4 0040A0E1 MOV R4,R0 8363 if ((EDIT_GetUnFocus(data)ed_answer)) \ 000001F8 0500A0E1 MOV R0,R5 \ 000001FC 830100EF SWI +387 \ 00000200 040050E1 CMP R0,R4 \ 00000204 050000AA BGE ??edchat_ghook_3 \ 00000208 080097E5 LDR R0,[R7, #+8] \ 0000020C 000054E1 CMP R4,R0 \ 00000210 0200000A BEQ ??edchat_ghook_3 8364 EDIT_SetCursorPos(data,1); \ 00000214 0110A0E3 MOV R1,#+1 \ 00000218 0500A0E1 MOV R0,R5 \ 0000021C D40100EF SWI +468 8365 } 8366 } \ ??edchat_ghook_3: \ 00000220 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 00000224 F083BDE8 POP {R4-R9,PC} ;; return \ ??edchat_ghook_4: \ 00000228 ........ DC32 my_ed_redraw \ 0000022C ........ DC32 SmilesImgList \ 00000230 ........ DC32 ??sk_1 \ In segment DATA_C, align 4, align-sorted 8367 8368 8369 8370 static const INPUTDIA_DESC edchat_desc = \ edchat_desc: \ 00000000 01000000.... DC32 1, edchat_onkey, edchat_ghook, edchat_locret, 0, menu_skt \ ............ \ ........0000 \ 0000........ \ 00000018 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000020 080000006400 DC32 8, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ 00000038 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000040 000000000000 DC32 0H, 0, 2147483647 \ 0000FFFFFF7F \ 0000004C 2D2D2D2D2D2D DC8 "-------" \ 2D00 \ In segment DATA_C, align 4, align-sorted \ ??sk_1: \ 00000000 FF0F0000 DC16 4095, 0 \ 00000004 ........ DC32 `?` \ 00000008 F00F0000 DC16 4080, 0 \ 0000000C ........ DC32 `?` 8371 { 8372 1, 8373 edchat_onkey, 8374 edchat_ghook, 8375 (void *)edchat_locret, 8376 0, 8377 &menu_skt, 8378 {0,NULL,NULL,NULL}, 8379 FONT_SMALL, 8380 100, 8381 101, 8382 0, 8383 // 0x00000001 - Выровнять по правому краю 8384 // 0x00000002 - Выровнять по центру 8385 // 0x00000004 - Инверсия знакомест 8386 // 0x00000008 - UnderLine 8387 // 0x00000020 - Не переносить слова 8388 // 0x00000200 - bold 8389 0, 8390 // 0x00000002 - ReadOnly 8391 // 0x00000004 - Не двигается курсор 8392 // 0x40000000 - Поменять местами софт-кнопки 8393 0x40000000 8394 }; 8395 \ In segment CODE, align 4, keep-with-next 8396 void CreateEditChat(CLIST *t) 8397 { \ CreateEditChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 8398 8399 void *ma=malloc_adr(); 8400 void *eq; 8401 EDITCONTROL ec; 8402 EDITC_OPTIONS ec_options; 8403 int color, font, type; 8404 int zc; 8405 8406 LOGQ *lp; 8407 int edchat_toitem; 8408 // edcontact=t; 8409 8410 *((int *)(&edchat_hdr.lgp_id))=(int)t->name; \ 00000004 74649FE5 LDR R6,??CreateEditChat_0 ;; edchat_desc 8411 // *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+GetIconIndex(t); 8412 *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+IS_NULLICON; \ 00000008 ........ LDR R7,??DataTable334 ;; 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 CB0F87E2 ADD R0,R7,#+812 \ 00000028 400086E5 STR R0,[R6, #+64] 8413 8414 eq=AllocEQueue(ma,mfree_adr()); \ 0000002C 158000EF SWI +32789 \ 00000030 0010A0E1 MOV R1,R0 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 630100EF SWI +355 8415 8416 /* hist = malloc(256); 8417 if(!GetHistory(hist, 256, t->uin)) 8418 { 8419 ascii2ws(ews,hist); 8420 PrepareEditControl(&ec); 8421 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL|ECF_DISABLE_T9,ews,ews->wsbody[0]); 8422 } 8423 mfree(hist); 8424 8425 AddEditControlToEditQend(eq,&ec,ma); */ 8426 lp=t->log; \ 0000003C A09094E5 LDR R9,[R4, #+160] \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 000059E3 CMP R9,#+0 \ 00000048 8F00000A BEQ ??CreateEditChat_1 8427 8428 while(lp) 8429 { 8430 font = ED_H_FONT_SIZE; \ ??CreateEditChat_2: \ 0000004C ........ LDR R0,??DataTable335 ;; ED_H_FONT_SIZE 8431 if ((zc=lp->acked&3)) \ 00000050 ........ LDR R1,??DataTable336 ;; 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 8432 { 8433 if (zc==1) \ 00000068 010050E3 CMP R0,#+1 \ 0000006C 2200001A BNE ??CreateEditChat_4 8434 color=ACK_COLOR; //Зеленый \ 00000070 ........ LDR R0,??DataTable337 ;; ACK_COLOR \ 00000074 1F0000EA B ??CreateEditChat_5 8435 else 8436 color=I_COLOR; 8437 } 8438 else 8439 { 8440 if (lp->ID==0xFFFFFFFF) \ ??CreateEditChat_3: \ 00000078 080099E5 LDR R0,[R9, #+8] \ 0000007C 010070E3 CMN R0,#+1 \ 00000080 1B00001A BNE ??CreateEditChat_6 8441 { 8442 type = lp->type&0x0F; \ 00000084 0C0099E5 LDR R0,[R9, #+12] \ 00000088 0F1000E2 AND R1,R0,#0xF 8443 if(lp->type&0x10) \ 0000008C 100010E3 TST R0,#0x10 \ 00000090 0D00000A BEQ ??CreateEditChat_7 8444 { 8445 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 00000094 010051E3 CMP R1,#+1 \ 00000098 ........ LDREQ R0,??DataTable338 ;; O_I_COLOR \ 0000009C 0700000A BEQ ??CreateEditChat_8 \ 000000A0 030051E3 CMP R1,#+3 \ 000000A4 0400001A BNE ??CreateEditChat_9 \ 000000A8 ........ LDR R0,??DataTable351 ;; O_X_COLOR \ 000000AC 00B090E5 LDR R11,[R0, #+0] \ 000000B0 ........ LDR R0,??DataTable353 ;; O_ED_X_FONT_SIZE \ ??CreateEditChat_10: \ 000000B4 00A090E5 LDR R10,[R0, #+0] \ 000000B8 0F0000EA B ??CreateEditChat_4 \ ??CreateEditChat_9: \ 000000BC ........ LDR R0,??DataTable341 ;; O_TO_COLOR \ ??CreateEditChat_8: \ 000000C0 00B090E5 LDR R11,[R0, #+0] \ 000000C4 ........ LDR R0,??DataTable342 ;; O_ED_H_FONT_SIZE \ 000000C8 F9FFFFEA B ??CreateEditChat_10 8446 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 8447 } 8448 else 8449 { 8450 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,??DataTable352 ;; X_COLOR \ 000000E0 00B090E5 LDR R11,[R0, #+0] \ 000000E4 ........ LDR R0,??DataTable354 ;; ED_X_FONT_SIZE \ 000000E8 F1FFFFEA B ??CreateEditChat_10 \ ??CreateEditChat_11: \ 000000EC ........ LDR R0,??DataTable345 ;; TO_COLOR \ 000000F0 000000EA B ??CreateEditChat_5 8451 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 8452 } 8453 } 8454 else 8455 color=UNACK_COLOR; //????? \ ??CreateEditChat_6: \ 000000F4 ........ LDR R0,??DataTable346 ;; UNACK_COLOR \ ??CreateEditChat_5: \ 000000F8 00B090E5 LDR R11,[R0, #+0] 8456 } 8457 PrepareEditControl(&ec); \ ??CreateEditChat_4: \ 000000FC 10008DE2 ADD R0,SP,#+16 \ 00000100 640100EF SWI +356 8458 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 8459 { 8460 ascii2ws(ews,lp->hdr); \ 00000114 780397E5 LDR R0,[R7, #+888] \ 00000118 101089E2 ADD R1,R9,#+16 \ 0000011C ........ _BLF ascii2ws,??ascii2ws??rA 8461 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000120 783397E5 LDR R3,[R7, #+888] \ 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 8462 } 8463 else 8464 { 8465 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??CreateEditChat_12: \ 00000138 0000A0E3 MOV R0,#+0 \ 0000013C 01002DE9 PUSH {R0} \ 00000140 783397E5 LDR R3,[R7, #+888] \ 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 8466 } 8467 PrepareEditCOptions(&ec_options); \ 00000158 0D00A0E1 MOV R0,SP \ 0000015C C80100EF SWI +456 8468 SetPenColorToEditCOptions(&ec_options,color); \ 00000160 0B10A0E1 MOV R1,R11 \ 00000164 0D00A0E1 MOV R0,SP \ 00000168 CC0100EF SWI +460 8469 SetFontToEditCOptions(&ec_options,font); \ 0000016C 0A10A0E1 MOV R1,R10 \ 00000170 0D00A0E1 MOV R0,SP \ 00000174 CA0100EF SWI +458 8470 CopyOptionsToEditControl(&ec,&ec_options); \ 00000178 0D10A0E1 MOV R1,SP \ 0000017C 10008DE2 ADD R0,SP,#+16 \ 00000180 CE0100EF SWI +462 8471 AddEditControlToEditQend(eq,&ec,ma); \ 00000184 0520A0E1 MOV R2,R5 \ 00000188 10108DE2 ADD R1,SP,#+16 \ 0000018C 0800A0E1 MOV R0,R8 \ 00000190 660100EF SWI +358 8472 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 8473 { 8474 ParseAnswer(ews,lp->text); \ 000001A4 780397E5 LDR R0,[R7, #+888] \ 000001A8 601089E2 ADD R1,R9,#+96 \ 000001AC ........ BL ParseAnswer \ 000001B0 060000EA B ??CreateEditChat_15 8475 } 8476 else 8477 { 8478 ParseXStatusText(ews,lp->text,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_14: \ 000001B4 100010E3 TST R0,#0x10 \ 000001B8 ........ LDRNE R0,??DataTable351 ;; O_X_COLOR \ 000001BC 601089E2 ADD R1,R9,#+96 \ 000001C0 ........ LDREQ R0,??DataTable352 ;; X_COLOR \ 000001C4 002090E5 LDR R2,[R0, #+0] \ 000001C8 780397E5 LDR R0,[R7, #+888] \ 000001CC ........ BL ParseXStatusText 8479 } 8480 PrepareEditControl(&ec); \ ??CreateEditChat_15: \ 000001D0 10008DE2 ADD R0,SP,#+16 \ 000001D4 640100EF SWI +356 8481 ConstructEditControl(&ec, 8482 ECT_NORMAL_TEXT, 8483 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 8484 ews,ews->wsbody[0]); \ 000001D8 783397E5 LDR R3,[R7, #+888] \ 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 8485 PrepareEditCOptions(&ec_options); \ 00000204 04008DE2 ADD R0,SP,#+4 \ 00000208 C80100EF SWI +456 8486 //#ifdef M75 8487 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 8488 { 8489 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000220 100010E3 TST R0,#0x10 \ 00000224 ........ LDRNE R0,??DataTable349 ;; O_ED_FONT_SIZE \ 00000228 ........ LDREQ R0,??DataTable356 ;; ED_FONT_SIZE \ 0000022C 090000EA B ??CreateEditChat_17 8490 } 8491 else 8492 { 8493 SetPenColorToEditCOptions(&ec_options,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_16: \ 00000230 100010E3 TST R0,#0x10 \ 00000234 ........ LDRNE R0,??DataTable351 ;; O_X_COLOR \ 00000238 ........ LDREQ R0,??DataTable352 ;; X_COLOR \ 0000023C 001090E5 LDR R1,[R0, #+0] \ 00000240 0D00A0E1 MOV R0,SP \ 00000244 CC0100EF SWI +460 8494 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,??DataTable353 ;; O_ED_X_FONT_SIZE \ 00000254 ........ LDREQ R0,??DataTable354 ;; ED_X_FONT_SIZE \ ??CreateEditChat_17: \ 00000258 001090E5 LDR R1,[R0, #+0] \ 0000025C 0D00A0E1 MOV R0,SP \ 00000260 CA0100EF SWI +458 8495 } 8496 //#else 8497 // SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 8498 //#endif 8499 CopyOptionsToEditControl(&ec,&ec_options); \ 00000264 0D10A0E1 MOV R1,SP \ 00000268 10008DE2 ADD R0,SP,#+16 \ 0000026C CE0100EF SWI +462 8500 AddEditControlToEditQend(eq,&ec,ma); \ 00000270 0520A0E1 MOV R2,R5 \ 00000274 10108DE2 ADD R1,SP,#+16 \ 00000278 0800A0E1 MOV R0,R8 \ 0000027C 660100EF SWI +358 8501 lp=lp->next; \ 00000280 009099E5 LDR R9,[R9, #+0] 8502 } \ 00000284 000059E3 CMP R9,#+0 \ 00000288 6FFFFF1A BNE ??CreateEditChat_2 8503 if (t->isunread) total_unread--; \ ??CreateEditChat_1: \ 0000028C 900094E5 LDR R0,[R4, #+144] 8504 total_unread2=total_unread2-t->unread_msg; 8505 t->unread_msg=0; \ 00000290 0090A0E3 MOV R9,#+0 \ 00000294 000050E3 CMP R0,#+0 \ 00000298 00049715 LDRNE R0,[R7, #+1024] \ 0000029C 01004012 SUBNE R0,R0,#+1 \ 000002A0 00048715 STRNE R0,[R7, #+1024] \ 000002A4 CC0297E5 LDR R0,[R7, #+716] \ 000002A8 941094E5 LDR R1,[R4, #+148] \ 000002AC 010040E0 SUB R0,R0,R1 \ 000002B0 CC0287E5 STR R0,[R7, #+716] \ 000002B4 949084E5 STR R9,[R4, #+148] 8506 t->isunread=0; \ 000002B8 909084E5 STR R9,[R4, #+144] 8507 ChangeContactPos(t); \ 000002BC 0400A0E1 MOV R0,R4 \ 000002C0 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 8508 wsprintf(ews, "-------"); \ 000002C4 780397E5 LDR R0,[R7, #+888] \ 000002C8 4C1086E2 ADD R1,R6,#+76 \ 000002CC 240100EF SWI +292 8509 PrepareEditControl(&ec); \ 000002D0 10008DE2 ADD R0,SP,#+16 \ 000002D4 640100EF SWI +356 8510 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000002D8 783397E5 LDR R3,[R7, #+888] \ 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 8511 PrepareEditCOptions(&ec_options); \ 000002F8 04008DE2 ADD R0,SP,#+4 \ 000002FC C80100EF SWI +456 8512 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000300 ........ LDR R0,??DataTable356 ;; ED_FONT_SIZE \ 00000304 001090E5 LDR R1,[R0, #+0] \ 00000308 04008DE2 ADD R0,SP,#+4 \ 0000030C CA0100EF SWI +458 8513 CopyOptionsToEditControl(&ec,&ec_options); \ 00000310 04108DE2 ADD R1,SP,#+4 \ 00000314 14008DE2 ADD R0,SP,#+20 \ 00000318 CE0100EF SWI +462 8514 AddEditControlToEditQend(eq,&ec,ma); \ 0000031C 0520A0E1 MOV R2,R5 \ 00000320 14108DE2 ADD R1,SP,#+20 \ 00000324 0800A0E1 MOV R0,R8 \ 00000328 660100EF SWI +358 8515 8516 if (t->answer) ParseAnswer(ews,t->answer); \ 0000032C A41094E5 LDR R1,[R4, #+164] \ 00000330 04D08DE2 ADD SP,SP,#+4 \ 00000334 000051E3 CMP R1,#+0 \ 00000338 0200000A BEQ ??CreateEditChat_18 \ 0000033C 780397E5 LDR R0,[R7, #+888] \ 00000340 ........ BL ParseAnswer \ 00000344 020000EA B ??CreateEditChat_19 8517 else CutWSTR(ews,0); \ ??CreateEditChat_18: \ 00000348 780397E5 LDR R0,[R7, #+888] \ 0000034C 0010A0E3 MOV R1,#+0 \ 00000350 260100EF SWI +294 8518 PrepareEditControl(&ec); \ ??CreateEditChat_19: \ 00000354 10008DE2 ADD R0,SP,#+16 \ 00000358 640100EF SWI +356 8519 // ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,1024); 8520 ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,4096); \ 0000035C 20019FE5 LDR R0,??CreateEditChat_0+0x4 ;; FIRST_LETTER \ 00000360 0310A0E3 MOV R1,#+3 \ 00000364 000090E5 LDR R0,[R0, #+0] \ 00000368 000050E3 CMP R0,#+0 \ 0000036C 400DA0E3 MOV R0,#+4096 \ 00000370 01002DE9 PUSH {R0} \ 00000374 783397E5 LDR R3,[R7, #+888] \ 00000378 402DA013 MOVNE R2,#+4096 \ 0000037C 0020A003 MOVEQ R2,#+0 \ 00000380 14008DE2 ADD R0,SP,#+20 \ 00000384 650100EF SWI +357 8521 8522 PrepareEditCOptions(&ec_options); \ 00000388 04008DE2 ADD R0,SP,#+4 \ 0000038C C80100EF SWI +456 8523 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000390 ........ LDR R0,??DataTable356 ;; ED_FONT_SIZE \ 00000394 001090E5 LDR R1,[R0, #+0] \ 00000398 04008DE2 ADD R0,SP,#+4 \ 0000039C CA0100EF SWI +458 8524 CopyOptionsToEditControl(&ec,&ec_options); \ 000003A0 04108DE2 ADD R1,SP,#+4 \ 000003A4 14008DE2 ADD R0,SP,#+20 \ 000003A8 CE0100EF SWI +462 8525 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 8526 8527 if (t->req_xtext) \ 000003C0 BC0094E5 LDR R0,[R4, #+188] \ 000003C4 04D08DE2 ADD SP,SP,#+4 \ 000003C8 000050E3 CMP R0,#+0 \ 000003CC 0400000A BEQ ??CreateEditChat_20 8528 { 8529 FreeXText(t); \ 000003D0 0400A0E1 MOV R0,R4 \ 000003D4 ........ _BLF FreeXText,??FreeXText??rA 8530 t->req_xtext=0; \ 000003D8 BC9084E5 STR R9,[R4, #+188] 8531 RequestXText(t->uin); \ 000003DC 0C0094E5 LDR R0,[R4, #+12] \ 000003E0 ........ BL RequestXText 8532 } 8533 8534 EDCHAT_STRUCT *ed_struct=malloc(sizeof(EDCHAT_STRUCT)); \ ??CreateEditChat_20: \ 000003E4 1400A0E3 MOV R0,#+20 \ 000003E8 140000EF SWI +20 \ 000003EC 0050A0E1 MOV R5,R0 8535 ed_struct->ed_contact=t; \ 000003F0 004085E5 STR R4,[R5, #+0] 8536 ed_struct->ed_answer=edchat_toitem; \ 000003F4 08A085E5 STR R10,[R5, #+8] 8537 ed_struct->requested_decrement_total_unread=0; \ 000003F8 0C9085E5 STR R9,[R5, #+12] 8538 t->req_add=0; \ 000003FC 989084E5 STR R9,[R4, #+152] 8539 t->last_log=NULL; \ 00000400 A89084E5 STR R9,[R4, #+168] 8540 8541 // int scr_w=ScreenW(); 8542 // int scr_h=ScreenH(); 8543 // int head_h=HeaderH(); 8544 8545 patch_header(&edchat_hdr); \ 00000404 B893C6E1 STRH R9,[R6, #+56] \ 00000408 1800A0E3 MOV R0,#+24 \ 0000040C BA03C6E1 STRH R0,[R6, #+58] \ 00000410 888100EF SWI +33160 \ 00000414 010040E2 SUB R0,R0,#+1 \ 00000418 BC03C6E1 STRH R0,[R6, #+60] \ 0000041C 8A8100EF SWI +33162 \ 00000420 170080E2 ADD R0,R0,#+23 \ 00000424 BE03C6E1 STRH R0,[R6, #+62] 8546 patch_input(&edchat_desc); \ 00000428 B891C6E1 STRH R9,[R6, #+24] \ 0000042C 8A8100EF SWI +33162 \ 00000430 190080E2 ADD R0,R0,#+25 \ 00000434 BA01C6E1 STRH R0,[R6, #+26] \ 00000438 888100EF SWI +33160 \ 0000043C 010040E2 SUB R0,R0,#+1 \ 00000440 BC01C6E1 STRH R0,[R6, #+28] \ 00000444 898100EF SWI +33161 \ 00000448 0040A0E1 MOV R4,R0 \ 0000044C 8B8100EF SWI +33163 \ 00000450 000044E0 SUB R0,R4,R0 \ 00000454 010040E2 SUB R0,R0,#+1 \ 00000458 BE01C6E1 STRH R0,[R6, #+30] 8547 // edchat_desc.font=ED_FONT_SIZE; 8548 edchat_id=CreateInputTextDialog(&edchat_desc,&edchat_hdr,eq,1,ed_struct); \ 0000045C 20002DE9 PUSH {R5} \ 00000460 0130A0E3 MOV R3,#+1 \ 00000464 0820A0E1 MOV R2,R8 \ 00000468 381086E2 ADD R1,R6,#+56 \ 0000046C 0600A0E1 MOV R0,R6 \ 00000470 670100EF SWI +359 \ 00000474 100487E5 STR R0,[R7, #+1040] 8549 } \ 00000478 40D08DE2 ADD SP,SP,#+64 \ 0000047C F08FBDE8 POP {R4-R11,PC} ;; return \ ??CreateEditChat_0: \ 00000480 ........ DC32 edchat_desc \ 00000484 ........ DC32 FIRST_LETTER 8550 8551 //----------------------------------------------------------------------------- 8552 8553 #define EC_MNU_MAX 9 8554 \ In segment CODE, align 4, keep-with-next 8555 void Quote(GUI *data) 8556 { \ Quote: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 8557 int q_n; 8558 EDITCONTROL ec, ec_hdr; 8559 EDITCONTROL ec_ed; 8560 WSHDR *ed_ws; 8561 WSHDR *ws; 8562 8563 EDCHAT_STRUCT *ed_struct; 8564 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 8565 8566 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 8567 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 8568 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 8569 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 8570 8571 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 8572 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 8573 { 8574 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 8575 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote_1 8576 } 8577 else 8578 CutWSTR(ed_ws,0); \ ??Quote_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 8579 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 8580 { 8581 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 8582 } 8583 else 8584 { 8585 wstrcat(ed_ws,ec.pWS); \ ??Quote_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 8586 } 8587 int ed_pos=0; \ ??Quote_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 8588 do 8589 { 8590 ed_pos++; \ ??Quote_4: \ 000000D0 017080E2 ADD R7,R0,#+1 8591 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 8592 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 8593 } 8594 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 8595 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 8596 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 8597 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 8598 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 8599 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 8600 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 8601 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 8602 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 8603 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 0000017C 040094E5 LDR R0,[R4, #+4] \ 00000180 0610A0E1 MOV R1,R6 \ 00000184 810100EF SWI +385 8604 FreeWS(ws); \ 00000188 0600A0E1 MOV R0,R6 \ 0000018C 290100EF SWI +297 8605 GeneralFuncF1(1); \ 00000190 0100A0E3 MOV R0,#+1 \ 00000194 3B0100EF SWI +315 8606 } \ 00000198 84D08DE2 ADD SP,SP,#+132 \ 0000019C F080BDE8 POP {R4-R7,PC} ;; return 8607 \ In segment CODE, align 4, keep-with-next 8608 void Quote2(GUI *data)//цитирование без фокуса на ответ 8609 { \ Quote2: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 8610 int q_n; 8611 EDITCONTROL ec, ec_hdr; 8612 EDITCONTROL ec_ed; 8613 WSHDR *ed_ws; 8614 WSHDR *ws; 8615 8616 EDCHAT_STRUCT *ed_struct; 8617 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 8618 8619 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 8620 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 8621 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 8622 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 8623 8624 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 8625 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 8626 { 8627 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 8628 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote2_1 8629 } 8630 else 8631 CutWSTR(ed_ws,0); \ ??Quote2_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 8632 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 8633 { 8634 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 8635 } 8636 else 8637 { 8638 wstrcat(ed_ws,ec.pWS); \ ??Quote2_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 8639 } 8640 int ed_pos=0; \ ??Quote2_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 8641 do 8642 { 8643 ed_pos++; \ ??Quote2_4: \ 000000D0 017080E2 ADD R7,R0,#+1 8644 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 8645 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 8646 } 8647 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 8648 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 8649 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 8650 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 8651 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 8652 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 8653 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 8654 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 8655 int ii=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000170 040094E5 LDR R0,[R4, #+4] \ 00000174 820100EF SWI +386 8656 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 8657 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000188 040094E5 LDR R0,[R4, #+4] \ 0000018C 0610A0E1 MOV R1,R6 \ 00000190 810100EF SWI +385 8658 EDIT_SetFocus(ed_struct->ed_chatgui,ii); \ 00000194 040094E5 LDR R0,[R4, #+4] \ 00000198 0510A0E1 MOV R1,R5 \ 0000019C 9B0100EF SWI +411 8659 FreeWS(ws); \ 000001A0 0600A0E1 MOV R0,R6 \ 000001A4 290100EF SWI +297 8660 GeneralFuncF1(1); \ 000001A8 0100A0E3 MOV R0,#+1 \ 000001AC 3B0100EF SWI +315 8661 } \ 000001B0 84D08DE2 ADD SP,SP,#+132 \ 000001B4 F080BDE8 POP {R4-R7,PC} ;; return 8662 8663 \ In segment CODE, align 4, keep-with-next 8664 void GetShortInfo(GUI *data) 8665 { \ GetShortInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} 8666 EDCHAT_STRUCT *ed_struct; 8667 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 8668 8669 TPKT *p; 8670 CLIST *t; 8671 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,??DataTable364 ;; i_rc + 988 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 030050E3 CMP R0,#+3 \ 00000024 1B00001A BNE ??GetShortInfo_0 8672 { 8673 p=malloc(sizeof(PKT)); \ 00000028 0800A0E3 MOV R0,#+8 \ 0000002C 140000EF SWI +20 8674 p->pkt.uin=t->uin; 8675 p->pkt.type=T_REQINFOSHORT; 8676 p->pkt.data_len=0; 8677 AddStringToLog(t, 0x01, "Request info...", I_str,0xFFFFFFFF,1); \ 00000030 ........ LDR R3,??DataTable362 ;; 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 8678 AddMsgToChat(ed_struct->ed_chatgui); \ 00000070 040094E5 LDR R0,[R4, #+4] \ 00000074 ........ BL AddMsgToChat 8679 RecountMenu(t,1); \ 00000078 0110A0E3 MOV R1,#+1 \ 0000007C 0500A0E1 MOV R0,R5 \ 00000080 ........ BL RecountMenu 8680 SUBPROC((void *)SendAnswer,0,p); \ 00000084 ........ LDR R0,??DataTable363 ;; SendAnswer \ 00000088 0620A0E1 MOV R2,R6 \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 710100EF SWI +369 \ 00000094 08D08DE2 ADD SP,SP,#+8 8681 } 8682 GeneralFuncF1(1); \ ??GetShortInfo_0: \ 00000098 0100A0E3 MOV R0,#+1 \ 0000009C 3B0100EF SWI +315 8683 } \ 000000A0 7080BDE8 POP {R4-R6,PC} ;; return \ ??GetShortInfo_1: \ 000000A4 ........ DC32 `?` 8684 8685 void AskNickAndAddContact(EDCHAT_STRUCT *); \ In segment CODE, align 4, keep-with-next 8686 void AddCurContact(GUI *data) 8687 { \ AddCurContact: \ 00000000 00402DE9 PUSH {LR} 8688 EDCHAT_STRUCT *ed_struct; 8689 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 8690 8691 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,??DataTable364 ;; i_rc + 988 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0000001A BNE ??AddCurContact_0 \ 00000024 ........ _BLF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA 8692 GeneralFuncF1(1); \ ??AddCurContact_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 3B0100EF SWI +315 8693 } \ 00000030 0080BDE8 POP {PC} ;; return 8694 \ In segment CODE, align 4, keep-with-next 8695 void SendAuthReq(GUI *data) 8696 { \ SendAuthReq: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 14D04DE2 SUB SP,SP,#+20 8697 EDCHAT_STRUCT *ed_struct; 8698 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 8699 8700 TPKT *p; 8701 CLIST *t; 8702 int l; 8703 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,??DataTable364 ;; i_rc + 988 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthReq_1 8705 { 8706 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 8707 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 8708 p->pkt.type=T_AUTHREQ; 8709 p->pkt.data_len=l; 8710 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 8711 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 ........ LDR R3,??DataTable362 ;; 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 8712 AddMsgToChat(ed_struct->ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 8713 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 ........ BL RecountMenu 8714 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable363 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 8715 } 8716 GeneralFuncF1(1); \ ??SendAuthReq_1: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 8717 } \ 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,??DataTable364 ;; i_rc + 988 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthGrant_1 8729 { 8730 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 8731 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 8732 p->pkt.type=T_AUTHGRANT; 8733 p->pkt.data_len=l; 8734 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 8735 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 ........ LDR R3,??DataTable365 ;; 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 8736 AddMsgToChat(ed_struct->ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 8737 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 ........ BL RecountMenu 8738 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable366 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 8739 } 8740 GeneralFuncF1(1); \ ??SendAuthGrant_1: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 8741 } \ 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 8751 { 8752 if(HISTORY_SAVE_TYPE) \ 00000024 ........ LDR R1,??DataTable367 ;; 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 8753 { 8754 if(HISTORY_TYPE) \ 00000050 01002DE9 PUSH {R0} \ 00000054 00005CE3 CMP R12,#+0 \ 00000058 0500000A BEQ ??OpenLogfile_3 8755 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 8756 else 8757 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 8758 } 8759 else 8760 { 8761 if(HISTORY_TYPE) \ ??OpenLogfile_2: \ 0000008C 00005CE3 CMP R12,#+0 \ 00000090 0200000A BEQ ??OpenLogfile_6 8762 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 8763 else 8764 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 8765 } 8766 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 8767 } 8768 FreeWS(ws); \ ??OpenLogfile_0: \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 290100EF SWI +297 8769 GeneralFuncF1(1); \ 000000C8 0100A0E3 MOV R0,#+1 \ 000000CC 3B0100EF SWI +315 8770 } \ 000000D0 3080BDE8 POP {R4,R5,PC} ;; return \ ??OpenLogfile_1: \ 000000D4 ........ DC32 HISTORY_SAVE_TYPE \ 000000D8 ........ DC32 HISTORY_TYPE \ 000000DC ........ DC32 `?` \ 000000E0 ........ DC32 HIST_PATH 8771 \ In segment CODE, align 4, keep-with-next 8772 void ClearLog(GUI *data/*,void *dummy*/) 8773 { \ ClearLog: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 8774 EDITCONTROL ec; 8775 EDCHAT_STRUCT *ed_struct; 8776 WSHDR *ws; 8777 CLIST *t; 8778 8779 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 8780 8781 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 8782 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 8783 { 8784 ws=AllocWS(1); \ 00000030 0100A0E3 MOV R0,#+1 \ 00000034 250100EF SWI +293 \ 00000038 0050A0E1 MOV R5,R0 8785 CutWSTR(ws,0); \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 260100EF SWI +294 8786 8787 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 8788 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000050 040094E5 LDR R0,[R4, #+4] \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 810100EF SWI +385 8789 8790 FreeWS(ws); \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 290100EF SWI +297 8791 GeneralFuncF1(1); \ 00000064 1D0000EA B ??ClearLog_1 8792 } 8793 else 8794 { 8795 8796 if ((t=ed_struct->ed_contact)) \ ??ClearLog_0: \ 00000068 005094E5 LDR R5,[R4, #+0] \ 0000006C 000055E3 CMP R5,#+0 \ 00000070 1C00000A BEQ ??ClearLog_2 8797 { 8798 if (t->log) \ 00000074 A00095E5 LDR R0,[R5, #+160] \ 00000078 0060A0E3 MOV R6,#+0 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 1200000A BEQ ??ClearLog_3 8799 { 8800 FreeLOGQ(&t->log); \ 00000084 A00085E2 ADD R0,R5,#+160 \ 00000088 ........ BL FreeLOGQ 8801 t->msg_count=0; \ 0000008C B06085E5 STR R6,[R5, #+176] 8802 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 8803 { 8804 while(ed_struct->ed_answer!=2) 8805 { 8806 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??ClearLog_5: \ 000000AC 040094E5 LDR R0,[R4, #+4] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 D10100EF SWI +465 8807 ed_struct->ed_answer--; \ 000000B8 080094E5 LDR R0,[R4, #+8] \ 000000BC 010040E2 SUB R0,R0,#+1 \ 000000C0 080084E5 STR R0,[R4, #+8] 8808 } \ ??ClearLog_4: \ 000000C4 080094E5 LDR R0,[R4, #+8] \ 000000C8 020050E3 CMP R0,#+2 \ 000000CC F6FFFF1A BNE ??ClearLog_5 8809 } 8810 } 8811 t->isactive=0; //by BoBa 18.06.07 \ ??ClearLog_3: \ 000000D0 AC6085E5 STR R6,[R5, #+172] 8812 RecountMenu(t,1); \ 000000D4 0110A0E3 MOV R1,#+1 \ 000000D8 0500A0E1 MOV R0,R5 \ 000000DC ........ BL RecountMenu 8813 GeneralFuncF1(1); \ ??ClearLog_1: \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 3B0100EF SWI +315 8814 } 8815 } 8816 } \ ??ClearLog_2: \ 000000E8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000EC 7080BDE8 POP {R4-R6,PC} ;; return 8817 \ In segment CODE, align 4, keep-with-next 8818 void ecmenu_ghook(void *data, int cmd) 8819 { \ ecmenu_ghook: \ 00000000 00402DE9 PUSH {LR} 8820 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 8821 { 8822 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 8823 } 8824 } \ 00000010 0080BDE8 POP {PC} ;; return 8825 \ In segment DATA_C, align 4, align-sorted 8826 static const MENUITEM_DESC ecmenu_ITEMS[EC_MNU_MAX]= \ ecmenu_ITEMS: \ 00000000 00000000.... DC32 0H, `?` \ icons: \ 00000008 DS8 132 \ 0000008C REQUIRE `?` \ MAINCSM: \ 0000008C DS8 72 \ 000000D4 REQUIRE `?` \ gipc: \ 000000D4 DS8 12 \ 000000E0 REQUIRE `?` \ def_set: \ 000000E0 DS8 420 \ 00000284 REQUIRE `?` \ tmr_gipc: \ 00000284 DS8 12 \ 00000290 REQUIRE `?` \ main_d: \ 00000290 DS8 4 \ 00000294 REQUIRE `?` \ align: \ 00000294 DS8 4 \ 00000298 REQUIRE `?` \ canvasdata: \ 00000298 DS8 4 \ 0000029C REQUIRE `?` \ paused_height: \ 0000029C DS8 4 \ 000002A0 REQUIRE `?` \ wsBuffer: \ 000002A0 DS8 4 \ 000002A4 REQUIRE `?` \ uins: \ 000002A4 DS8 4 \ 000002A8 REQUIRE `?` \ saver_on: \ 000002A8 DS8 4 \ 000002AC REQUIRE `?` \ PrintTimer: \ 000002AC DS8 4 \ 000002B0 REQUIRE `?` \ curping: \ 000002B0 DS8 4 \ 000002B4 REQUIRE `?` \ Is_PING_On: \ 000002B4 DS8 4 \ 000002B8 REQUIRE `?` \ Is_SLI_On: \ 000002B8 DS8 4 \ 000002BC REQUIRE `?` \ Is_SMARTCPU_On: \ 000002BC DS8 4 \ 000002C0 REQUIRE `?` \ Is_INC_On: \ 000002C0 DS8 4 \ 000002C4 REQUIRE `?` \ Is_ILU_On: \ 000002C4 DS8 4 \ 000002C8 REQUIRE `?` \ Is_Double_Vibra_On: \ 000002C8 DS8 4 \ 000002CC REQUIRE `?` \ total_unread2: \ 000002CC DS8 4 \ 000002D0 REQUIRE `?` \ maincsm_id: \ 000002D0 DS8 4 \ 000002D4 REQUIRE `?` \ maingui_id: \ 000002D4 DS8 4 \ 000002D8 REQUIRE `?` \ SENDMSGCOUNT: \ 000002D8 DS8 4 \ 000002DC REQUIRE `?` \ IsActiveUp: \ 000002DC DS8 4 \ 000002E0 REQUIRE `?` \ Is_Vibra_Enabled: \ 000002E0 DS8 4 \ 000002E4 REQUIRE `?` \ Is_Id3tag_Enabled: \ 000002E4 DS8 4 \ 000002E8 REQUIRE `?` \ S_ICONS: \ 000002E8 DS8 136 \ 00000370 REQUIRE `?` \ CurrentStatus: \ 00000370 DS8 4 \ 00000374 REQUIRE `?` \ CurrentXStatus: \ 00000374 DS8 4 \ 00000378 REQUIRE `?` \ ews: \ 00000378 DS8 4 \ 0000037C REQUIRE `?` \ scrsTime: \ 0000037C DS8 4 \ 00000380 REQUIRE `?` \ msg_away_timer: \ 00000380 DS8 4 \ 00000384 REQUIRE `?` \ away_m: \ 00000384 DS8 4 \ 00000388 REQUIRE `?` \ status_rem: \ 00000388 DS8 4 \ 0000038C REQUIRE `?` \ change_back_status: \ 0000038C DS8 4 \ 00000390 REQUIRE `?` \ Show_XTX: \ 00000390 DS8 4 \ 00000394 REQUIRE `?` \ Is_UPTIME_On: \ 00000394 DS8 4 \ 00000398 REQUIRE `?` \ uptimeHour: \ 00000398 DS8 4 \ 0000039C REQUIRE `?` \ uptimeMin: \ 0000039C DS8 4 \ 000003A0 REQUIRE `?` \ uptimeSec: \ 000003A0 DS8 4 \ 000003A4 REQUIRE `?` \ tracktimer: \ 000003A4 DS8 4 \ 000003A8 REQUIRE `?` \ input_awaymsg_id: \ 000003A8 DS8 4 \ 000003AC REQUIRE `?` \ silenthide: \ 000003AC DS8 4 \ 000003B0 REQUIRE `?` \ disautorecconect: \ 000003B0 DS8 4 \ 000003B4 REQUIRE `?` \ Is_Sounds_Enabled: \ 000003B4 DS8 4 \ 000003B8 REQUIRE `?` \ Is_Show_Offline: \ 000003B8 DS8 4 \ 000003BC REQUIRE `?` \ Is_Show_Groups: \ 000003BC DS8 4 \ 000003C0 REQUIRE `?` \ CurrentPrivateStatus: \ 000003C0 DS8 4 \ 000003C4 REQUIRE `?` \ vibra_count: \ 000003C4 DS8 4 \ 000003C8 REQUIRE `?` \ templates_chars: \ 000003C8 DS8 4 \ 000003CC REQUIRE `?` \ templates_lines: \ 000003CC DS8 4 \ 000003D0 REQUIRE `?` \ bot_chars: \ 000003D0 DS8 4 \ 000003D4 REQUIRE `?` \ bot_lines: \ 000003D4 DS8 4 \ 000003D8 REQUIRE `?` \ RXstate: \ 000003D8 DS8 4 \ 000003DC REQUIRE `?` \ connect_state: \ 000003DC DS8 4 \ 000003E0 REQUIRE `?` \ sock: \ 000003E0 DS8 4 \ 000003E4 REQUIRE `?` \ TOTALRECEIVED: \ 000003E4 DS8 4 \ 000003E8 REQUIRE `?` \ TOTALSENDED: \ 000003E8 DS8 4 \ 000003EC REQUIRE `?` \ ALLTOTALRECEIVED: \ 000003EC DS8 4 \ 000003F0 REQUIRE `?` \ ALLTOTALSENDED: \ 000003F0 DS8 4 \ 000003F4 REQUIRE `?` \ sendq_l: \ 000003F4 DS8 4 \ 000003F8 REQUIRE `?` \ sendq_p: \ 000003F8 DS8 4 \ 000003FC REQUIRE `?` \ is_gprs_online: \ 000003FC DS8 4 \ 00000400 REQUIRE `?` \ total_unread: \ 00000400 DS8 4 \ 00000404 REQUIRE `?` \ cltop: \ 00000404 DS8 4 \ 00000408 REQUIRE `?` \ GROUP_CACHE: \ 00000408 DS8 4 \ 0000040C REQUIRE `?` \ contactlist_menu_id: \ 0000040C DS8 4 \ 00000410 REQUIRE `?` \ edchat_id: \ 00000410 DS8 4 \ 00000414 REQUIRE `?` \ tenseconds_to_ping: \ 00000414 DS8 4 \ 00000418 REQUIRE `?` \ on_off_timer: \ 00000418 DS8 4 \ 0000041C REQUIRE `?` \ kopa_online: \ 0000041C DS8 4 \ 00000420 REQUIRE `?` \ kopa_kontaktu: \ 00000420 DS8 4 \ 00000424 REQUIRE `?` \ DNR_ID: \ 00000424 DS8 4 \ 00000428 REQUIRE `?` \ DNR_TRIES: \ 00000428 DS8 4 \ 0000042C REQUIRE `?` \ host_counter: \ 0000042C DS8 4 \ 00000430 REQUIRE `?` \ ping_time: \ 00000430 DS8 4 \ 00000434 REQUIRE `?` \ main_msg_timer2: \ 00000434 DS8 4 \ 00000438 REQUIRE `?` \ NEW_MSG: \ 00000438 DS8 4 \ 0000043C REQUIRE `?` \ time_to_stop_t9: \ 0000043C DS8 4 \ 00000440 REQUIRE `?` \ comanda: \ 00000440 DS8 4 \ 00000444 REQUIRE `?` \ INC_show: \ 00000444 DS8 4 \ 00000448 REQUIRE `?` \ INC_show2: \ 00000448 DS8 4 \ 0000044C REQUIRE `?` \ ShowLoadScreen: \ 0000044C DS8 4 \ 00000450 REQUIRE `?` \ curpos: \ 00000450 DS8 4 \ 00000454 REQUIRE `?` \ 00000454 DS8 4 \ 00000458 REQUIRE `?` \ hy: \ 00000458 DS8 4 \ 0000045C REQUIRE `?` \ clfont: \ 0000045C DS8 4 \ 00000460 REQUIRE `?` \ i_curpos: \ 00000460 DS8 4 \ 00000464 REQUIRE `?` \ itemFromDisp: \ 00000464 DS8 4 \ 00000468 REQUIRE `?` \ totalItems: \ 00000468 DS8 4 \ 0000046C REQUIRE `?` \ curpage: \ 0000046C DS8 4 \ 00000470 REQUIRE `?` \ collum: \ 00000470 DS8 4 \ 00000474 REQUIRE `?` \ clstartItem: \ 00000474 DS8 4 \ 00000478 REQUIRE `?` \ lastKey: \ 00000478 DS8 4 \ 0000047C REQUIRE `?` \ lastIsLongPress: \ 0000047C DS8 4 \ 00000480 REQUIRE `?` \ errornumber: \ 00000480 DS8 4 \ 00000484 REQUIRE `?` \ old_ed_redraw: \ 00000484 DS8 4 \ 00000488 REQUIRE `?` \ 00000488 DS8 64 \ 000004C8 REQUIRE `?` \ elf_path: \ 000004C8 DS8 256 \ 000005C8 REQUIRE `?` \ ContactT9Key: \ 000005C8 DS8 32 \ 000005E8 REQUIRE `?` \ ixtext: \ 000005E8 DS8 256 \ 000006E8 REQUIRE `?` \ 000006E8 DS8 40 \ 00000710 REQUIRE `?` \ talk_sound: \ 00000710 DS8 128 \ 00000790 REQUIRE `?` \ unread_msg_info: \ 00000790 DS8 64 \ 000007D0 REQUIRE `?` \ last_msg_buffer: \ 000007D0 DS8 4096 \ 000017D0 REQUIRE `?` \ prmsg: \ 000017D0 DS8 256 \ 000018D0 REQUIRE `?` \ ping_tmr: \ 000018D0 DS8 16 \ 000018E0 REQUIRE `?` \ PINGO: \ 000018E0 DS8 256 \ 000019E0 REQUIRE `?` \ scrsTmr: \ 000019E0 DS8 16 \ 000019F0 REQUIRE `?` \ away_msg: \ 000019F0 DS8 264 \ 00001AF8 REQUIRE `?` \ away_msg_time: \ 00001AF8 DS8 64 \ 00001B38 REQUIRE `?` \ away_msg_time_dace: \ 00001B38 DS8 16 \ 00001B48 REQUIRE `?` \ tim_zone: \ 00001B48 DS8 16 \ 00001B58 REQUIRE `?` \ away_tmr: \ 00001B58 DS8 16 \ 00001B68 REQUIRE `?` \ autoChangeStatus: \ 00001B68 DS8 16 \ 00001B78 REQUIRE `?` \ remind_tmr: \ 00001B78 DS8 16 \ 00001B88 REQUIRE `?` \ uptime_tmr: \ 00001B88 DS8 16 \ 00001B98 REQUIRE `?` \ tracktmr: \ 00001B98 DS8 16 \ 00001BA8 REQUIRE `?` \ onlineTime: \ 00001BA8 DS8 128 \ 00001C28 REQUIRE `?` \ sli_tmr: \ 00001C28 DS8 16 \ 00001C38 REQUIRE `?` \ logmsg: \ 00001C38 DS8 256 \ 00001D38 REQUIRE `?` \ logmsg2: \ 00001D38 DS8 256 \ 00001E38 REQUIRE `?` \ tmr_illumination: \ 00001E38 DS8 16 \ 00001E48 REQUIRE `?` \ tmr_vibra: \ 00001E48 DS8 16 \ 00001E58 REQUIRE `?` \ reconnect_tmr: \ 00001E58 DS8 16 \ 00001E68 REQUIRE `?` \ tmr_active: \ 00001E68 DS8 16 \ 00001E78 REQUIRE `?` \ clmenu_sk_r: \ 00001E78 DS8 16 \ 00001E88 REQUIRE `?` \ on_off_buf: \ 00001E88 DS8 128 \ 00001F08 REQUIRE `?` \ hostbuf2: \ 00001F08 DS8 128 \ 00001F88 REQUIRE `?` \ hostname: \ 00001F88 DS8 128 \ 00002008 REQUIRE `?` \ I_UIN: \ 00002008 DS8 12 \ 00002014 REQUIRE `?` \ sds: \ 00002014 DS8 8 \ 0000201C REQUIRE `?` \ mp3: \ 0000201C DS8 4 \ 00002020 REQUIRE `?` \ wav: \ 00002020 DS8 4 \ 00002024 REQUIRE `?` \ amr: \ 00002024 DS8 4 \ 00002028 REQUIRE `?` \ a_txt: \ 00002028 DS8 48 \ 00002058 REQUIRE `?` \ s_txt: \ 00002058 DS8 48 \ 00002088 REQUIRE `?` \ d_txt: \ 00002088 DS8 48 \ 000020B8 REQUIRE `?` \ f_txt: \ 000020B8 DS8 48 \ 000020E8 REQUIRE `?` \ g_txt: \ 000020E8 DS8 48 \ 00002118 REQUIRE `?` \ develop: \ 00002118 DS8 16 \ 00002128 REQUIRE `?` \ requests1: \ 00002128 DS8 24 \ 00002140 REQUIRE `?` \ requests2: \ 00002140 DS8 20 \ 00002154 REQUIRE `?` \ requests3: \ 00002154 DS8 24 \ 0000216C REQUIRE `?` \ requests4: \ 0000216C DS8 20 \ 00002180 REQUIRE `?` \ mod_info: \ 00002180 DS8 264 \ 00002288 REQUIRE `?` \ show_nick: \ 00002288 DS8 32 \ 000022A8 REQUIRE `?` \ onContact: \ 000022A8 DS8 64 \ 000022E8 REQUIRE `?` \ incs2: \ 000022E8 DS8 16 \ 000022F8 REQUIRE `?` \ tm22: \ 000022F8 DS8 16 \ 00002308 REQUIRE `?` \ clrBlack: \ 00002308 DS8 4 \ 0000230C REQUIRE `?` \ clrWhite: \ 0000230C DS8 4 \ 00002310 REQUIRE `?` \ clrRed: \ 00002310 DS8 4 \ 00002314 REQUIRE `?` \ transparent: \ 00002314 DS8 4 \ 00002318 REQUIRE `?` \ blue: \ 00002318 DS8 8 \ 00002320 REQUIRE `?` \ i_tmr: \ 00002320 DS8 16 \ 00002330 REQUIRE `?` 8841 { 8842 Quote, 8843 Quote2, 8844 AddSmile, 8845 GetShortInfo, 8846 AddCurContact, 8847 SendAuthReq, 8848 SendAuthGrant, 8849 OpenLogfile, 8850 ClearLog, 8851 }; 8852 8853 char ecm_contactname[64]; \ ecm_contactname: \ 00002330 DS8 64 \ 00002370 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ ??sk: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ input_awaymsg_sk: \ 00000000 DS8 24 \ 00000018 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ input_awaymsg_skt: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ CmdMenuHeader: \ 00000000 DS8 20 \ 00000014 REQUIRE `?` \ cmd_chars: \ 00000014 DS8 4 \ 00000018 REQUIRE `?` \ cmd_lines: \ 00000018 DS8 4 \ 0000001C REQUIRE `?` \ NumOfItems: \ 0000001C DS8 4 \ 00000020 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ requests6: \ 00000000 DS8 24 \ 00000018 REQUIRE `?` 8854 \ In segment DATA_C, align 4, align-sorted 8855 static const HEADER_DESC ecmenu_HDR={0,0,NULL,NULL,NULL,(int)ecm_contactname,LGP_NULL}; \ ecmenu_HDR: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000008 00000000.... DC32 0H, ecm_contactname, 2147483647 \ ....FFFFFF7F \ 00000014 080000000000 DC32 8, 0H, ecmenu_ghook, 0H, menusoftkeys, menu_skt, 0, 0H \ 0000........ \ 00000000.... \ ............ \ 000000000000 \ 0000 \ 00000034 ............ DC32 ecmenu_ITEMS, ecmenu_HNDLS, 9 \ ....09000000 8856 8857 static const MENU_DESC ecmenu_STRUCT= 8858 { 8859 8,NULL,ecmenu_ghook,NULL, 8860 menusoftkeys, 8861 &menu_skt, 8862 0, 8863 NULL, 8864 ecmenu_ITEMS, 8865 ecmenu_HNDLS, 8866 EC_MNU_MAX 8867 }; 8868 \ In segment CODE, align 4, keep-with-next 8869 void ec_menu(EDCHAT_STRUCT *ed_struct) 8870 { \ ec_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 28D04DE2 SUB SP,SP,#+40 \ 00000008 0040A0E1 MOV R4,R0 8871 CLIST *t; 8872 int to_remove[EC_MNU_MAX+1]; 8873 int remove=0; 8874 if ((t=ed_struct->ed_contact)) \ 0000000C 001094E5 LDR R1,[R4, #+0] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 4F00000A BEQ ??ec_menu_0 8875 { 8876 if (t->name) \ 00000018 ........ LDR R5,??DataTable368 ;; i_rc \ 0000001C 3000A0E3 MOV R0,#+48 \ 00000020 8C0D80E3 ORR R0,R0,#0x2300 \ 00000024 050080E0 ADD R0,R0,R5 \ 00000028 142091E2 ADDS R2,R1,#+20 \ 0000002C 0300000A BEQ ??ec_menu_1 8877 { 8878 strncpy(ecm_contactname,t->name,63); \ 00000030 3F20A0E3 MOV R2,#+63 \ 00000034 141081E2 ADD R1,R1,#+20 \ 00000038 160100EF SWI +278 \ 0000003C 020000EA B ??ec_menu_2 8879 } 8880 else 8881 { 8882 sprintf(ecm_contactname,"%u",t->uin); \ ??ec_menu_1: \ 00000040 0C2091E5 LDR R2,[R1, #+12] \ 00000044 451F8FE2 ADR R1,??ec_menu_3 ;; "%u" \ 00000048 160000EF SWI +22 8883 } 8884 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ec_menu_2: \ 0000004C 040094E5 LDR R0,[R4, #+4] \ 00000050 820100EF SWI +386 \ 00000054 083094E5 LDR R3,[R4, #+8] \ 00000058 0220A0E3 MOV R2,#+2 \ 0000005C 0010A0E3 MOV R1,#+0 \ 00000060 030050E1 CMP R0,R3 \ 00000064 0400001A BNE ??ec_menu_4 8885 { 8886 to_remove[++remove]=0; \ 00000068 04108DE5 STR R1,[SP, #+4] 8887 to_remove[++remove]=1; \ 0000006C 0260A0E3 MOV R6,#+2 \ 00000070 0130A0E3 MOV R3,#+1 \ 00000074 08308DE5 STR R3,[SP, #+8] \ 00000078 010000EA B ??ec_menu_5 8888 } 8889 else 8890 { 8891 // to_remove[++remove]=1; 8892 to_remove[++remove]=2; \ ??ec_menu_4: \ 0000007C 0160A0E3 MOV R6,#+1 \ 00000080 04208DE5 STR R2,[SP, #+4] 8893 } 8894 8895 if (ed_struct->ed_answer<=2) \ ??ec_menu_5: \ 00000084 080094E5 LDR R0,[R4, #+8] \ 00000088 030050E3 CMP R0,#+3 \ 0000008C 030000AA BGE ??ec_menu_6 8896 to_remove[++remove]=7; \ 00000090 016086E2 ADD R6,R6,#+1 \ 00000094 0D00A0E1 MOV R0,SP \ 00000098 0730A0E3 MOV R3,#+7 \ 0000009C 063180E7 STR R3,[R0, +R6, LSL #+2] 8897 8898 if (!ed_struct->ed_contact || connect_state!=3) \ ??ec_menu_6: \ 000000A0 000094E5 LDR R0,[R4, #+0] \ 000000A4 000050E3 CMP R0,#+0 \ 000000A8 0200000A BEQ ??ec_menu_7 \ 000000AC DC0395E5 LDR R0,[R5, #+988] \ 000000B0 030050E3 CMP R0,#+3 \ 000000B4 1000000A BEQ ??ec_menu_8 8899 { 8900 to_remove[++remove]=2; \ ??ec_menu_7: \ 000000B8 010086E2 ADD R0,R6,#+1 \ 000000BC 0D30A0E1 MOV R3,SP \ 000000C0 002183E7 STR R2,[R3, +R0, LSL #+2] 8901 to_remove[++remove]=3; \ 000000C4 010080E2 ADD R0,R0,#+1 \ 000000C8 0D20A0E1 MOV R2,SP \ 000000CC 0330A0E3 MOV R3,#+3 \ 000000D0 003182E7 STR R3,[R2, +R0, LSL #+2] 8902 to_remove[++remove]=4; \ 000000D4 010080E2 ADD R0,R0,#+1 \ 000000D8 0430A0E3 MOV R3,#+4 \ 000000DC 003182E7 STR R3,[R2, +R0, LSL #+2] 8903 to_remove[++remove]=5; \ 000000E0 010080E2 ADD R0,R0,#+1 \ 000000E4 0530A0E3 MOV R3,#+5 \ 000000E8 003182E7 STR R3,[R2, +R0, LSL #+2] 8904 to_remove[++remove]=6; \ 000000EC 016080E2 ADD R6,R0,#+1 \ 000000F0 0D00A0E1 MOV R0,SP \ 000000F4 0620A0E3 MOV R2,#+6 \ 000000F8 062180E7 STR R2,[R0, +R6, LSL #+2] 8905 } 8906 8907 patch_header(&ecmenu_HDR); \ ??ec_menu_8: \ 000000FC 60509FE5 LDR R5,??ec_menu_3+0x4 ;; ecmenu_HDR \ 00000100 1800A0E3 MOV R0,#+24 \ 00000104 B010C5E1 STRH R1,[R5, #+0] \ 00000108 B200C5E1 STRH R0,[R5, #+2] \ 0000010C 888100EF SWI +33160 \ 00000110 010040E2 SUB R0,R0,#+1 \ 00000114 B400C5E1 STRH R0,[R5, #+4] \ 00000118 8A8100EF SWI +33162 \ 0000011C 170080E2 ADD R0,R0,#+23 \ 00000120 B600C5E1 STRH R0,[R5, #+6] 8908 to_remove[0]=remove; \ 00000124 00608DE5 STR R6,[SP, #+0] 8909 CreateMenu(0,0,&ecmenu_STRUCT,&ecmenu_HDR,0,EC_MNU_MAX,ed_struct,to_remove); \ 00000128 0D00A0E1 MOV R0,SP \ 0000012C 01002DE9 PUSH {R0} \ 00000130 10002DE9 PUSH {R4} \ 00000134 0530A0E1 MOV R3,R5 \ 00000138 0900A0E3 MOV R0,#+9 \ 0000013C 01002DE9 PUSH {R0} \ 00000140 142085E2 ADD R2,R5,#+20 \ 00000144 0010A0E3 MOV R1,#+0 \ 00000148 0000A0E3 MOV R0,#+0 \ 0000014C 01002DE9 PUSH {R0} \ 00000150 520100EF SWI +338 \ 00000154 10D08DE2 ADD SP,SP,#+16 8910 } 8911 } \ ??ec_menu_0: \ 00000158 28D08DE2 ADD SP,SP,#+40 ;; stack cleaning \ 0000015C 7080BDE8 POP {R4-R6,PC} ;; return \ ??ec_menu_3: \ 00000160 25750000 DC8 "%u",+0 \ 00000164 ........ DC32 ecmenu_HDR 8912 8913 \ In segment CODE, align 4, keep-with-next 8914 void AskNickAndAddContact(EDCHAT_STRUCT *ed_struct) 8915 { 8916 CreateAddContactGrpDialog(ed_struct->ed_contact); \ AskNickAndAddContact: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 ........ _BF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA ;; tailcall 8917 } 8918 \ In segment CODE, align 4, keep-with-next 8919 void AddSmile(GUI *data) 8920 { \ AddSmile: \ 00000000 00402DE9 PUSH {LR} 8921 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 8922 CreateSmileSelectGUI(ed_struct); \ 00000008 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 8923 GeneralFuncF1(1); \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0100EF SWI +315 8924 } \ 00000014 0080BDE8 POP {PC} ;; return \ In segment CODE, align 4, keep-with-next \ ??DataTable1: \ 00000000 ........ DC32 Pinger2 \ In segment CODE, align 4, keep-with-next \ ??DataTable2: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable7: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable8: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable10: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable16: \ 00000000 ........ DC32 Remind_Timer2 \ In segment CODE, align 4, keep-with-next \ ??DataTable19: \ 00000000 ........ DC32 GetTags \ In segment CODE, align 4, keep-with-next \ ??DataTable21: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable25: \ 00000000 ........ DC32 showAwayIdle \ In segment CODE, align 4, keep-with-next \ ??DataTable26: \ 00000000 ........ DC32 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable27: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable30: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable31: \ 00000000 ........ DC32 awayMsg \ In segment CODE, align 4, keep-with-next \ ??DataTable33: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable36: \ 00000000 ........ DC32 icons_names \ In segment CODE, align 4, keep-with-next \ ??DataTable44: \ 00000000 ........ DC32 def_setting \ In segment CODE, align 4, keep-with-next \ ??DataTable45: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable47: \ 00000000 ........ DC32 ind_set_xstatus \ In segment CODE, align 4, keep-with-next \ ??DataTable53: \ 00000000 ........ DC32 vibraPower \ In segment CODE, align 4, keep-with-next \ ??DataTable56: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable64: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable66: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable71: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable73: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable74: \ 00000000 ........ DC32 suc_config_name \ In segment CODE, align 4, keep-with-next \ ??DataTable75: \ 00000000 ........ DC32 suc_config_name_mod \ In segment CODE, align 4, keep-with-next \ ??DataTable76: \ 00000000 ........ DC32 janis \ In segment CODE, align 4, keep-with-next \ ??DataTable78: \ 00000000 ........ DC32 i_rc + 1028 \ In segment CODE, align 4, keep-with-next \ ??DataTable80: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable81: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable82: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable86: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable88: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable89: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable91: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable92: \ 00000000 ........ DC32 ignor_list \ In segment CODE, align 4, keep-with-next \ ??DataTable93: \ 00000000 ........ DC32 extended_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable94: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable95: \ 00000000 ........ DC32 ext_type_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable96: \ 00000000 ........ DC32 janis \ In segment CODE, align 4, keep-with-next \ ??DataTable97: \ 00000000 ........ DC32 main_count \ In segment CODE, align 4, keep-with-next \ ??DataTable99: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable101: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable102: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable103: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable104: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable114: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable115: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable116: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable118: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable119: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable120: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable121: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable122: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable123: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable124: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable125: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable131: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable134: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable136: \ 00000000 ........ DC32 CmdMenuHeader \ In segment CODE, align 4, keep-with-next \ ??DataTable137: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable138: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable140: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable143: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable144: \ 00000000 ........ DC32 main_count \ In segment CODE, align 4, keep-with-next \ ??DataTable145: \ 00000000 ........ DC32 main2_count \ In segment CODE, align 4, keep-with-next \ ??DataTable146: \ 00000000 ........ DC32 ignor_list \ In segment CODE, align 4, keep-with-next \ ??DataTable147: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable148: \ 00000000 ........ DC32 awayMsg \ In segment CODE, align 4, keep-with-next \ ??DataTable149: \ 00000000 6678231A DC32 0x1a237866 \ In segment CODE, align 4, keep-with-next \ ??DataTable153: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable154: \ 00000000 ........ DC32 PopupFont \ In segment CODE, align 4, keep-with-next \ ??DataTable155: \ 00000000 ........ DC32 NumStatusToIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable156: \ 00000000 ........ DC32 PopupBGCl \ In segment CODE, align 4, keep-with-next \ ??DataTable161: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable162: \ 00000000 ........ DC32 isLogStatusChange \ In segment CODE, align 4, keep-with-next \ ??DataTable163: \ 00000000 ........ DC32 extended_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable164: \ 00000000 ........ DC32 ext_type_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable165: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable167: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable170: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable171: \ 00000000 ........ DC32 main_count \ In segment CODE, align 4, keep-with-next \ ??DataTable174: \ 00000000 ........ DC32 process_active_timer \ In segment CODE, align 4, keep-with-next \ ??DataTable175: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable177: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable184: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable192: \ 00000000 ........ DC32 isSystemFont \ In segment CODE, align 4, keep-with-next \ ??DataTable193: \ 00000000 ........ DC32 pngFont \ In segment CODE, align 4, keep-with-next \ ??DataTable194: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable196: \ 00000000 ........ DC32 i_rc + 1108 \ In segment CODE, align 4, keep-with-next \ ??DataTable199: \ 00000000 ........ DC32 i_rc + 8980 \ In segment CODE, align 4, keep-with-next \ ??DataTable200: \ 00000000 ........ DC32 PNG_SOFTKEY \ In segment CODE, align 4, keep-with-next \ ??DataTable202: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable203: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable204: \ 00000000 ........ DC32 PNG_HEADER \ In segment CODE, align 4, keep-with-next \ ??DataTable205: \ 00000000 ........ DC32 HeadFont \ In segment CODE, align 4, keep-with-next \ ??DataTable208: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable210: \ 00000000 ........ DC32 pngFont \ In segment CODE, align 4, keep-with-next \ ??DataTable217: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable221: \ 00000000 ........ DC32 LINE_MODE \ In segment CODE, align 4, keep-with-next \ ??DataTable222: \ 00000000 ........ DC32 isLogStatusChange \ In segment CODE, align 4, keep-with-next \ ??DataTable223: \ 00000000 ........ DC32 isSystemFont \ In segment CODE, align 4, keep-with-next \ ??DataTable224: \ 00000000 ........ DC32 VIEW_MODE \ In segment CODE, align 4, keep-with-next \ ??DataTable230: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable232: \ 00000000 ........ DC32 VIEW_MODE \ In segment CODE, align 4, keep-with-next \ ??DataTable233: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable235: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable237: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable239: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable240: \ 00000000 ........ DC32 isSystemFont \ In segment CODE, align 4, keep-with-next \ ??DataTable241: \ 00000000 ........ DC32 pngFont \ In segment CODE, align 4, keep-with-next \ ??DataTable244: \ 00000000 ........ DC32 IsInvertSoftKey \ In segment CODE, align 4, keep-with-next \ ??DataTable247: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable248: \ 00000000 ........ DC32 LINE_MODE \ In segment CODE, align 4, keep-with-next \ ??DataTable249: \ 00000000 ........ DC32 VIEW_MODE \ In segment CODE, align 4, keep-with-next \ ??DataTable251: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable253: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable254: \ 00000000 ........ DC32 process_active_timer \ In segment CODE, align 4, keep-with-next \ ??DataTable255: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable258: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable259: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable261: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable263: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable264: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable266: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable267: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable269: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable272: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable273: \ 00000000 ........ DC32 showAwayIdle \ In segment CODE, align 4, keep-with-next \ ??DataTable274: \ 00000000 ........ DC32 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable276: \ 00000000 ........ DC32 suc_config_name_mod \ In segment CODE, align 4, keep-with-next \ ??DataTable284: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable285: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable286: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable287: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable289: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable290: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable291: \ 00000000 ........ DC32 ClearSendQ \ In segment CODE, align 4, keep-with-next \ ??DataTable293: \ 00000000 ........ DC32 ShowStatusIcon \ In segment CODE, align 4, keep-with-next \ ??DataTable294: \ 00000000 ........ DC32 NumStatusToIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable295: \ 00000000 ........ DC32 show_xstatus \ In segment CODE, align 4, keep-with-next \ ??DataTable296: \ 00000000 6678231A DC32 0x1a237866 \ In segment CODE, align 4, keep-with-next \ ??DataTable300: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable301: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable302: \ 00000000 ........ DC32 suc_config_name \ In segment CODE, align 4, keep-with-next \ ??DataTable303: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable304: \ 00000000 ........ DC32 fontpath \ In segment CODE, align 4, keep-with-next \ ??DataTable305: \ 00000000 ........ DC32 fontpath2 \ In segment CODE, align 4, keep-with-next \ ??DataTable306: \ 00000000 ........ DC32 fontpath3 \ In segment CODE, align 4, keep-with-next \ ??DataTable307: \ 00000000 ........ DC32 fontpath4 \ In segment CODE, align 4, keep-with-next \ ??DataTable308: \ 00000000 ........ DC32 isSystemFont \ In segment CODE, align 4, keep-with-next \ ??DataTable309: \ 00000000 ........ DC32 pngFont \ In segment CODE, align 4, keep-with-next \ ??DataTable310: \ 00000000 ........ DC32 PNG_SOFTKEY \ In segment CODE, align 4, keep-with-next \ ??DataTable311: \ 00000000 ........ DC32 PNG_HEADER \ In segment CODE, align 4, keep-with-next \ ??DataTable312: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable313: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable314: \ 00000000 ........ DC32 Pinger2 \ In segment CODE, align 4, keep-with-next \ ??DataTable315: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable317: \ 00000000 ........ DC32 i_rc + 1028 \ In segment CODE, align 4, keep-with-next \ ??DataTable318: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable319: \ 00000000 ........ DC32 IsMultiBuffer \ In segment CODE, align 4, keep-with-next \ ??DataTable321: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable322: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable324: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable326: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable329: \ 00000000 ........ DC32 main2_count \ In segment CODE, align 4, keep-with-next \ ??DataTable330: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable331: \ 00000000 ........ DC32 IsMultiBuffer \ In segment CODE, align 4, keep-with-next \ ??DataTable334: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable335: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable336: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable337: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable338: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable341: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable342: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable345: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable346: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable349: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable351: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable352: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable353: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable354: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable356: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable362: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable363: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable364: \ 00000000 ........ DC32 i_rc + 988 \ In segment CODE, align 4, keep-with-next \ ??DataTable365: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable366: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable367: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable368: \ 00000000 ........ DC32 i_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable369: \ 00000000 ........ DC32 GetTags \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00000008 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000018 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000028 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000038 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000048 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000058 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000068 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000078 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000000000 \ 0000 \ `?`: \ 0000008C ............ DC32 maincsm_onmessage, maincsm_oncreate, 0, 0, 0, 0, maincsm_onclose \ ....00000000 \ 000000000000 \ 000000000000 \ ........ \ 000000A8 2C0000000100 DC32 44, 1, minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ 0000........ \ ........CCCC \ AA5555AA3333 \ 00000000 \ 000000C4 8B00 DC16 139 \ 000000C6 0000 DC8 0, 0 \ 000000C8 49636F6E4261 DC8 "IconBar" \ 7200 \ 000000D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000000E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000100 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000110 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000120 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000130 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000140 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000150 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000160 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000170 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000180 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000190 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000200 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000210 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000220 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000230 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000240 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000250 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000260 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000270 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000000000 \ 0000 \ `?`: \ 00000284 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00000290 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000294 00000000 DC32 0 \ `?`: \ 00000298 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000029C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002A4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002A8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002AC 00000000 DC32 0 \ `?`: \ 000002B0 00000000 DC32 0 \ `?`: \ 000002B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002D4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002D8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002DC 00000000 DC32 0 \ `?`: \ 000002E0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002E4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000308 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000318 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000328 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000338 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000348 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000358 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000368 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00000370 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000374 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000378 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000037C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000380 00000000 DC32 0 \ `?`: \ 00000384 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000388 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000038C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000390 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000394 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000398 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000039C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003A4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003A8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003AC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003D4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003D8 F6FFFFFF DC32 -10 \ `?`: \ 000003DC 00000000 DC32 0 \ `?`: \ 000003E0 FFFFFFFF DC32 -1 \ `?`: \ 000003E4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003E8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003EC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003F4 00000000 DC32 0 \ `?`: \ 000003F8 00000000 DC32 0H \ `?`: \ 000003FC 01000000 DC32 1 \ `?`: \ 00000400 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000404 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000408 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000040C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000410 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000414 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000418 00000000 DC32 0 \ `?`: \ 0000041C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000420 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000424 00000000 DC32 0 \ `?`: \ 00000428 03000000 DC32 3 \ `?`: \ 0000042C 00000000 DC32 0 \ `?`: \ 00000430 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000434 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000438 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000043C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000440 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000444 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000448 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000044C 01000000 DC32 1 \ `?`: \ 00000450 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000454 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000458 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000045C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000460 01000000 DC32 1 \ `?`: \ 00000464 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000468 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000046C 01000000 DC32 1 \ `?`: \ 00000470 00000000 DC32 0 \ `?`: \ 00000474 00000000 DC32 0 \ `?`: \ 00000478 FFFFFFFF DC32 -1 \ `?`: \ 0000047C 00000000 DC32 0 \ `?`: \ 00000480 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000484 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000488 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000498 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000004C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000508 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000518 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000528 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000538 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000548 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000558 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000568 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000578 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000588 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000598 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000005C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000005E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000608 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000618 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000628 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000638 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000648 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000658 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000668 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000678 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000688 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000698 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000006E8 ............ DC32 RqtXText, ChangeVibraContact, ChangeSoundContact, ChangeAutoMsg \ ............ \ ........ \ 000006F8 ............ DC32 ChangeShowXstatus, ChangeAccess, ChangeAwaySignal \ ............ \ 00000704 ............ DC32 ChangeLoadHistory, ChangeAutobot \ .... \ 0000070C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000710 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000720 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000730 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000740 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000750 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000760 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000770 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000780 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000790 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000007D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000800 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000810 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000820 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000830 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000840 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000850 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000860 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000870 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000880 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000890 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000900 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000910 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000920 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000930 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000940 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000950 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000960 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000970 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000980 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000990 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ED0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001000 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001010 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001020 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001030 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001040 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001050 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001060 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001070 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001080 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001090 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001100 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001110 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001120 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001130 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001140 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001150 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001160 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001170 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001180 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001190 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001200 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001210 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001220 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001230 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001240 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001250 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001260 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001270 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001280 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001290 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001300 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001310 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001320 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001330 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001340 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001350 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001360 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001370 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001380 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001390 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001400 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001410 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001420 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001430 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001440 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001450 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001460 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001470 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001480 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001490 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001500 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001510 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001520 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001530 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001540 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001550 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001560 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001570 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001580 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001590 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001600 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001610 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001620 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001630 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001640 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001650 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001660 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001670 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001680 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001690 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001700 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001710 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001720 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001730 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001740 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001750 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001760 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001770 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001780 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001790 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000017D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001800 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001810 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001820 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001830 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001840 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001850 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001860 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001870 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001880 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001890 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001900 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001910 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001920 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001930 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001940 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001950 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001960 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001970 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001980 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001990 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000019E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000019F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00001AF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001B38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001B48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001B58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001B68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001B78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001B88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001B98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001BA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001C28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001C38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001D38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001E38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001E48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001E58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001E68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001E78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001E88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001ED8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001F08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001F88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002008 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00002014 257325642E25 DC8 "%s%d.%s" \ 7300 \ `?`: \ 0000201C 6D703300 DC8 "mp3" \ `?`: \ 00002020 77617600 DC8 "wav" \ `?`: \ 00002024 616D7200 DC8 "amr" \ `?`: \ 00002028 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002038 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002048 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002058 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002068 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002078 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002088 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002098 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000020A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000020B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000020C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000020D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000020E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000020F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002108 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002118 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002128 53656E64696E DC8 "Sending online time..." \ 67206F6E6C69 \ 6E652074696D \ 652E2E2E00 \ 0000213F 00 DC8 0 \ `?`: \ 00002140 53656E64696E DC8 "Sending msg info..." \ 67206D736720 \ 696E666F2E2E \ 2E00 \ `?`: \ 00002154 53656E64696E DC8 "Sending battery info..." \ 672062617474 \ 65727920696E \ 666F2E2E2E00 \ `?`: \ 0000216C 53656E64696E DC8 "Sending mod info..." \ 67206D6F6420 \ 696E666F2E2E \ 2E00 \ `?`: \ 00002180 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002190 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000021A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000021B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000021C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000021D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000021E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000021F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002200 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002210 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002220 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002230 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002240 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002250 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002260 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002270 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002280 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00002288 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002298 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000022A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000022B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000022C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000022D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000022E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000022F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002308 00000064 DC8 0, 0, 0, 100 \ `?`: \ 0000230C FFFFFF64 DC8 255, 255, 255, 100 \ `?`: \ 00002310 FF000064 DC8 255, 0, 0, 100 \ `?`: \ 00002314 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00002318 0000FF6400 DC8 0, 0, 0FFH, 64H, 0 \ 0000231D 000000 DC8 0, 0, 0 \ `?`: \ 00002320 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002330 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002340 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002350 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002360 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 FF0F0000 DC16 4095, 0 \ 00000004 ........ DC32 `?`: \ 00000000 18000000 DC16 24, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 ........0000 DC32 input_awaymsg_sk, 0 \ 0000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000008 000000000000 DC32 0H, 0, 2147483647 \ 0000FFFFFF7F \ `?`: \ 00000014 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000018 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000001C 00000000 DC32 0 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 53656E64696E DC8 "Sending offline info..." \ 67206F66666C \ 696E6520696E \ 666F2E2E2E00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 253032643A25 DC8 "%02d:%02d" \ 30326400 \ 0000000A 0000 DC8 0, 0 \ 0000000C 2820CEF2F1F3 DC8 "( \316\362\361\363\362\361\362\342\363\376 \357\360\350\354\345\360\355\356 \361 %02d:%02d [%s] )" \ F2F1F2E2F3FE \ 20EFF0E8ECE5 \ F0EDEE20F120 \ 253032643A25 \ 303264205B25 \ 735D202900 \ 00000035 000000 DC8 0, 0, 0 \ 00000038 2820CDE5E4EE DC8 "( \315\345\344\356\361\362\363\357\345\355 \357\360\350\354\345\360\355\356 \361 %02d:%02d [%s] )" \ F1F2F3EFE5ED \ 20EFF0E8ECE5 \ F0EDEE20F120 \ 253032643A25 \ 303264205B25 \ 735D202900 \ 00000061 000000 DC8 0, 0, 0 \ 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 417761792066 DC8 "Away from [%s]" \ 726F6D205B25 \ 735D00 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5C25642E7478 DC8 "\\%d.txt" \ 7400 \ 00000008 5C302E747874 DC8 "\\0.txt" \ 00 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5C626F745F25 DC8 "\\bot_%d.txt" \ 642E74787400 \ 0000000C 5C626F742E74 DC8 "\\bot.txt" \ 787400 \ 00000015 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5C6C6F63616C DC8 "\\local.cl" \ 2E636C00 \ 0000000A 0000 DC8 0, 0 \ 0000000C 3B25643B2573 DC8 ";%d;%s;;;\015\012" \ 3B3B3B0D0A00 \ 00000018 536176656420 DC8 "Saved local.cl" \ 6C6F63616C2E \ 636C00 \ 00000027 00 DC8 0 \ 00000028 43616E277420 DC8 "Can't save local.cl" \ 73617665206C \ 6F63616C2E63 \ 6C00 \ In segment DATA_C, align 1, align-sorted \ 00000000 0A00 DC8 "\012" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 73656E642072 DC8 "send res %d" \ 657320256400 \ 0000000C 53656E642064 DC8 "Send delayed..." \ 656C61796564 \ 2E2E2E00 \ 0000001C 53656E642065 DC8 "Send error!" \ 72726F722100 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5369655F2530 DC8 "Sie_%04d" \ 346400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 257300 DC8 "%s" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25733A202573 DC8 "%s: %s" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 253032643A25 DC8 "%02d:%02d:%02d %02d.%02d %s:\015\012" \ 3032643A2530 \ 326420253032 \ 642E25303264 \ 2025733A0D0A \ 00 \ 0000001F 00 DC8 0 \ 00000020 253032643A25 DC8 "%02d:%02d:%02d %02d.%02d %s:" \ 3032643A2530 \ 326420253032 \ 642E25303264 \ 2025733A00 \ 0000003D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5C636D642E74 DC8 "\\cmd.txt" \ 787400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CEF2EAEBFEF7 DC8 "\316\362\352\353\376\367\345\355" \ E5ED00 \ 00000009 000000 DC8 0, 0, 0 \ 0000000C CDE5E2E8E4E8 DC8 "\315\345\342\350\344\350\354\373\351" \ ECFBE900 \ 00000016 0000 DC8 0, 0 \ 00000018 CEF2F1F3F2F1 DC8 "\316\362\361\363\362\361\342\363\345\362" \ E2F3E5F200 \ 00000023 00 DC8 0 \ 00000024 CDE520E4EEF1 DC8 "\315\345 \344\356\361\362\363\357\345\355" \ F2F3EFE5ED00 \ 00000030 C7E0EDFFF200 DC8 "\307\340\355\377\362" \ 00000036 0000 DC8 0, 0 \ 00000038 CDE520E1E5F1 DC8 "\315\345 \341\345\361\357\356\352\356\350\362\374" \ EFEEEAEEE8F2 \ FC00 \ 00000046 0000 DC8 0, 0 \ 00000048 C4E5EFF0E5F1 DC8 "\304\345\357\360\345\361\361\350\377" \ F1E8FF00 \ 00000052 0000 DC8 0, 0 \ 00000054 C7EBEEE900 DC8 "\307\353\356\351" \ 00000059 000000 DC8 0, 0, 0 \ 0000005C C4EEECE000 DC8 "\304\356\354\340" \ 00000061 000000 DC8 0, 0, 0 \ 00000064 D0E0E1EEF2E0 DC8 "\320\340\341\356\362\340" \ 00 \ 0000006B 00 DC8 0 \ 0000006C C220F1E5F2E8 DC8 "\302 \361\345\362\350" \ 00 \ 00000073 00 DC8 0 \ 00000074 C3EEF2EEE220 DC8 "\303\356\362\356\342 \341\356\353\362\340\362\374" \ E1EEEBF2E0F2 \ FC00 \ 00000082 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ 00000000 C6F0F300 DC8 "\306\360\363" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6D6F64206279 DC8 6DH, 6FH, 64H, 20H, 62H, 79H, 20H, 45H \ 2045 \ 00000008 76696C666F78 DC8 76H, 69H, 6CH, 66H, 6FH, 78H, 2CH, 6BH \ 2C6B \ 00000010 6C7563686E69 DC8 6CH, 75H, 63H, 68H, 6EH, 69H, 6BH, 2CH \ 6B2C \ 00000018 77696E646573 DC8 77H, 69H, 6EH, 64H, 65H, 73H, 20H, 62H \ 2062 \ 00000020 61736564206F DC8 61H, 73H, 65H, 64H, 20H, 6FH, 6EH, 20H \ 6E20 \ 00000028 726576697369 DC8 72H, 65H, 76H, 69H, 73H, 69H, 6FH, 6EH \ 6F6E \ 00000030 20323035382C DC8 20H, 32H, 30H, 35H, 38H, 2CH, 20H, 6DH \ 206D \ 00000038 6F6420646174 DC8 6FH, 64H, 20H, 64H, 61H, 74H, 65H, 3AH \ 653A \ 00000040 204A756C6520 DC8 20H, 4AH, 75H, 6CH, 65H, 20H, 31H, 33H \ 3133 \ 00000048 203230303820 DC8 20H, 32H, 30H, 30H, 38H, 20H, 61H, 74H \ 6174 \ 00000050 2031343A3033 DC8 20H, 31H, 34H, 3AH, 30H, 33H, 3AH, 35H \ 3A35 \ 00000058 3900 DC8 39H, 0 \ 0000005A 0000 DC8 0, 0 \ 0000005C 2573206D6F64 DC8 "%s model: %s sw: %s\015\012" \ 656C3A202573 \ 2073773A2025 \ 730D0A00 \ 00000072 0000 DC8 0, 0 \ 00000074 506C6174666F DC8 "Platform: \250LKA" \ 726D3A20A84C \ 4B4100 \ 00000083 00 DC8 0 \ 00000084 C2F0E5ECFF20 DC8 0C2H, 0F0H, 0E5H, 0ECH, 0FFH, 20H, 0E2H, 20H \ E220 \ 0000008C EEEDEBE0E9ED DC8 0EEH, 0EDH, 0EBH, 0E0H, 0E9H, 0EDH, 3AH, 20H \ 3A20 \ 00000094 253032643A25 DC8 25H, 30H, 32H, 64H, 3AH, 25H, 30H, 32H \ 3032 \ 0000009C 643A25303264 DC8 64H, 3AH, 25H, 30H, 32H, 64H, 20H, 0DH \ 200D \ 000000A4 0AD1E5F0E2E5 DC8 0AH, 0D1H, 0E5H, 0F0H, 0E2H, 0E5H, 0F0H, 3AH \ F03A \ 000000AC 202573200D0A DC8 20H, 25H, 73H, 20H, 0DH, 0AH, 25H, 73H \ 2573 \ 000000B4 200D0A00 DC8 20H, 0DH, 0AH, 0 \ 000000B8 CEF2EFF0E0E2 DC8 0CEH, 0F2H, 0EFH, 0F0H, 0E0H, 0E2H, 0EBH, 0E5H \ EBE5 \ 000000C0 EDEE20F1EEEE DC8 0EDH, 0EEH, 20H, 0F1H, 0EEH, 0EEH, 0E1H, 0F9H \ E1F9 \ 000000C8 E5EDE8E93A20 DC8 0E5H, 0EDH, 0E8H, 0E9H, 3AH, 20H, 25H, 64H \ 2564 \ 000000D0 200D0ACFF0E8 DC8 20H, 0DH, 0AH, 0CFH, 0F0H, 0E8H, 0EDH, 0FFH \ EDFF \ 000000D8 F2EE20F1EEEE DC8 0F2H, 0EEH, 20H, 0F1H, 0EEH, 0EEH, 0E1H, 0F9H \ E1F9 \ 000000E0 E5EDE8E93A20 DC8 0E5H, 0EDH, 0E8H, 0E9H, 3AH, 20H, 25H, 64H \ 2564 \ 000000E8 200D0A00 DC8 20H, 0DH, 0AH, 0 \ 000000EC CEEFE5F0E0F2 DC8 "\316\357\345\360\340\362\356\360: %s \015\012" \ EEF03A202573 \ 200D0A00 \ 000000FC 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 \ 0000011B 00 DC8 0 \ 0000011C 547261666669 DC8 54H, 72H, 61H, 66H, 66H, 69H, 63H, 3AH \ 633A \ 00000124 205278203A20 DC8 20H, 52H, 78H, 20H, 3AH, 20H, 25H, 64H \ 2564 \ 0000012C 62205478203A DC8 62H, 20H, 54H, 78H, 20H, 3AH, 20H, 25H \ 2025 \ 00000134 646220517565 DC8 64H, 62H, 20H, 51H, 75H, 65H, 75H, 65H \ 7565 \ 0000013C 3A2025646220 DC8 3AH, 20H, 25H, 64H, 62H, 20H, 0DH, 0AH \ 0D0A \ 00000144 54696D653A20 DC8 54H, 69H, 6DH, 65H, 3AH, 20H, 25H, 30H \ 2530 \ 0000014C 32643A253032 DC8 32H, 64H, 3AH, 25H, 30H, 32H, 64H, 0DH \ 640D \ 00000154 0A4F6E6C696E DC8 0AH, 4FH, 6EH, 6CH, 69H, 6EH, 65H, 20H \ 6520 \ 0000015C 636F6E746163 DC8 63H, 6FH, 6EH, 74H, 61H, 63H, 74H, 3AH \ 743A \ 00000164 202564205B74 DC8 20H, 25H, 64H, 20H, 5BH, 74H, 6FH, 74H \ 6F74 \ 0000016C 616C3A202564 DC8 61H, 6CH, 3AH, 20H, 25H, 64H, 5DH, 20H \ 5D20 \ 00000174 0D0A556E7265 DC8 0DH, 0AH, 55H, 6EH, 72H, 65H, 61H, 64H \ 6164 \ 0000017C 206D65737361 DC8 20H, 6DH, 65H, 73H, 73H, 61H, 67H, 65H \ 6765 \ 00000184 3A2025642F25 DC8 3AH, 20H, 25H, 64H, 2FH, 25H, 64H, 20H \ 6420 \ 0000018C 00 DC8 0 \ 0000018D 000000 DC8 0, 0, 0 \ 00000190 53656E64696E DC8 "Sending textinfo..." \ 672074657874 \ 696E666F2E2E \ 2E00 \ 000001A4 5F5F54455854 DC8 "__TEXTINFO" \ 494E464F00 \ 000001AF 00 DC8 0 \ 000001B0 5F5F544900 DC8 "__TI" \ 000001B5 000000 DC8 0, 0, 0 \ 000001B8 54696D653A20 DC8 "Time: %02d:%02d" \ 253032643A25 \ 30326400 \ 000001C8 53656E64696E DC8 "Sending time..." \ 672074696D65 \ 2E2E2E00 \ 000001D8 5F5F54494D45 DC8 "__TIME" \ 00 \ 000001DF 00 DC8 0 \ 000001E0 4745545F5449 DC8 "GET_TIME" \ 4D4500 \ 000001E9 000000 DC8 0, 0, 0 \ 000001EC 2573206D6F64 DC8 "%s model: %s sw: %s" \ 656C3A202573 \ 2073773A2025 \ 7300 \ 00000200 53656E64696E DC8 "Sending platform info..." \ 6720706C6174 \ 666F726D2069 \ 6E666F2E2E2E \ 00 \ 00000219 000000 DC8 0, 0, 0 \ 0000021C 4745545F504C DC8 "GET_PLATFORM_INFO" \ 4154464F524D \ 5F494E464F00 \ 0000022E 0000 DC8 0, 0 \ 00000230 5F5F504C4154 DC8 "__PLATFORM" \ 464F524D00 \ 0000023B 00 DC8 0 \ 0000023C 5F5F485700 DC8 "__HW" \ 00000241 000000 DC8 0, 0, 0 \ 00000244 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 \ 0000026F 00 DC8 0 \ 00000270 4745545F4F4E DC8 "GET_ONLINE_TIME" \ 4C494E455F54 \ 494D4500 \ 00000280 5F5F4F4E4C49 DC8 "__ONLINE" \ 4E4500 \ 00000289 000000 DC8 0, 0, 0 \ 0000028C 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 \ 000002BC 4745545F4D53 DC8 "GET_MSG_INFO" \ 475F494E464F \ 00 \ 000002C9 000000 DC8 0, 0, 0 \ 000002CC 5F5F4D534700 DC8 "__MSG" \ 000002D2 0000 DC8 0, 0 \ 000002D4 CEEFE5F0E0F2 DC8 "\316\357\345\360\340\362\356\360: %s" \ EEF03A202573 \ 00 \ 000002E1 000000 DC8 0, 0, 0 \ 000002E4 53656E64696E DC8 "Sending provider name..." \ 672070726F76 \ 69646572206E \ 616D652E2E2E \ 00 \ 000002FD 000000 DC8 0, 0, 0 \ 00000300 4745545F5052 DC8 "GET_PROVIDER" \ 4F5649444552 \ 00 \ 0000030D 000000 DC8 0, 0, 0 \ 00000310 5F5F50524F56 DC8 "__PROVIDER" \ 4944455200 \ 0000031B 00 DC8 0 \ 0000031C 2A2A2A416363 DC8 "***Access denied***" \ 657373206465 \ 6E6965642A2A \ 2A00 \ 00000330 4745545F4D4F DC8 "GET_MOD_INFO" \ 445F494E464F \ 00 \ 0000033D 000000 DC8 0, 0, 0 \ 00000340 5F5F4D4F4400 DC8 "__MOD" \ 00000346 0000 DC8 0, 0 \ 00000348 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 \ 00000364 4745545F4241 DC8 "GET_BAT_INFO" \ 545F494E464F \ 00 \ 00000371 000000 DC8 0, 0, 0 \ 00000374 5F5F42415400 DC8 "__BAT" \ 0000037A 0000 DC8 0, 0 \ 0000037C C0E2F2EEEEF2 DC8 "\300\342\362\356\356\362\342\345\362\367\350\352: %s %s! %s %s" \ E2E5F2F7E8EA \ 3A2025732025 \ 732120257320 \ 257300 \ 00000397 00 DC8 0 \ 00000398 726576697369 DC8 "revision 2058, mod date: %s at %s " \ 6F6E20323035 \ 382C206D6F64 \ 20646174653A \ 202573206174 \ 2025732000 \ 000003BB 00 DC8 0 \ 000003BC 687474703A2F DC8 "http://kluchnik.jino-net.ru/naticqmod/" \ 2F6B6C756368 \ 6E696B2E6A69 \ 6E6F2D6E6574 \ 2E72752F6E61 \ 746963716D6F \ 642F00 \ 000003E3 00 DC8 0 \ 000003E4 536570203233 DC8 "Sep 23 2008" \ 203230303800 \ 000003F0 31343A33333A DC8 "14:33:20" \ 323000 \ 000003F9 000000 DC8 0, 0, 0 \ 000003FC 53656E64696E DC8 "Sending url info..." \ 672075726C20 \ 696E666F2E2E \ 2E00 \ 00000410 4745545F5552 DC8 "GET_URL_INFO" \ 4C5F494E464F \ 00 \ 0000041D 000000 DC8 0, 0, 0 \ 00000420 5F5F55524C00 DC8 "__URL" \ 00000426 0000 DC8 0, 0 \ 00000428 4175746F626F DC8 "Autobot" \ 7400 \ In segment DATA_C, align 4, align-sorted \ 00000000 5F5F5400 DC8 "__T" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 B0B5041C0025 DC8 176, 181, 4, 28, 0, 37, 5, 97 \ 0561 \ In segment DATA_C, align 4, align-sorted \ `?_1`: \ 00000000 B0B5041C0025 DC8 176, 181, 4, 28, 0, 37, 5, 97 \ 0561 \ In segment DATA_C, align 1, align-sorted \ 00000000 3A0A00 DC8 ":\012" \ 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 0000004000 DC8 0, 0, 0, 40H, 0 \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CCE5EDFE00 DC8 "\314\345\355\376" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5B415D202573 DC8 "[A] %s" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?_1`: \ 00000000 5B565D00 DC8 "[V]" \ In segment DATA_C, align 4, align-sorted \ `?_1`: \ 00000000 5B535D00 DC8 "[S]" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 70696E67322E DC8 "ping2.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4E4154494351 DC8 "NATICQ: %d" \ 3A20256400 \ 0000000B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 43ECE0E9EBFB DC8 "C\354\340\351\353\373" \ 00 \ 00000007 00 DC8 0 \ 00000008 C220E1F3F4E5 DC8 "\302 \341\363\364\345\360" \ F000 \ 00000010 C8E720E1F3F4 DC8 "\310\347 \341\363\364\345\360\340" \ E5F0E000 \ 0000001A 0000 DC8 0, 0 \ 0000001C CAEEECE0EDE4 DC8 "\312\356\354\340\355\344\340" \ E000 \ 00000024 CEF7E8F1F2E8 DC8 "\316\367\350\361\362\350\362\374 \341\363\364\345\360" \ F2FC20E1F3F4 \ E5F000 \ 00000033 00 DC8 0 \ 00000034 D1EBE5E4F3FE DC8 "\321\353\345\344\363\376\371\350\351 \367\340\362" \ F9E8E920F7E0 \ F200 \ 00000042 0000 DC8 0, 0 \ 00000044 CFF0E5E4FBE4 DC8 "\317\360\345\344\373\344\363\371\350\351 \367\340\362" \ F3F9E8E920F7 \ E0F200 \ 00000053 00 DC8 0 \ 00000054 CAEEECE0EDE4 DC8 "\312\356\354\340\355\344\373" \ FB00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 616263646566 DC8 61H, 62H, 63H, 64H, 65H, 66H, 67H, 68H \ 6768 \ 00000008 696A6B6C6D6E DC8 69H, 6AH, 6BH, 6CH, 6DH, 6EH, 6FH, 70H \ 6F70 \ 00000010 717273747576 DC8 71H, 72H, 73H, 74H, 75H, 76H, 77H, 78H \ 7778 \ 00000018 797A41424344 DC8 79H, 7AH, 41H, 42H, 43H, 44H, 45H, 46H \ 4546 \ 00000020 4748494A4B4C DC8 47H, 48H, 49H, 4AH, 4BH, 4CH, 4DH, 4EH \ 4D4E \ 00000028 4F5051525354 DC8 4FH, 50H, 51H, 52H, 53H, 54H, 55H, 56H \ 5556 \ 00000030 5758595A3031 DC8 57H, 58H, 59H, 5AH, 30H, 31H, 32H, 33H \ 3233 \ 00000038 343536373839 DC8 34H, 35H, 36H, 37H, 38H, 39H, 24H, 2DH \ 242D \ 00000040 5F2E2B212A27 DC8 5FH, 2EH, 2BH, 21H, 2AH, 27H, 28H, 29H \ 2829 \ 00000048 2C253B3A4026 DC8 2CH, 25H, 3BH, 3AH, 40H, 26H, 3DH, 2FH \ 3D2F \ 00000050 3FE0E1E2E3E4 DC8 3FH, 0E0H, 0E1H, 0E2H, 0E3H, 0E4H, 0E5H, 0B8H \ E5B8 \ 00000058 E6E7E8E9EAEB DC8 0E6H, 0E7H, 0E8H, 0E9H, 0EAH, 0EBH, 0ECH, 0EDH \ ECED \ 00000060 EEEFF0F1F2F3 DC8 0EEH, 0EFH, 0F0H, 0F1H, 0F2H, 0F3H, 0F4H, 0F5H \ F4F5 \ 00000068 F6F7F8F9FAFB DC8 0F6H, 0F7H, 0F8H, 0F9H, 0FAH, 0FBH, 0FCH, 0FDH \ FCFD \ 00000070 FEFFC0C1C2C3 DC8 0FEH, 0FFH, 0C0H, 0C1H, 0C2H, 0C3H, 0C4H, 0C5H \ C4C5 \ 00000078 A8C6C7C8C9CA DC8 0A8H, 0C6H, 0C7H, 0C8H, 0C9H, 0CAH, 0CBH, 0CCH \ CBCC \ 00000080 CDCECFD0D1D2 DC8 0CDH, 0CEH, 0CFH, 0D0H, 0D1H, 0D2H, 0D3H, 0D4H \ D3D4 \ 00000088 D5D6D7D8D9DA DC8 0D5H, 0D6H, 0D7H, 0D8H, 0D9H, 0DAH, 0DBH, 0DCH \ DBDC \ 00000090 DDDEDF00 DC8 0DDH, 0DEH, 0DFH, 0 \ 00000094 687474703A2F DC8 "http://" \ 2F00 \ 0000009C 7777772E00 DC8 "www." \ 000000A1 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4D6573736167 DC8 "Message add to buffer" \ 652061646420 \ 746F20627566 \ 66657200 \ 00000016 0000 DC8 0, 0 \ 00000018 25735C746D70 DC8 "%s\\tmp%u.url" \ 25752E75726C \ 00 \ 00000025 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 526571756573 DC8 "Request info..." \ 7420696E666F \ 2E2E2E00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25735C25755C DC8 "%s\\%u\\%s(%d).txt" \ 257328256429 \ 2E74787400 \ 00000011 000000 DC8 0, 0, 0 \ 00000014 25735C257328 DC8 "%s\\%s(%d).txt" \ 2564292E7478 \ 7400 \ 00000022 0000 DC8 0, 0 \ 00000024 25735C25755C DC8 "%s\\%u\\%u.txt" \ 25752E747874 \ 00 \ 00000031 000000 DC8 0, 0, 0 \ 00000034 25735C25752E DC8 "%s\\%u.txt" \ 74787400 \ 0000003E 0000 DC8 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 257500 DC8 "%u" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F66666C696E DC8 "offline.png" \ 652E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 696E76697369 DC8 "invisible.png" \ 626C652E706E \ 6700 \ 0000000E 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 617761792E70 DC8 "away.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6E612E706E67 DC8 "na.png" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F6363757069 DC8 "occupied.png" \ 65642E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 646E642E706E DC8 "dnd.png" \ 6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 646570726573 DC8 "depression.png" \ 73696F6E2E70 \ 6E6700 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6576696C2E70 DC8 "evil.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 686F6D652E70 DC8 "home.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6C756E63682E DC8 "lunch.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 776F726B2E70 DC8 "work.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F6E6C696E65 DC8 "online.png" \ 2E706E6700 \ 0000000B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6666632E706E DC8 "ffc.png" \ 6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6D6573736167 DC8 "message.png" \ 652E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 756E6B6E6F77 DC8 "unknown.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupon.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupoff.png" \ 66662E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6E756C6C2E70 DC8 "null.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 616464636F6E DC8 "addcont.png" \ 742E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 686561642E70 DC8 "head.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6C6F676F2E70 DC8 "logo.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 70696E672E70 DC8 "ping.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 73657474696E DC8 "settings.png" \ 67732E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973312E70 DC8 "vis1.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973322E70 DC8 "vis2.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973332E70 DC8 "vis3.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973342E70 DC8 "vis4.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973352E70 DC8 "vis5.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 70696E67312E DC8 "ping1.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 70696E67332E DC8 "ping3.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 70696E67342E DC8 "ping4.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 62672E706E67 DC8 "bg.png" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CBE5E200 DC8 "\313\345\342" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CFF0E0E200 DC8 "\317\360\340\342" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2FBE1EEF000 DC8 "\302\373\341\356\360" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7E0EAF0FBF2 DC8 "\307\340\352\360\373\362\374" \ FC00 \ In segment DATA_C, align 1, align-sorted \ `?`: \ 00000000 00 DC8 "" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2E8E1F0E000 DC8 "\302\350\341\360\340" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7E2F3EA00 DC8 "\307\342\363\352" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 41E2F2EEE1EE DC8 "A\342\362\356\341\356\362" \ F200 \ In segment DATA_C, align 4, align-sorted \ `? 236 def_setting 48 ? 56 menusoftkeys 12 menu_sk 24 menu_skt 8 CmdSoftkeys 12 cmd_sk 24 cmd_Back_skt 8 ? 76 menutext 84 clrSelect 4 fntSelect 4 bordSelect 4 clrNotSelect 4 bordNotSelect 4 fntNotSelect 4 I_gui_methods 44 _t 3 maincsm_oncreate 320 FreeTimers 252 maincsm_onclose 120 do_reconnect 40 CheckDoubleRun 104 checkGui 60 maincsm_onmessage 3368 addIconBar 680 minus11 4 maincsm_name_body 280 UpdateCSMname 36 SetIconBarHandler 20 main 592 edchat_locret 4 ExtractAnswer 280 ??FindNextActiveContact_0 64 FindPrevActiveContact 88 ed_options_handler 1204 wstrstr 124 IsUrl 424 ParseAnswer 548 SaveAnswer 36 GetTempName 172 DMonth 52 recon 52 edchat_onkey 1676 my_ed_redraw 116 edchat_ghook 564 edchat_desc 84 sk 16 CreateEditChat 1160 Quote 416 Quote2 440 GetShortInfo 168 AddCurContact 52 SendAuthReq 212 SendAuthGrant 208 OpenLogfile 228 ClearLog 240 ecmenu_ghook 20 ecmenu_ITEMS 252 ecmenu_HNDLS 36 i_rc 9072 sk 8 input_awaymsg_sk 24 input_awaymsg_skt 8 CmdMenuHeader 32 requests6 24 ecmenu_HDR 64 ec_menu 360 AskNickAndAddContact 8 AddSmile 24 ??DataTable1 4 ??DataTable2 4 ??DataTable7 4 ??DataTable8 4 ??DataTable10 4 ??DataTable16 4 ??DataTable19 4 ??DataTable21 4 ??DataTable25 4 ??DataTable26 4 ??DataTable27 4 ??DataTable30 4 ??DataTable31 4 ??DataTable33 4 ??DataTable36 4 ??DataTable44 4 ??DataTable45 4 ??DataTable47 4 ??DataTable53 4 ??DataTable56 4 ??DataTable64 4 ??DataTable66 4 ??DataTable71 4 ??DataTable73 4 ??DataTable74 4 ??DataTable75 4 ??DataTable76 4 ??DataTable78 4 ??DataTable80 4 ??DataTable81 4 ??DataTable82 4 ??DataTable86 4 ??DataTable88 4 ??DataTable89 4 ??DataTable91 4 ??DataTable92 4 ??DataTable93 4 ??DataTable94 4 ??DataTable95 4 ??DataTable96 4 ??DataTable97 4 ??DataTable99 4 ??DataTable101 4 ??DataTable102 4 ??DataTable103 4 ??DataTable104 4 ??DataTable114 4 ??DataTable115 4 ??DataTable116 4 ??DataTable118 4 ??DataTable119 4 ??DataTable120 4 ??DataTable121 4 ??DataTable122 4 ??DataTable123 4 ??DataTable124 4 ??DataTable125 4 ??DataTable131 4 ??DataTable134 4 ??DataTable136 4 ??DataTable137 4 ??DataTable138 4 ??DataTable140 4 ??DataTable143 4 ??DataTable144 4 ??DataTable145 4 ??DataTable146 4 ??DataTable147 4 ??DataTable148 4 ??DataTable149 4 ??DataTable153 4 ??DataTable154 4 ??DataTable155 4 ??DataTable156 4 ??DataTable161 4 ??DataTable162 4 ??DataTable163 4 ??DataTable164 4 ??DataTable165 4 ??DataTable167 4 ??DataTable170 4 ??DataTable171 4 ??DataTable174 4 ??DataTable175 4 ??DataTable177 4 ??DataTable184 4 ??DataTable192 4 ??DataTable193 4 ??DataTable194 4 ??DataTable196 4 ??DataTable199 4 ??DataTable200 4 ??DataTable202 4 ??DataTable203 4 ??DataTable204 4 ??DataTable205 4 ??DataTable208 4 ??DataTable210 4 ??DataTable217 4 ??DataTable221 4 ??DataTable222 4 ??DataTable223 4 ??DataTable224 4 ??DataTable230 4 ??DataTable232 4 ??DataTable233 4 ??DataTable235 4 ??DataTable237 4 ??DataTable239 4 ??DataTable240 4 ??DataTable241 4 ??DataTable244 4 ??DataTable247 4 ??DataTable248 4 ??DataTable249 4 ??DataTable251 4 ??DataTable253 4 ??DataTable254 4 ??DataTable255 4 ??DataTable258 4 ??DataTable259 4 ??DataTable261 4 ??DataTable263 4 ??DataTable264 4 ??DataTable266 4 ??DataTable267 4 ??DataTable269 4 ??DataTable272 4 ??DataTable273 4 ??DataTable274 4 ??DataTable276 4 ??DataTable284 4 ??DataTable285 4 ??DataTable286 4 ??DataTable287 4 ??DataTable289 4 ??DataTable290 4 ??DataTable291 4 ??DataTable293 4 ??DataTable294 4 ??DataTable295 4 ??DataTable296 4 ??DataTable300 4 ??DataTable301 4 ??DataTable302 4 ??DataTable303 4 ??DataTable304 4 ??DataTable305 4 ??DataTable306 4 ??DataTable307 4 ??DataTable308 4 ??DataTable309 4 ??DataTable310 4 ??DataTable311 4 ??DataTable312 4 ??DataTable313 4 ??DataTable314 4 ??DataTable315 4 ??DataTable317 4 ??DataTable318 4 ??DataTable319 4 ??DataTable321 4 ??DataTable322 4 ??DataTable324 4 ??DataTable326 4 ??DataTable329 4 ??DataTable330 4 ??DataTable331 4 ??DataTable334 4 ??DataTable335 4 ??DataTable336 4 ??DataTable337 4 ??DataTable338 4 ??DataTable341 4 ??DataTable342 4 ??DataTable345 4 ??DataTable346 4 ??DataTable349 4 ??DataTable351 4 ??DataTable352 4 ??DataTable353 4 ??DataTable354 4 ??DataTable356 4 ??DataTable362 4 ??DataTable363 4 ??DataTable364 4 ??DataTable365 4 ??DataTable366 4 ??DataTable367 4 ??DataTable368 4 ??DataTable369 4 ? 9072 ? 8 ? 24 ? 8 ? 32 ? 24 ? 100 ? 396 ? 16 ? 3 ? 16 ? 24 ? 60 ? 2 ? 40 ? 12 ? 3 ? 8 ? 64 ? 12 ? 132 ? 4 ? 1072 ? 4 ? 8 ?_1 8 ? 3 ? 8 ? 4 ? 4 ? 8 ? 8 ? 8 ?_1 4 ?_1 4 ? 12 ? 12 ? 92 ? 164 ? 40 ? 16 ? 64 ? 3 ? 12 ? 16 ? 12 ? 8 ? 16 ? 8 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 8 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 12 ? 12 ? 12 ? 8 ? 4 ? 8 ? 8 ? 8 ? 1 ? 8 ? 8 ? 8 ?