############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 06/Aug/2008 20:55:37 # # 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 --no_unroll --cpu_mode # # arm --endian little --cpu ARM926EJ-S --stack_align # # 4 --interwork -e --fpu None --dlib_config # # "D:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\LIB\dl5tpainl8n.h" -I # # "D:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\INC\" --inline_threshold=2 # # List file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\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" \ In segment CODE, align 4, keep-with-next \ __??Code32?? __code __interwork __atpcs void patch_header(HEADER_DESC const *) \ patch_header: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0000A0E3 MOV R0,#+0 \ 0000000C B000C4E1 STRH R0,[R4, #+0] \ 00000010 1800A0E3 MOV R0,#+24 \ 00000014 B200C4E1 STRH R0,[R4, #+2] \ 00000018 888100EF SWI +33160 \ 0000001C 010040E2 SUB R0,R0,#+1 \ 00000020 B400C4E1 STRH R0,[R4, #+4] \ 00000024 8A8100EF SWI +33162 \ 00000028 170080E2 ADD R0,R0,#+23 \ 0000002C B600C4E1 STRH R0,[R4, #+6] \ 00000030 1080BDE8 POP {R4,PC} ;; return 27 #include "addon.h" 28 29 extern int *XStatusesIconArray; 30 31 #ifndef NEWSGOLD 32 #define SEND_TIMER 33 #endif 34 35 #define IN_TICKS(sec) (sec * TMR_SECOND) 36 37 38 //------------- ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ -------------// 39 40 int main_d; 41 int align=0; 42 //int space=1; 43 void *canvasdata; 44 int paused_height; 45 WSHDR *wsBuffer;//мультибуффер 46 47 char talk_sound[128]; 48 int uins; 49 //char m_1[]="unofficial! private use only"; 50 //char m_2[]="mod by (c)Evilfox 315384924"; 51 char unread_msg_info[64]; 52 53 int saver_on; 54 55 #ifdef NEWSGOLD 56 extern char teast2[256]; 57 #endif 58 59 //#ifdef ELKA 60 char last_msg_buffer[4096]; 61 //#endif 62 63 //-------------------------------------------------// 64 65 66 67 //-------------------- AUTOPING -------------------// 68 69 GBSTMR ping_tmr; 70 static void PingToServer2(void) 71 { 72 TPKT *p; 73 p=malloc(sizeof(PKT)+sizeof(TTime)); 74 GetDateTime(NULL,(TTime *)p->data); 75 p->pkt.uin=0; 76 p->pkt.type=T_ECHO; 77 p->pkt.data_len=sizeof(TTime); 78 SUBPROC((void *)SendAnswer,0,p); 79 } 80 81 int Is_PING_On; 82 \ In segment CODE, align 4, keep-with-next 83 void Pinger2() 84 { 85 if(Is_PING_On) \ Pinger2: \ 00000000 ........ LDR R0,??DataTable34 ;; icons \ 00000004 70402DE9 PUSH {R4-R6,LR} \ 00000008 ........ LDR R5,??DataTable1 ;; Pinger2 \ 0000000C 3C10A0E3 MOV R1,#+60 \ 00000010 581D81E3 ORR R1,R1,#0x1600 \ 00000014 004081E0 ADD R4,R1,R0 \ 00000018 E40290E5 LDR R0,[R0, #+740] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1500000A BEQ ??Pinger2_0 86 { 87 PingToServer2(); \ 00000024 1000A0E3 MOV R0,#+16 \ 00000028 140000EF SWI +20 \ 0000002C 0060A0E1 MOV R6,R0 \ 00000030 081086E2 ADD R1,R6,#+8 \ 00000034 0000A0E3 MOV R0,#+0 \ 00000038 B40000EF SWI +180 \ 0000003C 0000A0E3 MOV R0,#+0 \ 00000040 000086E5 STR R0,[R6, #+0] \ 00000044 1200A0E3 MOV R0,#+18 \ 00000048 B400C6E1 STRH R0,[R6, #+4] \ 0000004C 0800A0E3 MOV R0,#+8 \ 00000050 B600C6E1 STRH R0,[R6, #+6] \ 00000054 ........ LDR R0,??DataTable2 ;; SendAnswer \ 00000058 0620A0E1 MOV R2,R6 \ 0000005C 0010A0E3 MOV R1,#+0 \ 00000060 710100EF SWI +369 88 GBS_StartTimerProc(&ping_tmr, 12960, Pinger2); \ 00000064 0520A0E1 MOV R2,R5 \ 00000068 A010A0E3 MOV R1,#+160 \ 0000006C C81D81E3 ORR R1,R1,#0x3200 \ 00000070 0400A0E1 MOV R0,R4 \ 00000074 4D0000EF SWI +77 \ 00000078 7080BDE8 POP {R4-R6,PC} 89 } 90 else 91 GBS_StartTimerProc(&ping_tmr, 2160, Pinger2); \ ??Pinger2_0: \ 0000007C 0520A0E1 MOV R2,R5 \ 00000080 871EA0E3 MOV R1,#+2160 \ 00000084 0400A0E1 MOV R0,R4 \ 00000088 4D0000EF SWI +77 92 } \ 0000008C 7080BDE8 POP {R4-R6,PC} ;; return 93 94 //-------------------------------------------------// 95 96 97 98 extern volatile int total_smiles; 99 extern volatile int total_xstatuses; 100 extern volatile int xstatuses_load; 101 extern volatile int pictures_max; //2026rev 102 extern volatile int pictures_loaded; //2026rev 103 104 #ifdef ELKA 105 int Is_SLI_On;//мигаем светодиодом 106 #endif 107 108 int Is_SMARTCPU_On;//Вывод сообщений на гэ 109 int Is_INC_On;//Popup message 110 int Is_ILU_On;//Режим подсветки 111 int Is_Double_Vibra_On;//Режим напоминания 112 int total_unread; 113 int total_unread2; 114 115 #ifdef ELKA \ In segment DATA_C, align 4, align-sorted 116 const int SLI_TYPE=1; \ SLI_TYPE: \ 00000000 01000000 DC32 1 117 #endif 118 119 char PINGO[256]; 120 121 #ifdef ELKA 122 extern const unsigned int SLI_time; 123 extern const unsigned int SLI_time2; 124 #endif 125 //#define USE_MLMENU 126 #define USE_GUI //графический интерфейс 127 128 #define TMR_SECOND 216 129 130 //IPC 131 const char ipc_my_name[32]=IPC_NATICQ_NAME; 132 const char ipc_xtask_name[]=IPC_XTASK_NAME; 133 const char ipc_test_name[]="test"; 134 IPC_REQ gipc; 135 136 137 char elf_path[256]; 138 int maincsm_id; 139 int maingui_id; 140 \ In segment CODE, align 4, keep-with-next 141 void SMART_REDRAW(void) 142 { \ SMART_REDRAW: \ 00000000 10402DE9 PUSH {R4,LR} 143 int f; 144 LockSched(); \ 00000004 460100EF SWI +326 145 f=IsGuiOnTop(maingui_id); \ 00000008 1C009FE5 LDR R0,??SMART_REDRAW_0 ;; icons + 772 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 350100EF SWI +309 \ 00000014 0040A0E1 MOV R4,R0 146 UnlockSched(); \ 00000018 470100EF SWI +327 147 if (f) REDRAW(); \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} \ 00000024 720100EF SWI +370 148 } \ 00000028 1080BDE8 POP {R4,PC} ;; return \ ??SMART_REDRAW_0: \ 0000002C ........ DC32 icons + 772 149 150 //По 10 секунд 151 #define ACTIVE_TIME 360 152 153 //Максимальное количество сообщений в логе 154 #define MAXLOGMSG (20) 155 156 // Строковые описания статусов 157 158 const char S_OFFLINE[]="Offline"; 159 const char S_INVISIBLE[]="Invisible"; 160 const char S_AWAY[]="Away"; 161 const char S_NA[]="N/A"; 162 const char S_OCCUPIED[]="Occupied"; 163 const char S_DND[]="DND"; 164 const char S_ONLINE[]="Online"; 165 const char S_FFC[]="FFC"; 166 167 volatile int SENDMSGCOUNT; 168 #ifdef kluchnik1 169 int IsActiveUp=1; 170 #else 171 int IsActiveUp=0; 172 #endif 173 int Is_Vibra_Enabled; 174 int Is_Id3tag_Enabled; 175 unsigned int Is_Sounds_Enabled; 176 int Is_Show_Offline; 177 int Is_Show_Groups; 178 179 int S_ICONS[TOTAL_ICONS+1]; 180 181 #define EOP -10 182 int CurrentStatus; 183 int CurrentXStatus; 184 185 WSHDR *ews; 186 187 static const char * const icons_names[TOTAL_ICONS]= 188 { 189 "offline.png", 190 "invisible.png", 191 "away.png", 192 "na.png", 193 "occupied.png", 194 "dnd.png", 195 "depression.png", 196 "evil.png", 197 "home.png", 198 "lunch.png", 199 "work.png", 200 "online.png", 201 "ffc.png", 202 "message.png", 203 "unknown.png", 204 "groupon.png", 205 "groupoff.png", 206 "null.png", 207 "addcont.png", 208 "head.png", 209 "logo.png", 210 "ping.png", 211 "settings.png", 212 "vis1.png", 213 "vis2.png", 214 "vis3.png", 215 "vis4.png", 216 "vis5.png" 217 }; 218 219 220 221 222 //------------------------ SCREEN SAVER TIMER ---------------------------// 223 224 #ifdef NEWSGOLD 225 GBSTMR scrsTmr; 226 int scrsTime; \ In segment CODE, align 4, keep-with-next 227 void ScreenSaverTimer() 228 { \ ScreenSaverTimer: \ 00000000 70402DE9 PUSH {R4-R6,LR} 229 if(scrsTime==screenSaverTime) \ 00000004 ........ LDR R4,??DataTable34 ;; icons \ 00000008 68609FE5 LDR R6,??ScreenSaverTimer_0 ;; ScreenSaverTimer \ 0000000C 241394E5 LDR R1,[R4, #+804] \ 00000010 4C00A0E3 MOV R0,#+76 \ 00000014 5C0D80E3 ORR R0,R0,#0x1700 \ 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 230 { 231 scrsTime=screenSaverTime;//на всякий случай \ 0000002C 240384E5 STR R0,[R4, #+804] 232 CloseScreensaver(); \ 00000030 9C0000EF SWI +156 233 DrawScreenSaver(); \ 00000034 200000EF SWI +32 234 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 235 } 236 if(isScreenSaverEna) \ ??ScreenSaverTimer_1: \ 00000048 30009FE5 LDR R0,??ScreenSaverTimer_0+0x8 ;; isScreenSaverEna 237 scrsTime++; 238 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 24039415 LDRNE R0,[R4, #+804] \ 00000060 401E81E3 ORR R1,R1,#0x400 \ 00000064 01008012 ADDNE R0,R0,#+1 \ 00000068 24038415 STRNE R0,[R4, #+804] \ 0000006C 0500A0E1 MOV R0,R5 \ 00000070 4D0000EF SWI +77 239 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return \ ??ScreenSaverTimer_0: \ 00000078 ........ DC32 ScreenSaverTimer \ 0000007C ........ DC32 screenSaverTime \ 00000080 ........ DC32 isScreenSaverEna 240 #endif 241 242 243 //-----------------------------------------------------------------------// 244 245 246 int msg_away_timer=0;//Счетчик для автостатуса 247 char away_msg[264];//Само сообщение для ответа 248 char away_msg_time[64];//Время когда сработал таймер 249 char away_msg_time_dace[16];//время отсутвтвия для вывода на идле 250 //char *inp_away_msg2;//Текст сообщения,если будем писать сами(на долгую 6 или VOL_DOWN_BUTTON),а не брать из конфига 251 char tim_zone[16]; \ In segment DATA_Z, align 4, align-sorted 252 int timeh; \ timeh: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 253 int timemin; \ timemin: \ 00000000 DS8 4 254 int away_m;//состояние автоответчика 255 int status_rem;//Для сохранения текущего статуса 256 int change_back_status;//вернуть предыдущий статус или нет 257 GBSTMR away_tmr; 258 259 260 int Show_XTX;//Показывать хстатус или время он лайн \ In segment CODE, align 4, keep-with-next 261 void FreeXText2(CLIST *t) 262 { \ FreeXText2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 263 if (t->xtext2) { mfree(t->xtext2); t->xtext2=NULL; } \ 00000008 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] 264 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 265 \ In segment CODE, align 4, keep-with-next 266 void away_timer()//Таймер автостатуса 267 { \ away_timer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 ........ LDR R4,??DataTable34 ;; icons \ 00000008 ........ LDR R10,??DataTable31 ;; AUTO_ENGADE \ 0000000C ........ LDR R9,??DataTable6 ;; `?` \ 00000010 0CD04DE2 SUB SP,SP,#+12 \ 00000014 00109AE5 LDR R1,[R10, #+0] \ 00000018 6400A0E3 MOV R0,#+100 \ 0000001C 600D80E3 ORR R0,R0,#0x1800 \ 00000020 045080E0 ADD R5,R0,R4 \ 00000024 500080E2 ADD R0,R0,#+80 \ 00000028 046080E0 ADD R6,R0,R4 \ 0000002C 1000C0E3 BIC R0,R0,#0x10 \ 00000030 047080E0 ADD R7,R0,R4 \ 00000034 280394E5 LDR R0,[R4, #+808] \ 00000038 0C20A0E3 MOV R2,#+12 \ 0000003C 920101E0 MUL R1,R2,R1 \ 00000040 4A8FA0E3 MOV R8,#+296 \ 00000044 010050E1 CMP R0,R1 \ 00000048 1F00001A BNE ??away_timer_0 268 if(msg_away_timer==(AUTO_ENGADE*12)) 269 { 270 TTime tt; 271 GetDateTime(NULL,&tt); \ 0000004C 0D10A0E1 MOV R1,SP \ 00000050 0000A0E3 MOV R0,#+0 \ 00000054 B40000EF SWI +180 272 sprintf(away_msg_time_dace, "%02d:%02d", tt.hour, tt.min); \ 00000058 0130DDE5 LDRB R3,[SP, #+1] \ 0000005C 0020DDE5 LDRB R2,[SP, #+0] \ 00000060 041089E2 ADD R1,R9,#+4 \ 00000064 0700A0E1 MOV R0,R7 \ 00000068 160000EF SWI +22 273 sprintf(away_msg_time, "( Отсутствую примерно с %02d:%02d [%s] )", tt.hour, tt.min, tim_zone); \ 0000006C 0600A0E1 MOV R0,R6 \ 00000070 01002DE9 PUSH {R0} \ 00000074 0530DDE5 LDRB R3,[SP, #+5] \ 00000078 0420DDE5 LDRB R2,[SP, #+4] \ 0000007C 101089E2 ADD R1,R9,#+16 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 160000EF SWI +22 274 away_m=1; 275 if(CurrentStatus!=2 && CurrentStatus!=isAutoStatusOn) \ 00000088 180394E5 LDR R0,[R4, #+792] \ 0000008C 01B0A0E3 MOV R11,#+1 \ 00000090 2CB384E5 STR R11,[R4, #+812] \ 00000094 020050E3 CMP R0,#+2 \ 00000098 04D08DE2 ADD SP,SP,#+4 \ 0000009C 0A00000A BEQ ??away_timer_0 \ 000000A0 EC109FE5 LDR R1,??away_timer_1 ;; isAutoStatusOn \ 000000A4 001091E5 LDR R1,[R1, #+0] \ 000000A8 010050E1 CMP R0,R1 \ 000000AC 0600000A BEQ ??away_timer_0 276 { 277 status_rem=CurrentStatus; \ 000000B0 300384E5 STR R0,[R4, #+816] 278 CurrentStatus=2; \ 000000B4 0200A0E3 MOV R0,#+2 \ 000000B8 180384E5 STR R0,[R4, #+792] 279 set_my_status(); \ 000000BC ........ BL set_my_status 280 #ifdef NEWSGOLD 281 void SetIconBarHandler(); 282 SetIconBarHandler(); \ 000000C0 ........ LDR R0,??DataTable11 ;; addIconBar 283 #endif 284 change_back_status=1; \ 000000C4 34B384E5 STR R11,[R4, #+820] \ 000000C8 040088E7 STR R0,[R8, +R4] 285 } 286 } 287 288 if( (IsOnNAStatus) && (msg_away_timer==((AUTO_ENGADE*12)+(NAStatusTime*12))) )//Включить переключение на недоступен,в минутах \ ??away_timer_0: \ 000000CC C4009FE5 LDR R0,??away_timer_1+0x4 ;; IsOnNAStatus \ 000000D0 000090E5 LDR R0,[R0, #+0] \ 000000D4 000050E3 CMP R0,#+0 \ 000000D8 2000000A BEQ ??away_timer_2 \ 000000DC B8209FE5 LDR R2,??away_timer_1+0x8 ;; NAStatusTime \ 000000E0 00109AE5 LDR R1,[R10, #+0] \ 000000E4 002092E5 LDR R2,[R2, #+0] \ 000000E8 280394E5 LDR R0,[R4, #+808] \ 000000EC 011082E0 ADD R1,R2,R1 \ 000000F0 0C20A0E3 MOV R2,#+12 \ 000000F4 920101E0 MUL R1,R2,R1 \ 000000F8 010050E1 CMP R0,R1 \ 000000FC 1700001A BNE ??away_timer_2 289 { 290 TTime tt; 291 GetDateTime(NULL,&tt); \ 00000100 0D10A0E1 MOV R1,SP \ 00000104 0000A0E3 MOV R0,#+0 \ 00000108 B40000EF SWI +180 292 sprintf(away_msg_time_dace, "%02d:%02d", tt.hour, tt.min); \ 0000010C 0130DDE5 LDRB R3,[SP, #+1] \ 00000110 0020DDE5 LDRB R2,[SP, #+0] \ 00000114 041089E2 ADD R1,R9,#+4 \ 00000118 0700A0E1 MOV R0,R7 \ 0000011C 160000EF SWI +22 293 sprintf(away_msg_time, "( Недоступен примерно с %02d:%02d [%s] )", tt.hour, tt.min, tim_zone); \ 00000120 40002DE9 PUSH {R6} \ 00000124 0530DDE5 LDRB R3,[SP, #+5] \ 00000128 0420DDE5 LDRB R2,[SP, #+4] \ 0000012C 3C1089E2 ADD R1,R9,#+60 \ 00000130 0500A0E1 MOV R0,R5 \ 00000134 160000EF SWI +22 294 if(CurrentStatus!=3) \ 00000138 180394E5 LDR R0,[R4, #+792] \ 0000013C 04D08DE2 ADD SP,SP,#+4 \ 00000140 030050E3 CMP R0,#+3 \ 00000144 0500000A BEQ ??away_timer_2 295 { 296 status_rem=CurrentStatus; \ 00000148 300384E5 STR R0,[R4, #+816] 297 CurrentStatus=3; \ 0000014C 0300A0E3 MOV R0,#+3 \ 00000150 180384E5 STR R0,[R4, #+792] 298 set_my_status(); \ 00000154 ........ BL set_my_status 299 #ifdef NEWSGOLD 300 void SetIconBarHandler(); 301 SetIconBarHandler(); \ 00000158 ........ LDR R0,??DataTable11 ;; addIconBar \ 0000015C 040088E7 STR R0,[R8, +R4] 302 #endif 303 } 304 } 305 306 if(Auto_Status) \ ??away_timer_2: \ 00000160 ........ LDR R0,??DataTable9 ;; Auto_Status 307 msg_away_timer++; 308 GBS_StartTimerProc(&away_tmr, 216*5, away_timer); \ 00000164 34209FE5 LDR R2,??away_timer_1+0xC ;; away_timer \ 00000168 000090E5 LDR R0,[R0, #+0] \ 0000016C C41F88E2 ADD R1,R8,#+784 \ 00000170 000050E3 CMP R0,#+0 \ 00000174 28039415 LDRNE R0,[R4, #+808] \ 00000178 01008012 ADDNE R0,R0,#+1 \ 0000017C 28038415 STRNE R0,[R4, #+808] \ 00000180 C400A0E3 MOV R0,#+196 \ 00000184 600D80E3 ORR R0,R0,#0x1800 \ 00000188 040080E0 ADD R0,R0,R4 \ 0000018C 4D0000EF SWI +77 309 } \ 00000190 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return \ ??away_timer_1: \ 00000194 ........ DC32 isAutoStatusOn \ 00000198 ........ DC32 IsOnNAStatus \ 0000019C ........ DC32 NAStatusTime \ 000001A0 ........ DC32 away_timer 310 311 \ In segment CODE, align 4, keep-with-next 312 void init_time_zone() 313 { 314 switch(time_zone) \ init_time_zone: \ 00000000 50219FE5 LDR R2,??init_time_zone_1 ;; time_zone \ 00000004 50019FE5 LDR R0,??init_time_zone_1+0x4 ;; icons + 6324 \ 00000008 50119FE5 LDR R1,??init_time_zone_1+0x8 ;; `?` \ 0000000C 00402DE9 PUSH {LR} \ 00000010 002092E5 LDR R2,[R2, #+0] \ 00000014 200052E3 CMP R2,#+32 \ 00000018 0080BD88 POPHI {PC} \ 0000001C 013F8FE2 ADR R3,??init_time_zone_0 \ 00000020 0230D3E7 LDRB R3,[R3, R2] \ 00000024 03F18FE0 ADD PC,PC,R3, LSL #+2 \ ??init_time_zone_0: \ 00000028 08090B0D DC8 +8,+9,+11,+13 \ 0000002C 10121416 DC8 +16,+18,+20,+22 \ 00000030 181A1C1E DC8 +24,+26,+28,+30 \ 00000034 20222426 DC8 +32,+34,+36,+38 \ 00000038 282A2C2E DC8 +40,+42,+44,+46 \ 0000003C 30323436 DC8 +48,+50,+52,+54 \ 00000040 383A3C3E DC8 +56,+58,+60,+62 \ 00000044 40424446 DC8 +64,+66,+68,+70 \ 00000048 48000000 DC8 +72,+0,+0,+0 315 { 316 case 0: 317 sprintf(tim_zone, "GMT -12:00"); \ ??init_time_zone_2: \ 0000004C 601F81E2 ADD R1,R1,#+384 318 break; 319 case 1: 320 sprintf(tim_zone, "GMT -11:00"); \ ??init_time_zone_3: \ 00000050 160000EF SWI +22 \ 00000054 0080BDE8 POP {PC} 321 break; 322 case 2: 323 sprintf(tim_zone, "GMT -10:00"); \ ??init_time_zone_4: \ 00000058 0C1081E2 ADD R1,R1,#+12 \ 0000005C 000000EA B ??init_time_zone_5 324 break; 325 case 3: 326 sprintf(tim_zone, "GMT -09:00"); \ ??init_time_zone_6: \ 00000060 181081E2 ADD R1,R1,#+24 \ ??init_time_zone_5: \ 00000064 160000EF SWI +22 \ 00000068 0080BDE8 POP {PC} 327 break; 328 case 4: 329 sprintf(tim_zone, "GMT -08:00"); \ ??init_time_zone_7: \ 0000006C 241081E2 ADD R1,R1,#+36 \ 00000070 FBFFFFEA B ??init_time_zone_5 330 break; 331 case 5: 332 sprintf(tim_zone, "GMT -07:00"); \ ??init_time_zone_8: \ 00000074 301081E2 ADD R1,R1,#+48 \ 00000078 F9FFFFEA B ??init_time_zone_5 333 break; 334 case 6: 335 sprintf(tim_zone, "GMT -06:00"); \ ??init_time_zone_9: \ 0000007C 3C1081E2 ADD R1,R1,#+60 \ 00000080 F7FFFFEA B ??init_time_zone_5 336 break; 337 case 7: 338 sprintf(tim_zone, "GMT -05:00"); \ ??init_time_zone_10: \ 00000084 481081E2 ADD R1,R1,#+72 \ 00000088 F5FFFFEA B ??init_time_zone_5 339 break; 340 case 8: 341 sprintf(tim_zone, "GMT -04:00"); \ ??init_time_zone_11: \ 0000008C 541081E2 ADD R1,R1,#+84 \ 00000090 F3FFFFEA B ??init_time_zone_5 342 break; 343 case 9: 344 sprintf(tim_zone, "GMT -03:30"); \ ??init_time_zone_12: \ 00000094 601081E2 ADD R1,R1,#+96 \ 00000098 F1FFFFEA B ??init_time_zone_5 345 break; 346 case 10: 347 sprintf(tim_zone, "GMT -03:00"); \ ??init_time_zone_13: \ 0000009C 6C1081E2 ADD R1,R1,#+108 \ 000000A0 EFFFFFEA B ??init_time_zone_5 348 break; 349 case 11: 350 sprintf(tim_zone, "GMT -02:00"); \ ??init_time_zone_14: \ 000000A4 781081E2 ADD R1,R1,#+120 \ 000000A8 EDFFFFEA B ??init_time_zone_5 351 break; 352 case 12: 353 sprintf(tim_zone, "GMT -01:00"); \ ??init_time_zone_15: \ 000000AC 841081E2 ADD R1,R1,#+132 \ 000000B0 EBFFFFEA B ??init_time_zone_5 354 break; 355 case 13: 356 sprintf(tim_zone, "GMT 00:00"); \ ??init_time_zone_16: \ 000000B4 901081E2 ADD R1,R1,#+144 \ 000000B8 E9FFFFEA B ??init_time_zone_5 357 break; 358 case 14: 359 sprintf(tim_zone, "GMT +01:00"); \ ??init_time_zone_17: \ 000000BC 9C1081E2 ADD R1,R1,#+156 \ 000000C0 E7FFFFEA B ??init_time_zone_5 360 break; 361 case 15: 362 sprintf(tim_zone, "GMT +02:00"); \ ??init_time_zone_18: \ 000000C4 A81081E2 ADD R1,R1,#+168 \ 000000C8 E5FFFFEA B ??init_time_zone_5 363 break; 364 case 16: 365 sprintf(tim_zone, "GMT +03:00"); \ ??init_time_zone_19: \ 000000CC B41081E2 ADD R1,R1,#+180 \ 000000D0 E3FFFFEA B ??init_time_zone_5 366 break; 367 case 17: 368 sprintf(tim_zone, "GMT +03:30"); \ ??init_time_zone_20: \ 000000D4 C01081E2 ADD R1,R1,#+192 \ 000000D8 E1FFFFEA B ??init_time_zone_5 369 break; 370 case 18: 371 sprintf(tim_zone, "GMT +04:00"); \ ??init_time_zone_21: \ 000000DC CC1081E2 ADD R1,R1,#+204 \ 000000E0 DFFFFFEA B ??init_time_zone_5 372 break; 373 case 19: 374 sprintf(tim_zone, "GMT +04:30"); \ ??init_time_zone_22: \ 000000E4 D81081E2 ADD R1,R1,#+216 \ 000000E8 DDFFFFEA B ??init_time_zone_5 375 break; 376 case 20: 377 sprintf(tim_zone, "GMT +05:00"); \ ??init_time_zone_23: \ 000000EC E41081E2 ADD R1,R1,#+228 \ 000000F0 DBFFFFEA B ??init_time_zone_5 378 break; 379 case 21: 380 sprintf(tim_zone, "GMT +05:30"); \ ??init_time_zone_24: \ 000000F4 F01081E2 ADD R1,R1,#+240 \ 000000F8 D9FFFFEA B ??init_time_zone_5 381 break; 382 case 22: 383 sprintf(tim_zone, "GMT +05:45"); \ ??init_time_zone_25: \ 000000FC FC1081E2 ADD R1,R1,#+252 \ 00000100 D7FFFFEA B ??init_time_zone_5 384 break; 385 case 23: 386 sprintf(tim_zone, "GMT +06:00"); \ ??init_time_zone_26: \ 00000104 421F81E2 ADD R1,R1,#+264 \ 00000108 D5FFFFEA B ??init_time_zone_5 387 break; 388 case 24: 389 sprintf(tim_zone, "GMT +06:30"); \ ??init_time_zone_27: \ 0000010C 451F81E2 ADD R1,R1,#+276 \ 00000110 D3FFFFEA B ??init_time_zone_5 390 break; 391 case 25: 392 sprintf(tim_zone, "GMT +07:00"); \ ??init_time_zone_28: \ 00000114 481F81E2 ADD R1,R1,#+288 \ 00000118 D1FFFFEA B ??init_time_zone_5 393 break; 394 case 26: 395 sprintf(tim_zone, "GMT +08:00"); \ ??init_time_zone_29: \ 0000011C 4B1F81E2 ADD R1,R1,#+300 \ 00000120 CFFFFFEA B ??init_time_zone_5 396 break; 397 case 27: 398 sprintf(tim_zone, "GMT +09:00"); \ ??init_time_zone_30: \ 00000124 4E1F81E2 ADD R1,R1,#+312 \ 00000128 CDFFFFEA B ??init_time_zone_5 399 break; 400 case 28: 401 sprintf(tim_zone, "GMT +09:30"); \ ??init_time_zone_31: \ 0000012C 511F81E2 ADD R1,R1,#+324 \ 00000130 CBFFFFEA B ??init_time_zone_5 402 break; 403 case 29: 404 sprintf(tim_zone, "GMT +10:00"); \ ??init_time_zone_32: \ 00000134 541F81E2 ADD R1,R1,#+336 \ 00000138 C9FFFFEA B ??init_time_zone_5 405 break; 406 case 30: 407 sprintf(tim_zone, "GMT +11:00"); \ ??init_time_zone_33: \ 0000013C 571F81E2 ADD R1,R1,#+348 \ 00000140 C7FFFFEA B ??init_time_zone_5 408 break; 409 case 31: 410 sprintf(tim_zone, "GMT +12:00"); \ ??init_time_zone_34: \ 00000144 5A1F81E2 ADD R1,R1,#+360 \ 00000148 C5FFFFEA B ??init_time_zone_5 411 break; 412 case 32: 413 sprintf(tim_zone, "GMT +13:00"); \ ??init_time_zone_35: \ 0000014C 5D1F81E2 ADD R1,R1,#+372 \ 00000150 160000EF SWI +22 414 break; 415 } 416 } \ ??init_time_zone_36: \ 00000154 0080BDE8 POP {PC} ;; return \ ??init_time_zone_1: \ 00000158 ........ DC32 time_zone \ 0000015C ........ DC32 icons + 6324 \ 00000160 ........ DC32 `?` 417 418 419 //------------------------ AUTO CHANGE STATUS ------------------------------// 420 421 void SetIconBarHandler(); 422 GBSTMR autoChangeStatus; 423 #pragma inline 424 static unsigned int GetStatusByIndex(int pos) 425 { 426 switch(pos) 427 { 428 case 1: 429 return IS_ONLINE; 430 case 2: 431 return IS_AWAY; 432 case 3: 433 return IS_NA; 434 case 4: 435 return IS_DND; 436 case 5: 437 return IS_OCCUPIED; 438 case 6: 439 return IS_FFC; 440 case 7: 441 return IS_INVISIBLE; 442 case 8: 443 return IS_DEPRESSION; 444 case 9: 445 return IS_EVIL; 446 case 10: 447 return IS_HOME; 448 case 11: 449 return IS_LUNCH; 450 case 12: 451 return IS_WORK; 452 } 453 return IS_UNKNOWN; 454 } 455 \ In segment CODE, align 4, keep-with-next 456 void AutoChangeStatus_timer()//Таймер автосмены статуса 457 { \ AutoChangeStatus_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 458 TTime tt; 459 GetDateTime(NULL,&tt); \ 00000008 0D10A0E1 MOV R1,SP 460 461 if(status_1!=0 && tt.hour==tm_status_1.hour && tt.min==tm_status_1.min) \ 0000000C ........ LDR R4,??DataTable34 ;; icons \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 B40000EF SWI +180 \ 00000018 EC039FE5 LDR R0,??AutoChangeStatus_timer_5 ;; status_1 \ 0000001C 0150A0E3 MOV R5,#+1 \ 00000020 000090E5 LDR R0,[R0, #+0] \ 00000024 000050E3 CMP R0,#+0 \ 00000028 2C00000A BEQ ??AutoChangeStatus_timer_6 \ 0000002C DC139FE5 LDR R1,??AutoChangeStatus_timer_5+0x4 ;; tm_status_1 \ 00000030 0020DDE5 LDRB R2,[SP, #+0] \ 00000034 0030D1E5 LDRB R3,[R1, #+0] \ 00000038 030052E1 CMP R2,R3 \ 0000003C 2700001A BNE ??AutoChangeStatus_timer_6 \ 00000040 0120DDE5 LDRB R2,[SP, #+1] \ 00000044 0110D1E5 LDRB R1,[R1, #+1] \ 00000048 010052E1 CMP R2,R1 \ 0000004C 2300001A BNE ??AutoChangeStatus_timer_6 462 { 463 CurrentStatus=GetStatusByIndex(status_1); \ 00000050 010040E2 SUB R0,R0,#+1 \ 00000054 0B0050E3 CMP R0,#+11 \ 00000058 1D00008A BHI ??AutoChangeStatus_timer_7 \ 0000005C 011F8FE2 ADR R1,??AutoChangeStatus_timer_0 \ 00000060 0010D1E7 LDRB R1,[R1, R0] \ 00000064 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??AutoChangeStatus_timer_0: \ 00000068 02040608 DC8 +2,+4,+6,+8 \ 0000006C 0A0C0E10 DC8 +10,+12,+14,+16 \ 00000070 12141618 DC8 +18,+20,+22,+24 \ ??AutoChangeStatus_timer_8: \ 00000074 0B00A0E3 MOV R0,#+11 \ 00000078 160000EA B ??AutoChangeStatus_timer_9 \ ??AutoChangeStatus_timer_10: \ 0000007C 0200A0E3 MOV R0,#+2 \ 00000080 140000EA B ??AutoChangeStatus_timer_9 \ ??AutoChangeStatus_timer_11: \ 00000084 0300A0E3 MOV R0,#+3 \ 00000088 120000EA B ??AutoChangeStatus_timer_9 \ ??AutoChangeStatus_timer_12: \ 0000008C 0500A0E3 MOV R0,#+5 \ 00000090 100000EA B ??AutoChangeStatus_timer_9 \ ??AutoChangeStatus_timer_13: \ 00000094 0400A0E3 MOV R0,#+4 \ 00000098 0E0000EA B ??AutoChangeStatus_timer_9 \ ??AutoChangeStatus_timer_14: \ 0000009C 0C00A0E3 MOV R0,#+12 \ 000000A0 0C0000EA B ??AutoChangeStatus_timer_9 \ ??AutoChangeStatus_timer_15: \ 000000A4 0100A0E3 MOV R0,#+1 \ 000000A8 0A0000EA B ??AutoChangeStatus_timer_9 \ ??AutoChangeStatus_timer_16: \ 000000AC 0600A0E3 MOV R0,#+6 \ 000000B0 080000EA B ??AutoChangeStatus_timer_9 \ ??AutoChangeStatus_timer_17: \ 000000B4 0700A0E3 MOV R0,#+7 \ 000000B8 060000EA B ??AutoChangeStatus_timer_9 \ ??AutoChangeStatus_timer_18: \ 000000BC 0800A0E3 MOV R0,#+8 \ 000000C0 040000EA B ??AutoChangeStatus_timer_9 \ ??AutoChangeStatus_timer_19: \ 000000C4 0900A0E3 MOV R0,#+9 \ 000000C8 020000EA B ??AutoChangeStatus_timer_9 \ ??AutoChangeStatus_timer_20: \ 000000CC 0A00A0E3 MOV R0,#+10 \ 000000D0 000000EA B ??AutoChangeStatus_timer_9 \ ??AutoChangeStatus_timer_7: \ 000000D4 0E00A0E3 MOV R0,#+14 \ ??AutoChangeStatus_timer_9: \ 000000D8 180384E5 STR R0,[R4, #+792] 464 set_my_status(); \ 000000DC ........ BL set_my_status 465 } 466 467 if(status_2!=0 && tt.hour==tm_status_2.hour && tt.min==tm_status_2.min) \ ??AutoChangeStatus_timer_6: \ 000000E0 2C039FE5 LDR R0,??AutoChangeStatus_timer_5+0x8 ;; status_2 \ 000000E4 000090E5 LDR R0,[R0, #+0] \ 000000E8 000050E3 CMP R0,#+0 \ 000000EC 2C00000A BEQ ??AutoChangeStatus_timer_21 \ 000000F0 20139FE5 LDR R1,??AutoChangeStatus_timer_5+0xC ;; tm_status_2 \ 000000F4 0020DDE5 LDRB R2,[SP, #+0] \ 000000F8 0030D1E5 LDRB R3,[R1, #+0] \ 000000FC 030052E1 CMP R2,R3 \ 00000100 2700001A BNE ??AutoChangeStatus_timer_21 \ 00000104 0120DDE5 LDRB R2,[SP, #+1] \ 00000108 0110D1E5 LDRB R1,[R1, #+1] \ 0000010C 010052E1 CMP R2,R1 \ 00000110 2300001A BNE ??AutoChangeStatus_timer_21 468 { 469 CurrentStatus=GetStatusByIndex(status_2); \ 00000114 010040E2 SUB R0,R0,#+1 \ 00000118 0B0050E3 CMP R0,#+11 \ 0000011C 1D00008A BHI ??AutoChangeStatus_timer_22 \ 00000120 011F8FE2 ADR R1,??AutoChangeStatus_timer_1 \ 00000124 0010D1E7 LDRB R1,[R1, R0] \ 00000128 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??AutoChangeStatus_timer_1: \ 0000012C 02040608 DC8 +2,+4,+6,+8 \ 00000130 0A0C0E10 DC8 +10,+12,+14,+16 \ 00000134 12141618 DC8 +18,+20,+22,+24 \ ??AutoChangeStatus_timer_23: \ 00000138 0B00A0E3 MOV R0,#+11 \ 0000013C 160000EA B ??AutoChangeStatus_timer_24 \ ??AutoChangeStatus_timer_25: \ 00000140 0200A0E3 MOV R0,#+2 \ 00000144 140000EA B ??AutoChangeStatus_timer_24 \ ??AutoChangeStatus_timer_26: \ 00000148 0300A0E3 MOV R0,#+3 \ 0000014C 120000EA B ??AutoChangeStatus_timer_24 \ ??AutoChangeStatus_timer_27: \ 00000150 0500A0E3 MOV R0,#+5 \ 00000154 100000EA B ??AutoChangeStatus_timer_24 \ ??AutoChangeStatus_timer_28: \ 00000158 0400A0E3 MOV R0,#+4 \ 0000015C 0E0000EA B ??AutoChangeStatus_timer_24 \ ??AutoChangeStatus_timer_29: \ 00000160 0C00A0E3 MOV R0,#+12 \ 00000164 0C0000EA B ??AutoChangeStatus_timer_24 \ ??AutoChangeStatus_timer_30: \ 00000168 0100A0E3 MOV R0,#+1 \ 0000016C 0A0000EA B ??AutoChangeStatus_timer_24 \ ??AutoChangeStatus_timer_31: \ 00000170 0600A0E3 MOV R0,#+6 \ 00000174 080000EA B ??AutoChangeStatus_timer_24 \ ??AutoChangeStatus_timer_32: \ 00000178 0700A0E3 MOV R0,#+7 \ 0000017C 060000EA B ??AutoChangeStatus_timer_24 \ ??AutoChangeStatus_timer_33: \ 00000180 0800A0E3 MOV R0,#+8 \ 00000184 040000EA B ??AutoChangeStatus_timer_24 \ ??AutoChangeStatus_timer_34: \ 00000188 0900A0E3 MOV R0,#+9 \ 0000018C 020000EA B ??AutoChangeStatus_timer_24 \ ??AutoChangeStatus_timer_35: \ 00000190 0A00A0E3 MOV R0,#+10 \ 00000194 000000EA B ??AutoChangeStatus_timer_24 \ ??AutoChangeStatus_timer_22: \ 00000198 0E00A0E3 MOV R0,#+14 \ ??AutoChangeStatus_timer_24: \ 0000019C 180384E5 STR R0,[R4, #+792] 470 set_my_status(); \ 000001A0 ........ BL set_my_status 471 } 472 473 if(status_3!=0 && tt.hour==tm_status_3.hour && tt.min==tm_status_3.min) \ ??AutoChangeStatus_timer_21: \ 000001A4 70029FE5 LDR R0,??AutoChangeStatus_timer_5+0x10 ;; status_3 \ 000001A8 000090E5 LDR R0,[R0, #+0] \ 000001AC 000050E3 CMP R0,#+0 \ 000001B0 2C00000A BEQ ??AutoChangeStatus_timer_36 \ 000001B4 64129FE5 LDR R1,??AutoChangeStatus_timer_5+0x14 ;; tm_status_3 \ 000001B8 0020DDE5 LDRB R2,[SP, #+0] \ 000001BC 0030D1E5 LDRB R3,[R1, #+0] \ 000001C0 030052E1 CMP R2,R3 \ 000001C4 2700001A BNE ??AutoChangeStatus_timer_36 \ 000001C8 0120DDE5 LDRB R2,[SP, #+1] \ 000001CC 0110D1E5 LDRB R1,[R1, #+1] \ 000001D0 010052E1 CMP R2,R1 \ 000001D4 2300001A BNE ??AutoChangeStatus_timer_36 474 { 475 CurrentStatus=GetStatusByIndex(status_3); \ 000001D8 010040E2 SUB R0,R0,#+1 \ 000001DC 0B0050E3 CMP R0,#+11 \ 000001E0 1D00008A BHI ??AutoChangeStatus_timer_37 \ 000001E4 011F8FE2 ADR R1,??AutoChangeStatus_timer_2 \ 000001E8 0010D1E7 LDRB R1,[R1, R0] \ 000001EC 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??AutoChangeStatus_timer_2: \ 000001F0 02040608 DC8 +2,+4,+6,+8 \ 000001F4 0A0C0E10 DC8 +10,+12,+14,+16 \ 000001F8 12141618 DC8 +18,+20,+22,+24 \ ??AutoChangeStatus_timer_38: \ 000001FC 0B00A0E3 MOV R0,#+11 \ 00000200 160000EA B ??AutoChangeStatus_timer_39 \ ??AutoChangeStatus_timer_40: \ 00000204 0200A0E3 MOV R0,#+2 \ 00000208 140000EA B ??AutoChangeStatus_timer_39 \ ??AutoChangeStatus_timer_41: \ 0000020C 0300A0E3 MOV R0,#+3 \ 00000210 120000EA B ??AutoChangeStatus_timer_39 \ ??AutoChangeStatus_timer_42: \ 00000214 0500A0E3 MOV R0,#+5 \ 00000218 100000EA B ??AutoChangeStatus_timer_39 \ ??AutoChangeStatus_timer_43: \ 0000021C 0400A0E3 MOV R0,#+4 \ 00000220 0E0000EA B ??AutoChangeStatus_timer_39 \ ??AutoChangeStatus_timer_44: \ 00000224 0C00A0E3 MOV R0,#+12 \ 00000228 0C0000EA B ??AutoChangeStatus_timer_39 \ ??AutoChangeStatus_timer_45: \ 0000022C 0100A0E3 MOV R0,#+1 \ 00000230 0A0000EA B ??AutoChangeStatus_timer_39 \ ??AutoChangeStatus_timer_46: \ 00000234 0600A0E3 MOV R0,#+6 \ 00000238 080000EA B ??AutoChangeStatus_timer_39 \ ??AutoChangeStatus_timer_47: \ 0000023C 0700A0E3 MOV R0,#+7 \ 00000240 060000EA B ??AutoChangeStatus_timer_39 \ ??AutoChangeStatus_timer_48: \ 00000244 0800A0E3 MOV R0,#+8 \ 00000248 040000EA B ??AutoChangeStatus_timer_39 \ ??AutoChangeStatus_timer_49: \ 0000024C 0900A0E3 MOV R0,#+9 \ 00000250 020000EA B ??AutoChangeStatus_timer_39 \ ??AutoChangeStatus_timer_50: \ 00000254 0A00A0E3 MOV R0,#+10 \ 00000258 000000EA B ??AutoChangeStatus_timer_39 \ ??AutoChangeStatus_timer_37: \ 0000025C 0E00A0E3 MOV R0,#+14 \ ??AutoChangeStatus_timer_39: \ 00000260 180384E5 STR R0,[R4, #+792] 476 set_my_status(); \ 00000264 ........ BL set_my_status 477 } 478 479 if(status_4!=0 && tt.hour==tm_status_4.hour && tt.min==tm_status_4.min) \ ??AutoChangeStatus_timer_36: \ 00000268 B4019FE5 LDR R0,??AutoChangeStatus_timer_5+0x18 ;; status_4 \ 0000026C 000090E5 LDR R0,[R0, #+0] \ 00000270 000050E3 CMP R0,#+0 \ 00000274 2C00000A BEQ ??AutoChangeStatus_timer_51 \ 00000278 A8119FE5 LDR R1,??AutoChangeStatus_timer_5+0x1C ;; tm_status_4 \ 0000027C 0020DDE5 LDRB R2,[SP, #+0] \ 00000280 0030D1E5 LDRB R3,[R1, #+0] \ 00000284 030052E1 CMP R2,R3 \ 00000288 2700001A BNE ??AutoChangeStatus_timer_51 \ 0000028C 0120DDE5 LDRB R2,[SP, #+1] \ 00000290 0110D1E5 LDRB R1,[R1, #+1] \ 00000294 010052E1 CMP R2,R1 \ 00000298 2300001A BNE ??AutoChangeStatus_timer_51 480 { 481 CurrentStatus=GetStatusByIndex(status_4); \ 0000029C 010040E2 SUB R0,R0,#+1 \ 000002A0 0B0050E3 CMP R0,#+11 \ 000002A4 1D00008A BHI ??AutoChangeStatus_timer_52 \ 000002A8 011F8FE2 ADR R1,??AutoChangeStatus_timer_3 \ 000002AC 0010D1E7 LDRB R1,[R1, R0] \ 000002B0 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??AutoChangeStatus_timer_3: \ 000002B4 02040608 DC8 +2,+4,+6,+8 \ 000002B8 0A0C0E10 DC8 +10,+12,+14,+16 \ 000002BC 12141618 DC8 +18,+20,+22,+24 \ ??AutoChangeStatus_timer_53: \ 000002C0 0B00A0E3 MOV R0,#+11 \ 000002C4 160000EA B ??AutoChangeStatus_timer_54 \ ??AutoChangeStatus_timer_55: \ 000002C8 0200A0E3 MOV R0,#+2 \ 000002CC 140000EA B ??AutoChangeStatus_timer_54 \ ??AutoChangeStatus_timer_56: \ 000002D0 0300A0E3 MOV R0,#+3 \ 000002D4 120000EA B ??AutoChangeStatus_timer_54 \ ??AutoChangeStatus_timer_57: \ 000002D8 0500A0E3 MOV R0,#+5 \ 000002DC 100000EA B ??AutoChangeStatus_timer_54 \ ??AutoChangeStatus_timer_58: \ 000002E0 0400A0E3 MOV R0,#+4 \ 000002E4 0E0000EA B ??AutoChangeStatus_timer_54 \ ??AutoChangeStatus_timer_59: \ 000002E8 0C00A0E3 MOV R0,#+12 \ 000002EC 0C0000EA B ??AutoChangeStatus_timer_54 \ ??AutoChangeStatus_timer_60: \ 000002F0 0100A0E3 MOV R0,#+1 \ 000002F4 0A0000EA B ??AutoChangeStatus_timer_54 \ ??AutoChangeStatus_timer_61: \ 000002F8 0600A0E3 MOV R0,#+6 \ 000002FC 080000EA B ??AutoChangeStatus_timer_54 \ ??AutoChangeStatus_timer_62: \ 00000300 0700A0E3 MOV R0,#+7 \ 00000304 060000EA B ??AutoChangeStatus_timer_54 \ ??AutoChangeStatus_timer_63: \ 00000308 0800A0E3 MOV R0,#+8 \ 0000030C 040000EA B ??AutoChangeStatus_timer_54 \ ??AutoChangeStatus_timer_64: \ 00000310 0900A0E3 MOV R0,#+9 \ 00000314 020000EA B ??AutoChangeStatus_timer_54 \ ??AutoChangeStatus_timer_65: \ 00000318 0A00A0E3 MOV R0,#+10 \ 0000031C 000000EA B ??AutoChangeStatus_timer_54 \ ??AutoChangeStatus_timer_52: \ 00000320 0E00A0E3 MOV R0,#+14 \ ??AutoChangeStatus_timer_54: \ 00000324 180384E5 STR R0,[R4, #+792] 482 set_my_status(); \ 00000328 ........ BL set_my_status 483 } 484 485 if(status_5!=0 && tt.hour==tm_status_5.hour && tt.min==tm_status_5.min) \ ??AutoChangeStatus_timer_51: \ 0000032C F8009FE5 LDR R0,??AutoChangeStatus_timer_5+0x20 ;; status_5 \ 00000330 000090E5 LDR R0,[R0, #+0] \ 00000334 000050E3 CMP R0,#+0 \ 00000338 2A00000A BEQ ??AutoChangeStatus_timer_66 \ 0000033C EC109FE5 LDR R1,??AutoChangeStatus_timer_5+0x24 ;; tm_status_5 \ 00000340 0020DDE5 LDRB R2,[SP, #+0] \ 00000344 0030D1E5 LDRB R3,[R1, #+0] \ 00000348 030052E1 CMP R2,R3 \ 0000034C 2500001A BNE ??AutoChangeStatus_timer_66 \ 00000350 0120DDE5 LDRB R2,[SP, #+1] \ 00000354 0110D1E5 LDRB R1,[R1, #+1] \ 00000358 010052E1 CMP R2,R1 \ 0000035C 2100001A BNE ??AutoChangeStatus_timer_66 486 { 487 CurrentStatus=GetStatusByIndex(status_5); \ 00000360 010040E2 SUB R0,R0,#+1 \ 00000364 0B0050E3 CMP R0,#+11 \ 00000368 1B00008A BHI ??AutoChangeStatus_timer_67 \ 0000036C 011F8FE2 ADR R1,??AutoChangeStatus_timer_4 \ 00000370 0010D1E7 LDRB R1,[R1, R0] \ 00000374 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??AutoChangeStatus_timer_4: \ 00000378 02040608 DC8 +2,+4,+6,+8 \ 0000037C 0A0C190E DC8 +10,+12,+25,+14 \ 00000380 10121416 DC8 +16,+18,+20,+22 \ ??AutoChangeStatus_timer_68: \ 00000384 0B50A0E3 MOV R5,#+11 \ 00000388 140000EA B ??AutoChangeStatus_timer_69 \ ??AutoChangeStatus_timer_70: \ 0000038C 0250A0E3 MOV R5,#+2 \ 00000390 120000EA B ??AutoChangeStatus_timer_69 \ ??AutoChangeStatus_timer_71: \ 00000394 0350A0E3 MOV R5,#+3 \ 00000398 100000EA B ??AutoChangeStatus_timer_69 \ ??AutoChangeStatus_timer_72: \ 0000039C 0550A0E3 MOV R5,#+5 \ 000003A0 0E0000EA B ??AutoChangeStatus_timer_69 \ ??AutoChangeStatus_timer_73: \ 000003A4 0450A0E3 MOV R5,#+4 \ 000003A8 0C0000EA B ??AutoChangeStatus_timer_69 \ ??AutoChangeStatus_timer_74: \ 000003AC 0C50A0E3 MOV R5,#+12 \ 000003B0 0A0000EA B ??AutoChangeStatus_timer_69 \ ??AutoChangeStatus_timer_75: \ 000003B4 0650A0E3 MOV R5,#+6 \ 000003B8 080000EA B ??AutoChangeStatus_timer_69 \ ??AutoChangeStatus_timer_76: \ 000003BC 0750A0E3 MOV R5,#+7 \ 000003C0 060000EA B ??AutoChangeStatus_timer_69 \ ??AutoChangeStatus_timer_77: \ 000003C4 0850A0E3 MOV R5,#+8 \ 000003C8 040000EA B ??AutoChangeStatus_timer_69 \ ??AutoChangeStatus_timer_78: \ 000003CC 0950A0E3 MOV R5,#+9 \ 000003D0 020000EA B ??AutoChangeStatus_timer_69 \ ??AutoChangeStatus_timer_79: \ 000003D4 0A50A0E3 MOV R5,#+10 \ 000003D8 000000EA B ??AutoChangeStatus_timer_69 \ ??AutoChangeStatus_timer_67: \ 000003DC 0E50A0E3 MOV R5,#+14 \ ??AutoChangeStatus_timer_69: \ 000003E0 185384E5 STR R5,[R4, #+792] 488 set_my_status(); \ 000003E4 ........ BL set_my_status 489 } 490 #ifdef ELKA 491 SetIconBarHandler(); \ ??AutoChangeStatus_timer_66: \ 000003E8 ........ LDR R0,??DataTable11 ;; addIconBar 492 #endif 493 494 GBS_StartTimerProc(&autoChangeStatus, 216*10, AutoChangeStatus_timer); \ 000003EC 40209FE5 LDR R2,??AutoChangeStatus_timer_5+0x28 ;; AutoChangeStatus_timer \ 000003F0 280184E5 STR R0,[R4, #+296] \ 000003F4 871EA0E3 MOV R1,#+2160 \ 000003F8 D400A0E3 MOV R0,#+212 \ 000003FC 600D80E3 ORR R0,R0,#0x1800 \ 00000400 040080E0 ADD R0,R0,R4 \ 00000404 4D0000EF SWI +77 495 } \ 00000408 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??AutoChangeStatus_timer_5: \ 0000040C ........ DC32 status_1 \ 00000410 ........ DC32 tm_status_1 \ 00000414 ........ DC32 status_2 \ 00000418 ........ DC32 tm_status_2 \ 0000041C ........ DC32 status_3 \ 00000420 ........ DC32 tm_status_3 \ 00000424 ........ DC32 status_4 \ 00000428 ........ DC32 tm_status_4 \ 0000042C ........ DC32 status_5 \ 00000430 ........ DC32 tm_status_5 \ 00000434 ........ DC32 AutoChangeStatus_timer 496 //=================================away_msg=============== 497 //////////////////////////////////////////tozhe dlja auto ping/////////////// 498 \ In segment CODE, align 4, keep-with-next 499 void DrawPing(void *canv) 500 { 501 PrintField(Ping_X,Ping_Y, PINGO, align, fonto, spaco1); \ DrawPing: \ 00000000 ........ LDR R1,??DataTable27 ;; spaco1 \ 00000004 ........ LDR R0,??DataTable34 ;; icons \ 00000008 00402DE9 PUSH {LR} \ 0000000C 001091E5 LDR R1,[R1, #+0] \ 00000010 02002DE9 PUSH {R1} \ 00000014 ........ LDR R1,??DataTable28 ;; fonto \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 02002DE9 PUSH {R1} \ 00000020 CC3290E5 LDR R3,[R0, #+716] \ 00000024 4C10A0E3 MOV R1,#+76 \ 00000028 581D81E3 ORR R1,R1,#0x1600 \ 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 502 } \ 00000044 0380BDE8 POP {R0,R1,PC} ;; return \ ??DrawPing_0: \ 00000048 ........ DC32 Ping_Y \ 0000004C ........ DC32 Ping_X 503 504 //////////////////////////////////////////tozhe dlja auto ping/////////////// 505 506 GBSTMR remind_tmr; 507 volatile int vibra_count; 508 #ifdef ELKA 509 void SLI_Off(void); 510 #endif 511 void start_vibra2(void); 512 513 //////////////////////////reminder timer///////////////////////// 514 \ In segment CODE, align 4, keep-with-next 515 void Remind_Timer2() 516 { \ Remind_Timer2: \ 00000000 10402DE9 PUSH {R4,LR} 517 if (total_unread) \ 00000004 ........ LDR R4,??DataTable34 ;; icons \ 00000008 A80394E5 LDR R0,[R4, #+936] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} 518 { 519 vibra_count=Vibra_cc; \ 00000014 24009FE5 LDR R0,??Remind_Timer2_0 ;; Vibra_cc \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 6C0384E5 STR R0,[R4, #+876] 520 start_vibra2(); \ 00000020 ........ BL start_vibra2 521 GBS_StartTimerProc(&remind_tmr, 6480, Remind_Timer2); \ 00000024 ........ LDR R2,??DataTable17 ;; Remind_Timer2 \ 00000028 5010A0E3 MOV R1,#+80 \ 0000002C 641D81E3 ORR R1,R1,#0x1900 \ 00000030 6C0041E2 SUB R0,R1,#+108 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 4D0000EF SWI +77 522 } 523 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return \ ??Remind_Timer2_0: \ 00000040 ........ DC32 Vibra_cc 524 \ In segment CODE, align 4, keep-with-next 525 void Reminder_timer() 526 { 527 GBS_StartTimerProc(&remind_tmr, 6480, Remind_Timer2); \ Reminder_timer: \ 00000000 ........ LDR R2,??DataTable17 ;; Remind_Timer2 \ 00000004 10009FE5 LDR R0,??Reminder_timer_0 ;; icons + 6372 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 5010A0E3 MOV R1,#+80 \ 00000010 641D81E3 ORR R1,R1,#0x1900 \ 00000014 4D0000EF SWI +77 528 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??Reminder_timer_0: \ 0000001C ........ DC32 icons + 6372 529 //////////////////////////reminder timer///////////////////////// 530 531 //////////////////////////uptime////////////////////////// 532 int Is_UPTIME_On; 533 int uptimeHour; 534 int uptimeMin; 535 int uptimeSec; 536 \ In segment CODE, align 4, keep-with-next 537 void UptimeMinHour() 538 { 539 uptimeSec++; \ UptimeMinHour: \ 00000000 ........ LDR R0,??DataTable34 ;; icons \ 00000004 481390E5 LDR R1,[R0, #+840] 540 if(uptimeSec==60) \ 00000008 442390E5 LDR R2,[R0, #+836] \ 0000000C 011081E2 ADD R1,R1,#+1 \ 00000010 3C0051E3 CMP R1,#+60 541 { 542 uptimeSec=0; \ 00000014 0010A003 MOVEQ R1,#+0 543 uptimeMin++; \ 00000018 01208202 ADDEQ R2,R2,#+1 \ 0000001C 481380E5 STR R1,[R0, #+840] 544 } 545 if(uptimeMin==60) \ 00000020 3C0052E3 CMP R2,#+60 \ 00000024 0300001A BNE ??UptimeMinHour_0 546 { 547 uptimeMin=0; 548 uptimeHour++; \ 00000028 401390E5 LDR R1,[R0, #+832] \ 0000002C 0020A0E3 MOV R2,#+0 \ 00000030 011081E2 ADD R1,R1,#+1 \ 00000034 401380E5 STR R1,[R0, #+832] \ ??UptimeMinHour_0: \ 00000038 442380E5 STR R2,[R0, #+836] 549 } 550 } \ 0000003C 1EFF2FE1 BX LR ;; return 551 552 GBSTMR uptime_tmr; 553 #ifdef NEWSGOLD 554 GBSTMR tracktmr; 555 int tracktimer; 556 #endif 557 \ In segment CODE, align 4, keep-with-next 558 void upTime() 559 { \ upTime: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 560 if(connect_state==3) \ 00000004 ........ LDR R4,??DataTable34 ;; icons \ 00000008 84609FE5 LDR R6,??upTime_0 ;; upTime \ 0000000C F400A0E3 MOV R0,#+244 \ 00000010 600D80E3 ORR R0,R0,#0x1800 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 840394E5 LDR R0,[R4, #+900] \ 0000001C 0070A0E3 MOV R7,#+0 \ 00000020 030050E3 CMP R0,#+3 \ 00000024 0F00001A BNE ??upTime_1 561 { 562 UptimeMinHour(); \ 00000028 ........ BL UptimeMinHour 563 #ifdef NEWSGOLD 564 if (tracktimer>=10)/*&&(_GetPlayStatus()!=1))*/ \ 0000002C 4C0394E5 LDR R0,[R4, #+844] \ 00000030 0A0050E3 CMP R0,#+10 \ 00000034 070000BA BLT ??upTime_2 565 { 566 GBS_StartTimerProc(&tracktmr, 216*5, GetTags); \ 00000038 ........ LDR R2,??DataTable20 ;; GetTags \ 0000003C 3810A0E3 MOV R1,#+56 \ 00000040 401E81E3 ORR R1,R1,#0x400 \ 00000044 0400A0E3 MOV R0,#+4 \ 00000048 640D80E3 ORR R0,R0,#0x1900 \ 0000004C 040080E0 ADD R0,R0,R4 \ 00000050 4D0000EF SWI +77 567 tracktimer=0; \ 00000054 4C7384E5 STR R7,[R4, #+844] 568 } 569 tracktimer++; \ ??upTime_2: \ 00000058 4C0394E5 LDR R0,[R4, #+844] \ 0000005C 010080E2 ADD R0,R0,#+1 \ 00000060 4C0384E5 STR R0,[R4, #+844] 570 #endif 571 GBS_StartTimerProc(&uptime_tmr, 216, upTime); \ 00000064 050000EA B ??upTime_3 572 } 573 else 574 { 575 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 576 { 577 uptimeHour=0; \ 00000074 40738405 STREQ R7,[R4, #+832] 578 uptimeMin=0; \ 00000078 44738405 STREQ R7,[R4, #+836] 579 uptimeSec=0; \ 0000007C 48738405 STREQ R7,[R4, #+840] 580 } 581 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 582 } 583 } \ 00000090 F080BDE8 POP {R4-R7,PC} ;; return \ ??upTime_0: \ 00000094 ........ DC32 upTime \ 00000098 ........ DC32 Pause_Time 584 585 char onlineTime[128]; \ In segment CODE, align 4, keep-with-next 586 void DrawOnlineTime(void *canv) 587 { \ DrawOnlineTime: \ 00000000 30402DE9 PUSH {R4,R5,LR} 588 if(connect_state==3) \ 00000004 ........ LDR R4,??DataTable34 ;; icons \ 00000008 1400A0E3 MOV R0,#+20 \ 0000000C 841394E5 LDR R1,[R4, #+900] \ 00000010 640D80E3 ORR R0,R0,#0x1900 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 ........ LDR R0,??DataTable22 ;; `?` \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0800001A BNE ??DrawOnlineTime_0 589 { 590 sprintf(onlineTime,"Online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); \ 00000024 481394E5 LDR R1,[R4, #+840] \ 00000028 02002DE9 PUSH {R1} \ 0000002C 443394E5 LDR R3,[R4, #+836] \ 00000030 402394E5 LDR R2,[R4, #+832] \ 00000034 281080E2 ADD R1,R0,#+40 \ 00000038 0500A0E1 MOV R0,R5 \ 0000003C 160000EF SWI +22 \ 00000040 04D08DE2 ADD SP,SP,#+4 \ 00000044 020000EA B ??DrawOnlineTime_1 591 } 592 else 593 sprintf(onlineTime,"Offline"); \ ??DrawOnlineTime_0: \ 00000048 401080E2 ADD R1,R0,#+64 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 160000EF SWI +22 594 PrintField(onlineTime_x,onlineTime_y, onlineTime, align, fonto, spaco1); \ ??DrawOnlineTime_1: \ 00000054 ........ LDR R0,??DataTable27 ;; spaco1 \ 00000058 0520A0E1 MOV R2,R5 \ 0000005C 000090E5 LDR R0,[R0, #+0] \ 00000060 01002DE9 PUSH {R0} \ 00000064 ........ LDR R0,??DataTable28 ;; fonto \ 00000068 000090E5 LDR R0,[R0, #+0] \ 0000006C 01002DE9 PUSH {R0} \ 00000070 CC3294E5 LDR R3,[R4, #+716] \ 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 595 } \ 00000088 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??DrawOnlineTime_2: \ 0000008C ........ DC32 onlineTime_y \ 00000090 ........ DC32 onlineTime_x 596 597 598 //---------------------- Вывод времени на идле ---------------------// 599 600 \ In segment CODE, align 4, keep-with-next 601 void DrawAutoMSG(void *canv) 602 { \ DrawAutoMSG: \ 00000000 10402DE9 PUSH {R4,LR} 603 char awayTime[64]; 604 if(away_m && showAwayIdle) \ 00000004 ........ LDR R4,??DataTable34 ;; icons \ 00000008 40D04DE2 SUB SP,SP,#+64 \ 0000000C 2C0394E5 LDR R0,[R4, #+812] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 1700000A BEQ ??DrawAutoMSG_0 \ 00000018 ........ LDR R0,??DataTable26 ;; showAwayIdle \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 1300000A BEQ ??DrawAutoMSG_0 605 { 606 sprintf(awayTime,"Away from [%s]",away_msg_time_dace); \ 00000028 50109FE5 LDR R1,??DrawAutoMSG_1 ;; `?` \ 0000002C A400A0E3 MOV R0,#+164 \ 00000030 600D80E3 ORR R0,R0,#0x1800 \ 00000034 042080E0 ADD R2,R0,R4 \ 00000038 0D00A0E1 MOV R0,SP \ 0000003C 160000EF SWI +22 607 PrintField(auto_x,auto_y, awayTime, align, fonto, spaco1); \ 00000040 ........ LDR R0,??DataTable27 ;; spaco1 \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 01002DE9 PUSH {R0} \ 0000004C ........ LDR R0,??DataTable28 ;; fonto \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 01002DE9 PUSH {R0} \ 00000058 CC3294E5 LDR R3,[R4, #+716] \ 0000005C 20009FE5 LDR R0,??DrawAutoMSG_1+0x4 ;; auto_y \ 00000060 08208DE2 ADD R2,SP,#+8 \ 00000064 001090E5 LDR R1,[R0, #+0] \ 00000068 18009FE5 LDR R0,??DrawAutoMSG_1+0x8 ;; auto_x \ 0000006C 000090E5 LDR R0,[R0, #+0] \ 00000070 ........ _BLF PrintField,??PrintField??rA \ 00000074 08D08DE2 ADD SP,SP,#+8 608 } 609 } \ ??DrawAutoMSG_0: \ 00000078 40D08DE2 ADD SP,SP,#+64 ;; stack cleaning \ 0000007C 1080BDE8 POP {R4,PC} ;; return \ ??DrawAutoMSG_1: \ 00000080 ........ DC32 `?` \ 00000084 ........ DC32 auto_y \ 00000088 ........ DC32 auto_x 610 611 612 //---------------------------- Input away msg ---------------------------// 613 614 //Вводим сообщение какое хотим,а не то что прописали в конфиге 615 int input_awaymsg_id; 616 617 const HEADER_DESC input_awaymsg_hdr={0,0,131,21,NULL,(int)"Ввод автосообщения",LGP_NULL}; 618 void UpdateCLheader(void); \ In segment CODE, align 4, keep-with-next 619 int input_awaymsg_onkey(GUI *data, GUI_MSG *msg) 620 { \ input_awaymsg_onkey: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 621 WSHDR *ws; 622 if (msg->keys==0x0FFF || msg->keys==VOL_DOWN_BUTTON) \ 00000008 ........ LDR R4,??DataTable34 ;; icons \ 0000000C 0160A0E1 MOV R6,R1 \ 00000010 F210D6E1 LDRSH R1,[R6, #+2] \ 00000014 0050A0E3 MOV R5,#+0 \ 00000018 FF20A0E3 MOV R2,#+255 \ 0000001C F02E82E3 ORR R2,R2,#0xF00 \ 00000020 020051E1 CMP R1,R2 \ 00000024 0E005113 CMPNE R1,#+14 \ 00000028 2200001A BNE ??input_awaymsg_onkey_0 623 { 624 EDITCONTROL ec; 625 ExtractEditControl(data,2,&ec); 626 ws=ec.pWS; 627 zeromem(awayMsg,256); \ 0000002C ........ LDR R8,??DataTable32 ;; awayMsg \ 00000030 0D20A0E1 MOV R2,SP \ 00000034 0210A0E3 MOV R1,#+2 \ 00000038 690100EF SWI +361 \ 0000003C 28709DE5 LDR R7,[SP, #+40] \ 00000040 401FA0E3 MOV R1,#+256 \ 00000044 0800A0E1 MOV R0,R8 \ 00000048 1D0100EF SWI +285 628 int i=0; 629 for(i=0;iwsbody[0];i++) \ 0000004C 000097E5 LDR R0,[R7, #+0] \ 00000050 0090A0E3 MOV R9,#+0 \ 00000054 B000D0E1 LDRH R0,[R0, #+0] \ 00000058 000050E3 CMP R0,#+0 \ 0000005C 0500001A BNE ??input_awaymsg_onkey_1 \ 00000060 080000EA B ??input_awaymsg_onkey_2 630 awayMsg[i]=char16to8(ws->wsbody[i+1]); \ ??input_awaymsg_onkey_3: \ 00000064 890080E0 ADD R0,R0,R9, LSL #+1 \ 00000068 B200D0E1 LDRH R0,[R0, #+2] \ 0000006C ........ _BLF char16to8,??char16to8??rA \ 00000070 0800C9E7 STRB R0,[R9, +R8] \ 00000074 019089E2 ADD R9,R9,#+1 \ ??input_awaymsg_onkey_1: \ 00000078 000097E5 LDR R0,[R7, #+0] \ 0000007C B010D0E1 LDRH R1,[R0, #+0] \ 00000080 010059E1 CMP R9,R1 \ 00000084 F6FFFFBA BLT ??input_awaymsg_onkey_3 631 awayMsg[i]=0; 632 633 #ifdef kluchnik2 634 char *s; 635 ExtractEditControl(data,4,&ec); 636 ws=ec.pWS; 637 s=malloc(ws->wsbody[0]); 638 *s=0; 639 for(i=0;iwsbody[0];i++) 640 *(s+i)=char16to8(ws->wsbody[i+1]); 641 *(s+i)=0; 642 strcat(awayMsg,s); 643 mfree(s); 644 #endif 645 msg_away_timer=(AUTO_ENGADE*12); \ ??input_awaymsg_onkey_2: \ 00000088 ........ LDR R0,??DataTable31 ;; AUTO_ENGADE \ 0000008C 0850C9E7 STRB R5,[R9, +R8] \ 00000090 000090E5 LDR R0,[R0, #+0] \ 00000094 0C10A0E3 MOV R1,#+12 \ 00000098 910000E0 MUL R0,R1,R0 \ 0000009C 280384E5 STR R0,[R4, #+808] 646 away_m=1; \ 000000A0 0100A0E3 MOV R0,#+1 \ 000000A4 2C0384E5 STR R0,[R4, #+812] 647 away_timer(); \ 000000A8 ........ BL away_timer 648 UpdateCLheader(); 649 GeneralFunc_flag1(input_awaymsg_id,1); \ 000000AC 500394E5 LDR R0,[R4, #+848] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 3D0100EF SWI +317 650 // GeneralFuncF1(1); 651 } 652 653 if(msg->keys==LEFT_SOFT || msg->keys==RED_BUTTON) \ ??input_awaymsg_onkey_0: \ 000000B8 F200D6E1 LDRSH R0,[R6, #+2] \ 000000BC 010050E3 CMP R0,#+1 \ 000000C0 0C005013 CMPNE R0,#+12 \ 000000C4 0800001A BNE ??input_awaymsg_onkey_4 654 { 655 msg_away_timer=0; 656 away_m=0; 657 if(change_back_status) \ 000000C8 340394E5 LDR R0,[R4, #+820] \ 000000CC 285384E5 STR R5,[R4, #+808] \ 000000D0 2C5384E5 STR R5,[R4, #+812] \ 000000D4 000050E3 CMP R0,#+0 \ 000000D8 0400000A BEQ ??input_awaymsg_onkey_5 658 { 659 CurrentStatus=status_rem; \ 000000DC 300394E5 LDR R0,[R4, #+816] \ 000000E0 180384E5 STR R0,[R4, #+792] 660 set_my_status(); \ 000000E4 ........ BL set_my_status 661 change_back_status=0; \ 000000E8 345384E5 STR R5,[R4, #+820] 662 } 663 UpdateCLheader(); 664 } 665 return(0); \ ??input_awaymsg_onkey_4: \ 000000EC 0000A0E3 MOV R0,#+0 \ ??input_awaymsg_onkey_5: \ 000000F0 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000F4 F083BDE8 POP {R4-R9,PC} ;; return 666 } 667 \ In segment CODE, align 4, keep-with-next 668 void input_awaymsg_ghook(GUI *gui, int cmd) 669 { \ input_awaymsg_ghook: \ 00000000 00402DE9 PUSH {LR} 670 static SOFTKEY_DESC sk={0x0FFF,0x0000,(int)"Сохранить"}; 671 if (cmd==7) \ 00000004 070051E3 CMP R1,#+7 \ 00000008 0300001A BNE ??input_awaymsg_ghook_0 672 { 673 SetSoftKey(gui,&sk,SET_SOFT_KEY_N); \ 0000000C 2C109FE5 LDR R1,??input_awaymsg_ghook_1 ;; ??sk \ 00000010 0020A0E3 MOV R2,#+0 \ 00000014 680100EF SWI +360 \ 00000018 0080BDE8 POP {PC} 674 } 675 if(cmd==0xA) \ ??input_awaymsg_ghook_0: \ 0000001C 0A0051E3 CMP R1,#+10 \ 00000020 0100001A BNE ??input_awaymsg_ghook_2 676 { 677 DisableIDLETMR(); // Отключаем таймер выхода по таймауту \ 00000024 7F0100EF SWI +383 \ 00000028 0080BDE8 POP {PC} 678 } 679 if (cmd==0x0C) \ ??input_awaymsg_ghook_2: \ 0000002C 0C0051E3 CMP R1,#+12 \ 00000030 0080BD18 POPNE {PC} 680 { 681 EDIT_SetCursorPos(gui,1); \ 00000034 0110A0E3 MOV R1,#+1 \ 00000038 D40100EF SWI +468 682 } 683 if(cmd==0x03){} 684 } \ 0000003C 0080BDE8 POP {PC} ;; return \ ??input_awaymsg_ghook_1: \ 00000040 ........ DC32 ??sk 685 \ In segment CODE, align 4, keep-with-next 686 void input_awaymsg_locret(void){} \ input_awaymsg_locret: \ 00000000 1EFF2FE1 BX LR ;; return 687 688 SOFTKEY_DESC input_awaymsg_sk[]= 689 { 690 {0x0018,0x0000,(int)"Лев"}, 691 {0x0001,0x0000,(int)"Прав"}, 692 {0x003D,0x0000,(int)LGP_DOIT_PIC} 693 }; 694 695 SOFTKEYSTAB input_awaymsg_skt= 696 { 697 input_awaymsg_sk,0 698 }; 699 700 const INPUTDIA_DESC input_awaymsg_desc= 701 { 702 1, 703 input_awaymsg_onkey, 704 input_awaymsg_ghook, 705 (void *)input_awaymsg_locret, 706 0, 707 &input_awaymsg_skt, 708 {0,NULL,NULL,NULL}, 709 FONT_SMALL, 710 100, 711 101, 712 0, 713 0x00000000, 714 0x40000000 715 }; 716 \ In segment CODE, align 4, keep-with-next 717 void InputAwayMsg() 718 { \ InputAwayMsg: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 719 WSHDR *wss=AllocWS(256); 720 void *ma=malloc_adr(); 721 void *eq=AllocEQueue(ma, mfree_adr()); 722 EDITCONTROL ec; 723 PrepareEditControl(&ec); 724 wsprintf(wss,"%t","Сообщение:\n"); \ 00000004 28519FE5 LDR R5,??InputAwayMsg_0+0x4 ;; input_awaymsg_desc \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 0000000C 400FA0E3 MOV R0,#+256 \ 00000010 250100EF SWI +293 \ 00000014 0060A0E1 MOV R6,R0 \ 00000018 148000EF SWI +32788 \ 0000001C 0070A0E1 MOV R7,R0 \ 00000020 158000EF SWI +32789 \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0700A0E1 MOV R0,R7 \ 0000002C 630100EF SWI +355 \ 00000030 0040A0E1 MOV R4,R0 \ 00000034 0D00A0E1 MOV R0,SP \ 00000038 640100EF SWI +356 \ 0000003C 382085E2 ADD R2,R5,#+56 \ 00000040 3A1F8FE2 ADR R1,??InputAwayMsg_0 ;; "%t" \ 00000044 0600A0E1 MOV R0,R6 \ 00000048 240100EF SWI +292 725 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); \ 0000004C 2000A0E3 MOV R0,#+32 \ 00000050 01002DE9 PUSH {R0} \ 00000054 0630A0E1 MOV R3,R6 \ 00000058 0020A0E3 MOV R2,#+0 \ 0000005C 0110A0E3 MOV R1,#+1 \ 00000060 04008DE2 ADD R0,SP,#+4 \ 00000064 650100EF SWI +357 726 AddEditControlToEditQend(eq,&ec,ma); \ 00000068 0720A0E1 MOV R2,R7 \ 0000006C 04108DE2 ADD R1,SP,#+4 \ 00000070 0400A0E1 MOV R0,R4 \ 00000074 660100EF SWI +358 727 728 PrepareEditControl(&ec); \ 00000078 04008DE2 ADD R0,SP,#+4 \ 0000007C 640100EF SWI +356 729 CutWSTR(wss,0); \ 00000080 0010A0E3 MOV R1,#+0 \ 00000084 0600A0E1 MOV R0,R6 \ 00000088 260100EF SWI +294 730 ascii2ws(wss,awayMsg); \ 0000008C ........ LDR R1,??DataTable32 ;; awayMsg \ 00000090 0600A0E1 MOV R0,R6 \ 00000094 ........ _BLF ascii2ws,??ascii2ws??rA 731 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); \ 00000098 FF00A0E3 MOV R0,#+255 \ 0000009C 01002DE9 PUSH {R0} \ 000000A0 0630A0E1 MOV R3,R6 \ 000000A4 4020A0E3 MOV R2,#+64 \ 000000A8 0310A0E3 MOV R1,#+3 \ 000000AC 08008DE2 ADD R0,SP,#+8 \ 000000B0 650100EF SWI +357 732 AddEditControlToEditQend(eq,&ec,ma); \ 000000B4 0720A0E1 MOV R2,R7 \ 000000B8 08108DE2 ADD R1,SP,#+8 \ 000000BC 0400A0E1 MOV R0,R4 \ 000000C0 660100EF SWI +358 733 #ifdef kluchnik2 734 PrepareEditControl(&ec); 735 wsprintf(wss,"%t","Сообщение 2:\n"); 736 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); 737 AddEditControlToEditQend(eq,&ec,ma); 738 739 ascii2ws(wss,"когда смогу отвечу:)"); 740 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); 741 AddEditControlToEditQend(eq,&ec,ma); 742 #endif 743 patch_header(&input_awaymsg_hdr); \ 000000C4 440085E2 ADD R0,R5,#+68 \ 000000C8 ........ _BLF patch_header,??patch_header??rA 744 patch_input(&input_awaymsg_desc); \ 000000CC 0000A0E3 MOV R0,#+0 \ 000000D0 B801C5E1 STRH R0,[R5, #+24] \ 000000D4 8A8100EF SWI +33162 \ 000000D8 190080E2 ADD R0,R0,#+25 \ 000000DC BA01C5E1 STRH R0,[R5, #+26] \ 000000E0 888100EF SWI +33160 \ 000000E4 010040E2 SUB R0,R0,#+1 \ 000000E8 BC01C5E1 STRH R0,[R5, #+28] \ 000000EC 898100EF SWI +33161 \ 000000F0 0060A0E1 MOV R6,R0 \ 000000F4 8B8100EF SWI +33163 \ 000000F8 000046E0 SUB R0,R6,R0 \ 000000FC 010040E2 SUB R0,R0,#+1 \ 00000100 BE01C5E1 STRH R0,[R5, #+30] 745 746 input_awaymsg_id=CreateInputTextDialog(&input_awaymsg_desc,&input_awaymsg_hdr,eq,1,0);//создаем диалоговое окно \ 00000104 0000A0E3 MOV R0,#+0 \ 00000108 01002DE9 PUSH {R0} \ 0000010C 0130A0E3 MOV R3,#+1 \ 00000110 0420A0E1 MOV R2,R4 \ 00000114 441085E2 ADD R1,R5,#+68 \ 00000118 0500A0E1 MOV R0,R5 \ 0000011C 670100EF SWI +359 \ 00000120 10109FE5 LDR R1,??InputAwayMsg_0+0x8 ;; icons + 848 \ 00000124 000081E5 STR R0,[R1, #+0] 747 } \ 00000128 38D08DE2 ADD SP,SP,#+56 \ 0000012C F080BDE8 POP {R4-R7,PC} ;; return \ ??InputAwayMsg_0: \ 00000130 25740000 DC8 "%t",+0 \ 00000134 ........ DC32 input_awaymsg_desc \ 00000138 ........ DC32 icons + 848 748 749 750 //////////////////////////uptime////////////////////////// 751 #ifdef ELKA 752 GBSTMR sli_tmr; \ In segment CODE, align 4, keep-with-next 753 void SLI_On() 754 { \ SLI_On: \ 00000000 10402DE9 PUSH {R4,LR} 755 if(Is_SLI_On) \ 00000004 ........ LDR R4,??DataTable34 ;; icons \ 00000008 E80294E5 LDR R0,[R4, #+744] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0100000A BEQ ??SLI_On_0 756 SLI_SetState(1); \ 00000014 0100A0E3 MOV R0,#+1 \ 00000018 360000EF SWI +54 757 GBS_StartTimerProc(&sli_tmr, IN_TICKS(2) / 20, SLI_Off); \ ??SLI_On_0: \ 0000001C 14209FE5 LDR R2,??SLI_On_1 ;; SLI_Off \ 00000020 1510A0E3 MOV R1,#+21 \ 00000024 9400A0E3 MOV R0,#+148 \ 00000028 640D80E3 ORR R0,R0,#0x1900 \ 0000002C 040080E0 ADD R0,R0,R4 \ 00000030 4D0000EF SWI +77 758 } \ 00000034 1080BDE8 POP {R4,PC} ;; return \ ??SLI_On_1: \ 00000038 ........ DC32 SLI_Off 759 \ In segment CODE, align 4, keep-with-next 760 void SLI_Off() 761 { \ SLI_Off: \ 00000000 00402DE9 PUSH {LR} 762 SLI_SetState(2); \ 00000004 0200A0E3 MOV R0,#+2 \ 00000008 360000EF SWI +54 763 if(total_unread) \ 0000000C ........ LDR R0,??DataTable34 ;; icons \ 00000010 A81390E5 LDR R1,[R0, #+936] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0600000A BEQ ??SLI_Off_0 764 GBS_StartTimerProc(&sli_tmr, IN_TICKS(2) / 20, SLI_On); //26*SLI_time2 \ 0000001C 20209FE5 LDR R2,??SLI_Off_1 ;; SLI_On \ 00000020 1510A0E3 MOV R1,#+21 \ 00000024 9430A0E3 MOV R3,#+148 \ 00000028 643D83E3 ORR R3,R3,#0x1900 \ 0000002C 000083E0 ADD R0,R3,R0 \ 00000030 4D0000EF SWI +77 \ 00000034 0080BDE8 POP {PC} 765 else 766 SLI_SetState(0); \ ??SLI_Off_0: \ 00000038 0000A0E3 MOV R0,#+0 \ 0000003C 360000EF SWI +54 767 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??SLI_Off_1: \ 00000044 ........ DC32 SLI_On 768 \ In segment CODE, align 4, keep-with-next 769 void SLI_check() 770 { 771 if (total_unread) \ SLI_check: \ 00000000 14009FE5 LDR R0,??SLI_check_0 ;; icons + 936 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0080BD08 POPEQ {PC} 772 SLI_On(); \ 00000014 ........ BL SLI_On 773 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??SLI_check_0: \ 0000001C ........ DC32 icons + 936 774 \ In segment CODE, align 4, keep-with-next 775 void SLI_Timer() 776 { 777 GBS_StartTimerProc(&sli_tmr, 262, SLI_check); //262*SLI_time \ SLI_Timer: \ 00000000 14209FE5 LDR R2,??SLI_Timer_0 ;; SLI_check \ 00000004 14009FE5 LDR R0,??SLI_Timer_0+0x4 ;; icons + 6548 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 0610A0E3 MOV R1,#+6 \ 00000010 401F81E3 ORR R1,R1,#0x100 \ 00000014 4D0000EF SWI +77 778 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??SLI_Timer_0: \ 0000001C ........ DC32 SLI_check \ 00000020 ........ DC32 icons + 6548 779 #endif 780 \ In segment CODE, align 4, keep-with-next 781 void setup_ICONS(void) 782 { \ setup_ICONS: \ 00000000 30402DE9 PUSH {R4,R5,LR} 783 int i=0; \ 00000004 0040A0E3 MOV R4,#+0 784 do 785 { 786 if (!S_ICONS[i]) S_ICONS[i]=(int)MakeGlobalString(ICON_PATH,'\\',icons_names[i]); \ ??setup_ICONS_0: \ 00000008 ........ LDR R0,??DataTable65 ;; icons \ 0000000C 045180E0 ADD R5,R0,R4, LSL #+2 \ 00000010 700095E5 LDR R0,[R5, #+112] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0500001A BNE ??setup_ICONS_1 \ 0000001C ........ LDR R0,??DataTable38 ;; icons_names \ 00000020 5C10A0E3 MOV R1,#+92 \ 00000024 042190E7 LDR R2,[R0, +R4, LSL #+2] \ 00000028 14009FE5 LDR R0,??setup_ICONS_2 ;; ICON_PATH \ 0000002C ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 00000030 700085E5 STR R0,[R5, #+112] 787 i++; \ ??setup_ICONS_1: \ 00000034 014084E2 ADD R4,R4,#+1 788 } 789 while(ibitmap); \ ??FreeStatusToIMGHDR_0: \ 0000000C 040195E7 LDR R0,[R5, +R4, LSL #+2] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 0100000A BEQ ??FreeStatusToIMGHDR_1 \ 00000018 080090E5 LDR R0,[R0, #+8] \ 0000001C 150000EF SWI +21 815 i++; \ ??FreeStatusToIMGHDR_1: \ 00000020 014084E2 ADD R4,R4,#+1 816 } 817 while(i>2,stop_vibra); \ 0000004C 3610A0E3 MOV R1,#+54 \ 00000050 000000EA B ??start_vibra_2 1095 else 1096 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra); \ ??start_vibra_1: \ 00000054 6C10A0E3 MOV R1,#+108 \ ??start_vibra_2: \ 00000058 4D0000EF SWI +77 1097 } 1098 } \ 0000005C 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra_0: \ 00000060 ........ DC32 stop_vibra 1099 \ In segment CODE, align 4, keep-with-next 1100 void stop_vibra(void) 1101 { \ stop_vibra: \ 00000000 00402DE9 PUSH {LR} 1102 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1103 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable65 ;; icons \ 00000010 6C1390E5 LDR R1,[R0, #+876] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 6C1380E5 STR R1,[R0, #+876] \ 0000001C 0080BD08 POPEQ {PC} 1104 { 1105 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra_0 ;; start_vibra \ 00000024 B410A0E3 MOV R1,#+180 \ 00000028 681D81E3 ORR R1,R1,#0x1A00 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable57 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra_1 1106 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra_2 1107 else 1108 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra); \ ??stop_vibra_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra_2: \ 0000004C 4D0000EF SWI +77 1109 } 1110 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra_0: \ 00000054 ........ DC32 start_vibra 1111 \ In segment CODE, align 4, keep-with-next 1112 void start_vibra2(void) 1113 { 1114 void stop_vibra2(void); 1115 1116 SetVibration(vibraPower); \ start_vibra2: \ 00000000 ........ LDR R0,??DataTable54 ;; vibraPower \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 7C0000EF SWI +124 1117 if(VIBR_TYPE) \ 00000010 ........ LDR R1,??DataTable57 ;; VIBR_TYPE \ 00000014 18009FE5 LDR R0,??start_vibra2_0 ;; icons + 6836 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 14209FE5 LDR R2,??start_vibra2_0+0x4 ;; stop_vibra2 \ 00000020 000051E3 CMP R1,#+0 1118 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>2,stop_vibra2); \ 00000024 3610A013 MOVNE R1,#+54 1119 else 1120 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra2); \ 00000028 6C10A003 MOVEQ R1,#+108 \ 0000002C 4D0000EF SWI +77 1121 } \ 00000030 0080BDE8 POP {PC} ;; return \ ??start_vibra2_0: \ 00000034 ........ DC32 icons + 6836 \ 00000038 ........ DC32 stop_vibra2 1122 \ In segment CODE, align 4, keep-with-next 1123 void stop_vibra2(void) 1124 { \ stop_vibra2: \ 00000000 00402DE9 PUSH {LR} 1125 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1126 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable65 ;; icons \ 00000010 6C1390E5 LDR R1,[R0, #+876] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 6C1380E5 STR R1,[R0, #+876] \ 0000001C 0080BD08 POPEQ {PC} 1127 { 1128 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra2_0 ;; start_vibra2 \ 00000024 B410A0E3 MOV R1,#+180 \ 00000028 681D81E3 ORR R1,R1,#0x1A00 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable57 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra2_1 1129 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra2); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra2_2 1130 else 1131 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra2); \ ??stop_vibra2_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra2_2: \ 0000004C 4D0000EF SWI +77 1132 } 1133 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra2_0: \ 00000054 ........ DC32 start_vibra2 1134 \ In segment CODE, align 4, keep-with-next 1135 void ChangeVibra(void) 1136 { 1137 if (!(Is_Vibra_Enabled=!(Is_Vibra_Enabled))) \ ChangeVibra: \ 00000000 ........ LDR R0,??DataTable65 ;; icons \ 00000004 00402DE9 PUSH {LR} \ 00000008 101390E5 LDR R1,[R0, #+784] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 1C109FE5 LDR R1,??ChangeVibra_0 ;; `?` \ 00000008 4BDF4DE2 SUB SP,SP,#+300 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ BL FreeTemplates \ 00000014 ........ LDR R1,??DataTable67 ;; TEMPLATES_PATH \ 00000018 2C008DE2 ADD R0,SP,#+44 \ 0000001C 1A0000EF SWI +26 \ 00000020 2C008DE2 ADD R0,SP,#+44 \ 00000024 1B0000EF SWI +27 \ 00000028 0070A0E1 MOV R7,R0 \ 0000002C 2C008DE2 ADD R0,SP,#+44 \ 00000030 005087E0 ADD R5,R7,R0 \ 00000034 0420A0E1 MOV R2,R4 \ 00000038 0610A0E1 MOV R1,R6 \ 0000003C 0500A0E1 MOV R0,R5 \ 00000040 160000EF SWI +22 1179 if (GetFileStats(fn,&stat,&ul)==-1) goto L1; \ 00000044 0040E0E3 MVN R4,#+0 \ 00000048 0D20A0E1 MOV R2,SP \ 0000004C 04108DE2 ADD R1,SP,#+4 \ 00000050 2C008DE2 ADD R0,SP,#+44 \ 00000054 840000EF SWI +132 \ 00000058 040050E1 CMP R0,R4 \ 0000005C 0A00000A BEQ ??LoadTemplates_1 1180 if ((fsize=stat.size)<=0) goto L1; \ 00000060 08709DE5 LDR R7,[SP, #+8] \ 00000064 010057E3 CMP R7,#+1 \ 00000068 070000BA BLT ??LoadTemplates_1 1181 if ((f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul))==-1) \ 0000006C 0D30A0E1 MOV R3,SP \ 00000070 8020A0E3 MOV R2,#+128 \ 00000074 801CA0E3 MOV R1,#+32768 \ 00000078 2C008DE2 ADD R0,SP,#+44 \ 0000007C 0A0000EF SWI +10 \ 00000080 0080A0E1 MOV R8,R0 \ 00000084 040058E1 CMP R8,R4 \ 00000088 1400001A BNE ??LoadTemplates_2 1182 { 1183 L1: 1184 strcpy(fn+i,"\\0.txt"); \ ??LoadTemplates_1: \ 0000008C 081086E2 ADD R1,R6,#+8 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 1A0000EF SWI +26 1185 if (GetFileStats(fn,&stat,&ul)==-1) return 0; \ 00000098 0D20A0E1 MOV R2,SP \ 0000009C 04108DE2 ADD R1,SP,#+4 \ 000000A0 2C008DE2 ADD R0,SP,#+44 \ 000000A4 840000EF SWI +132 \ 000000A8 040050E1 CMP R0,R4 \ 000000AC 0200001A BNE ??LoadTemplates_3 \ ??LoadTemplates_4: \ 000000B0 0000A0E3 MOV R0,#+0 \ ??LoadTemplates_5: \ 000000B4 4BDF8DE2 ADD SP,SP,#+300 ;; stack cleaning \ 000000B8 F087BDE8 POP {R4-R10,PC} ;; return 1186 if ((fsize=stat.size)<=0) return 0; \ ??LoadTemplates_3: \ 000000BC 08709DE5 LDR R7,[SP, #+8] \ 000000C0 010057E3 CMP R7,#+1 \ 000000C4 F9FFFFBA BLT ??LoadTemplates_4 1187 f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul); \ 000000C8 0D30A0E1 MOV R3,SP \ 000000CC 8020A0E3 MOV R2,#+128 \ 000000D0 801CA0E3 MOV R1,#+32768 \ 000000D4 2C008DE2 ADD R0,SP,#+44 \ 000000D8 0A0000EF SWI +10 \ 000000DC 0080A0E1 MOV R8,R0 1188 } 1189 if (f==-1) return 0; \ ??LoadTemplates_2: \ 000000E0 040058E1 CMP R8,R4 \ 000000E4 F1FFFF0A BEQ ??LoadTemplates_4 1190 p=templates_chars=malloc(fsize+1); \ 000000E8 ........ LDR R4,??DataTable65 ;; icons \ 000000EC 010087E2 ADD R0,R7,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 700384E5 STR R0,[R4, #+880] \ 000000F8 0060A0E1 MOV R6,R0 1191 p[fread(f,p,fsize,&ul)]=0; \ 000000FC 0050A0E3 MOV R5,#+0 \ 00000100 0D30A0E1 MOV R3,SP \ 00000104 0720A0E1 MOV R2,R7 \ 00000108 0610A0E1 MOV R1,R6 \ 0000010C 0800A0E1 MOV R0,R8 \ 00000110 0B0000EF SWI +11 \ 00000114 0650C0E7 STRB R5,[R0, +R6] 1192 fclose(f,&ul); \ 00000118 0D10A0E1 MOV R1,SP \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 0D0000EF SWI +13 1193 i=0; \ 00000124 0070A0E3 MOV R7,#+0 1194 pp=p; \ 00000128 0680A0E1 MOV R8,R6 \ 0000012C 020000EA B ??LoadTemplates_6 1195 for(;;) 1196 { 1197 c=*p; 1198 if (c<32) 1199 { 1200 if (pp&&(pp!=p)) 1201 { 1202 templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 1203 templates_lines[i++]=pp; 1204 } 1205 pp=NULL; 1206 if (!c) break; 1207 *p=0; 1208 } 1209 else 1210 { 1211 if (pp==NULL) pp=p; \ ??LoadTemplates_7: \ 00000130 000058E3 CMP R8,#+0 \ 00000134 0680A001 MOVEQ R8,R6 1212 } 1213 p++; \ ??LoadTemplates_8: \ 00000138 016086E2 ADD R6,R6,#+1 \ ??LoadTemplates_6: \ 0000013C 0090D6E5 LDRB R9,[R6, #+0] \ 00000140 200059E3 CMP R9,#+32 \ 00000144 F9FFFFAA BGE ??LoadTemplates_7 \ 00000148 000058E3 CMP R8,#+0 \ 0000014C 06005811 CMPNE R8,R6 \ 00000150 0600000A BEQ ??LoadTemplates_9 \ 00000154 740394E5 LDR R0,[R4, #+884] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 740384E5 STR R0,[R4, #+884] \ 00000168 078180E7 STR R8,[R0, +R7, LSL #+2] \ 0000016C 0A70A0E1 MOV R7,R10 \ ??LoadTemplates_9: \ 00000170 0080A0E3 MOV R8,#+0 \ 00000174 000059E3 CMP R9,#+0 1214 } 1215 return i; \ 00000178 0700A001 MOVEQ R0,R7 \ 0000017C CCFFFF0A BEQ ??LoadTemplates_5 \ 00000180 0050C6E5 STRB R5,[R6, #+0] \ 00000184 EBFFFFEA B ??LoadTemplates_8 \ ??LoadTemplates_0: \ 00000188 ........ DC32 `?` 1216 } 1217 1218 1219 1220 //---------------------- AUTOBOT MESSAGE -------------------------// 1221 1222 1223 #ifdef kluchnik 1224 char *bot_chars; //Собственно файл 1225 char **bot_lines; //Массив указателей на строки 1226 \ In segment CODE, align 4, keep-with-next 1227 void FreeBotMessage(void) 1228 { \ FreeBotMessage: \ 00000000 10402DE9 PUSH {R4,LR} 1229 if (bot_lines) mfree(bot_lines); \ 00000004 ........ LDR R4,??DataTable65 ;; icons \ 00000008 7C0394E5 LDR R0,[R4, #+892] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0000000A BEQ ??FreeBotMessage_0 \ 00000014 150000EF SWI +21 1230 if (bot_chars) mfree(bot_chars); \ ??FreeBotMessage_0: \ 00000018 780394E5 LDR R0,[R4, #+888] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0100000A BEQ ??FreeBotMessage_1 \ 00000024 150000EF SWI +21 1231 bot_lines=NULL; \ 00000028 0000A0E3 MOV R0,#+0 \ ??FreeBotMessage_1: \ 0000002C 7C0384E5 STR R0,[R4, #+892] 1232 bot_chars=NULL; \ 00000030 780384E5 STR R0,[R4, #+888] 1233 } \ 00000034 1080BDE8 POP {R4,PC} ;; return 1234 \ In segment CODE, align 4, keep-with-next 1235 int LoadBotMessage(unsigned int uin) 1236 { \ LoadBotMessage: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 1237 FSTATS stat; 1238 char fn[256]; 1239 int f; 1240 unsigned int ul; 1241 int i; 1242 int fsize; 1243 char *p; 1244 char *pp; 1245 int c; 1246 FreeBotMessage(); 1247 strcpy(fn,TEMPLATES_PATH); 1248 i=strlen(fn); 1249 sprintf(fn+i,"\\bot_%d.txt",uin); \ 00000004 7C619FE5 LDR R6,??LoadBotMessage_0 ;; `?` \ 00000008 4BDF4DE2 SUB SP,SP,#+300 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ BL FreeBotMessage \ 00000014 ........ LDR R1,??DataTable67 ;; 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 1250 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 1251 if ((fsize=stat.size)<=0) goto L1; \ 00000060 08709DE5 LDR R7,[SP, #+8] \ 00000064 010057E3 CMP R7,#+1 \ 00000068 070000BA BLT ??LoadBotMessage_1 1252 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 1253 { 1254 L1: 1255 strcpy(fn+i,"\\bot.txt"); \ ??LoadBotMessage_1: \ 0000008C 0C1086E2 ADD R1,R6,#+12 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 1A0000EF SWI +26 1256 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 1257 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 1258 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 1259 } 1260 if (f==-1) return 0; \ ??LoadBotMessage_2: \ 000000E0 040058E1 CMP R8,R4 \ 000000E4 F1FFFF0A BEQ ??LoadBotMessage_4 1261 p=bot_chars=malloc(fsize+1); \ 000000E8 ........ LDR R4,??DataTable65 ;; icons \ 000000EC 010087E2 ADD R0,R7,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 780384E5 STR R0,[R4, #+888] \ 000000F8 0060A0E1 MOV R6,R0 1262 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] 1263 fclose(f,&ul); \ 00000118 0D10A0E1 MOV R1,SP \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 0D0000EF SWI +13 1264 i=0; \ 00000124 0070A0E3 MOV R7,#+0 1265 pp=p; \ 00000128 0680A0E1 MOV R8,R6 \ 0000012C 020000EA B ??LoadBotMessage_6 1266 for(;;) 1267 { 1268 c=*p; 1269 if (c<32) 1270 { 1271 if (pp&&(pp!=p)) 1272 { 1273 bot_lines=realloc(bot_lines,(i+1)*sizeof(char *)); 1274 bot_lines[i++]=pp; 1275 } 1276 pp=NULL; 1277 if (!c) break; 1278 *p=0; 1279 } 1280 else 1281 { 1282 if (pp==NULL) pp=p; \ ??LoadBotMessage_7: \ 00000130 000058E3 CMP R8,#+0 \ 00000134 0680A001 MOVEQ R8,R6 1283 } 1284 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 7C0394E5 LDR R0,[R4, #+892] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 7C0384E5 STR R0,[R4, #+892] \ 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 1285 } 1286 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 `?` 1287 } 1288 #endif 1289 1290 //=================================================================== 1291 1292 int RXstate=EOP; //-sizeof(RXpkt)..-1 - receive header, 0..RXpkt.data_len - receive data 1293 \ In segment DATA_Z, align 4, align-sorted 1294 TPKT RXbuf; \ RXbuf: \ 00000000 DS8 16392 \ In segment DATA_Z, align 4, align-sorted 1295 TPKT TXbuf; \ TXbuf: \ 00000000 DS8 16392 1296 1297 int connect_state=0; 1298 1299 int sock=-1; 1300 1301 volatile unsigned long TOTALRECEIVED; 1302 volatile unsigned long TOTALSENDED; 1303 volatile unsigned long ALLTOTALRECEIVED; //by BoBa 10.07 1304 volatile unsigned long ALLTOTALSENDED; 1305 1306 volatile int sendq_l=0; //Длинна очереди для send 1307 volatile void *sendq_p=NULL; //указатель очереди 1308 1309 volatile int is_gprs_online=1; 1310 1311 GBSTMR reconnect_tmr; 1312 1313 extern void kill_data(void *p,void (*func_p)(void *)); 1314 \ In segment CODE, align 4, keep-with-next 1315 void ElfKiller(void) 1316 { \ ElfKiller: \ 00000000 00402DE9 PUSH {LR} 1317 extern void *ELF_BEGIN; 1318 kill_data(&ELF_BEGIN,(void (*)(void *))mfree_adr()); \ 00000004 158000EF SWI +32789 \ 00000008 0010A0E1 MOV R1,R0 \ 0000000C 04009FE5 LDR R0,??ElfKiller_0 ;; ELF_BEGIN \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ _BF kill_data,??kill_data??rA ;; tailcall \ ??ElfKiller_0: \ 00000018 ........ DC32 ELF_BEGIN 1319 } 1320 1321 int total_unread; 1322 1323 volatile CLIST *cltop; 1324 1325 volatile unsigned int GROUP_CACHE; //Текущая группа для добавления 1326 1327 volatile int contactlist_menu_id; 1328 1329 GBSTMR tmr_active; 1330 1331 volatile int edchat_id; 1332 1333 //Применяется для добавления сообщений 1334 //CLIST *edcontact; 1335 //void *edgui_data; 1336 1337 //static int prev_clmenu_itemcount; 1338 \ In segment DATA_Z, align 4, align-sorted 1339 char clm_hdr_text[64]; \ clm_hdr_text: \ 00000000 DS8 64 1340 //static const char def_clm_hdr_text[] = LG_CLTITLE; 1341 static const char key_clm_hdr_text[] = LG_CLT9INP; 1342 #ifdef kluchnik 1343 int ICON_HD; 1344 //static const HEADER_DESC contactlist_menuhdr = {0, 0, 0, 0, S_ICONS+IS_NULLICON, (int)clm_hdr_text, LGP_NULL}; 1345 #else 1346 static const HEADER_DESC contactlist_menuhdr = {0, 0, 0, 0, S_ICONS+ICON_HEAD, (int)clm_hdr_text, LGP_NULL}; 1347 #endif 1348 1349 static const int menusoftkeys[] = {0,1,2}; 1350 static const SOFTKEY_DESC menu_sk[] = 1351 { 1352 {0x0018, 0x0000, (int)LG_SELECT}, 1353 {0x0001, 0x0000, (int)LG_CLOSE}, 1354 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 1355 }; 1356 1357 char clmenu_sk_r[16]; 1358 static const char def_clmenu_sk_r[] = LG_CLOSE; 1359 static const char key_clmenu_sk_r[] = LG_CLEAR; 1360 1361 /*static const SOFTKEY_DESC clmenu_sk[]= 1362 { 1363 {0x0018, 0x0000, (int)LG_OPTIONS}, 1364 {0x0001, 0x0000, (int)clmenu_sk_r}, 1365 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 1366 }; 1367 */ 1368 const SOFTKEYSTAB menu_skt = 1369 { 1370 menu_sk, 0 1371 }; 1372 1373 /*static const SOFTKEYSTAB clmenu_skt = 1374 { 1375 clmenu_sk, 0 1376 };*/ 1377 1378 void contactlist_menu_ghook(void *data, int cmd); 1379 int contactlist_menu_onkey(void *data, GUI_MSG *msg); 1380 void contactlist_menu_iconhndl(void *data, int curitem, void *unk); 1381 1382 #ifdef USE_MLMENU 1383 static const ML_MENU_DESC contactlist_menu= 1384 { 1385 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 1386 menusoftkeys, 1387 &clmenu_skt, 1388 0x11, //+0x400 1389 contactlist_menu_iconhndl, 1390 NULL, //Items 1391 NULL, //Procs 1392 0, //n 1393 1 //Добавочных строк 1394 }; 1395 #endif 1396 1397 //GBSTMR tmr_ping; 1398 int tenseconds_to_ping; 1399 \ In segment CODE, align 4, keep-with-next 1400 LOGQ *NewLOGQ(const char *s) 1401 { \ NewLOGQ: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1402 LOGQ *p=malloc(sizeof(LOGQ)+1+strlen(s)); \ 00000008 1B0000EF SWI +27 \ 0000000C 610080E2 ADD R0,R0,#+97 \ 00000010 140000EF SWI +20 \ 00000014 0050A0E1 MOV R5,R0 1403 zeromem(p,sizeof(LOGQ)); \ 00000018 6010A0E3 MOV R1,#+96 \ 0000001C 1D0100EF SWI +285 1404 strcpy(p->text,s); \ 00000020 0410A0E1 MOV R1,R4 \ 00000024 600085E2 ADD R0,R5,#+96 \ 00000028 1A0000EF SWI +26 1405 return p; \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 3080BDE8 POP {R4,R5,PC} ;; return 1406 } 1407 \ In segment CODE, align 4, keep-with-next 1408 LOGQ *LastLOGQ(LOGQ **pp) 1409 { 1410 LOGQ *q=*pp; \ LastLOGQ: \ 00000000 000090E5 LDR R0,[R0, #+0] 1411 if (q) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 1EFF2F01 BXEQ LR \ 0000000C 000000EA B ??LastLOGQ_0 1412 { 1413 while(q->next) q=q->next; \ ??LastLOGQ_1: \ 00000010 0100A0E1 MOV R0,R1 \ ??LastLOGQ_0: \ 00000014 001090E5 LDR R1,[R0, #+0] \ 00000018 000051E3 CMP R1,#+0 \ 0000001C FBFFFF1A BNE ??LastLOGQ_1 1414 } 1415 return(q); \ 00000020 1EFF2FE1 BX LR ;; return 1416 } 1417 1418 //Уничтожить лог \ In segment CODE, align 4, keep-with-next 1419 void FreeLOGQ(LOGQ **pp) 1420 { \ FreeLOGQ: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0010A0E1 MOV R1,R0 1421 LOGQ *p=*pp; \ 00000008 000091E5 LDR R0,[R1, #+0] 1422 *pp=NULL; //Сразу обрежем \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 002081E5 STR R2,[R1, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 1080BD08 POPEQ {R4,PC} 1423 while(p) 1424 { 1425 LOGQ *np=p->next; \ ??FreeLOGQ_0: \ 0000001C 004090E5 LDR R4,[R0, #+0] 1426 mfree(p); \ 00000020 150000EF SWI +21 1427 p=np; \ 00000024 0400B0E1 MOVS R0,R4 1428 } \ 00000028 FBFFFF1A BNE ??FreeLOGQ_0 1429 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 1430 1431 //Удалить элемент из лога \ In segment CODE, align 4, keep-with-next 1432 void RemoveLOGQ(LOGQ **queue, LOGQ *p) 1433 { \ RemoveLOGQ: \ 00000000 00402DE9 PUSH {LR} 1434 LOGQ *q=(LOGQ *)queue; \ 00000004 000000EA B ??RemoveLOGQ_0 1435 LOGQ *qp; 1436 while(qp=q->next) 1437 { 1438 if (qp==p) 1439 { 1440 q->next=p->next; 1441 break; 1442 } 1443 q=qp; \ ??RemoveLOGQ_1: \ 00000008 0200A0E1 MOV R0,R2 \ ??RemoveLOGQ_0: \ 0000000C 002090E5 LDR R2,[R0, #+0] \ 00000010 000052E3 CMP R2,#+0 \ 00000014 0300000A BEQ ??RemoveLOGQ_2 \ 00000018 010052E1 CMP R2,R1 \ 0000001C F9FFFF1A BNE ??RemoveLOGQ_1 \ 00000020 002091E5 LDR R2,[R1, #+0] \ 00000024 002080E5 STR R2,[R0, #+0] 1444 } 1445 mfree(p); //Если элемент вообще не в логе \ ??RemoveLOGQ_2: \ 00000028 0100A0E1 MOV R0,R1 \ 0000002C 150000EF SWI +21 1446 } \ 00000030 0080BDE8 POP {PC} ;; return 1447 1448 //Добавить элемент в лог \ In segment CODE, align 4, keep-with-next 1449 int AddLOGQ(LOGQ **queue, LOGQ *p) 1450 { 1451 LOGQ *q=(LOGQ *)queue; 1452 LOGQ *qp; 1453 int i=0; \ AddLOGQ: \ 00000000 0020A0E3 MOV R2,#+0 \ 00000004 000000EA B ??AddLOGQ_0 1454 while(qp=q->next) {q=qp;i++;} \ ??AddLOGQ_1: \ 00000008 0300A0E1 MOV R0,R3 \ ??AddLOGQ_0: \ 0000000C 003090E5 LDR R3,[R0, #+0] \ 00000010 012082E2 ADD R2,R2,#+1 \ 00000014 000053E3 CMP R3,#+0 \ 00000018 FAFFFF1A BNE ??AddLOGQ_1 1455 p->next=NULL; \ 0000001C 003081E5 STR R3,[R1, #+0] 1456 q->next=p; \ 00000020 001080E5 STR R1,[R0, #+0] 1457 return(i+1); //Теперь всего в логе элементов \ 00000024 0200A0E1 MOV R0,R2 \ 00000028 1EFF2FE1 BX LR ;; return 1458 } 1459 \ In segment CODE, align 4, keep-with-next 1460 char *GetLastXTextLOGQ(CLIST *t) 1461 { 1462 LOGQ *p = t->log; \ GetLastXTextLOGQ: \ 00000000 A01090E5 LDR R1,[R0, #+160] 1463 char *s = 0; \ 00000004 0000A0E3 MOV R0,#+0 1464 if(!p) return 0; \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 0500001A BNE ??GetLastXTextLOGQ_0 \ 00000010 1EFF2FE1 BX LR 1465 while(p->next) 1466 { 1467 if((p->type&0x0F)==3) \ ??GetLastXTextLOGQ_1: \ 00000014 0C3091E5 LDR R3,[R1, #+12] \ 00000018 0F3003E2 AND R3,R3,#0xF \ 0000001C 030053E3 CMP R3,#+3 1468 s = p->text; \ 00000020 60008102 ADDEQ R0,R1,#+96 1469 p = p->next; \ 00000024 0210A0E1 MOV R1,R2 1470 } \ ??GetLastXTextLOGQ_0: \ 00000028 002091E5 LDR R2,[R1, #+0] \ 0000002C 000052E3 CMP R2,#+0 \ 00000030 F7FFFF1A BNE ??GetLastXTextLOGQ_1 1471 if((p->type&0x0F)==3) \ 00000034 0C2091E5 LDR R2,[R1, #+12] \ 00000038 0F2002E2 AND R2,R2,#0xF \ 0000003C 030052E3 CMP R2,#+3 1472 s = p->text; \ 00000040 60008102 ADDEQ R0,R1,#+96 1473 return s; \ 00000044 1EFF2FE1 BX LR ;; return 1474 } 1475 \ In segment CODE, align 4, keep-with-next 1476 int GetIconIndex(CLIST *t) 1477 { 1478 unsigned short s; 1479 if (t) \ GetIconIndex: \ 00000000 000050E3 CMP R0,#+0 \ 00000004 3400000A BEQ ??GetIconIndex_0 1480 { 1481 s=t->state; 1482 if (t->isgroup) return(IS_GROUP); \ 00000008 082090E5 LDR R2,[R0, #+8] \ 0000000C B415D0E1 LDRH R1,[R0, #+84] \ 00000010 000052E3 CMP R2,#+0 \ 00000014 0F00A013 MOVNE R0,#+15 \ 00000018 1EFF2F11 BXNE LR 1483 if (t->isunread) \ 0000001C 900090E5 LDR R0,[R0, #+144] \ 00000020 000050E3 CMP R0,#+0 1484 return(IS_MSG); \ 00000024 0D00A013 MOVNE R0,#+13 \ 00000028 1EFF2F11 BXNE LR 1485 else 1486 { 1487 if (s==0xFFFF) return(IS_OFFLINE); \ 0000002C FF20A0E3 MOV R2,#+255 \ 00000030 FF2C82E3 ORR R2,R2,#0xFF00 \ 00000034 020051E1 CMP R1,R2 \ 00000038 1EFF2F01 BXEQ LR 1488 if ((s&0xF000)==0x2000) return (IS_LUNCH); \ 0000003C F02C01E2 AND R2,R1,#0xF000 \ 00000040 800D52E3 CMP R2,#+8192 \ 00000044 0900A003 MOVEQ R0,#+9 \ 00000048 1EFF2F01 BXEQ LR 1489 if ((s&0xF000)==0x3000) return (IS_EVIL); \ 0000004C C00D52E3 CMP R2,#+12288 \ 00000050 0700A003 MOVEQ R0,#+7 \ 00000054 1EFF2F01 BXEQ LR 1490 if ((s&0xF000)==0x4000) return (IS_DEPRESSION); \ 00000058 400C52E3 CMP R2,#+16384 \ 0000005C 0600A003 MOVEQ R0,#+6 \ 00000060 1EFF2F01 BXEQ LR 1491 if ((s&0xF000)==0x5000) return (IS_HOME); \ 00000064 500C52E3 CMP R2,#+20480 \ 00000068 0800A003 MOVEQ R0,#+8 \ 0000006C 1EFF2F01 BXEQ LR 1492 if ((s&0xF000)==0x6000) return (IS_WORK); \ 00000070 F00C01E2 AND R0,R1,#0xF000 \ 00000074 600C50E3 CMP R0,#+24576 \ 00000078 0A00A003 MOVEQ R0,#+10 \ 0000007C 1EFF2F01 BXEQ LR 1493 if (s & 0x0020) return(IS_FFC); \ 00000080 200011E3 TST R1,#0x20 \ 00000084 0100000A BEQ ??GetIconIndex_1 \ ??GetIconIndex_2: \ 00000088 0C00A0E3 MOV R0,#+12 \ 0000008C 1EFF2FE1 BX LR 1494 if (s & 0x0001) return(IS_AWAY); \ ??GetIconIndex_1: \ 00000090 010011E3 TST R1,#0x1 \ 00000094 0200A013 MOVNE R0,#+2 \ 00000098 1EFF2F11 BXNE LR 1495 if (s & 0x0005) return(IS_NA); \ 0000009C 050011E3 TST R1,#0x5 \ 000000A0 0300A013 MOVNE R0,#+3 \ 000000A4 1EFF2F11 BXNE LR 1496 if (s & 0x0011) return(IS_OCCUPIED); \ 000000A8 110011E3 TST R1,#0x11 \ 000000AC 0400A013 MOVNE R0,#+4 \ 000000B0 1EFF2F11 BXNE LR 1497 if (s & 0x0013) return(IS_DND); \ 000000B4 130011E3 TST R1,#0x13 \ 000000B8 0500A013 MOVNE R0,#+5 \ 000000BC 1EFF2F11 BXNE LR 1498 if (s & 0x0002) return(IS_FFC); \ 000000C0 020011E3 TST R1,#0x2 \ 000000C4 EFFFFF1A BNE ??GetIconIndex_2 1499 if (s & 0x0100) return(IS_INVISIBLE); \ 000000C8 400F11E3 TST R1,#0x100 \ 000000CC 0100A013 MOVNE R0,#+1 \ 000000D0 1EFF2F11 BXNE LR 1500 } 1501 } 1502 else 1503 { 1504 return(IS_UNKNOWN); 1505 } 1506 return(IS_ONLINE); \ 000000D4 0B00A0E3 MOV R0,#+11 \ 000000D8 1EFF2FE1 BX LR \ ??GetIconIndex_0: \ 000000DC 0E00A0E3 MOV R0,#+14 \ 000000E0 1EFF2FE1 BX LR ;; return 1507 } 1508 \ In segment CODE, align 4, keep-with-next 1509 LOGQ *FindContactLOGQByAck(TPKT *p) 1510 { \ FindContactLOGQByAck: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1511 CLIST *t; 1512 LockSched(); \ 00000008 460100EF SWI +326 1513 t=FindContactByUin(p->pkt.uin); \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000014 0050A0E1 MOV R5,R0 1514 UnlockSched(); \ 00000018 470100EF SWI +327 1515 unsigned int id=*((unsigned short*)(p->data)); \ 0000001C B840D4E1 LDRH R4,[R4, #+8] 1516 LOGQ *q; 1517 if (!t) return NULL; \ 00000020 000055E3 CMP R5,#+0 \ 00000024 0000A003 MOVEQ R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 1518 LockSched(); \ 0000002C 460100EF SWI +326 1519 q=t->log; \ 00000030 A05095E5 LDR R5,[R5, #+160] \ 00000034 000000EA B ??FindContactLOGQByAck_0 1520 while(q) 1521 { 1522 if (q->ID==id) break; 1523 q=q->next; \ ??FindContactLOGQByAck_1: \ 00000038 005095E5 LDR R5,[R5, #+0] \ ??FindContactLOGQByAck_0: \ 0000003C 000055E3 CMP R5,#+0 \ 00000040 08009515 LDRNE R0,[R5, #+8] \ 00000044 04005011 CMPNE R0,R4 \ 00000048 FAFFFF1A BNE ??FindContactLOGQByAck_1 1524 } 1525 UnlockSched(); \ 0000004C 470100EF SWI +327 1526 return q; \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 3080BDE8 POP {R4,R5,PC} ;; return 1527 } 1528 1529 1530 1531 1532 /*----------------------------- SAVE CONTACT LIST TO FILE --------------------------------*/ 1533 \ In segment CODE, align 4, keep-with-next 1534 void CreateCLFile(void) 1535 { \ CreateCLFile: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 42DF4DE2 SUB SP,SP,#+264 1536 CLIST *t; 1537 t=(CLIST *)(&cltop); \ 00000008 ........ LDR R5,??DataTable91 ;; icons + 940 1538 char *s=malloc(128); 1539 volatile int hFile_cl; 1540 unsigned int io_error_cl = 0; 1541 char fn[256]; 1542 strcpy(fn,TEMPLATES_PATH); 1543 strcat(fn,"\\local.cl"); \ 0000000C E4609FE5 LDR R6,??CreateCLFile_0 ;; `?` \ 00000010 8000A0E3 MOV R0,#+128 \ 00000014 140000EF SWI +20 \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C 00108DE5 STR R1,[SP, #+0] \ 00000020 ........ LDR R1,??DataTable67 ;; TEMPLATES_PATH \ 00000024 0040A0E1 MOV R4,R0 \ 00000028 08008DE2 ADD R0,SP,#+8 \ 0000002C 1A0000EF SWI +26 \ 00000030 0610A0E1 MOV R1,R6 \ 00000034 08008DE2 ADD R0,SP,#+8 \ 00000038 170000EF SWI +23 1544 unlink(fn,&io_error_cl); \ 0000003C 0D10A0E1 MOV R1,SP \ 00000040 08008DE2 ADD R0,SP,#+8 \ 00000044 6B0100EF SWI +363 1545 hFile_cl = fopen(fn,A_ReadWrite + A_Create + A_Append + A_BIN,P_READ+P_WRITE, &io_error_cl); \ 00000048 0D30A0E1 MOV R3,SP \ 0000004C 602FA0E3 MOV R2,#+384 \ 00000050 0A10A0E3 MOV R1,#+10 \ 00000054 811C81E3 ORR R1,R1,#0x8100 \ 00000058 08008DE2 ADD R0,SP,#+8 \ 0000005C 0A0000EF SWI +10 \ 00000060 04008DE5 STR R0,[SP, #+4] 1546 if(hFile_cl!=-1) \ 00000064 04009DE5 LDR R0,[SP, #+4] \ 00000068 010070E3 CMN R0,#+1 \ 0000006C 1C00001A BNE ??CreateCLFile_1 1547 { 1548 while(t=(CLIST *)(t->next)) 1549 { 1550 if(!t->isgroup && t->uin!=UIN) 1551 { 1552 sprintf(s, ";%d;%s;;;\r\n", t->uin, t->name); 1553 fwrite(hFile_cl, s, strlen(s), &io_error_cl); 1554 } 1555 } 1556 ShowMSG(2,(int)"Saved local.cl"); 1557 } 1558 else ShowMSG(2,(int)"Can't save local.cl"); \ 00000070 281086E2 ADD R1,R6,#+40 \ ??CreateCLFile_2: \ 00000074 0200A0E3 MOV R0,#+2 \ 00000078 480100EF SWI +328 1559 fclose(hFile_cl, &io_error_cl); \ 0000007C 04009DE5 LDR R0,[SP, #+4] \ 00000080 0D10A0E1 MOV R1,SP \ 00000084 0D0000EF SWI +13 1560 mfree(s); \ 00000088 0400A0E1 MOV R0,R4 \ 0000008C 150000EF SWI +21 1561 } \ 00000090 42DF8DE2 ADD SP,SP,#+264 \ 00000094 7080BDE8 POP {R4-R6,PC} ;; return \ ??CreateCLFile_3: \ 00000098 080095E5 LDR R0,[R5, #+8] \ 0000009C 000050E3 CMP R0,#+0 \ 000000A0 0F00001A BNE ??CreateCLFile_1 \ 000000A4 ........ LDR R0,??DataTable68 ;; UIN \ 000000A8 0C2095E5 LDR R2,[R5, #+12] \ 000000AC 000090E5 LDR R0,[R0, #+0] \ 000000B0 000052E1 CMP R2,R0 \ 000000B4 0A00000A BEQ ??CreateCLFile_1 \ 000000B8 143085E2 ADD R3,R5,#+20 \ 000000BC 0C1086E2 ADD R1,R6,#+12 \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 160000EF SWI +22 \ 000000C8 0400A0E1 MOV R0,R4 \ 000000CC 1B0000EF SWI +27 \ 000000D0 0D30A0E1 MOV R3,SP \ 000000D4 0020A0E1 MOV R2,R0 \ 000000D8 04009DE5 LDR R0,[SP, #+4] \ 000000DC 0410A0E1 MOV R1,R4 \ 000000E0 0C0000EF SWI +12 \ ??CreateCLFile_1: \ 000000E4 005095E5 LDR R5,[R5, #+0] \ 000000E8 000055E3 CMP R5,#+0 \ 000000EC E9FFFF1A BNE ??CreateCLFile_3 \ 000000F0 181086E2 ADD R1,R6,#+24 \ 000000F4 DEFFFFEA B ??CreateCLFile_2 \ ??CreateCLFile_0: \ 000000F8 ........ DC32 `?` 1562 1563 /*-----------------------------------------------------------------------------------------*/ 1564 1565 char on_off_buf[128]; 1566 int on_off_timer=0; 1567 char ContactT9Key[32]; 1568 int kopa_online; 1569 int kopa_kontaktu; \ In segment DATA_Z, align 4, align-sorted 1570 char status[64]; \ status: \ 00000000 DS8 64 \ In segment CODE, align 4, keep-with-next 1571 void UpdateCLheader(void){}; \ UpdateCLheader: \ 00000000 1EFF2FE1 BX LR ;; return 1572 1573 #ifdef USE_MLMENU 1574 #define nmeth 24 1575 1576 void * gui_methods2[nmeth]; 1577 void * old_redraw; 1578 1579 typedef void (*tredraw)(void *data); 1580 char prozr[]={0x00,0x00,0x00,0x64}; 1581 void new_redraw(void *data) 1582 { 1583 ((tredraw)old_redraw)(data); 1584 char s[64]; 1585 sprintf(s,"%s\\HEAD.png",ICON_PATH); 1586 int x=GetImgWidth((int)s); 1587 /*#ifdef ELKA 1588 #else 1589 DrawRectangle(0,YDISP,ScreenW()-1,ScreenH()-1,0,prozr,prozr); 1590 #endif*/ 1591 PrintText(x+7,YDISP+2,status,0,fonto,1,1,0,0,ScreenW()-x); 1592 #ifdef kluchnik 1593 switch(CurrentPrivateStatus) 1594 { 1595 case 0: ICON_HD=ICON_ALL_CAN_SEE; break; 1596 case 1: ICON_HD=ICON_NOBODY_CAN_SEE; break; 1597 case 2: ICON_HD=ICON_VISLIST_CAN_SEE; break; 1598 case 3: ICON_HD=ICON_INVISLIST_CANNOT_SEE; break; 1599 case 4: ICON_HD=ICON_CONTACTLIST_CAN_SEE; break; 1600 default : ICON_HD=ICON_HEAD; break; 1601 } 1602 int icon; 1603 icon=*(S_ICONS+ICON_HD); 1604 DrawImg(3,YDISP+3,icon); 1605 #endif 1606 } 1607 1608 /* 1609 void (*old_ed_redraw)(void *data); 1610 void my_ed_redraw2(void *data) 1611 { 1612 void *gui; 1613 char s[128]; 1614 sprintf(s,"%s\\HEAD.png",ICON_PATH); 1615 int x=GetImgWidth((int)s); 1616 if (old_ed_redraw) old_ed_redraw(data); 1617 gui=FindGUIbyId(contactlist_menu_id,NULL); 1618 if (gui) 1619 { 1620 ClearScreen(); 1621 // canvasdata=BuildCanvas(); 1622 PrintText(x+7,YDISP+2,status,0,fonto,1,1,0,0,ScreenW()-x); 1623 switch(CurrentPrivateStatus) 1624 { 1625 case 0: ICON_HD=ICON_ALL_CAN_SEE; break; 1626 case 1: ICON_HD=ICON_NOBODY_CAN_SEE; break; 1627 case 2: ICON_HD=ICON_VISLIST_CAN_SEE; break; 1628 case 3: ICON_HD=ICON_INVISLIST_CANNOT_SEE; break; 1629 case 4: ICON_HD=ICON_CONTACTLIST_CAN_SEE; break; 1630 default : ICON_HD=ICON_HEAD; break; 1631 } 1632 int icon, width; 1633 #ifdef NEWSGOLD 1634 icon=*(S_ICONS+ICON_HD); 1635 ((HEADER_DESC *)&contactlist_menuhdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); 1636 DrawImg(ScreenW()-1-width,1,icon); 1637 #else 1638 icon=*(S_ICONS+ICON_HD); 1639 width=GetImgWidth(icon); 1640 DrawImg(2,((HeaderH()-width)>>1)+YDISP,icon); 1641 #endif 1642 1643 } 1644 }*/ 1645 1646 void UpdateCLheader(void) 1647 { 1648 if (strlen(ContactT9Key)) 1649 { 1650 zeromem(status,64); 1651 strcpy(clm_hdr_text,key_clm_hdr_text); 1652 strcat(clm_hdr_text,ContactT9Key); 1653 strcpy(clmenu_sk_r,key_clmenu_sk_r); 1654 } 1655 else 1656 { 1657 TTime the; 1658 GetDateTime(NULL,&the); 1659 char t[64]; 1660 char s[32]; 1661 void Get_Online_total(); 1662 Get_Online_total(); 1663 zeromem(clm_hdr_text,64); 1664 zeromem(status,64); 1665 switch(TIME_OR_MSG) 1666 { 1667 case 0: 1668 sprintf(clm_hdr_text, "%s(%02d:%02d)",def_clm_hdr_text,the.hour,the.min); 1669 break; 1670 case 1: 1671 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,total_unread,total_unread2); 1672 break; 1673 case 2: 1674 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,kopa_kontaktu,kopa_online); 1675 break; 1676 case 3: 1677 { 1678 if(isShowTime) { sprintf(t,"[%02d:%02d]",the.hour,the.min); strcat(status,t); } 1679 if(isShowCont) { sprintf(s,"[%d/%d]",kopa_kontaktu,kopa_online); strcat(clm_hdr_text,s); } 1680 if(isShowUnread) { sprintf(s,"[%d/%d]",total_unread,total_unread2); strcat(clm_hdr_text,s); } 1681 if(isShowTime) strcat(clm_hdr_text,t); 1682 if(away_m && isShowA) strcat(clm_hdr_text,"[A]"); 1683 if(CurrentPrivateStatus==1 && isShowI) strcat(clm_hdr_text,"[I]") ; 1684 if(Is_Vibra_Enabled && isShowV) strcat(clm_hdr_text,"[V]") ; 1685 if(Is_Sounds_Enabled && isShowS) strcat(clm_hdr_text,"[S]") ; 1686 if(Is_Double_Vibra_On && isShowR) strcat(clm_hdr_text,"[R]") ; 1687 if(Show_XTX && isShowTmXs) strcat(clm_hdr_text,"[Xs]"); 1688 else if(isShowTmXs) strcat(clm_hdr_text,"[Tm]"); 1689 if(isShowBat) 1690 { 1691 int bat=*RamCap(); 1692 char s[4]; 1693 sprintf(s,"[%d%%]",bat); 1694 strcat(clm_hdr_text,s); 1695 } 1696 1697 } 1698 break; 1699 case 4://png 1700 { 1701 #ifdef kluchnik 1702 char A_s[]="[A [%s] ]"; 1703 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l 1704 if(on_off_timer > 0 && strlen(on_off_buf)!=0) 1705 sprintf(status,on_off_buf); 1706 else 1707 { 1708 sprintf(status, "[Rx:%db/Tx:%db/Queue:%db]\n",RX,TX,sendq_l); 1709 } 1710 sprintf(t,"[%d/%d] [%d/%d] ",kopa_kontaktu, kopa_online,total_unread,total_unread2); 1711 strcat(status,t); 1712 char A_s[]="[A [%s] ]"; 1713 if(away_m && isShowA) { sprintf(t,A_s,away_msg_time_dace); strcat(status,t); } 1714 #else 1715 char s[32]; 1716 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l 1717 #ifdef NEWSGOLD 1718 if(on_off_timer>0 && strlen(on_off_buf)!=0) 1719 sprintf(status,on_off_buf); 1720 else 1721 if(ShowTraff) 1722 sprintf(status, "[T:%db/Queue:%db]\n",RX+TX,sendq_l); 1723 #else 1724 if(on_off_timer>0 && strlen(on_off_buf)!=0) 1725 sprintf(status,on_off_buf); 1726 else 1727 if(ShowTraff) 1728 sprintf(status, "[T:%db/Q:%db]\n",RX+TX,sendq_l); 1729 #endif 1730 //sprintf(status, "%s\n",def_clm_hdr_text); 1731 if(isShowTime) { sprintf(t,"[%02d:%02d]",the.hour,the.min); strcat(status,t); } 1732 if(isShowCont) { sprintf(s,"[%d/%d]",kopa_kontaktu,kopa_online); strcat(status,s); } 1733 if(isShowUnread) { sprintf(s,"[%d/%d]",total_unread,total_unread2); strcat(status,s); } 1734 if(away_m && isShowA) { strcat(status,"[A]"); } 1735 #endif 1736 1737 if(CurrentPrivateStatus==1 && isShowI) strcat(status,"[I]"); 1738 if(Is_Vibra_Enabled && isShowV) strcat(status,"[V]"); 1739 if(Is_Sounds_Enabled && isShowS) strcat(status,"[S]"); 1740 if(Is_Double_Vibra_On && isShowR) strcat(status,"[R]"); 1741 if(Show_XTX && isShowTmXs) strcat(status,"[Xs]"); 1742 else 1743 if(isShowTmXs) strcat(status,"[Tm]"); 1744 if(isShowBat) 1745 { 1746 int bat=*RamCap(); 1747 char s[4]; 1748 sprintf(s,"[%d%%]",bat); 1749 strcat(status,s); 1750 } 1751 zeromem(clm_hdr_text,64); 1752 } 1753 break; 1754 default : 1755 sprintf(clm_hdr_text, percent_s,def_clm_hdr_text); 1756 break; 1757 } 1758 strcpy(clmenu_sk_r,def_clmenu_sk_r); 1759 } 1760 } 1761 #endif //USE_MLMENU 1762 \ In segment CODE, align 4, keep-with-next 1763 void ClearContactT9Key(void) 1764 { 1765 zeromem(ContactT9Key,sizeof(ContactT9Key)); \ ClearContactT9Key: \ 00000000 0C009FE5 LDR R0,??ClearContactT9Key_0 ;; icons + 1372 \ 00000004 00402DE9 PUSH {LR} \ 00000008 2010A0E3 MOV R1,#+32 \ 0000000C 1D0100EF SWI +285 1766 } \ 00000010 0080BDE8 POP {PC} ;; return \ ??ClearContactT9Key_0: \ 00000014 ........ DC32 icons + 1372 1767 \ In segment CODE, align 4, keep-with-next 1768 void AddContactT9Key(int chr) 1769 { \ AddContactT9Key: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1770 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R5,??DataTable95 ;; icons \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 5C00A0E3 MOV R0,#+92 \ 00000010 500E80E3 ORR R0,R0,#0x500 \ 00000014 050080E0 ADD R0,R0,R5 \ 00000018 1B0000EF SWI +27 1771 if (l<(sizeof(ContactT9Key)-1)) \ 0000001C 1F0050E3 CMP R0,#+31 1772 { 1773 ContactT9Key[l]=chr; \ 00000020 05008030 ADDCC R0,R0,R5 \ 00000024 5C45C035 STRBCC R4,[R0, #+1372] 1774 } 1775 } \ 00000028 3080BDE8 POP {R4,R5,PC} ;; return 1776 \ In segment CODE, align 4, keep-with-next 1777 void BackSpaceContactT9(void) 1778 { \ BackSpaceContactT9: \ 00000000 10402DE9 PUSH {R4,LR} 1779 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R4,??DataTable95 ;; icons \ 00000008 5C00A0E3 MOV R0,#+92 \ 0000000C 500E80E3 ORR R0,R0,#0x500 \ 00000010 040080E0 ADD R0,R0,R4 \ 00000014 1B0000EF SWI +27 1780 if (l) \ 00000018 000050E3 CMP R0,#+0 1781 { 1782 l--; 1783 ContactT9Key[l]=0; \ 0000001C 04008010 ADDNE R0,R0,R4 \ 00000020 0010A013 MOVNE R1,#+0 \ 00000024 5B15C015 STRBNE R1,[R0, #+1371] 1784 } 1785 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 1786 1787 #ifdef USE_MLMENU 1788 void create_contactlist_menu(void) 1789 { 1790 int i; 1791 i=CountContacts(); 1792 prev_clmenu_itemcount=i; 1793 UpdateCLheader(); 1794 patch_header(&contactlist_menuhdr); 1795 contactlist_menu_id=CreateMultiLinesMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i); 1796 } 1797 1798 static int unhooked2=1; 1799 1800 void contactlist_menu_ghook(void *data, int cmd) 1801 { 1802 PNGTOP_DESC *pltop=PNG_TOP(); 1803 if (cmd==9) 1804 { 1805 pltop->dyn_pltop=NULL; 1806 } 1807 static int unhooked=1; 1808 if( ((unhooked) || (unhooked2)) && (TIME_OR_MSG==4) ) 1809 { 1810 if(!(strlen(ContactT9Key))) 1811 { 1812 GUI * gui=(GUI*)data; 1813 memcpy(&gui_methods2,gui->methods,nmeth*4); 1814 gui->methods=&gui_methods2; 1815 old_redraw=gui_methods2[0]; 1816 gui_methods2[0]=(void*)&new_redraw; 1817 } 1818 unhooked=0; 1819 unhooked2=0; 1820 } 1821 /* 1822 if (cmd==2) 1823 { 1824 static void *methods[16]; 1825 void **m=GetDataOfItemByID(data,2); 1826 if (m) 1827 { 1828 if (m[1]) 1829 { 1830 memcpy(methods,m[1],sizeof(methods)); 1831 old_ed_redraw=(void (*)(void *))(methods[0]); 1832 methods[0]=(void *)my_ed_redraw2; 1833 m[1]=methods; 1834 } 1835 } 1836 }*/ 1837 1838 if (cmd==0x0A) 1839 { 1840 silenthide=0; 1841 pltop->dyn_pltop=XStatusesImgList; 1842 DisableIDLETMR(); 1843 } 1844 } 1845 1846 void RecountMenu(CLIST *req, int needfocus) 1847 { 1848 int i; 1849 int j; 1850 void *data; 1851 UpdateCLheader(); 1852 if (!contactlist_menu_id) return; //Нечего считать 1853 data=FindGUIbyId(contactlist_menu_id,NULL); 1854 if (req==NULL) 1855 { 1856 j=0; 1857 } 1858 else 1859 { 1860 j=FindContactByContact(req); 1861 } 1862 i=CountContacts(); 1863 if (j>=i) j=i-1; 1864 if (j<0) j=0; 1865 if (i!=prev_clmenu_itemcount) 1866 { 1867 prev_clmenu_itemcount=i; 1868 Menu_SetItemCountDyn(data,i); 1869 } 1870 if(needfocus) SetCursorToMenuItem(data,j); //2058 1871 if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); 1872 } 1873 1874 #endif //USE_MLMENU 1875 1876 void RecountMenu(CLIST *req, int needfocus); 1877 //-------------------- MANAGE CONTACT MENU --------------------------// 1878 1879 1880 #ifdef kluchnik 1881 #define _MAX 8 1882 #else 1883 #define _MAX 4 1884 #endif 1885 1886 static int uinContact; 1887 \ In segment CODE, align 4, keep-with-next 1888 static void ChangeVibraContact(GUI *data) 1889 { 1890 CLIST *t; 1891 t=FindContactByUin(uinContact); \ ChangeVibraContact: \ 00000000 ........ LDR R0,??DataTable79 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1892 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] 1893 RefreshGUI(); \ 00000024 960100EF SWI +406 1894 } \ 00000028 0080BDE8 POP {PC} ;; return 1895 \ In segment CODE, align 4, keep-with-next 1896 static void ChangeSoundContact(GUI *data) 1897 { 1898 CLIST *t; 1899 t=FindContactByUin(uinContact); \ ChangeSoundContact: \ 00000000 ........ LDR R0,??DataTable79 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1900 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] 1901 RefreshGUI(); \ 00000024 960100EF SWI +406 1902 } \ 00000028 0080BDE8 POP {PC} ;; return 1903 \ In segment CODE, align 4, keep-with-next 1904 static void ChangeAutoMsg(GUI *data) 1905 { 1906 CLIST *t; 1907 t=FindContactByUin(uinContact); \ ChangeAutoMsg: \ 00000000 ........ LDR R0,??DataTable79 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1908 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] 1909 RefreshGUI(); \ 00000024 960100EF SWI +406 1910 } \ 00000028 0080BDE8 POP {PC} ;; return 1911 \ In segment CODE, align 4, keep-with-next 1912 static void ChangeShowXstatus(GUI *data) 1913 { 1914 CLIST *t; 1915 t=FindContactByUin(uinContact); \ ChangeShowXstatus: \ 00000000 ........ LDR R0,??DataTable79 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1916 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] 1917 RefreshGUI(); \ 00000024 960100EF SWI +406 1918 } \ 00000028 0080BDE8 POP {PC} ;; return 1919 1920 #ifdef kluchnik 1921 \ In segment CODE, align 4, keep-with-next 1922 static void ChangeAccess(GUI *data) 1923 { 1924 CLIST *t; 1925 t=FindContactByUin(uinContact); \ ChangeAccess: \ 00000000 ........ LDR R0,??DataTable79 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1926 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] 1927 RefreshGUI(); \ 00000024 960100EF SWI +406 1928 } \ 00000028 0080BDE8 POP {PC} ;; return 1929 1930 \ In segment CODE, align 4, keep-with-next 1931 static void ChangeAwaySignal(GUI *data) 1932 { 1933 CLIST *t; 1934 t=FindContactByUin(uinContact); \ ChangeAwaySignal: \ 00000000 ........ LDR R0,??DataTable79 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1935 t->automsgcount=automsgcount; \ 00000010 ........ LDR R1,??DataTable77 ;; automsgcount \ 00000014 001091E5 LDR R1,[R1, #+0] \ 00000018 881080E5 STR R1,[R0, #+136] 1936 RefreshGUI(); \ 0000001C 960100EF SWI +406 1937 } \ 00000020 0080BDE8 POP {PC} ;; return 1938 \ In segment CODE, align 4, keep-with-next 1939 static void ChangeAutobot(GUI *data) 1940 { 1941 CLIST *t; 1942 t=FindContactByUin(uinContact); \ ChangeAutobot: \ 00000000 ........ LDR R0,??DataTable79 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1943 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] 1944 RefreshGUI(); \ 00000024 960100EF SWI +406 1945 } \ 00000028 0080BDE8 POP {PC} ;; return 1946 \ In segment CODE, align 4, keep-with-next 1947 static void ChangeLoadHistory(GUI *data) 1948 { 1949 CLIST *t; 1950 t=FindContactByUin(uinContact); \ ChangeLoadHistory: \ 00000000 ........ LDR R0,??DataTable79 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 1951 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] 1952 RefreshGUI(); \ 00000024 960100EF SWI +406 1953 } \ 00000028 0080BDE8 POP {PC} ;; return 1954 #endif //kluchnik 1955 /* 1956 static void RqtXText(GUI *data) 1957 { 1958 void RequestXText(unsigned int uin); 1959 RequestXText(uinContact); 1960 GeneralFuncF1(1); 1961 } 1962 */ \ In segment CODE, align 4, keep-with-next 1963 static void contact_list_ghook(void *data, int cmd) 1964 { \ contact_list_ghook: \ 00000000 00402DE9 PUSH {LR} 1965 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 1966 { 1967 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 1968 } 1969 } \ 00000010 0080BDE8 POP {PC} ;; return 1970 static int icon_array[2]; 1971 1972 static const void *menuproc[_MAX]= 1973 { 1974 (void *)ChangeVibraContact, 1975 (void *)ChangeSoundContact, 1976 (void *)ChangeAutoMsg, 1977 (void *)ChangeShowXstatus, 1978 #ifdef kluchnik 1979 (void *)ChangeAccess, 1980 (void *)ChangeAwaySignal, 1981 (void *)ChangeLoadHistory, 1982 (void *)ChangeAutobot, 1983 #endif 1984 }; 1985 1986 static const char * const menutext[_MAX]= 1987 { 1988 "Вибра", 1989 "Звук", 1990 "Автоответчик", 1991 "Показ.хстатус", 1992 #ifdef kluchnik 1993 "Удаленное управление", 1994 "Синалы автоответчика", 1995 "Загруж.историю", 1996 "Aвтобот" 1997 #endif 1998 }; 1999 \ In segment CODE, align 4, keep-with-next 2000 static int contact_keyhook(void *data, GUI_MSG *msg) 2001 { \ contact_keyhook: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 2002 if ((msg->keys==0x18)||(msg->keys==0x3D)) \ 00000008 F200D1E1 LDRSH R0,[R1, #+2] \ 0000000C 180050E3 CMP R0,#+24 \ 00000010 3D005013 CMPNE R0,#+61 \ 00000014 0900001A BNE ??contact_keyhook_0 2003 { 2004 CLIST *t; 2005 t=FindContactByUin(uinContact); 2006 t->isIndividSet=1; \ 00000018 28509FE5 LDR R5,??contact_keyhook_1 ;; icon_array \ 0000001C 080095E5 LDR R0,[R5, #+8] \ 00000020 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000024 0110A0E3 MOV R1,#+1 \ 00000028 641080E5 STR R1,[R0, #+100] 2007 ((void (*)(void))(menuproc[GetCurMenuItem(data)]))(); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 8F0100EF SWI +399 \ 00000034 000185E0 ADD R0,R5,R0, LSL #+2 \ 00000038 0C0090E5 LDR R0,[R0, #+12] \ 0000003C 30FF2FE1 BLX R0 2008 } 2009 //if(msg->keys==LEFT_BUTTON) GeneralFuncF1(1); 2010 return(0); \ ??contact_keyhook_0: \ 00000040 0000A0E3 MOV R0,#+0 \ 00000044 3080BDE8 POP {R4,R5,PC} ;; return \ ??contact_keyhook_1: \ 00000048 ........ DC32 icon_array 2011 } 2012 \ In segment CODE, align 4, keep-with-next 2013 static void contacthandler(void *data, int curitem, void *unk) 2014 { \ contacthandler: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 2015 WSHDR *ws; 2016 void *item=AllocMenuItem(data); 2017 extern const char percent_t[]; 2018 ws=AllocMenuWS(data,strlen(menutext[curitem])); \ 00000004 ........ LDR R8,??DataTable80 ;; `?` \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 970100EF SWI +407 \ 00000014 0060A0E1 MOV R6,R0 \ 00000018 050188E0 ADD R0,R8,R5, LSL #+2 \ 0000001C 049090E5 LDR R9,[R0, #+4] \ 00000020 0900A0E1 MOV R0,R9 \ 00000024 1B0000EF SWI +27 \ 00000028 0010A0E1 MOV R1,R0 \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 980100EF SWI +408 2019 wsprintf(ws,percent_t,menutext[curitem]); \ 00000034 241088E2 ADD R1,R8,#+36 2020 CLIST *t; 2021 t=FindContactByUin(uinContact); \ 00000038 ........ LDR R8,??DataTable82 ;; icon_array \ 0000003C 0070A0E1 MOV R7,R0 \ 00000040 0920A0E1 MOV R2,R9 \ 00000044 240100EF SWI +292 \ 00000048 080098E5 LDR R0,[R8, #+8] \ 0000004C ........ _BLF FindContactByUin,??FindContactByUin??rA 2022 switch(curitem) \ 00000050 0510A0E1 MOV R1,R5 \ 00000054 070051E3 CMP R1,#+7 \ 00000058 1A00008A BHI ??contacthandler_1 \ 0000005C 012F8FE2 ADR R2,??contacthandler_0 \ 00000060 0120D2E7 LDRB R2,[R2, R1] \ 00000064 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??contacthandler_0: \ 00000068 01030507 DC8 +1,+3,+5,+7 \ 0000006C 090B0D0F DC8 +9,+11,+13,+15 2023 { 2024 case 0: 2025 SetMenuItemIconArray(data,item,icon_array+(t->isvibra?0:1)); \ ??contacthandler_2: \ 00000070 680090E5 LDR R0,[R0, #+104] \ 00000074 0C0000EA B ??contacthandler_3 2026 break; 2027 case 1: 2028 SetMenuItemIconArray(data,item,icon_array+(t->issound?0:1)); \ ??contacthandler_4: \ 00000078 6C0090E5 LDR R0,[R0, #+108] \ 0000007C 0A0000EA B ??contacthandler_3 2029 break; 2030 case 2: 2031 SetMenuItemIconArray(data,item,icon_array+(t->isautomsg?0:1)); \ ??contacthandler_5: \ 00000080 700090E5 LDR R0,[R0, #+112] \ 00000084 080000EA B ??contacthandler_3 2032 break; 2033 case 3: 2034 SetMenuItemIconArray(data,item,icon_array+(t->isShowXst?0:1)); \ ??contacthandler_6: \ 00000088 7C0090E5 LDR R0,[R0, #+124] \ 0000008C 060000EA B ??contacthandler_3 2035 break; 2036 #ifdef kluchnik 2037 case 4: 2038 SetMenuItemIconArray(data,item,icon_array+(t->isaccess?0:1)); \ ??contacthandler_7: \ 00000090 840090E5 LDR R0,[R0, #+132] \ 00000094 040000EA B ??contacthandler_3 2039 break; 2040 case 5: 2041 SetMenuItemIconArray(data,item,icon_array+(t->automsgcount?0:1)); \ ??contacthandler_8: \ 00000098 880090E5 LDR R0,[R0, #+136] \ 0000009C 020000EA B ??contacthandler_3 2042 break; 2043 case 6: 2044 SetMenuItemIconArray(data,item,icon_array+(t->isLoadHistory?0:1)); \ ??contacthandler_9: \ 000000A0 600090E5 LDR R0,[R0, #+96] \ 000000A4 000000EA B ??contacthandler_3 2045 break; 2046 case 7: 2047 SetMenuItemIconArray(data,item,icon_array+(t->isautobot?0:1)); \ ??contacthandler_10: \ 000000A8 5C0090E5 LDR R0,[R0, #+92] \ ??contacthandler_3: \ 000000AC 0610A0E1 MOV R1,R6 \ 000000B0 000050E3 CMP R0,#+0 \ 000000B4 0000A013 MOVNE R0,#+0 \ 000000B8 0100A003 MOVEQ R0,#+1 \ 000000BC 002188E0 ADD R2,R8,R0, LSL #+2 \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 990100EF SWI +409 2048 break; 2049 #endif 2050 } 2051 SetMenuItemText(data, item, ws, curitem); \ ??contacthandler_1: \ 000000C8 0530A0E1 MOV R3,R5 \ 000000CC 0720A0E1 MOV R2,R7 \ 000000D0 0610A0E1 MOV R1,R6 \ 000000D4 0400A0E1 MOV R0,R4 \ 000000D8 9A0100EF SWI +410 2052 } \ 000000DC F083BDE8 POP {R4-R9,PC} ;; return 2053 2054 char cont_hdr[64]; 2055 static const HEADER_DESC contact_list_HDR={0,0,NULL,NULL,NULL,(int)cont_hdr,LGP_NULL}; 2056 static const int _softkeys[] = {0,1,2}; 2057 2058 static const SOFTKEY_DESC _sk[] = 2059 { 2060 {0x0018, 0x0000, (int)"Выбрать"}, 2061 {0x0001, 0x0000, (int)LG_CLOSE}, 2062 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 2063 }; 2064 2065 const SOFTKEYSTAB _skt = 2066 { 2067 _sk, 0 2068 }; 2069 static const MENU_DESC contact_list_MNU= 2070 { 2071 8,contact_keyhook,contact_list_ghook,NULL, 2072 _softkeys, 2073 &_skt, 2074 0x11, 2075 contacthandler, 2076 NULL, 2077 NULL, 2078 _MAX 2079 }; 2080 2081 \ In segment CODE, align 4, keep-with-next 2082 int CreateContactMenu(CLIST *t) 2083 { \ CreateContactMenu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 2084 uinContact=t->uin; \ 00000004 ........ LDR R5,??DataTable82 ;; icon_array 2085 icon_array[0]=GetPicNByUnicodeSymbol(CBOX_CHECKED); 2086 icon_array[1]=GetPicNByUnicodeSymbol(CBOX_UNCHECKED); 2087 sprintf(cont_hdr,"Меню кoнт. %s",t->name); \ 00000008 74609FE5 LDR R6,??CreateContactMenu_0 ;; `?next)) 2140 { 2141 if(cl->log) \ ??LongPressActionOnChat_10: \ 00000120 A00098E5 LDR R0,[R8, #+160] \ 00000124 000050E3 CMP R0,#+0 \ 00000128 0300000A BEQ ??LongPressActionOnChat_9 2142 { 2143 FreeLOGQ(&cl->log); \ 0000012C A00088E2 ADD R0,R8,#+160 \ 00000130 ........ BL FreeLOGQ 2144 cl->msg_count=0; \ 00000134 B04088E5 STR R4,[R8, #+176] 2145 cl->isactive=0; \ 00000138 AC4088E5 STR R4,[R8, #+172] 2146 } 2147 } \ ??LongPressActionOnChat_9: \ 0000013C 008098E5 LDR R8,[R8, #+0] \ 00000140 000058E3 CMP R8,#+0 \ 00000144 F5FFFF1A BNE ??LongPressActionOnChat_10 2148 if(strlen(ContactT9Key)) ClearContactT9Key(); \ 00000148 070086E0 ADD R0,R6,R7 \ 0000014C 1B0000EF SWI +27 \ 00000150 000050E3 CMP R0,#+0 \ 00000154 0200000A BEQ ??LongPressActionOnChat_11 \ 00000158 2010A0E3 MOV R1,#+32 \ 0000015C 070086E0 ADD R0,R6,R7 \ 00000160 1D0100EF SWI +285 2149 RecountMenu(NULL,1); \ ??LongPressActionOnChat_11: \ 00000164 0110A0E3 MOV R1,#+1 \ 00000168 0400A0E1 MOV R0,R4 \ 0000016C ........ BL RecountMenu 2150 ShowMSG(1,(int)"All chat clear!"); \ 00000170 801085E2 ADD R1,R5,#+128 \ ??LongPressActionOnChat_5: \ 00000174 0B00A0E1 MOV R0,R11 \ ??LongPressActionOnChat_6: \ 00000178 480100EF SWI +328 \ 0000017C F18FBDE8 POP {R0,R4-R11,PC} 2151 break; 2152 } 2153 case 6: 2154 if(!away_m) \ ??LongPressActionOnChat_12: \ 00000180 2C0397E5 LDR R0,[R7, #+812] \ 00000184 000050E3 CMP R0,#+0 \ 00000188 0B00001A BNE ??LongPressActionOnChat_13 2155 { 2156 away_m=!away_m; \ 0000018C 2CB387E5 STR R11,[R7, #+812] 2157 GBS_StopTimer(&away_tmr); \ 00000190 C400A0E3 MOV R0,#+196 \ 00000194 600D80E3 ORR R0,R0,#0x1800 \ 00000198 070080E0 ADD R0,R0,R7 \ 0000019C 440100EF SWI +324 2158 msg_away_timer=AUTO_ENGADE*12; \ 000001A0 ........ LDR R0,??DataTable86 ;; AUTO_ENGADE \ 000001A4 0C10A0E3 MOV R1,#+12 \ 000001A8 000090E5 LDR R0,[R0, #+0] \ 000001AC 910000E0 MUL R0,R1,R0 \ 000001B0 280387E5 STR R0,[R7, #+808] 2159 InputAwayMsg(); \ 000001B4 ........ BL InputAwayMsg \ 000001B8 F18FBDE8 POP {R0,R4-R11,PC} 2160 2161 } 2162 else 2163 { 2164 msg_away_timer=0; 2165 away_m=!away_m; 2166 if(change_back_status) \ ??LongPressActionOnChat_13: \ 000001BC 340397E5 LDR R0,[R7, #+820] \ 000001C0 284387E5 STR R4,[R7, #+808] \ 000001C4 2C4387E5 STR R4,[R7, #+812] \ 000001C8 000050E3 CMP R0,#+0 \ 000001CC F18FBD08 POPEQ {R0,R4-R11,PC} 2167 { 2168 CurrentStatus=status_rem; \ 000001D0 300397E5 LDR R0,[R7, #+816] \ 000001D4 180387E5 STR R0,[R7, #+792] 2169 set_my_status(); \ 000001D8 ........ BL set_my_status 2170 change_back_status=0; \ 000001DC 344387E5 STR R4,[R7, #+820] \ 000001E0 F18FBDE8 POP {R0,R4-R11,PC} 2171 } 2172 } 2173 UpdateCLheader(); 2174 break; 2175 case 7: 2176 { 2177 Show_XTX=!(Show_XTX); \ ??LongPressActionOnChat_14: \ 000001E4 380397E5 LDR R0,[R7, #+824] \ 000001E8 000050E3 CMP R0,#+0 \ 000001EC 00B0A013 MOVNE R11,#+0 \ 000001F0 38B387E5 STR R11,[R7, #+824] 2178 if(Show_XTX) \ 000001F4 00005BE3 CMP R11,#+0 \ 000001F8 A8108502 ADDEQ R1,R5,#+168 2179 ShowMSG(1,(int)"Default show x-status"); \ 000001FC 90108512 ADDNE R1,R5,#+144 \ 00000200 0100A0E3 MOV R0,#+1 \ 00000204 DBFFFFEA B ??LongPressActionOnChat_6 2180 else 2181 ShowMSG(1,(int)"Default show time"); 2182 } 2183 break; 2184 case 8: 2185 { 2186 WSHDR *ws; 2187 ws=AllocWS(150); \ ??LongPressActionOnChat_15: \ 00000208 9600A0E3 MOV R0,#+150 \ 0000020C 250100EF SWI +293 2188 str_2ws(ws,suc_config_name,128); \ 00000210 ........ LDR R1,??DataTable87 ;; suc_config_name \ 00000214 020000EA B ??LongPressActionOnChat_16 2189 ExecuteFile(ws,0,0); 2190 FreeWS(ws); 2191 } 2192 break; 2193 case 9: 2194 { 2195 WSHDR *ws; 2196 ws=AllocWS(150); \ ??LongPressActionOnChat_17: \ 00000218 9600A0E3 MOV R0,#+150 \ 0000021C 250100EF SWI +293 2197 str_2ws(ws,suc_config_name_mod,128); \ 00000220 ........ LDR R1,??DataTable88 ;; suc_config_name_mod \ ??LongPressActionOnChat_16: \ 00000224 0040A0E1 MOV R4,R0 \ 00000228 8020A0E3 MOV R2,#+128 \ 0000022C 6C0100EF SWI +364 2198 ExecuteFile(ws,0,0); \ 00000230 0020A0E3 MOV R2,#+0 \ 00000234 0010A0E3 MOV R1,#+0 \ 00000238 0400A0E1 MOV R0,R4 \ 0000023C 940000EF SWI +148 2199 FreeWS(ws); \ 00000240 0400A0E1 MOV R0,R4 \ 00000244 290100EF SWI +297 \ 00000248 F18FBDE8 POP {R0,R4-R11,PC} 2200 } 2201 break; 2202 case 10://ping 2203 { 2204 janis=1; \ ??LongPressActionOnChat_18: \ 0000024C ........ LDR R0,??DataTable89 ;; janis \ 00000250 00B080E5 STR R11,[R0, #+0] 2205 TPKT *p; 2206 p=malloc(sizeof(PKT)+sizeof(TTime)); \ 00000254 1000A0E3 MOV R0,#+16 \ 00000258 140000EF SWI +20 \ 0000025C 0050A0E1 MOV R5,R0 2207 GetDateTime(NULL,(TTime *)p->data); \ 00000260 081085E2 ADD R1,R5,#+8 \ 00000264 0000A0E3 MOV R0,#+0 \ 00000268 B40000EF SWI +180 2208 p->pkt.uin=0; \ 0000026C 004085E5 STR R4,[R5, #+0] 2209 p->pkt.type=T_ECHO; \ 00000270 1200A0E3 MOV R0,#+18 \ 00000274 B400C5E1 STRH R0,[R5, #+4] 2210 p->pkt.data_len=sizeof(TTime); \ 00000278 0800A0E3 MOV R0,#+8 \ 0000027C B600C5E1 STRH R0,[R5, #+6] 2211 SUBPROC((void *)SendAnswer,0,p); \ 00000280 ........ LDR R0,??DataTable90 ;; SendAnswer \ 00000284 0520A0E1 MOV R2,R5 \ 00000288 0410A0E1 MOV R1,R4 \ 0000028C 710100EF SWI +369 \ 00000290 F18FBDE8 POP {R0,R4-R11,PC} 2212 } 2213 break; 2214 case 11://go to idle 2215 { 2216 ClearContactT9Key(); \ ??LongPressActionOnChat_19: \ 00000294 2010A0E3 MOV R1,#+32 \ 00000298 070086E0 ADD R0,R6,R7 \ 0000029C 1D0100EF SWI +285 2217 RecountMenu(NULL,1); \ 000002A0 0110A0E3 MOV R1,#+1 \ 000002A4 0400A0E1 MOV R0,R4 \ 000002A8 ........ BL RecountMenu 2218 silenthide=1; \ 000002AC 54B387E5 STR R11,[R7, #+852] 2219 gipc.name_to=ipc_xtask_name; \ 000002B0 E70F85E2 ADD R0,R5,#+924 \ 000002B4 07008AE7 STR R0,[R10, +R7] 2220 gipc.name_from=ipc_my_name; \ 000002B8 DF0F85E2 ADD R0,R5,#+892 \ 000002BC 300187E5 STR R0,[R7, #+304] 2221 gipc.data=0; \ 000002C0 344187E5 STR R4,[R7, #+308] 2222 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 000002C4 07308AE0 ADD R3,R10,R7 \ 000002C8 0B20A0E1 MOV R2,R11 \ 000002CC 0910A0E1 MOV R1,R9 \ 000002D0 0900A0E3 MOV R0,#+9 \ 000002D4 420C80E3 ORR R0,R0,#0x4200 \ 000002D8 000100EF SWI +256 \ 000002DC F18FBDE8 POP {R0,R4-R11,PC} 2223 } 2224 break; 2225 case 12://hide & lock 2226 { 2227 ClearContactT9Key(); \ ??LongPressActionOnChat_20: \ 000002E0 2010A0E3 MOV R1,#+32 \ 000002E4 070086E0 ADD R0,R6,R7 \ 000002E8 1D0100EF SWI +285 2228 RecountMenu(NULL,1); \ 000002EC 0110A0E3 MOV R1,#+1 \ 000002F0 0400A0E1 MOV R0,R4 \ 000002F4 ........ BL RecountMenu 2229 gipc.name_to=ipc_xtask_name; \ 000002F8 E70F85E2 ADD R0,R5,#+924 \ 000002FC 07008AE7 STR R0,[R10, +R7] 2230 gipc.name_from=ipc_my_name; \ 00000300 DF0F85E2 ADD R0,R5,#+892 \ 00000304 300187E5 STR R0,[R7, #+304] 2231 gipc.data=0; \ 00000308 344187E5 STR R4,[R7, #+308] 2232 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 0000030C 07308AE0 ADD R3,R10,R7 \ 00000310 0B20A0E1 MOV R2,R11 \ 00000314 0910A0E1 MOV R1,R9 \ 00000318 0900A0E3 MOV R0,#+9 \ 0000031C 420C80E3 ORR R0,R0,#0x4200 \ 00000320 000100EF SWI +256 2233 if (IsUnlocked()) \ 00000324 430000EF SWI +67 \ 00000328 000050E3 CMP R0,#+0 \ 0000032C F18FBD08 POPEQ {R0,R4-R11,PC} 2234 { 2235 KbdLock(); \ 00000330 A90000EF SWI +169 \ 00000334 F18FBDE8 POP {R0,R4-R11,PC} 2236 } 2237 // return(-1); 2238 } 2239 break; 2240 case 13://users menu 2241 { 2242 if(!t->isgroup) \ ??LongPressActionOnChat_21: \ 00000338 081090E5 LDR R1,[R0, #+8] \ 0000033C 000051E3 CMP R1,#+0 \ 00000340 F18FBD18 POPNE {R0,R4-R11,PC} 2243 CreateContactMenu(t); \ 00000344 ........ BL CreateContactMenu 2244 } 2245 break; 2246 }//switch() 2247 } \ ??LongPressActionOnChat_22: \ 00000348 F18FBDE8 POP {R0,R4-R11,PC} ;; return 2248 2249 //{"Без действия","Звук","Вибра","Инвиз","Реж.напоминания","Очистить чаты","Автоответчик","Показ.хстат/время","Конфиг","Конфиг мода","Пинг","Заблокировать","На гэ","Меню юзера"} 2250 \ In segment CODE, align 4, keep-with-next 2251 void LongPressAction(CLIST *t,int key) 2252 { \ LongPressAction: \ 00000000 00402DE9 PUSH {LR} 2253 switch(key) \ 00000004 041041E2 SUB R1,R1,#+4 \ 00000008 350051E3 CMP R1,#+53 \ 0000000C 0080BD88 POPHI {PC} \ 00000010 012F8FE2 ADR R2,??LongPressAction_0 \ 00000014 0120D2E7 LDRB R2,[R2, R1] \ 00000018 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??LongPressAction_0: \ 0000001C 292C2C2C DC8 +41,+44,+44,+44 \ 00000020 2C2C2C2C DC8 +44,+44,+44,+44 \ 00000024 2C2C2C2C DC8 +44,+44,+44,+44 \ 00000028 2C2C2C2C DC8 +44,+44,+44,+44 \ 0000002C 2C2C2C2C DC8 +44,+44,+44,+44 \ 00000030 2C2C2C2C DC8 +44,+44,+44,+44 \ 00000034 2C2C2C2C DC8 +44,+44,+44,+44 \ 00000038 2C2C2C27 DC8 +44,+44,+44,+39 \ 0000003C 2C2C2C2C DC8 +44,+44,+44,+44 \ 00000040 2C2C252C DC8 +44,+44,+37,+44 \ 00000044 2C2C2C2C DC8 +44,+44,+44,+44 \ 00000048 0D0F1317 DC8 +13,+15,+19,+23 \ 0000004C 191B1D1F DC8 +25,+27,+29,+31 \ 00000050 21230000 DC8 +33,+35,+0,+0 2254 { 2255 case '0': LongPressActionOnChat(t,longAct_0); break; \ ??LongPressAction_1: \ 00000054 78109FE5 LDR R1,??LongPressAction_2 ;; longAct_0 \ 00000058 040000EA B ??LongPressAction_3 2256 case '1': LongPressActionOnChat(t,longAct_1); break; \ ??LongPressAction_4: \ 0000005C 74109FE5 LDR R1,??LongPressAction_2+0x4 ;; longAct_1 \ 00000060 001091E5 LDR R1,[R1, #+0] \ 00000064 ........ BL LongPressActionOnChat \ 00000068 0080BDE8 POP {PC} 2257 case '2': LongPressActionOnChat(t,longAct_2); break; \ ??LongPressAction_5: \ 0000006C 68109FE5 LDR R1,??LongPressAction_2+0x8 ;; longAct_2 \ ??LongPressAction_3: \ 00000070 001091E5 LDR R1,[R1, #+0] \ 00000074 ........ BL LongPressActionOnChat \ 00000078 0080BDE8 POP {PC} 2258 case '3': LongPressActionOnChat(t,longAct_3); break; \ ??LongPressAction_6: \ 0000007C 5C109FE5 LDR R1,??LongPressAction_2+0xC ;; longAct_3 \ 00000080 FAFFFFEA B ??LongPressAction_3 2259 case '4': LongPressActionOnChat(t,longAct_4); break; \ ??LongPressAction_7: \ 00000084 58109FE5 LDR R1,??LongPressAction_2+0x10 ;; longAct_4 \ 00000088 F8FFFFEA B ??LongPressAction_3 2260 case '5': LongPressActionOnChat(t,longAct_5); break; \ ??LongPressAction_8: \ 0000008C 54109FE5 LDR R1,??LongPressAction_2+0x14 ;; longAct_5 \ 00000090 F6FFFFEA B ??LongPressAction_3 2261 case '6': LongPressActionOnChat(t,longAct_6); break; \ ??LongPressAction_9: \ 00000094 50109FE5 LDR R1,??LongPressAction_2+0x18 ;; longAct_6 \ 00000098 F4FFFFEA B ??LongPressAction_3 2262 case '7': LongPressActionOnChat(t,longAct_7); break; \ ??LongPressAction_10: \ 0000009C 4C109FE5 LDR R1,??LongPressAction_2+0x1C ;; longAct_7 \ 000000A0 F2FFFFEA B ??LongPressAction_3 2263 case '8': LongPressActionOnChat(t,longAct_8); break; \ ??LongPressAction_11: \ 000000A4 48109FE5 LDR R1,??LongPressAction_2+0x20 ;; longAct_8 \ 000000A8 F0FFFFEA B ??LongPressAction_3 2264 case '9': LongPressActionOnChat(t,longAct_9); break; \ ??LongPressAction_12: \ 000000AC 44109FE5 LDR R1,??LongPressAction_2+0x24 ;; longAct_9 \ 000000B0 EEFFFFEA B ??LongPressAction_3 2265 case '*': LongPressActionOnChat(t,longAct_10); break; \ ??LongPressAction_13: \ 000000B4 40109FE5 LDR R1,??LongPressAction_2+0x28 ;; longAct_10 \ 000000B8 ECFFFFEA B ??LongPressAction_3 2266 case '#': LongPressActionOnChat(t,longAct_11); break; \ ??LongPressAction_14: \ 000000BC 3C109FE5 LDR R1,??LongPressAction_2+0x2C ;; longAct_11 \ 000000C0 EAFFFFEA B ??LongPressAction_3 2267 case RIGHT_SOFT: LongPressActionOnChat(t,longAct_RB); break; \ ??LongPressAction_15: \ 000000C4 38109FE5 LDR R1,??LongPressAction_2+0x30 ;; longAct_RB \ 000000C8 001091E5 LDR R1,[R1, #+0] \ 000000CC ........ BL LongPressActionOnChat 2268 } 2269 } \ ??LongPressAction_16: \ 000000D0 0080BDE8 POP {PC} ;; return \ ??LongPressAction_2: \ 000000D4 ........ DC32 longAct_0 \ 000000D8 ........ DC32 longAct_1 \ 000000DC ........ DC32 longAct_2 \ 000000E0 ........ DC32 longAct_3 \ 000000E4 ........ DC32 longAct_4 \ 000000E8 ........ DC32 longAct_5 \ 000000EC ........ DC32 longAct_6 \ 000000F0 ........ DC32 longAct_7 \ 000000F4 ........ DC32 longAct_8 \ 000000F8 ........ DC32 longAct_9 \ 000000FC ........ DC32 longAct_10 \ 00000100 ........ DC32 longAct_11 \ 00000104 ........ DC32 longAct_RB 2270 2271 char hostbuf2[128]; 2272 #ifdef USE_MLMENU 2273 int contactlist_menu_onkey(void *data, GUI_MSG *msg) 2274 { 2275 #ifdef NEWSGOLD 2276 scrsTime=0; 2277 #endif 2278 2279 CLIST *t; 2280 int i; 2281 i=GetCurMenuItem(data); 2282 t=FindContactByN(i); 2283 2284 if (msg->keys==0x18) 2285 { 2286 ShowMainMenu(); 2287 return(-1); 2288 } 2289 2290 if (msg->keys==0x3D) 2291 { 2292 if (t) 2293 { 2294 if (t->isgroup) 2295 { 2296 t->state^=0xFFFF; 2297 RecountMenu(t,1); 2298 return(-1); 2299 } 2300 if (strlen(ContactT9Key)) 2301 { 2302 ClearContactT9Key(); 2303 RecountMenu(NULL,1); 2304 } 2305 #ifdef kluchnik 2306 if(!t->isactive && HISTORY_BUFFER && (t->isLoadHistory && t->isIndividSet)) GetHistory(t, 64<isactive && HISTORY_BUFFER) GetHistory(t, 64<isactive && HISTORY_BUFFER) GetHistory(t, 64<keys==1) 2318 { 2319 if (strlen(ContactT9Key)) 2320 { 2321 BackSpaceContactT9(); 2322 RecountMenu(NULL,1); 2323 return(-1); 2324 } 2325 } 2326 2327 if (msg->gbsmsg->msg==KEY_DOWN) 2328 { 2329 int key=msg->gbsmsg->submess; 2330 if ((key>='0')&&(key<='9')) 2331 { 2332 AddContactT9Key(key); 2333 RecountMenu(NULL,1); 2334 return(-1); 2335 } 2336 2337 if (key==VOL_UP_BUTTON && isVolUpButton) 2338 { 2339 #ifdef NEWSGOLD 2340 CreateScreenSelectGUI(); 2341 #else 2342 char *small_info=malloc(256); 2343 sprintf(small_info, "Время в онлайн:\n" 2344 "%02d:%02d:%02d\n" 2345 "Сервер:\n%s" 2346 ,uptimeHour, uptimeMin, uptimeSec, hostbuf2); 2347 ShowMSG(1,(int)small_info); 2348 mfree(small_info); 2349 #endif 2350 } 2351 2352 if(msg->gbsmsg->submess==VOL_DOWN_BUTTON && isVolDownButton) 2353 { 2354 if(!away_m) 2355 { 2356 away_m=!away_m; 2357 /* GBS_StopTimer(&away_tmr); 2358 msg_away_timer=AUTO_ENGADE; 2359 away_timer();*/ 2360 main_d=1; 2361 InputAwayMsg(); 2362 } 2363 else 2364 { 2365 msg_away_timer=0; 2366 away_m=!away_m; 2367 if(change_back_status) 2368 { 2369 CurrentStatus=status_rem; 2370 set_my_status(); 2371 change_back_status=0; 2372 } 2373 } 2374 UpdateCLheader(); 2375 RefreshGUI(); 2376 } 2377 2378 if(key==GREEN_BUTTON) 2379 { 2380 IsActiveUp=!IsActiveUp; 2381 RecountMenu(NULL,1); 2382 return(-1); 2383 } 2384 2385 if(key==LEFT_BUTTON && (CountContacts()>0)) 2386 { 2387 while(t=(CLIST *)(t->next)) 2388 { 2389 if (t->isunread) goto doit; 2390 } 2391 t=(CLIST *)(&cltop); 2392 while(t=(CLIST *)(t->next)) 2393 { 2394 if (t->isunread) goto doit; 2395 } 2396 if (t && Is_Show_Groups) { 2397 if (!t->isgroup) 2398 t=FindGroupByID(t->group); 2399 if (t && !t->state) { 2400 t->state^=0xFFFF; 2401 goto does; 2402 } 2403 } 2404 doit: 2405 { 2406 CLIST *g=FindGroupByID(t->group); 2407 if (g) 2408 { 2409 if (g->state) 2410 { 2411 g->state=0; 2412 } 2413 } 2414 } 2415 does: 2416 RecountMenu(t,1); 2417 return(-1); 2418 } 2419 2420 if (key=='*' && (CountContacts()>0)) 2421 { 2422 while(t=(CLIST *)(t->next)) 2423 { 2424 if (t->just_now) goto doit3; 2425 } 2426 t=(CLIST *)(&cltop); 2427 while(t=(CLIST *)(t->next)) 2428 { 2429 if (t->just_now) goto doit3; 2430 } 2431 return(-1); 2432 doit3: 2433 { 2434 CLIST *g=FindGroupByID(t->group); 2435 if (g) 2436 { 2437 if (g->state) 2438 { 2439 g->state=0; 2440 } 2441 } 2442 } 2443 RecountMenu(t,1); 2444 return(-1); 2445 } 2446 2447 if (key=='#' && (CountContacts()>0))//Если есть хоть один контакт то выполнять,иначе возможен пикофф 2448 { 2449 if(ActionResh) 2450 { 2451 while(t=(CLIST *)(t->next)) 2452 { 2453 if (t->isactive) goto doit4; 2454 } 2455 t=(CLIST *)(&cltop); 2456 while(t=(CLIST *)(t->next)) 2457 { 2458 if (t->isactive) goto doit4; 2459 } 2460 return(-1); 2461 doit4: 2462 { 2463 CLIST *g=FindGroupByID(t->group); 2464 if (g) 2465 { 2466 if (g->state) 2467 { 2468 g->state=0; 2469 } 2470 } 2471 } 2472 RecountMenu(t,1); 2473 } 2474 else 2475 { 2476 if(t->log && !(t->just_now))//очистить лог 2477 { 2478 FreeLOGQ(&t->log); 2479 t->msg_count=0; 2480 t->isactive=0; 2481 } 2482 2483 if(t->just_now)//если контакт тока зашел,то обнуляем 2484 { 2485 CLIST *tt; 2486 tt=FindContactByUin(t->uin); 2487 tt->just_now=0; 2488 } 2489 2490 if(t->uin==UIN)//если нажали на Loopback, то обнуляем все just_now'ы 2491 { 2492 CLIST *tt; 2493 tt=(CLIST *)(&cltop); 2494 while(tt=(CLIST *)(tt->next)) 2495 { 2496 if(tt->just_now) tt->just_now=0; 2497 } 2498 } 2499 2500 if(strlen(ContactT9Key)) ClearContactT9Key(); 2501 RecountMenu(NULL,0); 2502 } 2503 return(-1); 2504 } 2505 2506 if (key==RIGHT_BUTTON) 2507 { 2508 //Послать запрос текста XStatus 2509 if (t) 2510 { 2511 if (!t->isgroup) 2512 { 2513 FreeXText(t); 2514 t->req_xtext=0; 2515 RequestXText(t->uin); 2516 RefreshGUI(); 2517 return(-1); 2518 } 2519 } 2520 } 2521 } 2522 2523 if (msg->gbsmsg->msg==LONG_PRESS) 2524 { 2525 LongPressAction(t,msg->gbsmsg->submess); 2526 2527 int key=msg->gbsmsg->submess; 2528 if ((key>='0')&&(key<='9')) 2529 { 2530 ClearContactT9Key(); 2531 UpdateCLheader(); 2532 RecountMenu(NULL,1); 2533 } 2534 } 2535 return(0); 2536 } 2537 #endif //USE_MLMENU 2538 \ In segment CODE, align 4, keep-with-next 2539 void GetOnTotalContact(int group_id,int *_onlinetotal) 2540 { 2541 CLIST *t; 2542 t=(CLIST *)&cltop; \ GetOnTotalContact: \ 00000000 ........ LDR R2,??DataTable91 ;; icons + 940 \ 00000004 30002DE9 PUSH {R4,R5} 2543 int online=0,total=0; \ 00000008 0030A0E3 MOV R3,#+0 \ 0000000C 00C0A0E3 MOV R12,#+0 \ 00000010 FF50A0E3 MOV R5,#+255 \ 00000014 FF5C85E3 ORR R5,R5,#0xFF00 \ 00000018 080000EA B ??GetOnTotalContact_0 2544 while((t=t->next)) 2545 { 2546 if(t->group==group_id && !t->isgroup) \ ??GetOnTotalContact_1: \ 0000001C 104092E5 LDR R4,[R2, #+16] \ 00000020 000054E1 CMP R4,R0 \ 00000024 08409205 LDREQ R4,[R2, #+8] \ 00000028 00005403 CMPEQ R4,#+0 \ 0000002C 0300001A BNE ??GetOnTotalContact_0 2547 { 2548 total++; 2549 if (t->state!=0xFFFF) online++; \ 00000030 B445D2E1 LDRH R4,[R2, #+84] \ 00000034 01C08CE2 ADD R12,R12,#+1 \ 00000038 050054E1 CMP R4,R5 \ 0000003C 01308312 ADDNE R3,R3,#+1 2550 } 2551 } \ ??GetOnTotalContact_0: \ 00000040 002092E5 LDR R2,[R2, #+0] \ 00000044 000052E3 CMP R2,#+0 \ 00000048 F3FFFF1A BNE ??GetOnTotalContact_1 2552 _onlinetotal[0]=online; \ 0000004C 003081E5 STR R3,[R1, #+0] 2553 _onlinetotal[1]=total; \ 00000050 04C081E5 STR R12,[R1, #+4] 2554 } \ 00000054 3000BDE8 POP {R4,R5} \ 00000058 1EFF2FE1 BX LR ;; return 2555 2556 #ifdef USE_MLMENU 2557 void contactlist_menu_iconhndl(void *data, int curitem, void *unk) 2558 { 2559 CLIST *t; 2560 #ifdef USE_MLMENU 2561 void *item=AllocMLMenuItem(data); 2562 #else 2563 void *item=AllocMenuItem(data); 2564 #endif 2565 int icon; 2566 2567 WSHDR *ws2; 2568 #ifdef USE_MLMENU 2569 WSHDR *ws4; 2570 #endif 2571 WSHDR ws1loc, *ws1; 2572 unsigned short num[128]; 2573 ws1=CreateLocalWS(&ws1loc,num,128); 2574 #ifdef USE_MLMENU 2575 WSHDR ws3loc, *ws3; 2576 unsigned short num3[128]; 2577 ws3=CreateLocalWS(&ws3loc,num3,128); 2578 char s[64]; 2579 #endif 2580 t=FindContactByN(curitem); 2581 if (t) 2582 { 2583 icon=GetIconIndex(t); 2584 if (icon!=IS_GROUP) 2585 { 2586 if(t->just_now) 2587 { 2588 char *test=malloc(64); 2589 sprintf(test, ">> %s <<", t->name); 2590 wsprintf(ws1,percent_t,test); 2591 mfree(test); 2592 } 2593 else 2594 wsprintf(ws1,percent_t,t->name); 2595 if (t->just_now) 2596 { 2597 wsInsertChar(ws1,0x0004,1); 2598 wsInsertChar(ws1,0xE008,1); 2599 } 2600 else 2601 if (t->isactive) 2602 { 2603 wsInsertChar(ws1,0x0002,1); 2604 wsInsertChar(ws1,0xE008,1); 2605 } 2606 2607 #ifdef USE_MLMENU 2608 if ((t->xtext && t->xtext[0]!=0) && (t->isShowXst) && (t->state!=0xFFFF))//Если контакт онлайн и показывать хстату 2609 { 2610 int i; 2611 zeromem(s,64); 2612 i=t->xtext[0]; 2613 if (i>63) i=63; 2614 strncpy(s,t->xtext+1,i); 2615 wsprintf(ws3,"%c%t",0xE012,s); 2616 } 2617 else 2618 if(t->xtext2 && t->xtext2[0]!=0 && isLogStatusChange) 2619 { 2620 int i; 2621 zeromem(s,64); 2622 i=t->xtext2[0]; 2623 if (i>63) i=63; 2624 strncpy(s,t->xtext2+1,i); 2625 wsprintf(ws3,"%c%t",0xE012,s); 2626 } 2627 else 2628 wsprintf(ws3,percent_d,t->uin); 2629 if ((t->xstatexstate)) 2630 { 2631 wsInsertChar(ws3,FIRST_UCS2_BITMAP+t->xstate,1); 2632 } 2633 #endif 2634 } 2635 else 2636 { 2637 int onlinetotal[2]; 2638 GetOnTotalContact(t->group,onlinetotal); 2639 #ifdef USE_MLMENU 2640 wsprintf(ws1,percent_t,t->name); 2641 wsprintf(ws3,"(%d/%d)",onlinetotal[0],onlinetotal[1]); 2642 #else 2643 wsprintf(ws1,"%t%c%c(%d/%d)",t->name,0xE01D,0xE012,onlinetotal[0],onlinetotal[1]); 2644 #endif 2645 if (t->state) icon++; //Модификация иконки группы 2646 } 2647 } 2648 else 2649 { 2650 wsprintf(ws1, LG_CLERROR); 2651 } 2652 ws2=AllocMenuWS(data,ws1->wsbody[0]+1); 2653 wstrcpy(ws2,ws1); 2654 2655 /* 2656 #ifdef kluchnik 2657 if ((t->xstatexstate)) 2658 { 2659 wsInsertChar(ws2,NumXStatusToIconBar+t->xstate,1); 2660 } 2661 #endif 2662 */ 2663 2664 SetMenuItemIconArray(data, item, S_ICONS+icon); 2665 #ifdef USE_MLMENU 2666 ws4=AllocMenuWS(data,ws3->wsbody[0]); 2667 wstrcpy(ws4,ws3); 2668 SetMLMenuItemText(data, item, ws2, ws4, curitem); 2669 #else 2670 SetMenuItemText(data, item, ws2, curitem); 2671 #endif 2672 } 2673 #endif //USE_MLMENU 2674 2675 /************************************************************************************************/ 2676 2677 /*------------------------------------------------------------------------*/ 2678 /*-------------------- Весь процесс отрисовки списка ---------------------*/ 2679 /*------------------------------------------------------------------------*/ 2680 2681 int itemFromDisp;//кол-во на экране 2682 int totalItems;//общее количество итемов 2683 int curpos=0;//позичия курсора 2684 int curpage=1;//текущая страница 2685 int collum=0;//столбцы))) 0 - первый, 1- второй 2686 2687 const char clrSelect[4]={0xFF,0x00,0x00,0x20}; 2688 const char fntSelect[4]={0xFF,0xFF,0x00,0x60}; 2689 const char bordSelect[4]={0x00,0x00,0x00,0x60}; 2690 2691 const char clrNotSelect[4]={0x00,0x00,0x00,0x00}; 2692 const char bordNotSelect[4]={0x00,0x00,0x00,0x00}; 2693 const char fntNotSelect[4]={0xFF,0xFF,0xFF,0x60}; 2694 2695 char clrBlack[]={0x00,0x00,0x00,0x64}; 2696 char clrWhite[]={0xFF,0xFF,0xFF,0x64}; 2697 char clrRed[]={0xFF,0x00,0x00,0x64}; 2698 char transparent[]={0x00,0x00,0x00,0x00}; 2699 char blue[]="\x00\x00\xFF\x64"; 2700 2701 const int clfont=(FONT_SMALL+100);//ибо библа пнг 2702 const char _t[]="%t"; 2703 const char _d[]="%d"; 2704 2705 #ifdef ELKA 2706 #undef YDISP 2707 #define YDISP 0 2708 #endif 2709 2710 #define CLIST_Y1 (YDISP+FontH(clfont)+4) 2711 2712 \ In segment CODE, align 4, keep-with-next 2713 void RecountMenu(CLIST *req, int needfocus) 2714 { \ RecountMenu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 2715 int i; 2716 int j; 2717 if (!maingui_id) return; //Нечего считать \ 00000004 ........ LDR R5,??DataTable95 ;; icons \ 00000008 0140A0E1 MOV R4,R1 \ 0000000C 041395E5 LDR R1,[R5, #+772] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 7080BD08 POPEQ {R4-R6,PC} 2718 if (req==NULL) \ 00000018 000050E3 CMP R0,#+0 2719 { 2720 j=0; \ 0000001C 0060A003 MOVEQ R6,#+0 \ 00000020 0100000A BEQ ??RecountMenu_0 2721 } 2722 else 2723 { 2724 j=FindContactByContact(req); \ 00000024 ........ _BLF FindContactByContact,??FindContactByContact??rA \ 00000028 0060A0E1 MOV R6,R0 2725 } 2726 i=CountContacts(); \ ??RecountMenu_0: \ 0000002C ........ _BLF CountContacts,??CountContacts??rA 2727 if (j>=i) j=i-1; \ 00000030 000056E1 CMP R6,R0 \ 00000034 016040A2 SUBGE R6,R0,#+1 2728 if (j<0) j=0; \ 00000038 000056E3 CMP R6,#+0 \ 0000003C 0060A043 MOVMI R6,#+0 2729 if(needfocus) curpos=j; \ 00000040 000054E3 CMP R4,#+0 \ 00000044 D8638515 STRNE R6,[R5, #+984] 2730 // if (IsGuiOnTop(contactlist_menu_id)) 2731 SMART_REDRAW();//DirectRedrawGUI_ID(contactlist_menu_id);//contactlist_menu_id \ 00000048 ........ BL SMART_REDRAW 2732 } \ 0000004C 7080BDE8 POP {R4-R6,PC} ;; return 2733 2734 \ In segment CODE, align 4, keep-with-next 2735 void DrawStr(int x,int y,char*s,char *color,int font,int align) 2736 { \ DrawStr: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 18709DE5 LDR R7,[SP, #+24] \ 0000000C 1C809DE5 LDR R8,[SP, #+28] \ 00000010 0150A0E1 MOV R5,R1 2737 SetFontColor(color,transparent,0); \ 00000014 ........ LDR R1,??DataTable94 ;; icons + 7168 \ 00000018 0260A0E1 MOV R6,R2 \ 0000001C 0300A0E1 MOV R0,R3 \ 00000020 0020A0E3 MOV R2,#+0 \ 00000024 ........ _BLF SetFontColor,??SetFontColor??rA 2738 PrintField(x,y,s,align,font,1);//capacity in header \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 01002DE9 PUSH {R0} \ 00000030 80002DE9 PUSH {R7} \ 00000034 0830A0E1 MOV R3,R8 \ 00000038 0620A0E1 MOV R2,R6 \ 0000003C 0510A0E1 MOV R1,R5 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 ........ _BLF PrintField,??PrintField??rA 2739 //void PrintText( int x, int y, char *str, int align, int font, int space, int lineSpace, int isScroll, short fixSize, int maxLen); 2740 } \ 00000048 F381BDE8 POP {R0,R1,R4-R8,PC} ;; return 2741 \ In segment CODE, align 4, keep-with-next 2742 void DrawText(int x,int y,int x2,char*s,char *color,int font,int align,int isScroll) 2743 { \ DrawText: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 24809DE5 LDR R8,[SP, #+36] \ 00000008 28909DE5 LDR R9,[SP, #+40] \ 0000000C 2CA09DE5 LDR R10,[SP, #+44] \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 20009DE5 LDR R0,[SP, #+32] \ 00000018 0150A0E1 MOV R5,R1 2744 SetFontColor(color,transparent,0); \ 0000001C ........ LDR R1,??DataTable94 ;; icons + 7168 \ 00000020 0260A0E1 MOV R6,R2 \ 00000024 0370A0E1 MOV R7,R3 \ 00000028 0020A0E3 MOV R2,#+0 \ 0000002C ........ _BLF SetFontColor,??SetFontColor??rA 2745 // SetScrollEdgeDelay(0); 2746 PrintText(x,y,s,align,font,1,350,isScroll,0,x2-x); \ 00000030 040046E0 SUB R0,R6,R4 \ 00000034 01002DE9 PUSH {R0} \ 00000038 0930A0E1 MOV R3,R9 \ 0000003C 0720A0E1 MOV R2,R7 \ 00000040 0510A0E1 MOV R1,R5 \ 00000044 0000A0E3 MOV R0,#+0 \ 00000048 01002DE9 PUSH {R0} \ 0000004C 00042DE9 PUSH {R10} \ 00000050 5E00A0E3 MOV R0,#+94 \ 00000054 400F80E3 ORR R0,R0,#0x100 \ 00000058 01002DE9 PUSH {R0} \ 0000005C 0100A0E3 MOV R0,#+1 \ 00000060 01002DE9 PUSH {R0} \ 00000064 00012DE9 PUSH {R8} \ 00000068 0400A0E1 MOV R0,R4 \ 0000006C ........ _BLF PrintText,??PrintText??rA 2747 //int x, int y, char *str, int align, int font, int space, int lineSpace, int isScroll, short fixSize, int maxLen); 2748 } \ 00000070 18D08DE2 ADD SP,SP,#+24 \ 00000074 F087BDE8 POP {R4-R10,PC} ;; return 2749 \ In segment CODE, align 4, keep-with-next 2750 void DrawSoftKeys(char *right,char *left) 2751 { \ DrawSoftKeys: \ 00000000 F34F2DE9 PUSH {R0,R1,R4-R11,LR} \ 00000004 0CD04DE2 SUB SP,SP,#+12 2752 TTime t; 2753 char *s=malloc(32); 2754 int FntH=FontH(clfont); 2755 int scr_w=ScreenW()-1; 2756 int scr_h=ScreenH()-1; 2757 char clrRed[]={0xFF,0x00,0x00,0x15}; 2758 LockSched(); 2759 DrawRoundedFrame(0,ScreenH()-1-FntH-2,ScreenW()-1,ScreenH()-1,0,0,0,clrBlack,clrBlack); \ 00000008 ........ LDR R8,??DataTable95 ;; icons \ 0000000C 2000A0E3 MOV R0,#+32 \ 00000010 140000EF SWI +20 \ 00000014 0040A0E1 MOV R4,R0 \ 00000018 6C00A0E3 MOV R0,#+108 \ 0000001C ........ _BLF FontH,??FontH??rA \ 00000020 0050A0E1 MOV R5,R0 \ 00000024 888100EF SWI +33160 \ 00000028 016040E2 SUB R6,R0,#+1 \ 0000002C 898100EF SWI +33161 \ 00000030 ........ LDR R1,??DataTable96 ;; `?` \ 00000034 017040E2 SUB R7,R0,#+1 \ 00000038 002091E5 LDR R2,[R1, #0] \ 0000003C 0D00A0E1 MOV R0,SP \ 00000040 002080E5 STR R2,[R0, #+0] \ 00000044 460100EF SWI +326 \ 00000048 898100EF SWI +33161 \ 0000004C 0090A0E1 MOV R9,R0 \ 00000050 888100EF SWI +33160 \ 00000054 00A0A0E1 MOV R10,R0 \ 00000058 898100EF SWI +33161 \ 0000005C F410A0E3 MOV R1,#+244 \ 00000060 6C1D81E3 ORR R1,R1,#0x1B00 \ 00000064 081081E0 ADD R1,R1,R8 \ 00000068 0120A0E1 MOV R2,R1 \ 0000006C 04002DE9 PUSH {R2} \ 00000070 02002DE9 PUSH {R1} \ 00000074 013049E2 SUB R3,R9,#+1 \ 00000078 01204AE2 SUB R2,R10,#+1 \ 0000007C 010040E2 SUB R0,R0,#+1 \ 00000080 0010A0E3 MOV R1,#+0 \ 00000084 02002DE9 PUSH {R1} \ 00000088 02002DE9 PUSH {R1} \ 0000008C 02002DE9 PUSH {R1} \ 00000090 050040E0 SUB R0,R0,R5 \ 00000094 021040E2 SUB R1,R0,#+2 \ 00000098 0000A0E3 MOV R0,#+0 \ 0000009C 500100EF SWI +336 2760 for(int i=FontH(clfont);i>0;i-=2) \ 000000A0 6C00A0E3 MOV R0,#+108 \ 000000A4 ........ _BLF FontH,??FontH??rA \ 000000A8 0090A0E1 MOV R9,R0 \ 000000AC 010059E3 CMP R9,#+1 \ 000000B0 14D08DE2 ADD SP,SP,#+20 \ 000000B4 100000BA BLT ??DrawSoftKeys_0 \ 000000B8 05A047E0 SUB R10,R7,R5 \ 000000BC 02B04AE2 SUB R11,R10,#+2 2761 { 2762 DrawRoundedFrame(0,scr_h-FntH-2,scr_w,scr_h-FntH+i,0,0,0,clrRed,clrRed); \ ??DrawSoftKeys_1: \ 000000C0 0D00A0E1 MOV R0,SP \ 000000C4 01002DE9 PUSH {R0} \ 000000C8 01002DE9 PUSH {R0} \ 000000CC 0A3089E0 ADD R3,R9,R10 \ 000000D0 0620A0E1 MOV R2,R6 \ 000000D4 0B10A0E1 MOV R1,R11 \ 000000D8 0000A0E3 MOV R0,#+0 \ 000000DC 01002DE9 PUSH {R0} \ 000000E0 01002DE9 PUSH {R0} \ 000000E4 01002DE9 PUSH {R0} 2763 } \ 000000E8 029049E2 SUB R9,R9,#+2 \ 000000EC 500100EF SWI +336 \ 000000F0 010059E3 CMP R9,#+1 \ 000000F4 14D08DE2 ADD SP,SP,#+20 \ 000000F8 F0FFFFAA BGE ??DrawSoftKeys_1 2764 // DrawRoundedFrame(0,scr_h-FontH(font)-2,ScreenW()-1,ScreenH()-1,0,0,0,clrRed,clrRed); 2765 // SetFontColor(clrWhite,transparent,0); 2766 //PrintField(2,scr_h-1-FntH,right,0,clfont,1); 2767 DrawStr(2,scr_h-1-FntH,right,clrWhite,clfont,0); \ ??DrawSoftKeys_0: \ 000000FC 0020A0E3 MOV R2,#+0 \ 00000100 701D88E2 ADD R1,R8,#+7168 \ 00000104 F800A0E3 MOV R0,#+248 \ 00000108 6C0D80E3 ORR R0,R0,#0x1B00 \ 0000010C 080080E0 ADD R0,R0,R8 \ 00000110 ........ _BLF SetFontColor,??SetFontColor??rA \ 00000114 010047E2 SUB R0,R7,#+1 \ 00000118 055040E0 SUB R5,R0,R5 \ 0000011C 0100A0E3 MOV R0,#+1 \ 00000120 01002DE9 PUSH {R0} \ 00000124 0030A0E3 MOV R3,#+0 \ 00000128 0510A0E1 MOV R1,R5 \ 0000012C 6C00A0E3 MOV R0,#+108 \ 00000130 01002DE9 PUSH {R0} \ 00000134 14209DE5 LDR R2,[SP, #+20] \ 00000138 0200A0E3 MOV R0,#+2 \ 0000013C ........ _BLF PrintField,??PrintField??rA 2768 // DrawStr(scr_w,scr_h-1-FntH,left,clrWhite,2); 2769 PrintField(scr_w,scr_h-1-FntH,left,2,clfont,1); \ 00000140 0100A0E3 MOV R0,#+1 \ 00000144 01002DE9 PUSH {R0} \ 00000148 0230A0E3 MOV R3,#+2 \ 0000014C 0510A0E1 MOV R1,R5 \ 00000150 6C00A0E3 MOV R0,#+108 \ 00000154 01002DE9 PUSH {R0} \ 00000158 20209DE5 LDR R2,[SP, #+32] \ 0000015C 0600A0E1 MOV R0,R6 \ 00000160 ........ _BLF PrintField,??PrintField??rA 2770 GetDateTime(0,&t); \ 00000164 14108DE2 ADD R1,SP,#+20 \ 00000168 0000A0E3 MOV R0,#+0 \ 0000016C B40000EF SWI +180 2771 sprintf(s,"%02d:%02d",t.hour,t.min); \ 00000170 1530DDE5 LDRB R3,[SP, #+21] \ 00000174 1420DDE5 LDRB R2,[SP, #+20] \ 00000178 40109FE5 LDR R1,??DrawSoftKeys_2 ;; `?` + 4 \ 0000017C 0400A0E1 MOV R0,R4 \ 00000180 160000EF SWI +22 2772 PrintField(scr_w/2,scr_h-1-FntH,s,1,clfont,1); \ 00000184 0100A0E3 MOV R0,#+1 \ 00000188 01002DE9 PUSH {R0} \ 0000018C 0130A0E3 MOV R3,#+1 \ 00000190 0420A0E1 MOV R2,R4 \ 00000194 0510A0E1 MOV R1,R5 \ 00000198 6C00A0E3 MOV R0,#+108 \ 0000019C 01002DE9 PUSH {R0} \ 000001A0 A60F86E0 ADD R0,R6,R6, LSR #+31 \ 000001A4 C000A0E1 ASR R0,R0,#+1 \ 000001A8 ........ _BLF PrintField,??PrintField??rA 2773 UnlockSched(); \ 000001AC 470100EF SWI +327 2774 2775 mfree(s); \ 000001B0 0400A0E1 MOV R0,R4 \ 000001B4 150000EF SWI +21 2776 } \ 000001B8 2CD08DE2 ADD SP,SP,#+44 \ 000001BC F08FBDE8 POP {R4-R11,PC} ;; return \ ??DrawSoftKeys_2: \ 000001C0 ........ DC32 `?` + 4 2777 2778 extern DYNPNGICONLIST *GetXSByItem(int curitem); 2779 \ In segment CODE, align 4, keep-with-next 2780 void DrawHeader() 2781 { \ DrawHeader: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2782 int scr_w=ScreenW()-1; 2783 int scr_h=ScreenH()-1; 2784 char *s=malloc(128); 2785 char clrRed[]={0xFF,0x00,0x00,0x15}; \ 00000004 28659FE5 LDR R6,??DrawHeader_0+0x10 ;; `?_1` 2786 // char clrRed[]={0xFF,0x00,0x00,0x64}; 2787 LockSched(); 2788 // DrawRoundedFrame(0,0,scr_w,FontH(font)+1,0,0,0,clrRed,clrRed); 2789 SetFontColor(clrWhite,transparent,0); \ 00000008 ........ LDR R7,??DataTable100 ;; icons \ 0000000C 30D04DE2 SUB SP,SP,#+48 \ 00000010 888100EF SWI +33160 \ 00000014 014040E2 SUB R4,R0,#+1 \ 00000018 898100EF SWI +33161 \ 0000001C 8000A0E3 MOV R0,#+128 \ 00000020 140000EF SWI +20 \ 00000024 001096E5 LDR R1,[R6, #0] \ 00000028 0050A0E1 MOV R5,R0 \ 0000002C 0D00A0E1 MOV R0,SP \ 00000030 001080E5 STR R1,[R0, #+0] \ 00000034 460100EF SWI +326 \ 00000038 F800A0E3 MOV R0,#+248 \ 0000003C 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000040 078080E0 ADD R8,R0,R7 \ 00000044 709D87E2 ADD R9,R7,#+7168 \ 00000048 0020A0E3 MOV R2,#+0 \ 0000004C 0910A0E1 MOV R1,R9 \ 00000050 0800A0E1 MOV R0,R8 \ 00000054 ........ _BLF SetFontColor,??SetFontColor??rA 2790 DrawRoundedFrame(0,0,scr_w,FontH(clfont)+2,0,0,0,clrBlack,clrBlack); \ 00000058 6C00A0E3 MOV R0,#+108 \ 0000005C ........ _BLF FontH,??FontH??rA \ 00000060 F410A0E3 MOV R1,#+244 \ 00000064 6C1D81E3 ORR R1,R1,#0x1B00 \ 00000068 071081E0 ADD R1,R1,R7 \ 0000006C 0120A0E1 MOV R2,R1 \ 00000070 04002DE9 PUSH {R2} \ 00000074 02002DE9 PUSH {R1} \ 00000078 023080E2 ADD R3,R0,#+2 \ 0000007C 0420A0E1 MOV R2,R4 \ 00000080 0000A0E3 MOV R0,#+0 \ 00000084 0010A0E3 MOV R1,#+0 \ 00000088 02002DE9 PUSH {R1} \ 0000008C 02002DE9 PUSH {R1} \ 00000090 02002DE9 PUSH {R1} \ 00000094 500100EF SWI +336 2791 2792 for(int i=FontH(clfont);i>0;i-=2) \ 00000098 6C00A0E3 MOV R0,#+108 \ 0000009C ........ _BLF FontH,??FontH??rA \ 000000A0 00A0A0E1 MOV R10,R0 \ 000000A4 01005AE3 CMP R10,#+1 \ 000000A8 14D08DE2 ADD SP,SP,#+20 \ 000000AC 110000BA BLT ??DrawHeader_1 2793 { 2794 DrawRoundedFrame(0,0,scr_w,FontH(clfont)-i+2,0,0,0,clrRed,clrRed); \ ??DrawHeader_2: \ 000000B0 6C00A0E3 MOV R0,#+108 \ 000000B4 ........ _BLF FontH,??FontH??rA \ 000000B8 0D10A0E1 MOV R1,SP \ 000000BC 02002DE9 PUSH {R1} \ 000000C0 02002DE9 PUSH {R1} \ 000000C4 0A0040E0 SUB R0,R0,R10 \ 000000C8 023080E2 ADD R3,R0,#+2 \ 000000CC 0420A0E1 MOV R2,R4 \ 000000D0 0010A0E3 MOV R1,#+0 \ 000000D4 02002DE9 PUSH {R1} \ 000000D8 02002DE9 PUSH {R1} \ 000000DC 02002DE9 PUSH {R1} \ 000000E0 0000A0E3 MOV R0,#+0 2795 } \ 000000E4 02A04AE2 SUB R10,R10,#+2 \ 000000E8 500100EF SWI +336 \ 000000EC 01005AE3 CMP R10,#+1 \ 000000F0 14D08DE2 ADD SP,SP,#+20 \ 000000F4 EDFFFFAA BGE ??DrawHeader_2 2796 2797 int x=1; 2798 int icon; 2799 if(total_unread) icon = IS_MSG; \ ??DrawHeader_1: \ 000000F8 A80397E5 LDR R0,[R7, #+936] \ 000000FC 000050E3 CMP R0,#+0 \ 00000100 0D00A013 MOVNE R0,#+13 \ 00000104 0500001A BNE ??DrawHeader_3 2800 else 2801 { 2802 switch(connect_state) \ 00000108 840397E5 LDR R0,[R7, #+900] \ 0000010C 000050E3 CMP R0,#+0 \ 00000110 0200000A BEQ ??DrawHeader_3 \ 00000114 030050E2 SUBS R0,R0,#+3 2803 { 2804 case 0: icon=IS_OFFLINE; break; 2805 case 3: icon=CurrentStatus; break; \ 00000118 18039705 LDREQ R0,[R7, #+792] 2806 default: icon=IS_UNKNOWN; break; \ 0000011C 0E00A013 MOVNE R0,#+14 2807 } 2808 } 2809 2810 // DrawImg(x,YDISP+1,NumStatusToIconBar+icon);//status 2811 DrwImage(icons[icon],x,YDISP+1,0,0); \ ??DrawHeader_3: \ 00000120 00A187E0 ADD R10,R7,R0, LSL #+2 \ 00000124 0000A0E3 MOV R0,#+0 \ 00000128 01002DE9 PUSH {R0} \ 0000012C 0030A0E3 MOV R3,#+0 \ 00000130 00009AE5 LDR R0,[R10, #+0] \ 00000134 0120A0E3 MOV R2,#+1 \ 00000138 0210A0E1 MOV R1,R2 \ 0000013C ........ BL DrwImage 2812 x+=icons[icon]->w+2;//GetImgWidth(NumStatusToIconBar+icon)+2;// + смещение по х \ 00000140 00009AE5 LDR R0,[R10, #+0] 2813 2814 // SetFontColor(clrWhite,transparent,0); 2815 if(total_unread) \ 00000144 A82397E5 LDR R2,[R7, #+936] \ 00000148 B000D0E1 LDRH R0,[R0, #+0] \ 0000014C 000052E3 CMP R2,#+0 \ 00000150 04D08DE2 ADD SP,SP,#+4 \ 00000154 03A080E2 ADD R10,R0,#+3 \ 00000158 1600000A BEQ ??DrawHeader_4 2816 { 2817 sprintf(s,"%d/%d",total_unread,total_unread2); \ 0000015C FC3297E5 LDR R3,[R7, #+764] \ 00000160 081086E2 ADD R1,R6,#+8 \ 00000164 0500A0E1 MOV R0,R5 \ 00000168 160000EF SWI +22 2818 // PrintField(x,YDISP+1,s,0,clfont,1); 2819 DrawStr(x,YDISP+1,s,clrWhite,clfont,0); \ 0000016C 0020A0E3 MOV R2,#+0 \ 00000170 0910A0E1 MOV R1,R9 \ 00000174 0800A0E1 MOV R0,R8 \ 00000178 ........ _BLF SetFontColor,??SetFontColor??rA \ 0000017C 0100A0E3 MOV R0,#+1 \ 00000180 01002DE9 PUSH {R0} \ 00000184 0030A0E3 MOV R3,#+0 \ 00000188 0520A0E1 MOV R2,R5 \ 0000018C 0110A0E3 MOV R1,#+1 \ 00000190 6C00A0E3 MOV R0,#+108 \ 00000194 01002DE9 PUSH {R0} \ 00000198 0A00A0E1 MOV R0,R10 \ 0000019C ........ _BLF PrintField,??PrintField??rA 2820 x+=GetWidth(x,YDISP+1)+1; \ 000001A0 0110A0E3 MOV R1,#+1 \ 000001A4 0A00A0E1 MOV R0,R10 \ 000001A8 ........ _BLF GetWidth,??GetWidth??rA \ 000001AC 010080E2 ADD R0,R0,#+1 \ 000001B0 0AA080E0 ADD R10,R0,R10 \ 000001B4 08D08DE2 ADD SP,SP,#+8 2821 } 2822 2823 if(CurrentXStatus!=0)//если есть хстатус \ ??DrawHeader_4: \ 000001B8 1C0397E5 LDR R0,[R7, #+796] \ 000001BC 000050E3 CMP R0,#+0 \ 000001C0 0E00000A BEQ ??DrawHeader_5 2824 { 2825 DYNPNGICONLIST *xs=GetXSByItem(CurrentXStatus); \ 000001C4 ........ _BLF GetXSByItem,??GetXSByItem??rA \ 000001C8 00B0A0E1 MOV R11,R0 2826 DrwImage(xs->img,x,YDISP+1,0,0); \ 000001CC 0000A0E3 MOV R0,#+0 \ 000001D0 01002DE9 PUSH {R0} \ 000001D4 0030A0E3 MOV R3,#+0 \ 000001D8 0120A0E3 MOV R2,#+1 \ 000001DC 08009BE5 LDR R0,[R11, #+8] \ 000001E0 0A10A0E1 MOV R1,R10 \ 000001E4 ........ BL DrwImage 2827 x+=xs->img->w+1; \ 000001E8 08009BE5 LDR R0,[R11, #+8] \ 000001EC B000D0E1 LDRH R0,[R0, #+0] \ 000001F0 04D08DE2 ADD SP,SP,#+4 \ 000001F4 010080E2 ADD R0,R0,#+1 \ 000001F8 0AA080E0 ADD R10,R0,R10 2828 //DrawImg(x,YDISP+1,NumXStatusToIconBar+CurrentXStatus);//xstatus 2829 //x+=GetImgWidth(NumXStatusToIconBar+CurrentXStatus)+2;// + смещение по х 2830 } 2831 2832 int priv=0; \ 000001FC 0000A0E3 MOV R0,#+0 2833 char A_s[]="[A [%s] ]"; \ ??DrawHeader_5: \ 00000200 30239FE5 LDR R2,??DrawHeader_0+0x14 ;; `?` \ 00000204 04108DE2 ADD R1,SP,#+4 \ 00000208 081892E8 LDM R2,{R3,R11,R12} \ 0000020C 081881E8 STM R1,{R3,R11,R12} 2834 char t[32]; 2835 2836 switch(CurrentPrivateStatus) \ 00000210 681397E5 LDR R1,[R7, #+872] \ 00000214 011051E2 SUBS R1,R1,#+1 \ 00000218 0600000A BEQ ??DrawHeader_6 \ 0000021C 011051E2 SUBS R1,R1,#+1 \ 00000220 0600000A BEQ ??DrawHeader_7 \ 00000224 011051E2 SUBS R1,R1,#+1 \ 00000228 0600000A BEQ ??DrawHeader_8 \ 0000022C 011051E2 SUBS R1,R1,#+1 \ 00000230 0100A003 MOVEQ R0,#+1 \ 00000234 040000EA B ??DrawHeader_9 2837 { 2838 case 0: priv=0; break;//ICON_ALL_CAN_SEE; 2839 case 1: priv=4; break;//ICON_NOBODY_CAN_SEE; \ ??DrawHeader_6: \ 00000238 0400A0E3 MOV R0,#+4 \ 0000023C 020000EA B ??DrawHeader_9 2840 case 2: priv=3; break;//ICON_VISLIST_CAN_SEE; \ ??DrawHeader_7: \ 00000240 0300A0E3 MOV R0,#+3 \ 00000244 000000EA B ??DrawHeader_9 2841 case 3: priv=2; break;//ICON_INVISLIST_CANNOT_SEE; \ ??DrawHeader_8: \ 00000248 0200A0E3 MOV R0,#+2 2842 case 4: priv=1; break;//ICON_CONTACTLIST_CAN_SEE; 2843 //default : priv=ICON_HEAD; break; 2844 } 2845 2846 // icon=8030+priv; 2847 //DrawImg(x,YDISP+1,icon); 2848 // x+=GetImgWidth(icon); 2849 DrwImage(icons[TOTAL_ICONS-(5-priv)],x,YDISP+1,0,0); \ ??DrawHeader_9: \ 0000024C 00B187E0 ADD R11,R7,R0, LSL #+2 \ 00000250 0000A0E3 MOV R0,#+0 \ 00000254 01002DE9 PUSH {R0} \ 00000258 0030A0E3 MOV R3,#+0 \ 0000025C 0120A0E3 MOV R2,#+1 \ 00000260 5C009BE5 LDR R0,[R11, #+92] \ 00000264 0A10A0E1 MOV R1,R10 \ 00000268 ........ BL DrwImage 2850 x+=icons[TOTAL_ICONS-(5-priv)]->w; \ 0000026C 5C009BE5 LDR R0,[R11, #+92] \ 00000270 B000D0E1 LDRH R0,[R0, #+0] \ 00000274 0AB080E0 ADD R11,R0,R10 2851 int cap; 2852 int x2=scr_w; 2853 //x2=scr_w-GetWidth(scr_w,YDISP+1); 2854 if(on_off_timer > 0 && strlen(on_off_buf)!=0)//если кто то подключился/отключился \ 00000278 C40397E5 LDR R0,[R7, #+964] \ 0000027C 04D08DE2 ADD SP,SP,#+4 \ 00000280 010050E3 CMP R0,#+1 \ 00000284 210000BA BLT ??DrawHeader_10 \ 00000288 F400A0E3 MOV R0,#+244 \ 0000028C 680D80E3 ORR R0,R0,#0x1A00 \ 00000290 07A080E0 ADD R10,R0,R7 \ 00000294 0A00A0E1 MOV R0,R10 \ 00000298 1B0000EF SWI +27 \ 0000029C 000050E3 CMP R0,#+0 \ 000002A0 1A00000A BEQ ??DrawHeader_10 2855 { 2856 SetScrollEdgeDelay(1); \ 000002A4 0100A0E3 MOV R0,#+1 \ 000002A8 ........ _BLF SetScrollEdgeDelay,??SetScrollEdgeDelay??rA 2857 DrawText(x+2,YDISP+1,scr_w,on_off_buf,clrWhite,clfont,0,1); \ 000002AC 02608BE2 ADD R6,R11,#+2 \ 000002B0 0020A0E3 MOV R2,#+0 \ 000002B4 0910A0E1 MOV R1,R9 \ 000002B8 0800A0E1 MOV R0,R8 \ 000002BC ........ _BLF SetFontColor,??SetFontColor??rA \ 000002C0 060044E0 SUB R0,R4,R6 \ 000002C4 01002DE9 PUSH {R0} \ 000002C8 0030A0E3 MOV R3,#+0 \ 000002CC 0A20A0E1 MOV R2,R10 \ 000002D0 0110A0E3 MOV R1,#+1 \ 000002D4 0000A0E3 MOV R0,#+0 \ 000002D8 01002DE9 PUSH {R0} \ 000002DC 0100A0E3 MOV R0,#+1 \ 000002E0 01002DE9 PUSH {R0} \ 000002E4 5E00A0E3 MOV R0,#+94 \ 000002E8 400F80E3 ORR R0,R0,#0x100 \ 000002EC 01002DE9 PUSH {R0} \ 000002F0 0100A0E3 MOV R0,#+1 \ 000002F4 01002DE9 PUSH {R0} \ 000002F8 6C00A0E3 MOV R0,#+108 \ 000002FC 01002DE9 PUSH {R0} \ 00000300 0600A0E1 MOV R0,R6 \ 00000304 ........ _BLF PrintText,??PrintText??rA \ 00000308 18D08DE2 ADD SP,SP,#+24 \ 0000030C 7F0000EA B ??DrawHeader_11 2858 } 2859 else 2860 if(strlen(ContactT9Key)) \ ??DrawHeader_10: \ 00000310 E400A0E3 MOV R0,#+228 \ 00000314 680D80E3 ORR R0,R0,#0x1A00 \ 00000318 078080E0 ADD R8,R0,R7 \ 0000031C 5C90A0E3 MOV R9,#+92 \ 00000320 509E89E3 ORR R9,R9,#0x500 \ 00000324 070089E0 ADD R0,R9,R7 \ 00000328 1B0000EF SWI +27 \ 0000032C 000050E3 CMP R0,#+0 \ 00000330 1100000A BEQ ??DrawHeader_12 2861 { 2862 sprintf(s,key_clm_hdr_text); \ 00000334 201086E2 ADD R1,R6,#+32 \ 00000338 0500A0E1 MOV R0,R5 \ 0000033C 160000EF SWI +22 2863 strcat(s,ContactT9Key); \ 00000340 071089E0 ADD R1,R9,R7 \ 00000344 0500A0E1 MOV R0,R5 \ 00000348 170000EF SWI +23 2864 // strcat(s,"|"); 2865 strcpy(clmenu_sk_r,key_clmenu_sk_r); \ 0000034C 041086E2 ADD R1,R6,#+4 \ 00000350 0800A0E1 MOV R0,R8 \ 00000354 1A0000EF SWI +26 2866 PrintField(scr_w,YDISP+1,s,2,clfont,1); \ 00000358 0100A0E3 MOV R0,#+1 \ 0000035C 01002DE9 PUSH {R0} \ 00000360 0230A0E3 MOV R3,#+2 \ 00000364 0520A0E1 MOV R2,R5 \ 00000368 0110A0E3 MOV R1,#+1 \ 0000036C 6C00A0E3 MOV R0,#+108 \ 00000370 01002DE9 PUSH {R0} \ 00000374 0400A0E1 MOV R0,R4 \ 00000378 620000EA B ??DrawHeader_13 2867 } 2868 else 2869 { 2870 x2=scr_w; 2871 cap=*RamCap(); \ ??DrawHeader_12: \ 0000037C C88000EF SWI +32968 \ 00000380 B020D0E1 LDRH R2,[R0, #+0] 2872 sprintf(s,"%d%%",cap); \ 00000384 101086E2 ADD R1,R6,#+16 \ 00000388 0500A0E1 MOV R0,R5 \ 0000038C 160000EF SWI +22 2873 PrintField(scr_w,YDISP+1,s,2,clfont,1);//capacity in header \ 00000390 0100A0E3 MOV R0,#+1 \ 00000394 01002DE9 PUSH {R0} \ 00000398 0230A0E3 MOV R3,#+2 \ 0000039C 0520A0E1 MOV R2,R5 \ 000003A0 0110A0E3 MOV R1,#+1 \ 000003A4 6C00A0E3 MOV R0,#+108 \ 000003A8 01002DE9 PUSH {R0} \ 000003AC 0400A0E1 MOV R0,R4 \ 000003B0 ........ _BLF PrintField,??PrintField??rA 2874 x2=scr_w-GetWidth(scr_w,YDISP+1); \ 000003B4 0110A0E3 MOV R1,#+1 \ 000003B8 0400A0E1 MOV R0,R4 \ 000003BC ........ _BLF GetWidth,??GetWidth??rA \ 000003C0 004044E0 SUB R4,R4,R0 2875 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ 000003C4 2C1086E2 ADD R1,R6,#+44 \ 000003C8 0800A0E1 MOV R0,R8 \ 000003CC 1A0000EF SWI +26 2876 Get_Online_total(); \ 000003D0 ........ BL Get_Online_total 2877 sprintf(s,"[%d/%d]",kopa_kontaktu,kopa_online); \ 000003D4 C83397E5 LDR R3,[R7, #+968] \ 000003D8 CC2397E5 LDR R2,[R7, #+972] \ 000003DC 181086E2 ADD R1,R6,#+24 \ 000003E0 0500A0E1 MOV R0,R5 \ 000003E4 160000EF SWI +22 2878 PrintField(x2-2,YDISP+1,s,2,clfont,1); \ 000003E8 0100A0E3 MOV R0,#+1 \ 000003EC 01002DE9 PUSH {R0} \ 000003F0 026044E2 SUB R6,R4,#+2 \ 000003F4 0230A0E3 MOV R3,#+2 \ 000003F8 0520A0E1 MOV R2,R5 \ 000003FC 6C00A0E3 MOV R0,#+108 \ 00000400 01002DE9 PUSH {R0} \ 00000404 0110A0E3 MOV R1,#+1 \ 00000408 0600A0E1 MOV R0,R6 \ 0000040C ........ _BLF PrintField,??PrintField??rA 2879 x2-=GetWidth(x2-2,YDISP+1); \ 00000410 0110A0E3 MOV R1,#+1 \ 00000414 0600A0E1 MOV R0,R6 \ 00000418 ........ _BLF GetWidth,??GetWidth??rA \ 0000041C 004044E0 SUB R4,R4,R0 2880 sprintf(s,""); \ 00000420 3F1F8FE2 ADR R1,??DrawHeader_0 ;; "" \ 00000424 0500A0E1 MOV R0,R5 \ 00000428 160000EF SWI +22 2881 if(away_m && isShowA) { sprintf(t,A_s,away_msg_time_dace); strcat(s,t); } \ 0000042C 2C0397E5 LDR R0,[R7, #+812] \ 00000430 10D08DE2 ADD SP,SP,#+16 \ 00000434 000050E3 CMP R0,#+0 \ 00000438 0C00000A BEQ ??DrawHeader_14 \ 0000043C F8009FE5 LDR R0,??DrawHeader_0+0x18 ;; isShowA \ 00000440 000090E5 LDR R0,[R0, #+0] \ 00000444 000050E3 CMP R0,#+0 \ 00000448 0800000A BEQ ??DrawHeader_14 \ 0000044C A400A0E3 MOV R0,#+164 \ 00000450 600D80E3 ORR R0,R0,#0x1800 \ 00000454 072080E0 ADD R2,R0,R7 \ 00000458 04108DE2 ADD R1,SP,#+4 \ 0000045C 10008DE2 ADD R0,SP,#+16 \ 00000460 160000EF SWI +22 \ 00000464 10108DE2 ADD R1,SP,#+16 \ 00000468 0500A0E1 MOV R0,R5 \ 0000046C 170000EF SWI +23 2882 if(Is_Vibra_Enabled && isShowV) strcat(s,"[V]") ; \ ??DrawHeader_14: \ 00000470 100397E5 LDR R0,[R7, #+784] \ 00000474 000050E3 CMP R0,#+0 \ 00000478 0600000A BEQ ??DrawHeader_15 \ 0000047C BC009FE5 LDR R0,??DrawHeader_0+0x1C ;; isShowV \ 00000480 000090E5 LDR R0,[R0, #+0] \ 00000484 000050E3 CMP R0,#+0 \ 00000488 0200000A BEQ ??DrawHeader_15 \ 0000048C 251F8FE2 ADR R1,??DrawHeader_0+0x4 ;; "[V]" \ 00000490 0500A0E1 MOV R0,R5 \ 00000494 170000EF SWI +23 2883 if(Is_Sounds_Enabled && isShowS) strcat(s,"[S]") ; \ ??DrawHeader_15: \ 00000498 5C0397E5 LDR R0,[R7, #+860] \ 0000049C 000050E3 CMP R0,#+0 \ 000004A0 0600000A BEQ ??DrawHeader_16 \ 000004A4 98009FE5 LDR R0,??DrawHeader_0+0x20 ;; isShowS \ 000004A8 000090E5 LDR R0,[R0, #+0] \ 000004AC 000050E3 CMP R0,#+0 \ 000004B0 0200000A BEQ ??DrawHeader_16 \ 000004B4 1C1F8FE2 ADR R1,??DrawHeader_0+0x8 ;; "[S]" \ 000004B8 0500A0E1 MOV R0,R5 \ 000004BC 170000EF SWI +23 2884 if(Is_Double_Vibra_On && isShowR) strcat(s,"[R]") ; \ ??DrawHeader_16: \ 000004C0 F80297E5 LDR R0,[R7, #+760] \ 000004C4 000050E3 CMP R0,#+0 \ 000004C8 0600000A BEQ ??DrawHeader_17 \ 000004CC 74009FE5 LDR R0,??DrawHeader_0+0x24 ;; isShowR \ 000004D0 000090E5 LDR R0,[R0, #+0] \ 000004D4 000050E3 CMP R0,#+0 \ 000004D8 0200000A BEQ ??DrawHeader_17 \ 000004DC 131F8FE2 ADR R1,??DrawHeader_0+0xC ;; "[R]" \ 000004E0 0500A0E1 MOV R0,R5 \ 000004E4 170000EF SWI +23 2885 PrintField(x2-2,YDISP+1,s,2,clfont,1); \ ??DrawHeader_17: \ 000004E8 0100A0E3 MOV R0,#+1 \ 000004EC 01002DE9 PUSH {R0} \ 000004F0 0230A0E3 MOV R3,#+2 \ 000004F4 0520A0E1 MOV R2,R5 \ 000004F8 0110A0E3 MOV R1,#+1 \ 000004FC 6C00A0E3 MOV R0,#+108 \ 00000500 01002DE9 PUSH {R0} \ 00000504 020044E2 SUB R0,R4,#+2 \ ??DrawHeader_13: \ 00000508 ........ _BLF PrintField,??PrintField??rA \ 0000050C 08D08DE2 ADD SP,SP,#+8 2886 } 2887 /* x2=scr_w-strlen(s)-2; 2888 RAMNET *rn=RamNet(); 2889 sprintf(s,"%d db",rn->power); 2890 x2-=strlen(s); 2891 PrintField(x2,YDISP+1,s,0,font,1);//capacity in header */ 2892 UnlockSched(); \ ??DrawHeader_11: \ 00000510 470100EF SWI +327 2893 mfree(s); \ 00000514 0500A0E1 MOV R0,R5 \ 00000518 150000EF SWI +21 2894 } \ 0000051C 30D08DE2 ADD SP,SP,#+48 \ 00000520 F08FBDE8 POP {R4-R11,PC} ;; return \ ??DrawHeader_0: \ 00000524 00000000 DC8 "",+0,+0,+0 \ 00000528 5B565D00 DC8 "[V]" \ 0000052C 5B535D00 DC8 "[S]" \ 00000530 5B525D00 DC8 "[R]" \ 00000534 ........ DC32 `?_1` \ 00000538 ........ DC32 `?` \ 0000053C ........ DC32 isShowA \ 00000540 ........ DC32 isShowV \ 00000544 ........ DC32 isShowS \ 00000548 ........ DC32 isShowR 2895 \ In segment CODE, align 4, keep-with-next 2896 void DrawScrollBar(int cur,int total) 2897 { \ DrawScrollBar: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0060A0E1 MOV R6,R0 2898 int scr_h=ScreenH()-1; 2899 int scr_w=ScreenW()-1; 2900 int y=scr_h-CLIST_Y1-FontH(clfont)-2; 2901 int pos=y*cur/total; 2902 int y2=y/total; 2903 DrawLine(scr_w-2,CLIST_Y1,scr_w-2,scr_h-FontH(clfont)-2,1,clrBlack); \ 00000008 ........ LDR R9,??DataTable106 ;; icons \ 0000000C 0170A0E1 MOV R7,R1 \ 00000010 898100EF SWI +33161 \ 00000014 014040E2 SUB R4,R0,#+1 \ 00000018 888100EF SWI +33160 \ 0000001C 015040E2 SUB R5,R0,#+1 \ 00000020 6C00A0E3 MOV R0,#+108 \ 00000024 ........ _BLF FontH,??FontH??rA \ 00000028 000044E0 SUB R0,R4,R0 \ 0000002C 048040E2 SUB R8,R0,#+4 \ 00000030 6C00A0E3 MOV R0,#+108 \ 00000034 ........ _BLF FontH,??FontH??rA \ 00000038 000048E0 SUB R0,R8,R0 \ 0000003C 022040E2 SUB R2,R0,#+2 \ 00000040 960200E0 MUL R0,R6,R2 \ 00000044 0710A0E1 MOV R1,R7 \ 00000048 ........ _BLF ??div32_a,??rA??div32_a \ 0000004C 0160A0E1 MOV R6,R1 \ 00000050 0200A0E1 MOV R0,R2 \ 00000054 0710A0E1 MOV R1,R7 \ 00000058 ........ _BLF ??div32_a,??rA??div32_a \ 0000005C 0170A0E1 MOV R7,R1 \ 00000060 6C00A0E3 MOV R0,#+108 \ 00000064 ........ _BLF FontH,??FontH??rA \ 00000068 0080A0E1 MOV R8,R0 \ 0000006C 6C00A0E3 MOV R0,#+108 \ 00000070 ........ _BLF FontH,??FontH??rA \ 00000074 F420A0E3 MOV R2,#+244 \ 00000078 6C2D82E3 ORR R2,R2,#0x1B00 \ 0000007C 09A082E0 ADD R10,R2,R9 \ 00000080 0A20A0E1 MOV R2,R10 \ 00000084 04002DE9 PUSH {R2} \ 00000088 0010A0E1 MOV R1,R0 \ 0000008C 020045E2 SUB R0,R5,#+2 \ 00000090 041081E2 ADD R1,R1,#+4 \ 00000094 0120A0E3 MOV R2,#+1 \ 00000098 04002DE9 PUSH {R2} \ 0000009C 082044E0 SUB R2,R4,R8 \ 000000A0 023042E2 SUB R3,R2,#+2 2904 int i=0; 2905 DrawRoundedFrame(scr_w-4,CLIST_Y1+pos+1,scr_w,CLIST_Y1+pos+y2,0,0,0,clrBlack,clrBlack); \ 000000A4 044045E2 SUB R4,R5,#+4 \ 000000A8 0020A0E1 MOV R2,R0 \ 000000AC B30100EF SWI +435 \ 000000B0 6C00A0E3 MOV R0,#+108 \ 000000B4 ........ _BLF FontH,??FontH??rA \ 000000B8 0080A0E1 MOV R8,R0 \ 000000BC 6C00A0E3 MOV R0,#+108 \ 000000C0 ........ _BLF FontH,??FontH??rA \ 000000C4 0A10A0E1 MOV R1,R10 \ 000000C8 02002DE9 PUSH {R1} \ 000000CC 00042DE9 PUSH {R10} \ 000000D0 0520A0E1 MOV R2,R5 \ 000000D4 0010A0E3 MOV R1,#+0 \ 000000D8 02002DE9 PUSH {R1} \ 000000DC 02002DE9 PUSH {R1} \ 000000E0 02002DE9 PUSH {R1} \ 000000E4 000086E0 ADD R0,R6,R0 \ 000000E8 081086E0 ADD R1,R6,R8 2906 for(i=0;iw,img->h); \ 00000010 B200D4E1 LDRH R0,[R4, #+2] \ 00000014 0350A0E1 MOV R5,R3 \ 00000018 01002DE9 PUSH {R0} \ 0000001C B030D4E1 LDRH R3,[R4, #+0] \ 00000020 04008DE2 ADD R0,SP,#+4 \ 00000024 330100EF SWI +307 2918 SetPropTo_Obj5(&drwobj,&rc,0,img); \ 00000028 0430A0E1 MOV R3,R4 \ 0000002C 0020A0E3 MOV R2,#+0 \ 00000030 04108DE2 ADD R1,SP,#+4 \ 00000034 0C008DE2 ADD R0,SP,#+12 \ 00000038 510100EF SWI +337 2919 SetColor(&drwobj,pen,brush); \ 0000003C 0620A0E1 MOV R2,R6 \ 00000040 0510A0E1 MOV R1,R5 \ 00000044 0C008DE2 ADD R0,SP,#+12 \ 00000048 4B0100EF SWI +331 2920 DrawObject(&drwobj); \ 0000004C 0C008DE2 ADD R0,SP,#+12 \ 00000050 2A0100EF SWI +298 2921 } \ 00000054 30D08DE2 ADD SP,SP,#+48 \ 00000058 7080BDE8 POP {R4-R6,PC} ;; return 2922 2923 2924 int LINE_MODE=0; 2925 int VIEW_MODE=1; 2926 2927 \ In segment DATA_Z, align 4, align-sorted 2928 GBSTMR cltmr; \ cltmr: \ 00000000 DS8 16 \ In segment CODE, align 4, keep-with-next 2929 void MyRedraw() 2930 { 2931 //DirectRedrawGUI_ID(contactlist_menu_id); 2932 SMART_REDRAW(); \ MyRedraw: \ 00000000 ........ B SMART_REDRAW ;; tailcall 2933 } 2934 2935 \ In segment CODE, align 4, keep-with-next 2936 void DrawJust(RECT *rc,CLIST *cl,char *name) 2937 { \ DrawJust: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 F440D0E1 LDRSH R4,[R0, #+4] \ 00000008 F250D0E1 LDRSH R5,[R0, #+2] \ 0000000C 0160A0E1 MOV R6,R1 \ 00000010 F010D0E1 LDRSH R1,[R0, #+0] \ 00000014 ........ LDR R0,??DataTable106 ;; icons \ 00000018 0270A0E1 MOV R7,R2 \ 0000001C 782096E5 LDR R2,[R6, #+120] \ 00000020 019081E2 ADD R9,R1,#+1 \ 00000024 701D80E2 ADD R1,R0,#+7168 \ 00000028 000052E3 CMP R2,#+0 \ 0000002C 0020A0E3 MOV R2,#+0 2938 //char *s=malloc(256); 2939 // sprintf(s,"%s <<<",name); 2940 //int x=0; 2941 if(!cl->just_i) 2942 { 2943 DrawText(rc->x+1,rc->y,rc->x2,name,blue,clfont+1,0,0); \ 00000030 0430A003 MOVEQ R3,#+4 \ 00000034 703D8303 ORREQ R3,R3,#0x1C00 2944 2945 /* x=GetWidth(rc->x+1,rc->y); 2946 DrawText(rc->x+x,rc->y,rc->x2,"<",clrRed,clfont+1,0); 2947 2948 x=GetWidth(rc->x+x,rc->y); 2949 DrawText(rc->x+x,rc->y,rc->x2,"<",blue,clfont+1,0);*/ 2950 // DrawStr(rc->x+1,rc->y,name,blue,0); 2951 } 2952 else 2953 { 2954 DrawText(rc->x+1,rc->y,rc->x2,name,clrRed,clfont+1,0,0); \ 00000038 FC30A013 MOVNE R3,#+252 \ 0000003C 6C3D8313 ORRNE R3,R3,#0x1B00 \ 00000040 000083E0 ADD R0,R3,R0 \ 00000044 ........ _BLF SetFontColor,??SetFontColor??rA \ 00000048 090044E0 SUB R0,R4,R9 \ 0000004C 01002DE9 PUSH {R0} \ 00000050 5E80A0E3 MOV R8,#+94 \ 00000054 408F88E3 ORR R8,R8,#0x100 \ 00000058 0030A0E3 MOV R3,#+0 \ 0000005C 0000A0E3 MOV R0,#+0 \ 00000060 01002DE9 PUSH {R0} \ 00000064 01002DE9 PUSH {R0} \ 00000068 00012DE9 PUSH {R8} \ 0000006C 0720A0E1 MOV R2,R7 \ 00000070 0100A0E3 MOV R0,#+1 \ 00000074 01002DE9 PUSH {R0} \ 00000078 0510A0E1 MOV R1,R5 \ 0000007C 6D00A0E3 MOV R0,#+109 \ 00000080 01002DE9 PUSH {R0} \ 00000084 0900A0E1 MOV R0,R9 \ 00000088 ........ _BLF PrintText,??PrintText??rA \ 0000008C 18D08DE2 ADD SP,SP,#+24 2955 2956 /* x=GetWidth(rc->x+1,rc->y)+1; 2957 DrawText(rc->x+x,rc->y,rc->x2,"<",blue,clfont+1,0); 2958 2959 x=GetWidth(rc->x+x,rc->y); 2960 DrawText(rc->x+x,rc->y,rc->x2,"<",clrRed,clfont+1,0);*/ 2961 } 2962 // DrawStr(rc->x+1,rc->y,name,clrRed,0); 2963 2964 2965 cl->just_i=!cl->just_i; \ 00000090 780096E5 LDR R0,[R6, #+120] \ 00000094 000050E3 CMP R0,#+0 \ 00000098 0100A003 MOVEQ R0,#+1 \ 0000009C 0000A013 MOVNE R0,#+0 \ 000000A0 780086E5 STR R0,[R6, #+120] 2966 // GBS_StartTimerProc(&cltmr, 216, MyRedraw); 2967 } \ 000000A4 F083BDE8 POP {R4-R9,PC} ;; return 2968 2969 \ In segment CODE, align 4, keep-with-next 2970 void DrawList() 2971 { \ DrawList: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2972 if(!cltop) return; \ 00000004 ........ LDR R4,??DataTable100 ;; icons \ 00000008 68D04DE2 SUB SP,SP,#+104 \ 0000000C AC0394E5 LDR R0,[R4, #+940] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 9801000A BEQ ??DrawList_0 2973 int font_y = FontH(clfont)+2;//16+2 \ 00000018 6C00A0E3 MOV R0,#+108 \ 0000001C ........ _BLF FontH,??FontH??rA \ 00000020 020080E2 ADD R0,R0,#+2 \ 00000024 08008DE5 STR R0,[SP, #+8] 2974 int scr_w=ScreenW()-1; \ 00000028 888100EF SWI +33160 \ 0000002C 010040E2 SUB R0,R0,#+1 \ 00000030 18008DE5 STR R0,[SP, #+24] 2975 int scr_h=ScreenH()-1; \ 00000034 898100EF SWI +33161 2976 int y2; 2977 #ifdef ELKA 2978 if(VIEW_MODE) \ 00000038 E80394E5 LDR R0,[R4, #+1000] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 0E00000A BEQ ??DrawList_1 2979 itemFromDisp = (sdiv(font_y,ScreenH()-CLIST_Y1-FontH(clfont)-2)*2)-1;//((font_y/(ScreenH()-CLIST_Y1-FontH(clfont)-2))*2)-1; \ 00000044 898100EF SWI +33161 \ 00000048 0050A0E1 MOV R5,R0 \ 0000004C 6C00A0E3 MOV R0,#+108 \ 00000050 ........ _BLF FontH,??FontH??rA \ 00000054 0060A0E1 MOV R6,R0 \ 00000058 6C00A0E3 MOV R0,#+108 \ 0000005C ........ _BLF FontH,??FontH??rA \ 00000060 061045E0 SUB R1,R5,R6 \ 00000064 041041E2 SUB R1,R1,#+4 \ 00000068 000041E0 SUB R0,R1,R0 \ 0000006C 021040E2 SUB R1,R0,#+2 \ 00000070 08009DE5 LDR R0,[SP, #+8] \ 00000074 B80000EF SWI +184 \ 00000078 8000A0E1 LSL R0,R0,#+1 \ 0000007C 0C0000EA B ??DrawList_2 2980 else 2981 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-FontH(clfont)-2)-1; \ ??DrawList_1: \ 00000080 898100EF SWI +33161 \ 00000084 0050A0E1 MOV R5,R0 \ 00000088 6C00A0E3 MOV R0,#+108 \ 0000008C ........ _BLF FontH,??FontH??rA \ 00000090 0060A0E1 MOV R6,R0 \ 00000094 6C00A0E3 MOV R0,#+108 \ 00000098 ........ _BLF FontH,??FontH??rA \ 0000009C 061045E0 SUB R1,R5,R6 \ 000000A0 041041E2 SUB R1,R1,#+4 \ 000000A4 000041E0 SUB R0,R1,R0 \ 000000A8 021040E2 SUB R1,R0,#+2 \ 000000AC 08009DE5 LDR R0,[SP, #+8] \ 000000B0 B80000EF SWI +184 \ ??DrawList_2: \ 000000B4 010040E2 SUB R0,R0,#+1 \ 000000B8 D00384E5 STR R0,[R4, #+976] 2982 #else 2983 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-FontH(clfont)-2); 2984 #endif 2985 CLIST *cl; 2986 int i=0; \ 000000BC 0050A0E3 MOV R5,#+0 \ 000000C0 0000A0E3 MOV R0,#+0 \ 000000C4 E00384E5 STR R0,[R4, #+992] 2987 int start_y; 2988 int x=0; 2989 RECT rc; 2990 int icon; 2991 collum=0; 2992 int clfont=108; 2993 char *name=malloc(128); \ 000000C8 8000A0E3 MOV R0,#+128 \ 000000CC 140000EF SWI +20 \ 000000D0 0060A0E1 MOV R6,R0 2994 int yy=0; \ 000000D4 0510A0E1 MOV R1,R5 \ 000000D8 1C108DE5 STR R1,[SP, #+28] 2995 DYNPNGICONLIST *xs; ^ Warning[Pe177]: variable "xs" was declared but never referenced 2996 2997 LockSched(); \ 000000DC 460100EF SWI +326 2998 totalItems = CountContacts(); //TotalBmk(); \ 000000E0 ........ _BLF CountContacts,??CountContacts??rA \ 000000E4 D40384E5 STR R0,[R4, #+980] 2999 3000 // Определяем количество страниц списка контактов 3001 int pageNum = sdiv(itemFromDisp, totalItems);//itemFromDisp/totalItems; \ 000000E8 0010A0E1 MOV R1,R0 \ 000000EC D00394E5 LDR R0,[R4, #+976] \ 000000F0 B80000EF SWI +184 3002 3003 if(itemFromDisp > (CLIST_Y1 - (2-FontH(clfont)))) itemFromDisp--; //Вдруг надпись будет налазить на софты ;) \ 000000F4 6C00A0E3 MOV R0,#+108 \ 000000F8 ........ _BLF FontH,??FontH??rA \ 000000FC 0070A0E1 MOV R7,R0 \ 00000100 6C00A0E3 MOV R0,#+108 \ 00000104 ........ _BLF FontH,??FontH??rA \ 00000108 D01394E5 LDR R1,[R4, #+976] \ 0000010C 070080E0 ADD R0,R0,R7 \ 00000110 020080E2 ADD R0,R0,#+2 \ 00000114 010050E1 CMP R0,R1 \ 00000118 010041B2 SUBLT R0,R1,#+1 \ 0000011C D00384B5 STRLT R0,[R4, #+976] 3004 if(LINE_MODE) itemFromDisp--; \ 00000120 E40394E5 LDR R0,[R4, #+996] \ 00000124 000050E3 CMP R0,#+0 \ 00000128 D0039415 LDRNE R0,[R4, #+976] \ 0000012C 01004012 SUBNE R0,R0,#+1 \ 00000130 D0038415 STRNE R0,[R4, #+976] 3005 3006 3007 if( itemFromDisp*pageNum < totalItems ) pageNum++; //На всяк,вдруг еще страница нужна 3008 3009 while(i=(curpage-1)*itemFromDisp) && (i<=itemFromDisp*curpage))//если те итемы который нужно выводить на экран со страници curpage \ 00000140 D00394E5 LDR R0,[R4, #+976] \ 00000144 DC1394E5 LDR R1,[R4, #+988] \ 00000148 012041E2 SUB R2,R1,#+1 \ 0000014C 900202E0 MUL R2,R0,R2 \ 00000150 020055E1 CMP R5,R2 \ 00000154 910000A0 MULGE R0,R1,R0 \ 00000158 050050A1 CMPGE R0,R5 \ 0000015C 3D0100BA BLT ??DrawList_5 3012 { 3013 cl=FindContactByN(i); \ 00000160 0500A0E1 MOV R0,R5 \ 00000164 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000168 0070B0E1 MOVS R7,R0 3014 //if(!cl) return; 3015 if(cl)//если такой есть то рисуем его \ 0000016C 3901000A BEQ ??DrawList_5 3016 { 3017 start_y=0; 3018 if(LINE_MODE) \ 00000170 E40394E5 LDR R0,[R4, #+996] \ 00000174 0080A0E3 MOV R8,#+0 \ 00000178 000050E3 CMP R0,#+0 \ 0000017C 0500000A BEQ ??DrawList_6 3019 { 3020 if(i>curpos) start_y+=font_y+3; \ 00000180 D80394E5 LDR R0,[R4, #+984] \ 00000184 050050E1 CMP R0,R5 \ 00000188 08009DB5 LDRLT R0,[SP, #+8] \ 0000018C 038080B2 ADDLT R8,R0,#+3 3021 y2=2; \ 00000190 0200A0E3 MOV R0,#+2 \ 00000194 000000EA B ??DrawList_7 3022 } 3023 else y2=1; \ ??DrawList_6: \ 00000198 0100A0E3 MOV R0,#+1 3024 3025 if(VIEW_MODE) \ ??DrawList_7: \ 0000019C 18209DE5 LDR R2,[SP, #+24] \ 000001A0 052042E2 SUB R2,R2,#+5 \ 000001A4 0C208DE5 STR R2,[SP, #+12] \ 000001A8 08109DE5 LDR R1,[SP, #+8] \ 000001AC 900109E0 MUL R9,R0,R1 \ 000001B0 E80394E5 LDR R0,[R4, #+1000] \ 000001B4 000050E3 CMP R0,#+0 \ 000001B8 2800000A BEQ ??DrawList_8 3026 { 3027 if(!collum)//если первая колонка \ 000001BC 18009DE5 LDR R0,[SP, #+24] \ 000001C0 A00F80E0 ADD R0,R0,R0, LSR #+31 \ 000001C4 C0A0A0E1 ASR R10,R0,#+1 \ 000001C8 E00394E5 LDR R0,[R4, #+992] \ 000001CC 000050E3 CMP R0,#+0 \ 000001D0 1300001A BNE ??DrawList_9 3028 { 3029 start_y += (CLIST_Y1 + (((i - (curpage-1)*itemFromDisp)*font_y)/2) ); //определяем начальное смещение по у \ 000001D4 6C00A0E3 MOV R0,#+108 \ 000001D8 ........ _BLF FontH,??FontH??rA \ 000001DC DC1394E5 LDR R1,[R4, #+988] \ 000001E0 D02394E5 LDR R2,[R4, #+976] \ 000001E4 011041E2 SUB R1,R1,#+1 \ 000001E8 920101E0 MUL R1,R2,R1 \ 000001EC 08209DE5 LDR R2,[SP, #+8] \ 000001F0 011045E0 SUB R1,R5,R1 \ 000001F4 920101E0 MUL R1,R2,R1 3030 yy=start_y; 3031 StoreXYXYtoRECT(&rc, 1, start_y, (scr_w/2)-1, start_y+(font_y*y2)); \ 000001F8 01304AE2 SUB R3,R10,#+1 \ 000001FC A11F81E0 ADD R1,R1,R1, LSR #+31 \ 00000200 C10080E0 ADD R0,R0,R1, ASR #+1 \ 00000204 040080E2 ADD R0,R0,#+4 \ 00000208 088080E0 ADD R8,R0,R8 \ 0000020C 1C808DE5 STR R8,[SP, #+28] \ 00000210 080089E0 ADD R0,R9,R8 \ 00000214 01002DE9 PUSH {R0} \ 00000218 0820A0E1 MOV R2,R8 \ 0000021C 0110A0E3 MOV R1,#+1 \ 00000220 050000EA B ??DrawList_10 3032 } 3033 else//если вторая 3034 { 3035 StoreXYXYtoRECT(&rc, scr_w/2, yy, scr_w-5, yy+(font_y*y2)); \ ??DrawList_9: \ 00000224 1C009DE5 LDR R0,[SP, #+28] \ 00000228 0230A0E1 MOV R3,R2 \ 0000022C 000089E0 ADD R0,R9,R0 \ 00000230 01002DE9 PUSH {R0} \ 00000234 20209DE5 LDR R2,[SP, #+32] \ 00000238 0A10A0E1 MOV R1,R10 \ ??DrawList_10: \ 0000023C 04008DE2 ADD R0,SP,#+4 \ 00000240 340100EF SWI +308 \ 00000244 04D08DE2 ADD SP,SP,#+4 3036 } 3037 collum=!collum; \ 00000248 E00394E5 LDR R0,[R4, #+992] \ 0000024C 000050E3 CMP R0,#+0 \ 00000250 0100A003 MOVEQ R0,#+1 \ 00000254 0000A013 MOVNE R0,#+0 \ 00000258 E00384E5 STR R0,[R4, #+992] \ 0000025C 120000EA B ??DrawList_11 3038 } 3039 else 3040 { 3041 start_y += (CLIST_Y1 + 2 + (i - (curpage-1)*itemFromDisp)*font_y); //?????????? ????????? ???????? ?? ? \ ??DrawList_8: \ 00000260 6C00A0E3 MOV R0,#+108 \ 00000264 ........ _BLF FontH,??FontH??rA \ 00000268 DC1394E5 LDR R1,[R4, #+988] \ 0000026C D02394E5 LDR R2,[R4, #+976] \ 00000270 011041E2 SUB R1,R1,#+1 \ 00000274 920101E0 MUL R1,R2,R1 \ 00000278 08209DE5 LDR R2,[SP, #+8] \ 0000027C 011045E0 SUB R1,R5,R1 \ 00000280 920120E0 MLA R0,R2,R1,R0 3042 StoreXYXYtoRECT(&rc,2,start_y,scr_w-5,start_y+(font_y*y2)); \ 00000284 0210A0E3 MOV R1,#+2 \ 00000288 060080E2 ADD R0,R0,#+6 \ 0000028C 088080E0 ADD R8,R0,R8 \ 00000290 080089E0 ADD R0,R9,R8 \ 00000294 01002DE9 PUSH {R0} \ 00000298 10309DE5 LDR R3,[SP, #+16] \ 0000029C 0820A0E1 MOV R2,R8 \ 000002A0 04008DE2 ADD R0,SP,#+4 \ 000002A4 340100EF SWI +308 \ 000002A8 04D08DE2 ADD SP,SP,#+4 3043 } 3044 3045 icon=GetIconIndex(cl); 3046 if (icon!=IS_GROUP) \ ??DrawList_11: \ 000002AC ........ LDR R9,??DataTable101 ;; Canvas \ 000002B0 0700A0E1 MOV R0,R7 \ 000002B4 ........ BL GetIconIndex \ 000002B8 00A0A0E1 MOV R10,R0 \ 000002BC F410A0E3 MOV R1,#+244 \ 000002C0 6C1D81E3 ORR R1,R1,#0x1B00 \ 000002C4 041081E0 ADD R1,R1,R4 \ 000002C8 10108DE5 STR R1,[SP, #+16] \ 000002CC 701D84E2 ADD R1,R4,#+7168 \ 000002D0 14108DE5 STR R1,[SP, #+20] \ 000002D4 0F005AE3 CMP R10,#+15 \ 000002D8 0400000A BEQ ??DrawList_12 3047 { 3048 sprintf(name,percent_s,cl->name); \ 000002DC 142087E2 ADD R2,R7,#+20 \ 000002E0 081089E2 ADD R1,R9,#+8 \ 000002E4 0600A0E1 MOV R0,R6 \ 000002E8 160000EF SWI +22 \ 000002EC 330000EA B ??DrawList_13 3049 } 3050 else 3051 { 3052 int onlinetotal[2]; 3053 GetOnTotalContact(cl->group,onlinetotal); \ ??DrawList_12: \ 000002F0 100097E5 LDR R0,[R7, #+16] \ 000002F4 20108DE2 ADD R1,SP,#+32 \ 000002F8 ........ BL GetOnTotalContact 3054 if(!VIEW_MODE) \ 000002FC E80394E5 LDR R0,[R4, #+1000] \ 00000300 000050E3 CMP R0,#+0 \ 00000304 1C00001A BNE ??DrawList_14 3055 { 3056 char *s=malloc(32); \ 00000308 2000A0E3 MOV R0,#+32 \ 0000030C 140000EF SWI +20 \ 00000310 00B0A0E1 MOV R11,R0 3057 sprintf(name,percent_s,cl->name); \ 00000314 142087E2 ADD R2,R7,#+20 \ 00000318 081089E2 ADD R1,R9,#+8 \ 0000031C 0600A0E1 MOV R0,R6 \ 00000320 160000EF SWI +22 3058 sprintf(s,"(%d/%d)",onlinetotal[0],onlinetotal[1]); \ 00000324 24309DE5 LDR R3,[SP, #+36] \ 00000328 20209DE5 LDR R2,[SP, #+32] \ 0000032C BC1089E2 ADD R1,R9,#+188 \ 00000330 0B00A0E1 MOV R0,R11 \ 00000334 160000EF SWI +22 3059 SetFontColor((char*)clrBlack,transparent,0); \ 00000338 14109DE5 LDR R1,[SP, #+20] \ 0000033C 10009DE5 LDR R0,[SP, #+16] \ 00000340 0020A0E3 MOV R2,#+0 \ 00000344 ........ _BLF SetFontColor,??SetFontColor??rA 3060 PrintField(scr_w-5,start_y,s,2,clfont,1);//capacity in header \ 00000348 0100A0E3 MOV R0,#+1 \ 0000034C 01002DE9 PUSH {R0} \ 00000350 0230A0E3 MOV R3,#+2 \ 00000354 0B20A0E1 MOV R2,R11 \ 00000358 0810A0E1 MOV R1,R8 \ 0000035C 6C00A0E3 MOV R0,#+108 \ 00000360 01002DE9 PUSH {R0} \ 00000364 14009DE5 LDR R0,[SP, #+20] \ 00000368 ........ _BLF PrintField,??PrintField??rA 3061 mfree(s); \ 0000036C 0B00A0E1 MOV R0,R11 \ 00000370 150000EF SWI +21 \ 00000374 08D08DE2 ADD SP,SP,#+8 \ 00000378 0C0000EA B ??DrawList_15 3062 } 3063 else 3064 sprintf(name,"%s%c%c(%d/%d)",cl->name,0xE01D,0xE012,onlinetotal[0],onlinetotal[1]); \ ??DrawList_14: \ 0000037C 24009DE5 LDR R0,[SP, #+36] \ 00000380 142087E2 ADD R2,R7,#+20 \ 00000384 01002DE9 PUSH {R0} \ 00000388 24009DE5 LDR R0,[SP, #+36] \ 0000038C C41089E2 ADD R1,R9,#+196 \ 00000390 01002DE9 PUSH {R0} \ 00000394 1200A0E3 MOV R0,#+18 \ 00000398 E00C80E3 ORR R0,R0,#0xE000 \ 0000039C 01002DE9 PUSH {R0} \ 000003A0 0B3080E2 ADD R3,R0,#+11 \ 000003A4 0600A0E1 MOV R0,R6 \ 000003A8 160000EF SWI +22 \ 000003AC 0CD08DE2 ADD SP,SP,#+12 3065 if (cl->state) icon++; //Модификация иконки группы \ ??DrawList_15: \ 000003B0 B405D7E1 LDRH R0,[R7, #+84] \ 000003B4 000050E3 CMP R0,#+0 \ 000003B8 0100000A BEQ ??DrawList_16 \ 000003BC 01A08AE2 ADD R10,R10,#+1 3066 } 3067 3068 // DrawImg(rc.x,rc.y,NumStatusToIconBar+icon);//status 3069 DrwImage(icons[icon],rc.x,rc.y,0,0);//draw imghdr! \ ??DrawList_13: \ 000003C0 0000A0E3 MOV R0,#+0 \ ??DrawList_16: \ 000003C4 01002DE9 PUSH {R0} \ 000003C8 F620DDE1 LDRSH R2,[SP, #+6] \ 000003CC F410DDE1 LDRSH R1,[SP, #+4] \ 000003D0 0A0194E7 LDR R0,[R4, +R10, LSL #+2] \ 000003D4 0030A0E3 MOV R3,#+0 \ 000003D8 ........ BL DrwImage 3070 // DrwImage(NumStatusToIconBar+icon,rc.x,rc.y,0,0);//draw imghdr! 3071 rc.x+=icons[i]->w+2;//GetImgWidth(NumStatusToIconBar+icon)+2;// + смещение по х \ 000003DC 052194E7 LDR R2,[R4, +R5, LSL #+2] \ 000003E0 F410DDE1 LDRSH R1,[SP, #+4] \ 000003E4 F020D2E1 LDRSH R2,[R2, #+0] \ 000003E8 022082E2 ADD R2,R2,#+2 \ 000003EC 011082E0 ADD R1,R2,R1 \ 000003F0 B410CDE1 STRH R1,[SP, #+4] 3072 3073 if(i==curpos)//Если наш итем то выделяем \ 000003F4 D80394E5 LDR R0,[R4, #+984] \ 000003F8 04D08DE2 ADD SP,SP,#+4 \ 000003FC 000055E1 CMP R5,R0 \ 00000400 5A00001A BNE ??DrawList_17 3074 { 3075 DrawRoundedFrame(rc.x-1,rc.y-1,rc.x2-1,rc.y2-1,0,0,0,bordSelect,clrSelect); \ 00000404 ED0F89E2 ADD R0,R9,#+948 \ 00000408 01002DE9 PUSH {R0} \ 0000040C EE0F89E2 ADD R0,R9,#+952 \ 00000410 01002DE9 PUSH {R0} \ 00000414 0000A0E3 MOV R0,#+0 \ 00000418 01002DE9 PUSH {R0} \ 0000041C 01002DE9 PUSH {R0} \ 00000420 01002DE9 PUSH {R0} \ 00000424 FA01DDE1 LDRSH R0,[SP, #+26] \ 00000428 013040E2 SUB R3,R0,#+1 \ 0000042C F801DDE1 LDRSH R0,[SP, #+24] \ 00000430 012040E2 SUB R2,R0,#+1 \ 00000434 F601DDE1 LDRSH R0,[SP, #+22] \ 00000438 011040E2 SUB R1,R0,#+1 \ 0000043C F401DDE1 LDRSH R0,[SP, #+20] \ 00000440 010040E2 SUB R0,R0,#+1 \ 00000444 500100EF SWI +336 3076 if(LINE_MODE && icon!=IS_GROUP) \ 00000448 E40394E5 LDR R0,[R4, #+996] \ 0000044C 14D08DE2 ADD SP,SP,#+20 \ 00000450 000050E3 CMP R0,#+0 \ 00000454 0F005A13 CMPNE R10,#+15 \ 00000458 3F00000A BEQ ??DrawList_18 3077 { 3078 char s[64]; 3079 if ((cl->xtext && cl->xtext[0]!=0) && (cl->isShowXst) && (cl->state!=0xFFFF))//Если контакт онлайн и показывать хстату \ 0000045C B40097E5 LDR R0,[R7, #+180] \ 00000460 000050E3 CMP R0,#+0 \ 00000464 0000D015 LDRBNE R0,[R0, #+0] \ 00000468 00005013 CMPNE R0,#+0 \ 0000046C 7C009715 LDRNE R0,[R7, #+124] \ 00000470 00005013 CMPNE R0,#+0 \ 00000474 0F00000A BEQ ??DrawList_19 \ 00000478 B405D7E1 LDRH R0,[R7, #+84] \ 0000047C FF10A0E3 MOV R1,#+255 \ 00000480 FF1C81E3 ORR R1,R1,#0xFF00 \ 00000484 010050E1 CMP R0,R1 \ 00000488 0A00000A BEQ ??DrawList_19 3080 { 3081 int i; 3082 zeromem(s,64); \ 0000048C 4010A0E3 MOV R1,#+64 \ 00000490 28008DE2 ADD R0,SP,#+40 \ 00000494 1D0100EF SWI +285 3083 i=cl->xtext[0]; \ 00000498 B40097E5 LDR R0,[R7, #+180] \ ??DrawList_20: \ 0000049C 0020D0E5 LDRB R2,[R0, #+0] 3084 if (i>63) i=63; 3085 strncpy(s,cl->xtext+1,i); \ 000004A0 011080E2 ADD R1,R0,#+1 \ 000004A4 28008DE2 ADD R0,SP,#+40 \ 000004A8 400052E3 CMP R2,#+64 \ 000004AC 3F20A0A3 MOVGE R2,#+63 \ 000004B0 160100EF SWI +278 \ 000004B4 110000EA B ??DrawList_21 3086 } 3087 else 3088 if(cl->xtext2 && cl->xtext2[0]!=0 && isLogStatusChange) \ ??DrawList_19: \ 000004B8 B80097E5 LDR R0,[R7, #+184] \ 000004BC 000050E3 CMP R0,#+0 \ 000004C0 0000D015 LDRBNE R0,[R0, #+0] \ 000004C4 00005013 CMPNE R0,#+0 \ 000004C8 0800000A BEQ ??DrawList_22 \ 000004CC ........ LDR R0,??DataTable102 ;; isLogStatusChange \ 000004D0 000090E5 LDR R0,[R0, #+0] \ 000004D4 000050E3 CMP R0,#+0 \ 000004D8 0400000A BEQ ??DrawList_22 3089 { 3090 int i; 3091 zeromem(s,64); \ 000004DC 4010A0E3 MOV R1,#+64 \ 000004E0 28008DE2 ADD R0,SP,#+40 \ 000004E4 1D0100EF SWI +285 3092 i=cl->xtext2[0]; \ 000004E8 B80097E5 LDR R0,[R7, #+184] \ 000004EC EAFFFFEA B ??DrawList_20 3093 if (i>63) i=63; 3094 strncpy(s,cl->xtext2+1,i); 3095 } 3096 else 3097 sprintf(s,percent_d,cl->uin); \ ??DrawList_22: \ 000004F0 0C2097E5 LDR R2,[R7, #+12] \ 000004F4 0B1089E2 ADD R1,R9,#+11 \ 000004F8 28008DE2 ADD R0,SP,#+40 \ 000004FC 160000EF SWI +22 3098 SetFontColor((char*)clrBlack,transparent,0); \ ??DrawList_21: \ 00000500 14109DE5 LDR R1,[SP, #+20] \ 00000504 10009DE5 LDR R0,[SP, #+16] \ 00000508 0020A0E3 MOV R2,#+0 \ 0000050C ........ _BLF SetFontColor,??SetFontColor??rA 3099 PrintText(rc.x+x+1,rc.y+font_y,s,0,clfont,1,0,0,0,rc.x2);//description under item name \ 00000510 F400DDE1 LDRSH R0,[SP, #+4] \ 00000514 0030A0E3 MOV R3,#+0 \ 00000518 01002DE9 PUSH {R0} \ 0000051C 0000A0E3 MOV R0,#+0 \ 00000520 01002DE9 PUSH {R0} \ 00000524 01002DE9 PUSH {R0} \ 00000528 01002DE9 PUSH {R0} \ 0000052C 0100A0E3 MOV R0,#+1 \ 00000530 01002DE9 PUSH {R0} \ 00000534 6C00A0E3 MOV R0,#+108 \ 00000538 01002DE9 PUSH {R0} \ 0000053C 20109DE5 LDR R1,[SP, #+32] \ 00000540 FA01DDE1 LDRSH R0,[SP, #+26] \ 00000544 40208DE2 ADD R2,SP,#+64 \ 00000548 001081E0 ADD R1,R1,R0 \ 0000054C F801DDE1 LDRSH R0,[SP, #+24] \ 00000550 010080E2 ADD R0,R0,#+1 \ 00000554 ........ _BLF PrintText,??PrintText??rA \ 00000558 18D08DE2 ADD SP,SP,#+24 3100 } 3101 3102 if(totalItems>1) \ ??DrawList_18: \ 0000055C D41394E5 LDR R1,[R4, #+980] \ 00000560 020051E3 CMP R1,#+2 \ 00000564 010000BA BLT ??DrawList_17 3103 DrawScrollBar(i,totalItems); \ 00000568 0500A0E1 MOV R0,R5 \ 0000056C ........ BL DrawScrollBar 3104 } 3105 3106 if(cl->xstate!=0)//если есть хстатус \ ??DrawList_17: \ 00000570 B605D7E1 LDRH R0,[R7, #+86] \ 00000574 000050E3 CMP R0,#+0 \ 00000578 0D00000A BEQ ??DrawList_23 3107 { 3108 /* xs=GetXSByItem(cl->xstate); 3109 if(xs) 3110 { 3111 DrwImage(xs->img,rc.x-x,rc.y,0,0); 3112 rc.x+=xs->img->w; 3113 }*/ 3114 DrawImg(rc.x-x,rc.y,NumXStatusToIconBar+cl->xstate);//xstatus \ 0000057C ........ LDR R8,??DataTable103 ;; NumXStatusToIconBar \ 00000580 001098E5 LDR R1,[R8, #+0] \ 00000584 012080E0 ADD R2,R0,R1 \ 00000588 F210DDE1 LDRSH R1,[SP, #+2] \ 0000058C F000DDE1 LDRSH R0,[SP, #+0] \ 00000590 230000EF SWI +35 3115 rc.x+=GetImgWidth(NumXStatusToIconBar+cl->xstate)+2;// + смещение по х \ 00000594 B615D7E1 LDRH R1,[R7, #+86] \ 00000598 000098E5 LDR R0,[R8, #+0] \ 0000059C 000081E0 ADD R0,R1,R0 \ 000005A0 220000EF SWI +34 \ 000005A4 F020DDE1 LDRSH R2,[SP, #+0] \ 000005A8 020080E2 ADD R0,R0,#+2 \ 000005AC 020080E0 ADD R0,R0,R2 \ 000005B0 B000CDE1 STRH R0,[SP, #+0] 3116 } 3117 3118 if(cl->just_now) \ ??DrawList_23: \ 000005B4 740097E5 LDR R0,[R7, #+116] \ 000005B8 000050E3 CMP R0,#+0 \ 000005BC 0400000A BEQ ??DrawList_24 3119 { 3120 DrawJust(&rc,cl,name); \ 000005C0 0620A0E1 MOV R2,R6 \ 000005C4 0710A0E1 MOV R1,R7 \ 000005C8 0D00A0E1 MOV R0,SP \ 000005CC ........ BL DrawJust \ 000005D0 200000EA B ??DrawList_5 3121 } 3122 else 3123 // if(cl->isactive) 3124 DrawText(rc.x+1,rc.y,rc.x2,name,(cl->isactive!=0)?(clrRed):(clrBlack),clfont,0,0); \ ??DrawList_24: \ 000005D4 AC0097E5 LDR R0,[R7, #+172] \ 000005D8 000050E3 CMP R0,#+0 \ 000005DC 0300000A BEQ ??DrawList_25 \ 000005E0 FC00A0E3 MOV R0,#+252 \ 000005E4 6C0D80E3 ORR R0,R0,#0x1B00 \ 000005E8 040080E0 ADD R0,R0,R4 \ 000005EC 000000EA B ??DrawList_26 \ ??DrawList_25: \ 000005F0 10009DE5 LDR R0,[SP, #+16] \ ??DrawList_26: \ 000005F4 F470DDE1 LDRSH R7,[SP, #+4] \ 000005F8 F010DDE1 LDRSH R1,[SP, #+0] \ 000005FC F280DDE1 LDRSH R8,[SP, #+2] \ 00000600 0020A0E3 MOV R2,#+0 \ 00000604 019081E2 ADD R9,R1,#+1 \ 00000608 14109DE5 LDR R1,[SP, #+20] \ 0000060C ........ _BLF SetFontColor,??SetFontColor??rA \ 00000610 090047E0 SUB R0,R7,R9 \ 00000614 01002DE9 PUSH {R0} \ 00000618 0030A0E3 MOV R3,#+0 \ 0000061C 0620A0E1 MOV R2,R6 \ 00000620 0810A0E1 MOV R1,R8 \ 00000624 0000A0E3 MOV R0,#+0 \ 00000628 01002DE9 PUSH {R0} \ 0000062C 01002DE9 PUSH {R0} \ 00000630 5E00A0E3 MOV R0,#+94 \ 00000634 400F80E3 ORR R0,R0,#0x100 \ 00000638 01002DE9 PUSH {R0} \ 0000063C 0100A0E3 MOV R0,#+1 \ 00000640 01002DE9 PUSH {R0} \ 00000644 6C00A0E3 MOV R0,#+108 \ 00000648 01002DE9 PUSH {R0} \ 0000064C 0900A0E1 MOV R0,R9 \ 00000650 ........ _BLF PrintText,??PrintText??rA \ 00000654 18D08DE2 ADD SP,SP,#+24 3125 //DrawStr(rc.x+1,rc.y,name,clrRed,0); 3126 // SetFontColor((char*)clrRed,transparent,0); 3127 // else 3128 // DrawText(rc.x+1,rc.y,rc.x2,name,clrBlack,clfont,0,0); 3129 // DrawStr(rc.x+1,rc.y,name,clrBlack,0); 3130 // SetFontColor((char*)clrBlack,transparent,0); 3131 3132 // PrintText(rc.x+1,rc.y,name,0,clfont,1,1,0,0,rc.x2); 3133 } 3134 } 3135 i++; 3136 if(i > (itemFromDisp*curpage)) break; \ ??DrawList_5: \ 00000658 D00394E5 LDR R0,[R4, #+976] \ 0000065C DC1394E5 LDR R1,[R4, #+988] \ 00000660 015085E2 ADD R5,R5,#+1 \ 00000664 910000E0 MUL R0,R1,R0 \ 00000668 050050E1 CMP R0,R5 \ 0000066C B0FEFFAA BGE ??DrawList_3 3137 } 3138 UnlockSched(); \ ??DrawList_4: \ 00000670 470100EF SWI +327 3139 mfree(name); \ 00000674 0600A0E1 MOV R0,R6 \ 00000678 150000EF SWI +21 3140 } \ ??DrawList_0: \ 0000067C 68D08DE2 ADD SP,SP,#+104 ;; stack cleaning \ 00000680 F08FBDE8 POP {R4-R11,PC} ;; return 3141 3142 3143 3144 // Управление курсором \ In segment CODE, align 4, keep-with-next 3145 void MoveUp(int i) 3146 { \ MoveUp: \ 00000000 10402DE9 PUSH {R4,LR} 3147 if(!itemFromDisp)return; \ 00000004 ........ LDR R4,??DataTable106 ;; icons \ 00000008 D02394E5 LDR R2,[R4, #+976] \ 0000000C 000052E3 CMP R2,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} 3148 /* if(i) curpos-=2; 3149 else curpos--; 3150 if(curpos<1) { curpos=totalItems-1; curpage=sdiv(itemFromDisp,totalItems)+1; } 3151 if(curpage*itemFromDisp>curpos){ curpos++; curpage--; } */ 3152 3153 if(i) curpos-=2; \ 00000014 D81394E5 LDR R1,[R4, #+984] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 02104112 SUBNE R1,R1,#+2 3154 else curpos--; \ 00000020 01104102 SUBEQ R1,R1,#+1 \ 00000024 D81384E5 STR R1,[R4, #+984] 3155 3156 if(i && curpos+2==2) \ 00000028 0130A0E3 MOV R3,#+1 \ 0000002C 0200000A BEQ ??MoveUp_0 \ 00000030 000051E3 CMP R1,#+0 3157 { 3158 curpos=0; 3159 curpage=1; \ 00000034 DC338405 STREQ R3,[R4, #+988] \ 00000038 1080BD08 POPEQ {R4,PC} 3160 } 3161 else 3162 if(curpos<0) \ ??MoveUp_0: \ 0000003C 000051E3 CMP R1,#+0 \ 00000040 1080BD58 POPPL {R4,PC} 3163 { 3164 curpos=totalItems-1; \ 00000044 D41394E5 LDR R1,[R4, #+980] \ 00000048 010041E2 SUB R0,R1,#+1 \ 0000004C D80384E5 STR R0,[R4, #+984] 3165 3166 if(itemFromDisp!=totalItems) \ 00000050 010052E1 CMP R2,R1 \ 00000054 0400000A BEQ ??MoveUp_1 3167 { 3168 curpage = /*(itemFromDisp/totalItems)+1;*/sdiv(itemFromDisp,totalItems)+1; \ 00000058 0200A0E1 MOV R0,R2 \ 0000005C B80000EF SWI +184 \ 00000060 010080E2 ADD R0,R0,#+1 \ 00000064 DC0384E5 STR R0,[R4, #+988] \ 00000068 1080BDE8 POP {R4,PC} 3169 } 3170 else 3171 curpage = 1; \ ??MoveUp_1: \ 0000006C DC3384E5 STR R3,[R4, #+988] \ 00000070 1080BDE8 POP {R4,PC} ;; return 3172 } 3173 /* else 3174 { 3175 if(i) curpos-=2; 3176 else curpos--; 3177 // if(curpos<(curpage-1)*itemFromDisp){ curpos++; curpage--; } 3178 }*/ 3179 } 3180 3181 \ In segment CODE, align 4, keep-with-next 3182 void MoveDown(int i) 3183 { 3184 if(!totalItems)return; \ MoveDown: \ 00000000 ........ LDR R1,??DataTable106 ;; icons \ 00000004 D42391E5 LDR R2,[R1, #+980] \ 00000008 000052E3 CMP R2,#+0 \ 0000000C 1EFF2F01 BXEQ LR 3185 if(i) curpos+=2; \ 00000010 D83391E5 LDR R3,[R1, #+984] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 02008312 ADDNE R0,R3,#+2 3186 else curpos++; \ 0000001C 01008302 ADDEQ R0,R3,#+1 3187 if(curpos>=totalItems) { curpos=0; curpage=1; } 3188 if(curpage*itemFromDisp` \ 00000060 ........ BL DrawSoftKeys 3197 DrawHeader(); \ 00000064 ........ BL DrawHeader 3198 // UnlockSched(); 3199 DrawList(); \ 00000068 ........ BL DrawList 3200 } \ 0000006C 14D08DE2 ADD SP,SP,#+20 \ 00000070 3080BDE8 POP {R4,R5,PC} ;; return \ ??DrawContactList_0: \ 00000074 ........ DC32 `?` 3201 /* 3202 static void OnRedraw(MAIN_GUI *data) 3203 { 3204 DrawContactList(); 3205 } 3206 3207 static void onCreate(MAIN_GUI *data, void *(*malloc_adr)(int)) 3208 { 3209 #ifdef ELKA 3210 DisableIconBar(1); 3211 #endif 3212 StatusToIMGHDR(); 3213 data->gui.state=1; 3214 } 3215 3216 static void onClose(MAIN_GUI *data, void (*mfree_adr)(void *)) 3217 { 3218 #ifdef ELKA 3219 DisableIconBar(0); 3220 #endif 3221 FreeStatusToIMGHDR(); 3222 GBS_DelTimer(&cltmr); 3223 data->gui.state=0; 3224 } 3225 3226 static void onFocus(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *)) 3227 { 3228 #ifdef ELKA 3229 DisableIconBar(1); 3230 #endif 3231 SetCanvasFlag(1); 3232 // ResortCL(); 3233 data->gui.state=2; 3234 DisableIDLETMR(); 3235 } 3236 3237 static void onUnfocus(MAIN_GUI *data, void (*mfree_adr)(void *)) 3238 { 3239 #ifdef ELKA 3240 DisableIconBar(0); 3241 #endif 3242 GBS_DelTimer(&cltmr); 3243 if (data->gui.state!=2) return; 3244 data->gui.state=1; 3245 } 3246 */ 3247 //IMGHDR *screen; 3248 int ShowLoadScreen=1; 3249 \ In segment CODE, align 4, keep-with-next 3250 int ClOnKey(GUI_MSG *msg) 3251 { \ ClOnKey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3252 int key=msg->gbsmsg->submess; 3253 CLIST *t; 3254 t=FindContactByN(curpos); \ 00000004 ........ LDR R8,??DataTable117 ;; icons \ 00000008 0060A0E1 MOV R6,R0 \ 0000000C 040096E5 LDR R0,[R6, #+4] 3255 3256 if (msg->gbsmsg->msg==LONG_PRESS) \ 00000010 5C90A0E3 MOV R9,#+92 \ 00000014 087090E5 LDR R7,[R0, #+8] \ 00000018 D80398E5 LDR R0,[R8, #+984] \ 0000001C 509E89E3 ORR R9,R9,#0x500 \ 00000020 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000024 0040A0E1 MOV R4,R0 \ 00000028 040096E5 LDR R0,[R6, #+4] \ 0000002C 9520A0E3 MOV R2,#+149 \ 00000030 041090E5 LDR R1,[R0, #+4] \ 00000034 402F82E3 ORR R2,R2,#0x100 \ 00000038 020051E1 CMP R1,R2 \ 0000003C 2E00001A BNE ??ClOnKey_1 3257 { 3258 switch(msg->gbsmsg->submess) \ 00000040 080090E5 LDR R0,[R0, #+8] \ 00000044 E81398E5 LDR R1,[R8, #+1000] \ 00000048 3B0050E2 SUBS R0,R0,#+59 \ 0000004C 0600000A BEQ ??ClOnKey_2 \ 00000050 010050E2 SUBS R0,R0,#+1 \ 00000054 0800000A BEQ ??ClOnKey_3 \ 00000058 010050E2 SUBS R0,R0,#+1 \ 0000005C 1100000A BEQ ??ClOnKey_4 \ 00000060 010050E2 SUBS R0,R0,#+1 \ 00000064 0900000A BEQ ??ClOnKey_5 \ 00000068 130000EA B ??ClOnKey_6 3259 { 3260 case UP_BUTTON: if(VIEW_MODE) MoveUp(1); else MoveUp(0); break; \ ??ClOnKey_2: \ 0000006C 000051E3 CMP R1,#+0 \ 00000070 0F00001A BNE ??ClOnKey_7 \ 00000074 0000A0E3 MOV R0,#+0 \ 00000078 0E0000EA B ??ClOnKey_8 3261 case DOWN_BUTTON: if(VIEW_MODE) MoveDown(1); else MoveDown(0); break; \ ??ClOnKey_3: \ 0000007C 000051E3 CMP R1,#+0 \ 00000080 0000A003 MOVEQ R0,#+0 \ 00000084 0100A013 MOVNE R0,#+1 \ ??ClOnKey_9: \ 00000088 ........ BL MoveDown \ 0000008C 0A0000EA B ??ClOnKey_6 3262 case RIGHT_BUTTON: if(VIEW_MODE) MoveDown(0); else MoveDown(1); break; \ ??ClOnKey_5: \ 00000090 000051E3 CMP R1,#+0 \ 00000094 0100000A BEQ ??ClOnKey_10 \ 00000098 0000A0E3 MOV R0,#+0 \ 0000009C F9FFFFEA B ??ClOnKey_9 \ ??ClOnKey_10: \ 000000A0 0100A0E3 MOV R0,#+1 \ 000000A4 F7FFFFEA B ??ClOnKey_9 3263 case LEFT_BUTTON: if(VIEW_MODE) MoveUp(0); else MoveUp(1); break; \ ??ClOnKey_4: \ 000000A8 000051E3 CMP R1,#+0 \ 000000AC 0000A013 MOVNE R0,#+0 \ 000000B0 0000001A BNE ??ClOnKey_8 \ ??ClOnKey_7: \ 000000B4 0100A0E3 MOV R0,#+1 \ ??ClOnKey_8: \ 000000B8 ........ BL MoveUp 3264 } 3265 3266 LongPressAction(t,msg->gbsmsg->submess); \ ??ClOnKey_6: \ 000000BC 040096E5 LDR R0,[R6, #+4] \ 000000C0 081090E5 LDR R1,[R0, #+8] \ 000000C4 0400A0E1 MOV R0,R4 \ 000000C8 ........ BL LongPressAction 3267 3268 int key=msg->gbsmsg->submess; \ 000000CC 040096E5 LDR R0,[R6, #+4] \ 000000D0 080090E5 LDR R0,[R0, #+8] 3269 if ((key>='0')&&(key<='9')) \ 000000D4 300050E3 CMP R0,#+48 \ 000000D8 070000BA BLT ??ClOnKey_1 \ 000000DC 3A0050E3 CMP R0,#+58 \ 000000E0 050000AA BGE ??ClOnKey_1 3270 { 3271 ClearContactT9Key(); \ 000000E4 2010A0E3 MOV R1,#+32 \ 000000E8 080089E0 ADD R0,R9,R8 \ 000000EC 1D0100EF SWI +285 3272 RecountMenu(NULL,1); \ 000000F0 0110A0E3 MOV R1,#+1 \ 000000F4 0000A0E3 MOV R0,#+0 \ 000000F8 ........ BL RecountMenu 3273 } 3274 } 3275 3276 3277 if (msg->gbsmsg->msg==KEY_DOWN) \ ??ClOnKey_1: \ 000000FC 040096E5 LDR R0,[R6, #+4] \ 00000100 93A0A0E3 MOV R10,#+147 \ 00000104 041090E5 LDR R1,[R0, #+4] \ 00000108 40AF8AE3 ORR R10,R10,#0x100 \ 0000010C 0A0051E1 CMP R1,R10 \ 00000110 E400001A BNE ??ClOnKey_11 3278 { 3279 switch(msg->gbsmsg->submess) \ 00000114 080090E5 LDR R0,[R0, #+8] \ 00000118 E81398E5 LDR R1,[R8, #+1000] \ 0000011C 01B0A0E3 MOV R11,#+1 \ 00000120 0050A0E3 MOV R5,#+0 \ 00000124 010040E2 SUB R0,R0,#+1 \ 00000128 3D0050E3 CMP R0,#+61 \ 0000012C 9500008A BHI ??ClOnKey_12 \ 00000130 012F8FE2 ADR R2,??ClOnKey_0 \ 00000134 0020D2E7 LDRB R2,[R2, R0] \ 00000138 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??ClOnKey_0: \ 0000013C 24929226 DC8 +36,+146,+146,+38 \ 00000140 92929292 DC8 +146,+146,+146,+146 \ 00000144 92927026 DC8 +146,+146,+112,+38 \ 00000148 787E9292 DC8 +120,+126,+146,+146 \ 0000014C 92929292 DC8 +146,+146,+146,+146 \ 00000150 92929292 DC8 +146,+146,+146,+146 \ 00000154 92309292 DC8 +146,+48,+146,+146 \ 00000158 92929292 DC8 +146,+146,+146,+146 \ 0000015C 92929292 DC8 +146,+146,+146,+146 \ 00000160 92929292 DC8 +146,+146,+146,+146 \ 00000164 92549292 DC8 +146,+84,+146,+146 \ 00000168 92929292 DC8 +146,+146,+146,+146 \ 0000016C 92929292 DC8 +146,+146,+146,+146 \ 00000170 92929292 DC8 +146,+146,+146,+146 \ 00000174 92920F14 DC8 +146,+146,+15,+20 \ 00000178 1F190000 DC8 +31,+25,+0,+0 3280 { 3281 case UP_BUTTON: if(VIEW_MODE) MoveUp(1); else MoveUp(0); break; \ ??ClOnKey_13: \ 0000017C 000051E3 CMP R1,#+0 \ 00000180 0000A003 MOVEQ R0,#+0 \ 00000184 0100A013 MOVNE R0,#+1 \ ??ClOnKey_14: \ 00000188 ........ BL MoveUp \ 0000018C 7D0000EA B ??ClOnKey_12 3282 case DOWN_BUTTON: if(VIEW_MODE) MoveDown(1); else MoveDown(0); break; \ ??ClOnKey_15: \ 00000190 000051E3 CMP R1,#+0 \ 00000194 0000A003 MOVEQ R0,#+0 \ 00000198 0100A013 MOVNE R0,#+1 \ ??ClOnKey_16: \ 0000019C ........ BL MoveDown \ 000001A0 780000EA B ??ClOnKey_12 3283 case RIGHT_BUTTON: if(VIEW_MODE) MoveDown(0); else MoveDown(1); break; \ ??ClOnKey_17: \ 000001A4 000051E3 CMP R1,#+0 \ 000001A8 0100000A BEQ ??ClOnKey_18 \ 000001AC 0000A0E3 MOV R0,#+0 \ 000001B0 F9FFFFEA B ??ClOnKey_16 \ ??ClOnKey_18: \ 000001B4 0100A0E3 MOV R0,#+1 \ 000001B8 F7FFFFEA B ??ClOnKey_16 3284 case LEFT_BUTTON: if(VIEW_MODE) MoveUp(0); else MoveUp(1); break; \ ??ClOnKey_19: \ 000001BC 000051E3 CMP R1,#+0 \ 000001C0 0000A013 MOVNE R0,#+0 \ 000001C4 EFFFFF1A BNE ??ClOnKey_14 \ 000001C8 0100A0E3 MOV R0,#+1 \ 000001CC EDFFFFEA B ??ClOnKey_14 3285 case LEFT_SOFT: 3286 { 3287 extern void CreateMainMenu(); 3288 // DoScreen(); 3289 CreateMainMenu(); \ ??ClOnKey_20: \ 000001D0 ........ _BLF CreateMainMenu,??CreateMainMenu??rA \ 000001D4 6B0000EA B ??ClOnKey_12 3290 // ShowMainMenu(); 3291 }break; 3292 case RIGHT_SOFT: 3293 case RED_BUTTON: 3294 if (strlen(ContactT9Key)) \ ??ClOnKey_21: \ 000001D8 080089E0 ADD R0,R9,R8 \ 000001DC 1B0000EF SWI +27 \ 000001E0 000050E3 CMP R0,#+0 \ 000001E4 0300000A BEQ ??ClOnKey_22 3295 { 3296 BackSpaceContactT9(); \ 000001E8 ........ BL BackSpaceContactT9 3297 RecountMenu(NULL,1); \ 000001EC 0110A0E3 MOV R1,#+1 \ 000001F0 0500A0E1 MOV R0,R5 \ 000001F4 3E0000EA B ??ClOnKey_23 3298 return(-1); 3299 } 3300 else ShowLoadScreen=1;//return 1; \ ??ClOnKey_22: \ 000001F8 ECB388E5 STR R11,[R8, #+1004] \ 000001FC 610000EA B ??ClOnKey_12 3301 break; 3302 case ENTER_BUTTON: 3303 { 3304 if (t) \ ??ClOnKey_24: \ 00000200 000054E3 CMP R4,#+0 \ 00000204 3B00000A BEQ ??ClOnKey_25 3305 { 3306 if (t->isgroup) \ 00000208 080094E5 LDR R0,[R4, #+8] \ 0000020C 000050E3 CMP R0,#+0 \ 00000210 0500000A BEQ ??ClOnKey_26 3307 { 3308 t->state^=0xFFFF; \ 00000214 B405D4E1 LDRH R0,[R4, #+84] \ 00000218 FF10A0E3 MOV R1,#+255 \ 0000021C FF1C81E3 ORR R1,R1,#0xFF00 \ 00000220 000021E0 EOR R0,R1,R0 \ 00000224 B405C4E1 STRH R0,[R4, #+84] 3309 RecountMenu(t,1); \ 00000228 2F0000EA B ??ClOnKey_27 3310 return(-1); 3311 } 3312 if (strlen(ContactT9Key)) \ ??ClOnKey_26: \ 0000022C 080089E0 ADD R0,R9,R8 \ 00000230 1B0000EF SWI +27 \ 00000234 000050E3 CMP R0,#+0 \ 00000238 0500000A BEQ ??ClOnKey_28 3313 { 3314 ClearContactT9Key(); \ 0000023C 2010A0E3 MOV R1,#+32 \ 00000240 080089E0 ADD R0,R9,R8 \ 00000244 1D0100EF SWI +285 3315 RecountMenu(NULL,1); \ 00000248 0110A0E3 MOV R1,#+1 \ 0000024C 0500A0E1 MOV R0,R5 \ 00000250 ........ BL RecountMenu 3316 } 3317 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<0) \ ??ClOnKey_30: \ 00000290 ........ _BLF CountContacts,??CountContacts??rA \ 00000294 010050E3 CMP R0,#+1 \ 00000298 3A0000BA BLT ??ClOnKey_12 \ 0000029C 020000EA B ??ClOnKey_31 3324 { 3325 while(t=(CLIST *)(t->next)) 3326 { 3327 if (t->isunread) goto doit; \ ??ClOnKey_32: \ 000002A0 900094E5 LDR R0,[R4, #+144] \ 000002A4 000050E3 CMP R0,#+0 \ 000002A8 0900001A BNE ??ClOnKey_33 3328 } \ ??ClOnKey_31: \ 000002AC 004094E5 LDR R4,[R4, #+0] \ 000002B0 000054E3 CMP R4,#+0 \ 000002B4 F9FFFF1A BNE ??ClOnKey_32 3329 t=(CLIST *)(&cltop); \ 000002B8 EB4F88E2 ADD R4,R8,#+940 3330 while(t=(CLIST *)(t->next)) \ ??ClOnKey_34: \ 000002BC 004094E5 LDR R4,[R4, #+0] \ 000002C0 000054E3 CMP R4,#+0 \ 000002C4 0200000A BEQ ??ClOnKey_33 3331 { 3332 if (t->isunread) goto doit; \ 000002C8 900094E5 LDR R0,[R4, #+144] \ 000002CC 000050E3 CMP R0,#+0 \ 000002D0 F9FFFF0A BEQ ??ClOnKey_34 3333 } 3334 if (t && Is_Show_Groups) 3335 { 3336 if (!t->isgroup) t=FindGroupByID(t->group); 3337 if (t && !t->state) 3338 { 3339 t->state^=0xFFFF; 3340 goto does; 3341 } 3342 } 3343 3344 /* while(t=(CLIST *)(t->next)) 3345 { 3346 if (t->isactive) goto doit; 3347 } 3348 t=(CLIST *)(&cltop); 3349 3350 while(t=(CLIST *)(t->next)) 3351 { 3352 if (t->isactive) goto doit; 3353 } 3354 return(-1);*/ 3355 doit: 3356 { 3357 CLIST *g=FindGroupByID(t->group); \ ??ClOnKey_33: \ 000002D4 100094E5 LDR R0,[R4, #+16] \ 000002D8 ........ _BLF FindGroupByID,??FindGroupByID??rA 3358 if (g) \ 000002DC 000050E3 CMP R0,#+0 3359 { 3360 if (g->state) \ 000002E0 B415D011 LDRHNE R1,[R0, #+84] \ 000002E4 00005113 CMPNE R1,#+0 3361 { 3362 g->state=0; \ 000002E8 B455C011 STRHNE R5,[R0, #+84] 3363 } 3364 } 3365 } 3366 does: 3367 RecountMenu(t,1); \ ??ClOnKey_27: \ 000002EC 0110A0E3 MOV R1,#+1 \ 000002F0 0400A0E1 MOV R0,R4 \ ??ClOnKey_23: \ 000002F4 ........ BL RecountMenu 3368 return(-1); \ ??ClOnKey_25: \ 000002F8 0500E0E1 MVN R0,R5 \ 000002FC F08FBDE8 POP {R4-R11,PC} 3369 } 3370 break; 3371 case GREEN_BUTTON: 3372 { 3373 IsActiveUp=!IsActiveUp; \ ??ClOnKey_35: \ 00000300 0C0398E5 LDR R0,[R8, #+780] 3374 RecountMenu(NULL,1); \ 00000304 0110A0E3 MOV R1,#+1 \ 00000308 000050E3 CMP R0,#+0 \ 0000030C 00B0A013 MOVNE R11,#+0 \ 00000310 0CB388E5 STR R11,[R8, #+780] \ 00000314 0000A0E3 MOV R0,#+0 \ 00000318 ........ BL RecountMenu \ 0000031C 190000EA B ??ClOnKey_12 3375 } 3376 break; 3377 // case RED_BUTTON: return (1); 3378 case VOL_UP_BUTTON: 3379 #ifdef NEWSGOLD 3380 if(isVolUpButton) \ ??ClOnKey_36: \ 00000320 BC019FE5 LDR R0,??ClOnKey_37 ;; isVolUpButton \ 00000324 000090E5 LDR R0,[R0, #+0] \ 00000328 000050E3 CMP R0,#+0 \ 0000032C 1500000A BEQ ??ClOnKey_12 3381 CreateScreenSelectGUI(); \ 00000330 ........ _BLF CreateScreenSelectGUI,??CreateScreenSelectGUI??rA \ 00000334 130000EA B ??ClOnKey_12 3382 #endif 3383 break; 3384 case VOL_DOWN_BUTTON: 3385 { 3386 if(isVolDownButton) \ ??ClOnKey_38: \ 00000338 A8019FE5 LDR R0,??ClOnKey_37+0x4 ;; isVolDownButton \ 0000033C 000090E5 LDR R0,[R0, #+0] \ 00000340 000050E3 CMP R0,#+0 \ 00000344 0F00000A BEQ ??ClOnKey_12 3387 { 3388 if(!away_m) \ 00000348 2C0398E5 LDR R0,[R8, #+812] \ 0000034C 000050E3 CMP R0,#+0 \ 00000350 0300001A BNE ??ClOnKey_39 3389 { 3390 away_m=!away_m; \ 00000354 2CB388E5 STR R11,[R8, #+812] 3391 main_d=1; \ 00000358 C8B288E5 STR R11,[R8, #+712] 3392 InputAwayMsg(); \ 0000035C ........ BL InputAwayMsg \ 00000360 080000EA B ??ClOnKey_12 3393 } 3394 else 3395 { 3396 msg_away_timer=0; 3397 away_m=!away_m; 3398 if(change_back_status) \ ??ClOnKey_39: \ 00000364 340398E5 LDR R0,[R8, #+820] \ 00000368 285388E5 STR R5,[R8, #+808] \ 0000036C 2C5388E5 STR R5,[R8, #+812] \ 00000370 000050E3 CMP R0,#+0 \ 00000374 0300000A BEQ ??ClOnKey_12 3399 { 3400 CurrentStatus=status_rem; \ 00000378 300398E5 LDR R0,[R8, #+816] \ 0000037C 180388E5 STR R0,[R8, #+792] 3401 set_my_status(); \ 00000380 ........ BL set_my_status 3402 change_back_status=0; \ 00000384 345388E5 STR R5,[R8, #+820] 3403 } 3404 } 3405 } 3406 } 3407 break; 3408 } 3409 3410 if (key=='#' && (CountContacts()>0))//Если есть хоть один контакт то выполнять,иначе возможен пикофф \ ??ClOnKey_12: \ 00000388 230057E3 CMP R7,#+35 \ 0000038C 4500001A BNE ??ClOnKey_11 \ 00000390 ........ _BLF CountContacts,??CountContacts??rA \ 00000394 010050E3 CMP R0,#+1 \ 00000398 300000BA BLT ??ClOnKey_40 3411 { 3412 if(ActionResh) \ 0000039C 48019FE5 LDR R0,??ClOnKey_37+0x8 ;; ActionResh \ 000003A0 000090E5 LDR R0,[R0, #+0] \ 000003A4 000050E3 CMP R0,#+0 \ 000003A8 1900001A BNE ??ClOnKey_41 3413 { 3414 while(t=(CLIST *)(t->next)) 3415 { 3416 if (t->isactive) goto doit4; 3417 } 3418 t=(CLIST *)(&cltop); 3419 while(t=(CLIST *)(t->next)) 3420 { 3421 if (t->isactive) goto doit4; 3422 } 3423 return(-1); 3424 doit4: 3425 { 3426 CLIST *g=FindGroupByID(t->group); 3427 if (g) 3428 { 3429 if (g->state) 3430 { 3431 g->state=0; 3432 } 3433 } 3434 } 3435 RecountMenu(t,1); 3436 } 3437 else 3438 { 3439 if(t->log && !(t->just_now))//очистить лог \ 000003AC A00094E5 LDR R0,[R4, #+160] \ 000003B0 000050E3 CMP R0,#+0 \ 000003B4 0600000A BEQ ??ClOnKey_42 \ 000003B8 740094E5 LDR R0,[R4, #+116] \ 000003BC 000050E3 CMP R0,#+0 \ 000003C0 0300001A BNE ??ClOnKey_42 3440 { 3441 FreeLOGQ(&t->log); \ 000003C4 A00084E2 ADD R0,R4,#+160 \ 000003C8 ........ BL FreeLOGQ 3442 t->msg_count=0; \ 000003CC B05084E5 STR R5,[R4, #+176] 3443 t->isactive=0; \ 000003D0 AC5084E5 STR R5,[R4, #+172] 3444 } 3445 3446 if(t->just_now)//если контакт тока зашел,то обнуляем \ ??ClOnKey_42: \ 000003D4 740094E5 LDR R0,[R4, #+116] \ 000003D8 000050E3 CMP R0,#+0 \ 000003DC 0200000A BEQ ??ClOnKey_43 3447 { 3448 CLIST *tt; 3449 tt=FindContactByUin(t->uin); 3450 tt->just_now=0; \ 000003E0 0C0094E5 LDR R0,[R4, #+12] \ 000003E4 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000003E8 745080E5 STR R5,[R0, #+116] 3451 } 3452 3453 if(t->uin==UIN)//если нажали на Loopback, то обнуляем все just_now'ы \ ??ClOnKey_43: \ 000003EC ........ LDR R1,??DataTable119 ;; UIN \ 000003F0 0C0094E5 LDR R0,[R4, #+12] \ 000003F4 001091E5 LDR R1,[R1, #+0] \ 000003F8 010050E1 CMP R0,R1 \ 000003FC 1F00001A BNE ??ClOnKey_44 3454 { 3455 CLIST *tt; 3456 tt=(CLIST *)(&cltop); \ 00000400 EB0F88E2 ADD R0,R8,#+940 \ 00000404 1A0000EA B ??ClOnKey_45 \ ??ClOnKey_46: \ 00000408 AC0094E5 LDR R0,[R4, #+172] \ 0000040C 000050E3 CMP R0,#+0 \ 00000410 0900001A BNE ??ClOnKey_47 \ ??ClOnKey_41: \ 00000414 004094E5 LDR R4,[R4, #+0] \ 00000418 000054E3 CMP R4,#+0 \ 0000041C F9FFFF1A BNE ??ClOnKey_46 \ 00000420 EB4F88E2 ADD R4,R8,#+940 \ ??ClOnKey_48: \ 00000424 004094E5 LDR R4,[R4, #+0] \ 00000428 000054E3 CMP R4,#+0 \ 0000042C B1FFFF0A BEQ ??ClOnKey_25 \ 00000430 AC0094E5 LDR R0,[R4, #+172] \ 00000434 000050E3 CMP R0,#+0 \ 00000438 F9FFFF0A BEQ ??ClOnKey_48 \ ??ClOnKey_47: \ 0000043C 100094E5 LDR R0,[R4, #+16] \ 00000440 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000444 000050E3 CMP R0,#+0 \ 00000448 B415D011 LDRHNE R1,[R0, #+84] \ 0000044C 00005113 CMPNE R1,#+0 \ 00000450 B455C011 STRHNE R5,[R0, #+84] \ 00000454 0110A0E3 MOV R1,#+1 \ 00000458 0400A0E1 MOV R0,R4 \ ??ClOnKey_49: \ 0000045C ........ BL RecountMenu 3457 while(tt=(CLIST *)(tt->next)) 3458 { 3459 if(tt->just_now) tt->just_now=0; 3460 } 3461 } 3462 if(strlen(ContactT9Key)) ClearContactT9Key(); 3463 RecountMenu(NULL,0); 3464 } 3465 } 3466 } 3467 3468 if ((key>='0')&&(key<='9') && msg->gbsmsg->msg==KEY_DOWN) 3469 { 3470 AddContactT9Key(key); 3471 RecountMenu(NULL,1); 3472 return(-1); 3473 } 3474 return 0; \ ??ClOnKey_40: \ 00000460 0000A0E3 MOV R0,#+0 \ 00000464 F08FBDE8 POP {R4-R11,PC} ;; return \ ??ClOnKey_50: \ 00000468 741090E5 LDR R1,[R0, #+116] \ 0000046C 000051E3 CMP R1,#+0 \ 00000470 74508015 STRNE R5,[R0, #+116] \ ??ClOnKey_45: \ 00000474 000090E5 LDR R0,[R0, #+0] \ 00000478 000050E3 CMP R0,#+0 \ 0000047C F9FFFF1A BNE ??ClOnKey_50 \ ??ClOnKey_44: \ 00000480 080089E0 ADD R0,R9,R8 \ 00000484 1B0000EF SWI +27 \ 00000488 000050E3 CMP R0,#+0 \ 0000048C 0200000A BEQ ??ClOnKey_51 \ 00000490 2010A0E3 MOV R1,#+32 \ 00000494 080089E0 ADD R0,R9,R8 \ 00000498 1D0100EF SWI +285 \ ??ClOnKey_51: \ 0000049C 0010A0E3 MOV R1,#+0 \ 000004A0 0100A0E1 MOV R0,R1 \ 000004A4 ECFFFFEA B ??ClOnKey_49 \ ??ClOnKey_11: \ 000004A8 300057E3 CMP R7,#+48 \ 000004AC EBFFFFBA BLT ??ClOnKey_40 \ 000004B0 3A0057E3 CMP R7,#+58 \ 000004B4 E9FFFFAA BGE ??ClOnKey_40 \ 000004B8 040096E5 LDR R0,[R6, #+4] \ 000004BC 040090E5 LDR R0,[R0, #+4] \ 000004C0 0A0050E1 CMP R0,R10 \ 000004C4 E5FFFF1A BNE ??ClOnKey_40 \ 000004C8 0700A0E1 MOV R0,R7 \ 000004CC ........ BL AddContactT9Key \ 000004D0 0110A0E3 MOV R1,#+1 \ 000004D4 0000A0E3 MOV R0,#+0 \ 000004D8 ........ BL RecountMenu \ 000004DC 0000E0E3 MVN R0,#+0 \ 000004E0 F08FBDE8 POP {R4-R11,PC} \ ??ClOnKey_37: \ 000004E4 ........ DC32 isVolUpButton \ 000004E8 ........ DC32 isVolDownButton \ 000004EC ........ DC32 ActionResh 3475 } 3476 3477 3478 /* 3479 static int OnKey(MAIN_GUI *data, GUI_MSG *msg) 3480 { 3481 DirectRedrawGUI(); 3482 // int k=msg->gbsmsg->submess; 3483 ClOnKey(msg); 3484 return(0); 3485 } 3486 3487 extern void kill_data(void *p, void (*func_p)(void *)); 3488 3489 int method8(void){return(0);} 3490 int method9(void){return(0);} 3491 3492 const void * const gui_methods2[11]={ 3493 (void *)OnRedraw, 3494 (void *)onCreate, 3495 (void *)onClose, 3496 (void *)onFocus, 3497 (void *)onUnfocus, 3498 (void *)OnKey, 3499 0, 3500 (void *)kill_data, 3501 (void *)method8, 3502 (void *)method9, 3503 0 3504 }; 3505 3506 3507 const RECT Canvas={0,0,0,0}; 3508 static void CreateCL() 3509 { 3510 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); 3511 zeromem(main_gui,sizeof(MAIN_GUI)); 3512 main_gui->gui.canvas=(void *)(&Canvas); 3513 main_gui->gui.methods=(void *)gui_methods2; 3514 // main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); 3515 //patch_rect((RECT*)&Canvas,0,YDISP,ScreenW()-1,ScreenH()-1); 3516 contactlist_menu_id=CreateGUI(main_gui); 3517 } 3518 3519 */ 3520 3521 3522 #ifdef ELKA 3523 #undef YDISP 3524 #define YDISP 24 3525 #endif 3526 3527 3528 /************************************************************************************************/ 3529 3530 3531 3532 //=============================================================================================== 3533 3534 int DNR_ID=0; 3535 int DNR_TRIES=3; 3536 3537 char hostname[128]; //2058 che toka 128? :) 3538 3539 int host_counter = 0; 3540 3541 //--------------------------------------------------------------------------- 3542 \ In segment CODE, align 4, keep-with-next 3543 const char *GetHost(int cnt, const char *str, char *buf) 3544 { 3545 const char *tmp = str, *begin, *end; \ GetHost: \ 00000000 0130A0E1 MOV R3,R1 3546 if(cnt) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0100001A BNE ??GetHost_0 \ 0000000C 180000EA B ??GetHost_1 3547 { 3548 for(;cnt;cnt--) 3549 { 3550 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetHost_2: \ 00000010 011081E2 ADD R1,R1,#+1 \ ??GetHost_0: \ 00000014 00C0D1E5 LDRB R12,[R1, #+0] \ 00000018 3B005CE3 CMP R12,#+59 \ 0000001C 20005C13 CMPNE R12,#+32 \ 00000020 0D005C13 CMPNE R12,#+13 \ 00000024 0A005C13 CMPNE R12,#+10 \ 00000028 00005C13 CMPNE R12,#+0 \ 0000002C F7FFFF1A BNE ??GetHost_2 3551 if(!*str) str = tmp; \ 00000030 00005CE3 CMP R12,#+0 \ 00000034 0200001A BNE ??GetHost_3 \ 00000038 0310A0E1 MOV R1,R3 \ 0000003C 000000EA B ??GetHost_3 3552 for(;(*str==';' || *str==' ' || *str=='\x0D' || *str=='\x0A') && *str; str++); \ ??GetHost_4: \ 00000040 011081E2 ADD R1,R1,#+1 \ ??GetHost_3: \ 00000044 00C0D1E5 LDRB R12,[R1, #+0] \ 00000048 3B005CE3 CMP R12,#+59 \ 0000004C 20005C13 CMPNE R12,#+32 \ 00000050 0D005C13 CMPNE R12,#+13 \ 00000054 0A005C13 CMPNE R12,#+10 \ 00000058 0100001A BNE ??GetHost_5 \ 0000005C 00005CE3 CMP R12,#+0 \ 00000060 F6FFFF1A BNE ??GetHost_4 3553 if(!*str) str = tmp; \ ??GetHost_5: \ 00000064 00005CE3 CMP R12,#+0 \ 00000068 0310A001 MOVEQ R1,R3 3554 } \ 0000006C 010050E2 SUBS R0,R0,#+1 \ 00000070 E7FFFF1A BNE ??GetHost_0 3555 } 3556 tmp = buf; \ ??GetHost_1: \ 00000074 0200A0E1 MOV R0,R2 3557 begin = str; \ 00000078 0130A0E1 MOV R3,R1 \ 0000007C 000000EA B ??GetHost_6 3558 for(;*str!=';' && *str!=':' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetHost_7: \ 00000080 011081E2 ADD R1,R1,#+1 \ ??GetHost_6: \ 00000084 00C0D1E5 LDRB R12,[R1, #+0] \ 00000088 3B005CE3 CMP R12,#+59 \ 0000008C 3A005C13 CMPNE R12,#+58 \ 00000090 20005C13 CMPNE R12,#+32 \ 00000094 0D005C13 CMPNE R12,#+13 \ 00000098 0A005C13 CMPNE R12,#+10 \ 0000009C 00005C13 CMPNE R12,#+0 \ 000000A0 F6FFFF1A BNE ??GetHost_7 3559 end = str; 3560 for(;begin0x2F && attr[k]<0x3A) {ret=ret*10+attr[k]-0x30;} else { if ( attr[k]=='-') {neg=-1;} else {return(ret*neg);}} \ ??atoi_1: \ 00000014 04C0A0E1 MOV R12,R4 \ 00000018 3A005CE3 CMP R12,#+58 \ 0000001C 0600002A BCS ??atoi_2 \ 00000020 0A40A0E3 MOV R4,#+10 \ 00000024 94C121E0 MLA R1,R4,R1,R12 \ 00000028 301041E2 SUB R1,R1,#+48 \ ??atoi_3: \ 0000002C 013083E2 ADD R3,R3,#+1 \ ??atoi_0: \ 00000030 0040D3E7 LDRB R4,[R3, +R0] \ 00000034 300054E3 CMP R4,#+48 \ 00000038 F5FFFF2A BCS ??atoi_1 \ ??atoi_2: \ 0000003C 2D0054E3 CMP R4,#+45 \ 00000040 0020E003 MVNEQ R2,#+0 \ 00000044 F8FFFF0A BEQ ??atoi_3 \ 00000048 1000BDE8 POP {R4} \ 0000004C 920100E0 MUL R0,R2,R1 \ 00000050 1EFF2FE1 BX LR ;; return 3572 } 3573 } 3574 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 3575 int GetPort(int cnt, const char *str) 3576 { \ GetPort: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 3577 const char *tmp = str; \ 00000008 01C0A0E1 MOV R12,R1 3578 char numbuf[6], numcnt = 0; \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 0030A0E3 MOV R3,#+0 3579 if(cnt) \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0100001A BNE ??GetPort_0 \ 0000001C 180000EA B ??GetPort_1 3580 { 3581 for(;cnt;cnt--) 3582 { 3583 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetPort_2: \ 00000020 011081E2 ADD R1,R1,#+1 \ ??GetPort_0: \ 00000024 0040D1E5 LDRB R4,[R1, #+0] \ 00000028 3B0054E3 CMP R4,#+59 \ 0000002C 20005413 CMPNE R4,#+32 \ 00000030 0D005413 CMPNE R4,#+13 \ 00000034 0A005413 CMPNE R4,#+10 \ 00000038 00005413 CMPNE R4,#+0 \ 0000003C F7FFFF1A BNE ??GetPort_2 3584 if(!*str) str = tmp; \ 00000040 000054E3 CMP R4,#+0 \ 00000044 0200001A BNE ??GetPort_3 \ 00000048 0C10A0E1 MOV R1,R12 \ 0000004C 000000EA B ??GetPort_3 3585 for(;(*str==';' || *str==' ' || *str=='\x0D' || *str=='\x0A') && *str; str++); \ ??GetPort_4: \ 00000050 011081E2 ADD R1,R1,#+1 \ ??GetPort_3: \ 00000054 0040D1E5 LDRB R4,[R1, #+0] \ 00000058 3B0054E3 CMP R4,#+59 \ 0000005C 20005413 CMPNE R4,#+32 \ 00000060 0D005413 CMPNE R4,#+13 \ 00000064 0A005413 CMPNE R4,#+10 \ 00000068 0100001A BNE ??GetPort_5 \ 0000006C 000054E3 CMP R4,#+0 \ 00000070 F6FFFF1A BNE ??GetPort_4 3586 if(!*str) str = tmp; \ ??GetPort_5: \ 00000074 000054E3 CMP R4,#+0 \ 00000078 0C10A001 MOVEQ R1,R12 3587 } \ 0000007C 010050E2 SUBS R0,R0,#+1 \ 00000080 E7FFFF1A BNE ??GetPort_0 3588 } 3589 for(;*str!=';' && *str!=':' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetPort_1: \ 00000084 0000D1E5 LDRB R0,[R1, #+0] \ 00000088 3B0050E3 CMP R0,#+59 \ 0000008C 3A005013 CMPNE R0,#+58 \ 00000090 20005013 CMPNE R0,#+32 \ 00000094 0D005013 CMPNE R0,#+13 \ 00000098 0A005013 CMPNE R0,#+10 \ 0000009C 00005013 CMPNE R0,#+0 \ 000000A0 01108112 ADDNE R1,R1,#+1 \ 000000A4 F6FFFF1A BNE ??GetPort_1 3590 if(*str!=':') return NATICQ_PORT; \ 000000A8 ........ LDRB R0,[R1], #+1 \ 000000AC 3A0050E3 CMP R0,#+58 \ 000000B0 58009F15 LDRNE R0,??GetPort_6 ;; NATICQ_PORT \ 000000B4 00009015 LDRNE R0,[R0, #+0] \ 000000B8 1680BD18 POPNE {R1,R2,R4,PC} 3591 str++; 3592 numbuf[5] = 0; \ 000000BC 0520CDE5 STRB R2,[SP, #+5] \ 000000C0 030000EA B ??GetPort_7 3593 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str && numcnt<5; numbuf[numcnt] = *str, str++, numcnt++); \ ??GetPort_8: \ 000000C4 ........ LDRB R4,[R1], #+1 \ 000000C8 013083E2 ADD R3,R3,#+1 \ 000000CC FF3003E2 AND R3,R3,#0xFF \ 000000D0 0040C0E5 STRB R4,[R0, #+0] \ ??GetPort_7: \ 000000D4 0D40A0E1 MOV R4,SP \ 000000D8 040083E0 ADD R0,R3,R4 \ 000000DC 0040D1E5 LDRB R4,[R1, #+0] \ 000000E0 3B0054E3 CMP R4,#+59 \ 000000E4 20005413 CMPNE R4,#+32 \ 000000E8 0D005413 CMPNE R4,#+13 \ 000000EC 0A005413 CMPNE R4,#+10 \ 000000F0 00005413 CMPNE R4,#+0 \ 000000F4 0100000A BEQ ??GetPort_9 \ 000000F8 050053E3 CMP R3,#+5 \ 000000FC F0FFFF3A BCC ??GetPort_8 3594 numbuf[numcnt] = 0; //2058 \ ??GetPort_9: \ 00000100 0020C0E5 STRB R2,[R0, #+0] 3595 return atoi(numbuf); \ 00000104 0D00A0E1 MOV R0,SP \ 00000108 ........ BL atoi \ 0000010C 1680BDE8 POP {R1,R2,R4,PC} ;; return \ ??GetPort_6: \ 00000110 ........ DC32 NATICQ_PORT 3596 3597 } 3598 // 3599 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 3600 int GetHostsCount(const char *str) 3601 { 3602 char cnt = 1; \ GetHostsCount: \ 00000000 0110A0E3 MOV R1,#+1 \ 00000004 000000EA B ??GetHostsCount_0 3603 for(;cnt;cnt++) 3604 { 3605 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetHostsCount_1: \ 00000008 010080E2 ADD R0,R0,#+1 \ ??GetHostsCount_0: \ 0000000C 0020D0E5 LDRB R2,[R0, #+0] \ 00000010 3B0052E3 CMP R2,#+59 \ 00000014 20005213 CMPNE R2,#+32 \ 00000018 0D005213 CMPNE R2,#+13 \ 0000001C 0A005213 CMPNE R2,#+10 \ 00000020 00005213 CMPNE R2,#+0 \ 00000024 F7FFFF1A BNE ??GetHostsCount_1 3606 if(!*str) return cnt; \ 00000028 000052E3 CMP R2,#+0 \ 0000002C 0200001A BNE ??GetHostsCount_2 \ ??GetHostsCount_3: \ 00000030 0100A0E1 MOV R0,R1 \ 00000034 1EFF2FE1 BX LR 3607 for(;(*str==';' || *str==' ' || *str=='\x0D' || *str=='\x0A') && *str; str++); \ ??GetHostsCount_4: \ 00000038 010080E2 ADD R0,R0,#+1 \ ??GetHostsCount_2: \ 0000003C 0020D0E5 LDRB R2,[R0, #+0] \ 00000040 3B0052E3 CMP R2,#+59 \ 00000044 20005213 CMPNE R2,#+32 \ 00000048 0D005213 CMPNE R2,#+13 \ 0000004C 0A005213 CMPNE R2,#+10 \ 00000050 0100001A BNE ??GetHostsCount_5 \ 00000054 000052E3 CMP R2,#+0 \ 00000058 F6FFFF1A BNE ??GetHostsCount_4 3608 if(!*str) return cnt; \ ??GetHostsCount_5: \ 0000005C 000052E3 CMP R2,#+0 \ 00000060 F2FFFF0A BEQ ??GetHostsCount_3 3609 } \ 00000064 011081E2 ADD R1,R1,#+1 \ 00000068 FF1011E2 ANDS R1,R1,#0xFF \ 0000006C E6FFFF1A BNE ??GetHostsCount_0 3610 return 0; \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 1EFF2FE1 BX LR ;; return 3611 } 3612 //--------------------------------------------------------------------------- 3613 \ In segment CODE, align 4, keep-with-next 3614 void create_connect(void) 3615 { \ create_connect: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3616 // static int host_counter = 0; 3617 char hostbuf[128], buf[128]; 3618 int hostport; 3619 int ***p_res=NULL; 3620 void do_reconnect(void); 3621 SOCK_ADDR sa; 3622 //Устанавливаем соединение 3623 connect_state = 0; \ 00000004 ........ LDR R5,??DataTable117 ;; icons 3624 int err; 3625 unsigned int ip; 3626 GBS_DelTimer(&reconnect_tmr); 3627 if (!IsGPRSEnabled()) \ 00000008 ........ LDR R8,??DataTable111 ;; Canvas \ 0000000C 45DF4DE2 SUB SP,SP,#+276 \ 00000010 0040A0E3 MOV R4,#+0 \ 00000014 00408DE5 STR R4,[SP, #+0] \ 00000018 844385E5 STR R4,[R5, #+900] \ 0000001C C400A0E3 MOV R0,#+196 \ 00000020 680D80E3 ORR R0,R0,#0x1A00 \ 00000024 056080E0 ADD R6,R0,R5 \ 00000028 0600A0E1 MOV R0,R6 \ 0000002C 8C0100EF SWI +396 \ 00000030 A400A0E3 MOV R0,#+164 \ 00000034 640D80E3 ORR R0,R0,#0x1900 \ 00000038 057080E0 ADD R7,R0,R5 \ 0000003C A70000EF SWI +167 \ 00000040 000050E3 CMP R0,#+0 \ 00000044 0400001A BNE ??create_connect_0 3628 { 3629 is_gprs_online=0; \ 00000048 A44385E5 STR R4,[R5, #+932] 3630 strcpy(logmsg,LG_GRWAITFORGPRS); \ 0000004C D41088E2 ADD R1,R8,#+212 \ 00000050 0700A0E1 MOV R0,R7 \ 00000054 1A0000EF SWI +26 3631 SMART_REDRAW(); \ 00000058 850000EA B ??create_connect_1 3632 return; 3633 } 3634 DNR_ID=0; 3635 *socklasterr()=0; 3636 if(host_counter > GetHostsCount(NATICQ_HOST)-1) host_counter = 0; //2058 \ ??create_connect_0: \ 0000005C 90929FE5 LDR R9,??create_connect_2+0x4 ;; NATICQ_HOST \ 00000060 F04385E5 STR R4,[R5, #+1008] \ 00000064 7C8100EF SWI +33148 \ 00000068 004080E5 STR R4,[R0, #+0] \ 0000006C 0900A0E1 MOV R0,R9 \ 00000070 ........ BL GetHostsCount \ 00000074 F81395E5 LDR R1,[R5, #+1016] \ 00000078 010040E2 SUB R0,R0,#+1 \ 0000007C 010050E1 CMP R0,R1 \ 00000080 F84385B5 STRLT R4,[R5, #+1016] 3637 GetHost(host_counter, NATICQ_HOST, hostbuf); \ 00000084 F80395E5 LDR R0,[R5, #+1016] \ 00000088 14208DE2 ADD R2,SP,#+20 \ 0000008C 0910A0E1 MOV R1,R9 \ 00000090 ........ BL GetHost 3638 hostport = GetPort(host_counter, NATICQ_HOST); \ 00000094 F80395E5 LDR R0,[R5, #+1016] \ 00000098 0910A0E1 MOV R1,R9 \ 0000009C ........ BL GetPort \ 000000A0 0090A0E1 MOV R9,R0 3639 host_counter++; \ 000000A4 F80395E5 LDR R0,[R5, #+1016] 3640 3641 sprintf(hostname, "Connect to %s:%d", hostbuf, hostport); //2058 - stavim hostname, izbavlyaemsya ot buf \ 000000A8 0930A0E1 MOV R3,R9 \ 000000AC 010080E2 ADD R0,R0,#+1 \ 000000B0 F80385E5 STR R0,[R5, #+1016] \ 000000B4 14208DE2 ADD R2,SP,#+20 \ 000000B8 EC1088E2 ADD R1,R8,#+236 \ 000000BC 0C00A0E3 MOV R0,#+12 \ 000000C0 700D80E3 ORR R0,R0,#0x1C00 \ 000000C4 050080E0 ADD R0,R0,R5 \ 000000C8 160000EF SWI +22 3642 //strcpy(hostbuf2, hostbuf); //vyvod host v get_online_time 3643 zeromem(hostbuf2,128); \ 000000CC 7400A0E3 MOV R0,#+116 \ 000000D0 6C0D80E3 ORR R0,R0,#0x1B00 \ 000000D4 05A080E0 ADD R10,R0,R5 \ 000000D8 8010A0E3 MOV R1,#+128 \ 000000DC 0A00A0E1 MOV R0,R10 \ 000000E0 1D0100EF SWI +285 3644 sprintf(hostbuf2, percent_s,hostbuf); \ 000000E4 14208DE2 ADD R2,SP,#+20 \ 000000E8 081088E2 ADD R1,R8,#+8 \ 000000EC 0A00A0E1 MOV R0,R10 3645 strcpy(logmsg,buf); 3646 SMART_REDRAW(); 3647 3648 ip=str2ip(hostbuf); \ 000000F0 ........ LDR R10,??DataTable112 ;; 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 3649 if (ip!=0xFFFFFFFF) 3650 { 3651 sa.ip=ip; \ 0000011C 08008DE5 STR R0,[SP, #+8] 3652 strcpy(logmsg,"\nConnect by IP!"); //strcat->strcpy \ 00000120 401F88E2 ADD R1,R8,#+256 \ 00000124 0700A0E1 MOV R0,R7 \ 00000128 1A0000EF SWI +26 3653 SMART_REDRAW(); \ 0000012C ........ BL SMART_REDRAW 3654 goto L_CONNECT; \ 00000130 390000EA B ??create_connect_4 3655 } \ ??create_connect_3: \ 00000134 6D1F8FE2 ADR R1,??create_connect_2 ;; "\n" \ 00000138 0700A0E1 MOV R0,R7 3656 strcat(logmsg,"\n"); \ 0000013C 170000EF SWI +23 3657 strcpy(logmsg,LG_GRSENDDNR); //strcat->strcpy \ 00000140 441F88E2 ADD R1,R8,#+272 \ 00000144 0700A0E1 MOV R0,R7 \ 00000148 1A0000EF SWI +26 3658 SMART_REDRAW(); \ 0000014C ........ BL SMART_REDRAW 3659 err=async_gethostbyname(hostbuf,&p_res,&DNR_ID); //03461351 3<70<19<81 \ 00000150 FC2F85E2 ADD R2,R5,#+1008 \ 00000154 0D10A0E1 MOV R1,SP \ 00000158 14008DE2 ADD R0,SP,#+20 \ 0000015C B60100EF SWI +438 \ 00000160 0030B0E1 MOVS R3,R0 3660 if (err) \ 00000164 1600000A BEQ ??create_connect_5 3661 { 3662 if ((err==0xC9)||(err==0xD6)) \ 00000168 C90053E3 CMP R3,#+201 \ 0000016C D6005313 CMPNE R3,#+214 \ 00000170 0600001A BNE ??create_connect_6 3663 { 3664 if (DNR_ID) \ 00000174 F00395E5 LDR R0,[R5, #+1008] \ 00000178 000050E3 CMP R0,#+0 \ 0000017C 1000000A BEQ ??create_connect_5 3665 { 3666 host_counter--; \ 00000180 F80395E5 LDR R0,[R5, #+1016] \ 00000184 010040E2 SUB R0,R0,#+1 \ 00000188 F80385E5 STR R0,[R5, #+1016] 3667 return; //Ждем готовности DNR \ 0000018C 390000EA B ??create_connect_7 3668 } 3669 } 3670 else 3671 { 3672 snprintf(logmsg,255,LG_GRDNRERROR,err); \ ??create_connect_6: \ 00000190 472F88E2 ADD R2,R8,#+284 \ 00000194 FF10A0E3 MOV R1,#+255 \ 00000198 0700A0E1 MOV R0,R7 \ 0000019C 1B0100EF SWI +283 3673 SMART_REDRAW(); \ 000001A0 ........ BL SMART_REDRAW 3674 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ ??create_connect_8: \ 000001A4 ........ LDR R0,??DataTable113 ;; RECONNECT_TIME \ 000001A8 0A20A0E1 MOV R2,R10 \ 000001AC 000090E5 LDR R0,[R0, #+0] \ 000001B0 D830A0E3 MOV R3,#+216 \ 000001B4 930001E0 MUL R1,R3,R0 \ 000001B8 0600A0E1 MOV R0,R6 \ 000001BC 4D0000EF SWI +77 3675 return; \ 000001C0 2C0000EA B ??create_connect_7 3676 } 3677 } 3678 if (p_res) \ ??create_connect_5: \ 000001C4 00009DE5 LDR R0,[SP, #+0] \ 000001C8 000050E3 CMP R0,#+0 \ 000001CC 3D00000A BEQ ??create_connect_9 3679 { 3680 if (p_res[3]) \ 000001D0 0C0090E5 LDR R0,[R0, #+12] \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 4200000A BEQ ??create_connect_10 3681 { 3682 strcpy(logmsg,buf); \ 000001DC 94108DE2 ADD R1,SP,#+148 \ 000001E0 0700A0E1 MOV R0,R7 \ 000001E4 1A0000EF SWI +26 3683 strcat(logmsg,"\n"); \ 000001E8 401F8FE2 ADR R1,??create_connect_2 ;; "\n" \ 000001EC 0700A0E1 MOV R0,R7 \ 000001F0 170000EF SWI +23 3684 strcpy(logmsg,LG_GRDNROK); \ 000001F4 4B1F88E2 ADD R1,R8,#+300 \ 000001F8 0700A0E1 MOV R0,R7 \ 000001FC 1A0000EF SWI +26 3685 SMART_REDRAW(); \ 00000200 ........ BL SMART_REDRAW 3686 DNR_TRIES=0; \ 00000204 F44385E5 STR R4,[R5, #+1012] 3687 sa.ip=p_res[3][0][0]; \ 00000208 00109DE5 LDR R1,[SP, #+0] \ 0000020C 0C1091E5 LDR R1,[R1, #+12] \ 00000210 001091E5 LDR R1,[R1, #+0] \ 00000214 001091E5 LDR R1,[R1, #+0] \ 00000218 08108DE5 STR R1,[SP, #+8] 3688 L_CONNECT: 3689 sock=socket(1,1,0); \ ??create_connect_4: \ 0000021C 0020A0E3 MOV R2,#+0 \ 00000220 0110A0E3 MOV R1,#+1 \ 00000224 0100A0E1 MOV R0,R1 \ 00000228 730100EF SWI +371 \ 0000022C 880385E5 STR R0,[R5, #+904] 3690 if (sock!=-1) \ 00000230 0B0050E1 CMP R0,R11 \ 00000234 1A00000A BEQ ??create_connect_11 3691 { 3692 sa.family=1; \ 00000238 0170A0E3 MOV R7,#+1 \ 0000023C B470CDE1 STRH R7,[SP, #+4] 3693 sa.port=htons(hostport); \ 00000240 0908A0E1 MOV R0,R9, LSL #+16 \ 00000244 2008A0E1 MOV R0,R0, LSR #+16 \ 00000248 7A0100EF SWI +378 \ 0000024C B600CDE1 STRH R0,[SP, #+6] 3694 // sa.ip=htonl(IP_ADDR(82,207,89,182)); 3695 if (connect(sock,&sa,sizeof(sa))!=-1) \ 00000250 880395E5 LDR R0,[R5, #+904] \ 00000254 1020A0E3 MOV R2,#+16 \ 00000258 04108DE2 ADD R1,SP,#+4 \ 0000025C 740100EF SWI +372 \ 00000260 0B0050E1 CMP R0,R11 \ 00000264 0500000A BEQ ??create_connect_12 3696 { 3697 connect_state=1; \ 00000268 847385E5 STR R7,[R5, #+900] 3698 TOTALRECEIVED=0; \ 0000026C 8C4385E5 STR R4,[R5, #+908] 3699 TOTALSENDED=0; \ 00000270 904385E5 STR R4,[R5, #+912] 3700 SMART_REDRAW(); \ ??create_connect_1: \ 00000274 ........ BL SMART_REDRAW \ ??create_connect_7: \ 00000278 45DF8DE2 ADD SP,SP,#+276 \ 0000027C F08FBDE8 POP {R4-R11,PC} 3701 } 3702 else 3703 { 3704 closesocket(sock); \ ??create_connect_12: \ 00000280 880395E5 LDR R0,[R5, #+904] \ 00000284 760100EF SWI +374 3705 sock=-1; \ 00000288 88B385E5 STR R11,[R5, #+904] 3706 LockSched(); \ 0000028C 460100EF SWI +326 3707 ShowMSG(1,(int)LG_MSGCANTCONN); \ 00000290 511F88E2 ADD R1,R8,#+324 \ 00000294 0100A0E3 MOV R0,#+1 \ 00000298 480100EF SWI +328 3708 UnlockSched(); \ 0000029C 470100EF SWI +327 3709 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 000002A0 BFFFFFEA B ??create_connect_8 3710 3711 } 3712 } 3713 else 3714 { 3715 LockSched(); \ ??create_connect_11: \ 000002A4 460100EF SWI +326 3716 ShowMSG(1,(int)LG_MSGCANTCRSC); \ 000002A8 581F88E2 ADD R1,R8,#+352 \ 000002AC 0100A0E3 MOV R0,#+1 \ 000002B0 480100EF SWI +328 3717 UnlockSched(); \ 000002B4 470100EF SWI +327 3718 //Не осилили создания сокета, закрываем GPRS-сессию 3719 GPRS_OnOff(0,1); \ 000002B8 0110A0E3 MOV R1,#+1 \ 000002BC 0000A0E3 MOV R0,#+0 \ 000002C0 8E0100EF SWI +398 \ 000002C4 EBFFFFEA B ??create_connect_7 3720 } 3721 } 3722 } 3723 else 3724 { 3725 DNR_TRIES--; \ ??create_connect_9: \ 000002C8 F40395E5 LDR R0,[R5, #+1012] \ 000002CC 010040E2 SUB R0,R0,#+1 \ 000002D0 F40385E5 STR R0,[R5, #+1012] 3726 LockSched(); \ 000002D4 460100EF SWI +326 3727 ShowMSG(1,(int)LG_MSGHOSTNFND); \ 000002D8 631F88E2 ADD R1,R8,#+396 \ 000002DC 0100A0E3 MOV R0,#+1 \ 000002E0 480100EF SWI +328 3728 UnlockSched(); \ 000002E4 470100EF SWI +327 \ ??create_connect_10: \ 000002E8 45DF8DE2 ADD SP,SP,#+276 ;; stack cleaning \ 000002EC F08FBDE8 POP {R4-R11,PC} ;; return \ ??create_connect_2: \ 000002F0 0A000000 DC8 "\n",+0,+0 \ 000002F4 ........ DC32 NATICQ_HOST 3729 } 3730 } 3731 3732 #ifdef SEND_TIMER 3733 GBSTMR send_tmr; 3734 #endif 3735 \ In segment CODE, align 4, keep-with-next 3736 void ClearSendQ(void) 3737 { \ ClearSendQ: \ 00000000 10402DE9 PUSH {R4,LR} 3738 mfree((void *)sendq_p); \ 00000004 ........ LDR R4,??DataTable117 ;; icons \ 00000008 A00394E5 LDR R0,[R4, #+928] \ 0000000C 150000EF SWI +21 3739 sendq_p=NULL; \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 A00384E5 STR R0,[R4, #+928] 3740 sendq_l=NULL; \ 00000018 9C0384E5 STR R0,[R4, #+924] 3741 #ifdef SEND_TIMER 3742 GBS_DelTimer(&send_tmr); 3743 #endif 3744 } \ 0000001C 1080BDE8 POP {R4,PC} ;; return 3745 \ In segment CODE, align 4, keep-with-next 3746 void end_socket(void) 3747 { \ end_socket: \ 00000000 10402DE9 PUSH {R4,LR} 3748 if (sock>=0) \ 00000004 ........ LDR R4,??DataTable117 ;; icons \ 00000008 880394E5 LDR R0,[R4, #+904] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD48 POPMI {R4,PC} 3749 { 3750 shutdown(sock,2); \ 00000014 0210A0E3 MOV R1,#+2 \ 00000018 770100EF SWI +375 3751 closesocket(sock); \ 0000001C 880394E5 LDR R0,[R4, #+904] \ 00000020 760100EF SWI +374 3752 } 3753 #ifdef SEND_TIMER 3754 GBS_DelTimer(&send_tmr); 3755 #endif 3756 } \ 00000024 1080BDE8 POP {R4,PC} ;; return 3757 3758 #ifdef SEND_TIMER 3759 static void resend(void) 3760 { 3761 void SendAnswer(int dummy, TPKT *p); 3762 SUBPROC((void*)SendAnswer,0,0); 3763 } 3764 #endif 3765 \ In segment CODE, align 4, keep-with-next 3766 void SendAnswer(int dummy, TPKT *p) 3767 { \ SendAnswer: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 3768 int i; 3769 int j; 3770 if (connect_state<2) \ 00000004 ........ LDR R4,??DataTable117 ;; icons \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C 840394E5 LDR R0,[R4, #+900] \ 00000010 020050E3 CMP R0,#+2 \ 00000014 020000AA BGE ??SendAnswer_0 3771 { 3772 mfree(p); \ 00000018 0600A0E1 MOV R0,R6 \ 0000001C 150000EF SWI +21 3773 return; \ 00000020 F083BDE8 POP {R4-R9,PC} 3774 } 3775 if (p) \ ??SendAnswer_0: \ 00000024 000056E3 CMP R6,#+0 \ 00000028 2600000A BEQ ??SendAnswer_1 3776 { 3777 j=sizeof(PKT)+p->pkt.data_len; //Размер пакета \ 0000002C B600D6E1 LDRH R0,[R6, #+6] \ 00000030 085080E2 ADD R5,R0,#+8 3778 TOTALSENDED+=j; \ 00000034 900394E5 LDR R0,[R4, #+912] \ 00000038 000085E0 ADD R0,R5,R0 \ 0000003C 900384E5 STR R0,[R4, #+912] 3779 ALLTOTALSENDED+=j; //by BoBa 10.07 \ 00000040 980394E5 LDR R0,[R4, #+920] \ 00000044 000085E0 ADD R0,R5,R0 \ 00000048 980384E5 STR R0,[R4, #+920] 3780 //Проверяем, не надо ли добавить в очередь 3781 if (sendq_p) \ 0000004C A00394E5 LDR R0,[R4, #+928] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0F00000A BEQ ??SendAnswer_2 3782 { 3783 //Есть очередь, добавляем в нее 3784 sendq_p=realloc((void *)sendq_p,sendq_l+j); \ 00000058 9C1394E5 LDR R1,[R4, #+924] \ 0000005C 011085E0 ADD R1,R5,R1 \ 00000060 BA0000EF SWI +186 \ 00000064 A00384E5 STR R0,[R4, #+928] 3785 memcpy((char *)sendq_p+sendq_l,p,j); \ 00000068 9C0394E5 LDR R0,[R4, #+924] \ 0000006C A03394E5 LDR R3,[R4, #+928] \ 00000070 0520A0E1 MOV R2,R5 \ 00000074 0610A0E1 MOV R1,R6 \ 00000078 030080E0 ADD R0,R0,R3 \ 0000007C 1E0100EF SWI +286 3786 mfree(p); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 150000EF SWI +21 3787 sendq_l+=j; \ 00000088 9C0394E5 LDR R0,[R4, #+924] \ 0000008C 000085E0 ADD R0,R5,R0 \ 00000090 9C0384E5 STR R0,[R4, #+924] 3788 return; \ 00000094 F083BDE8 POP {R4-R9,PC} 3789 } 3790 sendq_p=p; \ ??SendAnswer_2: \ 00000098 A06384E5 STR R6,[R4, #+928] 3791 sendq_l=j; \ 0000009C 9C5384E5 STR R5,[R4, #+924] \ 000000A0 080000EA B ??SendAnswer_1 3792 } 3793 //Отправляем уже существующее в очереди 3794 while((i=sendq_l)!=0) 3795 { 3796 if (i>0x400) i=0x400; 3797 j=send(sock,(void *)sendq_p,i,0); 3798 snprintf(logmsg,255,"send res %d",j); 3799 SMART_REDRAW(); 3800 if (j<0) 3801 { 3802 j=*socklasterr(); 3803 if ((j==0xC9)||(j==0xD6)) 3804 { 3805 //Передали что хотели 3806 strcpy(logmsg,"Send delayed..."); 3807 return; //Видимо, надо ждать сообщения ENIP_BUFFER_FREE 3808 } 3809 else 3810 { 3811 //Ошибка 3812 LockSched(); 3813 ShowMSG(1,(int)"Send error!"); 3814 UnlockSched(); 3815 end_socket(); 3816 return; 3817 } 3818 } 3819 memcpy((void *)sendq_p,(char *)sendq_p+j,sendq_l-=j); //Удалили переданное \ ??SendAnswer_3: \ 000000A4 9C0394E5 LDR R0,[R4, #+924] \ 000000A8 052040E0 SUB R2,R0,R5 \ 000000AC 9C2384E5 STR R2,[R4, #+924] \ 000000B0 A00394E5 LDR R0,[R4, #+928] \ 000000B4 001085E0 ADD R1,R5,R0 \ 000000B8 1E0100EF SWI +286 3820 if (j` \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 400E80E3 ORR R0,R0,#0x400 \ 000000E8 000057E1 CMP R7,R0 \ 000000EC 880394E5 LDR R0,[R4, #+904] \ 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 A400A0E3 MOV R0,#+164 \ 00000108 640D80E3 ORR R0,R0,#0x1900 \ 0000010C 048080E0 ADD R8,R0,R4 \ 00000110 0530A0E1 MOV R3,R5 \ 00000114 0920A0E1 MOV R2,R9 \ 00000118 FF10A0E3 MOV R1,#+255 \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 1B0100EF SWI +283 \ 00000124 ........ BL SMART_REDRAW \ 00000128 000055E3 CMP R5,#+0 \ 0000012C DCFFFF5A BPL ??SendAnswer_3 \ 00000130 7C8100EF SWI +33148 \ 00000134 005090E5 LDR R5,[R0, #+0] \ 00000138 C90055E3 CMP R5,#+201 \ 0000013C D6005513 CMPNE R5,#+214 \ 00000140 0300001A BNE ??SendAnswer_6 \ 00000144 0C1089E2 ADD R1,R9,#+12 \ 00000148 0800A0E1 MOV R0,R8 \ 0000014C 1A0000EF SWI +26 \ 00000150 F083BDE8 POP {R4-R9,PC} \ ??SendAnswer_6: \ 00000154 460100EF SWI +326 \ 00000158 1C1089E2 ADD R1,R9,#+28 \ 0000015C 0100A0E3 MOV R0,#+1 \ 00000160 480100EF SWI +328 \ 00000164 470100EF SWI +327 \ 00000168 ........ BL end_socket \ 0000016C F083BDE8 POP {R4-R9,PC} 3829 } 3830 mfree((void *)sendq_p); \ ??SendAnswer_4: \ 00000170 0100A0E1 MOV R0,R1 \ 00000174 150000EF SWI +21 3831 sendq_p=NULL; \ 00000178 A06384E5 STR R6,[R4, #+928] 3832 } \ 0000017C F083BDE8 POP {R4-R9,PC} ;; return \ ??SendAnswer_5: \ 00000180 ........ DC32 `?` 3833 3834 \ In segment CODE, align 4, keep-with-next 3835 void send_login(int dummy, TPKT *p) 3836 { 3837 connect_state=2; 3838 char rev[16]; 3839 //Кто будет менять в этом месте идентификатор клиента, буду банить на уровне сервера!!! 3840 //А Вова будет банить на форуме! 3841 snprintf(rev,9,"Sie_%04d",__SVN_REVISION__); \ send_login: \ 00000000 88209FE5 LDR R2,??send_login_0 ;; `?` \ 00000004 F0402DE9 PUSH {R4-R7,LR} \ 00000008 ........ LDR R6,??DataTable117 ;; icons \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 0200A0E3 MOV R0,#+2 \ 0000001C 840386E5 STR R0,[R6, #+900] \ 00000020 0A30A0E3 MOV R3,#+10 \ 00000024 803E83E3 ORR R3,R3,#0x800 \ 00000028 0910A0E3 MOV R1,#+9 \ 0000002C 0D00A0E1 MOV R0,SP \ 00000030 1B0100EF SWI +283 3842 3843 TPKT *p2=malloc(sizeof(PKT)+8); \ 00000034 1000A0E3 MOV R0,#+16 \ 00000038 140000EF SWI +20 \ 0000003C 0070A0E1 MOV R7,R0 3844 p2->pkt.uin=UIN; \ 00000040 ........ LDR R0,??DataTable119 ;; UIN 3845 p2->pkt.type=T_SETCLIENT_ID; 3846 p2->pkt.data_len=8; 3847 memcpy(p2->data,rev,8); \ 00000044 0820A0E3 MOV R2,#+8 \ 00000048 000090E5 LDR R0,[R0, #+0] \ 0000004C 0D10A0E1 MOV R1,SP \ 00000050 000087E5 STR R0,[R7, #+0] \ 00000054 2000A0E3 MOV R0,#+32 \ 00000058 B400C7E1 STRH R0,[R7, #+4] \ 0000005C 0800A0E3 MOV R0,#+8 \ 00000060 B600C7E1 STRH R0,[R7, #+6] \ 00000064 080087E2 ADD R0,R7,#+8 \ 00000068 1E0100EF SWI +286 3848 SendAnswer(0,p2); \ 0000006C 0710A0E1 MOV R1,R7 \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 ........ BL SendAnswer 3849 SendAnswer(dummy,p); \ 00000078 0510A0E1 MOV R1,R5 \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 ........ BL SendAnswer 3850 RXstate=-(int)sizeof(PKT); \ 00000084 0700E0E3 MVN R0,#+7 \ 00000088 800386E5 STR R0,[R6, #+896] 3851 } \ 0000008C FF80BDE8 POP {R0-R7,PC} ;; return \ ??send_login_0: \ 00000090 ........ DC32 `?` 3852 \ In segment CODE, align 4, keep-with-next 3853 void do_ping(void) 3854 { \ do_ping: \ 00000000 00402DE9 PUSH {LR} 3855 TPKT *pingp=malloc(sizeof(PKT)); \ 00000004 0800A0E3 MOV R0,#+8 \ 00000008 140000EF SWI +20 3856 pingp->pkt.uin=UIN; \ 0000000C ........ LDR R1,??DataTable119 ;; UIN \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 3857 pingp->pkt.type=0; \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C B410C0E1 STRH R1,[R0, #+4] 3858 pingp->pkt.data_len=0; \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3859 SendAnswer(0,pingp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 0040BDE8 POP {LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 3860 } 3861 \ In segment CODE, align 4, keep-with-next 3862 void SendMSGACK(int i) 3863 { \ SendMSGACK: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3864 TPKT *ackp=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 3865 ackp->pkt.uin=i; \ 00000010 004080E5 STR R4,[R0, #+0] 3866 ackp->pkt.type=T_MSGACK; \ 00000014 1710A0E3 MOV R1,#+23 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 3867 ackp->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3868 SendAnswer(0,ackp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 1040BDE8 POP {R4,LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 3869 } 3870 \ In segment CODE, align 4, keep-with-next 3871 void RequestXText(unsigned int uin) 3872 { \ RequestXText: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3873 TPKT *p=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 3874 p->pkt.uin=uin; \ 00000010 004080E5 STR R4,[R0, #+0] 3875 p->pkt.type=T_XTEXT_REQ; \ 00000014 1810A0E3 MOV R1,#+24 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 3876 p->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3877 SUBPROC((void *)SendAnswer,0,p); \ 00000024 0020A0E1 MOV R2,R0 \ 00000028 ........ LDR R0,??DataTable120 ;; SendAnswer \ 0000002C 710100EF SWI +369 3878 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 3879 3880 extern int main2_count; 3881 3882 int ping_time; 3883 char I_UIN[9]; 3884 \ In segment CODE, align 4, keep-with-next 3885 void get_answer(void) 3886 { \ get_answer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3887 void *p; 3888 int i=RXstate; \ 00000004 ........ LDR R5,??DataTable131 ;; icons \ 00000008 1CD04DE2 SUB SP,SP,#+28 \ 0000000C 40DE4DE2 SUB SP,SP,#+1024 3889 int j; 3890 int n; 3891 char rb[1024]; 3892 char *rp=rb; 3893 if (connect_state<2) return; \ 00000010 840395E5 LDR R0,[R5, #+900] \ 00000014 808395E5 LDR R8,[R5, #+896] \ 00000018 1C108DE2 ADD R1,SP,#+28 \ 0000001C 00108DE5 STR R1,[SP, #+0] \ 00000020 020050E3 CMP R0,#+2 \ 00000024 640100BA BLT ??get_answer_1 \ 00000028 0A0078E3 CMN R8,#+10 \ 0000002C 6201000A BEQ ??get_answer_1 3894 if (i==EOP) return; 3895 j=recv(sock,rb,sizeof(rb),0); \ 00000030 880395E5 LDR R0,[R5, #+904] \ 00000034 0030A0E3 MOV R3,#+0 \ 00000038 402EA0E3 MOV R2,#+1024 \ 0000003C 780100EF SWI +376 \ 00000040 0060A0E1 MOV R6,R0 \ 00000044 0990A0E3 MOV R9,#+9 \ 00000048 429C89E3 ORR R9,R9,#0x4200 \ 0000004C 0E0000EA B ??get_answer_2 3896 while(j>0) 3897 { 3898 if (i<0) 3899 { 3900 //Принимаем заголовок 3901 n=-i; //Требуемое количество байт 3902 if (j=0) 3909 { 3910 //Принимаем тельце ;) 3911 n=RXbuf.pkt.data_len; //Всего в тельце 3912 if (n>16383) 3913 { 3914 //Слишком много 3915 strcpy(logmsg,LG_GRBADPACKET); 3916 end_socket(); 3917 RXstate=EOP; 3918 return; 3919 } 3920 n-=i; //Количество требуемых байт (общая длинна тельца-текущая позиция) 3921 if (n>0) 3922 { 3923 if (jisIndividSet)//Если индивидуальные натсройки(меню на долгое вправо) 4008 { 4009 if(t->issound) Play(sndMsg);//если звук включен то играем 4010 break; 4011 } 4012 else 4013 if(t->automsgcount < automsgcount && away_m)//если сигналы автоответчика 4014 { 4015 Play(sndMsg); 4016 break; 4017 } 4018 else 4019 if(t->isaccess)//если удаленный доступ ;) 4020 { 4021 if(t->signals) Play(sndMsg); 4022 break; 4023 } 4024 else//в остальный случаях 4025 Play(sndMsg); 4026 } 4027 else 4028 { 4029 uins=RXbuf.pkt.uin; 4030 volatile int hFile_ex; 4031 unsigned int io_error_ex = 0; 4032 sprintf(talk_sound, "%s%d.wav", sndMsg2, uins); 4033 hFile_ex = fopen(talk_sound,A_ReadOnly + A_BIN,P_READ, &io_error_ex); 4034 if(hFile_ex!=-1) 4035 { 4036 fclose(hFile_ex, &io_error_ex); 4037 Play(talk_sound); 4038 } 4039 else 4040 Play(sndMsg); 4041 } 4042 } 4043 break; 4044 case T_SSLRESP: 4045 LockSched(); 4046 ShowMSG(1,(int)RXbuf.data); 4047 UnlockSched(); 4048 break; 4049 case T_SRV_ACK: 4050 if (FindContactLOGQByAck(&RXbuf)) Play(sndMsgSent); 4051 case T_CLIENT_ACK: 4052 p=malloc(sizeof(PKT)+2); 4053 memcpy(p,&RXbuf,sizeof(PKT)+2); 4054 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); 4055 break; 4056 case T_ECHORET: 4057 { 4058 TDate d; 4059 TTime t; 4060 TTime *pt=(TTime *)(RXbuf.data); 4061 int s1; 4062 int s2; 4063 GetDateTime(&d,&t); 4064 s1=t.hour*3600+t.min*60+t.sec; 4065 s2=pt->hour*3600+pt->min*60+pt->sec; 4066 s1-=s2; 4067 if (s1<0) s1+=86400; 4068 snprintf(logmsg,255,"Ping %d-%d seconds!",s1,s1+1); 4069 sprintf(PINGO, "Ping: %d sec",s1); 4070 LockSched(); 4071 if(janis==1) 4072 { 4073 ShowMSG(1,(int)logmsg); 4074 Play(pingsnd); 4075 janis=0; 4076 } 4077 else 4078 { 4079 if(ping_time==0) 4080 { 4081 ping_time=ping_time_config; 4082 Play(pingsnd); 4083 } 4084 else 4085 ping_time--; 4086 } 4087 UnlockSched(); 4088 } 4089 break; 4090 case T_LASTPRIVACY: 4091 n=i+sizeof(PKT); \ ??get_answer_3: \ 00000050 0040A0E1 MOV R4,R0 4092 p=malloc(n); \ ??get_answer_4: \ 00000054 140000EF SWI +20 \ 00000058 00B0A0E1 MOV R11,R0 4093 memcpy(p,&RXbuf,n); \ 0000005C 0420A0E1 MOV R2,R4 \ ??get_answer_5: \ 00000060 0710A0E1 MOV R1,R7 \ 00000064 1E0100EF SWI +286 4094 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); \ 00000068 880395E5 LDR R0,[R5, #+904] \ 0000006C 0B30A0E1 MOV R3,R11 \ 00000070 01002DE9 PUSH {R0} \ 00000074 0020A0E3 MOV R2,#+0 \ 00000078 0810A0E1 MOV R1,R8 \ 0000007C 0900A0E1 MOV R0,R9 \ 00000080 000100EF SWI +256 \ ??get_answer_6: \ 00000084 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning 4095 break; 4096 } 4097 i=-(int)sizeof(PKT); //А может еще есть данные \ ??get_answer_7: \ 00000088 0780E0E3 MVN R8,#+7 \ ??get_answer_2: \ 0000008C 010056E3 CMP R6,#+1 \ 00000090 480100BA BLT ??get_answer_8 \ 00000094 30759FE5 LDR R7,??get_answer_9+0x4 ;; RXbuf \ 00000098 000058E3 CMP R8,#+0 \ 0000009C 0C00005A BPL ??get_answer_10 \ 000000A0 00109DE5 LDR R1,[SP, #+0] \ 000000A4 004068E2 RSB R4,R8,#+0 \ 000000A8 040056E1 CMP R6,R4 \ 000000AC 0640A0B1 MOVLT R4,R6 \ 000000B0 0420A0E1 MOV R2,R4 \ 000000B4 070088E0 ADD R0,R8,R7 \ 000000B8 080080E2 ADD R0,R0,#+8 \ 000000BC 1E0100EF SWI +286 \ 000000C0 00109DE5 LDR R1,[SP, #+0] \ 000000C4 088084E0 ADD R8,R4,R8 \ 000000C8 046046E0 SUB R6,R6,R4 \ 000000CC 011084E0 ADD R1,R4,R1 \ 000000D0 00108DE5 STR R1,[SP, #+0] \ ??get_answer_10: \ 000000D4 000058E3 CMP R8,#+0 \ 000000D8 EBFFFF4A BMI ??get_answer_2 \ 000000DC B640D7E1 LDRH R4,[R7, #+6] \ 000000E0 A400A0E3 MOV R0,#+164 \ 000000E4 640D80E3 ORR R0,R0,#0x1900 \ 000000E8 05A080E0 ADD R10,R0,R5 \ 000000EC 400C54E3 CMP R4,#+16384 \ 000000F0 080000BA BLT ??get_answer_11 \ 000000F4 D4149FE5 LDR R1,??get_answer_9+0x8 ;; Canvas + 416 \ 000000F8 0A00A0E1 MOV R0,R10 \ 000000FC 1A0000EF SWI +26 \ 00000100 ........ BL end_socket \ 00000104 0900E0E3 MVN R0,#+9 \ 00000108 800385E5 STR R0,[R5, #+896] \ 0000010C 1CD08DE2 ADD SP,SP,#+28 \ 00000110 40DE8DE2 ADD SP,SP,#+1024 \ 00000114 F08FBDE8 POP {R4-R11,PC} \ ??get_answer_11: \ 00000118 084044E0 SUB R4,R4,R8 \ 0000011C 010054E3 CMP R4,#+1 \ 00000120 0B0000BA BLT ??get_answer_12 \ 00000124 00109DE5 LDR R1,[SP, #+0] \ 00000128 040056E1 CMP R6,R4 \ 0000012C 0640A0B1 MOVLT R4,R6 \ 00000130 0420A0E1 MOV R2,R4 \ 00000134 070088E0 ADD R0,R8,R7 \ 00000138 080080E2 ADD R0,R0,#+8 \ 0000013C 1E0100EF SWI +286 \ 00000140 00109DE5 LDR R1,[SP, #+0] \ 00000144 088084E0 ADD R8,R4,R8 \ 00000148 046046E0 SUB R6,R6,R4 \ 0000014C 011084E0 ADD R1,R4,R1 \ 00000150 00108DE5 STR R1,[SP, #+0] \ ??get_answer_12: \ 00000154 B600D7E1 LDRH R0,[R7, #+6] \ 00000158 080050E1 CMP R0,R8 \ 0000015C CAFFFF1A BNE ??get_answer_2 \ 00000160 8C1395E5 LDR R1,[R5, #+908] \ 00000164 080088E2 ADD R0,R8,#+8 \ 00000168 011080E0 ADD R1,R0,R1 \ 0000016C 8C1385E5 STR R1,[R5, #+908] \ 00000170 941395E5 LDR R1,[R5, #+916] \ 00000174 0020A0E3 MOV R2,#+0 \ 00000178 011080E0 ADD R1,R0,R1 \ 0000017C 941385E5 STR R1,[R5, #+916] \ 00000180 071088E0 ADD R1,R8,R7 \ 00000184 0820C1E5 STRB R2,[R1, #+8] \ 00000188 B410D7E1 LDRH R1,[R7, #+4] \ 0000018C 094088E2 ADD R4,R8,#+9 \ 00000190 AE80A0E3 MOV R8,#+174 \ 00000194 DE8C88E3 ORR R8,R8,#0xDE00 \ 00000198 031041E2 SUB R1,R1,#+3 \ 0000019C 1C0051E3 CMP R1,#+28 \ 000001A0 B8FFFF8A BHI ??get_answer_7 \ 000001A4 022F8FE2 ADR R2,??get_answer_0 \ 000001A8 8110A0E1 MOV R1,R1, LSL #+1 \ 000001AC F12092E1 LDRSH R2,[R2, R1] \ 000001B0 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??get_answer_0: \ 000001B4 48000E00B4FF DC16 +72,+14,+65460,+65 \ 4100 \ 000001BC 2900B4FF2B00 DC16 +41,+65460,+43,+65460 \ B4FF \ 000001C4 B4FFB4FFB000 DC16 +65460,+65460,+176,+65460 \ B4FF \ 000001CC B4FFB600BC00 DC16 +65460,+182,+188,+65460 \ B4FF \ 000001D4 C10029002900 DC16 +193,+41,+41,+65460 \ B4FF \ 000001DC B4FFB4FF2900 DC16 +65460,+65460,+41,+65460 \ B4FF \ 000001E4 B4FFB4FFB4FF DC16 +65460,+65460,+65460,+65460 \ B4FF \ 000001EC A6FF0000 DC16 +65446,+0 \ ??get_answer_13: \ 000001F0 0400A0E1 MOV R0,R4 \ 000001F4 140000EF SWI +20 \ 000001F8 00B0A0E1 MOV R11,R0 \ 000001FC 0420A0E1 MOV R2,R4 \ 00000200 0710A0E1 MOV R1,R7 \ 00000204 1E0100EF SWI +286 \ 00000208 880395E5 LDR R0,[R5, #+904] \ 0000020C 0B30A0E1 MOV R3,R11 \ 00000210 01002DE9 PUSH {R0} \ 00000214 0020A0E3 MOV R2,#+0 \ 00000218 0810A0E1 MOV R1,R8 \ 0000021C 0900A0E1 MOV R0,R9 \ 00000220 000100EF SWI +256 \ 00000224 A8039FE5 LDR R0,??get_answer_9+0xC ;; sndStartup \ 00000228 ........ BL Play \ 0000022C 083087E2 ADD R3,R7,#+8 \ 00000230 E42F8FE2 ADR R2,??get_answer_9 ;; "%s" \ 00000234 FF10A0E3 MOV R1,#+255 \ 00000238 0A00A0E1 MOV R0,R10 \ 0000023C 1B0100EF SWI +283 \ 00000240 0300A0E3 MOV R0,#+3 \ 00000244 840385E5 STR R0,[R5, #+900] \ 00000248 F80395E5 LDR R0,[R5, #+1016] \ 0000024C 010040E2 SUB R0,R0,#+1 \ 00000250 F80385E5 STR R0,[R5, #+1016] \ 00000254 ........ BL SMART_REDRAW \ 00000258 89FFFFEA B ??get_answer_6 \ ??get_answer_14: \ 0000025C 0400A0E1 MOV R0,R4 \ 00000260 7BFFFFEA B ??get_answer_4 \ ??get_answer_15: \ 00000264 0040A0E1 MOV R4,R0 \ 00000268 140000EF SWI +20 \ 0000026C 00B0A0E1 MOV R11,R0 \ 00000270 0420A0E1 MOV R2,R4 \ 00000274 0710A0E1 MOV R1,R7 \ 00000278 1E0100EF SWI +286 \ 0000027C B800D7E1 LDRH R0,[R7, #+8] \ 00000280 50239FE5 LDR R2,??get_answer_9+0x10 ;; Canvas + 428 \ 00000284 FF10A0E3 MOV R1,#+255 \ 00000288 01002DE9 PUSH {R0} \ 0000028C 003097E5 LDR R3,[R7, #+0] \ 00000290 0A00A0E1 MOV R0,R10 \ 00000294 1B0100EF SWI +283 \ 00000298 880395E5 LDR R0,[R5, #+904] \ 0000029C 0B30A0E1 MOV R3,R11 \ 000002A0 01002DE9 PUSH {R0} \ 000002A4 0020A0E3 MOV R2,#+0 \ 000002A8 0810A0E1 MOV R1,R8 \ 000002AC 0900A0E1 MOV R0,R9 \ 000002B0 000100EF SWI +256 \ 000002B4 08D08DE2 ADD SP,SP,#+8 \ 000002B8 72FFFFEA B ??get_answer_7 \ ??get_answer_16: \ 000002BC 18239FE5 LDR R2,??get_answer_9+0x14 ;; Canvas + 440 \ 000002C0 083087E2 ADD R3,R7,#+8 \ 000002C4 FF10A0E3 MOV R1,#+255 \ 000002C8 0A00A0E1 MOV R0,R10 \ 000002CC 1B0100EF SWI +283 \ 000002D0 ........ BL SMART_REDRAW \ 000002D4 6BFFFFEA B ??get_answer_7 \ ??get_answer_17: \ 000002D8 0400A0E1 MOV R0,R4 \ 000002DC 140000EF SWI +20 \ 000002E0 00B0A0E1 MOV R11,R0 \ 000002E4 0420A0E1 MOV R2,R4 \ 000002E8 0710A0E1 MOV R1,R7 \ 000002EC 1E0100EF SWI +286 \ 000002F0 08008BE2 ADD R0,R11,#+8 \ 000002F4 030000EA B ??get_answer_18 \ ??get_answer_19: \ 000002F8 030051E3 CMP R1,#+3 \ 000002FC 2010A0B3 MOVLT R1,#+32 \ 00000300 0010C0B5 STRBLT R1,[R0, #+0] \ 00000304 010080E2 ADD R0,R0,#+1 \ ??get_answer_18: \ 00000308 0010D0E5 LDRB R1,[R0, #+0] \ 0000030C 000051E3 CMP R1,#+0 \ 00000310 F8FFFF1A BNE ??get_answer_19 \ 00000314 ........ LDR R0,??DataTable122 ;; addIconBar \ 00000318 002097E5 LDR R2,[R7, #+0] \ 0000031C BC129FE5 LDR R1,??get_answer_9+0x18 ;; Canvas + 448 \ 00000320 280185E5 STR R0,[R5, #+296] \ 00000324 8C00A0E3 MOV R0,#+140 \ 00000328 700D80E3 ORR R0,R0,#0x1C00 \ 0000032C 054080E0 ADD R4,R0,R5 \ 00000330 0400A0E1 MOV R0,R4 \ 00000334 160000EF SWI +22 \ 00000338 ........ LDR R0,??DataTable123 ;; ignor_list \ 0000033C 0410A0E1 MOV R1,R4 \ 00000340 180100EF SWI +280 \ 00000344 000050E3 CMP R0,#+0 \ 00000348 4EFFFF1A BNE ??get_answer_7 \ 0000034C 90229FE5 LDR R2,??get_answer_9+0x1C ;; Canvas + 456 \ 00000350 90429FE5 LDR R4,??get_answer_9+0x20 ;; sndMsg \ 00000354 080087E2 ADD R0,R7,#+8 \ 00000358 01002DE9 PUSH {R0} \ 0000035C 003097E5 LDR R3,[R7, #+0] \ 00000360 FF10A0E3 MOV R1,#+255 \ 00000364 0A00A0E1 MOV R0,R10 \ 00000368 1B0100EF SWI +283 \ 0000036C 8C0395E5 LDR R0,[R5, #+908] \ 00000370 ........ BL SendMSGACK \ 00000374 880395E5 LDR R0,[R5, #+904] \ 00000378 0B30A0E1 MOV R3,R11 \ 0000037C 01002DE9 PUSH {R0} \ 00000380 0020A0E3 MOV R2,#+0 \ 00000384 0810A0E1 MOV R1,R8 \ 00000388 0900A0E1 MOV R0,R9 \ 0000038C 000100EF SWI +256 \ 00000390 ........ BL SMART_REDRAW \ 00000394 ........ LDR R0,??DataTable124 ;; extended_sounds \ 00000398 000090E5 LDR R0,[R0, #+0] \ 0000039C 08D08DE2 ADD SP,SP,#+8 \ 000003A0 000050E3 CMP R0,#+0 \ 000003A4 000097E5 LDR R0,[R7, #+0] \ 000003A8 1A00001A BNE ??get_answer_20 \ 000003AC ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000003B0 641090E5 LDR R1,[R0, #+100] \ 000003B4 000051E3 CMP R1,#+0 \ 000003B8 0500000A BEQ ??get_answer_21 \ 000003BC 6C0090E5 LDR R0,[R0, #+108] \ 000003C0 000050E3 CMP R0,#+0 \ 000003C4 2FFFFF0A BEQ ??get_answer_7 \ ??get_answer_22: \ 000003C8 0400A0E1 MOV R0,R4 \ ??get_answer_23: \ 000003CC ........ BL Play \ 000003D0 2CFFFFEA B ??get_answer_7 \ ??get_answer_21: \ 000003D4 ........ LDR R2,??DataTable125 ;; automsgcount \ 000003D8 881090E5 LDR R1,[R0, #+136] \ 000003DC 002092E5 LDR R2,[R2, #+0] \ 000003E0 020051E1 CMP R1,R2 \ 000003E4 0200002A BCS ??get_answer_24 \ 000003E8 2C1395E5 LDR R1,[R5, #+812] \ 000003EC 000051E3 CMP R1,#+0 \ 000003F0 F4FFFF1A BNE ??get_answer_22 \ ??get_answer_24: \ 000003F4 841090E5 LDR R1,[R0, #+132] \ 000003F8 000051E3 CMP R1,#+0 \ 000003FC 0300000A BEQ ??get_answer_25 \ 00000400 800090E5 LDR R0,[R0, #+128] \ 00000404 000050E3 CMP R0,#+0 \ 00000408 1EFFFF0A BEQ ??get_answer_7 \ 0000040C EDFFFFEA B ??get_answer_22 \ ??get_answer_25: \ 00000410 0400A0E1 MOV R0,R4 \ 00000414 ECFFFFEA B ??get_answer_23 \ ??get_answer_20: \ 00000418 CC219FE5 LDR R2,??get_answer_9+0x24 ;; sndMsg2 \ 0000041C DC0285E5 STR R0,[R5, #+732] \ 00000420 0010A0E3 MOV R1,#+0 \ 00000424 08108DE5 STR R1,[SP, #+8] \ 00000428 DC3295E5 LDR R3,[R5, #+732] \ 0000042C BC119FE5 LDR R1,??get_answer_9+0x28 ;; Canvas + 468 \ 00000430 7C70A0E3 MOV R7,#+124 \ 00000434 507E87E3 ORR R7,R7,#0x500 \ 00000438 050087E0 ADD R0,R7,R5 \ 0000043C 160000EF SWI +22 \ 00000440 08308DE2 ADD R3,SP,#+8 \ 00000444 8020A0E3 MOV R2,#+128 \ 00000448 801CA0E3 MOV R1,#+32768 \ 0000044C 050087E0 ADD R0,R7,R5 \ 00000450 0A0000EF SWI +10 \ 00000454 04008DE5 STR R0,[SP, #+4] \ 00000458 04009DE5 LDR R0,[SP, #+4] \ 0000045C 010070E3 CMN R0,#+1 \ 00000460 EAFFFF0A BEQ ??get_answer_25 \ 00000464 04009DE5 LDR R0,[SP, #+4] \ 00000468 08108DE2 ADD R1,SP,#+8 \ 0000046C 0D0000EF SWI +13 \ 00000470 050087E0 ADD R0,R7,R5 \ 00000474 D4FFFFEA B ??get_answer_23 \ ??get_answer_26: \ 00000478 460100EF SWI +326 \ 0000047C 081087E2 ADD R1,R7,#+8 \ 00000480 0100A0E3 MOV R0,#+1 \ 00000484 480100EF SWI +328 \ ??get_answer_27: \ 00000488 470100EF SWI +327 \ 0000048C FDFEFFEA B ??get_answer_7 \ ??get_answer_28: \ 00000490 0700A0E1 MOV R0,R7 \ 00000494 ........ BL FindContactLOGQByAck \ 00000498 000050E3 CMP R0,#+0 \ 0000049C 0100000A BEQ ??get_answer_29 \ 000004A0 4C019FE5 LDR R0,??get_answer_9+0x2C ;; sndMsgSent \ 000004A4 ........ BL Play \ ??get_answer_29: \ 000004A8 0A00A0E3 MOV R0,#+10 \ 000004AC 140000EF SWI +20 \ 000004B0 00B0A0E1 MOV R11,R0 \ 000004B4 0A20A0E3 MOV R2,#+10 \ 000004B8 E8FEFFEA B ??get_answer_5 \ ??get_answer_30: \ 000004BC 0C108DE2 ADD R1,SP,#+12 \ 000004C0 14008DE2 ADD R0,SP,#+20 \ 000004C4 B40000EF SWI +180 \ 000004C8 0C00DDE5 LDRB R0,[SP, #+12] \ 000004CC 0D20DDE5 LDRB R2,[SP, #+13] \ 000004D0 E11EA0E3 MOV R1,#+3600 \ 000004D4 3C30A0E3 MOV R3,#+60 \ 000004D8 930202E0 MUL R2,R3,R2 \ 000004DC 912020E0 MLA R0,R1,R0,R2 \ 000004E0 0E10DDE5 LDRB R1,[SP, #+14] \ 000004E4 E12EA0E3 MOV R2,#+3600 \ 000004E8 000081E0 ADD R0,R1,R0 \ 000004EC 0810D7E5 LDRB R1,[R7, #+8] \ 000004F0 920101E0 MUL R1,R2,R1 \ 000004F4 FC209FE5 LDR R2,??get_answer_9+0x30 ;; Canvas + 480 \ 000004F8 010040E0 SUB R0,R0,R1 \ 000004FC 0910D7E5 LDRB R1,[R7, #+9] \ 00000500 930101E0 MUL R1,R3,R1 \ 00000504 010040E0 SUB R0,R0,R1 \ 00000508 0A10D7E5 LDRB R1,[R7, #+10] \ 0000050C ........ LDR R7,??DataTable126 ;; janis \ 00000510 014050E0 SUBS R4,R0,R1 \ 00000514 500BA043 MOVMI R0,#+81920 \ 00000518 460D8043 ORRMI R0,R0,#0x1180 \ 0000051C 04408040 ADDMI R4,R0,R4 \ 00000520 010084E2 ADD R0,R4,#+1 \ 00000524 01002DE9 PUSH {R0} \ 00000528 0430A0E1 MOV R3,R4 \ 0000052C FF10A0E3 MOV R1,#+255 \ 00000530 0A00A0E1 MOV R0,R10 \ 00000534 1B0100EF SWI +283 \ 00000538 BC109FE5 LDR R1,??get_answer_9+0x34 ;; Canvas + 500 \ 0000053C 0420A0E1 MOV R2,R4 \ 00000540 B8409FE5 LDR R4,??get_answer_9+0x38 ;; pingsnd \ 00000544 4C00A0E3 MOV R0,#+76 \ 00000548 580D80E3 ORR R0,R0,#0x1600 \ 0000054C 050080E0 ADD R0,R0,R5 \ 00000550 160000EF SWI +22 \ 00000554 460100EF SWI +326 \ 00000558 000097E5 LDR R0,[R7, #+0] \ 0000055C 04D08DE2 ADD SP,SP,#+4 \ 00000560 010050E3 CMP R0,#+1 \ 00000564 0700001A BNE ??get_answer_31 \ 00000568 0A10A0E1 MOV R1,R10 \ 0000056C 0100A0E3 MOV R0,#+1 \ 00000570 480100EF SWI +328 \ 00000574 0400A0E1 MOV R0,R4 \ 00000578 ........ BL Play \ 0000057C 0000A0E3 MOV R0,#+0 \ 00000580 000087E5 STR R0,[R7, #+0] \ 00000584 BFFFFFEA B ??get_answer_27 \ ??get_answer_31: \ 00000588 FC0395E5 LDR R0,[R5, #+1020] \ 0000058C 000050E3 CMP R0,#+0 \ 00000590 0500001A BNE ??get_answer_32 \ 00000594 68009FE5 LDR R0,??get_answer_9+0x3C ;; ping_time_config \ 00000598 000090E5 LDR R0,[R0, #+0] \ 0000059C FC0385E5 STR R0,[R5, #+1020] \ 000005A0 0400A0E1 MOV R0,R4 \ 000005A4 ........ BL Play \ 000005A8 B6FFFFEA B ??get_answer_27 \ ??get_answer_32: \ 000005AC 010040E2 SUB R0,R0,#+1 \ 000005B0 FC0385E5 STR R0,[R5, #+1020] \ 000005B4 B3FFFFEA B ??get_answer_27 4098 } 4099 } 4100 } 4101 RXstate=i; \ ??get_answer_8: \ 000005B8 808385E5 STR R8,[R5, #+896] 4102 // GBS_StartTimerProc(&tmr_dorecv,3000,dorecv); 4103 // SMART_REDRAW(); 4104 } \ ??get_answer_1: \ 000005BC 1CD08DE2 ADD SP,SP,#+28 \ 000005C0 40DE8DE2 ADD SP,SP,#+1024 \ 000005C4 F08FBDE8 POP {R4-R11,PC} ;; return \ ??get_answer_9: \ 000005C8 25730000 DC8 "%s",+0 \ 000005CC ........ DC32 RXbuf \ 000005D0 ........ DC32 Canvas + 416 \ 000005D4 ........ DC32 sndStartup \ 000005D8 ........ DC32 Canvas + 428 \ 000005DC ........ DC32 Canvas + 440 \ 000005E0 ........ DC32 Canvas + 448 \ 000005E4 ........ DC32 Canvas + 456 \ 000005E8 ........ DC32 sndMsg \ 000005EC ........ DC32 sndMsg2 \ 000005F0 ........ DC32 Canvas + 468 \ 000005F4 ........ DC32 sndMsgSent \ 000005F8 ........ DC32 Canvas + 480 \ 000005FC ........ DC32 Canvas + 500 \ 00000600 ........ DC32 pingsnd \ 00000604 ........ DC32 ping_time_config 4105 4106 4107 extern int main_count; 4108 4109 //=====================add to main info==================== 4110 4111 //Сюда я не лез...и че та желания нет...kluchnik ;) 4112 4113 char a_txt[45]; 4114 char s_txt[45]; 4115 char d_txt[45]; 4116 char f_txt[45]; 4117 char g_txt[45]; 4118 unsigned int main_msg_timer2; \ In segment CODE, align 4, keep-with-next 4119 void AddToMain(const char *nameu,char *si) 4120 { \ AddToMain: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0180A0E1 MOV R8,R1 4121 char *de=malloc(64); \ 00000010 4000A0E3 MOV R0,#+64 \ 00000014 140000EF SWI +20 \ 00000018 0050A0E1 MOV R5,R0 4122 int text_l; 4123 int iz; 4124 int name_l; 4125 name_l=0; 4126 text_l=0; 4127 name_l=strlen(nameu); \ 0000001C 0400A0E1 MOV R0,R4 \ 00000020 1B0000EF SWI +27 4128 iz=0; 4129 #ifdef ELKA 4130 text_l=main_lenght-name_l; \ 00000024 04129FE5 LDR R1,??AddToMain_0 ;; main_lenght \ 00000028 0070A0E3 MOV R7,#+0 \ 0000002C 001091E5 LDR R1,[R1, #+0] 4131 #else 4132 text_l=main_lenght-name_l; 4133 #endif 4134 4135 if(strlen(si)>text_l) \ 00000030 0060A0E3 MOV R6,#+0 \ 00000034 009041E0 SUB R9,R1,R0 \ 00000038 0800A0E1 MOV R0,R8 \ 0000003C 1B0000EF SWI +27 \ 00000040 000059E1 CMP R9,R0 \ 00000044 0800003A BCC ??AddToMain_1 4136 { 4137 while(text_l!=0) 4138 { 4139 de[iz]=si[iz]; 4140 iz++; 4141 text_l--; 4142 } 4143 if(use_cutter) 4144 { 4145 de[iz]='.'; 4146 iz++; 4147 de[iz]='.'; 4148 iz++; 4149 de[iz]='.'; 4150 iz++; 4151 } 4152 de[iz]='\0'; 4153 } 4154 else 4155 strcpy(de, si); \ 00000048 0810A0E1 MOV R1,R8 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 1A0000EF SWI +26 4156 iz=0; \ ??AddToMain_2: \ 00000054 0070A0E3 MOV R7,#+0 \ 00000058 1A0000EA B ??AddToMain_3 \ ??AddToMain_4: \ 0000005C 0810D7E7 LDRB R1,[R7, +R8] \ 00000060 019049E2 SUB R9,R9,#+1 \ 00000064 0510C7E7 STRB R1,[R7, +R5] \ 00000068 0070A0E1 MOV R7,R0 \ ??AddToMain_1: \ 0000006C 010087E2 ADD R0,R7,#+1 \ 00000070 000059E3 CMP R9,#+0 \ 00000074 F8FFFF1A BNE ??AddToMain_4 \ 00000078 B4119FE5 LDR R1,??AddToMain_0+0x4 ;; use_cutter \ 0000007C 001091E5 LDR R1,[R1, #+0] \ 00000080 000051E3 CMP R1,#+0 \ 00000084 0500000A BEQ ??AddToMain_5 \ 00000088 2E10A0E3 MOV R1,#+46 \ 0000008C 0510C7E7 STRB R1,[R7, +R5] \ 00000090 0510C0E7 STRB R1,[R0, +R5] \ 00000094 010080E2 ADD R0,R0,#+1 \ 00000098 0510C0E7 STRB R1,[R0, +R5] \ 0000009C 017080E2 ADD R7,R0,#+1 \ ??AddToMain_5: \ 000000A0 0560C7E7 STRB R6,[R7, +R5] \ 000000A4 EAFFFFEA B ??AddToMain_2 4157 while(strlen(de)!=iz) 4158 { 4159 if(de[iz]==0x0D) de[iz]=0x20; \ ??AddToMain_6: \ 000000A8 0510D7E7 LDRB R1,[R7, +R5] \ 000000AC 2000A0E3 MOV R0,#+32 \ 000000B0 0D0051E3 CMP R1,#+13 \ 000000B4 0500C707 STRBEQ R0,[R7, +R5] 4160 if(de[iz]==0x0A) de[iz]=0x20; \ 000000B8 0510D7E7 LDRB R1,[R7, +R5] \ 000000BC 0A0051E3 CMP R1,#+10 \ 000000C0 0500C707 STRBEQ R0,[R7, +R5] 4161 iz++; \ 000000C4 017087E2 ADD R7,R7,#+1 4162 } \ ??AddToMain_3: \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 1B0000EF SWI +27 \ 000000D0 070050E1 CMP R0,R7 \ 000000D4 F3FFFF1A BNE ??AddToMain_6 4163 de[iz]='\0'; 4164 if(main_count==0) sprintf(a_txt, "%s: %s", nameu,de); \ 000000D8 ........ LDR R8,??DataTable127 ;; main_count \ 000000DC 0560C7E7 STRB R6,[R7, +R5] \ 000000E0 ........ LDR R6,??DataTable131 ;; icons \ 000000E4 4C719FE5 LDR R7,??AddToMain_0+0x8 ;; `?` \ 000000E8 9810A0E3 MOV R1,#+152 \ 000000EC 701D81E3 ORR R1,R1,#0x1C00 \ 000000F0 061081E0 ADD R1,R1,R6 \ 000000F4 04108DE5 STR R1,[SP, #+4] \ 000000F8 000098E5 LDR R0,[R8, #+0] \ 000000FC 000050E3 CMP R0,#+0 \ 00000100 0400001A BNE ??AddToMain_7 \ 00000104 04009DE5 LDR R0,[SP, #+4] \ 00000108 0530A0E1 MOV R3,R5 \ 0000010C 0420A0E1 MOV R2,R4 \ 00000110 0710A0E1 MOV R1,R7 \ 00000114 160000EF SWI +22 4165 if(main_count==1) sprintf(s_txt, "%s: %s", nameu,de); \ ??AddToMain_7: \ 00000118 C810A0E3 MOV R1,#+200 \ 0000011C 701D81E3 ORR R1,R1,#0x1C00 \ 00000120 061081E0 ADD R1,R1,R6 \ 00000124 00108DE5 STR R1,[SP, #+0] \ 00000128 000098E5 LDR R0,[R8, #+0] \ 0000012C 010050E3 CMP R0,#+1 \ 00000130 0400001A BNE ??AddToMain_8 \ 00000134 00009DE5 LDR R0,[SP, #+0] \ 00000138 0530A0E1 MOV R3,R5 \ 0000013C 0420A0E1 MOV R2,R4 \ 00000140 0710A0E1 MOV R1,R7 \ 00000144 160000EF SWI +22 4166 if(main_count==2) sprintf(d_txt, "%s: %s", nameu,de); \ ??AddToMain_8: \ 00000148 F800A0E3 MOV R0,#+248 \ 0000014C 700D80E3 ORR R0,R0,#0x1C00 \ 00000150 069080E0 ADD R9,R0,R6 \ 00000154 000098E5 LDR R0,[R8, #+0] \ 00000158 020050E3 CMP R0,#+2 \ 0000015C 0400001A BNE ??AddToMain_9 \ 00000160 0530A0E1 MOV R3,R5 \ 00000164 0420A0E1 MOV R2,R4 \ 00000168 0710A0E1 MOV R1,R7 \ 0000016C 0900A0E1 MOV R0,R9 \ 00000170 160000EF SWI +22 4167 if(main_count==3) sprintf(f_txt, "%s: %s", nameu,de); \ ??AddToMain_9: \ 00000174 2800A0E3 MOV R0,#+40 \ 00000178 740D80E3 ORR R0,R0,#0x1D00 \ 0000017C 06A080E0 ADD R10,R0,R6 \ 00000180 000098E5 LDR R0,[R8, #+0] \ 00000184 030050E3 CMP R0,#+3 \ 00000188 0400001A BNE ??AddToMain_10 \ 0000018C 0530A0E1 MOV R3,R5 \ 00000190 0420A0E1 MOV R2,R4 \ 00000194 0710A0E1 MOV R1,R7 \ 00000198 0A00A0E1 MOV R0,R10 \ 0000019C 160000EF SWI +22 4168 if(main_count==4) sprintf(g_txt, "%s: %s", nameu,de); \ ??AddToMain_10: \ 000001A0 5800A0E3 MOV R0,#+88 \ 000001A4 740D80E3 ORR R0,R0,#0x1D00 \ 000001A8 06B080E0 ADD R11,R0,R6 \ 000001AC 000098E5 LDR R0,[R8, #+0] \ 000001B0 040050E3 CMP R0,#+4 \ 000001B4 0400001A BNE ??AddToMain_11 \ 000001B8 0530A0E1 MOV R3,R5 \ 000001BC 0420A0E1 MOV R2,R4 \ 000001C0 0710A0E1 MOV R1,R7 \ 000001C4 0B00A0E1 MOV R0,R11 \ 000001C8 160000EF SWI +22 4169 if(main_count>4) \ ??AddToMain_11: \ 000001CC 000098E5 LDR R0,[R8, #+0] \ 000001D0 050050E3 CMP R0,#+5 \ 000001D4 100000BA BLT ??AddToMain_12 4170 { 4171 strcpy(a_txt, s_txt); \ 000001D8 00109DE5 LDR R1,[SP, #+0] \ 000001DC 04009DE5 LDR R0,[SP, #+4] \ 000001E0 1A0000EF SWI +26 4172 strcpy(s_txt, d_txt); \ 000001E4 00009DE5 LDR R0,[SP, #+0] \ 000001E8 0910A0E1 MOV R1,R9 \ 000001EC 1A0000EF SWI +26 4173 strcpy(d_txt, f_txt); \ 000001F0 0A10A0E1 MOV R1,R10 \ 000001F4 0900A0E1 MOV R0,R9 \ 000001F8 1A0000EF SWI +26 4174 strcpy(f_txt, g_txt); \ 000001FC 0B10A0E1 MOV R1,R11 \ 00000200 0A00A0E1 MOV R0,R10 \ 00000204 1A0000EF SWI +26 4175 sprintf(g_txt, "%s: %s", nameu,de); \ 00000208 0530A0E1 MOV R3,R5 \ 0000020C 0420A0E1 MOV R2,R4 \ 00000210 0710A0E1 MOV R1,R7 \ 00000214 0B00A0E1 MOV R0,R11 \ 00000218 160000EF SWI +22 4176 } 4177 mfree(de); \ ??AddToMain_12: \ 0000021C 0500A0E1 MOV R0,R5 \ 00000220 150000EF SWI +21 4178 main_d=1; \ 00000224 0100A0E3 MOV R0,#+1 \ 00000228 C80286E5 STR R0,[R6, #+712] 4179 } \ 0000022C F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??AddToMain_0: \ 00000230 ........ DC32 main_lenght \ 00000234 ........ DC32 use_cutter \ 00000238 ........ DC32 `?` 4180 4181 //======================add to main info================ 4182 4183 int NEW_MSG; 4184 \ In segment CODE, align 4, keep-with-next 4185 void AddStringToLog(CLIST *t, int code, char *s, const char *name, unsigned int IDforACK,int flag) 4186 { \ AddStringToLog: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 90D04DE2 SUB SP,SP,#+144 \ 00000008 B0709DE5 LDR R7,[SP, #+176] \ 0000000C B4909DE5 LDR R9,[SP, #+180] \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 0280A0E1 MOV R8,R2 \ 0000001C 0360A0E1 MOV R6,R3 4187 char hs[128], *lastX; 4188 TTime tt; 4189 TDate d; 4190 GetDateTime(&d,&tt); \ 00000020 0D10A0E1 MOV R1,SP \ 00000024 08008DE2 ADD R0,SP,#+8 \ 00000028 B40000EF SWI +180 4191 int i; 4192 4193 // if(code == 3 && !LOG_XTXT) return; //Нl нуcно nоodrн?nь cennnrnуn 4194 if ( code==3 && NOT_LOG_SAME_XTXT ) \ 0000002C 030055E3 CMP R5,#+3 \ 00000030 1600001A BNE ??AddStringToLog_0 \ 00000034 04029FE5 LDR R0,??AddStringToLog_1 ;; NOT_LOG_SAME_XTXT \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 1200000A BEQ ??AddStringToLog_0 4195 { 4196 #ifdef kluchnik 4197 if(!t->isactive && HISTORY_BUFFER && (t->isLoadHistory && t->isIndividSet)) GetHistory(t, 64<isactive && HISTORY_BUFFER) GetHistory(t, 64<isactive && HISTORY_BUFFER) GetHistory(t, 64<` \ 00000094 0600A0E1 MOV R0,R6 \ 00000098 01002DE9 PUSH {R0} \ 0000009C 1000DDE5 LDRB R0,[SP, #+16] \ 000000A0 0A20A0E1 MOV R2,R10 \ 000000A4 7F10A0E3 MOV R1,#+127 \ 000000A8 01002DE9 PUSH {R0} \ 000000AC 1500DDE5 LDRB R0,[SP, #+21] \ 000000B0 01002DE9 PUSH {R0} \ 000000B4 0E00DDE5 LDRB R0,[SP, #+14] \ 000000B8 01002DE9 PUSH {R0} \ 000000BC 1100DDE5 LDRB R0,[SP, #+17] \ 000000C0 01002DE9 PUSH {R0} \ 000000C4 1430DDE5 LDRB R3,[SP, #+20] \ 000000C8 24008DE2 ADD R0,SP,#+36 \ 000000CC 1B0100EF SWI +283 4208 if(code != 3 || ((LOG_XTXT) && (flag)))//Нужно сохранять иксстатус \ 000000D0 030055E3 CMP R5,#+3 \ 000000D4 14D08DE2 ADD SP,SP,#+20 \ 000000D8 0400001A BNE ??AddStringToLog_4 \ 000000DC 64019FE5 LDR R0,??AddStringToLog_1+0x8 ;; LOG_XTXT \ 000000E0 000090E5 LDR R0,[R0, #+0] \ 000000E4 000050E3 CMP R0,#+0 \ 000000E8 00005913 CMPNE R9,#+0 \ 000000EC 0400000A BEQ ??AddStringToLog_5 4209 Add2History(t, hs, s, code); \ ??AddStringToLog_4: \ 000000F0 0530A0E1 MOV R3,R5 \ 000000F4 0820A0E1 MOV R2,R8 \ 000000F8 10108DE2 ADD R1,SP,#+16 \ 000000FC 0400A0E1 MOV R0,R4 \ 00000100 ........ _BLF Add2History,??Add2History??rA 4210 4211 LOGQ *p=NewLOGQ(s); \ ??AddStringToLog_5: \ 00000104 0800A0E1 MOV R0,R8 \ 00000108 ........ BL NewLOGQ \ 0000010C 0080A0E1 MOV R8,R0 4212 snprintf(p->hdr,79,"%02d:%02d:%02d %02d.%02d %s:",tt.hour,tt.min,tt.sec,d.day,d.month,name); \ 00000110 40002DE9 PUSH {R6} \ 00000114 1000DDE5 LDRB R0,[SP, #+16] \ 00000118 20208AE2 ADD R2,R10,#+32 \ 0000011C 4F10A0E3 MOV R1,#+79 \ 00000120 01002DE9 PUSH {R0} \ 00000124 1500DDE5 LDRB R0,[SP, #+21] \ 00000128 01002DE9 PUSH {R0} \ 0000012C 0E00DDE5 LDRB R0,[SP, #+14] \ 00000130 01002DE9 PUSH {R0} \ 00000134 1100DDE5 LDRB R0,[SP, #+17] \ 00000138 01002DE9 PUSH {R0} \ 0000013C 1430DDE5 LDRB R3,[SP, #+20] \ 00000140 100088E2 ADD R0,R8,#+16 \ 00000144 1B0100EF SWI +283 4213 p->type=code; \ 00000148 0C5088E5 STR R5,[R8, #+12] 4214 p->ID=IDforACK; //0-32767 \ 0000014C 087088E5 STR R7,[R8, #+8] 4215 i=AddLOGQ(&t->log,p); \ 00000150 0810A0E1 MOV R1,R8 \ 00000154 A00084E2 ADD R0,R4,#+160 \ 00000158 ........ BL AddLOGQ \ 0000015C 0060A0E1 MOV R6,R0 \ 00000160 150056E3 CMP R6,#+21 \ 00000164 14D08DE2 ADD SP,SP,#+20 \ 00000168 090000BA BLT ??AddStringToLog_6 4216 while(i>MAXLOGMSG) 4217 { 4218 if (t->log==t->last_log) t->last_log=t->last_log->next; \ ??AddStringToLog_7: \ 0000016C A80094E5 LDR R0,[R4, #+168] \ 00000170 A01094E5 LDR R1,[R4, #+160] 4219 RemoveLOGQ(&t->log,t->log); 4220 i--; \ 00000174 016046E2 SUB R6,R6,#+1 \ 00000178 000051E1 CMP R1,R0 \ 0000017C 00009005 LDREQ R0,[R0, #+0] \ 00000180 A8008405 STREQ R0,[R4, #+168] \ 00000184 A00084E2 ADD R0,R4,#+160 \ 00000188 ........ BL RemoveLOGQ 4221 } \ 0000018C 150056E3 CMP R6,#+21 \ 00000190 F5FFFFAA BGE ??AddStringToLog_7 4222 t->msg_count=i; \ ??AddStringToLog_6: \ 00000194 B06084E5 STR R6,[R4, #+176] 4223 if (!t->last_log) t->last_log=p; \ 00000198 A80094E5 LDR R0,[R4, #+168] 4224 if (code==3) \ 0000019C ........ LDR R6,??DataTable131 ;; icons \ 000001A0 000050E3 CMP R0,#+0 \ 000001A4 A8808405 STREQ R8,[R4, #+168] \ 000001A8 030055E3 CMP R5,#+3 \ 000001AC 0D00001A BNE ??AddStringToLog_8 4225 { 4226 if (edchat_id) \ 000001B0 B80396E5 LDR R0,[R6, #+952] \ 000001B4 000050E3 CMP R0,#+0 \ 000001B8 1C00000A BEQ ??AddStringToLog_9 4227 { 4228 void *data=FindGUIbyId(edchat_id,NULL); \ 000001BC B80396E5 LDR R0,[R6, #+952] \ 000001C0 0010A0E3 MOV R1,#+0 \ 000001C4 090200EF SWI +521 4229 if (data) \ 000001C8 000050E3 CMP R0,#+0 \ 000001CC 1700000A BEQ ??AddStringToLog_9 4230 { 4231 EDCHAT_STRUCT *ed_struct; 4232 ed_struct=EDIT_GetUserPointer(data); \ 000001D0 DF0100EF SWI +479 4233 if (ed_struct) \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 1400000A BEQ ??AddStringToLog_9 4234 { 4235 if (ed_struct->ed_contact==t) \ 000001DC 000090E5 LDR R0,[R0, #+0] \ 000001E0 040050E1 CMP R0,R4 \ 000001E4 1100001A BNE ??AddStringToLog_9 4236 { 4237 goto L_INC; 4238 } 4239 } 4240 } 4241 } 4242 goto L_NOINC; 4243 } 4244 L_INC: 4245 if (!t->isunread) total_unread++; \ ??AddStringToLog_8: \ 000001E8 900094E5 LDR R0,[R4, #+144] \ 000001EC 000050E3 CMP R0,#+0 \ 000001F0 A8039605 LDREQ R0,[R6, #+936] \ 000001F4 01008002 ADDEQ R0,R0,#+1 \ 000001F8 A8038605 STREQ R0,[R6, #+936] 4246 if(NEW_MSG==1) \ 000001FC 040496E5 LDR R0,[R6, #+1028] \ 00000200 010050E3 CMP R0,#+1 \ 00000204 0700001A BNE ??AddStringToLog_10 4247 { 4248 t->unread_msg++; \ 00000208 940094E5 LDR R0,[R4, #+148] \ 0000020C 010080E2 ADD R0,R0,#+1 \ 00000210 940084E5 STR R0,[R4, #+148] 4249 total_unread2++; \ 00000214 FC0296E5 LDR R0,[R6, #+764] \ 00000218 010080E2 ADD R0,R0,#+1 \ 0000021C FC0286E5 STR R0,[R6, #+764] 4250 NEW_MSG=0; \ 00000220 0000A0E3 MOV R0,#+0 \ 00000224 040486E5 STR R0,[R6, #+1028] 4251 } 4252 t->isunread=1; \ ??AddStringToLog_10: \ 00000228 0100A0E3 MOV R0,#+1 \ 0000022C 900084E5 STR R0,[R4, #+144] 4253 L_NOINC: 4254 ChangeContactPos(t); \ ??AddStringToLog_9: \ 00000230 0400A0E1 MOV R0,R4 \ 00000234 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4255 } \ ??AddStringToLog_3: \ 00000238 90D08DE2 ADD SP,SP,#+144 ;; stack cleaning \ 0000023C F087BDE8 POP {R4-R10,PC} ;; return \ ??AddStringToLog_1: \ 00000240 ........ DC32 NOT_LOG_SAME_XTXT \ 00000244 ........ DC32 `?` \ 00000248 ........ DC32 LOG_XTXT 4256 4257 void ParseAnswer(WSHDR *ws, const char *s); 4258 4259 int time_to_stop_t9; 4260 \ In segment CODE, align 4, keep-with-next 4261 void ParseXStatusText(WSHDR *ws, const char *s, int color) 4262 { \ ParseXStatusText: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 4263 int c; 4264 int flag=0; \ 00000010 0070A0E3 MOV R7,#+0 4265 CutWSTR(ws,0); \ 00000014 0010A0E3 MOV R1,#+0 \ 00000018 260100EF SWI +294 4266 if (strlen(s)==1) return; \ 0000001C 0500A0E1 MOV R0,R5 \ 00000020 1B0000EF SWI +27 \ 00000024 010050E3 CMP R0,#+1 \ 00000028 F080BD08 POPEQ {R4-R7,PC} 4267 wsAppendChar(ws,0xE008); \ 0000002C 0810A0E3 MOV R1,#+8 \ 00000030 E01C81E3 ORR R1,R1,#0xE000 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 1C0000EF SWI +28 4268 wsAppendChar(ws,color); \ 0000003C 0610A0E1 MOV R1,R6 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1C0000EF SWI +28 4269 wsAppendChar(ws,0xE013); \ 00000048 1310A0E3 MOV R1,#+19 \ 0000004C E01C81E3 ORR R1,R1,#0xE000 \ 00000050 0A0000EA B ??ParseXStatusText_0 4270 while((c=*s++)) 4271 { 4272 if (c==13) \ ??ParseXStatusText_1: \ 00000054 0D0050E3 CMP R0,#+13 4273 { 4274 if (!flag) \ 00000058 00005703 CMPEQ R7,#+0 \ 0000005C 0500001A BNE ??ParseXStatusText_2 4275 { 4276 flag=1; \ 00000060 0170A0E3 MOV R7,#+1 4277 wsAppendChar(ws,0xE012); \ 00000064 1210A0E3 MOV R1,#+18 \ 00000068 E01C81E3 ORR R1,R1,#0xE000 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 1C0000EF SWI +28 4278 c=' '; \ 00000074 2000A0E3 MOV R0,#+32 4279 } 4280 } 4281 wsAppendChar(ws,char8to16(c)); \ ??ParseXStatusText_2: \ 00000078 ........ _BLF char8to16,??char8to16??rA \ 0000007C 0010A0E1 MOV R1,R0 \ ??ParseXStatusText_0: \ 00000080 0400A0E1 MOV R0,R4 \ 00000084 1C0000EF SWI +28 4282 } \ 00000088 ........ LDRB R0,[R5], #+1 \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 EFFFFF1A BNE ??ParseXStatusText_1 \ 00000094 F080BDE8 POP {R4-R7,PC} ;; return 4283 } 4284 4285 //Добавление итемов в чат при получении нового сообщения \ In segment CODE, align 4, keep-with-next 4286 void AddMsgToChat(void *data) 4287 { \ AddMsgToChat: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 4288 LOGQ *p; 4289 EDITCONTROL ec; 4290 EDITC_OPTIONS ec_options; 4291 EDCHAT_STRUCT *ed_struct; 4292 int j; 4293 int color, font, type; 4294 int zc; 4295 if (!data) return; \ 00000008 000050E3 CMP R0,#+0 \ 0000000C C400000A BEQ ??AddMsgToChat_0 4296 ed_struct=EDIT_GetUserPointer(data); \ 00000010 DF0100EF SWI +479 \ 00000014 0040B0E1 MOVS R4,R0 4297 if (!ed_struct) return; \ 00000018 C100000A BEQ ??AddMsgToChat_0 4298 if (!ed_struct->ed_contact->isunread) return; \ 0000001C 000094E5 LDR R0,[R4, #+0] \ 00000020 901090E5 LDR R1,[R0, #+144] \ 00000024 000051E3 CMP R1,#+0 \ 00000028 BD00000A BEQ ??AddMsgToChat_0 4299 4300 p=ed_struct->ed_contact->last_log; \ 0000002C A85090E5 LDR R5,[R0, #+168] 4301 if (p) \ 00000030 ........ LDR R6,??DataTable131 ;; icons \ 00000034 ........ LDR R7,??DataTable132 ;; O_ED_X_FONT_SIZE \ 00000038 ........ LDR R8,??DataTable133 ;; X_COLOR \ 0000003C ........ LDR R9,??DataTable134 ;; O_X_COLOR \ 00000040 000055E3 CMP R5,#+0 \ 00000044 A100000A BEQ ??AddMsgToChat_1 4302 { 4303 while(p) 4304 { 4305 font = ED_H_FONT_SIZE; \ ??AddMsgToChat_2: \ 00000048 ........ LDR R0,??DataTable155 ;; ED_H_FONT_SIZE 4306 if ((zc=p->acked&3)) \ 0000004C ........ LDR R1,??DataTable152 ;; I_COLOR \ 00000050 00A090E5 LDR R10,[R0, #+0] \ 00000054 040095E5 LDR R0,[R5, #+4] \ 00000058 00B091E5 LDR R11,[R1, #+0] \ 0000005C 030010E2 ANDS R0,R0,#0x3 \ 00000060 0300000A BEQ ??AddMsgToChat_3 4307 { 4308 if (zc==1) \ 00000064 010050E3 CMP R0,#+1 \ 00000068 1E00001A BNE ??AddMsgToChat_4 4309 color=ACK_COLOR; //Зеленый \ 0000006C ........ LDR R0,??DataTable148 ;; ACK_COLOR \ 00000070 1B0000EA B ??AddMsgToChat_5 4310 else 4311 color=I_COLOR; 4312 } 4313 else 4314 { 4315 if (p->ID==0xFFFFFFFF) \ ??AddMsgToChat_3: \ 00000074 080095E5 LDR R0,[R5, #+8] \ 00000078 010070E3 CMN R0,#+1 \ 0000007C 1700001A BNE ??AddMsgToChat_6 4316 { 4317 type = p->type&0x0F; \ 00000080 0C0095E5 LDR R0,[R5, #+12] \ 00000084 0F1000E2 AND R1,R0,#0xF 4318 if(p->type&0x10) \ 00000088 100010E3 TST R0,#0x10 \ 0000008C 0B00000A BEQ ??AddMsgToChat_7 4319 { 4320 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 00000090 010051E3 CMP R1,#+1 \ 00000094 ........ LDREQ R0,??DataTable150 ;; 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,??DataTable149 ;; O_TO_COLOR \ ??AddMsgToChat_8: \ 000000B0 00B090E5 LDR R11,[R0, #+0] \ 000000B4 ........ LDR R0,??DataTable154 ;; O_ED_H_FONT_SIZE \ ??AddMsgToChat_9: \ 000000B8 00A090E5 LDR R10,[R0, #+0] \ 000000BC 090000EA B ??AddMsgToChat_4 4321 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 4322 } 4323 else 4324 { 4325 color = (type==1)?I_COLOR:((type==3)?X_COLOR:TO_COLOR); \ ??AddMsgToChat_7: \ 000000C0 010051E3 CMP R1,#+1 \ 000000C4 0700000A BEQ ??AddMsgToChat_4 \ 000000C8 030051E3 CMP R1,#+3 \ 000000CC 00B09805 LDREQ R11,[R8, #+0] \ 000000D0 ........ LDREQ R0,??DataTable146 ;; ED_X_FONT_SIZE \ 000000D4 F7FFFF0A BEQ ??AddMsgToChat_9 \ 000000D8 ........ LDR R0,??DataTable151 ;; TO_COLOR \ 000000DC 000000EA B ??AddMsgToChat_5 4326 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 4327 } 4328 } 4329 else 4330 color=UNACK_COLOR; //????? \ ??AddMsgToChat_6: \ 000000E0 ........ LDR R0,??DataTable153 ;; UNACK_COLOR \ ??AddMsgToChat_5: \ 000000E4 00B090E5 LDR R11,[R0, #+0] 4331 } 4332 PrepareEditControl(&ec); \ ??AddMsgToChat_4: \ 000000E8 10008DE2 ADD R0,SP,#+16 \ 000000EC 640100EF SWI +356 4333 if ((p->type&0x0F)!=3) \ 000000F0 0C0095E5 LDR R0,[R5, #+12] \ 000000F4 0F0000E2 AND R0,R0,#0xF \ 000000F8 030050E3 CMP R0,#+3 \ 000000FC 0800000A BEQ ??AddMsgToChat_10 4334 { 4335 ascii2ws(ews,p->hdr); \ 00000100 200396E5 LDR R0,[R6, #+800] \ 00000104 101085E2 ADD R1,R5,#+16 \ 00000108 ........ _BLF ascii2ws,??ascii2ws??rA 4336 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 0000010C 203396E5 LDR R3,[R6, #+800] \ 00000110 4020A0E3 MOV R2,#+64 \ 00000114 000093E5 LDR R0,[R3, #+0] \ 00000118 B000D0E1 LDRH R0,[R0, #+0] \ 0000011C 01002DE9 PUSH {R0} \ 00000120 030000EA B ??AddMsgToChat_11 4337 } 4338 else 4339 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??AddMsgToChat_10: \ 00000124 0000A0E3 MOV R0,#+0 \ 00000128 01002DE9 PUSH {R0} \ 0000012C 203396E5 LDR R3,[R6, #+800] \ 00000130 2020A0E3 MOV R2,#+32 \ ??AddMsgToChat_11: \ 00000134 0110A0E3 MOV R1,#+1 \ 00000138 14008DE2 ADD R0,SP,#+20 \ 0000013C 650100EF SWI +357 \ 00000140 04D08DE2 ADD SP,SP,#+4 4340 PrepareEditCOptions(&ec_options); \ 00000144 0D00A0E1 MOV R0,SP \ 00000148 C80100EF SWI +456 4341 SetPenColorToEditCOptions(&ec_options,color); \ 0000014C 0B10A0E1 MOV R1,R11 \ 00000150 0D00A0E1 MOV R0,SP \ 00000154 CC0100EF SWI +460 4342 SetFontToEditCOptions(&ec_options,font); \ 00000158 0A10A0E1 MOV R1,R10 \ 0000015C 0D00A0E1 MOV R0,SP \ 00000160 CA0100EF SWI +458 4343 CopyOptionsToEditControl(&ec,&ec_options); \ 00000164 0D10A0E1 MOV R1,SP \ 00000168 10008DE2 ADD R0,SP,#+16 \ 0000016C CE0100EF SWI +462 4344 //AddEditControlToEditQend(eq,&ec,ma); 4345 EDIT_InsertEditControl(data,ed_struct->ed_answer-1,&ec); \ 00000170 080094E5 LDR R0,[R4, #+8] \ 00000174 10208DE2 ADD R2,SP,#+16 \ 00000178 011040E2 SUB R1,R0,#+1 \ 0000017C 3C009DE5 LDR R0,[SP, #+60] \ 00000180 D20100EF SWI +466 4346 ed_struct->ed_answer++; \ 00000184 080094E5 LDR R0,[R4, #+8] \ 00000188 010080E2 ADD R0,R0,#+1 \ 0000018C 080084E5 STR R0,[R4, #+8] 4347 if ((p->type&0x0F)!=3) \ 00000190 0C0095E5 LDR R0,[R5, #+12] \ 00000194 0F1000E2 AND R1,R0,#0xF \ 00000198 030051E3 CMP R1,#+3 \ 0000019C 0300000A BEQ ??AddMsgToChat_12 4348 { 4349 ParseAnswer(ews,p->text); \ 000001A0 200396E5 LDR R0,[R6, #+800] \ 000001A4 601085E2 ADD R1,R5,#+96 \ 000001A8 ........ BL ParseAnswer \ 000001AC 050000EA B ??AddMsgToChat_13 4350 } 4351 else 4352 { 4353 ParseXStatusText(ews, p->text, (p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_12: \ 000001B0 100010E3 TST R0,#0x10 \ 000001B4 00209915 LDRNE R2,[R9, #+0] \ 000001B8 200396E5 LDR R0,[R6, #+800] \ 000001BC 00209805 LDREQ R2,[R8, #+0] \ 000001C0 601085E2 ADD R1,R5,#+96 \ 000001C4 ........ BL ParseXStatusText 4354 } 4355 PrepareEditControl(&ec); \ ??AddMsgToChat_13: \ 000001C8 10008DE2 ADD R0,SP,#+16 \ 000001CC 640100EF SWI +356 4356 ConstructEditControl(&ec, 4357 ECT_NORMAL_TEXT, 4358 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 4359 ews,ews->wsbody[0]); \ 000001D0 203396E5 LDR R3,[R6, #+800] \ 000001D4 000093E5 LDR R0,[R3, #+0] \ 000001D8 B010D0E1 LDRH R1,[R0, #+0] \ 000001DC 000051E3 CMP R1,#+0 \ 000001E0 0100A0E1 MOV R0,R1 \ 000001E4 01002DE9 PUSH {R0} \ 000001E8 812DA013 MOVNE R2,#+8256 \ 000001EC 2020A003 MOVEQ R2,#+32 \ 000001F0 0310A0E3 MOV R1,#+3 \ 000001F4 14008DE2 ADD R0,SP,#+20 \ 000001F8 650100EF SWI +357 4360 PrepareEditCOptions(&ec_options); \ 000001FC 04008DE2 ADD R0,SP,#+4 \ 00000200 C80100EF SWI +456 4361 //#ifdef M75 4362 if ((p->type&0x0F)!=3) \ 00000204 0C0095E5 LDR R0,[R5, #+12] \ 00000208 04D08DE2 ADD SP,SP,#+4 \ 0000020C 0F1000E2 AND R1,R0,#0xF \ 00000210 030051E3 CMP R1,#+3 \ 00000214 0400000A BEQ ??AddMsgToChat_14 4363 { 4364 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000218 100010E3 TST R0,#0x10 \ 0000021C ........ LDRNE R0,??DataTable144 ;; O_ED_FONT_SIZE \ 00000220 ........ LDREQ R0,??DataTable145 ;; ED_FONT_SIZE \ 00000224 001090E5 LDR R1,[R0, #+0] \ 00000228 090000EA B ??AddMsgToChat_15 4365 } 4366 else 4367 { 4368 SetPenColorToEditCOptions(&ec_options,(p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_14: \ 0000022C 100010E3 TST R0,#0x10 \ 00000230 00109915 LDRNE R1,[R9, #+0] \ 00000234 0D00A0E1 MOV R0,SP \ 00000238 00109805 LDREQ R1,[R8, #+0] \ 0000023C CC0100EF SWI +460 4369 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_X_FONT_SIZE:ED_X_FONT_SIZE); \ 00000240 0C0095E5 LDR R0,[R5, #+12] \ 00000244 100010E3 TST R0,#0x10 \ 00000248 ........ LDREQ R0,??DataTable146 ;; ED_X_FONT_SIZE \ 0000024C 00109715 LDRNE R1,[R7, #+0] \ 00000250 00109005 LDREQ R1,[R0, #+0] \ ??AddMsgToChat_15: \ 00000254 0D00A0E1 MOV R0,SP \ 00000258 CA0100EF SWI +458 4370 } 4371 //#else 4372 // SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 4373 //#endif 4374 CopyOptionsToEditControl(&ec,&ec_options); \ 0000025C 0D10A0E1 MOV R1,SP \ 00000260 10008DE2 ADD R0,SP,#+16 \ 00000264 CE0100EF SWI +462 4375 EDIT_InsertEditControl(data,ed_struct->ed_answer-1,&ec); \ 00000268 080094E5 LDR R0,[R4, #+8] \ 0000026C 10208DE2 ADD R2,SP,#+16 \ 00000270 011040E2 SUB R1,R0,#+1 \ 00000274 3C009DE5 LDR R0,[SP, #+60] \ 00000278 D20100EF SWI +466 4376 ed_struct->ed_answer++; \ 0000027C 080094E5 LDR R0,[R4, #+8] \ 00000280 010080E2 ADD R0,R0,#+1 \ 00000284 080084E5 STR R0,[R4, #+8] 4377 p=p->next; \ 00000288 005095E5 LDR R5,[R5, #+0] 4378 } \ 0000028C 000055E3 CMP R5,#+0 \ 00000290 6CFFFF1A BNE ??AddMsgToChat_2 4379 j=((ed_struct->ed_contact->msg_count+1)*2); //Ожидаемый ed_answer \ 00000294 001094E5 LDR R1,[R4, #+0] \ 00000298 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 4380 while(jed_answer) 4381 { 4382 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??AddMsgToChat_17: \ 000002AC 040094E5 LDR R0,[R4, #+4] \ 000002B0 0110A0E3 MOV R1,#+1 \ 000002B4 D10100EF SWI +465 4383 ed_struct->ed_answer--; \ 000002B8 080094E5 LDR R0,[R4, #+8] \ 000002BC 010040E2 SUB R0,R0,#+1 \ 000002C0 080084E5 STR R0,[R4, #+8] 4384 } \ 000002C4 000055E1 CMP R5,R0 \ 000002C8 F7FFFFBA BLT ??AddMsgToChat_17 4385 } 4386 ed_struct->ed_contact->last_log=NULL; \ ??AddMsgToChat_16: \ 000002CC 0050A0E3 MOV R5,#+0 \ ??AddMsgToChat_1: \ 000002D0 000094E5 LDR R0,[R4, #+0] \ 000002D4 A85080E5 STR R5,[R0, #+168] 4387 if (IsGuiOnTop(edchat_id)) \ 000002D8 B80396E5 LDR R0,[R6, #+952] \ 000002DC 350100EF SWI +309 \ 000002E0 000050E3 CMP R0,#+0 \ 000002E4 0300000A BEQ ??AddMsgToChat_18 4388 { 4389 total_unread--; \ 000002E8 A80396E5 LDR R0,[R6, #+936] \ 000002EC 010040E2 SUB R0,R0,#+1 \ 000002F0 A80386E5 STR R0,[R6, #+936] \ 000002F4 020000EA B ??AddMsgToChat_19 4390 } 4391 else 4392 ed_struct->requested_decrement_total_unread++; \ ??AddMsgToChat_18: \ 000002F8 0C0094E5 LDR R0,[R4, #+12] \ 000002FC 010080E2 ADD R0,R0,#+1 \ 00000300 0C0084E5 STR R0,[R4, #+12] 4393 ed_struct->ed_contact->isunread=0; \ ??AddMsgToChat_19: \ 00000304 000094E5 LDR R0,[R4, #+0] \ 00000308 905080E5 STR R5,[R0, #+144] 4394 total_unread2=total_unread2-ed_struct->ed_contact->unread_msg; \ 0000030C FC1296E5 LDR R1,[R6, #+764] \ 00000310 942090E5 LDR R2,[R0, #+148] \ 00000314 021041E0 SUB R1,R1,R2 \ 00000318 FC1286E5 STR R1,[R6, #+764] 4395 ed_struct->ed_contact->unread_msg=0; \ 0000031C 945080E5 STR R5,[R0, #+148] 4396 ChangeContactPos(ed_struct->ed_contact); \ 00000320 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4397 // EDIT_SetFocus(data,ed_struct->ed_answer); 4398 } \ ??AddMsgToChat_0: \ 00000324 40D08DE2 ADD SP,SP,#+64 ;; stack cleaning \ 00000328 F08FBDE8 POP {R4-R11,PC} ;; return 4399 4400 //Рисуем подтверждения непосредственно \ In segment CODE, align 4, keep-with-next 4401 void DrawAck(void *data) 4402 { \ DrawAck: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 4403 LOGQ *p; 4404 EDITCONTROL ec; 4405 EDITC_OPTIONS ec_options; 4406 EDCHAT_STRUCT *ed_struct; 4407 int j; 4408 int color; 4409 int dorefresh=0; \ 0000000C 0060A0E3 MOV R6,#+0 4410 if (!data) return; \ 00000010 4C00000A BEQ ??DrawAck_0 4411 ed_struct=EDIT_GetUserPointer(data); \ 00000014 DF0100EF SWI +479 4412 if (!ed_struct) return; \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 4900000A BEQ ??DrawAck_0 4413 p=ed_struct->ed_contact->log; \ 00000020 001090E5 LDR R1,[R0, #+0] 4414 j=ed_struct->ed_answer; 4415 j-=(ed_struct->ed_contact->msg_count*2)+1; //Номер собственно хедера верхнего итема \ 00000024 080090E5 LDR R0,[R0, #+8] \ 00000028 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 4416 while(p) 4417 { 4418 if (j>=1) //Пока возможно лишнее \ ??DrawAck_2: \ 00000040 010057E3 CMP R7,#+1 \ 00000044 340000BA BLT ??DrawAck_3 4419 { 4420 if (!(p->acked&4)) \ 00000048 040095E5 LDR R0,[R5, #+4] \ 0000004C 040010E3 TST R0,#0x4 \ 00000050 3100001A BNE ??DrawAck_3 4421 { 4422 ExtractEditControl(data,j,&ec); \ 00000054 10208DE2 ADD R2,SP,#+16 \ 00000058 0710A0E1 MOV R1,R7 \ 0000005C 0400A0E1 MOV R0,R4 \ 00000060 690100EF SWI +361 4423 PrepareEditCOptions(&ec_options); \ 00000064 0D00A0E1 MOV R0,SP \ 00000068 C80100EF SWI +456 4424 if (p->acked) \ 0000006C 040095E5 LDR R0,[R5, #+4] \ 00000070 000050E3 CMP R0,#+0 \ 00000074 0300000A BEQ ??DrawAck_4 4425 { 4426 if (p->acked==1) \ 00000078 010050E3 CMP R0,#+1 \ 0000007C ........ LDRNE R0,??DataTable152 ;; I_COLOR 4427 color=ACK_COLOR; //Зеленый \ 00000080 ........ LDREQ R0,??DataTable148 ;; ACK_COLOR \ 00000084 0F0000EA B ??DrawAck_5 4428 else 4429 color=I_COLOR; 4430 } 4431 else 4432 { 4433 if (p->ID==0xFFFFFFFF) \ ??DrawAck_4: \ 00000088 080095E5 LDR R0,[R5, #+8] \ 0000008C 010070E3 CMN R0,#+1 \ 00000090 0B00001A BNE ??DrawAck_6 4434 color=(p->type&0x10)?(((p->type&0x0F)==1)?O_I_COLOR:O_TO_COLOR):(((p->type&0x0F)==1)?I_COLOR:TO_COLOR); \ 00000094 0C0095E5 LDR R0,[R5, #+12] \ 00000098 100010E3 TST R0,#0x10 \ 0000009C 0F0000E2 AND R0,R0,#0xF \ 000000A0 0300000A BEQ ??DrawAck_7 \ 000000A4 010050E3 CMP R0,#+1 \ 000000A8 ........ LDRNE R0,??DataTable149 ;; O_TO_COLOR \ 000000AC ........ LDREQ R0,??DataTable150 ;; O_I_COLOR \ 000000B0 040000EA B ??DrawAck_5 \ ??DrawAck_7: \ 000000B4 010050E3 CMP R0,#+1 \ 000000B8 ........ LDRNE R0,??DataTable151 ;; TO_COLOR \ 000000BC ........ LDREQ R0,??DataTable152 ;; I_COLOR \ 000000C0 000000EA B ??DrawAck_5 4435 else 4436 color=UNACK_COLOR; //Серый \ ??DrawAck_6: \ 000000C4 ........ LDR R0,??DataTable153 ;; UNACK_COLOR 4437 } 4438 SetPenColorToEditCOptions(&ec_options,color/*p->type==1?I_COLOR:TO_COLOR*/); 4439 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_H_FONT_SIZE:ED_H_FONT_SIZE); 4440 CopyOptionsToEditControl(&ec,&ec_options); 4441 StoreEditControl(data,j,&ec); 4442 p->acked|=4; //Обработали 4443 dorefresh=1; \ ??DrawAck_5: \ 000000C8 0160A0E3 MOV R6,#+1 \ 000000CC 001090E5 LDR R1,[R0, #+0] \ 000000D0 0D00A0E1 MOV R0,SP \ 000000D4 CC0100EF SWI +460 \ 000000D8 0C0095E5 LDR R0,[R5, #+12] \ 000000DC 100010E3 TST R0,#0x10 \ 000000E0 ........ LDRNE R0,??DataTable154 ;; O_ED_H_FONT_SIZE \ 000000E4 ........ LDREQ R0,??DataTable155 ;; ED_H_FONT_SIZE \ 000000E8 001090E5 LDR R1,[R0, #+0] \ 000000EC 0D00A0E1 MOV R0,SP \ 000000F0 CA0100EF SWI +458 \ 000000F4 0D10A0E1 MOV R1,SP \ 000000F8 10008DE2 ADD R0,SP,#+16 \ 000000FC CE0100EF SWI +462 \ 00000100 10208DE2 ADD R2,SP,#+16 \ 00000104 0710A0E1 MOV R1,R7 \ 00000108 0400A0E1 MOV R0,R4 \ 0000010C 6A0100EF SWI +362 \ 00000110 040095E5 LDR R0,[R5, #+4] \ 00000114 040080E3 ORR R0,R0,#0x4 \ 00000118 040085E5 STR R0,[R5, #+4] 4444 } 4445 } 4446 j+=2; 4447 p=p->next; \ ??DrawAck_3: \ 0000011C 005095E5 LDR R5,[R5, #+0] \ 00000120 027087E2 ADD R7,R7,#+2 4448 } \ 00000124 000055E3 CMP R5,#+0 \ 00000128 C4FFFF1A BNE ??DrawAck_2 4449 if (IsGuiOnTop(edchat_id)&&dorefresh) RefreshGUI(); \ ??DrawAck_1: \ 0000012C 1C009FE5 LDR R0,??DrawAck_8 ;; icons + 952 \ 00000130 000090E5 LDR R0,[R0, #+0] \ 00000134 350100EF SWI +309 \ 00000138 000050E3 CMP R0,#+0 \ 0000013C 00005613 CMPNE R6,#+0 \ 00000140 0000000A BEQ ??DrawAck_0 \ 00000144 960100EF SWI +406 \ ??DrawAck_0: \ 00000148 3CD08DE2 ADD SP,SP,#+60 ;; stack cleaning \ 0000014C F080BDE8 POP {R4-R7,PC} ;; return \ ??DrawAck_8: \ 00000150 ........ DC32 icons + 952 4450 } 4451 \ In segment CODE, align 4, keep-with-next 4452 void ask_my_info(void) 4453 { 4454 /* TPKT *p; 4455 CLIST *t; 4456 p=malloc(sizeof(PKT)); 4457 p->pkt.uin=UIN; 4458 p->pkt.type=T_REQINFOSHORT; 4459 p->pkt.data_len=0; 4460 // AddStringToLog(t,0x01,"Request info...",I_str); 4461 SUBPROC((void *)SendAnswer,0,p);*/ 4462 } \ ask_my_info: \ 00000000 1EFF2FE1 BX LR ;; return 4463 \ In segment CODE, align 4, keep-with-next 4464 void set_my_status(void) 4465 { \ set_my_status: \ 00000000 00402DE9 PUSH {LR} 4466 TPKT *p; 4467 p=malloc(sizeof(PKT)+1); \ 00000004 0900A0E3 MOV R0,#+9 \ 00000008 140000EF SWI +20 4468 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 001080E5 STR R1,[R0, #+0] 4469 p->pkt.type=T_MY_STATUS_CH; // Тип пакета: изменение статуса \ 00000014 0F10A0E3 MOV R1,#+15 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 4470 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000001C 0110A0E3 MOV R1,#+1 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 4471 p->data[0]=CurrentStatus; \ 00000024 18109FE5 LDR R1,??set_my_status_0 ;; icons + 792 4472 SUBPROC((void *)SendAnswer,0,p); \ 00000028 0020A0E1 MOV R2,R0 \ 0000002C 001091E5 LDR R1,[R1, #+0] \ 00000030 0810C0E5 STRB R1,[R0, #+8] \ 00000034 ........ LDR R0,??DataTable168 ;; SendAnswer \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 710100EF SWI +369 4473 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??set_my_status_0: \ 00000044 ........ DC32 icons + 792 4474 4475 extern int Send0; 4476 \ In segment CODE, align 4, keep-with-next 4477 void set_my_xstatus(void) 4478 { \ set_my_xstatus: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 4479 #ifdef NEWSGOLD 4480 if(Is_Id3tag_Enabled) \ 00000004 ........ LDR R7,??DataTable167 ;; icons \ 00000008 ........ LDR R4,??DataTable168 ;; SendAnswer \ 0000000C 0CD04DE2 SUB SP,SP,#+12 \ 00000010 140397E5 LDR R0,[R7, #+788] \ 00000014 1A50A0E3 MOV R5,#+26 \ 00000018 0190A0E3 MOV R9,#+1 \ 0000001C 16A0A0E3 MOV R10,#+22 \ 00000020 0060A0E3 MOV R6,#+0 \ 00000024 000050E3 CMP R0,#+0 \ 00000028 3C00000A BEQ ??set_my_xstatus_0 4481 { 4482 if(CurrentXStatus!=11) \ 0000002C 1C0397E5 LDR R0,[R7, #+796] \ 00000030 0B0050E3 CMP R0,#+11 \ 00000034 7200000A BEQ ??set_my_xstatus_1 4483 { 4484 #endif 4485 TPKT *p; 4486 char *s1; 4487 char *s2; 4488 int l1; 4489 int l2; 4490 p=malloc(sizeof(PKT)+1); \ 00000038 0900A0E3 MOV R0,#+9 \ 0000003C 140000EF SWI +20 \ 00000040 0080A0E1 MOV R8,R0 4491 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 00000044 006088E5 STR R6,[R8, #+0] 4492 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 00000048 B4A0C8E1 STRH R10,[R8, #+4] 4493 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000004C B690C8E1 STRH R9,[R8, #+6] 4494 p->data[0]=CurrentXStatus; \ 00000050 1C0397E5 LDR R0,[R7, #+796] 4495 SUBPROC((void *)SendAnswer,0,p); \ 00000054 0820A0E1 MOV R2,R8 \ 00000058 0800C8E5 STRB R0,[R8, #+8] \ 0000005C 0010A0E3 MOV R1,#+0 \ 00000060 0400A0E1 MOV R0,R4 \ 00000064 710100EF SWI +369 4496 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 00000068 1C0397E5 LDR R0,[R7, #+796] \ 0000006C 0D10A0E1 MOV R1,SP \ 00000070 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000074 010080E2 ADD R0,R0,#+1 \ 00000078 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 0000007C 0090A0E1 MOV R9,R0 4497 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000080 1C0397E5 LDR R0,[R7, #+796] \ 00000084 04108DE2 ADD R1,SP,#+4 \ 00000088 800080E0 ADD R0,R0,R0, LSL #+1 \ 0000008C 020080E2 ADD R0,R0,#+2 \ 00000090 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000094 0070A0E1 MOV R7,R0 4498 if ((!s1)||(!s2)) return; \ 00000098 000059E3 CMP R9,#+0 \ 0000009C 00005713 CMPNE R7,#+0 \ 000000A0 F787BD08 POPEQ {R0-R2,R4-R10,PC} 4499 p=malloc(sizeof(PKT)+l1+l2+1); \ 000000A4 00009DE5 LDR R0,[SP, #+0] \ 000000A8 04109DE5 LDR R1,[SP, #+4] \ 000000AC 000081E0 ADD R0,R1,R0 \ 000000B0 090080E2 ADD R0,R0,#+9 \ 000000B4 140000EF SWI +20 \ 000000B8 0080A0E1 MOV R8,R0 4500 p->pkt.uin=0; \ 000000BC 006088E5 STR R6,[R8, #+0] 4501 p->pkt.type=T_XTEXT_SET; \ 000000C0 B450C8E1 STRH R5,[R8, #+4] 4502 p->pkt.data_len=l1+l2+1; \ 000000C4 00009DE5 LDR R0,[SP, #+0] \ 000000C8 04109DE5 LDR R1,[SP, #+4] \ 000000CC 000081E0 ADD R0,R1,R0 \ 000000D0 010080E2 ADD R0,R0,#+1 \ 000000D4 B600C8E1 STRH R0,[R8, #+6] 4503 strncpy(p->data+0,s1,l1); \ 000000D8 00209DE5 LDR R2,[SP, #+0] \ 000000DC 0910A0E1 MOV R1,R9 \ 000000E0 080088E2 ADD R0,R8,#+8 \ 000000E4 160100EF SWI +278 4504 p->data[l1]=0; \ 000000E8 00009DE5 LDR R0,[SP, #+0] 4505 strncpy(p->data+l1+1,s2,l2); \ 000000EC 0710A0E1 MOV R1,R7 \ 000000F0 080080E0 ADD R0,R0,R8 \ 000000F4 0860C0E5 STRB R6,[R0, #+8] \ 000000F8 00009DE5 LDR R0,[SP, #+0] \ 000000FC 04209DE5 LDR R2,[SP, #+4] \ 00000100 080080E0 ADD R0,R0,R8 \ 00000104 090080E2 ADD R0,R0,#+9 \ 00000108 160100EF SWI +278 4506 SUBPROC((void *)SendAnswer,0,p); \ 0000010C 0820A0E1 MOV R2,R8 \ 00000110 0010A0E3 MOV R1,#+0 \ 00000114 0400A0E1 MOV R0,R4 \ 00000118 710100EF SWI +369 \ 0000011C F787BDE8 POP {R0-R2,R4-R10,PC} 4507 #ifdef NEWSGOLD 4508 } 4509 else 4510 { 4511 tracktimer=0; 4512 GetTags(); 4513 } 4514 } 4515 else 4516 { 4517 TPKT *p; 4518 char *s1; 4519 char *s2; 4520 int l1; 4521 int l2; 4522 p=malloc(sizeof(PKT)+1); \ ??set_my_xstatus_0: \ 00000120 0900A0E3 MOV R0,#+9 \ 00000124 140000EF SWI +20 \ 00000128 0080A0E1 MOV R8,R0 4523 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000012C 006088E5 STR R6,[R8, #+0] 4524 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 00000130 B4A0C8E1 STRH R10,[R8, #+4] 4525 p->pkt.data_len=1; // Длина пакета: 1 байт \ 00000134 B690C8E1 STRH R9,[R8, #+6] 4526 p->data[0]=CurrentXStatus; \ 00000138 1C0397E5 LDR R0,[R7, #+796] 4527 SUBPROC((void *)SendAnswer,0,p); \ 0000013C 0820A0E1 MOV R2,R8 \ 00000140 0800C8E5 STRB R0,[R8, #+8] \ 00000144 0010A0E3 MOV R1,#+0 \ 00000148 0400A0E1 MOV R0,R4 \ 0000014C 710100EF SWI +369 4528 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 00000150 1C0397E5 LDR R0,[R7, #+796] \ 00000154 0D10A0E1 MOV R1,SP \ 00000158 800080E0 ADD R0,R0,R0, LSL #+1 \ 0000015C 010080E2 ADD R0,R0,#+1 \ 00000160 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000164 0090A0E1 MOV R9,R0 4529 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000168 1C0397E5 LDR R0,[R7, #+796] \ 0000016C 04108DE2 ADD R1,SP,#+4 \ 00000170 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000174 020080E2 ADD R0,R0,#+2 \ 00000178 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 0000017C 00A0A0E1 MOV R10,R0 4530 if ((!s1)||(!s2)) return; \ 00000180 000059E3 CMP R9,#+0 \ 00000184 00005A13 CMPNE R10,#+0 \ 00000188 F787BD08 POPEQ {R0-R2,R4-R10,PC} 4531 p=malloc(sizeof(PKT)+l1+l2+1); \ 0000018C 00009DE5 LDR R0,[SP, #+0] \ 00000190 04109DE5 LDR R1,[SP, #+4] \ 00000194 000081E0 ADD R0,R1,R0 \ 00000198 090080E2 ADD R0,R0,#+9 \ 0000019C 140000EF SWI +20 \ 000001A0 0080A0E1 MOV R8,R0 4532 p->pkt.uin=0; \ 000001A4 006088E5 STR R6,[R8, #+0] 4533 p->pkt.type=T_XTEXT_SET; \ 000001A8 B450C8E1 STRH R5,[R8, #+4] 4534 p->pkt.data_len=l1+l2+1; \ 000001AC 00009DE5 LDR R0,[SP, #+0] \ 000001B0 04109DE5 LDR R1,[SP, #+4] \ 000001B4 000081E0 ADD R0,R1,R0 \ 000001B8 010080E2 ADD R0,R0,#+1 \ 000001BC B600C8E1 STRH R0,[R8, #+6] 4535 strncpy(p->data+0,s1,l1); \ 000001C0 00209DE5 LDR R2,[SP, #+0] \ 000001C4 0910A0E1 MOV R1,R9 \ 000001C8 080088E2 ADD R0,R8,#+8 \ 000001CC 160100EF SWI +278 4536 p->data[l1]=0; \ 000001D0 00009DE5 LDR R0,[SP, #+0] 4537 strncpy(p->data+l1+1,s2,l2); \ 000001D4 0A10A0E1 MOV R1,R10 \ 000001D8 080080E0 ADD R0,R0,R8 \ 000001DC 0860C0E5 STRB R6,[R0, #+8] \ 000001E0 00009DE5 LDR R0,[SP, #+0] \ 000001E4 04209DE5 LDR R2,[SP, #+4] \ 000001E8 080080E0 ADD R0,R0,R8 \ 000001EC 090080E2 ADD R0,R0,#+9 \ 000001F0 160100EF SWI +278 4538 SUBPROC((void *)SendAnswer,0,p); \ 000001F4 0820A0E1 MOV R2,R8 \ 000001F8 0010A0E3 MOV R1,#+0 \ 000001FC 0400A0E1 MOV R0,R4 \ 00000200 710100EF SWI +369 4539 tracktimer=0; \ ??set_my_xstatus_1: \ 00000204 4C6387E5 STR R6,[R7, #+844] 4540 GetTags(); \ 00000208 ........ _BLF GetTags,??GetTags??rA \ 0000020C F787BDE8 POP {R0-R2,R4-R10,PC} ;; return 4541 } 4542 #endif 4543 } 4544 4545 #ifdef NEWSGOLD 4546 \ In segment CODE, align 4, keep-with-next 4547 void set_my_xstatus2(void) 4548 { \ set_my_xstatus2: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 4549 TPKT *p; 4550 // char *s1; 4551 // char *s2; 4552 int l1; 4553 int l2; 4554 p=malloc(sizeof(PKT)+1); 4555 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 4556 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 4557 p->pkt.data_len=1; // Длина пакета: 1 байт 4558 p->data[0]=11; 4559 SUBPROC((void *)SendAnswer,0,p); \ 00000004 ........ LDR R6,??DataTable168 ;; SendAnswer 4560 // char *s1; 4561 char *sk2=malloc(256); 4562 // strcpy(s1, playing); 4563 // s1="Now playing:"; 4564 strcpy(sk2,teast2); 4565 l1=strlen(playing); \ 00000008 DC809FE5 LDR R8,??set_my_xstatus2_0 ;; playing \ 0000000C 04D04DE2 SUB SP,SP,#+4 \ 00000010 0900A0E3 MOV R0,#+9 \ 00000014 140000EF SWI +20 \ 00000018 0040A0E1 MOV R4,R0 \ 0000001C 0050A0E3 MOV R5,#+0 \ 00000020 005084E5 STR R5,[R4, #+0] \ 00000024 1600A0E3 MOV R0,#+22 \ 00000028 B400C4E1 STRH R0,[R4, #+4] \ 0000002C 0100A0E3 MOV R0,#+1 \ 00000030 B600C4E1 STRH R0,[R4, #+6] \ 00000034 0B00A0E3 MOV R0,#+11 \ 00000038 0800C4E5 STRB R0,[R4, #+8] \ 0000003C 0420A0E1 MOV R2,R4 \ 00000040 0010A0E3 MOV R1,#+0 \ 00000044 0600A0E1 MOV R0,R6 \ 00000048 710100EF SWI +369 \ 0000004C 400FA0E3 MOV R0,#+256 \ 00000050 140000EF SWI +20 \ 00000054 94109FE5 LDR R1,??set_my_xstatus2_0+0x4 ;; teast2 \ 00000058 0070A0E1 MOV R7,R0 \ 0000005C 1A0000EF SWI +26 \ 00000060 0800A0E1 MOV R0,R8 \ 00000064 1B0000EF SWI +27 \ 00000068 0090A0E1 MOV R9,R0 4566 l2=strlen(sk2); \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 1B0000EF SWI +27 \ 00000074 00A0A0E1 MOV R10,R0 4567 if ((!playing)||(!sk2)) return; \ 00000078 000057E3 CMP R7,#+0 \ 0000007C F187BD08 POPEQ {R0,R4-R10,PC} 4568 p=malloc(sizeof(PKT)+l1+l2+1); \ 00000080 09008AE0 ADD R0,R10,R9 \ 00000084 090080E2 ADD R0,R0,#+9 \ 00000088 140000EF SWI +20 \ 0000008C 0040A0E1 MOV R4,R0 4569 p->pkt.uin=0; \ 00000090 005084E5 STR R5,[R4, #+0] 4570 p->pkt.type=T_XTEXT_SET; \ 00000094 1A00A0E3 MOV R0,#+26 \ 00000098 B400C4E1 STRH R0,[R4, #+4] 4571 p->pkt.data_len=l1+l2+1; \ 0000009C 09008AE0 ADD R0,R10,R9 \ 000000A0 010080E2 ADD R0,R0,#+1 \ 000000A4 B600C4E1 STRH R0,[R4, #+6] 4572 strncpy(p->data+0,playing,l1); \ 000000A8 0920A0E1 MOV R2,R9 \ 000000AC 0810A0E1 MOV R1,R8 \ 000000B0 080084E2 ADD R0,R4,#+8 \ 000000B4 160100EF SWI +278 4573 p->data[l1]=0; \ 000000B8 040089E0 ADD R0,R9,R4 \ 000000BC 0850C0E5 STRB R5,[R0, #+8] 4574 strncpy(p->data+l1+1,sk2,l2); \ 000000C0 0A20A0E1 MOV R2,R10 \ 000000C4 0710A0E1 MOV R1,R7 \ 000000C8 090080E2 ADD R0,R0,#+9 \ 000000CC 160100EF SWI +278 4575 mfree(sk2); \ 000000D0 0700A0E1 MOV R0,R7 \ 000000D4 150000EF SWI +21 4576 SUBPROC((void *)SendAnswer,0,p); \ 000000D8 0420A0E1 MOV R2,R4 \ 000000DC 0010A0E3 MOV R1,#+0 \ 000000E0 0600A0E1 MOV R0,R6 \ 000000E4 710100EF SWI +369 4577 // mfree(s1); 4578 // mfree(s2); 4579 } \ 000000E8 F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??set_my_xstatus2_0: \ 000000EC ........ DC32 playing \ 000000F0 ........ DC32 teast2 4580 #endif \ In segment CODE, align 4, keep-with-next 4581 void to_develop(void) 4582 { 4583 if (silenthide) return; \ to_develop: \ 00000000 ........ LDR R0,??DataTable167 ;; icons \ 00000004 00402DE9 PUSH {LR} \ 00000008 541390E5 LDR R1,[R0, #+852] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD18 POPNE {PC} 4584 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R2,??DataTable161 ;; Canvas \ 00000018 4B1FA0E3 MOV R1,#+300 \ 0000001C E73F82E2 ADD R3,R2,#+924 4585 gipc.name_from=ipc_my_name; \ 00000020 DF2F82E2 ADD R2,R2,#+892 \ 00000024 302180E5 STR R2,[R0, #+304] 4586 gipc.data=(void *)maincsm_id; \ 00000028 002390E5 LDR R2,[R0, #+768] \ 0000002C 003081E7 STR R3,[R1, +R0] \ 00000030 342180E5 STR R2,[R0, #+308] 4587 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 00000034 003081E0 ADD R3,R1,R0 \ 00000038 0220A0E3 MOV R2,#+2 \ 0000003C B010A0E3 MOV R1,#+176 \ 00000040 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000044 0900A0E3 MOV R0,#+9 \ 00000048 420C80E3 ORR R0,R0,#0x4200 \ 0000004C 000100EF SWI +256 4588 } \ 00000050 0080BDE8 POP {PC} ;; return 4589 \ In segment CODE, align 4, keep-with-next 4590 void ReqAddMsgToChat(CLIST *t) 4591 { \ ReqAddMsgToChat: \ 00000000 70402DE9 PUSH {R4-R6,LR} 4592 if (edchat_id) \ 00000004 ........ LDR R5,??DataTable167 ;; icons \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C B80395E5 LDR R0,[R5, #+952] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 7080BD08 POPEQ {R4-R6,PC} 4593 { 4594 void *data=FindGUIbyId(edchat_id,NULL); \ 00000018 B80395E5 LDR R0,[R5, #+952] \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 090200EF SWI +521 \ 00000024 0060A0E1 MOV R6,R0 4595 { 4596 EDCHAT_STRUCT *ed_struct; 4597 ed_struct=EDIT_GetUserPointer(data); \ 00000028 DF0100EF SWI +479 4598 if (ed_struct) \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 7080BD08 POPEQ {R4-R6,PC} 4599 { 4600 if (ed_struct->ed_contact==t) \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 040050E1 CMP R0,R4 \ 0000003C 7080BD18 POPNE {R4-R6,PC} 4601 { 4602 if (EDIT_IsBusy(data)) \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 1C0200EF SWI +540 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0400000A BEQ ??ReqAddMsgToChat_0 4603 { 4604 t->req_add=1; \ 00000050 0100A0E3 MOV R0,#+1 \ 00000054 980084E5 STR R0,[R4, #+152] 4605 #ifdef EVILFOX 4606 time_to_stop_t9=2; 4607 #else 4608 time_to_stop_t9=3; \ 00000058 0300A0E3 MOV R0,#+3 \ 0000005C 080485E5 STR R0,[R5, #+1032] \ 00000060 7080BDE8 POP {R4-R6,PC} 4609 #endif 4610 } 4611 else 4612 { 4613 AddMsgToChat(data); \ ??ReqAddMsgToChat_0: \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 ........ BL AddMsgToChat 4614 DirectRedrawGUI_ID(edchat_id); \ 0000006C B80395E5 LDR R0,[R5, #+952] \ 00000070 400100EF SWI +320 4615 } 4616 } 4617 } 4618 } 4619 } 4620 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 4621 4622 GBSTMR develop; 4623 \ In segment CODE, align 4, keep-with-next 4624 void begin_to_develop() 4625 { \ begin_to_develop: \ 00000000 00402DE9 PUSH {LR} 4626 if(IsUnlocked()) \ 00000004 430000EF SWI +67 \ 00000008 000050E3 CMP R0,#+0 \ 0000000C 0100000A BEQ ??begin_to_develop_0 4627 to_develop(); \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ B to_develop ;; tailcall 4628 else 4629 GBS_StartTimerProc(&develop, 100, begin_to_develop); \ ??begin_to_develop_0: \ 00000018 0C209FE5 LDR R2,??begin_to_develop_1 ;; begin_to_develop \ 0000001C 0C009FE5 LDR R0,??begin_to_develop_1+0x4 ;; icons + 7560 \ 00000020 6410A0E3 MOV R1,#+100 \ 00000024 4D0000EF SWI +77 4630 } \ 00000028 0080BDE8 POP {PC} ;; return \ ??begin_to_develop_1: \ 0000002C ........ DC32 begin_to_develop \ 00000030 ........ DC32 icons + 7560 4631 4632 4633 4634 //----------------------------- LOAD COMMANDS -----------------------------// 4635 //Templates 4636 char *cmd_chars; //Собственно файл 4637 char **cmd_lines; //Массив указателей на строки 4638 \ In segment CODE, align 4, keep-with-next 4639 void cmdFree(void) 4640 { \ cmdFree: \ 00000000 10402DE9 PUSH {R4,LR} 4641 if (cmd_lines) mfree(cmd_lines); \ 00000004 ........ LDR R4,??DataTable166 ;; CmdMenuHeader \ 00000008 180094E5 LDR R0,[R4, #+24] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0000000A BEQ ??cmdFree_0 \ 00000014 150000EF SWI +21 4642 if (cmd_chars) mfree(cmd_chars); \ ??cmdFree_0: \ 00000018 140094E5 LDR R0,[R4, #+20] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0100000A BEQ ??cmdFree_1 \ 00000024 150000EF SWI +21 4643 cmd_lines=NULL; \ 00000028 0000A0E3 MOV R0,#+0 \ ??cmdFree_1: \ 0000002C 180084E5 STR R0,[R4, #+24] 4644 cmd_chars=NULL; \ 00000030 140084E5 STR R0,[R4, #+20] 4645 } \ 00000034 1080BDE8 POP {R4,PC} ;; return 4646 \ In segment CODE, align 4, keep-with-next 4647 int LoadCmd() 4648 { \ LoadCmd: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 4BDF4DE2 SUB SP,SP,#+300 4649 FSTATS stat; 4650 char fn[256]; 4651 int f; 4652 unsigned int ul; 4653 int i; 4654 int fsize; 4655 char *p; 4656 char *pp; 4657 int c; 4658 cmdFree(); \ 00000008 ........ BL cmdFree 4659 strcpy(fn,TEMPLATES_PATH); \ 0000000C ........ LDR R1,??DataTable164 ;; TEMPLATES_PATH \ 00000010 04008DE2 ADD R0,SP,#+4 \ 00000014 1A0000EF SWI +26 4660 i=strlen(fn); \ 00000018 04008DE2 ADD R0,SP,#+4 \ 0000001C 1B0000EF SWI +27 4661 sprintf(fn+i,"\\cmd.txt"); \ 00000020 EC109FE5 LDR R1,??LoadCmd_0 ;; `?` \ 00000024 0070A0E1 MOV R7,R0 \ 00000028 04008DE2 ADD R0,SP,#+4 \ 0000002C 000087E0 ADD R0,R7,R0 \ 00000030 160000EF SWI +22 4662 GetFileStats(fn,&stat,&ul); \ 00000034 0D20A0E1 MOV R2,SP \ 00000038 411F8DE2 ADD R1,SP,#+260 \ 0000003C 04008DE2 ADD R0,SP,#+4 \ 00000040 840000EF SWI +132 4663 fsize=stat.size; \ 00000044 08719DE5 LDR R7,[SP, #+264] 4664 f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul); \ 00000048 0D30A0E1 MOV R3,SP \ 0000004C 8020A0E3 MOV R2,#+128 \ 00000050 801CA0E3 MOV R1,#+32768 \ 00000054 04008DE2 ADD R0,SP,#+4 \ 00000058 0A0000EF SWI +10 \ 0000005C 0080A0E1 MOV R8,R0 4665 if (f==-1) return 0; \ 00000060 010078E3 CMN R8,#+1 \ 00000064 0200001A BNE ??LoadCmd_1 \ 00000068 0000A0E3 MOV R0,#+0 \ ??LoadCmd_2: \ 0000006C 4BDF8DE2 ADD SP,SP,#+300 ;; stack cleaning \ 00000070 F087BDE8 POP {R4-R10,PC} ;; return 4666 p=cmd_chars=malloc(fsize+1); \ ??LoadCmd_1: \ 00000074 ........ LDR R4,??DataTable166 ;; CmdMenuHeader \ 00000078 010087E2 ADD R0,R7,#+1 \ 0000007C 140000EF SWI +20 \ 00000080 140084E5 STR R0,[R4, #+20] \ 00000084 0060A0E1 MOV R6,R0 4667 p[fread(f,p,fsize,&ul)]=0; \ 00000088 0050A0E3 MOV R5,#+0 \ 0000008C 0D30A0E1 MOV R3,SP \ 00000090 0720A0E1 MOV R2,R7 \ 00000094 0610A0E1 MOV R1,R6 \ 00000098 0800A0E1 MOV R0,R8 \ 0000009C 0B0000EF SWI +11 \ 000000A0 0650C0E7 STRB R5,[R0, +R6] 4668 fclose(f,&ul); \ 000000A4 0D10A0E1 MOV R1,SP \ 000000A8 0800A0E1 MOV R0,R8 \ 000000AC 0D0000EF SWI +13 4669 i=0; \ 000000B0 0070A0E3 MOV R7,#+0 4670 pp=p; \ 000000B4 0680A0E1 MOV R8,R6 \ 000000B8 020000EA B ??LoadCmd_3 4671 for(;;) 4672 { 4673 c=*p; 4674 if (c<32) 4675 { 4676 if (pp&&(pp!=p)) 4677 { 4678 cmd_lines=realloc(cmd_lines,(i+1)*sizeof(char *)); 4679 cmd_lines[i++]=pp; 4680 } 4681 pp=NULL; 4682 if (!c) break; 4683 *p=0; 4684 } 4685 else 4686 { 4687 if (pp==NULL) pp=p; \ ??LoadCmd_4: \ 000000BC 000058E3 CMP R8,#+0 \ 000000C0 0680A001 MOVEQ R8,R6 4688 } 4689 p++; \ ??LoadCmd_5: \ 000000C4 016086E2 ADD R6,R6,#+1 \ ??LoadCmd_3: \ 000000C8 0090D6E5 LDRB R9,[R6, #+0] \ 000000CC 200059E3 CMP R9,#+32 \ 000000D0 F9FFFFAA BGE ??LoadCmd_4 \ 000000D4 000058E3 CMP R8,#+0 \ 000000D8 06005811 CMPNE R8,R6 \ 000000DC 0600000A BEQ ??LoadCmd_6 \ 000000E0 180094E5 LDR R0,[R4, #+24] \ 000000E4 01A087E2 ADD R10,R7,#+1 \ 000000E8 0A11A0E1 LSL R1,R10,#+2 \ 000000EC BA0000EF SWI +186 \ 000000F0 180084E5 STR R0,[R4, #+24] \ 000000F4 078180E7 STR R8,[R0, +R7, LSL #+2] \ 000000F8 0A70A0E1 MOV R7,R10 \ ??LoadCmd_6: \ 000000FC 0080A0E3 MOV R8,#+0 \ 00000100 000059E3 CMP R9,#+0 4690 } 4691 return i; \ 00000104 0700A001 MOVEQ R0,R7 \ 00000108 D7FFFF0A BEQ ??LoadCmd_2 \ 0000010C 0050C6E5 STRB R5,[R6, #+0] \ 00000110 EBFFFFEA B ??LoadCmd_5 \ ??LoadCmd_0: \ 00000114 ........ DC32 `?` 4692 } 4693 4694 int NumOfItems=0; 4695 HEADER_DESC CmdMenuHeader={NULL,NULL,NULL,NULL,NULL,NULL,LGP_NULL}; 4696 \ In segment CODE, align 4, keep-with-next 4697 void CmdMenuItemHandler(void *data, int curitem, void *unk) 4698 { \ CmdMenuItemHandler: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 4699 void *item=AllocMenuItem(data); \ 0000000C 970100EF SWI +407 \ 00000010 0060A0E1 MOV R6,R0 4700 char *p=cmd_lines[curitem]; \ 00000014 3C009FE5 LDR R0,??CmdMenuItemHandler_0 ;; CmdMenuHeader + 24 \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 057190E7 LDR R7,[R0, +R5, LSL #+2] 4701 WSHDR *ws=AllocMenuWS(data,strlen(p)); \ 00000020 0700A0E1 MOV R0,R7 \ 00000024 1B0000EF SWI +27 \ 00000028 0010A0E1 MOV R1,R0 \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 980100EF SWI +408 \ 00000034 0080A0E1 MOV R8,R0 4702 ascii2ws(ws,p); \ 00000038 0710A0E1 MOV R1,R7 \ 0000003C ........ _BLF ascii2ws,??ascii2ws??rA 4703 SetMenuItemText(data, item, ws, curitem); \ 00000040 0530A0E1 MOV R3,R5 \ 00000044 0820A0E1 MOV R2,R8 \ 00000048 0610A0E1 MOV R1,R6 \ 0000004C 0400A0E1 MOV R0,R4 \ 00000050 9A0100EF SWI +410 4704 } \ 00000054 F081BDE8 POP {R4-R8,PC} ;; return \ ??CmdMenuItemHandler_0: \ 00000058 ........ DC32 CmdMenuHeader + 24 4705 \ In segment CODE, align 4, keep-with-next 4706 void CmdMenuGHook(void *data, int cmd) 4707 { \ CmdMenuGHook: \ 00000000 00402DE9 PUSH {LR} 4708 if (cmd==TI_CMD_FOCUS) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0100001A BNE ??CmdMenuGHook_0 4709 { 4710 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 \ 00000010 0080BDE8 POP {PC} 4711 } 4712 if (cmd==TI_CMD_DESTROY) \ ??CmdMenuGHook_0: \ 00000014 030051E3 CMP R1,#+3 \ 00000018 0080BD18 POPNE {PC} 4713 { 4714 cmdFree(); \ 0000001C 0040BDE8 POP {LR} ;; Pop \ 00000020 ........ B cmdFree ;; tailcall 4715 } 4716 } 4717 \ In segment CODE, align 4, keep-with-next 4718 static int CmdMenuKeyHook(void *data, GUI_MSG *msg) 4719 { \ CmdMenuKeyHook: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 4720 int Selected=GetCurMenuItem(data); \ 0000000C 8F0100EF SWI +399 \ 00000010 0060A0E1 MOV R6,R0 4721 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000014 0400A0E1 MOV R0,R4 \ 00000018 E00100EF SWI +480 \ 0000001C 0040A0E1 MOV R4,R0 4722 if ((msg->keys==0x18)||(msg->keys==0x3D)) \ 00000020 F200D5E1 LDRSH R0,[R5, #+2] \ 00000024 180050E3 CMP R0,#+24 \ 00000028 3D005013 CMPNE R0,#+61 \ 0000002C 1700001A BNE ??CmdMenuKeyHook_0 4723 { 4724 if (NumOfItems) \ 00000030 ........ LDR R0,??DataTable166 ;; CmdMenuHeader \ 00000034 1C1090E5 LDR R1,[R0, #+28] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 1300000A BEQ ??CmdMenuKeyHook_0 4725 { 4726 const char *p=cmd_lines[Selected]; \ 00000040 180090E5 LDR R0,[R0, #+24] \ 00000044 065190E7 LDR R5,[R0, +R6, LSL #+2] 4727 WSHDR *ws; 4728 ws=AllocWS(256); \ 00000048 400FA0E3 MOV R0,#+256 \ 0000004C 250100EF SWI +293 \ 00000050 0060A0E1 MOV R6,R0 4729 wsprintf(ws,p); \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 240100EF SWI +292 4730 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ws); \ 0000005C 040094E5 LDR R0,[R4, #+4] \ 00000060 081094E5 LDR R1,[R4, #+8] \ 00000064 0620A0E1 MOV R2,R6 \ 00000068 DE0100EF SWI +478 4731 EDIT_SetCursorPos(ed_struct->ed_chatgui,wstrlen(ws)+1); \ 0000006C 0600A0E1 MOV R0,R6 \ 00000070 230100EF SWI +291 \ 00000074 011080E2 ADD R1,R0,#+1 \ 00000078 040094E5 LDR R0,[R4, #+4] \ 0000007C D40100EF SWI +468 4732 4733 FreeWS(ws); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 290100EF SWI +297 4734 return(1); \ 00000088 0100A0E3 MOV R0,#+1 \ 0000008C 7080BDE8 POP {R4-R6,PC} 4735 } 4736 } 4737 return(0); \ ??CmdMenuKeyHook_0: \ 00000090 0000A0E3 MOV R0,#+0 \ 00000094 7080BDE8 POP {R4-R6,PC} ;; return 4738 } 4739 4740 const int CmdSoftkeys[]={0,1,2}; 4741 4742 const SOFTKEY_DESC cmd_sk[]= 4743 { 4744 {0x0004,0x0000,(int)""}, 4745 {0x0001,0x0000,(int)LG_CLOSE}, 4746 {0x003D,0x0000,(int)LGP_DOIT_PIC} 4747 }; 4748 const SOFTKEYSTAB cmd_Back_skt= 4749 { 4750 cmd_sk,0 4751 }; 4752 static const MENU_DESC CmdMenuStruct= 4753 { 4754 8,CmdMenuKeyHook,CmdMenuGHook,NULL, 4755 CmdSoftkeys, 4756 &cmd_Back_skt, 4757 0x10, 4758 CmdMenuItemHandler, 4759 NULL, //menuitems, 4760 NULL, //menuprocs, 4761 NULL 4762 }; 4763 \ In segment CODE, align 4, keep-with-next 4764 int DispCmdMenu(void *ed_gui) 4765 { \ DispCmdMenu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 4766 NumOfItems=LoadCmd(); \ 00000004 68509FE5 LDR R5,??DispCmdMenu_0 ;; CmdMenuHeader 4767 if(NumOfItems) \ 00000008 68609FE5 LDR R6,??DispCmdMenu_0+0x4 ;; `?` \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ BL LoadCmd \ 00000014 1C0085E5 STR R0,[R5, #+28] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 0F00000A BEQ ??DispCmdMenu_1 4768 { 4769 *((int *)(&CmdMenuHeader.lgp_id))=(int)"Select command"; \ 00000020 0C6085E5 STR R6,[R5, #+12] 4770 patch_header(&CmdMenuHeader); \ 00000024 0500A0E1 MOV R0,R5 \ 00000028 ........ _BLF patch_header,??patch_header??rA 4771 return CreateMenu(0,0,&CmdMenuStruct,&CmdMenuHeader,0,NumOfItems,ed_gui,0); \ 0000002C 0000A0E3 MOV R0,#+0 \ 00000030 01002DE9 PUSH {R0} \ 00000034 10002DE9 PUSH {R4} \ 00000038 1C0095E5 LDR R0,[R5, #+28] \ 0000003C 0530A0E1 MOV R3,R5 \ 00000040 01002DE9 PUSH {R0} \ 00000044 202086E2 ADD R2,R6,#+32 \ 00000048 0010A0E3 MOV R1,#+0 \ 0000004C 0000A0E3 MOV R0,#+0 \ 00000050 01002DE9 PUSH {R0} \ 00000054 520100EF SWI +338 \ 00000058 10D08DE2 ADD SP,SP,#+16 \ 0000005C 7080BDE8 POP {R4-R6,PC} 4772 } 4773 MsgBoxError(1, (int)"FILE NOT FOUND!"); \ ??DispCmdMenu_1: \ 00000060 101086E2 ADD R1,R6,#+16 \ 00000064 0100A0E3 MOV R0,#+1 \ 00000068 4E0000EF SWI +78 4774 return(0); \ 0000006C 0000A0E3 MOV R0,#+0 \ 00000070 7080BDE8 POP {R4-R6,PC} ;; return \ ??DispCmdMenu_0: \ 00000074 ........ DC32 CmdMenuHeader \ 00000078 ........ DC32 `?` 4775 } 4776 /* 4777 char *GetStatusByIconIndex(int icon) 4778 { 4779 char *stat=malloc(32); 4780 switch(icon) 4781 { 4782 case IS_OFFLINE : sprintf(stat,"Offline"); break; 4783 case IS_INVISIBLE : sprintf(stat,"Invisable"); break; 4784 case IS_AWAY : sprintf(stat,"Away"); break; 4785 case IS_NA : sprintf(stat,"N/A"); break; 4786 case IS_OCCUPIED: sprintf(stat,"Occupied"); break; 4787 case IS_DND : sprintf(stat,"DND"); break; 4788 case IS_DEPRESSION : sprintf(stat,"Depression"); break; 4789 case IS_EVIL : sprintf(stat,"Evil"); break; 4790 case IS_HOME : sprintf(stat,"Home"); break; 4791 case IS_LUNCH : sprintf(stat,"Lunch"); break; 4792 case IS_WORK : sprintf(stat,"Work"); break; 4793 case IS_ONLINE : sprintf(stat,"Online"); break; 4794 case IS_FFC : sprintf(stat,"FFC"); break; 4795 default : sprintf(stat,"Error status"); break; 4796 } 4797 return stat; 4798 } 4799 */ 4800 \ In segment CODE, align 4, keep-with-next 4801 char *GetStatusByIconIndex(int icon) 4802 { \ GetStatusByIconIndex: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 4803 char *stat=malloc(32); \ 00000008 2000A0E3 MOV R0,#+32 \ 0000000C 140000EF SWI +20 4804 switch(icon) \ 00000010 94109FE5 LDR R1,??GetStatusByIconIndex_1+0x4 ;; `?` \ 00000014 0050A0E1 MOV R5,R0 \ 00000018 0C0054E3 CMP R4,#+12 \ 0000001C 1A00008A BHI ??GetStatusByIconIndex_2 \ 00000020 010F8FE2 ADR R0,??GetStatusByIconIndex_0 \ 00000024 0400D0E7 LDRB R0,[R0, R4] \ 00000028 00F18FE0 ADD PC,PC,R0, LSL #+2 \ ??GetStatusByIconIndex_0: \ 0000002C 1A030507 DC8 +26,+3,+5,+7 \ 00000030 090B0D0F DC8 +9,+11,+13,+15 \ 00000034 11131517 DC8 +17,+19,+21,+23 \ 00000038 19000000 DC8 +25,+0,+0,+0 4805 { 4806 case IS_OFFLINE : sprintf(stat,"Отключен"); break; 4807 case IS_INVISIBLE : sprintf(stat,"Невидимый"); break; \ ??GetStatusByIconIndex_3: \ 0000003C 0C1081E2 ADD R1,R1,#+12 \ 00000040 140000EA B ??GetStatusByIconIndex_4 4808 case IS_AWAY : sprintf(stat,"Отсутсвует"); break; \ ??GetStatusByIconIndex_5: \ 00000044 181081E2 ADD R1,R1,#+24 \ 00000048 120000EA B ??GetStatusByIconIndex_4 4809 case IS_NA : sprintf(stat,"Не доступен"); break; \ ??GetStatusByIconIndex_6: \ 0000004C 241081E2 ADD R1,R1,#+36 \ 00000050 100000EA B ??GetStatusByIconIndex_4 4810 case IS_OCCUPIED: sprintf(stat,"Занят"); break; \ ??GetStatusByIconIndex_7: \ 00000054 301081E2 ADD R1,R1,#+48 \ 00000058 0E0000EA B ??GetStatusByIconIndex_4 4811 case IS_DND : sprintf(stat,"Не беспокоить");break; \ ??GetStatusByIconIndex_8: \ 0000005C 381081E2 ADD R1,R1,#+56 \ 00000060 0C0000EA B ??GetStatusByIconIndex_4 4812 case IS_DEPRESSION : sprintf(stat,"Депрессия"); break; \ ??GetStatusByIconIndex_9: \ 00000064 481081E2 ADD R1,R1,#+72 \ 00000068 0A0000EA B ??GetStatusByIconIndex_4 4813 case IS_EVIL : sprintf(stat,"Злой"); break; \ ??GetStatusByIconIndex_10: \ 0000006C 541081E2 ADD R1,R1,#+84 \ 00000070 080000EA B ??GetStatusByIconIndex_4 4814 case IS_HOME : sprintf(stat,"Дома"); break; \ ??GetStatusByIconIndex_11: \ 00000074 5C1081E2 ADD R1,R1,#+92 \ 00000078 060000EA B ??GetStatusByIconIndex_4 4815 case IS_LUNCH : sprintf(stat,"Жру"); break; \ ??GetStatusByIconIndex_12: \ 0000007C 091F8FE2 ADR R1,??GetStatusByIconIndex_1 ;; "Жру" \ 00000080 040000EA B ??GetStatusByIconIndex_4 4816 case IS_WORK : sprintf(stat,"Работа"); break; \ ??GetStatusByIconIndex_13: \ 00000084 641081E2 ADD R1,R1,#+100 \ 00000088 020000EA B ??GetStatusByIconIndex_4 4817 case IS_ONLINE : sprintf(stat,"В сети"); break; \ ??GetStatusByIconIndex_2: \ 0000008C 6C1081E2 ADD R1,R1,#+108 \ 00000090 000000EA B ??GetStatusByIconIndex_4 4818 case IS_FFC : sprintf(stat,"Готов болтать");break; \ ??GetStatusByIconIndex_14: \ 00000094 741081E2 ADD R1,R1,#+116 \ ??GetStatusByIconIndex_4: \ 00000098 0500A0E1 MOV R0,R5 \ 0000009C 160000EF SWI +22 4819 default : sprintf(stat,"В сети"); break; 4820 } 4821 return stat; \ 000000A0 0500A0E1 MOV R0,R5 \ 000000A4 3080BDE8 POP {R4,R5,PC} ;; return \ ??GetStatusByIconIndex_1: \ 000000A8 C6F0F300 DC8 "Жру" \ 000000AC ........ DC32 `?` 4822 } 4823 //----------------------------- CHECK COMMANDS -----------------------------// 4824 4825 4826 int comanda; 4827 4828 char requests1[]="Sending online time..."; 4829 char requests2[]="Sending msg info..."; 4830 char requests3[]="Sending battery info..."; 4831 char requests4[]="Sending mod info..."; 4832 char requests6[]="Sending offline info..."; 4833 char mod_info[264]; 4834 #ifdef NEWSGOLD 4835 #ifdef ELKA 4836 #ifdef ole64//kluchnik 4837 #define PLATFORM "Plяtform from ОлежкО" 4838 #else 4839 #define PLATFORM "Platform: ЁLKA" 4840 #endif 4841 #else 4842 #define PLATFORM "Platform: NEWЫGOLD" 4843 #endif 4844 #else 4845 #define PLATFORM "Platform: ЫGOLD" 4846 #endif 4847 4848 #define ENA_SIGNAL 1 //для команд, активировать сигналы,али нет 4849 #define DIS_SIGNAL 0 4850 4851 4852 \ In segment CODE, align 4, keep-with-next 4853 void SendData(CLIST *t,char *s,int signal,int count) 4854 { \ SendData: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0140A0E1 MOV R4,R1 \ 00000008 0050A0E1 MOV R5,R0 4855 comanda=0; \ 0000000C ........ LDR R0,??DataTable167 ;; icons \ 00000010 0010A0E3 MOV R1,#+0 \ 00000014 0C1480E5 STR R1,[R0, #+1036] 4856 t->signals=signal; \ 00000018 802085E5 STR R2,[R5, #+128] 4857 TPKT *p; 4858 SENDMSGCOUNT+=count; \ 0000001C 081390E5 LDR R1,[R0, #+776] \ 00000020 011083E0 ADD R1,R3,R1 \ 00000024 081380E5 STR R1,[R0, #+776] 4859 p=malloc(sizeof(PKT)+strlen(s)+1); \ 00000028 0400A0E1 MOV R0,R4 \ 0000002C 1B0000EF SWI +27 \ 00000030 090080E2 ADD R0,R0,#+9 \ 00000034 140000EF SWI +20 \ 00000038 0060A0E1 MOV R6,R0 4860 p->pkt.uin=t->uin; \ 0000003C 0C0095E5 LDR R0,[R5, #+12] \ 00000040 000086E5 STR R0,[R6, #+0] 4861 p->pkt.type=T_SENDMSG; \ 00000044 0200A0E3 MOV R0,#+2 \ 00000048 B400C6E1 STRH R0,[R6, #+4] 4862 p->pkt.data_len=strlen(s); \ 0000004C 0400A0E1 MOV R0,R4 \ 00000050 1B0000EF SWI +27 \ 00000054 B600C6E1 STRH R0,[R6, #+6] 4863 strcpy(p->data,s); \ 00000058 0410A0E1 MOV R1,R4 \ 0000005C 080086E2 ADD R0,R6,#+8 \ 00000060 1A0000EF SWI +26 4864 SUBPROC((void *)SendAnswer,0,p); \ 00000064 ........ LDR R0,??DataTable168 ;; SendAnswer \ 00000068 0620A0E1 MOV R2,R6 \ 0000006C 0010A0E3 MOV R1,#+0 \ 00000070 710100EF SWI +369 4865 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 4866 \ In segment DATA_Z, align 4, align-sorted 4867 unsigned int *errornumber; \ errornumber: \ 00000000 DS8 4 4868 \ In segment CODE, align 4, keep-with-next 4869 void CheckComand(char *txt, CLIST *t) 4870 { \ CheckComand: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 4871 comanda=1; \ 00000004 ........ LDR R5,??DataTable183 ;; icons 4872 #ifdef ole64 4873 sprintf(mod_info,"mod by Evilfox,kluchnik,windes based on revision 2058 from ОлежкО64, mod date: %s at %s ",__DATE__,__TIME__); 4874 #else 4875 sprintf(mod_info,"mod by Evilfox,kluchnik,windes based on revision 2058, mod date: %s at %s ",__DATE__,__TIME__); \ 00000008 046C9FE5 LDR R6,??CheckComand_0 ;; `?` \ 0000000C 89DF4DE2 SUB SP,SP,#+548 \ 00000010 00B0A0E1 MOV R11,R0 \ 00000014 0140A0E1 MOV R4,R1 \ 00000018 0100A0E3 MOV R0,#+1 \ 0000001C 0C0485E5 STR R0,[R5, #+1036] 4876 #endif 4877 // sprintf(mod_info,"mod by %s based on revision 2058, mod date: Apr 21 2008 ",devel); 4878 t->signals=1; 4879 if(!strcmp(txt, "__TEXTINFO") || !strcmp(txt, "__TI")) \ 00000020 ........ LDR R7,??DataTable170 ;; I_str \ 00000024 F010A0E3 MOV R1,#+240 \ 00000028 741D81E3 ORR R1,R1,#0x1D00 \ 0000002C 051081E0 ADD R1,R1,R5 \ 00000030 0C108DE5 STR R1,[SP, #+12] \ 00000034 0C009DE5 LDR R0,[SP, #+12] \ 00000038 583086E2 ADD R3,R6,#+88 \ 0000003C 4C2086E2 ADD R2,R6,#+76 \ 00000040 0610A0E1 MOV R1,R6 \ 00000044 160000EF SWI +22 \ 00000048 0100A0E3 MOV R0,#+1 \ 0000004C 800084E5 STR R0,[R4, #+128] \ 00000050 7410A0E3 MOV R1,#+116 \ 00000054 6C1D81E3 ORR R1,R1,#0x1B00 \ 00000058 051081E0 ADD R1,R1,R5 \ 0000005C 10108DE5 STR R1,[SP, #+16] \ 00000060 0080A0E3 MOV R8,#+0 \ 00000064 6B1F86E2 ADD R1,R6,#+428 \ 00000068 0B00A0E1 MOV R0,R11 \ 0000006C 190000EF SWI +25 \ 00000070 000050E3 CMP R0,#+0 \ 00000074 0400000A BEQ ??CheckComand_1 \ 00000078 6E1F86E2 ADD R1,R6,#+440 \ 0000007C 0B00A0E1 MOV R0,R11 \ 00000080 190000EF SWI +25 \ 00000084 000050E3 CMP R0,#+0 \ 00000088 8600001A BNE ??CheckComand_2 4880 { 4881 char *s=malloc(16384); \ ??CheckComand_1: \ 0000008C 400CA0E3 MOV R0,#+16384 \ 00000090 140000EF SWI +20 \ 00000094 0090A0E1 MOV R9,R0 4882 char pl[256]; 4883 *s=0; \ 00000098 0080C9E5 STRB R8,[R9, #+0] 4884 snprintf(pl,256,"%s model: %s sw: %s\r\n",PLATFORM,Get_Phone_Info(PI_MODEL),Get_Phone_Info(PI_SW_NUMBER)); \ 0000009C 0700A0E3 MOV R0,#+7 \ 000000A0 D50100EF SWI +469 \ 000000A4 00A0A0E1 MOV R10,R0 \ 000000A8 0900A0E3 MOV R0,#+9 \ 000000AC D50100EF SWI +469 \ 000000B0 00042DE9 PUSH {R10} \ 000000B4 01002DE9 PUSH {R0} \ 000000B8 7C3086E2 ADD R3,R6,#+124 \ 000000BC 642086E2 ADD R2,R6,#+100 \ 000000C0 401FA0E3 MOV R1,#+256 \ 000000C4 2C008DE2 ADD R0,SP,#+44 \ 000000C8 1B0100EF SWI +283 4885 strcat(s,pl); \ 000000CC 2C108DE2 ADD R1,SP,#+44 \ 000000D0 0900A0E1 MOV R0,R9 \ 000000D4 170000EF SWI +23 4886 char online[256]; 4887 sprintf(online,"Время в онлайн: %02d:%02d:%02d \r\n" 4888 "Сервер: %s \r\n%s \r\n", uptimeHour, uptimeMin, uptimeSec, hostbuf2,PINGO); \ 000000D8 4C00A0E3 MOV R0,#+76 \ 000000DC 580D80E3 ORR R0,R0,#0x1600 \ 000000E0 050080E0 ADD R0,R0,R5 \ 000000E4 01002DE9 PUSH {R0} \ 000000E8 1C009DE5 LDR R0,[SP, #+28] \ 000000EC 8C1086E2 ADD R1,R6,#+140 \ 000000F0 01002DE9 PUSH {R0} \ 000000F4 480395E5 LDR R0,[R5, #+840] \ 000000F8 01002DE9 PUSH {R0} \ 000000FC 443395E5 LDR R3,[R5, #+836] \ 00000100 402395E5 LDR R2,[R5, #+832] \ 00000104 4E0F8DE2 ADD R0,SP,#+312 \ 00000108 160000EF SWI +22 4889 strcat(s,online); \ 0000010C 4E1F8DE2 ADD R1,SP,#+312 \ 00000110 0900A0E1 MOV R0,R9 \ 00000114 170000EF SWI +23 4890 char *send_txt=malloc(64); \ 00000118 4000A0E3 MOV R0,#+64 \ 0000011C 140000EF SWI +20 \ 00000120 00A0A0E1 MOV R10,R0 4891 sprintf(send_txt, "Отправлено сообщений: %d \r\n" 4892 "Принято сообщений: %d \r\n", main2_count, main_count); \ 00000124 ........ LDR R0,??DataTable174 ;; main_count \ 00000128 C01086E2 ADD R1,R6,#+192 \ 0000012C 003090E5 LDR R3,[R0, #+0] \ 00000130 ........ LDR R0,??DataTable175 ;; main2_count \ 00000134 002090E5 LDR R2,[R0, #+0] \ 00000138 0A00A0E1 MOV R0,R10 \ 0000013C 160000EF SWI +22 4893 strcat(s,send_txt); \ 00000140 0A10A0E1 MOV R1,R10 \ 00000144 0900A0E1 MOV R0,R9 \ 00000148 170000EF SWI +23 4894 4895 WSHDR *ws=AllocWS(64); \ 0000014C 4000A0E3 MOV R0,#+64 \ 00000150 250100EF SWI +293 \ 00000154 00B0A0E1 MOV R11,R0 4896 GetProvider(ws,0); \ 00000158 0010A0E3 MOV R1,#+0 \ 0000015C 410000EF SWI +65 4897 char prov[16]; 4898 ws_2str(ws,prov,wstrlen(ws)); \ 00000160 0B00A0E1 MOV R0,R11 \ 00000164 230100EF SWI +291 \ 00000168 0020A0E1 MOV R2,R0 \ 0000016C 28108DE2 ADD R1,SP,#+40 \ 00000170 0B00A0E1 MOV R0,R11 \ 00000174 A30000EF SWI +163 4899 sprintf(send_txt, "Оператор: %s \r\n", prov); \ 00000178 28208DE2 ADD R2,SP,#+40 \ 0000017C F41086E2 ADD R1,R6,#+244 \ 00000180 0A00A0E1 MOV R0,R10 \ 00000184 160000EF SWI +22 4900 FreeWS(ws); \ 00000188 0B00A0E1 MOV R0,R11 \ 0000018C 290100EF SWI +297 4901 strcat(s,send_txt); \ 00000190 0A10A0E1 MOV R1,R10 \ 00000194 0900A0E1 MOV R0,R9 \ 00000198 170000EF SWI +23 4902 4903 int bat; 4904 bat=*RamCap(); \ 0000019C C88000EF SWI +32968 \ 000001A0 B020D0E1 LDRH R2,[R0, #+0] 4905 sprintf(send_txt, "Заряд батареи: %d процентов \r\n", bat); \ 000001A4 411F86E2 ADD R1,R6,#+260 \ 000001A8 0A00A0E1 MOV R0,R10 \ 000001AC 160000EF SWI +22 4906 strcat(s,send_txt); \ 000001B0 0A10A0E1 MOV R1,R10 \ 000001B4 0900A0E1 MOV R0,R9 \ 000001B8 170000EF SWI +23 4907 4908 char *status=malloc(256); \ 000001BC 400FA0E3 MOV R0,#+256 \ 000001C0 140000EF SWI +20 \ 000001C4 00B0A0E1 MOV R11,R0 4909 TTime the; 4910 GetDateTime(NULL,&the); \ 000001C8 18108DE2 ADD R1,SP,#+24 \ 000001CC 0800A0E1 MOV R0,R8 \ 000001D0 B40000EF SWI +180 4911 void Get_Online_total(); 4912 Get_Online_total(); \ 000001D4 ........ BL Get_Online_total 4913 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l \ 000001D8 942395E5 LDR R2,[R5, #+916] \ 000001DC 983395E5 LDR R3,[R5, #+920] 4914 sprintf(status, "Traffic: Rx : %db Tx : %db Queue: %db \r\nTime: %02d:%02d\r\n" 4915 "Online contact: %d [total: %d] \r\nUnread message: %d/%d ", 4916 RX,TX,sendq_l, 4917 the.hour, the.min, 4918 kopa_kontaktu, kopa_online, 4919 total_unread,total_unread2); \ 000001E0 FC0295E5 LDR R0,[R5, #+764] \ 000001E4 491F86E2 ADD R1,R6,#+292 \ 000001E8 01002DE9 PUSH {R0} \ 000001EC A80395E5 LDR R0,[R5, #+936] \ 000001F0 01002DE9 PUSH {R0} \ 000001F4 C80395E5 LDR R0,[R5, #+968] \ 000001F8 01002DE9 PUSH {R0} \ 000001FC CC0395E5 LDR R0,[R5, #+972] \ 00000200 01002DE9 PUSH {R0} \ 00000204 2900DDE5 LDRB R0,[SP, #+41] \ 00000208 01002DE9 PUSH {R0} \ 0000020C 2C00DDE5 LDRB R0,[SP, #+44] \ 00000210 01002DE9 PUSH {R0} \ 00000214 9C0395E5 LDR R0,[R5, #+924] \ 00000218 01002DE9 PUSH {R0} \ 0000021C 0B00A0E1 MOV R0,R11 \ 00000220 160000EF SWI +22 \ 00000224 30D08DE2 ADD SP,SP,#+48 4920 strcat(s,status); \ 00000228 0B10A0E1 MOV R1,R11 \ 0000022C 0900A0E1 MOV R0,R9 \ 00000230 170000EF SWI +23 4921 comanda=0; 4922 if(show_send_info) \ 00000234 DC099FE5 LDR R0,??CheckComand_0+0x4 ;; show_send_info \ 00000238 0C8485E5 STR R8,[R5, #+1036] \ 0000023C 000090E5 LDR R0,[R0, #+0] \ 00000240 000050E3 CMP R0,#+0 \ 00000244 080395E5 LDR R0,[R5, #+776] \ 00000248 010080E2 ADD R0,R0,#+1 \ 0000024C 080385E5 STR R0,[R5, #+776] \ 00000250 0900000A BEQ ??CheckComand_3 4923 AddStringToLog(t,0x01,"Sending textinfo...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000254 0110A0E3 MOV R1,#+1 \ 00000258 02002DE9 PUSH {R1} \ 0000025C 8008A0E1 LSL R0,R0,#+17 \ 00000260 A008A0E1 LSR R0,R0,#+17 \ 00000264 01002DE9 PUSH {R0} \ 00000268 0730A0E1 MOV R3,R7 \ 0000026C 662F86E2 ADD R2,R6,#+408 \ 00000270 0400A0E1 MOV R0,R4 \ 00000274 ........ BL AddStringToLog \ 00000278 08D08DE2 ADD SP,SP,#+8 4924 else 4925 SENDMSGCOUNT++; 4926 SendData(t,s,ENA_SIGNAL,0); \ ??CheckComand_3: \ 0000027C 0030A0E3 MOV R3,#+0 \ 00000280 0120A0E3 MOV R2,#+1 \ 00000284 0910A0E1 MOV R1,R9 \ 00000288 0400A0E1 MOV R0,R4 \ 0000028C ........ BL SendData 4927 mfree(s); \ 00000290 0900A0E1 MOV R0,R9 \ 00000294 150000EF SWI +21 4928 mfree(send_txt); \ 00000298 0A00A0E1 MOV R0,R10 \ 0000029C 150000EF SWI +21 4929 mfree(status); \ 000002A0 0B00A0E1 MOV R0,R11 \ 000002A4 6B0100EA B ??CheckComand_4 4930 return; 4931 } 4932 4933 if(!strcmp(txt, "__TIME") || !strcmp(txt, "__T") || !strcmp(txt, "GET_TIME")) \ ??CheckComand_2: \ 000002A8 781F86E2 ADD R1,R6,#+480 \ 000002AC 0B00A0E1 MOV R0,R11 \ 000002B0 190000EF SWI +25 \ 000002B4 000050E3 CMP R0,#+0 \ 000002B8 0900000A BEQ ??CheckComand_5 \ 000002BC DE1F8FE2 ADR R1,??CheckComand_6 ;; "__T" \ 000002C0 0B00A0E1 MOV R0,R11 \ 000002C4 190000EF SWI +25 \ 000002C8 000050E3 CMP R0,#+0 \ 000002CC 0400000A BEQ ??CheckComand_5 \ 000002D0 7A1F86E2 ADD R1,R6,#+488 \ 000002D4 0B00A0E1 MOV R0,R11 \ 000002D8 190000EF SWI +25 \ 000002DC 000050E3 CMP R0,#+0 \ 000002E0 2300001A BNE ??CheckComand_7 4934 { 4935 char *status=malloc(256); \ ??CheckComand_5: \ 000002E4 400FA0E3 MOV R0,#+256 \ 000002E8 140000EF SWI +20 \ 000002EC 0090A0E1 MOV R9,R0 4936 TTime the; 4937 GetDateTime(NULL,&the); \ 000002F0 04108DE2 ADD R1,SP,#+4 \ 000002F4 0000A0E3 MOV R0,#+0 \ 000002F8 B40000EF SWI +180 4938 sprintf(status, "Time: %02d:%02d",the.hour, the.min); \ 000002FC 0530DDE5 LDRB R3,[SP, #+5] \ 00000300 0420DDE5 LDRB R2,[SP, #+4] \ 00000304 701F86E2 ADD R1,R6,#+448 \ 00000308 0900A0E1 MOV R0,R9 \ 0000030C 160000EF SWI +22 4939 comanda=0; 4940 if(show_send_info) \ 00000310 00099FE5 LDR R0,??CheckComand_0+0x4 ;; show_send_info \ 00000314 0C8485E5 STR R8,[R5, #+1036] \ 00000318 000090E5 LDR R0,[R0, #+0] \ 0000031C 000050E3 CMP R0,#+0 \ 00000320 080395E5 LDR R0,[R5, #+776] \ 00000324 010080E2 ADD R0,R0,#+1 \ 00000328 080385E5 STR R0,[R5, #+776] \ 0000032C 0900000A BEQ ??CheckComand_8 4941 AddStringToLog(t,0x01,"Sending time...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000330 0110A0E3 MOV R1,#+1 \ 00000334 02002DE9 PUSH {R1} \ 00000338 8008A0E1 LSL R0,R0,#+17 \ 0000033C A008A0E1 LSR R0,R0,#+17 \ 00000340 01002DE9 PUSH {R0} \ 00000344 0730A0E1 MOV R3,R7 \ 00000348 742F86E2 ADD R2,R6,#+464 \ 0000034C 0400A0E1 MOV R0,R4 \ 00000350 ........ BL AddStringToLog \ 00000354 08D08DE2 ADD SP,SP,#+8 4942 else 4943 SENDMSGCOUNT++; 4944 SendData(t,status,ENA_SIGNAL,0); \ ??CheckComand_8: \ 00000358 0030A0E3 MOV R3,#+0 \ 0000035C 0120A0E3 MOV R2,#+1 \ 00000360 0910A0E1 MOV R1,R9 \ 00000364 0400A0E1 MOV R0,R4 \ 00000368 ........ BL SendData 4945 mfree(status); \ 0000036C 0900A0E1 MOV R0,R9 \ 00000370 380100EA B ??CheckComand_4 4946 return; 4947 } 4948 4949 if(!strcmp(txt, "GET_PLATFORM_INFO") || !strcmp(txt, "__PLATFORM") || !strcmp(txt,"__HW")) \ ??CheckComand_7: \ 00000374 ........ LDR R9,??DataTable173 ;; SendAnswer \ 00000378 02A0A0E3 MOV R10,#+2 \ 0000037C 891F86E2 ADD R1,R6,#+548 \ 00000380 0B00A0E1 MOV R0,R11 \ 00000384 190000EF SWI +25 \ 00000388 000050E3 CMP R0,#+0 \ 0000038C 0900000A BEQ ??CheckComand_9 \ 00000390 8E1F86E2 ADD R1,R6,#+568 \ 00000394 0B00A0E1 MOV R0,R11 \ 00000398 190000EF SWI +25 \ 0000039C 000050E3 CMP R0,#+0 \ 000003A0 0400000A BEQ ??CheckComand_9 \ 000003A4 911F86E2 ADD R1,R6,#+580 \ 000003A8 0B00A0E1 MOV R0,R11 \ 000003AC 190000EF SWI +25 \ 000003B0 000050E3 CMP R0,#+0 \ 000003B4 3100001A BNE ??CheckComand_10 4950 { 4951 comanda=0; \ ??CheckComand_9: \ 000003B8 0C8485E5 STR R8,[R5, #+1036] 4952 TPKT *p; 4953 char pl[256]; 4954 snprintf(pl,256,"%s model: %s sw: %s",PLATFORM,Get_Phone_Info(PI_MODEL),Get_Phone_Info(PI_SW_NUMBER)); \ 000003BC 0700A0E3 MOV R0,#+7 \ 000003C0 D50100EF SWI +469 \ 000003C4 0080A0E1 MOV R8,R0 \ 000003C8 0900A0E3 MOV R0,#+9 \ 000003CC D50100EF SWI +469 \ 000003D0 00012DE9 PUSH {R8} \ 000003D4 01002DE9 PUSH {R0} \ 000003D8 7C3086E2 ADD R3,R6,#+124 \ 000003DC 7D2F86E2 ADD R2,R6,#+500 \ 000003E0 401FA0E3 MOV R1,#+256 \ 000003E4 4B0F8DE2 ADD R0,SP,#+300 \ 000003E8 1B0100EF SWI +283 4955 p=malloc(sizeof(PKT)+strlen(pl)+1); \ 000003EC 4B0F8DE2 ADD R0,SP,#+300 \ 000003F0 1B0000EF SWI +27 \ 000003F4 090080E2 ADD R0,R0,#+9 \ 000003F8 140000EF SWI +20 \ 000003FC 0080A0E1 MOV R8,R0 4956 p->pkt.uin=t->uin; \ 00000400 0C0094E5 LDR R0,[R4, #+12] \ 00000404 000088E5 STR R0,[R8, #+0] 4957 p->pkt.type=T_SENDMSG; \ 00000408 B4A0C8E1 STRH R10,[R8, #+4] 4958 p->pkt.data_len=strlen(pl); \ 0000040C 4B0F8DE2 ADD R0,SP,#+300 \ 00000410 1B0000EF SWI +27 \ 00000414 B600C8E1 STRH R0,[R8, #+6] 4959 strcpy(p->data,pl); \ 00000418 4B1F8DE2 ADD R1,SP,#+300 \ 0000041C 080088E2 ADD R0,R8,#+8 \ 00000420 1A0000EF SWI +26 4960 if(show_send_info) \ 00000424 EC079FE5 LDR R0,??CheckComand_0+0x4 ;; show_send_info \ 00000428 000090E5 LDR R0,[R0, #+0] \ 0000042C 08D08DE2 ADD SP,SP,#+8 \ 00000430 000050E3 CMP R0,#+0 \ 00000434 080395E5 LDR R0,[R5, #+776] \ 00000438 010080E2 ADD R0,R0,#+1 \ 0000043C 080385E5 STR R0,[R5, #+776] \ 00000440 0900000A BEQ ??CheckComand_11 4961 AddStringToLog(t,0x01,"Sending platform info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000444 0110A0E3 MOV R1,#+1 \ 00000448 02002DE9 PUSH {R1} \ 0000044C 8008A0E1 LSL R0,R0,#+17 \ 00000450 A008A0E1 LSR R0,R0,#+17 \ 00000454 01002DE9 PUSH {R0} \ 00000458 0730A0E1 MOV R3,R7 \ 0000045C 822F86E2 ADD R2,R6,#+520 \ 00000460 0400A0E1 MOV R0,R4 \ 00000464 ........ BL AddStringToLog \ 00000468 08D08DE2 ADD SP,SP,#+8 4962 else 4963 SENDMSGCOUNT++; 4964 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_11: \ 0000046C 0820A0E1 MOV R2,R8 \ ??CheckComand_12: \ 00000470 0010A0E3 MOV R1,#+0 \ 00000474 0900A0E1 MOV R0,R9 \ 00000478 710100EF SWI +369 4965 return; \ 0000047C F60000EA B ??CheckComand_13 4966 } 4967 4968 if(!strcmp(txt, "GET_ONLINE_TIME") || !strcmp(txt, "__ONLINE")) \ ??CheckComand_10: \ 00000480 9E1F86E2 ADD R1,R6,#+632 \ 00000484 0B00A0E1 MOV R0,R11 \ 00000488 190000EF SWI +25 \ 0000048C 000050E3 CMP R0,#+0 \ 00000490 0400000A BEQ ??CheckComand_14 \ 00000494 A21F86E2 ADD R1,R6,#+648 \ 00000498 0B00A0E1 MOV R0,R11 \ 0000049C 190000EF SWI +25 \ 000004A0 000050E3 CMP R0,#+0 \ 000004A4 2D00001A BNE ??CheckComand_15 4969 { 4970 comanda=0; \ ??CheckComand_14: \ 000004A8 0C8485E5 STR R8,[R5, #+1036] 4971 TPKT *p; 4972 char online[256]; 4973 sprintf(online,"Время в онлайн: %02d:%02d:%02d \n" 4974 "Сервер: %s", uptimeHour, uptimeMin, uptimeSec, hostbuf2); \ 000004AC 10009DE5 LDR R0,[SP, #+16] \ 000004B0 931F86E2 ADD R1,R6,#+588 \ 000004B4 01002DE9 PUSH {R0} \ 000004B8 480395E5 LDR R0,[R5, #+840] \ 000004BC 01002DE9 PUSH {R0} \ 000004C0 443395E5 LDR R3,[R5, #+836] \ 000004C4 402395E5 LDR R2,[R5, #+832] \ 000004C8 4B0F8DE2 ADD R0,SP,#+300 \ 000004CC 160000EF SWI +22 4975 p=malloc(sizeof(PKT)+strlen(online)+1); \ 000004D0 4B0F8DE2 ADD R0,SP,#+300 \ 000004D4 1B0000EF SWI +27 \ 000004D8 090080E2 ADD R0,R0,#+9 \ 000004DC 140000EF SWI +20 \ 000004E0 0060A0E1 MOV R6,R0 4976 p->pkt.uin=t->uin; \ 000004E4 0C0094E5 LDR R0,[R4, #+12] \ 000004E8 000086E5 STR R0,[R6, #+0] 4977 p->pkt.type=T_SENDMSG; \ 000004EC B4A0C6E1 STRH R10,[R6, #+4] 4978 p->pkt.data_len=strlen(online); \ 000004F0 4B0F8DE2 ADD R0,SP,#+300 \ 000004F4 1B0000EF SWI +27 \ 000004F8 B600C6E1 STRH R0,[R6, #+6] 4979 strcpy(p->data,online); \ 000004FC 4B1F8DE2 ADD R1,SP,#+300 \ 00000500 080086E2 ADD R0,R6,#+8 \ 00000504 1A0000EF SWI +26 4980 if(show_send_info) \ 00000508 08079FE5 LDR R0,??CheckComand_0+0x4 ;; show_send_info \ 0000050C 000090E5 LDR R0,[R0, #+0] \ 00000510 08D08DE2 ADD SP,SP,#+8 \ 00000514 000050E3 CMP R0,#+0 \ 00000518 080395E5 LDR R0,[R5, #+776] \ 0000051C 010080E2 ADD R0,R0,#+1 \ 00000520 080385E5 STR R0,[R5, #+776] \ 00000524 0B00000A BEQ ??CheckComand_16 4981 AddStringToLog(t,0x01,requests1,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000528 0110A0E3 MOV R1,#+1 \ 0000052C 02002DE9 PUSH {R1} \ 00000530 8008A0E1 LSL R0,R0,#+17 \ 00000534 A008A0E1 LSR R0,R0,#+17 \ 00000538 01002DE9 PUSH {R0} \ 0000053C 0730A0E1 MOV R3,R7 \ 00000540 9800A0E3 MOV R0,#+152 \ 00000544 740D80E3 ORR R0,R0,#0x1D00 \ 00000548 052080E0 ADD R2,R0,R5 \ 0000054C 0400A0E1 MOV R0,R4 \ 00000550 ........ BL AddStringToLog \ 00000554 08D08DE2 ADD SP,SP,#+8 4982 else 4983 SENDMSGCOUNT++; 4984 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_16: \ 00000558 0620A0E1 MOV R2,R6 \ 0000055C C3FFFFEA B ??CheckComand_12 4985 return; 4986 } 4987 4988 if(!strcmp(txt, "GET_MSG_INFO") || !strcmp(txt, "__MSG")) \ ??CheckComand_15: \ 00000560 B11F86E2 ADD R1,R6,#+708 \ 00000564 0B00A0E1 MOV R0,R11 \ 00000568 190000EF SWI +25 \ 0000056C 000050E3 CMP R0,#+0 \ 00000570 0400000A BEQ ??CheckComand_17 \ 00000574 B51F86E2 ADD R1,R6,#+724 \ 00000578 0B00A0E1 MOV R0,R11 \ 0000057C 190000EF SWI +25 \ 00000580 000050E3 CMP R0,#+0 \ 00000584 2D00001A BNE ??CheckComand_18 4989 { 4990 comanda=0; \ ??CheckComand_17: \ 00000588 0C8485E5 STR R8,[R5, #+1036] 4991 TPKT *p; 4992 char *send_txt=malloc(64); \ 0000058C 4000A0E3 MOV R0,#+64 \ 00000590 140000EF SWI +20 \ 00000594 0080A0E1 MOV R8,R0 4993 sprintf(send_txt, "Отправлено сообщений: %d \n" 4994 "Принято сообщений: %d" 4995 , main2_count, main_count); \ 00000598 ........ LDR R0,??DataTable174 ;; main_count \ 0000059C A51F86E2 ADD R1,R6,#+660 \ 000005A0 003090E5 LDR R3,[R0, #+0] \ 000005A4 ........ LDR R0,??DataTable175 ;; main2_count \ 000005A8 002090E5 LDR R2,[R0, #+0] \ 000005AC 0800A0E1 MOV R0,R8 \ 000005B0 160000EF SWI +22 4996 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000005B4 0800A0E1 MOV R0,R8 \ 000005B8 1B0000EF SWI +27 \ 000005BC 090080E2 ADD R0,R0,#+9 \ 000005C0 140000EF SWI +20 \ 000005C4 0060A0E1 MOV R6,R0 4997 p->pkt.uin=t->uin; \ 000005C8 0C0094E5 LDR R0,[R4, #+12] \ 000005CC 000086E5 STR R0,[R6, #+0] 4998 p->pkt.type=T_SENDMSG; \ 000005D0 B4A0C6E1 STRH R10,[R6, #+4] 4999 p->pkt.data_len=strlen(send_txt); \ 000005D4 0800A0E1 MOV R0,R8 \ 000005D8 1B0000EF SWI +27 \ 000005DC B600C6E1 STRH R0,[R6, #+6] 5000 strcpy(p->data,send_txt); \ 000005E0 0810A0E1 MOV R1,R8 \ 000005E4 080086E2 ADD R0,R6,#+8 \ 000005E8 1A0000EF SWI +26 5001 if(show_send_info) \ 000005EC 24069FE5 LDR R0,??CheckComand_0+0x4 ;; show_send_info \ 000005F0 000090E5 LDR R0,[R0, #+0] \ 000005F4 000050E3 CMP R0,#+0 \ 000005F8 080395E5 LDR R0,[R5, #+776] \ 000005FC 010080E2 ADD R0,R0,#+1 \ 00000600 080385E5 STR R0,[R5, #+776] \ 00000604 8E00000A BEQ ??CheckComand_19 5002 AddStringToLog(t,0x01,requests2,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000608 0110A0E3 MOV R1,#+1 \ 0000060C 02002DE9 PUSH {R1} \ 00000610 8008A0E1 LSL R0,R0,#+17 \ 00000614 A008A0E1 LSR R0,R0,#+17 \ 00000618 01002DE9 PUSH {R0} \ 0000061C 0730A0E1 MOV R3,R7 \ 00000620 B000A0E3 MOV R0,#+176 \ 00000624 740D80E3 ORR R0,R0,#0x1D00 \ 00000628 052080E0 ADD R2,R0,R5 \ 0000062C 0400A0E1 MOV R0,R4 \ 00000630 ........ BL AddStringToLog \ 00000634 08D08DE2 ADD SP,SP,#+8 5003 else 5004 SENDMSGCOUNT++; 5005 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_20: \ 00000638 810000EA B ??CheckComand_19 \ ??CheckComand_6: \ 0000063C 5F5F5400 DC8 "__T" 5006 mfree(send_txt); 5007 return; 5008 } 5009 5010 //==========================windes commands begin ===================== 5011 5012 if(!strcmp(txt, "GET_PROVIDER") || !strcmp(txt, "__PROVIDER")) \ ??CheckComand_18: \ 00000640 C21F86E2 ADD R1,R6,#+776 \ 00000644 0B00A0E1 MOV R0,R11 \ 00000648 190000EF SWI +25 \ 0000064C 000050E3 CMP R0,#+0 \ 00000650 0400000A BEQ ??CheckComand_21 \ 00000654 C61F86E2 ADD R1,R6,#+792 \ 00000658 0B00A0E1 MOV R0,R11 \ 0000065C 190000EF SWI +25 \ 00000660 000050E3 CMP R0,#+0 \ 00000664 3600001A BNE ??CheckComand_22 5013 { 5014 comanda=0; \ ??CheckComand_21: \ 00000668 0C8485E5 STR R8,[R5, #+1036] 5015 TPKT *p; 5016 5017 WSHDR *ws=AllocWS(32); \ 0000066C 2000A0E3 MOV R0,#+32 \ 00000670 250100EF SWI +293 \ 00000674 0080A0E1 MOV R8,R0 5018 GetProvider(ws,0); \ 00000678 0010A0E3 MOV R1,#+0 \ 0000067C 410000EF SWI +65 5019 char prov[16]; 5020 ws_2str(ws,prov,wstrlen(ws)); \ 00000680 0800A0E1 MOV R0,R8 \ 00000684 230100EF SWI +291 \ 00000688 0020A0E1 MOV R2,R0 \ 0000068C 14108DE2 ADD R1,SP,#+20 \ 00000690 0800A0E1 MOV R0,R8 \ 00000694 A30000EF SWI +163 5021 char *send_txt=malloc(32); \ 00000698 2000A0E3 MOV R0,#+32 \ 0000069C 140000EF SWI +20 \ 000006A0 00B0A0E1 MOV R11,R0 5022 sprintf(send_txt, "Оператор: %s", prov); \ 000006A4 14208DE2 ADD R2,SP,#+20 \ 000006A8 B71F86E2 ADD R1,R6,#+732 \ 000006AC 160000EF SWI +22 5023 FreeWS(ws); \ 000006B0 0800A0E1 MOV R0,R8 \ 000006B4 290100EF SWI +297 5024 5025 p=malloc(sizeof(PKT)+28+1); \ 000006B8 2500A0E3 MOV R0,#+37 \ 000006BC 140000EF SWI +20 \ 000006C0 0080A0E1 MOV R8,R0 5026 p->pkt.uin=t->uin; \ 000006C4 0C0094E5 LDR R0,[R4, #+12] \ 000006C8 000088E5 STR R0,[R8, #+0] 5027 p->pkt.type=T_SENDMSG; \ 000006CC B4A0C8E1 STRH R10,[R8, #+4] 5028 p->pkt.data_len=strlen(send_txt); \ 000006D0 0B00A0E1 MOV R0,R11 \ 000006D4 1B0000EF SWI +27 \ 000006D8 B600C8E1 STRH R0,[R8, #+6] 5029 strcpy(p->data,send_txt); \ 000006DC 0B10A0E1 MOV R1,R11 \ 000006E0 080088E2 ADD R0,R8,#+8 \ 000006E4 1A0000EF SWI +26 5030 if(show_send_info) \ 000006E8 28059FE5 LDR R0,??CheckComand_0+0x4 ;; show_send_info \ 000006EC 000090E5 LDR R0,[R0, #+0] \ 000006F0 000050E3 CMP R0,#+0 \ 000006F4 080395E5 LDR R0,[R5, #+776] \ 000006F8 010080E2 ADD R0,R0,#+1 \ 000006FC 080385E5 STR R0,[R5, #+776] \ 00000700 0900000A BEQ ??CheckComand_23 5031 AddStringToLog(t,0x01,"Sending provider name...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000704 0110A0E3 MOV R1,#+1 \ 00000708 02002DE9 PUSH {R1} \ 0000070C 8008A0E1 LSL R0,R0,#+17 \ 00000710 A008A0E1 LSR R0,R0,#+17 \ 00000714 01002DE9 PUSH {R0} \ 00000718 0730A0E1 MOV R3,R7 \ 0000071C BB2F86E2 ADD R2,R6,#+748 \ 00000720 0400A0E1 MOV R0,R4 \ 00000724 ........ BL AddStringToLog \ 00000728 08D08DE2 ADD SP,SP,#+8 5032 else 5033 SENDMSGCOUNT++; 5034 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_23: \ 0000072C 0820A0E1 MOV R2,R8 \ 00000730 0010A0E3 MOV R1,#+0 \ 00000734 0900A0E1 MOV R0,R9 \ 00000738 710100EF SWI +369 5035 mfree(send_txt); \ 0000073C 0B00A0E1 MOV R0,R11 \ 00000740 440000EA B ??CheckComand_4 5036 return; 5037 } 5038 5039 5040 //----------------------------------------------------------------------- 5041 5042 5043 if(!strcmp(txt, "GET_MOD_INFO") || !strcmp(txt, "__MOD")) \ ??CheckComand_22: \ 00000744 CE1F86E2 ADD R1,R6,#+824 \ 00000748 0B00A0E1 MOV R0,R11 \ 0000074C 190000EF SWI +25 \ 00000750 000050E3 CMP R0,#+0 \ 00000754 0400000A BEQ ??CheckComand_24 \ 00000758 D21F86E2 ADD R1,R6,#+840 \ 0000075C 0B00A0E1 MOV R0,R11 \ 00000760 190000EF SWI +25 \ 00000764 000050E3 CMP R0,#+0 \ 00000768 3D00001A BNE ??CheckComand_25 5044 { 5045 comanda=0; \ ??CheckComand_24: \ 0000076C 0C8485E5 STR R8,[R5, #+1036] 5046 TPKT *p; 5047 char *send_txt=malloc(256); \ 00000770 400FA0E3 MOV R0,#+256 \ 00000774 140000EF SWI +20 \ 00000778 0080A0E1 MOV R8,R0 5048 // sprintf(I_UIN, "uin%d", t->uin); 5049 strcpy(I_UIN, t->name); \ 0000077C 8C00A0E3 MOV R0,#+140 \ 00000780 700D80E3 ORR R0,R0,#0x1C00 \ 00000784 05B080E0 ADD R11,R0,R5 \ 00000788 141084E2 ADD R1,R4,#+20 \ 0000078C 0B00A0E1 MOV R0,R11 \ 00000790 1A0000EF SWI +26 5050 if(strstr(ignor_list,I_UIN)==0) \ 00000794 ........ LDR R0,??DataTable176 ;; ignor_list \ 00000798 0B10A0E1 MOV R1,R11 \ 0000079C 180100EF SWI +280 \ 000007A0 000050E3 CMP R0,#+0 5051 { 5052 strcpy(send_txt, mod_info); \ 000007A4 0C109D05 LDREQ R1,[SP, #+12] 5053 } 5054 else 5055 strcpy(send_txt, "***Access denied***"); \ 000007A8 0800A0E1 MOV R0,R8 \ 000007AC C91F8612 ADDNE R1,R6,#+804 \ 000007B0 1A0000EF SWI +26 5056 5057 strcpy(send_txt, mod_info); \ 000007B4 0C109DE5 LDR R1,[SP, #+12] \ 000007B8 0800A0E1 MOV R0,R8 \ 000007BC 1A0000EF SWI +26 5058 5059 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000007C0 0800A0E1 MOV R0,R8 \ 000007C4 1B0000EF SWI +27 \ 000007C8 090080E2 ADD R0,R0,#+9 \ 000007CC 140000EF SWI +20 \ 000007D0 0060A0E1 MOV R6,R0 5060 p->pkt.uin=t->uin; \ 000007D4 0C0094E5 LDR R0,[R4, #+12] \ 000007D8 000086E5 STR R0,[R6, #+0] 5061 p->pkt.type=T_SENDMSG; \ 000007DC B4A0C6E1 STRH R10,[R6, #+4] 5062 p->pkt.data_len=strlen(send_txt); \ 000007E0 0800A0E1 MOV R0,R8 \ 000007E4 1B0000EF SWI +27 \ 000007E8 B600C6E1 STRH R0,[R6, #+6] 5063 strcpy(p->data,send_txt); \ 000007EC 0810A0E1 MOV R1,R8 \ 000007F0 080086E2 ADD R0,R6,#+8 \ 000007F4 1A0000EF SWI +26 5064 #ifdef EVILFOX 5065 SENDMSGCOUNT++; 5066 #else 5067 if(show_send_info) \ 000007F8 18049FE5 LDR R0,??CheckComand_0+0x4 ;; show_send_info \ 000007FC 000090E5 LDR R0,[R0, #+0] \ 00000800 000050E3 CMP R0,#+0 \ 00000804 080395E5 LDR R0,[R5, #+776] \ 00000808 010080E2 ADD R0,R0,#+1 \ 0000080C 080385E5 STR R0,[R5, #+776] \ 00000810 0B00000A BEQ ??CheckComand_19 5068 AddStringToLog(t,0x01,requests4,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000814 0110A0E3 MOV R1,#+1 \ 00000818 02002DE9 PUSH {R1} \ 0000081C 8008A0E1 LSL R0,R0,#+17 \ 00000820 A008A0E1 LSR R0,R0,#+17 \ 00000824 01002DE9 PUSH {R0} \ 00000828 0730A0E1 MOV R3,R7 \ 0000082C DC00A0E3 MOV R0,#+220 \ 00000830 740D80E3 ORR R0,R0,#0x1D00 \ 00000834 052080E0 ADD R2,R0,R5 \ 00000838 0400A0E1 MOV R0,R4 \ 0000083C ........ BL AddStringToLog \ 00000840 08D08DE2 ADD SP,SP,#+8 5069 else 5070 SENDMSGCOUNT++; 5071 #endif 5072 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_19: \ 00000844 0620A0E1 MOV R2,R6 \ ??CheckComand_26: \ 00000848 0010A0E3 MOV R1,#+0 \ 0000084C 0900A0E1 MOV R0,R9 \ 00000850 710100EF SWI +369 5073 mfree(send_txt); \ 00000854 0800A0E1 MOV R0,R8 \ ??CheckComand_4: \ 00000858 150000EF SWI +21 \ ??CheckComand_13: \ 0000085C 89DF8DE2 ADD SP,SP,#+548 \ 00000860 F08FBDE8 POP {R4-R11,PC} 5074 return; 5075 } 5076 5077 if(!strcmp(txt, "GET_BAT_INFO") || !strcmp(txt, "__BAT")) \ ??CheckComand_25: \ 00000864 DB1F86E2 ADD R1,R6,#+876 \ 00000868 0B00A0E1 MOV R0,R11 \ 0000086C 190000EF SWI +25 \ 00000870 000050E3 CMP R0,#+0 \ 00000874 0400000A BEQ ??CheckComand_27 \ 00000878 DF1F86E2 ADD R1,R6,#+892 \ 0000087C 0B00A0E1 MOV R0,R11 \ 00000880 190000EF SWI +25 \ 00000884 000050E3 CMP R0,#+0 \ 00000888 2800001A BNE ??CheckComand_28 5078 { 5079 comanda=0; \ ??CheckComand_27: \ 0000088C 0C8485E5 STR R8,[R5, #+1036] 5080 TPKT *p; 5081 int bat; 5082 bat=*RamCap(); \ 00000890 C88000EF SWI +32968 \ 00000894 B0B0D0E1 LDRH R11,[R0, #+0] 5083 char *send_txt=malloc(64); \ 00000898 4000A0E3 MOV R0,#+64 \ 0000089C 140000EF SWI +20 \ 000008A0 0080A0E1 MOV R8,R0 5084 sprintf(send_txt, "Заряд батареи: %d процентов", bat); \ 000008A4 0B20A0E1 MOV R2,R11 \ 000008A8 D41F86E2 ADD R1,R6,#+848 \ 000008AC 160000EF SWI +22 5085 p=malloc(sizeof(PKT)+28+1); \ 000008B0 2500A0E3 MOV R0,#+37 \ 000008B4 140000EF SWI +20 \ 000008B8 0060A0E1 MOV R6,R0 5086 p->pkt.uin=t->uin; \ 000008BC 0C0094E5 LDR R0,[R4, #+12] \ 000008C0 000086E5 STR R0,[R6, #+0] 5087 p->pkt.type=T_SENDMSG; \ 000008C4 B4A0C6E1 STRH R10,[R6, #+4] 5088 p->pkt.data_len=strlen(send_txt); \ 000008C8 0800A0E1 MOV R0,R8 \ 000008CC 1B0000EF SWI +27 \ 000008D0 B600C6E1 STRH R0,[R6, #+6] 5089 strcpy(p->data,send_txt); \ 000008D4 0810A0E1 MOV R1,R8 \ 000008D8 080086E2 ADD R0,R6,#+8 \ 000008DC 1A0000EF SWI +26 5090 #ifdef EVILFOX 5091 SENDMSGCOUNT++; 5092 #else 5093 if(show_send_info) \ 000008E0 30039FE5 LDR R0,??CheckComand_0+0x4 ;; show_send_info \ 000008E4 000090E5 LDR R0,[R0, #+0] \ 000008E8 000050E3 CMP R0,#+0 \ 000008EC 080395E5 LDR R0,[R5, #+776] \ 000008F0 010080E2 ADD R0,R0,#+1 \ 000008F4 080385E5 STR R0,[R5, #+776] \ 000008F8 D1FFFF0A BEQ ??CheckComand_19 5094 AddStringToLog(t,0x01,requests3,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000008FC 0110A0E3 MOV R1,#+1 \ 00000900 02002DE9 PUSH {R1} \ 00000904 8008A0E1 LSL R0,R0,#+17 \ 00000908 A008A0E1 LSR R0,R0,#+17 \ 0000090C 01002DE9 PUSH {R0} \ 00000910 0730A0E1 MOV R3,R7 \ 00000914 C400A0E3 MOV R0,#+196 \ 00000918 740D80E3 ORR R0,R0,#0x1D00 \ 0000091C 052080E0 ADD R2,R0,R5 \ 00000920 0400A0E1 MOV R0,R4 \ 00000924 ........ BL AddStringToLog \ 00000928 08D08DE2 ADD SP,SP,#+8 5095 else 5096 SENDMSGCOUNT++; 5097 #endif 5098 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_29: \ 0000092C C4FFFFEA B ??CheckComand_19 5099 mfree(send_txt); 5100 return; 5101 } 5102 5103 if((away_m==1 || t->isautomsg) && (t->automsgcount < automsgcount)) \ ??CheckComand_28: \ 00000930 2C1395E5 LDR R1,[R5, #+812] \ 00000934 ........ LDR R2,??DataTable177 ;; automsgcount \ 00000938 700094E5 LDR R0,[R4, #+112] \ 0000093C 002092E5 LDR R2,[R2, #+0] \ 00000940 010051E3 CMP R1,#+1 \ 00000944 0100000A BEQ ??CheckComand_30 \ 00000948 000050E3 CMP R0,#+0 \ 0000094C 3700000A BEQ ??CheckComand_31 \ ??CheckComand_30: \ 00000950 883094E5 LDR R3,[R4, #+136] \ 00000954 020053E1 CMP R3,R2 \ 00000958 3200002A BCS ??CheckComand_32 5104 { 5105 t->automsgcount++; 5106 comanda=1; 5107 TPKT *p; 5108 // sprintf(hah,"online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); 5109 sprintf(away_msg, "Автоответчик: %s %s! %s %s", awayHelloMsg, t->name, awayMsg, away_msg_time); \ 0000095C B8229FE5 LDR R2,??CheckComand_0+0x8 ;; awayHelloMsg \ 00000960 010083E2 ADD R0,R3,#+1 \ 00000964 880084E5 STR R0,[R4, #+136] \ 00000968 0100A0E3 MOV R0,#+1 \ 0000096C 0C0485E5 STR R0,[R5, #+1036] \ 00000970 5C00A0E3 MOV R0,#+92 \ 00000974 5C0D80E3 ORR R0,R0,#0x1700 \ 00000978 058080E0 ADD R8,R0,R5 \ 0000097C 420F80E2 ADD R0,R0,#+264 \ 00000980 050080E0 ADD R0,R0,R5 \ 00000984 01002DE9 PUSH {R0} \ 00000988 ........ LDR R0,??DataTable178 ;; awayMsg \ 0000098C 143084E2 ADD R3,R4,#+20 \ 00000990 01002DE9 PUSH {R0} \ 00000994 E11F86E2 ADD R1,R6,#+900 \ 00000998 0800A0E1 MOV R0,R8 \ 0000099C 160000EF SWI +22 5110 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 000009A0 0800A0E1 MOV R0,R8 \ 000009A4 1B0000EF SWI +27 \ 000009A8 090080E2 ADD R0,R0,#+9 \ 000009AC 140000EF SWI +20 \ 000009B0 0060A0E1 MOV R6,R0 5111 p->pkt.uin=t->uin; \ 000009B4 0C0094E5 LDR R0,[R4, #+12] \ 000009B8 000086E5 STR R0,[R6, #+0] 5112 p->pkt.type=T_SENDMSG; \ 000009BC B4A0C6E1 STRH R10,[R6, #+4] 5113 p->pkt.data_len=strlen(away_msg); \ 000009C0 0800A0E1 MOV R0,R8 \ 000009C4 1B0000EF SWI +27 \ 000009C8 B600C6E1 STRH R0,[R6, #+6] 5114 strcpy(p->data,away_msg); \ 000009CC 0810A0E1 MOV R1,R8 \ 000009D0 080086E2 ADD R0,R6,#+8 \ 000009D4 1A0000EF SWI +26 5115 if(show_send_info) \ 000009D8 38029FE5 LDR R0,??CheckComand_0+0x4 ;; show_send_info \ 000009DC 000090E5 LDR R0,[R0, #+0] \ 000009E0 08D08DE2 ADD SP,SP,#+8 \ 000009E4 000050E3 CMP R0,#+0 \ 000009E8 080395E5 LDR R0,[R5, #+776] \ 000009EC 010080E2 ADD R0,R0,#+1 \ 000009F0 080385E5 STR R0,[R5, #+776] \ 000009F4 0900000A BEQ ??CheckComand_33 5116 #ifdef kluchnik 5117 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000009F8 0110A0E3 MOV R1,#+1 \ 000009FC 02002DE9 PUSH {R1} \ 00000A00 8008A0E1 LSL R0,R0,#+17 \ 00000A04 A008A0E1 LSR R0,R0,#+17 \ 00000A08 01002DE9 PUSH {R0} \ 00000A0C 0730A0E1 MOV R3,R7 \ 00000A10 0820A0E1 MOV R2,R8 \ 00000A14 0400A0E1 MOV R0,R4 \ 00000A18 ........ BL AddStringToLog \ 00000A1C 08D08DE2 ADD SP,SP,#+8 5118 #else 5119 AddStringToLog(t,0x01,requests6,I_str,(++SENDMSGCOUNT)&0x7FFF,1); 5120 #endif 5121 else 5122 SENDMSGCOUNT++; 5123 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_33: \ 00000A20 0620A0E1 MOV R2,R6 \ 00000A24 91FEFFEA B ??CheckComand_12 5124 return; 5125 } 5126 #ifdef kluchnik 5127 else 5128 if((away_m==1 || t->isautomsg) && (t->uin==438532198)){ t->automsgcount=0;/* t->awaysignal=1;*/ return; } \ ??CheckComand_32: \ 00000A28 010051E3 CMP R1,#+1 \ 00000A2C 0100000A BEQ ??CheckComand_34 \ ??CheckComand_31: \ 00000A30 000050E3 CMP R0,#+0 \ 00000A34 0600000A BEQ ??CheckComand_35 \ ??CheckComand_34: \ 00000A38 0C3094E5 LDR R3,[R4, #+12] \ 00000A3C ........ LDR R12,??DataTable179 ;; 0x1a237866 \ 00000A40 0C0053E1 CMP R3,R12 \ 00000A44 88808405 STREQ R8,[R4, #+136] \ 00000A48 6F00000A BEQ ??CheckComand_36 5129 /* else 5130 if((away_m==1 || t->isautomsg) && (t->automsgcount<=(automsgcount+3)) ) 5131 { 5132 t->awaysignal=0; 5133 t->automsgcount++; 5134 sprintf(away_msg,"Бля,ну русским ж языком написали,НЕТУ МЕНЯ!!!че по сто сообщений слать?тем более если тебе делать нех..."); 5135 if(show_send_info) 5136 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF,1); 5137 else 5138 SENDMSGCOUNT++; 5139 SendData(t,away_msg,ENA_SIGNAL,0); 5140 return; 5141 }*/ 5142 #endif 5143 else 5144 if(away_m==1 || t->isautomsg) \ 00000A4C 010051E3 CMP R1,#+1 \ 00000A50 0100000A BEQ ??CheckComand_37 \ ??CheckComand_35: \ 00000A54 000050E3 CMP R0,#+0 \ 00000A58 0100000A BEQ ??CheckComand_38 5145 { 5146 t->automsgcount=automsgcount; \ ??CheckComand_37: \ 00000A5C 882084E5 STR R2,[R4, #+136] 5147 return; \ 00000A60 7DFFFFEA B ??CheckComand_13 5148 } 5149 5150 5151 //---------------------------------------------------------------------------// 5152 5153 5154 if(!strcmp(txt, "GET_URL_INFO") || !strcmp(txt, "__URL"))// by kluchnik 26.03.08 \ ??CheckComand_38: \ 00000A64 FB1F86E2 ADD R1,R6,#+1004 \ 00000A68 0B00A0E1 MOV R0,R11 \ 00000A6C 190000EF SWI +25 \ 00000A70 000050E3 CMP R0,#+0 \ 00000A74 0400000A BEQ ??CheckComand_39 \ 00000A78 FF1F86E2 ADD R1,R6,#+1020 \ 00000A7C 0B00A0E1 MOV R0,R11 \ 00000A80 190000EF SWI +25 \ 00000A84 000050E3 CMP R0,#+0 \ 00000A88 2C00001A BNE ??CheckComand_40 5155 { 5156 comanda=0; \ ??CheckComand_39: \ 00000A8C 0C8485E5 STR R8,[R5, #+1036] 5157 TPKT *p; 5158 5159 char *send_txt=malloc(256); \ 00000A90 400FA0E3 MOV R0,#+256 \ 00000A94 140000EF SWI +20 \ 00000A98 0080A0E1 MOV R8,R0 5160 sprintf(send_txt,"revision 2058, mod date: %s at %s ", 5161 "http://kluchnik.jino-net.ru/naticqmod/",__DATE__,__TIME__); \ 00000A9C 580086E2 ADD R0,R6,#+88 \ 00000AA0 01002DE9 PUSH {R0} \ 00000AA4 4C3086E2 ADD R3,R6,#+76 \ 00000AA8 F12F86E2 ADD R2,R6,#+964 \ 00000AAC E81F86E2 ADD R1,R6,#+928 \ 00000AB0 0800A0E1 MOV R0,R8 \ 00000AB4 160000EF SWI +22 5162 5163 p=malloc(sizeof(PKT)+256); \ 00000AB8 420FA0E3 MOV R0,#+264 \ 00000ABC 140000EF SWI +20 \ 00000AC0 00B0A0E1 MOV R11,R0 5164 p->pkt.uin=t->uin; \ 00000AC4 0C0094E5 LDR R0,[R4, #+12] \ 00000AC8 00008BE5 STR R0,[R11, #+0] 5165 p->pkt.type=T_SENDMSG; \ 00000ACC B4A0CBE1 STRH R10,[R11, #+4] 5166 p->pkt.data_len=strlen(send_txt); \ 00000AD0 0800A0E1 MOV R0,R8 \ 00000AD4 1B0000EF SWI +27 \ 00000AD8 B600CBE1 STRH R0,[R11, #+6] 5167 strcpy(p->data,send_txt); \ 00000ADC 0810A0E1 MOV R1,R8 \ 00000AE0 08008BE2 ADD R0,R11,#+8 \ 00000AE4 1A0000EF SWI +26 5168 if(show_send_info) \ 00000AE8 28019FE5 LDR R0,??CheckComand_0+0x4 ;; show_send_info \ 00000AEC 000090E5 LDR R0,[R0, #+0] \ 00000AF0 04D08DE2 ADD SP,SP,#+4 \ 00000AF4 000050E3 CMP R0,#+0 \ 00000AF8 080395E5 LDR R0,[R5, #+776] \ 00000AFC 010080E2 ADD R0,R0,#+1 \ 00000B00 080385E5 STR R0,[R5, #+776] \ 00000B04 0B00000A BEQ ??CheckComand_41 5169 AddStringToLog(t,0x01,"Sending url info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000B08 0110A0E3 MOV R1,#+1 \ 00000B0C 02002DE9 PUSH {R1} \ 00000B10 8008A0E1 LSL R0,R0,#+17 \ 00000B14 A008A0E1 LSR R0,R0,#+17 \ 00000B18 01002DE9 PUSH {R0} \ 00000B1C 0730A0E1 MOV R3,R7 \ 00000B20 0C00A0E3 MOV R0,#+12 \ 00000B24 400E80E3 ORR R0,R0,#0x400 \ 00000B28 062080E0 ADD R2,R0,R6 \ 00000B2C 0400A0E1 MOV R0,R4 \ 00000B30 ........ BL AddStringToLog \ 00000B34 08D08DE2 ADD SP,SP,#+8 5170 else 5171 SENDMSGCOUNT++; 5172 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_41: \ 00000B38 0B20A0E1 MOV R2,R11 \ 00000B3C 41FFFFEA B ??CheckComand_26 5173 mfree(send_txt); 5174 return; 5175 } 5176 5177 #ifdef kluchnik // не доступно для всех,потому что имхо,будет еще большая перегрузка серверов!!!а оно нам надо? 5178 if(t->isautobot) \ ??CheckComand_40: \ 00000B40 5C0094E5 LDR R0,[R4, #+92] \ 00000B44 000050E3 CMP R0,#+0 \ 00000B48 2C00000A BEQ ??CheckComand_42 5179 { 5180 TPKT *p; 5181 int i=LoadBotMessage(t->uin); \ 00000B4C 0C0094E5 LDR R0,[R4, #+12] \ 00000B50 ........ BL LoadBotMessage 5182 if(i==0) return;//если нет никаких файлов то просто возвращаемся \ 00000B54 000050E3 CMP R0,#+0 \ 00000B58 2B00000A BEQ ??CheckComand_36 5183 char *pp=bot_lines[t->bot_msg]; \ 00000B5C 581094E5 LDR R1,[R4, #+88] \ 00000B60 7C2395E5 LDR R2,[R5, #+892] \ 00000B64 017192E7 LDR R7,[R2, +R1, LSL #+2] 5184 t->bot_msg++; \ 00000B68 011081E2 ADD R1,R1,#+1 \ 00000B6C 581084E5 STR R1,[R4, #+88] 5185 if(t->bot_msg==i) \ 00000B70 000051E1 CMP R1,R0 5186 t->bot_msg=0; \ 00000B74 58808405 STREQ R8,[R4, #+88] 5187 p=malloc(sizeof(PKT)+strlen(pp)+1); \ 00000B78 0700A0E1 MOV R0,R7 \ 00000B7C 1B0000EF SWI +27 \ 00000B80 090080E2 ADD R0,R0,#+9 \ 00000B84 140000EF SWI +20 \ 00000B88 0080A0E1 MOV R8,R0 5188 p->pkt.uin=t->uin; \ 00000B8C 0C0094E5 LDR R0,[R4, #+12] \ 00000B90 000088E5 STR R0,[R8, #+0] 5189 p->pkt.type=T_SENDMSG; \ 00000B94 B4A0C8E1 STRH R10,[R8, #+4] 5190 p->pkt.data_len=strlen(pp); \ 00000B98 0700A0E1 MOV R0,R7 \ 00000B9C 1B0000EF SWI +27 \ 00000BA0 B600C8E1 STRH R0,[R8, #+6] 5191 strcpy(p->data,pp); \ 00000BA4 0710A0E1 MOV R1,R7 \ 00000BA8 080088E2 ADD R0,R8,#+8 \ 00000BAC 1A0000EF SWI +26 5192 AddStringToLog(t,0x01,pp,"Autobot",(++SENDMSGCOUNT)&0x7FFF,1); \ 00000BB0 080395E5 LDR R0,[R5, #+776] \ 00000BB4 0110A0E3 MOV R1,#+1 \ 00000BB8 010080E2 ADD R0,R0,#+1 \ 00000BBC 080385E5 STR R0,[R5, #+776] \ 00000BC0 02002DE9 PUSH {R1} \ 00000BC4 8008A0E1 LSL R0,R0,#+17 \ 00000BC8 A008A0E1 LSR R0,R0,#+17 \ 00000BCC 01002DE9 PUSH {R0} \ 00000BD0 0720A0E1 MOV R2,R7 \ 00000BD4 0400A0E3 MOV R0,#+4 \ 00000BD8 400E80E3 ORR R0,R0,#0x400 \ 00000BDC 063080E0 ADD R3,R0,R6 \ 00000BE0 0400A0E1 MOV R0,R4 \ 00000BE4 ........ BL AddStringToLog 5193 SUBPROC((void *)SendAnswer,0,p); \ 00000BE8 0820A0E1 MOV R2,R8 \ 00000BEC 0010A0E3 MOV R1,#+0 \ 00000BF0 0900A0E1 MOV R0,R9 \ 00000BF4 710100EF SWI +369 5194 return; \ 00000BF8 08D08DE2 ADD SP,SP,#+8 \ 00000BFC 16FFFFEA B ??CheckComand_13 5195 } 5196 #endif 5197 5198 CheckComand2(txt,t); \ ??CheckComand_42: \ 00000C00 0410A0E1 MOV R1,R4 \ 00000C04 0B00A0E1 MOV R0,R11 \ 00000C08 ........ _BLF CheckComand2,??CheckComand2??rA 5199 } \ ??CheckComand_36: \ 00000C0C 89DF8DE2 ADD SP,SP,#+548 ;; stack cleaning \ 00000C10 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CheckComand_0: \ 00000C14 ........ DC32 `?` \ 00000C18 ........ DC32 show_send_info \ 00000C1C ........ DC32 awayHelloMsg 5200 5201 //------------- Попап месаже для подключившегося контакта -----------// 5202 \ In segment DATA_Z, align 4, align-sorted 5203 char INC_Nick[32]; \ INC_Nick: \ 00000000 DS8 32 5204 char show_nick[32]; 5205 int INC_show; 5206 5207 char onContact[64]; 5208 int INC_show2; 5209 GBSTMR incs2; 5210 extern void DrawScreenShot(); 5211 \ In segment CODE, align 4, keep-with-next 5212 void show_on_contact() 5213 { \ show_on_contact: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 5214 if(INC_show2>0) \ 00000004 ........ LDR R4,??DataTable183 ;; icons \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 140494E5 LDR R0,[R4, #+1044] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 4E0000BA BLT ??show_on_contact_0 5215 { 5216 WSHDR *ws=AllocWS(64); \ 00000018 4000A0E3 MOV R0,#+64 \ 0000001C 250100EF SWI +293 \ 00000020 0050A0E1 MOV R5,R0 5217 ascii2ws(ws,onContact); \ 00000024 1800A0E3 MOV R0,#+24 \ 00000028 7C0D80E3 ORR R0,R0,#0x1F00 \ 0000002C 041080E0 ADD R1,R0,R4 \ 00000030 0500A0E1 MOV R0,R5 \ 00000034 ........ _BLF ascii2ws,??ascii2ws??rA 5218 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; \ 00000038 068100EF SWI +33030 \ 0000003C 080090E5 LDR R0,[R0, #+8] 5219 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 00000040 14219FE5 LDR R2,??show_on_contact_1 ;; `?` \ 00000044 0C0090E5 LDR R0,[R0, #+12] \ 00000048 480092E8 LDM R2,{R3,R6} \ 0000004C 080090E5 LDR R0,[R0, #+8] \ 00000050 0D10A0E1 MOV R1,SP \ 00000054 040090E5 LDR R0,[R0, #+4] \ 00000058 480081E8 STM R1,{R3,R6} \ 0000005C 010040E2 SUB R0,R0,#+1 5220 if(!(memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8))) \ 00000060 0820A0E3 MOV R2,#+8 \ 00000064 1C0100EF SWI +284 \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 0300001A BNE ??show_on_contact_2 5221 { 5222 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 5223 INC_show2-=2; \ 00000074 140494E5 LDR R0,[R4, #+1044] \ 00000078 020040E2 SUB R0,R0,#+2 \ 0000007C 010000EA B ??show_on_contact_3 5224 } 5225 else 5226 INC_show2--; \ ??show_on_contact_2: \ 00000080 140494E5 LDR R0,[R4, #+1044] \ 00000084 010040E2 SUB R0,R0,#+1 5227 DrawRectangle(0,0,Get_WS_width(ws,PopupFont)+2,GetFontYSIZE(PopupFont)+2,0,PopupBGCl,PopupBGCl); \ ??show_on_contact_3: \ 00000088 ........ LDR R6,??DataTable184 ;; PopupFont \ 0000008C 140484E5 STR R0,[R4, #+1044] \ 00000090 000096E5 LDR R0,[R6, #+0] \ 00000094 C50100EF SWI +453 \ 00000098 001096E5 LDR R1,[R6, #+0] \ 0000009C 0070A0E1 MOV R7,R0 \ 000000A0 0500A0E1 MOV R0,R5 \ 000000A4 080200EF SWI +520 \ 000000A8 ........ LDR R1,??DataTable186 ;; PopupBGCl \ 000000AC 023087E2 ADD R3,R7,#+2 \ 000000B0 0120A0E1 MOV R2,R1 \ 000000B4 04002DE9 PUSH {R2} \ 000000B8 02002DE9 PUSH {R1} \ 000000BC 0010A0E3 MOV R1,#+0 \ 000000C0 02002DE9 PUSH {R1} \ 000000C4 022080E2 ADD R2,R0,#+2 \ 000000C8 0000A0E3 MOV R0,#+0 \ 000000CC B40100EF SWI +436 5228 DrawString(ws,1,1,1+Get_WS_width(ws,PopupFont)+2,1+GetFontYSIZE(PopupFont),PopupFont,0,PopupOnlineCl,GetPaletteAdrByColorIndex(23)); \ 000000D0 1700A0E3 MOV R0,#+23 \ 000000D4 2E0100EF SWI +302 \ 000000D8 0080A0E1 MOV R8,R0 \ 000000DC 000096E5 LDR R0,[R6, #+0] \ 000000E0 C50100EF SWI +453 \ 000000E4 001096E5 LDR R1,[R6, #+0] \ 000000E8 0070A0E1 MOV R7,R0 \ 000000EC 0500A0E1 MOV R0,R5 \ 000000F0 080200EF SWI +520 \ 000000F4 64109FE5 LDR R1,??show_on_contact_1+0x4 ;; PopupOnlineCl \ 000000F8 00012DE9 PUSH {R8} \ 000000FC 02002DE9 PUSH {R1} \ 00000100 033080E2 ADD R3,R0,#+3 \ 00000104 0120A0E3 MOV R2,#+1 \ 00000108 0500A0E1 MOV R0,R5 \ 0000010C 0010A0E3 MOV R1,#+0 \ 00000110 02002DE9 PUSH {R1} \ 00000114 001096E5 LDR R1,[R6, #+0] \ 00000118 02002DE9 PUSH {R1} \ 0000011C 011087E2 ADD R1,R7,#+1 \ 00000120 02002DE9 PUSH {R1} \ 00000124 0210A0E1 MOV R1,R2 \ 00000128 4C0100EF SWI +332 5229 FreeWS(ws); \ 0000012C 0500A0E1 MOV R0,R5 \ 00000130 290100EF SWI +297 5230 GBS_StartTimerProc(&incs2, 15, show_on_contact); \ 00000134 28209FE5 LDR R2,??show_on_contact_1+0x8 ;; show_on_contact \ 00000138 0F10A0E3 MOV R1,#+15 \ 0000013C 5800A0E3 MOV R0,#+88 \ 00000140 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000144 040080E0 ADD R0,R0,R4 \ 00000148 4D0000EF SWI +77 \ 0000014C 20D08DE2 ADD SP,SP,#+32 \ 00000150 F381BDE8 POP {R0,R1,R4-R8,PC} 5231 } 5232 else 5233 RefreshGUI(); \ ??show_on_contact_0: \ 00000154 960100EF SWI +406 5234 } \ 00000158 F381BDE8 POP {R0,R1,R4-R8,PC} ;; return \ ??show_on_contact_1: \ 0000015C ........ DC32 `?` \ 00000160 ........ DC32 PopupOnlineCl \ 00000164 ........ DC32 show_on_contact 5235 5236 5237 //---------------------------- popup message ---------------------------// 5238 5239 \ In segment CODE, align 4, keep-with-next 5240 void show_pp_sender() 5241 { \ show_pp_sender: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 5242 if(INC_show>0) \ 00000004 ........ LDR R4,??DataTable183 ;; icons \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 100494E5 LDR R0,[R4, #+1040] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 F38FBDB8 POPLT {R0,R1,R4-R11,PC} 5243 { 5244 WSHDR *ws=AllocWS(256); \ 00000018 400FA0E3 MOV R0,#+256 \ 0000001C 250100EF SWI +293 \ 00000020 0050A0E1 MOV R5,R0 5245 ascii2ws(ws,show_nick); \ 00000024 F800A0E3 MOV R0,#+248 \ 00000028 780D80E3 ORR R0,R0,#0x1E00 \ 0000002C 041080E0 ADD R1,R0,R4 \ 00000030 0500A0E1 MOV R0,R5 \ 00000034 ........ _BLF ascii2ws,??ascii2ws??rA 5246 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; \ 00000038 068100EF SWI +33030 \ 0000003C 080090E5 LDR R0,[R0, #+8] 5247 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 00000040 5C219FE5 LDR R2,??show_pp_sender_0 ;; `?_1` \ 00000044 0C0090E5 LDR R0,[R0, #+12] \ 00000048 480092E8 LDM R2,{R3,R6} \ 0000004C 080090E5 LDR R0,[R0, #+8] \ 00000050 0D10A0E1 MOV R1,SP \ 00000054 040090E5 LDR R0,[R0, #+4] \ 00000058 480081E8 STM R1,{R3,R6} \ 0000005C 010040E2 SUB R0,R0,#+1 5248 if(!(memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8))) \ 00000060 0820A0E3 MOV R2,#+8 \ 00000064 1C0100EF SWI +284 \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 0300001A BNE ??show_pp_sender_1 5249 { 5250 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 5251 INC_show-=2; \ 00000074 100494E5 LDR R0,[R4, #+1040] \ 00000078 020040E2 SUB R0,R0,#+2 \ 0000007C 010000EA B ??show_pp_sender_2 5252 } 5253 else 5254 INC_show--; \ ??show_pp_sender_1: \ 00000080 100494E5 LDR R0,[R4, #+1040] \ 00000084 010040E2 SUB R0,R0,#+1 5255 #ifdef NEWSGOLD 5256 DrawRectangle(0,0,Get_WS_width(ws,PopupFont)+4+GetImgWidth(NumStatusToIconBar + IS_MSG),GetFontYSIZE(PopupFont)+4,0,PopupBGCl,PopupBGCl); \ ??show_pp_sender_2: \ 00000088 ........ LDR R6,??DataTable184 ;; PopupFont \ 0000008C ........ LDR R11,??DataTable185 ;; NumStatusToIconBar \ 00000090 100484E5 STR R0,[R4, #+1040] \ 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,??DataTable186 ;; PopupBGCl \ 000000C0 043087E2 ADD R3,R7,#+4 \ 000000C4 0120A0E1 MOV R2,R1 \ 000000C8 04002DE9 PUSH {R2} \ 000000CC 02002DE9 PUSH {R1} \ 000000D0 080080E0 ADD R0,R0,R8 \ 000000D4 042080E2 ADD R2,R0,#+4 \ 000000D8 0000A0E3 MOV R0,#+0 \ 000000DC 0010A0E3 MOV R1,#+0 \ 000000E0 02002DE9 PUSH {R1} \ 000000E4 B40100EF SWI +436 5257 DrawImg(2,2,NumStatusToIconBar + IS_MSG);//GetImgWidth((int)S_ICONS[icn] \ 000000E8 00009BE5 LDR R0,[R11, #+0] \ 000000EC 0210A0E3 MOV R1,#+2 \ 000000F0 0D2080E2 ADD R2,R0,#+13 \ 000000F4 0100A0E1 MOV R0,R1 \ 000000F8 230000EF SWI +35 5258 DrawString(ws,GetImgWidth(NumStatusToIconBar + IS_MSG)+4,1,GetImgWidth(NumStatusToIconBar + IS_MSG)+Get_WS_width(ws,PopupFont)+4,1+GetFontYSIZE(PopupFont),PopupFont,0,PopupMsgCl,GetPaletteAdrByColorIndex(23)); \ 000000FC 1700A0E3 MOV R0,#+23 \ 00000100 2E0100EF SWI +302 \ 00000104 0070A0E1 MOV R7,R0 \ 00000108 000096E5 LDR R0,[R6, #+0] \ 0000010C C50100EF SWI +453 \ 00000110 0080A0E1 MOV R8,R0 \ 00000114 00009BE5 LDR R0,[R11, #+0] \ 00000118 0D0080E2 ADD R0,R0,#+13 \ 0000011C 220000EF SWI +34 \ 00000120 001096E5 LDR R1,[R6, #+0] \ 00000124 0090A0E1 MOV R9,R0 \ 00000128 0500A0E1 MOV R0,R5 \ 0000012C 080200EF SWI +520 \ 00000130 00A0A0E1 MOV R10,R0 \ 00000134 00009BE5 LDR R0,[R11, #+0] \ 00000138 0D0080E2 ADD R0,R0,#+13 \ 0000013C 220000EF SWI +34 \ 00000140 60109FE5 LDR R1,??show_pp_sender_0+0x4 ;; PopupMsgCl \ 00000144 80002DE9 PUSH {R7} \ 00000148 02002DE9 PUSH {R1} \ 0000014C 0120A0E3 MOV R2,#+1 \ 00000150 0010A0E3 MOV R1,#+0 \ 00000154 02002DE9 PUSH {R1} \ 00000158 001096E5 LDR R1,[R6, #+0] \ 0000015C 02002DE9 PUSH {R1} \ 00000160 011088E2 ADD R1,R8,#+1 \ 00000164 02002DE9 PUSH {R1} \ 00000168 09108AE0 ADD R1,R10,R9 \ 0000016C 043081E2 ADD R3,R1,#+4 \ 00000170 041080E2 ADD R1,R0,#+4 \ 00000174 0500A0E1 MOV R0,R5 \ 00000178 4C0100EF SWI +332 5259 #else 5260 DrawRectangle(0,0,Get_WS_width(ws,PopupFont)+2,GetFontYSIZE(PopupFont)+2,0,PopupBGCl,PopupBGCl); 5261 DrawString(ws,1,1,1+Get_WS_width(ws,PopupFont)+2,1+GetFontYSIZE(PopupFont),PopupFont,0,PopupMsgCl,GetPaletteAdrByColorIndex(23)); 5262 #endif 5263 FreeWS(ws); \ 0000017C 0500A0E1 MOV R0,R5 \ 00000180 290100EF SWI +297 5264 GBS_StartTimerProc(&develop, 10, show_pp_sender); \ 00000184 20209FE5 LDR R2,??show_pp_sender_0+0x8 ;; show_pp_sender \ 00000188 0A10A0E3 MOV R1,#+10 \ 0000018C 8800A0E3 MOV R0,#+136 \ 00000190 740D80E3 ORR R0,R0,#0x1D00 \ 00000194 040080E0 ADD R0,R0,R4 \ 00000198 4D0000EF SWI +77 \ 0000019C 20D08DE2 ADD SP,SP,#+32 5265 } 5266 } \ 000001A0 F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??show_pp_sender_0: \ 000001A4 ........ DC32 `?_1` \ 000001A8 ........ DC32 PopupMsgCl \ 000001AC ........ DC32 show_pp_sender 5267 5268 5269 //----------------------------------------------------------------------------------------// 5270 5271 \ In segment CODE, align 4, keep-with-next 5272 void Get_Online_total() 5273 { 5274 CLIST *t; 5275 kopa_online=0; \ Get_Online_total: \ 00000000 ........ LDR R0,??DataTable205 ;; icons \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 C81380E5 STR R1,[R0, #+968] 5276 kopa_kontaktu=0; \ 0000000C CC1380E5 STR R1,[R0, #+972] 5277 t=(CLIST *)(&cltop); \ 00000010 EB1F80E2 ADD R1,R0,#+940 \ 00000014 FF30A0E3 MOV R3,#+255 \ 00000018 FF3C83E3 ORR R3,R3,#0xFF00 \ 0000001C 0A0000EA B ??Get_Online_total_0 5278 while(t=(CLIST *)(t->next)) 5279 { 5280 if (!t->isgroup) \ ??Get_Online_total_1: \ 00000020 082091E5 LDR R2,[R1, #+8] \ 00000024 000052E3 CMP R2,#+0 \ 00000028 0700001A BNE ??Get_Online_total_0 5281 { 5282 kopa_online++; \ 0000002C C82390E5 LDR R2,[R0, #+968] \ 00000030 012082E2 ADD R2,R2,#+1 \ 00000034 C82380E5 STR R2,[R0, #+968] 5283 if (t->state!=65535) kopa_kontaktu++; \ 00000038 B425D1E1 LDRH R2,[R1, #+84] \ 0000003C 030052E1 CMP R2,R3 \ 00000040 CC239015 LDRNE R2,[R0, #+972] \ 00000044 01208212 ADDNE R2,R2,#+1 \ 00000048 CC238015 STRNE R2,[R0, #+972] 5284 } 5285 } \ ??Get_Online_total_0: \ 0000004C 001091E5 LDR R1,[R1, #+0] \ 00000050 000051E3 CMP R1,#+0 \ 00000054 F1FFFF1A BNE ??Get_Online_total_1 5286 } \ 00000058 1EFF2FE1 BX LR ;; return 5287 5288 5289 //-------------------------------------------------------------------------------------------// 5290 5291 \ In segment CODE, align 4, keep-with-next 5292 void SetIndividStatus()//set to all contact to default vibra, sound and other by kluchnik 04.04.08 5293 { 5294 CLIST *t; 5295 t=(CLIST *)(&cltop); \ SetIndividStatus: \ 00000000 ........ LDR R0,??DataTable205 ;; icons \ 00000004 EB1F80E2 ADD R1,R0,#+940 \ 00000008 0C0000EA B ??SetIndividStatus_0 5296 while(t=(CLIST *)(t->next)) 5297 { 5298 if (!t->isgroup) \ ??SetIndividStatus_1: \ 0000000C 082091E5 LDR R2,[R1, #+8] \ 00000010 000052E3 CMP R2,#+0 \ 00000014 0900001A BNE ??SetIndividStatus_0 5299 { 5300 t->isvibra=1; \ 00000018 0120A0E3 MOV R2,#+1 \ 0000001C 682081E5 STR R2,[R1, #+104] 5301 t->issound=1; \ 00000020 6C2081E5 STR R2,[R1, #+108] 5302 t->isShowXst=Show_XTX; \ 00000024 383390E5 LDR R3,[R0, #+824] \ 00000028 7C3081E5 STR R3,[R1, #+124] 5303 #ifdef kluchnik 5304 t->isLoadHistory=1; \ 0000002C 602081E5 STR R2,[R1, #+96] 5305 #endif 5306 t->signals=1; \ 00000030 802081E5 STR R2,[R1, #+128] 5307 t->isaccess=1; \ 00000034 842081E5 STR R2,[R1, #+132] 5308 5309 t->automsgcount=0; \ 00000038 0020A0E3 MOV R2,#+0 \ 0000003C 882081E5 STR R2,[R1, #+136] 5310 } 5311 } \ ??SetIndividStatus_0: \ 00000040 001091E5 LDR R1,[R1, #+0] \ 00000044 000051E3 CMP R1,#+0 \ 00000048 EFFFFF1A BNE ??SetIndividStatus_1 5312 } \ 0000004C 1EFF2FE1 BX LR ;; return 5313 5314 //-------------------------------------------------------------------------------------------// 5315 5316 \ In segment CODE, align 4, keep-with-next 5317 ProcessPacket(TPKT *p) 5318 { \ ProcessPacket: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 4EDF4DE2 SUB SP,SP,#+312 5319 CLIST *t; 5320 LOGQ *q; 5321 char s[256]; 5322 switch(p->pkt.type) \ 00000008 28AB9FE5 LDR R10,??ProcessPacket_1+0x4 ;; ILL_RECV_FADE \ 0000000C ........ LDR R5,??DataTable204 ;; Canvas \ 00000010 ........ LDR R7,??DataTable205 ;; icons \ 00000014 0040A0E1 MOV R4,R0 \ 00000018 B410D4E1 LDRH R1,[R4, #+4] \ 0000001C 000094E5 LDR R0,[R4, #+0] \ 00000020 0160A0E3 MOV R6,#+1 \ 00000024 0090A0E3 MOV R9,#+0 \ 00000028 031041E2 SUB R1,R1,#+3 \ 0000002C 1C0051E3 CMP R1,#+28 \ 00000030 BB02008A BHI ??ProcessPacket_2 \ 00000034 022F8FE2 ADR R2,??ProcessPacket_0 \ 00000038 8110A0E1 MOV R1,R1, LSL #+1 \ 0000003C B12092E1 LDRH R2,[R2, R1] \ 00000040 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??ProcessPacket_0: \ 00000044 33010E00B702 DC16 +307,+14,+695,+695 \ B702 \ 0000004C 1100B7024D00 DC16 +17,+695,+77,+695 \ B702 \ 00000054 B702B702B702 DC16 +695,+695,+695,+695 \ B702 \ 0000005C B7021F021F02 DC16 +695,+543,+543,+695 \ B702 \ 00000064 B7023D004B00 DC16 +695,+61,+75,+695 \ B702 \ 0000006C B702B7024F02 DC16 +695,+695,+591,+695 \ B702 \ 00000074 B702B702B702 DC16 +695,+695,+695,+695 \ B702 \ 0000007C B5020000 DC16 +693,+0 5323 { 5324 case T_LOGIN: 5325 set_my_status(); \ ??ProcessPacket_3: \ 00000080 ........ BL set_my_status 5326 set_my_xstatus(); \ 00000084 ........ BL set_my_xstatus \ 00000088 A50200EA B ??ProcessPacket_2 5327 break; 5328 case T_CLENTRY: 5329 if (p->pkt.uin) \ ??ProcessPacket_4: \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 1800000A BEQ ??ProcessPacket_5 5330 { 5331 if ((t=FindContactByUin(p->pkt.uin))) \ 00000094 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000098 0080B0E1 MOVS R8,R0 \ 0000009C 0E00000A BEQ ??ProcessPacket_6 5332 { 5333 // t->state=0xFFFF; 5334 if (!t->local) strncpy(t->name,p->data,63); \ 000000A0 C00098E5 LDR R0,[R8, #+192] \ 000000A4 000050E3 CMP R0,#+0 \ 000000A8 0300001A BNE ??ProcessPacket_7 \ 000000AC 3F20A0E3 MOV R2,#+63 \ 000000B0 081084E2 ADD R1,R4,#+8 \ 000000B4 140088E2 ADD R0,R8,#+20 \ 000000B8 160100EF SWI +278 5335 t->group=GROUP_CACHE; \ ??ProcessPacket_7: \ 000000BC B00397E5 LDR R0,[R7, #+944] \ 000000C0 100088E5 STR R0,[R8, #+16] 5336 ChangeContactPos(t); \ ??ProcessPacket_8: \ 000000C4 0800A0E1 MOV R0,R8 \ 000000C8 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 5337 RecountMenu(t,1); \ 000000CC 0110A0E3 MOV R1,#+1 \ 000000D0 0800A0E1 MOV R0,R8 \ ??ProcessPacket_9: \ 000000D4 ........ BL RecountMenu \ 000000D8 910200EA B ??ProcessPacket_2 5338 } 5339 else 5340 { 5341 RecountMenu(AddContact(p->pkt.uin,p->data, GROUP_CACHE, 0),1); \ ??ProcessPacket_6: \ 000000DC B02397E5 LDR R2,[R7, #+944] \ 000000E0 000094E5 LDR R0,[R4, #+0] \ 000000E4 0030A0E3 MOV R3,#+0 \ 000000E8 081084E2 ADD R1,R4,#+8 \ 000000EC ........ _BLF AddContact,??AddContact??rA \ 000000F0 0610A0E1 MOV R1,R6 \ 000000F4 F6FFFFEA B ??ProcessPacket_9 5342 } 5343 } 5344 else 5345 { 5346 if(VIBR_ON_CONNECT) \ ??ProcessPacket_5: \ 000000F8 ........ LDR R0,??DataTable191 ;; VIBR_ON_CONNECT \ 000000FC 000090E5 LDR R0,[R0, #+0] \ 00000100 000050E3 CMP R0,#+0 \ 00000104 0100000A BEQ ??ProcessPacket_10 5347 { 5348 vibra_count=1; \ 00000108 6C6387E5 STR R6,[R7, #+876] 5349 start_vibra(); \ 0000010C ........ BL start_vibra 5350 } 5351 GROUP_CACHE=0; \ ??ProcessPacket_10: \ 00000110 B09387E5 STR R9,[R7, #+944] 5352 ask_my_info(); 5353 if (maingui_id/*contactlist_menu_id*/) \ 00000114 040397E5 LDR R0,[R7, #+772] \ 00000118 000050E3 CMP R0,#+0 \ 0000011C 0200000A BEQ ??ProcessPacket_11 5354 { 5355 RecountMenu(NULL,1); \ 00000120 0110A0E3 MOV R1,#+1 \ 00000124 0900A0E1 MOV R0,R9 \ ??ProcessPacket_12: \ 00000128 E9FFFFEA B ??ProcessPacket_9 5356 } 5357 else 5358 { 5359 #ifdef USE_MLMENU 5360 unhooked2=1; 5361 create_contactlist_menu(); 5362 #endif 5363 // CreateCL(); 5364 // if(ShowLoadScreen) 5365 SetIndividStatus(); \ ??ProcessPacket_11: \ 0000012C ........ BL SetIndividStatus 5366 ShowLoadScreen=0; \ 00000130 EC9387E5 STR R9,[R7, #+1004] 5367 SMART_REDRAW(); \ 00000134 ........ BL SMART_REDRAW \ 00000138 790200EA B ??ProcessPacket_2 5368 } 5369 } 5370 break; 5371 case T_GROUPID: 5372 if (t=FindGroupByID(GROUP_CACHE=p->pkt.uin)) \ ??ProcessPacket_13: \ 0000013C B00387E5 STR R0,[R7, #+944] \ 00000140 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000144 0080B0E1 MOVS R8,R0 \ 00000148 0400000A BEQ ??ProcessPacket_14 5373 { 5374 strncpy(t->name,p->data,63); \ 0000014C 3F20A0E3 MOV R2,#+63 \ 00000150 081084E2 ADD R1,R4,#+8 \ 00000154 140088E2 ADD R0,R8,#+20 \ 00000158 160100EF SWI +278 5375 ChangeContactPos(t); \ 0000015C D8FFFFEA B ??ProcessPacket_8 5376 RecountMenu(t,1); 5377 } 5378 else 5379 { 5380 RecountMenu(AddGroup(p->pkt.uin,p->data),1); \ ??ProcessPacket_14: \ 00000160 000094E5 LDR R0,[R4, #+0] \ 00000164 081084E2 ADD R1,R4,#+8 \ 00000168 ........ _BLF AddGroup,??AddGroup??rA \ 0000016C 0110A0E3 MOV R1,#+1 \ 00000170 D7FFFFEA B ??ProcessPacket_9 5381 } 5382 break; 5383 case T_GROUPFOLLOW: 5384 GROUP_CACHE=p->pkt.uin; \ ??ProcessPacket_15: \ 00000174 B00387E5 STR R0,[R7, #+944] \ 00000178 690200EA B ??ProcessPacket_2 5385 break; 5386 case T_STATUSCHANGE: 5387 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_16: \ 0000017C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000180 0080B0E1 MOVS R8,R0 5388 if (t) \ 00000184 6602000A BEQ ??ProcessPacket_2 5389 { 5390 int i=t->state; \ 00000188 B415D8E1 LDRH R1,[R8, #+84] 5391 CLIST *oldt=NULL; \ 0000018C 00B0A0E3 MOV R11,#+0 \ 00000190 04108DE5 STR R1,[SP, #+4] \ 00000194 0A00D4E5 LDRB R0,[R4, #+10] \ 00000198 B615D8E1 LDRH R1,[R8, #+86] \ 0000019C 000051E1 CMP R1,R0 \ 000001A0 1D00000A BEQ ??ProcessPacket_17 5392 if (t->xstate!=p->data[2]) // Если картинка икс статуса сменилась 5393 { 5394 t->xstate=p->data[2]; \ 000001A4 B605C8E1 STRH R0,[R8, #+86] 5395 FreeXText(t); \ 000001A8 0800A0E1 MOV R0,R8 \ 000001AC ........ _BLF FreeXText,??FreeXText??rA 5396 if (t->xstate && ENA_AUTO_XTXT) // Если установлен икс статус и можно запрашивать по смене икс статуса :) \ 000001B0 B605D8E1 LDRH R0,[R8, #+86] \ 000001B4 000050E3 CMP R0,#+0 \ 000001B8 1600000A BEQ ??ProcessPacket_18 \ 000001BC 78099FE5 LDR R0,??ProcessPacket_1+0x8 ;; ENA_AUTO_XTXT \ 000001C0 000090E5 LDR R0,[R0, #+0] \ 000001C4 000050E3 CMP R0,#+0 \ 000001C8 1200000A BEQ ??ProcessPacket_18 5397 { 5398 t->req_xtext=1; \ 000001CC BC6088E5 STR R6,[R8, #+188] 5399 if (edchat_id) // Если открыт чат \ 000001D0 B80397E5 LDR R0,[R7, #+952] \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 0F00000A BEQ ??ProcessPacket_17 5400 { 5401 void *data=FindGUIbyId(edchat_id,NULL); \ 000001DC B80397E5 LDR R0,[R7, #+952] \ 000001E0 0010A0E3 MOV R1,#+0 \ 000001E4 090200EF SWI +521 5402 if (data) \ 000001E8 000050E3 CMP R0,#+0 \ 000001EC 0A00000A BEQ ??ProcessPacket_17 5403 { 5404 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 000001F0 DF0100EF SWI +479 5405 if (ed_struct) \ 000001F4 000050E3 CMP R0,#+0 \ 000001F8 0700000A BEQ ??ProcessPacket_17 5406 { 5407 if (ed_struct->ed_contact==t) // Если наш чат то запрашиваем текст статуса \ 000001FC 000090E5 LDR R0,[R0, #+0] \ 00000200 080050E1 CMP R0,R8 \ 00000204 0400001A BNE ??ProcessPacket_17 5408 { 5409 t->req_xtext=0; \ 00000208 BC9088E5 STR R9,[R8, #+188] 5410 RequestXText(t->uin); \ 0000020C 0C0098E5 LDR R0,[R8, #+12] \ 00000210 ........ BL RequestXText \ 00000214 000000EA B ??ProcessPacket_17 5411 } 5412 } 5413 } 5414 } 5415 } 5416 else // Если икс статус не установлен то на всякий случай снимаем флаг получения текста 5417 { 5418 t->req_xtext=0; \ ??ProcessPacket_18: \ 00000218 BC9088E5 STR R9,[R8, #+188] 5419 } 5420 } 5421 if (contactlist_menu_id) \ ??ProcessPacket_17: \ 0000021C B40397E5 LDR R0,[R7, #+948] \ 00000220 000050E3 CMP R0,#+0 \ 00000224 0500000A BEQ ??ProcessPacket_19 5422 { 5423 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 00000228 B40397E5 LDR R0,[R7, #+948] \ 0000022C 0010A0E3 MOV R1,#+0 \ 00000230 090200EF SWI +521 \ 00000234 8F0100EF SWI +399 \ 00000238 ........ _BLF FindContactByN,??FindContactByN??rA \ 0000023C 00B0A0E1 MOV R11,R0 5424 } 5425 if(t->state==65535) t->change=1; \ ??ProcessPacket_19: \ 00000240 B405D8E1 LDRH R0,[R8, #+84] \ 00000244 FFA0A0E3 MOV R10,#+255 \ 00000248 FFAC8AE3 ORR R10,R10,#0xFF00 \ 0000024C 0A0050E1 CMP R0,R10 \ 00000250 8C608805 STREQ R6,[R8, #+140] 5426 t->state=*((unsigned short *)(p->data)); \ 00000254 B800D4E1 LDRH R0,[R4, #+8] \ 00000258 B405C8E1 STRH R0,[R8, #+84] 5427 if((t->state!=65535)&&(t->change==1)) \ 0000025C 0A0050E1 CMP R0,R10 \ 00000260 0400000A BEQ ??ProcessPacket_20 \ 00000264 8C0098E5 LDR R0,[R8, #+140] \ 00000268 010050E3 CMP R0,#+1 5428 { 5429 t->just_now=2; \ 0000026C 0200A003 MOVEQ R0,#+2 \ 00000270 74008805 STREQ R0,[R8, #+116] 5430 t->change=0; \ 00000274 8C908805 STREQ R9,[R8, #+140] 5431 } 5432 LogStatusChange(t); \ ??ProcessPacket_20: \ 00000278 0800A0E1 MOV R0,R8 \ 0000027C ........ _BLF LogStatusChange,??LogStatusChange??rA 5433 ChangeContactPos(t); \ 00000280 0800A0E1 MOV R0,R8 \ 00000284 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 5434 RecountMenu(oldt,1); \ 00000288 0110A0E3 MOV R1,#+1 \ 0000028C 0B00A0E1 MOV R0,R11 \ 00000290 ........ BL RecountMenu 5435 5436 if(isLogStatusChange)//isLogStatusChange // by kluchnik 05.04.08 \ 00000294 ........ LDR R0,??DataTable192 ;; isLogStatusChange \ 00000298 000090E5 LDR R0,[R0, #+0] \ 0000029C 000050E3 CMP R0,#+0 \ 000002A0 2B00000A BEQ ??ProcessPacket_21 5437 { 5438 char *s=GetStatusByIconIndex(GetIconIndex(t)); \ 000002A4 0800A0E1 MOV R0,R8 \ 000002A8 ........ BL GetIconIndex \ 000002AC ........ BL GetStatusByIconIndex \ 000002B0 00008DE5 STR R0,[SP, #+0] 5439 FreeXText2(t); \ 000002B4 0800A0E1 MOV R0,R8 \ 000002B8 ........ BL FreeXText2 5440 TTime time; 5441 GetDateTime(NULL,&time); \ 000002BC 08108DE2 ADD R1,SP,#+8 \ 000002C0 0000A0E3 MOV R0,#+0 \ 000002C4 B40000EF SWI +180 5442 char *txt=malloc(64); \ 000002C8 4000A0E3 MOV R0,#+64 \ 000002CC 140000EF SWI +20 \ 000002D0 00B0A0E1 MOV R11,R0 5443 sprintf(txt," %s: %02d:%02d:%02d",s,time.hour,time.min,time.sec); \ 000002D4 0A00DDE5 LDRB R0,[SP, #+10] \ 000002D8 811F85E2 ADD R1,R5,#+516 \ 000002DC 01002DE9 PUSH {R0} \ 000002E0 0D00DDE5 LDRB R0,[SP, #+13] \ 000002E4 01002DE9 PUSH {R0} \ 000002E8 1030DDE5 LDRB R3,[SP, #+16] \ 000002EC 08209DE5 LDR R2,[SP, #+8] \ 000002F0 0B00A0E1 MOV R0,R11 \ 000002F4 160000EF SWI +22 5444 t->xtext2=malloc(64); \ 000002F8 4000A0E3 MOV R0,#+64 \ 000002FC 140000EF SWI +20 \ 00000300 B80088E5 STR R0,[R8, #+184] 5445 snprintf(t->xtext2,64,txt); \ 00000304 0B20A0E1 MOV R2,R11 \ 00000308 4010A0E3 MOV R1,#+64 \ 0000030C 1B0100EF SWI +283 5446 AddStringToLog(t,0x03,txt,"Status change",0xFFFFFFFF, 0); \ 00000310 0900A0E1 MOV R0,R9 \ 00000314 01002DE9 PUSH {R0} \ 00000318 863F85E2 ADD R3,R5,#+536 \ 0000031C 0B20A0E1 MOV R2,R11 \ 00000320 0310A0E3 MOV R1,#+3 \ 00000324 0000E0E1 MVN R0,R0 \ 00000328 01002DE9 PUSH {R0} \ 0000032C 0800A0E1 MOV R0,R8 \ 00000330 ........ BL AddStringToLog 5447 ReqAddMsgToChat(t); \ 00000334 0800A0E1 MOV R0,R8 \ 00000338 ........ BL ReqAddMsgToChat 5448 RecountMenu(NULL, 0); \ 0000033C 0910A0E1 MOV R1,R9 \ 00000340 0100A0E1 MOV R0,R1 \ 00000344 ........ BL RecountMenu 5449 mfree(txt); \ 00000348 0B00A0E1 MOV R0,R11 \ 0000034C 150000EF SWI +21 \ 00000350 10D08DE2 ADD SP,SP,#+16 5450 } 5451 5452 if ((t->state!=0xFFFF)&&(i==0xFFFF))//Звук \ ??ProcessPacket_21: \ 00000354 B405D8E1 LDRH R0,[R8, #+84] \ 00000358 F410A0E3 MOV R1,#+244 \ 0000035C 681D81E3 ORR R1,R1,#0x1A00 \ 00000360 07B081E0 ADD R11,R1,R7 \ 00000364 0A0050E1 CMP R0,R10 \ 00000368 4300000A BEQ ??ProcessPacket_22 \ 0000036C 04109DE5 LDR R1,[SP, #+4] \ 00000370 0A0051E1 CMP R1,R10 \ 00000374 4000001A BNE ??ProcessPacket_22 5453 { 5454 if(Is_INC_On && (PopupShow==2 || PopupShow==3)) \ 00000378 F00297E5 LDR R0,[R7, #+752] \ 0000037C 000050E3 CMP R0,#+0 \ 00000380 1700000A BEQ ??ProcessPacket_23 \ 00000384 B4079FE5 LDR R0,??ProcessPacket_1+0xC ;; PopupShow \ 00000388 000090E5 LDR R0,[R0, #+0] \ 0000038C 020050E3 CMP R0,#+2 \ 00000390 03005013 CMPNE R0,#+3 \ 00000394 1200001A BNE ??ProcessPacket_23 5455 { 5456 INC_show2=20; 5457 sprintf(onContact,PopupOnlineString,t->name); \ 00000398 A4179FE5 LDR R1,??ProcessPacket_1+0x10 ;; PopupOnlineString \ 0000039C 1400A0E3 MOV R0,#+20 \ 000003A0 140487E5 STR R0,[R7, #+1044] \ 000003A4 142088E2 ADD R2,R8,#+20 \ 000003A8 1800A0E3 MOV R0,#+24 \ 000003AC 7C0D80E3 ORR R0,R0,#0x1F00 \ 000003B0 070080E0 ADD R0,R0,R7 \ 000003B4 160000EF SWI +22 5458 sprintf(on_off_buf,"[%s: %s]\n",t->xtext2+1,t->name); \ 000003B8 B80098E5 LDR R0,[R8, #+184] \ 000003BC 143088E2 ADD R3,R8,#+20 \ 000003C0 012080E2 ADD R2,R0,#+1 \ 000003C4 8A1F85E2 ADD R1,R5,#+552 \ 000003C8 0B00A0E1 MOV R0,R11 \ 000003CC 160000EF SWI +22 5459 on_off_timer=ON_OFF_TIME; \ 000003D0 70079FE5 LDR R0,??ProcessPacket_1+0x14 ;; ON_OFF_TIME \ 000003D4 000090E5 LDR R0,[R0, #+0] \ 000003D8 C40387E5 STR R0,[R7, #+964] 5460 UpdateCLheader(); 5461 show_on_contact(); \ 000003DC ........ BL show_on_contact \ 000003E0 030000EA B ??ProcessPacket_24 5462 } 5463 else 5464 GBS_DelTimer(&incs2);//на всяк \ ??ProcessPacket_23: \ 000003E4 5800A0E3 MOV R0,#+88 \ 000003E8 7C0D80E3 ORR R0,R0,#0x1F00 \ 000003EC 070080E0 ADD R0,R0,R7 \ 000003F0 8C0100EF SWI +396 5465 if(!extended_sounds) \ ??ProcessPacket_24: \ 000003F4 ........ LDR R0,??DataTable193 ;; extended_sounds \ 000003F8 4CA79FE5 LDR R10,??ProcessPacket_1+0x18 ;; sndGlobal \ 000003FC 000090E5 LDR R0,[R0, #+0] \ 00000400 000050E3 CMP R0,#+0 \ 00000404 0200001A BNE ??ProcessPacket_25 5466 { 5467 Play(sndGlobal); \ 00000408 0A00A0E1 MOV R0,R10 \ 0000040C ........ BL Play \ 00000410 300000EA B ??ProcessPacket_26 5468 } 5469 else 5470 { 5471 FSTATS stat; 5472 int fsize; 5473 unsigned int ul = 0; 5474 uins=t->uin; 5475 sprintf(talk_sound, "%s%d.wav", sndGlobal2, uins); \ ??ProcessPacket_25: \ 00000414 34279FE5 LDR R2,??ProcessPacket_1+0x1C ;; sndGlobal2 \ 00000418 00908DE5 STR R9,[SP, #+0] \ 0000041C 0C0098E5 LDR R0,[R8, #+12] \ 00000420 7C90A0E3 MOV R9,#+124 \ 00000424 DC0287E5 STR R0,[R7, #+732] \ 00000428 509E89E3 ORR R9,R9,#0x500 \ 0000042C 0030A0E1 MOV R3,R0 \ 00000430 751F85E2 ADD R1,R5,#+468 \ 00000434 070089E0 ADD R0,R9,R7 \ 00000438 160000EF SWI +22 5476 GetFileStats(talk_sound,&stat,&ul); \ 0000043C 0D20A0E1 MOV R2,SP \ 00000440 441F8DE2 ADD R1,SP,#+272 \ 00000444 070089E0 ADD R0,R9,R7 \ 00000448 840000EF SWI +132 5477 fsize=stat.size; 5478 if(fsize>0) \ 0000044C 14019DE5 LDR R0,[SP, #+276] \ 00000450 010050E3 CMP R0,#+1 5479 Play(talk_sound); \ 00000454 070089A0 ADDGE R0,R9,R7 5480 else 5481 Play(sndGlobal); \ 00000458 0A00A0B1 MOVLT R0,R10 \ 0000045C ........ BL Play 5482 t->isvibra=1; \ 00000460 686088E5 STR R6,[R8, #+104] 5483 t->issound=1; \ 00000464 6C6088E5 STR R6,[R8, #+108] 5484 t->isShowXst=Show_XTX; \ 00000468 380397E5 LDR R0,[R7, #+824] \ 0000046C 7C0088E5 STR R0,[R8, #+124] 5485 #ifdef kluchnik 5486 t->isLoadHistory=1; \ 00000470 606088E5 STR R6,[R8, #+96] 5487 #endif 5488 t->signals=1; \ 00000474 806088E5 STR R6,[R8, #+128] \ 00000478 160000EA B ??ProcessPacket_26 5489 } 5490 } 5491 5492 if ((i!=0xFFFF)&&(t->state==0xFFFF))//Звук \ ??ProcessPacket_22: \ 0000047C 04109DE5 LDR R1,[SP, #+4] \ 00000480 0A0051E1 CMP R1,R10 \ 00000484 1300000A BEQ ??ProcessPacket_26 \ 00000488 0A0050E1 CMP R0,R10 \ 0000048C 1100001A BNE ??ProcessPacket_26 5493 { 5494 Play(sndSrvMsg); \ 00000490 BC069FE5 LDR R0,??ProcessPacket_1+0x20 ;; sndSrvMsg \ 00000494 ........ BL Play 5495 if(TIME_OR_MSG==2 || TIME_OR_MSG==3 | TIME_OR_MSG==4) \ 00000498 B8069FE5 LDR R0,??ProcessPacket_1+0x24 ;; TIME_OR_MSG \ 0000049C 000090E5 LDR R0,[R0, #+0] \ 000004A0 020050E3 CMP R0,#+2 \ 000004A4 03005013 CMPNE R0,#+3 \ 000004A8 04005013 CMPNE R0,#+4 \ 000004AC 0000001A BNE ??ProcessPacket_27 5496 Get_Online_total(); \ 000004B0 ........ BL Get_Online_total 5497 sprintf(on_off_buf,"[%s: %s]\n",t->xtext2+1,t->name); \ ??ProcessPacket_27: \ 000004B4 B80098E5 LDR R0,[R8, #+184] \ 000004B8 143088E2 ADD R3,R8,#+20 \ 000004BC 012080E2 ADD R2,R0,#+1 \ 000004C0 8A1F85E2 ADD R1,R5,#+552 \ 000004C4 0B00A0E1 MOV R0,R11 \ 000004C8 160000EF SWI +22 5498 on_off_timer=ON_OFF_TIME; \ 000004CC 74069FE5 LDR R0,??ProcessPacket_1+0x14 ;; ON_OFF_TIME \ 000004D0 000090E5 LDR R0,[R0, #+0] \ 000004D4 C40387E5 STR R0,[R7, #+964] 5499 UpdateCLheader(); 5500 } 5501 5502 if (edchat_id) \ ??ProcessPacket_26: \ 000004D8 B80397E5 LDR R0,[R7, #+952] \ 000004DC 000050E3 CMP R0,#+0 \ 000004E0 8F01000A BEQ ??ProcessPacket_2 5503 { 5504 void *data=FindGUIbyId(edchat_id,NULL); \ 000004E4 B80397E5 LDR R0,[R7, #+952] \ 000004E8 0010A0E3 MOV R1,#+0 \ 000004EC 090200EF SWI +521 5505 { 5506 EDCHAT_STRUCT *ed_struct; 5507 ed_struct=EDIT_GetUserPointer(data); \ 000004F0 DF0100EF SWI +479 5508 if (ed_struct) \ 000004F4 000050E3 CMP R0,#+0 \ 000004F8 8901000A BEQ ??ProcessPacket_2 5509 { 5510 if (ed_struct->ed_contact==t) \ 000004FC 000090E5 LDR R0,[R0, #+0] \ 00000500 080050E1 CMP R0,R8 \ 00000504 8601001A BNE ??ProcessPacket_2 5511 { 5512 DirectRedrawGUI_ID(edchat_id); \ 00000508 B80397E5 LDR R0,[R7, #+952] \ 0000050C 400100EF SWI +320 \ 00000510 830100EA B ??ProcessPacket_2 5513 } 5514 } 5515 } 5516 } 5517 } 5518 break; 5519 case T_RECVMSG: 5520 NEW_MSG=1; \ ??ProcessPacket_28: \ 00000514 046487E5 STR R6,[R7, #+1028] 5521 t=FindContactByUin(p->pkt.uin); \ 00000518 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 0000051C 0080B0E1 MOVS R8,R0 5522 if (!t) \ 00000520 0900001A BNE ??ProcessPacket_29 5523 { 5524 sprintf(s,percent_d,p->pkt.uin); \ 00000524 002094E5 LDR R2,[R4, #+0] \ 00000528 0B1085E2 ADD R1,R5,#+11 \ 0000052C 10008DE2 ADD R0,SP,#+16 \ 00000530 160000EF SWI +22 5525 t=AddContact(p->pkt.uin,s,GROUP_CACHE,0); \ 00000534 B02397E5 LDR R2,[R7, #+944] \ 00000538 000094E5 LDR R0,[R4, #+0] \ 0000053C 0030A0E3 MOV R3,#+0 \ 00000540 10108DE2 ADD R1,SP,#+16 \ 00000544 ........ _BLF AddContact,??AddContact??rA \ 00000548 0080A0E1 MOV R8,R0 5526 } 5527 #ifdef kluchnik 5528 if(!t->isactive && HISTORY_BUFFER && (t->isLoadHistory && t->isIndividSet)) GetHistory(t, 64<isactive && HISTORY_BUFFER) GetHistory(t, 64<isactive && HISTORY_BUFFER) GetHistory(t, 64<name[0]=='#') \ ??ProcessPacket_30: \ 00000578 8810A0E3 MOV R1,#+136 \ 0000057C 741D81E3 ORR R1,R1,#0x1D00 \ 00000580 071081E0 ADD R1,R1,R7 \ 00000584 00108DE5 STR R1,[SP, #+0] \ 00000588 1400D8E5 LDRB R0,[R8, #+20] \ 0000058C 230050E3 CMP R0,#+35 \ 00000590 1700001A BNE ??ProcessPacket_31 5535 { 5536 //Если это конференция, патчим имя 5537 char *s=strchr(p->data,'>'); \ 00000594 3E10A0E3 MOV R1,#+62 \ 00000598 080084E2 ADD R0,R4,#+8 \ 0000059C 180000EF SWI +24 5538 //Если нашли символ > и после него пробел и ник короче 16 символов 5539 if (s) \ 000005A0 000050E3 CMP R0,#+0 \ 000005A4 1200000A BEQ ??ProcessPacket_31 5540 { 5541 if ((s[1]==' ')&&((s-p->data)<16)) \ 000005A8 0110D0E5 LDRB R1,[R0, #+1] \ 000005AC 200051E3 CMP R1,#+32 \ 000005B0 0F00001A BNE ??ProcessPacket_31 \ 000005B4 081084E2 ADD R1,R4,#+8 \ 000005B8 011040E0 SUB R1,R0,R1 \ 000005BC 100051E3 CMP R1,#+16 \ 000005C0 0B0000AA BGE ??ProcessPacket_31 5542 { 5543 *s=0; //Режем строку \ 000005C4 0090C0E5 STRB R9,[R0, #+0] 5544 AddStringToLog(t,0x02,s+2,p->data,0xFFFFFFFF,1); //Добавляем имя из текста сообщения \ 000005C8 0110A0E3 MOV R1,#+1 \ 000005CC 02002DE9 PUSH {R1} \ 000005D0 083084E2 ADD R3,R4,#+8 \ 000005D4 022080E2 ADD R2,R0,#+2 \ 000005D8 0800A0E1 MOV R0,R8 \ 000005DC 001061E2 RSB R1,R1,#+0 \ 000005E0 02002DE9 PUSH {R1} \ 000005E4 0210A0E3 MOV R1,#+2 \ 000005E8 ........ BL AddStringToLog 5545 goto L1; \ 000005EC 08D08DE2 ADD SP,SP,#+8 \ 000005F0 7E0000EA B ??ProcessPacket_32 5546 } 5547 } 5548 } 5549 5550 //=================== tas bus jautri ===================// 5551 5552 comanda=1; \ ??ProcessPacket_31: \ 000005F4 0C6487E5 STR R6,[R7, #+1036] 5553 CheckComand(p->data, t); \ 000005F8 0810A0E1 MOV R1,R8 \ 000005FC 58559FE5 LDR R5,??ProcessPacket_1+0x28 ;; ILL_KEYS_RECV \ 00000600 58B59FE5 LDR R11,??ProcessPacket_1+0x2C ;; ILL_RECV_TMR \ 00000604 080084E2 ADD R0,R4,#+8 \ 00000608 ........ BL CheckComand \ 0000060C 803098E5 LDR R3,[R8, #+128] \ 00000610 ........ LDR R0,??DataTable195 ;; automsgcount \ 00000614 ........ LDR R1,??DataTable196 ;; VIBR_TYPE \ 00000618 000053E3 CMP R3,#+0 \ 0000061C 84309815 LDRNE R3,[R8, #+132] \ 00000620 5A2FA0E3 MOV R2,#+360 \ 00000624 00005313 CMPNE R3,#+0 \ 00000628 1100000A BEQ ??ProcessPacket_33 5554 if(t->signals && t->isaccess) 5555 { 5556 #ifdef NEWSGOLD 5557 scrsTime=0; 5558 #endif 5559 if(SHOW_ACTIVE) \ 0000062C ........ LDR R3,??DataTable199 ;; SHOW_ACTIVE \ 00000630 249387E5 STR R9,[R7, #+804] \ 00000634 003093E5 LDR R3,[R3, #+0] \ 00000638 000053E3 CMP R3,#+0 5560 t->isactive=ACTIVE_TIME; \ 0000063C AC208815 STRNE R2,[R8, #+172] 5561 if(t->isvibra) \ 00000640 682098E5 LDR R2,[R8, #+104] \ 00000644 000052E3 CMP R2,#+0 \ 00000648 2800000A BEQ ??ProcessPacket_34 5562 { 5563 if(VIBR_TYPE) \ 0000064C 001091E5 LDR R1,[R1, #+0] \ 00000650 000051E3 CMP R1,#+0 5564 vibra_count=2; \ 00000654 0210A013 MOVNE R1,#+2 \ 00000658 6C138715 STRNE R1,[R7, #+876] 5565 else 5566 vibra_count=1; \ 0000065C 6C638705 STREQ R6,[R7, #+876] 5567 if(t->automsgcountisIndividSet) \ ??ProcessPacket_33: \ 00000674 643098E5 LDR R3,[R8, #+100] \ 00000678 249387E5 STR R9,[R7, #+804] \ 0000067C 000053E3 CMP R3,#+0 \ 00000680 0C00000A BEQ ??ProcessPacket_36 5584 { 5585 #ifdef NEWSGOLD 5586 scrsTime=0; 5587 #endif 5588 if(SHOW_ACTIVE) \ 00000684 ........ LDR R0,??DataTable199 ;; SHOW_ACTIVE \ 00000688 000090E5 LDR R0,[R0, #+0] \ 0000068C 000050E3 CMP R0,#+0 5589 t->isactive=ACTIVE_TIME; \ 00000690 AC208815 STRNE R2,[R8, #+172] 5590 if(t->isvibra) \ 00000694 680098E5 LDR R0,[R8, #+104] \ 00000698 000050E3 CMP R0,#+0 \ 0000069C 1300000A BEQ ??ProcessPacket_34 5591 { 5592 if(VIBR_TYPE) \ 000006A0 000091E5 LDR R0,[R1, #+0] \ 000006A4 000050E3 CMP R0,#+0 5593 vibra_count=2; \ 000006A8 0200A013 MOVNE R0,#+2 \ 000006AC 6C038715 STRNE R0,[R7, #+876] 5594 else 5595 vibra_count=1; \ 000006B0 6C638705 STREQ R6,[R7, #+876] 5596 if(t->automsgcount < automsgcount && away_m) 5597 start_vibra(); \ 000006B4 0C0000EA B ??ProcessPacket_35 5598 else 5599 start_vibra(); 5600 } 5601 #ifdef ELKA 5602 if(SLI_TYPE) 5603 SLI_Timer(); 5604 #endif 5605 if(Is_Double_Vibra_On) 5606 { 5607 Reminder_timer(); 5608 } 5609 5610 if (Is_ILU_On) 5611 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 5612 } 5613 else 5614 { 5615 #ifdef NEWSGOLD 5616 scrsTime=0; 5617 #endif 5618 if(SHOW_ACTIVE) \ ??ProcessPacket_36: \ 000006B8 ........ LDR R3,??DataTable199 ;; SHOW_ACTIVE \ 000006BC 003093E5 LDR R3,[R3, #+0] \ 000006C0 000053E3 CMP R3,#+0 5619 t->isactive=ACTIVE_TIME; \ 000006C4 AC208815 STRNE R2,[R8, #+172] 5620 if(VIBR_TYPE) \ 000006C8 001091E5 LDR R1,[R1, #+0] \ 000006CC 000051E3 CMP R1,#+0 5621 vibra_count=2; \ 000006D0 0210A013 MOVNE R1,#+2 \ 000006D4 6C138715 STRNE R1,[R7, #+876] 5622 else 5623 vibra_count=1; \ 000006D8 6C638705 STREQ R6,[R7, #+876] 5624 if(t->automsgcount >= automsgcount) vibra_count=0; \ 000006DC 881098E5 LDR R1,[R8, #+136] \ 000006E0 000090E5 LDR R0,[R0, #+0] \ 000006E4 000051E1 CMP R1,R0 \ 000006E8 6C938725 STRCS R9,[R7, #+876] 5625 start_vibra(); \ ??ProcessPacket_35: \ 000006EC ........ BL start_vibra 5626 #ifdef ELKA 5627 if(SLI_TYPE) 5628 SLI_Timer(); \ ??ProcessPacket_34: \ 000006F0 ........ BL SLI_Timer 5629 #endif 5630 if(Is_Double_Vibra_On) \ 000006F4 F80297E5 LDR R0,[R7, #+760] \ 000006F8 000050E3 CMP R0,#+0 \ 000006FC 0000000A BEQ ??ProcessPacket_37 5631 { 5632 Reminder_timer(); \ 00000700 ........ BL Reminder_timer 5633 } 5634 5635 if (Is_ILU_On) \ ??ProcessPacket_37: \ 00000704 F40297E5 LDR R0,[R7, #+756] \ 00000708 000050E3 CMP R0,#+0 \ 0000070C 0500000A BEQ ??ProcessPacket_38 5636 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 00000710 4C049FE5 LDR R0,??ProcessPacket_1+0x30 ;; ILL_DISP_RECV \ 00000714 00309AE5 LDR R3,[R10, #+0] \ 00000718 00209BE5 LDR R2,[R11, #+0] \ 0000071C 001095E5 LDR R1,[R5, #+0] \ 00000720 000090E5 LDR R0,[R0, #+0] \ 00000724 ........ BL IlluminationOn 5637 } 5638 5639 if(comanda==1) \ ??ProcessPacket_38: \ 00000728 0C0497E5 LDR R0,[R7, #+1036] \ 0000072C 010050E3 CMP R0,#+1 \ 00000730 2E00001A BNE ??ProcessPacket_32 5640 { 5641 AddStringToLog(t,0x02,p->data,t->name,0xFFFFFFFF,1); \ 00000734 01002DE9 PUSH {R0} \ 00000738 143088E2 ADD R3,R8,#+20 \ 0000073C 082084E2 ADD R2,R4,#+8 \ 00000740 0210A0E3 MOV R1,#+2 \ 00000744 000066E2 RSB R0,R6,#+0 \ 00000748 01002DE9 PUSH {R0} \ 0000074C 0800A0E1 MOV R0,R8 \ 00000750 ........ BL AddStringToLog 5642 main_count++; \ 00000754 ........ LDR R0,??DataTable200 ;; main_count \ 00000758 001090E5 LDR R1,[R0, #+0] \ 0000075C 011081E2 ADD R1,R1,#+1 \ 00000760 001080E5 STR R1,[R0, #+0] 5643 if(Is_INC_On && (PopupShow==1 || PopupShow==3)) \ 00000764 F00297E5 LDR R0,[R7, #+752] \ 00000768 08D08DE2 ADD SP,SP,#+8 \ 0000076C 000050E3 CMP R0,#+0 \ 00000770 1300000A BEQ ??ProcessPacket_39 \ 00000774 C4039FE5 LDR R0,??ProcessPacket_1+0xC ;; PopupShow \ 00000778 000090E5 LDR R0,[R0, #+0] \ 0000077C 010050E3 CMP R0,#+1 \ 00000780 03005013 CMPNE R0,#+3 \ 00000784 0E00001A BNE ??ProcessPacket_39 5644 { 5645 sprintf(show_nick,PopupMsgString,t->name); \ 00000788 D8139FE5 LDR R1,??ProcessPacket_1+0x34 ;; PopupMsgString \ 0000078C 142088E2 ADD R2,R8,#+20 \ 00000790 F800A0E3 MOV R0,#+248 \ 00000794 780D80E3 ORR R0,R0,#0x1E00 \ 00000798 070080E0 ADD R0,R0,R7 \ 0000079C 160000EF SWI +22 5646 if(!IsIdleUiOnTop()&&(!saver_on)) \ 000007A0 C50000EF SWI +197 \ 000007A4 000050E3 CMP R0,#+0 \ 000007A8 E0029705 LDREQ R0,[R7, #+736] \ 000007AC 00005003 CMPEQ R0,#+0 \ 000007B0 0500001A BNE ??ProcessPacket_40 5647 { 5648 INC_show=20; \ 000007B4 1400A0E3 MOV R0,#+20 \ 000007B8 100487E5 STR R0,[R7, #+1040] 5649 show_pp_sender(); \ 000007BC ........ BL show_pp_sender \ 000007C0 010000EA B ??ProcessPacket_40 5650 } 5651 } 5652 else 5653 GBS_DelTimer(&develop); \ ??ProcessPacket_39: \ 000007C4 00009DE5 LDR R0,[SP, #+0] \ 000007C8 8C0100EF SWI +396 5654 5655 main_msg_timer2=main_msg_timer;//при получении сообщения восстанавливаем таймер \ ??ProcessPacket_40: \ 000007CC 98039FE5 LDR R0,??ProcessPacket_1+0x38 ;; main_msg_timer \ 000007D0 000090E5 LDR R0,[R0, #+0] \ 000007D4 000487E5 STR R0,[R7, #+1024] 5656 if(Is_SMARTCPU_On) \ 000007D8 EC0297E5 LDR R0,[R7, #+748] \ 000007DC 000050E3 CMP R0,#+0 \ 000007E0 0200000A BEQ ??ProcessPacket_32 5657 AddToMain(t->name,p->data); \ 000007E4 081084E2 ADD R1,R4,#+8 \ 000007E8 140088E2 ADD R0,R8,#+20 \ 000007EC ........ BL AddToMain 5658 } 5659 L1: 5660 //Разворачиваем группу, в которой пришло сообщение 5661 { 5662 CLIST *g=FindGroupByID(t->group); \ ??ProcessPacket_32: \ 000007F0 100098E5 LDR R0,[R8, #+16] \ 000007F4 ........ _BLF FindGroupByID,??FindGroupByID??rA 5663 if (g) \ 000007F8 000050E3 CMP R0,#+0 5664 { 5665 if (g->state) \ 000007FC B415D011 LDRHNE R1,[R0, #+84] \ 00000800 00005113 CMPNE R1,#+0 5666 { 5667 g->state=0; \ 00000804 B495C011 STRHNE R9,[R0, #+84] 5668 } 5669 } 5670 } 5671 5672 ReqAddMsgToChat(t); \ 00000808 0800A0E1 MOV R0,R8 \ 0000080C ........ BL ReqAddMsgToChat 5673 RecountMenu(t,1); \ 00000810 0110A0E3 MOV R1,#+1 \ 00000814 0800A0E1 MOV R0,R8 \ 00000818 ........ BL RecountMenu 5674 5675 switch (DEVELOP_IF) \ 0000081C 4C039FE5 LDR R0,??ProcessPacket_1+0x3C ;; DEVELOP_IF \ 00000820 000090E5 LDR R0,[R0, #+0] \ 00000824 000050E3 CMP R0,#+0 \ 00000828 0400000A BEQ ??ProcessPacket_41 \ 0000082C 010050E2 SUBS R0,R0,#+1 \ 00000830 0B00000A BEQ ??ProcessPacket_42 \ 00000834 020050E2 SUBS R0,R0,#+2 \ 00000838 1300000A BEQ ??ProcessPacket_43 \ 0000083C B80000EA B ??ProcessPacket_2 5676 { 5677 case 0: 5678 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) to_develop(); \ ??ProcessPacket_41: \ 00000840 068100EF SWI +33030 \ 00000844 080090E5 LDR R0,[R0, #+8] \ 00000848 001397E5 LDR R1,[R7, #+768] \ 0000084C 0C0090E5 LDR R0,[R0, #+12] \ 00000850 0C0090E5 LDR R0,[R0, #+12] \ 00000854 010050E1 CMP R0,R1 \ ??ProcessPacket_44: \ 00000858 B100000A BEQ ??ProcessPacket_2 \ 0000085C ........ BL to_develop \ 00000860 AF0000EA B ??ProcessPacket_2 5679 break; 5680 case 1: 5681 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) to_develop(); \ ??ProcessPacket_42: \ 00000864 068100EF SWI +33030 \ 00000868 080090E5 LDR R0,[R0, #+8] \ 0000086C 001397E5 LDR R1,[R7, #+768] \ 00000870 0C0090E5 LDR R0,[R0, #+12] \ 00000874 0C0090E5 LDR R0,[R0, #+12] \ 00000878 010050E1 CMP R0,R1 \ 0000087C A800000A BEQ ??ProcessPacket_2 \ 00000880 430000EF SWI +67 \ 00000884 000050E3 CMP R0,#+0 \ 00000888 F2FFFFEA B ??ProcessPacket_44 5682 break; 5683 case 2: 5684 break; 5685 case 3: 5686 GBS_DelTimer(&develop); \ ??ProcessPacket_43: \ 0000088C 00009DE5 LDR R0,[SP, #+0] \ 00000890 8C0100EF SWI +396 5687 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(!IsUnlocked())) begin_to_develop(); \ 00000894 068100EF SWI +33030 \ 00000898 080090E5 LDR R0,[R0, #+8] \ 0000089C 001397E5 LDR R1,[R7, #+768] \ 000008A0 0C0090E5 LDR R0,[R0, #+12] \ 000008A4 0C0090E5 LDR R0,[R0, #+12] \ 000008A8 010050E1 CMP R0,R1 \ 000008AC 9C00000A BEQ ??ProcessPacket_2 \ 000008B0 430000EF SWI +67 \ 000008B4 000050E3 CMP R0,#+0 \ 000008B8 9900001A BNE ??ProcessPacket_2 \ 000008BC ........ BL begin_to_develop \ 000008C0 970000EA B ??ProcessPacket_2 5688 break; 5689 } 5690 break; 5691 case T_SRV_ACK: 5692 case T_CLIENT_ACK: 5693 q=FindContactLOGQByAck(p); \ ??ProcessPacket_45: \ 000008C4 0400A0E1 MOV R0,R4 \ 000008C8 ........ BL FindContactLOGQByAck 5694 if (q) \ 000008CC 000050E3 CMP R0,#+0 \ 000008D0 9300000A BEQ ??ProcessPacket_2 5695 { 5696 q->acked=p->pkt.type==T_SRV_ACK?1:2; \ 000008D4 B410D4E1 LDRH R1,[R4, #+4] \ 000008D8 100051E3 CMP R1,#+16 \ 000008DC 0110A003 MOVEQ R1,#+1 \ 000008E0 0210A013 MOVNE R1,#+2 \ 000008E4 041080E5 STR R1,[R0, #+4] 5697 t=FindContactByUin(p->pkt.uin); \ 000008E8 000094E5 LDR R0,[R4, #+0] \ 000008EC ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000008F0 0080A0E1 MOV R8,R0 5698 if (edchat_id) \ 000008F4 B80397E5 LDR R0,[R7, #+952] \ 000008F8 000050E3 CMP R0,#+0 \ 000008FC 8800000A BEQ ??ProcessPacket_2 5699 { 5700 void *data=FindGUIbyId(edchat_id,NULL); \ 00000900 B80397E5 LDR R0,[R7, #+952] \ 00000904 0010A0E3 MOV R1,#+0 \ 00000908 090200EF SWI +521 \ 0000090C 0050B0E1 MOVS R5,R0 5701 if (data) \ 00000910 8300000A BEQ ??ProcessPacket_2 5702 { 5703 EDCHAT_STRUCT *ed_struct; 5704 ed_struct=EDIT_GetUserPointer(data); \ 00000914 DF0100EF SWI +479 5705 if (ed_struct) \ 00000918 000050E3 CMP R0,#+0 \ 0000091C 8000000A BEQ ??ProcessPacket_2 5706 { 5707 if (ed_struct->ed_contact==t) \ 00000920 000090E5 LDR R0,[R0, #+0] \ 00000924 080050E1 CMP R0,R8 \ 00000928 7D00001A BNE ??ProcessPacket_2 5708 { 5709 if (EDIT_IsBusy(data)) \ 0000092C 0500A0E1 MOV R0,R5 \ 00000930 1C0200EF SWI +540 \ 00000934 000050E3 CMP R0,#+0 \ 00000938 0300000A BEQ ??ProcessPacket_46 5710 { 5711 t->req_drawack=1; \ 0000093C 9C6088E5 STR R6,[R8, #+156] 5712 time_to_stop_t9=3; \ 00000940 0300A0E3 MOV R0,#+3 \ 00000944 080487E5 STR R0,[R7, #+1032] \ 00000948 750000EA B ??ProcessPacket_2 5713 } 5714 else { 5715 DrawAck(data); \ ??ProcessPacket_46: \ 0000094C 0500A0E1 MOV R0,R5 \ 00000950 ........ BL DrawAck 5716 if (p->pkt.type==T_SRV_ACK) \ 00000954 B400D4E1 LDRH R0,[R4, #+4] \ 00000958 100050E3 CMP R0,#+16 \ 0000095C 7000001A BNE ??ProcessPacket_2 5717 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 00000960 0C029FE5 LDR R0,??ProcessPacket_1+0x40 ;; ILL_SEND_TMR \ 00000964 00309AE5 LDR R3,[R10, #+0] \ 00000968 002090E5 LDR R2,[R0, #+0] \ 0000096C 04029FE5 LDR R0,??ProcessPacket_1+0x44 ;; ILL_KEYS_SEND \ 00000970 001090E5 LDR R1,[R0, #+0] \ 00000974 00029FE5 LDR R0,??ProcessPacket_1+0x48 ;; ILL_DISP_SEND \ 00000978 000090E5 LDR R0,[R0, #+0] \ 0000097C ........ BL IlluminationOn \ 00000980 670000EA B ??ProcessPacket_2 5718 } 5719 } 5720 } 5721 } 5722 } 5723 } 5724 break; 5725 case T_XTEXT_ACK: 5726 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_47: \ 00000984 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000988 0080B0E1 MOVS R8,R0 5727 if (t) \ 0000098C 6400000A BEQ ??ProcessPacket_2 5728 { 5729 int i; 5730 int j; 5731 FreeXText(t); \ 00000990 ........ _BLF FreeXText,??FreeXText??rA 5732 i=p->pkt.data_len; \ 00000994 B660D4E1 LDRH R6,[R4, #+6] 5733 memcpy(t->xtext=malloc(i),p->data,i); \ 00000998 0600A0E1 MOV R0,R6 \ 0000099C 140000EF SWI +20 \ 000009A0 B40088E5 STR R0,[R8, #+180] \ 000009A4 0620A0E1 MOV R2,R6 \ 000009A8 081084E2 ADD R1,R4,#+8 \ 000009AC 1E0100EF SWI +286 5734 zeromem(s,256); \ 000009B0 401FA0E3 MOV R1,#+256 \ 000009B4 10008DE2 ADD R0,SP,#+16 \ 000009B8 1D0100EF SWI +285 5735 strcpy(s,t->name); \ 000009BC 141088E2 ADD R1,R8,#+20 \ 000009C0 10008DE2 ADD R0,SP,#+16 \ 000009C4 1A0000EF SWI +26 5736 strcat(s,":\n"); \ 000009C8 591F8FE2 ADR R1,??ProcessPacket_1 ;; ":\n" \ 000009CC 10008DE2 ADD R0,SP,#+16 \ 000009D0 170000EF SWI +23 5737 i=strlen(s); \ 000009D4 10008DE2 ADD R0,SP,#+16 \ 000009D8 1B0000EF SWI +27 5738 j=p->data[0]; \ 000009DC 0860D4E5 LDRB R6,[R4, #+8] \ 000009E0 0070A0E1 MOV R7,R0 5739 if (j>(255-i)) j=255-i; \ 000009E4 FF0067E2 RSB R0,R7,#+255 \ 000009E8 060050E1 CMP R0,R6 \ 000009EC 0060A0B1 MOVLT R6,R0 5740 strncpy(s+i,p->data+1,j); \ 000009F0 0620A0E1 MOV R2,R6 \ 000009F4 091084E2 ADD R1,R4,#+9 \ 000009F8 10008DE2 ADD R0,SP,#+16 \ 000009FC 000087E0 ADD R0,R7,R0 \ 00000A00 160100EF SWI +278 5741 i+=j; \ 00000A04 070086E0 ADD R0,R6,R7 5742 if (i<255) \ 00000A08 FF0050E3 CMP R0,#+255 \ 00000A0C 100000AA BGE ??ProcessPacket_48 5743 { 5744 s[i]='\n'; \ 00000A10 10108DE2 ADD R1,SP,#+16 \ 00000A14 0A20A0E3 MOV R2,#+10 \ 00000A18 0120C0E7 STRB R2,[R0, +R1] 5745 i++; \ 00000A1C 0810D4E5 LDRB R1,[R4, #+8] \ 00000A20 B620D4E1 LDRH R2,[R4, #+6] \ 00000A24 010080E2 ADD R0,R0,#+1 5746 j=p->pkt.data_len-p->data[0]-1; 5747 if (j>(255-i)) j=255-i; 5748 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000A28 10308DE2 ADD R3,SP,#+16 \ 00000A2C 012042E0 SUB R2,R2,R1 \ 00000A30 016042E2 SUB R6,R2,#+1 \ 00000A34 FF2060E2 RSB R2,R0,#+255 \ 00000A38 060052E1 CMP R2,R6 \ 00000A3C 0260A0B1 MOVLT R6,R2 \ 00000A40 0620A0E1 MOV R2,R6 \ 00000A44 041081E0 ADD R1,R1,R4 \ 00000A48 091081E2 ADD R1,R1,#+9 \ 00000A4C 030080E0 ADD R0,R0,R3 \ 00000A50 160100EF SWI +278 5749 } 5750 5751 zeromem(s,256); \ ??ProcessPacket_48: \ 00000A54 401FA0E3 MOV R1,#+256 \ 00000A58 10008DE2 ADD R0,SP,#+16 \ 00000A5C 1D0100EF SWI +285 5752 i=0; 5753 j=p->data[0]; \ 00000A60 0860D4E5 LDRB R6,[R4, #+8] 5754 if (j>(255-i)) j=255-i; 5755 strncpy(s,p->data+1,j); \ 00000A64 091084E2 ADD R1,R4,#+9 \ 00000A68 10008DE2 ADD R0,SP,#+16 \ 00000A6C 400F56E3 CMP R6,#+256 \ 00000A70 FF60A0A3 MOVGE R6,#+255 \ 00000A74 0620A0E1 MOV R2,R6 \ 00000A78 160100EF SWI +278 5756 i+=j; 5757 if (i<255) \ 00000A7C FF0056E3 CMP R6,#+255 \ 00000A80 100000AA BGE ??ProcessPacket_49 5758 { 5759 s[i++]=13; \ 00000A84 10108DE2 ADD R1,SP,#+16 \ 00000A88 0D20A0E3 MOV R2,#+13 \ 00000A8C 0120C6E7 STRB R2,[R6, +R1] \ 00000A90 0810D4E5 LDRB R1,[R4, #+8] \ 00000A94 B620D4E1 LDRH R2,[R4, #+6] \ 00000A98 010086E2 ADD R0,R6,#+1 5760 j=p->pkt.data_len-p->data[0]-1; 5761 if (j>(255-i)) j=255-i; 5762 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000A9C 10308DE2 ADD R3,SP,#+16 \ 00000AA0 012042E0 SUB R2,R2,R1 \ 00000AA4 016042E2 SUB R6,R2,#+1 \ 00000AA8 FF2060E2 RSB R2,R0,#+255 \ 00000AAC 060052E1 CMP R2,R6 \ 00000AB0 0260A0B1 MOVLT R6,R2 \ 00000AB4 0620A0E1 MOV R2,R6 \ 00000AB8 041081E0 ADD R1,R1,R4 \ 00000ABC 091081E2 ADD R1,R1,#+9 \ 00000AC0 030080E0 ADD R0,R0,R3 \ 00000AC4 160100EF SWI +278 5763 } 5764 AddStringToLog(t,0x03,s,x_status_change,0xFFFFFFFF,1); \ ??ProcessPacket_49: \ 00000AC8 0100A0E3 MOV R0,#+1 \ 00000ACC 01002DE9 PUSH {R0} \ 00000AD0 E93F85E2 ADD R3,R5,#+932 \ 00000AD4 0310A0E3 MOV R1,#+3 \ 00000AD8 000060E2 RSB R0,R0,#+0 \ 00000ADC 01002DE9 PUSH {R0} \ 00000AE0 18208DE2 ADD R2,SP,#+24 \ 00000AE4 0800A0E1 MOV R0,R8 \ 00000AE8 ........ BL AddStringToLog 5765 ReqAddMsgToChat(t); \ 00000AEC 0800A0E1 MOV R0,R8 \ 00000AF0 ........ BL ReqAddMsgToChat 5766 if (strlen(p->data)) // Если x-status не пустой \ 00000AF4 080084E2 ADD R0,R4,#+8 \ 00000AF8 1B0000EF SWI +27 \ 00000AFC 000050E3 CMP R0,#+0 \ 00000B00 08D08DE2 ADD SP,SP,#+8 5767 RecountMenu(t, 1); \ 00000B04 0110A013 MOVNE R1,#+1 \ 00000B08 0800A011 MOVNE R0,R8 \ 00000B0C 70FDFF1A BNE ??ProcessPacket_9 5768 else 5769 RecountMenu(NULL, 0); \ 00000B10 0010A0E3 MOV R1,#+0 \ 00000B14 0100A0E1 MOV R0,R1 \ 00000B18 6DFDFFEA B ??ProcessPacket_9 5770 } 5771 break; 5772 case T_LASTPRIVACY: 5773 CurrentPrivateStatus=p->data[0]; \ ??ProcessPacket_50: \ 00000B1C 0800D4E5 LDRB R0,[R4, #+8] \ 00000B20 680387E5 STR R0,[R7, #+872] 5774 break; 5775 } 5776 mfree(p); \ ??ProcessPacket_2: \ 00000B24 0400A0E1 MOV R0,R4 \ 00000B28 150000EF SWI +21 5777 } \ 00000B2C 4EDF8DE2 ADD SP,SP,#+312 \ 00000B30 F08FBDE8 POP {R4-R11,PC} ;; return \ ??ProcessPacket_1: \ 00000B34 3A0A0000 DC8 ":\n",+0 \ 00000B38 ........ DC32 ILL_RECV_FADE \ 00000B3C ........ DC32 ENA_AUTO_XTXT \ 00000B40 ........ DC32 PopupShow \ 00000B44 ........ DC32 PopupOnlineString \ 00000B48 ........ DC32 ON_OFF_TIME \ 00000B4C ........ DC32 sndGlobal \ 00000B50 ........ DC32 sndGlobal2 \ 00000B54 ........ DC32 sndSrvMsg \ 00000B58 ........ DC32 TIME_OR_MSG \ 00000B5C ........ DC32 ILL_KEYS_RECV \ 00000B60 ........ DC32 ILL_RECV_TMR \ 00000B64 ........ DC32 ILL_DISP_RECV \ 00000B68 ........ DC32 PopupMsgString \ 00000B6C ........ DC32 main_msg_timer \ 00000B70 ........ DC32 DEVELOP_IF \ 00000B74 ........ DC32 ILL_SEND_TMR \ 00000B78 ........ DC32 ILL_KEYS_SEND \ 00000B7C ........ DC32 ILL_DISP_SEND 5778 5779 5780 IPC_REQ tmr_gipc; \ In segment CODE, align 4, keep-with-next 5781 void process_active_timer(void) 5782 { \ process_active_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} 5783 if (connect_state>2) \ 00000004 ........ LDR R5,??DataTable205 ;; icons \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C 840395E5 LDR R0,[R5, #+900] \ 00000010 030050E3 CMP R0,#+3 \ 00000014 070000BA BLT ??process_active_timer_0 5784 { 5785 if (++tenseconds_to_ping>12) \ 00000018 C00395E5 LDR R0,[R5, #+960] \ 0000001C 010080E2 ADD R0,R0,#+1 \ 00000020 C00385E5 STR R0,[R5, #+960] \ 00000024 0D0050E3 CMP R0,#+13 \ 00000028 020000BA BLT ??process_active_timer_0 5786 { 5787 tenseconds_to_ping=0; 5788 SUBPROC((void *)do_ping); \ 0000002C 5C009FE5 LDR R0,??process_active_timer_1 ;; do_ping \ 00000030 C04385E5 STR R4,[R5, #+960] \ 00000034 710100EF SWI +369 5789 } 5790 } 5791 tmr_gipc.name_to=ipc_my_name; \ ??process_active_timer_0: \ 00000038 ........ LDR R2,??DataTable204 ;; Canvas \ 0000003C 4E0FA0E3 MOV R0,#+312 \ 00000040 DF1FA0E3 MOV R1,#+892 \ 00000044 023081E0 ADD R3,R1,R2 \ 00000048 053080E7 STR R3,[R0, +R5] 5792 tmr_gipc.name_from=ipc_my_name; \ 0000004C 021081E0 ADD R1,R1,R2 \ 00000050 3C1185E5 STR R1,[R5, #+316] 5793 tmr_gipc.data=NULL; \ 00000054 404185E5 STR R4,[R5, #+320] 5794 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_TENSECONDS,&tmr_gipc); \ 00000058 053080E0 ADD R3,R0,R5 \ 0000005C 0420A0E3 MOV R2,#+4 \ 00000060 B010A0E3 MOV R1,#+176 \ 00000064 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000068 0900A0E3 MOV R0,#+9 \ 0000006C 420C80E3 ORR R0,R0,#0x4200 \ 00000070 000100EF SWI +256 5795 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000074 ........ LDR R2,??DataTable218 ;; process_active_timer \ 00000078 871EA0E3 MOV R1,#+2160 \ 0000007C D400A0E3 MOV R0,#+212 \ 00000080 680D80E3 ORR R0,R0,#0x1A00 \ 00000084 050080E0 ADD R0,R0,R5 \ 00000088 4D0000EF SWI +77 5796 } \ 0000008C 3080BDE8 POP {R4,R5,PC} ;; return \ ??process_active_timer_1: \ 00000090 ........ DC32 do_ping 5797 5798 GBSTMR tm22; \ In segment CODE, align 4, keep-with-next 5799 void OneSecTmr() 5800 { 5801 tmr_gipc.name_to=ipc_my_name; \ OneSecTmr: \ 00000000 ........ LDR R2,??DataTable204 ;; Canvas \ 00000004 10402DE9 PUSH {R4,LR} \ 00000008 ........ LDR R4,??DataTable205 ;; icons \ 0000000C 4E0FA0E3 MOV R0,#+312 \ 00000010 DF1FA0E3 MOV R1,#+892 \ 00000014 023081E0 ADD R3,R1,R2 \ 00000018 043080E7 STR R3,[R0, +R4] 5802 tmr_gipc.name_from=ipc_my_name; \ 0000001C 021081E0 ADD R1,R1,R2 \ 00000020 3C1184E5 STR R1,[R4, #+316] 5803 tmr_gipc.data=NULL; \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 401184E5 STR R1,[R4, #+320] 5804 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_ONESECOND,&tmr_gipc); \ 0000002C 043080E0 ADD R3,R0,R4 \ 00000030 0620A0E3 MOV R2,#+6 \ 00000034 B010A0E3 MOV R1,#+176 \ 00000038 DE1C81E3 ORR R1,R1,#0xDE00 \ 0000003C 0900A0E3 MOV R0,#+9 \ 00000040 420C80E3 ORR R0,R0,#0x4200 \ 00000044 000100EF SWI +256 5805 GBS_StartTimerProc(&tm22,TMR_SECOND,OneSecTmr); \ 00000048 14209FE5 LDR R2,??OneSecTmr_0 ;; OneSecTmr \ 0000004C D810A0E3 MOV R1,#+216 \ 00000050 6800A0E3 MOV R0,#+104 \ 00000054 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000058 040080E0 ADD R0,R0,R4 \ 0000005C 4D0000EF SWI +77 5806 } \ 00000060 1080BDE8 POP {R4,PC} ;; return \ ??OneSecTmr_0: \ 00000064 ........ DC32 OneSecTmr 5807 5808 5809 //=============================================================================================== 5810 /* 5811 extern ADDUIN addonuin[]; 5812 5813 int itemFromDisp;//кол-во на экране 5814 int totalItems;//общее количество итемов 5815 int curpos=0;//позичия курсора 5816 int curpage=1;//текущая страница 5817 5818 const char clrSelect[4]={0xFF,0x00,0x00,0x60}; 5819 const char fntSelect[4]={0xFF,0xFF,0x00,0x60}; 5820 const char bordSelect[4]={0x00,0x00,0x00,0x60}; 5821 5822 const char clrNotSelect[4]={0x00,0x00,0x00,0x60}; 5823 const char bordNotSelect[4]={0x00,0x00,0x00,0x60}; 5824 const char fntNotSelect[4]={0xFF,0xFF,0xFF,0x60}; 5825 5826 char clrBlack[]={0x00,0x00,0x00,0x64}; 5827 char clrWhite[]={0xFF,0xFF,0xFF,0x64}; 5828 //char prozr[]={0x00,0x00,0x00,0x00}; 5829 const int font=FONT_SMALL; 5830 const char _t[]="%t"; 5831 5832 extern int ParseUINS(); 5833 int USE_ADD_UIN=0; 5834 #define CLIST_Y1 (YDISP+GetFontYSIZE(font)+8) 5835 5836 static void DrawList() 5837 { 5838 int font_y = GetFontYSIZE(font)+2;//16+2 5839 int scr_w=ScreenW(); 5840 int scr_h=ScreenH()-1; 5841 // int y2=scr_w-(GetFontYSIZE(font)+2); 5842 #ifdef ELKA 5843 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-GetFontYSIZE(font)-2)-1; 5844 #else 5845 itemFromDisp = sdiv(font_y,ScreenH()-CLIST_Y1-GetFontYSIZE(font)-2); 5846 #endif 5847 5848 LockSched(); 5849 totalItems = ParseUINS(); 5850 // Определяем количество страниц списка контактов 5851 int pageNum = sdiv(itemFromDisp, totalItems); 5852 if( itemFromDisp*pageNum < totalItems) pageNum++; //На всяк,вдруг еще страница нужна 5853 WSHDR* out_ws = AllocWS(256); 5854 int i=0; 5855 int start_y; 5856 int x=1; 5857 while(i<=totalItems) 5858 { 5859 if((i>=(curpage-1)*itemFromDisp) && (i<=itemFromDisp*curpage))//если те итемы который нужно выводить на экран со страници curpage 5860 { 5861 wsprintf(out_ws,"%d. %d",i+1,addonuin[i].uin);//имя закладки 5862 start_y = (CLIST_Y1 + (i - (curpage-1)*itemFromDisp)*font_y); //определяем начальное смещение по у 5863 5864 if(i==curpos) 5865 { 5866 DrawRoundedFrame(x-4,start_y,scr_w-1,start_y+font_y,5,5,0,bordSelect,clrSelect); 5867 DrawString(out_ws,x,start_y+2,scr_w-1,start_y+font_y,font,0,fntSelect,0); 5868 } 5869 else 5870 { 5871 DrawRoundedFrame(x,start_y+1,scr_w-1,start_y+font_y,0,0,0,bordNotSelect,clrNotSelect);//clrBlack 5872 DrawString(out_ws,x,start_y+2,scr_w-1,start_y+font_y,font,0,fntNotSelect,0); 5873 } 5874 } 5875 i++; 5876 if(i>(pageNum*itemFromDisp)) break; 5877 } 5878 UnlockSched(); 5879 FreeWS(out_ws); 5880 } 5881 5882 // Управление курсором 5883 void MoveUp() 5884 { 5885 if(!itemFromDisp)return; 5886 if(curpos<1) 5887 { 5888 curpos=totalItems; 5889 if(itemFromDisp!=totalItems) 5890 { 5891 curpage = sdiv(itemFromDisp,totalItems)+1; 5892 } 5893 else 5894 curpage = 1; 5895 } 5896 else 5897 { 5898 curpos--; 5899 if(curpos<(curpage-1)*itemFromDisp){ curpos++; curpage--; } 5900 } 5901 // REDRAW(); 5902 } 5903 5904 5905 void MoveDown() 5906 { 5907 if(!totalItems)return; 5908 curpos++; 5909 if(curpos>totalItems) { curpos=0; curpage=1; } 5910 if(curpage*itemFromDisp` \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 888100EF SWI +33160 \ 00000014 08008DE5 STR R0,[SP, #+8] \ 00000018 898100EF SWI +33161 \ 0000001C A0179FE5 LDR R1,??DrawLoadScreen_0 ;; pictures_loaded \ 00000020 04008DE5 STR R0,[SP, #+4] \ 00000024 9C079FE5 LDR R0,??DrawLoadScreen_0+0x4 ;; pictures_max \ 00000028 007090E5 LDR R7,[R0, #+0] \ 0000002C 001091E5 LDR R1,[R1, #+0] \ 00000030 94079FE5 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 F480D0E1 LDRSH R8,[R0, #+4] \ 00000044 F690D0E1 LDRSH R9,[R0, #+6] \ 00000048 0100A0E3 MOV R0,#+1 \ 0000004C 2E0100EF SWI +302 \ 00000050 0050A0E1 MOV R5,R0 \ 00000054 0100A0E3 MOV R0,#+1 \ 00000058 2E0100EF SWI +302 \ 0000005C 20002DE9 PUSH {R5} \ 00000060 ........ LDR R5,??DataTable227 ;; icons \ 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 C02095E5 LDR R2,[R5, #+192] \ 00000090 0010A0E3 MOV R1,#+0 \ 00000094 0000A0E3 MOV R0,#+0 \ 00000098 230000EF SWI +35 \ 0000009C 2C279FE5 LDR R2,??DrawLoadScreen_0+0xC ;; IsShowInfo \ 000000A0 940395E5 LDR R0,[R5, #+916] \ 000000A4 981395E5 LDR R1,[R5, #+920] \ 000000A8 002092E5 LDR R2,[R2, #+0] \ 000000AC 0CD08DE2 ADD SP,SP,#+12 \ 000000B0 000052E3 CMP R2,#+0 \ 000000B4 4400000A BEQ ??DrawLoadScreen_1 5949 { 5950 wsprintf(data->ws1,LG_GRSTATESTRING,connect_state,RXstate,RX,TX,sendq_l,hostname,logmsg); \ 000000B8 A420A0E3 MOV R2,#+164 \ 000000BC 642D82E3 ORR R2,R2,#0x1900 \ 000000C0 052082E0 ADD R2,R2,R5 \ 000000C4 04002DE9 PUSH {R2} \ 000000C8 0C20A0E3 MOV R2,#+12 \ 000000CC 702D82E3 ORR R2,R2,#0x1C00 \ 000000D0 052082E0 ADD R2,R2,R5 \ 000000D4 04002DE9 PUSH {R2} \ 000000D8 9C2395E5 LDR R2,[R5, #+924] \ 000000DC 04002DE9 PUSH {R2} \ 000000E0 02002DE9 PUSH {R1} \ 000000E4 01002DE9 PUSH {R0} \ 000000E8 803395E5 LDR R3,[R5, #+896] \ 000000EC 842395E5 LDR R2,[R5, #+900] \ 000000F0 340094E5 LDR R0,[R4, #+52] \ 000000F4 481086E2 ADD R1,R6,#+72 \ 000000F8 240100EF SWI +292 5951 if(pm != pl) \ 000000FC 14009DE5 LDR R0,[SP, #+20] \ 00000100 14D08DE2 ADD SP,SP,#+20 \ 00000104 000057E1 CMP R7,R0 \ 00000108 3400000A BEQ ??DrawLoadScreen_2 5952 { 5953 /* DrawRectangle(0,scr_h-4-2*GetFontYSIZE(FONT_SMALL_BOLD),scr_w-1,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-2,0, 5954 GetPaletteAdrByColorIndex(0), 5955 GetPaletteAdrByColorIndex(0));*/ 5956 // pos_status = ((scr_w-1) * pl) / pm; 5957 /* DrawRectangle(1,scr_h-4-2*GetFontYSIZE(FONT_SMALL_BOLD)+1,pos_status,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-3,0, 5958 GetPaletteAdrByColorIndex(14), 5959 GetPaletteAdrByColorIndex(14)); */ 5960 // wstrcatprintf(data->ws1,"\nLoading images..."); 5961 5962 DrawRectangle(rc.x,rc.y,rc.x2,rc.y2,0,BGPBcolor,BGPBcolor); \ 0000010C C0069FE5 LDR R0,??DrawLoadScreen_0+0x10 ;; BGPBcolor \ 00000110 0930A0E1 MOV R3,R9 \ 00000114 0010A0E1 MOV R1,R0 \ 00000118 02002DE9 PUSH {R1} \ 0000011C 01002DE9 PUSH {R0} \ 00000120 0820A0E1 MOV R2,R8 \ 00000124 0B10A0E1 MOV R1,R11 \ 00000128 0000A0E3 MOV R0,#+0 \ 0000012C 01002DE9 PUSH {R0} \ 00000130 0A00A0E1 MOV R0,R10 \ 00000134 B40100EF SWI +436 5963 pos_status = (((rc.x2-rc.x)-1) * pl) / pm; \ 00000138 0C109DE5 LDR R1,[SP, #+12] \ 0000013C 0A0048E0 SUB R0,R8,R10 \ 00000140 010040E2 SUB R0,R0,#+1 \ 00000144 910000E0 MUL R0,R1,R0 \ 00000148 0710A0E1 MOV R1,R7 \ 0000014C ........ _BLF ??div32_a,??rA??div32_a 5964 DrawRectangle(rc.x+2,rc.y+2,rc.x+pos_status+2,rc.y2-2,0,PBcolor,PBcolor); \ 00000150 80069FE5 LDR R0,??DrawLoadScreen_0+0x14 ;; PBcolor \ 00000154 023049E2 SUB R3,R9,#+2 \ 00000158 0020A0E1 MOV R2,R0 \ 0000015C 04002DE9 PUSH {R2} \ 00000160 01002DE9 PUSH {R0} \ 00000164 0000A0E3 MOV R0,#+0 \ 00000168 01002DE9 PUSH {R0} \ 0000016C 0A0081E0 ADD R0,R1,R10 \ 00000170 022080E2 ADD R2,R0,#+2 \ 00000174 02108BE2 ADD R1,R11,#+2 \ 00000178 02008AE2 ADD R0,R10,#+2 \ 0000017C B40100EF SWI +436 5965 5966 if(total_smiles) \ 00000180 54069FE5 LDR R0,??DrawLoadScreen_0+0x18 ;; total_smiles \ 00000184 001090E5 LDR R1,[R0, #+0] \ 00000188 18D08DE2 ADD SP,SP,#+24 \ 0000018C 000051E3 CMP R1,#+0 \ 00000190 0300000A BEQ ??DrawLoadScreen_3 5967 { 5968 wstrcatprintf(data->ws1,"\nLoaded %d smiles",total_smiles); \ 00000194 002090E5 LDR R2,[R0, #+0] \ 00000198 340094E5 LDR R0,[R4, #+52] \ 0000019C 801086E2 ADD R1,R6,#+128 \ 000001A0 160200EF SWI +534 5969 } 5970 if (xstatuses_load) \ ??DrawLoadScreen_3: \ 000001A4 34069FE5 LDR R0,??DrawLoadScreen_0+0x1C ;; xstatuses_load \ 000001A8 000090E5 LDR R0,[R0, #+0] \ 000001AC 000050E3 CMP R0,#+0 \ 000001B0 0A00000A BEQ ??DrawLoadScreen_2 5971 { 5972 wstrcatprintf(data->ws1,"\nLoaded %d xstatus",total_xstatuses); \ 000001B4 28069FE5 LDR R0,??DrawLoadScreen_0+0x20 ;; total_xstatuses \ 000001B8 941086E2 ADD R1,R6,#+148 \ 000001BC 002090E5 LDR R2,[R0, #+0] \ 000001C0 340094E5 LDR R0,[R4, #+52] \ 000001C4 160200EF SWI +534 \ 000001C8 040000EA B ??DrawLoadScreen_2 5973 } 5974 } 5975 } 5976 else 5977 { 5978 wsprintf(data->ws1,"State: %d, RXstate: %d",connect_state,RXstate); \ ??DrawLoadScreen_1: \ 000001CC 803395E5 LDR R3,[R5, #+896] \ 000001D0 842395E5 LDR R2,[R5, #+900] \ 000001D4 340094E5 LDR R0,[R4, #+52] \ 000001D8 A81086E2 ADD R1,R6,#+168 \ 000001DC 240100EF SWI +292 5979 } 5980 5981 DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD),FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ ??DrawLoadScreen_2: \ 000001E0 1700A0E3 MOV R0,#+23 \ 000001E4 2E0100EF SWI +302 \ 000001E8 0080A0E1 MOV R8,R0 \ 000001EC 0000A0E3 MOV R0,#+0 \ 000001F0 2E0100EF SWI +302 \ 000001F4 0090A0E1 MOV R9,R0 \ 000001F8 0500A0E3 MOV R0,#+5 \ 000001FC C50100EF SWI +453 \ 00000200 08209DE5 LDR R2,[SP, #+8] \ 00000204 042042E2 SUB R2,R2,#+4 \ 00000208 00208DE5 STR R2,[SP, #+0] \ 0000020C 04109DE5 LDR R1,[SP, #+4] \ 00000210 00012DE9 PUSH {R8} \ 00000214 047041E2 SUB R7,R1,#+4 \ 00000218 00022DE9 PUSH {R9} \ 0000021C 0010A0E3 MOV R1,#+0 \ 00000220 02002DE9 PUSH {R1} \ 00000224 000047E0 SUB R0,R7,R0 \ 00000228 0230A0E1 MOV R3,R2 \ 0000022C 1B20A0E3 MOV R2,#+27 \ 00000230 0810A0E3 MOV R1,#+8 \ 00000234 02002DE9 PUSH {R1} \ 00000238 01002DE9 PUSH {R0} \ 0000023C 340094E5 LDR R0,[R4, #+52] \ 00000240 0310A0E3 MOV R1,#+3 5982 /*} 5983 else 5984 { 5985 wsprintf(data->ws1,"%t UIN!","Выберите"); 5986 DrawLine(0,CLIST_Y1-3,ScreenW()-1,CLIST_Y1-3,0,clrWhite); 5987 DrawString(data->ws1,2,YDISP+2,scr_w-1,YDISP+GetFontYSIZE(FONT_SMALL),FONT_SMALL,0,fntSelect,0); 5988 // DrawList(); 5989 } 5990 */ 5991 5992 #ifdef kluchnik 5993 int y=140; \ 00000244 8C80A0E3 MOV R8,#+140 \ 00000248 4C0100EF SWI +332 5994 char A[]="[A] %s"; \ 0000024C 94159FE5 LDR R1,??DrawLoadScreen_0+0x24 ;; `?` \ 00000250 2C008DE2 ADD R0,SP,#+44 \ 00000254 0C0091E8 LDM R1,{R2,R3} \ 00000258 0C0080E8 STM R0,{R2,R3} 5995 char I[]="[I]"; \ 0000025C 001096E5 LDR R1,[R6, #0] \ 00000260 20008DE2 ADD R0,SP,#+32 \ 00000264 001080E5 STR R1,[R0, #+0] 5996 char V[]="[V]"; \ 00000268 7C159FE5 LDR R1,??DrawLoadScreen_0+0x28 ;; `?_1` \ 0000026C 24008DE2 ADD R0,SP,#+36 \ 00000270 002091E5 LDR R2,[R1, #0] 5997 char S[]="[S]"; \ 00000274 74159FE5 LDR R1,??DrawLoadScreen_0+0x2C ;; `?_1` \ 00000278 002080E5 STR R2,[R0, #+0] \ 0000027C 002091E5 LDR R2,[R1, #0] \ 00000280 28008DE2 ADD R0,SP,#+40 \ 00000284 002080E5 STR R2,[R0, #+0] 5998 5999 if(CurrentPrivateStatus==1) \ 00000288 680395E5 LDR R0,[R5, #+872] \ 0000028C 14D08DE2 ADD SP,SP,#+20 \ 00000290 010050E3 CMP R0,#+1 \ 00000294 1D00001A BNE ??DrawLoadScreen_4 6000 { 6001 wsprintf(data->ws2,I); \ 00000298 380094E5 LDR R0,[R4, #+56] \ 0000029C 0C108DE2 ADD R1,SP,#+12 \ 000002A0 240100EF SWI +292 6002 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); \ 000002A4 1700A0E3 MOV R0,#+23 \ 000002A8 2E0100EF SWI +302 \ 000002AC 0090A0E1 MOV R9,R0 \ 000002B0 0200A0E3 MOV R0,#+2 \ 000002B4 2E0100EF SWI +302 \ 000002B8 00A0A0E1 MOV R10,R0 \ 000002BC 0B00A0E3 MOV R0,#+11 \ 000002C0 C50100EF SWI +453 \ 000002C4 0080A0E1 MOV R8,R0 \ 000002C8 888100EF SWI +33160 \ 000002CC 00022DE9 PUSH {R9} \ 000002D0 00042DE9 PUSH {R10} \ 000002D4 0010A0E3 MOV R1,#+0 \ 000002D8 02002DE9 PUSH {R1} \ 000002DC 013040E2 SUB R3,R0,#+1 \ 000002E0 8C20A0E3 MOV R2,#+140 \ 000002E4 0B10A0E3 MOV R1,#+11 \ 000002E8 02002DE9 PUSH {R1} \ 000002EC 8C1088E2 ADD R1,R8,#+140 \ 000002F0 02002DE9 PUSH {R1} \ 000002F4 380094E5 LDR R0,[R4, #+56] \ 000002F8 0210A0E3 MOV R1,#+2 \ 000002FC 4C0100EF SWI +332 6003 y+=GetFontYSIZE(11)+5; \ 00000300 0B00A0E3 MOV R0,#+11 \ 00000304 C50100EF SWI +453 \ 00000308 918080E2 ADD R8,R0,#+145 \ 0000030C 14D08DE2 ADD SP,SP,#+20 6004 } 6005 6006 if(Is_Vibra_Enabled) \ ??DrawLoadScreen_4: \ 00000310 100395E5 LDR R0,[R5, #+784] \ 00000314 000050E3 CMP R0,#+0 \ 00000318 1E00000A BEQ ??DrawLoadScreen_5 6007 { 6008 wsprintf(data->ws2,V); \ 0000031C 380094E5 LDR R0,[R4, #+56] \ 00000320 10108DE2 ADD R1,SP,#+16 \ 00000324 240100EF SWI +292 6009 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); \ 00000328 1700A0E3 MOV R0,#+23 \ 0000032C 2E0100EF SWI +302 \ 00000330 0090A0E1 MOV R9,R0 \ 00000334 0200A0E3 MOV R0,#+2 \ 00000338 2E0100EF SWI +302 \ 0000033C 00A0A0E1 MOV R10,R0 \ 00000340 0B00A0E3 MOV R0,#+11 \ 00000344 C50100EF SWI +453 \ 00000348 00B0A0E1 MOV R11,R0 \ 0000034C 888100EF SWI +33160 \ 00000350 00022DE9 PUSH {R9} \ 00000354 00042DE9 PUSH {R10} \ 00000358 0010A0E3 MOV R1,#+0 \ 0000035C 02002DE9 PUSH {R1} \ 00000360 013040E2 SUB R3,R0,#+1 \ 00000364 0820A0E1 MOV R2,R8 \ 00000368 0B10A0E3 MOV R1,#+11 \ 0000036C 02002DE9 PUSH {R1} \ 00000370 08108BE0 ADD R1,R11,R8 \ 00000374 02002DE9 PUSH {R1} \ 00000378 380094E5 LDR R0,[R4, #+56] \ 0000037C 0210A0E3 MOV R1,#+2 \ 00000380 4C0100EF SWI +332 6010 y+=GetFontYSIZE(11)+5; \ 00000384 0B00A0E3 MOV R0,#+11 \ 00000388 C50100EF SWI +453 \ 0000038C 050080E2 ADD R0,R0,#+5 \ 00000390 088080E0 ADD R8,R0,R8 \ 00000394 14D08DE2 ADD SP,SP,#+20 6011 } 6012 6013 if(Is_Sounds_Enabled) \ ??DrawLoadScreen_5: \ 00000398 5C0395E5 LDR R0,[R5, #+860] \ 0000039C 000050E3 CMP R0,#+0 \ 000003A0 1E00000A BEQ ??DrawLoadScreen_6 6014 { 6015 wsprintf(data->ws2,S); \ 000003A4 380094E5 LDR R0,[R4, #+56] \ 000003A8 14108DE2 ADD R1,SP,#+20 \ 000003AC 240100EF SWI +292 6016 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); \ 000003B0 1700A0E3 MOV R0,#+23 \ 000003B4 2E0100EF SWI +302 \ 000003B8 0090A0E1 MOV R9,R0 \ 000003BC 0200A0E3 MOV R0,#+2 \ 000003C0 2E0100EF SWI +302 \ 000003C4 00A0A0E1 MOV R10,R0 \ 000003C8 0B00A0E3 MOV R0,#+11 \ 000003CC C50100EF SWI +453 \ 000003D0 00B0A0E1 MOV R11,R0 \ 000003D4 888100EF SWI +33160 \ 000003D8 00022DE9 PUSH {R9} \ 000003DC 00042DE9 PUSH {R10} \ 000003E0 0010A0E3 MOV R1,#+0 \ 000003E4 02002DE9 PUSH {R1} \ 000003E8 013040E2 SUB R3,R0,#+1 \ 000003EC 0820A0E1 MOV R2,R8 \ 000003F0 0B10A0E3 MOV R1,#+11 \ 000003F4 02002DE9 PUSH {R1} \ 000003F8 08108BE0 ADD R1,R11,R8 \ 000003FC 02002DE9 PUSH {R1} \ 00000400 380094E5 LDR R0,[R4, #+56] \ 00000404 0210A0E3 MOV R1,#+2 \ 00000408 4C0100EF SWI +332 6017 y+=GetFontYSIZE(11)+5; \ 0000040C 0B00A0E3 MOV R0,#+11 \ 00000410 C50100EF SWI +453 \ 00000414 050080E2 ADD R0,R0,#+5 \ 00000418 088080E0 ADD R8,R0,R8 \ 0000041C 14D08DE2 ADD SP,SP,#+20 6018 } 6019 6020 if(Is_Double_Vibra_On) \ ??DrawLoadScreen_6: \ 00000420 F80295E5 LDR R0,[R5, #+760] \ 00000424 000050E3 CMP R0,#+0 \ 00000428 1A00000A BEQ ??DrawLoadScreen_7 6021 { 6022 wsprintf(data->ws2,"[Vr]"); \ 0000042C 380094E5 LDR R0,[R4, #+56] \ 00000430 C01086E2 ADD R1,R6,#+192 \ 00000434 240100EF SWI +292 6023 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); \ 00000438 1700A0E3 MOV R0,#+23 \ 0000043C 2E0100EF SWI +302 \ 00000440 0090A0E1 MOV R9,R0 \ 00000444 0200A0E3 MOV R0,#+2 \ 00000448 2E0100EF SWI +302 \ 0000044C 00A0A0E1 MOV R10,R0 \ 00000450 0B00A0E3 MOV R0,#+11 \ 00000454 C50100EF SWI +453 \ 00000458 00B0A0E1 MOV R11,R0 \ 0000045C 888100EF SWI +33160 \ 00000460 00022DE9 PUSH {R9} \ 00000464 00042DE9 PUSH {R10} \ 00000468 0010A0E3 MOV R1,#+0 \ 0000046C 02002DE9 PUSH {R1} \ 00000470 013040E2 SUB R3,R0,#+1 \ 00000474 0820A0E1 MOV R2,R8 \ 00000478 0B10A0E3 MOV R1,#+11 \ 0000047C 02002DE9 PUSH {R1} \ 00000480 08108BE0 ADD R1,R11,R8 \ 00000484 02002DE9 PUSH {R1} \ 00000488 380094E5 LDR R0,[R4, #+56] \ 0000048C 0210A0E3 MOV R1,#+2 \ 00000490 4C0100EF SWI +332 \ 00000494 14D08DE2 ADD SP,SP,#+20 6024 } 6025 6026 if(away_m) \ ??DrawLoadScreen_7: \ 00000498 2C0395E5 LDR R0,[R5, #+812] \ 0000049C 000050E3 CMP R0,#+0 \ 000004A0 1F00000A BEQ ??DrawLoadScreen_8 6027 { 6028 wsprintf(data->ws2,A,away_msg_time_dace); \ 000004A4 A400A0E3 MOV R0,#+164 \ 000004A8 600D80E3 ORR R0,R0,#0x1800 \ 000004AC 052080E0 ADD R2,R0,R5 \ 000004B0 380094E5 LDR R0,[R4, #+56] \ 000004B4 18108DE2 ADD R1,SP,#+24 \ 000004B8 240100EF SWI +292 6029 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); \ 000004BC 1700A0E3 MOV R0,#+23 \ 000004C0 2E0100EF SWI +302 \ 000004C4 0090A0E1 MOV R9,R0 \ 000004C8 0200A0E3 MOV R0,#+2 \ 000004CC 2E0100EF SWI +302 \ 000004D0 00A0A0E1 MOV R10,R0 \ 000004D4 0B00A0E3 MOV R0,#+11 \ 000004D8 C50100EF SWI +453 \ 000004DC 00B0A0E1 MOV R11,R0 \ 000004E0 888100EF SWI +33160 \ 000004E4 00022DE9 PUSH {R9} \ 000004E8 00042DE9 PUSH {R10} \ 000004EC 0010A0E3 MOV R1,#+0 \ 000004F0 02002DE9 PUSH {R1} \ 000004F4 013040E2 SUB R3,R0,#+1 \ 000004F8 0820A0E1 MOV R2,R8 \ 000004FC 0B10A0E3 MOV R1,#+11 \ 00000500 02002DE9 PUSH {R1} \ 00000504 08108BE0 ADD R1,R11,R8 \ 00000508 02002DE9 PUSH {R1} \ 0000050C 380094E5 LDR R0,[R4, #+56] \ 00000510 0210A0E3 MOV R1,#+2 \ 00000514 4C0100EF SWI +332 6030 y+=GetFontYSIZE(11)+5; \ 00000518 0B00A0E3 MOV R0,#+11 \ 0000051C C50100EF SWI +453 \ 00000520 14D08DE2 ADD SP,SP,#+20 6031 } 6032 6033 if(connect_state==3) \ ??DrawLoadScreen_8: \ 00000524 841395E5 LDR R1,[R5, #+900] \ 00000528 380094E5 LDR R0,[R4, #+56] \ 0000052C 030051E3 CMP R1,#+3 \ 00000530 0A00001A BNE ??DrawLoadScreen_9 6034 { 6035 wsprintf(data->ws2,"Online: %02d:%02d:%02d not action %d sec", uptimeHour, uptimeMin, uptimeSec,msg_away_timer*5); \ 00000534 281395E5 LDR R1,[R5, #+808] \ 00000538 011181E0 ADD R1,R1,R1, LSL #+2 \ 0000053C 02002DE9 PUSH {R1} \ 00000540 481395E5 LDR R1,[R5, #+840] \ 00000544 02002DE9 PUSH {R1} \ 00000548 443395E5 LDR R3,[R5, #+836] \ 0000054C 402395E5 LDR R2,[R5, #+832] \ 00000550 C81086E2 ADD R1,R6,#+200 \ 00000554 240100EF SWI +292 \ 00000558 08D08DE2 ADD SP,SP,#+8 \ 0000055C 010000EA B ??DrawLoadScreen_10 6036 } 6037 else 6038 wsprintf(data->ws2,"Offline"); \ ??DrawLoadScreen_9: \ 00000560 401086E2 ADD R1,R6,#+64 \ 00000564 240100EF SWI +292 6039 DrawString(data->ws2,1,scr_h-10-3*GetFontYSIZE(FONT_SMALL_BOLD)+1,ScreenW()-1,scr_h-10-GetFontYSIZE(FONT_MEDIUM_BOLD)-3 6040 ,FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ ??DrawLoadScreen_10: \ 00000568 1700A0E3 MOV R0,#+23 \ 0000056C 2E0100EF SWI +302 \ 00000570 0080A0E1 MOV R8,R0 \ 00000574 0000A0E3 MOV R0,#+0 \ 00000578 2E0100EF SWI +302 \ 0000057C 0090A0E1 MOV R9,R0 \ 00000580 0500A0E3 MOV R0,#+5 \ 00000584 C50100EF SWI +453 \ 00000588 00A0A0E1 MOV R10,R0 \ 0000058C 888100EF SWI +33160 \ 00000590 00B0A0E1 MOV R11,R0 \ 00000594 0900A0E3 MOV R0,#+9 \ 00000598 C50100EF SWI +453 \ 0000059C 04109DE5 LDR R1,[SP, #+4] \ 000005A0 00012DE9 PUSH {R8} \ 000005A4 00022DE9 PUSH {R9} \ 000005A8 0020A0E3 MOV R2,#+0 \ 000005AC 04002DE9 PUSH {R2} \ 000005B0 0A1041E2 SUB R1,R1,#+10 \ 000005B4 01304BE2 SUB R3,R11,#+1 \ 000005B8 800080E0 ADD R0,R0,R0, LSL #+1 \ 000005BC 0820A0E3 MOV R2,#+8 \ 000005C0 04002DE9 PUSH {R2} \ 000005C4 000041E0 SUB R0,R1,R0 \ 000005C8 0A2041E0 SUB R2,R1,R10 \ 000005CC 0110A0E3 MOV R1,#+1 \ 000005D0 032042E2 SUB R2,R2,#+3 \ 000005D4 04002DE9 PUSH {R2} \ 000005D8 012080E2 ADD R2,R0,#+1 \ 000005DC 380094E5 LDR R0,[R4, #+56] \ 000005E0 4C0100EF SWI +332 6041 #endif 6042 6043 if(IsInvertSoftKey) \ 000005E4 1C009DE5 LDR R0,[SP, #+28] \ 000005E8 C080A0E1 ASR R8,R0,#+1 \ 000005EC ........ LDR R0,??DataTable211 ;; IsInvertSoftKey \ 000005F0 000090E5 LDR R0,[R0, #+0] \ 000005F4 14D08DE2 ADD SP,SP,#+20 \ 000005F8 000050E3 CMP R0,#+0 \ 000005FC 3800000A BEQ ??DrawLoadScreen_11 6044 { 6045 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 00000600 380094E5 LDR R0,[R4, #+56] \ 00000604 F42086E2 ADD R2,R6,#+244 \ 00000608 241086E2 ADD R1,R6,#+36 \ 0000060C 240100EF SWI +292 6046 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD),scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 00000610 1700A0E3 MOV R0,#+23 \ 00000614 2E0100EF SWI +302 \ 00000618 0090A0E1 MOV R9,R0 \ 0000061C 0000A0E3 MOV R0,#+0 \ 00000620 2E0100EF SWI +302 \ 00000624 00A0A0E1 MOV R10,R0 \ 00000628 0500A0E3 MOV R0,#+5 \ 0000062C C50100EF SWI +453 \ 00000630 00022DE9 PUSH {R9} \ 00000634 00042DE9 PUSH {R10} \ 00000638 0410A0E3 MOV R1,#+4 \ 0000063C 02002DE9 PUSH {R1} \ 00000640 002047E0 SUB R2,R7,R0 \ 00000644 0510A0E3 MOV R1,#+5 \ 00000648 02002DE9 PUSH {R1} \ 0000064C 0710A0E1 MOV R1,R7 \ 00000650 02002DE9 PUSH {R1} \ 00000654 14309DE5 LDR R3,[SP, #+20] \ 00000658 380094E5 LDR R0,[R4, #+56] \ 0000065C 0810A0E1 MOV R1,R8 \ 00000660 4C0100EF SWI +332 6047 6048 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ 00000664 AC0395E5 LDR R0,[R5, #+940] \ 00000668 14D08DE2 ADD SP,SP,#+20 \ 0000066C 000050E3 CMP R0,#+0 \ 00000670 380094E5 LDR R0,[R4, #+56] \ 00000674 FC208612 ADDNE R2,R6,#+252 \ 00000678 27208602 ADDEQ R2,R6,#+39 \ 0000067C 241086E2 ADD R1,R6,#+36 \ 00000680 240100EF SWI +292 6049 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 00000684 1700A0E3 MOV R0,#+23 \ 00000688 2E0100EF SWI +302 \ 0000068C 0050A0E1 MOV R5,R0 \ 00000690 0000A0E3 MOV R0,#+0 \ 00000694 2E0100EF SWI +302 \ 00000698 0060A0E1 MOV R6,R0 \ 0000069C 0500A0E3 MOV R0,#+5 \ 000006A0 C50100EF SWI +453 \ 000006A4 20002DE9 PUSH {R5} \ 000006A8 40002DE9 PUSH {R6} \ 000006AC 0110A0E3 MOV R1,#+1 \ 000006B0 02002DE9 PUSH {R1} \ 000006B4 0830A0E1 MOV R3,R8 \ 000006B8 002047E0 SUB R2,R7,R0 \ 000006BC 0510A0E3 MOV R1,#+5 \ 000006C0 02002DE9 PUSH {R1} \ 000006C4 0710A0E1 MOV R1,R7 \ 000006C8 02002DE9 PUSH {R1} \ 000006CC 380094E5 LDR R0,[R4, #+56] \ 000006D0 0310A0E3 MOV R1,#+3 \ 000006D4 4C0100EF SWI +332 \ 000006D8 14D08DE2 ADD SP,SP,#+20 \ 000006DC 20D08DE2 ADD SP,SP,#+32 \ 000006E0 F08FBDE8 POP {R4-R11,PC} 6050 } 6051 else 6052 { 6053 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ ??DrawLoadScreen_11: \ 000006E4 AC0395E5 LDR R0,[R5, #+940] \ 000006E8 241086E2 ADD R1,R6,#+36 \ 000006EC 000050E3 CMP R0,#+0 \ 000006F0 380094E5 LDR R0,[R4, #+56] \ 000006F4 FC208612 ADDNE R2,R6,#+252 \ 000006F8 27208602 ADDEQ R2,R6,#+39 \ 000006FC 240100EF SWI +292 6054 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD),scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 00000700 1700A0E3 MOV R0,#+23 \ 00000704 2E0100EF SWI +302 \ 00000708 0050A0E1 MOV R5,R0 \ 0000070C 0000A0E3 MOV R0,#+0 \ 00000710 2E0100EF SWI +302 \ 00000714 0090A0E1 MOV R9,R0 \ 00000718 0500A0E3 MOV R0,#+5 \ 0000071C C50100EF SWI +453 \ 00000720 20002DE9 PUSH {R5} \ 00000724 00022DE9 PUSH {R9} \ 00000728 0410A0E3 MOV R1,#+4 \ 0000072C 02002DE9 PUSH {R1} \ 00000730 002047E0 SUB R2,R7,R0 \ 00000734 0510A0E3 MOV R1,#+5 \ 00000738 02002DE9 PUSH {R1} \ 0000073C 0710A0E1 MOV R1,R7 \ 00000740 02002DE9 PUSH {R1} \ 00000744 14309DE5 LDR R3,[SP, #+20] \ 00000748 380094E5 LDR R0,[R4, #+56] \ 0000074C 0810A0E1 MOV R1,R8 \ 00000750 4C0100EF SWI +332 6055 6056 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 00000754 380094E5 LDR R0,[R4, #+56] \ 00000758 F42086E2 ADD R2,R6,#+244 \ 0000075C 241086E2 ADD R1,R6,#+36 \ 00000760 240100EF SWI +292 6057 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 00000764 1700A0E3 MOV R0,#+23 \ 00000768 2E0100EF SWI +302 \ 0000076C 0050A0E1 MOV R5,R0 \ 00000770 0000A0E3 MOV R0,#+0 \ 00000774 2E0100EF SWI +302 \ 00000778 0060A0E1 MOV R6,R0 \ 0000077C 0500A0E3 MOV R0,#+5 \ 00000780 C50100EF SWI +453 \ 00000784 20002DE9 PUSH {R5} \ 00000788 40002DE9 PUSH {R6} \ 0000078C 0110A0E3 MOV R1,#+1 \ 00000790 02002DE9 PUSH {R1} \ 00000794 0830A0E1 MOV R3,R8 \ 00000798 002047E0 SUB R2,R7,R0 \ 0000079C 0510A0E3 MOV R1,#+5 \ 000007A0 02002DE9 PUSH {R1} \ 000007A4 0710A0E1 MOV R1,R7 \ 000007A8 02002DE9 PUSH {R1} \ 000007AC 380094E5 LDR R0,[R4, #+56] \ 000007B0 0310A0E3 MOV R1,#+3 \ 000007B4 4C0100EF SWI +332 \ 000007B8 28D08DE2 ADD SP,SP,#+40 6058 } 6059 /* 6060 wsprintf(data->ws2,"%d %s",addonuin[0].uin,addonuin[0].pass); 6061 DrawString(data->ws2,3,scr_h-4-(GetFontYSIZE(FONT_MEDIUM_BOLD)*3), scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 6062 */ 6063 } \ 000007BC 20D08DE2 ADD SP,SP,#+32 \ 000007C0 F08FBDE8 POP {R4-R11,PC} ;; return \ ??DrawLoadScreen_0: \ 000007C4 ........ DC32 pictures_loaded \ 000007C8 ........ DC32 pictures_max \ 000007CC ........ DC32 PBRECT \ 000007D0 ........ DC32 IsShowInfo \ 000007D4 ........ DC32 BGPBcolor \ 000007D8 ........ DC32 PBcolor \ 000007DC ........ DC32 total_smiles \ 000007E0 ........ DC32 xstatuses_load \ 000007E4 ........ DC32 total_xstatuses \ 000007E8 ........ DC32 `?` \ 000007EC ........ DC32 `?_1` \ 000007F0 ........ DC32 `?_1` 6064 6065 //int ShowLoadScreen=1; \ In segment CODE, align 4, keep-with-next 6066 void method0(MAIN_GUI *data) 6067 { \ method0: \ 00000000 30402DE9 PUSH {R4,R5,LR} 6068 if(IsGuiOnTop(maingui_id)) \ 00000004 ........ LDR R5,??DataTable227 ;; icons \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 040395E5 LDR R0,[R5, #+772] \ 00000010 350100EF SWI +309 \ 00000014 000050E3 CMP R0,#+0 \ 00000018 3080BD08 POPEQ {R4,R5,PC} 6069 { 6070 if(ShowLoadScreen) \ 0000001C EC0395E5 LDR R0,[R5, #+1004] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 0400000A BEQ ??method0_0 6071 { 6072 #ifdef ELKA 6073 DisableIconBar(0); \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 3B0200EF SWI +571 6074 #endif 6075 DrawLoadScreen(data); \ 00000030 0400A0E1 MOV R0,R4 \ 00000034 3040BDE8 POP {R4,R5,LR} ;; Pop \ 00000038 ........ B DrawLoadScreen ;; tailcall 6076 } 6077 else 6078 { 6079 #ifdef ELKA 6080 DisableIconBar(1); \ ??method0_0: \ 0000003C 0100A0E3 MOV R0,#+1 \ 00000040 3B0200EF SWI +571 6081 #endif 6082 SetCanvasFlag(1); \ 00000044 0100A0E3 MOV R0,#+1 \ 00000048 ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 6083 DrawContactList(); \ 0000004C 3040BDE8 POP {R4,R5,LR} ;; Pop \ 00000050 ........ B DrawContactList ;; tailcall 6084 } 6085 } 6086 } 6087 \ In segment CODE, align 4, keep-with-next 6088 void method1(MAIN_GUI *data,void *(*malloc_adr)(int)) 6089 { \ method1: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 6090 /*#ifdef ELKA 6091 if(!ShowLoadScreen) 6092 DisableIconBar(1); 6093 #endif*/ 6094 data->ws1=AllocWS(256); \ 00000008 400FA0E3 MOV R0,#+256 \ 0000000C 250100EF SWI +293 \ 00000010 340084E5 STR R0,[R4, #+52] 6095 data->ws2=AllocWS(256); \ 00000014 400FA0E3 MOV R0,#+256 \ 00000018 250100EF SWI +293 \ 0000001C 380084E5 STR R0,[R4, #+56] 6096 StatusToIMGHDR(); \ 00000020 ........ BL StatusToIMGHDR 6097 data->gui.state=1; \ 00000024 0100A0E3 MOV R0,#+1 \ 00000028 0C00C4E5 STRB R0,[R4, #+12] 6098 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 6099 \ In segment CODE, align 4, keep-with-next 6100 void method2(MAIN_GUI *data,void (*mfree_adr)(void *)) 6101 {/* \ method2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 6102 #ifdef ELKA 6103 DisableIconBar(0); 6104 #endif*/ 6105 FreeStatusToIMGHDR(); \ 00000008 ........ BL FreeStatusToIMGHDR 6106 FreeWS(data->ws1); \ 0000000C 340094E5 LDR R0,[R4, #+52] \ 00000010 290100EF SWI +297 6107 FreeWS(data->ws2); \ 00000014 380094E5 LDR R0,[R4, #+56] \ 00000018 290100EF SWI +297 6108 data->gui.state=0; \ 0000001C 0000A0E3 MOV R0,#+0 \ 00000020 0C00C4E5 STRB R0,[R4, #+12] 6109 } \ 00000024 1080BDE8 POP {R4,PC} ;; return 6110 \ In segment CODE, align 4, keep-with-next 6111 void method3(MAIN_GUI *data,void *(*malloc_adr)(int),void (*mfree_adr)(void *)) 6112 {/* \ method3: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 6113 #ifdef ELKA 6114 if(!ShowLoadScreen) 6115 DisableIconBar(1); 6116 #endif*/ 6117 // SetCanvasFlag(1); 6118 DisableIDLETMR(); \ 00000008 7F0100EF SWI +383 6119 data->gui.state=2; \ 0000000C 0200A0E3 MOV R0,#+2 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 6120 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 6121 \ In segment CODE, align 4, keep-with-next 6122 void method4(MAIN_GUI *data,void (*mfree_adr)(void *)) 6123 { \ method4: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 6124 if (data->gui.state!=2) \ 00000008 0C00D4E5 LDRB R0,[R4, #+12] \ 0000000C 020050E3 CMP R0,#+2 \ 00000010 1080BD18 POPNE {R4,PC} 6125 return;/* 6126 #ifdef ELKA 6127 DisableIconBar(0); 6128 #endif*/ 6129 GBS_DelTimer(&cltmr); \ 00000014 0C009FE5 LDR R0,??method4_0 ;; cltmr \ 00000018 8C0100EF SWI +396 6130 data->gui.state=1; \ 0000001C 0100A0E3 MOV R0,#+1 \ 00000020 0C00C4E5 STRB R0,[R4, #+12] 6131 } \ 00000024 1080BDE8 POP {R4,PC} ;; return \ ??method4_0: \ 00000028 ........ DC32 cltmr 6132 6133 \ In segment CODE, align 4, keep-with-next 6134 int LoadOnKey(GUI_MSG *msg) 6135 { \ LoadOnKey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 0CD04DE2 SUB SP,SP,#+12 6136 if (msg->gbsmsg->msg==KEY_DOWN) \ 00000008 042090E5 LDR R2,[R0, #+4] \ 0000000C 9310A0E3 MOV R1,#+147 \ 00000010 040092E5 LDR R0,[R2, #+4] \ 00000014 401F81E3 ORR R1,R1,#0x100 \ 00000018 010050E1 CMP R0,R1 \ 0000001C 6600001A BNE ??LoadOnKey_1 6137 { 6138 switch(msg->gbsmsg->submess) \ 00000020 ........ LDR R4,??DataTable227 ;; icons \ 00000024 ........ LDR R0,??DataTable211 ;; IsInvertSoftKey \ 00000028 082092E5 LDR R2,[R2, #+8] \ 0000002C EC3394E5 LDR R3,[R4, #+1004] \ 00000030 88C394E5 LDR R12,[R4, #+904] \ 00000034 00E090E5 LDR LR,[R0, #+0] \ 00000038 ........ LDR R5,??DataTable226 ;; create_connect \ 0000003C ........ LDR R1,??DataTable222 ;; end_socket \ 00000040 C400A0E3 MOV R0,#+196 \ 00000044 680D80E3 ORR R0,R0,#0x1A00 \ 00000048 046080E0 ADD R6,R0,R4 \ 0000004C ........ LDR R0,??DataTable214 ;; WriteDefSettings \ 00000050 0080E0E3 MVN R8,#+0 \ 00000054 0370A0E3 MOV R7,#+3 \ 00000058 0190A0E3 MOV R9,#+1 \ 0000005C 00A0A0E3 MOV R10,#+0 \ 00000060 012042E2 SUB R2,R2,#+1 \ 00000064 350052E3 CMP R2,#+53 \ 00000068 5300008A BHI ??LoadOnKey_1 \ 0000006C 01BF8FE2 ADR R11,??LoadOnKey_0 \ 00000070 02B0DBE7 LDRB R11,[R11, R2] \ 00000074 0BF18FE0 ADD PC,PC,R11, LSL #+2 \ ??LoadOnKey_0: \ 00000078 0D50501A DC8 +13,+80,+80,+26 \ 0000007C 50505050 DC8 +80,+80,+80,+80 \ 00000080 50502026 DC8 +80,+80,+32,+38 \ 00000084 50505050 DC8 +80,+80,+80,+80 \ 00000088 50505050 DC8 +80,+80,+80,+80 \ 0000008C 50505050 DC8 +80,+80,+80,+80 \ 00000090 50505050 DC8 +80,+80,+80,+80 \ 00000094 50505050 DC8 +80,+80,+80,+80 \ 00000098 50505050 DC8 +80,+80,+80,+80 \ 0000009C 50505050 DC8 +80,+80,+80,+80 \ 000000A0 50505050 DC8 +80,+80,+80,+80 \ 000000A4 50505029 DC8 +80,+80,+80,+41 \ 000000A8 32373C42 DC8 +50,+55,+60,+66 \ 000000AC 474C0000 DC8 +71,+76,+0,+0 6139 { 6140 // case ENTER_BUTTON: Enter(); break; 6141 case LEFT_SOFT: 6142 if(IsInvertSoftKey) \ ??LoadOnKey_2: \ 000000B0 00005EE3 CMP LR,#+0 \ 000000B4 0C00000A BEQ ??LoadOnKey_3 6143 { 6144 if(ShowLoadScreen && (cltop || sock==-1)) ShowLoadScreen=0;//показывть контакт лист \ ??LoadOnKey_4: \ 000000B8 000053E3 CMP R3,#+0 \ 000000BC 3E00000A BEQ ??LoadOnKey_1 \ 000000C0 AC0394E5 LDR R0,[R4, #+940] \ 000000C4 000050E3 CMP R0,#+0 \ 000000C8 0100001A BNE ??LoadOnKey_5 \ 000000CC 08005CE1 CMP R12,R8 \ 000000D0 3900001A BNE ??LoadOnKey_1 \ ??LoadOnKey_5: \ 000000D4 ECA384E5 STR R10,[R4, #+1004] \ 000000D8 170000EA B ??LoadOnKey_6 6145 //if (cltop || sock==-1) CreateCL();//create_contactlist_menu(); 6146 //unhooked2=1; 6147 } 6148 else// return 1; 6149 { 6150 if(ShowLoadScreen) 6151 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 6152 else 6153 ShowLoadScreen=1; \ ??LoadOnKey_7: \ 000000DC EC9384E5 STR R9,[R4, #+1004] \ 000000E0 150000EA B ??LoadOnKey_6 6154 } 6155 // if (cltop) remake_clmenu(); 6156 break; 6157 case RIGHT_SOFT: 6158 if(IsInvertSoftKey) \ ??LoadOnKey_8: \ 000000E4 00005EE3 CMP LR,#+0 \ 000000E8 F2FFFF0A BEQ ??LoadOnKey_4 \ ??LoadOnKey_3: \ 000000EC 000053E3 CMP R3,#+0 \ 000000F0 F9FFFF0A BEQ ??LoadOnKey_7 \ 000000F4 0100A0E3 MOV R0,#+1 \ 000000F8 FE8FBDE8 POP {R1-R11,PC} 6159 { 6160 if(ShowLoadScreen) 6161 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 6162 else 6163 ShowLoadScreen=1; 6164 } 6165 else 6166 { 6167 if(ShowLoadScreen && (cltop || sock==-1)) ShowLoadScreen=0;//показывть контакт лист 6168 // if (cltop || sock==-1)CreateCL(); //create_contactlist_menu(); 6169 // unhooked2=1; 6170 } 6171 break; 6172 case GREEN_BUTTON: 6173 disautorecconect=0; \ ??LoadOnKey_9: \ 000000FC 58A384E5 STR R10,[R4, #+856] 6174 if ((connect_state==0)&&(sock==-1)) \ 00000100 840394E5 LDR R0,[R4, #+900] \ 00000104 000050E3 CMP R0,#+0 \ 00000108 08005C01 CMPEQ R12,R8 \ 0000010C 2A00001A BNE ??LoadOnKey_1 6175 { 6176 GBS_DelTimer(&reconnect_tmr); \ 00000110 040000EA B ??LoadOnKey_10 6177 DNR_TRIES=3; 6178 SUBPROC((void *)create_connect); 6179 } 6180 break; 6181 case RED_BUTTON: 6182 // extern volatile int disautorecconect; 6183 disautorecconect=1; \ ??LoadOnKey_11: \ 00000114 589384E5 STR R9,[R4, #+856] 6184 // extern void end_socket(void); 6185 SUBPROC((void*)end_socket); \ 00000118 0100A0E1 MOV R0,R1 \ 0000011C 050000EA B ??LoadOnKey_12 6186 break; 6187 case '0': 6188 SUBPROC((void*)end_socket); \ ??LoadOnKey_13: \ 00000120 0100A0E1 MOV R0,R1 \ 00000124 710100EF SWI +369 6189 GBS_DelTimer(&reconnect_tmr); \ ??LoadOnKey_10: \ 00000128 0600A0E1 MOV R0,R6 \ 0000012C 8C0100EF SWI +396 6190 DNR_TRIES=3; \ 00000130 F47384E5 STR R7,[R4, #+1012] 6191 SUBPROC((void *)create_connect); \ 00000134 0500A0E1 MOV R0,R5 \ ??LoadOnKey_12: \ 00000138 710100EF SWI +369 \ ??LoadOnKey_6: \ 0000013C 0000A0E3 MOV R0,#+0 \ 00000140 FE8FBDE8 POP {R1-R11,PC} 6192 break; 6193 6194 //------------------------------------------------------// 6195 6196 case '1': 6197 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??LoadOnKey_14: \ 00000144 5C1394E5 LDR R1,[R4, #+860] \ 00000148 000051E3 CMP R1,#+0 \ 0000014C 0090A013 MOVNE R9,#+0 \ 00000150 5C9384E5 STR R9,[R4, #+860] 6198 SUBPROC((void*)WriteDefSettings); \ 00000154 F7FFFFEA B ??LoadOnKey_12 6199 break; 6200 case '2': 6201 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??LoadOnKey_15: \ 00000158 101394E5 LDR R1,[R4, #+784] \ 0000015C 000051E3 CMP R1,#+0 \ 00000160 0090A013 MOVNE R9,#+0 \ 00000164 109384E5 STR R9,[R4, #+784] 6202 SUBPROC((void*)WriteDefSettings); \ 00000168 F2FFFFEA B ??LoadOnKey_12 6203 break; 6204 case '3': 6205 if(CurrentPrivateStatus!=1) \ ??LoadOnKey_16: \ 0000016C 680394E5 LDR R0,[R4, #+872] \ 00000170 010050E3 CMP R0,#+1 \ 00000174 0300A003 MOVEQ R0,#+3 6206 SetPrivateStatus(1);//Инвиз \ 00000178 0100A013 MOVNE R0,#+1 \ 0000017C ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA \ 00000180 EDFFFFEA B ??LoadOnKey_6 6207 else 6208 SetPrivateStatus(3); 6209 break; 6210 case '4': 6211 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??LoadOnKey_17: \ 00000184 F81294E5 LDR R1,[R4, #+760] \ 00000188 000051E3 CMP R1,#+0 \ 0000018C 0090A013 MOVNE R9,#+0 \ 00000190 F89284E5 STR R9,[R4, #+760] 6212 SUBPROC((void*)WriteDefSettings); \ 00000194 E7FFFFEA B ??LoadOnKey_12 6213 break; 6214 case '5': LINE_MODE=!LINE_MODE; break; \ ??LoadOnKey_18: \ 00000198 E40394E5 LDR R0,[R4, #+996] \ 0000019C 000050E3 CMP R0,#+0 \ 000001A0 0090A013 MOVNE R9,#+0 \ 000001A4 E49384E5 STR R9,[R4, #+996] \ 000001A8 E3FFFFEA B ??LoadOnKey_6 6215 case '6': VIEW_MODE=!VIEW_MODE; break; \ ??LoadOnKey_19: \ 000001AC E80394E5 LDR R0,[R4, #+1000] \ 000001B0 000050E3 CMP R0,#+0 \ 000001B4 0090A013 MOVNE R9,#+0 \ 000001B8 E89384E5 STR R9,[R4, #+1000] 6216 } 6217 } 6218 return 0; \ ??LoadOnKey_1: \ 000001BC 0000A0E3 MOV R0,#+0 \ 000001C0 FE8FBDE8 POP {R1-R11,PC} ;; return 6219 } 6220 6221 \ In segment CODE, align 4, keep-with-next 6222 int method5(MAIN_GUI *data,GUI_MSG *msg) 6223 { \ method5: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0140A0E1 MOV R4,R1 6224 DirectRedrawGUI(); \ 00000008 3F0100EF SWI +319 6225 if(ShowLoadScreen) \ 0000000C 20009FE5 LDR R0,??method5_0 ;; icons + 1004 \ 00000010 000090E5 LDR R0,[R0, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0400A0E1 MOV R0,R4 \ 0000001C 0100000A BEQ ??method5_1 6226 return LoadOnKey(msg); \ 00000020 1040BDE8 POP {R4,LR} ;; Pop \ 00000024 ........ B LoadOnKey ;; tailcall 6227 else 6228 ClOnKey(msg); \ ??method5_1: \ 00000028 ........ BL ClOnKey 6229 /* 6230 if(msg->gbsmsg->msg==LONG_PRESS || msg->gbsmsg->msg==KEY_DOWN) 6231 { 6232 switch(msg->gbsmsg->submess) 6233 { 6234 case UP_BUTTON: MoveUp(); break; 6235 case DOWN_BUTTON: MoveDown(); break; 6236 } 6237 }*/ 6238 6239 return(0); \ 0000002C 0000A0E3 MOV R0,#+0 \ 00000030 1080BDE8 POP {R4,PC} ;; return \ ??method5_0: \ 00000034 ........ DC32 icons + 1004 6240 } 6241 \ In segment CODE, align 4, keep-with-next 6242 int method8(void){return(0);} \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return \ In segment CODE, align 4, keep-with-next 6243 int method9(void){return(0);} \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 6244 6245 6246 6247 const void * const gui_methods[11]={ 6248 (void *)method0, //Redraw 6249 (void *)method1, //Create 6250 (void *)method2, //Close 6251 (void *)method3, //Focus 6252 (void *)method4, //Unfocus 6253 (void *)method5, //OnKey 6254 0, 6255 (void *)kill_data, //method7, //Destroy 6256 (void *)method8, 6257 (void *)method9, 6258 0 6259 }; 6260 6261 6262 6263 int checkGui(int id); 6264 #define idlegui_id(icsm) (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 6265 \ In segment CODE, align 4, keep-with-next 6266 int my_keyhook(int key, int m) 6267 { \ my_keyhook: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0050A0E1 MOV R5,R0 6268 if(m==KEY_DOWN) \ 00000008 9300A0E3 MOV R0,#+147 \ 0000000C 400F80E3 ORR R0,R0,#0x100 \ 00000010 000051E1 CMP R1,R0 \ 00000014 2200001A BNE ??my_keyhook_0 6269 { 6270 #ifdef ELKA 6271 if ((key==CAMERA_BUTTON)&&(!IsUnlocked())) \ 00000018 ........ LDR R4,??DataTable227 ;; icons \ 0000001C 140055E3 CMP R5,#+20 \ 00000020 0F00001A BNE ??my_keyhook_1 \ 00000024 430000EF SWI +67 \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 0C00001A BNE ??my_keyhook_1 6272 { 6273 GBS_StopTimer(&away_tmr); \ 00000030 C400A0E3 MOV R0,#+196 \ 00000034 600D80E3 ORR R0,R0,#0x1800 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 440100EF SWI +324 6274 msg_away_timer=AUTO_ENGADE*12; \ 00000040 ........ LDR R0,??DataTable216 ;; AUTO_ENGADE \ 00000044 0C10A0E3 MOV R1,#+12 \ 00000048 000090E5 LDR R0,[R0, #+0] \ 0000004C 910000E0 MUL R0,R1,R0 \ 00000050 280384E5 STR R0,[R4, #+808] 6275 away_timer(); \ 00000054 ........ BL away_timer 6276 main_d=1; \ 00000058 0100A0E3 MOV R0,#+1 \ 0000005C C80284E5 STR R0,[R4, #+712] \ 00000060 0D0000EA B ??my_keyhook_2 6277 } 6278 else 6279 { 6280 #endif 6281 if(Reset_timer) \ ??my_keyhook_1: \ 00000064 84009FE5 LDR R0,??my_keyhook_3 ;; Reset_timer \ 00000068 000090E5 LDR R0,[R0, #+0] \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 3080BD08 POPEQ {R4,R5,PC} 6282 { 6283 msg_away_timer=0; 6284 away_m=0; 6285 if(change_back_status) \ 00000074 340394E5 LDR R0,[R4, #+820] \ 00000078 0050A0E3 MOV R5,#+0 \ 0000007C 285384E5 STR R5,[R4, #+808] \ 00000080 2C5384E5 STR R5,[R4, #+812] \ 00000084 000050E3 CMP R0,#+0 \ 00000088 3080BD08 POPEQ {R4,R5,PC} 6286 { 6287 CurrentStatus=status_rem; \ 0000008C 300394E5 LDR R0,[R4, #+816] \ 00000090 180384E5 STR R0,[R4, #+792] 6288 set_my_status(); \ 00000094 ........ BL set_my_status 6289 change_back_status=0; \ 00000098 345384E5 STR R5,[R4, #+820] \ ??my_keyhook_2: \ 0000009C 0000A0E3 MOV R0,#+0 \ 000000A0 3080BDE8 POP {R4,R5,PC} 6290 } 6291 } 6292 #ifdef ELKA 6293 } 6294 #endif 6295 } 6296 6297 void *icsm; 6298 if(m==LONG_PRESS) \ ??my_keyhook_0: \ 000000A4 020080E2 ADD R0,R0,#+2 \ 000000A8 000051E1 CMP R1,R0 \ 000000AC 0D00001A BNE ??my_keyhook_4 6299 { 6300 icsm=FindCSMbyID(CSM_root()->idle_id); \ 000000B0 068100EF SWI +33030 \ 000000B4 040090E5 LDR R0,[R0, #+4] \ 000000B8 080100EF SWI +264 \ 000000BC 0040A0E1 MOV R4,R0 6301 if(key==VOL_DOWN_BUTTON && IsUnlocked() && !(checkGui(idlegui_id(icsm))) ) \ 000000C0 0E0055E3 CMP R5,#+14 \ 000000C4 0700001A BNE ??my_keyhook_4 \ 000000C8 430000EF SWI +67 \ 000000CC 000050E3 CMP R0,#+0 \ 000000D0 3080BD08 POPEQ {R4,R5,PC} \ 000000D4 2C0094E5 LDR R0,[R4, #+44] \ 000000D8 ........ BL checkGui \ 000000DC 000050E3 CMP R0,#+0 \ 000000E0 0000001A BNE ??my_keyhook_4 6302 { 6303 to_develop(); \ 000000E4 ........ BL to_develop 6304 } 6305 } 6306 return 0; \ ??my_keyhook_4: \ 000000E8 0000A0E3 MOV R0,#+0 \ 000000EC 3080BDE8 POP {R4,R5,PC} ;; return \ ??my_keyhook_3: \ 000000F0 ........ DC32 Reset_timer 6307 } \ In segment DATA_C, align 4, align-sorted 6308 /* 6309 int mode_enter; 6310 int mode; 6311 6312 int my_keyhook(int submsg, int msg) 6313 { 6314 if(Reset_timer) 6315 { 6316 msg_away_timer=0; 6317 away_m=0; 6318 if(change_back_status) 6319 { 6320 CurrentStatus=status_rem; 6321 set_my_status(); 6322 change_back_status=0; 6323 } 6324 } 6325 if (submsg!=VOL_DOWN_BUTTON) return(0); 6326 switch(msg) 6327 { 6328 case KEY_DOWN: 6329 if (mode_enter==2) 6330 { 6331 GBS_SendMessage(MMI_CEPID,KEY_UP,VOL_DOWN_BUTTON); 6332 return (0); 6333 } 6334 mode_enter=0; 6335 return (2); 6336 case KEY_UP: 6337 if (mode==1)mode=0; 6338 if (mode_enter==0) 6339 { 6340 mode_enter=2; 6341 GBS_SendMessage(MMI_CEPID,KEY_DOWN,VOL_DOWN_BUTTON); 6342 return (2); 6343 } 6344 if (mode_enter==2) 6345 { 6346 mode_enter=0; 6347 return (0); 6348 } 6349 mode_enter=0; 6350 return (2); 6351 case LONG_PRESS: 6352 mode_enter=1; 6353 if(mode==0) 6354 { 6355 void *icsm; 6356 icsm=FindCSMbyID(CSM_root()->idle_id); 6357 if(!(checkGui(idlegui_id(icsm))) && IsUnlocked()) 6358 { 6359 to_develop(); 6360 } 6361 } 6362 mode=1; 6363 break; 6364 } 6365 return(2); 6366 }*/ 6367 const RECT Canvas={0,0,0,0}; \ Canvas: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ percent_s: \ 00000008 257300 DC8 "%s" \ percent_d: \ 0000000B 256400 DC8 "%d" \ 0000000E 0000 DC8 0, 0 \ 00000010 536F756E6420 DC8 "Sound 0n" \ 306E00 \ 00000019 000000 DC8 0, 0, 0 \ 0000001C 536F756E6420 DC8 "Sound Off" \ 4F666600 \ 00000026 0000 DC8 0, 0 \ 00000028 566962726120 DC8 "Vibra On" \ 4F6E00 \ 00000031 000000 DC8 0, 0, 0 \ 00000034 566962726120 DC8 "Vibra Off" \ 4F666600 \ 0000003E 0000 DC8 0, 0 \ 00000040 C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\352\353\376\367\345\355" \ E2EAEBFEF7E5 \ ED00 \ 0000004E 0000 DC8 0, 0 \ 00000050 C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\373\352\353\376\367\345\355" \ E2FBEAEBFEF7 \ E5ED00 \ 0000005F 00 DC8 0 \ 00000060 566962726120 DC8 "Vibra rem On" \ 72656D204F6E \ 00 \ 0000006D 000000 DC8 0, 0, 0 \ 00000070 566962726120 DC8 "Vibra rem Off" \ 72656D204F66 \ 6600 \ 0000007E 0000 DC8 0, 0 \ 00000080 416C6C206368 DC8 "All chat clear!" \ 617420636C65 \ 61722100 \ 00000090 44656661756C DC8 "Default show x-status" \ 742073686F77 \ 20782D737461 \ 74757300 \ 000000A6 0000 DC8 0, 0 \ 000000A8 44656661756C DC8 "Default show time" \ 742073686F77 \ 2074696D6500 \ 000000BA 0000 DC8 0, 0 \ 000000BC 2825642F2564 DC8 "(%d/%d)" \ 2900 \ 000000C4 257325632563 DC8 "%s%c%c(%d/%d)" \ 2825642F2564 \ 2900 \ 000000D2 0000 DC8 0, 0 \ 000000D4 57616974696E DC8 "Waiting for GPRS up..." \ 6720666F7220 \ 475052532075 \ 702E2E2E00 \ 000000EB 00 DC8 0 \ 000000EC 436F6E6E6563 DC8 "Connect to %s:%d" \ 7420746F2025 \ 733A256400 \ 000000FD 000000 DC8 0, 0, 0 \ 00000100 0A436F6E6E65 DC8 "\012Connect by IP!" \ 637420627920 \ 49502100 \ 00000110 53656E642044 DC8 "Send DNR..." \ 4E522E2E2E00 \ 0000011C 444E52204552 DC8 "DNR ERROR %d!" \ 524F52202564 \ 2100 \ 0000012A 0000 DC8 0, 0 \ 0000012C 444E52204F6B DC8 "DNR Ok, connecting..." \ 2C20636F6E6E \ 656374696E67 \ 2E2E2E00 \ 00000142 0000 DC8 0, 0 \ 00000144 CDE5E2EEE7EC DC8 "\315\345\342\356\347\354\356\346\355\356 \357\356\344\352\353\376\367\350\362\374\361\377!" \ EEE6EDEE20EF \ EEE4EAEBFEF7 \ E8F2FCF1FF21 \ 00 \ 0000015D 000000 DC8 0, 0, 0 \ 00000160 CDE5E2EEE7EC DC8 "\315\345\342\356\347\354\356\346\355\356 \361\356\347\344\340\362\374 \361\356\352\345\362, \357\345\360\345\347\340\357\363\361\352 GPRS!" \ EEE6EDEE20F1 \ EEE7E4E0F2FC \ 20F1EEEAE5F2 \ 2C20EFE5F0E5 \ E7E0EFF3F1EA \ 204750525321 \ 00 \ 0000018B 00 DC8 0 \ 0000018C D1E5F0E2E5F0 DC8 "\321\345\360\342\345\360 \355\345 \355\340\351\344\345\355!" \ 20EDE520EDE0 \ E9E4E5ED2100 \ 0000019E 0000 DC8 0, 0 \ 000001A0 426164207061 DC8 "Bad packet" \ 636B657400 \ 000001AB 00 DC8 0 \ 000001AC 534325643A20 DC8 "SC%d: %04X" \ 2530345800 \ 000001B7 00 DC8 0 \ 000001B8 4552523A2025 DC8 "ERR: %s" \ 7300 \ 000001C0 75696E256400 DC8 "uin%d" \ 000001C6 0000 DC8 0, 0 \ 000001C8 4D534725643A DC8 "MSG%d: %s" \ 20257300 \ 000001D2 0000 DC8 0, 0 \ 000001D4 257325642E77 DC8 "%s%d.wav" \ 617600 \ 000001DD 000000 DC8 0, 0, 0 \ 000001E0 50696E672025 DC8 "Ping %d-%d seconds!" \ 642D25642073 \ 65636F6E6473 \ 2100 \ 000001F4 50696E673A20 DC8 "Ping: %d sec" \ 256420736563 \ 00 \ 00000201 000000 DC8 0, 0, 0 \ 00000204 2025733A2025 DC8 " %s: %02d:%02d:%02d" \ 3032643A2530 \ 32643A253032 \ 6400 \ 00000218 537461747573 DC8 "Status change" \ 206368616E67 \ 6500 \ 00000226 0000 DC8 0, 0 \ 00000228 5B25733A2025 DC8 "[%s: %s]\012" \ 735D0A00 \ 00000232 0000 DC8 0, 0 \ 00000234 4675636B2079 DC8 "Fuck you hacker! my password sux ur ass" \ 6F7520686163 \ 6B657221206D \ 792070617373 \ 776F72642073 \ 757820757220 \ 61737300 \ 0000025C 556E72656164 DC8 "Unread: %d" \ 3A20256400 \ 00000267 00 DC8 0 \ 00000268 4E6174494351 DC8 "NatICQ config updated!" \ 20636F6E6669 \ 672075706461 \ 7465642100 \ 0000027F 00 DC8 0 \ 00000280 257332323430 DC8 "%s2240.png" \ 2E706E6700 \ 0000028B 00 DC8 0 \ 0000028C 475052532075 DC8 "GPRS up, wait 10 sec..." \ 702C20776169 \ 742031302073 \ 65632E2E2E00 \ 000002A4 54727920746F DC8 "Try to login..." \ 206C6F67696E \ 2E2E2E00 \ 000002B4 CDE520E220F1 DC8 "\315\345 \342 \361\357\350\361\352\345" \ EFE8F1EAE500 \ 000002C0 4C6F6F706261 DC8 "Loopback" \ 636B00 \ 000002C9 000000 DC8 0, 0, 0 \ 000002CC CDE5E2E5F0ED DC8 "\315\345\342\345\360\355\356\345 \361\356\356\341\371\345\355\350\345 ENIP_SOCK_CONNECTED!" \ EEE520F1EEEE \ E1F9E5EDE8E5 \ 20454E49505F \ 534F434B5F43 \ 4F4E4E454354 \ 45442100 \ 000002F4 CDE5E2E5F0ED DC8 "\315\345\342\345\360\355\356\345 \361\356\356\341\371\345\355\350\345 ENIP_DATA_READ" \ EEE520F1EEEE \ E1F9E5EDE8E5 \ 20454E49505F \ 444154415F52 \ 45414400 \ 00000316 0000 DC8 0, 0 \ 00000318 446973636F6E DC8 "Disconnected, %d bytes not sended!" \ 6E6563746564 \ 2C2025642062 \ 79746573206E \ 6F742073656E \ 6465642100 \ 0000033B 00 DC8 0 \ 0000033C 25730A526563 DC8 "%s\012Reconect after %d second..." \ 6F6E65637420 \ 616674657220 \ 256420736563 \ 6F6E642E2E2E \ 00 \ 0000035B 00 DC8 0 \ 0000035C 50696E67204E DC8 "Ping None" \ 6F6E6500 \ 00000366 0000 DC8 0, 0 \ 00000368 C2E2E5E4E8F2 DC8 "\302\342\345\344\350\362\345 UIN/\357\340\360\356\353\374!" \ E52055494E2F \ EFE0F0EEEBFC \ 2100 \ ipc_my_name: \ 0000037C 4E6174494351 DC8 "NatICQ" \ 00 \ 00000383 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000393 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000 \ ipc_xtask_name: \ 0000039C 585461736B00 DC8 "XTask" \ 000003A2 0000 DC8 0, 0 \ x_status_change: \ 000003A4 582D53746174 DC8 "X-Status change" \ 757320636861 \ 6E676500 \ clrSelect: \ 000003B4 FF000020 DC8 255, 0, 0, 32 \ bordSelect: \ 000003B8 00000060 DC8 0, 0, 0, 96 \ gui_methods: \ 000003BC ............ DC32 method0, method1, method2, method3, method4, method5, 0H \ ............ \ ............ \ ............ \ 00000000 \ 000003D8 ............ DC32 kill_data, method8, method9, 0H \ ............ \ 00000000 \ In segment DATA_C, align 4, align-sorted \ ipc_test_name: \ 00000000 7465737400 DC8 "test" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_OFFLINE: \ 00000000 4F66666C696E DC8 "Offline" \ 6500 \ In segment DATA_C, align 4, align-sorted \ S_INVISIBLE: \ 00000000 496E76697369 DC8 "Invisible" \ 626C6500 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_AWAY: \ 00000000 4177617900 DC8 "Away" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_NA: \ 00000000 4E2F4100 DC8 "N/A" \ In segment DATA_C, align 4, align-sorted \ S_OCCUPIED: \ 00000000 4F6363757069 DC8 "Occupied" \ 656400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_DND: \ 00000000 444E4400 DC8 "DND" \ In segment DATA_C, align 4, align-sorted \ S_ONLINE: \ 00000000 4F6E6C696E65 DC8 "Online" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ S_FFC: \ 00000000 46464300 DC8 "FFC" \ In segment DATA_C, align 4, align-sorted \ icons_names: \ 00000000 ............ DC32 `?`, `?` \ .... \ 00000008 ............ DC32 `?`, `?` \ .... \ 00000010 ............ DC32 `?`, `?` \ .... \ 00000018 ............ DC32 `?`, `?` \ .... \ 00000020 ............ DC32 `?`, `?` \ .... \ 00000028 ............ DC32 `?`, `?` \ .... \ 00000030 ............ DC32 `?`, `?` \ .... \ 00000038 ............ DC32 `?`, `?` \ .... \ 00000040 ............ DC32 `?`, `?` \ .... \ 00000048 ............ DC32 `?`, `?` \ .... \ 00000050 ............ DC32 `?`, `?` \ .... \ 00000058 ............ DC32 `?`, `?` \ .... \ 00000060 ............ DC32 `?`, `?` \ .... \ 00000068 ............ DC32 `?`, `?` \ .... \ 00000070 343A5C5A4269 DC8 "4:\\ZBin\\NatICQ\\img2" \ 6E5C4E617449 \ 43515C696D67 \ 3200 \ In segment DATA_C, align 4, align-sorted \ input_awaymsg_desc: \ 00000000 01000000.... DC32 1, input_awaymsg_onkey, input_awaymsg_ghook, input_awaymsg_locret \ ............ \ ........ \ 00000010 00000000.... DC32 0, input_awaymsg_skt \ .... \ 00000018 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000020 080000006400 DC32 8, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ 00000038 D1EEEEE1F9E5 DC8 "\321\356\356\341\371\345\355\350\345:\012" \ EDE8E53A0A00 \ input_awaymsg_hdr: \ 00000044 000000008300 DC16 0, 0, 131, 21 \ 1500 \ 0000004C 00000000.... DC32 0H, `?`: \ 00000000 5B495D00 DC8 "[I]" \ 00000004 ........ DC32 `?` \ 00000008 ........ DC32 `?` \ 0000000C ........ DC32 `?` \ percent_t: \ 00000024 257400 DC8 "%t" \ empty_str: \ 00000027 00 DC8 "" \ 00000028 4F6E6C696E65 DC8 "Online: %02d:%02d:%02d" \ 3A2025303264 \ 3A253032643A \ 2530326400 \ 0000003F 00 DC8 0 \ 00000040 4F66666C696E DC8 "Offline" \ 6500 \ 00000048 53746174653A DC8 53H, 74H, 61H, 74H, 65H, 3AH, 20H, 25H \ 2025 \ 00000050 642C20525873 DC8 64H, 2CH, 20H, 52H, 58H, 73H, 74H, 61H \ 7461 \ 00000058 74653A202564 DC8 74H, 65H, 3AH, 20H, 25H, 64H, 0AH, 52H \ 0A52 \ 00000060 783A2564622C DC8 78H, 3AH, 25H, 64H, 62H, 2CH, 54H, 78H \ 5478 \ 00000068 3A2564620A51 DC8 3AH, 25H, 64H, 62H, 0AH, 51H, 75H, 65H \ 7565 \ 00000070 75653A202564 DC8 75H, 65H, 3AH, 20H, 25H, 64H, 62H, 0AH \ 620A \ 00000078 25730A257300 DC8 25H, 73H, 0AH, 25H, 73H, 0 \ 0000007E 0000 DC8 0, 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 53746174653A DC8 "State: %d, RXstate: %d" \ 2025642C2052 \ 587374617465 \ 3A20256400 \ 000000BF 00 DC8 0 \ 000000C0 5B56725D00 DC8 "[Vr]" \ 000000C5 000000 DC8 0, 0, 0 \ 000000C8 4F6E6C696E65 DC8 "Online: %02d:%02d:%02d not action %d sec" \ 3A2025303264 \ 3A253032643A \ 253032642020 \ 206E6F742061 \ 6374696F6E20 \ 256420736563 \ 00 \ 000000F3 00 DC8 0 \ 000000F4 4578697400 DC8 "Exit" \ 000000F9 000000 DC8 0, 0, 0 \ 000000FC 434C69737400 DC8 "CList" \ 00000102 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 \ `?_1`: \ 00000000 FF000015 DC8 255, 0, 0, 21 \ 00000004 3C4300 DC8 "` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ menu_skt: \ 00000000 ........0000 DC32 menu_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ _skt: \ 00000000 ........0000 DC32 _sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ fntSelect: \ 00000000 FFFF0060 DC8 255, 255, 0, 96 \ In segment DATA_C, align 4, align-sorted \ clrNotSelect: \ 00000000 00000000 DC8 0, 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ bordNotSelect: \ 00000000 00000000 DC8 0, 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ fntNotSelect: \ 00000000 FFFFFF60 DC8 255, 255, 255, 96 \ In segment DATA_C, align 4, align-sorted \ clfont: \ 00000000 6C000000 DC32 108 \ In segment DATA_C, align 1, align-sorted \ _t: \ 00000000 257400 DC8 "%t" \ In segment DATA_C, align 1, align-sorted \ _d: \ 00000000 256400 DC8 "%d" \ In segment DATA_C, align 4, align-sorted \ CmdSoftkeys: \ 00000000 000000000100 DC32 0, 1, 2 \ 000002000000 \ In segment DATA_C, align 4, align-sorted \ cmd_sk: \ 00000000 04000000 DC16 4, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ cmd_Back_skt: \ 00000000 ........0000 DC32 cmd_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 53656C656374 DC8 "Select command" \ 20636F6D6D61 \ 6E6400 \ 0000000F 00 DC8 0 \ 00000010 46494C45204E DC8 "FILE NOT FOUND!" \ 4F5420464F55 \ 4E442100 \ 00000020 08000000.... DC32 8, CmdMenuKeyHook, CmdMenuGHook, 0H, CmdSoftkeys, cmd_Back_skt, 16 \ ............ \ 00000000.... \ ............ \ 10000000 \ 0000003C ........0000 DC32 CmdMenuItemHandler, 0H, 0H, 0 \ 000000000000 \ 00000000 6368 \ In segment CODE, align 4, keep-with-next 6369 void maincsm_oncreate(CSM_RAM *data) 6370 { \ maincsm_oncreate: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0050A0E1 MOV R5,R0 6371 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000008 4000A0E3 MOV R0,#+64 6372 MAIN_CSM*csm=(MAIN_CSM*)data; 6373 zeromem(main_gui,sizeof(MAIN_GUI)); 6374 patch_rect((RECT*)&Canvas,0,0,ScreenW()-1,ScreenH()-1); \ 0000000C 0070A0E3 MOV R7,#+0 \ 00000010 140000EF SWI +20 \ 00000014 0060A0E1 MOV R6,R0 \ 00000018 4010A0E3 MOV R1,#+64 \ 0000001C 1D0100EF SWI +285 \ 00000020 898100EF SWI +33161 \ 00000024 0040A0E1 MOV R4,R0 \ 00000028 888100EF SWI +33160 \ 0000002C 011044E2 SUB R1,R4,#+1 \ 00000030 D4409FE5 LDR R4,??maincsm_oncreate_0 ;; Canvas \ 00000034 010040E2 SUB R0,R0,#+1 \ 00000038 007084E5 STR R7,[R4, #+0] \ 0000003C B400C4E1 STRH R0,[R4, #+4] \ 00000040 B610C4E1 STRH R1,[R4, #+6] 6375 main_gui->gui.canvas=(void *)(&Canvas); \ 00000044 004086E5 STR R4,[R6, #+0] 6376 // main_gui->gui.flag30=2; 6377 main_gui->gui.methods=(void *)gui_methods; \ 00000048 EF0F84E2 ADD R0,R4,#+956 \ 0000004C 040086E5 STR R0,[R6, #+4] 6378 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 00000050 158000EF SWI +32789 \ 00000054 200086E5 STR R0,[R6, #+32] 6379 csm->csm.state=0; \ 00000058 107085E5 STR R7,[R5, #+16] 6380 csm->csm.unk1=0; \ 0000005C 147085E5 STR R7,[R5, #+20] 6381 maingui_id=csm->gui_id=CreateGUI(main_gui); \ 00000060 0600A0E1 MOV R0,R6 \ 00000064 370100EF SWI +311 \ 00000068 280085E5 STR R0,[R5, #+40] \ 0000006C ........ LDR R5,??DataTable227 ;; icons \ 00000070 040385E5 STR R0,[R5, #+772] 6382 ews=AllocWS(16384); \ 00000074 400CA0E3 MOV R0,#+16384 \ 00000078 250100EF SWI +293 \ 0000007C 200385E5 STR R0,[R5, #+800] 6383 // MutexCreate(&contactlist_mtx); 6384 DNR_TRIES=3; \ 00000080 0300A0E3 MOV R0,#+3 \ 00000084 F40385E5 STR R0,[R5, #+1012] 6385 // SUBPROC((void *)InitSmiles); 6386 // SUBPROC((void *)create_connect); 6387 wsBuffer=AllocWS(4096); \ 00000088 400DA0E3 MOV R0,#+4096 \ 0000008C 250100EF SWI +293 \ 00000090 D80285E5 STR R0,[R5, #+728] 6388 OneSecTmr(); \ 00000094 ........ BL OneSecTmr 6389 /* 6390 if(ParseUINS()!=0) 6391 { 6392 USE_ADD_UIN=1; 6393 InitXStatusesImg(); 6394 }*/ 6395 6396 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000098 ........ LDR R2,??DataTable218 ;; process_active_timer \ 0000009C 871EA0E3 MOV R1,#+2160 \ 000000A0 D400A0E3 MOV R0,#+212 \ 000000A4 680D80E3 ORR R0,R0,#0x1A00 \ 000000A8 050080E0 ADD R0,R0,R5 \ 000000AC 4D0000EF SWI +77 6397 6398 // if(!USE_ADD_UIN) 6399 // { 6400 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000000B0 ........ LDR R0,??DataTable219 ;; UIN \ 000000B4 0B1084E2 ADD R1,R4,#+11 \ 000000B8 002090E5 LDR R2,[R0, #+0] \ 000000BC 8200A0E3 MOV R0,#+130 \ 000000C0 C00F80E3 ORR R0,R0,#0x300 \ 000000C4 040080E0 ADD R0,R0,R4 \ 000000C8 160000EF SWI +22 6401 gipc.name_to=ipc_my_name; \ 000000CC 4B0FA0E3 MOV R0,#+300 \ 000000D0 DF1FA0E3 MOV R1,#+892 \ 000000D4 042081E0 ADD R2,R1,R4 \ 000000D8 052080E7 STR R2,[R0, +R5] 6402 gipc.name_from=ipc_my_name; \ 000000DC 041081E0 ADD R1,R1,R4 \ 000000E0 301185E5 STR R1,[R5, #+304] 6403 gipc.data=(void *)-1; \ 000000E4 0710E0E1 MVN R1,R7 \ 000000E8 341185E5 STR R1,[R5, #+308] 6404 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 000000EC 053080E0 ADD R3,R0,R5 \ 000000F0 0120A0E3 MOV R2,#+1 \ 000000F4 B010A0E3 MOV R1,#+176 \ 000000F8 DE1C81E3 ORR R1,R1,#0xDE00 \ 000000FC 0900A0E3 MOV R0,#+9 \ 00000100 420C80E3 ORR R0,R0,#0x4200 \ 00000104 000100EF SWI +256 6405 //} 6406 /* 6407 InitXStatusesImg(); 6408 //InitSmiles(); Это вызовется из InitXStatusesImg 6409 create_connect(); 6410 silenthide=1; 6411 gipc.name_to=ipc_xtask_name; 6412 gipc.name_from=ipc_my_name; 6413 gipc.data=0; 6414 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); 6415 */ 6416 } \ 00000108 F080BDE8 POP {R4-R7,PC} ;; return \ ??maincsm_oncreate_0: \ 0000010C ........ DC32 Canvas 6417 \ In segment CODE, align 4, keep-with-next 6418 void maincsm_onclose(CSM_RAM *csm) 6419 { \ maincsm_onclose: \ 00000000 10402DE9 PUSH {R4,LR} 6420 WriteDefSettings(); 6421 FreeWS(wsBuffer); \ 00000004 ........ LDR R4,??DataTable227 ;; icons \ 00000008 ........ BL WriteDefSettings \ 0000000C D80294E5 LDR R0,[R4, #+728] \ 00000010 290100EF SWI +297 6422 //GBS_DelTimer(&tmr_dorecv); 6423 RemoveKeybMsgHook((void *)my_keyhook); \ 00000014 ........ LDR R0,??DataTable221 ;; my_keyhook \ 00000018 2D0100EF SWI +301 6424 GBS_DelTimer(&tmr_active); \ 0000001C D400A0E3 MOV R0,#+212 \ 00000020 680D80E3 ORR R0,R0,#0x1A00 \ 00000024 040080E0 ADD R0,R0,R4 \ 00000028 8C0100EF SWI +396 6425 GBS_DelTimer(&tmr_vibra); \ 0000002C B400A0E3 MOV R0,#+180 \ 00000030 680D80E3 ORR R0,R0,#0x1A00 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 8C0100EF SWI +396 6426 GBS_DelTimer(&reconnect_tmr); \ 0000003C C400A0E3 MOV R0,#+196 \ 00000040 680D80E3 ORR R0,R0,#0x1A00 \ 00000044 040080E0 ADD R0,R0,R4 \ 00000048 8C0100EF SWI +396 6427 GBS_DelTimer(&tmr_illumination); \ 0000004C A400A0E3 MOV R0,#+164 \ 00000050 680D80E3 ORR R0,R0,#0x1A00 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 8C0100EF SWI +396 6428 GBS_DelTimer(&tm22); \ 0000005C 6800A0E3 MOV R0,#+104 \ 00000060 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000064 040080E0 ADD R0,R0,R4 \ 00000068 8C0100EF SWI +396 6429 #ifdef ELKA 6430 GBS_DelTimer(&sli_tmr); \ 0000006C 9400A0E3 MOV R0,#+148 \ 00000070 640D80E3 ORR R0,R0,#0x1900 \ 00000074 040080E0 ADD R0,R0,R4 \ 00000078 8C0100EF SWI +396 6431 #endif 6432 GBS_DelTimer(&remind_tmr); \ 0000007C E400A0E3 MOV R0,#+228 \ 00000080 600D80E3 ORR R0,R0,#0x1800 \ 00000084 040080E0 ADD R0,R0,R4 \ 00000088 8C0100EF SWI +396 6433 GBS_DelTimer(&ping_tmr); \ 0000008C 3C00A0E3 MOV R0,#+60 \ 00000090 580D80E3 ORR R0,R0,#0x1600 \ 00000094 040080E0 ADD R0,R0,R4 \ 00000098 8C0100EF SWI +396 6434 GBS_DelTimer(&uptime_tmr); \ 0000009C F400A0E3 MOV R0,#+244 \ 000000A0 600D80E3 ORR R0,R0,#0x1800 \ 000000A4 040080E0 ADD R0,R0,R4 \ 000000A8 8C0100EF SWI +396 6435 GBS_DelTimer(&autoChangeStatus); \ 000000AC D400A0E3 MOV R0,#+212 \ 000000B0 600D80E3 ORR R0,R0,#0x1800 \ 000000B4 040080E0 ADD R0,R0,R4 \ 000000B8 8C0100EF SWI +396 6436 #ifdef NEWSGOLD 6437 GBS_DelTimer(&tracktmr); \ 000000BC 0400A0E3 MOV R0,#+4 \ 000000C0 640D80E3 ORR R0,R0,#0x1900 \ 000000C4 040080E0 ADD R0,R0,R4 \ 000000C8 8C0100EF SWI +396 6438 GBS_DelTimer(&scrsTmr); \ 000000CC 4C00A0E3 MOV R0,#+76 \ 000000D0 5C0D80E3 ORR R0,R0,#0x1700 \ 000000D4 040080E0 ADD R0,R0,R4 \ 000000D8 8C0100EF SWI +396 6439 #endif 6440 GBS_DelTimer(&incs2); \ 000000DC 5800A0E3 MOV R0,#+88 \ 000000E0 7C0D80E3 ORR R0,R0,#0x1F00 \ 000000E4 040080E0 ADD R0,R0,R4 \ 000000E8 8C0100EF SWI +396 6441 GBS_DelTimer(&develop); \ 000000EC 8800A0E3 MOV R0,#+136 \ 000000F0 740D80E3 ORR R0,R0,#0x1D00 \ 000000F4 040080E0 ADD R0,R0,R4 \ 000000F8 8C0100EF SWI +396 6442 GBS_DelTimer(&away_tmr); \ 000000FC C400A0E3 MOV R0,#+196 \ 00000100 600D80E3 ORR R0,R0,#0x1800 \ 00000104 040080E0 ADD R0,R0,R4 \ 00000108 8C0100EF SWI +396 6443 SetVibration(0); \ 0000010C 0000A0E3 MOV R0,#+0 \ 00000110 7C0000EF SWI +124 6444 FreeTemplates(); \ 00000114 ........ BL FreeTemplates 6445 cmdFree(); \ 00000118 ........ BL cmdFree 6446 #ifdef kluchnik 6447 FreeBotMessage(); \ 0000011C ........ BL FreeBotMessage 6448 #endif 6449 FreeCLIST(); \ 00000120 ........ _BLF FreeCLIST,??FreeCLIST??rA 6450 free_ICONS(); \ 00000124 ........ BL free_ICONS 6451 // FreeSmiles(); 6452 FreeWS(ews); \ 00000128 200394E5 LDR R0,[R4, #+800] \ 0000012C 290100EF SWI +297 6453 FreeXStatusText(); \ 00000130 ........ _BLF FreeXStatusText,??FreeXStatusText??rA 6454 PrintLibFree(); \ 00000134 ........ _BLF PrintLibFree,??PrintLibFree??rA 6455 SUBPROC((void *)FreeSmiles); \ 00000138 24009FE5 LDR R0,??maincsm_onclose_0 ;; FreeSmiles \ 0000013C 710100EF SWI +369 6456 SUBPROC((void *)FreeXStatusesImg); \ 00000140 20009FE5 LDR R0,??maincsm_onclose_0+0x4 ;; FreeXStatusesImg \ 00000144 710100EF SWI +369 6457 SUBPROC((void *)end_socket); \ 00000148 ........ LDR R0,??DataTable222 ;; end_socket \ 0000014C 710100EF SWI +369 6458 SUBPROC((void *)ClearSendQ); \ 00000150 ........ LDR R0,??DataTable250 ;; ClearSendQ \ 00000154 710100EF SWI +369 6459 SUBPROC((void *)ElfKiller); \ 00000158 ........ LDR R0,??DataTable224 ;; ElfKiller \ 0000015C 710100EF SWI +369 6460 } \ 00000160 1080BDE8 POP {R4,PC} ;; return \ ??maincsm_onclose_0: \ 00000164 ........ DC32 FreeSmiles \ 00000168 ........ DC32 FreeXStatusesImg 6461 \ In segment CODE, align 4, keep-with-next 6462 void do_reconnect(void) 6463 { 6464 if (is_gprs_online) \ do_reconnect: \ 00000000 ........ LDR R0,??DataTable227 ;; icons \ 00000004 00402DE9 PUSH {LR} \ 00000008 A41390E5 LDR R1,[R0, #+932] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 6465 { 6466 DNR_TRIES=3; \ 00000014 0310A0E3 MOV R1,#+3 \ 00000018 F41380E5 STR R1,[R0, #+1012] 6467 SUBPROC((void*)create_connect); \ 0000001C ........ LDR R0,??DataTable226 ;; create_connect \ 00000020 710100EF SWI +369 6468 } 6469 } \ 00000024 0080BDE8 POP {PC} ;; return 6470 \ In segment CODE, align 4, keep-with-next 6471 void CheckDoubleRun(void) 6472 { \ CheckDoubleRun: \ 00000000 10402DE9 PUSH {R4,LR} 6473 int csm_id; 6474 if ((csm_id=(int)(gipc.data))!=-1) \ 00000004 ........ LDR R4,??DataTable227 ;; icons \ 00000008 4D0FA0E3 MOV R0,#+308 \ 0000000C 041090E7 LDR R1,[R0, +R4] \ 00000010 010071E3 CMN R1,#+1 \ 00000014 1200000A BEQ ??CheckDoubleRun_0 6475 { 6476 gipc.name_to=ipc_xtask_name; \ 00000018 ........ LDR R3,??DataTable230 ;; Canvas \ 0000001C 4B2FA0E3 MOV R2,#+300 \ 00000020 E7CF83E2 ADD R12,R3,#+924 \ 00000024 04C082E7 STR R12,[R2, +R4] 6477 gipc.name_from=ipc_my_name; \ 00000028 DF3F83E2 ADD R3,R3,#+892 \ 0000002C 303184E5 STR R3,[R4, #+304] 6478 gipc.data=(void *)csm_id; \ 00000030 041080E7 STR R1,[R0, +R4] 6479 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 00000034 043082E0 ADD R3,R2,R4 \ 00000038 0220A0E3 MOV R2,#+2 \ 0000003C B010A0E3 MOV R1,#+176 \ 00000040 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000044 0900A0E3 MOV R0,#+9 \ 00000048 420C80E3 ORR R0,R0,#0x4200 \ 0000004C 000100EF SWI +256 6480 LockSched(); \ 00000050 460100EF SWI +326 6481 CloseCSM(maincsm_id); \ 00000054 000394E5 LDR R0,[R4, #+768] \ 00000058 FC0100EF SWI +508 6482 //ShowMSG(1,(int)LG_ALREADY_STARTED); 6483 UnlockSched(); \ 0000005C 470100EF SWI +327 \ 00000060 1080BDE8 POP {R4,PC} 6484 } 6485 else 6486 // if(!USE_ADD_UIN) 6487 { 6488 InitXStatusesImg(); \ ??CheckDoubleRun_0: \ 00000064 ........ _BLF InitXStatusesImg,??InitXStatusesImg??rA 6489 //InitSmiles(); Это вызовется из InitXStatusesImg 6490 create_connect(); \ 00000068 ........ BL create_connect 6491 } 6492 /*else 6493 { 6494 InitXStatusesImg(); 6495 USE_ADD_UIN=1; 6496 }*/ 6497 6498 } \ 0000006C 1080BDE8 POP {R4,PC} ;; return 6499 6500 6501 6502 //------------------------------------------------------------// 6503 \ In segment CODE, align 4, keep-with-next 6504 int checkGui(int id) 6505 { \ checkGui: \ 00000000 10402DE9 PUSH {R4,LR} 6506 int retval = 0; \ 00000004 0040A0E3 MOV R4,#+0 6507 if (IsGuiOnTop(id)) \ 00000008 350100EF SWI +309 \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0600000A BEQ ??checkGui_0 6508 { 6509 GUI* igui = GetTopGUI(); 6510 if (igui) \ 00000014 4D0100EF SWI +333 \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 0300000A BEQ ??checkGui_0 6511 { 6512 #ifdef ELKA 6513 canvasdata = BuildCanvas(); \ 00000020 F18000EF SWI +33009 \ 00000024 0C109FE5 LDR R1,??checkGui_1 ;; icons + 720 6514 retval = 1; \ 00000028 0140A0E3 MOV R4,#+1 \ 0000002C 000081E5 STR R0,[R1, #+0] 6515 #else 6516 void *idata = GetDataOfItemByID(igui, 2); 6517 if (idata) 6518 { 6519 canvasdata = ((void **)idata)[DISPLACE_OF_IDLECANVAS / 4]; 6520 retval = 1; 6521 } 6522 #endif 6523 } 6524 } 6525 return retval; \ ??checkGui_0: \ 00000030 0400A0E1 MOV R0,R4 \ 00000034 1080BDE8 POP {R4,PC} ;; return \ ??checkGui_1: \ 00000038 ........ DC32 icons + 720 6526 } 6527 6528 6529 //-------------------------------------------------------------// 6530 #define IPC_GAME 7 6531 6532 typedef struct{ 6533 unsigned long uin; 6534 char *msg; 6535 }IPCmsg; 6536 \ In segment CODE, align 4, keep-with-next 6537 int maincsm_onmessage(CSM_RAM *data,GBS_MSG *msg) 6538 { \ maincsm_onmessage: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} 6539 6540 // char ss[100]; 6541 MAIN_CSM *csm=(MAIN_CSM*)data; 6542 { 6543 //IPC 6544 if (msg->msg==MSG_IPC) \ 00000004 ........ LDR R5,??DataTable252 ;; icons \ 00000008 20D04DE2 SUB SP,SP,#+32 \ 0000000C ........ LDR R7,??DataTable230 ;; Canvas \ 00000010 0140A0E1 MOV R4,R1 \ 00000014 F410A0E3 MOV R1,#+244 \ 00000018 681D81E3 ORR R1,R1,#0x1A00 \ 0000001C 051081E0 ADD R1,R1,R5 \ 00000020 00108DE5 STR R1,[SP, #+0] \ 00000024 040094E5 LDR R0,[R4, #+4] \ 00000028 0060A0E3 MOV R6,#+0 \ 0000002C B010A0E3 MOV R1,#+176 \ 00000030 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000034 010050E1 CMP R0,R1 \ 00000038 A700001A BNE ??maincsm_onmessage_2 6545 { 6546 IPC_REQ *ipc; 6547 if ((ipc=(IPC_REQ*)msg->data0)) \ 0000003C 0C8094E5 LDR R8,[R4, #+12] \ 00000040 000058E3 CMP R8,#+0 \ 00000044 A400000A BEQ ??maincsm_onmessage_2 6548 { 6549 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 00000048 000098E5 LDR R0,[R8, #+0] \ 0000004C DF9FA0E3 MOV R9,#+892 \ 00000050 071089E0 ADD R1,R9,R7 \ 00000054 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000058 000050E3 CMP R0,#+0 \ 0000005C 9E00001A BNE ??maincsm_onmessage_2 6550 { 6551 switch (msg->submess) \ 00000060 081094E5 LDR R1,[R4, #+8] \ 00000064 040098E5 LDR R0,[R8, #+4] \ 00000068 011041E2 SUB R1,R1,#+1 \ 0000006C 050051E3 CMP R1,#+5 \ 00000070 9900008A BHI ??maincsm_onmessage_2 \ 00000074 012F8FE2 ADR R2,??maincsm_onmessage_0 \ 00000078 0120D2E7 LDRB R2,[R2, R1] \ 0000007C 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_0: \ 00000080 010A1436 DC8 +1,+10,+20,+54 \ 00000084 73190000 DC8 +115,+25,+0,+0 6552 { 6553 case IPC_CHECK_DOUBLERUN: 6554 //Если приняли свое собственное сообщение, значит запускаем чекер 6555 if (ipc->name_from==ipc_my_name) SUBPROC((void *)CheckDoubleRun); \ ??maincsm_onmessage_3: \ 00000088 071089E0 ADD R1,R9,R7 \ 0000008C 010050E1 CMP R0,R1 \ 00000090 0200001A BNE ??maincsm_onmessage_4 \ 00000094 B40B9FE5 LDR R0,??maincsm_onmessage_5 ;; CheckDoubleRun \ 00000098 710100EF SWI +369 \ 0000009C 8E0000EA B ??maincsm_onmessage_2 6556 else ipc->data=(void *)maincsm_id; \ ??maincsm_onmessage_4: \ 000000A0 000395E5 LDR R0,[R5, #+768] \ 000000A4 080088E5 STR R0,[R8, #+8] \ 000000A8 8B0000EA B ??maincsm_onmessage_2 6557 break; 6558 case IPC_SMILE_PROCESSED: 6559 //Только собственные смайлы ;) 6560 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextSmile); \ ??maincsm_onmessage_6: \ 000000AC 071089E0 ADD R1,R9,R7 \ 000000B0 010050E1 CMP R0,R1 \ 000000B4 0100001A BNE ??maincsm_onmessage_7 \ 000000B8 940B9FE5 LDR R0,??maincsm_onmessage_5+0x4 ;; ProcessNextSmile \ ??maincsm_onmessage_8: \ 000000BC 710100EF SWI +369 6561 if(ShowLoadScreen) SMART_REDRAW(); \ ??maincsm_onmessage_7: \ 000000C0 EC0395E5 LDR R0,[R5, #+1004] \ ??maincsm_onmessage_9: \ 000000C4 000050E3 CMP R0,#+0 \ 000000C8 8300000A BEQ ??maincsm_onmessage_2 \ ??maincsm_onmessage_10: \ 000000CC ........ BL SMART_REDRAW \ 000000D0 810000EA B ??maincsm_onmessage_2 6562 break; 6563 case IPC_XSTATUSIMG_PROCESSED: 6564 //Только собственные иксстатусы ;) 6565 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextXStatImg); \ ??maincsm_onmessage_11: \ 000000D4 071089E0 ADD R1,R9,R7 \ 000000D8 010050E1 CMP R0,R1 \ 000000DC F7FFFF1A BNE ??maincsm_onmessage_7 \ 000000E0 700B9FE5 LDR R0,??maincsm_onmessage_5+0x8 ;; ProcessNextXStatImg \ 000000E4 F4FFFFEA B ??maincsm_onmessage_8 6566 if(ShowLoadScreen) SMART_REDRAW(); 6567 break; 6568 case IPC_ONESECOND: 6569 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_12: \ 000000E8 071089E0 ADD R1,R9,R7 \ 000000EC 010050E1 CMP R0,R1 \ 000000F0 7900001A BNE ??maincsm_onmessage_2 6570 { 6571 //if(!(--on_off_timer)) on_off_timer=0;//таймер показа подключившихся/отключившихся 6572 if(on_off_timer>0) \ 000000F4 C40395E5 LDR R0,[R5, #+964] \ 000000F8 010050E3 CMP R0,#+1 \ 000000FC 020000BA BLT ??maincsm_onmessage_13 6573 { 6574 on_off_timer--; \ 00000100 010040E2 SUB R0,R0,#+1 \ 00000104 C40385E5 STR R0,[R5, #+964] 6575 SMART_REDRAW(); \ 00000108 EFFFFFEA B ??maincsm_onmessage_10 6576 break; 6577 } 6578 else 6579 if(on_off_timer!=-1) \ ??maincsm_onmessage_13: \ 0000010C 010070E3 CMN R0,#+1 \ 00000110 0500000A BEQ ??maincsm_onmessage_14 6580 { 6581 on_off_timer=-1; \ 00000114 0600E0E1 MVN R0,R6 \ 00000118 C40385E5 STR R0,[R5, #+964] 6582 zeromem(on_off_buf,128); \ 0000011C 00009DE5 LDR R0,[SP, #+0] \ 00000120 8010A0E3 MOV R1,#+128 \ 00000124 1D0100EF SWI +285 6583 SMART_REDRAW(); \ 00000128 ........ BL SMART_REDRAW 6584 // UpdateCLheader(); 6585 } 6586 int f=0; 6587 CLIST *t=(CLIST*)cltop; \ ??maincsm_onmessage_14: \ 0000012C AC1395E5 LDR R1,[R5, #+940] \ 00000130 0000A0E3 MOV R0,#+0 \ 00000134 030000EA B ??maincsm_onmessage_15 6588 while(t && !f) 6589 { 6590 if(t->just_now) f=1; \ ??maincsm_onmessage_16: \ 00000138 742091E5 LDR R2,[R1, #+116] 6591 t=t->next; \ 0000013C 001091E5 LDR R1,[R1, #+0] \ 00000140 000052E3 CMP R2,#+0 \ 00000144 0100A013 MOVNE R0,#+1 6592 } \ ??maincsm_onmessage_15: \ 00000148 000051E3 CMP R1,#+0 \ 0000014C DCFFFF0A BEQ ??maincsm_onmessage_9 \ 00000150 000050E3 CMP R0,#+0 \ 00000154 F7FFFF0A BEQ ??maincsm_onmessage_16 6593 if(f)/* GBS_StartTimerProc(&cltmr, 216, MyRedraw);*/MyRedraw(); \ 00000158 D9FFFFEA B ??maincsm_onmessage_9 6594 } 6595 break; 6596 case IPC_TENSECONDS: 6597 //Только свое сообщение 6598 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_17: \ 0000015C 071089E0 ADD R1,R9,R7 \ 00000160 010050E1 CMP R0,R1 \ 00000164 5C00001A BNE ??maincsm_onmessage_2 6599 { 6600 CLIST *t=(CLIST *)cltop; 6601 int f=0; 6602 if(main_msg_timer2!=0) main_msg_timer2--; else main_msg_timer2=0; \ 00000168 000495E5 LDR R0,[R5, #+1024] \ 0000016C AC8395E5 LDR R8,[R5, #+940] \ 00000170 0090A0E3 MOV R9,#+0 \ 00000174 000050E3 CMP R0,#+0 \ 00000178 1900000A BEQ ??maincsm_onmessage_18 \ 0000017C 010040E2 SUB R0,R0,#+1 \ 00000180 000485E5 STR R0,[R5, #+1024] \ 00000184 160000EA B ??maincsm_onmessage_18 6603 while(t) 6604 { 6605 if(t->just_now) \ ??maincsm_onmessage_19: \ 00000188 740098E5 LDR R0,[R8, #+116] \ 0000018C 000050E3 CMP R0,#+0 \ 00000190 0200000A BEQ ??maincsm_onmessage_20 6606 { 6607 if (!(--(t->just_now))) f=1; \ 00000194 010050E2 SUBS R0,R0,#+1 \ 00000198 740088E5 STR R0,[R8, #+116] \ 0000019C 0190A003 MOVEQ R9,#+1 6608 } 6609 if (t->isactive) \ ??maincsm_onmessage_20: \ 000001A0 AC0098E5 LDR R0,[R8, #+172] \ 000001A4 000050E3 CMP R0,#+0 \ 000001A8 0C00000A BEQ ??maincsm_onmessage_21 6610 { 6611 if (!(--(t->isactive))) \ 000001AC 010050E2 SUBS R0,R0,#+1 \ 000001B0 AC0088E5 STR R0,[R8, #+172] \ 000001B4 0900001A BNE ??maincsm_onmessage_21 6612 { 6613 f=1; //Если дошли до 0 хотя бы один раз - надо перерисовать меню 6614 if ((t->log)&&(!t->isunread)) \ 000001B8 A00098E5 LDR R0,[R8, #+160] \ 000001BC 0190A0E3 MOV R9,#+1 \ 000001C0 000050E3 CMP R0,#+0 \ 000001C4 0500000A BEQ ??maincsm_onmessage_21 \ 000001C8 900098E5 LDR R0,[R8, #+144] \ 000001CC 000050E3 CMP R0,#+0 \ 000001D0 0200001A BNE ??maincsm_onmessage_21 6615 { 6616 FreeLOGQ(&t->log); \ 000001D4 A00088E2 ADD R0,R8,#+160 \ 000001D8 ........ BL FreeLOGQ 6617 t->msg_count=0; \ 000001DC B06088E5 STR R6,[R8, #+176] 6618 } 6619 } 6620 } 6621 t=(CLIST *)(t->next); \ ??maincsm_onmessage_21: \ 000001E0 008098E5 LDR R8,[R8, #+0] 6622 } \ ??maincsm_onmessage_18: \ 000001E4 000058E3 CMP R8,#+0 \ 000001E8 E6FFFF1A BNE ??maincsm_onmessage_19 6623 if (f) \ 000001EC 000059E3 CMP R9,#+0 \ 000001F0 0A00000A BEQ ??maincsm_onmessage_22 6624 { 6625 CLIST *oldt=NULL; 6626 if (contactlist_menu_id) \ 000001F4 B41395E5 LDR R1,[R5, #+948] \ 000001F8 0000A0E3 MOV R0,#+0 \ 000001FC 000051E3 CMP R1,#+0 \ 00000200 0400000A BEQ ??maincsm_onmessage_23 6627 { 6628 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 00000204 B40395E5 LDR R0,[R5, #+948] \ 00000208 0010A0E3 MOV R1,#+0 \ 0000020C 090200EF SWI +521 \ 00000210 8F0100EF SWI +399 \ 00000214 ........ _BLF FindContactByN,??FindContactByN??rA 6629 } 6630 RecountMenu(oldt,1); \ ??maincsm_onmessage_23: \ 00000218 0110A0E3 MOV R1,#+1 \ 0000021C ........ BL RecountMenu 6631 } 6632 if (time_to_stop_t9) \ ??maincsm_onmessage_22: \ 00000220 080495E5 LDR R0,[R5, #+1032] \ 00000224 000050E3 CMP R0,#+0 \ 00000228 2B00000A BEQ ??maincsm_onmessage_2 6633 { 6634 if (!(--time_to_stop_t9)) \ 0000022C 010050E2 SUBS R0,R0,#+1 \ 00000230 080485E5 STR R0,[R5, #+1032] \ 00000234 2800001A BNE ??maincsm_onmessage_2 6635 { 6636 if (IsGuiOnTop(edchat_id)) RefreshGUI(); \ 00000238 B80395E5 LDR R0,[R5, #+952] \ 0000023C 350100EF SWI +309 \ 00000240 000050E3 CMP R0,#+0 \ 00000244 2400000A BEQ ??maincsm_onmessage_2 \ 00000248 960100EF SWI +406 \ 0000024C 220000EA B ??maincsm_onmessage_2 6637 } 6638 } 6639 } 6640 break; 6641 case IPC_SENDMSG: ; //IPC_SENDMSG by BoBa 26.06.07 6642 int l=strlen(((IPCMsg *)(ipc->data))->msg); \ ??maincsm_onmessage_24: \ 00000250 080098E5 LDR R0,[R8, #+8] \ 00000254 040090E5 LDR R0,[R0, #+4] \ 00000258 1B0000EF SWI +27 \ 0000025C 0090A0E1 MOV R9,R0 6643 TPKT *msg=malloc(sizeof(PKT)+l+30); \ 00000260 260089E2 ADD R0,R9,#+38 \ 00000264 140000EF SWI +20 \ 00000268 00A0A0E1 MOV R10,R0 6644 msg->pkt.uin=((IPCMsg *)(ipc->data))->uin; \ 0000026C 080098E5 LDR R0,[R8, #+8] 6645 msg->pkt.type=T_SENDMSG; 6646 msg->pkt.data_len=l; 6647 memcpy(msg->data,((IPCMsg *)(ipc->data))->msg,l); \ 00000270 0920A0E1 MOV R2,R9 \ 00000274 000090E5 LDR R0,[R0, #+0] \ 00000278 00008AE5 STR R0,[R10, #+0] \ 0000027C 0200A0E3 MOV R0,#+2 \ 00000280 B400CAE1 STRH R0,[R10, #+4] \ 00000284 B690CAE1 STRH R9,[R10, #+6] \ 00000288 080098E5 LDR R0,[R8, #+8] \ 0000028C 041090E5 LDR R1,[R0, #+4] \ 00000290 08008AE2 ADD R0,R10,#+8 \ 00000294 1E0100EF SWI +286 6648 //slientsend=1; 6649 if(strstr(msg->data,PASS)==0) \ 00000298 BC199FE5 LDR R1,??maincsm_onmessage_5+0xC ;; PASS \ 0000029C 08008AE2 ADD R0,R10,#+8 \ 000002A0 180100EF SWI +280 \ 000002A4 000050E3 CMP R0,#+0 \ 000002A8 0400000A BEQ ??maincsm_onmessage_25 6650 { 6651 SENDMSGCOUNT++; //Номер сообщения 6652 SUBPROC((void *)SendAnswer,0,msg); 6653 } 6654 else 6655 { 6656 msg->pkt.data_len=40; \ 000002AC 2800A0E3 MOV R0,#+40 \ 000002B0 B600CAE1 STRH R0,[R10, #+6] 6657 strcpy(msg->data, "Fuck you hacker! my password sux ur ass"); \ 000002B4 8D1F87E2 ADD R1,R7,#+564 \ 000002B8 08008AE2 ADD R0,R10,#+8 \ 000002BC 1A0000EF SWI +26 6658 SENDMSGCOUNT++; //Номер сообщения \ ??maincsm_onmessage_25: \ 000002C0 080395E5 LDR R0,[R5, #+776] 6659 SUBPROC((void *)SendAnswer,0,msg); \ 000002C4 0A20A0E1 MOV R2,R10 \ 000002C8 010080E2 ADD R0,R0,#+1 \ 000002CC 080385E5 STR R0,[R5, #+776] \ 000002D0 ........ LDR R0,??DataTable248 ;; SendAnswer \ 000002D4 0010A0E3 MOV R1,#+0 \ 000002D8 710100EF SWI +369 6660 } 6661 break; 6662 } 6663 } 6664 } 6665 } 6666 //Нарисуем иконочку моего статуса 6667 //#define idlegui_id (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 6668 //CSM_RAM *icsm=FindCSMbyID(CSM_root()->idle_id); 6669 // if (IsGuiOnTop(idlegui_id)/*&&IsUnlocked()*/) //Если IdleGui на самом верху 6670 // { 6671 void *icsm; 6672 icsm=FindCSMbyID(CSM_root()->idle_id); \ ??maincsm_onmessage_2: \ 000002DC 068100EF SWI +33030 \ 000002E0 040090E5 LDR R0,[R0, #+4] \ 000002E4 080100EF SWI +264 \ 000002E8 000050E3 CMP R0,#+0 \ 000002EC 0B00000A BEQ ??maincsm_onmessage_26 \ 000002F0 2C0090E5 LDR R0,[R0, #+44] 6673 if (icsm && checkGui(idlegui_id(icsm))) \ 000002F4 ........ BL checkGui \ 000002F8 000050E3 CMP R0,#+0 \ 000002FC 0700000A BEQ ??maincsm_onmessage_26 6674 { 6675 // GUI *igui=GetTopGUI(); 6676 // if (igui) //И он существует 6677 //{ 6678 INC_show=0; \ 00000300 106485E5 STR R6,[R5, #+1040] 6679 canvasdata=BuildCanvas(); //void * - belyj fon! \ 00000304 F18000EF SWI +33009 \ 00000308 D00285E5 STR R0,[R5, #+720] 6680 //Тут трохи поменял 6681 // by Rainmaker: Рисуем канву только для иконки и выводим в своих координатах 6682 #ifdef ELKA 6683 if (total_unread) \ 0000030C A80395E5 LDR R0,[R5, #+936] \ 00000310 000050E3 CMP R0,#+0 \ 00000314 0300000A BEQ ??maincsm_onmessage_27 6684 SLI_On(); \ 00000318 ........ BL SLI_On \ 0000031C 010000EA B ??maincsm_onmessage_27 6685 #endif 6686 } 6687 //} 6688 else 6689 { 6690 main_d=1; \ ??maincsm_onmessage_26: \ 00000320 0100A0E3 MOV R0,#+1 \ 00000324 C80285E5 STR R0,[R5, #+712] 6691 } 6692 } 6693 6694 //---------------------------------------------------// 6695 void *icsm; 6696 icsm=FindCSMbyID(CSM_root()->idle_id); 6697 if (icsm && checkGui(idlegui_id(icsm))) \ ??maincsm_onmessage_27: \ 00000328 ........ LDR R8,??DataTable268 ;; fonto \ 0000032C 068100EF SWI +33030 \ 00000330 040090E5 LDR R0,[R0, #+4] \ 00000334 080100EF SWI +264 \ 00000338 000050E3 CMP R0,#+0 \ 0000033C 4001000A BEQ ??maincsm_onmessage_28 \ 00000340 2C0090E5 LDR R0,[R0, #+44] \ 00000344 ........ BL checkGui \ 00000348 000050E3 CMP R0,#+0 \ 0000034C 3C01000A BEQ ??maincsm_onmessage_28 6698 { 6699 int icn; 6700 if(total_unread) \ 00000350 A80395E5 LDR R0,[R5, #+936] \ 00000354 000050E3 CMP R0,#+0 6701 icn=IS_MSG; \ 00000358 0D90A013 MOVNE R9,#+13 \ 0000035C 0A00001A BNE ??maincsm_onmessage_29 6702 else 6703 { 6704 switch(connect_state) \ 00000360 840395E5 LDR R0,[R5, #+900] \ 00000364 000050E3 CMP R0,#+0 \ 00000368 0200000A BEQ ??maincsm_onmessage_30 \ 0000036C 030050E2 SUBS R0,R0,#+3 \ 00000370 0200000A BEQ ??maincsm_onmessage_31 \ 00000374 030000EA B ??maincsm_onmessage_32 6705 { 6706 case 0: 6707 icn=IS_OFFLINE; break; \ ??maincsm_onmessage_30: \ 00000378 0090A0E3 MOV R9,#+0 \ 0000037C 020000EA B ??maincsm_onmessage_29 6708 case 3: 6709 icn=CurrentStatus; //IS_ONLINE; \ ??maincsm_onmessage_31: \ 00000380 189395E5 LDR R9,[R5, #+792] \ 00000384 000000EA B ??maincsm_onmessage_29 6710 break; 6711 default: 6712 icn=IS_UNKNOWN; break; \ ??maincsm_onmessage_32: \ 00000388 0E90A0E3 MOV R9,#+14 6713 } 6714 } 6715 6716 #ifdef NEWSGOLD 6717 if(ShowStatusIcon==0 || ShowStatusIcon==2 || ShowStatusIcon==3) //kluchnik 26.03.08 \ ??maincsm_onmessage_29: \ 0000038C ........ LDR R0,??DataTable253 ;; ShowStatusIcon \ 00000390 000090E5 LDR R0,[R0, #+0] \ 00000394 000050E3 CMP R0,#+0 \ 00000398 02005013 CMPNE R0,#+2 \ 0000039C 03005013 CMPNE R0,#+3 \ 000003A0 2100001A BNE ??maincsm_onmessage_33 6718 { 6719 #endif 6720 if((IsUnlocked()) || (!IsUnlocked()) || (IsScreenSaver())) \ 000003A4 430000EF SWI +67 \ 000003A8 000050E3 CMP R0,#+0 \ 000003AC 0500001A BNE ??maincsm_onmessage_34 \ 000003B0 430000EF SWI +67 \ 000003B4 000050E3 CMP R0,#+0 \ 000003B8 0200000A BEQ ??maincsm_onmessage_34 \ 000003BC 420000EF SWI +66 \ 000003C0 000050E3 CMP R0,#+0 \ 000003C4 1800000A BEQ ??maincsm_onmessage_33 6721 { 6722 DrawCanvas(canvasdata,IDLEICON_X,IDLEICON_Y,IDLEICON_X+GetImgWidth((int)S_ICONS[icn])-1, 6723 IDLEICON_Y+GetImgHeight((int)S_ICONS[icn])-1,1); \ ??maincsm_onmessage_34: \ 000003C8 90B89FE5 LDR R11,??maincsm_onmessage_5+0x10 ;; IDLEICON_Y \ 000003CC 099185E0 ADD R9,R5,R9, LSL #+2 \ 000003D0 700099E5 LDR R0,[R9, #+112] \ 000003D4 210000EF SWI +33 \ 000003D8 00A0A0E1 MOV R10,R0 \ 000003DC 700099E5 LDR R0,[R9, #+112] \ 000003E0 220000EF SWI +34 \ 000003E4 78189FE5 LDR R1,??maincsm_onmessage_5+0x14 ;; IDLEICON_X \ 000003E8 00209BE5 LDR R2,[R11, #+0] \ 000003EC 001091E5 LDR R1,[R1, #+0] \ 000003F0 0130A0E3 MOV R3,#+1 \ 000003F4 08002DE9 PUSH {R3} \ 000003F8 010080E0 ADD R0,R0,R1 \ 000003FC 02308AE0 ADD R3,R10,R2 \ 00000400 013043E2 SUB R3,R3,#+1 \ 00000404 08002DE9 PUSH {R3} \ 00000408 013040E2 SUB R3,R0,#+1 \ 0000040C D00295E5 LDR R0,[R5, #+720] \ 00000410 250000EF SWI +37 6724 DrawImg(IDLEICON_X,IDLEICON_Y,S_ICONS[icn]); \ 00000414 48089FE5 LDR R0,??maincsm_onmessage_5+0x14 ;; IDLEICON_X \ 00000418 702099E5 LDR R2,[R9, #+112] \ 0000041C 00109BE5 LDR R1,[R11, #+0] \ 00000420 000090E5 LDR R0,[R0, #+0] \ 00000424 230000EF SWI +35 \ 00000428 08D08DE2 ADD SP,SP,#+8 6725 } 6726 #ifdef NEWSGOLD 6727 } 6728 #ifdef kluchnik 6729 if(show_xstatus==1) \ ??maincsm_onmessage_33: \ 0000042C ........ LDR R0,??DataTable256 ;; show_xstatus \ 00000430 000090E5 LDR R0,[R0, #+0] \ 00000434 010050E3 CMP R0,#+1 \ 00000438 2300001A BNE ??maincsm_onmessage_35 6730 #else 6731 if(show_xstatus==1 || show_xstatus==3) //kluchnik 26.03.08 6732 #endif 6733 #else 6734 if(show_xstatus==1) //kluchnik 26.03.08 6735 #endif 6736 { 6737 PNGTOP_DESC *pltop=PNG_TOP(); 6738 pltop->dyn_pltop=XStatusesImgList; 6739 DisableIDLETMR(); 6740 DrawCanvas(canvasdata,IDLEICON_XX,IDLEICON_YX,IDLEICON_XX+GetImgWidth((int)XStatusesIconArray[CurrentXStatus])-1, 6741 IDLEICON_YX+GetImgHeight((int)XStatusesIconArray[CurrentXStatus])-1,1); \ 0000043C 24989FE5 LDR R9,??maincsm_onmessage_5+0x18 ;; XStatusesIconArray \ 00000440 24B89FE5 LDR R11,??maincsm_onmessage_5+0x1C ;; IDLEICON_YX \ 00000444 B98100EF SWI +33209 \ 00000448 20189FE5 LDR R1,??maincsm_onmessage_5+0x20 ;; XStatusesImgList \ 0000044C 001091E5 LDR R1,[R1, #+0] \ 00000450 081080E5 STR R1,[R0, #+8] \ 00000454 7F0100EF SWI +383 \ 00000458 1C0395E5 LDR R0,[R5, #+796] \ 0000045C 001099E5 LDR R1,[R9, #+0] \ 00000460 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 00000464 210000EF SWI +33 \ 00000468 001099E5 LDR R1,[R9, #+0] \ 0000046C 00A0A0E1 MOV R10,R0 \ 00000470 1C0395E5 LDR R0,[R5, #+796] \ 00000474 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 00000478 220000EF SWI +34 \ 0000047C F0179FE5 LDR R1,??maincsm_onmessage_5+0x24 ;; IDLEICON_XX \ 00000480 00209BE5 LDR R2,[R11, #+0] \ 00000484 001091E5 LDR R1,[R1, #+0] \ 00000488 0130A0E3 MOV R3,#+1 \ 0000048C 08002DE9 PUSH {R3} \ 00000490 010080E0 ADD R0,R0,R1 \ 00000494 02308AE0 ADD R3,R10,R2 \ 00000498 013043E2 SUB R3,R3,#+1 \ 0000049C 08002DE9 PUSH {R3} \ 000004A0 013040E2 SUB R3,R0,#+1 \ 000004A4 D00295E5 LDR R0,[R5, #+720] \ 000004A8 250000EF SWI +37 6742 DrawImg(IDLEICON_XX,IDLEICON_YX,XStatusesIconArray[CurrentXStatus]); \ 000004AC 1C0395E5 LDR R0,[R5, #+796] \ 000004B0 001099E5 LDR R1,[R9, #+0] \ 000004B4 002191E7 LDR R2,[R1, +R0, LSL #+2] \ 000004B8 B4079FE5 LDR R0,??maincsm_onmessage_5+0x24 ;; IDLEICON_XX \ 000004BC 00109BE5 LDR R1,[R11, #+0] \ 000004C0 000090E5 LDR R0,[R0, #+0] \ 000004C4 230000EF SWI +35 \ 000004C8 08D08DE2 ADD SP,SP,#+8 6743 } 6744 6745 6746 if(IsUnlocked()) \ ??maincsm_onmessage_35: \ 000004CC 430000EF SWI +67 \ 000004D0 000050E3 CMP R0,#+0 \ 000004D4 DA00000A BEQ ??maincsm_onmessage_28 6747 { 6748 SetCanvasFlag(0); \ 000004D8 0000A0E3 MOV R0,#+0 \ 000004DC ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 6749 if (main_d==1) \ 000004E0 C80295E5 LDR R0,[R5, #+712] \ 000004E4 010050E3 CMP R0,#+1 \ 000004E8 8A00001A BNE ??maincsm_onmessage_36 6750 { 6751 if(Is_SMARTCPU_On && main_msg_timer2) \ 000004EC EC0295E5 LDR R0,[R5, #+748] \ 000004F0 000050E3 CMP R0,#+0 \ 000004F4 00049515 LDRNE R0,[R5, #+1024] \ 000004F8 00005013 CMPNE R0,#+0 \ 000004FC 8400000A BEQ ??maincsm_onmessage_37 6752 { 6753 if(fonto==1) \ 00000500 70979FE5 LDR R9,??maincsm_onmessage_5+0x28 ;; msg_d_x \ 00000504 70A79FE5 LDR R10,??maincsm_onmessage_5+0x2C ;; msg_d_y \ 00000508 70B79FE5 LDR R11,??maincsm_onmessage_5+0x30 ;; spaco2 \ 0000050C CC3295E5 LDR R3,[R5, #+716] \ 00000510 5810A0E3 MOV R1,#+88 \ 00000514 741D81E3 ORR R1,R1,#0x1D00 \ 00000518 051081E0 ADD R1,R1,R5 \ 0000051C 18108DE5 STR R1,[SP, #+24] \ 00000520 2810A0E3 MOV R1,#+40 \ 00000524 741D81E3 ORR R1,R1,#0x1D00 \ 00000528 051081E0 ADD R1,R1,R5 \ 0000052C 14108DE5 STR R1,[SP, #+20] \ 00000530 F810A0E3 MOV R1,#+248 \ 00000534 701D81E3 ORR R1,R1,#0x1C00 \ 00000538 051081E0 ADD R1,R1,R5 \ 0000053C 10108DE5 STR R1,[SP, #+16] \ 00000540 C810A0E3 MOV R1,#+200 \ 00000544 701D81E3 ORR R1,R1,#0x1C00 \ 00000548 051081E0 ADD R1,R1,R5 \ 0000054C 0C108DE5 STR R1,[SP, #+12] \ 00000550 000099E5 LDR R0,[R9, #+0] \ 00000554 00109AE5 LDR R1,[R10, #+0] \ 00000558 00C09BE5 LDR R12,[R11, #+0] \ 0000055C 00E098E5 LDR LR,[R8, #+0] \ 00000560 00102DE9 PUSH {R12} \ 00000564 9820A0E3 MOV R2,#+152 \ 00000568 702D82E3 ORR R2,R2,#0x1C00 \ 0000056C 052082E0 ADD R2,R2,R5 \ 00000570 01005EE3 CMP LR,#+1 \ 00000574 2E00001A BNE ??maincsm_onmessage_38 6754 { 6755 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ 00000578 01C0A0E3 MOV R12,#+1 \ 0000057C 00102DE9 PUSH {R12} \ 00000580 ........ _BLF PrintField,??PrintField??rA 6756 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, spaco2); \ 00000584 00009BE5 LDR R0,[R11, #+0] \ 00000588 01002DE9 PUSH {R0} \ 0000058C 000098E5 LDR R0,[R8, #+0] \ 00000590 01002DE9 PUSH {R0} \ 00000594 D41295E5 LDR R1,[R5, #+724] \ 00000598 CC3295E5 LDR R3,[R5, #+716] \ 0000059C 1C209DE5 LDR R2,[SP, #+28] \ 000005A0 00009AE5 LDR R0,[R10, #+0] \ 000005A4 001081E0 ADD R1,R1,R0 \ 000005A8 000099E5 LDR R0,[R9, #+0] \ 000005AC ........ _BLF PrintField,??PrintField??rA 6757 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, spaco2); \ 000005B0 00009BE5 LDR R0,[R11, #+0] \ 000005B4 01002DE9 PUSH {R0} \ 000005B8 000098E5 LDR R0,[R8, #+0] \ 000005BC 01002DE9 PUSH {R0} \ 000005C0 D41295E5 LDR R1,[R5, #+724] \ 000005C4 CC3295E5 LDR R3,[R5, #+716] \ 000005C8 28209DE5 LDR R2,[SP, #+40] \ 000005CC 00009AE5 LDR R0,[R10, #+0] \ 000005D0 811080E0 ADD R1,R0,R1, LSL #+1 \ 000005D4 000099E5 LDR R0,[R9, #+0] \ 000005D8 ........ _BLF PrintField,??PrintField??rA 6758 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, spaco2); \ 000005DC 00009BE5 LDR R0,[R11, #+0] \ 000005E0 01002DE9 PUSH {R0} \ 000005E4 000098E5 LDR R0,[R8, #+0] \ 000005E8 01002DE9 PUSH {R0} \ 000005EC D41295E5 LDR R1,[R5, #+724] \ 000005F0 CC3295E5 LDR R3,[R5, #+716] \ 000005F4 34209DE5 LDR R2,[SP, #+52] \ 000005F8 00009AE5 LDR R0,[R10, #+0] \ 000005FC 811081E0 ADD R1,R1,R1, LSL #+1 \ 00000600 001081E0 ADD R1,R1,R0 \ 00000604 000099E5 LDR R0,[R9, #+0] \ 00000608 ........ _BLF PrintField,??PrintField??rA 6759 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, spaco2); \ 0000060C 00009BE5 LDR R0,[R11, #+0] \ 00000610 01002DE9 PUSH {R0} \ 00000614 000098E5 LDR R0,[R8, #+0] \ 00000618 01002DE9 PUSH {R0} \ 0000061C D41295E5 LDR R1,[R5, #+724] \ 00000620 CC3295E5 LDR R3,[R5, #+716] \ 00000624 40209DE5 LDR R2,[SP, #+64] \ 00000628 00009AE5 LDR R0,[R10, #+0] \ 0000062C 011180E0 ADD R1,R0,R1, LSL #+2 \ 00000630 340000EA B ??maincsm_onmessage_39 6760 } 6761 else 6762 { 6763 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ ??maincsm_onmessage_38: \ 00000634 00402DE9 PUSH {LR} \ 00000638 ........ _BLF PrintField,??PrintField??rA 6764 PrintField(msg_d_x,msg_d_y+GetFontYSIZE(paused_height)+1, s_txt, align, fonto, spaco2); \ 0000063C D40295E5 LDR R0,[R5, #+724] \ 00000640 C50100EF SWI +453 \ 00000644 00109BE5 LDR R1,[R11, #+0] \ 00000648 02002DE9 PUSH {R1} \ 0000064C 001098E5 LDR R1,[R8, #+0] \ 00000650 02002DE9 PUSH {R1} \ 00000654 CC3295E5 LDR R3,[R5, #+716] \ 00000658 1C209DE5 LDR R2,[SP, #+28] \ 0000065C 00109AE5 LDR R1,[R10, #+0] \ 00000660 010080E0 ADD R0,R0,R1 \ 00000664 011080E2 ADD R1,R0,#+1 \ 00000668 000099E5 LDR R0,[R9, #+0] \ 0000066C ........ _BLF PrintField,??PrintField??rA 6765 PrintField(msg_d_x,msg_d_y+(2*GetFontYSIZE(paused_height))+2, d_txt, align, fonto, spaco2); \ 00000670 D40295E5 LDR R0,[R5, #+724] \ 00000674 C50100EF SWI +453 \ 00000678 00109BE5 LDR R1,[R11, #+0] \ 0000067C 02002DE9 PUSH {R1} \ 00000680 001098E5 LDR R1,[R8, #+0] \ 00000684 02002DE9 PUSH {R1} \ 00000688 CC3295E5 LDR R3,[R5, #+716] \ 0000068C 28209DE5 LDR R2,[SP, #+40] \ 00000690 00109AE5 LDR R1,[R10, #+0] \ 00000694 800081E0 ADD R0,R1,R0, LSL #+1 \ 00000698 021080E2 ADD R1,R0,#+2 \ 0000069C 000099E5 LDR R0,[R9, #+0] \ 000006A0 ........ _BLF PrintField,??PrintField??rA 6766 PrintField(msg_d_x,msg_d_y+(3*GetFontYSIZE(paused_height))+3, f_txt, align, fonto, spaco2); \ 000006A4 D40295E5 LDR R0,[R5, #+724] \ 000006A8 C50100EF SWI +453 \ 000006AC 00109BE5 LDR R1,[R11, #+0] \ 000006B0 800080E0 ADD R0,R0,R0, LSL #+1 \ 000006B4 02002DE9 PUSH {R1} \ 000006B8 001098E5 LDR R1,[R8, #+0] \ 000006BC 02002DE9 PUSH {R1} \ 000006C0 CC3295E5 LDR R3,[R5, #+716] \ 000006C4 34209DE5 LDR R2,[SP, #+52] \ 000006C8 00109AE5 LDR R1,[R10, #+0] \ 000006CC 010080E0 ADD R0,R0,R1 \ 000006D0 031080E2 ADD R1,R0,#+3 \ 000006D4 000099E5 LDR R0,[R9, #+0] \ 000006D8 ........ _BLF PrintField,??PrintField??rA 6767 PrintField(msg_d_x,msg_d_y+(4*GetFontYSIZE(paused_height))+4, g_txt, align, fonto, spaco2); \ 000006DC D40295E5 LDR R0,[R5, #+724] \ 000006E0 C50100EF SWI +453 \ 000006E4 00109BE5 LDR R1,[R11, #+0] \ 000006E8 02002DE9 PUSH {R1} \ 000006EC 001098E5 LDR R1,[R8, #+0] \ 000006F0 02002DE9 PUSH {R1} \ 000006F4 CC3295E5 LDR R3,[R5, #+716] \ 000006F8 40209DE5 LDR R2,[SP, #+64] \ 000006FC 00109AE5 LDR R1,[R10, #+0] \ 00000700 000181E0 ADD R0,R1,R0, LSL #+2 \ 00000704 041080E2 ADD R1,R0,#+4 \ ??maincsm_onmessage_39: \ 00000708 000099E5 LDR R0,[R9, #+0] \ 0000070C ........ _BLF PrintField,??PrintField??rA \ 00000710 28D08DE2 ADD SP,SP,#+40 6768 } 6769 } 6770 main_d=0; \ ??maincsm_onmessage_37: \ 00000714 C86285E5 STR R6,[R5, #+712] 6771 } 6772 6773 if(Is_UPTIME_On) DrawOnlineTime(canvasdata); \ ??maincsm_onmessage_36: \ 00000718 3C0395E5 LDR R0,[R5, #+828] \ 0000071C 000050E3 CMP R0,#+0 \ 00000720 0100000A BEQ ??maincsm_onmessage_40 \ 00000724 D00295E5 LDR R0,[R5, #+720] \ 00000728 ........ BL DrawOnlineTime 6774 if(Is_PING_On) DrawPing(canvasdata); \ ??maincsm_onmessage_40: \ 0000072C E40295E5 LDR R0,[R5, #+740] \ 00000730 000050E3 CMP R0,#+0 \ 00000734 0100000A BEQ ??maincsm_onmessage_41 \ 00000738 D00295E5 LDR R0,[R5, #+720] \ 0000073C ........ BL DrawPing 6775 if(Auto_Status && showAwayIdle) DrawAutoMSG(canvasdata); \ ??maincsm_onmessage_41: \ 00000740 ........ LDR R0,??DataTable235 ;; Auto_Status \ 00000744 000090E5 LDR R0,[R0, #+0] \ 00000748 000050E3 CMP R0,#+0 \ 0000074C 0500000A BEQ ??maincsm_onmessage_42 \ 00000750 ........ LDR R0,??DataTable236 ;; showAwayIdle \ 00000754 000090E5 LDR R0,[R0, #+0] \ 00000758 000050E3 CMP R0,#+0 \ 0000075C 0100000A BEQ ??maincsm_onmessage_42 \ 00000760 D00295E5 LDR R0,[R5, #+720] \ 00000764 ........ BL DrawAutoMSG 6776 if(Is_Unread_On) \ ??maincsm_onmessage_42: \ 00000768 14059FE5 LDR R0,??maincsm_onmessage_5+0x34 ;; Is_Unread_On \ 0000076C ........ LDR R9,??DataTable237 ;; spaco1 \ 00000770 000090E5 LDR R0,[R0, #+0] \ 00000774 000050E3 CMP R0,#+0 \ 00000778 1100000A BEQ ??maincsm_onmessage_43 6777 { 6778 sprintf(unread_msg_info, "Unread: %d", total_unread2); \ 0000077C FC2295E5 LDR R2,[R5, #+764] \ 00000780 FCA0A0E3 MOV R10,#+252 \ 00000784 50AE8AE3 ORR R10,R10,#0x500 \ 00000788 971F87E2 ADD R1,R7,#+604 \ 0000078C 05008AE0 ADD R0,R10,R5 \ 00000790 160000EF SWI +22 6779 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, spaco1); \ 00000794 000099E5 LDR R0,[R9, #+0] \ 00000798 05208AE0 ADD R2,R10,R5 \ 0000079C 01002DE9 PUSH {R0} \ 000007A0 000098E5 LDR R0,[R8, #+0] \ 000007A4 01002DE9 PUSH {R0} \ 000007A8 CC3295E5 LDR R3,[R5, #+716] \ 000007AC D4049FE5 LDR R0,??maincsm_onmessage_5+0x38 ;; unread_Y \ 000007B0 001090E5 LDR R1,[R0, #+0] \ 000007B4 D0049FE5 LDR R0,??maincsm_onmessage_5+0x3C ;; unread_X \ 000007B8 000090E5 LDR R0,[R0, #+0] \ 000007BC ........ _BLF PrintField,??PrintField??rA \ 000007C0 08D08DE2 ADD SP,SP,#+8 6780 } 6781 6782 if(Is_Online_On && strlen(on_off_buf)!=0) \ ??maincsm_onmessage_43: \ 000007C4 C4049FE5 LDR R0,??maincsm_onmessage_5+0x40 ;; Is_Online_On \ 000007C8 000090E5 LDR R0,[R0, #+0] \ 000007CC 000050E3 CMP R0,#+0 \ 000007D0 1B00000A BEQ ??maincsm_onmessage_28 \ 000007D4 00009DE5 LDR R0,[SP, #+0] \ 000007D8 1B0000EF SWI +27 \ 000007DC 000050E3 CMP R0,#+0 \ 000007E0 1700000A BEQ ??maincsm_onmessage_28 6783 { 6784 char *s=malloc(128); \ 000007E4 8000A0E3 MOV R0,#+128 \ 000007E8 140000EF SWI +20 6785 sprintf(s,percent_s,on_off_buf); \ 000007EC 00209DE5 LDR R2,[SP, #+0] \ 000007F0 00A0A0E1 MOV R10,R0 \ 000007F4 081087E2 ADD R1,R7,#+8 \ 000007F8 160000EF SWI +22 6786 s[strlen(s)-1]=0; \ 000007FC 0A00A0E1 MOV R0,R10 \ 00000800 1B0000EF SWI +27 \ 00000804 0A0080E0 ADD R0,R0,R10 \ 00000808 016040E5 STRB R6,[R0, #-1] 6787 PrintField(online_x,online_y,s, align, fonto, spaco1); \ 0000080C 000099E5 LDR R0,[R9, #+0] \ 00000810 0A20A0E1 MOV R2,R10 \ 00000814 01002DE9 PUSH {R0} \ 00000818 000098E5 LDR R0,[R8, #+0] \ 0000081C 01002DE9 PUSH {R0} \ 00000820 CC3295E5 LDR R3,[R5, #+716] \ 00000824 68049FE5 LDR R0,??maincsm_onmessage_5+0x44 ;; online_y \ 00000828 001090E5 LDR R1,[R0, #+0] \ 0000082C 64049FE5 LDR R0,??maincsm_onmessage_5+0x48 ;; online_x \ 00000830 000090E5 LDR R0,[R0, #+0] \ 00000834 ........ _BLF PrintField,??PrintField??rA 6788 mfree(s); \ 00000838 0A00A0E1 MOV R0,R10 \ 0000083C 150000EF SWI +21 \ 00000840 08D08DE2 ADD SP,SP,#+8 6789 } 6790 }//if(IsUnlocked()) 6791 } 6792 6793 6794 //-----------------------------------------------------------// 6795 6796 6797 if (msg->msg==MSG_RECONFIGURE_REQ) \ ??maincsm_onmessage_28: \ 00000844 040094E5 LDR R0,[R4, #+4] \ 00000848 AF10A0E3 MOV R1,#+175 \ 0000084C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000850 010050E1 CMP R0,R1 \ 00000854 3000001A BNE ??maincsm_onmessage_44 6798 { 6799 //if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) 6800 if( (strcmp_nocase(suc_config_name,(char *)msg->data0)==0) 6801 || (strcmp_nocase(suc_config_name_mod,(char *)msg->data0)==0)) \ 00000858 ........ LDR R0,??DataTable262 ;; suc_config_name \ 0000085C 0C1094E5 LDR R1,[R4, #+12] \ 00000860 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000864 000050E3 CMP R0,#+0 \ 00000868 0400000A BEQ ??maincsm_onmessage_45 \ 0000086C ........ LDR R0,??DataTable239 ;; suc_config_name_mod \ 00000870 0C1094E5 LDR R1,[R4, #+12] \ 00000874 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000878 000050E3 CMP R0,#+0 \ 0000087C 2600001A BNE ??maincsm_onmessage_44 6802 { 6803 ShowMSG(1,(int)"NatICQ config updated!"); 6804 // InitConfig(); 6805 UpdateConfig(); 6806 #ifdef NEWSGOLD 6807 initTags(); 6808 #endif 6809 PrintLibInit(1); 6810 FontPathInit((char *)fontpath, 1); \ ??maincsm_onmessage_45: \ 00000880 ........ LDR R9,??DataTable264 ;; fontpath \ 00000884 9A1F87E2 ADD R1,R7,#+616 \ 00000888 0100A0E3 MOV R0,#+1 \ 0000088C 480100EF SWI +328 \ 00000890 ........ _BLF UpdateConfig,??UpdateConfig??rA \ 00000894 ........ _BLF initTags,??initTags??rA \ 00000898 0100A0E3 MOV R0,#+1 \ 0000089C ........ _BLF PrintLibInit,??PrintLibInit??rA \ 000008A0 0110A0E3 MOV R1,#+1 \ 000008A4 0900A0E1 MOV R0,R9 \ 000008A8 ........ _BLF FontPathInit,??FontPathInit??rA 6811 SetFontColor((char*)fontColor,(char*)bgrColor,1); \ 000008AC ........ LDR R1,??DataTable265 ;; bgrColor \ 000008B0 ........ LDR R0,??DataTable266 ;; fontColor \ 000008B4 0120A0E3 MOV R2,#+1 \ 000008B8 ........ _BLF SetFontColor,??SetFontColor??rA 6812 //#ifdef ELKA 6813 if(fonto==1) \ 000008BC 000098E5 LDR R0,[R8, #+0] \ 000008C0 010050E3 CMP R0,#+1 \ 000008C4 0B00001A BNE ??maincsm_onmessage_46 6814 { 6815 char *heght=malloc(64); \ 000008C8 4000A0E3 MOV R0,#+64 \ 000008CC 140000EF SWI +20 \ 000008D0 0080A0E1 MOV R8,R0 6816 sprintf(heght, "%s2240.png", fontpath); \ 000008D4 0920A0E1 MOV R2,R9 \ 000008D8 A01F87E2 ADD R1,R7,#+640 \ 000008DC 160000EF SWI +22 6817 paused_height=GetImgHeight((int)heght); \ 000008E0 0800A0E1 MOV R0,R8 \ 000008E4 210000EF SWI +33 \ 000008E8 D40285E5 STR R0,[R5, #+724] 6818 mfree(heght); \ 000008EC 0800A0E1 MOV R0,R8 \ 000008F0 150000EF SWI +21 \ 000008F4 010000EA B ??maincsm_onmessage_47 6819 } 6820 else 6821 paused_height=fonto-100; \ ??maincsm_onmessage_46: \ 000008F8 640040E2 SUB R0,R0,#+100 \ 000008FC D40285E5 STR R0,[R5, #+724] 6822 //#endif 6823 free_ICONS(); \ ??maincsm_onmessage_47: \ 00000900 ........ BL free_ICONS 6824 setup_ICONS(); \ 00000904 ........ BL setup_ICONS 6825 ResortCL(); \ 00000908 ........ _BLF ResortCL,??ResortCL??rA 6826 RecountMenu(NULL,1); \ 0000090C 0110A0E3 MOV R1,#+1 \ 00000910 0000A0E3 MOV R0,#+0 \ 00000914 ........ BL RecountMenu 6827 init_time_zone(); \ 00000918 ........ BL init_time_zone 6828 // InitSmiles(); 6829 } 6830 } 6831 6832 if (msg->msg==MSG_GUI_DESTROYED) \ ??maincsm_onmessage_44: \ 0000091C 040094E5 LDR R0,[R4, #+4] \ 00000920 0E10A0E3 MOV R1,#+14 \ 00000924 641C81E3 ORR R1,R1,#0x6400 \ 00000928 010050E1 CMP R0,R1 \ 0000092C 0D00001A BNE ??maincsm_onmessage_48 6833 { 6834 if ((int)msg->data0==csm->gui_id) \ 00000930 20109DE5 LDR R1,[SP, #+32] \ 00000934 0C0094E5 LDR R0,[R4, #+12] \ 00000938 281091E5 LDR R1,[R1, #+40] \ 0000093C 010050E1 CMP R0,R1 6835 { 6836 csm->csm.state=-3; \ 00000940 20009D05 LDREQ R0,[SP, #+32] \ 00000944 0210E003 MVNEQ R1,#+2 \ 00000948 10108005 STREQ R1,[R0, #+16] 6837 } 6838 if ((int)msg->data0==contactlist_menu_id) \ 0000094C 0C0094E5 LDR R0,[R4, #+12] \ 00000950 B41395E5 LDR R1,[R5, #+948] \ 00000954 010050E1 CMP R0,R1 6839 { 6840 contactlist_menu_id=0; \ 00000958 B4638505 STREQ R6,[R5, #+948] 6841 //prev_clmenu_itemcount=0; 6842 } 6843 if ((int)msg->data0==edchat_id) \ 0000095C B81395E5 LDR R1,[R5, #+952] \ 00000960 010050E1 CMP R0,R1 6844 { 6845 edchat_id=0; \ 00000964 B8638505 STREQ R6,[R5, #+952] 6846 } 6847 } 6848 6849 if (msg->msg==MSG_HELPER_TRANSLATOR) \ ??maincsm_onmessage_48: \ 00000968 040094E5 LDR R0,[R4, #+4] \ 0000096C AE10A0E3 MOV R1,#+174 \ 00000970 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000974 010050E1 CMP R0,R1 \ 00000978 1000001A BNE ??maincsm_onmessage_49 6850 { 6851 switch((int)msg->data0) \ 0000097C 0C0094E5 LDR R0,[R4, #+12] \ 00000980 101094E5 LDR R1,[R4, #+16] \ 00000984 ........ LDR R9,??DataTable243 ;; RECONNECT_TIME \ 00000988 ........ LDR R10,??DataTable244 ;; do_reconnect \ 0000098C C420A0E3 MOV R2,#+196 \ 00000990 682D82E3 ORR R2,R2,#0x1A00 \ 00000994 054082E0 ADD R4,R2,R5 \ 00000998 482F42E2 SUB R2,R2,#+288 \ 0000099C 058082E0 ADD R8,R2,R5 \ 000009A0 802050E2 SUBS R2,R0,#+128 \ 000009A4 0800000A BEQ ??maincsm_onmessage_50 \ 000009A8 022052E2 SUBS R2,R2,#+2 \ 000009AC 0200000A BEQ ??maincsm_onmessage_51 \ 000009B0 122052E2 SUBS R2,R2,#+18 \ 000009B4 1300000A BEQ ??maincsm_onmessage_52 \ 000009B8 1D0000EA B ??maincsm_onmessage_53 6852 { 6853 case LMAN_DISCONNECT_IND: 6854 is_gprs_online=0; \ ??maincsm_onmessage_51: \ 000009BC A46385E5 STR R6,[R5, #+932] 6855 return(1); \ ??maincsm_onmessage_49: \ 000009C0 0100A0E3 MOV R0,#+1 \ 000009C4 24D08DE2 ADD SP,SP,#+36 \ 000009C8 F08FBDE8 POP {R4-R11,PC} ;; return 6856 case LMAN_CONNECT_CNF: 6857 vibra_count=1; \ ??maincsm_onmessage_50: \ 000009CC 0100A0E3 MOV R0,#+1 \ 000009D0 6C0385E5 STR R0,[R5, #+876] 6858 start_vibra(); \ 000009D4 ........ BL start_vibra 6859 is_gprs_online=1; \ 000009D8 0100A0E3 MOV R0,#+1 \ 000009DC A40385E5 STR R0,[R5, #+932] 6860 strcpy(logmsg,LG_GRGPRSUP); \ 000009E0 A31F87E2 ADD R1,R7,#+652 \ 000009E4 0800A0E1 MOV R0,R8 \ 000009E8 1A0000EF SWI +26 6861 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 000009EC 000099E5 LDR R0,[R9, #+0] \ 000009F0 0A20A0E1 MOV R2,R10 \ 000009F4 D830A0E3 MOV R3,#+216 \ 000009F8 930001E0 MUL R1,R3,R0 \ 000009FC 0400A0E1 MOV R0,R4 \ 00000A00 4D0000EF SWI +77 6862 return(1); \ 00000A04 070000EA B ??maincsm_onmessage_54 6863 case ENIP_DNR_HOST_BY_NAME: 6864 if ((int)msg->data1==DNR_ID) \ ??maincsm_onmessage_52: \ 00000A08 F00395E5 LDR R0,[R5, #+1008] \ 00000A0C 000051E1 CMP R1,R0 \ 00000A10 EAFFFF1A BNE ??maincsm_onmessage_49 6865 { 6866 if (DNR_TRIES) SUBPROC((void *)create_connect); \ 00000A14 F40395E5 LDR R0,[R5, #+1012] \ 00000A18 000050E3 CMP R0,#+0 \ 00000A1C E7FFFF0A BEQ ??maincsm_onmessage_49 \ 00000A20 ........ LDR R0,??DataTable245 ;; create_connect \ ??maincsm_onmessage_55: \ 00000A24 710100EF SWI +369 6867 } 6868 return(1); \ ??maincsm_onmessage_54: \ 00000A28 0100A0E3 MOV R0,#+1 \ ??maincsm_onmessage_56: \ 00000A2C 24D08DE2 ADD SP,SP,#+36 \ 00000A30 F08FBDE8 POP {R4-R11,PC} 6869 } 6870 if ((int)msg->data1==sock) \ ??maincsm_onmessage_53: \ 00000A34 882395E5 LDR R2,[R5, #+904] \ 00000A38 020051E1 CMP R1,R2 \ 00000A3C DFFFFF1A BNE ??maincsm_onmessage_49 6871 { 6872 //Если наш сокет 6873 if ((((unsigned int)msg->data0)>>28)==0xA) \ 00000A40 201EA0E1 LSR R1,R0,#+28 \ 00000A44 0A0051E3 CMP R1,#+10 \ 00000A48 0200001A BNE ??maincsm_onmessage_57 6874 { 6875 //Принят пакет 6876 ProcessPacket((TPKT *)msg->data0); \ 00000A4C ........ BL ProcessPacket 6877 return(0); \ 00000A50 0000A0E3 MOV R0,#+0 \ 00000A54 F4FFFFEA B ??maincsm_onmessage_56 6878 } 6879 switch((int)msg->data0) \ ??maincsm_onmessage_57: \ 00000A58 841395E5 LDR R1,[R5, #+900] \ 00000A5C ........ LDR R11,??DataTable246 ;; VIBR_ON_CONNECT \ 00000A60 8A0040E2 SUB R0,R0,#+138 \ 00000A64 050050E3 CMP R0,#+5 \ 00000A68 D4FFFF8A BHI ??maincsm_onmessage_49 \ 00000A6C 012F8FE2 ADR R2,??maincsm_onmessage_1 \ 00000A70 D02092E1 LDRSB R2,[R2, R0] \ 00000A74 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_1: \ 00000A78 42423D01 DC8 +66,+66,+61,+1 \ 00000A7C 4B470000 DC8 +75,+71,+0,+0 6880 { 6881 case ENIP_SOCK_CONNECTED: 6882 if (connect_state==1) \ ??maincsm_onmessage_58: \ 00000A80 010051E3 CMP R1,#+1 \ 00000A84 3500001A BNE ??maincsm_onmessage_59 6883 { 6884 if(VIBR_ON_CONNECT) \ 00000A88 00009BE5 LDR R0,[R11, #+0] 6885 vibra_count=2; 6886 else 6887 vibra_count=1; 6888 start_vibra(); 6889 //Соединение установленно, посылаем пакет login 6890 strcpy(logmsg, LG_GRTRYLOGIN); 6891 { 6892 int i=strlen(PASS); 6893 TPKT *p=malloc(sizeof(PKT)+i); 6894 p->pkt.uin=UIN; \ 00000A8C ........ LDR R4,??DataTable261 ;; UIN \ 00000A90 000050E3 CMP R0,#+0 \ 00000A94 0200A013 MOVNE R0,#+2 \ 00000A98 0100A003 MOVEQ R0,#+1 \ 00000A9C 6C0385E5 STR R0,[R5, #+876] \ 00000AA0 ........ BL start_vibra \ 00000AA4 A91F87E2 ADD R1,R7,#+676 \ 00000AA8 0800A0E1 MOV R0,R8 \ 00000AAC 1A0000EF SWI +26 \ 00000AB0 A4019FE5 LDR R0,??maincsm_onmessage_5+0xC ;; PASS \ 00000AB4 1B0000EF SWI +27 \ 00000AB8 0080A0E1 MOV R8,R0 \ 00000ABC 080088E2 ADD R0,R8,#+8 \ 00000AC0 140000EF SWI +20 6895 p->pkt.type=T_REQLOGIN; 6896 p->pkt.data_len=i; 6897 memcpy(p->data,PASS,i); \ 00000AC4 90119FE5 LDR R1,??maincsm_onmessage_5+0xC ;; PASS \ 00000AC8 0090A0E1 MOV R9,R0 \ 00000ACC 000094E5 LDR R0,[R4, #+0] \ 00000AD0 0820A0E1 MOV R2,R8 \ 00000AD4 000089E5 STR R0,[R9, #+0] \ 00000AD8 0100A0E3 MOV R0,#+1 \ 00000ADC B400C9E1 STRH R0,[R9, #+4] \ 00000AE0 B680C9E1 STRH R8,[R9, #+6] \ 00000AE4 080089E2 ADD R0,R9,#+8 \ 00000AE8 1E0100EF SWI +286 6898 SUBPROC((void *)send_login,0,p); \ 00000AEC A8019FE5 LDR R0,??maincsm_onmessage_5+0x4C ;; send_login \ 00000AF0 0920A0E1 MOV R2,R9 \ 00000AF4 0010A0E3 MOV R1,#+0 \ 00000AF8 710100EF SWI +369 6899 } 6900 GROUP_CACHE=0; \ 00000AFC B06385E5 STR R6,[R5, #+944] 6901 SENDMSGCOUNT=0; //Начинаем отсчет \ 00000B00 086385E5 STR R6,[R5, #+776] 6902 if (!FindGroupByID(0)) AddGroup(0,LG_GROUPNOTINLIST); \ 00000B04 0600A0E1 MOV R0,R6 \ 00000B08 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000B0C 000050E3 CMP R0,#+0 \ 00000B10 0100001A BNE ??maincsm_onmessage_60 \ 00000B14 AD1F87E2 ADD R1,R7,#+692 \ 00000B18 ........ _BLF AddGroup,??AddGroup??rA 6903 if (!FindContactByUin(UIN) && (IsShowLoopback)) AddContact(UIN, LG_CLLOOPBACK,0,1); \ ??maincsm_onmessage_60: \ 00000B1C 000094E5 LDR R0,[R4, #+0] \ 00000B20 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000B24 000050E3 CMP R0,#+0 \ 00000B28 0800001A BNE ??maincsm_onmessage_61 \ 00000B2C 6C019FE5 LDR R0,??maincsm_onmessage_5+0x50 ;; IsShowLoopback \ 00000B30 000090E5 LDR R0,[R0, #+0] \ 00000B34 000050E3 CMP R0,#+0 \ 00000B38 0400000A BEQ ??maincsm_onmessage_61 \ 00000B3C 000094E5 LDR R0,[R4, #+0] \ 00000B40 0130A0E3 MOV R3,#+1 \ 00000B44 0020A0E3 MOV R2,#+0 \ 00000B48 B01F87E2 ADD R1,R7,#+704 \ 00000B4C ........ _BLF AddContact,??AddContact??rA 6904 SUBPROC((void *)LoadLocalCL); \ ??maincsm_onmessage_61: \ 00000B50 4C019FE5 LDR R0,??maincsm_onmessage_5+0x54 ;; LoadLocalCL \ 00000B54 710100EF SWI +369 6905 SMART_REDRAW(); \ 00000B58 ........ BL SMART_REDRAW \ 00000B5C B1FFFFEA B ??maincsm_onmessage_54 6906 } 6907 else 6908 { 6909 ShowMSG(1,(int)LG_MSGILLEGMSGCON); \ ??maincsm_onmessage_59: \ 00000B60 B31F87E2 ADD R1,R7,#+716 \ ??maincsm_onmessage_62: \ 00000B64 0100A0E3 MOV R0,#+1 \ 00000B68 480100EF SWI +328 \ 00000B6C ADFFFFEA B ??maincsm_onmessage_54 6910 } 6911 break; 6912 case ENIP_SOCK_DATA_READ: 6913 if (connect_state>=2) \ ??maincsm_onmessage_63: \ 00000B70 020051E3 CMP R1,#+2 6914 { 6915 //Если посылали send 6916 SUBPROC((void *)get_answer); \ 00000B74 2C019FA5 LDRGE R0,??maincsm_onmessage_5+0x58 ;; get_answer \ 00000B78 A9FFFFAA BGE ??maincsm_onmessage_55 6917 //SMART_REDRAW(); 6918 } 6919 else 6920 { 6921 ShowMSG(1,(int)LG_MSGILLEGMSGREA); \ 00000B7C BD1F87E2 ADD R1,R7,#+756 \ 00000B80 F7FFFFEA B ??maincsm_onmessage_62 6922 } 6923 break; 6924 case ENIP_BUFFER_FREE: 6925 case ENIP_BUFFER_FREE1: 6926 SUBPROC((void *)SendAnswer,0,0); \ ??maincsm_onmessage_64: \ 00000B84 ........ LDR R0,??DataTable248 ;; SendAnswer \ 00000B88 0020A0E3 MOV R2,#+0 \ 00000B8C 0210A0E1 MOV R1,R2 \ 00000B90 710100EF SWI +369 \ 00000B94 A3FFFFEA B ??maincsm_onmessage_54 6927 break; 6928 case ENIP_SOCK_REMOTE_CLOSED: 6929 //Закрыт со стороны сервера 6930 if (connect_state) \ ??maincsm_onmessage_65: \ 00000B98 000051E3 CMP R1,#+0 \ 00000B9C 87FFFF0A BEQ ??maincsm_onmessage_49 6931 SUBPROC((void *)end_socket); \ 00000BA0 ........ LDR R0,??DataTable249 ;; end_socket \ 00000BA4 9EFFFFEA B ??maincsm_onmessage_55 6932 break; 6933 case ENIP_SOCK_CLOSED: 6934 //strcpy(logmsg, "No connection"); 6935 //Dump not received 6936 /* if (RXstate>(-(int)sizeof(PKT))) 6937 { 6938 unsigned int err; 6939 int f=fopen("4:\\NATICQ.dump",A_ReadWrite+A_Create+A_Truncate+A_BIN,P_READ+P_WRITE,&err); 6940 if (f!=-1) 6941 { 6942 fwrite(f,&RXbuf,RXstate+sizeof(PKT),&err); 6943 fclose(f,&err); 6944 } 6945 }*/ 6946 FillAllOffline(); \ ??maincsm_onmessage_66: \ 00000BA8 ........ _BLF FillAllOffline,??FillAllOffline??rA 6947 RecountMenu(NULL,1); \ 00000BAC 0110A0E3 MOV R1,#+1 \ 00000BB0 0000A0E3 MOV R0,#+0 \ 00000BB4 ........ BL RecountMenu 6948 connect_state=0; 6949 sock=-1; \ 00000BB8 0600E0E1 MVN R0,R6 \ 00000BBC 880385E5 STR R0,[R5, #+904] 6950 if(VIBR_ON_CONNECT) \ 00000BC0 00009BE5 LDR R0,[R11, #+0] \ 00000BC4 846385E5 STR R6,[R5, #+900] \ 00000BC8 000050E3 CMP R0,#+0 6951 vibra_count=4; \ 00000BCC 0400A013 MOVNE R0,#+4 6952 else 6953 vibra_count=1; \ 00000BD0 0100A003 MOVEQ R0,#+1 \ 00000BD4 6C0385E5 STR R0,[R5, #+876] 6954 6955 start_vibra(); \ 00000BD8 ........ BL start_vibra 6956 if (sendq_p) \ 00000BDC A00395E5 LDR R0,[R5, #+928] \ 00000BE0 000050E3 CMP R0,#+0 \ 00000BE4 0400000A BEQ ??maincsm_onmessage_67 6957 { 6958 snprintf(logmsg,255,"Disconnected, %d bytes not sended!",sendq_l); \ 00000BE8 9C3395E5 LDR R3,[R5, #+924] \ 00000BEC C62F87E2 ADD R2,R7,#+792 \ 00000BF0 FF10A0E3 MOV R1,#+255 \ 00000BF4 0800A0E1 MOV R0,R8 \ 00000BF8 1B0100EF SWI +283 6959 } 6960 SMART_REDRAW(); \ ??maincsm_onmessage_67: \ 00000BFC ........ BL SMART_REDRAW 6961 SUBPROC((void *)ClearSendQ); \ 00000C00 ........ LDR R0,??DataTable250 ;; ClearSendQ \ 00000C04 710100EF SWI +369 6962 #ifdef EVILFOX 6963 if (!disautorecconect) GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*12,do_reconnect); 6964 #else 6965 if (!disautorecconect) \ 00000C08 580395E5 LDR R0,[R5, #+856] \ 00000C0C 000050E3 CMP R0,#+0 \ 00000C10 6AFFFF1A BNE ??maincsm_onmessage_49 6966 { 6967 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000C14 000099E5 LDR R0,[R9, #+0] \ 00000C18 0A20A0E1 MOV R2,R10 \ 00000C1C D830A0E3 MOV R3,#+216 \ 00000C20 930001E0 MUL R1,R3,R0 \ 00000C24 0400A0E1 MOV R0,R4 \ 00000C28 4D0000EF SWI +77 6968 snprintf(logmsg,255,"%s\nReconect after %d second...",logmsg, RECONNECT_TIME); //2058 \ 00000C2C 000099E5 LDR R0,[R9, #+0] \ 00000C30 0830A0E1 MOV R3,R8 \ 00000C34 01002DE9 PUSH {R0} \ 00000C38 CF2F87E2 ADD R2,R7,#+828 \ 00000C3C FF10A0E3 MOV R1,#+255 \ 00000C40 0800A0E1 MOV R0,R8 \ 00000C44 1B0100EF SWI +283 \ 00000C48 04D08DE2 ADD SP,SP,#+4 \ 00000C4C 75FFFFEA B ??maincsm_onmessage_54 \ ??maincsm_onmessage_5: \ 00000C50 ........ DC32 CheckDoubleRun \ 00000C54 ........ DC32 ProcessNextSmile \ 00000C58 ........ DC32 ProcessNextXStatImg \ 00000C5C ........ DC32 PASS \ 00000C60 ........ DC32 IDLEICON_Y \ 00000C64 ........ DC32 IDLEICON_X \ 00000C68 ........ DC32 XStatusesIconArray \ 00000C6C ........ DC32 IDLEICON_YX \ 00000C70 ........ DC32 XStatusesImgList \ 00000C74 ........ DC32 IDLEICON_XX \ 00000C78 ........ DC32 msg_d_x \ 00000C7C ........ DC32 msg_d_y \ 00000C80 ........ DC32 spaco2 \ 00000C84 ........ DC32 Is_Unread_On \ 00000C88 ........ DC32 unread_Y \ 00000C8C ........ DC32 unread_X \ 00000C90 ........ DC32 Is_Online_On \ 00000C94 ........ DC32 online_y \ 00000C98 ........ DC32 online_x \ 00000C9C ........ DC32 send_login \ 00000CA0 ........ DC32 IsShowLoopback \ 00000CA4 ........ DC32 LoadLocalCL \ 00000CA8 ........ DC32 get_answer 6969 } 6970 6971 #endif 6972 break; 6973 } 6974 } 6975 } 6976 return(1); 6977 } 6978 6979 6980 //-------------------- ICON IN ICONBAR --------------------// 6981 6982 //kluchnik 26.03.08 6983 #ifdef NEWSGOLD 6984 #pragma swi_number=0x27 6985 __swi __arm void AddIconToIconBar(int pic, short *num); 6986 6987 \ In segment CODE, align 4, keep-with-next 6988 void addIconBar(short* num) 6989 { \ addIconBar: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 6990 int icn; 6991 if(ShowStatusIcon==1 || ShowStatusIcon==3) \ 00000004 ........ LDR R5,??DataTable251 ;; NumStatusToIconBar \ 00000008 ........ LDR R6,??DataTable252 ;; icons \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ LDR R0,??DataTable253 ;; ShowStatusIcon \ 00000014 000090E5 LDR R0,[R0, #+0] \ 00000018 010050E3 CMP R0,#+1 \ 0000001C 03005013 CMPNE R0,#+3 \ 00000020 4700001A BNE ??addIconBar_0 6992 { 6993 if(total_unread) \ 00000024 A80396E5 LDR R0,[R6, #+936] \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 3D00000A BEQ ??addIconBar_1 6994 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); \ ??addIconBar_2: \ 00000030 000095E5 LDR R0,[R5, #+0] \ 00000034 0410A0E1 MOV R1,R4 \ 00000038 0D0080E2 ADD R0,R0,#+13 \ ??addIconBar_3: \ 0000003C 270000EF SWI +39 6995 else 6996 { 6997 switch(connect_state) 6998 { 6999 case 0: 7000 icn=IS_OFFLINE; break; 7001 case 3: 7002 icn=CurrentStatus; //IS_ONLINE; 7003 break; 7004 default: 7005 icn=IS_UNKNOWN; break; 7006 } 7007 AddIconToIconBar(NumStatusToIconBar + icn, num); 7008 } 7009 } 7010 else 7011 { 7012 if(ShowStatusIcon==2)//Если показывать и иконбаре везде,кроме идле 7013 { 7014 if(!(IsIdleUiOnTop())) 7015 { 7016 if(total_unread) 7017 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); 7018 else 7019 { 7020 switch(connect_state) 7021 { 7022 case 0: 7023 icn=IS_OFFLINE; break; 7024 case 3: 7025 icn=CurrentStatus; //IS_ONLINE; 7026 break; 7027 default: 7028 icn=IS_UNKNOWN; break; 7029 } 7030 AddIconToIconBar(NumStatusToIconBar + icn, num); 7031 } 7032 } 7033 } 7034 } 7035 7036 #ifdef kluchnik 7037 if(ADDITION_UIN!=0) \ ??addIconBar_4: \ 00000040 8C019FE5 LDR R0,??addIconBar_5 ;; ADDITION_UIN \ 00000044 ........ LDR R7,??DataTable254 ;; NumXStatusToIconBar \ 00000048 000090E5 LDR R0,[R0, #+0] \ 0000004C FF80A0E3 MOV R8,#+255 \ 00000050 FF8C88E3 ORR R8,R8,#0xFF00 \ 00000054 000050E3 CMP R0,#+0 \ 00000058 1C00000A BEQ ??addIconBar_6 7038 { 7039 CLIST *t; 7040 t=FindContactByUin(ADDITION_UIN); \ 0000005C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000060 0090B0E1 MOVS R9,R0 7041 if(t) 7042 { 7043 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) \ 00000064 B405D911 LDRHNE R0,[R9, #+84] \ 00000068 08005011 CMPNE R0,R8 \ 0000006C 1700000A BEQ ??addIconBar_6 \ 00000070 0900A0E1 MOV R0,R9 \ 00000074 ........ BL GetIconIndex \ 00000078 0E0050E3 CMP R0,#+14 \ 0000007C 1300000A BEQ ??addIconBar_6 7044 { 7045 if(show_add_state) \ 00000080 50019FE5 LDR R0,??addIconBar_5+0x4 ;; show_add_state \ 00000084 000090E5 LDR R0,[R0, #+0] \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 0500000A BEQ ??addIconBar_7 7046 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); \ 00000090 0900A0E1 MOV R0,R9 \ 00000094 ........ BL GetIconIndex \ 00000098 002095E5 LDR R2,[R5, #+0] \ 0000009C 0410A0E1 MOV R1,R4 \ 000000A0 020080E0 ADD R0,R0,R2 \ 000000A4 270000EF SWI +39 7047 if(show_add_xstate && t->xstate!=0) \ ??addIconBar_7: \ 000000A8 2C019FE5 LDR R0,??addIconBar_5+0x8 ;; show_add_xstate \ 000000AC 000090E5 LDR R0,[R0, #+0] \ 000000B0 000050E3 CMP R0,#+0 \ 000000B4 B605D911 LDRHNE R0,[R9, #+86] \ 000000B8 00005013 CMPNE R0,#+0 \ 000000BC 0300000A BEQ ??addIconBar_6 7048 AddIconToIconBar(NumXStatusToIconBar + t->xstate, num); \ 000000C0 002097E5 LDR R2,[R7, #+0] \ 000000C4 0410A0E1 MOV R1,R4 \ 000000C8 020080E0 ADD R0,R0,R2 \ 000000CC 270000EF SWI +39 7049 } 7050 } 7051 } 7052 CLIST *t; 7053 t=FindContactByUin(438532198); \ ??addIconBar_6: \ 000000D0 ........ LDR R0,??DataTable255 ;; 0x1a237866 \ 000000D4 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000000D8 0090A0E1 MOV R9,R0 7054 7055 if(show_xstatus==2 || show_xstatus==3) \ 000000DC ........ LDR R0,??DataTable256 ;; show_xstatus \ 000000E0 000090E5 LDR R0,[R0, #+0] \ 000000E4 020050E3 CMP R0,#+2 \ 000000E8 03005013 CMPNE R0,#+3 \ 000000EC F083BD18 POPNE {R4-R9,PC} 7056 { 7057 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) \ 000000F0 B405D9E1 LDRH R0,[R9, #+84] \ 000000F4 080050E1 CMP R0,R8 \ 000000F8 2300000A BEQ ??addIconBar_8 \ 000000FC 0900A0E1 MOV R0,R9 \ 00000100 ........ BL GetIconIndex \ 00000104 0E0050E3 CMP R0,#+14 \ 00000108 1F00000A BEQ ??addIconBar_8 7058 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); \ 0000010C 0900A0E1 MOV R0,R9 \ 00000110 ........ BL GetIconIndex \ 00000114 002095E5 LDR R2,[R5, #+0] \ 00000118 0410A0E1 MOV R1,R4 \ 0000011C 020080E0 ADD R0,R0,R2 \ 00000120 270000EF SWI +39 \ 00000124 F083BDE8 POP {R4-R9,PC} \ ??addIconBar_1: \ 00000128 840396E5 LDR R0,[R6, #+900] \ 0000012C 000050E3 CMP R0,#+0 \ 00000130 1100000A BEQ ??addIconBar_9 \ 00000134 030050E2 SUBS R0,R0,#+3 \ 00000138 0E00001A BNE ??addIconBar_10 \ ??addIconBar_11: \ 0000013C 180396E5 LDR R0,[R6, #+792] \ 00000140 0D0000EA B ??addIconBar_9 \ ??addIconBar_0: \ 00000144 020050E3 CMP R0,#+2 \ 00000148 BCFFFF1A BNE ??addIconBar_4 \ 0000014C C50000EF SWI +197 \ 00000150 000050E3 CMP R0,#+0 \ 00000154 B9FFFF1A BNE ??addIconBar_4 \ 00000158 A80396E5 LDR R0,[R6, #+936] \ 0000015C 000050E3 CMP R0,#+0 \ 00000160 B2FFFF1A BNE ??addIconBar_2 \ 00000164 840396E5 LDR R0,[R6, #+900] \ 00000168 000050E3 CMP R0,#+0 \ 0000016C 0200000A BEQ ??addIconBar_9 \ 00000170 030050E2 SUBS R0,R0,#+3 \ 00000174 F0FFFF0A BEQ ??addIconBar_11 \ ??addIconBar_10: \ 00000178 0E00A0E3 MOV R0,#+14 \ ??addIconBar_9: \ 0000017C 002095E5 LDR R2,[R5, #+0] \ 00000180 0410A0E1 MOV R1,R4 \ 00000184 020080E0 ADD R0,R0,R2 \ 00000188 ABFFFFEA B ??addIconBar_3 7059 else 7060 if(total_unread2 && total_unread2<10) \ ??addIconBar_8: \ 0000018C FC0296E5 LDR R0,[R6, #+764] \ 00000190 000050E3 CMP R0,#+0 \ 00000194 0600000A BEQ ??addIconBar_12 \ 00000198 0A0050E3 CMP R0,#+10 \ 0000019C 040000AA BGE ??addIconBar_12 7061 AddIconToIconBar(8200 + total_unread2, num); \ 000001A0 0410A0E1 MOV R1,R4 \ 000001A4 0820A0E3 MOV R2,#+8 \ 000001A8 802D82E3 ORR R2,R2,#0x2000 \ 000001AC 000082E0 ADD R0,R2,R0 \ 000001B0 050000EA B ??addIconBar_13 7062 else 7063 if(CurrentXStatus!=0) \ ??addIconBar_12: \ 000001B4 1C0396E5 LDR R0,[R6, #+796] \ 000001B8 000050E3 CMP R0,#+0 \ 000001BC F083BD08 POPEQ {R4-R9,PC} 7064 AddIconToIconBar(NumXStatusToIconBar+CurrentXStatus,num); \ 000001C0 002097E5 LDR R2,[R7, #+0] \ 000001C4 0410A0E1 MOV R1,R4 \ 000001C8 020080E0 ADD R0,R0,R2 \ ??addIconBar_13: \ 000001CC 270000EF SWI +39 7065 } 7066 #else 7067 if(ADDITION_UIN!=0) 7068 { 7069 CLIST *t; 7070 t=FindContactByUin(ADDITION_UIN); 7071 if(t) 7072 { 7073 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) 7074 { 7075 if(show_add_state) 7076 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); 7077 if(show_add_xstate) 7078 AddIconToIconBar(NumXStatusToIconBar + t->xstate, num); 7079 } 7080 } 7081 } 7082 #endif 7083 } \ 000001D0 F083BDE8 POP {R4-R9,PC} ;; return \ ??addIconBar_5: \ 000001D4 ........ DC32 ADDITION_UIN \ 000001D8 ........ DC32 show_add_state \ 000001DC ........ DC32 show_add_xstate 7084 7085 typedef struct 7086 { 7087 char check_name[8]; 7088 int addr; 7089 }ICONBAR_H; 7090 7091 #endif 7092 \ In segment DATA_C, align 4, align-sorted 7093 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 7094 \ In segment DATA_Z, align 4, align-sorted 7095 unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 7096 7097 struct 7098 { 7099 CSM_DESC maincsm; 7100 WSHDR maincsm_name; 7101 #ifdef NEWSGOLD 7102 ICONBAR_H iconbar_handler; 7103 #endif 7104 }MAINCSM = 7105 { 7106 { 7107 maincsm_onmessage, 7108 maincsm_oncreate, 7109 #ifdef NEWSGOLD 7110 0, 7111 0, 7112 0, 7113 0, 7114 #endif 7115 maincsm_onclose, 7116 sizeof(MAIN_CSM), 7117 1, 7118 &minus11 7119 }, 7120 { 7121 maincsm_name_body, 7122 NAMECSM_MAGIC1, 7123 NAMECSM_MAGIC2, 7124 0x0, 7125 139 7126 } 7127 #ifdef NEWSGOLD 7128 , 7129 { 7130 "IconBar" 7131 } 7132 #endif 7133 }; 7134 \ In segment CODE, align 4, keep-with-next 7135 void UpdateCSMname(void) 7136 { 7137 wsprintf((WSHDR *)(&MAINCSM.maincsm_name), "NATICQ: %d",UIN); \ UpdateCSMname: \ 00000000 ........ LDR R0,??DataTable261 ;; UIN \ 00000004 10109FE5 LDR R1,??UpdateCSMname_0 ;; `?` \ 00000008 00402DE9 PUSH {LR} \ 0000000C 002090E5 LDR R2,[R0, #+0] \ 00000010 08009FE5 LDR R0,??UpdateCSMname_0+0x4 ;; icons + 268 \ 00000014 240100EF SWI +292 7138 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??UpdateCSMname_0: \ 0000001C ........ DC32 `?` \ 00000020 ........ DC32 icons + 268 7139 7140 #ifdef NEWSGOLD \ In segment CODE, align 4, keep-with-next 7141 void SetIconBarHandler() 7142 { 7143 MAINCSM.iconbar_handler.addr = (int)addIconBar; \ SetIconBarHandler: \ 00000000 08009FE5 LDR R0,??SetIconBarHandler_0 ;; icons + 296 \ 00000004 ........ LDR R1,??DataTable267 ;; addIconBar \ 00000008 001080E5 STR R1,[R0, #+0] 7144 } \ 0000000C 1EFF2FE1 BX LR ;; return \ ??SetIconBarHandler_0: \ 00000010 ........ DC32 icons + 296 7145 #endif 7146 \ In segment CODE, align 4, keep-with-next 7147 int main(char *filename) 7148 { \ main: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 7149 MAIN_CSM main_csm; 7150 char *s; 7151 int len; 7152 WSHDR *ws; 7153 UpdateConfig(); 7154 //InitConfig(); 7155 7156 sprintf(PINGO, "Ping None"); \ 00000004 ........ LDR R4,??DataTable278 ;; icons \ 00000008 ........ LDR R5,??DataTable260 ;; Canvas \ 0000000C 2CD04DE2 SUB SP,SP,#+44 \ 00000010 0060A0E1 MOV R6,R0 \ 00000014 ........ _BLF UpdateConfig,??UpdateConfig??rA \ 00000018 D71F85E2 ADD R1,R5,#+860 \ 0000001C 4C00A0E3 MOV R0,#+76 \ 00000020 580D80E3 ORR R0,R0,#0x1600 \ 00000024 040080E0 ADD R0,R0,R4 \ 00000028 160000EF SWI +22 7157 7158 s=strrchr(filename,'\\'); 7159 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 7160 strncpy(elf_path,filename,len); \ 00000040 0720A0E1 MOV R2,R7 \ 00000044 0610A0E1 MOV R1,R6 \ 00000048 5C00A0E3 MOV R0,#+92 \ 0000004C 400E80E3 ORR R0,R0,#0x400 \ 00000050 040080E0 ADD R0,R0,R4 \ 00000054 160100EF SWI +278 7161 elf_path[len]=0; \ 00000058 040087E0 ADD R0,R7,R4 \ 0000005C 0010A0E3 MOV R1,#+0 \ 00000060 5C14C0E5 STRB R1,[R0, #+1116] 7162 if (!UIN) \ 00000064 ........ LDR R0,??DataTable261 ;; UIN \ 00000068 000090E5 LDR R0,[R0, #+0] \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 1500001A BNE ??main_1 7163 { 7164 LockSched(); \ 00000074 460100EF SWI +326 7165 ShowMSG(1,(int)LG_MSGNOUINPASS); \ 00000078 DA1F85E2 ADD R1,R5,#+872 \ 0000007C 0100A0E3 MOV R0,#+1 \ 00000080 480100EF SWI +328 7166 ws=AllocWS(150); \ 00000084 9600A0E3 MOV R0,#+150 \ 00000088 250100EF SWI +293 7167 str_2ws(ws,suc_config_name,128); \ 0000008C ........ LDR R1,??DataTable262 ;; suc_config_name \ 00000090 0040A0E1 MOV R4,R0 \ 00000094 8020A0E3 MOV R2,#+128 \ 00000098 6C0100EF SWI +364 7168 ExecuteFile(ws,0,0); \ 0000009C 0020A0E3 MOV R2,#+0 \ 000000A0 0010A0E3 MOV R1,#+0 \ 000000A4 0400A0E1 MOV R0,R4 \ 000000A8 940000EF SWI +148 7169 FreeWS(ws); \ 000000AC 0400A0E1 MOV R0,R4 \ 000000B0 290100EF SWI +297 7170 UnlockSched(); \ 000000B4 470100EF SWI +327 7171 SUBPROC((void *)ElfKiller); \ 000000B8 ........ LDR R0,??DataTable263 ;; ElfKiller \ 000000BC 710100EF SWI +369 7172 return 0; \ 000000C0 0000A0E3 MOV R0,#+0 \ 000000C4 2CD08DE2 ADD SP,SP,#+44 \ 000000C8 F080BDE8 POP {R4-R7,PC} 7173 } 7174 ReadDefSettings(); 7175 setup_ICONS(); 7176 LoadXStatusText(); 7177 UpdateCSMname(); 7178 LockSched(); 7179 maincsm_id=CreateCSM(&MAINCSM.maincsm,&main_csm,0); 7180 UnlockSched(); 7181 7182 PrintLibInit(1); 7183 FontPathInit((char *)fontpath, 1); \ ??main_1: \ 000000CC ........ LDR R6,??DataTable264 ;; fontpath \ 000000D0 ........ BL ReadDefSettings \ 000000D4 ........ BL setup_ICONS \ 000000D8 ........ _BLF LoadXStatusText,??LoadXStatusText??rA \ 000000DC ........ BL UpdateCSMname \ 000000E0 460100EF SWI +326 \ 000000E4 0020A0E3 MOV R2,#+0 \ 000000E8 0D10A0E1 MOV R1,SP \ 000000EC E40084E2 ADD R0,R4,#+228 \ 000000F0 070100EF SWI +263 \ 000000F4 000384E5 STR R0,[R4, #+768] \ 000000F8 470100EF SWI +327 \ 000000FC 0100A0E3 MOV R0,#+1 \ 00000100 ........ _BLF PrintLibInit,??PrintLibInit??rA \ 00000104 0110A0E3 MOV R1,#+1 \ 00000108 0600A0E1 MOV R0,R6 \ 0000010C ........ _BLF FontPathInit,??FontPathInit??rA 7184 SetFontColor((char*)fontColor,(char*)bgrColor,1); \ 00000110 ........ LDR R1,??DataTable265 ;; bgrColor \ 00000114 ........ LDR R0,??DataTable266 ;; fontColor \ 00000118 0120A0E3 MOV R2,#+1 \ 0000011C ........ _BLF SetFontColor,??SetFontColor??rA 7185 SetCanvasFlag(1); \ 00000120 0100A0E3 MOV R0,#+1 \ 00000124 ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 7186 away_timer(); \ 00000128 ........ BL away_timer 7187 #ifdef NEWSGOLD 7188 SetIconBarHandler(); \ 0000012C ........ LDR R0,??DataTable267 ;; addIconBar \ 00000130 280184E5 STR R0,[R4, #+296] 7189 #endif 7190 #ifdef kluchnik 7191 switch(CurrentPrivateStatus) \ 00000134 680394E5 LDR R0,[R4, #+872] \ 00000138 040050E3 CMP R0,#+4 \ 0000013C 0E00008A BHI ??main_2 \ 00000140 011F8FE2 ADR R1,??main_0 \ 00000144 0010D1E7 LDRB R1,[R1, R0] \ 00000148 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??main_0: \ 0000014C 01030507 DC8 +1,+3,+5,+7 \ 00000150 09000000 DC8 +9,+0,+0,+0 7192 { 7193 case 0: ICON_HD=ICON_ALL_CAN_SEE; break; \ ??main_3: \ 00000154 1700A0E3 MOV R0,#+23 \ 00000158 060000EA B ??main_4 7194 case 1: ICON_HD=ICON_NOBODY_CAN_SEE; break; \ ??main_5: \ 0000015C 1B00A0E3 MOV R0,#+27 \ 00000160 040000EA B ??main_4 7195 case 2: ICON_HD=ICON_VISLIST_CAN_SEE; break; \ ??main_6: \ 00000164 1800A0E3 MOV R0,#+24 \ 00000168 020000EA B ??main_4 7196 case 3: ICON_HD=ICON_INVISLIST_CANNOT_SEE; break; \ ??main_7: \ 0000016C 1900A0E3 MOV R0,#+25 \ 00000170 000000EA B ??main_4 7197 case 4: ICON_HD=ICON_CONTACTLIST_CAN_SEE; break; \ ??main_8: \ 00000174 1A00A0E3 MOV R0,#+26 \ ??main_4: \ 00000178 BC0384E5 STR R0,[R4, #+956] 7198 } 7199 #endif 7200 if(fonto==1) \ ??main_2: \ 0000017C ........ LDR R0,??DataTable268 ;; fonto \ 00000180 000090E5 LDR R0,[R0, #+0] \ 00000184 010050E3 CMP R0,#+1 \ 00000188 0B00001A BNE ??main_9 7201 { 7202 char *heght=malloc(64); \ 0000018C 4000A0E3 MOV R0,#+64 \ 00000190 140000EF SWI +20 \ 00000194 0070A0E1 MOV R7,R0 7203 sprintf(heght, "%s2240.png", fontpath); \ 00000198 0620A0E1 MOV R2,R6 \ 0000019C A01F85E2 ADD R1,R5,#+640 \ 000001A0 160000EF SWI +22 7204 paused_height=GetImgHeight((int)heght); \ 000001A4 0700A0E1 MOV R0,R7 \ 000001A8 210000EF SWI +33 \ 000001AC D40284E5 STR R0,[R4, #+724] 7205 mfree(heght); \ 000001B0 0700A0E1 MOV R0,R7 \ 000001B4 150000EF SWI +21 \ 000001B8 010000EA B ??main_10 7206 } 7207 else 7208 paused_height=fonto-100; \ ??main_9: \ 000001BC 640040E2 SUB R0,R0,#+100 \ 000001C0 D40284E5 STR R0,[R4, #+724] 7209 GBS_StartTimerProc(&ping_tmr, 12000, Pinger2); \ ??main_10: \ 000001C4 ........ LDR R2,??DataTable269 ;; Pinger2 \ 000001C8 E010A0E3 MOV R1,#+224 \ 000001CC B81D81E3 ORR R1,R1,#0x2E00 \ 000001D0 3C00A0E3 MOV R0,#+60 \ 000001D4 580D80E3 ORR R0,R0,#0x1600 \ 000001D8 040080E0 ADD R0,R0,R4 \ 000001DC 4D0000EF SWI +77 7210 upTime(); \ 000001E0 ........ BL upTime 7211 #ifdef NEWSGOLD 7212 ScreenSaverTimer(); \ 000001E4 ........ BL ScreenSaverTimer 7213 initTags(); \ 000001E8 ........ _BLF initTags,??initTags??rA 7214 #endif 7215 AutoChangeStatus_timer(); \ 000001EC ........ BL AutoChangeStatus_timer 7216 init_time_zone(); \ 000001F0 ........ BL init_time_zone 7217 AddKeybMsgHook((void *)my_keyhook); \ 000001F4 ........ LDR R0,??DataTable270 ;; my_keyhook \ 000001F8 2B0100EF SWI +299 7218 return 0; \ 000001FC 0000A0E3 MOV R0,#+0 \ 00000200 2CD08DE2 ADD SP,SP,#+44 \ 00000204 F080BDE8 POP {R4-R7,PC} ;; return 7219 } 7220 7221 //=========================================================== 7222 // Edit chat 7223 //=========================================================== 7224 \ In segment CODE, align 4, keep-with-next 7225 void edchat_locret(void){} \ edchat_locret: \ 00000000 1EFF2FE1 BX LR ;; return 7226 \ In segment CODE, align 4, keep-with-next 7227 char *ExtractAnswer(WSHDR *ws) 7228 { \ ExtractAnswer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 7229 S_SMILES *t; 7230 int c; 7231 int len=0; 7232 int scur; 7233 char *msg=NULL; 7234 unsigned short *wsbody=ws->wsbody; \ 00000004 005090E5 LDR R5,[R0, #+0] \ 00000008 0040A0E3 MOV R4,#+0 7235 int wslen=wsbody[0]; \ 0000000C B060D5E1 LDRH R6,[R5, #+0] \ 00000010 0070A0E3 MOV R7,#+0 7236 if (wslen) \ 00000014 000056E3 CMP R6,#+0 \ 00000018 3C00000A BEQ ??ExtractAnswer_0 7237 { 7238 for (int i=0; i=0xE100) 7242 { 7243 t=FindSmileByUni(c); 7244 if (t) 7245 { 7246 if (t->lines) 7247 { 7248 len+=strlen(t->lines->text); 7249 } 7250 } 7251 else len++; 7252 } 7253 else len++; 7254 } 7255 7256 msg=malloc(len+1); \ ??ExtractAnswer_2: \ 00000024 010084E2 ADD R0,R4,#+1 \ 00000028 140000EF SWI +20 \ 0000002C 0070A0E1 MOV R7,R0 7257 scur=0; \ 00000030 0090A0E3 MOV R9,#+0 7258 for (int wcur=0; wcur=0xE100) 7263 { 7264 t=FindSmileByUni(c); 7265 if (t) 7266 { 7267 int w; 7268 char *s; 7269 if (t->lines) 7270 { 7271 s=t->lines->text; 7272 while ((w=*s++) && scurnext)) \ FindNextActiveContact: \ ??FindNextActiveContact_0: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0300000A BEQ ??FindNextActiveContact_1 7299 { 7300 if (t->isactive) return t; \ 0000000C AC1090E5 LDR R1,[R0, #+172] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 F9FFFF0A BEQ ??FindNextActiveContact_0 \ 00000018 1EFF2FE1 BX LR 7301 } 7302 t=(CLIST *)(&cltop); \ ??FindNextActiveContact_1: \ 0000001C ........ LDR R0,??DataTable272 ;; icons + 940 \ 00000020 020000EA B ??FindNextActiveContact_2 7303 while(t=(CLIST *)(t->next)) 7304 { 7305 if (t->isactive) return t; \ ??FindNextActiveContact_3: \ 00000024 AC1090E5 LDR R1,[R0, #+172] \ 00000028 000051E3 CMP R1,#+0 \ 0000002C 1EFF2F11 BXNE LR 7306 } \ ??FindNextActiveContact_2: \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 F9FFFF1A BNE ??FindNextActiveContact_3 7307 return NULL; \ 0000003C 1EFF2FE1 BX LR ;; return 7308 } 7309 \ In segment CODE, align 4, keep-with-next 7310 CLIST *FindPrevActiveContact(CLIST *t) 7311 { 7312 CLIST *cl; 7313 CLIST *cl_active=NULL; 7314 cl=(CLIST *)(&cltop); \ FindPrevActiveContact: \ 00000000 ........ LDR R2,??DataTable272 ;; icons + 940 \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 020000EA B ??FindPrevActiveContact_0 7315 7316 7317 while(cl=cl->next) 7318 { 7319 if (cl==t) 7320 { 7321 if (cl_active==NULL) break; 7322 else return (cl_active); 7323 } 7324 else 7325 { 7326 if (cl->isactive) cl_active=cl; \ ??FindPrevActiveContact_1: \ 0000000C AC3092E5 LDR R3,[R2, #+172] \ 00000010 000053E3 CMP R3,#+0 \ 00000014 0210A011 MOVNE R1,R2 7327 } \ ??FindPrevActiveContact_0: \ 00000018 002092E5 LDR R2,[R2, #+0] \ 0000001C 000052E3 CMP R2,#+0 \ 00000020 0500000A BEQ ??FindPrevActiveContact_2 \ 00000024 000052E1 CMP R2,R0 \ 00000028 F7FFFF1A BNE ??FindPrevActiveContact_1 \ 0000002C 000051E3 CMP R1,#+0 \ 00000030 0100000A BEQ ??FindPrevActiveContact_2 \ ??FindPrevActiveContact_3: \ 00000034 0100A0E1 MOV R0,R1 \ 00000038 1EFF2FE1 BX LR ;; return 7328 } 7329 while(t) \ ??FindPrevActiveContact_2: \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 FBFFFF0A BEQ ??FindPrevActiveContact_3 7330 { 7331 if (t->isactive) cl_active=t; \ 00000044 AC2090E5 LDR R2,[R0, #+172] \ 00000048 000052E3 CMP R2,#+0 \ 0000004C 0010A011 MOVNE R1,R0 7332 t=t->next; \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 F8FFFFEA B ??FindPrevActiveContact_2 7333 } 7334 return cl_active; 7335 } 7336 7337 \ In segment CODE, align 4, keep-with-next 7338 void ed_options_handler(USR_MENU_ITEM *item) 7339 { \ ed_options_handler: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 7340 EDCHAT_STRUCT *ed_struct=item->user_pointer; 7341 CLIST *t; 7342 int i=item->cur_item; 7343 if (item->type==0) \ 00000004 ........ LDR R5,??DataTable278 ;; icons \ 00000008 58D04DE2 SUB SP,SP,#+88 \ 0000000C ........ LDR R7,??DataTable274 ;; IsMultiBuffer \ 00000010 0080A0E1 MOV R8,R0 \ 00000014 0000D8E5 LDRB R0,[R8, #+0] \ 00000018 044098E5 LDR R4,[R8, #+4] \ 0000001C B860D8E1 LDRH R6,[R8, #+8] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 3200001A BNE ??ed_options_handler_0 7344 { 7345 if(IsMultiBuffer) \ 00000028 003097E5 LDR R3,[R7, #+0] \ 0000002C 741395E5 LDR R1,[R5, #+884] \ 00000030 102094E5 LDR R2,[R4, #+16] \ 00000034 0C0098E5 LDR R0,[R8, #+12] \ 00000038 70949FE5 LDR R9,??ed_options_handler_1 ;; `?` \ 0000003C 000053E3 CMP R3,#+0 \ 00000040 1900000A BEQ ??ed_options_handler_2 7346 { 7347 switch(i) \ 00000044 0630B0E1 MOVS R3,R6 \ 00000048 0600000A BEQ ??ed_options_handler_3 \ 0000004C 013056E2 SUBS R3,R6,#+1 \ 00000050 0D00000A BEQ ??ed_options_handler_4 \ 00000054 013053E2 SUBS R3,R3,#+1 \ 00000058 0D00000A BEQ ??ed_options_handler_5 \ 0000005C 013053E2 SUBS R3,R3,#+1 \ 00000060 0D00000A BEQ ??ed_options_handler_6 \ 00000064 0E0000EA B ??ed_options_handler_7 7348 { 7349 case 0: 7350 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ed_options_handler_3: \ 00000068 040094E5 LDR R0,[R4, #+4] \ 0000006C 820100EF SWI +386 \ 00000070 081094E5 LDR R1,[R4, #+8] \ 00000074 010050E1 CMP R0,R1 \ 00000078 0C009815 LDRNE R0,[R8, #+12] \ 0000007C 08108912 ADDNE R1,R9,#+8 7351 ascii2ws(item->ws,"Cмайлы"); \ 00000080 0C009805 LDREQ R0,[R8, #+12] \ 00000084 0910A001 MOVEQ R1,R9 \ 00000088 180000EA B ??ed_options_handler_8 7352 else 7353 ascii2ws(item->ws,"В буфер"); 7354 break; 7355 case 1: 7356 ascii2ws(item->ws,"Из буфера"); \ ??ed_options_handler_4: \ 0000008C 101089E2 ADD R1,R9,#+16 \ 00000090 160000EA B ??ed_options_handler_8 7357 break; 7358 case 2: 7359 ascii2ws(item->ws,"Команда"); \ ??ed_options_handler_5: \ 00000094 1C1089E2 ADD R1,R9,#+28 \ 00000098 140000EA B ??ed_options_handler_8 7360 break; 7361 case 3: 7362 ascii2ws(item->ws,"Очистить буфер"); \ ??ed_options_handler_6: \ 0000009C 241089E2 ADD R1,R9,#+36 \ 000000A0 120000EA B ??ed_options_handler_8 7363 break; 7364 default: 7365 i-=4; \ ??ed_options_handler_7: \ 000000A4 046046E2 SUB R6,R6,#+4 7366 if (iloaded_templates) ascii2ws(item->ws,templates_lines[i]); \ 000000A8 0D0000EA B ??ed_options_handler_9 7367 break; 7368 } 7369 } 7370 else 7371 { 7372 switch(i) \ ??ed_options_handler_2: \ 000000AC 0630B0E1 MOVS R3,R6 \ 000000B0 0400000A BEQ ??ed_options_handler_10 \ 000000B4 013056E2 SUBS R3,R6,#+1 \ 000000B8 0400000A BEQ ??ed_options_handler_11 \ 000000BC 013053E2 SUBS R3,R3,#+1 \ 000000C0 0400000A BEQ ??ed_options_handler_12 \ 000000C4 050000EA B ??ed_options_handler_13 7373 { 7374 case 0: 7375 ascii2ws(item->ws,LG_MNUEDNEXTACT); \ ??ed_options_handler_10: \ 000000C8 341089E2 ADD R1,R9,#+52 \ 000000CC 070000EA B ??ed_options_handler_8 7376 break; 7377 case 1: 7378 ascii2ws(item->ws,LG_MNUEDPREVACT); \ ??ed_options_handler_11: \ 000000D0 441089E2 ADD R1,R9,#+68 \ 000000D4 050000EA B ??ed_options_handler_8 7379 break; 7380 case 2: 7381 ascii2ws(item->ws,"Команды"); \ ??ed_options_handler_12: \ 000000D8 541089E2 ADD R1,R9,#+84 \ 000000DC 030000EA B ??ed_options_handler_8 7382 break; 7383 default: 7384 i-=3; \ ??ed_options_handler_13: \ 000000E0 036046E2 SUB R6,R6,#+3 7385 if (iloaded_templates) ascii2ws(item->ws,templates_lines[i]); \ ??ed_options_handler_9: \ 000000E4 020056E1 CMP R6,R2 \ 000000E8 EE0000AA BGE ??ed_options_handler_14 \ 000000EC 061191E7 LDR R1,[R1, +R6, LSL #+2] \ ??ed_options_handler_8: \ 000000F0 ........ _BLF ascii2ws,??ascii2ws??rA 7386 break; 7387 } 7388 } 7389 } 7390 7391 if (item->type==1) \ ??ed_options_handler_0: \ 000000F4 0000D8E5 LDRB R0,[R8, #+0] \ 000000F8 010050E3 CMP R0,#+1 \ 000000FC E900001A BNE ??ed_options_handler_14 7392 { 7393 if(IsMultiBuffer) \ 00000100 003097E5 LDR R3,[R7, #+0] \ 00000104 741395E5 LDR R1,[R5, #+884] \ 00000108 102094E5 LDR R2,[R4, #+16] \ 0000010C 040094E5 LDR R0,[R4, #+4] \ 00000110 000053E3 CMP R3,#+0 \ 00000114 9C00000A BEQ ??ed_options_handler_15 7394 { 7395 switch(i) \ 00000118 0630B0E1 MOVS R3,R6 \ 0000011C 0600000A BEQ ??ed_options_handler_16 \ 00000120 013056E2 SUBS R3,R6,#+1 \ 00000124 4200000A BEQ ??ed_options_handler_17 \ 00000128 013053E2 SUBS R3,R3,#+1 \ 0000012C 5C00000A BEQ ??ed_options_handler_18 \ 00000130 013053E2 SUBS R3,R3,#+1 \ 00000134 5D00000A BEQ ??ed_options_handler_19 \ 00000138 600000EA B ??ed_options_handler_20 7396 { 7397 case 0: 7398 { 7399 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ed_options_handler_16: \ 0000013C 820100EF SWI +386 \ 00000140 081094E5 LDR R1,[R4, #+8] \ 00000144 010050E1 CMP R0,R1 \ 00000148 0200001A BNE ??ed_options_handler_21 7400 CreateSmileSelectGUI(ed_struct); \ 0000014C 0400A0E1 MOV R0,R4 \ 00000150 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA \ 00000154 340000EA B ??ed_options_handler_22 7401 else 7402 { 7403 int ed; 7404 EDITCONTROL ec; 7405 EDITCONTROL ec_hdr; 7406 7407 ed=EDIT_GetFocus(ed_struct->ed_chatgui); \ ??ed_options_handler_21: \ 00000158 040094E5 LDR R0,[R4, #+4] \ 0000015C 820100EF SWI +386 \ 00000160 0060A0E1 MOV R6,R0 7408 ExtractEditControl(ed_struct->ed_chatgui,ed,&ec); \ 00000164 040094E5 LDR R0,[R4, #+4] \ 00000168 2C208DE2 ADD R2,SP,#+44 \ 0000016C 0610A0E1 MOV R1,R6 \ 00000170 690100EF SWI +361 7409 ExtractEditControl(ed_struct->ed_chatgui,ed-1,&ec_hdr); \ 00000174 040094E5 LDR R0,[R4, #+4] \ 00000178 0D20A0E1 MOV R2,SP \ 0000017C 011046E2 SUB R1,R6,#+1 \ 00000180 690100EF SWI +361 7410 7411 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 00000184 D80295E5 LDR R0,[R5, #+728] \ 00000188 230100EF SWI +291 \ 0000018C 012080E2 ADD R2,R0,#+1 \ 00000190 D80295E5 LDR R0,[R5, #+728] \ 00000194 3E10A0E3 MOV R1,#+62 \ 00000198 1D0000EF SWI +29 7412 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 0000019C D80295E5 LDR R0,[R5, #+728] \ 000001A0 230100EF SWI +291 \ 000001A4 012080E2 ADD R2,R0,#+1 \ 000001A8 D80295E5 LDR R0,[R5, #+728] \ 000001AC 2010A0E3 MOV R1,#+32 \ 000001B0 1D0000EF SWI +29 7413 wstrcat(wsBuffer,ec_hdr.pWS); \ 000001B4 28109DE5 LDR R1,[SP, #+40] \ 000001B8 D80295E5 LDR R0,[R5, #+728] \ 000001BC 210100EF SWI +289 7414 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 000001C0 D80295E5 LDR R0,[R5, #+728] \ 000001C4 230100EF SWI +291 \ 000001C8 012080E2 ADD R2,R0,#+1 \ 000001CC D80295E5 LDR R0,[R5, #+728] \ 000001D0 0A10A0E3 MOV R1,#+10 \ 000001D4 1D0000EF SWI +29 7415 7416 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 000001D8 D80295E5 LDR R0,[R5, #+728] \ 000001DC 230100EF SWI +291 \ 000001E0 012080E2 ADD R2,R0,#+1 \ 000001E4 D80295E5 LDR R0,[R5, #+728] \ 000001E8 3E10A0E3 MOV R1,#+62 \ 000001EC 1D0000EF SWI +29 7417 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 000001F0 D80295E5 LDR R0,[R5, #+728] \ 000001F4 230100EF SWI +291 \ 000001F8 012080E2 ADD R2,R0,#+1 \ 000001FC D80295E5 LDR R0,[R5, #+728] \ 00000200 2010A0E3 MOV R1,#+32 \ 00000204 1D0000EF SWI +29 7418 wstrcat(wsBuffer,ec.pWS); \ 00000208 54109DE5 LDR R1,[SP, #+84] \ 0000020C D80295E5 LDR R0,[R5, #+728] \ 00000210 210100EF SWI +289 7419 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 00000214 D80295E5 LDR R0,[R5, #+728] \ 00000218 230100EF SWI +291 \ 0000021C 012080E2 ADD R2,R0,#+1 \ 00000220 D80295E5 LDR R0,[R5, #+728] \ 00000224 0A10A0E3 MOV R1,#+10 \ 00000228 1D0000EF SWI +29 \ ??ed_options_handler_22: \ 0000022C 58D08DE2 ADD SP,SP,#+88 \ 00000230 F083BDE8 POP {R4-R9,PC} 7420 } 7421 } 7422 break; 7423 case 1: 7424 { 7425 EDITCONTROL ec; 7426 WSHDR *ws; 7427 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); \ ??ed_options_handler_17: \ 00000234 081094E5 LDR R1,[R4, #+8] \ 00000238 0D20A0E1 MOV R2,SP \ 0000023C 690100EF SWI +361 7428 ws=AllocWS(ec.pWS->wsbody[0]+wsBuffer->wsbody[0]+1); \ 00000240 28009DE5 LDR R0,[SP, #+40] \ 00000244 D81295E5 LDR R1,[R5, #+728] \ 00000248 000090E5 LDR R0,[R0, #+0] \ 0000024C 001091E5 LDR R1,[R1, #+0] \ 00000250 B000D0E1 LDRH R0,[R0, #+0] \ 00000254 B010D1E1 LDRH R1,[R1, #+0] \ 00000258 000081E0 ADD R0,R1,R0 \ 0000025C 010080E2 ADD R0,R0,#+1 \ 00000260 250100EF SWI +293 7429 wstrcpy(ws,ec.pWS); \ 00000264 28109DE5 LDR R1,[SP, #+40] \ 00000268 0060A0E1 MOV R6,R0 \ 0000026C 1F0100EF SWI +287 7430 wstrcat(ws,wsBuffer); \ 00000270 D81295E5 LDR R1,[R5, #+728] \ 00000274 0600A0E1 MOV R0,R6 \ 00000278 210100EF SWI +289 7431 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ws); \ 0000027C 040094E5 LDR R0,[R4, #+4] \ 00000280 081094E5 LDR R1,[R4, #+8] \ 00000284 0620A0E1 MOV R2,R6 \ 00000288 DE0100EF SWI +478 7432 EDIT_SetCursorPos(ed_struct->ed_chatgui,wstrlen(ws)); \ 0000028C 0600A0E1 MOV R0,R6 \ 00000290 230100EF SWI +291 \ 00000294 0010A0E1 MOV R1,R0 \ 00000298 040094E5 LDR R0,[R4, #+4] \ 0000029C D40100EF SWI +468 \ 000002A0 E1FFFFEA B ??ed_options_handler_22 7433 } 7434 break; 7435 case 2: 7436 DispCmdMenu(ed_struct); \ ??ed_options_handler_18: \ 000002A4 0400A0E1 MOV R0,R4 \ 000002A8 ........ BL DispCmdMenu \ 000002AC DEFFFFEA B ??ed_options_handler_22 7437 break; 7438 case 3: 7439 CutWSTR(wsBuffer,0); \ ??ed_options_handler_19: \ 000002B0 D80295E5 LDR R0,[R5, #+728] \ 000002B4 0010A0E3 MOV R1,#+0 \ 000002B8 260100EF SWI +294 \ 000002BC DAFFFFEA B ??ed_options_handler_22 7440 break; 7441 default: 7442 i-=4; \ ??ed_options_handler_20: \ 000002C0 046046E2 SUB R6,R6,#+4 7443 if (iloaded_templates) \ 000002C4 020056E1 CMP R6,R2 \ 000002C8 760000AA BGE ??ed_options_handler_14 7444 { 7445 EDITCONTROL ec; 7446 WSHDR *ed_ws; 7447 int c; 7448 char *p=templates_lines[i]; \ 000002CC 065191E7 LDR R5,[R1, +R6, LSL #+2] 7449 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); \ 000002D0 081094E5 LDR R1,[R4, #+8] \ 000002D4 0D20A0E1 MOV R2,SP \ 000002D8 690100EF SWI +361 7450 ed_ws=AllocWS(ec.pWS->wsbody[0]+strlen(p)); \ 000002DC 0500A0E1 MOV R0,R5 \ 000002E0 1B0000EF SWI +27 \ 000002E4 28109DE5 LDR R1,[SP, #+40] \ 000002E8 001091E5 LDR R1,[R1, #+0] \ 000002EC B010D1E1 LDRH R1,[R1, #+0] \ 000002F0 010080E0 ADD R0,R0,R1 \ 000002F4 250100EF SWI +293 7451 wstrcpy(ed_ws,ec.pWS); \ 000002F8 28109DE5 LDR R1,[SP, #+40] \ 000002FC 0060A0E1 MOV R6,R0 \ 00000300 1F0100EF SWI +287 7452 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ 00000304 040094E5 LDR R0,[R4, #+4] \ 00000308 820100EF SWI +386 \ 0000030C 081094E5 LDR R1,[R4, #+8] \ 00000310 010050E1 CMP R0,R1 \ 00000314 1800001A BNE ??ed_options_handler_23 7453 { 7454 int pos=EDIT_GetCursorPos(ed_struct->ed_chatgui); \ 00000318 040094E5 LDR R0,[R4, #+4] \ 0000031C D30100EF SWI +467 \ 00000320 0070A0E1 MOV R7,R0 \ 00000324 050000EA B ??ed_options_handler_24 7455 while(c=*p++) 7456 { 7457 wsInsertChar(ed_ws,char8to16(c),pos++); \ ??ed_options_handler_25: \ 00000328 ........ _BLF char8to16,??char8to16??rA \ 0000032C 0720A0E1 MOV R2,R7 \ 00000330 0010A0E1 MOV R1,R0 \ 00000334 0600A0E1 MOV R0,R6 \ 00000338 1D0000EF SWI +29 \ 0000033C 017087E2 ADD R7,R7,#+1 7458 } \ ??ed_options_handler_24: \ 00000340 ........ LDRB R0,[R5], #+1 \ 00000344 000050E3 CMP R0,#+0 \ 00000348 F6FFFF1A BNE ??ed_options_handler_25 7459 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ ??ed_options_handler_26: \ 0000034C 081094E5 LDR R1,[R4, #+8] \ 00000350 040094E5 LDR R0,[R4, #+4] \ 00000354 0620A0E1 MOV R2,R6 \ 00000358 DE0100EF SWI +478 7460 EDIT_SetCursorPos(ed_struct->ed_chatgui,pos); \ 0000035C 040094E5 LDR R0,[R4, #+4] \ 00000360 0710A0E1 MOV R1,R7 \ 00000364 D40100EF SWI +468 \ 00000368 4C0000EA B ??ed_options_handler_27 7461 } 7462 else 7463 { 7464 while(c=*p++) 7465 { 7466 wsAppendChar(ed_ws,char8to16(c)); \ ??ed_options_handler_28: \ 0000036C ........ _BLF char8to16,??char8to16??rA \ 00000370 0010A0E1 MOV R1,R0 \ 00000374 0600A0E1 MOV R0,R6 \ 00000378 1C0000EF SWI +28 7467 } \ ??ed_options_handler_23: \ 0000037C ........ LDRB R0,[R5], #+1 \ 00000380 000050E3 CMP R0,#+0 \ 00000384 F8FFFF1A BNE ??ed_options_handler_28 7468 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 00000388 400000EA B ??ed_options_handler_29 7469 } 7470 FreeWS(ed_ws); 7471 } 7472 break; 7473 } 7474 } 7475 else 7476 { 7477 switch(i) \ ??ed_options_handler_15: \ 0000038C 007094E5 LDR R7,[R4, #+0] \ 00000390 0630B0E1 MOVS R3,R6 \ 00000394 0400000A BEQ ??ed_options_handler_30 \ 00000398 013056E2 SUBS R3,R6,#+1 \ 0000039C 0D00000A BEQ ??ed_options_handler_31 \ 000003A0 013053E2 SUBS R3,R3,#+1 \ 000003A4 BEFFFF0A BEQ ??ed_options_handler_18 \ 000003A8 0D0000EA B ??ed_options_handler_32 7478 { 7479 case 0: 7480 t=FindNextActiveContact(ed_struct->ed_contact); \ ??ed_options_handler_30: \ 000003AC 0700A0E1 MOV R0,R7 \ 000003B0 ........ BL FindNextActiveContact \ ??ed_options_handler_33: \ 000003B4 0040B0E1 MOVS R4,R0 7481 if (t && t!=ed_struct->ed_contact) \ 000003B8 07005411 CMPNE R4,R7 \ 000003BC 3900000A BEQ ??ed_options_handler_14 7482 { 7483 GeneralFunc_flag1(edchat_id,1); \ 000003C0 B80395E5 LDR R0,[R5, #+952] \ 000003C4 0110A0E3 MOV R1,#+1 \ 000003C8 3D0100EF SWI +317 7484 CreateEditChat(t); \ 000003CC 0400A0E1 MOV R0,R4 \ 000003D0 ........ BL CreateEditChat \ 000003D4 94FFFFEA B ??ed_options_handler_22 7485 } 7486 break; 7487 case 1: 7488 t=FindPrevActiveContact(ed_struct->ed_contact); \ ??ed_options_handler_31: \ 000003D8 0700A0E1 MOV R0,R7 \ 000003DC ........ BL FindPrevActiveContact \ 000003E0 F3FFFFEA B ??ed_options_handler_33 7489 if (t && t!=ed_struct->ed_contact) 7490 { 7491 GeneralFunc_flag1(edchat_id,1); 7492 CreateEditChat(t); 7493 } 7494 break; 7495 case 2: 7496 DispCmdMenu(ed_struct); 7497 break; 7498 default: 7499 i-=3; \ ??ed_options_handler_32: \ 000003E4 036046E2 SUB R6,R6,#+3 7500 if (iloaded_templates) \ 000003E8 020056E1 CMP R6,R2 \ 000003EC 2D0000AA BGE ??ed_options_handler_14 7501 { 7502 EDITCONTROL ec; 7503 WSHDR *ed_ws; 7504 int c; 7505 char *p=templates_lines[i]; \ 000003F0 065191E7 LDR R5,[R1, +R6, LSL #+2] 7506 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); \ 000003F4 081094E5 LDR R1,[R4, #+8] \ 000003F8 0D20A0E1 MOV R2,SP \ 000003FC 690100EF SWI +361 7507 ed_ws=AllocWS(ec.pWS->wsbody[0]+strlen(p)); \ 00000400 0500A0E1 MOV R0,R5 \ 00000404 1B0000EF SWI +27 \ 00000408 28109DE5 LDR R1,[SP, #+40] \ 0000040C 001091E5 LDR R1,[R1, #+0] \ 00000410 B010D1E1 LDRH R1,[R1, #+0] \ 00000414 010080E0 ADD R0,R0,R1 \ 00000418 250100EF SWI +293 7508 wstrcpy(ed_ws,ec.pWS); \ 0000041C 28109DE5 LDR R1,[SP, #+40] \ 00000420 0060A0E1 MOV R6,R0 \ 00000424 1F0100EF SWI +287 7509 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ 00000428 040094E5 LDR R0,[R4, #+4] \ 0000042C 820100EF SWI +386 \ 00000430 081094E5 LDR R1,[R4, #+8] \ 00000434 010050E1 CMP R0,R1 \ 00000438 1100001A BNE ??ed_options_handler_34 7510 { 7511 int pos=EDIT_GetCursorPos(ed_struct->ed_chatgui); \ 0000043C 040094E5 LDR R0,[R4, #+4] \ 00000440 D30100EF SWI +467 \ 00000444 0070A0E1 MOV R7,R0 \ 00000448 050000EA B ??ed_options_handler_35 7512 while(c=*p++) 7513 { 7514 wsInsertChar(ed_ws,char8to16(c),pos++); \ ??ed_options_handler_36: \ 0000044C ........ _BLF char8to16,??char8to16??rA \ 00000450 0010A0E1 MOV R1,R0 \ 00000454 0720A0E1 MOV R2,R7 \ 00000458 0600A0E1 MOV R0,R6 \ 0000045C 1D0000EF SWI +29 \ 00000460 017087E2 ADD R7,R7,#+1 7515 } \ ??ed_options_handler_35: \ 00000464 ........ LDRB R0,[R5], #+1 \ 00000468 000050E3 CMP R0,#+0 \ 0000046C F6FFFF1A BNE ??ed_options_handler_36 7516 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 00000470 B5FFFFEA B ??ed_options_handler_26 7517 EDIT_SetCursorPos(ed_struct->ed_chatgui,pos); 7518 } 7519 else 7520 { 7521 while(c=*p++) 7522 { 7523 wsAppendChar(ed_ws,char8to16(c)); \ ??ed_options_handler_37: \ 00000474 ........ _BLF char8to16,??char8to16??rA \ 00000478 0010A0E1 MOV R1,R0 \ 0000047C 0600A0E1 MOV R0,R6 \ 00000480 1C0000EF SWI +28 7524 } \ ??ed_options_handler_34: \ 00000484 ........ LDRB R0,[R5], #+1 \ 00000488 000050E3 CMP R0,#+0 \ 0000048C F8FFFF1A BNE ??ed_options_handler_37 7525 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ ??ed_options_handler_29: \ 00000490 081094E5 LDR R1,[R4, #+8] \ 00000494 040094E5 LDR R0,[R4, #+4] \ 00000498 0620A0E1 MOV R2,R6 \ 0000049C DE0100EF SWI +478 7526 } 7527 FreeWS(ed_ws); \ ??ed_options_handler_27: \ 000004A0 0600A0E1 MOV R0,R6 \ 000004A4 290100EF SWI +297 7528 } 7529 break; 7530 } 7531 } 7532 } 7533 } \ ??ed_options_handler_14: \ 000004A8 58D08DE2 ADD SP,SP,#+88 ;; stack cleaning \ 000004AC F083BDE8 POP {R4-R9,PC} ;; return \ ??ed_options_handler_1: \ 000004B0 ........ DC32 `?` 7534 \ In segment CODE, align 4, keep-with-next 7535 unsigned short * wstrstr(unsigned short *ws, char *str, int *wslen, int len) 7536 { \ wstrstr: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0070A0E1 MOV R7,R0 \ 00000008 0140A0E1 MOV R4,R1 \ 0000000C 0250A0E1 MOV R5,R2 \ 00000010 0360A0E1 MOV R6,R3 \ 00000014 030000EA B ??wstrstr_0 7537 char *s; 7538 unsigned short *w; 7539 int l; 7540 7541 while(*wslen >= len) 7542 { 7543 s = str; 7544 w = ws; 7545 l = len; 7546 for(; (char16to8(*w) == *s) && l; w++, s++, l--); 7547 if(!l) return ws; 7548 ws++; 7549 (*wslen)--; \ ??wstrstr_1: \ 00000018 000095E5 LDR R0,[R5, #+0] \ 0000001C 027087E2 ADD R7,R7,#+2 \ 00000020 010040E2 SUB R0,R0,#+1 \ 00000024 000085E5 STR R0,[R5, #+0] \ ??wstrstr_0: \ 00000028 000095E5 LDR R0,[R5, #+0] \ 0000002C 060050E1 CMP R0,R6 \ 00000030 0F0000BA BLT ??wstrstr_2 \ 00000034 0480A0E1 MOV R8,R4 \ 00000038 0790A0E1 MOV R9,R7 \ 0000003C 06A0A0E1 MOV R10,R6 \ 00000040 000000EA B ??wstrstr_3 \ ??wstrstr_4: \ 00000044 01A04AE2 SUB R10,R10,#+1 \ ??wstrstr_3: \ 00000048 ........ LDRH R0,[R9], #+2 \ 0000004C ........ _BLF char16to8,??char16to8??rA \ 00000050 ........ LDRB R1,[R8], #+1 \ 00000054 010050E1 CMP R0,R1 \ 00000058 0100001A BNE ??wstrstr_5 \ 0000005C 00005AE3 CMP R10,#+0 \ 00000060 F7FFFF1A BNE ??wstrstr_4 \ ??wstrstr_5: \ 00000064 00005AE3 CMP R10,#+0 \ 00000068 EAFFFF1A BNE ??wstrstr_1 \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 F087BDE8 POP {R4-R10,PC} 7550 } 7551 return 0; \ ??wstrstr_2: \ 00000074 0000A0E3 MOV R0,#+0 \ 00000078 F087BDE8 POP {R4-R10,PC} ;; return 7552 7553 } 7554 \ In segment CODE, align 4, keep-with-next 7555 int IsUrl(WSHDR *ws, int pos, char *link) 7556 { \ IsUrl: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0150A0E1 MOV R5,R1 7557 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 7558 7559 int len = wstrlen(ws); 7560 unsigned short *str = ws->wsbody+1, *tmp, *begin; 7561 tmp = str; 7562 7563 begin = str = wstrstr(str, "http://", &len, 7); \ 0000000C ........ LDR R7,??DataTable276 ;; `?` \ 00000010 0260A0E1 MOV R6,R2 \ 00000014 230100EF SWI +291 \ 00000018 00008DE5 STR R0,[SP, #+0] \ 0000001C 04009DE5 LDR R0,[SP, #+4] \ 00000020 0730A0E3 MOV R3,#+7 \ 00000024 000090E5 LDR R0,[R0, #+0] \ 00000028 0D20A0E1 MOV R2,SP \ 0000002C 028080E2 ADD R8,R0,#+2 \ 00000030 941087E2 ADD R1,R7,#+148 \ 00000034 0800A0E1 MOV R0,R8 \ 00000038 ........ BL wstrstr \ 0000003C 00B0A0E1 MOV R11,R0 \ 00000040 0040A0E1 MOV R4,R0 \ 00000044 A890A0E1 LSR R9,R8,#+1 \ 00000048 02A045E2 SUB R10,R5,#+2 \ 0000004C 060000EA B ??IsUrl_0 7564 7565 while(str && (begin-tmp <= pos)) 7566 { 7567 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 7568 if(str-tmp >= pos-2) 7569 { 7570 for(;begin < str; begin++, link++) 7571 *link = char16to8(*begin); 7572 link[str-begin] = 0; 7573 return 1; 7574 } 7575 begin = str = wstrstr(str, "http://", &len, 7); \ ??IsUrl_1: \ 00000050 0730A0E3 MOV R3,#+7 \ 00000054 0D20A0E1 MOV R2,SP \ 00000058 941087E2 ADD R1,R7,#+148 \ 0000005C 0B00A0E1 MOV R0,R11 \ 00000060 ........ BL wstrstr \ 00000064 00B0A0E1 MOV R11,R0 \ 00000068 0040A0E1 MOV R4,R0 \ ??IsUrl_0: \ 0000006C 00005BE3 CMP R11,#+0 \ 00000070 0200000A BEQ ??IsUrl_2 \ 00000074 A40069E0 RSB R0,R9,R4, LSR #+1 \ 00000078 000055E1 CMP R5,R0 \ 0000007C 0B0000AA BGE ??IsUrl_3 7576 } 7577 7578 len = wstrlen(ws); \ ??IsUrl_2: \ 00000080 04009DE5 LDR R0,[SP, #+4] \ 00000084 230100EF SWI +291 \ 00000088 00008DE5 STR R0,[SP, #+0] 7579 begin = str = wstrstr(tmp, "www.", &len, 4); \ 0000008C 0430A0E3 MOV R3,#+4 \ 00000090 0D20A0E1 MOV R2,SP \ 00000094 9C1087E2 ADD R1,R7,#+156 \ 00000098 0800A0E1 MOV R0,R8 \ 0000009C 200000EA B ??IsUrl_4 \ ??IsUrl_5: \ 000000A0 00109DE5 LDR R1,[SP, #+0] \ 000000A4 02B08BE2 ADD R11,R11,#+2 \ 000000A8 011041E2 SUB R1,R1,#+1 \ 000000AC 00108DE5 STR R1,[SP, #+0] \ ??IsUrl_3: \ 000000B0 00009DE5 LDR R0,[SP, #+0] \ 000000B4 000050E3 CMP R0,#+0 \ 000000B8 0600000A BEQ ??IsUrl_6 \ 000000BC B000DBE1 LDRH R0,[R11, #+0] \ 000000C0 ........ _BLF char16to8,??char16to8??rA \ 000000C4 0010A0E1 MOV R1,R0 \ 000000C8 0700A0E1 MOV R0,R7 \ 000000CC 180000EF SWI +24 \ 000000D0 000050E3 CMP R0,#+0 \ 000000D4 F1FFFF1A BNE ??IsUrl_5 \ ??IsUrl_6: \ 000000D8 AB0069E0 RSB R0,R9,R11, LSR #+1 \ 000000DC 0A0050E1 CMP R0,R10 \ 000000E0 DAFFFFBA BLT ??IsUrl_1 \ ??IsUrl_7: \ 000000E4 0B0054E1 CMP R4,R11 \ 000000E8 0300002A BCS ??IsUrl_8 \ 000000EC ........ LDRH R0,[R4], #+2 \ 000000F0 ........ _BLF char16to8,??char16to8??rA \ 000000F4 ........ STRB R0,[R6], #+1 \ 000000F8 F9FFFFEA B ??IsUrl_7 \ ??IsUrl_8: \ 000000FC AB00A0E1 LSR R0,R11,#+1 \ 00000100 A40040E0 SUB R0,R0,R4, LSR #+1 \ 00000104 0010A0E3 MOV R1,#+0 \ 00000108 0610C0E7 STRB R1,[R0, +R6] \ 0000010C 0100A0E3 MOV R0,#+1 \ 00000110 F68FBDE8 POP {R1,R2,R4-R11,PC} 7580 while(str && (begin-tmp <= pos)) 7581 { 7582 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 7583 if(str-tmp >= pos-2) 7584 { 7585 for(;begin < str; begin++, link++) 7586 *link = char16to8(*begin); 7587 link[str-begin] = 0; 7588 return 1; 7589 } 7590 begin = str = wstrstr(str, "www.", &len, 4); \ ??IsUrl_9: \ 00000114 0430A0E3 MOV R3,#+4 \ 00000118 0D20A0E1 MOV R2,SP \ 0000011C 9C1087E2 ADD R1,R7,#+156 \ 00000120 0B00A0E1 MOV R0,R11 \ ??IsUrl_4: \ 00000124 ........ BL wstrstr \ 00000128 00B0A0E1 MOV R11,R0 \ 0000012C 0040A0E1 MOV R4,R0 \ 00000130 00005BE3 CMP R11,#+0 \ 00000134 0200000A BEQ ??IsUrl_10 \ 00000138 A40069E0 RSB R0,R9,R4, LSR #+1 \ 0000013C 000055E1 CMP R5,R0 \ 00000140 050000AA BGE ??IsUrl_11 7591 } 7592 return 0; \ ??IsUrl_10: \ 00000144 0000A0E3 MOV R0,#+0 \ 00000148 F68FBDE8 POP {R1,R2,R4-R11,PC} ;; return \ ??IsUrl_12: \ 0000014C 00109DE5 LDR R1,[SP, #+0] \ 00000150 02B08BE2 ADD R11,R11,#+2 \ 00000154 011041E2 SUB R1,R1,#+1 \ 00000158 00108DE5 STR R1,[SP, #+0] \ ??IsUrl_11: \ 0000015C 00009DE5 LDR R0,[SP, #+0] \ 00000160 000050E3 CMP R0,#+0 \ 00000164 0600000A BEQ ??IsUrl_13 \ 00000168 B000DBE1 LDRH R0,[R11, #+0] \ 0000016C ........ _BLF char16to8,??char16to8??rA \ 00000170 0010A0E1 MOV R1,R0 \ 00000174 0700A0E1 MOV R0,R7 \ 00000178 180000EF SWI +24 \ 0000017C 000050E3 CMP R0,#+0 \ 00000180 F1FFFF1A BNE ??IsUrl_12 \ ??IsUrl_13: \ 00000184 AB0069E0 RSB R0,R9,R11, LSR #+1 \ 00000188 0A0050E1 CMP R0,R10 \ 0000018C E0FFFFBA BLT ??IsUrl_9 \ ??IsUrl_14: \ 00000190 0B0054E1 CMP R4,R11 \ 00000194 D8FFFF2A BCS ??IsUrl_8 \ 00000198 ........ LDRH R0,[R4], #+2 \ 0000019C ........ _BLF char16to8,??char16to8??rA \ 000001A0 ........ STRB R0,[R6], #+1 \ 000001A4 F9FFFFEA B ??IsUrl_14 7593 } 7594 7595 #define UTF16_DIS_UNDERLINE (0xE002) 7596 #define UTF16_ENA_UNDERLINE (0xE001) 7597 \ In segment CODE, align 4, keep-with-next 7598 void ParseAnswer(WSHDR *ws, const char *s) 7599 { \ ParseAnswer: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0040A0E1 MOV R4,R0 7600 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 7601 S_SMILES *t; 7602 S_SMILES *t_root=(S_SMILES *)s_top; \ 00000008 10029FE5 LDR R0,??ParseAnswer_0 ;; s_top \ 0000000C 04D04DE2 SUB SP,SP,#+4 \ 00000010 006090E5 LDR R6,[R0, #+0] \ 00000014 0150A0E1 MOV R5,R1 7603 STXT_SMILES *st; 7604 unsigned int wchar; 7605 unsigned int ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); \ 00000018 0000D5E5 LDRB R0,[R5, #+0] \ 0000001C 0110D5E5 LDRB R1,[R5, #+1] \ 00000020 010480E0 ADD R0,R0,R1, LSL #+8 \ 00000024 0210D5E5 LDRB R1,[R5, #+2] \ 00000028 010880E0 ADD R0,R0,R1, LSL #+16 \ 0000002C 0310D5E5 LDRB R1,[R5, #+3] \ 00000030 018C80E0 ADD R8,R0,R1, LSL #+24 7606 CutWSTR(ws,0); \ 00000034 0010A0E3 MOV R1,#+0 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 260100EF SWI +294 \ 00000040 160000EA B ??ParseAnswer_1 7607 int i; 7608 while(wchar=*s) 7609 { 7610 if(s==strstr(s, "http://") || s == strstr(s, "www.")) 7611 { 7612 wsAppendChar(ws,UTF16_ENA_UNDERLINE); 7613 while(*s && strchr(valid, *s)) 7614 { 7615 wchar=char8to16(*s); \ ??ParseAnswer_2: \ 00000044 ........ LDRB R0,[R5], #+1 \ 00000048 ........ _BLF char8to16,??char8to16??rA 7616 wsAppendChar(ws,wchar); \ 0000004C 0010A0E1 MOV R1,R0 \ ??ParseAnswer_3: \ 00000050 0400A0E1 MOV R0,R4 \ 00000054 1C0000EF SWI +28 7617 s++; 7618 } \ 00000058 0010D5E5 LDRB R1,[R5, #+0] \ 0000005C 000051E3 CMP R1,#+0 \ 00000060 0300000A BEQ ??ParseAnswer_4 \ 00000064 0900A0E1 MOV R0,R9 \ 00000068 180000EF SWI +24 \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 F3FFFF1A BNE ??ParseAnswer_2 7619 wsAppendChar(ws,UTF16_DIS_UNDERLINE); \ ??ParseAnswer_4: \ 00000074 0210A0E3 MOV R1,#+2 \ 00000078 E01C81E3 ORR R1,R1,#0xE000 \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 1C0000EF SWI +28 7620 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); \ 00000084 0000D5E5 LDRB R0,[R5, #+0] \ 00000088 0110D5E5 LDRB R1,[R5, #+1] \ 0000008C 010480E0 ADD R0,R0,R1, LSL #+8 \ 00000090 0210D5E5 LDRB R1,[R5, #+2] \ 00000094 010880E0 ADD R0,R0,R1, LSL #+16 \ 00000098 0310D5E5 LDRB R1,[R5, #+3] \ 0000009C 018C80E0 ADD R8,R0,R1, LSL #+24 7621 continue; \ ??ParseAnswer_1: \ 000000A0 0070D5E5 LDRB R7,[R5, #+0] \ 000000A4 000057E3 CMP R7,#+0 \ 000000A8 4F00000A BEQ ??ParseAnswer_5 \ 000000AC ........ LDR R9,??DataTable276 ;; `?` \ 000000B0 0500A0E1 MOV R0,R5 \ 000000B4 941089E2 ADD R1,R9,#+148 \ 000000B8 180100EF SWI +280 \ 000000BC 000055E1 CMP R5,R0 \ 000000C0 0400000A BEQ ??ParseAnswer_6 \ 000000C4 9C1089E2 ADD R1,R9,#+156 \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 180100EF SWI +280 \ 000000D0 000055E1 CMP R5,R0 \ 000000D4 0200001A BNE ??ParseAnswer_7 \ ??ParseAnswer_6: \ 000000D8 0110A0E3 MOV R1,#+1 \ 000000DC E01C81E3 ORR R1,R1,#0xE000 \ 000000E0 DAFFFFEA B ??ParseAnswer_3 7622 } 7623 t=t_root; \ ??ParseAnswer_7: \ 000000E4 0690A0E1 MOV R9,R6 \ 000000E8 230000EA B ??ParseAnswer_8 7624 while(t) 7625 { 7626 st=t->lines; 7627 while(st) 7628 { 7629 if ((ulb&st->mask)==st->key) \ ??ParseAnswer_9: \ 000000EC 0B00DAE5 LDRB R0,[R10, #+11] \ 000000F0 0A10DAE5 LDRB R1,[R10, #+10] \ 000000F4 0620DAE5 LDRB R2,[R10, #+6] \ 000000F8 000481E1 ORR R0,R1,R0, LSL #+8 \ 000000FC 0910DAE5 LDRB R1,[R10, #+9] \ 00000100 000481E1 ORR R0,R1,R0, LSL #+8 \ 00000104 0810DAE5 LDRB R1,[R10, #+8] \ 00000108 000481E1 ORR R0,R1,R0, LSL #+8 \ 0000010C 0710DAE5 LDRB R1,[R10, #+7] \ 00000110 080000E0 AND R0,R0,R8 \ 00000114 011482E1 ORR R1,R2,R1, LSL #+8 \ 00000118 0520DAE5 LDRB R2,[R10, #+5] \ 0000011C 011482E1 ORR R1,R2,R1, LSL #+8 \ 00000120 0420DAE5 LDRB R2,[R10, #+4] \ 00000124 011482E1 ORR R1,R2,R1, LSL #+8 \ 00000128 010050E1 CMP R0,R1 \ 0000012C 0700001A BNE ??ParseAnswer_10 7630 { 7631 if (!strncmp(s,st->text,strlen(st->text))) goto L1; \ 00000130 0C008AE2 ADD R0,R10,#+12 \ 00000134 1B0000EF SWI +27 \ 00000138 0020A0E1 MOV R2,R0 \ 0000013C 0C108AE2 ADD R1,R10,#+12 \ 00000140 0500A0E1 MOV R0,R5 \ 00000144 150100EF SWI +277 \ 00000148 000050E3 CMP R0,#+0 \ 0000014C 1500000A BEQ ??ParseAnswer_11 7632 } 7633 st=st->next; \ ??ParseAnswer_10: \ 00000150 0000A0E3 MOV R0,#+0 \ ??ParseAnswer_12: \ 00000154 0A20D0E7 LDRB R2,[R0, +R10] \ 00000158 0D10A0E1 MOV R1,SP \ 0000015C 0120C0E7 STRB R2,[R0, +R1] \ 00000160 010080E2 ADD R0,R0,#+1 \ 00000164 040050E3 CMP R0,#+4 \ 00000168 F9FFFFBA BLT ??ParseAnswer_12 \ 0000016C 00A09DE5 LDR R10,[SP, #+0] 7634 } \ ??ParseAnswer_13: \ 00000170 00005AE3 CMP R10,#+0 \ 00000174 DCFFFF1A BNE ??ParseAnswer_9 7635 t=t->next; \ 00000178 009099E5 LDR R9,[R9, #+0] \ ??ParseAnswer_8: \ 0000017C 000059E3 CMP R9,#+0 \ 00000180 08A09915 LDRNE R10,[R9, #+8] \ 00000184 F9FFFF1A BNE ??ParseAnswer_13 7636 } 7637 L1: 7638 if (t) 7639 { 7640 wchar=t->uni_smile; 7641 s+=strlen(st->text); 7642 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); 7643 } 7644 else 7645 { 7646 wchar=char8to16(wchar); \ 00000188 0700A0E1 MOV R0,R7 \ 0000018C ........ _BLF char8to16,??char8to16??rA \ 00000190 0070A0E1 MOV R7,R0 7647 s++; 7648 ulb>>=8; 7649 ulb+=s[3]<<24; \ 00000194 015085E2 ADD R5,R5,#+1 \ 00000198 0300D5E5 LDRB R0,[R5, #+3] \ 0000019C 000CA0E1 LSL R0,R0,#+24 \ 000001A0 288480E0 ADD R8,R0,R8, LSR #+8 \ 000001A4 0A0000EA B ??ParseAnswer_14 7650 } \ ??ParseAnswer_11: \ 000001A8 047099E5 LDR R7,[R9, #+4] \ 000001AC 0C008AE2 ADD R0,R10,#+12 \ 000001B0 1B0000EF SWI +27 \ 000001B4 055080E0 ADD R5,R0,R5 \ 000001B8 0000D5E5 LDRB R0,[R5, #+0] \ 000001BC 0110D5E5 LDRB R1,[R5, #+1] \ 000001C0 010480E0 ADD R0,R0,R1, LSL #+8 \ 000001C4 0210D5E5 LDRB R1,[R5, #+2] \ 000001C8 010880E0 ADD R0,R0,R1, LSL #+16 \ 000001CC 0310D5E5 LDRB R1,[R5, #+3] \ 000001D0 018C80E0 ADD R8,R0,R1, LSL #+24 7651 if (wchar!=10) wsAppendChar(ws,wchar); \ ??ParseAnswer_14: \ 000001D4 0A0057E3 CMP R7,#+10 \ 000001D8 B0FFFF0A BEQ ??ParseAnswer_1 \ 000001DC 0710A0E1 MOV R1,R7 \ 000001E0 0400A0E1 MOV R0,R4 \ 000001E4 1C0000EF SWI +28 \ 000001E8 ACFFFFEA B ??ParseAnswer_1 7652 } 7653 i=ws->wsbody[0]; \ ??ParseAnswer_5: \ 000001EC 000094E5 LDR R0,[R4, #+0] \ 000001F0 B010D0E1 LDRH R1,[R0, #+0] \ 000001F4 000000EA B ??ParseAnswer_15 7654 while(i>1) 7655 { 7656 if (ws->wsbody[i--]!=13) break; 7657 ws->wsbody[0]=i; \ ??ParseAnswer_16: \ 000001F8 B010C0E1 STRH R1,[R0, #+0] \ ??ParseAnswer_15: \ 000001FC 020051E3 CMP R1,#+2 \ 00000200 F187BDB8 POPLT {R0,R4-R10,PC} \ 00000204 0120A0E1 MOV R2,R1 \ 00000208 011042E2 SUB R1,R2,#+1 \ 0000020C 822080E0 ADD R2,R0,R2, LSL #+1 \ 00000210 B020D2E1 LDRH R2,[R2, #+0] \ 00000214 0D0052E3 CMP R2,#+13 \ 00000218 F6FFFF0A BEQ ??ParseAnswer_16 7658 } 7659 } \ 0000021C F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??ParseAnswer_0: \ 00000220 ........ DC32 s_top 7660 \ In segment CODE, align 4, keep-with-next 7661 void SaveAnswer(CLIST *cl, WSHDR *ws) 7662 { \ SaveAnswer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0100A0E1 MOV R0,R1 7663 char *p=ExtractAnswer(ws); \ 0000000C ........ BL ExtractAnswer \ 00000010 0050A0E1 MOV R5,R0 7664 mfree(cl->answer); \ 00000014 A40094E5 LDR R0,[R4, #+164] \ 00000018 150000EF SWI +21 7665 cl->answer=p; \ 0000001C A45084E5 STR R5,[R4, #+164] 7666 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 7667 7668 //links applicator 7669 7670 \ In segment CODE, align 4, keep-with-next 7671 int GetTempName(void) 7672 { \ GetTempName: \ 00000000 00402DE9 PUSH {LR} \ 00000004 10D04DE2 SUB SP,SP,#+16 7673 static const int DMonth[]={0,31,59,90,120,151,181,212,243,273,304,334,365}; 7674 unsigned long iday; 7675 TTime tt; 7676 TDate dd; 7677 GetDateTime(&dd,&tt); \ 00000008 08108DE2 ADD R1,SP,#+8 \ 0000000C 0D00A0E1 MOV R0,SP \ 00000010 B40000EF SWI +180 7678 dd.year=dd.year%100; \ 00000014 00109DE5 LDR R1,[SP, #+0] \ 00000018 84209FE5 LDR R2,??GetTempName_0 ;; 0x51eb851f \ 0000001C 92318CE0 UMULL R3,R12,R2,R1 \ 00000020 6430A0E3 MOV R3,#+100 \ 00000024 ACC2A0E1 LSR R12,R12,#+5 \ 00000028 930C0CE0 MUL R12,R3,R12 7679 iday=365*dd.year+DMonth[dd.month-1]+(dd.day - 1); 7680 iday=iday+(dd.year>>2); \ 0000002C 6D20A0E3 MOV R2,#+109 \ 00000030 0CC041E0 SUB R12,R1,R12 \ 00000034 00C08DE5 STR R12,[SP, #+0] \ 00000038 0400DDE5 LDRB R0,[SP, #+4] \ 0000003C 0C10A0E1 MOV R1,R12 \ 00000040 60C09FE5 LDR R12,??GetTempName_0+0x4 ;; ??DMonth \ 00000044 402F82E3 ORR R2,R2,#0x100 \ 00000048 00318CE0 ADD R3,R12,R0, LSL #+2 \ 0000004C 043013E5 LDR R3,[R3, #-4] 7681 if (dd.month>2||(dd.year&3)>0) \ 00000050 030050E3 CMP R0,#+3 \ 00000054 923121E0 MLA R1,R2,R1,R3 \ 00000058 0520DDE5 LDRB R2,[SP, #+5] \ 0000005C 012042E2 SUB R2,R2,#+1 \ 00000060 011082E0 ADD R1,R2,R1 \ 00000064 00209DE5 LDR R2,[SP, #+0] \ 00000068 221181E0 ADD R1,R1,R2, LSR #+2 \ 0000006C 0100002A BCS ??GetTempName_1 \ 00000070 030012E3 TST R2,#0x3 \ 00000074 0000000A BEQ ??GetTempName_2 7682 iday++; \ ??GetTempName_1: \ 00000078 011081E2 ADD R1,R1,#+1 7683 iday=(tt.sec+60*(tt.min+60*(tt.hour+24* iday))); 7684 return iday; \ ??GetTempName_2: \ 0000007C 0830DDE5 LDRB R3,[SP, #+8] \ 00000080 0920DDE5 LDRB R2,[SP, #+9] \ 00000084 0A00DDE5 LDRB R0,[SP, #+10] \ 00000088 18C0A0E3 MOV R12,#+24 \ 0000008C 9C3121E0 MLA R1,R12,R1,R3 \ 00000090 3C30A0E3 MOV R3,#+60 \ 00000094 932121E0 MLA R1,R3,R1,R2 \ 00000098 10D08DE2 ADD SP,SP,#+16 \ 0000009C 930120E0 MLA R0,R3,R1,R0 \ 000000A0 0080BDE8 POP {PC} ;; return \ ??GetTempName_0: \ 000000A4 1F85EB51 DC32 0x51eb851f \ 000000A8 ........ DC32 ??DMonth 7685 } \ In segment DATA_C, align 4, align-sorted \ ??DMonth: \ 00000000 000000001F00 DC32 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 \ 00003B000000 \ 5A0000007800 \ 000097000000 \ B5000000D400 \ 0000F3000000 \ 110100003001 \ 00004E010000 \ 6D010000 7686 7687 \ In segment CODE, align 4, keep-with-next 7688 void recon() 7689 { 7690 SUBPROC((void*)end_socket); \ recon: \ 00000000 ........ LDR R0,??DataTable277 ;; end_socket \ 00000004 10402DE9 PUSH {R4,LR} 7691 GBS_DelTimer(&reconnect_tmr); \ 00000008 ........ LDR R4,??DataTable278 ;; icons \ 0000000C 710100EF SWI +369 \ 00000010 C400A0E3 MOV R0,#+196 \ 00000014 680D80E3 ORR R0,R0,#0x1A00 \ 00000018 040080E0 ADD R0,R0,R4 \ 0000001C 8C0100EF SWI +396 7692 DNR_TRIES=3; \ 00000020 0300A0E3 MOV R0,#+3 \ 00000024 F40384E5 STR R0,[R4, #+1012] 7693 SUBPROC((void *)create_connect); \ 00000028 ........ LDR R0,??DataTable279 ;; create_connect \ 0000002C 710100EF SWI +369 7694 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 7695 \ In segment CODE, align 4, keep-with-next 7696 int edchat_onkey(GUI *data, GUI_MSG *msg) 7697 { \ edchat_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 7698 //-1 - do redraw 7699 GBS_DelTimer(&tmr_illumination); \ 00000004 ........ LDR R6,??DataTable289 ;; icons \ 00000008 57DF4DE2 SUB SP,SP,#+348 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0180A0E1 MOV R8,R1 \ 00000014 A400A0E3 MOV R0,#+164 \ 00000018 680D80E3 ORR R0,R0,#0x1A00 \ 0000001C 060080E0 ADD R0,R0,R6 \ 00000020 8C0100EF SWI +396 7700 CLIST *t; 7701 TPKT *p; 7702 EDITCONTROL ec; 7703 int len, f;//2026rev 7704 unsigned err;//2026rev 7705 char *s; 7706 int l=msg->gbsmsg->submess; \ 00000024 040098E5 LDR R0,[R8, #+4] \ 00000028 089090E5 LDR R9,[R0, #+8] 7707 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 DF0100EF SWI +479 \ 00000034 0050A0E1 MOV R5,R0 7708 char fn[256]; 7709 7710 if (msg->keys==0xFFF) \ 00000038 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 7711 { 7712 void ec_menu(EDCHAT_STRUCT *); 7713 ec_menu(ed_struct); \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 ........ BL ec_menu 7714 return(-1); \ ??edchat_onkey_1: \ 00000054 B40000EA B ??edchat_onkey_2 7715 } 7716 if (msg->keys==0xFF0) return (1); \ ??edchat_onkey_0: \ 00000058 FF0E50E3 CMP R0,#+4080 \ 0000005C 0100001A BNE ??edchat_onkey_3 \ 00000060 0100A0E3 MOV R0,#+1 \ 00000064 B10000EA B ??edchat_onkey_4 7717 7718 void AddSmile(GUI *data); 7719 if (msg->gbsmsg->msg==LONG_PRESS) \ ??edchat_onkey_3: \ 00000068 040098E5 LDR R0,[R8, #+4] \ 0000006C 18769FE5 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 7720 { 7721 if (l==RIGHT_BUTTON) \ 00000084 3E0059E3 CMP R9,#+62 \ 00000088 2800001A BNE ??edchat_onkey_7 7722 { 7723 if(LongRightAction==2 && EDIT_GetFocus(data)==ed_struct->ed_answer) \ 0000008C FCA59FE5 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 7724 CreateSmileSelectGUI(ed_struct); \ 000000B0 0500A0E1 MOV R0,R5 \ 000000B4 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA \ 000000B8 5F0000EA B ??edchat_onkey_6 7725 else 7726 if(LongRightAction==1) \ ??edchat_onkey_8: \ 000000BC 00009AE5 LDR R0,[R10, #+0] \ 000000C0 010050E3 CMP R0,#+1 \ 000000C4 5C00001A BNE ??edchat_onkey_6 7727 { 7728 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 7729 { 7730 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000DC 04208DE2 ADD R2,SP,#+4 \ 000000E0 0400A0E1 MOV R0,R4 \ 000000E4 690100EF SWI +361 7731 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 7732 { 7733 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 7734 if (t && t!=ed_struct->ed_contact) \ 00000118 0B005A11 CMPNE R10,R11 \ 0000011C 4600000A BEQ ??edchat_onkey_6 7735 { 7736 CreateEditChat(t); \ ??edchat_onkey_9: \ 00000120 0A00A0E1 MOV R0,R10 \ 00000124 ........ BL CreateEditChat 7737 return(1); \ 00000128 0100A0E3 MOV R0,#+1 \ 0000012C 7F0000EA B ??edchat_onkey_4 7738 } 7739 } 7740 } 7741 } 7742 } 7743 if (l==LEFT_BUTTON && LongLeftAction) \ ??edchat_onkey_7: \ 00000130 3D0059E3 CMP R9,#+61 \ 00000134 5400001A BNE ??edchat_onkey_10 \ 00000138 54059FE5 LDR R0,??edchat_onkey_5+0x8 ;; LongLeftAction \ 0000013C 000090E5 LDR R0,[R0, #+0] \ 00000140 000050E3 CMP R0,#+0 \ 00000144 1500000A BEQ ??edchat_onkey_11 7744 { 7745 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 7746 { 7747 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 0000015C 04208DE2 ADD R2,SP,#+4 \ 00000160 0400A0E1 MOV R0,R4 \ 00000164 690100EF SWI +361 7748 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 7749 { 7750 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 7751 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 7752 { 7753 CreateEditChat(t); 7754 return(1); 7755 } 7756 } 7757 } 7758 } 7759 //#ifdef ELKA 7760 if (l==VOL_DOWN_BUTTON) 7761 { 7762 #ifdef kluchnik 7763 if((EDIT_GetFocus(data)==ed_struct->ed_answer)) 7764 #else 7765 if(LongVolDownAction) 7766 #endif 7767 { 7768 WSHDR *ws; 7769 ExtractEditControl(data,ed_struct->ed_answer,&ec); 7770 if(wstrlen(ec.pWS)>0) 7771 { 7772 ws=AllocWS(1); 7773 CutWSTR(ws,0); 7774 7775 EDIT_SetFocus(data,ed_struct->ed_answer); 7776 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 7777 7778 FreeWS(ws); 7779 RefreshGUI(); 7780 } 7781 } 7782 else 7783 { 7784 int pos; 7785 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 7786 { 7787 EDIT_SetFocus(data, pos); 7788 EDIT_SetCursorPos(data, 1); 7789 } 7790 return (-1); 7791 } 7792 7793 } 7794 7795 if (l==VOL_UP_BUTTON) 7796 { 7797 if(LongVolUpAction) 7798 { 7799 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); 7800 ascii2ws(ws,last_msg_buffer); 7801 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); 7802 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 7803 FreeWS(ws); 7804 RefreshGUI(); 7805 } 7806 else 7807 { 7808 int pos; 7809 if ((pos=EDIT_GetFocus(data)-2)>=2) 7810 { 7811 EDIT_SetFocus(data, pos); 7812 EDIT_SetCursorPos(data, 1); 7813 } 7814 return (-1); 7815 } 7816 } 7817 //#endif 7818 #ifdef kluchnik 7819 if(l==LEFT_BUTTON && EDIT_GetFocus(ed_struct->ed_chatgui)!=ed_struct->ed_answer && EDIT_GetCursorPos(data)==1) 7820 { 7821 int ed; 7822 EDITCONTROL ec; 7823 ed=EDIT_GetFocus(ed_struct->ed_chatgui); \ 000001C4 040095E5 LDR R0,[R5, #+4] \ 000001C8 820100EF SWI +386 7824 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 7825 7826 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 000001DC D80296E5 LDR R0,[R6, #+728] \ 000001E0 230100EF SWI +291 \ 000001E4 012080E2 ADD R2,R0,#+1 \ 000001E8 D80296E5 LDR R0,[R6, #+728] \ 000001EC 3E10A0E3 MOV R1,#+62 \ 000001F0 1D0000EF SWI +29 7827 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 000001F4 D80296E5 LDR R0,[R6, #+728] \ 000001F8 230100EF SWI +291 \ 000001FC 012080E2 ADD R2,R0,#+1 \ 00000200 D80296E5 LDR R0,[R6, #+728] \ 00000204 2010A0E3 MOV R1,#+32 \ 00000208 1D0000EF SWI +29 7828 wstrcat(wsBuffer,ec.pWS); \ 0000020C 58119DE5 LDR R1,[SP, #+344] \ 00000210 D80296E5 LDR R0,[R6, #+728] \ 00000214 210100EF SWI +289 7829 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 00000218 D80296E5 LDR R0,[R6, #+728] \ 0000021C 230100EF SWI +291 \ 00000220 012080E2 ADD R2,R0,#+1 \ 00000224 D80296E5 LDR R0,[R6, #+728] \ 00000228 0A10A0E3 MOV R1,#+10 \ 0000022C 1D0000EF SWI +29 7830 7831 ShowMSG(1,(int)"Message add to buffer"); \ 00000230 0710A0E1 MOV R1,R7 \ 00000234 0100A0E3 MOV R0,#+1 \ 00000238 480100EF SWI +328 7832 } 7833 #endif 7834 } 7835 7836 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 7837 { 7838 if ((l>='0')&&(l<='9')) \ 00000254 300059E3 CMP R9,#+48 \ 00000258 500000BA BLT ??edchat_onkey_13 \ 0000025C 3A0059E3 CMP R9,#+58 \ 00000260 060000AA BGE ??edchat_onkey_12 7839 { 7840 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 7841 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000278 0400A0E1 MOV R0,R4 \ 0000027C 9B0100EF SWI +411 7842 } 7843 7844 if (l==GREEN_BUTTON) 7845 { 7846 if (connect_state==3) 7847 { 7848 if ((t=ed_struct->ed_contact)) 7849 { 7850 ExtractEditControl(data,ed_struct->ed_answer,&ec); 7851 SaveAnswer(t,ec.pWS); 7852 if ((s=t->answer)) 7853 { 7854 if ((len=strlen(s))) 7855 { 7856 msg_away_timer=0; 7857 away_m=0; 7858 t->automsgcount=0; 7859 if(change_back_status) 7860 { 7861 CurrentStatus=status_rem; 7862 set_my_status(); 7863 change_back_status=0; 7864 } 7865 if(SHOW_ACTIVE) 7866 t->isactive=ACTIVE_TIME; 7867 p=malloc(sizeof(PKT)+len+1); 7868 p->pkt.uin=t->uin; 7869 p->pkt.type=T_SENDMSG; 7870 p->pkt.data_len=len; 7871 strcpy(p->data,s); 7872 //#ifdef ELKA 7873 strcpy(last_msg_buffer, s); 7874 //#endif 7875 AddStringToLog(t,0x01,p->data,I_str,(++SENDMSGCOUNT)&0x7FFF,1); //Номер сообщения 7876 SUBPROC((void *)SendAnswer,0,p); 7877 main2_count++; 7878 mfree(t->answer); 7879 t->answer=NULL; 7880 // request_remake_edchat=1; 7881 EDIT_SetFocus(data,ed_struct->ed_answer); 7882 CutWSTR(ews,0); 7883 EDIT_SetTextToFocused(data,ews); 7884 AddMsgToChat(data); 7885 RecountMenu(t,1); 7886 return(-1); 7887 } 7888 } 7889 } 7890 } 7891 } 7892 //================2026rev-begin 7893 if (l==ENTER_BUTTON) 7894 { 7895 if (!EDIT_IsMarkModeActive(data)) // ?????? ???? ?? ????????? 7896 { 7897 int pos, len; 7898 char *link; 7899 ExtractEditControl(ed_struct->ed_chatgui,EDIT_GetFocus(ed_struct->ed_chatgui),&ec); 7900 wstrcpy(ews,ec.pWS); 7901 pos = EDIT_GetCursorPos(data); 7902 len = wstrlen(ews); 7903 link = malloc(len+1); 7904 7905 if(IsUrl(ews, pos, link) && IsOpenBrowser) 7906 { 7907 snprintf(fn, 255, "%s\\tmp%u.url", TEMPLATES_PATH, GetTempName); 7908 if ((f=fopen(fn,A_WriteOnly+A_BIN+A_Create+A_Truncate,P_WRITE,&err))!=-1) 7909 { 7910 fwrite(f,link,strlen(link),&err); 7911 fclose(f,&err); 7912 str_2ws(ews,fn,256); 7913 ExecuteFile(ews,0,0); 7914 unlink(fn, &err); 7915 } 7916 mfree(link); 7917 return (-1); 7918 } 7919 else 7920 { 7921 int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 7922 7923 if(IsMultiBuffer) 7924 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+4); 7925 else 7926 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+3); 7927 7928 mfree(link); 7929 return (-1); 7930 } 7931 } 7932 } 7933 7934 //================ 2026rev-end =================// 7935 7936 if (l==VOL_UP_BUTTON) 7937 { 7938 int pos; 7939 7940 if ((pos=EDIT_GetFocus(data)-2)>=2) 7941 { 7942 EDIT_SetFocus(data, pos); 7943 EDIT_SetCursorPos(data, 1); 7944 } 7945 return (-1); 7946 } 7947 if (l==VOL_DOWN_BUTTON) 7948 { 7949 int pos; 7950 7951 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 7952 { 7953 EDIT_SetFocus(data, pos); 7954 EDIT_SetCursorPos(data, 1); 7955 } 7956 return (-1); 7957 } 7958 } 7959 return(0); //Do standart keys \ ??edchat_onkey_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 50039FE5 LDR R0,??edchat_onkey_5+0xC ;; LongVolUpAction \ 00000344 000090E5 LDR R0,[R0, #+0] \ 00000348 000050E3 CMP R0,#+0 \ 0000034C 0E00000A BEQ ??edchat_onkey_18 \ 00000350 3C00A0E3 MOV R0,#+60 \ 00000354 600E80E3 ORR R0,R0,#0x600 \ 00000358 060080E0 ADD R0,R0,R6 \ 0000035C 1B0000EF SWI +27 \ 00000360 010080E2 ADD R0,R0,#+1 \ 00000364 250100EF SWI +293 \ 00000368 00A0A0E1 MOV R10,R0 \ 0000036C 3C00A0E3 MOV R0,#+60 \ 00000370 600E80E3 ORR R0,R0,#0x600 \ 00000374 061080E0 ADD R1,R0,R6 \ 00000378 0A00A0E1 MOV R0,R10 \ 0000037C ........ _BLF ascii2ws,??ascii2ws??rA \ 00000380 081095E5 LDR R1,[R5, #+8] \ 00000384 040095E5 LDR R0,[R5, #+4] \ 00000388 D4FFFFEA B ??edchat_onkey_16 \ ??edchat_onkey_18: \ 0000038C 0400A0E1 MOV R0,R4 \ 00000390 820100EF SWI +386 \ 00000394 021040E2 SUB R1,R0,#+2 \ 00000398 020051E3 CMP R1,#+2 \ 0000039C DCFFFFEA B ??edchat_onkey_17 \ ??edchat_onkey_13: \ 000003A0 0B0059E3 CMP R9,#+11 \ 000003A4 5B00001A BNE ??edchat_onkey_19 \ 000003A8 840396E5 LDR R0,[R6, #+900] \ 000003AC 030050E3 CMP R0,#+3 \ 000003B0 B2FFFF1A BNE ??edchat_onkey_12 \ 000003B4 00A095E5 LDR R10,[R5, #+0] \ 000003B8 00005AE3 CMP R10,#+0 \ 000003BC AFFFFF0A BEQ ??edchat_onkey_12 \ 000003C0 081095E5 LDR R1,[R5, #+8] \ 000003C4 04208DE2 ADD R2,SP,#+4 \ 000003C8 0400A0E1 MOV R0,R4 \ 000003CC 690100EF SWI +361 \ 000003D0 2C109DE5 LDR R1,[SP, #+44] \ 000003D4 0A00A0E1 MOV R0,R10 \ 000003D8 ........ BL SaveAnswer \ 000003DC A4909AE5 LDR R9,[R10, #+164] \ 000003E0 000059E3 CMP R9,#+0 \ 000003E4 A5FFFF0A BEQ ??edchat_onkey_12 \ 000003E8 0900A0E1 MOV R0,R9 \ 000003EC 1B0000EF SWI +27 \ 000003F0 00B0B0E1 MOVS R11,R0 \ 000003F4 A1FFFF0A BEQ ??edchat_onkey_12 \ 000003F8 0070A0E3 MOV R7,#+0 \ 000003FC 287386E5 STR R7,[R6, #+808] \ 00000400 2C7386E5 STR R7,[R6, #+812] \ 00000404 88708AE5 STR R7,[R10, #+136] \ 00000408 340396E5 LDR R0,[R6, #+820] \ 0000040C 000050E3 CMP R0,#+0 \ 00000410 0300000A BEQ ??edchat_onkey_20 \ 00000414 300396E5 LDR R0,[R6, #+816] \ 00000418 180386E5 STR R0,[R6, #+792] \ 0000041C ........ BL set_my_status \ 00000420 347386E5 STR R7,[R6, #+820] \ ??edchat_onkey_20: \ 00000424 ........ LDR R0,??DataTable281 ;; SHOW_ACTIVE \ 00000428 000090E5 LDR R0,[R0, #+0] \ 0000042C 000050E3 CMP R0,#+0 \ 00000430 5A0FA013 MOVNE R0,#+360 \ 00000434 AC008A15 STRNE R0,[R10, #+172] \ 00000438 09008BE2 ADD R0,R11,#+9 \ 0000043C 140000EF SWI +20 \ 00000440 0080A0E1 MOV R8,R0 \ 00000444 0C009AE5 LDR R0,[R10, #+12] \ 00000448 0910A0E1 MOV R1,R9 \ 0000044C 000088E5 STR R0,[R8, #+0] \ 00000450 0200A0E3 MOV R0,#+2 \ 00000454 B400C8E1 STRH R0,[R8, #+4] \ 00000458 B6B0C8E1 STRH R11,[R8, #+6] \ 0000045C 080088E2 ADD R0,R8,#+8 \ 00000460 1A0000EF SWI +26 \ 00000464 0910A0E1 MOV R1,R9 \ 00000468 3C00A0E3 MOV R0,#+60 \ 0000046C 600E80E3 ORR R0,R0,#0x600 \ 00000470 060080E0 ADD R0,R0,R6 \ 00000474 1A0000EF SWI +26 \ 00000478 080396E5 LDR R0,[R6, #+776] \ 0000047C ........ LDR R3,??DataTable317 ;; I_str \ 00000480 010080E2 ADD R0,R0,#+1 \ 00000484 080386E5 STR R0,[R6, #+776] \ 00000488 0110A0E3 MOV R1,#+1 \ 0000048C 02002DE9 PUSH {R1} \ 00000490 8008A0E1 LSL R0,R0,#+17 \ 00000494 A008A0E1 LSR R0,R0,#+17 \ 00000498 01002DE9 PUSH {R0} \ 0000049C 082088E2 ADD R2,R8,#+8 \ 000004A0 0A00A0E1 MOV R0,R10 \ 000004A4 ........ BL AddStringToLog \ 000004A8 ........ LDR R0,??DataTable318 ;; SendAnswer \ 000004AC 0820A0E1 MOV R2,R8 \ 000004B0 0010A0E3 MOV R1,#+0 \ 000004B4 710100EF SWI +369 \ 000004B8 ........ LDR R0,??DataTable284 ;; main2_count \ 000004BC 001090E5 LDR R1,[R0, #+0] \ 000004C0 011081E2 ADD R1,R1,#+1 \ 000004C4 001080E5 STR R1,[R0, #+0] \ 000004C8 A4009AE5 LDR R0,[R10, #+164] \ 000004CC 150000EF SWI +21 \ 000004D0 A4708AE5 STR R7,[R10, #+164] \ 000004D4 081095E5 LDR R1,[R5, #+8] \ 000004D8 0400A0E1 MOV R0,R4 \ 000004DC 9B0100EF SWI +411 \ 000004E0 200396E5 LDR R0,[R6, #+800] \ 000004E4 0710A0E1 MOV R1,R7 \ 000004E8 260100EF SWI +294 \ 000004EC 201396E5 LDR R1,[R6, #+800] \ 000004F0 0400A0E1 MOV R0,R4 \ 000004F4 810100EF SWI +385 \ 000004F8 0400A0E1 MOV R0,R4 \ 000004FC ........ BL AddMsgToChat \ 00000500 0110A0E3 MOV R1,#+1 \ 00000504 0A00A0E1 MOV R0,R10 \ 00000508 ........ BL RecountMenu \ 0000050C 0700E0E1 MVN R0,R7 \ 00000510 08D08DE2 ADD SP,SP,#+8 \ 00000514 85FFFFEA B ??edchat_onkey_4 \ ??edchat_onkey_19: \ 00000518 1A0059E3 CMP R9,#+26 \ 0000051C 5500001A BNE ??edchat_onkey_21 \ 00000520 0400A0E1 MOV R0,R4 \ 00000524 D80100EF SWI +472 \ 00000528 000050E3 CMP R0,#+0 \ 0000052C 53FFFF1A BNE ??edchat_onkey_12 \ 00000530 040095E5 LDR R0,[R5, #+4] \ 00000534 820100EF SWI +386 \ 00000538 04208DE2 ADD R2,SP,#+4 \ 0000053C 0010A0E1 MOV R1,R0 \ 00000540 040095E5 LDR R0,[R5, #+4] \ 00000544 690100EF SWI +361 \ 00000548 200396E5 LDR R0,[R6, #+800] \ 0000054C 2C109DE5 LDR R1,[SP, #+44] \ 00000550 1F0100EF SWI +287 \ 00000554 0400A0E1 MOV R0,R4 \ 00000558 D30100EF SWI +467 \ 0000055C 0090A0E1 MOV R9,R0 \ 00000560 200396E5 LDR R0,[R6, #+800] \ 00000564 230100EF SWI +291 \ 00000568 010080E2 ADD R0,R0,#+1 \ 0000056C 140000EF SWI +20 \ 00000570 0080A0E1 MOV R8,R0 \ 00000574 200396E5 LDR R0,[R6, #+800] \ 00000578 0820A0E1 MOV R2,R8 \ 0000057C 0910A0E1 MOV R1,R9 \ 00000580 ........ BL IsUrl \ 00000584 000050E3 CMP R0,#+0 \ 00000588 2C00000A BEQ ??edchat_onkey_22 \ 0000058C 08019FE5 LDR R0,??edchat_onkey_5+0x10 ;; IsOpenBrowser \ 00000590 000090E5 LDR R0,[R0, #+0] \ 00000594 000050E3 CMP R0,#+0 \ 00000598 2800000A BEQ ??edchat_onkey_22 \ 0000059C FC009FE5 LDR R0,??edchat_onkey_5+0x14 ;; GetTempName \ 000005A0 ........ LDR R3,??DataTable285 ;; TEMPLATES_PATH \ 000005A4 01002DE9 PUSH {R0} \ 000005A8 182087E2 ADD R2,R7,#+24 \ 000005AC FF10A0E3 MOV R1,#+255 \ 000005B0 34008DE2 ADD R0,SP,#+52 \ 000005B4 1B0100EF SWI +283 \ 000005B8 04308DE2 ADD R3,SP,#+4 \ 000005BC 402FA0E3 MOV R2,#+256 \ 000005C0 0110A0E3 MOV R1,#+1 \ 000005C4 831C81E3 ORR R1,R1,#0x8300 \ 000005C8 34008DE2 ADD R0,SP,#+52 \ 000005CC 0A0000EF SWI +10 \ 000005D0 0040A0E1 MOV R4,R0 \ 000005D4 010074E3 CMN R4,#+1 \ 000005D8 04D08DE2 ADD SP,SP,#+4 \ 000005DC 1400000A BEQ ??edchat_onkey_23 \ 000005E0 0800A0E1 MOV R0,R8 \ 000005E4 1B0000EF SWI +27 \ 000005E8 0020A0E1 MOV R2,R0 \ 000005EC 0D30A0E1 MOV R3,SP \ 000005F0 0810A0E1 MOV R1,R8 \ 000005F4 0400A0E1 MOV R0,R4 \ 000005F8 0C0000EF SWI +12 \ 000005FC 0D10A0E1 MOV R1,SP \ 00000600 0400A0E1 MOV R0,R4 \ 00000604 0D0000EF SWI +13 \ 00000608 200396E5 LDR R0,[R6, #+800] \ 0000060C 402FA0E3 MOV R2,#+256 \ 00000610 30108DE2 ADD R1,SP,#+48 \ 00000614 6C0100EF SWI +364 \ 00000618 200396E5 LDR R0,[R6, #+800] \ 0000061C 0020A0E3 MOV R2,#+0 \ 00000620 0010A0E3 MOV R1,#+0 \ 00000624 940000EF SWI +148 \ 00000628 0D10A0E1 MOV R1,SP \ 0000062C 30008DE2 ADD R0,SP,#+48 \ 00000630 6B0100EF SWI +363 \ ??edchat_onkey_23: \ 00000634 0800A0E1 MOV R0,R8 \ 00000638 150000EF SWI +21 \ 0000063C 3AFFFFEA B ??edchat_onkey_2 \ ??edchat_onkey_22: \ 00000640 000095E5 LDR R0,[R5, #+0] \ 00000644 0C0090E5 LDR R0,[R0, #+12] \ 00000648 ........ BL LoadTemplates \ 0000064C ........ LDR R2,??DataTable286 ;; IsMultiBuffer \ 00000650 4C109FE5 LDR R1,??edchat_onkey_5+0x18 ;; ed_options_handler \ 00000654 100085E5 STR R0,[R5, #+16] \ 00000658 002092E5 LDR R2,[R2, #+0] \ 0000065C 000052E3 CMP R2,#+0 \ 00000660 03308002 ADDEQ R3,R0,#+3 \ 00000664 04308012 ADDNE R3,R0,#+4 \ 00000668 0520A0E1 MOV R2,R5 \ 0000066C 0400A0E1 MOV R0,R4 \ 00000670 E50100EF SWI +485 \ 00000674 EEFFFFEA B ??edchat_onkey_23 \ ??edchat_onkey_21: \ 00000678 0D0059E3 CMP R9,#+13 \ 0000067C 42FFFF0A BEQ ??edchat_onkey_18 \ ??edchat_onkey_24: \ 00000680 0E0059E3 CMP R9,#+14 \ 00000684 FDFEFF1A BNE ??edchat_onkey_12 \ 00000688 1CFFFFEA B ??edchat_onkey_15 \ ??edchat_onkey_5: \ 0000068C ........ DC32 `?` \ 00000690 ........ DC32 LongRightAction \ 00000694 ........ DC32 LongLeftAction \ 00000698 ........ DC32 LongVolUpAction \ 0000069C ........ DC32 IsOpenBrowser \ 000006A0 ........ DC32 GetTempName \ 000006A4 ........ DC32 ed_options_handler 7960 //1: close 7961 } 7962 7963 static const HEADER_DESC edchat_hdr={0,0,NULL,NULL,NULL,0,LGP_NULL}; 7964 7965 void (*old_ed_redraw)(void *data); \ In segment CODE, align 4, keep-with-next 7966 void my_ed_redraw(void *data) 7967 { \ my_ed_redraw: \ 00000000 30402DE9 PUSH {R4,R5,LR} 7968 void *edchat_gui; 7969 EDCHAT_STRUCT *ed_struct; 7970 if (old_ed_redraw) old_ed_redraw(data); \ 00000004 ........ LDR R4,??DataTable289 ;; icons \ 00000008 181494E5 LDR R1,[R4, #+1048] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0100000A BEQ ??my_ed_redraw_0 \ 00000014 31FF2FE1 BLX R1 7971 edchat_gui=FindGUIbyId(edchat_id,NULL); \ 00000018 0010A0E3 MOV R1,#+0 \ ??my_ed_redraw_0: \ 0000001C B80394E5 LDR R0,[R4, #+952] \ 00000020 090200EF SWI +521 7972 if (edchat_gui) \ 00000024 000050E3 CMP R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 7973 { 7974 ed_struct=EDIT_GetUserPointer(edchat_gui); \ 0000002C DF0100EF SWI +479 7975 if (ed_struct) \ 00000030 000050E3 CMP R0,#+0 \ 00000034 3080BD08 POPEQ {R4,R5,PC} 7976 { 7977 int icon, width; 7978 #ifndef NEWSGOLD 7979 icon=*(S_ICONS+GetIconIndex(ed_struct->ed_contact)); 7980 ((HEADER_DESC *)&edchat_hdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); 7981 DrawImg(ScreenW()-1-width,1,icon); 7982 #else 7983 icon=*(S_ICONS+GetIconIndex(ed_struct->ed_contact)); \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C ........ BL GetIconIndex \ 00000040 000184E0 ADD R0,R4,R0, LSL #+2 \ 00000044 704090E5 LDR R4,[R0, #+112] 7984 width=GetImgWidth(icon); \ 00000048 0400A0E1 MOV R0,R4 \ 0000004C 220000EF SWI +34 \ 00000050 0050A0E1 MOV R5,R0 7985 DrawImg(2,((HeaderH()-width)>>1)+YDISP,icon); \ 00000054 8A8100EF SWI +33162 \ 00000058 0420A0E1 MOV R2,R4 \ 0000005C 050040E0 SUB R0,R0,R5 \ 00000060 1810A0E3 MOV R1,#+24 \ 00000064 C01081E0 ADD R1,R1,R0, ASR #+1 \ 00000068 0200A0E3 MOV R0,#+2 \ 0000006C 230000EF SWI +35 7986 /* DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 7987 GetPaletteAdrByColorIndex(0), 7988 GetPaletteAdrByColorIndex(EDIT_IsBusy(edchat_gui)?3:4));*/ 7989 #endif 7990 } 7991 } 7992 } \ 00000070 3080BDE8 POP {R4,R5,PC} ;; return 7993 \ In segment CODE, align 4, keep-with-next 7994 void edchat_ghook(GUI *data, int cmd) 7995 { \ edchat_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 7996 7997 static const SOFTKEY_DESC sk={0x0FFF,0x0000,(int)LG_MENU}; 7998 static const SOFTKEY_DESC sk_cancel={0x0FF0,0x0000,(int)LG_CLOSE}; 7999 // static SOFTKEY_DESC sk={0x0018,0x0000,(int)"Menu"}; 8000 int j; 8001 EDITCONTROL ec; 8002 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); 8003 PNGTOP_DESC *pltop=PNG_TOP(); 8004 if (cmd==9) \ 00000004 ........ LDR R4,??DataTable289 ;; icons \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 0000000C 0050A0E1 MOV R5,R0 \ 00000010 0190A0E1 MOV R9,R1 \ 00000014 DF0100EF SWI +479 \ 00000018 0070A0E1 MOV R7,R0 \ 0000001C B98100EF SWI +33209 \ 00000020 0080A0E1 MOV R8,R0 \ 00000024 0060A0E3 MOV R6,#+0 \ 00000028 090059E3 CMP R9,#+9 \ 0000002C 0500001A BNE ??edchat_ghook_0 8005 { 8006 GBS_DelTimer(&tmr_illumination); //by BoBa 25.06.07 \ 00000030 A400A0E3 MOV R0,#+164 \ 00000034 680D80E3 ORR R0,R0,#0x1A00 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 8C0100EF SWI +396 8007 pltop->dyn_pltop=NULL; \ 00000040 086088E5 STR R6,[R8, #+8] \ 00000044 180000EA B ??edchat_ghook_1 8008 } 8009 if (cmd==2) \ ??edchat_ghook_0: \ 00000048 081097E5 LDR R1,[R7, #+8] \ 0000004C 020059E3 CMP R9,#+2 \ 00000050 1700001A BNE ??edchat_ghook_2 8010 { 8011 ed_struct->ed_chatgui=data; \ 00000054 045087E5 STR R5,[R7, #+4] 8012 // edgui_data=data; 8013 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000058 0500A0E1 MOV R0,R5 \ 0000005C 9B0100EF SWI +411 8014 8015 static void *methods[16]; 8016 void **m=GetDataOfItemByID(data,2); \ 00000060 0210A0E3 MOV R1,#+2 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 4F0100EF SWI +335 \ 0000006C 0050B0E1 MOVS R5,R0 8017 if (m) 8018 { 8019 if (m[1]) \ 00000070 04009515 LDRNE R0,[R5, #+4] \ 00000074 00005013 CMPNE R0,#+0 \ 00000078 6800000A BEQ ??edchat_ghook_3 8020 { 8021 memcpy(methods,m[1],sizeof(methods)); \ 0000007C 1C60A0E3 MOV R6,#+28 \ 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 8022 old_ed_redraw=(void (*)(void *))(methods[0]); \ 00000094 040096E7 LDR R0,[R6, +R4] \ 00000098 180484E5 STR R0,[R4, #+1048] 8023 methods[0]=(void *)my_ed_redraw; \ 0000009C 84019FE5 LDR R0,??edchat_ghook_4 ;; my_ed_redraw \ 000000A0 040086E7 STR R0,[R6, +R4] 8024 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} 8025 } 8026 } 8027 } 8028 if (cmd==3) \ ??edchat_ghook_2: \ 000000B4 030059E3 CMP R9,#+3 \ 000000B8 0E00001A BNE ??edchat_ghook_5 8029 { 8030 // if (edgui_data==data) edgui_data=NULL; 8031 if (ed_struct->ed_contact) \ 000000BC 000097E5 LDR R0,[R7, #+0] \ 000000C0 000050E3 CMP R0,#+0 \ 000000C4 0500000A BEQ ??edchat_ghook_6 8032 { 8033 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C8 0D20A0E1 MOV R2,SP \ 000000CC 0500A0E1 MOV R0,R5 \ 000000D0 690100EF SWI +361 8034 SaveAnswer(ed_struct->ed_contact,ec.pWS); \ 000000D4 28109DE5 LDR R1,[SP, #+40] \ 000000D8 000097E5 LDR R0,[R7, #+0] \ 000000DC ........ BL SaveAnswer 8035 } 8036 RecountMenu(ed_struct->ed_contact,1); \ ??edchat_ghook_6: \ 000000E0 000097E5 LDR R0,[R7, #+0] \ 000000E4 0110A0E3 MOV R1,#+1 \ 000000E8 ........ BL RecountMenu 8037 mfree(ed_struct); \ 000000EC 0700A0E1 MOV R0,R7 \ 000000F0 150000EF SWI +21 \ 000000F4 ECFFFFEA B ??edchat_ghook_1 8038 } 8039 if (cmd==0x0A) \ ??edchat_ghook_5: \ 000000F8 0A0059E3 CMP R9,#+10 \ 000000FC 0D00001A BNE ??edchat_ghook_7 8040 { 8041 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] 8042 DisableIDLETMR(); \ 0000010C 7F0100EF SWI +383 8043 total_unread-=ed_struct->requested_decrement_total_unread; \ 00000110 A80394E5 LDR R0,[R4, #+936] \ 00000114 0C1097E5 LDR R1,[R7, #+12] \ 00000118 010040E0 SUB R0,R0,R1 \ 0000011C A80384E5 STR R0,[R4, #+936] 8044 ed_struct->requested_decrement_total_unread=0; \ 00000120 0C6087E5 STR R6,[R7, #+12] 8045 #ifdef ELKA 8046 if (!total_unread) \ 00000124 A80394E5 LDR R0,[R4, #+936] \ 00000128 000050E3 CMP R0,#+0 \ 0000012C 3B00001A BNE ??edchat_ghook_3 8047 { 8048 SLI_Off(); \ 00000130 ........ BL SLI_Off \ 00000134 DCFFFFEA B ??edchat_ghook_1 8049 } 8050 #endif 8051 /* if (request_close_edchat) 8052 { 8053 request_close_edchat=0; 8054 GeneralFunc_flag1(edchat_id,1); 8055 return; 8056 }*/ 8057 } 8058 if (cmd==7) \ ??edchat_ghook_7: \ 00000138 070059E3 CMP R9,#+7 \ 0000013C 2800001A BNE ??edchat_ghook_8 8059 { 8060 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 8061 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 8062 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 8063 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 8064 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 8065 { 8066 time_to_stop_t9=0; \ 00000198 086484E5 STR R6,[R4, #+1032] 8067 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 8068 { 8069 ed_struct->ed_contact->req_add=0; \ 000001AC 986080E5 STR R6,[R0, #+152] 8070 AddMsgToChat(data); \ 000001B0 0500A0E1 MOV R0,R5 \ 000001B4 ........ BL AddMsgToChat 8071 RecountMenu(ed_struct->ed_contact,1); \ 000001B8 000097E5 LDR R0,[R7, #+0] \ 000001BC 0110A0E3 MOV R1,#+1 \ 000001C0 ........ BL RecountMenu 8072 } 8073 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 8074 { 8075 ed_struct->ed_contact->req_drawack=0; \ 000001D4 9C6080E5 STR R6,[R0, #+156] 8076 DrawAck(data); \ 000001D8 0500A0E1 MOV R0,R5 \ 000001DC ........ BL DrawAck \ 000001E0 B1FFFFEA B ??edchat_ghook_1 8077 } 8078 } 8079 } 8080 if (cmd==0x0C) \ ??edchat_ghook_8: \ 000001E4 0C0059E3 CMP R9,#+12 \ 000001E8 0C00001A BNE ??edchat_ghook_3 8081 { 8082 j=EDIT_GetFocus(data); \ 000001EC 0500A0E1 MOV R0,R5 \ 000001F0 820100EF SWI +386 \ 000001F4 0040A0E1 MOV R4,R0 8083 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 8084 EDIT_SetCursorPos(data,1); \ 00000214 0110A0E3 MOV R1,#+1 \ 00000218 0500A0E1 MOV R0,R5 \ 0000021C D40100EF SWI +468 8085 } 8086 } \ ??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 8087 8088 8089 8090 static const INPUTDIA_DESC edchat_desc = \ edchat_desc: \ 00000000 01000000.... DC32 1, edchat_onkey, edchat_ghook, edchat_locret, 0, menu_skt \ ............ \ ........0000 \ 0000........ \ 00000018 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000020 080000006400 DC32 8, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ 00000038 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000040 000000000000 DC32 0H, 0, 2147483647 \ 0000FFFFFF7F \ 0000004C 2D2D2D2D2D2D DC8 "-------" \ 2D00 \ In segment DATA_C, align 4, align-sorted \ ??sk_1: \ 00000000 FF0F0000 DC16 4095, 0 \ 00000004 ........ DC32 `?` \ 00000008 F00F0000 DC16 4080, 0 \ 0000000C ........ DC32 `?` 8091 { 8092 1, 8093 edchat_onkey, 8094 edchat_ghook, 8095 (void *)edchat_locret, 8096 0, 8097 &menu_skt, 8098 {0,NULL,NULL,NULL}, 8099 FONT_SMALL, 8100 100, 8101 101, 8102 0, 8103 // 0x00000001 - Выровнять по правому краю 8104 // 0x00000002 - Выровнять по центру 8105 // 0x00000004 - Инверсия знакомест 8106 // 0x00000008 - UnderLine 8107 // 0x00000020 - Не переносить слова 8108 // 0x00000200 - bold 8109 0, 8110 // 0x00000002 - ReadOnly 8111 // 0x00000004 - Не двигается курсор 8112 // 0x40000000 - Поменять местами софт-кнопки 8113 0x40000000 8114 }; 8115 \ In segment CODE, align 4, keep-with-next 8116 void CreateEditChat(CLIST *t) 8117 { \ CreateEditChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 8118 8119 void *ma=malloc_adr(); 8120 void *eq; 8121 EDITCONTROL ec; 8122 EDITC_OPTIONS ec_options; 8123 int color, font, type; 8124 int zc; 8125 8126 LOGQ *lp; 8127 int edchat_toitem; 8128 // edcontact=t; 8129 8130 *((int *)(&edchat_hdr.lgp_id))=(int)t->name; \ 00000004 58649FE5 LDR R6,??CreateEditChat_0 ;; edchat_desc 8131 // *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+GetIconIndex(t); 8132 *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+IS_NULLICON; \ 00000008 ........ LDR R7,??DataTable289 ;; icons \ 0000000C 3CD04DE2 SUB SP,SP,#+60 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 148000EF SWI +32788 \ 00000018 0050A0E1 MOV R5,R0 \ 0000001C 140084E2 ADD R0,R4,#+20 \ 00000020 440086E5 STR R0,[R6, #+68] \ 00000024 B40087E2 ADD R0,R7,#+180 \ 00000028 400086E5 STR R0,[R6, #+64] 8133 8134 eq=AllocEQueue(ma,mfree_adr()); \ 0000002C 158000EF SWI +32789 \ 00000030 0010A0E1 MOV R1,R0 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 630100EF SWI +355 8135 8136 /* hist = malloc(256); 8137 if(!GetHistory(hist, 256, t->uin)) 8138 { 8139 ascii2ws(ews,hist); 8140 PrepareEditControl(&ec); 8141 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL|ECF_DISABLE_T9,ews,ews->wsbody[0]); 8142 } 8143 mfree(hist); 8144 8145 AddEditControlToEditQend(eq,&ec,ma); */ 8146 lp=t->log; \ 0000003C A09094E5 LDR R9,[R4, #+160] \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 000059E3 CMP R9,#+0 \ 00000048 8F00000A BEQ ??CreateEditChat_1 8147 8148 while(lp) 8149 { 8150 font = ED_H_FONT_SIZE; \ ??CreateEditChat_2: \ 0000004C ........ LDR R0,??DataTable290 ;; ED_H_FONT_SIZE 8151 if ((zc=lp->acked&3)) \ 00000050 ........ LDR R1,??DataTable291 ;; I_COLOR \ 00000054 00A090E5 LDR R10,[R0, #+0] \ 00000058 040099E5 LDR R0,[R9, #+4] \ 0000005C 00B091E5 LDR R11,[R1, #+0] \ 00000060 030010E2 ANDS R0,R0,#0x3 \ 00000064 0300000A BEQ ??CreateEditChat_3 8152 { 8153 if (zc==1) \ 00000068 010050E3 CMP R0,#+1 \ 0000006C 2200001A BNE ??CreateEditChat_4 8154 color=ACK_COLOR; //Зеленый \ 00000070 ........ LDR R0,??DataTable292 ;; ACK_COLOR \ 00000074 1F0000EA B ??CreateEditChat_5 8155 else 8156 color=I_COLOR; 8157 } 8158 else 8159 { 8160 if (lp->ID==0xFFFFFFFF) \ ??CreateEditChat_3: \ 00000078 080099E5 LDR R0,[R9, #+8] \ 0000007C 010070E3 CMN R0,#+1 \ 00000080 1B00001A BNE ??CreateEditChat_6 8161 { 8162 type = lp->type&0x0F; \ 00000084 0C0099E5 LDR R0,[R9, #+12] \ 00000088 0F1000E2 AND R1,R0,#0xF 8163 if(lp->type&0x10) \ 0000008C 100010E3 TST R0,#0x10 \ 00000090 0D00000A BEQ ??CreateEditChat_7 8164 { 8165 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 00000094 010051E3 CMP R1,#+1 \ 00000098 ........ LDREQ R0,??DataTable293 ;; O_I_COLOR \ 0000009C 0700000A BEQ ??CreateEditChat_8 \ 000000A0 030051E3 CMP R1,#+3 \ 000000A4 0400001A BNE ??CreateEditChat_9 \ 000000A8 ........ LDR R0,??DataTable306 ;; O_X_COLOR \ 000000AC 00B090E5 LDR R11,[R0, #+0] \ 000000B0 ........ LDR R0,??DataTable308 ;; O_ED_X_FONT_SIZE \ ??CreateEditChat_10: \ 000000B4 00A090E5 LDR R10,[R0, #+0] \ 000000B8 0F0000EA B ??CreateEditChat_4 \ ??CreateEditChat_9: \ 000000BC ........ LDR R0,??DataTable296 ;; O_TO_COLOR \ ??CreateEditChat_8: \ 000000C0 00B090E5 LDR R11,[R0, #+0] \ 000000C4 ........ LDR R0,??DataTable297 ;; O_ED_H_FONT_SIZE \ 000000C8 F9FFFFEA B ??CreateEditChat_10 8166 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 8167 } 8168 else 8169 { 8170 color = (type==1)?I_COLOR:((type==3)?X_COLOR:TO_COLOR); \ ??CreateEditChat_7: \ 000000CC 010051E3 CMP R1,#+1 \ 000000D0 0900000A BEQ ??CreateEditChat_4 \ 000000D4 030051E3 CMP R1,#+3 \ 000000D8 0300001A BNE ??CreateEditChat_11 \ 000000DC ........ LDR R0,??DataTable307 ;; X_COLOR \ 000000E0 00B090E5 LDR R11,[R0, #+0] \ 000000E4 ........ LDR R0,??DataTable309 ;; ED_X_FONT_SIZE \ 000000E8 F1FFFFEA B ??CreateEditChat_10 \ ??CreateEditChat_11: \ 000000EC ........ LDR R0,??DataTable300 ;; TO_COLOR \ 000000F0 000000EA B ??CreateEditChat_5 8171 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 8172 } 8173 } 8174 else 8175 color=UNACK_COLOR; //????? \ ??CreateEditChat_6: \ 000000F4 ........ LDR R0,??DataTable301 ;; UNACK_COLOR \ ??CreateEditChat_5: \ 000000F8 00B090E5 LDR R11,[R0, #+0] 8176 } 8177 PrepareEditControl(&ec); \ ??CreateEditChat_4: \ 000000FC 10008DE2 ADD R0,SP,#+16 \ 00000100 640100EF SWI +356 8178 if ((lp->type&0x0F)!=3) \ 00000104 0C0099E5 LDR R0,[R9, #+12] \ 00000108 0F0000E2 AND R0,R0,#0xF \ 0000010C 030050E3 CMP R0,#+3 \ 00000110 0800000A BEQ ??CreateEditChat_12 8179 { 8180 ascii2ws(ews,lp->hdr); \ 00000114 200397E5 LDR R0,[R7, #+800] \ 00000118 101089E2 ADD R1,R9,#+16 \ 0000011C ........ _BLF ascii2ws,??ascii2ws??rA 8181 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000120 203397E5 LDR R3,[R7, #+800] \ 00000124 4020A0E3 MOV R2,#+64 \ 00000128 000093E5 LDR R0,[R3, #+0] \ 0000012C B000D0E1 LDRH R0,[R0, #+0] \ 00000130 01002DE9 PUSH {R0} \ 00000134 030000EA B ??CreateEditChat_13 8182 } 8183 else 8184 { 8185 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??CreateEditChat_12: \ 00000138 0000A0E3 MOV R0,#+0 \ 0000013C 01002DE9 PUSH {R0} \ 00000140 203397E5 LDR R3,[R7, #+800] \ 00000144 2020A0E3 MOV R2,#+32 \ ??CreateEditChat_13: \ 00000148 0110A0E3 MOV R1,#+1 \ 0000014C 14008DE2 ADD R0,SP,#+20 \ 00000150 650100EF SWI +357 \ 00000154 04D08DE2 ADD SP,SP,#+4 8186 } 8187 PrepareEditCOptions(&ec_options); \ 00000158 0D00A0E1 MOV R0,SP \ 0000015C C80100EF SWI +456 8188 SetPenColorToEditCOptions(&ec_options,color); \ 00000160 0B10A0E1 MOV R1,R11 \ 00000164 0D00A0E1 MOV R0,SP \ 00000168 CC0100EF SWI +460 8189 SetFontToEditCOptions(&ec_options,font); \ 0000016C 0A10A0E1 MOV R1,R10 \ 00000170 0D00A0E1 MOV R0,SP \ 00000174 CA0100EF SWI +458 8190 CopyOptionsToEditControl(&ec,&ec_options); \ 00000178 0D10A0E1 MOV R1,SP \ 0000017C 10008DE2 ADD R0,SP,#+16 \ 00000180 CE0100EF SWI +462 8191 AddEditControlToEditQend(eq,&ec,ma); \ 00000184 0520A0E1 MOV R2,R5 \ 00000188 10108DE2 ADD R1,SP,#+16 \ 0000018C 0800A0E1 MOV R0,R8 \ 00000190 660100EF SWI +358 8192 if ((lp->type&0x0F)!=3) \ 00000194 0C0099E5 LDR R0,[R9, #+12] \ 00000198 0F1000E2 AND R1,R0,#0xF \ 0000019C 030051E3 CMP R1,#+3 \ 000001A0 0300000A BEQ ??CreateEditChat_14 8193 { 8194 ParseAnswer(ews,lp->text); \ 000001A4 200397E5 LDR R0,[R7, #+800] \ 000001A8 601089E2 ADD R1,R9,#+96 \ 000001AC ........ BL ParseAnswer \ 000001B0 060000EA B ??CreateEditChat_15 8195 } 8196 else 8197 { 8198 ParseXStatusText(ews,lp->text,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_14: \ 000001B4 100010E3 TST R0,#0x10 \ 000001B8 ........ LDRNE R0,??DataTable306 ;; O_X_COLOR \ 000001BC 601089E2 ADD R1,R9,#+96 \ 000001C0 ........ LDREQ R0,??DataTable307 ;; X_COLOR \ 000001C4 002090E5 LDR R2,[R0, #+0] \ 000001C8 200397E5 LDR R0,[R7, #+800] \ 000001CC ........ BL ParseXStatusText 8199 } 8200 PrepareEditControl(&ec); \ ??CreateEditChat_15: \ 000001D0 10008DE2 ADD R0,SP,#+16 \ 000001D4 640100EF SWI +356 8201 ConstructEditControl(&ec, 8202 ECT_NORMAL_TEXT, 8203 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 8204 ews,ews->wsbody[0]); \ 000001D8 203397E5 LDR R3,[R7, #+800] \ 000001DC 000093E5 LDR R0,[R3, #+0] \ 000001E0 B010D0E1 LDRH R1,[R0, #+0] \ 000001E4 000051E3 CMP R1,#+0 \ 000001E8 0100A0E1 MOV R0,R1 \ 000001EC 01002DE9 PUSH {R0} \ 000001F0 812DA013 MOVNE R2,#+8256 \ 000001F4 2020A003 MOVEQ R2,#+32 \ 000001F8 0310A0E3 MOV R1,#+3 \ 000001FC 14008DE2 ADD R0,SP,#+20 \ 00000200 650100EF SWI +357 8205 PrepareEditCOptions(&ec_options); \ 00000204 04008DE2 ADD R0,SP,#+4 \ 00000208 C80100EF SWI +456 8206 //#ifdef M75 8207 if ((lp->type&0x0F)!=3) \ 0000020C 0C0099E5 LDR R0,[R9, #+12] \ 00000210 04D08DE2 ADD SP,SP,#+4 \ 00000214 0F1000E2 AND R1,R0,#0xF \ 00000218 030051E3 CMP R1,#+3 \ 0000021C 0300000A BEQ ??CreateEditChat_16 8208 { 8209 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000220 100010E3 TST R0,#0x10 \ 00000224 ........ LDRNE R0,??DataTable304 ;; O_ED_FONT_SIZE \ 00000228 ........ LDREQ R0,??DataTable311 ;; ED_FONT_SIZE \ 0000022C 090000EA B ??CreateEditChat_17 8210 } 8211 else 8212 { 8213 SetPenColorToEditCOptions(&ec_options,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_16: \ 00000230 100010E3 TST R0,#0x10 \ 00000234 ........ LDRNE R0,??DataTable306 ;; O_X_COLOR \ 00000238 ........ LDREQ R0,??DataTable307 ;; X_COLOR \ 0000023C 001090E5 LDR R1,[R0, #+0] \ 00000240 0D00A0E1 MOV R0,SP \ 00000244 CC0100EF SWI +460 8214 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_X_FONT_SIZE:ED_X_FONT_SIZE); \ 00000248 0C0099E5 LDR R0,[R9, #+12] \ 0000024C 100010E3 TST R0,#0x10 \ 00000250 ........ LDRNE R0,??DataTable308 ;; O_ED_X_FONT_SIZE \ 00000254 ........ LDREQ R0,??DataTable309 ;; ED_X_FONT_SIZE \ ??CreateEditChat_17: \ 00000258 001090E5 LDR R1,[R0, #+0] \ 0000025C 0D00A0E1 MOV R0,SP \ 00000260 CA0100EF SWI +458 8215 } 8216 //#else 8217 // SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 8218 //#endif 8219 CopyOptionsToEditControl(&ec,&ec_options); \ 00000264 0D10A0E1 MOV R1,SP \ 00000268 10008DE2 ADD R0,SP,#+16 \ 0000026C CE0100EF SWI +462 8220 AddEditControlToEditQend(eq,&ec,ma); \ 00000270 0520A0E1 MOV R2,R5 \ 00000274 10108DE2 ADD R1,SP,#+16 \ 00000278 0800A0E1 MOV R0,R8 \ 0000027C 660100EF SWI +358 8221 lp=lp->next; \ 00000280 009099E5 LDR R9,[R9, #+0] 8222 } \ 00000284 000059E3 CMP R9,#+0 \ 00000288 6FFFFF1A BNE ??CreateEditChat_2 8223 if (t->isunread) total_unread--; \ ??CreateEditChat_1: \ 0000028C 900094E5 LDR R0,[R4, #+144] 8224 total_unread2=total_unread2-t->unread_msg; 8225 t->unread_msg=0; \ 00000290 0090A0E3 MOV R9,#+0 \ 00000294 000050E3 CMP R0,#+0 \ 00000298 A8039715 LDRNE R0,[R7, #+936] \ 0000029C 01004012 SUBNE R0,R0,#+1 \ 000002A0 A8038715 STRNE R0,[R7, #+936] \ 000002A4 FC0297E5 LDR R0,[R7, #+764] \ 000002A8 941094E5 LDR R1,[R4, #+148] \ 000002AC 010040E0 SUB R0,R0,R1 \ 000002B0 FC0287E5 STR R0,[R7, #+764] \ 000002B4 949084E5 STR R9,[R4, #+148] 8226 t->isunread=0; \ 000002B8 909084E5 STR R9,[R4, #+144] 8227 ChangeContactPos(t); \ 000002BC 0400A0E1 MOV R0,R4 \ 000002C0 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 8228 wsprintf(ews, "-------"); \ 000002C4 200397E5 LDR R0,[R7, #+800] \ 000002C8 4C1086E2 ADD R1,R6,#+76 \ 000002CC 240100EF SWI +292 8229 PrepareEditControl(&ec); \ 000002D0 10008DE2 ADD R0,SP,#+16 \ 000002D4 640100EF SWI +356 8230 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000002D8 203397E5 LDR R3,[R7, #+800] \ 000002DC 4020A0E3 MOV R2,#+64 \ 000002E0 000093E5 LDR R0,[R3, #+0] \ 000002E4 0110A0E3 MOV R1,#+1 \ 000002E8 B000D0E1 LDRH R0,[R0, #+0] \ 000002EC 01002DE9 PUSH {R0} \ 000002F0 14008DE2 ADD R0,SP,#+20 \ 000002F4 650100EF SWI +357 8231 PrepareEditCOptions(&ec_options); \ 000002F8 04008DE2 ADD R0,SP,#+4 \ 000002FC C80100EF SWI +456 8232 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000300 ........ LDR R0,??DataTable311 ;; ED_FONT_SIZE \ 00000304 001090E5 LDR R1,[R0, #+0] \ 00000308 04008DE2 ADD R0,SP,#+4 \ 0000030C CA0100EF SWI +458 8233 CopyOptionsToEditControl(&ec,&ec_options); \ 00000310 04108DE2 ADD R1,SP,#+4 \ 00000314 14008DE2 ADD R0,SP,#+20 \ 00000318 CE0100EF SWI +462 8234 AddEditControlToEditQend(eq,&ec,ma); \ 0000031C 0520A0E1 MOV R2,R5 \ 00000320 14108DE2 ADD R1,SP,#+20 \ 00000324 0800A0E1 MOV R0,R8 \ 00000328 660100EF SWI +358 8235 8236 if (t->answer) ParseAnswer(ews,t->answer); \ 0000032C A41094E5 LDR R1,[R4, #+164] \ 00000330 04D08DE2 ADD SP,SP,#+4 \ 00000334 000051E3 CMP R1,#+0 \ 00000338 0200000A BEQ ??CreateEditChat_18 \ 0000033C 200397E5 LDR R0,[R7, #+800] \ 00000340 ........ BL ParseAnswer \ 00000344 020000EA B ??CreateEditChat_19 8237 else CutWSTR(ews,0); \ ??CreateEditChat_18: \ 00000348 200397E5 LDR R0,[R7, #+800] \ 0000034C 0010A0E3 MOV R1,#+0 \ 00000350 260100EF SWI +294 8238 PrepareEditControl(&ec); \ ??CreateEditChat_19: \ 00000354 10008DE2 ADD R0,SP,#+16 \ 00000358 640100EF SWI +356 8239 // ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,1024); 8240 ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,4096); \ 0000035C 04019FE5 LDR R0,??CreateEditChat_0+0x4 ;; FIRST_LETTER \ 00000360 0310A0E3 MOV R1,#+3 \ 00000364 000090E5 LDR R0,[R0, #+0] \ 00000368 000050E3 CMP R0,#+0 \ 0000036C 400DA0E3 MOV R0,#+4096 \ 00000370 01002DE9 PUSH {R0} \ 00000374 203397E5 LDR R3,[R7, #+800] \ 00000378 402DA013 MOVNE R2,#+4096 \ 0000037C 0020A003 MOVEQ R2,#+0 \ 00000380 14008DE2 ADD R0,SP,#+20 \ 00000384 650100EF SWI +357 8241 8242 PrepareEditCOptions(&ec_options); \ 00000388 04008DE2 ADD R0,SP,#+4 \ 0000038C C80100EF SWI +456 8243 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000390 ........ LDR R0,??DataTable311 ;; ED_FONT_SIZE \ 00000394 001090E5 LDR R1,[R0, #+0] \ 00000398 04008DE2 ADD R0,SP,#+4 \ 0000039C CA0100EF SWI +458 8244 CopyOptionsToEditControl(&ec,&ec_options); \ 000003A0 04108DE2 ADD R1,SP,#+4 \ 000003A4 14008DE2 ADD R0,SP,#+20 \ 000003A8 CE0100EF SWI +462 8245 edchat_toitem=AddEditControlToEditQend(eq,&ec,ma); \ 000003AC 0520A0E1 MOV R2,R5 \ 000003B0 14108DE2 ADD R1,SP,#+20 \ 000003B4 0800A0E1 MOV R0,R8 \ 000003B8 660100EF SWI +358 \ 000003BC 00A0A0E1 MOV R10,R0 8246 8247 if (t->req_xtext) \ 000003C0 BC0094E5 LDR R0,[R4, #+188] \ 000003C4 04D08DE2 ADD SP,SP,#+4 \ 000003C8 000050E3 CMP R0,#+0 \ 000003CC 0400000A BEQ ??CreateEditChat_20 8248 { 8249 FreeXText(t); \ 000003D0 0400A0E1 MOV R0,R4 \ 000003D4 ........ _BLF FreeXText,??FreeXText??rA 8250 t->req_xtext=0; \ 000003D8 BC9084E5 STR R9,[R4, #+188] 8251 RequestXText(t->uin); \ 000003DC 0C0094E5 LDR R0,[R4, #+12] \ 000003E0 ........ BL RequestXText 8252 } 8253 8254 EDCHAT_STRUCT *ed_struct=malloc(sizeof(EDCHAT_STRUCT)); \ ??CreateEditChat_20: \ 000003E4 1400A0E3 MOV R0,#+20 \ 000003E8 140000EF SWI +20 \ 000003EC 0050A0E1 MOV R5,R0 8255 ed_struct->ed_contact=t; \ 000003F0 004085E5 STR R4,[R5, #+0] 8256 ed_struct->ed_answer=edchat_toitem; \ 000003F4 08A085E5 STR R10,[R5, #+8] 8257 ed_struct->requested_decrement_total_unread=0; \ 000003F8 0C9085E5 STR R9,[R5, #+12] 8258 t->req_add=0; \ 000003FC 989084E5 STR R9,[R4, #+152] 8259 t->last_log=NULL; \ 00000400 A89084E5 STR R9,[R4, #+168] 8260 8261 // int scr_w=ScreenW(); 8262 // int scr_h=ScreenH(); 8263 // int head_h=HeaderH(); 8264 8265 patch_header(&edchat_hdr); \ 00000404 380086E2 ADD R0,R6,#+56 \ 00000408 ........ _BLF patch_header,??patch_header??rA 8266 patch_input(&edchat_desc); \ 0000040C B891C6E1 STRH R9,[R6, #+24] \ 00000410 8A8100EF SWI +33162 \ 00000414 190080E2 ADD R0,R0,#+25 \ 00000418 BA01C6E1 STRH R0,[R6, #+26] \ 0000041C 888100EF SWI +33160 \ 00000420 010040E2 SUB R0,R0,#+1 \ 00000424 BC01C6E1 STRH R0,[R6, #+28] \ 00000428 898100EF SWI +33161 \ 0000042C 0040A0E1 MOV R4,R0 \ 00000430 8B8100EF SWI +33163 \ 00000434 000044E0 SUB R0,R4,R0 \ 00000438 010040E2 SUB R0,R0,#+1 \ 0000043C BE01C6E1 STRH R0,[R6, #+30] 8267 // edchat_desc.font=ED_FONT_SIZE; 8268 edchat_id=CreateInputTextDialog(&edchat_desc,&edchat_hdr,eq,1,ed_struct); \ 00000440 20002DE9 PUSH {R5} \ 00000444 0130A0E3 MOV R3,#+1 \ 00000448 0820A0E1 MOV R2,R8 \ 0000044C 381086E2 ADD R1,R6,#+56 \ 00000450 0600A0E1 MOV R0,R6 \ 00000454 670100EF SWI +359 \ 00000458 B80387E5 STR R0,[R7, #+952] 8269 } \ 0000045C 40D08DE2 ADD SP,SP,#+64 \ 00000460 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CreateEditChat_0: \ 00000464 ........ DC32 edchat_desc \ 00000468 ........ DC32 FIRST_LETTER 8270 8271 //----------------------------------------------------------------------------- 8272 8273 #define EC_MNU_MAX 9 8274 \ In segment CODE, align 4, keep-with-next 8275 void Quote(GUI *data) 8276 { \ Quote: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 8277 int q_n; 8278 EDITCONTROL ec, ec_hdr; 8279 EDITCONTROL ec_ed; 8280 WSHDR *ed_ws; 8281 WSHDR *ws; 8282 8283 EDCHAT_STRUCT *ed_struct; 8284 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 8285 8286 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 8287 ExtractEditControl(ed_struct->ed_chatgui,q_n,&ec); \ 0000001C 040094E5 LDR R0,[R4, #+4] \ 00000020 2C208DE2 ADD R2,SP,#+44 \ 00000024 0510A0E1 MOV R1,R5 \ 00000028 690100EF SWI +361 8288 ExtractEditControl(ed_struct->ed_chatgui,q_n-1,&ec_hdr); \ 0000002C 040094E5 LDR R0,[R4, #+4] \ 00000030 58208DE2 ADD R2,SP,#+88 \ 00000034 011045E2 SUB R1,R5,#+1 \ 00000038 690100EF SWI +361 8289 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec_ed); \ 0000003C 081094E5 LDR R1,[R4, #+8] \ 00000040 040094E5 LDR R0,[R4, #+4] \ 00000044 0D20A0E1 MOV R2,SP \ 00000048 690100EF SWI +361 8290 8291 ed_ws=AllocWS((ec_ed.maxlen<<1) + 1); \ 0000004C F801DDE1 LDRSH R0,[SP, #+24] \ 00000050 0110A0E3 MOV R1,#+1 \ 00000054 800081E0 ADD R0,R1,R0, LSL #+1 \ 00000058 250100EF SWI +293 \ 0000005C 0050A0E1 MOV R5,R0 8292 if(wstrlen(ec_hdr.pWS)) \ 00000060 80009DE5 LDR R0,[SP, #+128] \ 00000064 230100EF SWI +291 \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 0600000A BEQ ??Quote_0 8293 { 8294 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 8295 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote_1 8296 } 8297 else 8298 CutWSTR(ed_ws,0); \ ??Quote_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 8299 if (EDIT_IsMarkModeActive(ed_struct->ed_chatgui)) \ ??Quote_1: \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C D80100EF SWI +472 \ 000000A0 000050E3 CMP R0,#+0 \ 000000A4 0300000A BEQ ??Quote_2 8300 { 8301 EDIT_GetMarkedText(ed_struct->ed_chatgui,ed_ws); \ 000000A8 040094E5 LDR R0,[R4, #+4] \ 000000AC 0510A0E1 MOV R1,R5 \ 000000B0 D90100EF SWI +473 \ 000000B4 020000EA B ??Quote_3 8302 } 8303 else 8304 { 8305 wstrcat(ed_ws,ec.pWS); \ ??Quote_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 8306 } 8307 int ed_pos=0; \ ??Quote_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 8308 do 8309 { 8310 ed_pos++; \ ??Quote_4: \ 000000D0 017080E2 ADD R7,R0,#+1 8311 wsInsertChar(ed_ws,'>',ed_pos++); \ 000000D4 0720A0E1 MOV R2,R7 \ 000000D8 3E10A0E3 MOV R1,#+62 \ 000000DC 0500A0E1 MOV R0,R5 \ 000000E0 1D0000EF SWI +29 \ 000000E4 017087E2 ADD R7,R7,#+1 8312 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 8313 } 8314 while((ed_pos=wstrchr(ed_ws,ed_pos,'\r'))!=0xFFFF); \ 000000F8 0D20A0E3 MOV R2,#+13 \ 000000FC 0710A0E1 MOV R1,R7 \ 00000100 0500A0E1 MOV R0,R5 \ 00000104 DC0100EF SWI +476 \ 00000108 060050E1 CMP R0,R6 \ 0000010C EFFFFF1A BNE ??Quote_4 8315 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 8316 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 8317 ws=AllocWS(ec_ed.pWS->wsbody[0]+ed_ws->wsbody[0]); \ 00000128 28009DE5 LDR R0,[SP, #+40] \ 0000012C 001095E5 LDR R1,[R5, #+0] \ 00000130 000090E5 LDR R0,[R0, #+0] \ 00000134 B010D1E1 LDRH R1,[R1, #+0] \ 00000138 B000D0E1 LDRH R0,[R0, #+0] \ 0000013C 000081E0 ADD R0,R1,R0 \ 00000140 250100EF SWI +293 8318 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 8319 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 8320 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 8321 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 8322 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); \ 00000170 081094E5 LDR R1,[R4, #+8] \ 00000174 040094E5 LDR R0,[R4, #+4] \ 00000178 9B0100EF SWI +411 8323 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 0000017C 040094E5 LDR R0,[R4, #+4] \ 00000180 0610A0E1 MOV R1,R6 \ 00000184 810100EF SWI +385 8324 FreeWS(ws); \ 00000188 0600A0E1 MOV R0,R6 \ 0000018C 290100EF SWI +297 8325 GeneralFuncF1(1); \ 00000190 0100A0E3 MOV R0,#+1 \ 00000194 3B0100EF SWI +315 8326 } \ 00000198 84D08DE2 ADD SP,SP,#+132 \ 0000019C F080BDE8 POP {R4-R7,PC} ;; return 8327 \ In segment CODE, align 4, keep-with-next 8328 void Quote2(GUI *data)//цитирование без фокуса на ответ 8329 { \ Quote2: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 8330 int q_n; 8331 EDITCONTROL ec, ec_hdr; 8332 EDITCONTROL ec_ed; 8333 WSHDR *ed_ws; 8334 WSHDR *ws; 8335 8336 EDCHAT_STRUCT *ed_struct; 8337 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 8338 8339 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 8340 ExtractEditControl(ed_struct->ed_chatgui,q_n,&ec); \ 0000001C 040094E5 LDR R0,[R4, #+4] \ 00000020 2C208DE2 ADD R2,SP,#+44 \ 00000024 0510A0E1 MOV R1,R5 \ 00000028 690100EF SWI +361 8341 ExtractEditControl(ed_struct->ed_chatgui,q_n-1,&ec_hdr); \ 0000002C 040094E5 LDR R0,[R4, #+4] \ 00000030 58208DE2 ADD R2,SP,#+88 \ 00000034 011045E2 SUB R1,R5,#+1 \ 00000038 690100EF SWI +361 8342 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec_ed); \ 0000003C 081094E5 LDR R1,[R4, #+8] \ 00000040 040094E5 LDR R0,[R4, #+4] \ 00000044 0D20A0E1 MOV R2,SP \ 00000048 690100EF SWI +361 8343 8344 ed_ws=AllocWS((ec_ed.maxlen<<1) + 1); \ 0000004C F801DDE1 LDRSH R0,[SP, #+24] \ 00000050 0110A0E3 MOV R1,#+1 \ 00000054 800081E0 ADD R0,R1,R0, LSL #+1 \ 00000058 250100EF SWI +293 \ 0000005C 0050A0E1 MOV R5,R0 8345 if(wstrlen(ec_hdr.pWS)) \ 00000060 80009DE5 LDR R0,[SP, #+128] \ 00000064 230100EF SWI +291 \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 0600000A BEQ ??Quote2_0 8346 { 8347 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 8348 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote2_1 8349 } 8350 else 8351 CutWSTR(ed_ws,0); \ ??Quote2_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 8352 if (EDIT_IsMarkModeActive(ed_struct->ed_chatgui)) \ ??Quote2_1: \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C D80100EF SWI +472 \ 000000A0 000050E3 CMP R0,#+0 \ 000000A4 0300000A BEQ ??Quote2_2 8353 { 8354 EDIT_GetMarkedText(ed_struct->ed_chatgui,ed_ws); \ 000000A8 040094E5 LDR R0,[R4, #+4] \ 000000AC 0510A0E1 MOV R1,R5 \ 000000B0 D90100EF SWI +473 \ 000000B4 020000EA B ??Quote2_3 8355 } 8356 else 8357 { 8358 wstrcat(ed_ws,ec.pWS); \ ??Quote2_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 8359 } 8360 int ed_pos=0; \ ??Quote2_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 8361 do 8362 { 8363 ed_pos++; \ ??Quote2_4: \ 000000D0 017080E2 ADD R7,R0,#+1 8364 wsInsertChar(ed_ws,'>',ed_pos++); \ 000000D4 0720A0E1 MOV R2,R7 \ 000000D8 3E10A0E3 MOV R1,#+62 \ 000000DC 0500A0E1 MOV R0,R5 \ 000000E0 1D0000EF SWI +29 \ 000000E4 017087E2 ADD R7,R7,#+1 8365 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 8366 } 8367 while((ed_pos=wstrchr(ed_ws,ed_pos,'\r'))!=0xFFFF); \ 000000F8 0D20A0E3 MOV R2,#+13 \ 000000FC 0710A0E1 MOV R1,R7 \ 00000100 0500A0E1 MOV R0,R5 \ 00000104 DC0100EF SWI +476 \ 00000108 060050E1 CMP R0,R6 \ 0000010C EFFFFF1A BNE ??Quote2_4 8368 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 8369 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 8370 ws=AllocWS(ec_ed.pWS->wsbody[0]+ed_ws->wsbody[0]); \ 00000128 28009DE5 LDR R0,[SP, #+40] \ 0000012C 001095E5 LDR R1,[R5, #+0] \ 00000130 000090E5 LDR R0,[R0, #+0] \ 00000134 B010D1E1 LDRH R1,[R1, #+0] \ 00000138 B000D0E1 LDRH R0,[R0, #+0] \ 0000013C 000081E0 ADD R0,R1,R0 \ 00000140 250100EF SWI +293 8371 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 8372 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 8373 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 8374 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 8375 int ii=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000170 040094E5 LDR R0,[R4, #+4] \ 00000174 820100EF SWI +386 8376 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); \ 00000178 081094E5 LDR R1,[R4, #+8] \ 0000017C 0050A0E1 MOV R5,R0 \ 00000180 040094E5 LDR R0,[R4, #+4] \ 00000184 9B0100EF SWI +411 8377 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000188 040094E5 LDR R0,[R4, #+4] \ 0000018C 0610A0E1 MOV R1,R6 \ 00000190 810100EF SWI +385 8378 EDIT_SetFocus(ed_struct->ed_chatgui,ii); \ 00000194 040094E5 LDR R0,[R4, #+4] \ 00000198 0510A0E1 MOV R1,R5 \ 0000019C 9B0100EF SWI +411 8379 FreeWS(ws); \ 000001A0 0600A0E1 MOV R0,R6 \ 000001A4 290100EF SWI +297 8380 GeneralFuncF1(1); \ 000001A8 0100A0E3 MOV R0,#+1 \ 000001AC 3B0100EF SWI +315 8381 } \ 000001B0 84D08DE2 ADD SP,SP,#+132 \ 000001B4 F080BDE8 POP {R4-R7,PC} ;; return 8382 8383 \ In segment CODE, align 4, keep-with-next 8384 void GetShortInfo(GUI *data) 8385 { \ GetShortInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} 8386 EDCHAT_STRUCT *ed_struct; 8387 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 8388 8389 TPKT *p; 8390 CLIST *t; 8391 if ((t=ed_struct->ed_contact)&&(connect_state==3)) \ 0000000C 005094E5 LDR R5,[R4, #+0] \ 00000010 000055E3 CMP R5,#+0 \ 00000014 1F00000A BEQ ??GetShortInfo_0 \ 00000018 ........ LDR R0,??DataTable319 ;; icons + 900 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 030050E3 CMP R0,#+3 \ 00000024 1B00001A BNE ??GetShortInfo_0 8392 { 8393 p=malloc(sizeof(PKT)); \ 00000028 0800A0E3 MOV R0,#+8 \ 0000002C 140000EF SWI +20 8394 p->pkt.uin=t->uin; 8395 p->pkt.type=T_REQINFOSHORT; 8396 p->pkt.data_len=0; 8397 AddStringToLog(t, 0x01, "Request info...", I_str,0xFFFFFFFF,1); \ 00000030 ........ LDR R3,??DataTable317 ;; I_str \ 00000034 68209FE5 LDR R2,??GetShortInfo_1 ;; `?` \ 00000038 0060A0E1 MOV R6,R0 \ 0000003C 0C0095E5 LDR R0,[R5, #+12] \ 00000040 0110A0E3 MOV R1,#+1 \ 00000044 000086E5 STR R0,[R6, #+0] \ 00000048 0B00A0E3 MOV R0,#+11 \ 0000004C B400C6E1 STRH R0,[R6, #+4] \ 00000050 0000A0E3 MOV R0,#+0 \ 00000054 B600C6E1 STRH R0,[R6, #+6] \ 00000058 0100A0E3 MOV R0,#+1 \ 0000005C 01002DE9 PUSH {R0} \ 00000060 000060E2 RSB R0,R0,#+0 \ 00000064 01002DE9 PUSH {R0} \ 00000068 0500A0E1 MOV R0,R5 \ 0000006C ........ BL AddStringToLog 8398 AddMsgToChat(ed_struct->ed_chatgui); \ 00000070 040094E5 LDR R0,[R4, #+4] \ 00000074 ........ BL AddMsgToChat 8399 RecountMenu(t,1); \ 00000078 0110A0E3 MOV R1,#+1 \ 0000007C 0500A0E1 MOV R0,R5 \ 00000080 ........ BL RecountMenu 8400 SUBPROC((void *)SendAnswer,0,p); \ 00000084 ........ LDR R0,??DataTable318 ;; SendAnswer \ 00000088 0620A0E1 MOV R2,R6 \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 710100EF SWI +369 \ 00000094 08D08DE2 ADD SP,SP,#+8 8401 } 8402 GeneralFuncF1(1); \ ??GetShortInfo_0: \ 00000098 0100A0E3 MOV R0,#+1 \ 0000009C 3B0100EF SWI +315 8403 } \ 000000A0 7080BDE8 POP {R4-R6,PC} ;; return \ ??GetShortInfo_1: \ 000000A4 ........ DC32 `?` 8404 8405 void AskNickAndAddContact(EDCHAT_STRUCT *); \ In segment CODE, align 4, keep-with-next 8406 void AddCurContact(GUI *data) 8407 { \ AddCurContact: \ 00000000 00402DE9 PUSH {LR} 8408 EDCHAT_STRUCT *ed_struct; 8409 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 8410 8411 if ((ed_struct->ed_contact)&&(connect_state==3)) AskNickAndAddContact(ed_struct); \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0400000A BEQ ??AddCurContact_0 \ 00000014 ........ LDR R1,??DataTable319 ;; icons + 900 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0000001A BNE ??AddCurContact_0 \ 00000024 ........ _BLF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA 8412 GeneralFuncF1(1); \ ??AddCurContact_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 3B0100EF SWI +315 8413 } \ 00000030 0080BDE8 POP {PC} ;; return 8414 \ In segment CODE, align 4, keep-with-next 8415 void SendAuthReq(GUI *data) 8416 { \ SendAuthReq: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 14D04DE2 SUB SP,SP,#+20 8417 EDCHAT_STRUCT *ed_struct; 8418 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 8419 8420 TPKT *p; 8421 CLIST *t; 8422 int l; 8423 const char s[]=LG_AUTHREQ; \ 0000000C BC109FE5 LDR R1,??SendAuthReq_0 ;; `?ed_contact)&&(connect_state==3)) \ 00000020 005094E5 LDR R5,[R4, #+0] \ 00000024 000055E3 CMP R5,#+0 \ 00000028 2400000A BEQ ??SendAuthReq_1 \ 0000002C ........ LDR R0,??DataTable319 ;; icons + 900 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthReq_1 8425 { 8426 p=malloc(sizeof(PKT)+(l=strlen(s))+1); \ 0000003C 0D00A0E1 MOV R0,SP \ 00000040 1B0000EF SWI +27 \ 00000044 0060A0E1 MOV R6,R0 \ 00000048 090086E2 ADD R0,R6,#+9 \ 0000004C 140000EF SWI +20 \ 00000050 0070A0E1 MOV R7,R0 8427 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 8428 p->pkt.type=T_AUTHREQ; 8429 p->pkt.data_len=l; 8430 strcpy(p->data,s); \ 00000058 0D10A0E1 MOV R1,SP \ 0000005C 000087E5 STR R0,[R7, #+0] \ 00000060 0A00A0E3 MOV R0,#+10 \ 00000064 B400C7E1 STRH R0,[R7, #+4] \ 00000068 B660C7E1 STRH R6,[R7, #+6] \ 0000006C 080087E2 ADD R0,R7,#+8 \ 00000070 1A0000EF SWI +26 8431 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 ........ LDR R3,??DataTable317 ;; I_str \ 00000078 0100A0E3 MOV R0,#+1 \ 0000007C 01002DE9 PUSH {R0} \ 00000080 082087E2 ADD R2,R7,#+8 \ 00000084 0110A0E3 MOV R1,#+1 \ 00000088 000060E2 RSB R0,R0,#+0 \ 0000008C 01002DE9 PUSH {R0} \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 ........ BL AddStringToLog 8432 AddMsgToChat(ed_struct->ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 8433 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 ........ BL RecountMenu 8434 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable318 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 8435 } 8436 GeneralFuncF1(1); \ ??SendAuthReq_1: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 8437 } \ 000000C8 14D08DE2 ADD SP,SP,#+20 \ 000000CC F080BDE8 POP {R4-R7,PC} ;; return \ ??SendAuthReq_0: \ 000000D0 ........ DC32 `?ed_contact)&&(connect_state==3)) \ 00000020 005094E5 LDR R5,[R4, #+0] \ 00000024 000055E3 CMP R5,#+0 \ 00000028 2400000A BEQ ??SendAuthGrant_1 \ 0000002C ........ LDR R0,??DataTable319 ;; icons + 900 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthGrant_1 8449 { 8450 p=malloc(sizeof(PKT)+(l=strlen(s))+1); \ 0000003C 0D00A0E1 MOV R0,SP \ 00000040 1B0000EF SWI +27 \ 00000044 0060A0E1 MOV R6,R0 \ 00000048 090086E2 ADD R0,R6,#+9 \ 0000004C 140000EF SWI +20 \ 00000050 0070A0E1 MOV R7,R0 8451 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 8452 p->pkt.type=T_AUTHGRANT; 8453 p->pkt.data_len=l; 8454 strcpy(p->data,s); \ 00000058 0D10A0E1 MOV R1,SP \ 0000005C 000087E5 STR R0,[R7, #+0] \ 00000060 0E00A0E3 MOV R0,#+14 \ 00000064 B400C7E1 STRH R0,[R7, #+4] \ 00000068 B660C7E1 STRH R6,[R7, #+6] \ 0000006C 080087E2 ADD R0,R7,#+8 \ 00000070 1A0000EF SWI +26 8455 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 ........ LDR R3,??DataTable320 ;; I_str \ 00000078 0100A0E3 MOV R0,#+1 \ 0000007C 01002DE9 PUSH {R0} \ 00000080 082087E2 ADD R2,R7,#+8 \ 00000084 0110A0E3 MOV R1,#+1 \ 00000088 000060E2 RSB R0,R0,#+0 \ 0000008C 01002DE9 PUSH {R0} \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 ........ BL AddStringToLog 8456 AddMsgToChat(ed_struct->ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 8457 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 ........ BL RecountMenu 8458 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable321 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 8459 } 8460 GeneralFuncF1(1); \ ??SendAuthGrant_1: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 8461 } \ 000000C8 FF80BDE8 POP {R0-R7,PC} ;; return \ ??SendAuthGrant_0: \ 000000CC ........ DC32 `?ed_contact)) \ 00000014 005095E5 LDR R5,[R5, #+0] \ 00000018 0040A0E1 MOV R4,R0 \ 0000001C 000055E3 CMP R5,#+0 \ 00000020 2600000A BEQ ??OpenLogfile_0 8471 { 8472 if(HISTORY_SAVE_TYPE) \ 00000024 ........ LDR R1,??DataTable322 ;; UIN \ 00000028 A4E09FE5 LDR LR,??OpenLogfile_1 ;; HISTORY_SAVE_TYPE \ 0000002C 003091E5 LDR R3,[R1, #+0] \ 00000030 A0109FE5 LDR R1,??OpenLogfile_1+0x4 ;; HISTORY_TYPE \ 00000034 00E09EE5 LDR LR,[LR, #+0] \ 00000038 0C0095E5 LDR R0,[R5, #+12] \ 0000003C 00C091E5 LDR R12,[R1, #+0] \ 00000040 94109FE5 LDR R1,??OpenLogfile_1+0x8 ;; `?` \ 00000044 94209FE5 LDR R2,??OpenLogfile_1+0xC ;; HIST_PATH \ 00000048 00005EE3 CMP LR,#+0 \ 0000004C 0E00000A BEQ ??OpenLogfile_2 8473 { 8474 if(HISTORY_TYPE) \ 00000050 01002DE9 PUSH {R0} \ 00000054 00005CE3 CMP R12,#+0 \ 00000058 0500000A BEQ ??OpenLogfile_3 8475 wsprintf(ws,"%s\\%u\\%s(%d).txt", HIST_PATH, UIN, t->name, t->uin); \ 0000005C 140085E2 ADD R0,R5,#+20 \ 00000060 01002DE9 PUSH {R0} \ 00000064 0400A0E1 MOV R0,R4 \ 00000068 240100EF SWI +292 \ 0000006C 08D08DE2 ADD SP,SP,#+8 \ 00000070 0E0000EA B ??OpenLogfile_4 8476 else 8477 wsprintf(ws,"%s\\%s(%d).txt", HIST_PATH, t->name, t->uin); \ ??OpenLogfile_3: \ 00000074 143085E2 ADD R3,R5,#+20 \ 00000078 141081E2 ADD R1,R1,#+20 \ ??OpenLogfile_5: \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 240100EF SWI +292 \ 00000084 04D08DE2 ADD SP,SP,#+4 \ 00000088 080000EA B ??OpenLogfile_4 8478 } 8479 else 8480 { 8481 if(HISTORY_TYPE) \ ??OpenLogfile_2: \ 0000008C 00005CE3 CMP R12,#+0 \ 00000090 0200000A BEQ ??OpenLogfile_6 8482 wsprintf(ws,"%s\\%u\\%u.txt", HIST_PATH, UIN, t->uin); \ 00000094 01002DE9 PUSH {R0} \ 00000098 241081E2 ADD R1,R1,#+36 \ 0000009C F6FFFFEA B ??OpenLogfile_5 8483 else 8484 wsprintf(ws,"%s\\%u.txt", HIST_PATH, t->uin); \ ??OpenLogfile_6: \ 000000A0 0030A0E1 MOV R3,R0 \ 000000A4 341081E2 ADD R1,R1,#+52 \ 000000A8 0400A0E1 MOV R0,R4 \ 000000AC 240100EF SWI +292 8485 } 8486 ExecuteFile(ws,NULL,NULL); \ ??OpenLogfile_4: \ 000000B0 0020A0E3 MOV R2,#+0 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 0400A0E1 MOV R0,R4 \ 000000BC 940000EF SWI +148 8487 } 8488 FreeWS(ws); \ ??OpenLogfile_0: \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 290100EF SWI +297 8489 GeneralFuncF1(1); \ 000000C8 0100A0E3 MOV R0,#+1 \ 000000CC 3B0100EF SWI +315 8490 } \ 000000D0 3080BDE8 POP {R4,R5,PC} ;; return \ ??OpenLogfile_1: \ 000000D4 ........ DC32 HISTORY_SAVE_TYPE \ 000000D8 ........ DC32 HISTORY_TYPE \ 000000DC ........ DC32 `?` \ 000000E0 ........ DC32 HIST_PATH 8491 \ In segment CODE, align 4, keep-with-next 8492 void ClearLog(GUI *data/*,void *dummy*/) 8493 { \ ClearLog: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 8494 EDITCONTROL ec; 8495 EDCHAT_STRUCT *ed_struct; 8496 WSHDR *ws; 8497 CLIST *t; 8498 8499 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 8500 8501 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); \ 00000010 081094E5 LDR R1,[R4, #+8] \ 00000014 040094E5 LDR R0,[R4, #+4] \ 00000018 0D20A0E1 MOV R2,SP \ 0000001C 690100EF SWI +361 8502 if(wstrlen(ec.pWS)>0) \ 00000020 28009DE5 LDR R0,[SP, #+40] \ 00000024 230100EF SWI +291 \ 00000028 010050E3 CMP R0,#+1 \ 0000002C 0D0000BA BLT ??ClearLog_0 8503 { 8504 ws=AllocWS(1); \ 00000030 0100A0E3 MOV R0,#+1 \ 00000034 250100EF SWI +293 \ 00000038 0050A0E1 MOV R5,R0 8505 CutWSTR(ws,0); \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 260100EF SWI +294 8506 8507 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); \ 00000044 081094E5 LDR R1,[R4, #+8] \ 00000048 040094E5 LDR R0,[R4, #+4] \ 0000004C 9B0100EF SWI +411 8508 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000050 040094E5 LDR R0,[R4, #+4] \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 810100EF SWI +385 8509 8510 FreeWS(ws); \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 290100EF SWI +297 8511 GeneralFuncF1(1); \ 00000064 1D0000EA B ??ClearLog_1 8512 } 8513 else 8514 { 8515 8516 if ((t=ed_struct->ed_contact)) \ ??ClearLog_0: \ 00000068 005094E5 LDR R5,[R4, #+0] \ 0000006C 000055E3 CMP R5,#+0 \ 00000070 1C00000A BEQ ??ClearLog_2 8517 { 8518 if (t->log) \ 00000074 A00095E5 LDR R0,[R5, #+160] \ 00000078 0060A0E3 MOV R6,#+0 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 1200000A BEQ ??ClearLog_3 8519 { 8520 FreeLOGQ(&t->log); \ 00000084 A00085E2 ADD R0,R5,#+160 \ 00000088 ........ BL FreeLOGQ 8521 t->msg_count=0; \ 0000008C B06085E5 STR R6,[R5, #+176] 8522 if (ed_struct->ed_answer>=2&&ed_struct->ed_chatgui) \ 00000090 080094E5 LDR R0,[R4, #+8] \ 00000094 020050E3 CMP R0,#+2 \ 00000098 0C0000BA BLT ??ClearLog_3 \ 0000009C 040094E5 LDR R0,[R4, #+4] \ 000000A0 000050E3 CMP R0,#+0 \ 000000A4 0900000A BEQ ??ClearLog_3 \ 000000A8 050000EA B ??ClearLog_4 8523 { 8524 while(ed_struct->ed_answer!=2) 8525 { 8526 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??ClearLog_5: \ 000000AC 040094E5 LDR R0,[R4, #+4] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 D10100EF SWI +465 8527 ed_struct->ed_answer--; \ 000000B8 080094E5 LDR R0,[R4, #+8] \ 000000BC 010040E2 SUB R0,R0,#+1 \ 000000C0 080084E5 STR R0,[R4, #+8] 8528 } \ ??ClearLog_4: \ 000000C4 080094E5 LDR R0,[R4, #+8] \ 000000C8 020050E3 CMP R0,#+2 \ 000000CC F6FFFF1A BNE ??ClearLog_5 8529 } 8530 } 8531 t->isactive=0; //by BoBa 18.06.07 \ ??ClearLog_3: \ 000000D0 AC6085E5 STR R6,[R5, #+172] 8532 RecountMenu(t,1); \ 000000D4 0110A0E3 MOV R1,#+1 \ 000000D8 0500A0E1 MOV R0,R5 \ 000000DC ........ BL RecountMenu 8533 GeneralFuncF1(1); \ ??ClearLog_1: \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 3B0100EF SWI +315 8534 } 8535 } 8536 } \ ??ClearLog_2: \ 000000E8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000EC 7080BDE8 POP {R4-R6,PC} ;; return 8537 \ In segment CODE, align 4, keep-with-next 8538 void ecmenu_ghook(void *data, int cmd) 8539 { \ ecmenu_ghook: \ 00000000 00402DE9 PUSH {LR} 8540 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 8541 { 8542 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 8543 } 8544 } \ 00000010 0080BDE8 POP {PC} ;; return 8545 \ In segment DATA_C, align 4, align-sorted 8546 static const MENUITEM_DESC ecmenu_ITEMS[EC_MNU_MAX]= \ ecmenu_ITEMS: \ 00000000 00000000.... DC32 0H, `?` \ S_ICONS: \ 00000070 DS8 116 \ 000000E4 REQUIRE `?` \ MAINCSM: \ 000000E4 DS8 72 \ 0000012C REQUIRE `?` \ gipc: \ 0000012C DS8 12 \ 00000138 REQUIRE `?` \ tmr_gipc: \ 00000138 DS8 12 \ 00000144 REQUIRE `?` \ def_set: \ 00000144 DS8 388 \ 000002C8 REQUIRE `?` \ main_d: \ 000002C8 DS8 4 \ 000002CC REQUIRE `?` \ align: \ 000002CC DS8 4 \ 000002D0 REQUIRE `?` \ canvasdata: \ 000002D0 DS8 4 \ 000002D4 REQUIRE `?` \ paused_height: \ 000002D4 DS8 4 \ 000002D8 REQUIRE `?` \ wsBuffer: \ 000002D8 DS8 4 \ 000002DC REQUIRE `?` \ uins: \ 000002DC DS8 4 \ 000002E0 REQUIRE `?` \ saver_on: \ 000002E0 DS8 4 \ 000002E4 REQUIRE `?` \ Is_PING_On: \ 000002E4 DS8 4 \ 000002E8 REQUIRE `?` \ Is_SLI_On: \ 000002E8 DS8 4 \ 000002EC REQUIRE `?` \ Is_SMARTCPU_On: \ 000002EC DS8 4 \ 000002F0 REQUIRE `?` \ Is_INC_On: \ 000002F0 DS8 4 \ 000002F4 REQUIRE `?` \ Is_ILU_On: \ 000002F4 DS8 4 \ 000002F8 REQUIRE `?` \ Is_Double_Vibra_On: \ 000002F8 DS8 4 \ 000002FC REQUIRE `?` \ total_unread2: \ 000002FC DS8 4 \ 00000300 REQUIRE `?` \ maincsm_id: \ 00000300 DS8 4 \ 00000304 REQUIRE `?` \ maingui_id: \ 00000304 DS8 4 \ 00000308 REQUIRE `?` \ SENDMSGCOUNT: \ 00000308 DS8 4 \ 0000030C REQUIRE `?` \ IsActiveUp: \ 0000030C DS8 4 \ 00000310 REQUIRE `?` \ Is_Vibra_Enabled: \ 00000310 DS8 4 \ 00000314 REQUIRE `?` \ Is_Id3tag_Enabled: \ 00000314 DS8 4 \ 00000318 REQUIRE `?` \ CurrentStatus: \ 00000318 DS8 4 \ 0000031C REQUIRE `?` \ CurrentXStatus: \ 0000031C DS8 4 \ 00000320 REQUIRE `?` \ ews: \ 00000320 DS8 4 \ 00000324 REQUIRE `?` \ scrsTime: \ 00000324 DS8 4 \ 00000328 REQUIRE `?` \ msg_away_timer: \ 00000328 DS8 4 \ 0000032C REQUIRE `?` \ away_m: \ 0000032C DS8 4 \ 00000330 REQUIRE `?` \ status_rem: \ 00000330 DS8 4 \ 00000334 REQUIRE `?` \ change_back_status: \ 00000334 DS8 4 \ 00000338 REQUIRE `?` \ Show_XTX: \ 00000338 DS8 4 \ 0000033C REQUIRE `?` \ Is_UPTIME_On: \ 0000033C DS8 4 \ 00000340 REQUIRE `?` \ uptimeHour: \ 00000340 DS8 4 \ 00000344 REQUIRE `?` \ uptimeMin: \ 00000344 DS8 4 \ 00000348 REQUIRE `?` \ uptimeSec: \ 00000348 DS8 4 \ 0000034C REQUIRE `?` \ tracktimer: \ 0000034C DS8 4 \ 00000350 REQUIRE `?` \ input_awaymsg_id: \ 00000350 DS8 4 \ 00000354 REQUIRE `?` \ silenthide: \ 00000354 DS8 4 \ 00000358 REQUIRE `?` \ disautorecconect: \ 00000358 DS8 4 \ 0000035C REQUIRE `?` \ Is_Sounds_Enabled: \ 0000035C DS8 4 \ 00000360 REQUIRE `?` \ Is_Show_Offline: \ 00000360 DS8 4 \ 00000364 REQUIRE `?` \ Is_Show_Groups: \ 00000364 DS8 4 \ 00000368 REQUIRE `?` \ CurrentPrivateStatus: \ 00000368 DS8 4 \ 0000036C REQUIRE `?` \ vibra_count: \ 0000036C DS8 4 \ 00000370 REQUIRE `?` \ templates_chars: \ 00000370 DS8 4 \ 00000374 REQUIRE `?` \ templates_lines: \ 00000374 DS8 4 \ 00000378 REQUIRE `?` \ bot_chars: \ 00000378 DS8 4 \ 0000037C REQUIRE `?` \ bot_lines: \ 0000037C DS8 4 \ 00000380 REQUIRE `?` \ RXstate: \ 00000380 DS8 4 \ 00000384 REQUIRE `?` \ connect_state: \ 00000384 DS8 4 \ 00000388 REQUIRE `?` \ sock: \ 00000388 DS8 4 \ 0000038C REQUIRE `?` \ TOTALRECEIVED: \ 0000038C DS8 4 \ 00000390 REQUIRE `?` \ TOTALSENDED: \ 00000390 DS8 4 \ 00000394 REQUIRE `?` \ ALLTOTALRECEIVED: \ 00000394 DS8 4 \ 00000398 REQUIRE `?` \ ALLTOTALSENDED: \ 00000398 DS8 4 \ 0000039C REQUIRE `?` \ sendq_l: \ 0000039C DS8 4 \ 000003A0 REQUIRE `?` \ sendq_p: \ 000003A0 DS8 4 \ 000003A4 REQUIRE `?` \ is_gprs_online: \ 000003A4 DS8 4 \ 000003A8 REQUIRE `?` \ total_unread: \ 000003A8 DS8 4 \ 000003AC REQUIRE `?` \ cltop: \ 000003AC DS8 4 \ 000003B0 REQUIRE `?` \ GROUP_CACHE: \ 000003B0 DS8 4 \ 000003B4 REQUIRE `?` \ contactlist_menu_id: \ 000003B4 DS8 4 \ 000003B8 REQUIRE `?` \ edchat_id: \ 000003B8 DS8 4 \ 000003BC REQUIRE `?` \ ICON_HD: \ 000003BC DS8 4 \ 000003C0 REQUIRE `?` \ tenseconds_to_ping: \ 000003C0 DS8 4 \ 000003C4 REQUIRE `?` \ on_off_timer: \ 000003C4 DS8 4 \ 000003C8 REQUIRE `?` \ kopa_online: \ 000003C8 DS8 4 \ 000003CC REQUIRE `?` \ kopa_kontaktu: \ 000003CC DS8 4 \ 000003D0 REQUIRE `?` \ itemFromDisp: \ 000003D0 DS8 4 \ 000003D4 REQUIRE `?` \ totalItems: \ 000003D4 DS8 4 \ 000003D8 REQUIRE `?` \ curpos: \ 000003D8 DS8 4 \ 000003DC REQUIRE `?` \ curpage: \ 000003DC DS8 4 \ 000003E0 REQUIRE `?` \ collum: \ 000003E0 DS8 4 \ 000003E4 REQUIRE `?` \ LINE_MODE: \ 000003E4 DS8 4 \ 000003E8 REQUIRE `?` \ VIEW_MODE: \ 000003E8 DS8 4 \ 000003EC REQUIRE `?` \ ShowLoadScreen: \ 000003EC DS8 4 \ 000003F0 REQUIRE `?` \ DNR_ID: \ 000003F0 DS8 4 \ 000003F4 REQUIRE `?` \ DNR_TRIES: \ 000003F4 DS8 4 \ 000003F8 REQUIRE `?` \ host_counter: \ 000003F8 DS8 4 \ 000003FC REQUIRE `?` \ ping_time: \ 000003FC DS8 4 \ 00000400 REQUIRE `?` \ main_msg_timer2: \ 00000400 DS8 4 \ 00000404 REQUIRE `?` \ NEW_MSG: \ 00000404 DS8 4 \ 00000408 REQUIRE `?` \ time_to_stop_t9: \ 00000408 DS8 4 \ 0000040C REQUIRE `?` \ comanda: \ 0000040C DS8 4 \ 00000410 REQUIRE `?` \ INC_show: \ 00000410 DS8 4 \ 00000414 REQUIRE `?` \ INC_show2: \ 00000414 DS8 4 \ 00000418 REQUIRE `?` \ old_ed_redraw: \ 00000418 DS8 4 \ 0000041C REQUIRE `?` \ 0000041C DS8 64 \ 0000045C REQUIRE `?` \ elf_path: \ 0000045C DS8 256 \ 0000055C REQUIRE `?` \ ContactT9Key: \ 0000055C DS8 32 \ 0000057C REQUIRE `?` \ talk_sound: \ 0000057C DS8 128 \ 000005FC REQUIRE `?` \ unread_msg_info: \ 000005FC DS8 64 \ 0000063C REQUIRE `?` \ last_msg_buffer: \ 0000063C DS8 4096 \ 0000163C REQUIRE `?` \ ping_tmr: \ 0000163C DS8 16 \ 0000164C REQUIRE `?` \ PINGO: \ 0000164C DS8 256 \ 0000174C REQUIRE `?` \ scrsTmr: \ 0000174C DS8 16 \ 0000175C REQUIRE `?` \ away_msg: \ 0000175C DS8 264 \ 00001864 REQUIRE `?` \ away_msg_time: \ 00001864 DS8 64 \ 000018A4 REQUIRE `?` \ away_msg_time_dace: \ 000018A4 DS8 16 \ 000018B4 REQUIRE `?` \ tim_zone: \ 000018B4 DS8 16 \ 000018C4 REQUIRE `?` \ away_tmr: \ 000018C4 DS8 16 \ 000018D4 REQUIRE `?` \ autoChangeStatus: \ 000018D4 DS8 16 \ 000018E4 REQUIRE `?` \ remind_tmr: \ 000018E4 DS8 16 \ 000018F4 REQUIRE `?` \ uptime_tmr: \ 000018F4 DS8 16 \ 00001904 REQUIRE `?` \ tracktmr: \ 00001904 DS8 16 \ 00001914 REQUIRE `?` \ onlineTime: \ 00001914 DS8 128 \ 00001994 REQUIRE `?` \ sli_tmr: \ 00001994 DS8 16 \ 000019A4 REQUIRE `?` \ logmsg: \ 000019A4 DS8 256 \ 00001AA4 REQUIRE `?` \ tmr_illumination: \ 00001AA4 DS8 16 \ 00001AB4 REQUIRE `?` \ tmr_vibra: \ 00001AB4 DS8 16 \ 00001AC4 REQUIRE `?` \ reconnect_tmr: \ 00001AC4 DS8 16 \ 00001AD4 REQUIRE `?` \ tmr_active: \ 00001AD4 DS8 16 \ 00001AE4 REQUIRE `?` \ clmenu_sk_r: \ 00001AE4 DS8 16 \ 00001AF4 REQUIRE `?` \ on_off_buf: \ 00001AF4 DS8 128 \ 00001B74 REQUIRE `?` \ hostbuf2: \ 00001B74 DS8 128 \ 00001BF4 REQUIRE `?` \ clrBlack: \ 00001BF4 DS8 4 \ 00001BF8 REQUIRE `?` \ clrWhite: \ 00001BF8 DS8 4 \ 00001BFC REQUIRE `?` \ clrRed: \ 00001BFC DS8 4 \ 00001C00 REQUIRE `?` \ transparent: \ 00001C00 DS8 4 \ 00001C04 REQUIRE `?` \ blue: \ 00001C04 DS8 8 \ 00001C0C REQUIRE `?` \ hostname: \ 00001C0C DS8 128 \ 00001C8C REQUIRE `?` \ I_UIN: \ 00001C8C DS8 12 \ 00001C98 REQUIRE `?` \ a_txt: \ 00001C98 DS8 48 \ 00001CC8 REQUIRE `?` \ s_txt: \ 00001CC8 DS8 48 \ 00001CF8 REQUIRE `?` \ d_txt: \ 00001CF8 DS8 48 \ 00001D28 REQUIRE `?` \ f_txt: \ 00001D28 DS8 48 \ 00001D58 REQUIRE `?` \ g_txt: \ 00001D58 DS8 48 \ 00001D88 REQUIRE `?` \ develop: \ 00001D88 DS8 16 \ 00001D98 REQUIRE `?` \ requests1: \ 00001D98 DS8 24 \ 00001DB0 REQUIRE `?` \ requests2: \ 00001DB0 DS8 20 \ 00001DC4 REQUIRE `?` \ requests3: \ 00001DC4 DS8 24 \ 00001DDC REQUIRE `?` \ requests4: \ 00001DDC DS8 20 \ 00001DF0 REQUIRE `?` \ mod_info: \ 00001DF0 DS8 264 \ 00001EF8 REQUIRE `?` \ show_nick: \ 00001EF8 DS8 32 \ 00001F18 REQUIRE `?` \ onContact: \ 00001F18 DS8 64 \ 00001F58 REQUIRE `?` \ incs2: \ 00001F58 DS8 16 \ 00001F68 REQUIRE `?` \ tm22: \ 00001F68 DS8 16 \ 00001F78 REQUIRE `?` 8561 { 8562 Quote, 8563 Quote2, 8564 AddSmile, 8565 GetShortInfo, 8566 AddCurContact, 8567 SendAuthReq, 8568 SendAuthGrant, 8569 OpenLogfile, 8570 ClearLog, 8571 }; 8572 8573 char ecm_contactname[64]; \ ecm_contactname: \ 00001F78 DS8 64 \ 00001FB8 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ ??sk: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ input_awaymsg_sk: \ 00000000 DS8 24 \ 00000018 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ input_awaymsg_skt: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ icon_array: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ 00000008 DS8 4 \ 0000000C REQUIRE `?` \ 0000000C DS8 32 \ 0000002C REQUIRE `?` \ cont_hdr: \ 0000002C DS8 64 \ 0000006C 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 `?` 8574 \ In segment DATA_C, align 4, align-sorted 8575 static const HEADER_DESC ecmenu_HDR={0,0,NULL,NULL,NULL,(int)ecm_contactname,LGP_NULL}; \ ecmenu_HDR: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000008 00000000.... DC32 0H, ecm_contactname, 2147483647 \ ....FFFFFF7F \ 00000014 080000000000 DC32 8, 0H, ecmenu_ghook, 0H, menusoftkeys, menu_skt, 0, 0H \ 0000........ \ 00000000.... \ ............ \ 000000000000 \ 0000 \ 00000034 ............ DC32 ecmenu_ITEMS, ecmenu_HNDLS, 9 \ ....09000000 8576 8577 static const MENU_DESC ecmenu_STRUCT= 8578 { 8579 8,NULL,ecmenu_ghook,NULL, 8580 menusoftkeys, 8581 &menu_skt, 8582 0, 8583 NULL, 8584 ecmenu_ITEMS, 8585 ecmenu_HNDLS, 8586 EC_MNU_MAX 8587 }; 8588 \ In segment CODE, align 4, keep-with-next 8589 void ec_menu(EDCHAT_STRUCT *ed_struct) 8590 { \ ec_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 28D04DE2 SUB SP,SP,#+40 \ 00000008 0040A0E1 MOV R4,R0 8591 CLIST *t; 8592 int to_remove[EC_MNU_MAX+1]; 8593 int remove=0; 8594 if ((t=ed_struct->ed_contact)) \ 0000000C 001094E5 LDR R1,[R4, #+0] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 4800000A BEQ ??ec_menu_0 8595 { 8596 if (t->name) \ 00000018 ........ LDR R5,??DataTable323 ;; icons \ 0000001C 7800A0E3 MOV R0,#+120 \ 00000020 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000024 050080E0 ADD R0,R0,R5 \ 00000028 142091E2 ADDS R2,R1,#+20 \ 0000002C 0300000A BEQ ??ec_menu_1 8597 { 8598 strncpy(ecm_contactname,t->name,63); \ 00000030 3F20A0E3 MOV R2,#+63 \ 00000034 141081E2 ADD R1,R1,#+20 \ 00000038 160100EF SWI +278 \ 0000003C 020000EA B ??ec_menu_2 8599 } 8600 else 8601 { 8602 sprintf(ecm_contactname,"%u",t->uin); \ ??ec_menu_1: \ 00000040 0C2091E5 LDR R2,[R1, #+12] \ 00000044 3E1F8FE2 ADR R1,??ec_menu_3 ;; "%u" \ 00000048 160000EF SWI +22 8603 } 8604 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ec_menu_2: \ 0000004C 040094E5 LDR R0,[R4, #+4] \ 00000050 820100EF SWI +386 \ 00000054 082094E5 LDR R2,[R4, #+8] \ 00000058 0210A0E3 MOV R1,#+2 \ 0000005C 020050E1 CMP R0,R2 \ 00000060 0500001A BNE ??ec_menu_4 8605 { 8606 to_remove[++remove]=0; \ 00000064 0020A0E3 MOV R2,#+0 \ 00000068 04208DE5 STR R2,[SP, #+4] 8607 to_remove[++remove]=1; \ 0000006C 0260A0E3 MOV R6,#+2 \ 00000070 0120A0E3 MOV R2,#+1 \ 00000074 08208DE5 STR R2,[SP, #+8] \ 00000078 010000EA B ??ec_menu_5 8608 } 8609 else 8610 { 8611 // to_remove[++remove]=1; 8612 to_remove[++remove]=2; \ ??ec_menu_4: \ 0000007C 0160A0E3 MOV R6,#+1 \ 00000080 04108DE5 STR R1,[SP, #+4] 8613 } 8614 8615 if (ed_struct->ed_answer<=2) \ ??ec_menu_5: \ 00000084 080094E5 LDR R0,[R4, #+8] \ 00000088 030050E3 CMP R0,#+3 \ 0000008C 030000AA BGE ??ec_menu_6 8616 to_remove[++remove]=7; \ 00000090 016086E2 ADD R6,R6,#+1 \ 00000094 0D00A0E1 MOV R0,SP \ 00000098 0720A0E3 MOV R2,#+7 \ 0000009C 062180E7 STR R2,[R0, +R6, LSL #+2] 8617 8618 if (!ed_struct->ed_contact || connect_state!=3) \ ??ec_menu_6: \ 000000A0 000094E5 LDR R0,[R4, #+0] \ 000000A4 000050E3 CMP R0,#+0 \ 000000A8 0200000A BEQ ??ec_menu_7 \ 000000AC 840395E5 LDR R0,[R5, #+900] \ 000000B0 030050E3 CMP R0,#+3 \ 000000B4 1000000A BEQ ??ec_menu_8 8619 { 8620 to_remove[++remove]=2; \ ??ec_menu_7: \ 000000B8 010086E2 ADD R0,R6,#+1 \ 000000BC 0D20A0E1 MOV R2,SP \ 000000C0 001182E7 STR R1,[R2, +R0, LSL #+2] 8621 to_remove[++remove]=3; \ 000000C4 010080E2 ADD R0,R0,#+1 \ 000000C8 0D10A0E1 MOV R1,SP \ 000000CC 0320A0E3 MOV R2,#+3 \ 000000D0 002181E7 STR R2,[R1, +R0, LSL #+2] 8622 to_remove[++remove]=4; \ 000000D4 010080E2 ADD R0,R0,#+1 \ 000000D8 0420A0E3 MOV R2,#+4 \ 000000DC 002181E7 STR R2,[R1, +R0, LSL #+2] 8623 to_remove[++remove]=5; \ 000000E0 010080E2 ADD R0,R0,#+1 \ 000000E4 0520A0E3 MOV R2,#+5 \ 000000E8 002181E7 STR R2,[R1, +R0, LSL #+2] 8624 to_remove[++remove]=6; \ 000000EC 016080E2 ADD R6,R0,#+1 \ 000000F0 0D00A0E1 MOV R0,SP \ 000000F4 0610A0E3 MOV R1,#+6 \ 000000F8 061180E7 STR R1,[R0, +R6, LSL #+2] 8625 } 8626 8627 patch_header(&ecmenu_HDR); \ ??ec_menu_8: \ 000000FC 44509FE5 LDR R5,??ec_menu_3+0x4 ;; ecmenu_HDR \ 00000100 0500A0E1 MOV R0,R5 \ 00000104 ........ _BLF patch_header,??patch_header??rA 8628 to_remove[0]=remove; \ 00000108 00608DE5 STR R6,[SP, #+0] 8629 CreateMenu(0,0,&ecmenu_STRUCT,&ecmenu_HDR,0,EC_MNU_MAX,ed_struct,to_remove); \ 0000010C 0D00A0E1 MOV R0,SP \ 00000110 01002DE9 PUSH {R0} \ 00000114 10002DE9 PUSH {R4} \ 00000118 0530A0E1 MOV R3,R5 \ 0000011C 0900A0E3 MOV R0,#+9 \ 00000120 01002DE9 PUSH {R0} \ 00000124 142085E2 ADD R2,R5,#+20 \ 00000128 0010A0E3 MOV R1,#+0 \ 0000012C 0000A0E3 MOV R0,#+0 \ 00000130 01002DE9 PUSH {R0} \ 00000134 520100EF SWI +338 \ 00000138 10D08DE2 ADD SP,SP,#+16 8630 } 8631 } \ ??ec_menu_0: \ 0000013C 28D08DE2 ADD SP,SP,#+40 ;; stack cleaning \ 00000140 7080BDE8 POP {R4-R6,PC} ;; return \ ??ec_menu_3: \ 00000144 25750000 DC8 "%u",+0 \ 00000148 ........ DC32 ecmenu_HDR 8632 8633 \ In segment CODE, align 4, keep-with-next 8634 void AskNickAndAddContact(EDCHAT_STRUCT *ed_struct) 8635 { 8636 CreateAddContactGrpDialog(ed_struct->ed_contact); \ AskNickAndAddContact: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 ........ _BF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA ;; tailcall 8637 } 8638 \ In segment CODE, align 4, keep-with-next 8639 void AddSmile(GUI *data) 8640 { \ AddSmile: \ 00000000 00402DE9 PUSH {LR} 8641 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 8642 CreateSmileSelectGUI(ed_struct); \ 00000008 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 8643 GeneralFuncF1(1); \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0100EF SWI +315 8644 } \ 00000014 0080BDE8 POP {PC} ;; return \ In segment CODE, align 4, keep-with-next \ ??DataTable1: \ 00000000 ........ DC32 Pinger2 \ In segment CODE, align 4, keep-with-next \ ??DataTable2: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable6: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable9: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable11: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable17: \ 00000000 ........ DC32 Remind_Timer2 \ In segment CODE, align 4, keep-with-next \ ??DataTable20: \ 00000000 ........ DC32 GetTags \ In segment CODE, align 4, keep-with-next \ ??DataTable22: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable26: \ 00000000 ........ DC32 showAwayIdle \ In segment CODE, align 4, keep-with-next \ ??DataTable27: \ 00000000 ........ DC32 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable28: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable31: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable32: \ 00000000 ........ DC32 awayMsg \ In segment CODE, align 4, keep-with-next \ ??DataTable34: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable38: \ 00000000 ........ DC32 icons_names \ In segment CODE, align 4, keep-with-next \ ??DataTable39: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable45: \ 00000000 ........ DC32 def_setting \ In segment CODE, align 4, keep-with-next \ ??DataTable46: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable48: \ 00000000 ........ DC32 ind_set_xstatus \ In segment CODE, align 4, keep-with-next \ ??DataTable54: \ 00000000 ........ DC32 vibraPower \ In segment CODE, align 4, keep-with-next \ ??DataTable57: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable65: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable67: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable68: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable77: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable79: \ 00000000 ........ DC32 icon_array + 8 \ In segment CODE, align 4, keep-with-next \ ??DataTable80: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable82: \ 00000000 ........ DC32 icon_array \ In segment CODE, align 4, keep-with-next \ ??DataTable83: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable84: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable86: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable87: \ 00000000 ........ DC32 suc_config_name \ In segment CODE, align 4, keep-with-next \ ??DataTable88: \ 00000000 ........ DC32 suc_config_name_mod \ In segment CODE, align 4, keep-with-next \ ??DataTable89: \ 00000000 ........ DC32 janis \ In segment CODE, align 4, keep-with-next \ ??DataTable90: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable91: \ 00000000 ........ DC32 icons + 940 \ In segment CODE, align 4, keep-with-next \ ??DataTable94: \ 00000000 ........ DC32 icons + 7168 \ In segment CODE, align 4, keep-with-next \ ??DataTable95: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable96: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable100: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable101: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable102: \ 00000000 ........ DC32 isLogStatusChange \ In segment CODE, align 4, keep-with-next \ ??DataTable103: \ 00000000 ........ DC32 NumXStatusToIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable106: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable108: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable111: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable112: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable113: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable117: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable119: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable120: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable122: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable123: \ 00000000 ........ DC32 ignor_list \ In segment CODE, align 4, keep-with-next \ ??DataTable124: \ 00000000 ........ DC32 extended_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable125: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable126: \ 00000000 ........ DC32 janis \ In segment CODE, align 4, keep-with-next \ ??DataTable127: \ 00000000 ........ DC32 main_count \ In segment CODE, align 4, keep-with-next \ ??DataTable129: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable131: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable132: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable133: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable134: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable144: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable145: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable146: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable148: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable149: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable150: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable151: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable152: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable153: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable154: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable155: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable161: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable164: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable166: \ 00000000 ........ DC32 CmdMenuHeader \ In segment CODE, align 4, keep-with-next \ ??DataTable167: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable168: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable170: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable173: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable174: \ 00000000 ........ DC32 main_count \ In segment CODE, align 4, keep-with-next \ ??DataTable175: \ 00000000 ........ DC32 main2_count \ In segment CODE, align 4, keep-with-next \ ??DataTable176: \ 00000000 ........ DC32 ignor_list \ In segment CODE, align 4, keep-with-next \ ??DataTable177: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable178: \ 00000000 ........ DC32 awayMsg \ In segment CODE, align 4, keep-with-next \ ??DataTable179: \ 00000000 6678231A DC32 0x1a237866 \ In segment CODE, align 4, keep-with-next \ ??DataTable183: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable184: \ 00000000 ........ DC32 PopupFont \ In segment CODE, align 4, keep-with-next \ ??DataTable185: \ 00000000 ........ DC32 NumStatusToIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable186: \ 00000000 ........ DC32 PopupBGCl \ In segment CODE, align 4, keep-with-next \ ??DataTable191: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable192: \ 00000000 ........ DC32 isLogStatusChange \ In segment CODE, align 4, keep-with-next \ ??DataTable193: \ 00000000 ........ DC32 extended_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable194: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable195: \ 00000000 ........ DC32 automsgcount \ In segment CODE, align 4, keep-with-next \ ??DataTable196: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable199: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable200: \ 00000000 ........ DC32 main_count \ In segment CODE, align 4, keep-with-next \ ??DataTable204: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable205: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable206: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable211: \ 00000000 ........ DC32 IsInvertSoftKey \ In segment CODE, align 4, keep-with-next \ ??DataTable214: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable216: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable218: \ 00000000 ........ DC32 process_active_timer \ In segment CODE, align 4, keep-with-next \ ??DataTable219: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable221: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable222: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable224: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable226: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable227: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable230: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable235: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable236: \ 00000000 ........ DC32 showAwayIdle \ In segment CODE, align 4, keep-with-next \ ??DataTable237: \ 00000000 ........ DC32 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable239: \ 00000000 ........ DC32 suc_config_name_mod \ In segment CODE, align 4, keep-with-next \ ??DataTable243: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable244: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable245: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable246: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable248: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable249: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable250: \ 00000000 ........ DC32 ClearSendQ \ In segment CODE, align 4, keep-with-next \ ??DataTable251: \ 00000000 ........ DC32 NumStatusToIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable252: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable253: \ 00000000 ........ DC32 ShowStatusIcon \ In segment CODE, align 4, keep-with-next \ ??DataTable254: \ 00000000 ........ DC32 NumXStatusToIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable255: \ 00000000 6678231A DC32 0x1a237866 \ In segment CODE, align 4, keep-with-next \ ??DataTable256: \ 00000000 ........ DC32 show_xstatus \ In segment CODE, align 4, keep-with-next \ ??DataTable260: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable261: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable262: \ 00000000 ........ DC32 suc_config_name \ In segment CODE, align 4, keep-with-next \ ??DataTable263: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable264: \ 00000000 ........ DC32 fontpath \ In segment CODE, align 4, keep-with-next \ ??DataTable265: \ 00000000 ........ DC32 bgrColor \ In segment CODE, align 4, keep-with-next \ ??DataTable266: \ 00000000 ........ DC32 fontColor \ In segment CODE, align 4, keep-with-next \ ??DataTable267: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable268: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable269: \ 00000000 ........ DC32 Pinger2 \ In segment CODE, align 4, keep-with-next \ ??DataTable270: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable272: \ 00000000 ........ DC32 icons + 940 \ In segment CODE, align 4, keep-with-next \ ??DataTable274: \ 00000000 ........ DC32 IsMultiBuffer \ In segment CODE, align 4, keep-with-next \ ??DataTable276: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable277: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable278: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable279: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable281: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable284: \ 00000000 ........ DC32 main2_count \ In segment CODE, align 4, keep-with-next \ ??DataTable285: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable286: \ 00000000 ........ DC32 IsMultiBuffer \ In segment CODE, align 4, keep-with-next \ ??DataTable289: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable290: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable291: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable292: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable293: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable296: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable297: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable300: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable301: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable304: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable306: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable307: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable308: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable309: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable311: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable317: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable318: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable319: \ 00000000 ........ DC32 icons + 900 \ In segment CODE, align 4, keep-with-next \ ??DataTable320: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable321: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable322: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable323: \ 00000000 ........ DC32 icons \ In segment CODE, align 4, keep-with-next \ ??DataTable324: \ 00000000 ........ DC32 GetTags \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000010 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000020 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000030 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000040 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000050 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000060 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000070 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000080 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000090 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000000000 \ 0000 \ `?`: \ 000000E4 ............ DC32 maincsm_onmessage, maincsm_oncreate, 0, 0, 0, 0, maincsm_onclose \ ....00000000 \ 000000000000 \ 000000000000 \ ........ \ 00000100 2C0000000100 DC32 44, 1, minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ 0000........ \ ........CCCC \ AA5555AA3333 \ 00000000 \ 0000011C 8B00 DC16 139 \ 0000011E 0000 DC8 0, 0 \ 00000120 49636F6E4261 DC8 "IconBar" \ 7200 \ 00000128 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000012C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00000138 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00000144 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000154 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000164 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000174 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000184 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000194 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000204 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000214 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000224 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000234 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000244 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000254 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000264 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000274 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000284 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000294 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000000000 \ 0000 \ `?`: \ 000002C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002CC 00000000 DC32 0 \ `?`: \ 000002D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002D4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002D8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002DC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002E0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002E4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002E8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002EC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002F4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002FC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000300 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000304 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000308 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000030C 00000000 DC32 0 \ `?`: \ 00000310 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000314 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000318 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000031C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000320 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000324 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000328 00000000 DC32 0 \ `?`: \ 0000032C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000330 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000334 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000338 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000033C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000340 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000344 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000348 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000034C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000350 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000354 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000358 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000035C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000360 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000364 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000368 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000036C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000370 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000374 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000378 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000037C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000380 F6FFFFFF DC32 -10 \ `?`: \ 00000384 00000000 DC32 0 \ `?`: \ 00000388 FFFFFFFF DC32 -1 \ `?`: \ 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 DC32 0 \ `?`: \ 000003A0 00000000 DC32 0H \ `?`: \ 000003A4 01000000 DC32 1 \ `?`: \ 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 DC32 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 00000000 DC32 0 \ `?`: \ 000003DC 01000000 DC32 1 \ `?`: \ 000003E0 00000000 DC32 0 \ `?`: \ 000003E4 00000000 DC32 0 \ `?`: \ 000003E8 01000000 DC32 1 \ `?`: \ 000003EC 01000000 DC32 1 \ `?`: \ 000003F0 00000000 DC32 0 \ `?`: \ 000003F4 03000000 DC32 3 \ `?`: \ 000003F8 00000000 DC32 0 \ `?`: \ 000003FC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000400 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000404 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000408 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000040C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000410 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000414 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000418 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000041C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000042C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000043C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000044C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000045C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000046C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000047C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000048C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000049C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000050C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000051C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000052C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000053C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000054C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000055C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000056C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000057C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000058C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000059C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000005FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000060C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000061C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000062C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000063C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000064C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000065C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000066C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000067C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000068C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000069C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000070C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000071C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000072C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000073C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000074C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000075C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000076C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000077C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000078C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000079C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000080C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000081C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000082C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000083C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000084C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000085C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000086C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000087C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000088C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000089C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000090C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000091C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000092C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000093C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000094C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000095C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000096C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000097C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000098C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000099C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ABC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ACC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ADC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ECC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000100C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000101C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000102C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000103C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000104C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000105C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000106C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000107C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000108C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000109C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000110C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000111C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000112C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000113C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000114C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000115C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000116C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000117C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000118C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000119C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000120C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000121C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000122C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000123C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000124C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000125C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000126C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000127C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000128C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000129C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000130C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000131C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000132C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000133C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000134C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000135C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000136C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000137C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000138C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000139C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000140C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000141C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000142C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000143C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000144C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000145C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000146C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000147C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000148C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000149C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000150C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000151C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000152C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000153C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000154C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000155C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000156C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000157C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000158C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000159C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000160C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000161C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000162C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000163C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000164C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000165C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000166C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000167C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000168C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000169C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000170C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000171C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000172C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000173C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000174C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000175C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000176C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000177C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000178C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000179C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000180C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000181C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000182C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000183C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000184C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000185C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00001864 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001874 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001884 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001894 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001904 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001914 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001924 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001934 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001944 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001954 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001964 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001974 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001984 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001994 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000019A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001AA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001AB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001AC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001AD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001AE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001AF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001B74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001BF4 00000064 DC8 0, 0, 0, 100 \ `?`: \ 00001BF8 FFFFFF64 DC8 255, 255, 255, 100 \ `?`: \ 00001BFC FF000064 DC8 255, 0, 0, 100 \ `?`: \ 00001C00 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00001C04 0000FF6400 DC8 0, 0, 0FFH, 64H, 0 \ 00001C09 000000 DC8 0, 0, 0 \ `?`: \ 00001C0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001C8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 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 53656E64696E DC8 "Sending online time..." \ 67206F6E6C69 \ 6E652074696D \ 652E2E2E00 \ 00001DAF 00 DC8 0 \ `?`: \ 00001DB0 53656E64696E DC8 "Sending msg info..." \ 67206D736720 \ 696E666F2E2E \ 2E00 \ `?`: \ 00001DC4 53656E64696E DC8 "Sending battery info..." \ 672062617474 \ 65727920696E \ 666F2E2E2E00 \ `?`: \ 00001DDC 53656E64696E DC8 "Sending mod info..." \ 67206D6F6420 \ 696E666F2E2E \ 2E00 \ `?`: \ 00001DF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001ED0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 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 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 FF0F0000 DC16 4095, 0 \ 00000004 ........ DC32 `?`: \ 00000000 18000000 DC16 24, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 ........0000 DC32 input_awaymsg_sk, 0 \ 0000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00000008 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000000C ............ DC32 ChangeVibraContact, ChangeSoundContact, ChangeAutoMsg \ ............ \ 00000018 ............ DC32 ChangeShowXstatus, ChangeAccess, ChangeAwaySignal \ ............ \ 00000024 ............ DC32 ChangeLoadHistory, ChangeAutobot \ .... \ `?`: \ 0000002C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000003C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000004C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000005C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000008 000000000000 DC32 0H, 0, 2147483647 \ 0000FFFFFF7F \ `?`: \ 00000014 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000018 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000001C 00000000 DC32 0 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 53656E64696E DC8 "Sending offline info..." \ 67206F66666C \ 696E6520696E \ 666F2E2E2E00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 474D54202D31 DC8 "GMT -11:00" \ 313A303000 \ 0000000B 00 DC8 0 \ 0000000C 474D54202D31 DC8 "GMT -10:00" \ 303A303000 \ 00000017 00 DC8 0 \ 00000018 474D54202D30 DC8 "GMT -09:00" \ 393A303000 \ 00000023 00 DC8 0 \ 00000024 474D54202D30 DC8 "GMT -08:00" \ 383A303000 \ 0000002F 00 DC8 0 \ 00000030 474D54202D30 DC8 "GMT -07:00" \ 373A303000 \ 0000003B 00 DC8 0 \ 0000003C 474D54202D30 DC8 "GMT -06:00" \ 363A303000 \ 00000047 00 DC8 0 \ 00000048 474D54202D30 DC8 "GMT -05:00" \ 353A303000 \ 00000053 00 DC8 0 \ 00000054 474D54202D30 DC8 "GMT -04:00" \ 343A303000 \ 0000005F 00 DC8 0 \ 00000060 474D54202D30 DC8 "GMT -03:30" \ 333A333000 \ 0000006B 00 DC8 0 \ 0000006C 474D54202D30 DC8 "GMT -03:00" \ 333A303000 \ 00000077 00 DC8 0 \ 00000078 474D54202D30 DC8 "GMT -02:00" \ 323A303000 \ 00000083 00 DC8 0 \ 00000084 474D54202D30 DC8 "GMT -01:00" \ 313A303000 \ 0000008F 00 DC8 0 \ 00000090 474D54203030 DC8 "GMT 00:00" \ 3A303000 \ 0000009A 0000 DC8 0, 0 \ 0000009C 474D54202B30 DC8 "GMT +01:00" \ 313A303000 \ 000000A7 00 DC8 0 \ 000000A8 474D54202B30 DC8 "GMT +02:00" \ 323A303000 \ 000000B3 00 DC8 0 \ 000000B4 474D54202B30 DC8 "GMT +03:00" \ 333A303000 \ 000000BF 00 DC8 0 \ 000000C0 474D54202B30 DC8 "GMT +03:30" \ 333A333000 \ 000000CB 00 DC8 0 \ 000000CC 474D54202B30 DC8 "GMT +04:00" \ 343A303000 \ 000000D7 00 DC8 0 \ 000000D8 474D54202B30 DC8 "GMT +04:30" \ 343A333000 \ 000000E3 00 DC8 0 \ 000000E4 474D54202B30 DC8 "GMT +05:00" \ 353A303000 \ 000000EF 00 DC8 0 \ 000000F0 474D54202B30 DC8 "GMT +05:30" \ 353A333000 \ 000000FB 00 DC8 0 \ 000000FC 474D54202B30 DC8 "GMT +05:45" \ 353A343500 \ 00000107 00 DC8 0 \ 00000108 474D54202B30 DC8 "GMT +06:00" \ 363A303000 \ 00000113 00 DC8 0 \ 00000114 474D54202B30 DC8 "GMT +06:30" \ 363A333000 \ 0000011F 00 DC8 0 \ 00000120 474D54202B30 DC8 "GMT +07:00" \ 373A303000 \ 0000012B 00 DC8 0 \ 0000012C 474D54202B30 DC8 "GMT +08:00" \ 383A303000 \ 00000137 00 DC8 0 \ 00000138 474D54202B30 DC8 "GMT +09:00" \ 393A303000 \ 00000143 00 DC8 0 \ 00000144 474D54202B30 DC8 "GMT +09:30" \ 393A333000 \ 0000014F 00 DC8 0 \ 00000150 474D54202B31 DC8 "GMT +10:00" \ 303A303000 \ 0000015B 00 DC8 0 \ 0000015C 474D54202B31 DC8 "GMT +11:00" \ 313A303000 \ 00000167 00 DC8 0 \ 00000168 474D54202B31 DC8 "GMT +12:00" \ 323A303000 \ 00000173 00 DC8 0 \ 00000174 474D54202B31 DC8 "GMT +13:00" \ 333A303000 \ 0000017F 00 DC8 0 \ 00000180 474D54202D31 DC8 "GMT -12:00" \ 323A303000 \ 0000018B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 417761792066 DC8 "Away from [%s]" \ 726F6D205B25 \ 735D00 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 257400 DC8 "%t" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 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 4, align-sorted \ `?`: \ 00000000 FF000015 DC8 255, 0, 0, 21 \ 00000004 253032643A25 DC8 "%02d:%02d" \ 30326400 \ 0000000E 0000 DC8 0, 0 \ 00000010 2820CEF2F1F3 DC8 "( \316\362\361\363\362\361\362\342\363\376 \357\360\350\354\345\360\355\356 \361 %02d:%02d [%s] )" \ F2F1F2E2F3FE \ 20EFF0E8ECE5 \ F0EDEE20F120 \ 253032643A25 \ 303264205B25 \ 735D202900 \ 00000039 000000 DC8 0, 0, 0 \ 0000003C 2820CDE5E4EE DC8 "( \315\345\344\356\361\362\363\357\345\355 \357\360\350\354\345\360\355\356 \361 %02d:%02d [%s] )" \ F1F2F3EFE5ED \ 20EFF0E8ECE5 \ F0EDEE20F120 \ 253032643A25 \ 303264205B25 \ 735D202900 \ 00000065 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5B41205B2573 DC8 "[A [%s] ]" \ 5D205D00 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ 00000000 5B565D00 DC8 "[V]" \ In segment DATA_C, align 4, align-sorted \ 00000000 5B535D00 DC8 "[S]" \ In segment DATA_C, align 4, align-sorted \ 00000000 5B525D00 DC8 "[R]" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CCE5EDFE00 DC8 "\314\345\355\376" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 0A00 DC8 "\012" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 73656E642072 DC8 "send res %d" \ 657320256400 \ 0000000C 53656E642064 DC8 "Send delayed..." \ 656C61796564 \ 2E2E2E00 \ 0000001C 53656E642065 DC8 "Send error!" \ 72726F722100 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5369655F2530 DC8 "Sie_%04d" \ 346400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 257300 DC8 "%s" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25733A202573 DC8 "%s: %s" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 253032643A25 DC8 "%02d:%02d:%02d %02d.%02d %s:\015\012" \ 3032643A2530 \ 326420253032 \ 642E25303264 \ 2025733A0D0A \ 00 \ 0000001F 00 DC8 0 \ 00000020 253032643A25 DC8 "%02d:%02d:%02d %02d.%02d %s:" \ 3032643A2530 \ 326420253032 \ 642E25303264 \ 2025733A00 \ 0000003D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5C636D642E74 DC8 "\\cmd.txt" \ 787400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CEF2EAEBFEF7 DC8 "\316\362\352\353\376\367\345\355" \ E5ED00 \ 00000009 000000 DC8 0, 0, 0 \ 0000000C CDE5E2E8E4E8 DC8 "\315\345\342\350\344\350\354\373\351" \ ECFBE900 \ 00000016 0000 DC8 0, 0 \ 00000018 CEF2F1F3F2F1 DC8 "\316\362\361\363\362\361\342\363\345\362" \ E2F3E5F200 \ 00000023 00 DC8 0 \ 00000024 CDE520E4EEF1 DC8 "\315\345 \344\356\361\362\363\357\345\355" \ F2F3EFE5ED00 \ 00000030 C7E0EDFFF200 DC8 "\307\340\355\377\362" \ 00000036 0000 DC8 0, 0 \ 00000038 CDE520E1E5F1 DC8 "\315\345 \341\345\361\357\356\352\356\350\362\374" \ EFEEEAEEE8F2 \ FC00 \ 00000046 0000 DC8 0, 0 \ 00000048 C4E5EFF0E5F1 DC8 "\304\345\357\360\345\361\361\350\377" \ F1E8FF00 \ 00000052 0000 DC8 0, 0 \ 00000054 C7EBEEE900 DC8 "\307\353\356\351" \ 00000059 000000 DC8 0, 0, 0 \ 0000005C C4EEECE000 DC8 "\304\356\354\340" \ 00000061 000000 DC8 0, 0, 0 \ 00000064 D0E0E1EEF2E0 DC8 "\320\340\341\356\362\340" \ 00 \ 0000006B 00 DC8 0 \ 0000006C C220F1E5F2E8 DC8 "\302 \361\345\362\350" \ 00 \ 00000073 00 DC8 0 \ 00000074 C3EEF2EEE220 DC8 "\303\356\362\356\342 \341\356\353\362\340\362\374" \ E1EEEBF2E0F2 \ FC00 \ 00000082 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ 00000000 C6F0F300 DC8 "\306\360\363" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6D6F64206279 DC8 6DH, 6FH, 64H, 20H, 62H, 79H, 20H, 45H \ 2045 \ 00000008 76696C666F78 DC8 76H, 69H, 6CH, 66H, 6FH, 78H, 2CH, 6BH \ 2C6B \ 00000010 6C7563686E69 DC8 6CH, 75H, 63H, 68H, 6EH, 69H, 6BH, 2CH \ 6B2C \ 00000018 77696E646573 DC8 77H, 69H, 6EH, 64H, 65H, 73H, 20H, 62H \ 2062 \ 00000020 61736564206F DC8 61H, 73H, 65H, 64H, 20H, 6FH, 6EH, 20H \ 6E20 \ 00000028 726576697369 DC8 72H, 65H, 76H, 69H, 73H, 69H, 6FH, 6EH \ 6F6E \ 00000030 20323035382C DC8 20H, 32H, 30H, 35H, 38H, 2CH, 20H, 6DH \ 206D \ 00000038 6F6420646174 DC8 6FH, 64H, 20H, 64H, 61H, 74H, 65H, 3AH \ 653A \ 00000040 202573206174 DC8 20H, 25H, 73H, 20H, 61H, 74H, 20H, 25H \ 2025 \ 00000048 732000 DC8 73H, 20H, 0 \ 0000004B 00 DC8 0 \ 0000004C 417567202036 DC8 "Aug 6 2008" \ 203230303800 \ 00000058 32303A35343A DC8 "20:54:58" \ 353800 \ 00000061 000000 DC8 0, 0, 0 \ 00000064 2573206D6F64 DC8 "%s model: %s sw: %s\015\012" \ 656C3A202573 \ 2073773A2025 \ 730D0A00 \ 0000007A 0000 DC8 0, 0 \ 0000007C 506C6174666F DC8 "Platform: \250LKA" \ 726D3A20A84C \ 4B4100 \ 0000008B 00 DC8 0 \ 0000008C C2F0E5ECFF20 DC8 0C2H, 0F0H, 0E5H, 0ECH, 0FFH, 20H, 0E2H, 20H \ E220 \ 00000094 EEEDEBE0E9ED DC8 0EEH, 0EDH, 0EBH, 0E0H, 0E9H, 0EDH, 3AH, 20H \ 3A20 \ 0000009C 253032643A25 DC8 25H, 30H, 32H, 64H, 3AH, 25H, 30H, 32H \ 3032 \ 000000A4 643A25303264 DC8 64H, 3AH, 25H, 30H, 32H, 64H, 20H, 0DH \ 200D \ 000000AC 0AD1E5F0E2E5 DC8 0AH, 0D1H, 0E5H, 0F0H, 0E2H, 0E5H, 0F0H, 3AH \ F03A \ 000000B4 202573200D0A DC8 20H, 25H, 73H, 20H, 0DH, 0AH, 25H, 73H \ 2573 \ 000000BC 200D0A00 DC8 20H, 0DH, 0AH, 0 \ 000000C0 CEF2EFF0E0E2 DC8 0CEH, 0F2H, 0EFH, 0F0H, 0E0H, 0E2H, 0EBH, 0E5H \ EBE5 \ 000000C8 EDEE20F1EEEE DC8 0EDH, 0EEH, 20H, 0F1H, 0EEH, 0EEH, 0E1H, 0F9H \ E1F9 \ 000000D0 E5EDE8E93A20 DC8 0E5H, 0EDH, 0E8H, 0E9H, 3AH, 20H, 25H, 64H \ 2564 \ 000000D8 200D0ACFF0E8 DC8 20H, 0DH, 0AH, 0CFH, 0F0H, 0E8H, 0EDH, 0FFH \ EDFF \ 000000E0 F2EE20F1EEEE DC8 0F2H, 0EEH, 20H, 0F1H, 0EEH, 0EEH, 0E1H, 0F9H \ E1F9 \ 000000E8 E5EDE8E93A20 DC8 0E5H, 0EDH, 0E8H, 0E9H, 3AH, 20H, 25H, 64H \ 2564 \ 000000F0 200D0A00 DC8 20H, 0DH, 0AH, 0 \ 000000F4 CEEFE5F0E0F2 DC8 "\316\357\345\360\340\362\356\360: %s \015\012" \ EEF03A202573 \ 200D0A00 \ 00000104 C7E0F0FFE420 DC8 "\307\340\360\377\344 \341\340\362\340\360\345\350: %d \357\360\356\366\345\355\362\356\342 \015\012" \ E1E0F2E0F0E5 \ E83A20256420 \ EFF0EEF6E5ED \ F2EEE2200D0A \ 00 \ 00000123 00 DC8 0 \ 00000124 547261666669 DC8 54H, 72H, 61H, 66H, 66H, 69H, 63H, 3AH \ 633A \ 0000012C 205278203A20 DC8 20H, 52H, 78H, 20H, 3AH, 20H, 25H, 64H \ 2564 \ 00000134 62205478203A DC8 62H, 20H, 54H, 78H, 20H, 3AH, 20H, 25H \ 2025 \ 0000013C 646220517565 DC8 64H, 62H, 20H, 51H, 75H, 65H, 75H, 65H \ 7565 \ 00000144 3A2025646220 DC8 3AH, 20H, 25H, 64H, 62H, 20H, 0DH, 0AH \ 0D0A \ 0000014C 54696D653A20 DC8 54H, 69H, 6DH, 65H, 3AH, 20H, 25H, 30H \ 2530 \ 00000154 32643A253032 DC8 32H, 64H, 3AH, 25H, 30H, 32H, 64H, 0DH \ 640D \ 0000015C 0A4F6E6C696E DC8 0AH, 4FH, 6EH, 6CH, 69H, 6EH, 65H, 20H \ 6520 \ 00000164 636F6E746163 DC8 63H, 6FH, 6EH, 74H, 61H, 63H, 74H, 3AH \ 743A \ 0000016C 202564205B74 DC8 20H, 25H, 64H, 20H, 5BH, 74H, 6FH, 74H \ 6F74 \ 00000174 616C3A202564 DC8 61H, 6CH, 3AH, 20H, 25H, 64H, 5DH, 20H \ 5D20 \ 0000017C 0D0A556E7265 DC8 0DH, 0AH, 55H, 6EH, 72H, 65H, 61H, 64H \ 6164 \ 00000184 206D65737361 DC8 20H, 6DH, 65H, 73H, 73H, 61H, 67H, 65H \ 6765 \ 0000018C 3A2025642F25 DC8 3AH, 20H, 25H, 64H, 2FH, 25H, 64H, 20H \ 6420 \ 00000194 00 DC8 0 \ 00000195 000000 DC8 0, 0, 0 \ 00000198 53656E64696E DC8 "Sending textinfo..." \ 672074657874 \ 696E666F2E2E \ 2E00 \ 000001AC 5F5F54455854 DC8 "__TEXTINFO" \ 494E464F00 \ 000001B7 00 DC8 0 \ 000001B8 5F5F544900 DC8 "__TI" \ 000001BD 000000 DC8 0, 0, 0 \ 000001C0 54696D653A20 DC8 "Time: %02d:%02d" \ 253032643A25 \ 30326400 \ 000001D0 53656E64696E DC8 "Sending time..." \ 672074696D65 \ 2E2E2E00 \ 000001E0 5F5F54494D45 DC8 "__TIME" \ 00 \ 000001E7 00 DC8 0 \ 000001E8 4745545F5449 DC8 "GET_TIME" \ 4D4500 \ 000001F1 000000 DC8 0, 0, 0 \ 000001F4 2573206D6F64 DC8 "%s model: %s sw: %s" \ 656C3A202573 \ 2073773A2025 \ 7300 \ 00000208 53656E64696E DC8 "Sending platform info..." \ 6720706C6174 \ 666F726D2069 \ 6E666F2E2E2E \ 00 \ 00000221 000000 DC8 0, 0, 0 \ 00000224 4745545F504C DC8 "GET_PLATFORM_INFO" \ 4154464F524D \ 5F494E464F00 \ 00000236 0000 DC8 0, 0 \ 00000238 5F5F504C4154 DC8 "__PLATFORM" \ 464F524D00 \ 00000243 00 DC8 0 \ 00000244 5F5F485700 DC8 "__HW" \ 00000249 000000 DC8 0, 0, 0 \ 0000024C C2F0E5ECFF20 DC8 "\302\360\345\354\377 \342 \356\355\353\340\351\355: %02d:%02d:%02d \012\321\345\360\342\345\360: %s" \ E220EEEDEBE0 \ E9ED3A202530 \ 32643A253032 \ 643A25303264 \ 200AD1E5F0E2 \ E5F03A202573 \ 00 \ 00000277 00 DC8 0 \ 00000278 4745545F4F4E DC8 "GET_ONLINE_TIME" \ 4C494E455F54 \ 494D4500 \ 00000288 5F5F4F4E4C49 DC8 "__ONLINE" \ 4E4500 \ 00000291 000000 DC8 0, 0, 0 \ 00000294 CEF2EFF0E0E2 DC8 "\316\362\357\360\340\342\353\345\355\356 \361\356\356\341\371\345\355\350\351: %d \012\317\360\350\355\377\362\356 \361\356\356\341\371\345\355\350\351: %d" \ EBE5EDEE20F1 \ EEEEE1F9E5ED \ E8E93A202564 \ 200ACFF0E8ED \ FFF2EE20F1EE \ EEE1F9E5EDE8 \ E93A20256400 \ 000002C4 4745545F4D53 DC8 "GET_MSG_INFO" \ 475F494E464F \ 00 \ 000002D1 000000 DC8 0, 0, 0 \ 000002D4 5F5F4D534700 DC8 "__MSG" \ 000002DA 0000 DC8 0, 0 \ 000002DC CEEFE5F0E0F2 DC8 "\316\357\345\360\340\362\356\360: %s" \ EEF03A202573 \ 00 \ 000002E9 000000 DC8 0, 0, 0 \ 000002EC 53656E64696E DC8 "Sending provider name..." \ 672070726F76 \ 69646572206E \ 616D652E2E2E \ 00 \ 00000305 000000 DC8 0, 0, 0 \ 00000308 4745545F5052 DC8 "GET_PROVIDER" \ 4F5649444552 \ 00 \ 00000315 000000 DC8 0, 0, 0 \ 00000318 5F5F50524F56 DC8 "__PROVIDER" \ 4944455200 \ 00000323 00 DC8 0 \ 00000324 2A2A2A416363 DC8 "***Access denied***" \ 657373206465 \ 6E6965642A2A \ 2A00 \ 00000338 4745545F4D4F DC8 "GET_MOD_INFO" \ 445F494E464F \ 00 \ 00000345 000000 DC8 0, 0, 0 \ 00000348 5F5F4D4F4400 DC8 "__MOD" \ 0000034E 0000 DC8 0, 0 \ 00000350 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 \ 0000036C 4745545F4241 DC8 "GET_BAT_INFO" \ 545F494E464F \ 00 \ 00000379 000000 DC8 0, 0, 0 \ 0000037C 5F5F42415400 DC8 "__BAT" \ 00000382 0000 DC8 0, 0 \ 00000384 C0E2F2EEEEF2 DC8 "\300\342\362\356\356\362\342\345\362\367\350\352: %s %s! %s %s" \ E2E5F2F7E8EA \ 3A2025732025 \ 732120257320 \ 257300 \ 0000039F 00 DC8 0 \ 000003A0 726576697369 DC8 "revision 2058, mod date: %s at %s " \ 6F6E20323035 \ 382C206D6F64 \ 20646174653A \ 202573206174 \ 2025732000 \ 000003C3 00 DC8 0 \ 000003C4 687474703A2F DC8 "http://kluchnik.jino-net.ru/naticqmod/" \ 2F6B6C756368 \ 6E696B2E6A69 \ 6E6F2D6E6574 \ 2E72752F6E61 \ 746963716D6F \ 642F00 \ 000003EB 00 DC8 0 \ 000003EC 4745545F5552 DC8 "GET_URL_INFO" \ 4C5F494E464F \ 00 \ 000003F9 000000 DC8 0, 0, 0 \ 000003FC 5F5F55524C00 DC8 "__URL" \ 00000402 0000 DC8 0, 0 \ 00000404 4175746F626F DC8 "Autobot" \ 7400 \ 0000040C 53656E64696E DC8 "Sending url info..." \ 672075726C20 \ 696E666F2E2E \ 2E00 \ 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 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 CFF0E0E200 DC8 "\317\360\340\342" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4E4154494351 DC8 "NATICQ: %d" \ 3A20256400 \ 0000000B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 43ECE0E9EBFB DC8 "C\354\340\351\353\373" \ 00 \ 00000007 00 DC8 0 \ 00000008 C220E1F3F4E5 DC8 "\302 \341\363\364\345\360" \ F000 \ 00000010 C8E720E1F3F4 DC8 "\310\347 \341\363\364\345\360\340" \ E5F0E000 \ 0000001A 0000 DC8 0, 0 \ 0000001C CAEEECE0EDE4 DC8 "\312\356\354\340\355\344\340" \ E000 \ 00000024 CEF7E8F1F2E8 DC8 "\316\367\350\361\362\350\362\374 \341\363\364\345\360" \ F2FC20E1F3F4 \ E5F000 \ 00000033 00 DC8 0 \ 00000034 D1EBE5E4F3FE DC8 "\321\353\345\344\363\376\371\350\351 \367\340\362" \ F9E8E920F7E0 \ F200 \ 00000042 0000 DC8 0, 0 \ 00000044 CFF0E5E4FBE4 DC8 "\317\360\345\344\373\344\363\371\350\351 \367\340\362" \ F3F9E8E920F7 \ E0F200 \ 00000053 00 DC8 0 \ 00000054 CAEEECE0EDE4 DC8 "\312\356\354\340\355\344\373" \ FB00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 616263646566 DC8 61H, 62H, 63H, 64H, 65H, 66H, 67H, 68H \ 6768 \ 00000008 696A6B6C6D6E DC8 69H, 6AH, 6BH, 6CH, 6DH, 6EH, 6FH, 70H \ 6F70 \ 00000010 717273747576 DC8 71H, 72H, 73H, 74H, 75H, 76H, 77H, 78H \ 7778 \ 00000018 797A41424344 DC8 79H, 7AH, 41H, 42H, 43H, 44H, 45H, 46H \ 4546 \ 00000020 4748494A4B4C DC8 47H, 48H, 49H, 4AH, 4BH, 4CH, 4DH, 4EH \ 4D4E \ 00000028 4F5051525354 DC8 4FH, 50H, 51H, 52H, 53H, 54H, 55H, 56H \ 5556 \ 00000030 5758595A3031 DC8 57H, 58H, 59H, 5AH, 30H, 31H, 32H, 33H \ 3233 \ 00000038 343536373839 DC8 34H, 35H, 36H, 37H, 38H, 39H, 24H, 2DH \ 242D \ 00000040 5F2E2B212A27 DC8 5FH, 2EH, 2BH, 21H, 2AH, 27H, 28H, 29H \ 2829 \ 00000048 2C253B3A4026 DC8 2CH, 25H, 3BH, 3AH, 40H, 26H, 3DH, 2FH \ 3D2F \ 00000050 3FE0E1E2E3E4 DC8 3FH, 0E0H, 0E1H, 0E2H, 0E3H, 0E4H, 0E5H, 0B8H \ E5B8 \ 00000058 E6E7E8E9EAEB DC8 0E6H, 0E7H, 0E8H, 0E9H, 0EAH, 0EBH, 0ECH, 0EDH \ ECED \ 00000060 EEEFF0F1F2F3 DC8 0EEH, 0EFH, 0F0H, 0F1H, 0F2H, 0F3H, 0F4H, 0F5H \ F4F5 \ 00000068 F6F7F8F9FAFB DC8 0F6H, 0F7H, 0F8H, 0F9H, 0FAH, 0FBH, 0FCH, 0FDH \ FCFD \ 00000070 FEFFC0C1C2C3 DC8 0FEH, 0FFH, 0C0H, 0C1H, 0C2H, 0C3H, 0C4H, 0C5H \ C4C5 \ 00000078 A8C6C7C8C9CA DC8 0A8H, 0C6H, 0C7H, 0C8H, 0C9H, 0CAH, 0CBH, 0CCH \ CBCC \ 00000080 CDCECFD0D1D2 DC8 0CDH, 0CEH, 0CFH, 0D0H, 0D1H, 0D2H, 0D3H, 0D4H \ D3D4 \ 00000088 D5D6D7D8D9DA DC8 0D5H, 0D6H, 0D7H, 0D8H, 0D9H, 0DAH, 0DBH, 0DCH \ DBDC \ 00000090 DDDEDF00 DC8 0DDH, 0DEH, 0DFH, 0 \ 00000094 687474703A2F DC8 "http://" \ 2F00 \ 0000009C 7777772E00 DC8 "www." \ 000000A1 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 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 CBE5E200 DC8 "\313\345\342" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2FBE1EEF000 DC8 "\302\373\341\356\360" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7E0EAF0FBF2 DC8 "\307\340\352\360\373\362\374" \ FC00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2E8E1F0E000 DC8 "\302\350\341\360\340" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7E2F3EA00 DC8 "\307\342\363\352" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 41E2F2EEE1EE DC8 "A\342\362\356\341\356\362" \ F200 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2FBE1F0E0F2 DC8 "\302\373\341\360\340\362\374" \ FC00 \ In segment DATA_C, align 1, align-sorted \ `?`: \ 00000000 00 DC8 "" \ In segment DATA_C, align 4, align-sorted \ `? 260 def_setting 48 ?_1 52 menusoftkeys 12 menu_sk 24 menu_skt 8 ? 76 maincsm_oncreate 272 maincsm_onclose 364 do_reconnect 40 CheckDoubleRun 112 checkGui 60 maincsm_onmessage 3244 addIconBar 480 minus11 4 maincsm_name_body 280 UpdateCSMname 36 SetIconBarHandler 20 main 520 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 1704 my_ed_redraw 116 edchat_ghook 564 edchat_desc 84 sk 16 CreateEditChat 1132 Quote 416 Quote2 440 GetShortInfo 168 AddCurContact 52 SendAuthReq 212 SendAuthGrant 208 OpenLogfile 228 ClearLog 240 ecmenu_ghook 20 ecmenu_ITEMS 252 ecmenu_HNDLS 36 icons 8120 sk 8 input_awaymsg_sk 24 input_awaymsg_skt 8 icon_array 108 CmdMenuHeader 32 requests6 24 ecmenu_HDR 64 ec_menu 332 AskNickAndAddContact 8 AddSmile 24 ??DataTable1 4 ??DataTable2 4 ??DataTable6 4 ??DataTable9 4 ??DataTable11 4 ??DataTable17 4 ??DataTable20 4 ??DataTable22 4 ??DataTable26 4 ??DataTable27 4 ??DataTable28 4 ??DataTable31 4 ??DataTable32 4 ??DataTable34 4 ??DataTable38 4 ??DataTable39 4 ??DataTable45 4 ??DataTable46 4 ??DataTable48 4 ??DataTable54 4 ??DataTable57 4 ??DataTable65 4 ??DataTable67 4 ??DataTable68 4 ??DataTable77 4 ??DataTable79 4 ??DataTable80 4 ??DataTable82 4 ??DataTable83 4 ??DataTable84 4 ??DataTable86 4 ??DataTable87 4 ??DataTable88 4 ??DataTable89 4 ??DataTable90 4 ??DataTable91 4 ??DataTable94 4 ??DataTable95 4 ??DataTable96 4 ??DataTable100 4 ??DataTable101 4 ??DataTable102 4 ??DataTable103 4 ??DataTable106 4 ??DataTable108 4 ??DataTable111 4 ??DataTable112 4 ??DataTable113 4 ??DataTable117 4 ??DataTable119 4 ??DataTable120 4 ??DataTable122 4 ??DataTable123 4 ??DataTable124 4 ??DataTable125 4 ??DataTable126 4 ??DataTable127 4 ??DataTable129 4 ??DataTable131 4 ??DataTable132 4 ??DataTable133 4 ??DataTable134 4 ??DataTable144 4 ??DataTable145 4 ??DataTable146 4 ??DataTable148 4 ??DataTable149 4 ??DataTable150 4 ??DataTable151 4 ??DataTable152 4 ??DataTable153 4 ??DataTable154 4 ??DataTable155 4 ??DataTable161 4 ??DataTable164 4 ??DataTable166 4 ??DataTable167 4 ??DataTable168 4 ??DataTable170 4 ??DataTable173 4 ??DataTable174 4 ??DataTable175 4 ??DataTable176 4 ??DataTable177 4 ??DataTable178 4 ??DataTable179 4 ??DataTable183 4 ??DataTable184 4 ??DataTable185 4 ??DataTable186 4 ??DataTable191 4 ??DataTable192 4 ??DataTable193 4 ??DataTable194 4 ??DataTable195 4 ??DataTable196 4 ??DataTable199 4 ??DataTable200 4 ??DataTable204 4 ??DataTable205 4 ??DataTable206 4 ??DataTable211 4 ??DataTable214 4 ??DataTable216 4 ??DataTable218 4 ??DataTable219 4 ??DataTable221 4 ??DataTable222 4 ??DataTable224 4 ??DataTable226 4 ??DataTable227 4 ??DataTable230 4 ??DataTable235 4 ??DataTable236 4 ??DataTable237 4 ??DataTable239 4 ??DataTable243 4 ??DataTable244 4 ??DataTable245 4 ??DataTable246 4 ??DataTable248 4 ??DataTable249 4 ??DataTable250 4 ??DataTable251 4 ??DataTable252 4 ??DataTable253 4 ??DataTable254 4 ??DataTable255 4 ??DataTable256 4 ??DataTable260 4 ??DataTable261 4 ??DataTable262 4 ??DataTable263 4 ??DataTable264 4 ??DataTable265 4 ??DataTable266 4 ??DataTable267 4 ??DataTable268 4 ??DataTable269 4 ??DataTable270 4 ??DataTable272 4 ??DataTable274 4 ??DataTable276 4 ??DataTable277 4 ??DataTable278 4 ??DataTable279 4 ??DataTable281 4 ??DataTable284 4 ??DataTable285 4 ??DataTable286 4 ??DataTable289 4 ??DataTable290 4 ??DataTable291 4 ??DataTable292 4 ??DataTable293 4 ??DataTable296 4 ??DataTable297 4 ??DataTable300 4 ??DataTable301 4 ??DataTable304 4 ??DataTable306 4 ??DataTable307 4 ??DataTable308 4 ??DataTable309 4 ??DataTable311 4 ??DataTable317 4 ??DataTable318 4 ??DataTable319 4 ??DataTable320 4 ??DataTable321 4 ??DataTable322 4 ??DataTable323 4 ??DataTable324 4 ? 8120 ? 8 ? 24 ? 8 ? 108 ? 32 ? 24 ? 396 ? 16 ? 3 ? 16 ? 24 ? 60 ? 104 ? 12 ? 4 ? 4 ? 4 ? 8 ? 2 ? 40 ? 12 ? 3 ? 8 ? 64 ? 12 ? 132 ? 4 ? 1056 ? 4 ? 8 ?_1 8 ? 3 ? 8 ?_1 4 ?_1 4 ? 8 ? 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 ? 4 ? 8 ? 8 ? 8 ? 8 ? 8 ? 8 ? 1 ?